Pārlūkot izejas kodu

feat: 引入unplugin-auto-import,@vitejs/plugin-vue-jsx,优化unplugin-vue-components,抽离vite配置,修复UI组件主题色未改变

zhusiqing 3 gadi atpakaļ
vecāks
revīzija
57a7853002

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
.eslintcache


+ 4 - 0
.npmrc

@@ -1 +1,5 @@
 registry=https://registry.npmmirror.com
+# 提升一些依赖包至 node_modules
+# 解决部分包模块not found的问题
+# 用于配合 pnpm
+shamefully-hoist = true

+ 10 - 1
CHANGELOG.md

@@ -1,5 +1,14 @@
-## 0.6.0(2021-12-22)
+## 0.7.0(2022-01-17)
+
+### Features
 
+- 引入unplugin-auto-import,实现自动导入vue,vue-router,@vueuse/core(部分使用)
+- 优化unplugin-vue-components的使用
+- 引入@vitejs/plugin-vue-jsx支持jsx写法
+- 优化vite.config.ts,抽离配置,修复ant-design-vue主题色未变更问题,增加代理服务器用于开发跨域请求
+- 优化并删减多余的代码
+
+## 0.6.0(2021-12-22)
 ### Features
 
 - 更新npm包

+ 0 - 29
components.d.ts

@@ -1,29 +0,0 @@
-// generated by unplugin-vue-components
-// We suggest you to commit this file into source control
-// Read more: https://github.com/vuejs/vue-next/pull/3399
-
-declare module 'vue' {
-  export interface GlobalComponents {
-    AAvatar: typeof import('ant-design-vue/es')['Avatar']
-    AButton: typeof import('ant-design-vue/es')['Button']
-    ADropdown: typeof import('ant-design-vue/es')['Dropdown']
-    AForm: typeof import('ant-design-vue/es')['Form']
-    AFormItem: typeof import('ant-design-vue/es')['FormItem']
-    AInput: typeof import('ant-design-vue/es')['Input']
-    ALayout: typeof import('ant-design-vue/es')['Layout']
-    ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent']
-    ALayoutFooter: typeof import('ant-design-vue/es')['LayoutFooter']
-    ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
-    ALayoutSider: typeof import('ant-design-vue/es')['LayoutSider']
-    AMenu: typeof import('ant-design-vue/es')['Menu']
-    AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider']
-    AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
-    ASpin: typeof import('ant-design-vue/es')['Spin']
-    HelloWorld: typeof import('./src/components/HelloWorld.vue')['default']
-    InitLoading: typeof import('./src/components/InitLoading.vue')['default']
-    LockOutlined: typeof import('@ant-design/icons-vue')['LockOutlined']
-    UserOutlined: typeof import('@ant-design/icons-vue')['UserOutlined']
-  }
-}
-
-export { }

+ 6 - 1
log.md

@@ -7,4 +7,9 @@
 - [x] 权限路由设计
 - [x] 登录页
 - [x] 登录态相关处理
-
+- [x] vite相关配置抽离
+- [ ] 构建编译的代码压缩和优化
+- [ ] 引入env环境变量
+- [ ] 引入prettier格式化代码
+- [ ] 增加一些常用的构建脚本命令
+- [ ] 编写README

+ 3 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "vite-template",
-  "version": "0.6.0",
+  "version": "0.7.0",
   "scripts": {
     "dev": "vite",
     "build": "vue-tsc --noEmit && vite build",
@@ -41,6 +41,7 @@
     "@typescript-eslint/eslint-plugin": "^5.8.0",
     "@typescript-eslint/parser": "^5.8.0",
     "@vitejs/plugin-vue": "^2.0.1",
+    "@vitejs/plugin-vue-jsx": "^1.3.3",
     "@vue/eslint-config-typescript": "^9.1.0",
     "commitizen": "^4.2.4",
     "cz-conventional-changelog": "^3.3.0",
@@ -51,6 +52,7 @@
     "less": "^4.1.2",
     "lint-staged": "^12.1.3",
     "typescript": "^4.5.4",
+    "unplugin-auto-import": "^0.5.11",
     "unplugin-vue-components": "^0.17.9",
     "vite": "^2.7.5",
     "vue-tsc": "^0.29.8"

+ 495 - 19
pnpm-lock.yaml

@@ -7,6 +7,7 @@ specifiers:
   '@typescript-eslint/eslint-plugin': ^5.8.0
   '@typescript-eslint/parser': ^5.8.0
   '@vitejs/plugin-vue': ^2.0.1
+  '@vitejs/plugin-vue-jsx': ^1.3.3
   '@vue/eslint-config-typescript': ^9.1.0
   '@vueuse/core': ^7.4.0
   ant-design-vue: ^3.0.0-alpha.16
@@ -22,6 +23,7 @@ specifiers:
   nprogress: ^0.2.0
   pinia: ^2.0.8
   typescript: ^4.5.4
+  unplugin-auto-import: ^0.5.11
   unplugin-vue-components: ^0.17.9
   vite: ^2.7.5
   vue: ^3.2.26
@@ -44,6 +46,7 @@ devDependencies:
   '@typescript-eslint/eslint-plugin': 5.8.0_836011a006f4f5d67178564baf2b6d34
   '@typescript-eslint/parser': 5.8.0_eslint@8.5.0+typescript@4.5.4
   '@vitejs/plugin-vue': 2.0.1_vite@2.7.5+vue@3.2.26
+  '@vitejs/plugin-vue-jsx': 1.3.3
   '@vue/eslint-config-typescript': 9.1.0_d3aed4c9dae7615b020b4f133941a9fb
   commitizen: 4.2.4
   cz-conventional-changelog: 3.3.0
@@ -54,6 +57,7 @@ devDependencies:
   less: 4.1.2
   lint-staged: 12.1.3
   typescript: 4.5.4
+  unplugin-auto-import: 0.5.11_@vueuse+core@7.4.0+vite@2.7.5
   unplugin-vue-components: 0.17.9_vite@2.7.5+vue@3.2.26
   vite: 2.7.5_less@4.1.2
   vue-tsc: 0.29.8_typescript@4.5.4
@@ -94,33 +98,281 @@ packages:
       '@types/throttle-debounce': 2.1.0
     dev: true
 
-  /@babel/code-frame/7.16.0:
-    resolution: {integrity: sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE=, tarball: '@babel/code-frame/download/@babel/code-frame-7.16.0.tgz'}
+  /@antfu/utils/0.4.0:
+    resolution: {integrity: sha512-gqkpvjkgFUu+s3kP+Ly33OKpo5zvVY3FDFhv5BIb98SncS3KD6DNxPfNDjwHIoyXbz1leWo1j8DtRLZ1D2Jv+Q==, tarball: '@antfu/utils/download/@antfu/utils-0.4.0.tgz'}
+    dependencies:
+      '@types/throttle-debounce': 2.1.0
+    dev: true
+
+  /@babel/code-frame/7.16.7:
+    resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==, tarball: '@babel/code-frame/download/@babel/code-frame-7.16.7.tgz'}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/highlight': 7.16.0
+      '@babel/highlight': 7.16.7
+    dev: true
+
+  /@babel/compat-data/7.16.8:
+    resolution: {integrity: sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==, tarball: '@babel/compat-data/download/@babel/compat-data-7.16.8.tgz'}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/core/7.16.7:
+    resolution: {integrity: sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==, tarball: '@babel/core/download/@babel/core-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.16.7
+      '@babel/generator': 7.16.8
+      '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.16.7
+      '@babel/helper-module-transforms': 7.16.7
+      '@babel/helpers': 7.16.7
+      '@babel/parser': 7.16.8
+      '@babel/template': 7.16.7
+      '@babel/traverse': 7.16.8
+      '@babel/types': 7.16.8
+      convert-source-map: 1.8.0
+      debug: 4.3.3
+      gensync: 1.0.0-beta.2
+      json5: 2.2.0
+      semver: 6.3.0
+      source-map: 0.5.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/generator/7.16.8:
+    resolution: {integrity: sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==, tarball: '@babel/generator/download/@babel/generator-7.16.8.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+      jsesc: 2.5.2
+      source-map: 0.5.7
+    dev: true
+
+  /@babel/helper-annotate-as-pure/7.16.7:
+    resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==, tarball: '@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7:
+    resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==, tarball: '@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/compat-data': 7.16.8
+      '@babel/core': 7.16.7
+      '@babel/helper-validator-option': 7.16.7
+      browserslist: 4.19.1
+      semver: 6.3.0
+    dev: true
+
+  /@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7:
+    resolution: {integrity: sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==, tarball: '@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/helper-annotate-as-pure': 7.16.7
+      '@babel/helper-environment-visitor': 7.16.7
+      '@babel/helper-function-name': 7.16.7
+      '@babel/helper-member-expression-to-functions': 7.16.7
+      '@babel/helper-optimise-call-expression': 7.16.7
+      '@babel/helper-replace-supers': 7.16.7
+      '@babel/helper-split-export-declaration': 7.16.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-environment-visitor/7.16.7:
+    resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==, tarball: '@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-function-name/7.16.7:
+    resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==, tarball: '@babel/helper-function-name/download/@babel/helper-function-name-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-get-function-arity': 7.16.7
+      '@babel/template': 7.16.7
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-get-function-arity/7.16.7:
+    resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==, tarball: '@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-hoist-variables/7.16.7:
+    resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==, tarball: '@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-member-expression-to-functions/7.16.7:
+    resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==, tarball: '@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-module-imports/7.16.7:
+    resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==, tarball: '@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-module-transforms/7.16.7:
+    resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==, tarball: '@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-environment-visitor': 7.16.7
+      '@babel/helper-module-imports': 7.16.7
+      '@babel/helper-simple-access': 7.16.7
+      '@babel/helper-split-export-declaration': 7.16.7
+      '@babel/helper-validator-identifier': 7.16.7
+      '@babel/template': 7.16.7
+      '@babel/traverse': 7.16.8
+      '@babel/types': 7.16.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-optimise-call-expression/7.16.7:
+    resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==, tarball: '@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-plugin-utils/7.16.7:
+    resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==, tarball: '@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-replace-supers/7.16.7:
+    resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==, tarball: '@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-environment-visitor': 7.16.7
+      '@babel/helper-member-expression-to-functions': 7.16.7
+      '@babel/helper-optimise-call-expression': 7.16.7
+      '@babel/traverse': 7.16.8
+      '@babel/types': 7.16.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-simple-access/7.16.7:
+    resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==, tarball: '@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/helper-split-export-declaration/7.16.7:
+    resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==, tarball: '@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.16.8
     dev: true
-    optional: true
 
   /@babel/helper-validator-identifier/7.15.7:
     resolution: {integrity: sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=, tarball: '@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz'}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/highlight/7.16.0:
-    resolution: {integrity: sha1-bOsysspLj182H7f9gh4/3fShclo=, tarball: '@babel/highlight/download/@babel/highlight-7.16.0.tgz'}
+  /@babel/helper-validator-identifier/7.16.7:
+    resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==, tarball: '@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-validator-option/7.16.7:
+    resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==, tarball: '@babel/helper-validator-option/download/@babel/helper-validator-option-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helpers/7.16.7:
+    resolution: {integrity: sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==, tarball: '@babel/helpers/download/@babel/helpers-7.16.7.tgz'}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/helper-validator-identifier': 7.15.7
+      '@babel/template': 7.16.7
+      '@babel/traverse': 7.16.8
+      '@babel/types': 7.16.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/highlight/7.16.7:
+    resolution: {integrity: sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==, tarball: '@babel/highlight/download/@babel/highlight-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': 7.16.7
       chalk: 2.4.2
       js-tokens: 4.0.0
     dev: true
-    optional: true
 
   /@babel/parser/7.16.6:
     resolution: {integrity: sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==, tarball: '@babel/parser/download/@babel/parser-7.16.6.tgz'}
     engines: {node: '>=6.0.0'}
     hasBin: true
+    dev: false
+
+  /@babel/parser/7.16.8:
+    resolution: {integrity: sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==, tarball: '@babel/parser/download/@babel/parser-7.16.8.tgz'}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+
+  /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.16.7:
+    resolution: {integrity: sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=, tarball: '@babel/plugin-syntax-import-meta/download/@babel/plugin-syntax-import-meta-7.10.4.tgz?cache=0&sync_timestamp=1633005097774&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-syntax-import-meta%2Fdownload%2F%40babel%2Fplugin-syntax-import-meta-7.10.4.tgz'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/helper-plugin-utils': 7.16.7
+    dev: true
+
+  /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7:
+    resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==, tarball: '@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/helper-plugin-utils': 7.16.7
+    dev: true
+
+  /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.16.7:
+    resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==, tarball: '@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/helper-plugin-utils': 7.16.7
+    dev: true
+
+  /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.16.7:
+    resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==, tarball: '@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.8.tgz'}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/helper-create-class-features-plugin': 7.16.7_@babel+core@7.16.7
+      '@babel/helper-plugin-utils': 7.16.7
+      '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.16.7
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
 
   /@babel/runtime/7.16.5:
     resolution: {integrity: sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==, tarball: '@babel/runtime/download/@babel/runtime-7.16.5.tgz'}
@@ -129,6 +381,33 @@ packages:
       regenerator-runtime: 0.13.9
     dev: false
 
+  /@babel/template/7.16.7:
+    resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==, tarball: '@babel/template/download/@babel/template-7.16.7.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.16.7
+      '@babel/parser': 7.16.8
+      '@babel/types': 7.16.8
+    dev: true
+
+  /@babel/traverse/7.16.8:
+    resolution: {integrity: sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==, tarball: '@babel/traverse/download/@babel/traverse-7.16.8.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.16.7
+      '@babel/generator': 7.16.8
+      '@babel/helper-environment-visitor': 7.16.7
+      '@babel/helper-function-name': 7.16.7
+      '@babel/helper-hoist-variables': 7.16.7
+      '@babel/helper-split-export-declaration': 7.16.7
+      '@babel/parser': 7.16.8
+      '@babel/types': 7.16.8
+      debug: 4.3.3
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@babel/types/7.16.0:
     resolution: {integrity: sha1-2zsxOAT5aq3Qt3bEgj4SetZyibo=, tarball: '@babel/types/download/@babel/types-7.16.0.tgz'}
     engines: {node: '>=6.9.0'}
@@ -137,6 +416,14 @@ packages:
       to-fast-properties: 2.0.0
     dev: true
 
+  /@babel/types/7.16.8:
+    resolution: {integrity: sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==, tarball: '@babel/types/download/@babel/types-7.16.8.tgz'}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': 7.16.7
+      to-fast-properties: 2.0.0
+    dev: true
+
   /@commitlint/execute-rule/15.0.0:
     resolution: {integrity: sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==, tarball: '@commitlint/execute-rule/download/@commitlint/execute-rule-15.0.0.tgz'}
     engines: {node: '>=v12'}
@@ -415,6 +702,20 @@ packages:
       eslint-visitor-keys: 3.1.0
     dev: true
 
+  /@vitejs/plugin-vue-jsx/1.3.3:
+    resolution: {integrity: sha512-VSBXVqMcxbgX85rgJC1eMWuZ9hzOJhWPvGYlKxyymPokE/i3Gykh5ljkCoNdxnKgIyFqv4WutYoYY93fgjbTxA==, tarball: '@vitejs/plugin-vue-jsx/download/@vitejs/plugin-vue-jsx-1.3.3.tgz'}
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      '@babel/core': 7.16.7
+      '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.16.7
+      '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.16.7
+      '@rollup/pluginutils': 4.1.2
+      '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.16.7
+      hash-sum: 2.0.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@vitejs/plugin-vue/2.0.1_vite@2.7.5+vue@3.2.26:
     resolution: {integrity: sha512-wtdMnGVvys9K8tg+DxowU1ytTrdVveXr3LzdhaKakysgGXyrsfaeds2cDywtvujEASjWOwWL/OgWM+qoeM8Plg==, tarball: '@vitejs/plugin-vue/download/@vitejs/plugin-vue-2.0.1.tgz'}
     engines: {node: '>=12.0.0'}
@@ -486,10 +787,31 @@ packages:
       vscode-uri: 2.1.2
     dev: true
 
+  /@vue/babel-helper-vue-transform-on/1.0.2:
+    resolution: {integrity: sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=, tarball: '@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz'}
+    dev: true
+
+  /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.16.7:
+    resolution: {integrity: sha1-DFusJ4gNI/iYlM0Daje1XvYd38E=, tarball: '@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.1.1.tgz'}
+    dependencies:
+      '@babel/helper-module-imports': 7.16.7
+      '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7
+      '@babel/template': 7.16.7
+      '@babel/traverse': 7.16.8
+      '@babel/types': 7.16.0
+      '@vue/babel-helper-vue-transform-on': 1.0.2
+      camelcase: 6.3.0
+      html-tags: 3.1.0
+      svg-tags: 1.0.0
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
   /@vue/compiler-core/3.2.26:
     resolution: {integrity: sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==, tarball: '@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz'}
     dependencies:
-      '@babel/parser': 7.16.6
+      '@babel/parser': 7.16.8
       '@vue/shared': 3.2.26
       estree-walker: 2.0.2
       source-map: 0.6.1
@@ -547,7 +869,7 @@ packages:
   /@vue/reactivity-transform/3.2.26:
     resolution: {integrity: sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==, tarball: '@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.26.tgz'}
     dependencies:
-      '@babel/parser': 7.16.6
+      '@babel/parser': 7.16.8
       '@vue/compiler-core': 3.2.26
       '@vue/shared': 3.2.26
       estree-walker: 2.0.2
@@ -791,7 +1113,7 @@ packages:
     resolution: {integrity: sha1-9m7Ncpg1eu5ElV8jWm71QhkQSxE=, tarball: babel-walk/download/babel-walk-3.0.0-canary-5.tgz}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/types': 7.16.0
+      '@babel/types': 7.16.8
     dev: true
 
   /balanced-match/1.0.2:
@@ -817,6 +1139,18 @@ packages:
       fill-range: 7.0.1
     dev: true
 
+  /browserslist/4.19.1:
+    resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==, tarball: browserslist/download/browserslist-4.19.1.tgz}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: 1.0.30001300
+      electron-to-chromium: 1.4.46
+      escalade: 3.1.1
+      node-releases: 2.0.1
+      picocolors: 1.0.0
+    dev: true
+
   /buffer-from/1.1.2:
     resolution: {integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=, tarball: buffer-from/download/buffer-from-1.1.2.tgz}
     dev: true
@@ -845,6 +1179,15 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
+  /camelcase/6.3.0:
+    resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, tarball: camelcase/download/camelcase-6.3.0.tgz}
+    engines: {node: '>=10'}
+    dev: true
+
+  /caniuse-lite/1.0.30001300:
+    resolution: {integrity: sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==, tarball: caniuse-lite/download/caniuse-lite-1.0.30001300.tgz}
+    dev: true
+
   /chalk/2.4.2:
     resolution: {integrity: sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=, tarball: chalk/download/chalk-2.4.2.tgz}
     engines: {node: '>=4'}
@@ -988,14 +1331,20 @@ packages:
   /constantinople/4.0.1:
     resolution: {integrity: sha1-De8RP6Dk3I3oMzGlz3nIsyUhMVE=, tarball: constantinople/download/constantinople-4.0.1.tgz}
     dependencies:
-      '@babel/parser': 7.16.6
-      '@babel/types': 7.16.0
+      '@babel/parser': 7.16.8
+      '@babel/types': 7.16.8
     dev: true
 
   /conventional-commit-types/3.0.0:
     resolution: {integrity: sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls=, tarball: conventional-commit-types/download/conventional-commit-types-3.0.0.tgz}
     dev: true
 
+  /convert-source-map/1.8.0:
+    resolution: {integrity: sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=, tarball: convert-source-map/download/convert-source-map-1.8.0.tgz}
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: true
+
   /copy-anything/2.0.3:
     resolution: {integrity: sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=, tarball: copy-anything/download/copy-anything-2.0.3.tgz}
     dependencies:
@@ -1178,6 +1527,10 @@ packages:
       domhandler: 4.3.0
     dev: true
 
+  /electron-to-chromium/1.4.46:
+    resolution: {integrity: sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==, tarball: electron-to-chromium/download/electron-to-chromium-1.4.46.tgz}
+    dev: true
+
   /emmet/2.3.5:
     resolution: {integrity: sha512-LcWfTamJnXIdMfLvJEC5Ld3hY5/KHXgv1L1bp6I7eEvB0ZhacHZ1kX0BYovJ8FroEsreLcq7n7kZhRMsf6jkXQ==, tarball: emmet/download/emmet-2.3.5.tgz}
     dependencies:
@@ -1385,6 +1738,11 @@ packages:
       esbuild-windows-arm64: 0.13.15
     dev: true
 
+  /escalade/3.1.1:
+    resolution: {integrity: sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=, tarball: escalade/download/escalade-3.1.1.tgz}
+    engines: {node: '>=6'}
+    dev: true
+
   /escape-string-regexp/1.0.5:
     resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=, tarball: escape-string-regexp/download/escape-string-regexp-1.0.5.tgz}
     engines: {node: '>=0.8.0'}
@@ -1700,6 +2058,11 @@ packages:
     resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=, tarball: functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz}
     dev: true
 
+  /gensync/1.0.0-beta.2:
+    resolution: {integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=, tarball: gensync/download/gensync-1.0.0-beta.2.tgz}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
   /get-intrinsic/1.1.1:
     resolution: {integrity: sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=, tarball: get-intrinsic/download/get-intrinsic-1.1.1.tgz}
     dependencies:
@@ -1777,6 +2140,11 @@ packages:
       which: 1.3.1
     dev: true
 
+  /globals/11.12.0:
+    resolution: {integrity: sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=, tarball: globals/download/globals-11.12.0.tgz}
+    engines: {node: '>=4'}
+    dev: true
+
   /globals/13.12.0:
     resolution: {integrity: sha1-TXM3YDBCMKAILtluIeXFZfiYCJ4=, tarball: globals/download/globals-13.12.0.tgz}
     engines: {node: '>=8'}
@@ -1829,6 +2197,10 @@ packages:
       function-bind: 1.1.1
     dev: true
 
+  /hash-sum/2.0.0:
+    resolution: {integrity: sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=, tarball: hash-sum/download/hash-sum-2.0.0.tgz}
+    dev: true
+
   /homedir-polyfill/1.0.3:
     resolution: {integrity: sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=, tarball: homedir-polyfill/download/homedir-polyfill-1.0.3.tgz}
     engines: {node: '>=0.10.0'}
@@ -1836,6 +2208,11 @@ packages:
       parse-passwd: 1.0.0
     dev: true
 
+  /html-tags/3.1.0:
+    resolution: {integrity: sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=, tarball: html-tags/download/html-tags-3.1.0.tgz}
+    engines: {node: '>=8'}
+    dev: true
+
   /htmlparser2/7.2.0:
     resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==, tarball: htmlparser2/download/htmlparser2-7.2.0.tgz?cache=0&sync_timestamp=1636641137791&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-7.2.0.tgz}
     dependencies:
@@ -2049,6 +2426,12 @@ packages:
       argparse: 2.0.1
     dev: true
 
+  /jsesc/2.5.2:
+    resolution: {integrity: sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=, tarball: jsesc/download/jsesc-2.5.2.tgz}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
   /json-parse-even-better-errors/2.3.1:
     resolution: {integrity: sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=, tarball: json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz}
     dev: true
@@ -2062,6 +2445,14 @@ packages:
     resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=, tarball: json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz}
     dev: true
 
+  /json5/2.2.0:
+    resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==, tarball: json5/download/json5-2.2.0.tgz}
+    engines: {node: '>=6'}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.5
+    dev: true
+
   /jsonc-parser/2.3.1:
     resolution: {integrity: sha1-WVSRULEz8u+sykj+nOHsBlmvI0I=, tarball: jsonc-parser/download/jsonc-parser-2.3.1.tgz}
     dev: true
@@ -2167,6 +2558,11 @@ packages:
       mlly: 0.2.10
     dev: true
 
+  /local-pkg/0.4.1:
+    resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==, tarball: local-pkg/download/local-pkg-0.4.1.tgz}
+    engines: {node: '>=14'}
+    dev: true
+
   /lodash-es/4.17.21:
     resolution: {integrity: sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4=, tarball: lodash-es/download/lodash-es-4.17.21.tgz}
     dev: false
@@ -2258,7 +2654,7 @@ packages:
     dev: true
 
   /mime/1.6.0:
-    resolution: {integrity: sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=, tarball: mime/download/mime-1.6.0.tgz}
+    resolution: {integrity: sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=, tarball: mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1636370946189&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime%2Fdownload%2Fmime-1.6.0.tgz}
     engines: {node: '>=4'}
     hasBin: true
     requiresBuild: true
@@ -2329,6 +2725,10 @@ packages:
     dev: true
     optional: true
 
+  /node-releases/2.0.1:
+    resolution: {integrity: sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=, tarball: node-releases/download/node-releases-2.0.1.tgz}
+    dev: true
+
   /normalize-path/3.0.0:
     resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, tarball: normalize-path/download/normalize-path-3.0.0.tgz}
     engines: {node: '>=0.10.0'}
@@ -2409,7 +2809,7 @@ packages:
     resolution: {integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=, tarball: parse-json/download/parse-json-5.2.0.tgz}
     engines: {node: '>=8'}
     dependencies:
-      '@babel/code-frame': 7.16.0
+      '@babel/code-frame': 7.16.7
       error-ex: 1.3.2
       json-parse-even-better-errors: 2.3.1
       lines-and-columns: 1.2.4
@@ -2538,7 +2938,7 @@ packages:
       jstransformer: 1.0.0
       pug-error: 2.0.0
       pug-walk: 2.0.0
-      resolve: 1.20.0
+      resolve: 1.21.0
     dev: true
 
   /pug-lexer/5.0.1:
@@ -2664,6 +3064,15 @@ packages:
       path-parse: 1.0.7
     dev: true
 
+  /resolve/1.21.0:
+    resolution: {integrity: sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==, tarball: resolve/download/resolve-1.21.0.tgz}
+    hasBin: true
+    dependencies:
+      is-core-module: 2.8.0
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
   /restore-cursor/2.0.0:
     resolution: {integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=, tarball: restore-cursor/download/restore-cursor-2.0.0.tgz}
     engines: {node: '>=4'}
@@ -2728,6 +3137,10 @@ packages:
       tslib: 2.1.0
     dev: true
 
+  /safe-buffer/5.1.2:
+    resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, tarball: safe-buffer/download/safe-buffer-5.1.2.tgz}
+    dev: true
+
   /safer-buffer/2.1.2:
     resolution: {integrity: sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=, tarball: safer-buffer/download/safer-buffer-2.1.2.tgz}
     dev: true
@@ -2749,6 +3162,11 @@ packages:
     dev: true
     optional: true
 
+  /semver/6.3.0:
+    resolution: {integrity: sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=, tarball: semver/download/semver-6.3.0.tgz}
+    hasBin: true
+    dev: true
+
   /semver/7.3.5:
     resolution: {integrity: sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=, tarball: semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1634019726791&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz}
     engines: {node: '>=10'}
@@ -2820,6 +3238,11 @@ packages:
     dev: true
     optional: true
 
+  /source-map/0.5.7:
+    resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, tarball: source-map/download/source-map-0.5.7.tgz}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /source-map/0.6.1:
     resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=, tarball: source-map/download/source-map-0.6.1.tgz}
     engines: {node: '>=0.10.0'}
@@ -2925,6 +3348,15 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /supports-preserve-symlinks-flag/1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, tarball: supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /svg-tags/1.0.0:
+    resolution: {integrity: sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=, tarball: svg-tags/download/svg-tags-1.0.0.tgz}
+    dev: true
+
   /text-table/0.2.0:
     resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=, tarball: text-table/download/text-table-0.2.0.tgz}
     dev: true
@@ -3023,6 +3455,29 @@ packages:
     engines: {node: '>= 4.0.0'}
     dev: true
 
+  /unplugin-auto-import/0.5.11_@vueuse+core@7.4.0+vite@2.7.5:
+    resolution: {integrity: sha512-MJ3POLe/IysRHF4yd32FkKDoxqSRoiuIHm89ys67B8FLuz2Pvh9poeqTVe6IhJsNxwv0+GSdFfj5Dpq24lhm4g==, tarball: unplugin-auto-import/download/unplugin-auto-import-0.5.11.tgz}
+    engines: {node: '>=14'}
+    peerDependencies:
+      '@vueuse/core': '*'
+    peerDependenciesMeta:
+      '@vueuse/core':
+        optional: true
+    dependencies:
+      '@antfu/utils': 0.4.0
+      '@rollup/pluginutils': 4.1.2
+      '@vueuse/core': 7.4.0_vue@3.2.26
+      local-pkg: 0.4.1
+      magic-string: 0.25.7
+      resolve: 1.21.0
+      unplugin: 0.3.0_vite@2.7.5
+    transitivePeerDependencies:
+      - esbuild
+      - rollup
+      - vite
+      - webpack
+    dev: true
+
   /unplugin-vue-components/0.17.9_vite@2.7.5+vue@3.2.26:
     resolution: {integrity: sha512-SZrK3T/uEoP2g2bH+8DwBznoqlS0dI7kQvCmHmL8HmTXdM78kh5P/9SN5IwuNpfbmXoGXWJPB8Pr8Ke8zsgpmA==, tarball: unplugin-vue-components/download/unplugin-vue-components-0.17.9.tgz}
     engines: {node: '>=14'}
@@ -3072,6 +3527,27 @@ packages:
       webpack-virtual-modules: 0.4.3
     dev: true
 
+  /unplugin/0.3.0_vite@2.7.5:
+    resolution: {integrity: sha512-9yLlOo+XC4NdIRgpkDSHOAHkQDq2x4mbuVNO/eKVa3C8WTn5wWGfzEFfRJFL8euqnX3Gf7hEur0AhXxy+WSwkg==, tarball: unplugin/download/unplugin-0.3.0.tgz}
+    peerDependencies:
+      esbuild: '>=0.13'
+      rollup: ^2.50.0
+      vite: ^2.3.0
+      webpack: 4 || 5
+    peerDependenciesMeta:
+      esbuild:
+        optional: true
+      rollup:
+        optional: true
+      vite:
+        optional: true
+      webpack:
+        optional: true
+    dependencies:
+      vite: 2.7.5_less@4.1.2
+      webpack-virtual-modules: 0.4.3
+    dev: true
+
   /upath/2.0.1:
     resolution: {integrity: sha1-UMc96mjW9rmQ9R0nnOYIFmXWGos=, tarball: upath/download/upath-2.0.1.tgz}
     engines: {node: '>=4'}
@@ -3313,7 +3789,7 @@ packages:
     dev: false
 
   /webpack-virtual-modules/0.4.3:
-    resolution: {integrity: sha1-zVl8bVHVpey0c+6hmDpY+ooX3tk=, tarball: webpack-virtual-modules/download/webpack-virtual-modules-0.4.3.tgz?cache=0&sync_timestamp=1634048784241&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-virtual-modules%2Fdownload%2Fwebpack-virtual-modules-0.4.3.tgz}
+    resolution: {integrity: sha1-zVl8bVHVpey0c+6hmDpY+ooX3tk=, tarball: webpack-virtual-modules/download/webpack-virtual-modules-0.4.3.tgz}
     dev: true
 
   /which/1.3.1:
@@ -3335,8 +3811,8 @@ packages:
     resolution: {integrity: sha1-zO461ULSVTinp6gKrSErmChJW6w=, tarball: with/download/with-7.0.2.tgz}
     engines: {node: '>= 10.0.0'}
     dependencies:
-      '@babel/parser': 7.16.6
-      '@babel/types': 7.16.0
+      '@babel/parser': 7.16.8
+      '@babel/types': 7.16.8
       assert-never: 1.2.1
       babel-walk: 3.0.0-canary-5
     dev: true

+ 1 - 8
src/App.vue

@@ -1,15 +1,11 @@
 <script setup lang="ts">
 // This starter template is using Vue 3 <script setup> SFCs
 // Check out https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup
-  import { ref, watch, computed, nextTick } from 'vue';
-  import { RouterView, useRouter, useRoute } from 'vue-router';
   import { AppRoute, NotFoundRoute, EnumPage } from '@/router/base';
   import { authRoutes } from '@/router/auth';
   import { filterAuthHandle } from '@/router/utils'
   import { AppStore } from '@/store/modules/app';
-  import { useLocalStorage } from '@vueuse/core'
-
-
+  import 'ant-design-vue/es/message/style';
   const router = useRouter()
   const route = useRoute()
   const store = AppStore()
@@ -49,9 +45,6 @@
   </init-loading>
 </template>
 
-<style lang="less">
-// @import './style/ant-design/index.less';
-</style>
 <style>
 @import './style/index.css';
 @import './style/global.css';

+ 56 - 0
src/auto-imports.d.ts

@@ -0,0 +1,56 @@
+// Generated by 'unplugin-auto-import'
+// We suggest you to commit this file into source control
+declare global {
+  const computed: typeof import('vue')['computed']
+  const createApp: typeof import('vue')['createApp']
+  const customRef: typeof import('vue')['customRef']
+  const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
+  const defineComponent: typeof import('vue')['defineComponent']
+  const effectScope: typeof import('vue')['effectScope']
+  const EffectScope: typeof import('vue')['EffectScope']
+  const getCurrentInstance: typeof import('vue')['getCurrentInstance']
+  const getCurrentScope: typeof import('vue')['getCurrentScope']
+  const h: typeof import('vue')['h']
+  const inject: typeof import('vue')['inject']
+  const isReadonly: typeof import('vue')['isReadonly']
+  const isRef: typeof import('vue')['isRef']
+  const markRaw: typeof import('vue')['markRaw']
+  const nextTick: typeof import('vue')['nextTick']
+  const onActivated: typeof import('vue')['onActivated']
+  const onBeforeMount: typeof import('vue')['onBeforeMount']
+  const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
+  const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
+  const onDeactivated: typeof import('vue')['onDeactivated']
+  const onErrorCaptured: typeof import('vue')['onErrorCaptured']
+  const onMounted: typeof import('vue')['onMounted']
+  const onRenderTracked: typeof import('vue')['onRenderTracked']
+  const onRenderTriggered: typeof import('vue')['onRenderTriggered']
+  const onScopeDispose: typeof import('vue')['onScopeDispose']
+  const onServerPrefetch: typeof import('vue')['onServerPrefetch']
+  const onUnmounted: typeof import('vue')['onUnmounted']
+  const onUpdated: typeof import('vue')['onUpdated']
+  const provide: typeof import('vue')['provide']
+  const reactive: typeof import('vue')['reactive']
+  const readonly: typeof import('vue')['readonly']
+  const ref: typeof import('vue')['ref']
+  const resolveComponent: typeof import('vue')['resolveComponent']
+  const shallowReactive: typeof import('vue')['shallowReactive']
+  const shallowReadonly: typeof import('vue')['shallowReadonly']
+  const shallowRef: typeof import('vue')['shallowRef']
+  const toRaw: typeof import('vue')['toRaw']
+  const toRef: typeof import('vue')['toRef']
+  const toRefs: typeof import('vue')['toRefs']
+  const triggerRef: typeof import('vue')['triggerRef']
+  const unref: typeof import('vue')['unref']
+  const useAttrs: typeof import('vue')['useAttrs']
+  const useClipboard: typeof import('@vueuse/core')['useClipboard']
+  const useCssModule: typeof import('vue')['useCssModule']
+  const useCssVars: typeof import('vue')['useCssVars']
+  const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
+  const useRoute: typeof import('vue-router')['useRoute']
+  const useRouter: typeof import('vue-router')['useRouter']
+  const useSlots: typeof import('vue')['useSlots']
+  const watch: typeof import('vue')['watch']
+  const watchEffect: typeof import('vue')['watchEffect']
+}
+export {}

+ 12 - 0
src/components.d.ts

@@ -0,0 +1,12 @@
+// generated by unplugin-vue-components
+// We suggest you to commit this file into source control
+// Read more: https://github.com/vuejs/vue-next/pull/3399
+
+declare module 'vue' {
+  export interface GlobalComponents {
+    HelloWorld: typeof import('./components/HelloWorld.vue')['default']
+    InitLoading: typeof import('./components/InitLoading/index.vue')['default']
+  }
+}
+
+export { }

+ 0 - 1
src/components/HelloWorld.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { ref } from 'vue'
 
 defineProps<{ msg: string }>()
 

+ 0 - 1
src/components/InitLoading.vue → src/components/InitLoading/index.vue

@@ -12,7 +12,6 @@
   </template>
 </template>
 <script lang="ts" setup>
-  import { ref, computed } from 'vue'
   import { AppStore } from '@/store/modules/app';
   const store = AppStore()
   const isLoading = computed(() => {

+ 1 - 5
src/layouts/app/Header.vue

@@ -16,7 +16,7 @@
       <a-dropdown placement="bottomCenter">
         <a @click.prevent>
           <a-avatar size="small">
-            <template #icon><user-outlined /></template>
+            <template #icon><UserOutlined /></template>
           </a-avatar>
           <span class="username">小小了墨</span>
         </a>
@@ -36,12 +36,8 @@
   </a-layout-header>
 </template>
 <script lang="ts" setup>
-import { ref } from 'vue';
-import { RouterLink, useRouter } from 'vue-router';
 import { message } from 'ant-design-vue';
 import { AppStore } from '@/store/modules/app'
-
-import 'ant-design-vue/es/message/style/index.less';
 import { EnumPage } from '@/router/base';
 
 const store = AppStore()

+ 0 - 2
src/layouts/app/Sider.vue

@@ -42,8 +42,6 @@
   </a-layout-sider>
 </template>
 <script lang="ts" setup>
-  import { ref, computed, watch, toRef } from 'vue';
-  import { useRouter, useRoute, onBeforeRouteUpdate } from 'vue-router';
   import { AppStore } from '@/store/modules/app';
   import type { RouteRecordName, RouteLocationNormalized, RouteMeta } from 'vue-router'
   import { MenuItem, SubMenu } from 'ant-design-vue';

+ 0 - 1
src/layouts/app/index.vue

@@ -13,7 +13,6 @@
   </a-layout>
 </template>
 <script lang="ts" setup>
-import { RouterView } from 'vue-router';
 import AppHeader from './Header.vue';
 import AppSider from './Sider.vue'
 import AppFooter from './Footer.vue';

+ 0 - 1
src/layouts/default/index.vue

@@ -2,6 +2,5 @@
   <RouterView />
 </template>
 <script lang="ts" setup>
-  import { RouterView } from 'vue-router'
 
 </script>

+ 0 - 1
src/pages/Common/index.vue

@@ -4,7 +4,6 @@
   </div>
 </template>
 <script lang="ts" setup>
-  import { ref } from 'vue'
 
 </script>
 <style scoped>

+ 0 - 2
src/pages/Error/index.vue

@@ -12,8 +12,6 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { ref } from 'vue';
-import { useRoute, useRouter } from 'vue-router';
 const route = useRoute()
 const router = useRouter()
 const text = ref('error page')

+ 0 - 3
src/pages/Home/index.vue

@@ -11,9 +11,6 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { ref, watch } from 'vue';
-import { useClipboard } from '@vueuse/core';
-
 const str = ref('这是一段可以点击按钮复制的文字')
 const { text, copy, copied, isSupported } = useClipboard({ source: str })
 const copyHandle = () => {

+ 4 - 8
src/pages/Login/index.vue

@@ -21,7 +21,7 @@
             size="large"
           >
             <template #prefix>
-              <user-outlined style="color: rgba(0, 0, 0, 0.25)" />
+              <UserOutlined style="color: rgba(0, 0, 0, 0.25)" />
             </template>
           </a-input>
         </a-form-item>
@@ -36,7 +36,7 @@
             size="large"
           >
             <template #prefix>
-              <lock-outlined style="color: rgba(0, 0, 0, 0.25)" />
+              <LockOutlined style="color: rgba(0, 0, 0, 0.25)" />
             </template>
           </a-input>
         </a-form-item>
@@ -55,11 +55,8 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { reactive, ref } from 'vue';
 import { EnumPage } from '@/router/base';
-import { useRouter } from 'vue-router';
 import { message } from 'ant-design-vue'
-import { useLocalStorage } from '@vueuse/core'
 import type { UnwrapRef } from 'vue';
 import type { FormProps } from 'ant-design-vue';
 import { AppStore } from '@/store/modules/app'
@@ -108,12 +105,12 @@ const finishFailedHandle: FormProps['onFinishFailed'] = (errors) => {
 <style lang="less" scoped>
 .login {
   height: 100%;
-  background: url('/images/login_bg.jpeg') center/cover no-repeat;
+  background: url("/images/login_bg.jpeg") center/cover no-repeat;
   display: flex;
   justify-content: center;
   align-items: center;
   .form-box {
-    background-color: rgba(255, 255, 255, .8);
+    background-color: rgba(255, 255, 255, 0.8);
     height: 460px;
     width: 400px;
     border-radius: 12px;
@@ -140,7 +137,6 @@ const finishFailedHandle: FormProps['onFinishFailed'] = (errors) => {
         text-align: center;
       }
     }
-
   }
 }
 </style>

+ 0 - 2
src/pages/System/Role/index.vue

@@ -4,8 +4,6 @@
   </div>
 </template>
 <script lang="ts" setup>
-  import { ref } from 'vue'
-
 </script>
 <style scoped>
 .system-role{}

+ 0 - 1
src/pages/System/index.vue

@@ -2,6 +2,5 @@
   <RouterView />
 </template>
 <script lang="ts" setup>
-  import { RouterView} from 'vue-router'
 </script>
 

+ 0 - 2
src/pages/Test/Test.vue

@@ -2,8 +2,6 @@
   <div>{{ text }}</div>
 </template>
 <script lang="ts" setup>
-  import { ref, onUpdated } from "vue";
-  import { useRoute } from 'vue-router'
   const route = useRoute()
   const text = ref(route.name)
   onUpdated(() => {

+ 0 - 1
src/pages/Test/index.vue

@@ -2,5 +2,4 @@
   <RouterView />
 </template>
 <script lang="ts" setup>
-import { RouterView } from 'vue-router'
 </script>

+ 1 - 1
src/router/auth.ts

@@ -1,4 +1,4 @@
-import { RouteRecordRaw } from 'vue-router';
+import type { RouteRecordRaw } from 'vue-router';
 import TestPage from '@/pages/Test/index.vue'
 import Test from '@/pages/Test/Test.vue'
 import SystemPage from '@/pages/System/index.vue';

+ 11 - 4
src/service/index.ts

@@ -1,7 +1,14 @@
 import { http } from '@/utils/request';
-
-enum Url {
-  getUserInfo = '/api/getUserInfo'
+import { API_PREFIX } from '../../vite/config'
+interface InterfaceUrl {
+  [key: string]: string
+}
+const url: InterfaceUrl = {
+  getUserInfo: '/getUserInfo'
 }
+Object.keys(url).map(key => {
+  url[key] = `${API_PREFIX}${url[key]}`
+})
+console.log('api >>>', url);
 
-export const getUserInfo = () => http.get<InterFaceUserInfo>(Url.getUserInfo)
+export const getUserInfo = () => http.get<InterFaceUserInfo>(url.getUserInfo)

+ 1 - 2
src/store/modules/app.ts

@@ -1,6 +1,5 @@
 import { defineStore } from 'pinia';
-import { RouteRecordRaw } from 'vue-router';
-import { useLocalStorage } from '@vueuse/core'
+import type { RouteRecordRaw } from 'vue-router';
 
 export const AppStore = defineStore('app', {
   state: () => ({

+ 0 - 3
src/style/ant-design/index.less

@@ -1,3 +0,0 @@
-// TODO: 改为按需加载,但是目前样式无法覆盖
-// @import 'ant-design-vue/dist/antd.less';
-// @primary-color: #a1c4fd;

+ 9 - 1
src/utils/request/Axios.ts

@@ -1,4 +1,12 @@
-import axios, { AxiosInstance, AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';
+import
+  axios,
+  {
+    AxiosInstance,
+    AxiosRequestConfig,
+    AxiosError,
+    AxiosResponse
+  }
+from 'axios';
 
 interface Result<T = any> {
   code: number;

+ 4 - 1
src/utils/request/index.ts

@@ -1,6 +1,9 @@
 import { AppAxios } from './Axios';
+import { API_BASE_URL } from '../../../vite/config'
+
+const isBuild = process.env.NODE_ENV === 'production'
 
 export const http = new AppAxios({
-  baseURL: '',
+  baseURL: isBuild ? '' : API_BASE_URL,
   timeout: 60e3
 })

+ 1 - 1
tsconfig.json

@@ -15,5 +15,5 @@
       "@/*": ["src/*"]
     }
   },
-  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
+  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/*.d.ts"]
 }

+ 49 - 45
vite.config.ts

@@ -1,51 +1,55 @@
-import { defineConfig } from 'vite'
+import { UserConfig, ConfigEnv, defineConfig } from 'vite'
 import { resolve } from 'path';
-import vue from '@vitejs/plugin-vue'
-import ViteComponents from 'unplugin-vue-components/vite'
-import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
-
+import { createVitePlugins } from './vite/plugin';
+import { generateModifyVars } from './vite/themeConfig';
+import { proxy } from './vite/proxy';
 const root = process.cwd()
 // https://vitejs.dev/config/
-export default defineConfig({
-  root,
-  css: {
-    preprocessorOptions: {
-      less: {
-        // 解决antd 引入less报错
-        javascriptEnabled: true,
-        // TODO: 改为按需加载,但是目前样式无法覆盖
-        lessOptions: {
-          modifyVars: {
-            'primary-color': '#a1c4fd'
-          }
+
+export default ({ command, mode }: ConfigEnv): UserConfig => {
+  console.log('vite >>>', command, mode);
+  const isBuild = command === 'build'
+  return {
+    root,
+    resolve: {
+      alias: [
+        {
+          find: /^@\//,
+          replacement: resolve(root, './src') + '/'
+        }
+      ]
+    },
+    css: {
+      preprocessorOptions: {
+        less: {
+          javascriptEnabled: true,
+          modifyVars: generateModifyVars()
         }
       }
+    },
+    build: {
+      target: 'es2015',
+      terserOptions: {
+        compress: {
+          // TODO:
+          keep_infinity: true,
+          drop_console: true,
+          drop_debugger: true
+        }
+      },
+      // TODO:
+      brotliSize: false,
+      // TODO:
+      chunkSizeWarningLimit: 2000,
+    },
+    plugins: createVitePlugins(isBuild),
+    server: {
+      hmr: {
+        // 禁用服务器错误的遮罩层
+        overlay: false
+      },
+      open: true,
+      proxy
     }
-  },
-  resolve: {
-    alias: [
-      {
-        find: /^@\//,
-        replacement: resolve(root, './src') + '/'
-      }
-    ]
-  },
-  build: {
-    terserOptions: {
-      compress: {
-        drop_console: true,
-        drop_debugger: true
-      }
-    }
-  },
-  plugins: [
-    vue(),
-    ViteComponents({
-      resolvers: [AntDesignVueResolver({
-        importStyle: true,
-        resolveIcons: true
-      })],
-      dts: true
-    })
-  ]
-})
+  }
+}

+ 8 - 0
vite/config.ts

@@ -0,0 +1,8 @@
+// 应用名
+export const APP_TITLE = 'Vite-Vue3-Admin'
+
+export const API_PREFIX = '/api'
+
+export const API_BASE_URL = '/fe'
+
+export const API_TARGET_URL = 'http://test.com'

+ 38 - 0
vite/plugin.ts

@@ -0,0 +1,38 @@
+import type { Plugin } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueJsx from '@vitejs/plugin-vue-jsx'
+import Components from 'unplugin-vue-components/vite';
+import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
+import AutoImport from 'unplugin-auto-import/vite';
+
+export function createVitePlugins(isBuild: boolean): Plugin[] {
+  return [
+    vue(),
+    vueJsx(),
+    Components({
+      dirs: ['src/components'],
+      extensions: ['vue'],
+      deep: true,
+      resolvers: [AntDesignVueResolver({
+        // 用于less变更主题用
+        importStyle: 'less',
+        /**
+         * resolve `ant-design-vue' icons
+         * requires package `@ant-design/icons-vue`
+         */
+        resolveIcons: true
+      })],
+      dts: 'src/components.d.ts'
+    }),
+    AutoImport({
+      imports: [
+        'vue',
+        'vue-router',
+        {
+          '@vueuse/core': ['useLocalStorage', 'useClipboard']
+        }
+      ],
+      dts: 'src/auto-imports.d.ts'
+    })
+  ]
+}

+ 10 - 0
vite/proxy.ts

@@ -0,0 +1,10 @@
+import { API_BASE_URL, API_TARGET_URL } from './config'
+import type { ProxyOptions } from 'vite'
+
+export const proxy: Record<string, ProxyOptions> = {
+  [API_BASE_URL]: {
+    target: API_TARGET_URL,
+    changeOrigin: true,
+    rewrite: path => path.replace(new RegExp(`^${API_BASE_URL}`), '')
+  }
+}

+ 23 - 0
vite/themeConfig.ts

@@ -0,0 +1,23 @@
+import { getThemeVariables } from 'ant-design-vue/dist/theme'
+
+// @primary-color: #1890ff; // 全局主色
+// @link-color: #1890ff; // 链接色
+// @success-color: #52c41a; // 成功色
+// @warning-color: #faad14; // 警告色
+// @error-color: #f5222d; // 错误色
+// @font-size-base: 14px; // 主字号
+// @heading-color: rgba(0, 0, 0, 0.85); // 标题色
+// @text-color: rgba(0, 0, 0, 0.65); // 主文本色
+// @text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色
+// @disabled-color: rgba(0, 0, 0, 0.25); // 失效色
+// @border-radius-base: 4px; // 组件/浮层圆角
+// @border-color-base: #d9d9d9; // 边框色
+// @box-shadow-base: 0 2px 8px rgba(0, 0, 0, 0.15); // 浮层阴影
+
+export function generateModifyVars(dark = false) {
+  const modifyVars = getThemeVariables(dark)
+  return {
+    ...modifyVars,
+    'primary-color': '#a1c4fd'
+  }
+}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels