码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vue2+antd——实现权限管理——js数据格式处理(回显+数据结构渲染)


    vue2+antd——实现权限管理——js数据格式处理

    • 效果图如下:
    • 1.需求说明
    • 2.如何展开所有子项及孙子项目——在弹窗之前就获取树形结构,然后直接将数据传到弹窗中
    • 3.`template`部分代码
    • 4.`script`的`data`部分
    • 5.权限tree数据处理——将row中的权限分配到具体的value参数中
    • 6.权限的保存——`handleSubmit`

    最近在写后台管理系统,遇到一个问题是关于菜单/按钮权限的处理:

    效果图如下:

    在这里插入图片描述

    1.需求说明

    点击编辑API权限,弹窗如上图所示:
    弹窗内容分左右两部分,左侧是大类,右侧是子类及孙子类,其中所有的项目都要展开显示。

    2.如何展开所有子项及孙子项目——在弹窗之前就获取树形结构,然后直接将数据传到弹窗中

    在弹窗之前就要调用接口获取数据:

    1:`addPermission`就是弹窗的组件
    2:getCrmPermissionTree 获取权限tree的接口
    
    • 1
    • 2
    handleAPI(row){
    	let permissionList = [];
    	this.loading = true;
    	getCrmPermissionTree()
    	  .then((res) => {
    	    permissionList = res || [];
    	    this.$refs.addPermission.handleShow(row, permissionList);
    	  })
    	  .finally(() => {
    	    this.loading = false;
    	  });
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.template部分代码

    <a-modal
        title="编辑API权限"
        :visible.sync="visible"
        width="500px"
        :maskClosable="true"
        @cancel="handleClose"
        @ok="handleSubmit"
      >
        <div id="topId"></div>
        <a-tabs tab-position="left">
          <a-tab-pane
            forceRender
            v-for="(group, index) in permissionList"
            :key="index + 1"
            :tab="group.displayName"
          >
            <a-tree
              ref="permissionTree"
              v-model="group.value"
              checkable
              checkStrictly
              :defaultExpandAll="true"
              :treeData="group.permissions"
              :replaceFields="replaceFields"
              @check="onCheck($event, group)"
            />
          </a-tab-pane>
        </a-tabs>
      </a-modal>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    4.script的data部分

    data(){
    	return{
    	  visible: false,
          loadLoading: false,
          permissionList: [],
          checkedKeys: [],
          id: undefined,
          replaceFields: {
            value: 'permissionName',
            title: 'displayName',
            children: 'children',
            key: 'permissionName',
          },
          menuRoteIds: [],
    	}
    },
    methods:{
    	onCheck(obj, item) {
          item.value = obj.checked || [];
          this.$forceUpdate();
        },
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5.权限tree数据处理——将row中的权限分配到具体的value参数中

    handleShow(row, permissionList) {
      this.visible = true;
      this.id = row.id;
      this.permissionList = [...permissionList];
      this.menuRoteIds = [...row.permissionNames];
      this.permissionList.forEach((item) => {
        item.value = [];
        if (this.menuRoteIds.includes(item.id)) {
          item.value.push(item.id);
        }
        if (item.children && item.children.length > 0) {
          item = this.filterMenuList(item.children, item);
        }
      });
      this.$nextTick(() => {
      	//这一步是为了弹窗打开的时候滚动到页面顶部,在页面顶部有个`topId`的dom元素
        document.getElementById('topId').scrollIntoView(true);
      });
    },
    filterMenuList(arr, item) {
      arr.forEach((child) => {
        this.expandedKeys.push(child.id);
        if (this.menuRoteIds.includes(child.id)) {
          item.value.push(child.id);
        }
        if (child.children && child.children.length > 0) {
          child = this.filterMenuList(child.children, item);
        }
      });
      return item;
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    6.权限的保存——handleSubmit

    handleClose() {
      this.visible = false;
    },
    handleSubmit() {
      let arr = [];
      this.permissionList &&
        this.permissionList.forEach((item) => {
          arr = arr.concat(item.value);
        });
      let params = {
        permissionNames: arr || [],
      };
      this.loadLoading = true;
      putApiPermission(this.id, params)
        .then(() => {
          this.$message.success('保存成功');
          this.$emit('ok');
          this.handleClose();
        })
        .finally(() => {
          this.loadLoading = false;
        });
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    如何保存/同步多架构容器 Docker 镜像
    Zabbix钉钉机器人告警
    大数据技术基础实验九:Hive实验——部署Hive
    FFMPEG音视频开发指南(一)
    超越自注意力:用于医学图像分割的可变形大核注意力
    CREO:CREO软件之工程图【创建】以及配置(符合国家标准)的简介及其使用方法(图文教程)之详细攻略
    BL0942 内置时钟免校准计量芯片 用于智能家居领域 低成本
    Ascend C 自定义算子 Kernel Launch调用入门
    AR人体姿态识别,实现无边界的人机交互
    最全HTTP/HTTPS面试题整理(一)
  • 原文地址:https://blog.csdn.net/yehaocheng520/article/details/134423424
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号