feat: 工况库
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
<el-form-item :label="$t('工况库.审核模版')" prop="approveTemplateId" v-if="form.bApprove === true">
|
||||
<ApproveList
|
||||
v-model="form.approveTemplateId"
|
||||
@change="onApproveChangeFun"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('工况库.升版')" prop="bNewVersion" >
|
||||
@@ -118,6 +119,9 @@ const onShowFun = () => {
|
||||
form.versionType = 0;
|
||||
};
|
||||
};
|
||||
const onApproveChangeFun = (data:any) => {
|
||||
form.approveTemplateName = data.label;
|
||||
};
|
||||
const resetFun = () => {
|
||||
if (!formRef.value) {
|
||||
return;
|
||||
|
||||
@@ -91,8 +91,25 @@
|
||||
</div>
|
||||
</el-space>
|
||||
</div>
|
||||
<loadCaseTable v-show="currentTableType==='tree'" ref="treeTableRef" tableName="TASK_POOL" :modalTableNameList="['TASK_POOL_CATEGORY','TASK_POOL_TASK','TASK_POOL_PERFORMANCE']" :data="tableData" :loading="loading" :editMode="true" > </loadCaseTable>
|
||||
<loadCaseTable v-show="currentTableType==='list'" ref="listTableRef" readonly tableName="TASK_POOL_LIST" :data="extractTableData" :loading="loading" :editMode="false"> </loadCaseTable>
|
||||
<loadCaseTable
|
||||
v-show="currentTableType==='tree'"
|
||||
ref="treeTableRef"
|
||||
tableName="TASK_POOL"
|
||||
:modalTableNameList="['TASK_POOL_CATEGORY','TASK_POOL_TASK','TASK_POOL_PERFORMANCE']"
|
||||
:data="tableData"
|
||||
:loading="loading"
|
||||
:editMode="true"
|
||||
> </loadCaseTable>
|
||||
<loadCaseTable
|
||||
v-show="currentTableType==='list'"
|
||||
ref="listTableRef"
|
||||
border="full"
|
||||
readonly
|
||||
tableName="TASK_POOL_LIST"
|
||||
:data="extractTableData"
|
||||
:loading="loading"
|
||||
:editMode="false"
|
||||
> </loadCaseTable>
|
||||
<loadcase-pro-table
|
||||
v-if="false"
|
||||
ref="treeTableRef2"
|
||||
@@ -228,7 +245,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { computed, nextTick, onMounted, ref, type Ref } from 'vue';
|
||||
import { ElMessageBox, ElMessage } from 'element-plus';
|
||||
import { cloneDeep, groupBy } from 'lodash-es';
|
||||
import { cloneDeep, groupBy, isEqual } from 'lodash-es';
|
||||
import { onBeforeRouteLeave, useRouter } from 'vue-router';
|
||||
import loadcaseProTable from '@/components/loadCaseTable/commonTable/loadcaseProTable.vue';
|
||||
import loadCaseTable from '@/components/common/treeCaseTable/loadCaseTable.vue';
|
||||
@@ -341,6 +358,7 @@ const refreshData = async (callback?: any) => {
|
||||
};
|
||||
|
||||
const treeTableRef = ref();
|
||||
const listTableRef = ref();
|
||||
const getVxeRef = () => {
|
||||
return treeTableRef?.value?.loadcaseTableRef?.TreeTableRef?.treeTableRef;
|
||||
};
|
||||
@@ -407,6 +425,7 @@ const createTaskPoolFun = async (formData: any) => {
|
||||
nodes: pickedNodes,
|
||||
bApprove: formData.bApprove,
|
||||
approveTemplateId: formData.approveTemplateId,
|
||||
approveTemplateName: formData.approveTemplateName,
|
||||
};
|
||||
const res: any = await createTaskPoolApi(req);
|
||||
if (res.code === 200) {
|
||||
@@ -419,6 +438,7 @@ const updateTaskPoolFun = async (formData: any) => {
|
||||
const req = {
|
||||
bApprove: formData.bApprove,
|
||||
approveTemplateId: formData.approveTemplateId,
|
||||
approveTemplateName: formData.approveTemplateName,
|
||||
bNewVersion: formData.bNewVersion,
|
||||
versionType: formData.versionType,
|
||||
poolBrief: {
|
||||
@@ -744,7 +764,12 @@ const queryTaskPoolFun = async () => {
|
||||
tableData.value = tree;
|
||||
isEmptyPool.value = false;
|
||||
extractTableData.value = extractLeafNodesWithParentTypes(res.data.nodes);
|
||||
const vxeInstance = listTableRef?.value?.loadcaseTableRef?.TreeTableRef?.treeTableRef;
|
||||
const mergeCells = calcMergeCellsFun(extractTableData.value);
|
||||
console.log('extractTableData.value', extractTableData.value);
|
||||
console.log('mergeCells', mergeCells);
|
||||
nextTick(() => {
|
||||
vxeInstance.setMergeCells(mergeCells);
|
||||
// treeTableRef.value?.changeLevel('全部展开');
|
||||
});
|
||||
} else {
|
||||
@@ -753,6 +778,82 @@ const queryTaskPoolFun = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
const calcMergeCellsFun = (tableData: any) => {
|
||||
const mergeCells: any[] = [];
|
||||
if (!Array.isArray(tableData) || tableData.length === 0) return mergeCells;
|
||||
|
||||
const excludeFields = ['performanceName', 'operation', '_X_ROW_KEY', '_X_ROW_CHILD'];
|
||||
const isEmpty = (v: any) => v === null || v === undefined || v === '';
|
||||
|
||||
const vxeInstance = listTableRef?.value?.loadcaseTableRef?.TreeTableRef?.treeTableRef;
|
||||
let columnOrder: string[] = [];
|
||||
try {
|
||||
if (vxeInstance && typeof vxeInstance.getColumns === 'function') {
|
||||
const cols = vxeInstance.getColumns() || [];
|
||||
columnOrder = cols
|
||||
.map((c: any) => c.property || c.field || c.dataIndex || '')
|
||||
.filter((f: string) => !!f);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('e', e);
|
||||
|
||||
}
|
||||
|
||||
const compCols =
|
||||
Array.isArray(tableColumns?.value) && tableColumns.value.length > 0
|
||||
? tableColumns.value.map((c: any) => c.field || c.dataIndex || c.key).filter(Boolean)
|
||||
: [];
|
||||
const rowKeys = Object.keys(tableData[0] || {});
|
||||
const fullOrder = columnOrder.length > 0 ? columnOrder : compCols.length > 0 ? compCols : rowKeys;
|
||||
|
||||
const fields = fullOrder.filter((f) => !!f && !excludeFields.includes(f));
|
||||
|
||||
const valuesEqual = (a: any, b: any) => {
|
||||
if (isEmpty(a) || isEmpty(b)) return false;
|
||||
if (typeof a === 'object' || typeof b === 'object') {
|
||||
return isEqual(a, b);
|
||||
}
|
||||
return String(a).trim() === String(b).trim();
|
||||
};
|
||||
|
||||
const fieldToColIndex = new Map<string, number>();
|
||||
fullOrder.forEach((f, idx) => {
|
||||
if (!f) return;
|
||||
if (!excludeFields.includes(f) && tableData[0] && Object.prototype.hasOwnProperty.call(tableData[0], f)) {
|
||||
fieldToColIndex.set(f, idx);
|
||||
}
|
||||
});
|
||||
|
||||
fields.forEach((field) => {
|
||||
const colIdxInFull = fieldToColIndex.has(field) ? fieldToColIndex.get(field)! : -1;
|
||||
if (colIdxInFull === -1) return;
|
||||
|
||||
let start = 0;
|
||||
let startVal = tableData[0][field];
|
||||
|
||||
for (let i = 1; i <= tableData.length; i++) {
|
||||
const curr = i < tableData.length ? tableData[i][field] : undefined;
|
||||
const equal = i < tableData.length && valuesEqual(startVal, curr);
|
||||
|
||||
if (!equal) {
|
||||
const rowspan = i - start;
|
||||
if (rowspan > 1 && !isEmpty(startVal)) {
|
||||
mergeCells.push({
|
||||
row: start + 1,
|
||||
col: colIdxInFull + 1,
|
||||
rowspan,
|
||||
colspan: 1,
|
||||
});
|
||||
}
|
||||
start = i;
|
||||
startVal = curr;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return mergeCells;
|
||||
};
|
||||
|
||||
const queryTaskPoolPerformanceFun = async () => {
|
||||
performanceLoading.value = true;
|
||||
const req = {
|
||||
|
||||
Reference in New Issue
Block a user