未分发的和已分发的合并起来,单个需求任务的分发功能开发
This commit is contained in:
@@ -17,6 +17,10 @@ export const updateTaskStatusApi = (params: any) => {
|
|||||||
return post(`${PREFIX}task/operation`, params);
|
return post(`${PREFIX}task/operation`, params);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const batchUpdateTaskStatusApi = (params: any) => {
|
||||||
|
return post(`${PREFIX}task/batchOperation`, params);
|
||||||
|
};
|
||||||
|
|
||||||
export const attentionTaskApi = (params: any) => {
|
export const attentionTaskApi = (params: any) => {
|
||||||
return post(`${PREFIX}task/attention`, params);
|
return post(`${PREFIX}task/attention`, params);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
ref="tableFormRef"
|
ref="tableFormRef"
|
||||||
tableName="SIMULATION_TASK_DEMAND_CREATE"
|
tableName="SIMULATION_TASK_DEMAND_CREATE"
|
||||||
:colNum="2"
|
:colNum="2"
|
||||||
:hideKeys="['attachments']"
|
:hideKeys="hideKeys"
|
||||||
>
|
>
|
||||||
<template #form-downAttachments>
|
<template #form-downAttachments>
|
||||||
<div class="attachments">
|
<div class="attachments">
|
||||||
@@ -39,6 +39,7 @@ import { dataQueryDirApi } from '@/api/data/data';
|
|||||||
import { downloadFileById } from '@/utils/file';
|
import { downloadFileById } from '@/utils/file';
|
||||||
import { CommonStore } from '@/stores/common';
|
import { CommonStore } from '@/stores/common';
|
||||||
import { listDeptApi } from '@/api/system/departMent';
|
import { listDeptApi } from '@/api/system/departMent';
|
||||||
|
import { getDemandHideKeys, getUserSimulationType } from '@/tenants/lyric/views/task/lyricTask';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
demandUid: string;
|
demandUid: string;
|
||||||
@@ -48,6 +49,8 @@ const commonStore = CommonStore();
|
|||||||
const demandInfo = ref<any>({});
|
const demandInfo = ref<any>({});
|
||||||
const tableFormRef = ref();
|
const tableFormRef = ref();
|
||||||
|
|
||||||
|
const hideKeys = ref(['attachments'].concat(getDemandHideKeys(getUserSimulationType())));
|
||||||
|
|
||||||
const getDemandInfoFun = async () => {
|
const getDemandInfoFun = async () => {
|
||||||
const res: any = await getDemandDetailApi({ demandId: props.demandUid });
|
const res: any = await getDemandDetailApi({ demandId: props.demandUid });
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ const commonStore = CommonStore();
|
|||||||
const demandRef = ref();
|
const demandRef = ref();
|
||||||
|
|
||||||
const visibleDialog = ({ isCreate, row }: any) => {
|
const visibleDialog = ({ isCreate, row }: any) => {
|
||||||
if (!isCreate) {
|
// if (!isCreate) {
|
||||||
if (row) {
|
// if (row) {
|
||||||
if (row.demandType) {
|
// if (row.demandType) {
|
||||||
setHideKeys(row.demandType);
|
// setHideKeys(row.demandType);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
};
|
};
|
||||||
const loadTableForm = () => {};
|
const loadTableForm = () => {};
|
||||||
|
|
||||||
@@ -40,17 +40,17 @@ const hideKeys = ref(['downAttachments']);
|
|||||||
* @param type
|
* @param type
|
||||||
*/
|
*/
|
||||||
const changeFun = async (val: any) => {
|
const changeFun = async (val: any) => {
|
||||||
if (val.type === 'form') {
|
// if (val.type === 'form') {
|
||||||
if (val.val.key === 'demandType') {
|
// if (val.val.key === 'demandType') {
|
||||||
const formData = demandRef.value.tableFormRef.getFormDataFun();
|
// const formData = demandRef.value.tableFormRef.getFormDataFun();
|
||||||
const simTypeList: any = commonStore.getDictData(val.val.data.demandType);
|
// const simTypeList: any = commonStore.getDictData(val.val.data.demandType);
|
||||||
demandRef.value.tableFormRef.setOptionsFun('simType', simTypeList.A);
|
// demandRef.value.tableFormRef.setOptionsFun('simType', simTypeList.A);
|
||||||
// const formData = tableFormRef.value.getFormDataFun();
|
// // const formData = tableFormRef.value.getFormDataFun();
|
||||||
// tableFormRef.value.setFormDataFun({ ...formData, simType: '' });
|
// // tableFormRef.value.setFormDataFun({ ...formData, simType: '' });
|
||||||
demandRef.value.editFormInfo = { ...formData, simType: '' };
|
// demandRef.value.editFormInfo = { ...formData, simType: '' };
|
||||||
setHideKeys(val.val.val);
|
// setHideKeys(val.val.val);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
};
|
};
|
||||||
const setHideKeys = (key: string) => {
|
const setHideKeys = (key: string) => {
|
||||||
if (key === 'DEMAND_TYPE1') {
|
if (key === 'DEMAND_TYPE1') {
|
||||||
|
|||||||
46
src/tenants/lyric/views/task/lyricTask.ts
Normal file
46
src/tenants/lyric/views/task/lyricTask.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
export const getDemandHideKeys = (key: string) => {
|
||||||
|
const allKeys = [
|
||||||
|
'simulationPurpose',
|
||||||
|
'animationPurpose',
|
||||||
|
'robotBrand',
|
||||||
|
'axis',
|
||||||
|
'beatDemand',
|
||||||
|
'useType',
|
||||||
|
'styleRequirements',
|
||||||
|
'viewRequirements',
|
||||||
|
'referenceData',
|
||||||
|
'deviceMessage',
|
||||||
|
'materialAndCraftsmanship',
|
||||||
|
];
|
||||||
|
let keys: string[] = [];
|
||||||
|
if (key.indexOf('有限元') !== -1 || key.indexOf('DISCIPLINE_TYPE') !== -1) {
|
||||||
|
const finiteElementKeys = ['simulationPurpose'];
|
||||||
|
keys = allKeys.filter((item) => !finiteElementKeys.includes(item));
|
||||||
|
} else if (key.indexOf('动画') !== -1) {
|
||||||
|
const animationKeys = ['animationPurpose', 'robotBrand', 'axis', 'beatDemand'];
|
||||||
|
keys = allKeys.filter((item) => !animationKeys.includes(item));
|
||||||
|
} else if (key.indexOf('工业') !== -1) {
|
||||||
|
const industrialKeys = [
|
||||||
|
'useType',
|
||||||
|
'styleRequirements',
|
||||||
|
'viewRequirements',
|
||||||
|
'referenceData',
|
||||||
|
'deviceMessage',
|
||||||
|
'materialAndCraftsmanship',
|
||||||
|
];
|
||||||
|
keys = allKeys.filter((item) => !industrialKeys.includes(item));
|
||||||
|
} else if (key.indexOf('机器人') !== -1) {
|
||||||
|
const robotKeys = ['robotBrand', 'axis'];
|
||||||
|
keys = allKeys.filter((item) => !robotKeys.includes(item));
|
||||||
|
} else if (key.indexOf('公差') !== -1) {
|
||||||
|
const toleranceKeys = [''];
|
||||||
|
keys = allKeys.filter((item) => !toleranceKeys.includes(item));
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getUserSimulationType = () => {
|
||||||
|
return '有限元';
|
||||||
|
// return '动画';
|
||||||
|
// return '工业';
|
||||||
|
};
|
||||||
@@ -1,15 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="gl-page-content-full">
|
<div class="gl-page-content-full">
|
||||||
<taskTable
|
<div class="tabs">
|
||||||
showIndex
|
<el-tabs v-model="isSend" type="card">
|
||||||
ref="exeTableRef"
|
<el-tab-pane label="未分发任务" :name="false" />
|
||||||
tableName="SIMULATION_TASK_SEND_LIST"
|
<el-tab-pane label="已分发任务" :name="true" />
|
||||||
:params="taskParams"
|
</el-tabs>
|
||||||
exportFileName="我分发的任务列表"
|
</div>
|
||||||
:action-list="actionList"
|
<div class="task-table-list">
|
||||||
@show="editTaskFun"
|
<taskTable
|
||||||
>
|
showIndex
|
||||||
</taskTable>
|
ref="exeTableRef"
|
||||||
|
tableName="SIMULATION_TASK_EXECUTE_LIST"
|
||||||
|
:params="taskParams"
|
||||||
|
exportFileName="我分发的任务列表"
|
||||||
|
:action-list="actionList"
|
||||||
|
@show="editTaskFun"
|
||||||
|
>
|
||||||
|
</taskTable>
|
||||||
|
</div>
|
||||||
<Dialog
|
<Dialog
|
||||||
v-model="formVisible"
|
v-model="formVisible"
|
||||||
:loading="loadingInterface"
|
:loading="loadingInterface"
|
||||||
@@ -23,7 +31,7 @@
|
|||||||
ref="tableFormRef"
|
ref="tableFormRef"
|
||||||
tableName="SIMULATION_TASK_SEND_LIST"
|
tableName="SIMULATION_TASK_SEND_LIST"
|
||||||
@load="formLoad"
|
@load="formLoad"
|
||||||
v-model:data="editFormInfo"
|
v-model:data="editRow"
|
||||||
@change="changeFun"
|
@change="changeFun"
|
||||||
:formAttrs="formAttrs"
|
:formAttrs="formAttrs"
|
||||||
>
|
>
|
||||||
@@ -47,11 +55,12 @@
|
|||||||
@update-fn="updateTaskFun"
|
@update-fn="updateTaskFun"
|
||||||
>
|
>
|
||||||
</taskDetail>
|
</taskDetail>
|
||||||
|
<SendTask v-if="showSendDia" v-model:diaVisible="showSendDia" :taskInfo="editRow"></SendTask>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { deleteTaskApi, updateTaskStatusApi } from '@/api/project/task';
|
import { updateTaskStatusApi } from '@/api/project/task';
|
||||||
// import BaseTable from '@/components/common/table/baseTable.vue';
|
// import BaseTable from '@/components/common/table/baseTable.vue';
|
||||||
import {
|
import {
|
||||||
disposeDisabledExeStatus,
|
disposeDisabledExeStatus,
|
||||||
@@ -62,13 +71,16 @@ import {
|
|||||||
} from '@/utils/enum/task';
|
} from '@/utils/enum/task';
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import taskTable from '../components/taskTable.vue';
|
import taskTable from '../components/taskTable.vue';
|
||||||
import { nextTick, onMounted, ref } from 'vue';
|
import { computed, nextTick, onMounted, ref } from 'vue';
|
||||||
import Dialog from '@/components/common/dialog/index.vue';
|
import Dialog from '@/components/common/dialog/index.vue';
|
||||||
import TableForm from '@/components/common/table/tableForm.vue';
|
import TableForm from '@/components/common/table/tableForm.vue';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { getMemberListIds } from '@/utils/task';
|
import { getMemberListIds } from '@/utils/task';
|
||||||
import { isNumber } from 'lodash-es';
|
import { isNumber } from 'lodash-es';
|
||||||
import taskDetail from '@/views/task/projectDetail/components/taskDetail.vue';
|
import taskDetail from '@/views/task/projectDetail/components/taskDetail.vue';
|
||||||
|
import { enableConfigByTenant, TENANT_ENUM } from '@/tenants/tenant';
|
||||||
|
import SendTask from './sendTask.vue';
|
||||||
|
import { changeTaskStatusCommon } from '../taskPage';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
actionList: {
|
actionList: {
|
||||||
@@ -96,21 +108,49 @@ const formAttrs = ref({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const taskParams = ref({ type: 3 });
|
const isSend = ref(false);
|
||||||
|
|
||||||
|
const taskParams = computed(() => {
|
||||||
|
if (isSend.value) {
|
||||||
|
// 已分发的任务
|
||||||
|
return { type: 3 };
|
||||||
|
} else {
|
||||||
|
// 未分发的任务
|
||||||
|
return { type: 4 };
|
||||||
|
}
|
||||||
|
});
|
||||||
const closeFun = () => {
|
const closeFun = () => {
|
||||||
formVisible.value = false;
|
formVisible.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const showSendDia = ref(false);
|
||||||
|
|
||||||
const actionList = ref([
|
const actionList = ref([
|
||||||
{
|
{
|
||||||
title: '编辑',
|
title: '编辑',
|
||||||
type: 'primary',
|
type: 'primary',
|
||||||
click: (row: any) => {
|
click: (row: any) => {
|
||||||
editTaskFun(row);
|
// console.log('tag9', row['tag9'], enableConfigByTenant([TENANT_ENUM.LYRIC]));
|
||||||
|
// 从需求来的任务,走分发逻辑,lyric定制逻辑
|
||||||
|
if (
|
||||||
|
!isSend.value &&
|
||||||
|
enableConfigByTenant([TENANT_ENUM.LYRIC]) &&
|
||||||
|
row['tag9'] === 'FROM_DEMAND'
|
||||||
|
) {
|
||||||
|
showSendDia.value = true;
|
||||||
|
// editRow.value = row;
|
||||||
|
} else {
|
||||||
|
// 仿真策划出来的任务,走编辑逻辑
|
||||||
|
editTaskFun(row);
|
||||||
|
}
|
||||||
|
editRow.value = {
|
||||||
|
...row,
|
||||||
|
achieveStatus: row.achieveStatus + '',
|
||||||
|
eMemberList: getMemberListIds(row.eMemberList),
|
||||||
|
planTime: [row.beginTime, row.endTime],
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
...props.actionList,
|
...props.actionList,
|
||||||
{
|
{
|
||||||
title: '详情',
|
title: '详情',
|
||||||
@@ -120,14 +160,23 @@ const actionList = ref([
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '删除',
|
title: '驳回',
|
||||||
type: 'danger',
|
type: 'danger',
|
||||||
needConfirm: true,
|
needConfirm: true,
|
||||||
confirmTip: '确认删除吗?',
|
confirmTip: '确认驳回吗?',
|
||||||
click: (row: any) => {
|
click: (row: any) => {
|
||||||
deleteTaskFun(row.uuid);
|
changeTaskStatus(row, TASK_PROCESS_STATUS.REJECTED);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// title: '删除',
|
||||||
|
// type: 'danger',
|
||||||
|
// needConfirm: true,
|
||||||
|
// confirmTip: '确认删除吗?',
|
||||||
|
// click: (row: any) => {
|
||||||
|
// deleteTaskFun(row.uuid);
|
||||||
|
// },
|
||||||
|
// },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const editRow = ref();
|
const editRow = ref();
|
||||||
@@ -137,7 +186,7 @@ const editTaskFun = (row: any) => {
|
|||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
formLoad();
|
formLoad();
|
||||||
});
|
});
|
||||||
setFormData(editRow.value);
|
// setFormData(editRow.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
const showTaskDetailDialog = ref(false);
|
const showTaskDetailDialog = ref(false);
|
||||||
@@ -148,43 +197,50 @@ const showTaskDetailFun = (row: any) => {
|
|||||||
currentTaskInfo.value = row;
|
currentTaskInfo.value = row;
|
||||||
};
|
};
|
||||||
|
|
||||||
const editFormInfo = ref({});
|
// const editFormInfo = ref({});
|
||||||
|
|
||||||
const changeFun = async () => {
|
const changeFun = async () => {
|
||||||
const formData = tableFormRef.value.getFormDataFun();
|
// const formData = tableFormRef.value.getFormDataFun();
|
||||||
editFormInfo.value = formData;
|
// editFormInfo.value = formData;
|
||||||
};
|
};
|
||||||
|
|
||||||
const setFormData = (row: any) => {
|
// const setFormData = (row: any) => {
|
||||||
if (tableFormRef.value) {
|
// if (tableFormRef.value) {
|
||||||
// tableFormRef.value.setFormDataFun({
|
// // tableFormRef.value.setFormDataFun({
|
||||||
// ...row,
|
// // ...row,
|
||||||
// achieveStatus: row.achieveStatus + '',
|
// // achieveStatus: row.achieveStatus + '',
|
||||||
// eMemberList: getMemberListIds(row.eMemberList),
|
// // eMemberList: getMemberListIds(row.eMemberList),
|
||||||
// });
|
// // });
|
||||||
editFormInfo.value = {
|
// editFormInfo.value = {
|
||||||
...row,
|
// ...row,
|
||||||
achieveStatus: row.achieveStatus + '',
|
// achieveStatus: row.achieveStatus + '',
|
||||||
eMemberList: getMemberListIds(row.eMemberList),
|
// eMemberList: getMemberListIds(row.eMemberList),
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
|
|
||||||
const deleteTaskFun = async (uuid: string) => {
|
const changeTaskStatus = async (row: any, status: string) => {
|
||||||
const res: any = await deleteTaskApi({ taskIdList: [uuid] });
|
if (await changeTaskStatusCommon(row, status)) {
|
||||||
if (res.code === 200) {
|
|
||||||
ElMessage({
|
|
||||||
message: '删除成功!',
|
|
||||||
type: 'success',
|
|
||||||
});
|
|
||||||
exeTableRef.value.tableRef.resetFun();
|
exeTableRef.value.tableRef.resetFun();
|
||||||
} else {
|
exeTableRef.value.initTaskCount();
|
||||||
ElMessage({
|
|
||||||
message: res.msg,
|
|
||||||
type: 'error',
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// const deleteTaskFun = async (uuid: string) => {
|
||||||
|
// const res: any = await deleteTaskApi({ taskIdList: [uuid] });
|
||||||
|
// if (res.code === 200) {
|
||||||
|
// ElMessage({
|
||||||
|
// message: '删除成功!',
|
||||||
|
// type: 'success',
|
||||||
|
// });
|
||||||
|
// exeTableRef.value.tableRef.resetFun();
|
||||||
|
// } else {
|
||||||
|
// ElMessage({
|
||||||
|
// message: res.msg,
|
||||||
|
// type: 'error',
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// };
|
||||||
const formLoad = () => {
|
const formLoad = () => {
|
||||||
// nextTick(() => {
|
// nextTick(() => {
|
||||||
const exeStatusList = TASK_PROCESS_STATUS_OPTIONS.map((item: any) => {
|
const exeStatusList = TASK_PROCESS_STATUS_OPTIONS.map((item: any) => {
|
||||||
@@ -203,7 +259,7 @@ const formLoad = () => {
|
|||||||
});
|
});
|
||||||
tableFormRef.value.setOptionsFun('exeStatus', exeStatusList);
|
tableFormRef.value.setOptionsFun('exeStatus', exeStatusList);
|
||||||
tableFormRef.value.setOptionsFun('achieveStatus', achieveStatusList);
|
tableFormRef.value.setOptionsFun('achieveStatus', achieveStatusList);
|
||||||
setFormData(editRow.value);
|
// setFormData(editRow.value);
|
||||||
// });
|
// });
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -309,3 +365,8 @@ const updateTaskFun = async (info: any) => {
|
|||||||
};
|
};
|
||||||
onMounted(() => {});
|
onMounted(() => {});
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.task-table-list {
|
||||||
|
height: calc(100% - 55px) !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
481
src/views/task/simulationTask/mySend/sendTask.vue
Normal file
481
src/views/task/simulationTask/mySend/sendTask.vue
Normal file
@@ -0,0 +1,481 @@
|
|||||||
|
<template>
|
||||||
|
<Dialog
|
||||||
|
:loading="loadingInterface"
|
||||||
|
v-model="diaVisible"
|
||||||
|
diaTitle="分发任务"
|
||||||
|
:width="500"
|
||||||
|
:height="500"
|
||||||
|
@close="closeSendFun"
|
||||||
|
show-footer
|
||||||
|
>
|
||||||
|
<el-form ref="sendFormRef" :rules="sendFormRules" :model="sendForm" label-width="auto">
|
||||||
|
<el-form-item label="上层节点:" prop="insertIndex">
|
||||||
|
<el-tree-select
|
||||||
|
ref="taskTreeRef"
|
||||||
|
filterable
|
||||||
|
:check-strictly="true"
|
||||||
|
v-model="sendForm.insertIndex"
|
||||||
|
:data="indexTreeData"
|
||||||
|
node-key="uuid"
|
||||||
|
:props="{ label: 'nodeName', value: 'uuid' }"
|
||||||
|
default-expand-all
|
||||||
|
:render-after-expand="false"
|
||||||
|
>
|
||||||
|
<template #default="{ data: { nodeName } }">
|
||||||
|
{{ nodeName }}
|
||||||
|
</template>
|
||||||
|
</el-tree-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="所属学科:">
|
||||||
|
<el-select class="loadcase-lib" :teleported="false" v-model="sendForm.discipline">
|
||||||
|
<el-option
|
||||||
|
v-for="item in disciplineList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="" v-if="formDemandAndNotFiniteElement">
|
||||||
|
<el-form-item label="场景选择:">
|
||||||
|
<el-select class="loadcase-lib" :teleported="false" v-model="sendForm.scenario">
|
||||||
|
<el-option
|
||||||
|
v-for="item in scenarioList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<el-form-item label="插入模式:">
|
||||||
|
<el-radio-group v-model="insertTaskMode">
|
||||||
|
<el-radio value="lib" size="large">从工况库选任务</el-radio>
|
||||||
|
<el-radio value="custom" size="large">自定义任务名称</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库名称:" prop="currentLoadcaseLib" v-if="insertTaskMode === 'lib'">
|
||||||
|
<el-select
|
||||||
|
class="loadcase-lib"
|
||||||
|
:teleported="false"
|
||||||
|
v-model="sendForm.currentLoadcaseLib"
|
||||||
|
:props="{ label: 'poolName', value: 'value' }"
|
||||||
|
value-key="poolName"
|
||||||
|
:fit-input-width="true"
|
||||||
|
@change="changeLoadcaseLibFun"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in loadcaseLibList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.poolName"
|
||||||
|
:value="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
label="版本:"
|
||||||
|
prop="currentLoadcaseLibVersion"
|
||||||
|
v-if="insertTaskMode === 'lib'"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
class="version"
|
||||||
|
:teleported="false"
|
||||||
|
v-model="sendForm.currentLoadcaseLibVersion"
|
||||||
|
:props="{ label: 'poolVersion', value: 'value' }"
|
||||||
|
value-key="poolVersion"
|
||||||
|
:fit-input-width="true"
|
||||||
|
@change="changeLoadcaseVersionFun"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in loadcaseLibVersionList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.poolVersion"
|
||||||
|
:value="item"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="选择工况:" prop="chooseTaskList" v-if="insertTaskMode === 'lib'">
|
||||||
|
<el-select-v2
|
||||||
|
v-model="sendForm.chooseTaskList"
|
||||||
|
:options="libTaskList"
|
||||||
|
placeholder="请选择"
|
||||||
|
filterable
|
||||||
|
clearable
|
||||||
|
value-key="uuid"
|
||||||
|
:multiple="false"
|
||||||
|
>
|
||||||
|
<template #default="{ item }">
|
||||||
|
<div class="flex items-center">
|
||||||
|
<img class="loadcase-img" src="@/assets/imgs/projectTree/loadcase.png" alt="" />
|
||||||
|
<span>{{ item.label }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-select-v2>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="任务名称:" prop="taskName" v-if="insertTaskMode === 'custom'">
|
||||||
|
<el-input v-model="sendForm.taskName"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
<el-form-item label="计划时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="sendForm.planTime"
|
||||||
|
type="datetimerange"
|
||||||
|
placeholder="选择日期"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仿真执行人:" prop="eMemberList">
|
||||||
|
<UserSelect v-model="sendForm.eMemberList" :multiple="true" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div>
|
||||||
|
<el-button @click="closeSendFun">取消</el-button>
|
||||||
|
<el-button :loading="loadingInterface" type="primary" @click="sendTaskConfirmFun"
|
||||||
|
>确认</el-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { getMemberListIds, getTagMapList } from '@/utils/task';
|
||||||
|
import { computed, nextTick, reactive, ref } from 'vue';
|
||||||
|
import { getTaskTreeFun } from '../../projectDetail/components/projectApi';
|
||||||
|
import { filterTask } from '../../projectDetail/components/project';
|
||||||
|
import { tagSortList } from '@/utils/enum/node';
|
||||||
|
import { ElMessage } from 'element-plus';
|
||||||
|
import Dialog from '@/components/common/dialog/index.vue';
|
||||||
|
import {
|
||||||
|
getAllTaskPoolApi,
|
||||||
|
getTaskPoolLoadcasesApi,
|
||||||
|
getTaskPoolVersionsApi,
|
||||||
|
} from '@/api/task/taskpool';
|
||||||
|
// import { useDict } from '@/utils/useDict';
|
||||||
|
import { onMounted } from 'vue';
|
||||||
|
import UserSelect from '@/components/common/userSelect/index.vue';
|
||||||
|
import { modifyNodeTaskPerformanceApi } from '@/api/project/node';
|
||||||
|
import { CommonStore } from '@/stores/common';
|
||||||
|
import { batchUpdateTaskStatusApi } from '@/api/project/task';
|
||||||
|
import { getUserSimulationType } from '@/tenants/lyric/views/task/lyricTask';
|
||||||
|
import { enableConfigByTenant, TENANT_ENUM } from '@/tenants/tenant';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
diaVisible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
taskInfo: {
|
||||||
|
type: Object,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const emits = defineEmits(['update:diaVisible']);
|
||||||
|
|
||||||
|
// const { DISCIPLINE_TYPE } = useDict('DISCIPLINE_TYPE');
|
||||||
|
|
||||||
|
const diaVisible = computed({
|
||||||
|
get() {
|
||||||
|
return props.diaVisible;
|
||||||
|
},
|
||||||
|
set(val) {
|
||||||
|
emits('update:diaVisible', val);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const sendForm = reactive<any>({
|
||||||
|
beginTime: '',
|
||||||
|
endTime: '',
|
||||||
|
taskName: '',
|
||||||
|
eMemberList: '',
|
||||||
|
chooseTaskList: [],
|
||||||
|
currentLoadcaseLibVersion: '',
|
||||||
|
currentLoadcaseLib: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
const loadingInterface = ref(false);
|
||||||
|
|
||||||
|
const closeSendFun = () => {
|
||||||
|
emits('update:diaVisible', false);
|
||||||
|
loadingInterface.value = false;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* lib 工况库
|
||||||
|
* custom 自定义
|
||||||
|
*/
|
||||||
|
const insertTaskMode = ref('lib');
|
||||||
|
|
||||||
|
const loadcaseLibList = ref<any[]>([]);
|
||||||
|
const loadcaseLibVersionList = ref();
|
||||||
|
|
||||||
|
const changeLoadcaseLibFun = (lib: any) => {
|
||||||
|
sendForm.currentLoadcaseLib = lib;
|
||||||
|
queryLoadcaseLibVersionsFun();
|
||||||
|
};
|
||||||
|
|
||||||
|
const changeLoadcaseVersionFun = () => {
|
||||||
|
getLoadcaseList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const queryPoolListFun = async () => {
|
||||||
|
const res: any = await getAllTaskPoolApi({ bCurrent: true });
|
||||||
|
if (res.code === 200 && Array.isArray(res.data)) {
|
||||||
|
loadcaseLibList.value = res.data.reverse();
|
||||||
|
} else {
|
||||||
|
loadcaseLibList.value = [];
|
||||||
|
}
|
||||||
|
if (loadcaseLibList.value.length > 0) {
|
||||||
|
sendForm.currentLoadcaseLib = loadcaseLibList.value[0];
|
||||||
|
queryLoadcaseLibVersionsFun();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const queryLoadcaseLibVersionsFun = async () => {
|
||||||
|
const req = {
|
||||||
|
poolName: sendForm.currentLoadcaseLib.poolName,
|
||||||
|
};
|
||||||
|
const res: any = await getTaskPoolVersionsApi(req);
|
||||||
|
if (res.code === 200 && res.data && Array.isArray(res.data) && res.data.length > 0) {
|
||||||
|
loadcaseLibVersionList.value = res.data;
|
||||||
|
if (loadcaseLibVersionList.value.length > 0) {
|
||||||
|
sendForm.currentLoadcaseLibVersion = loadcaseLibVersionList.value[0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
loadcaseLibVersionList.value = [];
|
||||||
|
}
|
||||||
|
// await queryTaskPoolFun();
|
||||||
|
getLoadcaseList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const libTaskList = ref<any[]>([]);
|
||||||
|
|
||||||
|
const getLoadcaseList = async () => {
|
||||||
|
const res: any = await getTaskPoolLoadcasesApi({
|
||||||
|
poolName: sendForm.currentLoadcaseLib.poolName,
|
||||||
|
version: sendForm.currentLoadcaseLibVersion.poolVersion,
|
||||||
|
});
|
||||||
|
if (res.code === 200) {
|
||||||
|
libTaskList.value = res.data.map((item: any) => {
|
||||||
|
return {
|
||||||
|
label: item.nodeName,
|
||||||
|
value: item,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const sendFormRef = ref();
|
||||||
|
|
||||||
|
const sendFormRules = reactive<any>({
|
||||||
|
insertIndex: [{ required: true, message: '请选择上层节点', trigger: 'change' }],
|
||||||
|
currentLoadcaseLib: [{ required: true, message: '请选择工况库', trigger: 'change' }],
|
||||||
|
currentLoadcaseLibVersion: [{ required: true, message: '请选择工况库版本', trigger: 'change' }],
|
||||||
|
chooseTaskList: [{ required: true, message: '请选择分发的任务', trigger: 'change' }],
|
||||||
|
eMemberList: [{ required: true, message: '请选择仿真执行人', trigger: 'change' }],
|
||||||
|
taskName: [{ required: true, message: '请填写任务名称', trigger: 'blur' }],
|
||||||
|
});
|
||||||
|
|
||||||
|
const taskTreeRef = ref();
|
||||||
|
|
||||||
|
const simulationType = getUserSimulationType();
|
||||||
|
|
||||||
|
/** 来自需求的任务,且非有限元仿真 */
|
||||||
|
const formDemandAndNotFiniteElement = computed(() => {
|
||||||
|
return props.taskInfo?.tag9 === 'FROM_DEMAND' && simulationType.indexOf('有限元') === -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
const sendTaskConfirmFun = () => {
|
||||||
|
sendFormRef.value.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
// if (insertTaskMode.value === 'lib') {
|
||||||
|
// if (sendForm.chooseTaskList.value.length === 0) {
|
||||||
|
// ElMessage.error('请选择任务');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
loadingInterface.value = true;
|
||||||
|
const parentNodeInfo = taskTreeRef.value.getCurrentNode();
|
||||||
|
const tagProperty: { [key: string]: any } = {};
|
||||||
|
// 保留tag10的信息,获取tag10的信息再存起来
|
||||||
|
tagSortList.concat(['tag10']).forEach((item: any) => {
|
||||||
|
// tagProperty[item] = parentNodeInfo[item] ? parentNodeInfo[item].split(',') : [];
|
||||||
|
tagProperty[item] = parentNodeInfo[item] ? parentNodeInfo[item] : '';
|
||||||
|
});
|
||||||
|
let params: any = {};
|
||||||
|
const pMemberListStr = getMemberListIds(sendForm.pMemberList);
|
||||||
|
const payAttentionMemberStr = getMemberListIds(sendForm.payAttentionMemberList);
|
||||||
|
let hasRepeatTask = false;
|
||||||
|
debugger;
|
||||||
|
// 手动再添加一下工况的指标
|
||||||
|
const performanceList: any[] = [];
|
||||||
|
if (insertTaskMode.value === 'lib' && !formDemandAndNotFiniteElement.value) {
|
||||||
|
const chooseTaskList = [sendForm.chooseTaskList];
|
||||||
|
const addTaskList = chooseTaskList.map((item: any) => {
|
||||||
|
if (parentNodeInfo?.taskList?.length > 0) {
|
||||||
|
parentNodeInfo?.taskList.forEach((task: any) => {
|
||||||
|
if (task.nodeName === item.nodeName) {
|
||||||
|
// 利元亨会基于同名任务再次分发,如果当前任务uuid与已有任务uuid相同,则可以继续分发
|
||||||
|
if (enableConfigByTenant([TENANT_ENUM.LYRIC])) {
|
||||||
|
if (task.uuid !== sendForm.uuid) {
|
||||||
|
ElMessage.warning(item.nodeName + '任务已存在,无法再创建!');
|
||||||
|
hasRepeatTask = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ElMessage.warning(item.nodeName + '任务已存在,无法再创建!');
|
||||||
|
hasRepeatTask = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
item.children.forEach((child: any) => {
|
||||||
|
performanceList.push({
|
||||||
|
...child,
|
||||||
|
pid: sendForm.uuid,
|
||||||
|
parentId: sendForm.uuid,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
taskName: item.nodeName,
|
||||||
|
// 基于已有uuid任务,将工况任务信息复制到已有任务上
|
||||||
|
taskId: sendForm.uuid,
|
||||||
|
...item,
|
||||||
|
...tagProperty,
|
||||||
|
beginTime: sendForm.planTime ? sendForm.planTime[0] : '',
|
||||||
|
endTime: sendForm.planTime ? sendForm.planTime[1] : '',
|
||||||
|
pMemberList: pMemberListStr,
|
||||||
|
payAttentionMemberList: payAttentionMemberStr,
|
||||||
|
eMemberList: sendForm.eMemberList,
|
||||||
|
aMemberList: getMemberListIds(sendForm.aMemberList),
|
||||||
|
discipline: sendForm.discipline,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
if (hasRepeatTask) {
|
||||||
|
loadingInterface.value = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params = addTaskList[0];
|
||||||
|
} else {
|
||||||
|
parentNodeInfo?.taskList.forEach((task: any) => {
|
||||||
|
if (task.nodeName === sendForm.nodeName) {
|
||||||
|
// 利元亨会基于同名任务再次分发,如果当前任务uuid与已有任务uuid相同,则可以继续分发
|
||||||
|
if (enableConfigByTenant([TENANT_ENUM.LYRIC])) {
|
||||||
|
if (task.uuid !== sendForm.uuid) {
|
||||||
|
ElMessage.warning(sendForm.nodeName + '任务已存在,无法再创建!');
|
||||||
|
hasRepeatTask = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ElMessage.warning(sendForm.nodeName + '任务已存在,无法再创建!');
|
||||||
|
hasRepeatTask = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasRepeatTask) {
|
||||||
|
loadingInterface.value = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params = {
|
||||||
|
// 从需求来,且不是有限元仿真
|
||||||
|
taskName: formDemandAndNotFiniteElement.value ? sendForm.scenario : sendForm.taskName,
|
||||||
|
taskId: sendForm.uuid,
|
||||||
|
nodeId: parentNodeInfo.uuid,
|
||||||
|
...tagProperty,
|
||||||
|
beginTime: sendForm.planTime ? sendForm.planTime[0] : '',
|
||||||
|
endTime: sendForm.planTime ? sendForm.planTime[1] : '',
|
||||||
|
pMemberList: pMemberListStr,
|
||||||
|
payAttentionMemberList: payAttentionMemberStr,
|
||||||
|
eMemberList: sendForm.eMemberList,
|
||||||
|
aMemberList: getMemberListIds(sendForm.aMemberList),
|
||||||
|
discipline: sendForm.discipline,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (params.id) {
|
||||||
|
delete params.id;
|
||||||
|
}
|
||||||
|
if (params.uuid) {
|
||||||
|
delete params.uuid;
|
||||||
|
}
|
||||||
|
const res: any = await batchUpdateTaskStatusApi({
|
||||||
|
req: [{ ...props.taskInfo, ...params }],
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.code === 200) {
|
||||||
|
ElMessage.success('任务分发成功!');
|
||||||
|
if (performanceList.length > 0) {
|
||||||
|
modifyNodeTaskPerformanceApi({
|
||||||
|
addNodeList: performanceList,
|
||||||
|
tagMap: getTagMapList(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
closeSendFun();
|
||||||
|
} else {
|
||||||
|
ElMessage.error('任务分发失败!');
|
||||||
|
}
|
||||||
|
loadingInterface.value = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const indexTreeData = ref<any[]>([]);
|
||||||
|
|
||||||
|
const sendTaskFun = async (row: any) => {
|
||||||
|
// props.diaVisible = true;
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
sendFormRef.value.resetFields();
|
||||||
|
});
|
||||||
|
|
||||||
|
insertTaskMode.value = 'lib';
|
||||||
|
sendForm.currentLoadcaseLib = '';
|
||||||
|
sendForm.currentLoadcaseLibVersion = '';
|
||||||
|
sendForm.chooseTaskList = [];
|
||||||
|
sendForm.taskName = '';
|
||||||
|
sendForm.beginTime = '';
|
||||||
|
if (row.beginTime && row.endTime) {
|
||||||
|
sendForm.planTime = [row.beginTime, row.endTime];
|
||||||
|
} else {
|
||||||
|
sendForm.planTime = null;
|
||||||
|
}
|
||||||
|
sendForm.endTime = '';
|
||||||
|
sendForm.eMemberList = '';
|
||||||
|
// sendForm.aMemberList = row.aMemberList;
|
||||||
|
if (row.simType) {
|
||||||
|
sendForm.discipline = row.simType;
|
||||||
|
}
|
||||||
|
|
||||||
|
const taskTree = await getTaskTreeFun(row.newTag1, row.newTag2);
|
||||||
|
indexTreeData.value = filterTask(taskTree);
|
||||||
|
sendForm.insertIndex = row.newTag5;
|
||||||
|
taskTreeRef.value.setCurrentKey(row.newTag5, true);
|
||||||
|
|
||||||
|
await queryPoolListFun();
|
||||||
|
|
||||||
|
// for (const key in sendForm) {
|
||||||
|
// sendForm[key] = '';
|
||||||
|
// }
|
||||||
|
|
||||||
|
for (const key in row) {
|
||||||
|
if (key !== 'eMemberList') {
|
||||||
|
sendForm[key] = row[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sendForm.taskName = row.demandName;
|
||||||
|
sendForm.eMemberList = getMemberListIds(row.eMemberList);
|
||||||
|
};
|
||||||
|
|
||||||
|
const commonStore = CommonStore();
|
||||||
|
const scenarioList = ref<any[]>([]);
|
||||||
|
const disciplineList = ref<any[]>([]);
|
||||||
|
onMounted(() => {
|
||||||
|
sendTaskFun(props.taskInfo);
|
||||||
|
if (formDemandAndNotFiniteElement.value) {
|
||||||
|
// 从角色获取
|
||||||
|
scenarioList.value = commonStore.getDictData(simulationType + '场景').A;
|
||||||
|
disciplineList.value = commonStore.getDictData(simulationType).A;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped></style>
|
||||||
Reference in New Issue
Block a user