feat(projects): 菜单数据及组件接入

This commit is contained in:
Soybean 2021-09-15 07:35:38 +08:00
parent 57e00e6417
commit 3226a724be
25 changed files with 361 additions and 95 deletions

View File

@ -26,7 +26,6 @@
"naive-ui": "^2.18.2",
"pinia": "^2.0.0-rc.4",
"qs": "^6.10.1",
"smoothscroll-polyfill": "^0.4.4",
"vue": "^3.2.10",
"vue-router": "^4.0.11"
},
@ -41,6 +40,14 @@
"@types/smoothscroll-polyfill": "^0.3.1",
"@typescript-eslint/eslint-plugin": "^4.31.1",
"@typescript-eslint/parser": "^4.31.1",
"@vicons/antd": "^0.11.0",
"@vicons/carbon": "^0.11.0",
"@vicons/fa": "^0.11.0",
"@vicons/fluent": "^0.11.0",
"@vicons/ionicons4": "^0.11.0",
"@vicons/ionicons5": "^0.11.0",
"@vicons/material": "^0.11.0",
"@vicons/tabler": "^0.11.0",
"@vitejs/plugin-vue": "^1.6.2",
"@vue/compiler-sfc": "^3.2.11",
"@vue/eslint-config-prettier": "^6.0.0",
@ -60,9 +67,9 @@
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0",
"prettier": "^2.4.0",
"sass": "^1.40.0",
"sass": "^1.41.0",
"typescript": "^4.4.3",
"unplugin-icons": "^0.10.0",
"unplugin-icons": "^0.11.1",
"unplugin-vue-components": "^0.15.1",
"vite": "^2.5.7",
"vite-plugin-html": "^2.1.0",

View File

@ -11,6 +11,14 @@ specifiers:
'@types/smoothscroll-polyfill': ^0.3.1
'@typescript-eslint/eslint-plugin': ^4.31.1
'@typescript-eslint/parser': ^4.31.1
'@vicons/antd': ^0.11.0
'@vicons/carbon': ^0.11.0
'@vicons/fa': ^0.11.0
'@vicons/fluent': ^0.11.0
'@vicons/ionicons4': ^0.11.0
'@vicons/ionicons5': ^0.11.0
'@vicons/material': ^0.11.0
'@vicons/tabler': ^0.11.0
'@vitejs/plugin-vue': ^1.6.2
'@vue/compiler-sfc': ^3.2.11
'@vue/eslint-config-prettier': ^6.0.0
@ -38,10 +46,9 @@ specifiers:
postinstall-postinstall: ^2.1.0
prettier: ^2.4.0
qs: ^6.10.1
sass: ^1.40.0
smoothscroll-polyfill: ^0.4.4
sass: ^1.41.0
typescript: ^4.4.3
unplugin-icons: ^0.10.0
unplugin-icons: ^0.11.1
unplugin-vue-components: ^0.15.1
vite: ^2.5.7
vite-plugin-html: ^2.1.0
@ -60,7 +67,6 @@ dependencies:
naive-ui: registry.nlark.com/naive-ui/2.18.2_vue@3.2.10
pinia: registry.nlark.com/pinia/2.0.0-rc.4_typescript@4.4.3+vue@3.2.10
qs: 6.10.1
smoothscroll-polyfill: registry.nlark.com/smoothscroll-polyfill/0.4.4
vue: registry.nlark.com/vue/3.2.10
vue-router: registry.nlark.com/vue-router/4.0.11_vue@3.2.10
@ -75,6 +81,14 @@ devDependencies:
'@types/smoothscroll-polyfill': registry.nlark.com/@types/smoothscroll-polyfill/0.3.1
'@typescript-eslint/eslint-plugin': registry.nlark.com/@typescript-eslint/eslint-plugin/4.31.1_e2d3c88d378335c4183365c112128ce9
'@typescript-eslint/parser': registry.nlark.com/@typescript-eslint/parser/4.31.1_eslint@7.32.0+typescript@4.4.3
'@vicons/antd': registry.nlark.com/@vicons/antd/0.11.0
'@vicons/carbon': registry.nlark.com/@vicons/carbon/0.11.0
'@vicons/fa': registry.nlark.com/@vicons/fa/0.11.0
'@vicons/fluent': registry.nlark.com/@vicons/fluent/0.11.0
'@vicons/ionicons4': registry.nlark.com/@vicons/ionicons4/0.11.0
'@vicons/ionicons5': registry.nlark.com/@vicons/ionicons5/0.11.0
'@vicons/material': registry.nlark.com/@vicons/material/0.11.0
'@vicons/tabler': registry.nlark.com/@vicons/tabler/0.11.0
'@vitejs/plugin-vue': registry.nlark.com/@vitejs/plugin-vue/1.6.2_@vue+compiler-sfc@3.2.11
'@vue/compiler-sfc': registry.nlark.com/@vue/compiler-sfc/3.2.11
'@vue/eslint-config-prettier': 6.0.0_b4d73ff40db55d7af7de6f3602f2b630
@ -94,9 +108,9 @@ devDependencies:
patch-package: registry.nlark.com/patch-package/6.4.7
postinstall-postinstall: registry.nlark.com/postinstall-postinstall/2.1.0
prettier: registry.nlark.com/prettier/2.4.0
sass: registry.nlark.com/sass/1.40.0
sass: registry.nlark.com/sass/1.41.0
typescript: registry.nlark.com/typescript/4.4.3
unplugin-icons: registry.nlark.com/unplugin-icons/0.10.0_54da2e3458e54be8937824c348b2c77e
unplugin-icons: registry.nlark.com/unplugin-icons/0.11.1_54da2e3458e54be8937824c348b2c77e
unplugin-vue-components: registry.nlark.com/unplugin-vue-components/0.15.1_vite@2.5.7+vue@3.2.10
vite: registry.nlark.com/vite/2.5.7
vite-plugin-html: registry.nlark.com/vite-plugin-html/2.1.0_vite@2.5.7
@ -917,11 +931,6 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/is-number/7.0.0:
resolution: {integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=, tarball: is-number/download/is-number-7.0.0.tgz}
engines: {node: '>=0.12.0'}
dev: true
/is-obj/1.0.1:
resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=, tarball: is-obj/download/is-obj-1.0.1.tgz}
engines: {node: '>=0.10.0'}
@ -2038,6 +2047,14 @@ packages:
'@types/throttle-debounce': registry.nlark.com/@types/throttle-debounce/2.1.0
dev: true
registry.nlark.com/@antfu/utils/0.3.0:
resolution: {integrity: sha1-YwbEO1Kog72Olz4+2N1kJIQYvMQ=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@antfu/utils/download/@antfu/utils-0.3.0.tgz}
name: '@antfu/utils'
version: 0.3.0
dependencies:
'@types/throttle-debounce': registry.nlark.com/@types/throttle-debounce/2.1.0
dev: true
registry.nlark.com/@babel/code-frame/7.12.11:
resolution: {integrity: sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz}
name: '@babel/code-frame'
@ -2165,7 +2182,7 @@ packages:
dev: true
registry.nlark.com/@commitlint/load/13.1.0:
resolution: {integrity: sha1-1sm1R1UfIhZYbWwZZNk/kuewQnc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@commitlint/load/download/@commitlint/load-13.1.0.tgz}
resolution: {integrity: sha1-1sm1R1UfIhZYbWwZZNk/kuewQnc=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@commitlint/load/download/@commitlint/load-13.1.0.tgz}
name: '@commitlint/load'
version: 13.1.0
engines: {node: '>=v12'}
@ -2315,6 +2332,8 @@ packages:
js-yaml: 3.14.1
minimatch: 3.0.4
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
dev: true
registry.nlark.com/@humanwhocodes/config-array/0.5.0:
@ -2326,6 +2345,8 @@ packages:
'@humanwhocodes/object-schema': registry.nlark.com/@humanwhocodes/object-schema/1.2.0
debug: registry.nlark.com/debug/4.3.2
minimatch: 3.0.4
transitivePeerDependencies:
- supports-color
dev: true
registry.nlark.com/@humanwhocodes/object-schema/1.2.0:
@ -2335,7 +2356,7 @@ packages:
dev: true
registry.nlark.com/@iconify/json-tools/1.0.10:
resolution: {integrity: sha1-2acFDbvouynWhNSz+URu0tC+o8w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@iconify/json-tools/download/@iconify/json-tools-1.0.10.tgz}
resolution: {integrity: sha1-2acFDbvouynWhNSz+URu0tC+o8w=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@iconify/json-tools/download/@iconify/json-tools-1.0.10.tgz}
name: '@iconify/json-tools'
version: 1.0.10
dev: true
@ -2525,7 +2546,7 @@ packages:
dev: true
registry.nlark.com/@types/throttle-debounce/2.1.0:
resolution: {integrity: sha1-HD32JL/Eti+ZLTASuExW1B6rN3Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/throttle-debounce/download/@types/throttle-debounce-2.1.0.tgz}
resolution: {integrity: sha1-HD32JL/Eti+ZLTASuExW1B6rN3Y=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/throttle-debounce/download/@types/throttle-debounce-2.1.0.tgz}
name: '@types/throttle-debounce'
version: 2.1.0
dev: true
@ -2667,6 +2688,54 @@ packages:
eslint-visitor-keys: registry.nlark.com/eslint-visitor-keys/2.1.0
dev: true
registry.nlark.com/@vicons/antd/0.11.0:
resolution: {integrity: sha1-PSiVLQKK7XEtymHLgdvbEUVMVUI=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/antd/download/@vicons/antd-0.11.0.tgz}
name: '@vicons/antd'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/carbon/0.11.0:
resolution: {integrity: sha1-UQ4B6IOnOx1DQ6PrHRAUFEZGOr4=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/carbon/download/@vicons/carbon-0.11.0.tgz}
name: '@vicons/carbon'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/fa/0.11.0:
resolution: {integrity: sha1-3GeAslt5Q3NOfHXXTfL0RDsFcq4=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/fa/download/@vicons/fa-0.11.0.tgz}
name: '@vicons/fa'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/fluent/0.11.0:
resolution: {integrity: sha1-hPPNolVTnLlvRcicFgHiiS15gm8=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/fluent/download/@vicons/fluent-0.11.0.tgz}
name: '@vicons/fluent'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/ionicons4/0.11.0:
resolution: {integrity: sha1-pg9erWYdRz8XEDrQBRzoKtdxu+Y=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/ionicons4/download/@vicons/ionicons4-0.11.0.tgz}
name: '@vicons/ionicons4'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/ionicons5/0.11.0:
resolution: {integrity: sha1-VBhb+lcqCd9wCU2xlU8ov78TY+0=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/ionicons5/download/@vicons/ionicons5-0.11.0.tgz}
name: '@vicons/ionicons5'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/material/0.11.0:
resolution: {integrity: sha1-LCCRIfP/akZFD0loOX32wwCN+NE=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/material/download/@vicons/material-0.11.0.tgz}
name: '@vicons/material'
version: 0.11.0
dev: true
registry.nlark.com/@vicons/tabler/0.11.0:
resolution: {integrity: sha1-nrBXnADKowQMLBz55cDHa6EgT7M=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vicons/tabler/download/@vicons/tabler-0.11.0.tgz}
name: '@vicons/tabler'
version: 0.11.0
dev: true
registry.nlark.com/@vitejs/plugin-vue/1.6.2_@vue+compiler-sfc@3.2.11:
resolution: {integrity: sha1-QN/jFM/2ENTdAnoLTqKpOiV/P8k=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.6.2.tgz}
id: registry.nlark.com/@vitejs/plugin-vue/1.6.2
@ -3083,12 +3152,12 @@ packages:
dev: true
registry.nlark.com/anymatch/3.1.2:
resolution: {integrity: sha1-wFV8CWrzLxBhmPT04qODU343hxY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz}
resolution: {integrity: sha1-wFV8CWrzLxBhmPT04qODU343hxY=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz}
name: anymatch
version: 3.1.2
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
normalize-path: registry.nlark.com/normalize-path/3.0.0
picomatch: registry.nlark.com/picomatch/2.3.0
dev: true
@ -3129,6 +3198,8 @@ packages:
version: 0.21.4
dependencies:
follow-redirects: registry.nlark.com/follow-redirects/1.14.2
transitivePeerDependencies:
- debug
dev: false
registry.nlark.com/babel-walk/3.0.0-canary-5:
@ -3147,7 +3218,7 @@ packages:
dev: true
registry.nlark.com/binary-extensions/2.2.0:
resolution: {integrity: sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz}
resolution: {integrity: sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz}
name: binary-extensions
version: 2.2.0
engines: {node: '>=8'}
@ -3168,6 +3239,15 @@ packages:
concat-map: 0.0.1
dev: true
registry.nlark.com/braces/3.0.2:
resolution: {integrity: sha1-NFThpGLujVmeI23zNs2epPiv4Qc=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/braces/download/braces-3.0.2.tgz}
name: braces
version: 3.0.2
engines: {node: '>=8'}
dependencies:
fill-range: registry.nlark.com/fill-range/7.0.1
dev: true
registry.nlark.com/buffer-from/1.1.2:
resolution: {integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz}
name: buffer-from
@ -3227,17 +3307,17 @@ packages:
supports-color: registry.nlark.com/supports-color/7.2.0
registry.nlark.com/chokidar/3.5.2:
resolution: {integrity: sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763535523&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz}
resolution: {integrity: sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz}
name: chokidar
version: 3.5.2
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: registry.nlark.com/anymatch/3.1.2
braces: 3.0.2
braces: registry.nlark.com/braces/3.0.2
glob-parent: registry.nlark.com/glob-parent/5.1.2
is-binary-path: registry.nlark.com/is-binary-path/2.1.0
is-glob: registry.nlark.com/is-glob/4.0.1
normalize-path: 3.0.0
normalize-path: registry.nlark.com/normalize-path/3.0.0
readdirp: registry.nlark.com/readdirp/3.6.0
optionalDependencies:
fsevents: registry.nlark.com/fsevents/2.3.2
@ -3826,6 +3906,8 @@ packages:
table: registry.nlark.com/table/6.7.1
text-table: 0.2.0
v8-compile-cache: 2.3.0
transitivePeerDependencies:
- supports-color
dev: true
registry.nlark.com/espree/6.2.1:
@ -3923,7 +4005,7 @@ packages:
dev: true
registry.nlark.com/fill-range/7.0.1:
resolution: {integrity: sha1-GRmmp8df44ssfHflGYU12prN2kA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz}
resolution: {integrity: sha1-GRmmp8df44ssfHflGYU12prN2kA=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fill-range/download/fill-range-7.0.1.tgz}
name: fill-range
version: 7.0.1
engines: {node: '>=8'}
@ -3968,6 +4050,11 @@ packages:
name: follow-redirects
version: 1.14.2
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
dev: false
registry.nlark.com/fs-extra/10.0.0:
@ -4010,7 +4097,7 @@ packages:
dev: true
registry.nlark.com/fsevents/2.3.2:
resolution: {integrity: sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fsevents/download/fsevents-2.3.2.tgz}
resolution: {integrity: sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fsevents/download/fsevents-2.3.2.tgz}
name: fsevents
version: 2.3.2
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@ -4263,7 +4350,7 @@ packages:
dev: true
registry.nlark.com/is-binary-path/2.1.0:
resolution: {integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-binary-path/download/is-binary-path-2.1.0.tgz}
resolution: {integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-binary-path/download/is-binary-path-2.1.0.tgz}
name: is-binary-path
version: 2.1.0
engines: {node: '>=8'}
@ -4305,13 +4392,20 @@ packages:
has-tostringtag: registry.nlark.com/has-tostringtag/1.0.0
dev: true
registry.nlark.com/is-extglob/2.1.1:
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-extglob/download/is-extglob-2.1.1.tgz}
name: is-extglob
version: 2.1.1
engines: {node: '>=0.10.0'}
dev: true
registry.nlark.com/is-glob/4.0.1:
resolution: {integrity: sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-glob/download/is-glob-4.0.1.tgz?cache=0&sync_timestamp=1624543039732&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-glob%2Fdownload%2Fis-glob-4.0.1.tgz}
resolution: {integrity: sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-glob/download/is-glob-4.0.1.tgz}
name: is-glob
version: 4.0.1
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
is-extglob: registry.nlark.com/is-extglob/2.1.1
dev: true
registry.nlark.com/is-number-object/1.0.6:
@ -4323,6 +4417,13 @@ packages:
has-tostringtag: registry.nlark.com/has-tostringtag/1.0.0
dev: true
registry.nlark.com/is-number/7.0.0:
resolution: {integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-number/download/is-number-7.0.0.tgz}
name: is-number
version: 7.0.0
engines: {node: '>=0.12.0'}
dev: true
registry.nlark.com/is-regex/1.1.4:
resolution: {integrity: sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-regex/download/is-regex-1.1.4.tgz}
name: is-regex
@ -4724,6 +4825,13 @@ packages:
validate-npm-package-license: 3.0.4
dev: true
registry.nlark.com/normalize-path/3.0.0:
resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz}
name: normalize-path
version: 3.0.0
engines: {node: '>=0.10.0'}
dev: true
registry.nlark.com/object-assign/4.1.1:
resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847043548&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz}
name: object-assign
@ -4885,7 +4993,7 @@ packages:
dev: true
registry.nlark.com/picomatch/2.3.0:
resolution: {integrity: sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz}
resolution: {integrity: sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz}
name: picomatch
version: 2.3.0
engines: {node: '>=8.6'}
@ -4937,6 +5045,9 @@ packages:
engines: {node: '>= 10'}
peerDependencies:
ts-node: '>=9.0.0'
peerDependenciesMeta:
ts-node:
optional: true
dependencies:
import-cwd: registry.nlark.com/import-cwd/3.0.0
lilconfig: registry.nlark.com/lilconfig/2.0.3
@ -5112,7 +5223,7 @@ packages:
dev: true
registry.nlark.com/readdirp/3.6.0:
resolution: {integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz}
resolution: {integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz}
name: readdirp
version: 3.6.0
engines: {node: '>=8.10.0'}
@ -5200,10 +5311,10 @@ packages:
tslib: registry.nlark.com/tslib/1.14.1
dev: true
registry.nlark.com/sass/1.40.0:
resolution: {integrity: sha1-/6cQbZwBhRafWwjqqxPWNN75SPI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/sass/download/sass-1.40.0.tgz?cache=0&sync_timestamp=1631577412662&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass%2Fdownload%2Fsass-1.40.0.tgz}
registry.nlark.com/sass/1.41.0:
resolution: {integrity: sha1-97QdwAM2pMA0KcN7loC4Z1ivYdQ=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/sass/download/sass-1.41.0.tgz}
name: sass
version: 1.40.0
version: 1.41.0
engines: {node: '>=8.9.0'}
hasBin: true
dependencies:
@ -5254,12 +5365,6 @@ packages:
engines: {node: '>=8'}
dev: true
registry.nlark.com/smoothscroll-polyfill/0.4.4:
resolution: {integrity: sha1-OiWRMdxpMObKgAA+HLA7YDtpq/g=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/smoothscroll-polyfill/download/smoothscroll-polyfill-0.4.4.tgz}
name: smoothscroll-polyfill
version: 0.4.4
dev: false
registry.nlark.com/source-map-js/0.6.2:
resolution: {integrity: sha1-C7XeYxtBz72mz7qL0FqA79/SOF4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/source-map-js/download/source-map-js-0.6.2.tgz}
name: source-map-js
@ -5423,12 +5528,12 @@ packages:
engines: {node: '>=4'}
registry.nlark.com/to-regex-range/5.0.1:
resolution: {integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz}
resolution: {integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/to-regex-range/download/to-regex-range-5.0.1.tgz}
name: to-regex-range
version: 5.0.1
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
is-number: registry.nlark.com/is-number/7.0.0
dev: true
registry.nlark.com/token-stream/1.0.0:
@ -5488,6 +5593,9 @@ packages:
hasBin: true
peerDependencies:
typescript: ^4.2.3
peerDependenciesMeta:
typescript:
optional: true
dependencies:
cac: registry.nlark.com/cac/6.7.3
chalk: registry.nlark.com/chalk/4.1.2
@ -5560,18 +5668,28 @@ packages:
hasBin: true
dev: true
registry.nlark.com/unplugin-icons/0.10.0_54da2e3458e54be8937824c348b2c77e:
resolution: {integrity: sha1-u4LobC5YdZnVLfDw0HzjB7Ivjq4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/unplugin-icons/download/unplugin-icons-0.10.0.tgz}
id: registry.nlark.com/unplugin-icons/0.10.0
registry.nlark.com/unplugin-icons/0.11.1_54da2e3458e54be8937824c348b2c77e:
resolution: {integrity: sha1-nodRKlzdyx0RPsD6N+xtlR/IS8U=, registry: http://registry.npm.taobao.org/, tarball: https://registry.nlark.com/unplugin-icons/download/unplugin-icons-0.11.1.tgz}
id: registry.nlark.com/unplugin-icons/0.11.1
name: unplugin-icons
version: 0.10.0
version: 0.11.1
peerDependencies:
'@iconify/json': '*'
'@svgr/core': ^5.5.0
'@vue/compiler-sfc': ^3.0.2
vue-template-compiler: ^2.6.12
vue-template-es2015-compiler: ^1.9.0
peerDependenciesMeta:
'@svgr/core':
optional: true
'@vue/compiler-sfc':
optional: true
vue-template-compiler:
optional: true
vue-template-es2015-compiler:
optional: true
dependencies:
'@antfu/utils': registry.nlark.com/@antfu/utils/0.3.0
'@iconify/json': registry.nlark.com/@iconify/json/1.1.401
'@iconify/json-tools': registry.nlark.com/@iconify/json-tools/1.0.10
'@vue/compiler-sfc': registry.nlark.com/@vue/compiler-sfc/3.2.11
@ -5618,6 +5736,13 @@ packages:
rollup: ^2.50.0
vite: ^2.3.0
webpack: 4 || 5
peerDependenciesMeta:
rollup:
optional: true
vite:
optional: true
webpack:
optional: true
dependencies:
upath: 2.0.1
vite: registry.nlark.com/vite/2.5.7
@ -5870,9 +5995,6 @@ packages:
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
vue: registry.nlark.com/vue/3.2.10
dev: false

View File

@ -1,8 +1,10 @@
import type { Component } from 'vue';
import type { RouteRecordRaw } from 'vue-router';
import type { MenuOption } from 'naive-ui';
import { EnumRoutePath, EnumLoginModule } from '@/enum';
/** 路由描述 */
export interface RouteMeta {
interface RouteMeta {
/** 路由名称 */
title?: string;
/** 页面100%视高 */
@ -10,11 +12,16 @@ export interface RouteMeta {
/** 作为菜单 */
asMenu?: boolean;
/** 菜单和面包屑对应的图标 */
icon?: string;
icon?: Component;
}
export type CustomRoute = RouteRecordRaw & { meta: RouteMeta };
export type RoutePathKey = keyof typeof EnumRoutePath;
export type GlobalMenuOption = MenuOption & {
routeName: string;
routePath: string;
};
export type LoginModuleType = keyof typeof EnumLoginModule;

View File

@ -1,3 +1,3 @@
export { UserInfo } from './business';
export { ThemeSettings, NavMode, AnimateType } from './theme';
export { CustomRoute, RoutePathKey, LoginModuleType } from './common';
export { CustomRoute, RoutePathKey, GlobalMenuOption, LoginModuleType } from './common';

View File

@ -0,0 +1,45 @@
<template>
<n-dropdown :options="options" @select="handleDropdown">
<header-item class="px-12px">
<n-avatar :src="avatar" :round="true" />
<span class="pl-8px text-16px font-medium">Soybean</span>
</header-item>
</n-dropdown>
</template>
<script lang="ts" setup>
import { NDropdown, NAvatar } from 'naive-ui';
import { UserAvatar, Logout } from '@vicons/carbon';
import { dynamicIconRender } from '@/utils';
import HeaderItem from './HeaderItem.vue';
import avatar from '@/assets/img/common/logo-fill.png';
import { useAuthStore } from '@/store';
type DropdownKey = 'user-center' | 'logout';
const { resetAuthState } = useAuthStore();
const options = [
{
label: '用户中心',
key: 'user-center',
icon: dynamicIconRender(UserAvatar)
},
{
type: 'divider',
key: 'divider'
},
{
label: '退出登录',
key: 'logout',
icon: dynamicIconRender(Logout)
}
];
function handleDropdown(key: DropdownKey) {
if (key === 'logout') {
resetAuthState();
}
}
</script>
<style scoped></style>

View File

@ -1,3 +1,4 @@
import UserAvatar from './UserAvatar.vue';
import HeaderItem from './HeaderItem.vue';
export { HeaderItem };
export { UserAvatar, HeaderItem };

View File

@ -10,6 +10,7 @@
<icon-gridicons-fullscreen-exit v-if="isFullscreen" class="text-16px" />
<icon-gridicons-fullscreen v-else class="text-16px" />
</header-item>
<user-avatar />
<header-item class="w-40px h-full" @click="openSettingDrawer">
<icon-mdi-light-cog class="text-16px" />
</header-item>
@ -23,7 +24,7 @@ import { computed } from 'vue';
import { NLayoutHeader } from 'naive-ui';
import { useFullscreen } from '@vueuse/core';
import { useAppStore, useThemeStore } from '@/store';
import { HeaderItem } from './components';
import { UserAvatar, HeaderItem } from './components';
import { GlobalLogo } from '../common';
defineProps({

View File

@ -1,18 +1,21 @@
<template>
<router-link to="/" class="nowrap-hidden flex-center h-64px">
<a :href="homePath" class="nowrap-hidden flex-center h-64px cursor-pointer">
<img src="@/assets/img/common/logo.png" alt="" class="w-32px h-32px" />
<h2 v-show="showTitle" class="pl-8px text-16px text-primary font-bold">{{ title }}</h2>
</router-link>
</a>
</template>
<script lang="ts" setup>
import { computed } from 'vue';
import { useAppStore, useThemeStore } from '@/store';
import { useAppTitle } from '@/hooks';
import { EnumRoutePath } from '@/enum';
const app = useAppStore();
const theme = useThemeStore();
const showTitle = computed(() => !app.menu.collapsed && theme.navStyle.mode !== 'vertical-mix');
const title = useAppTitle();
const showTitle = computed(() => !app.menu.collapsed && theme.navStyle.mode !== 'vertical-mix');
const homePath = EnumRoutePath['dashboard-analysis'];
</script>
<style scoped></style>

View File

@ -1,11 +1,35 @@
<template>
<div>
<h3 class="text-center text-18px text-error">菜单</h3>
<div class="flex-center h-48px">
<router-link to="/login" class="text-primary text-18px">登录页</router-link>
</div>
</div>
<n-menu
:value="activeKey"
:collapsed="app.menu.collapsed"
:collapsed-width="theme.menuStyle.collapsedWidth"
:collapsed-icon-size="22"
:options="menus"
@update:value="handleUpdateMenu"
/>
</template>
<script lang="ts" setup></script>
<script lang="ts" setup>
import { computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { NMenu } from 'naive-ui';
import { useThemeStore, useAppStore } from '@/store';
import { menus } from '@/router';
import { GlobalMenuOption } from '@/interface';
const theme = useThemeStore();
const app = useAppStore();
const router = useRouter();
const route = useRoute();
const activeKey = computed(() => getActiveKey());
function getActiveKey() {
return route.name as string;
}
function handleUpdateMenu(key: string, menuItem: GlobalMenuOption) {
router.push(menuItem.routePath);
}
</script>
<style scoped></style>

View File

@ -3,7 +3,7 @@ import App from './App.vue';
import AppProvider from './AppProvider.vue';
import { setupStore } from './store';
import { setupRouter } from './router';
import { setupSmoothScroll, setupWindicssDarkMode } from './plugins';
import { setupWindicssDarkMode } from './plugins';
import 'virtual:windi.css';
import './styles/css/global.css';
@ -27,5 +27,4 @@ async function setupApp() {
setupWindicssDarkMode();
}
setupSmoothScroll();
setupApp();

View File

@ -1,4 +1,3 @@
import setupSmoothScroll from './smooth-scroll';
import setupWindicssDarkMode from './dark-mode';
export { setupSmoothScroll, setupWindicssDarkMode };
export { setupWindicssDarkMode };

View File

@ -1,6 +0,0 @@
import smoothscroll from 'smoothscroll-polyfill';
/** 平滑滚动插件(兼容主流浏览器) */
export default function setupSmoothScroll(): void {
smoothscroll.polyfill();
}

View File

@ -21,3 +21,4 @@ export async function setupRouter(app: App) {
}
export { RouteNameMap };
export { menus } from './menus';

View File

@ -1,5 +1,49 @@
import { CustomRoute } from '@/interface';
import type { Component } from 'vue';
import { customRoutes } from './routes';
import { CustomRoute, GlobalMenuOption } from '@/interface';
import { dynamicIconRender } from '@/utils';
export function transformRouteToMenu(routes: CustomRoute[]) {
return routes;
const globalMenu: GlobalMenuOption[] = [];
routes.forEach(route => {
if (asMenu(route)) {
const { name, path, meta } = route;
const routeName = name as string;
let menuChildren: GlobalMenuOption[] | undefined;
if (route.children) {
menuChildren = transformRouteToMenu(route.children as CustomRoute[]);
}
const menuItem: GlobalMenuOption = addPartialProps(
{
key: routeName,
label: meta?.title ?? routeName,
routeName,
routePath: path
},
meta?.icon,
menuChildren
);
globalMenu.push(menuItem);
}
});
return globalMenu;
}
/** 判断路由是否作为菜单 */
function asMenu(route: CustomRoute) {
return Boolean(route.meta?.asMenu);
}
/** 给菜单添加可选属性 */
function addPartialProps(menuItem: GlobalMenuOption, icon?: Component, children?: GlobalMenuOption[]) {
const item = { ...menuItem };
if (icon) {
Object.assign(item, { icon: dynamicIconRender(icon) });
}
if (children) {
Object.assign(item, { children });
}
return item;
}
export const menus = transformRouteToMenu(customRoutes);

View File

@ -1,4 +1,6 @@
import type { RouteRecordRaw } from 'vue-router';
import { Dashboard } from '@vicons/carbon';
import { ExceptionOutlined } from '@vicons/antd';
import { BasicLayout, BlankLayout } from '@/layouts';
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
import type { CustomRoute, RoutePathKey, LoginModuleType } from '@/interface';
@ -100,7 +102,7 @@ export const customRoutes: CustomRoute[] = [
meta: {
title: EnumRouteTitle.dashboard,
asMenu: true,
icon: 'mdi:view-dashboard'
icon: Dashboard
},
children: [
{
@ -130,7 +132,7 @@ export const customRoutes: CustomRoute[] = [
meta: {
title: EnumRouteTitle.exception,
asMenu: true,
icon: 'ant-design:exception-outlined'
icon: ExceptionOutlined
},
children: [
{
@ -157,7 +159,7 @@ export const customRoutes: CustomRoute[] = [
component: () => import('@/views/system/exception/500.vue'),
meta: {
title: EnumRouteTitle['exception-500'],
asMenu: true
asMenu: false
}
}
]

View File

@ -1,5 +1,6 @@
import { defineStore } from 'pinia';
import { store } from '@/store';
import { removeToken } from '@/utils';
import type { UserInfo } from '@/interface';
interface AuthState {
@ -30,7 +31,9 @@ const authStore = defineStore({
actions: {
/** 重置auth状态 */
resetAuthState() {
removeToken();
this.$reset();
window.location.reload();
}
}
});

View File

@ -1,2 +1,2 @@
export { getToken, setToken, getUserInfo, getLoginModuleRegExp } from './user';
export { getToken, setToken, removeToken, getUserInfo, getLoginModuleRegExp } from './user';
export { getLoginRedirectUrl, toLoginRedirectUrl, toHomeByLocation } from './location';

View File

@ -1,6 +1,6 @@
import { EnumStorageKey } from '@/enum';
import type { LoginModuleType } from '@/interface';
import { setLocal, getLocal } from '../storage';
import { setLocal, getLocal, removeLocal } from '../storage';
/** 设置token */
export function getToken() {
@ -12,6 +12,10 @@ export function setToken(token: string) {
setLocal(EnumStorageKey.token, token);
}
export function removeToken() {
removeLocal(EnumStorageKey.token);
}
export function getUserInfo() {}
/** 获取登录模块的正则字符串 */

12
src/utils/common/icon.ts Normal file
View File

@ -0,0 +1,12 @@
import { h } from 'vue';
import type { Component } from 'vue';
import { NIcon } from 'naive-ui';
/** 动态渲染vicon */
export function dynamicIconRender(icon: Component) {
return () => {
return h(NIcon, null, {
default: () => h(icon)
});
};
}

View File

@ -13,3 +13,5 @@ export {
} from './typeof';
export { brightenColor, darkenColor } from './color';
export { dynamicIconRender } from './icon';

View File

@ -1,6 +1,7 @@
export {
setToken,
getToken,
removeToken,
getUserInfo,
getLoginModuleRegExp,
getLoginRedirectUrl,
@ -21,7 +22,8 @@ export {
isSet,
isMap,
brightenColor,
darkenColor
darkenColor,
dynamicIconRender
} from './common';
export { setLocal, getLocal, setSession, getSession } from './storage';

View File

@ -1,2 +1,2 @@
export { setLocal, getLocal } from './local';
export { setLocal, getLocal, removeLocal } from './local';
export { setSession, getSession } from './session';

View File

@ -1,12 +1,16 @@
export function setLocal(key: string, value: unknown) {
const json = JSON.stringify(value);
localStorage.setItem(key, json);
window.localStorage.setItem(key, json);
}
export function getLocal<T>(key: string) {
const json = localStorage.getItem(key);
const json = window.localStorage.getItem(key);
if (json) {
return JSON.parse(json) as T;
}
return json;
}
export function removeLocal(key: string) {
window.localStorage.removeItem(key);
}

View File

@ -2,20 +2,10 @@
<div>
<h2>工作台</h2>
<router-link :to="EnumRoutePath['dashboard-analysis']">analysis</router-link>
<n-button @click="removeCurrent">去除</n-button>
</div>
</template>
<script lang="ts" setup>
import { NButton } from 'naive-ui';
import { useRouter } from 'vue-router';
import { EnumRoutePath } from '@/enum';
import { RouteNameMap } from '@/router';
const router = useRouter();
function removeCurrent() {
router.removeRoute(RouteNameMap.get('dashboard-workbench')!);
}
</script>
<style scoped></style>

View File

@ -1,6 +1,5 @@
<template>
<div class="relative flex-center w-full h-full bg-[#DBE0F9]">
<login-bg />
<div class="w-400px p-40px bg-white rounded-20px z-10">
<header class="flex-y-center justify-between">
<div class="w-70px h-70px rounded-35px overflow-hidden">
@ -15,6 +14,7 @@
</div>
</main>
</div>
<login-bg />
</div>
</template>