fix:bug清单内容修复
This commit is contained in:
@@ -95,9 +95,9 @@ onMounted(() => {
|
||||
|
||||
.operate-form {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
|
||||
.el-form {
|
||||
display: flex;
|
||||
@@ -114,7 +114,7 @@ onMounted(() => {
|
||||
|
||||
.task-img-box {
|
||||
width: 100%;
|
||||
height: calc(100% - 50px);
|
||||
height: calc(100% - 60px);
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
@@ -58,8 +58,8 @@ import { initEcharts } from '../common/echartCard/echartsOptions';
|
||||
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
});
|
||||
const runTreeData = ref<any>([]);
|
||||
@@ -130,16 +130,19 @@ const getCheckedNodesCurveFun = async () => {
|
||||
});
|
||||
|
||||
if (res && res.code === 200) {
|
||||
curveList.value = res.data.data.map((item: any, index: any) => {
|
||||
curveList.value = res.data?.data?.map((item: any, index: any) => {
|
||||
return {
|
||||
...item,
|
||||
num: index + 1,
|
||||
};
|
||||
});
|
||||
}
|
||||
const list = curveList.value.map((item: any) => item.num);
|
||||
curveNumData.value = Array.from(new Set(list));
|
||||
getCommonNumCurveFun();
|
||||
|
||||
if (curveList.value.length) {
|
||||
const list = curveList.value.map((item: any) => item.num);
|
||||
curveNumData.value = Array.from(new Set(list));
|
||||
getCommonNumCurveFun();
|
||||
}
|
||||
|
||||
console.log(curveNumData.value, 'curveNumData.value');
|
||||
};
|
||||
@@ -260,7 +263,7 @@ onMounted(() => {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
// align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
// :deep(.is-disabled) {
|
||||
|
||||
@@ -34,8 +34,13 @@
|
||||
|
||||
<FilePreview v-model="previewVisible" :fileId="currentRow?.id" />
|
||||
|
||||
<uploadDeliverableFilePage v-if="uploadFileVisible" :curentTaskInfo="taskInfo" @close="uploadFileVisible = false" @update="updateTableDataFun"></uploadDeliverableFilePage>
|
||||
</div>
|
||||
|
||||
<Teleport to="body">
|
||||
<uploadDeliverableFilePage v-if="uploadFileVisible" :curentTaskInfo="taskInfo" @close="uploadFileVisible = false" @update="updateTableDataFun"></uploadDeliverableFilePage>
|
||||
|
||||
</Teleport>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
||||
@@ -1,168 +1,132 @@
|
||||
<template>
|
||||
<div class="task-performance-page">
|
||||
<el-form class="form-style" :model="taskFormData" labelPosition="left" labelWidth="120">
|
||||
<el-form-item label="任务名称">
|
||||
<el-input v-model="taskFormData.nodeName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="英文名">
|
||||
<el-input v-model="taskFormData.englishName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务状态">
|
||||
<el-select v-model="taskFormData.exeStatus">
|
||||
<el-option v-for="item in exeStatusList" :label="item.name" :value="item.value" :key="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="风险状态">
|
||||
<el-select v-model="taskFormData.achieveStatus">
|
||||
<el-option
|
||||
v-for="item in achieveStatusList"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
:key="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务编号">
|
||||
<el-input v-model="taskFormData.nodeCode"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="任务描述">
|
||||
<el-input type="textarea" v-model="taskFormData.description" :rows="4"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="计划开始时间">
|
||||
|
||||
<el-date-picker
|
||||
v-model="taskFormData.beginTime"
|
||||
type="date"
|
||||
placeholder="选择计划开始时间"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="计划完成时间">
|
||||
|
||||
<el-date-picker
|
||||
v-model="taskFormData.endTime"
|
||||
type="date"
|
||||
placeholder="选择计划开完成时间"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<TableForm
|
||||
ref="tableFormRef"
|
||||
tableName="PROJECT_TASK_MODAL"
|
||||
showDisabled
|
||||
:colNum="2"
|
||||
:rule-data="ruleData"
|
||||
>
|
||||
<template #form-flowTemplate>
|
||||
<flowTemplateSelect v-model="selectedFlowTemplate" />
|
||||
</template>
|
||||
<template #form-standard>
|
||||
<knowledgeSelect v-model="standard"/>
|
||||
</template>
|
||||
</TableForm>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, reactive } from 'vue';
|
||||
import { ref, onMounted, reactive, watch, nextTick } from 'vue';
|
||||
import TableForm from '@/components/common/table/tableForm.vue';
|
||||
import { getTagKeyMap, NODE_TYPE } from '@/utils/enum/node';
|
||||
import { getMemberListIds } from '@/utils/task';
|
||||
import flowTemplateSelect from '@/components/common/treeCaseTable/flowTemplateSelect.vue';
|
||||
import knowledgeSelect from '@/components/common/treeCaseTable/knowledgeSelect.vue';
|
||||
import { disposeTagKey } from '@/views/task/projectDetail/components/project';
|
||||
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
},
|
||||
taskInfo: {
|
||||
type: Object,
|
||||
default: () => { },
|
||||
},
|
||||
});
|
||||
const tableFormRef = ref();
|
||||
|
||||
const taskFormData = reactive<any>({
|
||||
id: '',
|
||||
nodeName: '',
|
||||
englishName: '',
|
||||
exeStatus: '',
|
||||
achieveStatus: '',
|
||||
nodeType: '',
|
||||
nodeCode: '',
|
||||
memberList: '',
|
||||
beginTime: '',
|
||||
endTime: '',
|
||||
flowTemplateName: '',
|
||||
workRate: '',
|
||||
standard: '',
|
||||
days: '',
|
||||
performanceType: '',
|
||||
difficult: '',
|
||||
analyseSoftware: '',
|
||||
imageFileId: '',
|
||||
bCapacity: '',
|
||||
method: '',
|
||||
highValue: '',
|
||||
value: '',
|
||||
unit: '',
|
||||
department: '',
|
||||
section: '',
|
||||
group: '',
|
||||
description: '',
|
||||
operation: '',
|
||||
const localDetail = ref<any>({});
|
||||
|
||||
const ruleData = ref<any>({
|
||||
highValue: [
|
||||
{
|
||||
message: '指标类型为数值时,目标值应为数字',
|
||||
trigger: 'change',
|
||||
validator: (val: unknown) => {
|
||||
if (val === null || val === undefined || val === '') {
|
||||
return true;
|
||||
}
|
||||
const formData = tableFormRef.value?.getFormDataFun();
|
||||
if (formData.nodeType === NODE_TYPE.PERFORMANCE) {
|
||||
if (formData.performanceType === '1') {
|
||||
const s = String(val ?? '').trim();
|
||||
return s !== '' && Number.isFinite(Number(s));
|
||||
} else if (formData.performanceType === '2') {
|
||||
return true;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
},
|
||||
|
||||
],
|
||||
});
|
||||
|
||||
const exeStatusList = ref([
|
||||
{
|
||||
name: '未开始',
|
||||
value: '0',
|
||||
},
|
||||
{
|
||||
name: '进行中',
|
||||
value: '1',
|
||||
},
|
||||
{
|
||||
name: '已完成',
|
||||
value: '2',
|
||||
},
|
||||
{
|
||||
name: '延期',
|
||||
value: '3',
|
||||
},
|
||||
{
|
||||
name: '终止',
|
||||
value: '4',
|
||||
},
|
||||
]);
|
||||
|
||||
const achieveStatusList = ref([
|
||||
{
|
||||
name: '不合格',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
name: '风险可控',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
name: '未分析',
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
name: '合格',
|
||||
value: 4,
|
||||
},
|
||||
]);
|
||||
|
||||
const getTaskInfoFun = () => {
|
||||
|
||||
if (props.taskInfo) {
|
||||
|
||||
for (const key in taskFormData) {
|
||||
taskFormData[key] = props.taskInfo[key];
|
||||
}
|
||||
// 流程模板相关
|
||||
const selectedFlowTemplate = ref<any>(null);
|
||||
const standard = ref();
|
||||
watch(() => props.taskInfo, (newVal) => {
|
||||
if (newVal) {
|
||||
localDetail.value = newVal;
|
||||
|
||||
nextTick(() => {
|
||||
tableFormRef.value?.setFormDataFun({ ...localDetail.value, eMemberList: getMemberListIds(localDetail.value.eMemberList), pMemberList: getMemberListIds(localDetail.value.pMemberList) });
|
||||
standard.value = localDetail.value.standard;
|
||||
if (localDetail.value.flowTemplate) {
|
||||
selectedFlowTemplate.value = localDetail.value.flowTemplate;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
console.log('根据任务id获取任务详情数据' + taskFormData);
|
||||
}, {
|
||||
immediate: true,
|
||||
deep: true,
|
||||
});
|
||||
|
||||
const getFormData = async () => {
|
||||
const valid = await tableFormRef.value?.validateFun();
|
||||
|
||||
if (valid) {
|
||||
const formData = tableFormRef.value?.getFormDataFun();
|
||||
|
||||
formData.standard = standard.value;
|
||||
if (selectedFlowTemplate.value) {
|
||||
formData.flowTemplate = selectedFlowTemplate.value;
|
||||
}
|
||||
if (localDetail.value?.tagKeyList) {
|
||||
const tagKeyList = disposeTagKey(formData, localDetail.value?.tagKeyList || [], getTagKeyMap());
|
||||
console.log('tagKeyList', tagKeyList);
|
||||
} else {
|
||||
formData.tagKeyList = [];
|
||||
}
|
||||
// 处理时间范围
|
||||
if (formData.planTime) {
|
||||
formData.beginTime = formData.planTime[0];
|
||||
formData.endTime = formData.planTime[1];
|
||||
}
|
||||
formData.pMemberIds = '';
|
||||
if (formData.pMemberList?.length > 0) {
|
||||
formData.pMemberIds = formData.pMemberList;
|
||||
}
|
||||
formData.eMemberIds = '';
|
||||
if (formData.eMemberList?.length > 0) {
|
||||
formData.eMemberIds = formData.eMemberList;
|
||||
}
|
||||
|
||||
return formData;
|
||||
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
taskFormData,
|
||||
getFormData,
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getTaskInfoFun();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
@@ -46,8 +46,8 @@ import UploadFile from '@/components/common/uploadFile/index.vue';
|
||||
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
showFilter: {
|
||||
type: Boolean,
|
||||
|
||||
@@ -50,8 +50,8 @@ import addTaskPerformance from './addTaskPerformance.vue';
|
||||
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
runInfo: {
|
||||
type: Object,
|
||||
|
||||
@@ -44,8 +44,8 @@ import UploadFile from '@/components/common/uploadFile/index.vue';
|
||||
|
||||
const props = defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
showFilter: {
|
||||
type: Boolean,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
diaTitle="上传交付物"
|
||||
:width="'70%'"
|
||||
:height="'70%'"
|
||||
:zIndex="100"
|
||||
:zIndex="101"
|
||||
@close="handleCloseFun"
|
||||
show-footer
|
||||
>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
|
||||
<div class="run-flow-box">
|
||||
|
||||
<FlowView v-if="runInfo.flowTemplate" :show-config-page="false" :flow-uuid="runInfo.flowTemplate" @detail="getNodeTailFun"></FlowView>
|
||||
</div>
|
||||
|
||||
<div class="run-info-box">
|
||||
@@ -131,6 +131,7 @@ import taskPerformance from '@/components/taskDetail/taskPerformance.vue';
|
||||
import runLogs from './runPagecomponent/runLogs.vue';
|
||||
import ModelReview from './runPagecomponent/3DModelReview.vue';
|
||||
import runVersionTree from './runPagecomponent/runVersionTree.vue';
|
||||
import FlowView from '@/components/common/flow/flowView.vue';
|
||||
|
||||
const props = defineProps({
|
||||
runInfo: {
|
||||
@@ -154,6 +155,11 @@ const handleRightClickFun = () => {
|
||||
|
||||
};
|
||||
|
||||
const getNodeTailFun = (node:any) => {
|
||||
console.log(node, 'node');
|
||||
|
||||
};
|
||||
|
||||
const currentRunNodeInfo = ref<any>({});
|
||||
|
||||
watch(() => props.runInfo, (newVal) => {
|
||||
@@ -240,16 +246,17 @@ watch(() => props.runInfo, (newVal) => {
|
||||
|
||||
.run-flow-box {
|
||||
width: 100%;
|
||||
height: 30%;
|
||||
height: 300px;
|
||||
background-color: #fff;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 2px;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
.run-info-box {
|
||||
width: 100%;
|
||||
height: calc(70% - 70px);
|
||||
height: calc(100% - 370px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
:taskId="currentTaskInfo.id"
|
||||
:current-task-info="currentTaskInfo"
|
||||
@closeFn="showTaskDetailDialog = false"
|
||||
@updateFn="updateTaskInfoFun"
|
||||
>
|
||||
</taskDetail>
|
||||
</div>
|
||||
@@ -108,9 +109,10 @@
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { getTaskTreeFun } from './projectApi';
|
||||
import { NODE_TYPE } from '@/utils/enum/node';
|
||||
import { getChildrenNodeListApi } from '@/api/project/node';
|
||||
import { getChildrenNodeListApi, modifyNodeTaskPerformanceApi } from '@/api/project/node';
|
||||
import taskDetail from './taskDetail.vue';
|
||||
import loadCaseTable from '@/components/common/treeCaseTable/loadCaseTable.vue';
|
||||
import { getTagMapList } from '@/utils/task';
|
||||
|
||||
const props = defineProps<{
|
||||
projectUuid: string;
|
||||
@@ -186,6 +188,30 @@ const openTaskDetailDialogFun = (row?: any) => {
|
||||
showTaskDetailDialog.value = true;
|
||||
};
|
||||
|
||||
const updateTaskInfoFun = async (info:any) => {
|
||||
const { flag, data }:any = info;
|
||||
|
||||
console.log(flag, 'flag');
|
||||
console.log(data, 'data');
|
||||
|
||||
if (flag === 'info') {
|
||||
const res:any = await modifyNodeTaskPerformanceApi({
|
||||
addNodeList: [],
|
||||
editNodeList: [data],
|
||||
deleteNodeList: [],
|
||||
ownRootNodeUuid: data.tag1,
|
||||
tagMap: getTagMapList(),
|
||||
});
|
||||
|
||||
if (res && res.code === 200) {
|
||||
await getTaskTreeList();
|
||||
}
|
||||
}
|
||||
|
||||
showTaskDetailDialog.value = false;
|
||||
|
||||
};
|
||||
|
||||
const refreshPhaseList = () => {
|
||||
getPhaseListApi();
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="comp-content">
|
||||
<Dialog v-model="dialogVisible" diaTitle="任务详情" :width="'70%'" :height="700" @close="closeFun" show-footer>
|
||||
<Dialog v-model="dialogVisible" diaTitle="任务详情" :width="'70%'" :height="700" @close="closeFun" show-footer :zIndex="100">
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane label="任务详情" name="info">
|
||||
<div class="task-tab-content">
|
||||
@@ -8,9 +8,14 @@
|
||||
</taskInfo>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="计算模型" name="model">
|
||||
<div class="task-tab-content">
|
||||
<taskModel v-if="activeTab === 'model'" :task-id="taskId"></taskModel>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="性能指标" name="performance">
|
||||
<div class="task-tab-content">
|
||||
<taskPerformance ref="taskPerformanceRef" v-if="activeTab === 'performance'" :task-id="taskId">
|
||||
<taskPerformance ref="taskPerformanceRef" v-if="activeTab === 'performance'" :task-id="taskId" :param-type="'task'" :run-info="currentTaskInfo" :task-info="currentTaskInfo" :show-save-button="true">
|
||||
</taskPerformance>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -31,14 +36,10 @@
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="交付物" name="deliverables">
|
||||
<div class="task-tab-content">
|
||||
<taskDeliverable v-if="activeTab === 'deliverables'" :task-id="taskId"></taskDeliverable>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="计算模型" name="model">
|
||||
<div class="task-tab-content">
|
||||
<taskModel v-if="activeTab === 'model'" :task-id="taskId"></taskModel>
|
||||
<taskDeliverable v-if="activeTab === 'deliverables'" :task-id="currentTaskInfo?.id" :task-info="currentTaskInfo"></taskDeliverable>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<div>
|
||||
@@ -64,8 +65,8 @@ import taskCurve from '@/components/taskDetail/taskCurve.vue';
|
||||
const emits = defineEmits(['closeFn', 'updateFn']);
|
||||
defineProps({
|
||||
taskId: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
currentTaskInfo: {
|
||||
type: Object,
|
||||
@@ -89,7 +90,7 @@ const updateFun = async () => {
|
||||
}
|
||||
|
||||
if (activeTab.value === 'info') {
|
||||
data = taskInfoRef.value.taskFormData();
|
||||
data = await taskInfoRef.value.getFormData();
|
||||
}
|
||||
|
||||
emits('updateFn', {
|
||||
@@ -118,6 +119,7 @@ const updateFun = async () => {
|
||||
.task-tab-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-height: 500px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</BaseTable> -->
|
||||
<taskDetail v-if="showTaskDetailDialog" :taskId="currentTaskInfo.id" @closeFn="showTaskDetailDialog = false">
|
||||
<taskDetail v-if="showTaskDetailDialog" :taskId="currentTaskInfo.id" :currentTaskInfo="currentTaskInfo" @closeFn="showTaskDetailDialog = false" @updateFn="updateTaskInfoFun">
|
||||
</taskDetail>
|
||||
</div>
|
||||
</template>
|
||||
@@ -95,6 +95,15 @@ const showTaskDetailFun = (row:any) => {
|
||||
currentTaskInfo.value = row;
|
||||
};
|
||||
|
||||
const updateTaskInfoFun = async (info:any) => {
|
||||
const { flag, data }:any = info;
|
||||
|
||||
console.log(flag, 'flag');
|
||||
console.log(data, 'data');
|
||||
|
||||
showTaskDetailDialog.value = false;
|
||||
};
|
||||
|
||||
const attentionTaskFun = async(row:any, isAttention:boolean) => {
|
||||
const res:any = await attentionTaskApi(disposeAttentionParams(row.uuid, isAttention));
|
||||
if (res.code === 200) {
|
||||
|
||||
Reference in New Issue
Block a user