Browse Source

feat: 时间范围判断

master
xuesinan 4 years ago
parent
commit
9c762f3c92
  1. 6
      src/components/tall/center/Global.vue
  2. 6
      src/components/tall/center/RegularTask.vue
  3. 55
      src/components/tall/left/Projects.vue
  4. 26
      src/components/tall/task/AssignmentExperiment.vue
  5. 38
      src/components/tall/task/AssignmentSubject.vue
  6. 12
      src/components/tall/task/Conclusion.vue
  7. 11
      src/components/tall/task/ExperimentalCode.vue
  8. 11
      src/components/tall/task/ExperimentalData.vue
  9. 12
      src/components/tall/task/InterimInspection.vue
  10. 12
      src/components/tall/task/LabReport.vue
  11. 69
      src/components/tall/task/PlanAssignment.vue
  12. 12
      src/components/tall/task/Procedure.vue
  13. 31
      src/components/tall/task/PublishPatent.vue
  14. 12
      src/components/tall/task/SubConclusion.vue
  15. 12
      src/components/tall/task/SubInterimInspection.vue
  16. 12
      src/components/tall/task/SubResult.vue
  17. 24
      src/store/tall/layout/mutations.js
  18. 6
      src/store/tall/layout/state.js

6
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); //

6
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 }); //

55
src/components/tall/left/Projects.vue

@ -21,7 +21,7 @@
<div class="two-box" v-if="item.show">
<div class="two-flex" v-for="(sonItem, sonIndex) in item.sonProjectList" :key="sonIndex">
<div class="two-level h-70 cursor-pointer flex items-center" @click="toDetail(sonItem)">
<div class="two-level h-70 cursor-pointer flex items-center" @click="toDetail(sonItem, item)">
<div class="icon" @click.stop="showActionCard(sonItem)"><img src="https://www.tall.wiki/staticrec/drag.svg" /></div>
<div class="detail">
<div class="name-box flex items-center">
@ -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)"
>
<div class="icon" @click.stop="showActionCard(thirdItem)"><img src="https://www.tall.wiki/staticrec/drag.svg" /></div>
<div class="detail">
@ -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);

26
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 {

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

@ -81,7 +81,7 @@
</a-form-item>
<a-form-item class="text-right">
<a-button type="primary" html-type="submit" @click="onSubmit">上传计划任务书</a-button>
<a-button type="primary" html-type="submit" @click="onSubmit">确定</a-button>
</a-form-item>
</a-form>
</div>
@ -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);

12
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) {

11
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) {

11
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) {

12
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) {

12
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) {

69
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();
};
</script>

12
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) {

31
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;
};

12
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) {

12
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) {

12
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) {

24
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;

6
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;

Loading…
Cancel
Save