This commit is contained in:
weibl
2025-11-06 14:33:18 +08:00
9 changed files with 312 additions and 82 deletions

View File

@@ -1,6 +1,14 @@
<template>
<div class="comp-content">
<Dialog v-model="diaVisible" :diaTitle="`表名【${name}】字段设置`" width="90%" height="90%" show-footer @close="closeFun">
<Dialog
v-model="diaVisible"
:diaTitle="`表名【${name}】字段设置`"
top="2vh"
width="98%"
height="90%"
show-footer
@close="closeFun"
>
<div class="content">
<div class="add-btn">
<el-button type="primary" :icon="Plus" @click="addFun">新增字段</el-button>

View File

@@ -1,5 +1,9 @@
<template>
<span >{{ dictLabel }}</span>
<span v-if="!editable" >{{ dictLabel }}</span>
<span v-if="editable" >
<el-select-v2 v-model="dictValue" :options="dictOptions" @change="onSelectChange" v-bind="$attrs">
</el-select-v2>
</span>
</template>
<script setup lang="ts">
import { ref, onMounted, watchEffect } from 'vue';
@@ -7,51 +11,76 @@ import { CommonStore } from '@/stores/common';
const commonStore = CommonStore();
interface Props {
value?: any;
modelValue?: string;
dictName?: any;
options?: any;
editable?: boolean;
}
const props = withDefaults(defineProps<Props>(), {
value: '',
modelValue: '',
dictName: '',
options: () => [],
editable: false,
});
const emits = defineEmits(['update:modelValue', 'ok']);
const dictValue:any = ref('');
const dictLabel = ref('');
const dictOptions:any = ref([]);
onMounted(async() => {
if (props.value && props.dictName) {
if (props.dictName) {
const res: any = await commonStore.getDictData(props.dictName);
dictOptions.value = res.A;
} else if (props.value && props.options) {
} else if ( props.options) {
dictOptions.value = props.options;
}
if (props.modelValue && props.modelValue.includes(',')) {
dictValue.value = props.modelValue.split(',');
} else {
dictValue.value = props.modelValue;
}
calcDictLabelFun();
});
const calcDictLabelFun = () => {
const options = dictOptions.value || [];
const dictValue = props.value;
const value = dictValue.value;
let label = '';
if (dictValue && typeof dictValue === 'string') {
if (dictValue.includes(',')) {
const dictValueArr = dictValue.split(',');
if (value && typeof value === 'string') {
if (value.includes(',')) {
const valueArr = value.split(',');
const dicts:any = [];
dictValueArr.forEach((value: any) => {
valueArr.forEach((value: any) => {
const dict = options.find((item: any) => item.value === value);
dicts.push(dict);
});
label = dicts.map((dict:any) => dict.label).join(',');
} else {
const dict:any = options.find((item:any) => item.value === dictValue);
const dict:any = options.find((item:any) => item.value === value);
if (dict) {
label = dict.label;
}
}
} else if (Array.isArray(value)) {
const valueArr = value;
const dicts:any = [];
valueArr.forEach((value: any) => {
const dict = options.find((item: any) => item.value === value);
dicts.push(dict);
});
label = dicts.map((dict:any) => dict.label).join(',');
}
dictLabel.value = label;
};
const onSelectChange = (val:any) => {
let newVal = val;
if (Array.isArray(val)) {
newVal = val.join(',');
}
emits('update:modelValue', newVal);
};
watchEffect(() => {
if (props.options && props.options.length > 0) {
dictOptions.value = props.options;

View File

@@ -3,11 +3,11 @@
<TreeCaseTable
ref="loadcaseTableRef"
:tableName="tableName"
editMode
showCheckbox
:data="disposeTreeData(data)"
:actionsWidth="95"
@checkbox-change="checkboxChangeFun"
v-bind="$attrs"
>
<template #leftOptions v-if="!readonly">
<div>
@@ -289,6 +289,7 @@ const displayModalFun = (nodeType: string, operationType: string, editRow?: any)
// });
// }
if (operationType === 'add') {
formData.value = {};
if (isCategoryType(nodeType)) {
formData.value.nodeType = null;
} else {

View File

@@ -1,115 +1,164 @@
<template>
<div class="comp-content comp-tree-case-table">
<TreeTable ref="TreeTableRef" :tableName="tableName" :data="treeData" :editMode="editMode" v-bind="$attrs" >
<TreeTable ref="TreeTableRef" :tableName="tableName" :data="treeData" :editMode="editMode" v-bind="$attrs">
<!-- 任务类型 -->
<template #nodeName="{ row }">
<div class="node-name">
<el-icon v-if="row.nodeType === NODE_TYPE.TASK" :size="16" class="blue"><Document /></el-icon>
<el-icon v-else-if="row.nodeType === NODE_TYPE.PERFORMANCE" :size="16" class="blue"><Operation /></el-icon>
<el-icon v-else :size="16" class="blue"><Folder /></el-icon>
<el-icon v-if="row.nodeType === NODE_TYPE.TASK" :size="16" class="blue">
<Document />
</el-icon>
<el-icon v-else-if="row.nodeType === NODE_TYPE.PERFORMANCE" :size="16" class="blue">
<Operation />
</el-icon>
<el-icon v-else :size="16" class="blue">
<Folder />
</el-icon>
<span class="name">{{ row.nodeName }}</span>
</div>
</template>
<!-- 英文名 -->
<template #englishName="{ row }">
<TreeEditItem v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.englishName" :editMode="editMode" />
<template #englishName="{ row, column }">
<TreeEditItem
v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row[column.field]"
:editMode="editMode"
/>
</template>
<template #englishName-edit="{ row }">
<el-input v-model="row.englishName" size="small" placeholder="请输入" />
</template>
<!-- 编码 -->
<template #nodeCode="{ row }">
<TreeEditItem v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.nodeCode" :editMode="editMode" />
<template #nodeCode="{ row, column }">
<TreeEditItem
v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row[column.field]"
:editMode="editMode"
/>
</template>
<template #nodeCode-edit="{ row }">
<el-input v-model="row.nodeCode" size="small" placeholder="请输入" />
</template>
<!-- 计划开始时间 -->
<template #beginTime="{ row }">
<TreeEditItem v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.beginTime" :editMode="editMode" />
<TreeEditItem
v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row.beginTime"
:editMode="editMode"
/>
</template>
<template #beginTime-edit="{ row }">
<el-date-picker v-model="row.beginTime" type="datetime" placeholder="请选择" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" clearable />
<el-date-picker
v-model="row.beginTime"
type="datetime"
placeholder="请选择"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
clearable
/>
</template>
<!-- 计划结束时间 -->
<template #endTime="{ row }">
<TreeEditItem v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.endTime" :editMode="editMode" />
<TreeEditItem
v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row.endTime"
:editMode="editMode"
/>
</template>
<template #endTime-edit="{ row }">
<el-date-picker v-model="row.endTime" type="datetime" placeholder="请选择" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" clearable />
<el-date-picker
v-model="row.endTime"
type="datetime"
placeholder="请选择"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
clearable
/>
</template>
<!-- 达标方式 -->
<template #method="{ row }">
<TreeEditItem v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.method" :editMode="editMode" />
</template>
<template #method-edit="{ row }">
<el-select v-model="row.method" size="small" placeholder="请选择" />
</template>
<template #nodeType="{ row ,column}">
<TreeEditItem :data="row.nodeType" :editMode="editMode" >
<dictLabel :value="row[column.field]" :options="allNodeTypeOptions"/>
<template #method="{ row,column }">
<TreeEditItem v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.nodeType" :editMode="editMode">
<dictLabel v-model="row[column.field]" :options="methodOptions" />
</TreeEditItem>
</template>
<template #performanceType="{ row ,column}">
<TreeEditItem v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.performanceType" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="PERFORMANCE_TYPE"/>
<template #method-edit="{ row,column }">
<dictLabel v-model="row[column.field]" dictName="methodOptions" :editable="true" />
</template>
<template #nodeType="{ row, column }">
<TreeEditItem :data="row.nodeType" :editMode="editMode">
<dictLabel v-model="row[column.field]" :options="allNodeTypeOptions" />
</TreeEditItem>
</template>
<template #performanceType-edit="{ row }">
<el-select v-model="row.unit" size="small" placeholder="请选择" />
<template #performanceType="{ row, column }">
<TreeEditItem
v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row.performanceType"
:editMode="editMode"
>
<dictLabel v-model="row[column.field]" dictName="PERFORMANCE_TYPE" />
</TreeEditItem>
</template>
<template #performanceType-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="PERFORMANCE_TYPE" :editable="true" />
</template>
<!-- 指标单位 -->
<template #unit="{ row ,column}">
<TreeEditItem v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.unit" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="PERFORMANCE_UNIT"/>
<template #unit="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.unit" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="PERFORMANCE_UNIT" />
</TreeEditItem>
</template>
<template #unit-edit="{ row }">
<el-select v-model="row.unit" size="small" placeholder="请选择" />
<template #unit-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="PERFORMANCE_UNIT" :editable="true" />
</template>
<template #analyseSoftware="{ row ,column}">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.analyseSoftware" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="ANALYSIS_SOFTWARE"/>
<template #analyseSoftware="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.analyseSoftware" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="ANALYSIS_SOFTWARE" />
</TreeEditItem>
</template>
<template #bCapacity="{ row ,column}">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.department" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="SIMULATION_CAPACITY"/>
<template #analyseSoftware-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="ANALYSIS_SOFTWARE" :editable="true" :multiple="true" />
</template>
<template #bCapacity="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.department" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="SIMULATION_CAPACITY" />
</TreeEditItem>
</template>
<template #bCapacity-edit="{ row }">
<el-select v-model="row.department" size="small" placeholder="请选择" />
<template #bCapacity-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="SIMULATION_CAPACITY" :editable="true" />
</template>
<!-- -->
<template #department="{ row ,column}">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.department" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="DEPARTMENT_LIST"/>
<template #department="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.department" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="DEPARTMENT_LIST" />
</TreeEditItem>
</template>
<template #department-edit="{ row }">
<el-select v-model="row.department" size="small" placeholder="请选择" />
<template #department-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="DEPARTMENT_LIST" :editable="true" />
</template>
<!-- -->
<template #section="{ row,column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.section" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="SECTION_LIST"/>
<template #section="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.section" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="SECTION_LIST" />
</TreeEditItem>
</template>
<template #section-edit="{ row }">
<el-select v-model="row.section" size="small" placeholder="请选择" />
<template #section-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="SECTION_LIST" :editable="true" />
</template>
<!-- -->
<template #group="{ row,column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.group" :editMode="editMode" >
<dictLabel :value="row[column.field]" dictName="GROUP_LIST"/>
<template #group="{ row, column }">
<TreeEditItem v-if="[NODE_TYPE.TASK].includes(row.nodeType)" :data="row.group" :editMode="editMode">
<dictLabel v-model="row[column.field]" dictName="GROUP_LIST" />
</TreeEditItem>
</template>
<template #group-edit="{ row }">
<el-select v-model="row.group" size="small" placeholder="请选择" />
<template #group-edit="{ row, column }">
<dictLabel v-model="row[column.field]" dictName="GROUP_LIST" :editable="true" />
</template>
<!-- 描述 -->
<template #description="{ row }">
<TreeEditItem v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)" :data="row.description" :editMode="editMode" />
<TreeEditItem
v-if="[NODE_TYPE.TASK, NODE_TYPE.PERFORMANCE].includes(row.nodeType)"
:data="row.description"
:editMode="editMode"
/>
</template>
<template #description-edit="{ row }">
<el-input v-model="row.description" size="small" placeholder="请输入" />
@@ -134,7 +183,32 @@ import dictLabel from './dictLabel.vue';
import { poolCategoryTypeOptions } from '@/components/loadCaseTable/utils/project';
const TreeTableRef = ref<any>();
const { PERFORMANCE_UNIT } = useDict('PERFORMANCE_UNIT');
const methodOptions = [
{
label: '>',
value: '>',
},
{
label: '≥',
value: '≥',
},
{
label: '<',
value: '<',
},
{
label: '≤',
value: '≤',
},
{
label: '[]',
value: '[]',
},
{
label: '--',
value: '--',
},
];
interface Props {
tableName: string;
@@ -180,7 +254,7 @@ const removeFun = (data: any) => {
};
const allNodeTypeOptions = computed(() => {
const options:any = poolCategoryTypeOptions.value;
const options: any = poolCategoryTypeOptions.value;
return nodeTypeList.concat(options);
});
@@ -196,12 +270,15 @@ defineExpose({
.comp-tree-case-table {
width: 100%;
height: 100%;
.node-name {
display: flex;
align-items: center;
.blue {
color: var(--el-color-primary);
}
.name {
padding-left: 4px;
}

View File

@@ -68,7 +68,7 @@ const changeFun = () => {
emit('update:modelValue', ids);
const changeData: any[] = [];
listData.value.forEach((item: any) => {
if (choseList.value.includes(String(item.id))) {
if (choseList.value.includes(String(item.userId))) {
changeData.push(item);
}
});
@@ -77,7 +77,7 @@ const changeFun = () => {
emit('update:modelValue', choseList.value);
let changeData: any = {};
listData.value.some((item: any) => {
if (choseList.value === String(item.id)) {
if (choseList.value === String(item.userId)) {
changeData = item;
return true;
}

View File

@@ -91,8 +91,8 @@
</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" > </loadCaseTable>
<loadCaseTable v-show="currentTableType==='list'" ref="listTableRef" readonly tableName="TASK_POOL_LIST" :data="extractTableData" :loading="loading"> </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" readonly tableName="TASK_POOL_LIST" :data="extractTableData" :loading="loading" :editMode="false"> </loadCaseTable>
<loadcase-pro-table
v-if="false"
ref="treeTableRef2"
@@ -163,7 +163,7 @@
</el-form-item>
</el-form>
</div>
<loadCaseTable editMode="false" ref="treeTableRef" :loading="performanceLoading" readonly tableName="PERFORMANCE_POOL" :data="performanceData" > </loadCaseTable>
<loadCaseTable :editMode="false" ref="treeTableRef" :loading="performanceLoading" readonly tableName="PERFORMANCE_POOL" :data="performanceData" > </loadCaseTable>
<loadcase-pro-table
v-if="false"
ref="treeTableRef"

View File

@@ -0,0 +1,42 @@
<template>
<el-drawer
v-model="visible"
title="属性信息"
:size="400"
:close-on-click-modal="false"
@close="closeFun"
>
<div class="content">
<TableForm ref="tableFormRef" tableName="DATA_OVERVIEW_FILE_INFO" showDisabled />
</div>
<template #footer>
<div>
<el-button @click="closeFun">关闭</el-button>
</div>
</template>
</el-drawer>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import TableForm from '@/components/common/table/tableForm.vue';
const emit = defineEmits(['update:modelValue']);
const visible = ref(false);
interface Props {
modelValue: boolean;
}
const props = withDefaults(defineProps<Props>(), {
modelValue: false,
});
watch(() => props.modelValue, (val: boolean) => {
visible.value = val;
});
const closeFun = () => {
emit('update:modelValue', false);
};
</script>

View File

@@ -0,0 +1,43 @@
<template>
<el-drawer
v-model="visible"
title="文件搜索"
:size="400"
:close-on-click-modal="false"
@close="closeFun"
>
<div class="content">
<TableForm ref="tableFormRef" tableName="DATA_OVERVIEW_SEARCH" />
</div>
<template #footer>
<div>
<el-button @click="closeFun">关闭</el-button>
<el-button type="primary">搜索</el-button>
</div>
</template>
</el-drawer>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import TableForm from '@/components/common/table/tableForm.vue';
const emit = defineEmits(['update:modelValue']);
const visible = ref(false);
interface Props {
modelValue: boolean;
}
const props = withDefaults(defineProps<Props>(), {
modelValue: false,
});
watch(() => props.modelValue, (val: boolean) => {
visible.value = val;
});
const closeFun = () => {
emit('update:modelValue', false);
};
</script>

View File

@@ -26,7 +26,13 @@
</div>
</template>
<template #table>
<BaseTable tableName="DATA_OVERVIEW">
<BaseTable
tableName="DATA_OVERVIEW"
:api="getDictionaryClassApi"
showCheckbox
@checkbox-all="checkboxChangeFun"
@checkbox-change="checkboxChangeFun"
>
<template #leftOptions>
<div>
<el-dropdown trigger="click">
@@ -53,10 +59,10 @@
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button :icon="Edit" type="primary">重命名</el-button>
<el-button :icon="Delete" type="danger">删除</el-button>
<el-button :icon="Edit" type="primary" @click="renameFun">重命名</el-button>
<el-button :icon="Delete" type="danger" @click="delFun">删除</el-button>
<el-button :icon="Refresh">刷新</el-button>
<el-button :icon="Warning">属性信息</el-button>
<el-button :icon="Warning" @click="infoShow = true">属性信息</el-button>
<el-button :icon="Search" @click="searchShow = true">搜索</el-button>
</div>
</template>
@@ -65,7 +71,8 @@
</FileTree>
</div>
<Configuration v-model="configurationShow" :dimensionId="currentDimension" />
<SearchFile v-model="searchShow" />
<FileSearch v-model="searchShow" />
<FileInfo v-model="infoShow" />
<projectInfoDialog
ref="basePageFormRef"
v-if="showProjectInfoDialog"
@@ -82,15 +89,20 @@ import FileTree from '@/components/common/fileTreeTemp/index.vue';
import { getSimulationNodeTreeApi, getAllTemplateApi } from '@/api/data/dimensionTemplate';
import BaseTable from '@/components/common/table/baseTable.vue';
import Configuration from './components/configuration.vue';
import SearchFile from './components/search.vue';
import FileSearch from './components/search.vue';
import FileInfo from './components/info.vue';
import { ElMessage } from 'element-plus';
import ProjectInfoDialog from '@/components/project/projectInfoDialog.vue';
import { CirclePlus, Upload, Search, Edit, Refresh, Delete, Warning } from '@element-plus/icons-vue';
import { getDictionaryClassApi } from '@/api/system/systemData';
const currentDimension = ref(1);
const templateList = ref<any>([]);
const configurationShow = ref(false);
const searchShow = ref(false);
const infoShow = ref(false);
const showProjectInfoDialog = ref(false);
let chosenData: any[] = [];
onMounted(() => {
getAllTemplateFun();
@@ -104,6 +116,24 @@ const getAllTemplateFun = () => {
}
});
};
const renameFun = () => {
if (chosenData.length !== 1) {
ElMessage.warning('请选择一条数据操作');
return;
}
};
const delFun = () => {
if (chosenData.length === 0) {
ElMessage.warning('请选择要删除的数据');
return;
}
};
const checkboxChangeFun = (data: any) => {
chosenData = data.records;
};
</script>
<style lang="scss" scoped>