Vue.js基于iView树形控件(tree)和多选框组(CheckboxGroup)实现的动态权限功能分配菜单树的render渲染效果(二)

先上效果图:

1.checkbox 勾选框对齐的方式, 可以采用修改组件的css样式来改,我这边设置的是左对齐的方式。

>>>.ivu-checkbox-group{
  position: fixed;
  left: 400px;
}

 2.判断权限,上级给下级分配权限,才可以勾选操作。很明显这个用也是 diasbled:true  的属性控制的。

在数组里面塞进一个变量来控制:disabled: true,禁止使用, false 可使用

                  permissions: [
                    { value: "p1_2_2_view", text: "浏览", disabled: true}
                  ],

全部代码如下:

<template>
  <div>
    <Card>
      <div>
        已选中的权限:{{selectedPermissions}}
      </div>
      <Tree :data="data5" :render="renderContent" class="permission-tree-box"></Tree>
    </Card>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      selectedPermissions: ["p1_view", "p1_1_view"],
      data5: [
        {
          title: "后台管理",
          expand: true,
          disableCheckbox: true,
          permissions: [
            { value: "p1_view", text: "浏览", disabled: false },
          ],
          children: [
            {
              title: "管理员",
              expand: true,
              permissions: [
                { value: "p1_1_view", text: "浏览", disabled: false},
              ],
              children: [
                {
                  title: "用户列表",
                  expand: true,
                  permissions: [
                    { value: "p1_1_1_view", text: "浏览", disabled: true},
                    { value: "p1_1_1_create", text: "创建", disabled: true },
                    { value: "p1_1_1_update", text: "更新", disabled: true },
                    { value: "p1_1_1_remove", text: "删除", disabled: true },
                    { value: "p1_1__export", text: "导出", disabled: true }
                  ],
                },
                {
                  title: "角色列表",
                  expand: true,
                  permissions: [
                    { value: "p1_1_2_view", text: "浏览", disabled: true}
                  ],
                }
              ]
            },
            {
              title: "操作员",
              expand: true,
              permissions: [
                { value: "p1_2_view", text: "浏览", disabled: true}
              ],
              children: [
                {
                  title: "操作员一",
                  expand: true,
                  permissions: [
                    { value: "p1_2_1_view", text: "浏览", disabled: true}
                  ],
                },
                {
                  title: "操作员二",
                  expand: true,
                  permissions: [
                    { value: "p1_2_2_view", text: "浏览", disabled: true}
                  ],
                }
              ]
            }
          ]
        }
      ],
      buttonProps: {
        type: "default",
        size: "small"
      }
    };
  },
  methods: {
    renderContent(h, { root, node, data }) {
      return h(
        "span",
        {
          style: {
            display: "inline-block",
            width: "100%"
          },
          class: "permission-tree-node"
        },
        [
          h("span", [
            h("Icon", {
              props: {
                type: "ios-paper-outline"
              },
              style: {
                marginRight: "8px"
              }
            }),
            h("span", data.title)
          ]),
          h(
            "span",
            {
              style: {
                display: "inline-block",
                float: "right",
                marginRight: "32px"
              }
            },
            [
              h(
                "CheckboxGroup",
                {
                  props: {
                    value: this.selectedPermissions
                  },
                  on: {
                    "on-change": event => {
                      this.selectedPermissions = event;
                    }
                  }
                },
                (data.permissions || []).map(obj => {
                  return h(
                    "Checkbox",
                    {
                      props: {
                        label: obj.value,
                        disabled: obj.disabled
                      } 
                    },
                    obj.text
                  );
                })
              )
            ]
          )
        ]
      );
    },
    append(data) {
      const children = data.children || [];
      children.push({
        title: "appended node",
        expand: true
      });
      this.$set(data, "children", children);
    },
    remove(root, node, data) {
      const parentKey = root.find(el => el === node).parent;
      const parent = root.find(el => el.nodeKey === parentKey).node;
      const index = parent.children.indexOf(data);
      parent.children.splice(index, 1);
    }
  },
  mounted() {}
};
</script>
<style scoped>
.permission-tree-box ul.ivu-tree-children > li {
  margin: 0;
}
.permission-tree-node {
  padding: 10px 5px 10px 0;
  border-bottom: 1px solid #f6f6f6;
}
.permission-tree-node:hover {
  background-color: #f7f7f7;
}
>>>.ivu-checkbox-group{
  position: fixed;
  left: 400px;
}
</style>

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue可以通过使用件以及v-model指令来实现带复选框的动态树形菜单权限管理。下面给出一个简单的示例: 首先,需要创建一个Vue件AcheckboxTreeMenu,该件会渲染动态生成的树形菜单: ```html <template> <div> <ul> <li v-for="node in treeData" :key="node.id"> <a-checkbox v-model="node.checked" @change="handleNodeCheck(node)"> {{ node.name }} </a-checkbox> <AcheckboxTreeMenu :treeData="node.children"></AcheckboxTreeMenu> </li> </ul> </div> </template> <script> export default { name: "AcheckboxTreeMenu", props: { treeData: { type: Array, required: true, default: [] } }, methods: { handleNodeCheck(node) { // 处理节点被选中的逻辑 // 可根据实际需求进行权限管理的操作,例如将选中的节点信息存入数据库等 } } }; </script> ``` 然后在父件中引用AcheckboxTreeMenu件,并传入相应的树形菜单数据: ```html <template> <div> <AcheckboxTreeMenu :treeData="menuData"></AcheckboxTreeMenu> </div> </template> <script> import AcheckboxTreeMenu from "@/components/AcheckboxTreeMenu"; export default { name: "App", components: { AcheckboxTreeMenu }, data() { return { menuData: [ { id: 1, name: "节点1", checked: false, children: [ { id: 2, name: "子节点1", checked: false }, { id: 3, name: "子节点2", checked: false } ] }, { id: 4, name: "节点2", checked: false } ] }; } }; </script> ``` 通过以上代码,就可以实现带有复选框的动态树形菜单,并在选中复选框时触发相应的权限管理操作。可以根据实际需求,在handleNodeCheck方法中添加逻辑来处理节点被选中的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT博客技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值