1
lzhe
2024-06-05 dcf9c9e0410fe1186239e3f8d6f7bdc789c08010
src/views/console/authority/datascope.vue
@@ -8,7 +8,7 @@
-->
<template>
   <div class="dict-main">
      <el-form :inline="true" :model="searchData" abel-width="120px">
      <el-form :inline="true" :model="searchData" label-width="120px">
         <el-form-item label="菜单名称">
            <el-input v-model="searchData.name" placeholder="菜单名称" clearable />
         </el-form-item>
@@ -47,37 +47,95 @@
                  </template>
               </el-table-column>
               <el-table-column prop="belongApplication" label="所属应用"></el-table-column>
               <!-- <el-table-column prop="attachSize" label="附件大小">
                  <template #default="scope">
                     <span class="attachSize">{{scope.row.attachSize}} B</span>
                  </template>
               </el-table-column> -->
               <el-table-column fixed="right" label="操作">
                  <template #default="scope">
                     <el-button text type="primary" size="small" @click="table_del(scope.row, scope.$index)">权限配置</el-button>
                     <el-button text type="primary" size="small" @click="showDrawer(scope.row, scope.$index)">权限配置</el-button>
                  </template>
               </el-table-column>
            </el-table>
         </div>
      </div>
      <el-drawer title="[控制中心]数据权限配置" v-model="drawer" :direction="direction" :before-close="handleClose" size="920" class="drawerStyle">
         <el-form :inline="true" :model="drawerSearchData" label-width="120px">
            <el-form-item label="菜单名称">
               <el-input v-model="drawerSearchData.scopeName" placeholder="菜单名称" clearable />
            </el-form-item>
            <el-form-item label="菜单编号">
               <el-input v-model="drawerSearchData.resourceCode" placeholder="菜单编号" clearable></el-input>
            </el-form-item>
            <el-form-item>
               <el-button type="primary" @click="drawerSearchclick">搜索</el-button>
               <el-button @click="drawerSearchClearBtn">清空</el-button>
            </el-form-item>
         </el-form>
         <div>
            <div class="datascope-drawer-btn">
               <el-button type="primary" @click="addData">+ 新增</el-button>
               <el-button type="danger" plain @click="delData">删除</el-button>
            </div>
            <div class="dict-table">
               <el-table ref="multipleTableRef" :data="drawerTableData" border style="width: 100%" class="multipleTableRef" @selection-change="drawerHandleSelectionChange">
                  <el-table-column type="selection" width="55" />
                  <el-table-column prop="scopeName" label="权限名称"></el-table-column>
                  <el-table-column prop="resourceCode" label="权限编号"></el-table-column>
                  <el-table-column prop="scopeColumn" label="权限字段"></el-table-column>
                  <el-table-column prop="scopeTypeName" label="规则分类"></el-table-column>
                  <el-table-column fixed="right" label="操作">
                     <template #default="scope">
                        <el-button text type="primary" size="small" @click="table_show(scope.row, scope.$index)">查看</el-button>
                        <el-button text type="primary" size="small" @click="table_edit(scope.row, scope.$index)">编辑</el-button>
                        <el-button text type="primary" size="small" @click="table_del(scope.row, scope.$index)">删除</el-button>
                     </template>
                  </el-table-column>
               </el-table>
               <el-pagination
                  style="margin-top: 12px;"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                  :current-page="currentPage4"
                  :page-sizes="[15, 50, 100]"
                  :page-size="15"
                  layout="total, sizes, prev, pager, next, jumper"
                  :total="drawerTotal">
               </el-pagination>
            </div>
         </div>
      </el-drawer>
      <save-dialog v-if="dialog.save" ref="saveDialog" :scopeTypeNameList="scopeTypeNameList" :tableRow="tableRow" @success="addDatascopeSuccess" @closed="dialog.save=false"></save-dialog>
   </div>
</template>
<script>
   import saveDialog from './addDatascope'
   import * as ElementPlusIconsVue from '@element-plus/icons-vue'
   let icons = []
   for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
       icons.push(key)
   }
   export default {
      name: "attach",
      name: "datascope",
      data(){
         return {
            scopeTypeNameList: [],
            dialog: {
               save: false
            },
            drawerTotal: 0,
            direction: "rtl",
            drawer: false,
            icons,
            belongApplicationList: [],
            fileDialogVisible: false,
            getModalData: [],
            selection: [],
            drawerSelection: [],
            total: 0,
            drawerSearchData: {
               scopeName: "",
               resourceCode: "",
               menuId: "",
               current: 1,
               size: 10
            },
            searchData: {
               name: "",
               code: "",
@@ -88,19 +146,99 @@
               save: false,
               allocation: false
            },
            tableData: []
            tableData: [],
            drawerTableData: [],
            rowId: "",
            tableRow: {}
         }
      },
      created(){
         
      },
      mounted(){
         this.getscopeTypeNameList();//规则分类枚举
         this.searchBtn();
      },
      components: {
          ...ElementPlusIconsVue
          ...ElementPlusIconsVue,saveDialog
       },
      methods: {
         getscopeTypeNameList() {  //规则分类枚举
            this.$HTTP.get("/api/blade-system/dict/dictionary?code=data_scope_type").then(res=> {
               if(res.code == 200) {
                  this.scopeTypeNameList = res.data;
               }
            })
         },
         addDatascopeSuccess() {
            this.drawerSearchclick();
         },
         //添加权限
         addData(){
            this.dialog.save = true
            this.$nextTick(() => {
               this.$refs.saveDialog.open()
            })
         },
         // 删除
         delData() {
            if(this.drawerSelection.length == 0) {
               this.$message({
                   message: '请选择至少一条数据',
                   type: 'warning'
                 });
                 return;
            }
            var selStr = "";
            this.drawerSelection.map(item=> {
               selStr += item.id + ","
            })
            selStr = selStr.replace(/,$/, '');
            var that = this;
            this.$HTTP.post("/api/blade-system/data-scope/remove?ids="+selStr).then(res=> {
               if(res.code == 200) {
                  that.$message.success("操作成功");
                  that.drawerSearchclick();
               }
            })
         },
         table_edit(row){  //编辑
            this.dialog.save = true
            this.$HTTP.get("/api/blade-system/data-scope/detail?id="+row.id).then(res=> {
               if(res.code == 200) {
                  this.dialog.save = true;
                  this.$nextTick(() => {
                     this.$refs.saveDialog.open('edit').setData(res.data);
                  })
               }
            })
         },
         //查看
         table_show(row){  //查看
            this.dialog.save = true
            this.$nextTick(() => {
               this.$refs.saveDialog.open('show').setData(row)
            })
         },
         table_del(row) {
            var that = this;
            this.$confirm(`确定将选择数据删除?`, '', {
               type: 'warning'
            }).then(() => {
               this.$HTTP.post("/api/blade-system/data-scope/remove?ids="+row.id).then(res=> {
                  if(res.code == 200) {
                     that.$message.success("操作成功");
                     that.drawerSearchclick();
                  }
               })
            }).catch(() => {
            })
         },
         handleClose(done) {
            this.drawerTableData = [];
              done();
          },
         exportFile(row,index){
            window.open(row.link);
         },
@@ -115,6 +253,37 @@
               parentId: ""
            }
            this.searchBtn();
         },
         showDrawer(row){
            this.rowId = row.id;
            this.tableRow = row;  //后面组件会用到
            this.drawerSearchclick();
            this.drawer = true;
         },
         drawerSearchclick() {
            var obj = {};
            for(var key in this.drawerSearchData) {
               if(this.drawerSearchData[key]) {
                  obj[key] = this.drawerSearchData[key];
               }
            }
            obj.menuId = this.rowId;
            this.$HTTP.get("/api/blade-system/data-scope/list?"+this.$TOOL.qsStringify(obj)).then(res=> {
               if(res.code == 200) {
                  this.drawerTableData = res.data.records;
                  this.drawerTotal = res.data.total;
               }
            })
         },
         drawerSearchClearBtn() {
            this.drawerSearchData = {
               scopeName: "",
               resourceCode: "",
               menuId: this.rowId,
               current: 1,
               size: 10
            }
            this.drawerSearchclick();
         },
         searchclick() {
            this.searchBtn();
@@ -132,33 +301,25 @@
               }
            })
         },
         //删除
         table_del(row) {
         },
         //查看
         table_show(row){
            this.dialog.save = true
            this.$nextTick(() => {
               this.$refs.saveDialog.open('show').setData(row)
            })
         },
         handleSelectionChange(selection) {
            this.selection = selection;
         },
         drawerHandleSelectionChange(selection) {
            this.drawerSelection = selection;
         },
         changeDepartment() {
            this.departmentVisible = true;
         },
         handleSizeChange(val) {
            console.log(`每页 ${val} 条`);
            this.searchData.current = "1";
            this.searchData.size = val;
            this.searchBtn();
            this.drawerSearchData.current = "1";
            this.drawerSearchData.size = val;
            this.drawerSearchclick();
         },
         handleCurrentChange(val) {
            console.log(`当前页: ${val}`);
            this.searchData.current = val;
            this.searchBtn();
            this.drawerSearchData.current = val;
            this.drawerSearchclick();
         }
      }
   }
@@ -193,10 +354,18 @@
      margin-bottom: 8px;
   }
   .attachSize {
      color:#3b8e8e;
      color:#409eff;
      padding: 0 10px;
       font-size: 12px;
      background-color: #ebf4f4;
      border: 1px solid #d8e8e8;
   }
   /deep/ .drawerStyle {
      padding: 20px;
   }
   .datascope-drawer-btn {
      margin-bottom: 8px;
      padding-left: 8px;
      padding-right: 8px;
   }
</style>