Browse Source

feat: 切换项目详情页不及时更新

master
xuesinan 4 years ago
parent
commit
f0a6e3402a
  1. 335
      src/components/tall/center/Index.vue
  2. 31
      src/components/tall/task/AssignmentExperiment.vue
  3. 41
      src/components/tall/task/AssignmentSubject.vue
  4. 17
      src/components/tall/task/PlanAssignment.vue

335
src/components/tall/center/Index.vue

@ -10,26 +10,241 @@
</div>
<!-- 角色 -->
<Roles />
<!-- <Roles /> -->
<div class="role-list flex items-center">
<div class="role-box relative" v-for="(item, index) in roles" :key="index">
<div class="role-name" :class="{ mine: roleId === item.id }">{{ item.name }}</div>
<div class="line-box absolute flex justify-center" v-if="roleId === item.id"><div class="line"></div></div>
</div>
</div>
<!-- 日常任务 -->
<Global />
<!-- <Global /> -->
<div class="global">
<div class="global-box" v-if="permanents && permanents.length > 0">
<div class="global-task cursor-pointer" v-for="(item, index) in permanents" :key="index" @click="toGlobalDetail(item)">
<template v-for="v in item.plugins">
<template v-if="v[0].pluginId == 1">{{ item.name }}</template>
</template>
</div>
</div>
</div>
<!-- 定期任务 -->
<RegularTask />
<!-- <RegularTask /> -->
<div class="task-list" :style="{ height: 'calc(100vh - 160px - (' + globalHeight + 'px))' }">
<div class="task-box" v-for="(item, index) in regularTasks" :key="index">
<div class="task-time flex items-center justify-between">
<div class="flex items-center">
<PlayCircleOutlined style="font-size: 23px; color: #999999" />
<span>{{ dayjs(item.planStart).format('D日 HH:mm') }}</span>
</div>
<div class="task-action"></div>
</div>
<div class="task-info">
<div>
<div class="task-card">
<div class="task-name cursor-pointer" @click="toDetail(item)">
<template v-for="v in item.plugins">
<template v-if="v[0].pluginId == 1">{{ item.name }}</template>
</template>
</div>
<div class="task-con" v-if="item.sonList && item.sonList.length > 0">
<div v-for="(val, key) in item.sonList" :key="key">
<!-- <a-checkbox>{{ val.name }}</a-checkbox> -->
<span class="son-task-name cursor-pointer" @click.stop="toSonDetail(item, val.detailId)">{{ val.name }}</span>
</div>
</div>
<!-- <div class="open-icon" v-if="item.sonList" @click="openCard">
<img />
</div> -->
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { computed } from 'vue';
import { computed, watch, reactive } from 'vue';
import { useStore } from 'vuex';
import { ReloadOutlined, MoreOutlined } from '@ant-design/icons-vue';
import Roles from './Roles.vue'; //
import Global from './Global.vue'; //
import RegularTask from './RegularTask.vue'; //
import dayjs from 'dayjs';
import { ReloadOutlined, MoreOutlined, PlayCircleOutlined } from '@ant-design/icons-vue';
// import Roles from './Roles.vue'; //
import { message } from 'ant-design-vue';
import { findShowRole, getPermanent, getRegularTask, findSonTask } from 'apis';
// import Global from './Global.vue'; //
// import RegularTask from './RegularTask.vue'; //
const store = useStore();
const project = computed(() => store.state.projects.project); //
const roleId = computed(() => store.state.role.roleId); //
const sessionRoles = sessionStorage.getItem('roles'); //
const roles = computed(() => store.state.role.visibleRoles); //
const permanents = computed(() => store.state.task.permanents); //
const sessionPermanents = sessionStorage.getItem('permanents'); //
const globalHeight = computed(() => store.state.task.globalHeight); //
const sessionGlobalHeight = sessionStorage.getItem('globalHeight'); //
const regularTasks = computed(() => store.state.task.regularTasks); //
const taskObj = reactive({ tasks: [] }); //
const sessionTasks = sessionStorage.getItem('regularTasks'); //
const refreshProjects = computed(() => store.state.layout.refreshProjects); //
if (sessionRoles) {
const roleArr = JSON.parse(sessionRoles);
store.commit('role/setVisibleRoles', roleArr);
setInitialRoleId(roleArr);
}
if (sessionPermanents) {
const arr = JSON.parse(sessionPermanents);
store.commit('task/setPermanents', arr);
}
if (sessionGlobalHeight) {
store.commit('task/setGlobalHeight', sessionGlobalHeight);
}
if (sessionTasks) {
const arr = JSON.parse(sessionTasks);
store.commit('task/setRegularTasks', arr);
}
init();
watch(project, async () => {
if (project.value.id) {
await getRoles(project.value.id); // id
await getPermanentData(roleId.value); //
await getTasks({ roleId: roleId.value }); //
}
});
watch(refreshProjects, async () => {
if (roleId.value) {
await getTasks({ roleId: roleId.value }); //
}
});
//
async function init() {
if (project.value) {
await getRoles(project.value.id); // id
await getPermanentData(roleId.value); // ;
await getTasks({ roleId: roleId.value }); //
}
}
/** id
* @param {string} projectId
* @param {object} params 提交的参数
*/
async function getRoles(params) {
try {
const data = await findShowRole(params);
store.commit('role/setInvisibleRoles', data ? data.invisibleList : []);
store.commit('role/setVisibleRoles', data ? data.visibleList : []);
setInitialRoleId(data ? data.visibleList : []);
} catch (error) {
message.info(error);
throw new Error(error);
}
}
//
function setInitialRoleId(visibleList) {
if (!visibleList || !visibleList.length) return;
const index = visibleList.findIndex(item => +item.mine === 1);
const currentRole = index > 0 ? visibleList[index] : visibleList[0];
const currentRoleId = currentRole ? currentRole.id : '';
store.commit('role/setRoleId', currentRoleId);
}
//
async function getPermanentData(id) {
const params = { param: { roleId: id } };
try {
const data = await getPermanent(params);
store.commit('task/setPermanents', data);
const height = data.length * 38 + 26;
store.commit('task/setGlobalHeight', height);
} catch (error) {
message.info(error);
throw new Error(error);
}
}
//
function toGlobalDetail(item) {
store.commit('task/setTaskDetail', item);
store.commit('layout/setListStatus', false);
store.commit('task/setIntellectualId', '');
store.commit('task/setMeetId', '');
store.commit('task/setSubMeetId', '');
}
/**
* 根据时间基准点和角色查找定期任务
* @param {object} query
* @param {string} query.roleId 角色id
* @param {string} query.timeNode 时间基准点 默认当前
* @param {string} query.timeUnit 时间颗粒度 默认天
* @param {string} query.queryNum 查找颗粒度数量 默认3个
* @param {number} query.queryType 0向上查找 1向下查找(默认) 下查包含自己上查不包含
*/
async function getTasks(query) {
const params = { param: query };
try {
const data = await getRegularTask(params);
taskObj.tasks = data;
data.forEach(item => {
item.plugins.forEach(val => {
if (Number(val[0].pluginId) === 6) {
getSonTask(item.detailId);
}
});
});
store.commit('task/setRegularTasks', data);
} catch (error) {
message.info(error);
throw new Error(error);
}
}
// id
async function getSonTask(id) {
const params = { param: { detailId: id } };
try {
const data = await findSonTask(params);
taskObj.tasks.forEach(item => {
if (item.detailId === id) {
item.sonList = data;
}
});
store.commit('task/setRegularTasks', taskObj.tasks);
} catch (error) {
message.info(error);
throw new Error(error);
}
}
function toDetail(item) {
store.commit('task/setTaskDetail', item);
store.commit('task/sonDetailId', '');
store.commit('task/sonExperimentationId', '');
}
function toSonDetail(item, id) {
store.commit('task/setTaskDetail', item);
store.commit('task/sonDetailId', id);
store.commit('task/sonExperimentationId', id);
}
</script>
<style scoped>
@ -48,4 +263,108 @@ const project = computed(() => store.state.projects.project); // 项目信息
margin-left: 16px;
cursor: pointer;
}
.role-list {
padding: 0 16px;
height: 36px;
border-bottom: 1px solid #cccccc;
}
.role-box {
margin-right: 16px;
height: 36px;
}
.role-name {
font-size: 14px;
line-height: 36px;
color: #333333;
}
.role-name.mine {
font-weight: 600;
color: #1890ff;
}
.role-box .line-box {
width: 100%;
bottom: 0;
}
.line-box .line {
width: 16px;
height: 2px;
background-color: #1890ff;
}
.global {
padding: 16px;
}
.global-box {
border: 1px solid #cccccc;
border-radius: 10px;
padding: 12px 16px;
}
.global-task {
padding: 8px 0;
line-height: 22px;
}
.task-list {
padding: 0 16px 50px;
overflow-y: auto;
}
.task-time {
height: 32px;
}
.task-time .anticon {
margin-right: 16px;
}
.task-time span {
font-size: 14px;
color: #595959;
}
.task-info {
margin: 8px 0;
padding-left: 11px;
}
.task-info > div {
padding-left: 27px;
border-left: 1px solid #d2d2d2;
}
.task-info .task-card {
padding: 16px;
border-radius: 8px;
-moz-box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.12);
-webkit-box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.12);
box-shadow: 0px 3px 6px 0px rgba(0, 0, 0, 0.12);
}
.task-con {
margin-top: 16px;
padding-left: 16px;
}
.task-con > div {
height: 30px;
}
:deep(.ant-checkbox + span) {
color: #607d8b;
}
.son-task-name {
color: #607d8b;
}
.task-list::-webkit-scrollbar {
width: 0 !important;
}
</style>

31
src/components/tall/task/AssignmentExperiment.vue

@ -92,22 +92,23 @@ const filterOption = (input, option) => {
};
const onSubmit = () => {
assignExperFormData.value.date.forEach((item, index) => {
if (index === 0) {
assignExperFormData.value.startTime = dayjs(item).format('x');
} else {
assignExperFormData.value.endTime = dayjs(item).format('x');
}
});
if (assignExperFormData.value.startTime < subStartTime.value) {
message.info('实验开始时间不能小于子课题开始时间');
return false;
}
if (assignExperFormData.value.date.length > 0) {
assignExperFormData.value.date.forEach((item, index) => {
if (index === 0) {
assignExperFormData.value.startTime = dayjs(item).format('x');
} else {
assignExperFormData.value.endTime = dayjs(item).format('x');
}
});
if (assignExperFormData.value.endTime > subEndTime.value) {
message.info('实验结束时间不能小于子课题结束时间');
return false;
if (assignExperFormData.value.startTime < subStartTime.value) {
message.info('实验开始时间不能小于子课题开始时间');
return false;
}
if (assignExperFormData.value.endTime > subEndTime.value) {
message.info('实验结束时间不能小于子课题结束时间');
return false;
}
}
const params = { param: assignExperFormData.value };

41
src/components/tall/task/AssignmentSubject.vue

@ -198,21 +198,23 @@ async function getList(name) {
}
const onSubmit = async () => {
topicSubFormData.value.date.forEach((item, index) => {
if (index === 0) {
topicSubFormData.value.startTime = dayjs(item).format('x');
} else {
topicSubFormData.value.endTime = dayjs(item).format('x');
}
});
let msgText = '';
if (topicSubFormData.value.startTime < planStartTime.value) {
msgText = '子课题开始时间不能小于项目起始时间';
}
if (topicSubFormData.value.endTime > planEndTime.value) {
msgText = '子课题结束时间不能大于项目终止时间';
if (topicSubFormData.value.date) {
topicSubFormData.value.date.forEach((item, index) => {
if (index === 0) {
topicSubFormData.value.startTime = dayjs(item).format('x');
} else {
topicSubFormData.value.endTime = dayjs(item).format('x');
}
});
if (topicSubFormData.value.startTime < planStartTime.value) {
msgText = '子课题开始时间不能小于项目起始时间';
}
if (topicSubFormData.value.endTime > planEndTime.value) {
msgText = '子课题结束时间不能大于项目终止时间';
}
}
stageList.value.forEach(item => {
@ -224,14 +226,13 @@ const onSubmit = async () => {
item.endTime = dayjs(val).format('x');
}
});
}
if (item.startTime < topicSubFormData.value.startTime) {
msgText = '子课题进度安排开始时间不能小于子课题开始时间';
}
if (item.endTime > topicSubFormData.value.endTime) {
msgText = '子课题进度安排结束时间不能大于子课题结束时间';
if (item.startTime < topicSubFormData.value.startTime) {
msgText = '子课题进度安排开始时间不能小于子课题开始时间';
}
if (item.endTime > topicSubFormData.value.endTime) {
msgText = '子课题进度安排结束时间不能大于子课题结束时间';
}
}
if (item.checkContent.indexOf('1') > -1) {

17
src/components/tall/task/PlanAssignment.vue

@ -349,16 +349,15 @@ const onSubmit = async () => {
obj.stageEndTime = dayjs(val).format('x');
}
});
}
if (obj.stageStartTime < topicMeetFormData.value.startTime) {
message.info('阶段任务开始时间不能小于项目起始时间');
return false;
}
if (obj.stageEndTime < topicMeetFormData.value.endTime) {
message.info('阶段任务结束时间不能小于项目终止时间');
return false;
if (obj.stageStartTime < topicMeetFormData.value.startTime) {
message.info('阶段任务开始时间不能小于项目起始时间');
return false;
}
if (obj.stageEndTime < topicMeetFormData.value.endTime) {
message.info('阶段任务结束时间不能小于项目终止时间');
return false;
}
}
topicMeetFormData.value.planTaskStageList.push(obj);

Loading…
Cancel
Save