Files
SPDM/src/views/task/simulationTask/newDemand/index.vue
2025-12-15 11:46:59 +08:00

369 lines
11 KiB
Vue

<template>
<!-- 新增待办 -->
<div class="gl-page-content-full">
<demandTable
showIndex
ref="tableRef"
tableName="SIMULATION_TASK_DEMAND_CREATE"
:params="{ type: 0 }"
:api="demandListApi"
:actionsWidth="tableActionsLength['2-2']"
exportFileName="新增待办需求"
>
<template #leftOptions>
<el-button icon="plus" type="primary" @click="visibleDialog(true)">创建需求</el-button>
</template>
<template #tableActions="slotProps">
<div class="gl-table-actions">
<el-link type="primary" @click="visibleDialog(false, (slotProps as any).row)"
>编辑</el-link
>
<el-popconfirm
title="确认删除吗?"
@confirm="deleteDemandFun((slotProps as any).row.uuid)"
>
<template #reference>
<el-link type="danger">删除</el-link>
</template>
</el-popconfirm>
</div>
</template>
</demandTable>
<Dialog
v-model="formVisible"
:loading="loadingInterface"
:diaTitle="isCreateDialog ? '创建需求' : '编辑需求'"
:width="800"
:height="500"
@close="closeFun"
show-footer
>
<TableForm
ref="tableFormRef"
tableName="SIMULATION_TASK_DEMAND_CREATE"
@change="changeFun($event, 'form')"
@load="loadTableForm"
:colNum="2"
:hideKeys="hideKeys"
>
<template v-for="name in Object.keys($slots)" :key="name" #[name]="scope">
<slot :name="name" v-bind="scope" />
</template>
</TableForm>
<template #footer>
<div>
<el-button @click="closeFun">取消</el-button>
<el-button :loading="loadingInterface" type="primary" @click="confirmFun">确认</el-button>
</div>
</template>
</Dialog>
</div>
<attachments :demandId="demandInfo.uuid" v-model:visible="attachmentsVisible"></attachments>
</template>
<script setup lang="ts">
import { nextTick, reactive, ref } from 'vue';
import Dialog from '@/components/common/dialog/index.vue';
import TableForm from '@/components/common/table/tableForm.vue';
import { addDemandApi, deleteDemandApi, demandListApi, editDemandApi } from '@/api/project/demand';
import { getChildrenNodeList } from '../../projectDetail/components/projectApi';
import { NODE_TYPE } from '@/utils/enum/node';
import { upload } from '@/api/request';
import { CommonStore } from '@/stores/common';
import attachments from '@/views/task/simulationTask/components/attachments.vue';
import { FILE_TYPE } from '@/utils/enum/file';
import { ElMessage } from 'element-plus';
import { dataDelFileApi, dataQueryDirApi } from '@/api/data/data';
import demandTable from '../components/demandTable.vue';
import { tableActionsLength } from '@/utils/common';
import { getMemberListIds } from '@/utils/task';
const env = import.meta.env;
const PREFIX = env.VITE_API_PREFIX_PROJECT;
defineProps({
hideKeys: {
type: Array,
default: () => [],
},
});
const emits = defineEmits(['visibleDialog', 'loadTableForm', 'changeForm']);
const commonStore = CommonStore();
const loadingInterface = ref(false);
const formVisible = ref(false);
const closeFun = () => {
formVisible.value = false;
attachmentsVisible.value = false;
// 清空删除的文件
deleteFileList.value = [];
};
const attachmentsVisible = ref(false);
const tableRef = ref();
const tableFormRef = ref();
const demandInfo = reactive({
id: 0,
uuid: '',
});
const isCreateDialog = ref(true);
const visibleDialog = async (isCreate: boolean, row?: any) => {
console.log('row', row);
formVisible.value = true;
isCreateDialog.value = isCreate;
if (!isCreateDialog.value) {
const res: any = await dataQueryDirApi({ uuid: row.uuid, current: 1, size: 99 });
row.attachments =
res.data?.data?.map((item: { originalName: any; fileSize: any; id: number }) => {
return {
name: item.originalName,
size: item.fileSize,
id: item.id,
};
}) || [];
oldAttachments.value = [...row.attachments];
let phaseList = [];
if (row.phaseId) {
phaseList = await getChildrenNodeList(NODE_TYPE.PHASE, row.projectId);
phaseList = phaseList.map((item: any) => {
return {
label: item.nodeName,
value: item.uuid,
};
});
}
let simList: any;
if (row.simType) {
simList = commonStore.getDictData(row.demandType);
}
row.planTime = [row.beginTime, row.endTime];
nextTick(() => {
console.log('tableFormRef.value', tableFormRef.value);
console.log('simList.A', simList);
tableFormRef.value.setOptionsFun('phaseId', phaseList);
if (simList?.A) {
tableFormRef.value.setOptionsFun('simType', simList.A);
}
let pMemberList = '';
if (row.pMemberList) {
pMemberList = getMemberListIds(row.pMemberList);
}
let tMemberList = '';
if (row.tMemberList) {
tMemberList = getMemberListIds(row.tMemberList);
}
let aMemberList = '';
if (row.aMemberList) {
aMemberList = getMemberListIds(row.aMemberList);
}
tableFormRef.value.setFormDataFun({ ...row, pMemberList, tMemberList, aMemberList });
});
} else {
nextTick(() => {
tableFormRef.value.resetFun();
});
}
emits('visibleDialog', { isCreate, row });
};
const deleteDemandFun = async (uuid: number) => {
const res: any = await deleteDemandApi({ deleteNodeIdList: [uuid] });
if (res.code === 200) {
ElMessage.success('删除成功');
tableRef.value.tableRef.resetFun();
}
};
const confirmFun = async () => {
if (await tableFormRef.value.validateFun()) {
loadingInterface.value = true;
const fromData: any = tableFormRef.value.getFormDataFun();
console.log('fromData', fromData);
if (fromData.planTime) {
fromData.beginTime = fromData.planTime[0];
fromData.endTime = fromData.planTime[1];
}
console.log('tableFormRef.value.getFormDataFun()', fromData);
if (isCreateDialog.value) {
const demandId = await createDemandApiFun(fromData);
// 没有demandId就是创建需求失败
if (demandId && fromData.attachments?.length > 0) {
for (let index = 0; index < fromData.attachments.length; index++) {
const form = new FormData();
form.append('fileType', String(FILE_TYPE.DEMAND_ATTACHMENTS));
// form.append('nodeId ', demandId);
// form.append('dirId ', demandId);
form.append('uuid ', demandId);
form.append('fileName ', fromData.attachments[index].name);
form.append('file ', fromData.attachments[index].raw);
form.append('projectId ', String(fromData.projectId));
upload(`${PREFIX}demand/uploadDemandFiles`, form);
}
formVisible.value = false;
}
} else {
await editDemandApiFun(fromData);
}
loadingInterface.value = false;
tableRef.value.tableRef.resetFun();
}
};
const createDemandApiFun = async (fromData: any) => {
const params = {
pid: fromData.nodeId,
// 'demandName': fromData.demandName,
// 'demandCode': fromData.demandCode,
// demandType: fromData.demandType,
// simType: fromData.simType,
// 'beginTime': fromData.beginTime,
// 'endTime': fromData.endTime,
// 'pMemberList': fromData.pMemberList,
eMemberList: '',
// 'projectId': fromData.projectId,
// 'phaseId': fromData.phaseId,
// 'nodeId': fromData.nodeId,
...fromData,
demandStatus: '0',
};
const res: any = await addDemandApi(params);
if (res.code === 200) {
formVisible.value = false;
ElMessage.success('创建成功');
return res.data;
} else {
return null;
}
};
const editDemandApiFun = async (fromData: any) => {
console.log('fromData', fromData);
// let addFileList = [];
// let deleteFileList = [];
// formData.attachments.forEach((item: any) => {
// if(item?.raw) {
// const form = new FormData();
// form.append('fileType', String(FILE_TYPE.DEMAND_ATTACHMENTS));
// form.append('nodeId ', String(demandInfo.id));
// form.append('fileName ', item.name);
// form.append('file ', item.raw);
// upload(`${PREFIX}data/uploadFiles`, form);
// }
// })
// oldAttachments.value.forEach((item: any) => {
// formData.attachments.some((item2: any) => item2.name ===)
// })
const res: any = await editDemandApi({
...fromData,
pMemberList: fromData.pMemberList,
eMemberList: '',
});
if (res.code === 200) {
ElMessage.success('修改成功');
formVisible.value = false;
if (fromData.attachments.length > 0) {
fromData.attachments.forEach((item: any) => {
if (item.raw) {
const form = new FormData();
form.append('fileType', String(FILE_TYPE.DEMAND_ATTACHMENTS));
form.append('nodeId ', fromData.id);
form.append('uuid ', fromData.uuid);
form.append('fileName ', item.name);
form.append('file ', item.raw);
form.append('projectId ', String(fromData.projectId));
upload(`${PREFIX}demand/uploadDemandFiles`, form);
}
});
}
oldAttachments.value.forEach((item: any) => {
if (
!fromData.attachments.some((item2: any) => {
if (item2.name === item.name) {
return true;
}
})
) {
dataDelFileApi({ delFileId: item.id });
}
});
}
};
const deleteFileList = ref<number[]>([]);
const oldAttachments = ref<any[]>([]);
const changeFun = async (val: any, type: string) => {
console.log('val', val);
let optionRef: any;
if (type === 'search') {
optionRef = tableRef.value;
} else {
optionRef = tableFormRef.value;
}
// if (val.key === 'projectId' || val.key === 'phaseId') {
// console.log('changeFun', val);
// let nodeType = '';
// let nextKey = '';
// let nodeId = '';
// val.key === 'phaseId' ||
if (val.key === 'projectId') {
console.log('changeFun', val);
let nodeType = '';
let nextKey = '';
let nodeId = '';
if (val.key === 'projectId') {
nodeType = NODE_TYPE.PHASE;
nextKey = 'phaseId';
nodeId = val.data.projectId;
}
const optionList = await getPhaseList(nodeType, nodeId);
optionRef.setOptionsFun(nextKey, optionList);
const formData = optionRef.getFormDataFun();
optionRef.setFormDataFun({ ...formData, phaseId: '' });
}
if (val.key === 'demandType') {
const simTypeList: any = commonStore.getDictData(val.data.demandType);
optionRef.setOptionsFun('simType', simTypeList.A);
const formData = optionRef.getFormDataFun();
optionRef.setFormDataFun({ ...formData, simType: '' });
}
emits('changeForm', { val, type });
};
const getPhaseList = async (nodeType: string, projectUuid: string) => {
let optionList = await getChildrenNodeList(nodeType, projectUuid);
optionList = optionList.map((item: any) => {
return {
label: item.nodeName,
value: item.uuid,
};
});
return optionList;
};
const loadTableForm = () => {
emits('loadTableForm');
};
// const searchChange = async (val: any) => {
// console.log('val', val);
// const optionList = await getPhaseList(nodeType, nodeId);
// tableFormRef.value.setOptionsFun(nextKey, optionList);
// };
defineExpose({
tableFormRef,
});
</script>