修改菜单

This commit is contained in:
guanj
2025-12-17 17:41:35 +08:00
parent 67e2fa57d0
commit 7e4db9d4cd
3 changed files with 117 additions and 112 deletions

View File

@@ -1,107 +1,108 @@
<template> <template>
<el-dialog class="cn-operate-dialog" width="700px" v-model.trim="dialogVisible" :title="title"> <el-dialog class="cn-operate-dialog" width="700px" v-model.trim="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="auto" class="form-one"> <el-form :inline="false" :model="form" label-width="auto" class="form-one">
<el-form-item label="上级菜单"> <el-form-item label="上级菜单">
<el-cascader v-model.trim="form.pid" :options="tableStore.table.data" :props="cascaderProps" <el-cascader v-model.trim="form.pid" :options="tableStore.table.data" :props="cascaderProps" clearable
style="width: 100%" /> style="width: 100%" />
</el-form-item> </el-form-item>
<el-form-item label="菜单名称"> <el-form-item label="菜单名称">
<el-input maxlength="32" show-word-limit v-model.trim="form.name" placeholder="请输入菜单名称" /> <el-input maxlength="32" show-word-limit v-model.trim="form.name" placeholder="请输入菜单名称" />
</el-form-item> </el-form-item>
<el-form-item label="图标"> <el-form-item label="图标">
<IconSelector v-model.trim="form.icon" placeholder="请选择图标" /> <IconSelector v-model.trim="form.icon" placeholder="请选择图标" />
</el-form-item> </el-form-item>
<el-form-item label="菜单路由"> <el-form-item label="菜单路由">
<el-input v-model.trim="form.path" placeholder="请输入菜单名称" /> <el-input v-model.trim="form.path" placeholder="请输入菜单名称" />
</el-form-item> </el-form-item>
<el-form-item label="组件路径"> <el-form-item label="组件路径">
<el-input v-model.trim="form.routeName" placeholder="请输入组件路径,如/src/views/dashboard/index.vue" /> <el-input v-model.trim="form.routeName" placeholder="请输入组件路径,如/src/views/dashboard/index.vue" />
</el-form-item> </el-form-item>
<el-form-item label="排序"> <el-form-item label="排序">
<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 label="菜单描述"> <el-form-item label="菜单描述">
<el-input maxlength="300" show-word-limit v-model.trim="form.remark" :rows="2" type="textarea" <el-input maxlength="300" show-word-limit v-model.trim="form.remark" :rows="2" type="textarea"
placeholder="请输入描述" /> placeholder="请输入描述" />
</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'
import IconSelector from '@/components/baInput/components/iconSelector.vue' import IconSelector from '@/components/baInput/components/iconSelector.vue'
import { updateMenu, addMenu } from '@/api/systerm' import { updateMenu, addMenu } from '@/api/systerm'
defineOptions({ defineOptions({
name: 'auth/menu/popupMenu' name: 'auth/menu/popupMenu'
}) })
const emits = defineEmits<{ const emits = defineEmits<{
(e: 'init'): void (e: 'init'): void
}>() }>()
const tableStore = inject('tableStore') as TableStore const tableStore = inject('tableStore') as TableStore
const cascaderProps = { const cascaderProps = {
label: 'title', label: 'title',
value: 'id', value: 'id',
checkStrictly: true, checkStrictly: true,
emitPath: false emitPath: false
} }
const form: any = reactive({ const form: any = reactive({
code: '', code: '',
icon: '', icon: '',
id: '', id: '',
name: '', name: '',
path: '', path: '',
pid: '0', pid: '0',
remark: '', remark: '',
routeName: '', routeName: '',
sort: 100, sort: 100,
type: 0 type: 0
}) })
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) => {
title.value = text title.value = text
// 重置表单 // 重置表单
for (let key in form) { for (let key in form) {
form[key] = '' form[key] = ''
} }
form.pid = data.pid || '0' form.pid = data.pid || '0'
form.sort = 100 form.sort = 100
form.type = 0 form.type = 0
if (data.id) { if (data.id) {
for (let key in form) { for (let key in form) {
form[key] = data[key] ? data[key] : data[key] === 0 ? 0 : '' form[key] = data[key] ? data[key] : data[key] === 0 ? 0 : ''
} }
form.path = data.routePath || '' form.path = data.routePath || ''
form.name = data.title || '' form.name = data.title || ''
} }
dialogVisible.value = true dialogVisible.value = true
} }
const submit = async () => { const submit = async () => {
if (form.id) { if (form.id) {
await updateMenu(form) form.pid = form.pid||'0'
} else { await updateMenu(form)
form.code = 'menu' } else {
let obj = JSON.parse(JSON.stringify(form)) form.code = 'menu'
delete obj.id let obj = JSON.parse(JSON.stringify(form))
await addMenu(obj) delete obj.id
} await addMenu(obj)
emits('init') }
dialogVisible.value = false emits('init')
} dialogVisible.value = false
}
defineExpose({ open })
</script> defineExpose({ open })
</script>

View File

@@ -108,6 +108,7 @@
id="id200" id="id200"
class="form-item" class="form-item"
label="省:" label="省:"
prop="engineeringParam.province"
v-if="nodeLevel > 0 || pageStatus == 2" v-if="nodeLevel > 0 || pageStatus == 2"
:rules="{ required: true, message: '请选择省', trigger: 'change' }" :rules="{ required: true, message: '请选择省', trigger: 'change' }"
> >
@@ -133,6 +134,7 @@
id="id200" id="id200"
class="form-item" class="form-item"
label="市:" label="市:"
prop="engineeringParam.city"
v-if="nodeLevel > 0 || pageStatus == 2" v-if="nodeLevel > 0 || pageStatus == 2"
:rules="{ required: true, message: '请选择市', trigger: 'change' }" :rules="{ required: true, message: '请选择市', trigger: 'change' }"
> >
@@ -156,8 +158,9 @@
id="id300" id="id300"
class="form-item" class="form-item"
label="工程名称:" label="工程名称:"
v-if="nodeLevel > 0 || pageStatus == 2" v-if="nodeLevel > 0 || pageStatus == 2"
:prop="'name'" prop="engineeringParam.name"
:rules="{ required: true, message: '请输入工程名称', trigger: 'blur' }" :rules="{ required: true, message: '请输入工程名称', trigger: 'blur' }"
> >
<el-input <el-input
@@ -172,6 +175,7 @@
id="id300" id="id300"
class="form-item" class="form-item"
label="描述:" label="描述:"
prop="engineeringParam.description"
v-if="nodeLevel > 0 || pageStatus == 2" v-if="nodeLevel > 0 || pageStatus == 2"
> >
<el-input <el-input

View File

@@ -979,10 +979,10 @@ const getRealDataMqttMsg = async () => {
}) })
}, 30000) }, 30000)
mqttRef.value.on('message', (topic: any, message: any) => { mqttRef.value.on('message', (topic: any, message: any) => {
// console.log( console.log(
// '实时数据&实时趋势---mqtt接收到消息', '实时数据&实时趋势---mqtt接收到消息',
// JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))) JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
// ) )
let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))) let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
if (lineId.value != obj.lineId || adminInfo.userIndex != obj.userId) return if (lineId.value != obj.lineId || adminInfo.userIndex != obj.userId) return