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-radius: 4px;
line-height: 40px;
width: 120%;
width: 100%;
height: 35px;
padding-inline-start: 0px;
padding-left: 10px;

View File

@@ -3,13 +3,12 @@
<el-form :model="formContent" ref='dialogFormRef' :rules='rules' >
<el-form-item label="上级菜单" prop="pid" :label-width="100">
<el-tree-select
v-model="value"
:data="data"
v-model="formContent.pid"
:data="functionList"
check-strictly
:render-after-expand="false"
show-checkbox
check-on-click-node
:props="defaultProps"
/>
</el-form-item>
<el-form-item label="名称" prop="name" :label-width="100">
@@ -64,79 +63,15 @@
import {addFunction,updateFunction,getFunctionListNoButton} from '@/api/function/index.ts'
import IconSelect from '@/components/SelectIcon/index.vue'
import { functionList } from '@/api/function/functionExample.ts'
import { min } from 'lodash';
import { min } from 'lodash';
import { Console } from 'console';
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 dialogFormRef = ref()
@@ -190,7 +125,9 @@ const resetFormContent = () => {
const rules : Ref<Record<string, Array<FormItemRule>>> = ref({
name :[{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 {
console.log(formContent.value)
dialogFormRef.value?.validate(async (valid: boolean) => {
console.log(valid)
if (valid) {
if (formContent.value.id) {
await updateFunction(formContent.value);
@@ -225,8 +162,11 @@ const close = () => {
}
}
const functionList = ref<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
dialogVisible.value = true
if (data.id) {

View File

@@ -56,10 +56,19 @@
prop: 'type',
label: '类型',
width: 100,
enum: dictStore.getDictData('resourceType'),
search: { el: 'select', props: { filterable: true } },
fieldNames: { label: 'label', value: 'code' },
},
render: (scope) => {
const typeMap: { [key: number]: { label: string; type: string } } = {
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',
label: '图标',
@@ -85,8 +94,6 @@
prop: 'state',
label: '权限资源状态',
minWidth: 100,
enum: dictStore.getDictData('status'),
fieldNames: { label: 'label', value: 'code' },
render: scope => {
return (
<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',
label: '状态',
minWidth: 100,
enum: dictStore.getDictData('state'),
fieldNames: { label: 'label', value: 'code' },
render: scope => {
return (
<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',
label: '告警标志',
enum: dictStore.getDictData('status'),
minWidth: 100,
fieldNames: { label: 'label', value: 'code' },
render: scope => {
return (
<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-row :gutter="24" >
<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-form-item>
</el-col>
<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-option
v-for="item in dictStore.getDictData('Dev_Type')"
@@ -23,7 +23,7 @@
</el-form-item>
</el-col>
<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-option
v-for="item in dictStore.getDictData('Event_Type')"
@@ -38,7 +38,7 @@
</el-row>
<el-row :gutter="24" >
<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-option
v-for="item in dictStore.getDictData('Dev_Chns')"
@@ -50,7 +50,7 @@
</el-form-item>
</el-col>
<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-option
v-for="item in dictStore.getDictData('Dev_Volt')"
@@ -62,7 +62,7 @@
</el-form-item>
</el-col>
<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-option
v-for="item in dictStore.getDictData('Dev_Curr')"
@@ -77,7 +77,7 @@
</el-row>
<el-row :gutter="24" >
<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-option
v-for="item in dictStore.getDictData('Dev_Manufacturers')"
@@ -89,7 +89,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="生产日期" prop="createDate">
<el-form-item label="生产日期" prop="createDate" :label-width="100">
<el-date-picker
v-model="formContent.createDate"
placeholder="请选择生产日期"
@@ -99,36 +99,36 @@
</el-form-item>
</el-col>
<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-form-item>
</el-col>
</el-row>
<el-row :gutter="24" >
<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-form-item>
</el-col>
<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-form-item>
</el-col>
<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-form-item>
</el-col>
</el-row>
<el-row :gutter="24" >
<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"/>
</el-form-item>
</el-col>
<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-form-item>
</el-col>
@@ -136,7 +136,7 @@
<el-row :gutter="24" >
<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-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
@@ -144,24 +144,24 @@
</el-form-item>
</el-col>
<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-form-item>
</el-col>
<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-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="DevIsShow">
<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-form-item>
</el-col>
<el-col :span="8">
<el-form-item label='送样日期' prop='arrivedDate' >
<el-form-item label='送样日期' prop='arrivedDate' :label-width="100">
<el-date-picker
v-model="formContent.arrivedDate"
placeholder="请选择送样日期"
@@ -172,17 +172,17 @@
</el-row>
<el-row :gutter="24" v-if="MonIsShow">
<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-form-item>
</el-col>
<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-form-item>
</el-col>
<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-form-item>
</el-col>
@@ -256,9 +256,9 @@ import { el } from 'element-plus/es/locale'
name: '',
pattern:'模拟式',
devType:'',
devChns:0,
devVolt:0,
devCurr:0,
devChns:1,
devVolt:57.74,
devCurr:1,
manufacturer: '',
createDate: '',
createId: '',
@@ -266,7 +266,7 @@ import { el } from 'element-plus/es/locale'
softwareVersion: '',
protocol: '',
ip: '',
port: 0,
port: 102,
encryptionFlag: 1,
reCheckNum:0,
state: 1,
@@ -282,9 +282,9 @@ import { el } from 'element-plus/es/locale'
name: '',
pattern:'模拟式',
devType:'',
devChns:0,
devVolt:0,
devCurr:0,
devChns:1,
devVolt:57.74,
devCurr:1,
manufacturer: '',
createDate: '',
createId: '',
@@ -292,13 +292,14 @@ import { el } from 'element-plus/es/locale'
softwareVersion: '',
protocol: '',
ip: '',
port: 0,
port: 102,
encryptionFlag: 1,
reCheckNum:0,
state: 1,
}
}
let dialogTitle = computed(() => {
return titleType.value === 'add' ? '新增被检设备' : '编辑被检设备'
})
@@ -324,11 +325,13 @@ import { el } from 'element-plus/es/locale'
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' }],
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' }],
encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }],
protocol: [{ required: true, message: '通讯协议必选!', trigger: 'change' }],
})
series: [],
devKey: []
})
// 关闭弹窗
const close = () => {
@@ -407,14 +410,23 @@ import { el } from 'element-plus/es/locale'
// 根据是否加密来显示或隐藏识别码和密钥
if(value === 1){
IsPasswordShow.value = true
rules.value.series = [
{ required: true, message: '请输入识别码', trigger: 'blur' }
];
rules.value.devKey = [
{ required: true, message: '请输入密钥', trigger: 'blur' }
];
}else
{
IsPasswordShow.value = false
formContent.value.series = ''
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 (
<div class='flx-flex-start'>
<TimeControl
default={'月'}
onUpdate-dates={handleDateChange}
/>
@@ -157,7 +156,7 @@ const downloadFile = async () => {
searchParam.searchBeginTime = startDate.value;
searchParam.searchEndTime = endDate.value;
ElMessageBox.confirm('确认导出被检设备?', '温馨提示', { type: 'warning' }).then(() =>
ElMessageBox.confirm('确认导出被检设备?', '温馨提示', { type: 'warning' }).then(() =>
useDownload(exportPqDev,'被检设备导出数据', proTable.value?.searchParam, false,'.xlsx'),
)
}

View File

@@ -63,8 +63,6 @@
label: '状态',
minWidth:30,
isShow:false,
enum: dictStore.getDictData('state'),
fieldNames: { label: 'label', value: 'code' },
render: scope => {
return (
<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'>
import { CirclePlus, Delete, Download, EditPen, View } from '@element-plus/icons-vue'
import { Dict } from '@/api/system/dictionary/interface'
import { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
import { type Dict } from '@/api/system/dictionary/interface'
import type { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
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 { reactive, ref } from 'vue'
const { popupBaseView, viewWidth, viewHeight } = useViewSize()