• 硅谷(12)菜单管理


    菜单管理模块

    11.1 模块初始界面

    11.1.1 API&&type

    API:

    1. import request from '@/utils/request'
    2. import type { PermisstionResponseData, MenuParams } from './type'
    3. //枚举地址
    4. enum API {
    5. //获取全部菜单与按钮的标识数据
    6. ALLPERMISSTION_URL = '/admin/acl/permission',
    7. }
    8. //获取菜单数据
    9. export const reqAllPermisstion = () => {
    10. return request.get<any, PermisstionResponseData>(API.ALLPERMISSTION_URL)
    11. }

    TYPE:

    注意:type这里使用了嵌套

    1. //数据类型定义
    2. export interface ResponseData {
    3. code: number
    4. message: string
    5. ok: boolean
    6. }
    7. //菜单数据与按钮数据的ts类型
    8. export interface Permisstion {
    9. id?: number
    10. createTime: string
    11. updateTime: string
    12. pid: number
    13. name: string
    14. code: null
    15. toCode: null
    16. type: number
    17. status: null
    18. level: number
    19. children?: PermisstionList
    20. select: boolean
    21. }
    22. export type PermisstionList = Permisstion[]
    23. //菜单接口返回的数据类型
    24. export interface PermisstionResponseData extends ResponseData {
    25. data: PermisstionList
    26. }
    11.1.2 组件获取初始数据
    1. //存储菜单的数据
    2. let PermisstionArr = ref<PermisstionList>([])
    3. //组件挂载完毕
    4. onMounted(() => {
    5. getHasPermisstion()
    6. })
    7. //获取菜单数据的方法
    8. const getHasPermisstion = async () => {
    9. let result: PermisstionResponseData = await reqAllPermisstion()
    10. if (result.code == 200) {
    11. PermisstionArr.value = result.data
    12. }
    13. }
    11.1.3 模板展示数据
    1. <div>
    2. <el-table
    3. :data="PermisstionArr"
    4. style="width: 100%; margin-bottom: 20px"
    5. row-key="id"
    6. border
    7. >
    8. <el-table-column label="名称" prop="name"></el-table-column>
    9. <el-table-column label="权限值" prop="code"></el-table-column>
    10. <el-table-column label="修改时间" prop="updateTime"></el-table-column>
    11. <el-table-column label="操作">
    12. <!-- row:即为已有的菜单对象|按钮的对象的数据 -->
    13. <template #="{ row, $index }">
    14. <el-button
    15. type="primary"
    16. size="small"
    17. :disabled="row.level == 4 ? true : false"
    18. >
    19. {{ row.level == 3 ? '添加功能' : '添加菜单' }}
    20. </el-button>
    21. <el-button
    22. type="primary"
    23. size="small"
    24. :disabled="row.level == 1 ? true : false"
    25. >
    26. 编辑
    27. </el-button>
    28. <el-button
    29. type="primary"
    30. size="small"
    31. :disabled="row.level == 1 ? true : false"
    32. >
    33. 删除
    34. </el-button>
    35. </template>
    36. </el-table-column>
    37. </el-table>
    38. </div>

    11.2 更新与添加菜单功能

    11.2.1 API&&TYPE

    API:

    1. //给某一级菜单新增一个子菜单
    2. ADDMENU_URL = '/admin/acl/permission/save',
    3. //更新某一个已有的菜单
    4. UPDATE_URL = '/admin/acl/permission/update',
    5. //添加与更新菜单的方法
    6. export const reqAddOrUpdateMenu = (data: MenuParams) => {
    7. if (data.id) {
    8. return request.put<any, any>(API.UPDATE_URL, data)
    9. } else {
    10. return request.post<any, any>(API.ADDMENU_URL, data)
    11. }
    12. }
    11.2.2 对话框静态
    1. <!-- 对话框组件:添加或者更新已有的菜单的数据结构 -->
    2. <el-dialog
    3. v-model="dialogVisible"
    4. >
    5. <!-- 表单组件:收集新增与已有的菜单的数据 -->
    6. <el-form>
    7. <el-form-item label="名称">
    8. <el-input
    9. placeholder="请你输入菜单名称"
    10. ></el-input>
    11. </el-form-item>
    12. <el-form-item label="权限">
    13. <el-input
    14. placeholder="请你输入权限数值"
    15. ></el-input>
    16. </el-form-item>
    17. </el-form>
    18. <template #footer>
    19. <span class="dialog-footer">
    20. <el-button @click="dialogVisible = false">取消</el-button>
    21. <el-button type="primary" @click="save">确定</el-button>
    22. </span>
    23. </template>
    24. </el-dialog>
    11.2.3 收集数据

    需要的参数一共是4个,其中code、name由v-model绑定的对话框收集。其余俩个通过点击按钮传递的参数收集。

    1. //携带的参数
    2. let menuData = reactive<MenuParams>({
    3. code: '',
    4. level: 0,
    5. name: '',
    6. pid: 0,
    7. })
    1. //添加菜单按钮的回调
    2. const addPermisstion = (row: Permisstion) => {
    3. //清空数据
    4. Object.assign(menuData, {
    5. id: 0,
    6. code: '',
    7. level: 0,
    8. name: '',
    9. pid: 0,
    10. })
    11. //对话框显示出来
    12. dialogVisible.value = true
    13. //收集新增的菜单的level数值
    14. menuData.level = row.level + 1
    15. //给谁新增子菜单
    16. menuData.pid = row.id as number
    17. }
    18. //编辑已有的菜单
    19. const updatePermisstion = (row: Permisstion) => {
    20. dialogVisible.value = true
    21. //点击修改按钮:收集已有的菜单的数据进行更新
    22. Object.assign(menuData, row)
    23. }
    11.2.4 发送请求
    1. //确定按钮的回调
    2. const save = async () => {
    3. //发请求:新增子菜单|更新某一个已有的菜单的数据
    4. let result: any = await reqAddOrUpdateMenu(menuData)
    5. if (result.code == 200) {
    6. //对话框隐藏
    7. dialogVisible.value = false
    8. //提示信息
    9. ElMessage({
    10. type: 'success',
    11. message: menuData.id ? '更新成功' : '添加成功',
    12. })
    13. //再次获取全部最新的菜单的数据
    14. getHasPermisstion()
    15. }
    16. }

    11.3 删除模块

    11.3.1 API
    1. //删除已有的菜单
    2. DELETEMENU_URL = '/admin/acl/permission/remove/',
    3. //删除某一个已有的菜单
    4. export const reqRemoveMenu = (id: number) => {
    5. return request.delete<any, any>(API.DELETEMENU_URL + id)
    6. }
    11.3.2 删除点击函数
    1. <el-popconfirm
    2. :title="`你确定要删除${row.name}?`"
    3. width="260px"
    4. @confirm="removeMenu(row.id)"
    5. >
    6. <template #reference>
    7. <el-button
    8. type="primary"
    9. size="small"
    10. :disabled="row.level == 1 ? true : false"
    11. >
    12. 删除
    13. </el-button>
    14. </template>
    15. </el-popconfirm>
    11.3.3 删除的回调
    1. //删除按钮回调
    2. const removeMenu = async (id: number) => {
    3. let result = await reqRemoveMenu(id)
    4. if (result.code == 200) {
    5. ElMessage({ type: 'success', message: '删除成功' })
    6. getHasPermisstion()
    7. }
    8. }

  • 相关阅读:
    worthington酶丨worthington酶的化学性质简介
    leetcode刷题日记:141. Linked List Cycle(环形链表)
    【Java面试】List接口
    leetcode 1221. 分割平衡字符串
    【显存优化】深度学习显存优化方法
    IGP高级特性简要介绍(OSPF-上篇)
    ts重点学习138-ts.config.json笔记
    MyBatis 篇
    flex弹性盒模型与阿里图标的使用
    Effective C++ 阅读笔记 03:资源管理
  • 原文地址:https://blog.csdn.net/weixin_74428381/article/details/143406256