UPDATE: 1、优化

This commit is contained in:
贾同学
2025-10-22 15:07:32 +08:00
parent d5a2db5cd0
commit 1cc2ab79cd
3 changed files with 253 additions and 190 deletions

View File

@@ -577,7 +577,11 @@ const importClick = () => {
// 点击导出按钮
const exportClick = () => {
ElMessageBox.confirm('确认导出检测计划?', '温馨提示', { type: 'warning' }).then(() => {
ElMessageBox.confirm('确认导出检测计划?', '温馨提示', {
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
useDownload(
exportPlan,
'检测计划导出数据',

View File

@@ -1,28 +1,61 @@
<template>
<el-dialog class='table-box' v-model='dialogVisible' top='114px'
<el-dialog
class="table-box"
v-model="dialogVisible"
top="114px"
:style="{ height: height + 'px', maxHeight: height + 'px', overflow: 'hidden' }"
title='字典数据'
:width='width'
:modal='false'>
<div class='table-box' :style="{height:(height-64)+'px',maxHeight:(height-64)+'px',overflow:'hidden'}">
<ProTable ref='proTable' :columns="columns" :request-api='getDictDataListByTypeId' :initParam="initParam">
title="字典数据"
:width="width"
:modal="false"
>
<div
class="table-box"
:style="{ height: height - 64 + 'px', maxHeight: height - 64 + 'px', overflow: 'hidden' }"
>
<ProTable ref="proTable" :columns="columns" :request-api="getDictDataListByTypeId" :initParam="initParam">
<template #tableHeader="scope">
<el-button v-auth.dict="'show_add'" type="primary" :icon="CirclePlus" @click="openDialog('add')">新增</el-button>
<el-button v-auth.dict="'show_export'" type='primary' :icon='Download' plain @click="downloadFile">导出</el-button>
<el-button v-auth.dict="'show_delete'" type="danger" :icon="Delete" plain :disabled="!scope.isSelected"
@click="batchDelete(scope.selectedListIds)">
<el-button v-auth.dict="'show_add'" type="primary" :icon="CirclePlus" @click="openDialog('add')">
新增
</el-button>
<el-button v-auth.dict="'show_export'" type="primary" :icon="Download" plain @click="downloadFile">
导出
</el-button>
<el-button
v-auth.dict="'show_delete'"
type="danger"
:icon="Delete"
plain
:disabled="!scope.isSelected"
@click="batchDelete(scope.selectedListIds)"
>
删除
</el-button>
</template>
<template #operation="scope">
<el-button v-auth.dict="'show_edit'" type="primary" link :icon="EditPen" @click="openDialog('edit', scope.row)">编辑</el-button>
<el-button v-auth.dict="'show_delete'" type="primary" link :icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
<el-button
v-auth.dict="'show_edit'"
type="primary"
link
:icon="EditPen"
@click="openDialog('edit', scope.row)"
>
编辑
</el-button>
<el-button
v-auth.dict="'show_delete'"
type="primary"
link
:icon="Delete"
@click="handleDelete(scope.row)"
>
删除
</el-button>
</template>
</ProTable>
</div>
</el-dialog>
<DataPopup :refresh-table='proTable?.getTableList' ref='dataPopup'/>
<DataPopup :refresh-table="proTable?.getTableList" ref="dataPopup" />
</template>
<script setup lang="tsx" name="dictData">
@@ -30,10 +63,9 @@ import {CirclePlus, Delete, Download, EditPen} from '@element-plus/icons-vue'
import { type Dict } from '@/api/system/dictionary/interface'
import { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
import { useHandleData } from '@/hooks/useHandleData'
import {deleteDictData, getDictDataListByTypeId, exportDictData} from "@/api/system/dictionary/dictData/index";
import {useDownload} from "@/hooks/useDownload";
import {exportDictType} from "@/api/system/dictionary/dictType";
import { isShallow } from 'vue';
import { deleteDictData, exportDictData, getDictDataListByTypeId } from '@/api/system/dictionary/dictData/index'
import { useDownload } from '@/hooks/useDownload'
defineOptions({
name: 'dict'
})
@@ -43,7 +75,6 @@ const dialogVisible = ref(false)
const dictTypeId = ref('')
const dictTypeName = ref('')
const initParam = reactive({ typeId: '' })
const dataPopup = ref()
@@ -51,12 +82,12 @@ const dataPopup = ref()
const props = defineProps({
width: {
type: Number,
default: 800,
default: 800
},
height: {
type: Number,
default: 744,
},
default: 744
}
})
const columns = reactive<ColumnProps<Dict.ResDictData>[]>([
@@ -82,11 +113,11 @@ const columns = reactive<ColumnProps<Dict.ResDictData>[]>([
prop: 'value',
label: '值',
minWidth: 180,
render: (scope) => {
render: scope => {
if (scope.row.openValue === 0 || scope.row.value === null || scope.row.value === '') {
return <span>/</span>; // 使用 JSX 返回 VNode
return <span>/</span> // 使用 JSX 返回 VNode
}
return <span>{scope.row.value}</span>; // 使用 JSX 返回 VNode
return <span>{scope.row.value}</span> // 使用 JSX 返回 VNode
}
},
{
@@ -98,9 +129,9 @@ const columns = reactive<ColumnProps<Dict.ResDictData>[]>([
return (
<>
{
(<el-tag type={scope.row.level === 0 ? 'info' : scope.row.level === 1 ? 'warning' : 'danger'}>
<el-tag type={scope.row.level === 0 ? 'info' : scope.row.level === 1 ? 'warning' : 'danger'}>
{scope.row.level === 0 ? '普通' : scope.row.level === 1 ? '中等' : '严重'}
</el-tag>)
</el-tag>
}
</>
)
@@ -116,7 +147,7 @@ const columns = reactive<ColumnProps<Dict.ResDictData>[]>([
label: '操作',
fixed: 'right',
width: 200
},
}
])
const open = (row: Dict.ResDictType) => {
@@ -147,8 +178,17 @@ const handleDelete = async (params: Dict.ResDictData) => {
}
const downloadFile = async () => {
ElMessageBox.confirm('确认导出字典数据?', '温馨提示', {type: 'warning'}).then(() =>
useDownload(exportDictData, '字典数据导出数据', {typeId: dictTypeId.value, ...(proTable.value?.searchParam)}, false),
ElMessageBox.confirm('确认导出字典数据?', '温馨提示', {
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() =>
useDownload(
exportDictData,
'字典数据导出数据',
{ typeId: dictTypeId.value, ...proTable.value?.searchParam },
false
)
)
}
</script>

View File

@@ -1,31 +1,49 @@
<template>
<div class='table-box' ref='popupBaseView'>
<ProTable
ref='proTable'
:columns='columns'
:request-api='getDictTypeList'
<div class="table-box" ref="popupBaseView">
<ProTable ref="proTable" :columns="columns" :request-api="getDictTypeList">
<template #tableHeader="scope">
<el-button v-auth.dict="'add'" type="primary" :icon="CirclePlus" @click="openDialog('add')">
新增
</el-button>
<el-button v-auth.dict="'export'" type="primary" :icon="Download" plain @click="downloadFile()">
导出
</el-button>
<el-button
v-auth.dict="'delete'"
type="danger"
:icon="Delete"
plain
:disabled="!scope.isSelected"
@click="batchDelete(scope.selectedListIds)"
>
<template #tableHeader='scope'>
<el-button v-auth.dict="'add'" type='primary' :icon='CirclePlus' @click="openDialog('add')">新增</el-button>
<el-button v-auth.dict="'export'" type='primary' :icon='Download' plain @click='downloadFile()'>导出</el-button>
<el-button v-auth.dict="'delete'" type='danger' :icon='Delete' plain :disabled='!scope.isSelected'
@click='batchDelete(scope.selectedListIds)'>
删除
</el-button>
</template>
<template #operation='scope'>
<el-button v-auth.dict="'show'" type='primary' link :icon='View' @click='toDictData(scope.row)'>查看</el-button>
<el-button v-auth.dict="'edit'" type='primary' link :icon='EditPen' @click="openDialog('edit', scope.row)">编辑</el-button>
<el-button v-auth.dict="'delete'" type='primary' link :icon='Delete' @click='handleDelete(scope.row)'>删除</el-button>
<template #operation="scope">
<el-button v-auth.dict="'show'" type="primary" link :icon="View" @click="toDictData(scope.row)">
查看
</el-button>
<el-button
v-auth.dict="'edit'"
type="primary"
link
:icon="EditPen"
@click="openDialog('edit', scope.row)"
>
编辑
</el-button>
<el-button v-auth.dict="'delete'" type="primary" link :icon="Delete" @click="handleDelete(scope.row)">
删除
</el-button>
</template>
</ProTable>
</div>
<DictData :width='viewWidth' :height='viewHeight' ref='openView' />
<TypePopup :refresh-table='proTable?.getTableList' ref='typePopup' />
<DictData :width="viewWidth" :height="viewHeight" ref="openView" />
<TypePopup :refresh-table="proTable?.getTableList" ref="typePopup" />
</template>
<script setup lang='tsx' name='dict'>
<script setup lang="tsx" name="dict">
import { CirclePlus, Delete, Download, EditPen, View } from '@element-plus/icons-vue'
import { type Dict } from '@/api/system/dictionary/interface'
import type { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
@@ -33,8 +51,9 @@ import DictData from '@/views/system/dictionary/dictData/index.vue'
import { useHandleData } from '@/hooks/useHandleData'
import { useViewSize } from '@/hooks/useViewSize'
import { useDownload } from '@/hooks/useDownload'
import { deleteDictType, getDictTypeList, exportDictType } from '@/api/system/dictionary/dictType'
import { deleteDictType, exportDictType, getDictTypeList } from '@/api/system/dictionary/dictType'
import { reactive, ref } from 'vue'
defineOptions({
name: 'dict'
})
@@ -52,47 +71,45 @@ const columns = reactive<ColumnProps<Dict.ResDictType>[]>([
label: '类型名称',
minWidth: 180,
search: {
el: 'input',
},
el: 'input'
}
},
{
prop: 'code',
label: '类型编码',
minWidth: 220,
search: {
el: 'input',
},
el: 'input'
}
},
{
prop: 'remark',
label: '描述',
minWidth: 250,
minWidth: 250
},
{
prop: 'sort',
label: '排序',
minWidth: 70,
minWidth: 70
},
{
prop: 'createTime',
label: '创建时间',
minWidth: 180,
minWidth: 180
},
{
prop: 'operation',
label: '操作',
fixed: 'right',
width: 250,
},
width: 250
}
])
// 打开 drawer(新增、编辑)
const openDialog = (titleType: string, row: Partial<Dict.ResDictType> = {}) => {
typePopup.value?.open(titleType, row)
}
// 批量删除字典类型
const batchDelete = async (id: string[]) => {
await useHandleData(deleteDictType, id, '删除所选字典类型')
@@ -113,8 +130,10 @@ const toDictData = (row: Dict.ResDictType) => {
// 导出字典类型列表
const downloadFile = async () => {
ElMessageBox.confirm('确认导出字典类型数据?', '温馨提示', { type: 'warning' }).then(() =>
useDownload(exportDictType, '字典类型导出数据', proTable.value?.searchParam, false),
)
ElMessageBox.confirm('确认导出字典类型数据?', '温馨提示', {
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => useDownload(exportDictType, '字典类型导出数据', proTable.value?.searchParam, false))
}
</script>