Commit 19dc88b4e0d559aceed9b17ebd0ddd04eac7ecd7

Authored by Jim
Committed by GitHub
1 parent cfbd52bb

docs: 添加注释, 修复 (#1927)

* docs: 添加注释

* docs: 添加注释

* fix: 后台动态权限changePermissionCode加上await

* docs: 添加注释

* docs: 添加注释

* docs: 添加注释

* docs: 添加注释

* docs: 添加注释
.gitignore
@@ -27,4 +27,7 @@ pnpm-debug.log* @@ -27,4 +27,7 @@ pnpm-debug.log*
27 *.njsproj 27 *.njsproj
28 *.sln 28 *.sln
29 *.sw? 29 *.sw?
30 -/package-lock.json 30 +
  31 +package-lock.json
  32 +pnpm-lock.yaml
  33 +
pnpm-lock.yaml
1 -lockfileVersion: 5.4 1 +lockfileVersion: 5.3
2 2
3 overrides: 3 overrides:
4 bin-wrapper: npm:bin-wrapper-china 4 bin-wrapper: npm:bin-wrapper-china
@@ -138,7 +138,7 @@ dependencies: @@ -138,7 +138,7 @@ dependencies:
138 mockjs: 1.1.0 138 mockjs: 1.1.0
139 nprogress: 0.2.0 139 nprogress: 0.2.0
140 path-to-regexp: 6.2.0 140 path-to-regexp: 6.2.0
141 - pinia: 2.0.12_ifhmkzsxec62ezvqv7qmanm4bq 141 + pinia: 2.0.12_typescript@4.6.3+vue@3.2.33
142 print-js: 1.6.0 142 print-js: 1.6.0
143 qrcode: 1.5.0 143 qrcode: 1.5.0
144 qs: 6.10.3 144 qs: 6.10.3
@@ -172,8 +172,8 @@ devDependencies: @@ -172,8 +172,8 @@ devDependencies:
172 '@types/qs': 6.9.7 172 '@types/qs': 6.9.7
173 '@types/showdown': 1.9.4 173 '@types/showdown': 1.9.4
174 '@types/sortablejs': 1.10.7 174 '@types/sortablejs': 1.10.7
175 - '@typescript-eslint/eslint-plugin': 5.20.0_xgwjwvswzzo77lpghh6plzerx4  
176 - '@typescript-eslint/parser': 5.20.0_jzhokl4shvj5szf5bgr66kln2a 175 + '@typescript-eslint/eslint-plugin': 5.20.0_b9ac9b5656ce5dffade639fcf5e491bf
  176 + '@typescript-eslint/parser': 5.20.0_eslint@8.13.0+typescript@4.6.3
177 '@vitejs/plugin-legacy': 1.8.1_vite@2.9.5 177 '@vitejs/plugin-legacy': 1.8.1_vite@2.9.5
178 '@vitejs/plugin-vue': 2.3.1_vite@2.9.5+vue@3.2.33 178 '@vitejs/plugin-vue': 2.3.1_vite@2.9.5+vue@3.2.33
179 '@vitejs/plugin-vue-jsx': 1.3.10 179 '@vitejs/plugin-vue-jsx': 1.3.10
@@ -186,7 +186,7 @@ devDependencies: @@ -186,7 +186,7 @@ devDependencies:
186 dotenv: 16.0.0 186 dotenv: 16.0.0
187 eslint: 8.13.0 187 eslint: 8.13.0
188 eslint-config-prettier: 8.5.0_eslint@8.13.0 188 eslint-config-prettier: 8.5.0_eslint@8.13.0
189 - eslint-plugin-prettier: 4.0.0_dak2zfnx7mtmcpd5jcuo55rnb4 189 + eslint-plugin-prettier: 4.0.0_1815ac95b7fb26c13c7d48a8eef62d0f
190 eslint-plugin-vue: 8.6.0_eslint@8.13.0 190 eslint-plugin-vue: 8.6.0_eslint@8.13.0
191 esno: 0.14.1 191 esno: 0.14.1
192 fs-extra: 10.1.0 192 fs-extra: 10.1.0
@@ -206,17 +206,17 @@ devDependencies: @@ -206,17 +206,17 @@ devDependencies:
206 stylelint: 14.7.1 206 stylelint: 14.7.1
207 stylelint-config-prettier: 9.0.3_stylelint@14.7.1 207 stylelint-config-prettier: 9.0.3_stylelint@14.7.1
208 stylelint-config-recommended: 7.0.0_stylelint@14.7.1 208 stylelint-config-recommended: 7.0.0_stylelint@14.7.1
209 - stylelint-config-recommended-vue: 1.4.0_dkblcabdfo7hanxmbj6kpjf26q 209 + stylelint-config-recommended-vue: 1.4.0_1a82b100232bbe7036ec0a7ca7a4baf4
210 stylelint-config-standard: 25.0.0_stylelint@14.7.1 210 stylelint-config-standard: 25.0.0_stylelint@14.7.1
211 stylelint-order: 5.0.0_stylelint@14.7.1 211 stylelint-order: 5.0.0_stylelint@14.7.1
212 - ts-node: 10.7.0_3z6inmgn4ud4moqealnfxgbl2m 212 + ts-node: 10.7.0_de7c86b0cde507c63a0402da5b982bd3
213 typescript: 4.6.3 213 typescript: 4.6.3
214 vite: 2.9.5_less@4.1.2 214 vite: 2.9.5_less@4.1.2
215 vite-plugin-compression: 0.5.1_vite@2.9.5 215 vite-plugin-compression: 0.5.1_vite@2.9.5
216 vite-plugin-html: 3.2.0_vite@2.9.5 216 vite-plugin-html: 3.2.0_vite@2.9.5
217 vite-plugin-imagemin: 0.6.1_vite@2.9.5 217 vite-plugin-imagemin: 0.6.1_vite@2.9.5
218 vite-plugin-mkcert: 1.6.0 218 vite-plugin-mkcert: 1.6.0
219 - vite-plugin-mock: 2.9.6_qiwm6q27tfokd2mntem6ma7w4y 219 + vite-plugin-mock: 2.9.6_822ccf435f995ca1e98d9919e603f6e6
220 vite-plugin-purge-icons: 0.8.1_vite@2.9.5 220 vite-plugin-purge-icons: 0.8.1_vite@2.9.5
221 vite-plugin-pwa: 0.11.13_vite@2.9.5 221 vite-plugin-pwa: 0.11.13_vite@2.9.5
222 vite-plugin-style-import: 2.0.0_vite@2.9.5 222 vite-plugin-style-import: 2.0.0_vite@2.9.5
@@ -1519,7 +1519,7 @@ packages: @@ -1519,7 +1519,7 @@ packages:
1519 '@types/node': 17.0.25 1519 '@types/node': 17.0.25
1520 chalk: 4.1.2 1520 chalk: 4.1.2
1521 cosmiconfig: 7.0.1 1521 cosmiconfig: 7.0.1
1522 - cosmiconfig-typescript-loader: 1.0.9_3z6inmgn4ud4moqealnfxgbl2m 1522 + cosmiconfig-typescript-loader: 1.0.9_de7c86b0cde507c63a0402da5b982bd3
1523 lodash: 4.17.21 1523 lodash: 4.17.21
1524 resolve-from: 5.0.0 1524 resolve-from: 5.0.0
1525 typescript: 4.6.3 1525 typescript: 4.6.3
@@ -1905,7 +1905,7 @@ packages: @@ -1905,7 +1905,7 @@ packages:
1905 '@iconify/iconify': 2.2.1 1905 '@iconify/iconify': 2.2.1
1906 dev: true 1906 dev: true
1907 1907
1908 - /@rollup/plugin-babel/5.3.1_6m6vi5xreq5wlqqwvo3xvcrttm: 1908 + /@rollup/plugin-babel/5.3.1_@babel+core@7.17.9+rollup@2.70.2:
1909 resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} 1909 resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
1910 engines: {node: '>= 10.0.0'} 1910 engines: {node: '>= 10.0.0'}
1911 peerDependencies: 1911 peerDependencies:
@@ -2209,7 +2209,7 @@ packages: @@ -2209,7 +2209,7 @@ packages:
2209 resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} 2209 resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==}
2210 dev: true 2210 dev: true
2211 2211
2212 - /@typescript-eslint/eslint-plugin/5.20.0_xgwjwvswzzo77lpghh6plzerx4: 2212 + /@typescript-eslint/eslint-plugin/5.20.0_b9ac9b5656ce5dffade639fcf5e491bf:
2213 resolution: {integrity: sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==} 2213 resolution: {integrity: sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==}
2214 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2214 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2215 peerDependencies: 2215 peerDependencies:
@@ -2220,10 +2220,10 @@ packages: @@ -2220,10 +2220,10 @@ packages:
2220 typescript: 2220 typescript:
2221 optional: true 2221 optional: true
2222 dependencies: 2222 dependencies:
2223 - '@typescript-eslint/parser': 5.20.0_jzhokl4shvj5szf5bgr66kln2a 2223 + '@typescript-eslint/parser': 5.20.0_eslint@8.13.0+typescript@4.6.3
2224 '@typescript-eslint/scope-manager': 5.20.0 2224 '@typescript-eslint/scope-manager': 5.20.0
2225 - '@typescript-eslint/type-utils': 5.20.0_jzhokl4shvj5szf5bgr66kln2a  
2226 - '@typescript-eslint/utils': 5.20.0_jzhokl4shvj5szf5bgr66kln2a 2225 + '@typescript-eslint/type-utils': 5.20.0_eslint@8.13.0+typescript@4.6.3
  2226 + '@typescript-eslint/utils': 5.20.0_eslint@8.13.0+typescript@4.6.3
2227 debug: 4.3.4 2227 debug: 4.3.4
2228 eslint: 8.13.0 2228 eslint: 8.13.0
2229 functional-red-black-tree: 1.0.1 2229 functional-red-black-tree: 1.0.1
@@ -2236,7 +2236,7 @@ packages: @@ -2236,7 +2236,7 @@ packages:
2236 - supports-color 2236 - supports-color
2237 dev: true 2237 dev: true
2238 2238
2239 - /@typescript-eslint/parser/5.20.0_jzhokl4shvj5szf5bgr66kln2a: 2239 + /@typescript-eslint/parser/5.20.0_eslint@8.13.0+typescript@4.6.3:
2240 resolution: {integrity: sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==} 2240 resolution: {integrity: sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==}
2241 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2241 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2242 peerDependencies: 2242 peerDependencies:
@@ -2264,7 +2264,7 @@ packages: @@ -2264,7 +2264,7 @@ packages:
2264 '@typescript-eslint/visitor-keys': 5.20.0 2264 '@typescript-eslint/visitor-keys': 5.20.0
2265 dev: true 2265 dev: true
2266 2266
2267 - /@typescript-eslint/type-utils/5.20.0_jzhokl4shvj5szf5bgr66kln2a: 2267 + /@typescript-eslint/type-utils/5.20.0_eslint@8.13.0+typescript@4.6.3:
2268 resolution: {integrity: sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==} 2268 resolution: {integrity: sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==}
2269 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2269 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2270 peerDependencies: 2270 peerDependencies:
@@ -2274,7 +2274,7 @@ packages: @@ -2274,7 +2274,7 @@ packages:
2274 typescript: 2274 typescript:
2275 optional: true 2275 optional: true
2276 dependencies: 2276 dependencies:
2277 - '@typescript-eslint/utils': 5.20.0_jzhokl4shvj5szf5bgr66kln2a 2277 + '@typescript-eslint/utils': 5.20.0_eslint@8.13.0+typescript@4.6.3
2278 debug: 4.3.4 2278 debug: 4.3.4
2279 eslint: 8.13.0 2279 eslint: 8.13.0
2280 tsutils: 3.21.0_typescript@4.6.3 2280 tsutils: 3.21.0_typescript@4.6.3
@@ -2309,7 +2309,7 @@ packages: @@ -2309,7 +2309,7 @@ packages:
2309 - supports-color 2309 - supports-color
2310 dev: true 2310 dev: true
2311 2311
2312 - /@typescript-eslint/utils/5.20.0_jzhokl4shvj5szf5bgr66kln2a: 2312 + /@typescript-eslint/utils/5.20.0_eslint@8.13.0+typescript@4.6.3:
2313 resolution: {integrity: sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==} 2313 resolution: {integrity: sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==}
2314 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2314 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2315 peerDependencies: 2315 peerDependencies:
@@ -2773,7 +2773,7 @@ packages: @@ -2773,7 +2773,7 @@ packages:
2773 dev: true 2773 dev: true
2774 2774
2775 /archive-type/4.0.0: 2775 /archive-type/4.0.0:
2776 - resolution: {integrity: sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=} 2776 + resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==}
2777 engines: {node: '>=4'} 2777 engines: {node: '>=4'}
2778 dependencies: 2778 dependencies:
2779 file-type: 4.4.0 2779 file-type: 4.4.0
@@ -3116,11 +3116,11 @@ packages: @@ -3116,11 +3116,11 @@ packages:
3116 dev: true 3116 dev: true
3117 3117
3118 /buffer-crc32/0.2.13: 3118 /buffer-crc32/0.2.13:
3119 - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} 3119 + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
3120 dev: true 3120 dev: true
3121 3121
3122 /buffer-fill/1.0.0: 3122 /buffer-fill/1.0.0:
3123 - resolution: {integrity: sha1-+PeLdniYiO858gXNY39o5wISKyw=} 3123 + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
3124 dev: true 3124 dev: true
3125 3125
3126 /buffer-from/1.1.2: 3126 /buffer-from/1.1.2:
@@ -3161,7 +3161,7 @@ packages: @@ -3161,7 +3161,7 @@ packages:
3161 dev: true 3161 dev: true
3162 3162
3163 /cacheable-request/2.1.4: 3163 /cacheable-request/2.1.4:
3164 - resolution: {integrity: sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=} 3164 + resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==}
3165 dependencies: 3165 dependencies:
3166 clone-response: 1.0.2 3166 clone-response: 1.0.2
3167 get-stream: 3.0.0 3167 get-stream: 3.0.0
@@ -3416,7 +3416,7 @@ packages: @@ -3416,7 +3416,7 @@ packages:
3416 dev: true 3416 dev: true
3417 3417
3418 /clone-response/1.0.2: 3418 /clone-response/1.0.2:
3419 - resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} 3419 + resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==}
3420 dependencies: 3420 dependencies:
3421 mimic-response: 1.0.1 3421 mimic-response: 1.0.1
3422 dev: true 3422 dev: true
@@ -3793,7 +3793,7 @@ packages: @@ -3793,7 +3793,7 @@ packages:
3793 vary: 1.1.2 3793 vary: 1.1.2
3794 dev: true 3794 dev: true
3795 3795
3796 - /cosmiconfig-typescript-loader/1.0.9_3z6inmgn4ud4moqealnfxgbl2m: 3796 + /cosmiconfig-typescript-loader/1.0.9_de7c86b0cde507c63a0402da5b982bd3:
3797 resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} 3797 resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==}
3798 engines: {node: '>=12', npm: '>=6'} 3798 engines: {node: '>=12', npm: '>=6'}
3799 peerDependencies: 3799 peerDependencies:
@@ -3802,7 +3802,7 @@ packages: @@ -3802,7 +3802,7 @@ packages:
3802 dependencies: 3802 dependencies:
3803 '@types/node': 17.0.25 3803 '@types/node': 17.0.25
3804 cosmiconfig: 7.0.1 3804 cosmiconfig: 7.0.1
3805 - ts-node: 10.7.0_3z6inmgn4ud4moqealnfxgbl2m 3805 + ts-node: 10.7.0_de7c86b0cde507c63a0402da5b982bd3
3806 typescript: 4.6.3 3806 typescript: 4.6.3
3807 transitivePeerDependencies: 3807 transitivePeerDependencies:
3808 - '@swc/core' 3808 - '@swc/core'
@@ -3851,7 +3851,7 @@ packages: @@ -3851,7 +3851,7 @@ packages:
3851 dev: true 3851 dev: true
3852 3852
3853 /cross-spawn/5.1.0: 3853 /cross-spawn/5.1.0:
3854 - resolution: {integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=} 3854 + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
3855 dependencies: 3855 dependencies:
3856 lru-cache: 4.1.5 3856 lru-cache: 4.1.5
3857 shebang-command: 1.2.0 3857 shebang-command: 1.2.0
@@ -4031,12 +4031,12 @@ packages: @@ -4031,12 +4031,12 @@ packages:
4031 engines: {node: '>=0.10.0'} 4031 engines: {node: '>=0.10.0'}
4032 4032
4033 /decode-uri-component/0.2.0: 4033 /decode-uri-component/0.2.0:
4034 - resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=} 4034 + resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==}
4035 engines: {node: '>=0.10'} 4035 engines: {node: '>=0.10'}
4036 dev: true 4036 dev: true
4037 4037
4038 /decompress-response/3.3.0: 4038 /decompress-response/3.3.0:
4039 - resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} 4039 + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
4040 engines: {node: '>=4'} 4040 engines: {node: '>=4'}
4041 dependencies: 4041 dependencies:
4042 mimic-response: 1.0.1 4042 mimic-response: 1.0.1
@@ -4072,7 +4072,7 @@ packages: @@ -4072,7 +4072,7 @@ packages:
4072 dev: true 4072 dev: true
4073 4073
4074 /decompress-unzip/4.0.1: 4074 /decompress-unzip/4.0.1:
4075 - resolution: {integrity: sha1-3qrM39FK6vhVePczroIQ+bSEj2k=} 4075 + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==}
4076 engines: {node: '>=4'} 4076 engines: {node: '>=4'}
4077 dependencies: 4077 dependencies:
4078 file-type: 3.9.0 4078 file-type: 3.9.0
@@ -4309,7 +4309,7 @@ packages: @@ -4309,7 +4309,7 @@ packages:
4309 dev: true 4309 dev: true
4310 4310
4311 /duplexer3/0.1.4: 4311 /duplexer3/0.1.4:
4312 - resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} 4312 + resolution: {integrity: sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==}
4313 dev: true 4313 dev: true
4314 4314
4315 /eastasianwidth/0.2.0: 4315 /eastasianwidth/0.2.0:
@@ -4699,7 +4699,7 @@ packages: @@ -4699,7 +4699,7 @@ packages:
4699 eslint: 8.13.0 4699 eslint: 8.13.0
4700 dev: true 4700 dev: true
4701 4701
4702 - /eslint-plugin-prettier/4.0.0_dak2zfnx7mtmcpd5jcuo55rnb4: 4702 + /eslint-plugin-prettier/4.0.0_1815ac95b7fb26c13c7d48a8eef62d0f:
4703 resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} 4703 resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==}
4704 engines: {node: '>=6.0.0'} 4704 engines: {node: '>=6.0.0'}
4705 peerDependencies: 4705 peerDependencies:
@@ -4884,7 +4884,7 @@ packages: @@ -4884,7 +4884,7 @@ packages:
4884 dev: true 4884 dev: true
4885 4885
4886 /execa/0.7.0: 4886 /execa/0.7.0:
4887 - resolution: {integrity: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=} 4887 + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
4888 engines: {node: '>=4'} 4888 engines: {node: '>=4'}
4889 dependencies: 4889 dependencies:
4890 cross-spawn: 5.1.0 4890 cross-spawn: 5.1.0
@@ -5070,7 +5070,7 @@ packages: @@ -5070,7 +5070,7 @@ packages:
5070 dev: true 5070 dev: true
5071 5071
5072 /fd-slicer/1.1.0: 5072 /fd-slicer/1.1.0:
5073 - resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} 5073 + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
5074 dependencies: 5074 dependencies:
5075 pend: 1.2.0 5075 pend: 1.2.0
5076 dev: true 5076 dev: true
@@ -5115,17 +5115,17 @@ packages: @@ -5115,17 +5115,17 @@ packages:
5115 dev: true 5115 dev: true
5116 5116
5117 /file-type/3.9.0: 5117 /file-type/3.9.0:
5118 - resolution: {integrity: sha1-JXoHg4TR24CHvESdEH1SpSZyuek=} 5118 + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==}
5119 engines: {node: '>=0.10.0'} 5119 engines: {node: '>=0.10.0'}
5120 dev: true 5120 dev: true
5121 5121
5122 /file-type/4.4.0: 5122 /file-type/4.4.0:
5123 - resolution: {integrity: sha1-G2AOX8ofvcboDApwxxyNul95BsU=} 5123 + resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==}
5124 engines: {node: '>=4'} 5124 engines: {node: '>=4'}
5125 dev: true 5125 dev: true
5126 5126
5127 /file-type/5.2.0: 5127 /file-type/5.2.0:
5128 - resolution: {integrity: sha1-LdvqfHP/42No365J3DOMBYwritY=} 5128 + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==}
5129 engines: {node: '>=4'} 5129 engines: {node: '>=4'}
5130 dev: true 5130 dev: true
5131 5131
@@ -5146,7 +5146,7 @@ packages: @@ -5146,7 +5146,7 @@ packages:
5146 dev: true 5146 dev: true
5147 5147
5148 /filename-reserved-regex/2.0.0: 5148 /filename-reserved-regex/2.0.0:
5149 - resolution: {integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik=} 5149 + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==}
5150 engines: {node: '>=4'} 5150 engines: {node: '>=4'}
5151 dev: true 5151 dev: true
5152 5152
@@ -5302,7 +5302,7 @@ packages: @@ -5302,7 +5302,7 @@ packages:
5302 dev: true 5302 dev: true
5303 5303
5304 /from2/2.3.0: 5304 /from2/2.3.0:
5305 - resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=} 5305 + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
5306 dependencies: 5306 dependencies:
5307 inherits: 2.0.4 5307 inherits: 2.0.4
5308 readable-stream: 2.3.7 5308 readable-stream: 2.3.7
@@ -5412,7 +5412,7 @@ packages: @@ -5412,7 +5412,7 @@ packages:
5412 dev: true 5412 dev: true
5413 5413
5414 /get-stream/2.3.1: 5414 /get-stream/2.3.1:
5415 - resolution: {integrity: sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=} 5415 + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==}
5416 engines: {node: '>=0.10.0'} 5416 engines: {node: '>=0.10.0'}
5417 dependencies: 5417 dependencies:
5418 object-assign: 4.1.1 5418 object-assign: 4.1.1
@@ -5420,7 +5420,7 @@ packages: @@ -5420,7 +5420,7 @@ packages:
5420 dev: true 5420 dev: true
5421 5421
5422 /get-stream/3.0.0: 5422 /get-stream/3.0.0:
5423 - resolution: {integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=} 5423 + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
5424 engines: {node: '>=4'} 5424 engines: {node: '>=4'}
5425 dev: true 5425 dev: true
5426 5426
@@ -5897,7 +5897,7 @@ packages: @@ -5897,7 +5897,7 @@ packages:
5897 dev: true 5897 dev: true
5898 5898
5899 /image-size/0.5.5: 5899 /image-size/0.5.5:
5900 - resolution: {integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=} 5900 + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
5901 engines: {node: '>=0.10.0'} 5901 engines: {node: '>=0.10.0'}
5902 hasBin: true 5902 hasBin: true
5903 dev: true 5903 dev: true
@@ -6079,7 +6079,7 @@ packages: @@ -6079,7 +6079,7 @@ packages:
6079 dev: true 6079 dev: true
6080 6080
6081 /into-stream/3.1.0: 6081 /into-stream/3.1.0:
6082 - resolution: {integrity: sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=} 6082 + resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==}
6083 engines: {node: '>=4'} 6083 engines: {node: '>=4'}
6084 dependencies: 6084 dependencies:
6085 from2: 2.3.0 6085 from2: 2.3.0
@@ -6267,7 +6267,7 @@ packages: @@ -6267,7 +6267,7 @@ packages:
6267 dev: true 6267 dev: true
6268 6268
6269 /is-natural-number/4.0.1: 6269 /is-natural-number/4.0.1:
6270 - resolution: {integrity: sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=} 6270 + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==}
6271 dev: true 6271 dev: true
6272 6272
6273 /is-negative-zero/2.0.2: 6273 /is-negative-zero/2.0.2:
@@ -6433,7 +6433,7 @@ packages: @@ -6433,7 +6433,7 @@ packages:
6433 dev: true 6433 dev: true
6434 6434
6435 /isarray/1.0.0: 6435 /isarray/1.0.0:
6436 - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} 6436 + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
6437 dev: true 6437 dev: true
6438 6438
6439 /isexe/2.0.0: 6439 /isexe/2.0.0:
@@ -6532,7 +6532,7 @@ packages: @@ -6532,7 +6532,7 @@ packages:
6532 dev: true 6532 dev: true
6533 6533
6534 /json-buffer/3.0.0: 6534 /json-buffer/3.0.0:
6535 - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} 6535 + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
6536 dev: true 6536 dev: true
6537 6537
6538 /json-parse-better-errors/1.0.2: 6538 /json-parse-better-errors/1.0.2:
@@ -6865,7 +6865,7 @@ packages: @@ -6865,7 +6865,7 @@ packages:
6865 dev: true 6865 dev: true
6866 6866
6867 /lowercase-keys/1.0.0: 6867 /lowercase-keys/1.0.0:
6868 - resolution: {integrity: sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=} 6868 + resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==}
6869 engines: {node: '>=0.10.0'} 6869 engines: {node: '>=0.10.0'}
6870 dev: true 6870 dev: true
6871 6871
@@ -7509,7 +7509,7 @@ packages: @@ -7509,7 +7509,7 @@ packages:
7509 dev: true 7509 dev: true
7510 7510
7511 /p-event/1.3.0: 7511 /p-event/1.3.0:
7512 - resolution: {integrity: sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=} 7512 + resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==}
7513 engines: {node: '>=4'} 7513 engines: {node: '>=4'}
7514 dependencies: 7514 dependencies:
7515 p-timeout: 1.2.1 7515 p-timeout: 1.2.1
@@ -7528,7 +7528,7 @@ packages: @@ -7528,7 +7528,7 @@ packages:
7528 dev: true 7528 dev: true
7529 7529
7530 /p-is-promise/1.1.0: 7530 /p-is-promise/1.1.0:
7531 - resolution: {integrity: sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=} 7531 + resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==}
7532 engines: {node: '>=4'} 7532 engines: {node: '>=4'}
7533 dev: true 7533 dev: true
7534 7534
@@ -7597,7 +7597,7 @@ packages: @@ -7597,7 +7597,7 @@ packages:
7597 dev: true 7597 dev: true
7598 7598
7599 /p-timeout/1.2.1: 7599 /p-timeout/1.2.1:
7600 - resolution: {integrity: sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=} 7600 + resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==}
7601 engines: {node: '>=4'} 7601 engines: {node: '>=4'}
7602 dependencies: 7602 dependencies:
7603 p-finally: 1.0.0 7603 p-finally: 1.0.0
@@ -7756,7 +7756,7 @@ packages: @@ -7756,7 +7756,7 @@ packages:
7756 dev: true 7756 dev: true
7757 7757
7758 /pend/1.2.0: 7758 /pend/1.2.0:
7759 - resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} 7759 + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
7760 dev: true 7760 dev: true
7761 7761
7762 /picocolors/1.0.0: 7762 /picocolors/1.0.0:
@@ -7780,12 +7780,12 @@ packages: @@ -7780,12 +7780,12 @@ packages:
7780 dev: true 7780 dev: true
7781 7781
7782 /pify/2.3.0: 7782 /pify/2.3.0:
7783 - resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} 7783 + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
7784 engines: {node: '>=0.10.0'} 7784 engines: {node: '>=0.10.0'}
7785 dev: true 7785 dev: true
7786 7786
7787 /pify/3.0.0: 7787 /pify/3.0.0:
7788 - resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} 7788 + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
7789 engines: {node: '>=4'} 7789 engines: {node: '>=4'}
7790 dev: true 7790 dev: true
7791 7791
@@ -7794,7 +7794,7 @@ packages: @@ -7794,7 +7794,7 @@ packages:
7794 engines: {node: '>=6'} 7794 engines: {node: '>=6'}
7795 dev: true 7795 dev: true
7796 7796
7797 - /pinia/2.0.12_ifhmkzsxec62ezvqv7qmanm4bq: 7797 + /pinia/2.0.12_typescript@4.6.3+vue@3.2.33:
7798 resolution: {integrity: sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==} 7798 resolution: {integrity: sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==}
7799 peerDependencies: 7799 peerDependencies:
7800 '@vue/composition-api': ^1.4.0 7800 '@vue/composition-api': ^1.4.0
@@ -7813,14 +7813,14 @@ packages: @@ -7813,14 +7813,14 @@ packages:
7813 dev: false 7813 dev: false
7814 7814
7815 /pinkie-promise/2.0.1: 7815 /pinkie-promise/2.0.1:
7816 - resolution: {integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=} 7816 + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
7817 engines: {node: '>=0.10.0'} 7817 engines: {node: '>=0.10.0'}
7818 dependencies: 7818 dependencies:
7819 pinkie: 2.0.4 7819 pinkie: 2.0.4
7820 dev: true 7820 dev: true
7821 7821
7822 /pinkie/2.0.4: 7822 /pinkie/2.0.4:
7823 - resolution: {integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=} 7823 + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
7824 engines: {node: '>=0.10.0'} 7824 engines: {node: '>=0.10.0'}
7825 dev: true 7825 dev: true
7826 7826
@@ -7971,12 +7971,12 @@ packages: @@ -7971,12 +7971,12 @@ packages:
7971 dev: true 7971 dev: true
7972 7972
7973 /prepend-http/1.0.4: 7973 /prepend-http/1.0.4:
7974 - resolution: {integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=} 7974 + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
7975 engines: {node: '>=0.10.0'} 7975 engines: {node: '>=0.10.0'}
7976 dev: true 7976 dev: true
7977 7977
7978 /prepend-http/2.0.0: 7978 /prepend-http/2.0.0:
7979 - resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} 7979 + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==}
7980 engines: {node: '>=4'} 7980 engines: {node: '>=4'}
7981 dev: true 7981 dev: true
7982 7982
@@ -8007,7 +8007,7 @@ packages: @@ -8007,7 +8007,7 @@ packages:
8007 dev: true 8007 dev: true
8008 8008
8009 /proto-list/1.2.4: 8009 /proto-list/1.2.4:
8010 - resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=} 8010 + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
8011 dev: true 8011 dev: true
8012 8012
8013 /prr/1.0.1: 8013 /prr/1.0.1:
@@ -8016,7 +8016,7 @@ packages: @@ -8016,7 +8016,7 @@ packages:
8016 optional: true 8016 optional: true
8017 8017
8018 /pseudomap/1.0.2: 8018 /pseudomap/1.0.2:
8019 - resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} 8019 + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
8020 dev: true 8020 dev: true
8021 8021
8022 /pug-error/2.0.0: 8022 /pug-error/2.0.0:
@@ -8351,7 +8351,7 @@ packages: @@ -8351,7 +8351,7 @@ packages:
8351 dev: true 8351 dev: true
8352 8352
8353 /responselike/1.0.2: 8353 /responselike/1.0.2:
8354 - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} 8354 + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
8355 dependencies: 8355 dependencies:
8356 lowercase-keys: 1.0.1 8356 lowercase-keys: 1.0.1
8357 dev: true 8357 dev: true
@@ -8511,7 +8511,7 @@ packages: @@ -8511,7 +8511,7 @@ packages:
8511 dev: true 8511 dev: true
8512 8512
8513 /semver-truncate/1.1.2: 8513 /semver-truncate/1.1.2:
8514 - resolution: {integrity: sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=} 8514 + resolution: {integrity: sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==}
8515 engines: {node: '>=0.10.0'} 8515 engines: {node: '>=0.10.0'}
8516 dependencies: 8516 dependencies:
8517 semver: 5.7.1 8517 semver: 5.7.1
@@ -8695,21 +8695,21 @@ packages: @@ -8695,21 +8695,21 @@ packages:
8695 dev: true 8695 dev: true
8696 8696
8697 /sort-keys-length/1.0.1: 8697 /sort-keys-length/1.0.1:
8698 - resolution: {integrity: sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=} 8698 + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
8699 engines: {node: '>=0.10.0'} 8699 engines: {node: '>=0.10.0'}
8700 dependencies: 8700 dependencies:
8701 sort-keys: 1.1.2 8701 sort-keys: 1.1.2
8702 dev: true 8702 dev: true
8703 8703
8704 /sort-keys/1.1.2: 8704 /sort-keys/1.1.2:
8705 - resolution: {integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=} 8705 + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
8706 engines: {node: '>=0.10.0'} 8706 engines: {node: '>=0.10.0'}
8707 dependencies: 8707 dependencies:
8708 is-plain-obj: 1.1.0 8708 is-plain-obj: 1.1.0
8709 dev: true 8709 dev: true
8710 8710
8711 /sort-keys/2.0.0: 8711 /sort-keys/2.0.0:
8712 - resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=} 8712 + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
8713 engines: {node: '>=4'} 8713 engines: {node: '>=4'}
8714 dependencies: 8714 dependencies:
8715 is-plain-obj: 1.1.0 8715 is-plain-obj: 1.1.0
@@ -9053,7 +9053,7 @@ packages: @@ -9053,7 +9053,7 @@ packages:
9053 resolution: {integrity: sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=} 9053 resolution: {integrity: sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=}
9054 dev: true 9054 dev: true
9055 9055
9056 - /stylelint-config-html/1.0.0_dkblcabdfo7hanxmbj6kpjf26q: 9056 + /stylelint-config-html/1.0.0_1a82b100232bbe7036ec0a7ca7a4baf4:
9057 resolution: {integrity: sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==} 9057 resolution: {integrity: sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==}
9058 engines: {node: ^12 || >=14} 9058 engines: {node: ^12 || >=14}
9059 peerDependencies: 9059 peerDependencies:
@@ -9074,7 +9074,7 @@ packages: @@ -9074,7 +9074,7 @@ packages:
9074 stylelint: 14.7.1 9074 stylelint: 14.7.1
9075 dev: true 9075 dev: true
9076 9076
9077 - /stylelint-config-recommended-vue/1.4.0_dkblcabdfo7hanxmbj6kpjf26q: 9077 + /stylelint-config-recommended-vue/1.4.0_1a82b100232bbe7036ec0a7ca7a4baf4:
9078 resolution: {integrity: sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q==} 9078 resolution: {integrity: sha512-DVJqyX2KvMCn9U0+keL12r7xlsH26K4Vg8NrIZuq5MoF7g82DpMp326Om4E0Q+Il1o+bTHuUyejf2XAI0iD04Q==}
9079 engines: {node: ^12 || >=14} 9079 engines: {node: ^12 || >=14}
9080 peerDependencies: 9080 peerDependencies:
@@ -9084,7 +9084,7 @@ packages: @@ -9084,7 +9084,7 @@ packages:
9084 postcss-html: 1.4.1 9084 postcss-html: 1.4.1
9085 semver: 7.3.7 9085 semver: 7.3.7
9086 stylelint: 14.7.1 9086 stylelint: 14.7.1
9087 - stylelint-config-html: 1.0.0_dkblcabdfo7hanxmbj6kpjf26q 9087 + stylelint-config-html: 1.0.0_1a82b100232bbe7036ec0a7ca7a4baf4
9088 stylelint-config-recommended: 7.0.0_stylelint@14.7.1 9088 stylelint-config-recommended: 7.0.0_stylelint@14.7.1
9089 dev: true 9089 dev: true
9090 9090
@@ -9347,7 +9347,7 @@ packages: @@ -9347,7 +9347,7 @@ packages:
9347 dev: true 9347 dev: true
9348 9348
9349 /timed-out/4.0.1: 9349 /timed-out/4.0.1:
9350 - resolution: {integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=} 9350 + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==}
9351 engines: {node: '>=0.10.0'} 9351 engines: {node: '>=0.10.0'}
9352 dev: true 9352 dev: true
9353 9353
@@ -9436,13 +9436,13 @@ packages: @@ -9436,13 +9436,13 @@ packages:
9436 dev: true 9436 dev: true
9437 9437
9438 /trim-repeated/1.0.0: 9438 /trim-repeated/1.0.0:
9439 - resolution: {integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE=} 9439 + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
9440 engines: {node: '>=0.10.0'} 9440 engines: {node: '>=0.10.0'}
9441 dependencies: 9441 dependencies:
9442 escape-string-regexp: 1.0.5 9442 escape-string-regexp: 1.0.5
9443 dev: true 9443 dev: true
9444 9444
9445 - /ts-node/10.7.0_3z6inmgn4ud4moqealnfxgbl2m: 9445 + /ts-node/10.7.0_de7c86b0cde507c63a0402da5b982bd3:
9446 resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} 9446 resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==}
9447 hasBin: true 9447 hasBin: true
9448 peerDependencies: 9448 peerDependencies:
@@ -9496,7 +9496,7 @@ packages: @@ -9496,7 +9496,7 @@ packages:
9496 dev: true 9496 dev: true
9497 9497
9498 /tunnel-agent/0.6.0: 9498 /tunnel-agent/0.6.0:
9499 - resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} 9499 + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
9500 dependencies: 9500 dependencies:
9501 safe-buffer: 5.2.1 9501 safe-buffer: 5.2.1
9502 dev: true 9502 dev: true
@@ -9681,14 +9681,14 @@ packages: @@ -9681,14 +9681,14 @@ packages:
9681 dev: true 9681 dev: true
9682 9682
9683 /url-parse-lax/3.0.0: 9683 /url-parse-lax/3.0.0:
9684 - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} 9684 + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==}
9685 engines: {node: '>=4'} 9685 engines: {node: '>=4'}
9686 dependencies: 9686 dependencies:
9687 prepend-http: 2.0.0 9687 prepend-http: 2.0.0
9688 dev: true 9688 dev: true
9689 9689
9690 /url-to-options/1.0.1: 9690 /url-to-options/1.0.1:
9691 - resolution: {integrity: sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=} 9691 + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==}
9692 engines: {node: '>= 4'} 9692 engines: {node: '>= 4'}
9693 dev: true 9693 dev: true
9694 9694
@@ -9816,7 +9816,7 @@ packages: @@ -9816,7 +9816,7 @@ packages:
9816 - supports-color 9816 - supports-color
9817 dev: true 9817 dev: true
9818 9818
9819 - /vite-plugin-mock/2.9.6_qiwm6q27tfokd2mntem6ma7w4y: 9819 + /vite-plugin-mock/2.9.6_822ccf435f995ca1e98d9919e603f6e6:
9820 resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==} 9820 resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==}
9821 engines: {node: '>=12.0.0'} 9821 engines: {node: '>=12.0.0'}
9822 peerDependencies: 9822 peerDependencies:
@@ -10202,7 +10202,7 @@ packages: @@ -10202,7 +10202,7 @@ packages:
10202 '@babel/core': 7.17.9 10202 '@babel/core': 7.17.9
10203 '@babel/preset-env': 7.16.11_@babel+core@7.17.9 10203 '@babel/preset-env': 7.16.11_@babel+core@7.17.9
10204 '@babel/runtime': 7.17.9 10204 '@babel/runtime': 7.17.9
10205 - '@rollup/plugin-babel': 5.3.1_6m6vi5xreq5wlqqwvo3xvcrttm 10205 + '@rollup/plugin-babel': 5.3.1_@babel+core@7.17.9+rollup@2.70.2
10206 '@rollup/plugin-node-resolve': 11.2.1_rollup@2.70.2 10206 '@rollup/plugin-node-resolve': 11.2.1_rollup@2.70.2
10207 '@rollup/plugin-replace': 2.4.2_rollup@2.70.2 10207 '@rollup/plugin-replace': 2.4.2_rollup@2.70.2
10208 '@surma/rollup-plugin-off-main-thread': 2.2.3 10208 '@surma/rollup-plugin-off-main-thread': 2.2.3
@@ -10385,7 +10385,7 @@ packages: @@ -10385,7 +10385,7 @@ packages:
10385 dev: true 10385 dev: true
10386 10386
10387 /yallist/2.1.2: 10387 /yallist/2.1.2:
10388 - resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} 10388 + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
10389 dev: true 10389 dev: true
10390 10390
10391 /yallist/4.0.0: 10391 /yallist/4.0.0:
@@ -10459,7 +10459,7 @@ packages: @@ -10459,7 +10459,7 @@ packages:
10459 dev: true 10459 dev: true
10460 10460
10461 /yauzl/2.10.0: 10461 /yauzl/2.10.0:
10462 - resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} 10462 + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
10463 dependencies: 10463 dependencies:
10464 buffer-crc32: 0.2.13 10464 buffer-crc32: 0.2.13
10465 fd-slicer: 1.1.0 10465 fd-slicer: 1.1.0
src/enums/appEnum.ts
@@ -30,14 +30,18 @@ export enum SessionTimeoutProcessingEnum { @@ -30,14 +30,18 @@ export enum SessionTimeoutProcessingEnum {
30 */ 30 */
31 export enum PermissionModeEnum { 31 export enum PermissionModeEnum {
32 // role 32 // role
  33 + // 角色权限
33 ROLE = 'ROLE', 34 ROLE = 'ROLE',
34 // black 35 // black
  36 + // 后端
35 BACK = 'BACK', 37 BACK = 'BACK',
36 // route mapping 38 // route mapping
  39 + // 路由映射
37 ROUTE_MAPPING = 'ROUTE_MAPPING', 40 ROUTE_MAPPING = 'ROUTE_MAPPING',
38 } 41 }
39 42
40 -// Route switching animation 43 +// Route switching animation
  44 +// 路由切换动画
41 export enum RouterTransitionEnum { 45 export enum RouterTransitionEnum {
42 ZOOM_FADE = 'zoom-fade', 46 ZOOM_FADE = 'zoom-fade',
43 ZOOM_OUT = 'zoom-out', 47 ZOOM_OUT = 'zoom-out',
src/hooks/web/usePermission.ts
@@ -39,6 +39,7 @@ export function usePermission() { @@ -39,6 +39,7 @@ export function usePermission() {
39 39
40 /** 40 /**
41 * Reset and regain authority resource information 41 * Reset and regain authority resource information
  42 + * 重置和重新获得权限资源信息
42 * @param id 43 * @param id
43 */ 44 */
44 async function resume() { 45 async function resume() {
src/router/helper/menuHelper.ts
@@ -11,14 +11,18 @@ export function getAllParentPath<T = Recordable>(treeData: T[], path: string) { @@ -11,14 +11,18 @@ export function getAllParentPath<T = Recordable>(treeData: T[], path: string) {
11 return (menuList || []).map((item) => item.path); 11 return (menuList || []).map((item) => item.path);
12 } 12 }
13 13
  14 +// 路径处理
14 function joinParentPath(menus: Menu[], parentPath = '') { 15 function joinParentPath(menus: Menu[], parentPath = '') {
15 for (let index = 0; index < menus.length; index++) { 16 for (let index = 0; index < menus.length; index++) {
16 const menu = menus[index]; 17 const menu = menus[index];
17 // https://next.router.vuejs.org/guide/essentials/nested-routes.html 18 // https://next.router.vuejs.org/guide/essentials/nested-routes.html
18 // Note that nested paths that start with / will be treated as a root path. 19 // Note that nested paths that start with / will be treated as a root path.
  20 + // 请注意,以 / 开头的嵌套路径将被视为根路径。
19 // This allows you to leverage the component nesting without having to use a nested URL. 21 // This allows you to leverage the component nesting without having to use a nested URL.
  22 + // 这允许你利用组件嵌套,而无需使用嵌套 URL。
20 if (!(menu.path.startsWith('/') || isUrl(menu.path))) { 23 if (!(menu.path.startsWith('/') || isUrl(menu.path))) {
21 // path doesn't start with /, nor is it a url, join parent path 24 // path doesn't start with /, nor is it a url, join parent path
  25 + // 路径不以 / 开头,也不是 url,加入父路径
22 menu.path = `${parentPath}/${menu.path}`; 26 menu.path = `${parentPath}/${menu.path}`;
23 } 27 }
24 if (menu?.children?.length) { 28 if (menu?.children?.length) {
@@ -37,14 +41,18 @@ export function transformMenuModule(menuModule: MenuModule): Menu { @@ -37,14 +41,18 @@ export function transformMenuModule(menuModule: MenuModule): Menu {
37 return menuList[0]; 41 return menuList[0];
38 } 42 }
39 43
  44 +// 将路由转换成菜单
40 export function transformRouteToMenu(routeModList: AppRouteModule[], routerMapping = false) { 45 export function transformRouteToMenu(routeModList: AppRouteModule[], routerMapping = false) {
  46 + // 借助 lodash 深拷贝
41 const cloneRouteModList = cloneDeep(routeModList); 47 const cloneRouteModList = cloneDeep(routeModList);
42 const routeList: AppRouteRecordRaw[] = []; 48 const routeList: AppRouteRecordRaw[] = [];
43 49
  50 + // 对路由项进行修改
44 cloneRouteModList.forEach((item) => { 51 cloneRouteModList.forEach((item) => {
45 if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === 'string') { 52 if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === 'string') {
46 item.path = item.redirect; 53 item.path = item.redirect;
47 } 54 }
  55 +
48 if (item.meta?.single) { 56 if (item.meta?.single) {
49 const realItem = item?.children?.[0]; 57 const realItem = item?.children?.[0];
50 realItem && routeList.push(realItem); 58 realItem && routeList.push(realItem);
@@ -52,6 +60,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi @@ -52,6 +60,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi
52 routeList.push(item); 60 routeList.push(item);
53 } 61 }
54 }); 62 });
  63 + // 提取树指定结构
55 const list = treeMap(routeList, { 64 const list = treeMap(routeList, {
56 conversion: (node: AppRouteRecordRaw) => { 65 conversion: (node: AppRouteRecordRaw) => {
57 const { meta: { title, hideMenu = false } = {} } = node; 66 const { meta: { title, hideMenu = false } = {} } = node;
@@ -66,6 +75,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi @@ -66,6 +75,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi
66 }; 75 };
67 }, 76 },
68 }); 77 });
  78 + // 路径处理
69 joinParentPath(list); 79 joinParentPath(list);
70 return cloneDeep(list); 80 return cloneDeep(list);
71 } 81 }
@@ -74,6 +84,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi @@ -74,6 +84,7 @@ export function transformRouteToMenu(routeModList: AppRouteModule[], routerMappi
74 * config menu with given params 84 * config menu with given params
75 */ 85 */
76 const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g; 86 const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g;
  87 +
77 export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) { 88 export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) {
78 const { path, paramPath } = toRaw(menu); 89 const { path, paramPath } = toRaw(menu);
79 let realPath = paramPath ? paramPath : path; 90 let realPath = paramPath ? paramPath : path;
src/router/helper/routeHelper.ts
@@ -68,6 +68,7 @@ function dynamicImport( @@ -68,6 +68,7 @@ function dynamicImport(
68 } 68 }
69 69
70 // Turn background objects into routing objects 70 // Turn background objects into routing objects
  71 +// 将背景对象变成路由对象
71 export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] { 72 export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] {
72 routeList.forEach((route) => { 73 routeList.forEach((route) => {
73 const component = route.component as string; 74 const component = route.component as string;
@@ -94,35 +95,46 @@ export function transformObjToRoute&lt;T = AppRouteModule&gt;(routeList: AppRouteModul @@ -94,35 +95,46 @@ export function transformObjToRoute&lt;T = AppRouteModule&gt;(routeList: AppRouteModul
94 95
95 /** 96 /**
96 * Convert multi-level routing to level 2 routing 97 * Convert multi-level routing to level 2 routing
  98 + * 将多级路由转换为 2 级路由
97 */ 99 */
98 export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) { 100 export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) {
99 const modules: AppRouteModule[] = cloneDeep(routeModules); 101 const modules: AppRouteModule[] = cloneDeep(routeModules);
  102 +
100 for (let index = 0; index < modules.length; index++) { 103 for (let index = 0; index < modules.length; index++) {
101 const routeModule = modules[index]; 104 const routeModule = modules[index];
  105 + // 判断级别是否 多级 路由
102 if (!isMultipleRoute(routeModule)) { 106 if (!isMultipleRoute(routeModule)) {
  107 + // 声明终止当前循环, 即跳过此次循环,进行下一轮
103 continue; 108 continue;
104 } 109 }
  110 + // 路由等级提升
105 promoteRouteLevel(routeModule); 111 promoteRouteLevel(routeModule);
106 } 112 }
107 return modules; 113 return modules;
108 } 114 }
109 115
110 // Routing level upgrade 116 // Routing level upgrade
  117 +// 路由等级提升
111 function promoteRouteLevel(routeModule: AppRouteModule) { 118 function promoteRouteLevel(routeModule: AppRouteModule) {
112 // Use vue-router to splice menus 119 // Use vue-router to splice menus
  120 + // 使用vue-router拼接菜单
  121 + // createRouter 创建一个可以被 Vue 应用程序使用的路由实例
113 let router: Router | null = createRouter({ 122 let router: Router | null = createRouter({
114 routes: [routeModule as unknown as RouteRecordNormalized], 123 routes: [routeModule as unknown as RouteRecordNormalized],
115 history: createWebHashHistory(), 124 history: createWebHashHistory(),
116 }); 125 });
117 - 126 + // getRoutes: 获取所有 路由记录的完整列表。
118 const routes = router.getRoutes(); 127 const routes = router.getRoutes();
  128 + // 将所有子路由添加到二级路由
119 addToChildren(routes, routeModule.children || [], routeModule); 129 addToChildren(routes, routeModule.children || [], routeModule);
120 router = null; 130 router = null;
121 131
  132 + // omit lodash的函数 对传入的item对象的children进行删除
122 routeModule.children = routeModule.children?.map((item) => omit(item, 'children')); 133 routeModule.children = routeModule.children?.map((item) => omit(item, 'children'));
123 } 134 }
124 135
125 // Add all sub-routes to the secondary route 136 // Add all sub-routes to the secondary route
  137 +// 将所有子路由添加到二级路由
126 function addToChildren( 138 function addToChildren(
127 routes: RouteRecordNormalized[], 139 routes: RouteRecordNormalized[],
128 children: AppRouteRecordRaw[], 140 children: AppRouteRecordRaw[],
@@ -145,7 +157,9 @@ function addToChildren( @@ -145,7 +157,9 @@ function addToChildren(
145 } 157 }
146 158
147 // Determine whether the level exceeds 2 levels 159 // Determine whether the level exceeds 2 levels
  160 +// 判断级别是否超过2级
148 function isMultipleRoute(routeModule: AppRouteModule) { 161 function isMultipleRoute(routeModule: AppRouteModule) {
  162 + // Reflect.has 与 in 操作符 相同, 用于检查一个对象(包括它原型链上)是否拥有某个属性
149 if (!routeModule || !Reflect.has(routeModule, 'children') || !routeModule.children?.length) { 163 if (!routeModule || !Reflect.has(routeModule, 'children') || !routeModule.children?.length) {
150 return false; 164 return false;
151 } 165 }
src/router/index.ts
@@ -36,6 +36,7 @@ export function resetRouter() { @@ -36,6 +36,7 @@ export function resetRouter() {
36 } 36 }
37 37
38 // config router 38 // config router
  39 +// 配置路由器
39 export function setupRouter(app: App<Element>) { 40 export function setupRouter(app: App<Element>) {
40 app.use(router); 41 app.use(router);
41 } 42 }
src/router/routes/index.ts
@@ -6,10 +6,11 @@ import { mainOutRoutes } from &#39;./mainOut&#39;; @@ -6,10 +6,11 @@ import { mainOutRoutes } from &#39;./mainOut&#39;;
6 import { PageEnum } from '/@/enums/pageEnum'; 6 import { PageEnum } from '/@/enums/pageEnum';
7 import { t } from '/@/hooks/web/useI18n'; 7 import { t } from '/@/hooks/web/useI18n';
8 8
  9 +// import.meta.globEager() 直接引入所有的模块 Vite 独有的功能
9 const modules = import.meta.globEager('./modules/**/*.ts'); 10 const modules = import.meta.globEager('./modules/**/*.ts');
10 -  
11 const routeModuleList: AppRouteModule[] = []; 11 const routeModuleList: AppRouteModule[] = [];
12 12
  13 +// 加入到路由集合中
13 Object.keys(modules).forEach((key) => { 14 Object.keys(modules).forEach((key) => {
14 const mod = modules[key].default || {}; 15 const mod = modules[key].default || {};
15 const modList = Array.isArray(mod) ? [...mod] : [mod]; 16 const modList = Array.isArray(mod) ? [...mod] : [mod];
@@ -18,6 +19,7 @@ Object.keys(modules).forEach((key) =&gt; { @@ -18,6 +19,7 @@ Object.keys(modules).forEach((key) =&gt; {
18 19
19 export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]; 20 export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList];
20 21
  22 +// 根路由
21 export const RootRoute: AppRouteRecordRaw = { 23 export const RootRoute: AppRouteRecordRaw = {
22 path: '/', 24 path: '/',
23 name: 'Root', 25 name: 'Root',
src/store/modules/permission.ts
@@ -26,26 +26,37 @@ import { PageEnum } from &#39;/@/enums/pageEnum&#39;; @@ -26,26 +26,37 @@ import { PageEnum } from &#39;/@/enums/pageEnum&#39;;
26 26
27 interface PermissionState { 27 interface PermissionState {
28 // Permission code list 28 // Permission code list
  29 + // 权限代码列表
29 permCodeList: string[] | number[]; 30 permCodeList: string[] | number[];
30 // Whether the route has been dynamically added 31 // Whether the route has been dynamically added
  32 + // 路由是否动态添加
31 isDynamicAddedRoute: boolean; 33 isDynamicAddedRoute: boolean;
32 // To trigger a menu update 34 // To trigger a menu update
  35 + // 触发菜单更新
33 lastBuildMenuTime: number; 36 lastBuildMenuTime: number;
34 // Backstage menu list 37 // Backstage menu list
  38 + // 后台菜单列表
35 backMenuList: Menu[]; 39 backMenuList: Menu[];
  40 + // 菜单列表
36 frontMenuList: Menu[]; 41 frontMenuList: Menu[];
37 } 42 }
  43 +
38 export const usePermissionStore = defineStore({ 44 export const usePermissionStore = defineStore({
39 id: 'app-permission', 45 id: 'app-permission',
40 state: (): PermissionState => ({ 46 state: (): PermissionState => ({
  47 + // 权限代码列表
41 permCodeList: [], 48 permCodeList: [],
42 // Whether the route has been dynamically added 49 // Whether the route has been dynamically added
  50 + // 路由是否动态添加
43 isDynamicAddedRoute: false, 51 isDynamicAddedRoute: false,
44 // To trigger a menu update 52 // To trigger a menu update
  53 + // 触发菜单更新
45 lastBuildMenuTime: 0, 54 lastBuildMenuTime: 0,
46 // Backstage menu list 55 // Backstage menu list
  56 + // 后台菜单列表
47 backMenuList: [], 57 backMenuList: [],
48 // menu List 58 // menu List
  59 + // 菜单列表
49 frontMenuList: [], 60 frontMenuList: [],
50 }), 61 }),
51 getters: { 62 getters: {
@@ -96,6 +107,8 @@ export const usePermissionStore = defineStore({ @@ -96,6 +107,8 @@ export const usePermissionStore = defineStore({
96 const codeList = await getPermCode(); 107 const codeList = await getPermCode();
97 this.setPermCodeList(codeList); 108 this.setPermCodeList(codeList);
98 }, 109 },
  110 +
  111 + // 构建路由
99 async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { 112 async buildRoutesAction(): Promise<AppRouteRecordRaw[]> {
100 const { t } = useI18n(); 113 const { t } = useI18n();
101 const userStore = useUserStore(); 114 const userStore = useUserStore();
@@ -105,16 +118,21 @@ export const usePermissionStore = defineStore({ @@ -105,16 +118,21 @@ export const usePermissionStore = defineStore({
105 const roleList = toRaw(userStore.getRoleList) || []; 118 const roleList = toRaw(userStore.getRoleList) || [];
106 const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; 119 const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig;
107 120
  121 + // 路由过滤器 在 函数filter 作为回调传入遍历使用
108 const routeFilter = (route: AppRouteRecordRaw) => { 122 const routeFilter = (route: AppRouteRecordRaw) => {
109 const { meta } = route; 123 const { meta } = route;
  124 + // 抽出角色
110 const { roles } = meta || {}; 125 const { roles } = meta || {};
111 if (!roles) return true; 126 if (!roles) return true;
  127 + // 进行角色权限判断
112 return roleList.some((role) => roles.includes(role)); 128 return roleList.some((role) => roles.includes(role));
113 }; 129 };
114 130
115 const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { 131 const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => {
116 const { meta } = route; 132 const { meta } = route;
  133 + // ignoreRoute 为true 则路由仅用于菜单生成,不会在实际的路由表中出现
117 const { ignoreRoute } = meta || {}; 134 const { ignoreRoute } = meta || {};
  135 + // arr.filter 返回 true 表示该元素通过测试
118 return !ignoreRoute; 136 return !ignoreRoute;
119 }; 137 };
120 138
@@ -124,6 +142,7 @@ export const usePermissionStore = defineStore({ @@ -124,6 +142,7 @@ export const usePermissionStore = defineStore({
124 const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { 142 const patchHomeAffix = (routes: AppRouteRecordRaw[]) => {
125 if (!routes || routes.length === 0) return; 143 if (!routes || routes.length === 0) return;
126 let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; 144 let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME;
  145 +
127 function patcher(routes: AppRouteRecordRaw[], parentPath = '') { 146 function patcher(routes: AppRouteRecordRaw[], parentPath = '') {
128 if (parentPath) parentPath = parentPath + '/'; 147 if (parentPath) parentPath = parentPath + '/';
129 routes.forEach((route: AppRouteRecordRaw) => { 148 routes.forEach((route: AppRouteRecordRaw) => {
@@ -140,6 +159,7 @@ export const usePermissionStore = defineStore({ @@ -140,6 +159,7 @@ export const usePermissionStore = defineStore({
140 children && children.length > 0 && patcher(children, currentPath); 159 children && children.length > 0 && patcher(children, currentPath);
141 }); 160 });
142 } 161 }
  162 +
143 try { 163 try {
144 patcher(routes); 164 patcher(routes);
145 } catch (e) { 165 } catch (e) {
@@ -149,29 +169,44 @@ export const usePermissionStore = defineStore({ @@ -149,29 +169,44 @@ export const usePermissionStore = defineStore({
149 }; 169 };
150 170
151 switch (permissionMode) { 171 switch (permissionMode) {
  172 + // 角色权限
152 case PermissionModeEnum.ROLE: 173 case PermissionModeEnum.ROLE:
  174 + // 对非一级路由进行过滤
153 routes = filter(asyncRoutes, routeFilter); 175 routes = filter(asyncRoutes, routeFilter);
  176 + // 对一级路由根据角色权限过滤
154 routes = routes.filter(routeFilter); 177 routes = routes.filter(routeFilter);
155 // Convert multi-level routing to level 2 routing 178 // Convert multi-level routing to level 2 routing
  179 + // 将多级路由转换为 2 级路由
156 routes = flatMultiLevelRoutes(routes); 180 routes = flatMultiLevelRoutes(routes);
157 break; 181 break;
158 182
  183 + // 路由映射, 默认进入该case
159 case PermissionModeEnum.ROUTE_MAPPING: 184 case PermissionModeEnum.ROUTE_MAPPING:
  185 + // 对非一级路由进行过滤
160 routes = filter(asyncRoutes, routeFilter); 186 routes = filter(asyncRoutes, routeFilter);
  187 + // 对一级路由再次根据角色权限过滤
161 routes = routes.filter(routeFilter); 188 routes = routes.filter(routeFilter);
  189 + // 将路由转换成菜单
162 const menuList = transformRouteToMenu(routes, true); 190 const menuList = transformRouteToMenu(routes, true);
  191 + // 移除掉 ignoreRoute: true 的路由 非一级路由
163 routes = filter(routes, routeRemoveIgnoreFilter); 192 routes = filter(routes, routeRemoveIgnoreFilter);
  193 + // 移除掉 ignoreRoute: true 的路由 一级路由;
164 routes = routes.filter(routeRemoveIgnoreFilter); 194 routes = routes.filter(routeRemoveIgnoreFilter);
  195 + // 对菜单进行排序
165 menuList.sort((a, b) => { 196 menuList.sort((a, b) => {
166 return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0); 197 return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0);
167 }); 198 });
168 199
  200 + // 设置菜单列表
169 this.setFrontMenuList(menuList); 201 this.setFrontMenuList(menuList);
  202 +
170 // Convert multi-level routing to level 2 routing 203 // Convert multi-level routing to level 2 routing
  204 + // 将多级路由转换为 2 级路由
171 routes = flatMultiLevelRoutes(routes); 205 routes = flatMultiLevelRoutes(routes);
172 break; 206 break;
173 207
174 // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below 208 // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below
  209 + // 如果确定不需要做后台动态权限,请在下方评论整个判断
175 case PermissionModeEnum.BACK: 210 case PermissionModeEnum.BACK:
176 const { createMessage } = useMessage(); 211 const { createMessage } = useMessage();
177 212
@@ -181,23 +216,28 @@ export const usePermissionStore = defineStore({ @@ -181,23 +216,28 @@ export const usePermissionStore = defineStore({
181 }); 216 });
182 217
183 // !Simulate to obtain permission codes from the background, 218 // !Simulate to obtain permission codes from the background,
  219 + // 模拟从后台获取权限码,
184 // this function may only need to be executed once, and the actual project can be put at the right time by itself 220 // this function may only need to be executed once, and the actual project can be put at the right time by itself
  221 + // 这个功能可能只需要执行一次,实际项目可以自己放在合适的时间
185 let routeList: AppRouteRecordRaw[] = []; 222 let routeList: AppRouteRecordRaw[] = [];
186 try { 223 try {
187 - this.changePermissionCode(); 224 + await this.changePermissionCode();
188 routeList = (await getMenuList()) as AppRouteRecordRaw[]; 225 routeList = (await getMenuList()) as AppRouteRecordRaw[];
189 } catch (error) { 226 } catch (error) {
190 console.error(error); 227 console.error(error);
191 } 228 }
192 229
193 // Dynamically introduce components 230 // Dynamically introduce components
  231 + // 动态引入组件
194 routeList = transformObjToRoute(routeList); 232 routeList = transformObjToRoute(routeList);
195 233
196 // Background routing to menu structure 234 // Background routing to menu structure
  235 + // 后台路由到菜单结构
197 const backMenuList = transformRouteToMenu(routeList); 236 const backMenuList = transformRouteToMenu(routeList);
198 this.setBackMenuList(backMenuList); 237 this.setBackMenuList(backMenuList);
199 238
200 // remove meta.ignoreRoute item 239 // remove meta.ignoreRoute item
  240 + // 删除 meta.ignoreRoute 项
201 routeList = filter(routeList, routeRemoveIgnoreFilter); 241 routeList = filter(routeList, routeRemoveIgnoreFilter);
202 routeList = routeList.filter(routeRemoveIgnoreFilter); 242 routeList = routeList.filter(routeRemoveIgnoreFilter);
203 243
@@ -214,6 +254,7 @@ export const usePermissionStore = defineStore({ @@ -214,6 +254,7 @@ export const usePermissionStore = defineStore({
214 }); 254 });
215 255
216 // Need to be used outside the setup 256 // Need to be used outside the setup
  257 +// 需要在设置之外使用
217 export function usePermissionStoreWithOut() { 258 export function usePermissionStoreWithOut() {
218 return usePermissionStore(store); 259 return usePermissionStore(store);
219 } 260 }
src/utils/helper/treeHelper.ts
@@ -3,15 +3,19 @@ interface TreeHelperConfig { @@ -3,15 +3,19 @@ interface TreeHelperConfig {
3 children: string; 3 children: string;
4 pid: string; 4 pid: string;
5 } 5 }
  6 +
  7 +// 默认配置
6 const DEFAULT_CONFIG: TreeHelperConfig = { 8 const DEFAULT_CONFIG: TreeHelperConfig = {
7 id: 'id', 9 id: 'id',
8 children: 'children', 10 children: 'children',
9 pid: 'pid', 11 pid: 'pid',
10 }; 12 };
11 13
  14 +// 获取配置。 Object.assign 从一个或多个源对象复制到目标对象
12 const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config); 15 const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);
13 16
14 // tree from list 17 // tree from list
  18 +// 列表中的树
15 export function listToTree<T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] { 19 export function listToTree<T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] {
16 const conf = getConfig(config) as TreeHelperConfig; 20 const conf = getConfig(config) as TreeHelperConfig;
17 const nodeMap = new Map(); 21 const nodeMap = new Map();
@@ -123,18 +127,24 @@ export function findPathAll(tree: any, func: Fn, config: Partial&lt;TreeHelperConfi @@ -123,18 +127,24 @@ export function findPathAll(tree: any, func: Fn, config: Partial&lt;TreeHelperConfi
123 export function filter<T = any>( 127 export function filter<T = any>(
124 tree: T[], 128 tree: T[],
125 func: (n: T) => boolean, 129 func: (n: T) => boolean,
  130 + // Partial 将 T 中的所有属性设为可选
126 config: Partial<TreeHelperConfig> = {}, 131 config: Partial<TreeHelperConfig> = {},
127 ): T[] { 132 ): T[] {
  133 + // 获取配置
128 config = getConfig(config); 134 config = getConfig(config);
129 const children = config.children as string; 135 const children = config.children as string;
  136 +
130 function listFilter(list: T[]) { 137 function listFilter(list: T[]) {
131 return list 138 return list
132 .map((node: any) => ({ ...node })) 139 .map((node: any) => ({ ...node }))
133 .filter((node) => { 140 .filter((node) => {
  141 + // 递归调用 对含有children项 进行再次调用自身函数 listFilter
134 node[children] = node[children] && listFilter(node[children]); 142 node[children] = node[children] && listFilter(node[children]);
  143 + // 执行传入的回调 func 进行过滤
135 return func(node) || (node[children] && node[children].length); 144 return func(node) || (node[children] && node[children].length);
136 }); 145 });
137 } 146 }
  147 +
138 return listFilter(tree); 148 return listFilter(tree);
139 } 149 }
140 150
@@ -157,6 +167,7 @@ export function forEach&lt;T = any&gt;( @@ -157,6 +167,7 @@ export function forEach&lt;T = any&gt;(
157 167
158 /** 168 /**
159 * @description: Extract tree specified structure 169 * @description: Extract tree specified structure
  170 + * @description: 提取树指定结构
160 */ 171 */
161 export function treeMap<T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] { 172 export function treeMap<T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] {
162 return treeData.map((item) => treeMapEach(item, opt)); 173 return treeData.map((item) => treeMapEach(item, opt));
@@ -164,6 +175,7 @@ export function treeMap&lt;T = any&gt;(treeData: T[], opt: { children?: string; conver @@ -164,6 +175,7 @@ export function treeMap&lt;T = any&gt;(treeData: T[], opt: { children?: string; conver
164 175
165 /** 176 /**
166 * @description: Extract tree specified structure 177 * @description: Extract tree specified structure
  178 + * @description: 提取树指定结构
167 */ 179 */
168 export function treeMapEach( 180 export function treeMapEach(
169 data: any, 181 data: any,
src/utils/http/axios/Axios.ts
@@ -61,7 +61,7 @@ export class VAxios { @@ -61,7 +61,7 @@ export class VAxios {
61 } 61 }
62 62
63 /** 63 /**
64 - * @description: Interceptor configuration 64 + * @description: Interceptor configuration 拦截器配置
65 */ 65 */
66 private setupInterceptors() { 66 private setupInterceptors() {
67 const transform = this.getTransform(); 67 const transform = this.getTransform();
src/utils/http/axios/index.ts
@@ -204,6 +204,7 @@ const transform: AxiosTransform = { @@ -204,6 +204,7 @@ const transform: AxiosTransform = {
204 204
205 function createAxios(opt?: Partial<CreateAxiosOptions>) { 205 function createAxios(opt?: Partial<CreateAxiosOptions>) {
206 return new VAxios( 206 return new VAxios(
  207 + // 深度合并
207 deepMerge( 208 deepMerge(
208 { 209 {
209 // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes 210 // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes
src/utils/index.ts
@@ -32,6 +32,7 @@ export function setObjToUrlParams(baseUrl: string, obj: any): string { @@ -32,6 +32,7 @@ export function setObjToUrlParams(baseUrl: string, obj: any): string {
32 return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters; 32 return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters;
33 } 33 }
34 34
  35 +// 深度合并
35 export function deepMerge<T = any>(src: any = {}, target: any = {}): T { 36 export function deepMerge<T = any>(src: any = {}, target: any = {}): T {
36 let key: string; 37 let key: string;
37 for (key in target) { 38 for (key in target) {