田源
2024-09-29 7d05c69630d066c0992368423f90e440e3638f91
Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue
@@ -60,7 +60,8 @@
          <el-checkbox
            v-if="item.type === 'checkbox'"
            v-model="row[item.prop]"
            :disabled="row.authButton.allDisabled ? true : row.authButton[item.code]">
            :disabled="row.authButton.allDisabled ? true : row.authButton[item.code]"
            @change="checkBoxToChangeTheEvent(row[item.prop],item.code,row,item.prop)">
          </el-checkbox>
        </template>
      </el-table-column>
@@ -84,6 +85,7 @@
export default {
  name: "dataAuthDialog.vue",
  props: {
    // 当前点击节点的顶层节点
    classifyData: {
      type: "Object",
      default: "",
@@ -93,15 +95,16 @@
      type: "Boolean",
      default: false,
    },
    TreeNode:{
      type:Object
    // 当前点击的节点
    TreeNode: {
      type: Object
    }
  },
  data() {
    return {
      // 对话框显示控制
      isShowDialog: this.visible,
      isLoading: false,
      isLoading: true,
      tableHeight: 'calc(100vh - 550px)',
      classifyAuthData: [],
      //列头
@@ -125,6 +128,9 @@
        this.loadAuthPage();
      }
    },
    classifyAuthData(newval) {
      this.addIndex = newval.length <= 0 ? 0 : newval.length - 1;
    }
  },
  computed: {},
  mounted() {
@@ -132,6 +138,22 @@
  created() {
  },
  methods: {
    checkBoxToChangeTheEvent(check, code, row, id) {
      if (code === "data_view") {
        row.checkTheStatus = check;
      } else if (!row.checkTheStatus) {
        this.$message.warning('请先勾选查看按钮!');
        // 在条件不满足时将多选框状态设置为false
        row[id] = false;
      }
      if (!row.checkTheStatus) {
        this.classifyAuthButton.forEach(key => {
          // 查看为false时将所有多选框状态设置为false
          row[key.id] = false;
        });
      }
    },
    // 关闭对话框
    closeDialog() {
      this.$emit('update:visible', false);
@@ -142,38 +164,40 @@
        return;
      }
      //filteredItems 未授权数组
      getButtonsByRoleId({roleId: id, code: this.TreeNode.id}).then(res => {
      getButtonsByRoleId({roleId: id, code: this.classifyData.attributes.id}).then(res => {
        const filteredItems = this.classifyAuthButton.filter(item =>
          !res.data.data.some(x => x.id === item.id)
        );
        //和表格列进行对比
        this.classifyAuthHeader.forEach((item) => {
          // if (item.code !== 'data_view') {
          //   this.$set(this.classifyAuthData[index].authButton, "allDisabled", true);
          // }
          const isMatched = filteredItems.some((x) => x.id === item.prop);
          this.$nextTick(() => {
            if (this.classifyAuthData[index]) {
              if (isMatched) {
                Object.keys(this.classifyAuthData[index]).forEach((key) => {
                  this.$set(this.classifyAuthData[index].authButton,item.code,true);
                  this.$set(this.classifyAuthData[index].authButton, item.code, true);
                  //添加 “查看全部禁用条件”
                  if (item.code === "data_view") {
                    this.$set(this.classifyAuthData[index].authButton, "allDisabled", true);
                  }
                });
              } else {
                Object.keys(this.classifyAuthData[index]).forEach((key) => {
                  this.$set(this.classifyAuthData[index].authButton,item.code,false);
                  this.$set(this.classifyAuthData[index].authButton, item.code, false);
                });
                if(item.code === "data_view"){
                  this.classifyAuthData[index].authButton.allDisabled = false;
                }
              }
            }
          });
        });
        //添加‘查看’禁用
        if (this.classifyAuthData) {
          this.classifyAuthData.forEach((classkey, classIndex) => {
            if (classkey.authButton.classify_view) {
              this.$set(this.classifyAuthData[classIndex].authButton,"allDisabled",true);
            } else {
              this.classifyAuthData[classIndex].authButton.allDisabled = false;
            }
          });
        }
        // console.log(this.classifyAuthData)
        //强制刷新表格
        this.itemKey = uuidv4();
      });
@@ -182,7 +206,7 @@
    async roleChange(row, currentRow) {
      try {
        this.currentRow = currentRow;
        const res = await getButtonsByRoleId({roleId: row, code: this.TreeNode.id});
        const res = await getButtonsByRoleId({roleId: row, code: this.classifyData.attributes.id});
        const filteredItems = this.classifyAuthButton.filter(item => {
          return !res.data.data.find(x => x.id === item.id);
@@ -195,14 +219,14 @@
              if (isMatched) {
                Object.keys(currentRow).forEach((key) => {
                  currentRow.authButton[item.code] = true;
                  if (!currentRow.authButton.classify_view) {
                  if (!currentRow.authButton.data_view) {
                    currentRow.authButton.allDisabled = false;
                  }
                });
              } else {
                Object.keys(currentRow).forEach((key) => {
                  currentRow.authButton[item.code] = false;
                  if (!currentRow.authButton.classify_view) {
                  if (!currentRow.authButton.data_view) {
                    currentRow.authButton.allDisabled = false;
                  }
                });
@@ -221,13 +245,13 @@
        this.$message.warning("当前租户不存在角色信息!");
        return;
      }
      this.addIndex++; //自定义生成添加行下标
      let item = {
        roleData: this.roleList[0].id,
        classifyItem: this.classifyData.label,
        authButton:{},
        authButton: {},
        uuid: uuidv4(),//生成唯一的id,
        index: this.addIndex,
        index: this.classifyAuthData.length -1,
      }
      //将按钮设置进去
      this.classifyAuthButton.forEach(data => {
@@ -235,7 +259,7 @@
      })
      //console.log(item)
      this.classifyAuthData.push(item)
      this.roleHandlerMethods(this.roleList[0].id, 'add', this.addIndex)
      this.roleHandlerMethods(this.roleList[0].id, 'add', this.classifyAuthData.length -1)
    },
    // 删除行
    subClassifyAuth() {
@@ -264,7 +288,8 @@
      let form = {
        classifyAuthList: [],
        isCLear: false, //默认是清空
        classifyId: this.classifyData.oid,
        classifyId: this.TreeNode.oid,
        authType: 'data_auth',
      };
      let isRepeat = false;
      if (this.classifyAuthData.length > 0) {
@@ -290,7 +315,7 @@
          let itemButtonList = [];
          //筛选出按钮勾选为true的列
          for (let key in item) {
            if (item[key] === true) {
            if (item[key] === true && key !== 'checkTheStatus') {
              itemButtonList.push(key);
            }
          }
@@ -303,7 +328,7 @@
          let data = {
            oid: item.oid,
            roleId: item.roleData,
            classifyId: this.classifyData.oid,
            classifyId: this.TreeNode.oid,
            buttonIds: itemButtonList.join(","),
            authType: "data_auth",
          }
@@ -314,20 +339,20 @@
          return;
        }
        // console.log(form)
        // 调用保存分类授权的接口
        await saveOrUpdate(form).then(res => {
          this.$message({
            type: "success",
            message: res.data.msg,
          });
          // this.isShowDialog = false
        }, (error) => {
          window.console.log(error);
        })
      }else{
      } else {
        // 为空证明是清空授权列表
        form.isCLear = true;
      }
      // 调用保存分类授权的接口
      await saveOrUpdate(form).then(res => {
        this.$message({
          type: "success",
          message: res.data.msg,
        });
        // this.isShowDialog = false
      }, (error) => {
        window.console.log(error);
      })
      this.classifyAuthData = [];
      this.loadAuthPage();
    },
@@ -345,7 +370,7 @@
    },
    loadAuthPage() {
      return new Promise((resolve, reject) => {
        console.log(this.classifyData);
        this.isLoading = true;
        getButtonByParentCode({code: this.classifyData.attributes.id}).then(res => {
          // 记录按钮数据
          this.classifyAuthButton = res.data.data;
@@ -385,7 +410,7 @@
          this.roleList = res.data.data.records;
        });
        // 获取该分类下已授权的分类授权信息
        getClassifyAuthList({classifyId: this.classifyData.oid, authType: "data_auth"}).then(res => {
        getClassifyAuthList({classifyId: this.TreeNode.oid, authType: "data_auth"}).then(res => {
          //console.log(res.data.data);
          let authDatas = res.data.data;
          if (authDatas.length > 0) {
@@ -395,7 +420,7 @@
                roleData: authData.roleId,
                classifyItem: this.classifyData.label,
                index: index,
                authButton:{},
                authButton: {},
                uuid: uuidv4(),//生成唯一的id
              }
              //将按钮设置进去
@@ -403,11 +428,11 @@
                Vue.set(item, data, true);
              });
              this.classifyAuthData.push(item);
              this.addIndex = this.classifyAuthData.length - 1; //添加行下标等于classifyAuthData的长度-1
              this.roleHandlerMethods(authData.roleId, 'create', index)
            })
          }
        });
        this.isLoading = false;
      });
    },
  },