Browse Source

Merge branch 'hotfix-v2.4.0-linqian' into 'develop'

Hotfix v2.4.0 linqian

See merge request dcuc-tjdsj/auth-web!37
林倩 3 years ago
parent
commit
a3a55d6b86
40 changed files with 581 additions and 531 deletions
  1. 1 4
      config/dev.env.js
  2. 6 2
      index.html
  3. 47 49
      package-lock.json
  4. 1 1
      package.json
  5. 4 1
      src/api/permission-selfhelp-manage.js
  6. 24 24
      src/assets/style/project.scss
  7. 1 1
      src/pages/admin-manage/add.vue
  8. 5 5
      src/pages/common/new-table/index.vue
  9. 1 1
      src/pages/common/select-tree/index.vue
  10. 1 1
      src/pages/common/time-line/index.vue
  11. 2 2
      src/pages/data-auth-module/auth-object-manage/object-prop-manage/function-list.vue
  12. 4 4
      src/pages/data-auth-module/auth-subject-manage/DataConfig.js
  13. 2 2
      src/pages/data-auth-module/auth-subject-manage/subject-prop-manage/personnel-list.vue
  14. 3 3
      src/pages/data-auth-module/auth-subject-manage/user-prop-manage/index.vue
  15. 2 2
      src/pages/empower-manage/institutional-quotas-manage/edit.vue
  16. 2 2
      src/pages/empower-manage/institutional-quotas-manage/index.vue
  17. 10 2
      src/pages/layout/components/sidebar/index.vue
  18. 5 4
      src/pages/list-manage/red-list-manage/component/app-func.vue
  19. 8 9
      src/pages/list-manage/red-list-manage/component/batch-add-appfunc.vue
  20. 1 1
      src/pages/list-manage/red-list-manage/component/batch-delete-appfunc.vue
  21. 3 3
      src/pages/list-manage/red-list-manage/component/batch-setlevel-appfunc.vue
  22. 4 4
      src/pages/list-manage/white-list-manage/component/batch-add-user.vue
  23. 1 1
      src/pages/list-manage/white-list-manage/component/batch-delete-user.vue
  24. 5 5
      src/pages/list-manage/white-list-manage/component/batch-setlevel-user.vue
  25. 2 2
      src/pages/list-manage/white-list-manage/component/user-list.vue
  26. 1 1
      src/pages/log-manage/err-auth-earlywarning-manage/auth-earlywarning-info-detail.vue
  27. 4 4
      src/pages/log-report/persionnel-author-audit/timeLine.vue
  28. 1 1
      src/pages/log-report/scope-author-audit/timeLine.vue
  29. 4 0
      src/pages/permission-selfhelp-manage/DataConfig.js
  30. 54 28
      src/pages/permission-selfhelp-manage/component/app-func-form.vue
  31. 44 31
      src/pages/permission-selfhelp-manage/component/basic-form.vue
  32. 2 1
      src/pages/permission-selfhelp-manage/component/data-source-form.vue
  33. 2 1
      src/pages/permission-selfhelp-manage/component/service-source-form.vue
  34. 4 6
      src/pages/permission-selfhelp-manage/index.vue
  35. 113 111
      src/router/lxr_permission.js
  36. 60 56
      src/store/modules/app.js
  37. 1 1
      src/utils/regular.js
  38. 144 151
      src/utils/req.js
  39. 0 2
      src/utils/request-base.js
  40. 2 2
      static/themes/style/theme-default.css

+ 1 - 4
config/dev.env.js

@@ -13,7 +13,7 @@ module.exports = merge(prodEnv, {
     QQQ: '"/easy-mock2"',
     QQQ: '"/easy-mock2"',
 
 
     //是否需要登录验证
     //是否需要登录验证
-    NEED_LOGIN: "true",
+    NEED_LOGIN: "false",
 
 
     //需要依赖的系统名称
     //需要依赖的系统名称
     // INSTALLED_PROJECT: "'zfba,demo2,cross-env'",
     // INSTALLED_PROJECT: "'zfba,demo2,cross-env'",
@@ -33,9 +33,6 @@ module.exports = merge(prodEnv, {
     PROT: "8871",
     PROT: "8871",
     PROXY_TABLE: JSON.stringify({
     PROXY_TABLE: JSON.stringify({
         "/dcucauth": {
         "/dcucauth": {
-            // target: "http://10.11.1.164:8861"
-            // target: "http://10.11.0.48:8861",// 邱宇
-            // target: "http://10.254.11.203:8861"
             // target: "http://10.11.1.237:8861"
             // target: "http://10.11.1.237:8861"
             // target: "http://10.254.11.203:8861"
             // target: "http://10.254.11.203:8861"
              target: "http://192.168.10.2:8871"
              target: "http://192.168.10.2:8871"

+ 6 - 2
index.html

@@ -1,3 +1,8 @@
+<!--
+ * @Description: 
+ * @Autor: linqian
+ * @Date: 2021-04-06 08:44:43
+-->
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="zh-cmn-Hans">
 <html lang="zh-cmn-Hans">
     <head>
     <head>
@@ -16,6 +21,5 @@
     </head>
     </head>
     <body>
     <body>
         <div id="app"></div>
         <div id="app"></div>
-        <!-- built files will be auto injected -->
     </body>
     </body>
-</html>
+</html>

+ 47 - 49
package-lock.json

@@ -3729,39 +3729,6 @@
       "resolved": "http://192.168.6.13:8082/repository/npm_all/deepmerge/-/deepmerge-1.5.2.tgz",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/deepmerge/-/deepmerge-1.5.2.tgz",
       "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
       "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
     },
     },
-    "default-gateway": {
-      "version": "2.7.2",
-      "resolved": "http://192.168.6.13:8082/repository/npm_all/default-gateway/-/default-gateway-2.7.2.tgz",
-      "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=",
-      "dev": true,
-      "requires": {
-        "execa": "^0.10.0",
-        "ip-regex": "^2.1.0"
-      },
-      "dependencies": {
-        "execa": {
-          "version": "0.10.0",
-          "resolved": "http://192.168.6.13:8082/repository/npm_all/execa/-/execa-0.10.0.tgz",
-          "integrity": "sha1-/0Vqj1P5D47MxxqW0Rvfx/CCy1A=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^3.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "3.0.0",
-          "resolved": "http://192.168.6.13:8082/repository/npm_all/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
-          "dev": true
-        }
-      }
-    },
     "defaults": {
     "defaults": {
       "version": "1.0.3",
       "version": "1.0.3",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/defaults/-/defaults-1.0.3.tgz",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/defaults/-/defaults-1.0.3.tgz",
@@ -6970,16 +6937,6 @@
         }
         }
       }
       }
     },
     },
-    "internal-ip": {
-      "version": "3.0.1",
-      "resolved": "http://192.168.6.13:8082/repository/npm_all/internal-ip/-/internal-ip-3.0.1.tgz",
-      "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=",
-      "dev": true,
-      "requires": {
-        "default-gateway": "^2.6.0",
-        "ipaddr.js": "^1.5.2"
-      }
-    },
     "interpret": {
     "interpret": {
       "version": "1.4.0",
       "version": "1.4.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/interpret/-/interpret-1.4.0.tgz",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/interpret/-/interpret-1.4.0.tgz",
@@ -7006,12 +6963,6 @@
       "resolved": "http://192.168.6.13:8082/repository/npm_all/ip/-/ip-1.1.5.tgz",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/ip/-/ip-1.1.5.tgz",
       "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
       "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
     },
     },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "http://192.168.6.13:8082/repository/npm_all/ip-regex/-/ip-regex-2.1.0.tgz",
-      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
-      "dev": true
-    },
     "ipaddr.js": {
     "ipaddr.js": {
       "version": "1.9.1",
       "version": "1.9.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -16413,6 +16364,16 @@
             "xregexp": "4.0.0"
             "xregexp": "4.0.0"
           }
           }
         },
         },
+        "default-gateway": {
+          "version": "2.7.2",
+          "resolved": "http://192.168.6.13:8082/repository/npm_all/default-gateway/-/default-gateway-2.7.2.tgz",
+          "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=",
+          "dev": true,
+          "requires": {
+            "execa": "^0.10.0",
+            "ip-regex": "^2.1.0"
+          }
+        },
         "del": {
         "del": {
           "version": "3.0.0",
           "version": "3.0.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/del/-/del-3.0.0.tgz",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/del/-/del-3.0.0.tgz",
@@ -16427,6 +16388,21 @@
             "rimraf": "^2.2.8"
             "rimraf": "^2.2.8"
           }
           }
         },
         },
+        "execa": {
+          "version": "0.10.0",
+          "resolved": "http://192.168.6.13:8082/repository/npm_all/execa/-/execa-0.10.0.tgz",
+          "integrity": "sha1-/0Vqj1P5D47MxxqW0Rvfx/CCy1A=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^6.0.0",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
         "find-up": {
         "find-up": {
           "version": "3.0.0",
           "version": "3.0.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/find-up/-/find-up-3.0.0.tgz",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/find-up/-/find-up-3.0.0.tgz",
@@ -16452,6 +16428,12 @@
           "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
           "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
           "dev": true
           "dev": true
         },
         },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "http://192.168.6.13:8082/repository/npm_all/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
         "glob-parent": {
         "glob-parent": {
           "version": "3.1.0",
           "version": "3.1.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-3.1.0.tgz",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-3.1.0.tgz",
@@ -16500,6 +16482,22 @@
           "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
           "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
           "dev": true
           "dev": true
         },
         },
+        "internal-ip": {
+          "version": "3.0.1",
+          "resolved": "http://192.168.6.13:8082/repository/npm_all/internal-ip/-/internal-ip-3.0.1.tgz",
+          "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=",
+          "dev": true,
+          "requires": {
+            "default-gateway": "^2.6.0",
+            "ipaddr.js": "^1.5.2"
+          }
+        },
+        "ip-regex": {
+          "version": "2.1.0",
+          "resolved": "http://192.168.6.13:8082/repository/npm_all/ip-regex/-/ip-regex-2.1.0.tgz",
+          "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+          "dev": true
+        },
         "is-binary-path": {
         "is-binary-path": {
           "version": "1.0.1",
           "version": "1.0.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-1.0.1.tgz",

+ 1 - 1
package.json

@@ -41,7 +41,7 @@
     "postcss-salad": "^2.0.1",
     "postcss-salad": "^2.0.1",
     "request": "^2.88.2",
     "request": "^2.88.2",
     "screenfull": "^4.0.0",
     "screenfull": "^4.0.0",
-    "ui-component-v4": "^1.2.19",
+    "ui-component-v4": "^1.2.41",
     "ui-gojs": "^2.1.9",
     "ui-gojs": "^2.1.9",
     "ui-jz-v4-common": "^1.2.222",
     "ui-jz-v4-common": "^1.2.222",
     "vue": "2.6.10",
     "vue": "2.6.10",

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

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

+ 24 - 24
src/assets/style/project.scss

@@ -8,30 +8,30 @@
 	width: 100% !important;
 	width: 100% !important;
 }
 }
 
 
-// 重置滚动条样式
-::-webkit-scrollbar {
-    width: 6px;
-    height: 6px;
-    background-color: rgba(0, 0, 0, 0);
-    transition: opacity 120ms ease-out;
-	cursor: pointer;
-}
-
-/*定义滚动条轨道 内阴影+圆角*/
-::-webkit-scrollbar-track {
-    -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.09);
-    border-radius: 4px;
-    background-color: rgba(0, 0, 0, 0);
-	cursor: pointer;
-}
-
-/*定义滑块 内阴影+圆角*/
-::-webkit-scrollbar-thumb {
-    border-radius: 4px;
-    -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, .09);
-    background-color: rgba(0, 0, 0, .09);
-	cursor: pointer;
-}
+// // 重置滚动条样式
+// ::-webkit-scrollbar {
+//     width: 17px;
+//     height: 17px;
+//     background-color: rgba(0, 0, 0, 0);
+//     transition: opacity 120ms ease-out;
+// 	cursor: pointer;
+// }
+
+// /*定义滚动条轨道 内阴影+圆角*/
+// ::-webkit-scrollbar-track {
+//     -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.09);
+//     border-radius: 4px;
+//     background-color: rgba(0, 0, 0, 0);
+// 	cursor: pointer;
+// }
+
+// /*定义滑块 内阴影+圆角*/
+// ::-webkit-scrollbar-thumb {
+//     border-radius: 4px;
+//     -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, .09);
+//     background-color: rgba(0, 0, 0, .09);
+// 	cursor: pointer;
+// }
 
 
 
 
 
 

+ 1 - 1
src/pages/admin-manage/add.vue

@@ -34,7 +34,7 @@
                         </el-form-item>
                         </el-form-item>
                     </dg-col>
                     </dg-col>
                     <dg-col :span="12">
                     <dg-col :span="12">
-                        <el-form-item label="所属单位">
+                        <el-form-item label="单位名称">
                             <org v-model="tempOrgId" :key="orgKey" type="APP" />
                             <org v-model="tempOrgId" :key="orgKey" type="APP" />
                         </el-form-item>
                         </el-form-item>
                     </dg-col>
                     </dg-col>

+ 5 - 5
src/pages/common/new-table/index.vue

@@ -22,7 +22,7 @@
       <dg-table-column v-if="selection" type="selection" reserve-selection width="55" align="center" />
       <dg-table-column v-if="selection" type="selection" reserve-selection width="55" align="center" />
       <dg-table-column type="index" label="序号" width="75" align="center" />
       <dg-table-column type="index" label="序号" width="75" align="center" />
       <template v-for="item in tableHeader">
       <template v-for="item in tableHeader">
-        <dg-table-column :key="item.id" v-bind="item" align="center">
+        <dg-table-column :key="item[rowKey]" v-bind="item" align="center">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
             <span v-if="item.dateFormat">{{ row[item.prop] | dateFormatter(item.dateFormat) }}</span>
             <span v-if="item.dateFormat">{{ row[item.prop] | dateFormatter(item.dateFormat) }}</span>
             <slot v-if="item.custom" v-bind:row="scope.row" :name="item.prop"></slot>
             <slot v-if="item.custom" v-bind:row="scope.row" :name="item.prop"></slot>
@@ -117,9 +117,9 @@ export default {
         let rowKeys = [];
         let rowKeys = [];
         for (let j = 0; j < content.length; j++) {
         for (let j = 0; j < content.length; j++) {
           const cItem = content[j];
           const cItem = content[j];
-          const index = this.newChooseArr.findIndex((item) => (item.id || item) == cItem.id);
+          const index = this.newChooseArr.findIndex((item) => (item[this.rowKey] || item) == cItem[this.rowKey]);
           if (index > -1) {
           if (index > -1) {
-            rowKeys.push(this.newChooseArr[index].id || this.newChooseArr[index]);
+            rowKeys.push(this.newChooseArr[index][this.rowKey]|| this.newChooseArr[index]);
           }
           }
         }
         }
         setTimeout(() => {
         setTimeout(() => {
@@ -140,7 +140,7 @@ export default {
      */
      */
     handleSelect(selection, row) {
     handleSelect(selection, row) {
       let copyAttr = _.cloneDeep(this.newChooseArr);
       let copyAttr = _.cloneDeep(this.newChooseArr);
-      const index = this.newChooseArr.findIndex((item) => (item.id || item) == row.id);
+      const index = this.newChooseArr.findIndex((item) => (item[this.rowKey] || item) == row[this.rowKey]);
       if (index > -1) {
       if (index > -1) {
         copyAttr.splice(index, 1);
         copyAttr.splice(index, 1);
       } else {
       } else {
@@ -157,7 +157,7 @@ export default {
       this.currentPageContent.forEach((row) => {
       this.currentPageContent.forEach((row) => {
         // this.handleSelect([], element);
         // this.handleSelect([], element);
         let copyAttr = _.cloneDeep(this.newChooseArr);
         let copyAttr = _.cloneDeep(this.newChooseArr);
-        const index = this.newChooseArr.findIndex((item) => (item.id || item) == row.id);
+        const index = this.newChooseArr.findIndex((item) => (item[this.rowKey] || item) == row[this.rowKey]);
         if (checked) {
         if (checked) {
           if (index < 0) {
           if (index < 0) {
             copyAttr.push(row);
             copyAttr.push(row);

+ 1 - 1
src/pages/common/select-tree/index.vue

@@ -37,7 +37,7 @@ export default {
     },
     },
     placeholder: {
     placeholder: {
       type: String,
       type: String,
-      default: '请选择所属单位'
+      default: '请选择单位名称'
     },
     },
     filterable: {
     filterable: {
       type: Boolean,
       type: Boolean,

+ 1 - 1
src/pages/common/time-line/index.vue

@@ -29,7 +29,7 @@
                     <p class="line-sub-title">
                     <p class="line-sub-title">
                         操作人:
                         操作人:
                         <span class="line-sub-text">{{ childItem.operateUserName }}</span>
                         <span class="line-sub-text">{{ childItem.operateUserName }}</span>
-                        &nbsp;&nbsp;&nbsp; 所属机构
+                        &nbsp;&nbsp;&nbsp; 单位名称
                         <span class="line-sub-text">{{ childItem.operateOrgName }}</span>
                         <span class="line-sub-text">{{ childItem.operateOrgName }}</span>
                         &nbsp;&nbsp;&nbsp; 操作时间:
                         &nbsp;&nbsp;&nbsp; 操作时间:
                         <span class="line-sub-text">{{ childItem.operateTime }}</span>
                         <span class="line-sub-text">{{ childItem.operateTime }}</span>

+ 2 - 2
src/pages/data-auth-module/auth-object-manage/object-prop-manage/function-list.vue

@@ -16,10 +16,10 @@
             <el-form-item label="身份证号码">
             <el-form-item label="身份证号码">
                 <el-input clearable placeholder="请输入身份证号码" v-model="cardForm.name"></el-input>
                 <el-input clearable placeholder="请输入身份证号码" v-model="cardForm.name"></el-input>
             </el-form-item>
             </el-form-item>
-            <el-form-item label="所属单位">
+            <el-form-item label="单位名称">
                 <dg-tree-select
                 <dg-tree-select
                     v-model="cardForm.institution"
                     v-model="cardForm.institution"
-                    placeholder="请选择所属单位"
+                    placeholder="请选择单位名称"
                     :data="options"
                     :data="options"
                     clearable
                     clearable
                     filterable
                     filterable

+ 4 - 4
src/pages/data-auth-module/auth-subject-manage/DataConfig.js

@@ -25,7 +25,7 @@ const UserTableData = [
     prop: 'policeNumber'
     prop: 'policeNumber'
   },
   },
   {
   {
-    label: '所属机构',
+    label: '单位名称',
     custom: true,
     custom: true,
     prop: 'orgName'
     prop: 'orgName'
   },
   },
@@ -80,7 +80,7 @@ const cardPersonnelList = [
     prop: ''
     prop: ''
   },
   },
   {
   {
-    label: '所属单位',
+    label: '单位名称',
     prop: ''
     prop: ''
   }
   }
 ];
 ];
@@ -160,7 +160,7 @@ const typeData = {
     { label: '人员类型', value: 'userType', code: 'DM_MAN_TYPE' },
     { label: '人员类型', value: 'userType', code: 'DM_MAN_TYPE' },
     { label: '职级', value: 'title', code: 'DM_CERT_DUTY_LEVEL' },
     { label: '职级', value: 'title', code: 'DM_CERT_DUTY_LEVEL' },
     // { label: "用户类别", value: "userType", enum: "UserTypeEnum" },
     // { label: "用户类别", value: "userType", enum: "UserTypeEnum" },
-    { label: '所属机构', value: 'orgName' },
+    { label: '单位名称', value: 'orgName' },
     { label: '警衔', value: 'rank', code: 'DM_POLICE_RANK' },
     { label: '警衔', value: 'rank', code: 'DM_POLICE_RANK' },
     { label: '警种', value: 'policeCategory', code: 'T_MD_POLICE_TYPE' },
     { label: '警种', value: 'policeCategory', code: 'T_MD_POLICE_TYPE' },
     { label: '业务域', value: 'policeBusiness' }
     { label: '业务域', value: 'policeBusiness' }
@@ -170,7 +170,7 @@ const typeData = {
     { label: '性别', value: 'sex', code: 'DM_SEX' },
     { label: '性别', value: 'sex', code: 'DM_SEX' },
     { label: '身份证号码', value: 'idcard' },
     { label: '身份证号码', value: 'idcard' },
     { label: '编号', value: 'policeNumber' },
     { label: '编号', value: 'policeNumber' },
-    { label: '所属机构', value: 'orgName' },
+    { label: '单位名称', value: 'orgName' },
     { label: '人员类型', value: 'auxiliaryType', code: 'DM_AUXILIARY_TYPE' },
     { label: '人员类型', value: 'auxiliaryType', code: 'DM_AUXILIARY_TYPE' },
     // { label: "用户类别", value: "userType", enum: "UserTypeEnum" },
     // { label: "用户类别", value: "userType", enum: "UserTypeEnum" },
     { label: '业务域', value: 'policeBusiness' },
     { label: '业务域', value: 'policeBusiness' },

+ 2 - 2
src/pages/data-auth-module/auth-subject-manage/subject-prop-manage/personnel-list.vue

@@ -15,10 +15,10 @@
             <el-form-item label="身份证号码">
             <el-form-item label="身份证号码">
                 <el-input clearable placeholder="请输入身份证号码" v-model="cardForm.name"></el-input>
                 <el-input clearable placeholder="请输入身份证号码" v-model="cardForm.name"></el-input>
             </el-form-item>
             </el-form-item>
-            <el-form-item label="所属单位">
+            <el-form-item label="单位名称">
                 <dg-tree-select
                 <dg-tree-select
                     v-model="cardForm.institution"
                     v-model="cardForm.institution"
-                    placeholder="请选择所属单位"
+                    placeholder="请选择单位名称"
                     :data="options"
                     :data="options"
                     clearable
                     clearable
                     filterable
                     filterable

+ 3 - 3
src/pages/data-auth-module/auth-subject-manage/user-prop-manage/index.vue

@@ -19,12 +19,12 @@
         <el-input v-model="form.idcard.value" placeholder="请输入身份证号码" clearable></el-input>
         <el-input v-model="form.idcard.value" placeholder="请输入身份证号码" clearable></el-input>
       </el-form-item>
       </el-form-item>
 
 
-      <el-form-item label="所属机构">
+      <el-form-item label="单位名称">
         <select-tree
         <select-tree
           ref="selectTree"
           ref="selectTree"
           api-name="getOrgTree"
           api-name="getOrgTree"
           @submitTreeValue="getTreeValue"
           @submitTreeValue="getTreeValue"
-          placeholder="请选择所属机构"
+          placeholder="请选择单位名称"
         ></select-tree>
         ></select-tree>
       </el-form-item>
       </el-form-item>
 
 
@@ -42,7 +42,7 @@
       <dg-button type="primary" @click="handleSynchro" icon="el-icon-refresh">同步</dg-button>
       <dg-button type="primary" @click="handleSynchro" icon="el-icon-refresh">同步</dg-button>
     </div>
     </div>
     <Table ref="myTable" :url="tableUrl" :headerData="UserTableData" :condition="form">
     <Table ref="myTable" :url="tableUrl" :headerData="UserTableData" :condition="form">
-      <!-- 所属机构 -->
+      <!-- 单位名称 -->
       <template #orgName="{ row }">
       <template #orgName="{ row }">
         <span v-if="row.userType + '' === '30'"></span>
         <span v-if="row.userType + '' === '30'"></span>
         <span v-else>{{ row.orgName }}</span>
         <span v-else>{{ row.orgName }}</span>

+ 2 - 2
src/pages/empower-manage/institutional-quotas-manage/edit.vue

@@ -8,7 +8,7 @@
         <!--操作内容导航-->
         <!--操作内容导航-->
         <div class="select-item-tab-text">
         <div class="select-item-tab-text">
             <p>
             <p>
-                当前管理员【 <span class="selected">{{ user.name || "" }}</span> 】,所属机构
+                当前管理员【 <span class="selected">{{ user.name || "" }}</span> 】,单位名称
                 <span class="selected">{{ user.securityOrgName }}</span> 】,所选应用名称【
                 <span class="selected">{{ user.securityOrgName }}</span> 】,所选应用名称【
                 <span class="selected">{{ row.name || "" }}</span> 】
                 <span class="selected">{{ row.name || "" }}</span> 】
             </p>
             </p>
@@ -513,7 +513,7 @@ export default {
             this.handleSearch();
             this.handleSearch();
         });
         });
 
 
-        // 顶级所属机构
+        // 顶级单位名称
         this.treeFirst = row.appOrgId; // 预存
         this.treeFirst = row.appOrgId; // 预存
 
 
         // 查询机构树
         // 查询机构树

+ 2 - 2
src/pages/empower-manage/institutional-quotas-manage/index.vue

@@ -6,13 +6,13 @@
 <template>
 <template>
   <dg-row>
   <dg-row>
     <el-form ref="form" :model="form" label-suffix=":" inline>
     <el-form ref="form" :model="form" label-suffix=":" inline>
-      <el-form-item label="所属机构">
+      <el-form-item label="单位名称">
         <select-tree
         <select-tree
           ref="selectTree"
           ref="selectTree"
           api-name="getOrgTree"
           api-name="getOrgTree"
           @submitTreeValue="getTreeValue"
           @submitTreeValue="getTreeValue"
           nodeKey="id"
           nodeKey="id"
-          placeholder="请选择所属机构"
+          placeholder="请选择单位名称"
         ></select-tree>
         ></select-tree>
       </el-form-item>
       </el-form-item>
       <el-form-item label="应用系统名称" prop="applyName.value">
       <el-form-item label="应用系统名称" prop="applyName.value">

+ 10 - 2
src/pages/layout/components/sidebar/index.vue

@@ -1,3 +1,8 @@
+<!--
+ * @Description: 
+ * @Autor: linqian
+ * @Date: 2021-04-06 08:44:43
+-->
 <template>
 <template>
     <div class="l-sidebar__container">
     <div class="l-sidebar__container">
         <div class="l-sidebar__header">
         <div class="l-sidebar__header">
@@ -68,6 +73,9 @@ export default {
     }
     }
 };
 };
 </script>
 </script>
-<style lang="scss">
-
+<style lang="scss" scoped>
+// /deep/ .l-sidebar__scrollbar {
+//     margin-bottom: -17px !important;
+//     margin-right: -17px !important;
+// }
 </style>
 </style>

+ 5 - 4
src/pages/list-manage/red-list-manage/component/app-func.vue

@@ -45,7 +45,7 @@
         </template>
         </template>
       </vxe-table-column>
       </vxe-table-column>
       <vxe-table-column type="seq" width="60" align="center" title="序号"></vxe-table-column>
       <vxe-table-column type="seq" width="60" align="center" title="序号"></vxe-table-column>
-      <vxe-table-column align="center" title="应用功能名称" field="label" :treeNode="true"></vxe-table-column>
+      <vxe-table-column align="left" header-align="center" title="应用功能名称" field="label" :treeNode="true"></vxe-table-column>
       <vxe-table-column align="center" title="红名单级别" field="level">
       <vxe-table-column align="center" title="红名单级别" field="level">
         <template #default="{ row }">
         <template #default="{ row }">
           {{ levelToLabel(row.level) }} 
           {{ levelToLabel(row.level) }} 
@@ -146,9 +146,10 @@ export default {
     // 打开弹窗
     // 打开弹窗
     openLayer(title, content, operate) {
     openLayer(title, content, operate) {
       const vm = this;
       const vm = this;
+      const checkboxReserveRecords = this.$refs.vxeGrid.getCheckboxReserveRecords(true);
       const checkboxRecords = this.$refs.vxeGrid.getCheckboxRecords(true);
       const checkboxRecords = this.$refs.vxeGrid.getCheckboxRecords(true);
       const indeterminateRecords = this.$refs.vxeGrid.getCheckboxIndeterminateRecords(true);
       const indeterminateRecords = this.$refs.vxeGrid.getCheckboxIndeterminateRecords(true);
-      const selectedData = [...checkboxRecords, ...indeterminateRecords].filter((item) => item.pid);
+      const selectedData = [...checkboxRecords, ...checkboxReserveRecords, ...indeterminateRecords].filter((item) => item.pid);
       const layer = this.$dgLayer({
       const layer = this.$dgLayer({
         title,
         title,
         content,
         content,
@@ -195,7 +196,7 @@ export default {
      */
      */
     handleSetListLevel() {
     handleSetListLevel() {
       if (!this.verify()) return;
       if (!this.verify()) return;
-      this.openLayer('批量设置红名单级', batchSetLevelAppFunc, 'set');
+      this.openLayer('批量设置红名单级', batchSetLevelAppFunc, 'set');
     },
     },
     /**
     /**
      * 批量移除
      * 批量移除
@@ -256,7 +257,7 @@ export default {
       });
       });
     },
     },
     /**
     /**
-     * 获取级级别枚举
+     * 获取级级别枚举
      */
      */
     getLevelEnum() {
     getLevelEnum() {
       return new Promise((resolve) => {
       return new Promise((resolve) => {

+ 8 - 9
src/pages/list-manage/red-list-manage/component/batch-add-appfunc.vue

@@ -36,7 +36,7 @@
         </template>
         </template>
       </vxe-table-column>
       </vxe-table-column>
       <vxe-table-column type="seq" width="60" align="center" title="序号"></vxe-table-column>
       <vxe-table-column type="seq" width="60" align="center" title="序号"></vxe-table-column>
-      <vxe-table-column align="center" title="应用功能名称" field="label" :treeNode="true"></vxe-table-column>
+      <vxe-table-column align="left" header-align="center" title="应用功能名称" field="label" :treeNode="true"></vxe-table-column>
     </vxe-table>
     </vxe-table>
 
 
     <div v-footer>
     <div v-footer>
@@ -84,8 +84,7 @@ export default {
       this.$refs.vxeGrid.toggleAllCheckboxRow();
       this.$refs.vxeGrid.toggleAllCheckboxRow();
     },
     },
     handleSearch() {
     handleSearch() {
-       this.dataSource = this.data.filter(item => item.label.indexOf(this.appName) > -1);
-
+      this.dataSource = this.data.filter((item) => item.label.indexOf(this.appName) > -1);
     },
     },
     handleCancel() {
     handleCancel() {
       this.$emit('close');
       this.$emit('close');
@@ -93,22 +92,22 @@ export default {
     handleSubmit() {
     handleSubmit() {
       // 获取全选和半选的节点
       // 获取全选和半选的节点
       const checkboxRecords = this.$refs.vxeGrid.getCheckboxRecords(true);
       const checkboxRecords = this.$refs.vxeGrid.getCheckboxRecords(true);
+      const checkboxReserveRecords = this.$refs.vxeGrid.getCheckboxReserveRecords(true);
       const indeterminateRecords = this.$refs.vxeGrid.getCheckboxIndeterminateRecords(true);
       const indeterminateRecords = this.$refs.vxeGrid.getCheckboxIndeterminateRecords(true);
-      const totalRecords = [...checkboxRecords, ...indeterminateRecords].filter((item) => item.appId);
+      const totalRecords = [...checkboxRecords, ...checkboxReserveRecords, ...indeterminateRecords].filter((item) => item.appId);
       if (totalRecords.length > 0) {
       if (totalRecords.length > 0) {
         this.setLevel(totalRecords);
         this.setLevel(totalRecords);
-
       } else {
       } else {
         this.$message.warning('请至少选择一个应用功能!');
         this.$message.warning('请至少选择一个应用功能!');
       }
       }
     },
     },
     /**
     /**
-     * 设置名单
+     * 设置名单级
      */
      */
     setLevel(selectedData) {
     setLevel(selectedData) {
       const vm = this;
       const vm = this;
       const layer = this.$dgLayer({
       const layer = this.$dgLayer({
-        title: '设置红名单级',
+        title: '设置红名单级',
         content: batchSetlevelAppFunc,
         content: batchSetlevelAppFunc,
         props: {
         props: {
           data: this.data,
           data: this.data,
@@ -129,12 +128,12 @@ export default {
         },
         },
         area: ['800px', '600px']
         area: ['800px', '600px']
       });
       });
-    },
+    }
   },
   },
   created() {
   created() {
     // 查询已被添加为红名单的功能id
     // 查询已被添加为红名单的功能id
     getFunIdsInRedList().then((res) => {
     getFunIdsInRedList().then((res) => {
-      this.value = this.getChildKeys(this.data, res.data.content)
+      this.value = this.getChildKeys(this.data, res.data.content);
     });
     });
   },
   },
   mounted() {}
   mounted() {}

+ 1 - 1
src/pages/list-manage/red-list-manage/component/batch-delete-appfunc.vue

@@ -50,7 +50,7 @@ export default {
         },
         },
         columns: [
         columns: [
           { type: 'seq', width: 60, align: 'center', title: '序号' },
           { type: 'seq', width: 60, align: 'center', title: '序号' },
-          { title: '应用功能名称', field: 'label', treeNode: true, align: 'center' }
+          { title: '应用功能名称', field: 'label', treeNode: true, align: 'left', headerAlign: 'center' }
         ]
         ]
       }
       }
     };
     };

+ 3 - 3
src/pages/list-manage/red-list-manage/component/batch-setlevel-appfunc.vue

@@ -1,5 +1,5 @@
 <!--
 <!--
-批量设置应用功能红名单
+批量设置应用功能红名单级
 @Author: linqian
 @Author: linqian
 @Date: 2021-07-014 09:46
 @Date: 2021-07-014 09:46
 -->
 -->
@@ -57,7 +57,7 @@ export default {
         },
         },
         columns: [
         columns: [
           { type: 'seq', width: 60, align: 'center', title: '序号' },
           { type: 'seq', width: 60, align: 'center', title: '序号' },
-          { title: '应用功能名称', field: 'label', treeNode: true, align: 'center' }
+          { title: '应用功能名称', field: 'label', treeNode: true, align: 'left', headerAlign: 'center' }
         ]
         ]
       }
       }
     };
     };
@@ -99,7 +99,7 @@ export default {
         });
         });
       });
       });
     },
     },
-    // 设置
+    // 设置级
     setLevel() {
     setLevel() {
       const params = {
       const params = {
         level: this.level,
         level: this.level,

+ 4 - 4
src/pages/list-manage/white-list-manage/component/batch-add-user.vue

@@ -12,9 +12,9 @@
           <el-input v-model="form.name.value" placeholder="请输入姓名" clearable style="width: 130px"></el-input>
           <el-input v-model="form.name.value" placeholder="请输入姓名" clearable style="width: 130px"></el-input>
         </el-form-item>
         </el-form-item>
         <el-form-item label="身份证号码">
         <el-form-item label="身份证号码">
-          <el-input v-model="form.idcard.value" placeholder="身份证号码" clearable></el-input>
+          <el-input v-model="form.idcard.value" placeholder="请输入身份证号码" clearable></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="所属单位">
+        <el-form-item label="单位名称">
           <select-tree
           <select-tree
             ref="selectTree"
             ref="selectTree"
             api-name="getOrgTree"
             api-name="getOrgTree"
@@ -117,12 +117,12 @@ export default {
       }
       }
     },
     },
     /**
     /**
-     * 设置名单
+     * 设置名单级
      */
      */
     setLevel(selectedData) {
     setLevel(selectedData) {
       const vm = this;
       const vm = this;
       const layer = this.$dgLayer({
       const layer = this.$dgLayer({
-        title: '设置白名单级',
+        title: '设置白名单级',
         content: batchSetlevelUser,
         content: batchSetlevelUser,
         props: {
         props: {
           selectedData,
           selectedData,

+ 1 - 1
src/pages/list-manage/white-list-manage/component/batch-delete-user.vue

@@ -1,5 +1,5 @@
 <!--
 <!--
-批量删除用户名单
+批量删除用户名单级
 @Author: linqian
 @Author: linqian
 @Date: 2021-07-13 10:17
 @Date: 2021-07-13 10:17
 -->
 -->

+ 5 - 5
src/pages/list-manage/white-list-manage/component/batch-setlevel-user.vue

@@ -1,5 +1,5 @@
 <!--
 <!--
-批量设置用户名单
+批量设置用户名单级
 @Author: linqian
 @Author: linqian
 @Date: 2021-07-08 11:31
 @Date: 2021-07-08 11:31
 -->
 -->
@@ -13,7 +13,7 @@
     <p style="margin-bottom: 5px">选中的人员列表:</p>
     <p style="margin-bottom: 5px">选中的人员列表:</p>
     <dg-table :data="selectedData" border row-key="id" paging-type="client" :pagination-total="selectedData.length">
     <dg-table :data="selectedData" border row-key="id" paging-type="client" :pagination-total="selectedData.length">
       <dg-table-column type="index" label="序号" width="75" align="center" />
       <dg-table-column type="index" label="序号" width="75" align="center" />
-      <dg-table-column label="姓名" prop="user">
+      <dg-table-column label="姓名" prop="user" align="center">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
           {{ row.name || row.userName }}
           {{ row.name || row.userName }}
         </template>
         </template>
@@ -52,7 +52,7 @@ export default {
           prop: 'orgName'
           prop: 'orgName'
         }
         }
       ],
       ],
-      level: '1' // 默认为低
+      level: '1' // 默认为低级
     };
     };
   },
   },
   computed: {},
   computed: {},
@@ -65,7 +65,7 @@ export default {
       const params = {
       const params = {
         level: this.level,
         level: this.level,
         subIds: this.selectedData.map((item) => item.id)
         subIds: this.selectedData.map((item) => item.id)
-      };
+      };   
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         saveWhiteList(params).then((res) => {
         saveWhiteList(params).then((res) => {
           resolve(res.data);
           resolve(res.data);
@@ -73,7 +73,7 @@ export default {
         });
         });
       });
       });
     },
     },
-    // 设置
+    // 设置级
     setLevel() {
     setLevel() {
       const params = {
       const params = {
         level: this.level,
         level: this.level,

+ 2 - 2
src/pages/list-manage/white-list-manage/component/user-list.vue

@@ -17,7 +17,7 @@
       <el-form-item label="身份证号码">
       <el-form-item label="身份证号码">
         <el-input v-model="form.idcard.value" placeholder="请输入身份证号码" clearable></el-input>
         <el-input v-model="form.idcard.value" placeholder="请输入身份证号码" clearable></el-input>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="所属单位">
+      <el-form-item label="单位名称">
         <select-tree ref="selectTree" api-name="getOrgTree" nodeKey="id" @submitTreeValue="getTreeValue"></select-tree>
         <select-tree ref="selectTree" api-name="getOrgTree" nodeKey="id" @submitTreeValue="getTreeValue"></select-tree>
       </el-form-item>
       </el-form-item>
 
 
@@ -184,7 +184,7 @@ export default {
     },
     },
     handleSetListLevel() {
     handleSetListLevel() {
       if (!this.verify()) return;
       if (!this.verify()) return;
-      this.openLayer('批量设置白名单级', batchSetlevelUser, 'set');
+      this.openLayer('批量设置白名单级', batchSetlevelUser, 'set');
     },
     },
     /**
     /**
      * 移除
      * 移除

+ 1 - 1
src/pages/log-manage/err-auth-earlywarning-manage/auth-earlywarning-info-detail.vue

@@ -15,7 +15,7 @@
             </dg-row>
             </dg-row>
             <dg-row :gutter="20">
             <dg-row :gutter="20">
                 <!-- <dg-col :span="12">
                 <!-- <dg-col :span="12">
-                    <el-form-item label="所属单位">
+                    <el-form-item label="单位名称">
                         <div class="u-detail__text" v-translate="{ code: 'DM_APPLY_STATUS' }">{{ sizeForm.state }}</div>
                         <div class="u-detail__text" v-translate="{ code: 'DM_APPLY_STATUS' }">{{ sizeForm.state }}</div>
                     </el-form-item>
                     </el-form-item>
                 </dg-col> -->
                 </dg-col> -->

+ 4 - 4
src/pages/log-report/persionnel-author-audit/timeLine.vue

@@ -27,7 +27,7 @@
                             <span class="line-sub-text">{{
                             <span class="line-sub-text">{{
                                 roleCreatorName == null || roleInfo.creator == "" ? "无" : roleCreatorName
                                 roleCreatorName == null || roleInfo.creator == "" ? "无" : roleCreatorName
                             }}</span>
                             }}</span>
-                            &nbsp;&nbsp;&nbsp; 所属机构
+                            &nbsp;&nbsp;&nbsp; 单位名称
                             <span class="line-sub-text">{{
                             <span class="line-sub-text">{{
                                 roleCreatorOrg == null || roleInfo.creator == "" ? "无" : roleCreatorOrg
                                 roleCreatorOrg == null || roleInfo.creator == "" ? "无" : roleCreatorOrg
                             }}</span>
                             }}</span>
@@ -48,7 +48,7 @@
                                     ? "无"
                                     ? "无"
                                     : childItem.managerName
                                     : childItem.managerName
                             }}</span>
                             }}</span>
-                            &nbsp;&nbsp;&nbsp; 所属机构
+                            &nbsp;&nbsp;&nbsp; 单位名称
                             <span class="line-sub-text">{{ childItem.managerOrg }}</span>
                             <span class="line-sub-text">{{ childItem.managerOrg }}</span>
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             <span class="line-sub-text">{{ childItem.createTime }}</span>
                             <span class="line-sub-text">{{ childItem.createTime }}</span>
@@ -66,7 +66,7 @@
                                     ? "无"
                                     ? "无"
                                     : childItem.createUserName
                                     : childItem.createUserName
                             }}</span>
                             }}</span>
-                            &nbsp;&nbsp;&nbsp; 所属机构
+                            &nbsp;&nbsp;&nbsp; 单位名称
                             <span class="line-sub-text">{{ childItem.createUserOrg }}</span>
                             <span class="line-sub-text">{{ childItem.createUserOrg }}</span>
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             <span class="line-sub-text">{{ childItem.createTime }}</span>
                             <span class="line-sub-text">{{ childItem.createTime }}</span>
@@ -93,7 +93,7 @@
                                     ? "无"
                                     ? "无"
                                     : childItem.managerName
                                     : childItem.managerName
                             }}</span>
                             }}</span>
-                            &nbsp;&nbsp;&nbsp; 所属机构
+                            &nbsp;&nbsp;&nbsp; 单位名称
                             <span class="line-sub-text">{{ childItem.managerOrg }}</span>
                             <span class="line-sub-text">{{ childItem.managerOrg }}</span>
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             &nbsp;&nbsp;&nbsp; 操作时间:
                             <span class="line-sub-text">{{ childItem.createTime }}</span>
                             <span class="line-sub-text">{{ childItem.createTime }}</span>

+ 1 - 1
src/pages/log-report/scope-author-audit/timeLine.vue

@@ -29,7 +29,7 @@
                     <p class="line-sub-title">
                     <p class="line-sub-title">
                         操作人:
                         操作人:
                         <span class="line-sub-text">{{ childItem.operateUserName }}</span>
                         <span class="line-sub-text">{{ childItem.operateUserName }}</span>
-                        &nbsp;&nbsp;&nbsp; 所属机构
+                        &nbsp;&nbsp;&nbsp; 单位名称
                         <span class="line-sub-text">{{ childItem.operateOrgName }}</span>
                         <span class="line-sub-text">{{ childItem.operateOrgName }}</span>
                         &nbsp;&nbsp;&nbsp; 操作时间:
                         &nbsp;&nbsp;&nbsp; 操作时间:
                         <span class="line-sub-text">{{ childItem.operateTime }}</span>
                         <span class="line-sub-text">{{ childItem.operateTime }}</span>

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

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

+ 54 - 28
src/pages/permission-selfhelp-manage/component/app-func-form.vue

@@ -36,13 +36,16 @@ export default {
     needFilter: {
     needFilter: {
       type: Boolean,
       type: Boolean,
       default: false
       default: false
-    }
+    },
+    type: String
   },
   },
   components: { transferTree },
   components: { transferTree },
   data() {
   data() {
     return {
     return {
       approveContent: this.value,
       approveContent: this.value,
       selectedValue: [],
       selectedValue: [],
+      havefunIdsOnlyChild: [],
+      havefunIds: [],
       data: []
       data: []
     };
     };
   },
   },
@@ -65,38 +68,51 @@ export default {
       return false;
       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 = [];
       let attr = [];
       for (let i = 0; i < funcAttr.length; i++) {
       for (let i = 0; i < funcAttr.length; i++) {
         const element = funcAttr[i].join('/');
         const element = funcAttr[i].join('/');
         attr.push(element);
         attr.push(element);
       }
       }
-      return attr.join('');
+      return attr.join('');
     },
     },
     handleCancel() {
     handleCancel() {
       this.$emit('close');
       this.$emit('close');
     },
     },
     handleSubmit() {
     handleSubmit() {
-      if (this.selectedValue.length == 0) {
-        this.$message.warning('请至少选择一条功能资源!');
-      } else {
-        const approveContent = this.nodeTransferLabel();
-        // 获取目标树所有的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) => {
-            return {
-              appId: item.appId,
-              funId: item.id
-            };
-          })
-          .filter((item) => item.appId);
+      // 申请访问的资源,剔除已经申请过的资源
+      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) => {
+          return {
+            appId: item.appId,
+            funId: item.id
+          };
+        })
+        .filter((item) => item.appId);
+      // 需要验证重复申请的资源,剔除该用户已经拥有的资源
+      const validRepeatNode = resourceInfos
+        .filter((item) => !this.havefunIds.includes(item.funId))
+        .map((item) => item.funId);
 
 
-        this.$emit('success', approveContent, this.selectedValue, resourceInfos);
+      // 已选资源有变更,则可以直接保存,无变更,则需要至少选中一条
+      // 判断有无变更的标准:resourceInfos的funId 与getSetFunIdsByUser方法返回的已选资源id作匹配
+      if (applyKeys.length == 0 && cancelKeys.length == 0) {
+        this.$message.warning('已选资源无变更。');
+      } else {
+        this.$emit('success', approveContent, cancelContent, this.selectedValue, resourceInfos);
       }
       }
     },
     },
     handleSearch(value, data) {
     handleSearch(value, data) {
@@ -110,9 +126,11 @@ export default {
         const params = {
         const params = {
           userId: this.$store.getters.user.id
           userId: this.$store.getters.user.id
         };
         };
-        userHasAuthFunIds(params).then((res) => {
-          resolve(res.data.content);
-        });
+        userHasAuthFunIds(params)
+          .then((res) => {
+            resolve(res.data.content);
+          })
+          .catch(() => resolve([]));
       });
       });
     },
     },
     // 获取全量的菜单树
     // 获取全量的菜单树
@@ -153,10 +171,18 @@ export default {
 
 
   async created() {
   async created() {
     this.data = await this.getAllTree();
     this.data = await this.getAllTree();
-    const funIds = await this.getSetFunIdsByUser();
-    this.selectedValue = [...this.selectKeys, ...funIds];
-    if (this.needFilter) {
-      this.selectedValue = this.getChildKeys(this.data, [...this.selectKeys, ...funIds]);
+    // 已有资源,包含了父节点
+    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)];
+      if (this.type == 'add') {
+        this.selectedValue = [...this.selectedValue, ...this.havefunIdsOnlyChild];
+      }
+    } else {
+      this.selectedValue = keys;
     }
     }
   },
   },
   mounted() {}
   mounted() {}

+ 44 - 31
src/pages/permission-selfhelp-manage/component/basic-form.vue

@@ -39,11 +39,11 @@
             </div>
             </div>
           </el-form-item>
           </el-form-item>
         </dg-col>
         </dg-col>
-        <dg-col :span="12" v-if="isDetail">
+        <!-- <dg-col :span="12" v-if="isDetail">
           <el-form-item label="流程编号:" prop="businessCode">
           <el-form-item label="流程编号:" prop="businessCode">
             <div>{{ sizeForm.businessCode }}</div>
             <div>{{ sizeForm.businessCode }}</div>
           </el-form-item>
           </el-form-item>
-        </dg-col>
+        </dg-col> -->
         <dg-col :span="12" v-if="isDetail">
         <dg-col :span="12" v-if="isDetail">
           <el-form-item label="审批单编号:" prop="applicantOrdNo">
           <el-form-item label="审批单编号:" prop="applicantOrdNo">
             <div>{{ sizeForm.applicantOrdNo }}</div>
             <div>{{ sizeForm.applicantOrdNo }}</div>
@@ -98,6 +98,11 @@
             </div>
             </div>
           </el-form-item>
           </el-form-item>
         </dg-col>
         </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'">
         <dg-col :span="12" v-if="sizeForm.applyType == 'SERVICE_AUTH'">
           <el-form-item label="应用方:" prop="applyId">
           <el-form-item label="应用方:" prop="applyId">
             <div v-if="isDetail">{{ sizeForm.applyId }}</div>
             <div v-if="isDetail">{{ sizeForm.applyId }}</div>
@@ -107,14 +112,7 @@
           </el-form-item>
           </el-form-item>
         </dg-col>
         </dg-col>
       </dg-row>
       </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-row>
         <dg-col :span="24">
         <dg-col :span="24">
           <!-- <component :is="approveComponent"></component> -->
           <!-- <component :is="approveComponent"></component> -->
@@ -306,6 +304,11 @@ export default {
       rules: {
       rules: {
         flowContent: { required: true, message: '请选择审批内容', trigger: 'change' },
         flowContent: { required: true, message: '请选择审批内容', trigger: 'change' },
         applyType: { required: true, message: '请选择审批类型', trigger: 'change' },
         applyType: { required: true, message: '请选择审批类型', trigger: 'change' },
+        flowTitle: { required: true, message: '请输入审批单标题', trigger: 'change' },
+        applicantName: { required: true, message: '请输入申请人姓名', trigger: 'change' },
+        applicantIdcard: { required: true, message: '请输入申请人身份证号码', trigger: 'change' },
+        applicantOrgCode: { required: true, message: '请输入申请人单位代码', trigger: 'change' },
+        applicantOrgName: { required: true, message: '请输入申请人单位名称', trigger: 'change' },
         processName: { required: true, message: '请输入流程名称', trigger: 'change' },
         processName: { required: true, message: '请输入流程名称', trigger: 'change' },
         applyReason: [{ required: true, message: '请输入申请理由', trigger: 'change' }],
         applyReason: [{ required: true, message: '请输入申请理由', trigger: 'change' }],
         applicantPhoneNo: [
         applicantPhoneNo: [
@@ -345,9 +348,16 @@ export default {
       applyContentCom: appFuncForm,
       applyContentCom: appFuncForm,
       show: false,
       show: false,
       applyContentOperateObj: {
       applyContentOperateObj: {
-        'function-auth-apply': '申请访问资源:',
-        'service-auth-apply': '申请服务:'
-      }
+        'function-auth-apply': {
+          applyText: '申请访问资源:',
+          cancelText: '申请撤销资源:'
+        },
+        'service-auth-apply': {
+          applyText: '申请服务:',
+          cancelText: '申请撤销服务:'
+        }
+      },
+      needFilter: true
     };
     };
   },
   },
   components: {},
   components: {},
@@ -358,8 +368,11 @@ export default {
     flowContentStr() {
     flowContentStr() {
       let str = '';
       let str = '';
       if (this.sizeForm.flowContent) {
       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;
       return str;
     }
     }
@@ -367,7 +380,6 @@ export default {
   watch: {
   watch: {
     'sizeForm.applyType': {
     'sizeForm.applyType': {
       handler(val) {
       handler(val) {
-        // this.sizeForm.applicantId = val;
         let component;
         let component;
         if (val == 'DATA_AUTH') {
         if (val == 'DATA_AUTH') {
           component = dataSourceForm;
           component = dataSourceForm;
@@ -466,25 +478,26 @@ export default {
     // 选择
     // 选择
     handleChoice() {
     handleChoice() {
       const vm = this;
       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({
       const layer = this.$dgLayer({
         title: '选择资源',
         title: '选择资源',
         shadow: [0.4, '#fff'],
         shadow: [0.4, '#fff'],
         props: {
         props: {
-          selectKeys: keys,
-          needFilter: true
+          selectKeys: this.applySelectKeys,
+          needFilter: this.needFilter,
+          type: this.type
         },
         },
         content: this.applyContentCom,
         content: this.applyContentCom,
         area: ['1200px', '700px'],
         area: ['1200px', '700px'],
         on: {
         on: {
-          success(approveContent, selectKeys, resourceInfos = []) {
+          success(visitResourceName, cancelResourceName, selectKeys, resourceInfos = []) {
             vm.sizeForm.resourceInfos = resourceInfos;
             vm.sizeForm.resourceInfos = resourceInfos;
             vm.applySelectKeys = selectKeys;
             vm.applySelectKeys = selectKeys;
             const visitorName =
             const visitorName =
               vm.sizeForm.applyType !== 'SERVICE_AUTH' ? vm.sizeForm.applicantName : vm.sizeForm.applyId;
               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.sizeForm.flowContent = JSON.stringify(resourceObj);
+            vm.needFilter = false;
             layer.close(layer.dialogIndex);
             layer.close(layer.dialogIndex);
           },
           },
           close() {
           close() {
@@ -542,23 +555,23 @@ export default {
           resourceInfos,
           resourceInfos,
           ...otherInfo
           ...otherInfo
         };
         };
+        this.applySelectKeys = this.sizeForm.resourceInfos.map((item) => item.funId);
         this.show = true;
         this.show = true;
       });
       });
     }
     }
   },
   },
   created() {
   created() {
-    const { name, idcard, securityOrg, securityOrgName, mobile, id } = this.$store.getters.user;
+    const { name, idcard, securityOrgs, securityOrgName, mobile, id } = this.$store.getters.user;
     if (!this.applyOrdNo) {
     if (!this.applyOrdNo) {
       this.sizeForm = {
       this.sizeForm = {
-        // 流程标题
         flowTitle: '',
         flowTitle: '',
-        applicantIdcard: idcard, // 申请人身份证号
-        applicantName: name, // 申请人姓名
-        applicantOrgCode: securityOrg, // 申请人机构代码
-        applicantOrgName: securityOrgName, //申请人机构名称
-        applicantPhoneNo: mobile, // 申请人号码
-        flowContent: '', // 审核内容
-        applyReason: '', // 申请原因
+        applicantIdcard: idcard,
+        applicantName: name,
+        applicantOrgCode: securityOrgs[0],
+        applicantOrgName: securityOrgName,
+        applicantPhoneNo: mobile,
+        flowContent: '',
+        applyReason: '',
         businessCode: '',
         businessCode: '',
         processType: '',
         processType: '',
         operateType: '', // 1--保存  2--提交
         operateType: '', // 1--保存  2--提交

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

@@ -65,8 +65,9 @@ export default {
         this.$message.warning('请至少选择一条数据资源!');
         this.$message.warning('请至少选择一条数据资源!');
       } else {
       } else {
         const approveContent = targetData.map(item => item.serviceName).join(",");
         const approveContent = targetData.map(item => item.serviceName).join(",");
+        const cancelContent = "";
         const selectedValue = targetData.map(item => item.id);
         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('请至少选择一条服务资源!');
         this.$message.warning('请至少选择一条服务资源!');
       } else {
       } else {
         const approveContent = targetData.map(item => item.serviceName).join(",");
         const approveContent = targetData.map(item => item.serviceName).join(",");
+        const cancelContent = "";
         const selectedValue = targetData.map(item => item.id);
         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>
         </dg-select>
       </el-form-item>
       </el-form-item>
       <el-form-item label="创建时间">
       <el-form-item label="创建时间">
-          <!-- value-format="yyyyMMddHHmmss" -->
-          <!-- :default-time="['00:00:00', '23:59:59']" -->
-
-
         <dg-date-picker
         <dg-date-picker
           v-model="form.createTime.value"
           v-model="form.createTime.value"
           type="daterange"
           type="daterange"
@@ -38,7 +34,9 @@
       </el-form-item>
       </el-form-item>
     </el-form>
     </el-form>
     <dg-row zebra="10px">
     <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>
     </dg-row>
     <!-- 表格 -->
     <!-- 表格 -->
     <Table ref="myTable" :url="tableUrl" :headerData="tableHeader" :condition="form">
     <Table ref="myTable" :url="tableUrl" :headerData="tableHeader" :condition="form">
@@ -118,7 +116,7 @@ export default {
     handleApplyPermission(applyOrdNo) {
     handleApplyPermission(applyOrdNo) {
       const vm = this;
       const vm = this;
       const layer = this.$dgLayer({
       const layer = this.$dgLayer({
-        title: applyOrdNo ? '编辑' : '权限自助申请',
+        title: applyOrdNo ? '编辑' : '权限变更申请',
         props: {
         props: {
           applyOrdNo: applyOrdNo ? applyOrdNo : '',
           applyOrdNo: applyOrdNo ? applyOrdNo : '',
           type: applyOrdNo ? 'edit' : 'add'
           type: applyOrdNo ? 'edit' : 'add'

+ 113 - 111
src/router/lxr_permission.js

@@ -1,45 +1,48 @@
-import router from "@/router/index.js";
-import store from "@/store";
-import NProgress from "nprogress"; // progress bar
-import "./progress.css";
-import {  getUserName } from "@/utils/auth"; // getToken from cookie
-import _ from "lodash";
+import router from '@/router/index.js';
+import store from '@/store';
+import NProgress from 'nprogress'; // progress bar
+import './progress.css';
+import { getUserName } from '@/utils/auth'; // getToken from cookie
+import _ from 'lodash';
 
 
 const { initSettings, getSetting, getSettings } = window.systemParamsUtils;
 const { initSettings, getSetting, getSettings } = window.systemParamsUtils;
 
 
 NProgress.configure({ showSpinner: false }); // NProgress Configuration
 NProgress.configure({ showSpinner: false }); // NProgress Configuration
 
 
 // 合并白名单列表
 // 合并白名单列表
-const WHITE_LIST = getSetting("WHITE_LIST");
-let whiteList = [ "/auth-redirect"]; // no redirect whitelist
+const WHITE_LIST = getSetting('WHITE_LIST');
+let whiteList = ['/auth-redirect']; // no redirect whitelist
 if (WHITE_LIST instanceof Array) {
 if (WHITE_LIST instanceof Array) {
-    whiteList = whiteList.concat(WHITE_LIST);
+  whiteList = whiteList.concat(WHITE_LIST);
 }
 }
 
 
 router.beforeEach((to, from, next) => {
 router.beforeEach((to, from, next) => {
-    NProgress.start(); // start progress bar
-    if (_.isEmpty(getSettings())) {
-        initSettings().then(() => location.reload()); // 如果配置信息为空,则先加载配置信息
-    } else if (_.isEmpty(store.state.user.info) && whiteList.indexOf(to.path) == -1) {
-        checkLogin(to, next); // 检查是否登录
-    } else {
-        next();
-    }
+  NProgress.start(); // start progress bar
+  init(to, next);
 });
 });
 
 
+async function init(to, next) {
+  if (_.isEmpty(getSettings())) {
+    initSettings().then(() => location.reload()); // 如果配置信息为空,则先加载配置信息
+  } else if (_.isEmpty(store.state.user.info) && whiteList.indexOf(to.path) == -1) {
+    checkLogin(to, next); // 检查是否登录
+  } else {
+    next();
+  }
+}
 
 
 // permission judge function
 // permission judge function
 function hasPermission(userPermissions = [], routePermissions = []) {
 function hasPermission(userPermissions = [], routePermissions = []) {
-    if (routePermissions && routePermissions.length === 0) {
-        return true;
-    }
-    return userPermissions.some(userPermission => {
-        return routePermissions.indexOf(userPermission) >= 0;
-    });
+  if (routePermissions && routePermissions.length === 0) {
+    return true;
+  }
+  return userPermissions.some(userPermission => {
+    return routePermissions.indexOf(userPermission) >= 0;
+  });
 }
 }
 
 
 router.afterEach(() => {
 router.afterEach(() => {
-    NProgress.done(); // finish progress bar
+  NProgress.done(); // finish progress bar
 });
 });
 
 
 /**
 /**
@@ -49,14 +52,13 @@ router.afterEach(() => {
  * @param next
  * @param next
  */
  */
 function noNeedLogin(to, from, next) {
 function noNeedLogin(to, from, next) {
-    if (store.getters.addRouters.length === 0) {
-        generateRoutes([], next, to);
-    } else {
-        next();
-    }
+  if (store.getters.addRouters.length === 0) {
+    generateRoutes([], next, to);
+  } else {
+    next();
+  }
 }
 }
 
 
-
 /**
 /**
  * 检查是否在白名单中,进行页面跳转
  * 检查是否在白名单中,进行页面跳转
  * @param to
  * @param to
@@ -64,18 +66,18 @@ function noNeedLogin(to, from, next) {
  * @param link
  * @param link
  */
  */
 function checkIsInWhiteList(to, next, link, result) {
 function checkIsInWhiteList(to, next, link, result) {
-    if (whiteList.indexOf(to.path) !== -1) {
-        next(); // 在免登录白名单,直接进入
-    } else if (result instanceof Promise) {
-        result.then(result => {
-            if (result && result.status === 403 && result.link) {
-                console.error("oauth2验证不通过,将跳转到登录页");
-            }
-        });
-    } else {
-        !link && next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
-        NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
-    }
+  if (whiteList.indexOf(to.path) !== -1) {
+    next(); // 在免登录白名单,直接进入
+  } else if (result instanceof Promise) {
+    result.then(result => {
+      if (result && result.status === 403 && result.link) {
+        console.error('oauth2验证不通过,将跳转到登录页');
+      }
+    });
+  } else {
+    !link && next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
+    NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
+  }
 }
 }
 
 
 /**
 /**
@@ -85,83 +87,83 @@ function checkIsInWhiteList(to, next, link, result) {
  * @param to
  * @param to
  */
  */
 function generateRoutes(permissions, next, to) {
 function generateRoutes(permissions, next, to) {
-    store.dispatch("GenerateRoutes", { permissions }).then(() => {
-        // 根据权限生成可访问的路由表
-        router.addRoutes(store.getters.addRouters); // 动态添加可访问路由表
+  store.dispatch('GenerateRoutes', { permissions }).then(() => {
+    // 根据权限生成可访问的路由表
+    router.addRoutes(store.getters.addRouters); // 动态添加可访问路由表
 
 
-        if (hasPermission(store.getters.permissions, to.meta.permission)) {
-            next({ ...to, replace: true });
-        } else {
-            next({
-                path: "/",
-                replace: true
-            });
-        }
-        // next({ ...to, replace: true }); // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
-    });
+    if (hasPermission(store.getters.permissions, to.meta.permission)) {
+      next({ ...to, replace: true });
+    } else {
+      next({
+        path: '/',
+        replace: true
+      });
+    }
+    // next({ ...to, replace: true }); // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
+  });
 }
 }
 
 
 function checkLogin(to, next) {
 function checkLogin(to, next) {
-    console.log(getUserName());
-    if (getUserName()) {
-        if (to.path === "/login") {
-            next({ path: "/" });
-            NProgress.done(); // if current page is dashboard will not trigger	afterEach hook, so manually handle it
-        } else {
-            let permissionsLength = store.getters.permissions.length;
-            if (!store.getters.name && !permissionsLength) {
-                try {
-                    // 获取用户信息
-                    // await ;
-                    store.dispatch("GetUserInfo").then(() => {
-                        let permissions = store.getters.permissions;
-                        generateRoutes(permissions, next, to);
-                    });
-                } catch (err) {
-                    store.dispatch("FedLogout").then(() => {
-                        if (!err.link) {
-                            next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
-                        } else {
-                            next({ path: "/" });
-                        }
-                    });
-                    // await store.dispatch("FedLogout")   // 如果获取用户信息失败,则将本地的用户信息相关的东西清空,并登出
-                    // if (!err.link) {
-                    //     next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
-                    // } else {
-                    //     next({ path: "/" });
-                    // }
-                }
+  console.log(getUserName());
+  if (getUserName()) {
+    if (to.path === '/login') {
+      next({ path: '/' });
+      NProgress.done(); // if current page is dashboard will not trigger	afterEach hook, so manually handle it
+    } else {
+      let permissionsLength = store.getters.permissions.length;
+      if (!store.getters.name && !permissionsLength) {
+        try {
+          // 获取用户信息
+          // await ;
+          store.dispatch('GetUserInfo').then(() => {
+            let permissions = store.getters.permissions;
+            generateRoutes(permissions, next, to);
+          });
+        } catch (err) {
+          store.dispatch('FedLogout').then(() => {
+            if (!err.link) {
+              next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
             } else {
             } else {
-                // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
-                // if (hasPermission(store.getters.roles, to.meta.roles)) {
-                next();
-                // } else {
-                //     next({
-                //         path: "/401",
-                //         replace: true,
-                //         query: { noGoBack: true }
-                //     });
-                // }
-                // 可删 ↑
+              next({ path: '/' });
             }
             }
+          });
+          // await store.dispatch("FedLogout")   // 如果获取用户信息失败,则将本地的用户信息相关的东西清空,并登出
+          // if (!err.link) {
+          //     next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
+          // } else {
+          //     next({ path: "/" });
+          // }
         }
         }
+      } else {
+        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
+        // if (hasPermission(store.getters.roles, to.meta.roles)) {
+        next();
+        // } else {
+        //     next({
+        //         path: "/401",
+        //         replace: true,
+        //         query: { noGoBack: true }
+        //     });
+        // }
+        // 可删 ↑
+      }
+    }
+  } else {
+    if (getSetting('BASE_API') === '/easy-mock') {
+      checkIsInWhiteList(to, next); // 检查是否在白名单中
     } else {
     } else {
-        if (getSetting("BASE_API") === "/easy-mock") {
-            checkIsInWhiteList(to, next); // 检查是否在白名单中
-        } else {
-            try {
-                store.dispatch("GetUserInfo").then(() => {
-                    window.location.reload();
-                });
-                // await store.dispatch("GetUserInfo")
-                // window.location.reload();
-            } catch (result) {
-                let link;
-                result && (link = result.link);
+      try {
+        store.dispatch('GetUserInfo').then(() => {
+          window.location.reload();
+        });
+        // await store.dispatch("GetUserInfo")
+        // window.location.reload();
+      } catch (result) {
+        let link;
+        result && (link = result.link);
 
 
-                checkIsInWhiteList(to, next, link, result); // 检查是否在白名单中
-            }
-        }
+        checkIsInWhiteList(to, next, link, result); // 检查是否在白名单中
+      }
     }
     }
+  }
 }
 }

+ 60 - 56
src/store/modules/app.js

@@ -1,65 +1,69 @@
-import Cookies from "js-cookie";
+import Cookies from 'js-cookie';
 
 
 const app = {
 const app = {
-    state: {
-        sidebar: {
-            opened: Cookies.get("sidebarStatus") ? !!+Cookies.get("sidebarStatus") : true,
-            withoutAnimation: false
-        },
-        device: "desktop",
-        language: Cookies.get("language") || "zh",
-        size: Cookies.get("size") || "medium"
+  state: {
+    sidebar: {
+      opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
+      withoutAnimation: false
     },
     },
-    mutations: {
-        TOGGLE_SIDEBAR: state => {
-            state.sidebar.opened = !state.sidebar.opened;
-            state.sidebar.withoutAnimation = false;
-            if (state.sidebar.opened) {
-                Cookies.set("sidebarStatus", 1);
-            } else {
-                Cookies.set("sidebarStatus", 0);
-            }
-        },
-        CLOSE_SIDEBAR: (state, withoutAnimation) => {
-            Cookies.set("sidebarStatus", 0);
-            state.sidebar.opened = false;
-            state.sidebar.withoutAnimation = withoutAnimation;
-        },
-        TOGGLE_DEVICE: (state, device) => {
-            state.device = device;
-        },
-        SET_LANGUAGE: (state, language) => {
-            state.language = language;
-            Cookies.set("language", language);
-        },
-        SET_SIZE: (state, size) => {
-            state.size = size;
-            Cookies.set("size", size);
-        }
+    device: 'desktop',
+    language: Cookies.get('language') || 'zh',
+    size: Cookies.get('size') || 'medium',
+    ip: ''
+  },
+  mutations: {
+    TOGGLE_SIDEBAR: state => {
+      state.sidebar.opened = !state.sidebar.opened;
+      state.sidebar.withoutAnimation = false;
+      if (state.sidebar.opened) {
+        Cookies.set('sidebarStatus', 1);
+      } else {
+        Cookies.set('sidebarStatus', 0);
+      }
     },
     },
-    actions: {
-        toggleSideBar({ commit }) {
-            commit("TOGGLE_SIDEBAR");
-        },
-        closeSideBar({ commit }, { withoutAnimation }) {
-            commit("CLOSE_SIDEBAR", withoutAnimation);
-        },
-        toggleDevice({ commit }, device) {
-            commit("TOGGLE_DEVICE", device);
-        },
-        setLanguage({ commit }, language) {
-            commit("SET_LANGUAGE", language);
-        },
-        setSize({ commit }, size) {
-            commit("SET_SIZE", size);
-        }
+    CLOSE_SIDEBAR: (state, withoutAnimation) => {
+      Cookies.set('sidebarStatus', 0);
+      state.sidebar.opened = false;
+      state.sidebar.withoutAnimation = withoutAnimation;
     },
     },
-    getters: {
-        sidebar: state => state.sidebar,
-        language: state => state.language,
-        size: state => state.size,
-        device: state => state.device
+    TOGGLE_DEVICE: (state, device) => {
+      state.device = device;
+    },
+    SET_LANGUAGE: (state, language) => {
+      state.language = language;
+      Cookies.set('language', language);
+    },
+    SET_SIZE: (state, size) => {
+      state.size = size;
+      Cookies.set('size', size);
+    },
+    SET_IP: (state, ip) => {
+      state.ip = ip;
+    }
+  },
+  actions: {
+    toggleSideBar({ commit }) {
+      commit('TOGGLE_SIDEBAR');
+    },
+    closeSideBar({ commit }, { withoutAnimation }) {
+      commit('CLOSE_SIDEBAR', withoutAnimation);
+    },
+    toggleDevice({ commit }, device) {
+      commit('TOGGLE_DEVICE', device);
+    },
+    setLanguage({ commit }, language) {
+      commit('SET_LANGUAGE', language);
+    },
+    setSize({ commit }, size) {
+      commit('SET_SIZE', size);
     }
     }
+  },
+  getters: {
+    sidebar: state => state.sidebar,
+    language: state => state.language,
+    size: state => state.size,
+    device: state => state.device
+  }
 };
 };
 
 
 export default app;
 export default app;

+ 1 - 1
src/utils/regular.js

@@ -1,7 +1,7 @@
 import _ from "lodash";
 import _ from "lodash";
 
 
 // 手机
 // 手机
-export const phone = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/;
+export const phone = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$/;
 // 固话
 // 固话
 export const tel = /^(\d{4}-)?\d{6,8}$/;
 export const tel = /^(\d{4}-)?\d{6,8}$/;
 // 邮箱
 // 邮箱

+ 144 - 151
src/utils/req.js

@@ -1,181 +1,174 @@
-import request from "./request";
-import { Loading } from "element-ui";
-import Qs from "qs";
-import Cookies from "js-cookie";
 
 
-
-/*
-    reponse
-    {
-        content: any
-        reulst: '状态码',
-        msg: '消息'
-    }
-*/
+import request from './request';
+import { Loading } from 'element-ui';
+import Qs from 'qs';
+import Cookies from 'js-cookie';
 
 
 // 兼容finally
 // 兼容finally
 if (!Promise.finally) {
 if (!Promise.finally) {
-    Promise.prototype.finally = function(callback) {
-        const P = this.constructor;
-        return this.then(
-            value => P.resolve(callback()).then(() => value),
-            reason =>
-                P.resolve(callback()).then(() => {
-                    throw reason;
-                })
-        );
-    };
+  Promise.prototype.finally = function(callback) {
+    const P = this.constructor;
+    return this.then(
+      value => P.resolve(callback()).then(() => value),
+      reason =>
+        P.resolve(callback()).then(() => {
+          throw reason;
+        })
+    );
+  };
 }
 }
 
 
-const isSuccess = val => val === 200 || val === "200";
+const isSuccess = val => val === 200 || val === '200';
 
 
 function showLoding(bool = false) {
 function showLoding(bool = false) {
-    if (!bool) {
-        return null;
-    }
-    return Loading.service({
-        lock: true,
-        spinner: "el-icon-loading",
-        background: "rgba(0, 0, 0, 0.8)",
-        fullscreen: true,
-        text: "数据加载中..."
-    });
+  if (!bool) {
+    return null;
+  }
+  return Loading.service({
+    lock: true,
+    spinner: 'el-icon-loading',
+    background: 'rgba(0, 0, 0, 0.8)',
+    fullscreen: true,
+    text: '数据加载中...'
+  });
 }
 }
 
 
 function hideLoading(loading) {
 function hideLoading(loading) {
-    loading.close();
+  loading.close();
 }
 }
 
 
 const axiosConfig = {
 const axiosConfig = {
-    headers: { userToken: Cookies.get('_idp_session') || 'testUserToken' }
+  headers: { 
+      userToken: Cookies.get('_idp_session') || null
+     }
 };
 };
 
 
 const axios = {
 const axios = {
-    request(option = {}) {
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .request(option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    if (isSuccess(data.result)) {
-                        resolve(data.content);
-                    }
-                    reject(data.msg);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
+  request(option = {}) {
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .request(option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          if (isSuccess(data.result)) {
+            resolve(data.content);
+          }
+          reject(data.msg);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
+        });
+    });
+  },
+  getBu(url, params, option = {}) {
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .get(url, { params }, option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          resolve(data);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
         });
         });
-    },
-    getBu(url, params, option = {}) {
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .get(url, { params }, option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    resolve(data);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
+    });
+  },
+  get(url, params, option = {}) {
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .get(url, { params }, option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          if (isSuccess(data.result)) {
+            resolve(data.content);
+          }
+          reject(data.msg);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
         });
         });
-    },
-    get(url, params, option = {}) {
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .get(url, { params }, option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    if (isSuccess(data.result)) {
-                        resolve(data.content);
-                    }
-                    reject(data.msg);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
+    });
+  },
+  post(url, params, option = {}) {
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .post(url, params, option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          if (isSuccess(data.result)) {
+            resolve(data.content);
+          }
+          reject(data.msg);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
         });
         });
-    },
-    post(url, params, option = {}) {
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .post(url, params, option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    if (isSuccess(data.result)) {
-                        resolve(data.content);
-                    }
-                    reject(data.msg);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
+    });
+  },
+  put(url, params, option = {}) {
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .put(url, params, option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          if (isSuccess(data.result)) {
+            resolve(data.content);
+          }
+          reject(data.msg);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
         });
         });
-    },
-    put(url, params, option = {}) {
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .put(url, params, option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    if (isSuccess(data.result)) {
-                        resolve(data.content);
-                    }
-                    reject(data.msg);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
+    });
+  },
+  delete(url, params, option = {}) {
+    option.params = params;
+    return new Promise((resolve, reject) => {
+      const loading = showLoding(option.loading);
+      request
+        .delete(url, option, { ...axiosConfig })
+        .then(({ data = {} }) => {
+          if (isSuccess(data.result)) {
+            resolve(data.content);
+          }
+          reject(data.msg);
+        })
+        .catch(error => reject(error))
+        .finally(() => {
+          loading && hideLoading(loading);
         });
         });
-    },
-    delete(url, params, option = {}) {
+    });
+  },
+  arraybuffer(url, params, option = {}) {
+    option.url = url;
+    option.method = (option.method || 'get').toLocaleLowerCase();
+    // option.headers = { 'Content-Type': 'application/json,charset=utf-8' };
+    option.responseType = 'arraybuffer';
+    switch (option.method) {
+      case 'get':
+      case 'delete':
         option.params = params;
         option.params = params;
-        return new Promise((resolve, reject) => {
-            const loading = showLoding(option.loading);
-            request
-                .delete(url, option, { ...axiosConfig })
-                .then(({ data = {} }) => {
-                    if (isSuccess(data.result)) {
-                        resolve(data.content);
-                    }
-                    reject(data.msg);
-                })
-                .catch(error => reject(error))
-                .finally(() => {
-                    loading && hideLoading(loading);
-                });
-        });
-    },
-    arraybuffer(url, params, option = {}) {
-        option.url = url;
-        option.method = (option.method || "get").toLocaleLowerCase();
-        // option.headers = { 'Content-Type': 'application/json,charset=utf-8' };
-        option.responseType = "arraybuffer";
-        switch (option.method) {
-            case "get":
-            case "delete":
-                option.params = params;
-                break;
-            default:
-                option.data = Qs.stringify(params);
-                break;
-        }
-        return request.request(option);
+        break;
+      default:
+        option.data = Qs.stringify(params);
+        break;
     }
     }
+    return request.request(option);
+  }
 };
 };
 
 
 export default axios;
 export default axios;
 
 
 export const restApi = (base, option = {}) => ({
 export const restApi = (base, option = {}) => ({
-    base,
-    table: `${base}s`,
-    detail: id => axios.get(`${base}/${id}`, null, option, { ...axiosConfig }),
-    save: data => axios.post(base, data, option, { ...axiosConfig }),
-    update: data => axios.put(`${base}/${data.id}`, data, option, { ...axiosConfig }),
-    del: id => axios.delete(`${base}/${id}`, null, option, { ...axiosConfig })
+  base,
+  table: `${base}s`,
+  detail: id => axios.get(`${base}/${id}`, null, option, { ...axiosConfig }),
+  save: data => axios.post(base, data, option, { ...axiosConfig }),
+  update: data => axios.put(`${base}/${data.id}`, data, option, { ...axiosConfig }),
+  del: id => axios.delete(`${base}/${id}`, null, option, { ...axiosConfig })
 });
 });

+ 0 - 2
src/utils/request-base.js

@@ -2,7 +2,6 @@ import axios from "axios";
 import { Loading } from "element-ui";
 import { Loading } from "element-ui";
 import Cookies from "js-cookie";
 import Cookies from "js-cookie";
 const { getSetting } = window.systemParamsUtils;
 const { getSetting } = window.systemParamsUtils;
-
 console.log("BASE_API:" + getSetting("BASE_API"));
 console.log("BASE_API:" + getSetting("BASE_API"));
 let loadingMap = {};
 let loadingMap = {};
 let loadingShow = function(config) {
 let loadingShow = function(config) {
@@ -30,7 +29,6 @@ const service = axios.create({
     baseURL: getSetting("BASE_API"), // api 的 base_url
     baseURL: getSetting("BASE_API"), // api 的 base_url
     timeout: getSetting("REQ_TIMEOUT") || 5000 // request timeout
     timeout: getSetting("REQ_TIMEOUT") || 5000 // request timeout
 });
 });
-
 // request interceptor
 // request interceptor
 service.interceptors.request.use(
 service.interceptors.request.use(
     config => {
     config => {

+ 2 - 2
static/themes/style/theme-default.css

@@ -19453,7 +19453,7 @@ html {
     transition: width 0.28s;
     transition: width 0.28s;
     -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
     -webkit-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
     box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
     box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-    width: 13rem;
+    width: 14rem;
 }
 }
 .l-sidebar__header {
 .l-sidebar__header {
     width: 100%;
     width: 100%;
@@ -19578,7 +19578,7 @@ html {
 .l-main-container {
 .l-main-container {
     position: relative;
     position: relative;
     height: 100%;
     height: 100%;
-    margin-left: 13rem;
+    margin-left: 14rem;
     -webkit-transition: margin-left 0.28s;
     -webkit-transition: margin-left 0.28s;
     transition: margin-left 0.28s;
     transition: margin-left 0.28s;
 }
 }