田源
2023-10-25 b7e6cddb149c5a5c960e9e50cb9825c69b37ee00
Source/UBCS-WEB/src/views/integration/systemInfo.vue
@@ -7,7 +7,7 @@
      <template slot="menuLeft">
        <!-- <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">查 询
        </el-button> -->
        <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">删 除
        <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds" v-if="this.permission.systemInfo.systemInfo_remove">删 除
        </el-button>
      </template>
      <template slot="search" slot-scope="{row,size}">
@@ -19,10 +19,11 @@
                  :size="size" clearable style="width:300px;margin-left: 10px;"
                  @clear="handleClear" @keyup.enter.native="handleEnter"></el-input>
      </template>
      <template #menu="{row,index,size}">
      <template #menu="{row,index,size}" v-if="this.permission.systemInfo.systemInfo_empower">
        <el-button icon="el-icon-menu" size="small" type="text" @click="classifyHandler(row)">分类授权</el-button>
      </template>
    </avue-crud>
    <el-dialog :visible.sync="dialogVisible" append-to-body class="avue-dialog avue-dialog--top" title="分类授权"
               top="-50px">
@@ -40,7 +41,7 @@
      <div slot="footer" class="dialog-footer" style="height: 50px;line-height: 50px">
        <el-button icon="el-icon-plus" size="small" type="primary" @click="empower">授 权</el-button>
        <el-button icon="el-icon-close" size="small" type="danger">重 置</el-button>
        <el-button icon="el-icon-close" size="small" type="danger" @click="resetting">重 置</el-button>
      </div>
    </el-dialog>
  </basic-container>
@@ -54,7 +55,7 @@
  sysInfoTree,
  batchAddSave
} from '@/api/integration/sysInfo.js'
import {mapGetters} from "vuex";
export default {
  data() {
    return {
@@ -90,56 +91,70 @@
      search: {},
      delIds: [],
      data: [],
      option: {
        height: "auto",
        tip: false,
        border: true,
        align: 'center',
        menuAlign: 'center',
        index: true,
        searchMenuSpan: 8,
        searchBtn: false,
        emptyBtn: false,
        columnBtn: false,
        defaultSort: {
          prop: 'id,name',
          order: 'descending'
        },
        selection: true,
        column: [
          {
            label: '系统编号',
            prop: 'id',
            sortable: true,
            rules: [{
              required: true,
              message: '系统编号不能为空',
              trigger: 'blur'
            }],
            // maxlength: 30,    //字数限制
          }, {
            label: '系统名称',
            prop: 'name',
            sortable: true,
            rules: [{
              required: true,
              message: '系统名称不能为空',
              trigger: 'blur'
            }],
            // maxlength: 30,    //字数限制
          },
          {
            label: '系统描述',
            prop: 'description',
            type: 'textarea'
          }
        ]
      },
    }
  },
  created() {
  },
  computed: {
    ...mapGetters(["permission"]),
    option(){
      return{
          height: "auto",
          tip: false,
          border: true,
          align: 'center',
          menuAlign: 'center',
          index: true,
          searchMenuSpan: 8,
          addBtn:this.permission.systemInfo.systemInfo_add,
          editBtn:this.permission.systemInfo.systemInfo_edit,
          delBtn:this.permission.systemInfo.systemInfo_remove,
          searchBtn: false,
          emptyBtn: false,
          columnBtn: false,
          defaultSort: {
            prop: 'id,name',
            order: 'descending'
          },
          selection: true,
          column: [
            {
              label: '系统编号',
              prop: 'id',
              sortable: true,
              rules: [{
                required: true,
                message: '系统编号不能为空',
                trigger: 'blur'
              }],
              // maxlength: 30,    //字数限制
            }, {
              label: '系统名称',
              prop: 'name',
              sortable: true,
              rules: [{
                required: true,
                message: '系统名称不能为空',
                trigger: 'blur'
              }],
              // maxlength: 30,    //字数限制
            },
            {
              label: '系统描述',
              prop: 'description',
              type: 'textarea'
            }
          ]
      }
    }
  },
  methods: {
    //重置
    resetting(){
      this.$refs.tree.setCheckedKeys([])
      // console.log(this.ParentList)
    },
    empower() {
      batchAddSave(this.checkAll.oid, this.checkAll.id, this.ParentList).then(res => {
        // console.log(res.data)
@@ -151,76 +166,66 @@
    },
    //分类授权多选回调
    checkChange(row, checked) {
      // this.ParentList=[]
      // console.log('row',row)
      if (checked) {
        if (!row.parentId) {
          const parentRecord = {
            oid: row.oid,
            classifyId: row.attributes.classifyId,
            classifyOid: row.attributes.classifyOid,
            classParentOid: row.parentId,
          };
          this.ParentList.push(parentRecord);
          // 如果row的children不为空 继续循环children中的每个对象
          if (row.children && row.children.length > 0) {
            for (let child of row.children) {
              const childRecord = {
                oid: child.oid,
                classifyId: child.attributes.classifyId,
                classifyOid: child.attributes.classifyOid,
                classParentOid: child.parentId,
              };
              this.ParentList.push(childRecord);
              // 如果子对象的children不为空 继续循环获取数据
              if (child.children && child.children.length > 0) {
                for (let subChild of child.children) {
                  const subRecord = {
                    oid: subChild.oid,
                    classifyId: subChild.attributes.classifyId,
                    classifyOid: subChild.attributes.classifyOid,
                    classParentOid: subChild.parentId,
                  };
                  this.ParentList.push(subRecord);
                }
              }
            }
          }
        }
        this.addAllChildren(row.children);
        this.addToParentList(row);
        // 勾选行时将所有节点添加到ParentList中
      } else {
        // 取消勾选的节点是父节点
        if (!row.parentId) {
          // 找到父节点在ParentList中的索引
          const parentIndex = this.ParentList.findIndex(item => item.oid === row.oid);
          if (parentIndex !== -1) {
            const parentOid = this.ParentList[parentIndex].classifyOid;
            // 查找所有需要删除的子节点的索引
            const childIndexes = this.ParentList.reduce((indexes, item, index) => {
              if (item.classParentOid === parentOid && item.classifyOid !== parentOid) {
                indexes.push(index);
              }
              return indexes;
            }, []);
            // 从后往前删除子节点的数据,保证索引的正确性
            for (let i = childIndexes.length - 1; i >= 0; i--) {
              this.ParentList.splice(childIndexes[i], 1);
            }
            // 删除父节点的数据
            this.ParentList.splice(parentIndex, 1);
          }
        } else {
          // 取消勾选的节点是子节点
          const childIndex = this.ParentList.findIndex(item => item.oid === row.oid);
          if (childIndex !== -1) {
            // 删除子节点的数据
            this.ParentList.splice(childIndex, 1);
          }
        this.removeAllChildren(row.children);
        this.removeFromParentList(row);
        // 取消勾选将所有节点添加从ParentList中移除
      }
      // console.table(this.ParentList);
    },
    //子节点添加
    addAllChildren(children) {
      for (let child of children) {
        this.addToParentList(child);
        // 将子节点添加到 ParentList 中
        if (child.children && child.children.length > 0) {
          this.addAllChildren(child.children);
        }
      }
      console.log('this.ParentList',this.ParentList);
    },
    //子节点移除
    removeAllChildren(children) {
      for (let child of children) {
        this.removeFromParentList(child);
        // 将子节点从 ParentList 中移除
        if (child.children && child.children.length > 0) {
          this.removeAllChildren(child.children);
        }
      }
    },
    //当前父节点添加
    addToParentList(item) {
      const classifyOid = item.attributes.classifyOid;
      if (!this.isClassifyOidExists(classifyOid)) {
        const record = {
          oid: item.oid,
          classifyId: item.attributes.classifyId,
          classifyOid: classifyOid,
        };
        this.ParentList.push(record);
      }
    },
    //当前父节点移除
    removeFromParentList(item) {
      const classifyOid = item.attributes.classifyOid;
      if (this.isClassifyOidExists(classifyOid)) {
        const index = this.findIndexByClassifyOid(classifyOid);
        if (index !== -1) {
          this.ParentList.splice(index, 1);
        }
      }
    },
    //判重-ParentList
    isClassifyOidExists(classifyOid) {
      return this.ParentList.some(item => item.classifyOid === classifyOid);
    },
    //查找index位置
    findIndexByClassifyOid(classifyOid) {
      return this.ParentList.findIndex(item => item.classifyOid === classifyOid);
    },
    //分类授权
    classifyHandler(row) {
@@ -391,7 +396,7 @@
            type: 'success',
            message: '删除成功!'
          });
          this.getDataList()
          await this.getDataList()
        }
      })
    },