修改数据来源

This commit is contained in:
guanj
2026-01-08 19:51:43 +08:00
parent 4cbd2e43cb
commit e21ae50e51
20 changed files with 2639 additions and 2570 deletions

View File

@@ -41,8 +41,8 @@ const form = reactive({
id: '' id: ''
}) })
const rules = { const rules = {
name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
code: [{ required: true, message: '角色编码不能为空', trigger: 'blur' }] code: [{ required: true, message: '请输入角色编码', trigger: 'blur' }]
} }
const open = (text: string, data?: anyObj) => { const open = (text: string, data?: anyObj) => {

View File

@@ -23,7 +23,7 @@ const tableStore = new TableStore({
method: 'POST', method: 'POST',
url: '/user-boot/user/checkUserList', url: '/user-boot/user/checkUserList',
column: [ column: [
// { width: '60', type: 'checkbox' }, { width: '60', type: 'checkbox' },
{ title: '名称', field: 'name' }, { title: '名称', field: 'name' },
{ title: '登录名', field: 'loginName' }, { title: '登录名', field: 'loginName' },
{ title: '角色', field: 'roleName' }, { title: '角色', field: 'roleName' },

View File

@@ -78,7 +78,7 @@ const form: any = reactive({
}) })
const rules = { const rules = {
code: [ code: [
{ required: true, message: '标识不能为空', trigger: 'blur' }, { required: true, message: '请输入标识', trigger: 'blur' },
{ {
pattern: /^[a-zA-Z_]{1}[a-zA-Z0-9_]{2,20}$/, pattern: /^[a-zA-Z_]{1}[a-zA-Z0-9_]{2,20}$/,
message: '请输入至少3-20位英文', message: '请输入至少3-20位英文',

View File

@@ -46,8 +46,8 @@ const form = reactive({
type: 0 type: 0
}) })
const rules = { const rules = {
name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
code: [{ required: true, message: '角色编码不能为空', trigger: 'blur' }] code: [{ required: true, message: '请输入角色编码', trigger: 'blur' }]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增菜单') const title = ref('新增菜单')

View File

@@ -140,15 +140,15 @@ const form = reactive({
}) })
const formRef = ref() const formRef = ref()
const rules: Partial<Record<string, Arrayable<FormItemRule>>> = { const rules: Partial<Record<string, Arrayable<FormItemRule>>> = {
name: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
role: [{ required: true, message: '角色不能为空', trigger: 'blur' }], role: [{ required: true, message: '请输入角色', trigger: 'blur' }],
password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }], password: [{ required: true, message: '请输入用户密码', trigger: 'blur' }],
loginName: [{ required: true, message: '登录名不能为空', trigger: 'blur' }], loginName: [{ required: true, message: '请输入登录名', trigger: 'blur' }],
casualUser: [{ required: true, message: '用户类型不能为空', trigger: 'blur' }], casualUser: [{ required: true, message: '请输入用户类型', trigger: 'blur' }],
smsNotice: [{ required: true, message: '短信通知不能为空', trigger: 'blur' }], smsNotice: [{ required: true, message: '请输入短信通知', trigger: 'blur' }],
emailNotice: [{ required: true, message: '邮件通知不能为空', trigger: 'blur' }], emailNotice: [{ required: true, message: '请输入邮件通知', trigger: 'blur' }],
email: [ email: [
{ required: false, message: '邮箱不能为空', trigger: 'blur' }, { required: false, message: '请输入邮箱', trigger: 'blur' },
{ {
type: 'email', type: 'email',
message: "'请输入正确的邮箱地址", message: "'请输入正确的邮箱地址",
@@ -156,16 +156,16 @@ const rules: Partial<Record<string, Arrayable<FormItemRule>>> = {
} }
], ],
phone: [ phone: [
{ required: false, message: '手机号不能为空', trigger: 'blur' }, { required: false, message: '请输入手机号', trigger: 'blur' },
{ {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码', message: '请输入正确的手机号码',
trigger: 'blur' trigger: 'blur'
} }
], ],
limitTime: [{ required: true, message: '时间段不能为空', trigger: 'blur' }], limitTime: [{ required: true, message: '请选择时间段', trigger: 'blur' }],
limitIpStart: [ limitIpStart: [
{ required: true, message: '起始IP不能为空', trigger: 'blur' }, { required: true, message: '请输入起始IP', trigger: 'blur' },
{ {
required: true, required: true,
validator: (rule: any, value: string, callback: any) => { validator: (rule: any, value: string, callback: any) => {
@@ -183,7 +183,7 @@ const rules: Partial<Record<string, Arrayable<FormItemRule>>> = {
} }
], ],
limitIpEnd: [ limitIpEnd: [
{ required: true, message: '结束IP不能为空', trigger: 'blur' }, { required: true, message: '请输入结束IP', trigger: 'blur' },
{ {
required: true, required: true,
validator: (rule: any, value: string, callback: any) => { validator: (rule: any, value: string, callback: any) => {

View File

@@ -9,7 +9,7 @@
@change="sourceChange" @change="sourceChange"
:options="deviceTreeOptions" :options="deviceTreeOptions"
:show-all-levels="false" :show-all-levels="false"
:props="{ checkStrictly: true }" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
clearable clearable
></el-cascader> ></el-cascader>
<!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> --> <!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> -->

View File

@@ -9,7 +9,7 @@
@change="sourceChange" @change="sourceChange"
:options="deviceTreeOptions" :options="deviceTreeOptions"
:show-all-levels="false" :show-all-levels="false"
:props="{ checkStrictly: true }" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
clearable clearable
></el-cascader> ></el-cascader>
<!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> --> <!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> -->

View File

@@ -10,7 +10,7 @@
v-model.trim="tableStore.table.params.cascader" v-model.trim="tableStore.table.params.cascader"
:options="deviceTreeOptions" :options="deviceTreeOptions"
:show-all-levels="false" :show-all-levels="false"
:props="{ checkStrictly: true }" :props="{ checkStrictly: true, value: 'id', label: 'name' }"
clearable clearable
></el-cascader> ></el-cascader>
<!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> --> <!-- <el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue" placeholder="请输入设备名称" /> -->
@@ -121,23 +121,24 @@ const tableStore = new TableStore({
method: 'POST', method: 'POST',
publicHeight: 65, publicHeight: 65,
exportName: '暂态事件', exportName: '暂态事件',
column: [ { column: [
{
title: '序号', title: '序号',
width: 80, width: 80,
formatter: (row: any) => { formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} }
}, },
{ title: '设备名称', field: 'equipmentName', minWidth: 120,align: 'center' }, { title: '设备名称', field: 'equipmentName', minWidth: 120, align: 'center' },
{ title: '工程名称', field: 'engineeringName', minWidth: 120,align: 'center' }, { title: '工程名称', field: 'engineeringName', minWidth: 120, align: 'center' },
{ title: '项目名称', field: 'projectName', minWidth: 120,align: 'center' }, { title: '项目名称', field: 'projectName', minWidth: 120, align: 'center' },
{ title: '发生时刻', field: 'startTime', align: 'center', minWidth: 180,sortable: true }, { title: '发生时刻', field: 'startTime', align: 'center', minWidth: 180, sortable: true },
{ title: '监测点名称', field: 'lineName', minWidth: 120,align: 'center' }, { title: '监测点名称', field: 'lineName', minWidth: 120, align: 'center' },
{ title: '事件描述', field: 'showName', minWidth: 120,align: 'center' }, { title: '事件描述', field: 'showName', minWidth: 120, align: 'center' },
{ title: '事件发生位置', field: 'evtParamPosition',minWidth: 150, align: 'center' }, { title: '事件发生位置', field: 'evtParamPosition', minWidth: 150, align: 'center' },
{ title: '相别', field: 'evtParamPhase',minWidth: 80, align: 'center' }, { title: '相别', field: 'evtParamPhase', minWidth: 80, align: 'center' },
{ title: '持续时间(s)', field: 'evtParamTm',minWidth: 80, align: 'center',sortable: true }, { title: '持续时间(s)', field: 'evtParamTm', minWidth: 80, align: 'center', sortable: true },
{ title: '暂降(聚升)幅值(%)', minWidth: 100, field: 'evtParamVVaDepth', align: 'center',sortable: true }, { title: '暂降(聚升)幅值(%)', minWidth: 100, field: 'evtParamVVaDepth', align: 'center', sortable: true },
{ {
title: '操作', title: '操作',
@@ -234,24 +235,24 @@ const tableStore = new TableStore({
icon: 'el-icon-DataLine', icon: 'el-icon-DataLine',
render: 'basicButton', render: 'basicButton',
disabled: row => { disabled: row => {
return row.showName != '未知'; return row.showName != '未知'
} }
}, },
{ {
name: 'edit', name: 'edit',
title: '波形补召', title: '波形补召',
type: 'primary', type: 'primary',
icon: 'el-icon-Check', icon: 'el-icon-Check',
render: 'basicButton', render: 'basicButton',
disabled: row => { disabled: row => {
return row.wavePath || row.showName === '未知'; return row.wavePath || row.showName === '未知'
}, },
click: row => { click: row => {
getFileByEventId(row.id).then(res => { getFileByEventId(row.id).then(res => {
ElMessage.success(res.message) ElMessage.success(res.message)
tableStore.index() tableStore.index()
}) })
} }
} }
] ]
} }
@@ -313,7 +314,6 @@ const sourceChange = (e: any) => {
tableStore.table.params.engineeringid = e[1] || '' tableStore.table.params.engineeringid = e[1] || ''
tableStore.table.params.projectId = e[2] || '' tableStore.table.params.projectId = e[2] || ''
} }
} }
// tableStore.table.params.engineeringid = e[1] || '' // tableStore.table.params.engineeringid = e[1] || ''

View File

@@ -34,19 +34,19 @@ const deviceTree = ref([])
const activeName = ref('1') const activeName = ref('1')
const key = ref(0) const key = ref(0)
getDeviceTree().then(res => { getDeviceTree().then(res => {
res.data.forEach((item: any) => { // res.data.forEach((item: any) => {
item.value = item.id // item.value = item.id
item.label = item.name // item.label = item.name
item.children.forEach((child: any) => { // item.children.forEach((child: any) => {
child.value = child.id // child.value = child.id
child.label = child.name // child.label = child.name
child.children.forEach((grand: any) => { // child.children.forEach((grand: any) => {
grand.value = grand.id // grand.value = grand.id
grand.label = grand.name // grand.label = grand.name
delete grand.children // delete grand.children
}) // })
}) // })
}) // })
deviceTree.value = res.data deviceTree.value = res.data
key.value += 1 key.value += 1
}) })

View File

@@ -129,12 +129,12 @@ const form = reactive({
ndid: '' ndid: ''
}) })
const rules = reactive({ const rules = reactive({
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入设备名', trigger: 'blur' }],
ndid: [{ required: true, message: '网络设备id不能为空', trigger: 'blur' }], ndid: [{ required: true, message: '请输入网络设备id', trigger: 'blur' }],
devType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }], devType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
devModel: [{ required: true, message: '设备型号不能为空', trigger: 'change' }], devModel: [{ required: true, message: '请选择设备型号', trigger: 'change' }],
devAccessMethod: [{ required: true, message: '接入方式不能为空', trigger: 'blur' }], devAccessMethod: [{ required: true, message: '请输入接入方式', trigger: 'blur' }],
cntractNo: [{ required: true, message: '合同号不能为空', trigger: 'blur' }] cntractNo: [{ required: true, message: '请输入合同号', trigger: 'blur' }]
}) })
const dialogFormVisible = ref(false) const dialogFormVisible = ref(false)
const dialogTitle = ref('新增设备') const dialogTitle = ref('新增设备')

View File

@@ -153,15 +153,15 @@ const form = reactive<any>({
file: [] file: []
}) })
const rules = { const rules = {
type: [{ required: true, message: '装置类型不能为空', trigger: 'change' }], type: [{ required: true, message: '请选择装置类型', trigger: 'change' }],
devType: [{ required: true, message: '装置型号不能为空', trigger: 'change' }], devType: [{ required: true, message: '请选择装置型号', trigger: 'change' }],
versionNo: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], versionNo: [{ required: true, message: '请输入版本号', trigger: 'blur' }],
versionType: [{ required: true, message: '版本类型不能为空', trigger: 'blur' }], versionType: [{ required: true, message: '请输入版本类型', trigger: 'blur' }],
versionAgreement: [{ required: true, message: '版本协议不能为空', trigger: 'blur' }], versionAgreement: [{ required: true, message: '请输入版本协议', trigger: 'blur' }],
versionDate: [{ required: true, message: '版本日期不能为空', trigger: 'blur' }], versionDate: [{ required: true, message: '请输入版本日期', trigger: 'blur' }],
description: [{ required: true, message: '描述不能为空', trigger: 'blur' }], description: [{ required: true, message: '请输入描述', trigger: 'blur' }],
crcInfo: [{ required: true, message: 'CRC校验不能为空', trigger: 'blur' }], crcInfo: [{ required: true, message: '请输入CRC校验', trigger: 'blur' }],
file: [{ required: true, message: '升级文件不能为空', trigger: 'blur' }] file: [{ required: true, message: '请输入升级文件', trigger: 'blur' }]
} }
const typeChange = () => { const typeChange = () => {
// console.log(form.type) // console.log(form.type)

View File

@@ -233,13 +233,13 @@ const form = reactive({
sort: 0 sort: 0
}) })
const rules = reactive({ const rules = reactive({
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入设备名', trigger: 'blur' }],
ndid: [{ required: true, message: '网络设备id不能为空', trigger: 'blur' }], ndid: [{ required: true, message: '请输入网络设备id', trigger: 'blur' }],
devType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }], devType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
devModel: [{ required: true, message: '设备型号不能为空', trigger: 'change' }], devModel: [{ required: true, message: '请选择设备型号', trigger: 'change' }],
devAccessMethod: [{ required: true, message: '接入方式不能为空', trigger: 'blur' }], devAccessMethod: [{ required: true, message: '请输入接入方式', trigger: 'blur' }],
cntractNo: [{ required: true, message: '合同号不能为空', trigger: 'blur' }], cntractNo: [{ required: true, message: '请输入合同号', trigger: 'blur' }],
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }] sort: [{ required: true, message: '请输入排序', trigger: 'blur' }]
}) })
const qrcodeFlag = ref(false) const qrcodeFlag = ref(false)
const tableKey = ref(0) const tableKey = ref(0)

View File

@@ -63,12 +63,12 @@ const form = reactive<any>({
sort:100 sort:100
}) })
const rules = { const rules = {
substationName: [{ required: true, message: '所属厂站名称不能为空', trigger: 'blur' }], substationName: [{ required: true, message: '请输入所属厂站名称', trigger: 'blur' }],
name: [{ required: true, message: '敏感用户名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入敏感用户名称', trigger: 'blur' }],
loadType: [{ required: true, message: '请选择敏感负荷类型', trigger: 'blur' }], loadType: [{ required: true, message: '请输入请选择敏感负荷类型', trigger: 'blur' }],
installedCapacity: [{ required: true, message: '用户协议容量不能为空', trigger: 'blur' }], installedCapacity: [{ required: true, message: '请输入用户协议容量', trigger: 'blur' }],
userAgreementCapacity: [{ required: true, message: '装机容量不能为空', trigger: 'blur' }], userAgreementCapacity: [{ required: true, message: '请输入装机容量', trigger: 'blur' }],
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }] sort: [{ required: true, message: '请输入排序', trigger: 'blur' }]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)

View File

@@ -127,12 +127,12 @@ const form = reactive({
ndid: '' ndid: ''
}) })
const rules = reactive({ const rules = reactive({
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入设备名', trigger: 'blur' }],
ndid: [{ required: true, message: '网络设备id不能为空', trigger: 'blur' }], ndid: [{ required: true, message: '请输入网络设备id', trigger: 'blur' }],
devType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }], devType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
devModel: [{ required: true, message: '设备型号不能为空', trigger: 'change' }], devModel: [{ required: true, message: '请选择设备型号', trigger: 'change' }],
devAccessMethod: [{ required: true, message: '接入方式不能为空', trigger: 'blur' }], devAccessMethod: [{ required: true, message: '请输入接入方式', trigger: 'blur' }],
cntractNo: [{ required: true, message: '合同号不能为空', trigger: 'blur' }] cntractNo: [{ required: true, message: '请输入合同号', trigger: 'blur' }]
}) })
const dialogFormVisible = ref(false) const dialogFormVisible = ref(false)
const dialogTitle = ref('新增设备') const dialogTitle = ref('新增设备')

View File

@@ -128,12 +128,12 @@ const form = reactive({
ndid: '' ndid: ''
}) })
const rules = reactive({ const rules = reactive({
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入设备名', trigger: 'blur' }],
ndid: [{ required: true, message: '网络设备id不能为空', trigger: 'blur' }], ndid: [{ required: true, message: '请输入网络设备id', trigger: 'blur' }],
devType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }], devType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
devModel: [{ required: true, message: '设备型号不能为空', trigger: 'change' }], devModel: [{ required: true, message: '请选择设备型号', trigger: 'change' }],
devAccessMethod: [{ required: true, message: '接入方式不能为空', trigger: 'blur' }], devAccessMethod: [{ required: true, message: '请输入接入方式', trigger: 'blur' }],
cntractNo: [{ required: true, message: '合同号不能为空', trigger: 'blur' }] cntractNo: [{ required: true, message: '请输入合同号', trigger: 'blur' }]
}) })
const dialogFormVisible = ref(false) const dialogFormVisible = ref(false)
const dialogTitle = ref('新增设备') const dialogTitle = ref('新增设备')

View File

@@ -1,42 +1,64 @@
<template> <template>
<el-dialog width="600px" v-model.trim='dialogVisible' :title='title'> <el-dialog width="600px" v-model.trim="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='auto' class="form-one" :rules='rules' ref='formRef'> <el-form :inline="false" :model="form" label-width="auto" class="form-one" :rules="rules" ref="formRef">
<el-form-item label='名称:' class='top' prop='name'> <el-form-item label="名称:" class="top" prop="name">
<el-input maxlength="32" show-word-limit v-model.trim='form.name' placeholder='请输入名称'></el-input> <el-input
maxlength="32"
show-word-limit
v-model.trim="form.name"
placeholder="请输入名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label='计算值:' class='top'> <el-form-item label="计算值:" class="top">
<el-input maxlength="32" show-word-limit v-model.trim='form.value' placeholder="请输入计算值"></el-input> <el-input
maxlength="32"
show-word-limit
v-model.trim="form.value"
placeholder="请输入计算值"
></el-input>
</el-form-item> </el-form-item>
<el-form-item class='top' label='对应算法:' prop='algoDescribe' v-if='form.openDescribe == 1'> <el-form-item class="top" label="对应算法:" prop="algoDescribe" v-if="form.openDescribe == 1">
<el-input maxlength="32" show-word-limit v-model.trim='form.algoDescribe' <el-input
placeholder='请输入数字'></el-input> maxlength="32"
show-word-limit
v-model.trim="form.algoDescribe"
placeholder="请输入数字"
></el-input>
</el-form-item> </el-form-item>
<el-form-item class='top' label='编码:' prop='code'> <el-form-item class="top" label="编码:" prop="code">
<el-input maxlength="32" show-word-limit v-model.trim='form.code'></el-input> <el-input
maxlength="32"
show-word-limit
v-model.trim="form.code"
placeholder="请输入编码"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label='排序:' prop='sort' class='top'> <el-form-item label="排序:" prop="sort" class="top">
<el-input maxlength="32" show-word-limit-number v-model.trim='form.sort' :min='0' /> <el-input maxlength="32" show-word-limit-number v-model.trim="form.sort" :min="0" />
</el-form-item> </el-form-item>
<el-form-item v-if='form.openLevel === 1' label='事件等级:'> <el-form-item v-if="form.openLevel === 1" label="事件等级:">
<el-select v-model.trim='form.level' placeholder='选择开启等级'> <el-select v-model.trim="form.level" placeholder="选择开启等级">
<el-option v-for='item in EventOpenLevel' :key='item.value' :label='item.label' <el-option
:value='item.value'> v-for="item in EventOpenLevel"
</el-option> :key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='dialogVisible = false'>取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject } from 'vue' import { ref, inject } from 'vue'
import { reactive } from 'vue' import { reactive } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
@@ -72,22 +94,16 @@ const EventOpenLevel = [
] ]
const rules = { const rules = {
algoDescribe: [ algoDescribe: [
{ required: false, message: '对应算法不能为空', trigger: 'blur' }, { required: false, message: '请输入对应算法', trigger: 'blur' },
{ {
pattern: /^\d+$|^\d+[.]?\d+$/, pattern: /^\d+$|^\d+[.]?\d+$/,
message: '请您数字对应算法', message: '请您数字对应算法',
trigger: 'blur' trigger: 'blur'
} }
], ],
name: [ name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
{ required: true, message: '名称不能为空', trigger: 'blur' } code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
], sort: [{ required: true, message: '请输入排序', trigger: 'blur' }]
code: [
{ required: true, message: '编码不能为空', trigger: 'blur' }
],
sort: [
{ required: true, message: '排序不能为空', trigger: 'blur' }
]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增') const title = ref('新增')

View File

@@ -69,13 +69,14 @@ const form = reactive({
id: '' id: ''
}) })
const rules = { const rules = {
name: [{ required: true, message: '不能为空', trigger: 'blur' }], name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
sort: [{ required: true, message: '不能为空', trigger: 'blur' }], sort: [{ required: true, message: '请输入排序', trigger: 'blur' }],
code: [{ required: true, message: '不能为空', trigger: 'blur' }] code: [{ required: true, message: '请输入编码', trigger: 'blur' }]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增字典类型') const title = ref('新增字典类型')
const open = (text: string, data?: anyObj) => { const open = (text: string, data?: anyObj) => {
formRef.value?.resetFields()
title.value = text title.value = text
dialogVisible.value = true dialogVisible.value = true
if (data) { if (data) {

View File

@@ -1,19 +1,41 @@
<template> <template>
<el-dialog class="cn-operate-dialog" width="500px" v-model.trim="dialogVisible" :title="title"> <el-dialog class="cn-operate-dialog" width="500px" v-model.trim="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules"> <el-form :inline="false" :model="form" ref="formRef" label-width="120px" :rules="rules">
<el-form-item label="字典名称:" prop="name"> <el-form-item label="字典名称:" prop="name">
<el-input maxlength="32" show-word-limit v-model.trim="form.name" placeholder="请输入字典名称"></el-input> <el-input
</el-form-item> maxlength="32"
<el-form-item label="序号:" prop="sort" class="top"> show-word-limit
<el-input maxlength="32" show-word-limit v-model.trim="form.sort" placeholder="请输入序号"></el-input> v-model.trim="form.name"
placeholder="请输入字典名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="编码:" prop="code" class="top"> <el-form-item label="编码:" prop="code" class="top">
<el-input maxlength="32" show-word-limit v-model.trim="form.code" placeholder="请输入字典编码"></el-input> <el-input
maxlength="32"
show-word-limit
v-model.trim="form.code"
placeholder="请输入字典编码"
></el-input>
</el-form-item>
<el-form-item label="排序:" prop="sort" class="top">
<el-input
maxlength="32"
show-word-limit
v-model.number="form.sort"
placeholder="请输入排序"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="描述:" class="top"> <el-form-item label="描述:" class="top">
<el-input maxlength="32" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" show-word-limit v-model.trim="form.remark" <el-input
placeholder="请输入字典描述"></el-input> maxlength="32"
:autosize="{ minRows: 2, maxRows: 4 }"
type="textarea"
show-word-limit
v-model.trim="form.remark"
placeholder="请输入字典描述"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
@@ -46,14 +68,16 @@ const form = reactive({
pid: 0, pid: 0,
id: '' id: ''
}) })
const formRef = ref()
const rules = { const rules = {
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '请选择名称', trigger: 'blur' }],
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }], sort: [{ required: true, message: '请选择排序', trigger: 'blur' }],
code: [{ required: true, message: '编码不能为空', trigger: 'blur' }] code: [{ required: true, message: '请选择编码', trigger: 'blur' }]
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增菜单') const title = ref('新增菜单')
const open = (text: string, data?: anyObj) => { const open = (text: string, data?: anyObj) => {
formRef.value?.resetFields()
title.value = text title.value = text
dialogVisible.value = true dialogVisible.value = true
if (data) { if (data) {
@@ -70,14 +94,18 @@ const open = (text: string, data?: anyObj) => {
} }
} }
const submit = async () => { const submit = async () => {
if (form.id) { formRef.value.validate(async (valid: any) => {
await dicUpdate(form) if (valid) {
} else { if (form.id) {
await dicAdd(form) await dicUpdate(form)
} } else {
ElMessage.success('保存成功') await dicAdd(form)
tableStore.index() }
dialogVisible.value = false ElMessage.success('保存成功')
tableStore.index()
dialogVisible.value = false
}
})
} }
defineExpose({ open }) defineExpose({ open })

View File

@@ -1,9 +1,9 @@
<template> <template>
<el-dialog draggable v-model.trim="dialogVisible" :title="title" :before-close="Cancel"> <el-dialog draggable v-model.trim="dialogVisible" :title="title" :before-close="Cancel">
<el-form :inline="false" :model="configStore" label-width="auto"> <el-form :inline="false" :model="configStore" ref="formRef" label-width="auto" :rules="rules">
<el-divider border-style="dashed">全局</el-divider> <el-divider border-style="dashed">全局</el-divider>
<div class="layout-config-global form-two"> <div class="layout-config-global form-two">
<el-form-item label="组件主名称"> <el-form-item label="主题名称" prop="name">
<el-input v-model.trim="configStore.name" placeholder="请输入主题名称" /> <el-input v-model.trim="configStore.name" placeholder="请输入主题名称" />
</el-form-item> </el-form-item>
<el-form-item label="后台页面切换动画"> <el-form-item label="后台页面切换动画">
@@ -29,9 +29,13 @@
<el-form-item label="表格激活栏颜色"> <el-form-item label="表格激活栏颜色">
<el-color-picker v-model.trim="configStore.tableCurrent[0]" /> <el-color-picker v-model.trim="configStore.tableCurrent[0]" />
</el-form-item> </el-form-item>
<el-form-item label="组件主描述"> <el-form-item label="组件主描述" prop="remark">
<el-input v-model.trim="configStore.remark" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" <el-input
placeholder="请输入描述" /> v-model.trim="configStore.remark"
:autosize="{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入描述"
/>
</el-form-item> </el-form-item>
</div> </div>
<el-divider border-style="dashed">侧边栏</el-divider> <el-divider border-style="dashed">侧边栏</el-divider>
@@ -62,10 +66,20 @@
<el-color-picker v-model.trim="configStore.headerBarTabColor[0]" /> <el-color-picker v-model.trim="configStore.headerBarTabColor[0]" />
</el-form-item> </el-form-item>
<el-form-item label="顶栏logo"> <el-form-item label="顶栏logo">
<el-image style="height: 50px" :src="logoFile.url" :preview-src-list="[logoFile.url]" <el-image
v-if="logoFile.url" class="mr10"></el-image> style="height: 50px"
<el-upload action="" :show-file-list="false" :auto-upload="false" accept=".png,.jpg" :src="logoFile.url"
:on-change="chooseImage"> :preview-src-list="[logoFile.url]"
v-if="logoFile.url"
class="mr10"
></el-image>
<el-upload
action=""
:show-file-list="false"
:auto-upload="false"
accept=".png,.jpg"
:on-change="chooseImage"
>
<el-button type="primary">上传图片</el-button> <el-button type="primary">上传图片</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
@@ -74,8 +88,8 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="onSubmit">确定</el-button>
<el-button @click="Cancel">取消</el-button> <el-button @click="Cancel">取消</el-button>
<el-button type="primary" @click="onSubmit">确定</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@@ -89,6 +103,10 @@ const dialogVisible = ref(false)
const title = ref('') const title = ref('')
import { addTheme, updateTheme } from '@/api/system/subject/index' import { addTheme, updateTheme } from '@/api/system/subject/index'
const emit = defineEmits(['Cancels']) const emit = defineEmits(['Cancels'])
const rules = {
name: [{ required: true, message: '请输入主题名称', trigger: 'blur' }],
remark: [{ required: true, message: '请输入主题描述', trigger: 'blur' }]
}
const configStore = ref({ const configStore = ref({
// 后台主页面切换动画,可选值<slide-right|slide-left|el-fade-in-linear|el-fade-in|el-zoom-in-center|el-zoom-in-top|el-zoom-in-bottom> // 后台主页面切换动画,可选值<slide-right|slide-left|el-fade-in-linear|el-fade-in|el-zoom-in-center|el-zoom-in-top|el-zoom-in-bottom>
mainAnimation: 'el-fade-in', mainAnimation: 'el-fade-in',
@@ -124,8 +142,9 @@ const logoFile = reactive({
url: '', url: '',
raw: '' raw: ''
}) })
const formRef = ref()
const open = (e: any) => { const open = (e: any) => {
formRef.value?.resetFields()
title.value = e.text title.value = e.text
dialogVisible.value = true dialogVisible.value = true
if (e.text == '修改主题') { if (e.text == '修改主题') {
@@ -153,60 +172,65 @@ const open = (e: any) => {
} }
// 确定主题 // 确定主题
const onSubmit = () => { const onSubmit = () => {
configStore.value.faviconFile = configStore.value.logoFile formRef.value.validate(async valid => {
configStore.value.color = configStore.value.elementUiPrimary[0] if (valid) {
let form = new FormData() configStore.value.faviconFile = configStore.value.logoFile
for (let k in configStore.value) { configStore.value.color = configStore.value.elementUiPrimary[0]
if ( let form = new FormData()
k == 'logoFile' || for (let k in configStore.value) {
k == 'faviconFile' || if (
k == 'name' || k == 'logoFile' ||
k == 'color' || k == 'faviconFile' ||
k == 'remark' || k == 'name' ||
k == 'mainAnimation' || k == 'color' ||
k == 'id' k == 'remark' ||
) { k == 'mainAnimation' ||
form.append(k, configStore.value[k]) k == 'id'
} else if (k == 'logoUrl' || k == 'faviconUrl') { ) {
if (configStore.value.logoFile == null) { form.append(k, configStore.value[k])
let str = configStore.value[k].match(/base64,([^"]+)/)[1] } else if (k == 'logoUrl' || k == 'faviconUrl') {
let bin = atob(str) if (configStore.value.logoFile == null) {
let arr = new Array(bin.length) let str = configStore.value[k].match(/base64,([^"]+)/)[1]
for (let i = 0; i < bin.length; i++) { let bin = atob(str)
arr[i] = bin.charCodeAt(i) let arr = new Array(bin.length)
for (let i = 0; i < bin.length; i++) {
arr[i] = bin.charCodeAt(i)
}
let b = new Uint8Array(arr)
const blob = new Blob([b], { type: 'image/jpeg' })
form.append('faviconFile', blob)
form.append('logoFile', blob)
}
} else {
form.append(k, JSON.stringify(configStore.value[k]))
} }
let b = new Uint8Array(arr)
const blob = new Blob([b], { type: 'image/jpeg' })
form.append('faviconFile', blob)
form.append('logoFile', blob)
} }
} else { // if(){
form.append(k, JSON.stringify(configStore.value[k]))
// }
if (title.value == '新增主题') {
addTheme(form).then(res => {
ElMessage.success('新增成功')
Cancel()
})
}
if (title.value == '修改主题') {
updateTheme(form).then(res => {
ElMessage.success('修改成功')
Cancel()
})
}
} }
} })
if (title.value == '新增主题') {
addTheme(form).then(res => {
ElMessage.success('新增成功')
Cancel()
})
}
if (title.value == '修改主题') {
updateTheme(form).then(res => {
ElMessage.success('修改成功')
Cancel()
})
}
} }
// 取消 // 取消
const Cancel = () => { const Cancel = () => {
// dialogVisible.value = false // dialogVisible.value = false
emit('Cancels') emit('Cancels')
setTimeout(() => { setTimeout(() => {
router.go(0) router.go(0)
}, 500); }, 500)
} }
/** /**
* 选择图片上传 * 选择图片上传