按钮级别的新版本,多级别的组织架构
loulijun2021
2023-08-01 c59ed01f610a871f1db2869aaf08a991dddb600f
src/views/basicSettings/roleList.vue
ÎļþÃû´Ó src/views/basicSettings/rolePermission.vue ÐÞ¸Ä
@@ -81,6 +81,7 @@
            highlight-current
            :props="defaultPropsLeft"
            :default-expand-all="true"
            @node-click="treeLeftNodeClick"
          />
        </div>
@@ -120,7 +121,7 @@
                <div
                  ref="scrollCenter"
                  style="border-right: 1px solid rgba(0,0,0,0.2);width: 500px;padding-left: 10px;overflow-y: auto"
                  style="border-right: 1px solid rgba(0,0,0,0.2);width: 600px;padding-left: 10px;overflow-y: auto"
                  :style="{height:isExpandForm?tableHeight:(tableHeight+35)+'px',}"
                  @scroll="scrollCenterScroll()"
                  @mouseover="changeScrollLeftFlag('center')"
@@ -308,12 +309,12 @@
        this.$notify.error('请先建相对应的角色!')
      }
    },
    // èŽ·å–èœå•æƒé™å¯¹åº”çš„æŒ‰é’®
    async getRolePermissionSearchRoleMenuButton(rolecode) {
      const { data: res } = await RolePermissionSearchRoleMenuButton({ rolecode })
      this.allButtonData = res
    },
    // èŽ·å–èœå•æƒé™
    async getRolePermissionSearchRoleMenu(rolecode) {
      const { data: res } = await RolePermissionSearchRoleMenu({ rolecode, type: 'PC' })
@@ -326,6 +327,7 @@
      this.menuCheckedCodeArr = []
      // console.log(this.allButtonData, 213)
      result.forEach(item => {
        if (item.children && item.children.length) {
          item.children.forEach(it => {
@@ -340,12 +342,12 @@
            // æ•°æ®æƒé™å›žæ˜¾
            const dataAll = this.allButtonData.tData.filter(j => j.menucode === it.code).map(j => j.name)
            const dataChecked = this.allButtonData.tData.filter(j => j.menucode === it.code && j.flag === 'Y').name
            console.log(dataAll, dataChecked, 2)
            // console.log(dataAll, dataChecked, 2)
            it.itemData = dataAll
            it.checkedData = dataChecked
            // ç”¨ä½œèœå•勾选回显
            if (buttonChecked && buttonChecked.length > 0) {
            if (it.flag === 'Y') {
              this.menuCheckedCodeArr.push(it.code)
            }
          })
@@ -360,13 +362,15 @@
        { code: '-1', name: '全部', flag: result.every(i => i.flag === 'Y') ? 'Y' : 'N', children: result }
      ]
      this.buttonIsChecked = result.every(i => i.flag === 'Y')
      // this.buttonIsChecked = result.every(i => i.flag === 'Y')
      this.handleCheckedButtonChange('', '', true)
      this.handleCheckedDataChange('', '', true)
      // console.log(this.menuCheckedCodeArr, 2)
      this.$nextTick(() => {
        this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
      })
      this.$forceUpdate()
      // console.log(this.treeCenter[0].children)
    },
@@ -436,18 +440,19 @@
        })
      }
      console.log(this.treeCenter[0].children, 20)
      // console.log(this.treeCenter[0].children, 20)
    },
    // å•个按钮改变
    handleCheckedButtonChange(value, code) {
    handleCheckedButtonChange(value, code, flag) {
      // åˆ¤æ–­æ˜¯å¦åŒ…含在内
      if (!this.menuCheckedCodeArr.includes(code) && value.length === 1) { // å¦
        this.menuCheckedCodeArr.push(code)
      } else if (this.menuCheckedCodeArr.includes(code) && value.length === 0) { // æ˜¯
        this.menuCheckedCodeArr = this.menuCheckedCodeArr.filter(i => i !== code)
      if (!flag) {
        if (!this.menuCheckedCodeArr.includes(code) && value.length === 1) { // å¦
          this.menuCheckedCodeArr.push(code)
        } else if (this.menuCheckedCodeArr.includes(code) && value.length === 0) { // æ˜¯
          this.menuCheckedCodeArr = this.menuCheckedCodeArr.filter(i => i !== code)
        }
        this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
      }
      this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
      // è¿™é‡Œæ˜¯åˆ¤æ–­å…¨é€‰checkbox æ˜¯å¦é€‰ä¸­
      let count = 0
@@ -468,8 +473,8 @@
    // èŽ·å–æ ‘å½¢èŠ‚ç‚¹node
    getLeftTreeNode(data, Node, VueComponent) {
      console.log(data, Node, VueComponent, 2221)
      console.log(Node.expanded)
      // console.log(data, Node, VueComponent, 2221)
      // console.log(Node.expanded)
      this.treeCenter[0].children.forEach(item => {
        if (item.name === data.name) {
          item.expanded = Node.expanded
@@ -483,13 +488,25 @@
      }
      this.$forceUpdate()
    },
    // å¤„理树形勾选
    handleTreeCenterCheck(obj, { checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys }) {
      // console.log(obj, checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys)
      // console.log(obj, checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys, '加多宝')
      if (checkedKeys.length === 0) { // æ ‘形菜单全不选的情况下
        this.buttonIsChecked = false
        this.dataIsChecked = false
        this.menuCheckedCodeArr = []
      } else {
        if (checkedKeys.includes(obj.code)) { // åˆ¤æ–­æ˜¯å¦åŒ…含在内   //是
          this.menuCheckedCodeArr.push(obj.code)
        } else { // å¦
          this.menuCheckedCodeArr = this.menuCheckedCodeArr.filter(i => i !== obj.code)
        }
      }
    },
    // å¤„理树形选中值改变
    handleTreeCenterCheckChange(obj, selfChecked, selfChildrenTreeCheck) {
      // console.log(obj, selfChecked, selfChildrenTreeCheck)
      // console.log(obj, selfChecked, selfChildrenTreeCheck, '王老吉')
      if (!selfChildrenTreeCheck) {
        if (!selfChecked) {
          this.treeCenter[0].children.forEach(item => {
@@ -508,13 +525,14 @@
    },
    // å•选框按钮改变
    handleCheckedDataChange(value, code) {
      console.log(value, code)
    handleCheckedDataChange(value, code, flag) {
      // console.log(value, code)
      if (flag) {
        this.menuCheckedCodeArr.push(code)
        this.menuCheckedCodeArr = [...new Set(this.menuCheckedCodeArr)]
      this.menuCheckedCodeArr.push(code)
      this.menuCheckedCodeArr = [...new Set(this.menuCheckedCodeArr)]
      this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
        this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
      }
      // è¿™é‡Œæ˜¯åˆ¤æ–­å…¨é€‰radio æ˜¯å¦é€‰ä¸­
      let count = 0
@@ -525,14 +543,26 @@
            if (it.checkedData) {
              count++
            }
            childrenLength++
            if (it.itemData.length > 0) {
              childrenLength++
            }
          })
        }
      })
      // console.log(count, childrenLength, 9)
      this.dataIsChecked = count === childrenLength
      // console.log(JSON.parse(JSON.stringify(this.treeCenter[0].children)))
      this.$forceUpdate()
    },
    async  treeLeftNodeClick(obj, Node, VueComponent) {
      // this.menuCheckedCodeArr = []
      await this.getRolePermissionSearchRoleMenuButton(obj.code)
      await this.getRolePermissionSearchRoleMenu(obj.code)
    },
    // èŽ·å–é¡µé¢é«˜åº¦
    getHeight() {
      this.$nextTick(() => {