This commit is contained in:
sjl
2024-11-14 20:36:54 +08:00
parent 534cc0ab76
commit 5fd97ebe72
9 changed files with 79 additions and 126 deletions

View File

@@ -313,7 +313,7 @@
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
border-radius: 4px; border-radius: 4px;
line-height: 40px; line-height: 40px;
width: 120%; width: 100%;
height: 35px; height: 35px;
padding-inline-start: 0px; padding-inline-start: 0px;
padding-left: 10px; padding-left: 10px;

View File

@@ -3,13 +3,12 @@
<el-form :model="formContent" ref='dialogFormRef' :rules='rules' > <el-form :model="formContent" ref='dialogFormRef' :rules='rules' >
<el-form-item label="上级菜单" prop="pid" :label-width="100"> <el-form-item label="上级菜单" prop="pid" :label-width="100">
<el-tree-select <el-tree-select
v-model="value" v-model="formContent.pid"
:data="data" :data="functionList"
check-strictly check-strictly
:render-after-expand="false" :render-after-expand="false"
show-checkbox
check-on-click-node check-on-click-node
:props="defaultProps"
/> />
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="name" :label-width="100"> <el-form-item label="名称" prop="name" :label-width="100">
@@ -65,78 +64,14 @@
import IconSelect from '@/components/SelectIcon/index.vue' import IconSelect from '@/components/SelectIcon/index.vue'
import { functionList } from '@/api/function/functionExample.ts' import { functionList } from '@/api/function/functionExample.ts'
import { min } from 'lodash'; import { min } from 'lodash';
import { Console } from 'console';
const value = ref() const value = ref()
// 树形节点配置
const defaultProps = {
children: 'children',
label: 'name',
};
const data = [
{
value: '1',
label: 'Level one 1',
children: [
{
value: '1-1',
label: 'Level two 1-1',
children: [
{
value: '1-1-1',
label: 'Level three 1-1-1',
},
],
},
],
},
{
value: '2',
label: 'Level one 2',
children: [
{
value: '2-1',
label: 'Level two 2-1',
children: [
{
value: '2-1-1',
label: 'Level three 2-1-1',
},
],
},
{
value: '2-2',
label: 'Level two 2-2',
children: [
{
value: '2-2-1',
label: 'Level three 2-2-1',
},
],
},
],
},
{
value: '3',
label: 'Level one 3',
children: [
{
value: '3-1',
label: 'Level two 3-1',
children: [
{
value: '3-1-1',
label: 'Level three 3-1-1',
},
],
},
{
value: '3-2',
label: 'Level two 3-2',
children: [
{
value: '3-2-1',
label: 'Level three 3-2-1',
},
],
},
],
},
]
const dictStore = useDictStore() const dictStore = useDictStore()
// 定义弹出组件元信息 // 定义弹出组件元信息
const dialogFormRef = ref() const dialogFormRef = ref()
@@ -190,7 +125,9 @@ const resetFormContent = () => {
const rules : Ref<Record<string, Array<FormItemRule>>> = ref({ const rules : Ref<Record<string, Array<FormItemRule>>> = ref({
name :[{required:true,trigger:'blur',message:'菜单名称必填!'}], name :[{required:true,trigger:'blur',message:'菜单名称必填!'}],
path :[{required:true,trigger:'blur',message:'菜单路径必填!'}], path :[{required:true,trigger:'blur',message:'菜单路径必填!'}],
type :[{required:true,trigger:'change',message:'菜单类型必选!'}] type :[{required:true,trigger:'change',message:'菜单类型必选!'}],
component :[{required:true,trigger:'blur',message:'组件地址必填!'}],
code :[{required:true,trigger:'blur',message:'编码必填!'}]
}) })
// 关闭弹窗 // 关闭弹窗
@@ -207,7 +144,7 @@ const close = () => {
try { try {
console.log(formContent.value) console.log(formContent.value)
dialogFormRef.value?.validate(async (valid: boolean) => { dialogFormRef.value?.validate(async (valid: boolean) => {
console.log(valid)
if (valid) { if (valid) {
if (formContent.value.id) { if (formContent.value.id) {
await updateFunction(formContent.value); await updateFunction(formContent.value);
@@ -225,8 +162,11 @@ const close = () => {
} }
} }
const functionList = ref<Function.ResFunction[]>([])
// 打开弹窗,可能是新增,也可能是编辑 // 打开弹窗,可能是新增,也可能是编辑
const open = async (sign: string, data: Function.ResFunction) => { const open = async (sign: string, data: Function.ResFunction) => {
const response = await getFunctionListNoButton()
functionList.value = response.data as unknown as Function.ResFunction[]
titleType.value = sign titleType.value = sign
dialogVisible.value = true dialogVisible.value = true
if (data.id) { if (data.id) {

View File

@@ -56,9 +56,18 @@
prop: 'type', prop: 'type',
label: '类型', label: '类型',
width: 100, width: 100,
enum: dictStore.getDictData('resourceType'), render: (scope) => {
search: { el: 'select', props: { filterable: true } }, const typeMap: { [key: number]: { label: string; type: string } } = {
fieldNames: { label: 'label', value: 'code' }, 0: { label: '菜单', type: 'info' },
1: { label: '按钮', type: 'warning' },
2: { label: '公共资源', type: 'success' },
3: { label: '服务间调用资源', type: 'primary' },
};
const typeInfo = typeMap[scope.row.type] || { label: '未知', type: 'danger' };
return (
<el-tag type={typeInfo.type}>{typeInfo.label}</el-tag>
);
},
}, },
{ {
prop: 'icon', prop: 'icon',
@@ -85,8 +94,6 @@
prop: 'state', prop: 'state',
label: '权限资源状态', label: '权限资源状态',
minWidth: 100, minWidth: 100,
enum: dictStore.getDictData('status'),
fieldNames: { label: 'label', value: 'code' },
render: scope => { render: scope => {
return ( return (
<el-tag type={scope.row.state ? 'success' : 'danger'} > {scope.row.state ? '正常' : '禁用'} </el-tag> <el-tag type={scope.row.state ? 'success' : 'danger'} > {scope.row.state ? '正常' : '禁用'} </el-tag>

View File

@@ -88,8 +88,6 @@ const columns = reactive<ColumnProps<Role.RoleBO>[]>([
prop: 'state', prop: 'state',
label: '状态', label: '状态',
minWidth: 100, minWidth: 100,
enum: dictStore.getDictData('state'),
fieldNames: { label: 'label', value: 'code' },
render: scope => { render: scope => {
return ( return (
<el-tag type={scope.row.state ? 'success' : 'danger'} > {scope.row.state ? '正常' : '删除'} </el-tag> <el-tag type={scope.row.state ? 'success' : 'danger'} > {scope.row.state ? '正常' : '删除'} </el-tag>

View File

@@ -88,9 +88,7 @@ const columns = reactive<ColumnProps<Sys_Log_Audit.Audit_LogList>[]>([
{ {
prop: 'warn', prop: 'warn',
label: '告警标志', label: '告警标志',
enum: dictStore.getDictData('status'),
minWidth: 100, minWidth: 100,
fieldNames: { label: 'label', value: 'code' },
render: scope => { render: scope => {
return ( return (
<el-tag type={scope.row.warn ? 'danger' : 'success'}>{scope.row.warn ? '告警' : '未告警'}</el-tag> <el-tag type={scope.row.warn ? 'danger' : 'success'}>{scope.row.warn ? '告警' : '未告警'}</el-tag>

View File

@@ -6,12 +6,12 @@
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false"> <el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false">
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="设备名称" prop="name"> <el-form-item label="设备名称" prop="name" :label-width="100">
<el-input v-model='formContent.name' placeholder="请输入设备名称"/> <el-input v-model='formContent.name' placeholder="请输入设备名称"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='设备类型' prop='devType'> <el-form-item label='设备类型' prop='devType' :label-width="100">
<el-select v-model="formContent.devType" clearable placeholder="请选择设备类型"> <el-select v-model="formContent.devType" clearable placeholder="请选择设备类型">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Type')" v-for="item in dictStore.getDictData('Dev_Type')"
@@ -23,7 +23,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='通讯协议' prop='protocol'> <el-form-item label='通讯协议' prop='protocol' :label-width="100">
<el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议"> <el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议">
<el-option <el-option
v-for="item in dictStore.getDictData('Event_Type')" v-for="item in dictStore.getDictData('Event_Type')"
@@ -38,7 +38,7 @@
</el-row> </el-row>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="设备通道数" prop="devChns"> <el-form-item label="设备通道数" prop="devChns" :label-width="100">
<el-select v-model="formContent.devChns" clearable placeholder="请选择设备通道数"> <el-select v-model="formContent.devChns" clearable placeholder="请选择设备通道数">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Chns')" v-for="item in dictStore.getDictData('Dev_Chns')"
@@ -50,7 +50,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="额定电压(V)" prop="devVolt"> <el-form-item label="额定电压(V)" prop="devVolt" :label-width="100">
<el-select v-model="formContent.devVolt" clearable placeholder="请选择额定电压"> <el-select v-model="formContent.devVolt" clearable placeholder="请选择额定电压">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Volt')" v-for="item in dictStore.getDictData('Dev_Volt')"
@@ -62,7 +62,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="额定电流(A)" prop="devCurr" > <el-form-item label="额定电流(A)" prop="devCurr" :label-width="100">
<el-select v-model="formContent.devCurr" clearable placeholder="请选择额定电流"> <el-select v-model="formContent.devCurr" clearable placeholder="请选择额定电流">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Curr')" v-for="item in dictStore.getDictData('Dev_Curr')"
@@ -77,7 +77,7 @@
</el-row> </el-row>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label='生产厂商' prop='manufacturer'> <el-form-item label='生产厂商' prop='manufacturer' :label-width="100">
<el-select v-model="formContent.manufacturer" clearable placeholder="请选择生产厂商"> <el-select v-model="formContent.manufacturer" clearable placeholder="请选择生产厂商">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Manufacturers')" v-for="item in dictStore.getDictData('Dev_Manufacturers')"
@@ -89,7 +89,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="生产日期" prop="createDate"> <el-form-item label="生产日期" prop="createDate" :label-width="100">
<el-date-picker <el-date-picker
v-model="formContent.createDate" v-model="formContent.createDate"
placeholder="请选择生产日期" placeholder="请选择生产日期"
@@ -99,36 +99,36 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="出厂编号" prop="createId" placeholder="请输入出厂编号"> <el-form-item label="出厂编号" prop="createId" placeholder="请输入出厂编号" :label-width="100">
<el-input v-model="formContent.createId" /> <el-input v-model="formContent.createId" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="固件版本" prop="hardwareVersion"> <el-form-item label="固件版本" prop="hardwareVersion" :label-width="100">
<el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/> <el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="软件版本" prop="softwareVersion"> <el-form-item label="软件版本" prop="softwareVersion" :label-width="100">
<el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/> <el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='设备模式' prop='pattern'> <el-form-item label='设备模式' prop='pattern' :label-width="100">
<el-input v-model='formContent.pattern' disabled/> <el-input v-model='formContent.pattern' disabled/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="IP地址" prop="ip"> <el-form-item label="IP地址" prop="ip" :label-width="100">
<IPAddress v-model:value="formContent.ip"/> <IPAddress v-model:value="formContent.ip"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="端口号" prop="port" placeholder="请输入端口号"> <el-form-item label="端口号" prop="port" placeholder="请输入端口号" :label-width="100">
<el-input v-model="formContent.port" /> <el-input v-model="formContent.port" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -136,7 +136,7 @@
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label='是否加密' prop='encryptionFlag'> <el-form-item label='是否加密' prop='encryptionFlag' :label-width="100">
<el-select v-model="formContent.encryptionFlag" clearable placeholder="请选择是否加密" @change="handleEncryptionChange"> <el-select v-model="formContent.encryptionFlag" clearable placeholder="请选择是否加密" @change="handleEncryptionChange">
<el-option label="是" :value="1"></el-option> <el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option> <el-option label="否" :value="0"></el-option>
@@ -144,24 +144,24 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" v-if="IsPasswordShow"> <el-col :span="8" v-if="IsPasswordShow">
<el-form-item label='识别码' prop='series' clearable placeholder="请输入识别码"> <el-form-item label='识别码' prop='series' clearable placeholder="请输入识别码" :label-width="100">
<el-input v-model='formContent.series' show-password/> <el-input v-model='formContent.series' show-password/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" v-if="IsPasswordShow"> <el-col :span="8" v-if="IsPasswordShow">
<el-form-item label='密钥' prop='devKey' clearable placeholder="请输入密钥"> <el-form-item label='密钥' prop='devKey' clearable placeholder="请输入密钥" :label-width="100">
<el-input v-model='formContent.devKey' show-password/> <el-input v-model='formContent.devKey' show-password/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" v-if="DevIsShow"> <el-row :gutter="24" v-if="DevIsShow">
<el-col :span="8"> <el-col :span="8">
<el-form-item label='样品编号' prop='sampleID' clearable placeholder="请输入样品编号"> <el-form-item label='样品编号' prop='sampleID' clearable placeholder="请输入样品编号" :label-width="100">
<el-input v-model='formContent.sampleID' /> <el-input v-model='formContent.sampleID' />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='送样日期' prop='arrivedDate' > <el-form-item label='送样日期' prop='arrivedDate' :label-width="100">
<el-date-picker <el-date-picker
v-model="formContent.arrivedDate" v-model="formContent.arrivedDate"
placeholder="请选择送样日期" placeholder="请选择送样日期"
@@ -172,17 +172,17 @@
</el-row> </el-row>
<el-row :gutter="24" v-if="MonIsShow"> <el-row :gutter="24" v-if="MonIsShow">
<el-col :span="8"> <el-col :span="8">
<el-form-item label='所属地市' prop='cityName' clearable placeholder="请输入所属地市"> <el-form-item label='所属地市' prop='cityName' clearable placeholder="请输入所属地市" :label-width="100">
<el-input v-model='formContent.cityName' /> <el-input v-model='formContent.cityName' />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='所属供电公司' prop='gDName' clearable placeholder="请输入所属供电公司"> <el-form-item label='所属供电公司' prop='gDName' clearable placeholder="请输入所属供电公司" :label-width="100">
<el-input v-model='formContent.gDName' /> <el-input v-model='formContent.gDName' />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='所属电站' prop='subName' clearable placeholder="请输入所属电站"> <el-form-item label='所属电站' prop='subName' clearable placeholder="请输入所属电站" :label-width="100">
<el-input v-model='formContent.subName' /> <el-input v-model='formContent.subName' />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -256,9 +256,9 @@ import { el } from 'element-plus/es/locale'
name: '', name: '',
pattern:'模拟式', pattern:'模拟式',
devType:'', devType:'',
devChns:0, devChns:1,
devVolt:0, devVolt:57.74,
devCurr:0, devCurr:1,
manufacturer: '', manufacturer: '',
createDate: '', createDate: '',
createId: '', createId: '',
@@ -266,7 +266,7 @@ import { el } from 'element-plus/es/locale'
softwareVersion: '', softwareVersion: '',
protocol: '', protocol: '',
ip: '', ip: '',
port: 0, port: 102,
encryptionFlag: 1, encryptionFlag: 1,
reCheckNum:0, reCheckNum:0,
state: 1, state: 1,
@@ -282,9 +282,9 @@ import { el } from 'element-plus/es/locale'
name: '', name: '',
pattern:'模拟式', pattern:'模拟式',
devType:'', devType:'',
devChns:0, devChns:1,
devVolt:0, devVolt:57.74,
devCurr:0, devCurr:1,
manufacturer: '', manufacturer: '',
createDate: '', createDate: '',
createId: '', createId: '',
@@ -292,13 +292,14 @@ import { el } from 'element-plus/es/locale'
softwareVersion: '', softwareVersion: '',
protocol: '', protocol: '',
ip: '', ip: '',
port: 0, port: 102,
encryptionFlag: 1, encryptionFlag: 1,
reCheckNum:0, reCheckNum:0,
state: 1, state: 1,
} }
} }
let dialogTitle = computed(() => { let dialogTitle = computed(() => {
return titleType.value === 'add' ? '新增被检设备' : '编辑被检设备' return titleType.value === 'add' ? '新增被检设备' : '编辑被检设备'
}) })
@@ -324,10 +325,12 @@ import { el } from 'element-plus/es/locale'
ip:[{ required: true, message: 'IP地址必填', trigger: 'blur' } , ip:[{ required: true, message: 'IP地址必填', trigger: 'blur' } ,
{ pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur' }], { pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur' }],
port:[{ required: true, message: '端口号必填!', trigger: 'blur' }, port:[{ required: true, message: '端口号必填!', trigger: 'blur' },
{ pattern: /^\d+$/, message: '端口号格式错误', trigger: 'blur' }], { pattern: /^(6553[0-5]|655[0-2][0-9]|64[0-9]{3}|[1-5]?[0-9]{1,4})$/, message: '端口号范围0到65535的整数', trigger: 'blur' }],
manufacturer: [{ required: true, message: '生产厂家必选!', trigger: 'change' }], manufacturer: [{ required: true, message: '生产厂家必选!', trigger: 'change' }],
encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }], encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }],
protocol: [{ required: true, message: '通讯协议必选!', trigger: 'change' }], protocol: [{ required: true, message: '通讯协议必选!', trigger: 'change' }],
series: [],
devKey: []
}) })
// 关闭弹窗 // 关闭弹窗
@@ -407,14 +410,23 @@ import { el } from 'element-plus/es/locale'
// 根据是否加密来显示或隐藏识别码和密钥 // 根据是否加密来显示或隐藏识别码和密钥
if(value === 1){ if(value === 1){
IsPasswordShow.value = true IsPasswordShow.value = true
rules.value.series = [
{ required: true, message: '请输入识别码', trigger: 'blur' }
];
rules.value.devKey = [
{ required: true, message: '请输入密钥', trigger: 'blur' }
];
}else }else
{ {
IsPasswordShow.value = false IsPasswordShow.value = false
formContent.value.series = '' formContent.value.series = ''
formContent.value.devKey = '' formContent.value.devKey = ''
rules.value.series = [];
rules.value.devKey = [];
} }
// 如果选择"是",则显示;否则隐藏 // 如果选择"是",则显示;否则隐藏
dialogFormRef.value?.clearValidate(); // 清除验证状态
} }
// 表格配置项 // 表格配置项

View File

@@ -84,7 +84,6 @@ const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
return ( return (
<div class='flx-flex-start'> <div class='flx-flex-start'>
<TimeControl <TimeControl
default={'月'} default={'月'}
onUpdate-dates={handleDateChange} onUpdate-dates={handleDateChange}
/> />

View File

@@ -63,8 +63,6 @@
label: '状态', label: '状态',
minWidth:30, minWidth:30,
isShow:false, isShow:false,
enum: dictStore.getDictData('state'),
fieldNames: { label: 'label', value: 'code' },
render: scope => { render: scope => {
return ( return (
<el-tag type={scope.row.state === 0 ? 'success' : (scope.row.state === 1 ? 'warning' : 'danger')}> <el-tag type={scope.row.state === 0 ? 'success' : (scope.row.state === 1 ? 'warning' : 'danger')}>

View File

@@ -27,13 +27,14 @@
<script setup lang='tsx' name='dict'> <script setup lang='tsx' name='dict'>
import { CirclePlus, Delete, Download, EditPen, View } from '@element-plus/icons-vue' import { CirclePlus, Delete, Download, EditPen, View } from '@element-plus/icons-vue'
import { Dict } from '@/api/system/dictionary/interface' import { type Dict } from '@/api/system/dictionary/interface'
import { ColumnProps, ProTableInstance } from '@/components/ProTable/interface' import type { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
import DictData from '@/views/system/dictionary/dictData/index.vue' import DictData from '@/views/system/dictionary/dictData/index.vue'
import { useHandleData } from '@/hooks/useHandleData' import { useHandleData } from '@/hooks/useHandleData'
import { useViewSize } from '@/hooks/useViewSize' import { useViewSize } from '@/hooks/useViewSize'
import { useDownload } from '@/hooks/useDownload' import { useDownload } from '@/hooks/useDownload'
import { deleteDictType, getDictTypeList, exportDictType } from '@/api/system/dictionary/dictType' import { deleteDictType, getDictTypeList, exportDictType } from '@/api/system/dictionary/dictType'
import { reactive, ref } from 'vue'
const { popupBaseView, viewWidth, viewHeight } = useViewSize() const { popupBaseView, viewWidth, viewHeight } = useViewSize()