merge
This commit is contained in:
@@ -89,3 +89,12 @@ export const stopHpcJobAdapterApi = (params: any) => {
|
||||
export const delHpcJobsAdapterApi = (params: any) => {
|
||||
return post(`${PREFIX}pbs/delHpcJobsAdapter`, params);
|
||||
};
|
||||
|
||||
/**
|
||||
* mockSubmit-中车hpc提交
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export const mockSubmitApi = (params: any) => {
|
||||
return post(`${PREFIX}pbs/mockSubmit`, params);
|
||||
};
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
:disabled="disabled"
|
||||
@change="changeFun"
|
||||
>
|
||||
<el-button type="primary" :disabled="disabled">选择文件</el-button>
|
||||
<el-button type="primary" :disabled="disabled || (limit && fileList.length >= limit)">
|
||||
选择文件
|
||||
</el-button>
|
||||
<template #file="{ file, index }">
|
||||
<div class="file-item">
|
||||
<FileIcon :fileName="file.name" />
|
||||
@@ -57,6 +59,7 @@ interface Props {
|
||||
modelValue: any;
|
||||
disabled?: boolean;
|
||||
multiple?: boolean;
|
||||
limit?: any;
|
||||
attrs?: any;
|
||||
}
|
||||
|
||||
@@ -64,6 +67,7 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
modelValue: [],
|
||||
disabled: false,
|
||||
multiple: true,
|
||||
limit: null,
|
||||
attrs: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
v-model="formData[item.searchKey || item.key]"
|
||||
:disabled="attrs.disabled || (item.disabled && showDisabled)"
|
||||
:multiple="attrs.multiple"
|
||||
:limit="attrs.limit"
|
||||
@change="(val: any) => changeFun(item.key, val)"
|
||||
@remove="(val: any) => removeFun(item.key, val)"
|
||||
/>
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
:belongProject="belongProject"
|
||||
:parentCategoryPath="parentNodeCategoryPath"
|
||||
:existingNodeCodes="existingNodeCodes"
|
||||
:existingSiblingNodeNames="existingSiblingNodeNames"
|
||||
:showNodeExtraInfo="showNodeExtraInfo"
|
||||
@confirm="onNodeDetailConfirmFun"
|
||||
v-bind="$attrs"
|
||||
@@ -77,6 +78,7 @@ import {
|
||||
findNodePath,
|
||||
extractCategoryNodeTypes,
|
||||
collectNodeCodes,
|
||||
collectSiblingNodeNames,
|
||||
generateFakeId,
|
||||
} from '@/utils/node';
|
||||
import nodeDetailDialog from './nodeDetailDialog.vue';
|
||||
@@ -98,6 +100,7 @@ const addNodeDisabled = ref<any>({});
|
||||
const parentNodeCategoryPath = ref<string[]>([]);
|
||||
|
||||
const existingNodeCodes = ref<string[]>([]);
|
||||
const existingSiblingNodeNames = ref<string[]>([]); // 同层级节点名称列表
|
||||
|
||||
interface Props {
|
||||
data: any;
|
||||
@@ -211,15 +214,20 @@ const addRowFun = (nodeType?: any) => {
|
||||
const checkRowData = getVxeRef()?.getCheckboxRecords(true);
|
||||
|
||||
let categoryPath: string[] = [];
|
||||
let parentFakeId: string | null = null;
|
||||
|
||||
if (checkRowData && checkRowData.length > 0) {
|
||||
const { fullData } = getVxeRef().getTableData();
|
||||
const nodePath = findNodePath(fullData, checkRowData[0]);
|
||||
if (nodePath) {
|
||||
categoryPath = extractCategoryNodeTypes(nodePath);
|
||||
}
|
||||
parentFakeId = checkRowData[0].fakeId;
|
||||
}
|
||||
|
||||
existingNodeCodes.value = collectNodeCodes(props.data);
|
||||
const { fullData } = getVxeRef()?.getTableData() || { fullData: [] };
|
||||
existingNodeCodes.value = collectNodeCodes(fullData || props.data);
|
||||
existingSiblingNodeNames.value = collectSiblingNodeNames(fullData || props.data, parentFakeId);
|
||||
operationType.value = OPERATION_TYPE.ADD;
|
||||
modalNodeType.value = nodeType;
|
||||
modalDetail.value = null;
|
||||
@@ -228,7 +236,13 @@ const addRowFun = (nodeType?: any) => {
|
||||
};
|
||||
|
||||
const openNodeModalFun = (row: any, type: OPERATION_TYPE) => {
|
||||
existingNodeCodes.value = collectNodeCodes(props.data, row.fakeId);
|
||||
const { fullData } = getVxeRef()?.getTableData() || { fullData: [] };
|
||||
existingNodeCodes.value = collectNodeCodes(fullData || props.data, row.fakeId);
|
||||
existingSiblingNodeNames.value = collectSiblingNodeNames(
|
||||
fullData || props.data,
|
||||
row.parentId || null,
|
||||
row.fakeId
|
||||
);
|
||||
operationType.value = type;
|
||||
modalNodeType.value = row.nodeType;
|
||||
modalDetail.value = {
|
||||
|
||||
@@ -152,6 +152,7 @@ interface Props {
|
||||
belongProject?: boolean;
|
||||
parentCategoryPath?: string[];
|
||||
existingNodeCodes?: string[];
|
||||
existingSiblingNodeNames?: string[];
|
||||
enableSelectCode?: boolean;
|
||||
showNodeExtraInfo?: boolean;
|
||||
}
|
||||
@@ -171,6 +172,7 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
belongProject: false,
|
||||
parentCategoryPath: () => [],
|
||||
existingNodeCodes: () => [],
|
||||
existingSiblingNodeNames: () => [],
|
||||
enableSelectCode: false,
|
||||
showNodeExtraInfo: false,
|
||||
});
|
||||
@@ -570,16 +572,28 @@ watch(
|
||||
);
|
||||
|
||||
const ruleData = computed(() => ({
|
||||
nodeName: [
|
||||
{
|
||||
message: t('工况库.同层级名称已存在'),
|
||||
trigger: 'blur',
|
||||
validator: (val: unknown) => {
|
||||
if (!val) {
|
||||
return true;
|
||||
}
|
||||
return !props.existingSiblingNodeNames?.includes(val as string);
|
||||
},
|
||||
},
|
||||
],
|
||||
nodeCode: [
|
||||
// {
|
||||
// message: t('工况库.编号已存在'),
|
||||
// trigger: 'blur',
|
||||
// validator: (val: unknown) => {
|
||||
// if (!val) return true;
|
||||
// if (formData.value.nodeType === NODE_TYPE.DISCIPLINE) return true;
|
||||
// return !props.existingNodeCodes?.includes(val as string);
|
||||
// },
|
||||
// },
|
||||
{
|
||||
message: t('工况库.编号已存在'),
|
||||
trigger: 'blur',
|
||||
validator: (val: unknown) => {
|
||||
if (!val) return true;
|
||||
if (formData.value.nodeType === NODE_TYPE.DISCIPLINE) return true;
|
||||
return !props.existingNodeCodes?.includes(val as string);
|
||||
},
|
||||
},
|
||||
],
|
||||
nodeType: [
|
||||
{
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
:disabled="disabled"
|
||||
@change="changeFun"
|
||||
>
|
||||
<el-button type="primary">上传文件</el-button>
|
||||
<el-button type="primary" :disabled="disabled || (limit && fileList.length >= limit)">
|
||||
上传文件
|
||||
</el-button>
|
||||
<template #file="{ file, index }">
|
||||
<div :key="index" class="file-item">
|
||||
<div class="file-icon">
|
||||
|
||||
@@ -28,7 +28,9 @@
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-else-if="flowNodeParamData.nodeTypeValue === '3'"
|
||||
v-else-if="
|
||||
flowNodeParamData.nodeTypeValue === '3' || flowNodeParamData.label === '动力学计算'
|
||||
"
|
||||
@click="flowClickFun('startOtherNodeFun')"
|
||||
>计算</el-button
|
||||
>
|
||||
|
||||
@@ -425,9 +425,9 @@ const refrehFun = () => {
|
||||
|
||||
onMounted(async () => {
|
||||
await getAppInfo();
|
||||
timer.value = setInterval(() => {
|
||||
refrehFun();
|
||||
}, 60 * 1000);
|
||||
// timer.value = setInterval(() => {
|
||||
refrehFun();
|
||||
// }, 60 * 1000);
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
|
||||
@@ -7,7 +7,12 @@
|
||||
<el-button type="primary" icon="finished" @click="openAddApproveUserFun">
|
||||
{{ $t('工况库.提交评审') }}
|
||||
</el-button>
|
||||
<el-button type="danger" icon="delete" @click="openDelPoolFun">
|
||||
<el-button
|
||||
v-if="!enableConfigByTenant([TENANT_ENUM.LYRIC])"
|
||||
type="danger"
|
||||
icon="delete"
|
||||
@click="openDelPoolFun"
|
||||
>
|
||||
{{ $t('工况库.删除库') }}
|
||||
</el-button>
|
||||
<div class="pool-select select-form">
|
||||
@@ -68,6 +73,7 @@
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
v-if="!enableConfigByTenant([TENANT_ENUM.LYRIC])"
|
||||
:content="$t('工况库.切换至一维表格视图')"
|
||||
placement="top"
|
||||
:disabled="currentTableType !== TableViewType.CARD"
|
||||
@@ -153,7 +159,10 @@
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
v-if="currentTableType === TableViewType.TREE"
|
||||
v-if="
|
||||
currentTableType === TableViewType.TREE &&
|
||||
!enableConfigByTenant([TENANT_ENUM.LYRIC])
|
||||
"
|
||||
:content="$t('工况库.切换至一维表格视图')"
|
||||
placement="top"
|
||||
ref="switchFromTreeToListTooltipRef"
|
||||
@@ -330,6 +339,7 @@ import { TABLE_NAME } from '@/utils/enum/tableName';
|
||||
import { CommonStore } from '@/stores/common';
|
||||
import { useTaskStore } from '@/stores/taskPool';
|
||||
import { jumpPage } from '@/utils/common';
|
||||
import { enableConfigByTenant, TENANT_ENUM } from '@/tenants/tenant';
|
||||
|
||||
const commonStore = CommonStore();
|
||||
const taskStore = useTaskStore();
|
||||
@@ -544,6 +554,32 @@ const validateFun = (): boolean => {
|
||||
ElMessage.warning(t('工况库.编号不能为空', { names }));
|
||||
return false;
|
||||
}
|
||||
|
||||
const normalizeParentId = (parentId: any) => {
|
||||
return parentId === null || parentId === undefined || parentId === '' ? '__ROOT__' : parentId;
|
||||
};
|
||||
const sameLevelNameMap = new Map<string, string[]>();
|
||||
visibleData.forEach((n: any) => {
|
||||
const nodeName = String(n.nodeName || '').trim();
|
||||
if (!nodeName) {
|
||||
return;
|
||||
}
|
||||
const key = `${normalizeParentId(n.parentId)}__${nodeName}`;
|
||||
sameLevelNameMap.set(key, [...(sameLevelNameMap.get(key) || []), n.fakeId]);
|
||||
});
|
||||
const duplicateNameNode = visibleData.find((n: any) => {
|
||||
const nodeName = String(n.nodeName || '').trim();
|
||||
if (!nodeName) {
|
||||
return false;
|
||||
}
|
||||
const key = `${normalizeParentId(n.parentId)}__${nodeName}`;
|
||||
return (sameLevelNameMap.get(key) || []).length > 1;
|
||||
});
|
||||
if (duplicateNameNode) {
|
||||
ElMessage.warning(t('工况库.同一层级下存在重复的名称', { names: duplicateNameNode.nodeName }));
|
||||
return false;
|
||||
}
|
||||
|
||||
const codeSet = new Set<string>();
|
||||
const duplicates: string[] = [];
|
||||
visibleData.forEach((n: any) => {
|
||||
@@ -558,8 +594,8 @@ const validateFun = (): boolean => {
|
||||
}
|
||||
});
|
||||
if (duplicates.length > 0) {
|
||||
// ElMessage.warning(t('标准场景库.存在重复的编号', { codes: duplicates.join(', ') }));
|
||||
// return false;
|
||||
ElMessage.warning(t('工况库.存在重复的编号', { codes: duplicates.join(', ') }));
|
||||
return false;
|
||||
}
|
||||
if (!isEmptyPool.value && !isHaveNotSave()) {
|
||||
ElMessage.warning(t('工况库.没有修改的数据需要提交审批'));
|
||||
@@ -796,6 +832,7 @@ const createTaskPoolFun = async (formData: any) => {
|
||||
approvePreviewInfo: {
|
||||
isCreate: true,
|
||||
isUpdate: false,
|
||||
currentVersion: '',
|
||||
columns,
|
||||
finalFullData: fullData,
|
||||
originalFullData: null,
|
||||
@@ -858,6 +895,7 @@ const updateTaskPoolFun = async (formData: any) => {
|
||||
approvePreviewInfo: {
|
||||
isCreate: false,
|
||||
isUpdate: true,
|
||||
currentVersion: currentPoolBriefVersion.value?.poolVersion || '',
|
||||
columns,
|
||||
originalFullData: cloneDeep(originalSnapshot),
|
||||
finalFullData: cloneDeep(fullData),
|
||||
|
||||
@@ -157,9 +157,11 @@ const lang = {
|
||||
请按照顺序添加: 'Please add in order ({order})',
|
||||
指标类型为数值时目标值应为数字: 'Target value must be a number when indicator type is numeric',
|
||||
编号已存在: 'Code already exists',
|
||||
同层级名称已存在: 'Name already exists at the same level, please modify',
|
||||
名称不能为空: 'Name cannot be empty',
|
||||
编号不能为空: 'Code cannot be empty for: {names}',
|
||||
存在重复的编号: 'Duplicate codes found: {codes}',
|
||||
同一层级下存在重复的名称: 'Duplicate names found at the same level: {names}',
|
||||
删除: 'Delete',
|
||||
创建地图库: 'Create Map Pool',
|
||||
导入Excel: 'Import Excel',
|
||||
|
||||
@@ -156,9 +156,11 @@ const lang = {
|
||||
请按照顺序添加: '请按照顺序({order})添加',
|
||||
指标类型为数值时目标值应为数字: '指标类型为数值时,目标值应为数字',
|
||||
编号已存在: '编号已存在',
|
||||
同层级名称已存在: '同层级名称已存在,请修改名称',
|
||||
名称不能为空: '名称不能为空',
|
||||
编号不能为空: '以下节点编号不能为空:{names}',
|
||||
存在重复的编号: '存在重复的编号:{codes}',
|
||||
同一层级下存在重复的名称: '同一层级下存在重复的名称:{names}',
|
||||
删除: '删除',
|
||||
创建地图库: '创建地图库',
|
||||
导入Excel: '导入Excel',
|
||||
|
||||
@@ -468,6 +468,41 @@ export const collectNodeCodes = (nodes: TreeNode[], excludeFakeId?: string): str
|
||||
return codes;
|
||||
};
|
||||
|
||||
export const collectSiblingNodeNames = (
|
||||
nodes: TreeNode[],
|
||||
parentFakeId: string | null,
|
||||
excludeFakeId?: string
|
||||
): string[] => {
|
||||
const names: string[] = [];
|
||||
if (parentFakeId === null) {
|
||||
nodes.forEach((node) => {
|
||||
if (node.nodeName && node.fakeId !== excludeFakeId) {
|
||||
names.push(node.nodeName);
|
||||
}
|
||||
});
|
||||
return names;
|
||||
}
|
||||
|
||||
let siblingNodes: TreeNode[] = [];
|
||||
traverseTree(
|
||||
nodes,
|
||||
(node) => {
|
||||
if (node.fakeId === parentFakeId) {
|
||||
siblingNodes = Array.isArray(node.children) ? node.children : [];
|
||||
}
|
||||
},
|
||||
null
|
||||
);
|
||||
|
||||
siblingNodes.forEach((child) => {
|
||||
if (child.nodeName && child.fakeId !== excludeFakeId) {
|
||||
names.push(child.nodeName);
|
||||
}
|
||||
});
|
||||
|
||||
return names;
|
||||
};
|
||||
|
||||
export const STANDARD_SCENE_POOL_NAME = '标准场景库';
|
||||
|
||||
export const VIRTUAL_NODE_NAME = '__VIRTUAL_ROOT_NODE_NAME__';
|
||||
|
||||
@@ -451,6 +451,32 @@ const validateFun = (): boolean => {
|
||||
ElMessage.warning(t('工况库.编号不能为空', { names }));
|
||||
return false;
|
||||
}
|
||||
|
||||
const normalizeParentId = (parentId: any) => {
|
||||
return parentId === null || parentId === undefined || parentId === '' ? '__ROOT__' : parentId;
|
||||
};
|
||||
const sameLevelNameMap = new Map<string, string[]>();
|
||||
visibleData.forEach((n: any) => {
|
||||
const nodeName = String(n.nodeName || '').trim();
|
||||
if (!nodeName) {
|
||||
return;
|
||||
}
|
||||
const key = `${normalizeParentId(n.parentId)}__${nodeName}`;
|
||||
sameLevelNameMap.set(key, [...(sameLevelNameMap.get(key) || []), n.fakeId]);
|
||||
});
|
||||
const duplicateNameNode = visibleData.find((n: any) => {
|
||||
const nodeName = String(n.nodeName || '').trim();
|
||||
if (!nodeName) {
|
||||
return false;
|
||||
}
|
||||
const key = `${normalizeParentId(n.parentId)}__${nodeName}`;
|
||||
return (sameLevelNameMap.get(key) || []).length > 1;
|
||||
});
|
||||
if (duplicateNameNode) {
|
||||
ElMessage.warning(t('工况库.同一层级下存在重复的名称', { names: duplicateNameNode.nodeName }));
|
||||
return false;
|
||||
}
|
||||
|
||||
const codeSet = new Set<string>();
|
||||
const duplicates: string[] = [];
|
||||
visibleData.forEach((n: any) => {
|
||||
@@ -465,8 +491,8 @@ const validateFun = (): boolean => {
|
||||
}
|
||||
});
|
||||
if (duplicates.length > 0) {
|
||||
// ElMessage.warning(t('工况库.存在重复的编号', { codes: duplicates.join(', ') }));
|
||||
// return false;
|
||||
ElMessage.warning(t('工况库.存在重复的编号', { codes: duplicates.join(', ') }));
|
||||
return false;
|
||||
}
|
||||
if (!isEmptyPool.value && !isHaveNotSave()) {
|
||||
ElMessage.warning(t('工况库.没有修改的数据需要提交审批'));
|
||||
@@ -583,6 +609,7 @@ const createTaskPoolFun = async (formData: any) => {
|
||||
approvePreviewInfo: {
|
||||
isCreate: true,
|
||||
isUpdate: false,
|
||||
currentVersion: '',
|
||||
columns,
|
||||
finalFullData: fullData,
|
||||
originalFullData: null,
|
||||
@@ -640,6 +667,7 @@ const updateTaskPoolFun = async (formData: any) => {
|
||||
approvePreviewInfo: {
|
||||
isCreate: false,
|
||||
isUpdate: true,
|
||||
currentVersion: currentPoolBriefVersion.value?.poolVersion || '',
|
||||
columns,
|
||||
originalFullData: cloneDeep(originalSnapshot),
|
||||
finalFullData: cloneDeep(fullData),
|
||||
|
||||
@@ -322,7 +322,7 @@ import { exportToPdf } from '@/utils/exportPdf';
|
||||
import { CommonStore } from '@/stores/common';
|
||||
import dayjs from 'dayjs';
|
||||
import { getPageStorage, setPageStorage } from '@/utils/common';
|
||||
import { getOptions } from './libs';
|
||||
import { getOptions } from './lib';
|
||||
|
||||
const commonStore = CommonStore();
|
||||
|
||||
|
||||
@@ -871,7 +871,7 @@ const reloadFun = () => {
|
||||
|
||||
const reloadNodeFun = () => {
|
||||
FileTreeRef.value?.reloadNodeFun(currentData.value.id);
|
||||
BaseTableRef.value?.resetFun();
|
||||
// BaseTableRef.value?.resetFun();
|
||||
};
|
||||
|
||||
const AddFileRef = ref<any>();
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="label">
|
||||
<span v-if="isCreatePool">{{ $t('工况库.新增') }}</span
|
||||
><span v-else>{{ $t('工况库.编辑') }}</span
|
||||
>{{ $t('工况库.仿真地图库') }}:
|
||||
>{{ poolName === STANDARD_SCENE_POOL_NAME ? STANDARD_SCENE_POOL_NAME : '仿真地图库' }}:
|
||||
</div>
|
||||
<div class="content">
|
||||
<span size="large" type="success" v-if="isCreatePool"> {{ poolName }}</span>
|
||||
@@ -25,6 +25,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!isCreatePool && currentVersionText" class="preview-desc">
|
||||
基于{{ poolName === STANDARD_SCENE_POOL_NAME ? STANDARD_SCENE_POOL_NAME : '仿真地图库' }}版本
|
||||
{{ currentVersionText }} 修改内容如下
|
||||
</div>
|
||||
<div class="body">
|
||||
<loadCaseTable
|
||||
:editMode="false"
|
||||
@@ -46,6 +50,7 @@ import { nextTick, onMounted, ref, watchEffect } from 'vue';
|
||||
import loadCaseTable from '@/components/common/treeCaseTable/loadCaseTable.vue';
|
||||
import type { VxeTablePropTypes } from 'vxe-table';
|
||||
import { TABLE_NAME } from '@/utils/enum/tableName';
|
||||
import { STANDARD_SCENE_POOL_NAME } from '@/utils/node';
|
||||
|
||||
interface Props {
|
||||
data: any;
|
||||
@@ -62,6 +67,7 @@ enum PreviewAction {
|
||||
}
|
||||
|
||||
const poolName = ref();
|
||||
const currentVersionText = ref('');
|
||||
const approveContents = ref<any>(null);
|
||||
|
||||
const mergedPreviewTree = ref<any>([]);
|
||||
@@ -228,6 +234,7 @@ const initPreviewData = () => {
|
||||
|
||||
mergedPreviewTree.value = previewData;
|
||||
poolName.value = approveContents.value?.poolBrief?.poolName;
|
||||
currentVersionText.value = approvePreviewInfo.currentVersion || '';
|
||||
isCreatePool.value = Boolean(approvePreviewInfo.isCreate);
|
||||
expandAllFun();
|
||||
};
|
||||
@@ -259,6 +266,12 @@ watchEffect(() => {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.preview-desc {
|
||||
padding: 12px 0;
|
||||
font-size: 14px;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.header {
|
||||
height: 20px;
|
||||
display: flex;
|
||||
|
||||
@@ -435,6 +435,7 @@ import analysisResult from './runPagecomponent/analysisResult.vue';
|
||||
import vehicleStabilityAnalysis_Demo from './runPagecomponent/vehicleStabilityAnalysis_Demo.vue';
|
||||
import rollingWheelForceAnalysis_Demo from './runPagecomponent/rollingWheelForceAnalysis_Demo.vue';
|
||||
import vibrationSignalAnalysis_Demo from './runPagecomponent/vibrationSignalAnalysis_Demo.vue';
|
||||
import { mockSubmitApi } from '@/api/pbs/pbs';
|
||||
|
||||
const props = defineProps({
|
||||
runInfo: {
|
||||
@@ -838,6 +839,26 @@ const continueStartRunJobFun = async () => {
|
||||
taskDefinitionKey: flowNodeData.value.nodeId,
|
||||
flowelementType: flowNodeData.value.nodeDetailInfo.type,
|
||||
});
|
||||
|
||||
if (flowNodeData.value.nodeName === '动力学计算') {
|
||||
await skipCurrentNodeFlowFun();
|
||||
|
||||
await mockSubmitApi({
|
||||
runId: props.runInfo.uuid,
|
||||
uuid: 'd03cb60715b1ee61c585b3e31405e7de',
|
||||
type: 'single',
|
||||
softwareId: flowNodeData.value.nodeId,
|
||||
software: flowNodeData.value.nodeName,
|
||||
jobName: '测试单一任务0326',
|
||||
coreNum: 4,
|
||||
jobDesc: 'HPC任务单独提交',
|
||||
hpcGroup: 'HPC_PACK',
|
||||
params: {
|
||||
licience: 'test',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (res && res.code === 200) {
|
||||
refreshFlowPage();
|
||||
}
|
||||
@@ -1313,6 +1334,11 @@ const getDictionaryDataFun = async () => {
|
||||
};
|
||||
|
||||
const skipCurrentNodeFlowFun = async () => {
|
||||
await updateFlowNodeDataInfoFun();
|
||||
|
||||
if (!flowNodeData.value?.nodeDetailInfo.asyncTaskId) {
|
||||
return;
|
||||
}
|
||||
const params = {
|
||||
asyncTaskId: flowNodeData.value?.nodeDetailInfo.asyncTaskId,
|
||||
resultJson: 'success',
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
<div class="app-icon app-text" v-else>{{ appProperty?.name.split('')[0] }}</div>
|
||||
<div class="app-info">
|
||||
<div class="app-name" :title="appProperty.name">{{ appProperty.name }}</div>
|
||||
<div class="app-tag">{{ appProperty.type }}</div>
|
||||
<div class="app-tag">
|
||||
{{ appProperty.name === '动力学计算' ? '计算节点' : appProperty.type }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-status">
|
||||
<div class="round" :style="{ background: getStyleFun(appProperty.status).color }"></div>
|
||||
@@ -53,12 +55,12 @@ const applist = ref<any>([
|
||||
// };
|
||||
|
||||
const getStyleFun = (flag: any) => {
|
||||
if (applist.value.includes(appProperty.name)) {
|
||||
return {
|
||||
color: '#67c23a',
|
||||
title: '已完成',
|
||||
};
|
||||
}
|
||||
// if (applist.value.includes(appProperty.name)) {
|
||||
// return {
|
||||
// color: '#67c23a',
|
||||
// title: '已完成',
|
||||
// };
|
||||
// }
|
||||
const styles: any = {
|
||||
active: {
|
||||
color: '#409eff',
|
||||
|
||||
@@ -157,10 +157,10 @@ const initGraph = async () => {
|
||||
panning: {
|
||||
enabled: true,
|
||||
},
|
||||
interacting: {
|
||||
// 禁用画布拖拽
|
||||
nodeMovable: false,
|
||||
},
|
||||
// interacting: {
|
||||
// // 禁用画布拖拽
|
||||
// nodeMovable: false,
|
||||
// },
|
||||
container: document.getElementById('flow-view-content') as HTMLElement,
|
||||
autoResize: true,
|
||||
// 画布的最小最大缩放级别
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</template>
|
||||
<template #software="{ row }">
|
||||
<div calss="img-box">
|
||||
<img width="14" :src="getAppImg(row)" alt="" />
|
||||
<img width="20" class="mar5" :src="getAppImg(row)" alt="" />
|
||||
<span>{{ row.software }}</span>
|
||||
</div>
|
||||
</template>
|
||||
@@ -457,4 +457,13 @@ onBeforeUnmount(() => {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.img-box{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mar5{
|
||||
margin-right: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -675,7 +675,7 @@ const queryDirDataFun = async (param: any) => {
|
||||
const list = res.data.data.map((item: any) => {
|
||||
return {
|
||||
...item,
|
||||
id: item.fileId,
|
||||
// id: item.fileId,
|
||||
originalName: item.name,
|
||||
};
|
||||
});
|
||||
@@ -809,6 +809,9 @@ const submitFun = async () => {
|
||||
...uploadFIleFormData,
|
||||
};
|
||||
|
||||
console.log(paramData, 'paramData');
|
||||
console.log(uploadFIleFormData, 'uploadFIleFormData');
|
||||
|
||||
if (fileList.length) {
|
||||
const file = fromData.uploadFile[0].raw;
|
||||
|
||||
@@ -880,6 +883,7 @@ const actionList = ref([
|
||||
click: (row: any) => {
|
||||
visible.value = true;
|
||||
currentFileInfo.value = row;
|
||||
|
||||
nextTick(async () => {
|
||||
tableFormRef.value.setFormDataFun(currentFileInfo.value);
|
||||
fileList.value = [];
|
||||
@@ -1400,11 +1404,11 @@ const submitFun2 = async () => {
|
||||
})?.label;
|
||||
|
||||
const paramXQuantityType = quantityTypeList.value.find((item: any) => {
|
||||
return item.name === tableData2.value[i].xQuantityType;
|
||||
return item.name === tableData2.value[i].xquantityType;
|
||||
})?.label;
|
||||
|
||||
const paramYQuantityType = quantityTypeList.value.find((item: any) => {
|
||||
return item.name === tableData2.value[i].yQuantityType;
|
||||
return item.name === tableData2.value[i].yquantityType;
|
||||
})?.label;
|
||||
|
||||
if (paramQuantityType) {
|
||||
@@ -1417,6 +1421,9 @@ const submitFun2 = async () => {
|
||||
params.yQuantityType = paramYQuantityType;
|
||||
}
|
||||
|
||||
params.xUnits = params.xunits;
|
||||
params.yUnits = params.yunits;
|
||||
|
||||
delete params.xUnitsList;
|
||||
delete params.yunitsList;
|
||||
delete params.xunitsList;
|
||||
@@ -1433,6 +1440,7 @@ const submitFun2 = async () => {
|
||||
ElMessage.success('上传成功');
|
||||
reloadFun();
|
||||
}
|
||||
tableData2.value = [];
|
||||
|
||||
uploadFileVisible.value = false;
|
||||
};
|
||||
|
||||
@@ -139,22 +139,24 @@
|
||||
</taskPerformance>
|
||||
</div>
|
||||
<div class="task-tab-content set-tab-content" v-if="keyResultType === 'resultImage'">
|
||||
<resultImage
|
||||
<taskResultImage
|
||||
v-if="keyResultType === 'resultImage'"
|
||||
:task-id="currentTaskInfo?.uuid"
|
||||
:taskData="currentTaskInfo"
|
||||
:task-data="currentTaskInfo"
|
||||
:show-checkbox="showCheckbox"
|
||||
:no-auth="noAuth"
|
||||
:show-left-options="showLeftOptions"
|
||||
:canUpdate="isPMemberOrEMember"
|
||||
></resultImage>
|
||||
></taskResultImage>
|
||||
</div>
|
||||
<div class="task-tab-content set-tab-content" v-if="keyResultType === 'curveView'">
|
||||
<taskCurve
|
||||
<taskResultCsv
|
||||
v-if="keyResultType === 'curveView'"
|
||||
:task-id="currentTaskInfo?.uuid"
|
||||
:taskData="currentTaskInfo"
|
||||
:task-data="currentTaskInfo"
|
||||
:show-checkbox="showCheckbox"
|
||||
:no-auth="noAuth"
|
||||
:show-left-options="showLeftOptions"
|
||||
:canUpdate="isPMemberOrEMember"
|
||||
></taskCurve>
|
||||
></taskResultCsv>
|
||||
</div>
|
||||
<div class="task-tab-content set-tab-content" v-if="keyResultType === 'video'">
|
||||
<videoFile
|
||||
@@ -319,10 +321,8 @@ import { onMounted, reactive, ref, watch, provide } from 'vue';
|
||||
import Dialog from '@/components/common/dialog/index.vue';
|
||||
import taskInfo from '@/components/taskDetail/taskInfo.vue';
|
||||
import taskPerformance from '@/components/taskDetail/taskPerformance.vue';
|
||||
import resultImage from '@/components/taskDetail/resultImage.vue';
|
||||
import taskReport from '@/components/taskDetail/taskReport.vue';
|
||||
import taskModel from '@/components/taskDetail/taskModel.vue';
|
||||
import taskCurve from '@/components/taskDetail/taskCurve.vue';
|
||||
import task3DModel from '@/components/taskDetail/task3DModel.vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { deliverableApproveApi } from '@/api/project/run';
|
||||
@@ -339,6 +339,8 @@ import { enableConfigByTenant, TENANT_ENUM } from '@/tenants/tenant';
|
||||
import BaseTable from '@/components/common/table/baseTable.vue';
|
||||
import { pageApi } from '@/api/system/systemLog';
|
||||
import DemandPreview from '@/views/task/simulationTask/newDemand/components/preview.vue';
|
||||
import taskResultImage from '@/views/task/execution/components/taskDetailPage/components/taskResultImage.vue';
|
||||
import taskResultCsv from '@/views/task/execution/components/taskDetailPage/components/taskResultCsv.vue';
|
||||
|
||||
const emits = defineEmits(['closeFn', 'updateFn']);
|
||||
const props = defineProps({
|
||||
@@ -370,6 +372,14 @@ const props = defineProps({
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
noAuth: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
showCheckbox: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
});
|
||||
|
||||
watch(
|
||||
|
||||
@@ -173,6 +173,13 @@ const actionList = ref([
|
||||
planTime: [row.beginTime, row.endTime],
|
||||
};
|
||||
},
|
||||
hide: (row: any) => {
|
||||
return (
|
||||
row.exeStatus === TASK_PROCESS_STATUS.REJECTED ||
|
||||
row.exeStatus === TASK_PROCESS_STATUS.CLOSED_LOOP ||
|
||||
row.exeStatus === TASK_PROCESS_STATUS.CANCELED
|
||||
);
|
||||
},
|
||||
},
|
||||
...props.actionList,
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-animation">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="动画仿真" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -51,11 +51,15 @@ import {
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -133,6 +137,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
if (key === 'endTime') {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<Robot
|
||||
v-if="currentName === 'robot'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
@@ -17,6 +18,7 @@
|
||||
<Animation
|
||||
v-if="currentName === 'animation'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
@@ -24,6 +26,7 @@
|
||||
<FiniteElement
|
||||
v-if="currentName === 'finiteElement'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
@@ -31,6 +34,7 @@
|
||||
<Industry
|
||||
v-if="currentName === 'industry'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
@@ -38,6 +42,7 @@
|
||||
<Logistics
|
||||
v-if="currentName === 'logistics'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
@@ -45,6 +50,7 @@
|
||||
<Tolerance
|
||||
v-if="currentName === 'tolerance'"
|
||||
ref="CurrentRef"
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-finite-element">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="有限元仿真" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -76,11 +76,15 @@ import {
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -168,6 +172,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
if (key === 'endTime') {
|
||||
|
||||
@@ -70,38 +70,44 @@
|
||||
<Animation
|
||||
v-if="currentName === 'animation'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
<FiniteElement
|
||||
v-if="currentName === 'finiteElement'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
<Industry
|
||||
v-if="currentName === 'industry'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
<Logistics
|
||||
v-if="currentName === 'logistics'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
<Robot
|
||||
v-if="currentName === 'robot'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
<Tolerance
|
||||
v-if="currentName === 'tolerance'"
|
||||
ref="CurrentRef"
|
||||
@submit="submitFun"
|
||||
:simulationType="diaTitle"
|
||||
:deptOptions="deptOptions"
|
||||
@submit="submitFun"
|
||||
/>
|
||||
</div>
|
||||
<template #footer>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-industry">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="工业设计" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -50,11 +50,15 @@ import {
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -131,6 +135,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -255,11 +255,12 @@ export const toggleMaterialNo = (data: any) => {
|
||||
|
||||
// 设置确认人
|
||||
export const setPMemberName = async (data: any) => {
|
||||
const { formData = {} } = data;
|
||||
const { formData = {}, simulationType } = data;
|
||||
const { projectUndertaker, simType } = formData;
|
||||
const params = {
|
||||
deptName: projectUndertaker,
|
||||
discipline: simType,
|
||||
simulationType,
|
||||
};
|
||||
if (!(projectUndertaker && simType)) {
|
||||
formData.pMemberName = '';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-logistics">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="物流仿真" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -54,11 +54,15 @@ import dayjs from 'dayjs';
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -138,6 +142,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
if (key === 'endTime') {
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
v-if="currentName === 'robot'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -11,6 +13,8 @@
|
||||
v-if="currentName === 'animation'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -18,6 +22,8 @@
|
||||
v-if="currentName === 'finiteElement'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -25,6 +31,8 @@
|
||||
v-if="currentName === 'industry'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -32,6 +40,8 @@
|
||||
v-if="currentName === 'logistics'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -39,6 +49,8 @@
|
||||
v-if="currentName === 'tolerance'"
|
||||
ref="CurrentRef"
|
||||
type="preview"
|
||||
hideTips
|
||||
:simulationType="diaTitle"
|
||||
:data="detailData"
|
||||
:deptOptions="deptOptions"
|
||||
/>
|
||||
@@ -64,6 +76,7 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
demandId: '',
|
||||
});
|
||||
|
||||
const diaTitle = ref('');
|
||||
const deptOptions = ref<any>([]);
|
||||
|
||||
onMounted(() => {
|
||||
@@ -92,6 +105,7 @@ const getDetailFun = () => {
|
||||
};
|
||||
getDemandDetailApi(params).then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
diaTitle.value = res.data.demandType;
|
||||
detailData.value = res.data;
|
||||
currentName.value = titleMap[res.data.demandType];
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-robot">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="机器人仿真" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -51,11 +51,15 @@ import {
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -140,6 +144,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
if (key === 'endTime') {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="comp-tolerance">
|
||||
<div class="content">
|
||||
<div class="tips">
|
||||
<div v-if="!hideTips" class="tips">
|
||||
<PlanningInformation data="公差分析" />
|
||||
</div>
|
||||
<div class="form">
|
||||
@@ -48,11 +48,15 @@ import {
|
||||
interface Props {
|
||||
data?: any;
|
||||
type?: string;
|
||||
hideTips?: boolean;
|
||||
simulationType?: string;
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
data: null,
|
||||
type: 'edit',
|
||||
hideTips: false,
|
||||
simulationType: '',
|
||||
});
|
||||
|
||||
const disabled = ref(props.type === 'preview');
|
||||
@@ -133,6 +137,7 @@ const changeFun = async (cbData: any) => {
|
||||
if (key === 'simType') {
|
||||
setPMemberName({
|
||||
formData: editFormInfo.value,
|
||||
simulationType: props.simulationType,
|
||||
});
|
||||
}
|
||||
if (key === 'endTime') {
|
||||
|
||||
@@ -109,6 +109,13 @@ const actionList = ref([
|
||||
formVisible.value = true;
|
||||
// visibleDialog(false, row);
|
||||
},
|
||||
hide: (row: any) => {
|
||||
return (
|
||||
row.demandStatus === TASK_PROCESS_STATUS.REJECTED ||
|
||||
row.demandStatus === TASK_PROCESS_STATUS.CLOSED_LOOP ||
|
||||
row.demandStatus === TASK_PROCESS_STATUS.CANCELED
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '删除',
|
||||
|
||||
Reference in New Issue
Block a user