menu change

This commit is contained in:
李远 2026-03-06 18:21:14 +08:00
parent 5e7344500a
commit 2bf41d8fb4
1 changed files with 55 additions and 17 deletions

View File

@ -50,37 +50,35 @@
</div>
</div>
<el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '新增菜单' : '编辑菜单'" width="600px" destroy-on-close>
<el-form label-width="100px">
<el-form-item label="菜单名称">
<el-form ref="menuFormRef" :model="menuForm" :rules="menuFormRules">
<el-form-item label="菜单名称" prop="name">
<el-input v-model="menuForm.name" placeholder="请输入菜单名称" />
</el-form-item>
<el-form-item label="父级菜单">
<el-form-item label="父级菜单" prop="parentId">
<el-select v-model="menuForm.parentId" placeholder="请选择父级菜单" style="width:100%">
<el-option label="一级菜单" value="0" />
<el-option v-for="item in menuTree" :key="item.id" :label="item.name" :value="item.id + ''" />
</el-select>
</el-form-item>
<el-form-item label="路由路径">
<el-form-item label="路由路径" prop="path">
<el-input v-model="menuForm.path" placeholder="例如:/system/menuList" />
</el-form-item>
<el-form-item label="后端路由">
<el-form-item label="后端路由" prop="api">
<el-input v-model="menuForm.api" placeholder="例如:/api/system/menu/list可选" />
</el-form-item>
<el-form-item label="图标名称">
<el-form-item label="图标名称" prop="icon">
<el-input v-model="menuForm.icon" placeholder="例如Tools、List" />
<div style="margin-top:8px;font-size:12px;color:#909399;">
支持的图标ToolsListHomeFilledUserFilledPlatformBellFilledGoodsFilledWarningFilled
</div>
</el-form-item>
<el-form-item label="排序">
<el-form-item label="排序" prop="sort">
<el-input-number v-model="menuForm.sort" :min="0" placeholder="数字越小越靠前默认1" />
</el-form-item>
<el-form-item label="菜单类型">
<el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="menuForm.type">
<el-radio :value="1">菜单显示在侧边栏</el-radio>
<el-radio :value="2">按钮权限控制</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
@ -90,6 +88,7 @@
</template>
<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import { Tools, List, HomeFilled, UserFilled, Platform, BellFilled, GoodsFilled, WarningFilled, Plus } from '@element-plus/icons-vue'
import { getMenuApi, addMenuApi, deleteMenuApi, editMenuApi } from '@/api/modules/menu'
@ -98,9 +97,48 @@ import { getMenuApi, addMenuApi, deleteMenuApi, editMenuApi } from '@/api/module
const menuTree = ref<any[]>([])
//
const menuFormRef = ref<FormInstance>()
//
const menuFormRules = reactive<FormRules>({
// 1. +
name: [
{ required: true, message: '请输入菜单名称', trigger: 'blur' },
{ min: 2, max: 20, message: '菜单名称长度在 2 到 20 个字符之间', trigger: 'blur' }
],
// 2. 0
parentId: [{ required: true, message: '请选择父级菜单', trigger: 'change' }
],
// 3. + ///线/
path: [
{ required: true, message: '请输入路由路径', trigger: 'blur' },
{ pattern: /^\/[a-zA-Z0-9_\/]+$/, message: '路由路径必须以/开头,仅包含字母、数字、下划线和斜杠', trigger: 'blur' }
],
// 4.
api: [
{ required: true, pattern: /(^$)|(^\/[a-zA-Z0-9_\/]+$)/, message: '后端路由若填写,必须以/开头,仅包含字母、数字、下划线和斜杠', trigger: 'blur' }
],
// 5.
icon: [
{
required: true,
pattern: /(^$)|(^Tools$|^List$|^HomeFilled$|^UserFilled$|^Platform$|^BellFilled$|^GoodsFilled$|^WarningFilled$)/
, message: '一级菜单有图标二级菜单没有', trigger: 'blur'
}
],
// 6. + + 0
sort: [
{ required: true, message: '请输入排序值', trigger: 'blur' },
{ type: 'number', min: 0, message: '排序值必须是大于等于0的数字', trigger: 'blur' }
],
// 7. 1
type: [
{ required: true, message: '请选择菜单类型', trigger: 'change' },
{ type: 'number', enum: [1, 2], message: '菜单类型只能是1菜单或2按钮', trigger: 'change' }
]
})
const menuForm = ref({
name: '', //
parentId: 0, //
parentId: '0', //
path: '', //
api: '', //
icon: '', //
@ -151,12 +189,12 @@ const filterEnabledMenus = (menuList: any[]) => {
//
const handleAddMenu = () => {
//
//
menuForm.value = {
name: '',
parentId: '',
parentId: '0',
path: '',
api: '',
api: '',
icon: '',
sort: 1,
type: 1
@ -183,8 +221,8 @@ const handleEditMenu = (row: any) => {
// /
const handleSubmitMenu = async () => {
//
try {
await menuFormRef.value?.validate()
if (dialogType.value === 'add') {
await addMenuApi({
...menuForm.value,
@ -200,7 +238,7 @@ const handleSubmitMenu = async () => {
}
dialogVisible.value = false
} catch (err) {
ElMessage.error('操作失败')
console.log('提交菜单失败', err)
}
}