|
|
@ -15,11 +15,20 @@ |
|
|
|
|
|
|
|
<a-form-item> |
|
|
|
<label class="color-3">负责人</label> |
|
|
|
<a-select v-model:value="topicMeetFormData.memberId"> |
|
|
|
<a-select-option value="jack">Jack</a-select-option> |
|
|
|
<a-select-option value="lucy">Lucy</a-select-option> |
|
|
|
<a-select-option value="Yiminghe">yiminghe</a-select-option> |
|
|
|
</a-select> |
|
|
|
<a-select |
|
|
|
v-model:value="topicMeetFormData.memberId" |
|
|
|
show-search |
|
|
|
optionFilterProp="label" |
|
|
|
placeholder="负责人" |
|
|
|
:options="options" |
|
|
|
:filter-option="filterOption" |
|
|
|
@search="handleSearch" |
|
|
|
:getPopupContainer=" |
|
|
|
triggerNode => { |
|
|
|
return triggerNode.parentNode || document.body; |
|
|
|
} |
|
|
|
" |
|
|
|
></a-select> |
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
<a-form-item class="form-item-dad"> |
|
|
@ -31,7 +40,7 @@ |
|
|
|
<div class="form-item-son" style="padding-left: 16px"> |
|
|
|
<div v-for="(item, index) in planTaskStageList" :key="index"> |
|
|
|
<a-form-item> |
|
|
|
<label class="color-3">第{{ index === 0 ? '一' : index === 1 ? '二' : '三' }}阶段</label> |
|
|
|
<label class="color-3">第{{ index + 1 }}阶段</label> |
|
|
|
<a-space direction="vertical" :size="12"> |
|
|
|
<a-range-picker v-model:value="item.date" /> |
|
|
|
</a-space> |
|
|
@ -62,7 +71,7 @@ |
|
|
|
|
|
|
|
<a-form-item> |
|
|
|
<label class="color-3">验收内容</label> |
|
|
|
<a-checkbox-group v-model:value="topicMeetFormData.checkContent"> |
|
|
|
<a-checkbox-group v-model:value="topicMeetFormData.checkContentList"> |
|
|
|
<a-row> |
|
|
|
<a-col :span="5"> |
|
|
|
<a-checkbox value="1"><span class="color-6">1、工作报告</span></a-checkbox> |
|
|
@ -138,20 +147,23 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script setup> |
|
|
|
import { ref, computed, toRaw } from 'vue'; |
|
|
|
import { ref, computed } from 'vue'; |
|
|
|
import { useStore } from 'vuex'; |
|
|
|
import { InboxOutlined, PlusCircleOutlined } from '@ant-design/icons-vue'; |
|
|
|
import { uploadImg } from 'apis'; |
|
|
|
import { uploadImg, memberQuery, savePlanTask, getPlanTask } from 'apis'; |
|
|
|
import dayjs from 'dayjs'; |
|
|
|
|
|
|
|
const store = useStore(); |
|
|
|
const formRef = ref(null); |
|
|
|
const projectInfo = computed(() => store.state.projects.project); // 当前选择项目信息 |
|
|
|
const sessionProject = sessionStorage.getItem('project'); |
|
|
|
const projectId = computed(() => store.getters['projects/projectId']); |
|
|
|
const token = computed(() => store.getters['user/token']); |
|
|
|
const headers = { Authorization: `Bearer ${token.value}` }; |
|
|
|
const action = uploadImg; |
|
|
|
const fileList = ref([]); |
|
|
|
// const members = computed(() => store.state.task.members); |
|
|
|
// console.log('members', members.value) |
|
|
|
|
|
|
|
if (sessionProject) { |
|
|
|
const project = JSON.parse(sessionProject); |
|
|
@ -159,7 +171,7 @@ if (sessionProject) { |
|
|
|
} |
|
|
|
|
|
|
|
const topicMeetFormData = ref({ |
|
|
|
projectId: projectId.value, |
|
|
|
projectId: projectInfo.value.id, |
|
|
|
name: '', |
|
|
|
date: [], |
|
|
|
startTime: '', |
|
|
@ -168,16 +180,30 @@ const topicMeetFormData = ref({ |
|
|
|
technicalIndicator: '', |
|
|
|
economicIndicators: '', |
|
|
|
socialBenefit: '', |
|
|
|
checkContent: [], |
|
|
|
fileIdList: [], |
|
|
|
// fileList: [], |
|
|
|
checkContentList: [], |
|
|
|
fileList: [], |
|
|
|
planTaskStageList: [], |
|
|
|
planTaskDefinedList: [], |
|
|
|
}); |
|
|
|
|
|
|
|
const planTaskStageList = ref([]); |
|
|
|
const options = ref([]); |
|
|
|
|
|
|
|
const planTaskStageList = ref([{ date: [], stageStartTime: '', stageEndTime: '', remark: '' }]); |
|
|
|
const planTaskDefinedList = ref([]); |
|
|
|
|
|
|
|
checkPlanTask(); // 查看任务计划书 |
|
|
|
|
|
|
|
getList(); // 获取成员列表 |
|
|
|
|
|
|
|
const handleSearch = async value => { |
|
|
|
console.log('handleSearch', options.value, value); |
|
|
|
// await getList(value); // 获取成员列表 |
|
|
|
}; |
|
|
|
|
|
|
|
const filterOption = (input, option) => { |
|
|
|
return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0; |
|
|
|
}; |
|
|
|
|
|
|
|
const handleChange = info => { |
|
|
|
const resFileList = [...info.fileList]; |
|
|
|
|
|
|
@ -211,39 +237,98 @@ const handleChange = info => { |
|
|
|
fileList.value = arr.value; |
|
|
|
}; |
|
|
|
|
|
|
|
// 查看任务计划书 |
|
|
|
async function checkPlanTask() { |
|
|
|
try { |
|
|
|
const params = { param: { projectId: projectId.value } }; |
|
|
|
const data = await getPlanTask(params); |
|
|
|
data.checkContentList = data.checkContent.split(','); |
|
|
|
const start = dayjs(Number(data.startTime)); |
|
|
|
const end = dayjs(Number(data.endTime)); |
|
|
|
const arr = [start, end]; |
|
|
|
data.date = arr; |
|
|
|
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]; |
|
|
|
}); |
|
|
|
planTaskStageList.value = data.planTaskStageList; |
|
|
|
|
|
|
|
const fileArr = []; |
|
|
|
data.fileList.forEach(item => { |
|
|
|
const fileInfo = { |
|
|
|
id: item.fileId, |
|
|
|
name: item.fileName, |
|
|
|
url: item.filePath, |
|
|
|
status: 'done', |
|
|
|
}; |
|
|
|
|
|
|
|
fileArr.push(fileInfo); |
|
|
|
}); |
|
|
|
fileList.value = fileArr; |
|
|
|
} catch (error) { |
|
|
|
console.log('error', error); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取成员列表 |
|
|
|
async function getList(name) { |
|
|
|
try { |
|
|
|
const params = { param: { projectId: projectId.value, name } }; |
|
|
|
const data = await memberQuery(params); |
|
|
|
store.commit('task/setMembers', data); |
|
|
|
options.value = []; |
|
|
|
|
|
|
|
data.forEach(item => { |
|
|
|
const obj = { |
|
|
|
label: item.memberName, |
|
|
|
value: item.memberId, |
|
|
|
}; |
|
|
|
|
|
|
|
options.value.push(obj); |
|
|
|
}); |
|
|
|
} catch (error) { |
|
|
|
console.log('error', error); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 添加实施内容与目标 |
|
|
|
function addMilestones() { |
|
|
|
planTaskStageList.value.push({ date: [], startTime: '', endTime: '', remark: '' }); |
|
|
|
planTaskStageList.value.push({ date: [], stageStartTime: '', stageEndTime: '', remark: '' }); |
|
|
|
} |
|
|
|
|
|
|
|
function addDefined() { |
|
|
|
planTaskDefinedList.value.push({ key: [], value: '' }); |
|
|
|
planTaskDefinedList.value.push({ key: '', value: '' }); |
|
|
|
} |
|
|
|
|
|
|
|
const onSubmit = () => { |
|
|
|
const onSubmit = async () => { |
|
|
|
fileList.value.forEach(item => { |
|
|
|
// let obj = { |
|
|
|
// fileId: item.id, |
|
|
|
// fileName: item.name, |
|
|
|
// filePathL: item.url |
|
|
|
// } |
|
|
|
|
|
|
|
// topicMeetFormData.value.fileList.push(obj); |
|
|
|
topicMeetFormData.value.fileIdList.push(item.id); |
|
|
|
const obj = { |
|
|
|
fileId: item.id, |
|
|
|
fileName: item.name, |
|
|
|
filePath: item.url, |
|
|
|
}; |
|
|
|
|
|
|
|
topicMeetFormData.value.fileList.push(obj); |
|
|
|
}); |
|
|
|
|
|
|
|
topicMeetFormData.value.planTaskStageList = []; |
|
|
|
planTaskStageList.value.forEach(item => { |
|
|
|
const obj = { |
|
|
|
startTime: '', |
|
|
|
endTime: '', |
|
|
|
stageStartTime: '', |
|
|
|
stageEndTime: '', |
|
|
|
remark: item.remark, |
|
|
|
}; |
|
|
|
item.date.forEach((val, key) => { |
|
|
|
if (key === 0) { |
|
|
|
obj.startTime = dayjs(val).format('x'); |
|
|
|
obj.stageStartTime = dayjs(val).format('x'); |
|
|
|
} else { |
|
|
|
obj.endTime = dayjs(val).format('x'); |
|
|
|
obj.stageEndTime = dayjs(val).format('x'); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
@ -260,10 +345,12 @@ const onSubmit = () => { |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// const params = { param: topicMeetFormData.value }; |
|
|
|
const params = { param: topicMeetFormData.value }; |
|
|
|
|
|
|
|
// savePlanTask(params); |
|
|
|
console.log('submit!', toRaw(topicMeetFormData.value), planTaskStageList.value, planTaskDefinedList.value); |
|
|
|
await savePlanTask(params); |
|
|
|
projectInfo.value.name = topicMeetFormData.value.name; |
|
|
|
store.commit('projects/setProject', projectInfo.value); |
|
|
|
checkPlanTask(); |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|