Browse Source

Merge branch 'feature/dashujuceping' into 'master'

Feature/dashujuceping

See merge request dcuc-tjdsj/auth-web!62
黄资权 2 years ago
parent
commit
6a1234962e

+ 1 - 0
config/dev.env.js

@@ -37,6 +37,7 @@ module.exports = merge(prodEnv, {
       //  target: "http://192.168.10.2:8871"
       //  target: "http://192.168.6.133:3471"
       // target: 'http://192.168.6.131:3561'
+      // target: "http://10.201.1.50:8871"
     }
   })
 });

+ 20 - 64
package-lock.json

@@ -885,7 +885,6 @@
       "version": "3.1.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
-      "dev": true,
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -1175,7 +1174,7 @@
       "version": "1.0.3",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/async-each/-/async-each-1.0.3.tgz",
       "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/async-foreach": {
@@ -2091,7 +2090,7 @@
     "node_modules/babel-polyfill": {
       "version": "6.26.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
-      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
       "license": "MIT",
       "dependencies": {
         "babel-runtime": "^6.26.0",
@@ -2431,7 +2430,6 @@
       "version": "2.2.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/binary-extensions/-/binary-extensions-2.2.0.tgz",
       "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -3023,7 +3021,6 @@
       "version": "3.5.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/chokidar/-/chokidar-3.5.2.tgz",
       "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3046,7 +3043,6 @@
       "version": "3.0.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/braces/-/braces-3.0.2.tgz",
       "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3060,7 +3056,6 @@
       "version": "7.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3074,7 +3069,6 @@
       "version": "7.0.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -3085,7 +3079,6 @@
       "version": "5.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -6912,7 +6905,6 @@
       "version": "2.3.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
-      "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
       "optional": true,
@@ -7099,7 +7091,6 @@
       "version": "5.1.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
-      "dev": true,
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -9125,7 +9116,6 @@
       "version": "2.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -9303,7 +9293,7 @@
       "version": "2.1.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -9336,7 +9326,7 @@
       "version": "4.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-glob/-/is-glob-4.0.1.tgz",
       "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "is-extglob": "^2.1.1"
@@ -10872,7 +10862,7 @@
       "version": "2.14.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/nan/-/nan-2.14.2.tgz",
       "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/nanomatch": {
@@ -11189,7 +11179,7 @@
       "version": "3.0.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -11919,7 +11909,7 @@
       "version": "1.0.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/path-exists": {
@@ -12047,7 +12037,6 @@
       "version": "2.3.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/picomatch/-/picomatch-2.3.0.tgz",
       "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -16886,7 +16875,6 @@
       "version": "3.6.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -16958,7 +16946,7 @@
     "node_modules/regenerator-runtime": {
       "version": "0.10.5",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
-      "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+      "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==",
       "license": "MIT"
     },
     "node_modules/regenerator-transform": {
@@ -17068,7 +17056,7 @@
       "version": "1.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
       "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true,
+      "devOptional": true,
       "license": "ISC"
     },
     "node_modules/renderkid": {
@@ -20156,7 +20144,7 @@
       "version": "1.2.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/upath/-/upath-1.2.0.tgz",
       "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "engines": {
         "node": ">=4",
@@ -20757,7 +20745,6 @@
       "version": "2.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
       "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -20768,7 +20755,6 @@
       "version": "2.0.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/anymatch/-/anymatch-2.0.0.tgz",
       "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-      "dev": true,
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -20780,7 +20766,6 @@
       "version": "2.1.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/normalize-path/-/normalize-path-2.1.1.tgz",
       "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -20794,7 +20779,6 @@
       "version": "1.13.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/binary-extensions/-/binary-extensions-1.13.1.tgz",
       "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -20806,7 +20790,6 @@
       "resolved": "http://192.168.6.13:8082/repository/npm_all/chokidar/-/chokidar-2.1.8.tgz",
       "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
       "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -20831,7 +20814,6 @@
       "resolved": "http://192.168.6.13:8082/repository/npm_all/fsevents/-/fsevents-1.2.13.tgz",
       "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
       "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-      "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
       "optional": true,
@@ -20850,7 +20832,6 @@
       "version": "3.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-3.1.0.tgz",
       "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -20862,7 +20843,6 @@
       "version": "3.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-glob/-/is-glob-3.1.0.tgz",
       "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -20876,7 +20856,6 @@
       "version": "1.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-1.0.1.tgz",
       "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -20890,7 +20869,6 @@
       "version": "2.2.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/readdirp/-/readdirp-2.2.1.tgz",
       "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -23001,7 +22979,6 @@
       "version": "3.1.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/anymatch/-/anymatch-3.1.2.tgz",
       "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
-      "dev": true,
       "optional": true,
       "requires": {
         "normalize-path": "^3.0.0",
@@ -23209,7 +23186,7 @@
       "version": "1.0.3",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/async-each/-/async-each-1.0.3.tgz",
       "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
-      "dev": true
+      "devOptional": true
     },
     "async-foreach": {
       "version": "0.1.3",
@@ -24006,7 +23983,7 @@
     "babel-polyfill": {
       "version": "6.26.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
-      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
       "requires": {
         "babel-runtime": "^6.26.0",
         "core-js": "^2.5.0",
@@ -24283,7 +24260,6 @@
       "version": "2.2.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/binary-extensions/-/binary-extensions-2.2.0.tgz",
       "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
-      "dev": true,
       "optional": true
     },
     "binaryextensions": {
@@ -24750,7 +24726,6 @@
       "version": "3.5.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/chokidar/-/chokidar-3.5.2.tgz",
       "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
-      "dev": true,
       "optional": true,
       "requires": {
         "anymatch": "~3.1.2",
@@ -24767,7 +24742,6 @@
           "version": "3.0.2",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/braces/-/braces-3.0.2.tgz",
           "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
-          "dev": true,
           "optional": true,
           "requires": {
             "fill-range": "^7.0.1"
@@ -24777,7 +24751,6 @@
           "version": "7.0.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/fill-range/-/fill-range-7.0.1.tgz",
           "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
-          "dev": true,
           "optional": true,
           "requires": {
             "to-regex-range": "^5.0.1"
@@ -24787,14 +24760,12 @@
           "version": "7.0.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/is-number/-/is-number-7.0.0.tgz",
           "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
-          "dev": true,
           "optional": true
         },
         "to-regex-range": {
           "version": "5.0.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/to-regex-range/-/to-regex-range-5.0.1.tgz",
           "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
-          "dev": true,
           "optional": true,
           "requires": {
             "is-number": "^7.0.0"
@@ -27652,7 +27623,6 @@
       "version": "2.3.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/fsevents/-/fsevents-2.3.2.tgz",
       "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
-      "dev": true,
       "optional": true
     },
     "fstream": {
@@ -27787,7 +27757,6 @@
       "version": "5.1.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
-      "dev": true,
       "optional": true,
       "requires": {
         "is-glob": "^4.0.1"
@@ -29296,7 +29265,6 @@
       "version": "2.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
-      "dev": true,
       "optional": true,
       "requires": {
         "binary-extensions": "^2.0.0"
@@ -29405,7 +29373,7 @@
       "version": "2.1.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
+      "devOptional": true
     },
     "is-finite": {
       "version": "1.1.0",
@@ -29423,7 +29391,7 @@
       "version": "4.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/is-glob/-/is-glob-4.0.1.tgz",
       "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
-      "dev": true,
+      "devOptional": true,
       "requires": {
         "is-extglob": "^2.1.1"
       }
@@ -30582,7 +30550,7 @@
       "version": "2.14.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/nan/-/nan-2.14.2.tgz",
       "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=",
-      "dev": true
+      "devOptional": true
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -30837,7 +30805,7 @@
       "version": "3.0.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
-      "dev": true
+      "devOptional": true
     },
     "normalize-range": {
       "version": "0.1.2",
@@ -31361,7 +31329,7 @@
       "version": "1.0.2",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
-      "dev": true
+      "devOptional": true
     },
     "path-exists": {
       "version": "3.0.0",
@@ -31453,7 +31421,6 @@
       "version": "2.3.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/picomatch/-/picomatch-2.3.0.tgz",
       "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
-      "dev": true,
       "optional": true
     },
     "pify": {
@@ -35038,7 +35005,6 @@
       "version": "3.6.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
-      "dev": true,
       "optional": true,
       "requires": {
         "picomatch": "^2.2.1"
@@ -35097,7 +35063,7 @@
     "regenerator-runtime": {
       "version": "0.10.5",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
-      "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+      "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w=="
     },
     "regenerator-transform": {
       "version": "0.10.1",
@@ -35179,7 +35145,7 @@
       "version": "1.1.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
       "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
+      "devOptional": true
     },
     "renderkid": {
       "version": "2.0.7",
@@ -37479,7 +37445,7 @@
       "version": "1.2.0",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/upath/-/upath-1.2.0.tgz",
       "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
-      "dev": true
+      "devOptional": true
     },
     "upper-case": {
       "version": "1.1.3",
@@ -37926,7 +37892,6 @@
       "version": "2.0.1",
       "resolved": "http://192.168.6.13:8082/repository/npm_all/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
       "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
-      "dev": true,
       "optional": true,
       "requires": {
         "chokidar": "^2.1.8"
@@ -37936,7 +37901,6 @@
           "version": "2.0.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/anymatch/-/anymatch-2.0.0.tgz",
           "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-          "dev": true,
           "optional": true,
           "requires": {
             "micromatch": "^3.1.4",
@@ -37947,7 +37911,6 @@
               "version": "2.1.1",
               "resolved": "http://192.168.6.13:8082/repository/npm_all/normalize-path/-/normalize-path-2.1.1.tgz",
               "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-              "dev": true,
               "optional": true,
               "requires": {
                 "remove-trailing-separator": "^1.0.1"
@@ -37959,14 +37922,12 @@
           "version": "1.13.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/binary-extensions/-/binary-extensions-1.13.1.tgz",
           "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-          "dev": true,
           "optional": true
         },
         "chokidar": {
           "version": "2.1.8",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/chokidar/-/chokidar-2.1.8.tgz",
           "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
-          "dev": true,
           "optional": true,
           "requires": {
             "anymatch": "^2.0.0",
@@ -37987,7 +37948,6 @@
           "version": "1.2.13",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/fsevents/-/fsevents-1.2.13.tgz",
           "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
-          "dev": true,
           "optional": true,
           "requires": {
             "bindings": "^1.5.0",
@@ -37998,7 +37958,6 @@
           "version": "3.1.0",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/glob-parent/-/glob-parent-3.1.0.tgz",
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-          "dev": true,
           "optional": true,
           "requires": {
             "is-glob": "^3.1.0",
@@ -38009,7 +37968,6 @@
               "version": "3.1.0",
               "resolved": "http://192.168.6.13:8082/repository/npm_all/is-glob/-/is-glob-3.1.0.tgz",
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-              "dev": true,
               "optional": true,
               "requires": {
                 "is-extglob": "^2.1.0"
@@ -38021,7 +37979,6 @@
           "version": "1.0.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-          "dev": true,
           "optional": true,
           "requires": {
             "binary-extensions": "^1.0.0"
@@ -38031,7 +37988,6 @@
           "version": "2.2.1",
           "resolved": "http://192.168.6.13:8082/repository/npm_all/readdirp/-/readdirp-2.2.1.tgz",
           "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-          "dev": true,
           "optional": true,
           "requires": {
             "graceful-fs": "^4.1.11",

+ 17 - 0
src/api/org-role-manage.js

@@ -0,0 +1,17 @@
+/**
+  机构角色授权管理
+ @author linqian
+ @Date 2023-06-07 14:18
+
+ */
+import axios from '@/utils/req';
+const baseUrl = '/authsvr/v2/role-org-auth';
+export const tableUrl = `${baseUrl}/page`;
+
+export function getChecked(orgId) {
+  return axios.get(`${baseUrl}/auth-role-ids`, { orgId });
+}
+
+export function save(data) {
+  return axios.post(`${baseUrl}/save`, data);
+}

+ 19 - 0
src/api/statistics.js

@@ -0,0 +1,19 @@
+/**
+  主客体统计
+ @author linqian
+ @Date 2023-06-07
+ */
+
+import axios from '@/utils/req';
+
+const baseUrl = '/statistics/v2';
+
+// 获取主体统计
+export function subStatisticsTable(data) {
+  return axios.post(`${baseUrl}/sub-statistics`, data);
+}
+
+// 获取客体统计
+export function objStatisticsTable(data) {
+  return axios.post(`${baseUrl}/obj-statistics`, data);
+}

+ 63 - 6
src/components/new-table/index.vue

@@ -27,7 +27,7 @@
     >
       <dg-table-column v-if="selection" type="selection" reserve-selection width="55" 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[rowKey]" v-bind="item" align="center">
           <template slot-scope="{ row }">
             <span v-if="item.dateFormat">{{ row[item.prop] | dateFormatter(item.dateFormat) }}</span>
@@ -94,7 +94,14 @@ export default {
     optColumnWidth: {
       type: [String, Number],
       default: '120'
-    }
+    },
+    // 默认选中的数据
+    defaultSelectRows: {
+      type: Array,
+      default: () => []
+    },
+    // 设置合并行根据的key
+    rowSpanKey: String
   },
   components: {},
   data() {
@@ -102,7 +109,18 @@ export default {
       newChooseArr: []
     };
   },
-  computed: {},
+  computed: {
+      
+  },
+  watch: {
+     defaultSelectRows: {
+       immediate: true,
+       deep: true,
+       handler(val) {
+         this.newChooseArr = this.$lodash.cloneDeep(val);
+       }
+     }
+  },
   methods: {
     /**
      * 查询
@@ -115,7 +133,10 @@ export default {
      */
     handleClearSelection() {
       this.$refs.baseTable.clearAll();
-      this.newChooseArr = [];
+      // this.newChooseArr = [];
+    },
+    toggleRowSelection(row, selected) {
+      this.$refs.baseTable.toggleRowSelection(row, selected);
     },
     handleSelectionChange(data) {
       this.$emit('handleSelectionChange', data);
@@ -141,6 +162,40 @@ export default {
       return conditions;
     },
 
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) {
+        return {
+          rowspan: row.rowspan,
+          colspan: 1
+        };
+      }
+    },
+
+    setRowSpans(tableData) {
+      // 先给所有的数据都加一个v.rowspan = 1
+      tableData.forEach((v) => {
+        v.rowspan = 1;
+      });
+      // 双层循环
+      for (let i = 0; i < tableData.length; i++) {
+        // 内层循环,上面已经给所有的行都加了v.rowspan = 1
+        // 这里进行判断
+        // 如果当前行的id和下一行的id相等
+        // 就把当前v.rowspan + 1
+        // 下一行的v.rowspan - 1
+        for (let j = i + 1; j < tableData.length; j++) {
+          //此处可根据相同字段进行合并,此处是根据的id
+          if (tableData[i][this.rowSpanKey] === tableData[i][this.rowSpanKey]) {
+            tableData[i].rowspan++;
+            tableData[j].rowspan--;
+          }
+        }
+        // 这里跳过已经重复的数据
+        i = i + tableData[i].rowspan - 1;
+      }
+      return tableData;
+    },
+
     /**
      * 进入页面默认选中设置
      */
@@ -163,7 +218,7 @@ export default {
 
       const result = {
         data: {
-          content,
+          content: this.rowSpanKey ? this.setRowSpans(content) : content,
           totalElements
         }
       };
@@ -217,7 +272,9 @@ export default {
       this.$emit('handleRowClick', row);
     }
   },
-  created() {},
+  created() {
+   
+  },
   mounted() {}
 };
 </script>

+ 47 - 0
src/components/scroll-card/index.vue

@@ -0,0 +1,47 @@
+<!--
+含有滚动条的卡片,一般是页面横向包含两列或以上卡片布局才需要用到此组件,为了保证各卡片等高
+@Author: linqian
+@Date: 2021-11-11 14:55
+-->
+<template>
+  <dg-col :span="colSpan">
+    <dg-card>
+      <template slot="header" v-if="$slots.cardHeader || header">
+        <div>{{ header }}</div>
+        <slot name="cardHeader"></slot>
+      </template>
+      <div :style="{ height: contentHeight }">
+        <dg-scrollbar>
+          <slot />
+        </dg-scrollbar>
+      </div>
+    </dg-card>
+  </dg-col>
+</template>
+
+<script>
+export default {
+  props: {
+    colSpan: {
+      type: Number,
+      default: 12
+    },
+    header: String,
+    contentHeight: {
+      type: String,
+      default: 'calc(100vh - 15.5rem)'
+    }
+  },
+  components: {},
+  data() {
+    return {};
+  },
+  computed: {},
+  methods: {},
+  created() {},
+  mounted() {}
+};
+</script>
+
+<style lang='scss'>
+</style>

+ 183 - 0
src/pages/appfun-auth-manage/org-role-manage/index.vue

@@ -0,0 +1,183 @@
+<!--
+机构授权
+@Author: linqian
+@Date: 2021-04-02 09:08
+-->
+<template>
+  <div>
+    <dg-row gutter="1rem">
+      <!-- 机构列表 -->
+      <dg-col :span="5">
+        <dg-card header="机构列表" class="box-card">
+          <org-tree
+            ref="tree"
+            class="u-pm__left"
+            treeHeight="calc(100vh - 18rem)"
+            :search="true"
+            paddingRight="15px"
+            @handleGetNode="handleGetNode"
+            @submitRootNode="handleGetNode"
+          ></org-tree>
+        </dg-card>
+      </dg-col>
+
+      <!-- 权限设置 -->
+      <scrollCard contentHeight="calc(100vh - 15.5rem)" :colSpan="19">
+        <template #cardHeader>
+          <div style="display: flex; justify-content: space-between">
+            <span>角色列表</span>
+            <dg-button type="primary" :icon="'保存' | optIcon" @click="handleSave()">保存</dg-button>
+          </div>
+        </template>
+
+        <!-- 角色搜索栏 -->
+        <search-bar :conditionForm="roleConditionForm" @submitSearch="receiveRoleSearch"></search-bar>
+
+        <!-- 角色列表 -->
+        <new-table
+          ref="table"
+          :condition="condition"
+          :tableUrl="tableUrl"
+          rowSpanKey="appId"
+          row-key="roleId"
+          @selection-change="handleSelectChange"
+          :defaultSelectRows="checkRoleList"
+          lazyLoad
+        >
+          <dg-table-column prop="appName" label="应用系统名称" min-width="120" align="center"> </dg-table-column>
+          <dg-table-column type="selection" reserve-selection width="50" align="center"></dg-table-column>
+          <dg-table-column prop="roleName" label="角色名称" align="center"> </dg-table-column>
+        </new-table>
+      </scrollCard>
+    </dg-row>
+  </div>
+</template>
+
+<script>
+import orgTree from '@/components/tree';
+import scrollCard from '@/components/scroll-card';
+import searchBar from '@/components/search-bar';
+import newTable from '@/components/new-table';
+import * as roleAuthApi from '@/api/role-auth-info';
+import * as Api from '@/api/org-role-manage';
+export default {
+  components: {
+    orgTree,
+    scrollCard,
+    searchBar,
+    newTable
+  },
+  data() {
+    return {
+      roleConditionForm: [
+        {
+          label: '应用系统名称',
+          name: 'appId',
+          op: '=',
+          value: '',
+          component: 'SelectApp',
+          apiUrl: roleAuthApi.roleViewApplication,
+          valueName: 'id',
+          labelName: 'name'
+        },
+        {
+          label: '角色名称',
+          name: 'roleName',
+          op: 'like',
+          value: '',
+          component: 'ElInput',
+          attr: {
+            style: 'width: 150px'
+          }
+        }
+      ],
+      condition: {
+        appId: {
+          value: '',
+          op: '='
+        },
+        roleName: {
+          value: '',
+          op: 'like'
+        }
+      },
+      orgId: "",
+      tableUrl: Api.tableUrl,
+      pageOptList: ['保存'],
+      checkRoleList: [],
+      deleteIds: [],
+      updateRoles: []
+    };
+  },
+  computed: {},
+  methods: {
+    /**
+     * @description: 获取机构节点
+     * @param {*} node
+     */
+    async handleGetNode(node) {
+      this.orgId = node.id;
+      this.refreshTable();
+    },
+    async refreshTable() {
+      this.$refs.table.handleClearSelection();
+      await this.getRoleChecked(this.orgId);
+      this.selectRoleList = [];
+      this.$refs.table.handleSearch();
+    },
+    receiveRoleSearch(condition) {
+      this.condition = { ...this.condition, ...condition };
+      this.refreshTable();
+    },
+
+    handleSelectChange(selection) {
+      this.selectRoleList = this.$lodash.cloneDeep(selection);
+    },
+
+    handleSave() {
+      if (this.roleTotal == 0) {
+        this.$message.warning('没有可保存的数据!');
+        return;
+      }
+
+      const delRoleIds = this.checkRoleList
+        .filter((item) => !this.selectRoleList.map((sItem) => sItem.roleId).includes(item))
+        .map((item) => item);
+
+      const addRoleIds = this.selectRoleList
+        .filter((item) => !this.checkRoleList.map((cItem) => cItem).includes(item.roleId))
+        .map((item) => item.roleId);
+
+      const saveParams = {
+        orgId: this.orgId,
+        addRoleIds,
+        delRoleIds
+      };
+
+      // 保存
+      Api.save(saveParams)
+        .then(() => {
+          this.$message.success('保存成功');
+          this.refreshTable();
+        })
+        .catch((err) => {
+          this.$message.error(err);
+        });
+    },
+    // 获取角色列表选中记录
+    getRoleChecked(orgId) {
+      return new Promise((resolve) => {
+        Api.getChecked(orgId).then((res) => {
+          this.checkRoleList = res;
+          resolve(res);
+        });
+      });
+    }
+  },
+  created() {},
+  mounted() {}
+};
+</script>
+
+<style lang='scss' scoped>
+</style>

+ 58 - 59
src/pages/appfun-auth-manage/role-auth-manage/persionView.vue

@@ -1,65 +1,61 @@
 <template>
   <dg-row gutter="1rem">
-    <dg-col :span="12">
-      <dg-card shadow="never" header="人员列表">
-        <!-- 人员搜索栏 -->
-        <search-bar :conditionForm="userConditionForm" @submitSearch="receiveSearch"></search-bar>
-        <!-- 人员列表 -->
-        <new-table
-          ref="table"
-          :tableUrl="userTableUrl"
-          :tableHeader="userTableHeader"
-          :condition="condition"
-          @handleRowClick="handleRowClick"
+    <scroll-card header="人员列表" contentHeight="calc(100vh - 19rem)" :colSpan="11">
+      <!-- 人员搜索栏 -->
+      <search-bar :conditionForm="userConditionForm" @submitSearch="receiveSearch"></search-bar>
+      <!-- 人员列表 -->
+      <new-table
+        ref="table"
+        :tableUrl="userTableUrl"
+        :tableHeader="userTableHeader"
+        :condition="condition"
+        @handleRowClick="handleRowClick"
+      >
+        <template #policeBusiness="{ row }">
+          {{ transferBusinessTag(row.policeBusiness) }}
+        </template>
+      </new-table>
+    </scroll-card>
+    <scrollCard header="角色列表" contentHeight="calc(100vh - 19rem)" :colSpan="13">
+      <!-- 角色搜索栏 -->
+      <search-bar :conditionForm="roleConditionForm" @submitSearch="receiveRoleSearch"></search-bar>
+      <!-- 角色操作栏 -->
+      <operate-bar :pageOptList="pageOptList" @submitPageOpt="receviceOpt"></operate-bar>
+      <!-- 角色列表 -->
+      <dg-table
+        ref="myRoleTable"
+        :data="tableData"
+        :pagination="false"
+        :span-method="objectSpanMethod"
+        border
+        style="width: 100%"
+        overflow="tooltip"
+        @selection-change="handleSelectChange"
+      >
+        <dg-table-column prop="appName" label="应用系统名称" min-width="120" align="center"> </dg-table-column>
+        <dg-table-column type="selection" width="50" align="center"></dg-table-column>
+        <dg-table-column prop="name" label="角色名称" width="100" align="center"> </dg-table-column>
+        <dg-table-column prop="roleLevel" label="角色层级" code="DM_ROLE_LEVEL" width="100" align="center">
+        </dg-table-column>
+        <dg-table-column prop="policeCategory" label="警种" code="T_MD_POLICE_TYPE" align="center"> </dg-table-column>
+        <dg-table-column
+          prop="roleBusiness"
+          label="业务域标签"
+          min-width="100"
+          code="DM_POLICE_BUSINESS"
+          align="center"
         >
-          <template #policeBusiness="{ row }">
-           {{ transferBusinessTag(row.policeBusiness) }}
+          <template slot-scope="{ row }">
+            {{ row.roleBusiness }}
           </template>
-        </new-table>
-      </dg-card>
-    </dg-col>
-    <dg-col :span="12">
-      <dg-card shadow="never" header="角色列表">
-        <!-- 角色搜索栏 -->
-        <search-bar :conditionForm="roleConditionForm" @submitSearch="receiveRoleSearch"></search-bar>
-        <!-- 角色操作栏 -->
-        <operate-bar :pageOptList="pageOptList" @submitPageOpt="receviceOpt"></operate-bar>
-        <!-- 角色列表 -->
-        <dg-table
-          ref="myRoleTable"
-          :data="tableData"
-          :pagination="false"
-          :span-method="objectSpanMethod"
-          border
-          style="width: 100%"
-          overflow="tooltip"
-          @selection-change="handleSelectChange"
-        >
-          <dg-table-column prop="appName" label="应用系统名称" min-width="120" align="center"> </dg-table-column>
-          <dg-table-column type="selection" width="50" align="center"></dg-table-column>
-          <dg-table-column prop="name" label="角色名称" width="100" align="center"> </dg-table-column>
-          <dg-table-column prop="roleLevel" label="角色层级" code="DM_ROLE_LEVEL" width="100" align="center">
-          </dg-table-column>
-          <dg-table-column prop="policeCategory" label="警种" code="T_MD_POLICE_TYPE" align="center"> </dg-table-column>
-          <dg-table-column
-            prop="roleBusiness"
-            label="业务域标签"
-            min-width="100"
-            code="DM_POLICE_BUSINESS"
-            align="center"
-          >
-            <template slot-scope="{ row }">
-              {{ row.roleBusiness }}
-            </template>
-          </dg-table-column>
-          <dg-table-column prop="activeTime" label="权限有效期" min-width="90" align="center">
-            <template slot-scope="{ row }">
-              <a href="javascript:;" @click="handleValidateChoose(row)">{{ row.activeTime }}</a>
-            </template>
-          </dg-table-column>
-        </dg-table>
-      </dg-card>
-    </dg-col>
+        </dg-table-column>
+        <dg-table-column prop="activeTime" label="权限有效期" min-width="90" align="center">
+          <template slot-scope="{ row }">
+            <a href="javascript:;" @click="handleValidateChoose(row)">{{ row.activeTime }}</a>
+          </template>
+        </dg-table-column>
+      </dg-table>
+    </scrollCard>
   </dg-row>
 </template>
 
@@ -73,6 +69,8 @@ import searchBar from '@/components/search-bar';
 import { searchOpt } from '@/mixins/page-opt';
 import { userConditionForm, userTableHeader, roleConditionForm } from './DataConfig';
 import operateBar from '@/components/operate-bar';
+import scrollCard from '@/components/scroll-card';
+
 export default {
   name: 'role-list',
   // 接收父页面传过来的属性
@@ -80,7 +78,8 @@ export default {
   components: {
     newTable,
     searchBar,
-    operateBar
+    operateBar,
+    scrollCard
   },
   mixins: [transferBusinessTagMixin, searchOpt],
 

+ 0 - 1
src/pages/appfun-auth-manage/role-auth-manage/roleView.vue

@@ -142,7 +142,6 @@ export default {
         }
       ],
       userOptList: ['保存'],
-      persionListData: [],
       userCondition: {
         roleId: {
           value: '',

+ 6 - 1
src/pages/auth-object-manage/object-prop-manage/add-appser-dialog.vue

@@ -10,6 +10,8 @@
         :tableHeader="tableHeader"
         :tableUrl="tableUrl[attrBelongType]"
         :condition="condition"
+        @selection-change="handleSelectChange"
+
       >
       </new-table>
     </dg-row>
@@ -66,13 +68,16 @@ export default {
     handleClose() {
       this.$emit('close');
     },
+    handleSelectChange(selection) {
+      this.selectList = this.$lodash.cloneDeep(selection);
+    },
     /**
      * 添加
      */
     handleSave() {
       const params = {
         attrId: this.parentNode.id,
-        relList: this.$refs.table.newChooseArr.map((item) => {
+        relList: this.selectList.map((item) => {
           return {
             id: item.id,
             code: this.attrBelongType == 'APP' ? item.applyCode : item.serviceCode

+ 129 - 0
src/pages/auth-object-manage/statistics/index.vue

@@ -0,0 +1,129 @@
+<!--
+客体统计
+@Author: linqian
+@date: 2023-06-06 09:39
+-->
+<template>
+  <div>
+    <div class="search-bar">
+      <div>
+        <el-radio v-model="form.radioValue" label="1">
+          按年
+          <el-date-picker v-model="form.year" type="year" placeholder="选择年" style="width: 200px !important">
+          </el-date-picker>
+        </el-radio>
+        <el-radio v-model="form.radioValue" label="2">
+          自定义日期
+          <el-date-picker
+            v-model="form.customValue"
+            type="daterange"
+            style="width: 350px !important"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-time="['00:00:00', '23:59:59']"
+            :value-format="'yyyy-MM-dd HH:mm:ss'"
+          >
+          </el-date-picker>
+        </el-radio>
+      </div>
+      <div style="margin-left: 20px">
+        <dg-button type="primary" :icon="'查询' | optIcon" @click="handleSearch()">查询</dg-button>
+        <dg-button :icon="'重置' | optIcon" @click="handleReset()">重置</dg-button>
+      </div>
+    </div>
+    <new-table ref="table" :data="tableData" :tableHeader="tableHeader" :pagination="false"></new-table>
+  </div>
+</template>
+
+<script>
+import newTable from '@/components/new-table';
+import { objStatisticsTable } from '@/api/statistics.js';
+
+export default {
+  components: { newTable },
+  data() {
+    return {
+      form: {
+        radioValue: '1',
+        year: new Date(),
+        customValue: ''
+      },
+      tableData: [],
+      tableHeader: [
+        {
+          prop: 'name',
+          label: '授权客体类型'
+        },
+        {
+          prop: 'num',
+          label: '数量'
+        }
+      ],
+      // 客体字段名称map集合
+      nameMap: {
+        appFunNum: "功能资源",
+        appNum: "应用资源",
+        dataNum: "数据资源",
+        serviceNum: "服务资源"
+      }
+    };
+  },
+  computed: {},
+  methods: {
+    handleSearch() {
+      const { radioValue, year, customValue } = this.form;
+      if (radioValue == '1' && !year) {
+        this.$message.warning('请选择年');
+        return;
+      }
+      if (radioValue == '2' && !customValue) {
+        this.$message.warning('自定义日期不能为空');
+        return;
+      }
+      this.getData();
+    },
+    handleReset() {
+      this.form.radioValue = '1';
+      this.form.year = new Date();
+      this.form.customValue = '';
+    },
+    getData() {
+      let params = {};
+      const { radioValue, customValue, year } = this.form;
+      if (radioValue == '1') {
+        params = {
+          year: this.$moment(year).format('YYYY')
+        };
+      } else {
+        params = {
+          startTime: customValue[0],
+          endTime: customValue[1]
+        };
+      }
+      objStatisticsTable(params).then((res) => {
+        let attr = [];
+        for (const key in res) {
+          attr.push({
+             name: this.nameMap[key],
+             num: res[key]
+          })
+        }
+        this.tableData = attr;
+      });
+    }
+  },
+  created() {
+    this.getData();
+  },
+  mounted() {}
+};
+</script>
+
+<style lang='scss' scoped>
+.search-bar {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+}
+</style>

+ 129 - 0
src/pages/auth-subject-manage/statistics/index.vue

@@ -0,0 +1,129 @@
+<!--
+统计
+@Author: linqian
+@date: 2023-06-06 09:39
+-->
+<template>
+  <div>
+    <div class="search-bar">
+      <div>
+        <el-radio v-model="form.radioValue" label="1">
+          按年
+          <el-date-picker v-model="form.year" type="year" placeholder="选择年" style="width: 200px !important">
+          </el-date-picker>
+        </el-radio>
+        <el-radio v-model="form.radioValue" label="2">
+          自定义日期
+          <el-date-picker
+            v-model="form.customValue"
+            type="daterange"
+            style="width: 350px !important"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-time="['00:00:00', '23:59:59']"
+            :value-format="'yyyy-MM-dd HH:mm:ss'"
+          >
+          </el-date-picker>
+        </el-radio>
+      </div>
+      <div style="margin-left: 20px">
+        <dg-button type="primary" :icon="'查询' | optIcon" @click="handleSearch()">查询</dg-button>
+        <dg-button :icon="'重置' | optIcon" @click="handleReset()">重置</dg-button>
+      </div>
+    </div>
+    <new-table ref="table" :data="tableData" :tableHeader="tableHeader" :pagination="false"></new-table>
+  </div>
+</template>
+
+<script>
+import newTable from '@/components/new-table';
+import { subStatisticsTable } from '@/api/statistics.js';
+
+export default {
+  components: { newTable },
+  data() {
+    return {
+      form: {
+        radioValue: '1',
+        year: new Date(),
+        customValue: ''
+      },
+      tableData: [],
+      tableHeader: [
+        {
+          prop: 'name',
+          label: '授权主体类型'
+        },
+        {
+          prop: 'num',
+          label: '数量'
+        }
+      ],
+         // 主体字段名称map集合
+         nameMap: {
+          appNum: "应用资源",
+          orgNum: "组织机构",
+          taskTypeNum: "任务类型",
+          userNum: "用户"
+      }
+    };
+  },
+  computed: {},
+  methods: {
+    handleSearch() {
+      const { radioValue, year, customValue } = this.form;
+      if (radioValue == '1' && !year) {
+        this.$message.warning('请选择年');
+        return;
+      }
+      if (radioValue == '2' && !customValue) {
+        this.$message.warning('自定义日期不能为空');
+        return;
+      }
+      this.getData();
+    },
+    handleReset() {
+      this.form.radioValue = '1';
+      this.form.year = new Date();
+      this.form.customValue = '';
+    },
+    getData() {
+      let params = {};
+      const { radioValue, customValue, year } = this.form;
+      if (radioValue == '1') {
+        params = {
+          year: this.$moment(year).format('YYYY')
+        };
+      } else {
+        params = {
+          startTime: customValue[0],
+          endTime: customValue[1]
+        };
+      }
+      subStatisticsTable(params).then((res) => {
+        let attr = [];
+        for (const key in res) {
+          attr.push({
+             name: this.nameMap[key],
+             num: res[key]
+          })
+        }
+        this.tableData = attr;
+      });
+    }
+  },
+  created() {
+    this.getData();
+  },
+  mounted() {}
+};
+</script>
+
+<style lang='scss' scoped>
+.search-bar {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+}
+</style>

+ 3 - 3
src/pages/data-auth-manage/components/set-auth.vue

@@ -5,7 +5,7 @@
 -->
 <template>
     <div class="property-wapper__right">
-        <dg-card :shadow="shadow" header="权限设置">
+        <dg-card     header="权限设置">
             <el-tabs v-model="activeName" @tab-click="handleClick">
                 <el-tab-pane label="表授权" name="TABLE">
                     <table-column-auth
@@ -51,7 +51,7 @@ export default {
     props: {
         shadow: {
             type: String,
-            default: "never"
+            default: "never1"
         },
         // 主体id
         subId: String,
@@ -161,7 +161,7 @@ export default {
             margin-bottom: 8px;
         }
         .el-card__body{
-           height: 45rem;
+           height: 44.7rem;
          }
     }
 }

+ 2 - 2
src/pages/data-auth-manage/org-auth.vue

@@ -8,11 +8,11 @@
         <dg-row class="property-wapper" gutter="1rem">
             <!-- 机构列表 -->
             <dg-col :span="5" class="property-wapper__left">
-                <dg-card header="机构列表"  shadow="never" class="org-card box-card">
+                <dg-card header="机构列表" class="org-card box-card">
                     <org-tree
                         ref="tree"
                         class="u-pm__left"
-                        treeHeight="calc(100vh - 17.6rem)"
+                        treeHeight="calc(100vh - 18rem)"
                         :search="true"
                         paddingRight="15px"
                         @handleGetNode="handleGetNode"

+ 1 - 1
src/pages/data-auth-manage/person-auth.vue

@@ -7,7 +7,7 @@
   <dg-row class="property-wapper" gutter="1rem">
     <!-- 人员列表区域 -->
     <dg-col :span="15" class="property-wapper__center">
-      <dg-card shadow="never" header="人员列表">
+      <dg-card header="人员列表">
         <!-- 搜索栏 -->
         <search-bar :conditionForm="conditionForm" @submitSearch="receiveSearch"></search-bar>
         <!-- 人员列表 -->

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

@@ -9,7 +9,14 @@
       <!-- 搜索栏 -->
       <search-bar :conditionForm="conditionForm" @submitSearch="receiveSearch"></search-bar>
       <!-- 表格 -->
-      <new-table ref="table" :selection="true" :tableUrl="tableUrl" :tableHeader="tableHeader" :condition="condition">
+      <new-table
+        ref="table"
+        :selection="true"
+        :tableUrl="tableUrl"
+        :tableHeader="tableHeader"
+        :condition="condition"
+        @selection-change="handleSelectChange"
+      >
       </new-table>
     </dg-row>
     <div v-footer>
@@ -44,7 +51,7 @@ export default {
           component: 'ElInput',
           attr: {
             placeholder: '请输入姓名',
-            style: "width: 130px"
+            style: 'width: 130px'
           }
         },
         {
@@ -82,7 +89,8 @@ export default {
           label: '单位名称',
           prop: 'orgName'
         }
-      ]
+      ],
+      selectList: []
     };
   },
   computed: {},
@@ -93,11 +101,14 @@ export default {
     handleCancel() {
       this.$emit('close');
     },
+    handleSelectChange(selection) {
+      this.selectList = this.$lodash.cloneDeep(selection);
+    },
     /**
      * 确定
      */
     handleSubmit() {
-      const selectedData = this.$refs.table.newChooseArr;
+      const selectedData = this.selectList;
       if (selectedData.length > 0) {
         this.setLevel(selectedData);
       } else {

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

@@ -19,6 +19,8 @@
       :selection="true"
       :tableOptList="tableOptList"
        @submitTableOpt="receviceOpt"
+       @selection-change="handleSelectChange"
+
     >
     </new-table>
   </div>
@@ -101,7 +103,8 @@ export default {
           prop: 'listLevel',
           enum: 'ListLevelEnum'
         }
-      ]
+      ],
+      selectList: []
     };
   },
   computed: {},
@@ -117,10 +120,13 @@ export default {
         this.handleRemove(row);
       }
     },
+    handleSelectChange(selection) {
+      this.selectList = this.$lodash.cloneDeep(selection);
+    },
     // 打开弹窗
     openLayer(title, content, operate, area = ['800px', '600px']) {
       const vm = this;
-      const selectedData = vm.$refs.table.newChooseArr;
+      const selectedData = vm.selectList;
       const layer = this.$dgLayer({
         title,
         content,
@@ -157,7 +163,7 @@ export default {
      * 设置名单级别
      */
     verify() {
-      const selectedData = this.$refs.table.newChooseArr;
+      const selectedData = this.selectList;
       if (selectedData.length == 0) {
         this.$message.warning('请至少选择一个人员!');
         return false;

+ 142 - 132
src/pages/log-manage/auth-risk-detection/detail.vue

@@ -1,151 +1,161 @@
 <template>
-    <div class="u-detail">
-        <el-form ref="ruleForm" label-width="90px" label-suffix=":">
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="方案名称">
-                        <div class="u-detail__text">{{ sizeForm.name }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="方案状态">
-                        <div class="u-detail__text" v-translate="{ enum: 'ProgrammeStateEnum' }">{{ sizeForm.state }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="12">
-                    <el-form-item label="创建时间">
-                        <div class="u-detail__text">
-                            {{ sizeForm.createTime | dateFormatter("YYYY-MM-DD HH:mm:ss") }}
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="检测规则">
-                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
-                            <p>
-                                鉴权时,必要条件不完整。
-                            </p>
-                            <div>
-                                鉴权类型:
-                                <dg-radio-group
-                                    v-model="form.authType"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    @change="setNecessaryParams"
-                                    call-off
-                                ></dg-radio-group>
-                            </div>
-                            <div class="form-inline">
-                                <label>必要参数:</label>
-                                <dg-checkbox-group
-                                    v-model="form.necessaryParams"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    disabled
-                                ></dg-checkbox-group>
-                            </div>
-                        </div>
-                        <div v-else>
-                            {{ ruleContent }}
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="规则说明">
-                        <div class="u-detail__text">{{ sizeForm.ruleExplain }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="风险内容">
-                        <div class="u-detail__text">{{ sizeForm.contentFormat }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row :gutter="20">
-                <dg-col :span="24">
-                    <el-form-item label="处理意见">
-                        <div class="u-detail__text">{{ sizeForm.handleOpinion }}</div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <div class="dg-layer-demo" v-footer>
-                <dg-button @click="handleClose">关闭</dg-button>
+  <div class="u-detail">
+    <el-form ref="ruleForm" label-width="90px" label-suffix=":">
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="方案名称">
+            <div class="u-detail__text">{{ sizeForm.name }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="方案状态">
+            <div class="u-detail__text" v-translate="{ enum: 'ProgrammeStateEnum' }">{{ sizeForm.state }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="12">
+          <el-form-item label="创建时间">
+            <div class="u-detail__text">
+              {{ sizeForm.createTime | dateFormatter('YYYY-MM-DD HH:mm:ss') }}
             </div>
-        </el-form>
-    </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="检测规则">
+            <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+              <p>鉴权时,必要条件不完整。</p>
+              <div>
+                鉴权类型:
+                <dg-radio-group
+                  v-model="form.authType"
+                  enum="AuthenticationNecessaryParamEnum"
+                  @change="setNecessaryParams"
+                  call-off
+                ></dg-radio-group>
+              </div>
+              <div class="form-inline">
+                <label>必要参数:</label>
+                <dg-checkbox-group
+                  v-model="form.necessaryParams"
+                  enum="AuthenticationNecessaryParamEnum"
+                  disabled
+                ></dg-checkbox-group>
+              </div>
+            </div>
+            <div v-else>
+              {{ ruleContent }}
+            </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="规则说明">
+            <div class="u-detail__text">{{ sizeForm.ruleExplain }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="风险内容">
+            <div class="u-detail__text">{{ sizeForm.contentFormat }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row :gutter="20">
+        <dg-col :span="24">
+          <el-form-item label="处理意见">
+            <div class="u-detail__text">{{ sizeForm.handleOpinion }}</div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <div class="dg-layer-demo" v-footer>
+        <dg-button @click="handleClose">关闭</dg-button>
+      </div>
+    </el-form>
+  </div>
 </template>
 
 <script>
 export default {
-    name: "auth-risk-detail",
-    props: {
-        sizeForm: {
-            type: Object,
-            required: true
-        }
-    },
-    data() {
-        return {
-            form: {
-                necessaryParams: "",
-                authType: ""
-            },
-            ruleContent: "",
-            necessaryParams: []
-        };
+  name: 'auth-risk-detail',
+  props: {
+    sizeForm: {
+      type: Object,
+      required: true
+    }
+  },
+  data() {
+    return {
+      form: {
+        necessaryParams: '',
+        authType: ''
+      },
+      ruleContent: '',
+      necessaryParams: []
+    };
+  },
+  methods: {
+    ruleText() {
+      let str = '';
+      const { type } = this.sizeForm;
+      if (this.sizeForm.type === 'DSJPFJQFX') {
+        str = '分钟内,鉴权次数超过';
+      } else if (type === 'DSJPFHBMDMZFX') {
+        str = '分钟内,命中红/白名单超过';
+      } else if (type === 'YHCXYQFWFX') {
+        str = '分钟内,持续越权访问超过';
+      }
+      return str;
     },
-    methods: {
-        init() {
-            if (this.sizeForm.type === "JQBYTJBWZFX") {
-                this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
-                if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
-                    this.form.authType = this.necessaryParams[0].type;
-                    this.setNecessaryParams(this.form.authType);
-                }
-                return;
-            }
-            const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
-            const text = this.sizeForm.type === "DSJPFJQFX" ? "分钟内,鉴权次数超过" : "分钟内,命中红/白名单超过";
-            this.ruleContent = interval + text + frequency + "次";
-        },
-        handleClose() {
-            this.$emit("close");
-        },
-        setNecessaryParams(key) {
-            const seleted = this.necessaryParams.find(item => item.type === key);
-            if (seleted) {
-                this.form.necessaryParams = seleted.params
-                    .map(item => {
-                        return item.name;
-                    })
-                    .join(",");
-            }
+    init() {
+      if (this.sizeForm.type === 'JQBYTJBWZFX') {
+        this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
+        if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
+          this.form.authType = this.necessaryParams[0].type;
+          this.setNecessaryParams(this.form.authType);
         }
+        return;
+      }
+      const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
+      const text = this.ruleText();
+      this.ruleContent = interval + text + frequency + '次';
+    },
+    handleClose() {
+      this.$emit('close');
     },
-    created() {
-        this.init();
+    setNecessaryParams(key) {
+      const seleted = this.necessaryParams.find((item) => item.type === key);
+      if (seleted) {
+        this.form.necessaryParams = seleted.params
+          .map((item) => {
+            return item.name;
+          })
+          .join(',');
+      }
     }
+  },
+  created() {
+    this.init();
+  }
 };
 </script>
 
 <style lang="scss">
 .u-detail {
-    .el-form-item {
-        margin-bottom: 10px;
-    }
+  .el-form-item {
+    margin-bottom: 10px;
+  }
 }
 .form-inline {
-    display: flex;
-    label {
-        min-width: 5.4em;
-    }
+  display: flex;
+  label {
+    min-width: 5.4em;
+  }
 }
 </style>

+ 180 - 181
src/pages/log-manage/auth-risk-detection/edit.vue

@@ -1,84 +1,75 @@
 <template>
-    <div>
-        <el-form
-            ref="ruleForm"
-            :rules="rules"
-            :model="sizeForm"
-            label-suffix=":"
-            label-position="right"
-            label-width="90px"
-        >
-            <dg-row>
-                <dg-col :span="12">
-                    <el-form-item label="方案名称" prop="name">
-                        {{ sizeForm.name }}
-                        <!-- <el-input
+  <div>
+    <el-form ref="ruleForm" :rules="rules" :model="sizeForm" label-suffix=":" label-position="right" label-width="90px">
+      <dg-row>
+        <dg-col :span="12">
+          <el-form-item label="方案名称" prop="name">
+            {{ sizeForm.name }}
+            <!-- <el-input
                             v-model.trim="sizeForm.name"
                             show-word-limit
                             placeholder="请输入方案名称"
                             clearable
                             disabled
                         /> -->
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="12">
-                    <el-form-item label="方案状态" prop="state">
-                        <dg-select
-                            style="width: 100%;"
-                            v-model="sizeForm.state"
-                            placeholder="请选择方案状态"
-                            enum="ProgrammeStateEnum"
-                        >
-                        </dg-select>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="检测规则" prop="ruleContent">
-                        <!-- DSJPFJQFX    DSJPFHBMDMZFX JQBYTJBWZFX -->
-                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
-                            <p>
-                                鉴权时,必要条件不完整。
-                            </p>
-                            <div>
-                                鉴权类型:
-                                <dg-radio-group
-                                    v-model="sizeForm.authType"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    @change="setNecessaryParams"
-                                    call-off
-                                ></dg-radio-group>
-                            </div>
-                            <div class="form-inline">
-                                <label>必要参数:</label>
-                                <dg-checkbox-group
-                                    v-model="sizeForm.necessaryParams"
-                                    enum="AuthenticationNecessaryParamEnum"
-                                    disabled
-                                ></dg-checkbox-group>
-                            </div>
-                        </div>
-                        <div v-else class="form-inline">
-                            <el-form-item label="" prop="interval">
-                                <el-input style="width: 80px;" v-model.trim="sizeForm.interval"></el-input>
-                            </el-form-item>
-                            &nbsp;{{ ruleText }}&nbsp;
-                            <el-form-item label="" prop="frequency"
-                                ><el-input style="width: 80px;" v-model.trim="sizeForm.frequency"></el-input>
-                            </el-form-item>
-                            &nbsp;次
-                        </div>
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="规则说明" prop="ruleExplain">
-                        {{ sizeForm.ruleExplain }}
-                        <!-- <el-input
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="12">
+          <el-form-item label="方案状态" prop="state">
+            <dg-select
+              style="width: 100%"
+              v-model="sizeForm.state"
+              placeholder="请选择方案状态"
+              enum="ProgrammeStateEnum"
+            >
+            </dg-select>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="检测规则" prop="ruleContent">
+            <!-- DSJPFJQFX    DSJPFHBMDMZFX JQBYTJBWZFX -->
+            <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+              <p>鉴权时,必要条件不完整。</p>
+              <div>
+                鉴权类型:
+                <dg-radio-group
+                  v-model="sizeForm.authType"
+                  enum="AuthenticationNecessaryParamEnum"
+                  @change="setNecessaryParams"
+                  call-off
+                ></dg-radio-group>
+              </div>
+              <div class="form-inline">
+                <label>必要参数:</label>
+                <dg-checkbox-group
+                  v-model="sizeForm.necessaryParams"
+                  enum="AuthenticationNecessaryParamEnum"
+                  disabled
+                ></dg-checkbox-group>
+              </div>
+            </div>
+            <div v-else class="form-inline">
+              <el-form-item label="" prop="interval">
+                <el-input style="width: 80px" v-model.trim="sizeForm.interval"></el-input>
+              </el-form-item>
+              &nbsp;{{ ruleText }}&nbsp;
+              <el-form-item label="" prop="frequency"
+                ><el-input style="width: 80px" v-model.trim="sizeForm.frequency"></el-input>
+              </el-form-item>
+              &nbsp;次
+            </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="规则说明" prop="ruleExplain">
+            {{ sizeForm.ruleExplain }}
+            <!-- <el-input
                             type="textarea"
                             rows="4"
                             v-model.trim="sizeForm.ruleExplain"
@@ -88,128 +79,136 @@
                             disabled
                             maxlength="500"
                         /> -->
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="风险内容" prop="contentFormat">
-                        {{ sizeForm.contentFormat }}
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-            <dg-row>
-                <dg-col :span="24">
-                    <el-form-item label="处理意见" prop="handleOpinion">
-                        <el-input
-                            type="textarea"
-                            rows="4"
-                            v-model.trim="sizeForm.handleOpinion"
-                            placeholder="请输入处理意见"
-                            clearable
-                            show-word-limit
-                            maxlength="500"
-                        />
-                    </el-form-item>
-                </dg-col>
-            </dg-row>
-        </el-form>
-        <div class="dg-layer-demo" v-footer>
-            <dg-button @click="handleClose">取消</dg-button>
-            <dg-button type="primary" @click="handlSave">保存</dg-button>
-        </div>
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="风险内容" prop="contentFormat">
+            {{ sizeForm.contentFormat }}
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+      <dg-row>
+        <dg-col :span="24">
+          <el-form-item label="处理意见" prop="handleOpinion">
+            <el-input
+              type="textarea"
+              rows="4"
+              v-model.trim="sizeForm.handleOpinion"
+              placeholder="请输入处理意见"
+              clearable
+              show-word-limit
+              maxlength="500"
+            />
+          </el-form-item>
+        </dg-col>
+      </dg-row>
+    </el-form>
+    <div class="dg-layer-demo" v-footer>
+      <dg-button @click="handleClose">取消</dg-button>
+      <dg-button type="primary" @click="handlSave">保存</dg-button>
     </div>
+  </div>
 </template>
 
 <script>
-import { saveAuthRisk } from "@/api/log-manage";
+import { saveAuthRisk } from '@/api/log-manage';
 
 export default {
-    name: "auth-risk-edit",
-    props: {
-        formData: Object
-    },
-    computed: {
-        ruleText() {
-            if (this.sizeForm.type === "DSJPFJQFX") return "分钟内,鉴权次数超过";
-            return "分钟内,命中红/白名单超过";
+  name: 'auth-risk-edit',
+  props: {
+    formData: Object
+  },
+  computed: {
+    ruleText() {
+      let str = '';
+      const { type } = this.sizeForm;
+      if (this.sizeForm.type === 'DSJPFJQFX') {
+        str = '分钟内,鉴权次数超过';
+      } else if (type === 'DSJPFHBMDMZFX') {
+        str = '分钟内,命中红/白名单超过';
+      } else if (type === 'YHCXYQFWFX') {
+        str = '分钟内,持续越权访问超过';
+      }
+      return str
+    }
+  },
+  data() {
+    return {
+      necessaryParams: [],
+      sizeForm: {
+        interval: '',
+        frequency: '',
+        authType: '',
+        necessaryParams: ''
+      },
+      rules: {
+        handleOpinion: [{ required: true, message: '请输入处理意见', trigger: 'blur' }],
+        name: [{ required: true, message: '请输入方案名称', trigger: 'blur' }],
+        interval: [{ required: true, message: '请输入分钟数', trigger: 'blur' }],
+        frequency: [{ required: true, message: '请输入次数', trigger: 'blur' }],
+        state: [{ required: true, message: '请选择方案状态', trigger: 'blur' }],
+        ruleContent: [{ required: true }]
+      }
+    };
+  },
+  methods: {
+    init() {
+      this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
+      if (this.sizeForm.type === 'JQBYTJBWZFX') {
+        this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
+        if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
+          this.sizeForm.authType = this.necessaryParams[0].type;
+          this.setNecessaryParams(this.sizeForm.authType);
         }
+        return;
+      }
+      const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
+      this.sizeForm.interval = interval;
+      this.sizeForm.frequency = frequency;
     },
-    data() {
-        return {
-            necessaryParams: [],
-            sizeForm: {
-                interval: "",
-                frequency: "",
-                authType: "",
-                necessaryParams: ""
-            },
-            rules: {
-                handleOpinion: [{ required: true, message: "请输入处理意见", trigger: "blur" }],
-                name: [{ required: true, message: "请输入方案名称", trigger: "blur" }],
-                interval: [{ required: true, message: "请输入分钟数", trigger: "blur" }],
-                frequency: [{ required: true, message: "请输入次数", trigger: "blur" }],
-                state: [{ required: true, message: "请选择方案状态", trigger: "blur" }],
-                ruleContent: [{ required: true }]
-            }
-        };
+    setNecessaryParams(key) {
+      const seleted = this.necessaryParams.find((item) => item.type === key);
+      if (seleted) {
+        this.sizeForm.necessaryParams = seleted.params
+          .map((item) => {
+            return item.name;
+          })
+          .join(',');
+      }
     },
-    methods: {
-        init() {
-            this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
-            if (this.sizeForm.type === "JQBYTJBWZFX") {
-                this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
-                if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
-                    this.sizeForm.authType = this.necessaryParams[0].type;
-                    this.setNecessaryParams(this.sizeForm.authType);
-                }
-                return;
-            }
-            const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
-            this.sizeForm.interval = interval;
-            this.sizeForm.frequency = frequency;
-        },
-        setNecessaryParams(key) {
-            const seleted = this.necessaryParams.find(item => item.type === key);
-            if (seleted) {
-                this.sizeForm.necessaryParams = seleted.params
-                    .map(item => {
-                        return item.name;
-                    })
-                    .join(",");
-            }
-        },
-        handleClose() {
-            this.$emit("success", true);
-        },
-        async handlSave() {
-            const that = this;
-            const valid = await new Promise(resolve => this.$refs.ruleForm.validate(resolve));
-            if (!valid) return;
-
-            const sizeForm = { ...this.sizeForm };
-            if (["DSJPFHBMDMZFX", "DSJPFJQFX"].includes(this.sizeForm.type)) {
-                sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
-            }
-            saveAuthRisk(sizeForm.id, sizeForm)
-                .then(() => {
-                    that.handleClose(true);
-                    that.$message.success("保存成功");
-                })
-                .catch(error => that.$message.error(error))
-        }
+    handleClose() {
+      this.$emit('close');
     },
-    created() {
-        this.init();
+    async handlSave() {
+      const that = this;
+      const valid = await new Promise((resolve) => this.$refs.ruleForm.validate(resolve));
+      if (!valid) return;
+
+      const sizeForm = { ...this.sizeForm };
+      if (['DSJPFHBMDMZFX', 'DSJPFJQFX', 'YHCXYQFWFX'].includes(this.sizeForm.type)) {
+        sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
+      }
+      saveAuthRisk(sizeForm.id, sizeForm)
+        .then(() => {
+          that.handleClose(true);
+          that.$message.success('保存成功');
+        })
+        .catch((error) => that.$message.error(error));
     }
+  },
+  created() {
+    this.init();
+  }
 };
 </script>
 
 <style lang="scss" scoped>
 .form-inline {
-    display: flex;
-    label {
-        min-width: 5.4em;
-    }
+  display: flex;
+  label {
+    min-width: 5.4em;
+  }
 }
 </style>

+ 6 - 0
src/router/modules/appfun-auth-manage.js

@@ -28,6 +28,12 @@ const componentRouter = {
       component: () => import('@/pages/appfun-auth-manage/role-auth-manage'),
       name: 'role-auth-manage',
       meta: { title: '角色授权管理', noCache: true, permission: ['YHGLPT_SQGL_RYSQGL'],layout: "page" }
+    },
+    {
+      path: 'org-role-manage',
+      component: () => import('@/pages/appfun-auth-manage/org-role-manage'),
+      name: 'org-role-manage',
+      meta: { title: '机构角色授权管理', noCache: true, permission: ['YHGLPT_SQGL_RYSQGL'],layout: "page" }
     }
   ]
 };

+ 6 - 0
src/router/modules/auth-object-manage.js

@@ -38,6 +38,12 @@ const componentsRouter = {
       component: () => import('@/pages/auth-object-manage/object-prop-manage'),
       name: 'object-prop-manage',
       meta: { title: '客体属性管理', noCache: true, permission: ['QXGL_SQGL_ZTGL_KTSXLGL'], layout: 'page' }
+    },
+    {
+      path: 'statistics',
+      component: () => import('@/pages/auth-object-manage/statistics/index.vue'),
+      name: 'auth-subject-manage-statistics',
+      meta: { title: '统计', noCache: true, permission: ['QXGL_SQGL_ZTGL_ZTSXLGL'] }
     }
   ]
 };

+ 7 - 1
src/router/modules/auth-subject-manage.js

@@ -40,7 +40,13 @@ const componentsRouter =
           path: 'environment-element',
           component: () => import('@/pages/auth-subject-manage/environment-element'),
           name: 'environment-element',
-          meta: { title: '主体环境要素管理', noCache: true, permission: ['QXGL_SQGL_ZTGL_ZTHJYSGL', 'QXGL_SQGL_ZTGL_ZTSXLGL'] }
+          meta: { title: '主体环境要素管理', noCache: true, permission: ['QXGL_SQGL_ZTGL_ZTHJYSGL'] }
+        },
+        {
+          path: 'statistics',
+          component: () => import('@/pages/auth-subject-manage/statistics/index.vue'),
+          name: 'auth-subject-manage-statistics',
+          meta: { title: '统计', noCache: true, permission: ['QXGL_SQGL_ZTGL_ZTSXLGL'] }
         }
       ]
     }