未分发的和已分发的合并起来,单个需求任务的分发功能开发
This commit is contained in:
@@ -17,6 +17,10 @@ export const updateTaskStatusApi = (params: any) => {
|
||||
return post(`${PREFIX}task/operation`, params);
|
||||
};
|
||||
|
||||
export const batchUpdateTaskStatusApi = (params: any) => {
|
||||
return post(`${PREFIX}task/batchOperation`, params);
|
||||
};
|
||||
|
||||
export const attentionTaskApi = (params: any) => {
|
||||
return post(`${PREFIX}task/attention`, params);
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
ref="tableFormRef"
|
||||
tableName="SIMULATION_TASK_DEMAND_CREATE"
|
||||
:colNum="2"
|
||||
:hideKeys="['attachments']"
|
||||
:hideKeys="hideKeys"
|
||||
>
|
||||
<template #form-downAttachments>
|
||||
<div class="attachments">
|
||||
@@ -39,6 +39,7 @@ import { dataQueryDirApi } from '@/api/data/data';
|
||||
import { downloadFileById } from '@/utils/file';
|
||||
import { CommonStore } from '@/stores/common';
|
||||
import { listDeptApi } from '@/api/system/departMent';
|
||||
import { getDemandHideKeys, getUserSimulationType } from '@/tenants/lyric/views/task/lyricTask';
|
||||
|
||||
const props = defineProps<{
|
||||
demandUid: string;
|
||||
@@ -48,6 +49,8 @@ const commonStore = CommonStore();
|
||||
const demandInfo = ref<any>({});
|
||||
const tableFormRef = ref();
|
||||
|
||||
const hideKeys = ref(['attachments'].concat(getDemandHideKeys(getUserSimulationType())));
|
||||
|
||||
const getDemandInfoFun = async () => {
|
||||
const res: any = await getDemandDetailApi({ demandId: props.demandUid });
|
||||
if (res.code === 200) {
|
||||
|
||||
@@ -19,13 +19,13 @@ const commonStore = CommonStore();
|
||||
const demandRef = ref();
|
||||
|
||||
const visibleDialog = ({ isCreate, row }: any) => {
|
||||
if (!isCreate) {
|
||||
if (row) {
|
||||
if (row.demandType) {
|
||||
setHideKeys(row.demandType);
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (!isCreate) {
|
||||
// if (row) {
|
||||
// if (row.demandType) {
|
||||
// setHideKeys(row.demandType);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
};
|
||||
const loadTableForm = () => {};
|
||||
|
||||
@@ -40,17 +40,17 @@ const hideKeys = ref(['downAttachments']);
|
||||
* @param type
|
||||
*/
|
||||
const changeFun = async (val: any) => {
|
||||
if (val.type === 'form') {
|
||||
if (val.val.key === 'demandType') {
|
||||
const formData = demandRef.value.tableFormRef.getFormDataFun();
|
||||
const simTypeList: any = commonStore.getDictData(val.val.data.demandType);
|
||||
demandRef.value.tableFormRef.setOptionsFun('simType', simTypeList.A);
|
||||
// const formData = tableFormRef.value.getFormDataFun();
|
||||
// tableFormRef.value.setFormDataFun({ ...formData, simType: '' });
|
||||
demandRef.value.editFormInfo = { ...formData, simType: '' };
|
||||
setHideKeys(val.val.val);
|
||||
}
|
||||
}
|
||||
// if (val.type === 'form') {
|
||||
// if (val.val.key === 'demandType') {
|
||||
// const formData = demandRef.value.tableFormRef.getFormDataFun();
|
||||
// const simTypeList: any = commonStore.getDictData(val.val.data.demandType);
|
||||
// demandRef.value.tableFormRef.setOptionsFun('simType', simTypeList.A);
|
||||
// // const formData = tableFormRef.value.getFormDataFun();
|
||||
// // tableFormRef.value.setFormDataFun({ ...formData, simType: '' });
|
||||
// demandRef.value.editFormInfo = { ...formData, simType: '' };
|
||||
// setHideKeys(val.val.val);
|
||||
// }
|
||||
// }
|
||||
};
|
||||
const setHideKeys = (key: string) => {
|
||||
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>
|
||||
<div class="gl-page-content-full">
|
||||
<taskTable
|
||||
showIndex
|
||||
ref="exeTableRef"
|
||||
tableName="SIMULATION_TASK_SEND_LIST"
|
||||
:params="taskParams"
|
||||
exportFileName="我分发的任务列表"
|
||||
:action-list="actionList"
|
||||
@show="editTaskFun"
|
||||
>
|
||||
</taskTable>
|
||||
<div class="tabs">
|
||||
<el-tabs v-model="isSend" type="card">
|
||||
<el-tab-pane label="未分发任务" :name="false" />
|
||||
<el-tab-pane label="已分发任务" :name="true" />
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div class="task-table-list">
|
||||
<taskTable
|
||||
showIndex
|
||||
ref="exeTableRef"
|
||||
tableName="SIMULATION_TASK_EXECUTE_LIST"
|
||||
:params="taskParams"
|
||||
exportFileName="我分发的任务列表"
|
||||
:action-list="actionList"
|
||||
@show="editTaskFun"
|
||||
>
|
||||
</taskTable>
|
||||
</div>
|
||||
<Dialog
|
||||
v-model="formVisible"
|
||||
:loading="loadingInterface"
|
||||
@@ -23,7 +31,7 @@
|
||||
ref="tableFormRef"
|
||||
tableName="SIMULATION_TASK_SEND_LIST"
|
||||
@load="formLoad"
|
||||
v-model:data="editFormInfo"
|
||||
v-model:data="editRow"
|
||||
@change="changeFun"
|
||||
:formAttrs="formAttrs"
|
||||
>
|
||||
@@ -47,11 +55,12 @@
|
||||
@update-fn="updateTaskFun"
|
||||
>
|
||||
</taskDetail>
|
||||
<SendTask v-if="showSendDia" v-model:diaVisible="showSendDia" :taskInfo="editRow"></SendTask>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<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 {
|
||||
disposeDisabledExeStatus,
|
||||
@@ -62,13 +71,16 @@ import {
|
||||
} from '@/utils/enum/task';
|
||||
import { ElMessage } from 'element-plus';
|
||||
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 TableForm from '@/components/common/table/tableForm.vue';
|
||||
import dayjs from 'dayjs';
|
||||
import { getMemberListIds } from '@/utils/task';
|
||||
import { isNumber } from 'lodash-es';
|
||||
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({
|
||||
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 = () => {
|
||||
formVisible.value = false;
|
||||
};
|
||||
|
||||
const showSendDia = ref(false);
|
||||
|
||||
const actionList = ref([
|
||||
{
|
||||
title: '编辑',
|
||||
type: 'primary',
|
||||
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,
|
||||
{
|
||||
title: '详情',
|
||||
@@ -120,14 +160,23 @@ const actionList = ref([
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '删除',
|
||||
title: '驳回',
|
||||
type: 'danger',
|
||||
needConfirm: true,
|
||||
confirmTip: '确认删除吗?',
|
||||
confirmTip: '确认驳回吗?',
|
||||
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();
|
||||
@@ -137,7 +186,7 @@ const editTaskFun = (row: any) => {
|
||||
nextTick(() => {
|
||||
formLoad();
|
||||
});
|
||||
setFormData(editRow.value);
|
||||
// setFormData(editRow.value);
|
||||
};
|
||||
|
||||
const showTaskDetailDialog = ref(false);
|
||||
@@ -148,43 +197,50 @@ const showTaskDetailFun = (row: any) => {
|
||||
currentTaskInfo.value = row;
|
||||
};
|
||||
|
||||
const editFormInfo = ref({});
|
||||
// const editFormInfo = ref({});
|
||||
|
||||
const changeFun = async () => {
|
||||
const formData = tableFormRef.value.getFormDataFun();
|
||||
editFormInfo.value = formData;
|
||||
// const formData = tableFormRef.value.getFormDataFun();
|
||||
// editFormInfo.value = formData;
|
||||
};
|
||||
|
||||
const setFormData = (row: any) => {
|
||||
if (tableFormRef.value) {
|
||||
// tableFormRef.value.setFormDataFun({
|
||||
// ...row,
|
||||
// achieveStatus: row.achieveStatus + '',
|
||||
// eMemberList: getMemberListIds(row.eMemberList),
|
||||
// });
|
||||
editFormInfo.value = {
|
||||
...row,
|
||||
achieveStatus: row.achieveStatus + '',
|
||||
eMemberList: getMemberListIds(row.eMemberList),
|
||||
};
|
||||
}
|
||||
};
|
||||
// const setFormData = (row: any) => {
|
||||
// if (tableFormRef.value) {
|
||||
// // tableFormRef.value.setFormDataFun({
|
||||
// // ...row,
|
||||
// // achieveStatus: row.achieveStatus + '',
|
||||
// // eMemberList: getMemberListIds(row.eMemberList),
|
||||
// // });
|
||||
// editFormInfo.value = {
|
||||
// ...row,
|
||||
// achieveStatus: row.achieveStatus + '',
|
||||
// eMemberList: getMemberListIds(row.eMemberList),
|
||||
// };
|
||||
// }
|
||||
// };
|
||||
|
||||
const deleteTaskFun = async (uuid: string) => {
|
||||
const res: any = await deleteTaskApi({ taskIdList: [uuid] });
|
||||
if (res.code === 200) {
|
||||
ElMessage({
|
||||
message: '删除成功!',
|
||||
type: 'success',
|
||||
});
|
||||
const changeTaskStatus = async (row: any, status: string) => {
|
||||
if (await changeTaskStatusCommon(row, status)) {
|
||||
exeTableRef.value.tableRef.resetFun();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: res.msg,
|
||||
type: 'error',
|
||||
});
|
||||
exeTableRef.value.initTaskCount();
|
||||
}
|
||||
};
|
||||
|
||||
// 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 = () => {
|
||||
// nextTick(() => {
|
||||
const exeStatusList = TASK_PROCESS_STATUS_OPTIONS.map((item: any) => {
|
||||
@@ -203,7 +259,7 @@ const formLoad = () => {
|
||||
});
|
||||
tableFormRef.value.setOptionsFun('exeStatus', exeStatusList);
|
||||
tableFormRef.value.setOptionsFun('achieveStatus', achieveStatusList);
|
||||
setFormData(editRow.value);
|
||||
// setFormData(editRow.value);
|
||||
// });
|
||||
};
|
||||
|
||||
@@ -309,3 +365,8 @@ const updateTaskFun = async (info: any) => {
|
||||
};
|
||||
onMounted(() => {});
|
||||
</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