Sfoglia il codice sorgente

Merge branch 'hotfix-v2.4.0-linqian' into 'release/v2.4.0'

bug修改

See merge request dcuc-tjdsj/auth-web!33
林倩 3 anni fa
parent
commit
17ed57b323

+ 4 - 1
src/api/permission-selfhelp-manage.js

@@ -32,7 +32,10 @@ export const tableUrl = `${baseUrl}/authApplySearch`;
 export function allAppFuncTree() {
   return request({
     url: `/authsvr/v2/appfuninfo/allMenuTree`,
-    method: 'GET'
+    method: 'GET',
+    // params: {
+    //   exclude: true
+    // }
   });
 }
 

+ 4 - 0
src/pages/permission-selfhelp-manage/DataConfig.js

@@ -4,6 +4,10 @@ export const tableHeader = [
     prop: 'flowTitle',
     width: '380px'
   },
+  { 
+    label: '审批单编号',
+    prop: 'applyOrdNo'
+  },
   {
     label: '审批类型',
     prop: 'applyType',

+ 32 - 11
src/pages/permission-selfhelp-manage/component/app-func-form.vue

@@ -43,6 +43,8 @@ export default {
     return {
       approveContent: this.value,
       selectedValue: [],
+      havefunIdsOnlyChild: [],
+      havefunIds: [],
       data: []
     };
   },
@@ -65,9 +67,9 @@ export default {
       return false;
     },
     // 树节点转成文字
-    nodeTransferLabel() {
-      const funcAttr = this.selectedValue.map((item) => {
-        return this.findIndexArray(this.$refs.transferTree.targetData, item, []);
+    nodeTransferLabel(keys, tree) {
+      const funcAttr = keys.map((item) => {
+        return this.findIndexArray(tree, item, []);
       });
       let attr = [];
       for (let i = 0; i < funcAttr.length; i++) {
@@ -80,9 +82,16 @@ export default {
       this.$emit('close');
     },
     handleSubmit() {
-      const approveContent = this.nodeTransferLabel();
-      // 获取目标树所有的key
+      // 申请访问的资源,剔除已经申请过的资源
+      const applyKeys = this.selectedValue.filter((item) => !this.havefunIdsOnlyChild.includes(item));
+      const approveContent = this.nodeTransferLabel(applyKeys, this.$refs.transferTree.targetData);
+      // 撤销的资源, 已有资源与已选资源作比对
+      const cancelKeys = this.havefunIdsOnlyChild.filter((item) => !this.selectedValue.includes(item));
+      const cancelContent = this.nodeTransferLabel(cancelKeys, this.data);
+      // const completeContent = `${approveContent}'\n'${cancelContent}`
+      // 获取目标树所有的key,包含父节点
       const allKeys = this.$refs.transferTree.allKeyValue(false, this.$refs.transferTree.targetData);
+      // 实际保存的节点,剔除应用节点
       const resourceInfos = allKeys
         .map((item) => this.$refs.transferTree.$refs['to-tree'].getNode(item).data)
         .map((item) => {
@@ -92,13 +101,17 @@ export default {
           };
         })
         .filter((item) => item.appId);
+      // 需要验证重复申请的资源,剔除该用户已经拥有的资源
+      const validRepeatNode = resourceInfos
+        .filter((item) => !this.havefunIds.includes(item.funId))
+        .map((item) => item.funId);
 
       // 已选资源有变更,则可以直接保存,无变更,则需要至少选中一条
       // 判断有无变更的标准:resourceInfos的funId 与getSetFunIdsByUser方法返回的已选资源id作匹配
-      if (this.havefunIds.length == 0 && this.selectedValue.length == 0) {
+      if (applyKeys.length == 0 && cancelKeys.length == 0) {
         this.$message.warning('请至少选择一条功能资源!');
       } else {
-        this.$emit('success', approveContent, this.selectedValue, resourceInfos);
+        this.$emit('success', approveContent, cancelContent, this.selectedValue, resourceInfos);
       }
     },
     handleSearch(value, data) {
@@ -157,10 +170,18 @@ export default {
 
   async created() {
     this.data = await this.getAllTree();
-    this.havefunIds = await this.getSetFunIdsByUser();
-    this.selectedValue = [...this.selectKeys, ...this.havefunIds];
-    if (this.needFilter) {
-      this.selectedValue = this.getChildKeys(this.data, [...this.selectKeys, ...this.havefunIds]);
+    if (this.type == 'edit') {
+      // 已有资源,包含了父节点
+      this.havefunIds = await this.getSetFunIdsByUser();
+      // 已有资源,只是子节点
+      this.havefunIdsOnlyChild = this.getChildKeys(this.data, this.havefunIds);
+    }
+
+    const keys = this.selectKeys;
+    if (this.needFilter && this.havefunIds.length > 0) {
+      this.selectedValue = [...this.getChildKeys(this.data, keys), ...this.havefunIdsOnlyChild];
+    } else {
+      this.selectedValue = keys;
     }
   },
   mounted() {}

+ 30 - 22
src/pages/permission-selfhelp-manage/component/basic-form.vue

@@ -39,11 +39,11 @@
             </div>
           </el-form-item>
         </dg-col>
-        <dg-col :span="12" v-if="isDetail">
+        <!-- <dg-col :span="12" v-if="isDetail">
           <el-form-item label="流程编号:" prop="businessCode">
             <div>{{ sizeForm.businessCode }}</div>
           </el-form-item>
-        </dg-col>
+        </dg-col> -->
         <dg-col :span="12" v-if="isDetail">
           <el-form-item label="审批单编号:" prop="applicantOrdNo">
             <div>{{ sizeForm.applicantOrdNo }}</div>
@@ -98,6 +98,11 @@
             </div>
           </el-form-item>
         </dg-col>
+        <dg-col :span="12" v-if="isDetail">
+          <el-form-item label="创建时间:">
+            {{ sizeForm.createTime }} 
+          </el-form-item>
+        </dg-col>
         <dg-col :span="12" v-if="sizeForm.applyType == 'SERVICE_AUTH'">
           <el-form-item label="应用方:" prop="applyId">
             <div v-if="isDetail">{{ sizeForm.applyId }}</div>
@@ -107,14 +112,7 @@
           </el-form-item>
         </dg-col>
       </dg-row>
-      <dg-row> </dg-row>
-      <dg-row>
-        <dg-col :span="8" v-if="isDetail">
-          <el-form-item label="创建时间:">
-            {{ sizeForm.createTime }}
-          </el-form-item>
-        </dg-col>
-      </dg-row>
+
       <dg-row>
         <dg-col :span="24">
           <!-- <component :is="approveComponent"></component> -->
@@ -350,9 +348,16 @@ export default {
       applyContentCom: appFuncForm,
       show: false,
       applyContentOperateObj: {
-        'function-auth-apply': '申请访问资源:',
-        'service-auth-apply': '申请服务:'
-      }
+        'function-auth-apply': {
+          applyText: '申请访问资源:',
+          cancelText: '申请撤销资源:'
+        },
+        'service-auth-apply': {
+          applyText: '申请服务:',
+          cancelText: '申请撤销服务:'
+        }
+      },
+      needFilter: true
     };
   },
   components: {},
@@ -363,8 +368,11 @@ export default {
     flowContentStr() {
       let str = '';
       if (this.sizeForm.flowContent) {
-        const { visitorName, visitResourceName } = JSON.parse(this.sizeForm.flowContent);
-        str = `${visitorName}${this.applyContentOperateObj[this.sizeForm.businessCode]}${visitResourceName}`;
+        const { visitorName, visitResourceName, cancelResourceName } = JSON.parse(this.sizeForm.flowContent);
+        const { applyText, cancelText } = this.applyContentOperateObj[this.sizeForm.businessCode] || {};
+        const applyContent = visitResourceName ? `${applyText}${visitResourceName}。\n` : '';
+        const cancelContent = cancelResourceName ? `${cancelText}${cancelResourceName}。` : '';
+        str = `${visitorName}${applyContent}${cancelContent}`;
       }
       return str;
     }
@@ -372,7 +380,6 @@ export default {
   watch: {
     'sizeForm.applyType': {
       handler(val) {
-        // this.sizeForm.applicantId = val;
         let component;
         if (val == 'DATA_AUTH') {
           component = dataSourceForm;
@@ -471,25 +478,25 @@ export default {
     // 选择
     handleChoice() {
       const vm = this;
-      const keys = [...this.applySelectKeys, ...this.sizeForm.resourceInfos.map((item) => item.funId)];
+      // const keys = [...this.applySelectKeys, ...this.sizeForm.resourceInfos.map((item) => item.funId)];
       const layer = this.$dgLayer({
         title: '选择资源',
         shadow: [0.4, '#fff'],
         props: {
-          selectKeys: keys,
-          needFilter: true
+          selectKeys: this.applySelectKeys,
+          needFilter: this.needFilter
         },
         content: this.applyContentCom,
         area: ['1200px', '700px'],
         on: {
-          success(approveContent, selectKeys, resourceInfos = []) {
+          success(visitResourceName, cancelResourceName, selectKeys, resourceInfos = []) {
             vm.sizeForm.resourceInfos = resourceInfos;
             vm.applySelectKeys = selectKeys;
             const visitorName =
               vm.sizeForm.applyType !== 'SERVICE_AUTH' ? vm.sizeForm.applicantName : vm.sizeForm.applyId;
-            const visitResourceName = approveContent;
-            const resourceObj = { visitorName, visitResourceName };
+            const resourceObj = { visitorName, visitResourceName, cancelResourceName };
             vm.sizeForm.flowContent = JSON.stringify(resourceObj);
+            vm.needFilter = false;
             layer.close(layer.dialogIndex);
           },
           close() {
@@ -547,6 +554,7 @@ export default {
           resourceInfos,
           ...otherInfo
         };
+        this.applySelectKeys = this.sizeForm.resourceInfos.map((item) => item.funId);
         this.show = true;
       });
     }

+ 2 - 1
src/pages/permission-selfhelp-manage/component/data-source-form.vue

@@ -65,8 +65,9 @@ export default {
         this.$message.warning('请至少选择一条数据资源!');
       } else {
         const approveContent = targetData.map(item => item.serviceName).join(",");
+        const cancelContent = "";
         const selectedValue = targetData.map(item => item.id);
-        this.$emit('success', approveContent, selectedValue);
+        this.$emit('success', approveContent, cancelContent, selectedValue);
       }
 
     }

+ 2 - 1
src/pages/permission-selfhelp-manage/component/service-source-form.vue

@@ -65,8 +65,9 @@ export default {
         this.$message.warning('请至少选择一条服务资源!');
       } else {
         const approveContent = targetData.map(item => item.serviceName).join(",");
+        const cancelContent = "";
         const selectedValue = targetData.map(item => item.id);
-        this.$emit('success', approveContent, selectedValue);
+        this.$emit('success', approveContent, cancelContent, selectedValue);
       }
 
     }

+ 4 - 6
src/pages/permission-selfhelp-manage/index.vue

@@ -15,10 +15,6 @@
         </dg-select>
       </el-form-item>
       <el-form-item label="创建时间">
-          <!-- value-format="yyyyMMddHHmmss" -->
-          <!-- :default-time="['00:00:00', '23:59:59']" -->
-
-
         <dg-date-picker
           v-model="form.createTime.value"
           type="daterange"
@@ -38,7 +34,9 @@
       </el-form-item>
     </el-form>
     <dg-row zebra="10px">
-      <dg-button type="primary" @click="handleApplyPermission(false)"  icon="el-icon-circle-plus-outline">权限申请</dg-button>
+      <dg-button type="primary" @click="handleApplyPermission(false)" icon="el-icon-circle-plus-outline"
+        >权限变更申请</dg-button
+      >
     </dg-row>
     <!-- 表格 -->
     <Table ref="myTable" :url="tableUrl" :headerData="tableHeader" :condition="form">
@@ -48,7 +46,7 @@
             <el-tooltip content="详情" effect="dark" placement="top-end">
               <i class="el-icon-document" @click="handleViewDetail(row)"></i>
             </el-tooltip>
-            <el-tooltip content="编辑" effect="dark" placement="top-end" v-if="row.showEdit">
+            <el-tooltip content="编辑" effect="dark" placement="top-end" v-if="!row.showEdit">
               <i class="el-icon-edit" @click="handleApplyPermission(row.applyOrdNo)"></i>
             </el-tooltip>
             <el-tooltip content="撤回" effect="dark" placement="top-end" v-if="row.showRecall">