update:数据总览

This commit is contained in:
2025-11-12 18:12:04 +08:00
parent 32bb142882
commit fbc344addb
9 changed files with 168 additions and 108 deletions

View File

@@ -4,7 +4,7 @@
class="select" class="select"
v-model="choseData" v-model="choseData"
:options="listData" :options="listData"
placeholder="请选择" :placeholder="disabled ? '' : '请选择'"
filterable filterable
clearable clearable
@change="changeFun" @change="changeFun"
@@ -18,10 +18,12 @@ import { systemApproveQueryApproveFlowTempalteApi } from '@/api/system/systemApp
interface Props { interface Props {
modelValue: string; modelValue: string;
disabled: boolean;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
modelValue: '', modelValue: '',
disabled: false,
}); });
const listData = ref<any>([]); const listData = ref<any>([]);
const choseData = ref<any>(''); const choseData = ref<any>('');

View File

@@ -182,6 +182,7 @@ const updateNavFun = (data: any) => {
}; };
const reloadFun = () => { const reloadFun = () => {
navList.value = [];
visible.value = false; visible.value = false;
setTimeout(() => { setTimeout(() => {
visible.value = true; visible.value = true;

View File

@@ -4,7 +4,7 @@
class="select" class="select"
v-model="choseList" v-model="choseList"
:options="listData" :options="listData"
placeholder="请选择" :placeholder="disabled ? '' : '请选择'"
filterable filterable
clearable clearable
:multiple="multiple" :multiple="multiple"
@@ -20,11 +20,13 @@ import { queryNodeListApi } from '@/api/project/node';
interface Props { interface Props {
modelValue: string; modelValue: string;
multiple?: boolean; multiple?: boolean;
disabled: boolean;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
modelValue: '', modelValue: '',
multiple: false, multiple: false,
disabled: false,
}); });
const listData = ref<any>([]); const listData = ref<any>([]);
const choseList = ref<any>([]); const choseList = ref<any>([]);

View File

@@ -3,7 +3,7 @@
<el-input <el-input
v-if="item.inputMode === 'input'" v-if="item.inputMode === 'input'"
v-model="formData[item.key]" v-model="formData[item.key]"
placeholder="请输入" :placeholder="(item.disabled && showDisabled) ? '' : '请输入'"
clearable clearable
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@input="(val: any) => changeFun(item.key, val)" @input="(val: any) => changeFun(item.key, val)"
@@ -13,14 +13,14 @@
v-model="formData[item.key]" v-model="formData[item.key]"
type="textarea" type="textarea"
autosize autosize
placeholder="请输入" :placeholder="(item.disabled && showDisabled) ? '' : '请输入'"
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@input="(val: any) => changeFun(item.key, val)" @input="(val: any) => changeFun(item.key, val)"
/> />
<el-input-number <el-input-number
v-if="item.inputMode === 'inputNumber'" v-if="item.inputMode === 'inputNumber'"
v-model="formData[item.key]" v-model="formData[item.key]"
placeholder="请输入" :placeholder="(item.disabled && showDisabled) ? '' : '请输入'"
:min="0" :min="0"
:step="item.step" :step="item.step"
step-strictly step-strictly
@@ -30,7 +30,7 @@
<el-select <el-select
v-if="item.inputMode === 'select'" v-if="item.inputMode === 'select'"
v-model="formData[item.key]" v-model="formData[item.key]"
placeholder="请选择" :placeholder="(item.disabled && showDisabled) ? '' : '请选择'"
clearable clearable
:options="item.options" :options="item.options"
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@@ -65,7 +65,7 @@
type="datetime" type="datetime"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择" :placeholder="(item.disabled && showDisabled) ? '' : '请选择'"
clearable clearable
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@change="(val: any) => changeFun(item.key, val)" @change="(val: any) => changeFun(item.key, val)"

View File

@@ -40,6 +40,7 @@ interface Props {
colNum?: number; colNum?: number;
showDisabled?: boolean; showDisabled?: boolean;
ruleData?: any; ruleData?: any;
data?: any;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
@@ -47,13 +48,18 @@ const props = withDefaults(defineProps<Props>(), {
colNum: 1, colNum: 1,
showDisabled: false, showDisabled: false,
ruleData: {}, ruleData: {},
data: {},
});
watch(() => props.data, (data: any) => {
formData.value = data;
}); });
onMounted(() => { onMounted(() => {
getHeadDataFun(); getHeadDataFun();
}); });
const formData = ref<any>({}); const formData = ref<any>(props.data);
const tableData = ref<any>([]); const tableData = ref<any>([]);
const rules = ref<any>({}); const rules = ref<any>({});
const formRef = ref<any>(); const formRef = ref<any>();

View File

@@ -4,8 +4,8 @@
v-model="diaVisible" v-model="diaVisible"
:diaTitle="`表名【${name}】字段设置`" :diaTitle="`表名【${name}】字段设置`"
top="2vh" top="2vh"
width="98%" width="80%"
height="90%" height="80%"
show-footer show-footer
@close="closeFun" @close="closeFun"
> >

View File

@@ -4,7 +4,7 @@
class="select" class="select"
v-model="choseList" v-model="choseList"
:options="listData" :options="listData"
placeholder="请选择" :placeholder="disabled ? '' : '请选择'"
filterable filterable
clearable clearable
:multiple="multiple" :multiple="multiple"
@@ -20,11 +20,13 @@ import { userListUserApi } from '@/api/system/user';
interface Props { interface Props {
modelValue: string; modelValue: string;
multiple?: boolean; multiple?: boolean;
disabled: boolean;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
modelValue: '', modelValue: '',
multiple: false, multiple: false,
disabled: false,
}); });
const listData = ref<any>([]); const listData = ref<any>([]);
const choseList = ref<any>([]); const choseList = ref<any>([]);

View File

@@ -1,42 +1,55 @@
<template> <template>
<el-drawer <div class="comp-data-info">
v-model="visible"
title="属性信息"
:size="400"
:close-on-click-modal="false"
@close="closeFun"
>
<div class="content"> <div class="content">
<TableForm ref="tableFormRef" tableName="DATA_OVERVIEW_FILE_INFO" showDisabled /> <TableForm ref="tableFormRef" :data="data" tableName="DATA_OVERVIEW" showDisabled>
<template #form-originalName="{ row }">
{{ row.originalName || '--' }}
</template>
<template #form-dataType="{ row }">
{{ DATA_TYPE.O[row.dataType] || '--' }}
</template>
<template #form-creatorName="{ row }">
{{ row.creatorName || '--' }}
</template>
<template #form-createTime="{ row }">
{{ row.createTime || '--' }}
</template>
<template #form-updateTime="{ row }">
{{ row.updateTime || '--' }}
</template>
<template #form-fileSize="{ row }">
{{ formatFileSize(row.fileSize) || '--' }}
</template>
</TableForm>
</div> </div>
<template #footer> </div>
<div>
<el-button @click="closeFun">关闭</el-button>
</div>
</template>
</el-drawer>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from 'vue'; import { ref } from 'vue';
import TableForm from '@/components/common/table/tableForm.vue'; import TableForm from '@/components/common/table/tableForm.vue';
import { formatFileSize } from '@/utils/file';
import { useDict } from '@/utils/useDict';
const emit = defineEmits(['update:modelValue']); const { DATA_TYPE } = useDict('DATA_TYPE');
const visible = ref(false); const tableFormRef = ref();
interface Props { interface Props {
modelValue: boolean; data: any;
} }
const props = withDefaults(defineProps<Props>(), { withDefaults(defineProps<Props>(), {
modelValue: false, data: {},
}); });
watch(() => props.modelValue, (val: boolean) => {
visible.value = val;
});
const closeFun = () => {
emit('update:modelValue', false);
};
</script> </script>
<style lang="scss" scoped>
.comp-data-info {
width: 100%;
min-height: 100%;
padding: 10px;
border: solid 1px var(--el-border-color);
border-radius: 4px;
margin-left: 10px;
}
</style>

View File

@@ -30,71 +30,88 @@
</div> </div>
</template> </template>
<template #table> <template #table>
<BaseTable <div class="table-content">
ref="BaseTableRef" <div class="table">
tableName="DATA_OVERVIEW" <BaseTable
:api="dataOverViewListSimulationNodeFilesApi" ref="BaseTableRef"
:params="{ tableName="DATA_OVERVIEW"
dimensionTemplateId: currentDimension, :api="dataOverViewListSimulationNodeFilesApi"
fileId: currentData.id, :params="{
}" dimensionTemplateId: currentDimension,
showCheckbox fileId: currentData.id,
@checkbox-all="checkboxChangeFun" }"
@checkbox-change="checkboxChangeFun" showCheckbox
> @checkbox-all="checkboxChangeFun"
<template #leftOptions> @checkbox-change="checkboxChangeFun"
<div> @cell-click="cellClickFun"
<el-dropdown trigger="click"> >
<el-button :icon="CirclePlus" type="primary" class="option-btn"> <template #leftOptions>
新增<el-icon class="el-icon--right"><arrow-down /></el-icon> <div>
</el-button> <el-dropdown trigger="click">
<template #dropdown> <el-button :icon="CirclePlus" type="primary" class="option-btn">
<el-dropdown-menu> 新增<el-icon class="el-icon--right"><arrow-down /></el-icon>
<el-dropdown-item @click="addDiaFun(NODE_TYPE.PROJECT)">新增项目</el-dropdown-item> </el-button>
<el-dropdown-item @click="addDiaFun(NODE_TYPE.PHASE)">新增阶段</el-dropdown-item> <template #dropdown>
<el-dropdown-item @click="addDiaFun(NODE_TYPE.CATEGORY)">新增分类</el-dropdown-item> <el-dropdown-menu>
<el-dropdown-item @click="addDiaFun(NODE_TYPE.TASK)">新增任务</el-dropdown-item> <el-dropdown-item @click="addDiaFun(NODE_TYPE.PROJECT)">新增项目</el-dropdown-item>
<!-- <el-dropdown-item>新增算例</el-dropdown-item> --> <el-dropdown-item @click="addDiaFun(NODE_TYPE.PHASE)">新增阶段</el-dropdown-item>
</el-dropdown-menu> <el-dropdown-item @click="addDiaFun(NODE_TYPE.CATEGORY)">新增分类</el-dropdown-item>
</template> <el-dropdown-item @click="addDiaFun(NODE_TYPE.TASK)">新增任务</el-dropdown-item>
</el-dropdown> <!-- <el-dropdown-item>新增算例</el-dropdown-item> -->
<el-dropdown trigger="click"> </el-dropdown-menu>
<el-button :icon="Upload" type="primary" class="option-btn"> </template>
上传<el-icon class="el-icon--right"><arrow-down /></el-icon> </el-dropdown>
</el-button> <el-dropdown trigger="click">
<template #dropdown> <el-button :icon="Upload" type="primary" class="option-btn">
<el-dropdown-menu> 上传<el-icon class="el-icon--right"><arrow-down /></el-icon>
<el-dropdown-item @click="openAddDirFun">新建文件夹</el-dropdown-item> </el-button>
<el-dropdown-item> <template #dropdown>
<el-upload :show-file-list="false" :before-upload="beforeUploadFun"> <el-dropdown-menu>
上传文件 <el-dropdown-item @click="openAddDirFun">新建文件夹</el-dropdown-item>
</el-upload> <el-dropdown-item>
</el-dropdown-item> <el-upload :show-file-list="false" :before-upload="beforeUploadFun">
</el-dropdown-menu> 上传文件
</template> </el-upload>
</el-dropdown> </el-dropdown-item>
<el-button :icon="Edit" type="primary" @click="editFun">编辑</el-button> </el-dropdown-menu>
<el-button :icon="Delete" type="danger" :disabled="chosenData.length === 0" @click="delFun">删除</el-button> </template>
<el-button :icon="Refresh" @click="reloadFun">刷新</el-button> </el-dropdown>
<el-button :icon="Warning" @click="infoShow = true">属性信息</el-button> <el-button :icon="Edit" type="primary" @click="editFun">编辑</el-button>
</div> <el-button :icon="Delete" type="danger" :disabled="chosenData.length === 0" @click="delFun">删除</el-button>
</template> <el-button :icon="Refresh" @click="reloadFun">刷新</el-button>
<template #originalName="{ row }"> <span class="info-switch">
<div class="file-name" @dblclick="goDetailFun(row)"> <el-switch
<el-icon :size="16"> v-model="infoShow"
<Folder v-if="row.dataType === 1" /> inline-prompt
<Document v-else /> active-text="详细信息"
</el-icon> inactive-text="详细信息"
<el-link type="primary" class="name">{{ row.originalName }}</el-link> />
</div> </span>
</template> </div>
<template #dataType="{ row }"> </template>
{{ DATA_TYPE.O[row.dataType] }} <template #originalName="{ row }">
</template> <div class="file-name" @dblclick="goDetailFun(row)">
<template #fileSize="{ row }"> <el-icon :size="16">
{{ formatFileSize(row.fileSize) }} <Folder v-if="row.dataType === 1" />
</template> <Document v-else />
</BaseTable> </el-icon>
<el-link type="primary" class="name">{{ row.originalName }}</el-link>
</div>
</template>
<template #dataType="{ row }">
{{ DATA_TYPE.O[row.dataType] }}
</template>
<template #fileSize="{ row }">
{{ formatFileSize(row.fileSize) }}
</template>
</BaseTable>
</div>
<div v-if="infoShow" class="info">
<FileInfo
:data="fileData"
/>
</div>
</div>
</template> </template>
</FileTree> </FileTree>
</div> </div>
@@ -107,9 +124,6 @@
:dirId="currentData.id" :dirId="currentData.id"
@search="searchFileFun" @search="searchFileFun"
/> />
<FileInfo
v-model="infoShow"
/>
<AddDir <AddDir
v-model="addDirShow" v-model="addDirShow"
:data="currentData" :data="currentData"
@@ -150,7 +164,7 @@ import PhaseInfoDia from '@/components/project/phaseInfoDialog.vue';
import NodeDetailDialog from '@/components/common/treeCaseTable/nodeDetailDialog.vue'; import NodeDetailDialog from '@/components/common/treeCaseTable/nodeDetailDialog.vue';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import ProjectInfoDialog from '@/components/project/projectInfoDialog.vue'; import ProjectInfoDialog from '@/components/project/projectInfoDialog.vue';
import { CirclePlus, Upload, Edit, Refresh, Delete, Warning, Folder, Document } from '@element-plus/icons-vue'; import { CirclePlus, Upload, Edit, Refresh, Delete, Folder, Document } from '@element-plus/icons-vue';
import { NODE_TYPE } from '@/utils/enum/node'; import { NODE_TYPE } from '@/utils/enum/node';
import { useDict } from '@/utils/useDict'; import { useDict } from '@/utils/useDict';
import { formatFileSize } from '@/utils/file'; import { formatFileSize } from '@/utils/file';
@@ -170,6 +184,7 @@ const FileTreeRef = ref();
const editId = ref(''); const editId = ref('');
const chosenData = ref<any>([]); const chosenData = ref<any>([]);
const BaseTableRef = ref(); const BaseTableRef = ref();
const fileData = ref<any>({});
onMounted(() => { onMounted(() => {
getAllTemplateFun(); getAllTemplateFun();
@@ -239,6 +254,11 @@ const delFun = () => {
}).catch(() => {}); }).catch(() => {});
}; };
const cellClickFun = (data: any) => {
const { row } = data;
fileData.value = row;
};
const beforeUploadFun = (file: any) => { const beforeUploadFun = (file: any) => {
if (!currentData.value) { if (!currentData.value) {
ElMessage.warning('请选择一个目录'); ElMessage.warning('请选择一个目录');
@@ -291,6 +311,7 @@ const checkboxChangeFun = (data: any) => {
const reloadFun = () => { const reloadFun = () => {
chosenData.value = []; chosenData.value = [];
currentData.value = '';
if (FileTreeRef.value) { if (FileTreeRef.value) {
FileTreeRef.value.reloadFun(); FileTreeRef.value.reloadFun();
} }
@@ -326,5 +347,18 @@ const reloadFun = () => {
padding-left: 4px; padding-left: 4px;
} }
} }
.info-switch {
margin-left: 12px;
}
.table-content {
display: flex;
.table {
flex: 1;
width: 0;
}
.info {
width: 250px;
}
}
} }
</style> </style>