antd+vue:tree组件:父级节点禁止选择并不展示选择框——基础积累

news2024/9/21 12:39:22

antd+vue:tree组件:父级节点禁止选择并不展示选择框——基础积累

  • 1.判断哪些是父节点,给父节点添加`disabled`属性——this.permissionList是数据源
  • 2.通过css样式来处理`disabled`的父节点
  • 3.完整代码如下:

最近在写后台管理系统的时候,遇到一个需求:就是权限管理,一般权限管理根据功能分类,是会分不同级别的。

效果图如下:

在这里插入图片描述
今天后端提了一个需求,如下:就是无论是哪一层的父级节点,都不展示选择框,仅仅当作一个折叠项目展示。

原话:这一层权限能改成不需要勾选么?就当个分组用
在这里插入图片描述
最终的效果图如下:
在这里插入图片描述
解决思路:

1.判断哪些是父节点,给父节点添加disabled属性——this.permissionList是数据源

通过递归的方法来判断是否是父节点。

filterMenuList(arr, item) {
  arr.forEach((child) => {
    if (child.children && child.children.length > 0) {
      child.disabled = true;
      child = this.filterMenuList(child.children, item);
    }
  });
  return item;
},

使用递归方法:

this.permissionList.forEach((item) => {
  if (item.permissions && item.permissions.length > 0) {
    item = this.filterMenuList(item.permissions, item);
  }
});

通过上面的方法,可以给父节点添加disabled为true的属性了。
在这里插入图片描述

2.通过css样式来处理disabled的父节点

/deep/li.ant-tree-treenode-disabled
  > span.ant-tree-checkbox.ant-tree-checkbox-disabled {
  display: none !important;
}
/deep/
  .ant-tree
  li.ant-tree-treenode-disabled
  > .ant-tree-node-content-wrapper
  > span {
  color: rgba(0, 0, 0, 0.65) !important;
}

3.完整代码如下:

<template>
  <a-modal
    title="编辑API权限"
    :visible.sync="visible"
    :width="800"
    :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-tree>
      </a-tab-pane>
    </a-tabs>
  </a-modal>
</template>
<script>
import { putApiPermission } from '@/services/menu';
export default {
  name: 'addPermissionList',
  components: {},
  data() {
    return {
      visible: false,
      loadLoading: false,
      permissionList: [],
      id: undefined,
      replaceFields: {
        value: 'permissionName',
        title: 'displayName',
        children: 'children',
        key: 'permissionName',
      },
      menuRoteIds: [],
    };
  },
  methods: {
    onCheck(obj, item) {
      item.value = obj.checked || [];
      this.$forceUpdate();
    },
    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.groupName)) {
          item.value.push(item.groupName);
        }
        if (item.permissions && item.permissions.length > 0) {
          item = this.filterMenuList(item.permissions, item);
        }
      });
      this.$nextTick(() => {
        document.getElementById('topId').scrollIntoView(true);
      });
    },
    filterMenuList(arr, item) {
      arr.forEach((child) => {
        if (this.menuRoteIds.includes(child.permissionName)) {
          item.value.push(child.permissionName);
        }
        if (child.children && child.children.length > 0) {
          child.disabled = true;
          child = this.filterMenuList(child.children, item);
        }
      });
      return item;
    },
    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;
        });
    },
  },
};
</script>
<style scoped>
/deep/.ant-modal-body {
  height: 500px;
  overflow-y: auto;
}
/deep/li.ant-tree-treenode-disabled
  > span.ant-tree-checkbox.ant-tree-checkbox-disabled {
  display: none !important;
}

/deep/
  .ant-tree
  li.ant-tree-treenode-disabled
  > .ant-tree-node-content-wrapper
  > span {
  color: rgba(0, 0, 0, 0.65) !important;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux】图形界面Debian的root用户登陆

图形界面Debian默认不允许以root用户登录。这是出于安全考虑&#xff0c;以防止用户使用root权限执行可能损害系统的操作。 如果需要使用root用户&#xff0c;可以通过以下步骤进行登录&#xff1a; 打开终端&#xff0c;使用su命令切换到root用户。修改/etc/gdm3/daemon.con…

2023年中国法拍房用户画像和数据分析

法拍房主要平台 法拍房主要平台有3家&#xff0c;分别是阿里、京东和北交互联平台。目前官方认定纳入网络司法拍卖的平台共有7家&#xff0c;其中阿里资产司法拍卖平台的挂拍量最大。 阿里法拍房 阿里法拍房数据显示2017年&#xff0c;全国法拍房9000套&#xff1b;2018年&a…

CentOS 7系统加固详细方案SSH FTP MYSQL加固

一、删除后门账户 修改强口令 1、修改改密码长度需要编译login.defs文件 vi /etc/login.defs PASS_MIN_LEN 82、注释掉不需要的用户和用户组 或者 检查是否存在除root之外UID为0的用户 使用如下代码&#xff0c;对passwd文件进行检索&#xff1a; awk -F : ($30){print $1) …

基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)

前言 我们知道echarts是一个非常强大的绘图库&#xff0c;基于这个库&#xff0c;我们可以绘制出精美的图表。对于一张图来说&#xff0c;其实比较重要的就是配置项&#xff0c;填入不同的配置内容就可以呈现出不同的效果。 当然配置项中除了样式之外&#xff0c;最重要的就是…

Mr. Cappuccino的第66杯咖啡——解决MacOS中终端下的中文乱码问题

解决MacOS中终端下的中文乱码问题 中文乱码问题解决方法 中文乱码问题 解决方法 查看Mac使用的是哪个shell echo $SHELL我这里使用的是zsh&#xff0c;将配置添加到.zshrc配置文件中 vi ~/.zshrc 输入i进入编辑模式 esc退出编辑模式 :wq# UTF-8 export LANGen_US.UTF-8加载配…

k8s-1.23版本安装

一、主机初始化 1、修改主机名 hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2 hostnamectl set-hostname node32、主机名解析 echo 192.168.1.200 master >> /etc/hosts echo 192.168.1.201 node1 >>…

CSS 基础

文章目录 CSS 常见的属性CSS 常见样式行内样式内嵌样式导入样式 CSS 选择器标签选择器id选择器类选择器全局选择器属性选择器组合选择器 CSS 常见应用表格列表导航栏下拉菜单提示工具图片廊 CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用…

《工程数值计算Python教程》笔记

文章目录 [toc]第一章&#xff1a;绪论 1.1 1.1 1.1|数值计算在工程科学中的重要性 1.2 1.2 1.2|数值计算方法 1.3 1.3 1.3|程序设计盒图计算方法的选取减少运算次数避免相近的数相减 1.4 1.4 1.4|误差的来源、表示及传递误差的来源和分类模型误差观测误差截断误差舍入误差 误差…

【 某景点舆情分析:Python、Echarts、Flask、文本处理技术的应用】

某景点舆情分析&#xff1a;Python、Echarts、Flask、文本处理技术的应用 前言技术栈数据获取与准备景点数据统计分析评论数据处理与分析词频统计分词与文本处理情感分析 数据可视化Web应用搭建结语 前言 随着旅游行业的蓬勃发展&#xff0c;越来越多的人通过网络平台获取关于…

vue3 setup语法糖写法基本教程

前言 官网地址&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)下面只讲Vue3与Vue2有差异的地方&#xff0c;一些相同的地方我会忽略或者一笔带过与Vue3一同出来的还有Vite&#xff0c;但是现在不使用它&#xff0c;等以后会有单独的教程使用。目前仍旧使用v…

opencv 十六 python下各种连通域处理方法(按面积阈值筛选连通域、按面积排序筛选连通域、连通域分割等方法)

本博文基于python-opencv实现了按照面积阈值筛选连通域、按照面积排序筛选topK连通域、 连通域细化(连通域骨架提取)、连通域分割(基于分水岭算法使连通域在细小处断开)、按照面积排序赛选topK轮廓等常见的连通域处理代码。并将代码封装为shapeUtils类,在自己的python代码…

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM)&#xff0c;这是一组经过预训练和微调的生成文本模型&#xff0c;参…

AWS向量数据库Amazon OpenSearch Service使用测评

前言 在大模型盛行的当今&#xff0c;选择适宜的数据库显得尤为重要。因为你需要面对海量训练数据&#xff0c;快速的检索至关紧要&#xff0c;以及对于存储的要求也是至关重要的。对于海量的数据查询和存储是需要巨大的算力支持。向量数据库常用在一些图像文本或者视频的生成…

了解 Flutter 3.16 功能更新

作者 / Kevin Chisholm 我们在季度 Flutter 稳定版发布会上带来了 Flutter 3.16&#xff0c;此版本包含诸多更新: Material 3 成为新的默认主题、为 Android 带来 Impeller 的预览版、允许添加适用于 DevTools 的扩展程序等等&#xff0c;以及同步推出 Flutter 休闲游戏工具包重…

php查询数据库,并通过表格展示

第一步&#xff1a;创建数据库 创建一个数据库php-crud 第二步&#xff1a;创建数据库表 在数据库php-crud下创建一个歌曲表song /*Navicat Premium Data TransferSource Server : MariaDBSource Server Type : MariaDBSource Server Version : 100605 (10.6.5-M…

PrimDiffusion:3D 人类生成的体积基元扩散模型NeurIPS 2023

NeurIPS2023 &#xff0c;这是一种用于 3D 人体生成的体积基元扩散模型&#xff0c;可通过离体拓扑实现明确的姿势、视图和形状控制。 PrimDiffusion 对一组紧凑地代表 3D 人体的基元执行扩散和去噪过程。这种生成建模可以实现明确的姿势、视图和形状控制&#xff0c;并能够在…

linux 开机启动流程

1.打开电源 2.BIOS 有时间和启动方式 3.启动Systemd 其pid为1 4.挂载引导分区 /boot 5.启动各种服务 如rc.local

Ps:形状工具 - 描边选项

在形状工具的工具选项栏或“属性”面板中&#xff0c;单击“设置形状描边类型” Set shape stroke type菜单图标可打开“描边选项” Stroke Options面板。 描边预设 Stroke Type 默认列出了实线、虚线和点线三种类型的描边&#xff0c;单击可应用。 自己创建并存储的描边类型&a…

蓝桥杯专题-真题版含答案-【国庆星期日】【三色棋】【蒙地卡罗法求 PI】【格雷码(Gray Code)】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

selenium-grid4.3.0两种模式记录

selenium-grid4.3.0两种模式记录 本文运行&#xff0c;需要提前配置好Java11以及安装好Chrom、Firefox、Safari其中一个浏览器&#xff0c;如果是Chrom、Firefox需要下载对应版本的驱动&#xff0c;并给 webdriver 配置环境变量&#xff0c;Safari浏览器Mac系统会自带&#xf…