From 9c762f3c92bb9d65d142919e26d23e22fbdb1fad Mon Sep 17 00:00:00 2001 From: xuesinan <1404152492@qq.com> Date: Sun, 5 Dec 2021 19:58:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/tall/center/Global.vue | 6 ++ src/components/tall/center/RegularTask.vue | 6 ++ src/components/tall/left/Projects.vue | 55 ++++++++++++--- .../tall/task/AssignmentExperiment.vue | 26 ++++++- .../tall/task/AssignmentSubject.vue | 38 +++++++--- src/components/tall/task/Conclusion.vue | 12 +++- src/components/tall/task/ExperimentalCode.vue | 11 ++- src/components/tall/task/ExperimentalData.vue | 11 ++- .../tall/task/InterimInspection.vue | 12 +++- src/components/tall/task/LabReport.vue | 12 +++- src/components/tall/task/PlanAssignment.vue | 69 +++++++++++++------ src/components/tall/task/Procedure.vue | 12 +++- src/components/tall/task/PublishPatent.vue | 31 ++++++++- src/components/tall/task/SubConclusion.vue | 12 +++- .../tall/task/SubInterimInspection.vue | 12 +++- src/components/tall/task/SubResult.vue | 12 +++- src/store/tall/layout/mutations.js | 24 +++++++ src/store/tall/layout/state.js | 6 ++ 18 files changed, 311 insertions(+), 56 deletions(-) diff --git a/src/components/tall/center/Global.vue b/src/components/tall/center/Global.vue index d8046d9..ad8256c 100644 --- a/src/components/tall/center/Global.vue +++ b/src/components/tall/center/Global.vue @@ -27,6 +27,12 @@ if (sessionPermanents) { store.commit('task/setPermanents', arr); } +if (project.value) { + if (roleId.value) { + getPermanentData(roleId.value); // 根据角色查找永久的日常任务 + } +} + watch([project, roleId], async () => { if (roleId.value) { await getPermanentData(roleId.value); // 根据角色查找永久的日常任务 diff --git a/src/components/tall/center/RegularTask.vue b/src/components/tall/center/RegularTask.vue index 4d39290..be3a7b1 100644 --- a/src/components/tall/center/RegularTask.vue +++ b/src/components/tall/center/RegularTask.vue @@ -61,6 +61,12 @@ if (sessionTasks) { store.commit('task/setRegularTasks', arr); } +if (project.value) { + if (roleId.value) { + getTasks({ roleId: roleId.value }); // 根据角色查找定期任务 + } +} + watch([project, roleId, refreshProjects], async () => { if (roleId.value) { await getTasks({ roleId: roleId.value }); // 根据角色查找定期任务 diff --git a/src/components/tall/left/Projects.vue b/src/components/tall/left/Projects.vue index d98a1ee..05b607d 100644 --- a/src/components/tall/left/Projects.vue +++ b/src/components/tall/left/Projects.vue @@ -21,7 +21,7 @@
-
+
@@ -43,7 +43,7 @@ class="three-level h-70 cursor-pointer flex items-center" v-for="(thirdItem, thirdIndex) in sonItem.sonProjectList" :key="thirdIndex" - @click="toDetail(thirdItem)" + @click="toDetail(thirdItem, sonItem, item)" >
@@ -92,10 +92,32 @@ const endTime = computed(() => store.state.layout.endTime); // 当前选择时 const refreshProjects = computed(() => store.state.layout.refreshProjects); // 刷新项目列表 -// const projectList = ref([]); +// 项目时间缓存 +const planStartTime = sessionStorage.getItem('planStartTime'); +const planEndTime = sessionStorage.getItem('planEndTime'); +// 子课题时间缓存 +const subStartTime = sessionStorage.getItem('subStartTime'); +const subEndTime = sessionStorage.getItem('subEndTime'); +// 实验时间缓存 +const expreStartTime = sessionStorage.getItem('expreStartTime'); +const expreEndTime = sessionStorage.getItem('expreEndTime'); + +if (planStartTime) { + store.commit('layout/setFirPlanTime', { startTime: planStartTime, endTime: planEndTime }); +} + +if (subStartTime) { + store.commit('layout/setFirPlanTime', { startTime: subStartTime, endTime: subEndTime }); +} + +if (expreStartTime) { + store.commit('layout/setFirPlanTime', { startTime: expreStartTime, endTime: expreEndTime }); +} -// 如果有缓存,则将缓存信息放到store中,一般用于页面刷新 if (sessionProject) { + // const projectList = ref([]); + + // 如果有缓存,则将缓存信息放到store中,一般用于页面刷新 if (!projectInfo.value.id) { const info = JSON.parse(sessionProject); store.commit('projects/setProject', info); @@ -111,12 +133,12 @@ if (!startTime.value) { store.commit('layout/setSelectTime', data); } +getProjectsList(); + watch([startTime, endTime, refreshProjects], () => { getProjectsList(); }); -getProjectsList(); - // 点击操作面试显示隐藏 const showActionCard = item => { visible.value = true; @@ -166,13 +188,13 @@ async function getProjectsList() { } } -function toDetail(data) { - data.show = true; +function toDetail(item, sec, fir) { + item.show = true; const obj = { - id: data.id, - name: data.name, - url: data.url, + id: item.id, + name: item.name, + url: item.url, }; // projectList.value.forEach(item => { @@ -202,6 +224,17 @@ function toDetail(data) { // } // }); + if (sec && fir) { + store.commit('layout/setFirPlanTime', { startTime: fir.startTime, endTime: fir.endTime }); + store.commit('layout/setSecPlanTime', { startTime: sec.startTime, endTime: sec.endTime }); + store.commit('layout/setThirdPlanTime', { startTime: item.startTime, endTime: item.endTime }); + } else if (sec) { + store.commit('layout/setFirPlanTime', { startTime: sec.startTime, endTime: sec.endTime }); + store.commit('layout/setSecPlanTime', { startTime: item.startTime, endTime: item.endTime }); + } else { + store.commit('layout/setFirPlanTime', { startTime: item.startTime, endTime: item.endTime }); + } + // store.commit('projects/setProjects', projectList.value); store.commit('projects/setProject', obj); store.commit('task/setTaskDetail', null); diff --git a/src/components/tall/task/AssignmentExperiment.vue b/src/components/tall/task/AssignmentExperiment.vue index f1d8675..1609d28 100644 --- a/src/components/tall/task/AssignmentExperiment.vue +++ b/src/components/tall/task/AssignmentExperiment.vue @@ -57,6 +57,10 @@ const projectId = computed(() => store.getters['projects/projectId']); const options = ref([]); const experimentationId = computed(() => store.state.task.experimentationId); // 子课题ID +// 课题起止时间 +const subStartTime = computed(() => store.state.layout.subStartTime); +const subEndTime = computed(() => store.state.layout.subEndTime); + if (experimentationId.value) { getSubProject(experimentationId.value); } @@ -96,8 +100,20 @@ const onSubmit = () => { } }); + 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 }; createExperiment(params); + store.commit('layout/setThirdPlanTime', { startTime: assignExperFormData.value.startTime, endTime: assignExperFormData.value.endTime }); + getSubProject(experimentationId.value); }; @@ -130,9 +146,13 @@ async function getSubProject(id) { store.commit('layout/setRefreshProjects'); if (data) { - const start = dayjs(Number(data.startTime)); - const end = dayjs(Number(data.endTime)); - data.date = [start, end]; + data.date = []; + if (data.startTime) { + const start = dayjs(Number(data.startTime)); + const end = dayjs(Number(data.endTime)); + data.date = [start, end]; + } + data.projectId = projectId.value; assignExperFormData.value = data; } else { diff --git a/src/components/tall/task/AssignmentSubject.vue b/src/components/tall/task/AssignmentSubject.vue index ae2a360..bd92dea 100644 --- a/src/components/tall/task/AssignmentSubject.vue +++ b/src/components/tall/task/AssignmentSubject.vue @@ -81,7 +81,7 @@ - 上传计划任务书 + 确定
@@ -102,6 +102,10 @@ const projectId = computed(() => store.getters['projects/projectId']); // 项目 const options = ref([]); const detailId = computed(() => store.state.task.detailId); // 子课题ID +// 项目起止时间 +const planStartTime = computed(() => store.state.layout.planStartTime); +const planEndTime = computed(() => store.state.layout.planEndTime); + const topicSubFormData = ref({ projectId: projectId.value, id: detailId.value, @@ -194,8 +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 = '子课题结束时间不能大于项目终止时间'; + } + stageList.value.forEach(item => { if (item.date.length > 0) { item.date.forEach((val, key) => { @@ -207,6 +226,14 @@ const onSubmit = async () => { }); } + if (item.startTime < topicSubFormData.value.startTime) { + msgText = '子课题进度安排开始时间不能小于子课题开始时间'; + } + + if (item.endTime > topicSubFormData.value.endTime) { + msgText = '子课题进度安排结束时间不能大于子课题结束时间'; + } + if (item.checkContent.indexOf('1') > -1) { if (!item.thesis) msgText = '请填写论文数量'; } @@ -240,17 +267,10 @@ const onSubmit = async () => { topicSubFormData.value.stageDtoList = [...stageList.value]; - topicSubFormData.value.date.forEach((item, index) => { - if (index === 0) { - topicSubFormData.value.startTime = dayjs(item).format('x'); - } else { - topicSubFormData.value.endTime = dayjs(item).format('x'); - } - }); - const params = { param: topicSubFormData.value }; await saveSubExperiment(params); store.commit('layout/setRefreshProjects'); + store.commit('layout/setSecPlanTime', { startTime: topicSubFormData.value.startTime, endTime: topicSubFormData.value.endTime }); if (detailId.value) { getSubProject(detailId.value); diff --git a/src/components/tall/task/Conclusion.vue b/src/components/tall/task/Conclusion.vue index 2fe98c9..e4e76ca 100644 --- a/src/components/tall/task/Conclusion.vue +++ b/src/components/tall/task/Conclusion.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 项目起止时间 +const planStartTime = computed(() => store.state.layout.planStartTime); +const planEndTime = computed(() => store.state.layout.planEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < planStartTime.value || time > planEndTime.value) { + message.info('中期检查时间必须在项目起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/ExperimentalCode.vue b/src/components/tall/task/ExperimentalCode.vue index c0c936b..bca0260 100644 --- a/src/components/tall/task/ExperimentalCode.vue +++ b/src/components/tall/task/ExperimentalCode.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -78,6 +79,9 @@ const code = computed(() => store.state.task.label); // code const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 实验起止时间 +const expreStartTime = computed(() => store.state.layout.expreStartTime); +const expreEndTime = computed(() => store.state.layout.expreEndTime); getDataByCode(); @@ -139,7 +143,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < expreStartTime.value || time > expreEndTime.value) { + message.info('实验日期必须在实验起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/ExperimentalData.vue b/src/components/tall/task/ExperimentalData.vue index c0c936b..bca0260 100644 --- a/src/components/tall/task/ExperimentalData.vue +++ b/src/components/tall/task/ExperimentalData.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -78,6 +79,9 @@ const code = computed(() => store.state.task.label); // code const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 实验起止时间 +const expreStartTime = computed(() => store.state.layout.expreStartTime); +const expreEndTime = computed(() => store.state.layout.expreEndTime); getDataByCode(); @@ -139,7 +143,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < expreStartTime.value || time > expreEndTime.value) { + message.info('实验日期必须在实验起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/InterimInspection.vue b/src/components/tall/task/InterimInspection.vue index e118a42..1fd3c1d 100644 --- a/src/components/tall/task/InterimInspection.vue +++ b/src/components/tall/task/InterimInspection.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 项目起止时间 +const planStartTime = computed(() => store.state.layout.planStartTime); +const planEndTime = computed(() => store.state.layout.planEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < planStartTime.value || time > planEndTime.value) { + message.info('中期检查时间必须在项目起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/LabReport.vue b/src/components/tall/task/LabReport.vue index c0c936b..76380b7 100644 --- a/src/components/tall/task/LabReport.vue +++ b/src/components/tall/task/LabReport.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 实验起止时间 +const expreStartTime = computed(() => store.state.layout.expreStartTime); +const expreEndTime = computed(() => store.state.layout.expreEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < expreStartTime.value || time > expreEndTime.value) { + message.info('实验日期必须在实验起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/PlanAssignment.vue b/src/components/tall/task/PlanAssignment.vue index e96d110..bcc7eee 100644 --- a/src/components/tall/task/PlanAssignment.vue +++ b/src/components/tall/task/PlanAssignment.vue @@ -237,19 +237,28 @@ async function checkPlanTask() { const params = { param: { projectId: projectId.value } }; const data = await getPlanTask(params); if (data.checkContent) data.checkContentList = data.checkContent.split(','); - const start = dayjs(Number(data.startTime)); - const end = dayjs(Number(data.endTime)); - const arr = [start, end]; - data.date = arr; + + store.commit('layout/setFirPlanTime', { startTime: data.startTime, endTime: data.endTime }); + + data.date = []; + if (data.startTime) { + const start = dayjs(Number(data.startTime)); + const end = dayjs(Number(data.endTime)); + data.date = [start, end]; + } + data.projectId = data.id; topicMeetFormData.value = data; planTaskDefinedList.value = data.planTaskDefinedList; data.planTaskStageList.forEach(item => { - const planStart = dayjs(Number(item.stageStartTime)); - const planEnd = dayjs(Number(item.stageEndTime)); - item.date = [planStart, planEnd]; + item.date = []; + if (item.stageStartTime) { + const planStart = dayjs(Number(item.stageStartTime)); + const planEnd = dayjs(Number(item.stageEndTime)); + item.date = [planStart, planEnd]; + } }); planTaskStageList.value = data.planTaskStageList; @@ -314,6 +323,16 @@ const onSubmit = async () => { topicMeetFormData.value.fileList.push(obj); }); + if (topicMeetFormData.value.date) { + topicMeetFormData.value.date.forEach((item, index) => { + if (index === 0) { + topicMeetFormData.value.startTime = dayjs(item).format('x'); + } else { + topicMeetFormData.value.endTime = dayjs(item).format('x'); + } + }); + } + topicMeetFormData.value.planTaskStageList = []; planTaskStageList.value.forEach(item => { const obj = { @@ -321,32 +340,38 @@ const onSubmit = async () => { stageEndTime: '', remark: item.remark, }; - item.date.forEach((val, key) => { - if (key === 0) { - obj.stageStartTime = dayjs(val).format('x'); - } else { - obj.stageEndTime = dayjs(val).format('x'); - } - }); - topicMeetFormData.value.planTaskStageList.push(obj); - }); + if (item.date.length > 0) { + item.date.forEach((val, key) => { + if (key === 0) { + obj.stageStartTime = dayjs(val).format('x'); + } else { + obj.stageEndTime = dayjs(val).format('x'); + } + }); + } - topicMeetFormData.value.planTaskDefinedList = planTaskDefinedList.value; + if (obj.stageStartTime < topicMeetFormData.value.startTime) { + message.info('阶段任务开始时间不能小于项目起始时间'); + return false; + } - topicMeetFormData.value.date.forEach((item, index) => { - if (index === 0) { - topicMeetFormData.value.startTime = dayjs(item).format('x'); - } else { - topicMeetFormData.value.endTime = dayjs(item).format('x'); + if (obj.stageEndTime < topicMeetFormData.value.endTime) { + message.info('阶段任务结束时间不能小于项目终止时间'); + return false; } + + topicMeetFormData.value.planTaskStageList.push(obj); }); + topicMeetFormData.value.planTaskDefinedList = planTaskDefinedList.value; + const params = { param: topicMeetFormData.value }; await savePlanTask(params); projectInfo.value.name = topicMeetFormData.value.name; store.commit('projects/setProject', projectInfo.value); + store.commit('layout/setRefreshProjects'); checkPlanTask(); }; diff --git a/src/components/tall/task/Procedure.vue b/src/components/tall/task/Procedure.vue index c0c936b..76380b7 100644 --- a/src/components/tall/task/Procedure.vue +++ b/src/components/tall/task/Procedure.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 实验起止时间 +const expreStartTime = computed(() => store.state.layout.expreStartTime); +const expreEndTime = computed(() => store.state.layout.expreEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < expreStartTime.value || time > expreEndTime.value) { + message.info('实验日期必须在实验起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/PublishPatent.vue b/src/components/tall/task/PublishPatent.vue index 6744a36..6e3cfa3 100644 --- a/src/components/tall/task/PublishPatent.vue +++ b/src/components/tall/task/PublishPatent.vue @@ -103,6 +103,7 @@ watch(intellectualId, () => { // 单选框选中 const handleChangeRadio = value => { + const selectedName = value.target.value; const selectedId = value.target.id; let addQuestion = []; const getQuestions = questionList.value; @@ -120,10 +121,36 @@ const handleChangeRadio = value => { }); addQuestion.forEach((item, index) => { - const addIndex = selectedIndex + index + 1; - getQuestions.splice(addIndex, 0, item); + let flag = false; + getQuestions.forEach(v => { + if (v.question === '授权日期') { + flag = true; + } + }); + + if (!flag) { + if (selectedName === '授权') { + const addIndex = selectedIndex + index + 1; + getQuestions.splice(addIndex, 0, item); + } + } }); + if (selectedName === '申请') { + let flag = false; + let delIndex = -1; + getQuestions.forEach((v, k) => { + if (v.question === '授权日期') { + flag = true; + delIndex = k; + } + }); + + if (flag) { + getQuestions.splice(delIndex, 1); + } + } + questionList.value = getQuestions; }; diff --git a/src/components/tall/task/SubConclusion.vue b/src/components/tall/task/SubConclusion.vue index 4d20d66..6ddf516 100644 --- a/src/components/tall/task/SubConclusion.vue +++ b/src/components/tall/task/SubConclusion.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 课题起止时间 +const subStartTime = computed(() => store.state.layout.subStartTime); +const subEndTime = computed(() => store.state.layout.subEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < subStartTime.value || time > subEndTime.value) { + message.info('中期检查时间必须在子课题起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/SubInterimInspection.vue b/src/components/tall/task/SubInterimInspection.vue index e118a42..f4ba9fb 100644 --- a/src/components/tall/task/SubInterimInspection.vue +++ b/src/components/tall/task/SubInterimInspection.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 课题起止时间 +const subStartTime = computed(() => store.state.layout.subStartTime); +const subEndTime = computed(() => store.state.layout.subEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < subStartTime.value || time > subEndTime.value) { + message.info('中期检查时间必须在子课题起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/components/tall/task/SubResult.vue b/src/components/tall/task/SubResult.vue index ec3a2f9..6f1ada0 100644 --- a/src/components/tall/task/SubResult.vue +++ b/src/components/tall/task/SubResult.vue @@ -65,6 +65,7 @@ import { useStore } from 'vuex'; import dayjs from 'dayjs'; import { InboxOutlined } from '@ant-design/icons-vue'; import { uploadImg } from 'apis'; +import { message } from 'ant-design-vue'; const store = useStore(); @@ -79,6 +80,10 @@ const questionList = ref([]); // 当前操作的问题下标 const currIndex = ref(null); +// 课题起止时间 +const subStartTime = computed(() => store.state.layout.subStartTime); +const subEndTime = computed(() => store.state.layout.subEndTime); + getDataByCode(); const beforeUpload = index => { @@ -139,7 +144,12 @@ const onSubmit = async () => { } if (item.type === 6 && item.date) { - obj.answerList.push(dayjs(item.date).format('x')); + const time = dayjs(item.date).format('x'); + if (time < subStartTime.value || time > subEndTime.value) { + message.info('中期检查时间必须在子课题起止时间之内'); + return false; + } + obj.answerList.push(time); } if (item.type === 7) { diff --git a/src/store/tall/layout/mutations.js b/src/store/tall/layout/mutations.js index 0183360..b2aa1cf 100644 --- a/src/store/tall/layout/mutations.js +++ b/src/store/tall/layout/mutations.js @@ -24,6 +24,30 @@ const mutations = { setRefreshProjects(state) { state.refreshProjects = !state.refreshProjects; }, + + // 设置课题开始时间-结束时间 + setFirPlanTime(state, data) { + state.planStartTime = data.startTime; + state.planEndTime = data.endTime; + sessionStorage.setItem('planStartTime', data.startTime); + sessionStorage.setItem('planEndTime', data.endTime); + }, + + // 设置子课题开始时间-结束时间 + setSecPlanTime(state, data) { + state.subStartTime = data.startTime; + state.subEndTime = data.endTime; + sessionStorage.setItem('subStartTime', data.startTime); + sessionStorage.setItem('subEndTime', data.endTime); + }, + + // 设置实验开始时间-结束时间 + setThirdPlanTime(state, data) { + state.expreStartTime = data.startTime; + state.expreEndTime = data.endTime; + sessionStorage.setItem('expreStartTime', data.startTime); + sessionStorage.setItem('expreEndTime', data.endTime); + }, }; export default mutations; diff --git a/src/store/tall/layout/state.js b/src/store/tall/layout/state.js index 869bc53..813c502 100644 --- a/src/store/tall/layout/state.js +++ b/src/store/tall/layout/state.js @@ -7,6 +7,12 @@ const state = { startTime: '', endTime: '', refreshProjects: false, // 刷新项目 + planStartTime: '', // 课题开始时间 + planEndTime: '', // 课题结束时间 + subStartTime: '', // 子课题开始时间 + subEndTime: '', // 子课题结束时间 + expreStartTime: '', // 实验开始时间 + expreEndTime: '', // 实验结束时间 }; export default state;