Parcourir la source

build(pinia): Add pinia

build(vite-plugin-vue-setup-extend): Delete vite-plugin-vue-setup-extend

build(unplugin-auto-import): Delete unplugin-auto-import

build(unplugin-vue-components): Delete unplugin-vue-components

build(vite-plugin-style-import): Add vite-plugin-style-import
kailong321200875 il y a 3 ans
Parent
commit
2040500af1

+ 2 - 14
.eslintrc.js

@@ -37,20 +37,8 @@ module.exports = defineConfig({
     '@typescript-eslint/ban-types': 'off',
     '@typescript-eslint/no-non-null-assertion': 'off',
     '@typescript-eslint/explicit-module-boundary-types': 'off',
-    '@typescript-eslint/no-unused-vars': [
-      'error',
-      {
-        argsIgnorePattern: '^_',
-        varsIgnorePattern: '^_'
-      }
-    ],
-    'no-unused-vars': [
-      'error',
-      {
-        argsIgnorePattern: '^_',
-        varsIgnorePattern: '^_'
-      }
-    ],
+    '@typescript-eslint/no-unused-vars': 'error',
+    'no-unused-vars': 'error',
     'space-before-function-paren': 'off',
 
     'vue/attributes-order': 'off',

+ 4 - 4
.pnpm-debug.log

@@ -5,15 +5,15 @@
   "1 error pnpm": {
     "errno": 1,
     "code": "ELIFECYCLE",
-    "pkgid": "new-element-plus-admin@0.0.0",
+    "pkgid": "butterfly-admin@3.0.0",
     "stage": "clean",
     "script": "npx rimraf docs/node_modules && npx rimraf node_modules",
-    "pkgname": "new-element-plus-admin",
+    "pkgname": "butterfly-admin",
     "err": {
       "name": "pnpm",
-      "message": "new-element-plus-admin@0.0.0 clean: `npx rimraf docs/node_modules && npx rimraf node_modules`\nExit status 1",
+      "message": "butterfly-admin@3.0.0 clean: `npx rimraf docs/node_modules && npx rimraf node_modules`\nExit status 1",
       "code": "ELIFECYCLE",
-      "stack": "pnpm: new-element-plus-admin@0.0.0 clean: `npx rimraf docs/node_modules && npx rimraf node_modules`\nExit status 1\n    at EventEmitter.<anonymous> (C:\\Users\\admin\\AppData\\Roaming\\nvm\\v16.0.0\\node_modules\\pnpm\\dist\\pnpm.cjs:103540:20)\n    at EventEmitter.emit (node:events:365:28)\n    at ChildProcess.<anonymous> (C:\\Users\\admin\\AppData\\Roaming\\nvm\\v16.0.0\\node_modules\\pnpm\\dist\\pnpm.cjs:91469:18)\n    at ChildProcess.emit (node:events:365:28)\n    at maybeClose (node:internal/child_process:1067:16)\n    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)"
+      "stack": "pnpm: butterfly-admin@3.0.0 clean: `npx rimraf docs/node_modules && npx rimraf node_modules`\nExit status 1\n    at EventEmitter.<anonymous> (C:\\Users\\Saber\\AppData\\Roaming\\nvm\\v16.0.0\\node_modules\\pnpm\\dist\\pnpm.cjs:103540:20)\n    at EventEmitter.emit (node:events:365:28)\n    at ChildProcess.<anonymous> (C:\\Users\\Saber\\AppData\\Roaming\\nvm\\v16.0.0\\node_modules\\pnpm\\dist\\pnpm.cjs:91469:18)\n    at ChildProcess.emit (node:events:365:28)\n    at maybeClose (node:internal/child_process:1067:16)\n    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)"
     }
   }
 }

+ 8 - 1
.vscode/settings.json

@@ -7,5 +7,12 @@
   "[vue]": {
     "editor.defaultFormatter": "johnsoncodehk.volar"
   },
-  "i18n-ally.localesPaths": ["src/locales", "src/plugins/i18n"]
+  "i18n-ally.localesPaths": ["src/locales"],
+  "i18n-ally.keystyle": "nested",
+  "i18n-ally.sortKeys": true,
+  "i18n-ally.namespace": true,
+  "i18n-ally.enabledParsers": ["ts"],
+  "i18n-ally.sourceLanguage": "en",
+  "i18n-ally.displayLanguage": "zh-CN",
+  "i18n-ally.enabledFrameworks": ["vue", "react"]
 }

+ 2 - 0
log.md

@@ -1 +1,3 @@
 vscode 安装 WindiCSS IntelliSense
+
+自动导入太慢了。所以暂时不使用这种方案

+ 6 - 6
package.json

@@ -14,7 +14,7 @@
     "serve:pro": "vite preview --mode pro",
     "serve:dev": "vite preview --mode dev",
     "serve:test": "vite preview --mode test",
-    "check": "npx npm-check-updates",
+    "npm:check": "npx npm-check-updates",
     "clean": "npx rimraf docs/node_modules && npx rimraf node_modules",
     "clean:cache": "npx rimraf node_modules/.cache",
     "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
@@ -26,7 +26,8 @@
   },
   "dependencies": {
     "@vueuse/core": "^7.1.2",
-    "element-plus": "^1.2.0-beta.5",
+    "element-plus": "1.2.0-beta.6",
+    "pinia": "^2.0.6",
     "vue": "^3.2.24",
     "vue-i18n": "9.1.9",
     "vue-router": "^4.0.12",
@@ -35,8 +36,9 @@
   "devDependencies": {
     "@commitlint/cli": "^15.0.0",
     "@commitlint/config-conventional": "^15.0.0",
-    "@iconify-json/ep": "^1.0.1",
+    "@iconify/json": "^1.1.441",
     "@intlify/vite-plugin-vue-i18n": "^3.2.1",
+    "@types/node": "^16.11.12",
     "@typescript-eslint/eslint-plugin": "^5.6.0",
     "@typescript-eslint/parser": "^5.6.0",
     "@vitejs/plugin-vue": "^1.9.3",
@@ -63,12 +65,10 @@
     "stylelint-config-standard": "^24.0.0",
     "stylelint-order": "^5.0.0",
     "typescript": "4.5.2",
-    "unplugin-auto-import": "^0.5.1",
     "unplugin-icons": "^0.12.23",
-    "unplugin-vue-components": "^0.17.6",
     "vite": "2.6.14",
     "vite-plugin-eslint": "^1.3.0",
-    "vite-plugin-vue-setup-extend": "^0.1.0",
+    "vite-plugin-style-import": "^1.4.0",
     "vite-plugin-windicss": "^1.5.4",
     "vue-tsc": "^0.3.0",
     "windicss": "^3.2.1",

+ 366 - 38
pnpm-lock.yaml

@@ -3,8 +3,9 @@ lockfileVersion: 5.3
 specifiers:
   '@commitlint/cli': ^15.0.0
   '@commitlint/config-conventional': ^15.0.0
-  '@iconify-json/ep': ^1.0.1
+  '@iconify/json': ^1.1.441
   '@intlify/vite-plugin-vue-i18n': ^3.2.1
+  '@types/node': ^16.11.12
   '@typescript-eslint/eslint-plugin': ^5.6.0
   '@typescript-eslint/parser': ^5.6.0
   '@vitejs/plugin-vue': ^1.9.3
@@ -12,7 +13,7 @@ specifiers:
   '@vueuse/core': ^7.1.2
   autoprefixer: ^10.4.0
   commitizen: ^4.2.4
-  element-plus: ^1.2.0-beta.5
+  element-plus: 1.2.0-beta.6
   eslint: ^8.4.1
   eslint-config-prettier: ^8.3.0
   eslint-define-config: ^1.2.0
@@ -21,6 +22,7 @@ specifiers:
   husky: ^7.0.4
   less: ^4.1.2
   lint-staged: ^12.1.2
+  pinia: ^2.0.6
   postcss: ^8.4.4
   postcss-html: ^1.3.0
   postcss-less: ^5.0.0
@@ -38,6 +40,7 @@ specifiers:
   unplugin-vue-components: ^0.17.6
   vite: 2.6.14
   vite-plugin-eslint: ^1.3.0
+  vite-plugin-style-import: ^1.4.0
   vite-plugin-vue-setup-extend: ^0.1.0
   vite-plugin-windicss: ^1.5.4
   vue: ^3.2.24
@@ -50,7 +53,8 @@ specifiers:
 
 dependencies:
   '@vueuse/core': registry.npmmirror.com/@vueuse/core/7.1.2_vue@3.2.24
-  element-plus: registry.npmmirror.com/element-plus/1.2.0-beta.5_vue@3.2.24
+  element-plus: registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.24
+  pinia: registry.npmmirror.com/pinia/2.0.6_typescript@4.5.2+vue@3.2.24
   vue: registry.npmmirror.com/vue/3.2.24
   vue-i18n: registry.npmmirror.com/vue-i18n/9.1.9_vue@3.2.24
   vue-router: registry.npmmirror.com/vue-router/4.0.12_vue@3.2.24
@@ -59,8 +63,9 @@ dependencies:
 devDependencies:
   '@commitlint/cli': registry.npmmirror.com/@commitlint/cli/15.0.0
   '@commitlint/config-conventional': registry.npmmirror.com/@commitlint/config-conventional/15.0.0
-  '@iconify-json/ep': registry.npmmirror.com/@iconify-json/ep/1.0.1
+  '@iconify/json': registry.npmmirror.com/@iconify/json/1.1.441
   '@intlify/vite-plugin-vue-i18n': registry.npmmirror.com/@intlify/vite-plugin-vue-i18n/3.2.1_vite@2.6.14+vue-i18n@9.1.9
+  '@types/node': registry.npmmirror.com/@types/node/16.11.12
   '@typescript-eslint/eslint-plugin': registry.npmmirror.com/@typescript-eslint/eslint-plugin/5.6.0_16d83f5c41c3abb1061a82b07c18e4f3
   '@typescript-eslint/parser': registry.npmmirror.com/@typescript-eslint/parser/5.6.0_eslint@8.4.1+typescript@4.5.2
   '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/1.10.1_vite@2.6.14
@@ -92,6 +97,7 @@ devDependencies:
   unplugin-vue-components: registry.npmmirror.com/unplugin-vue-components/0.17.6_vite@2.6.14+vue@3.2.24
   vite: registry.npmmirror.com/vite/2.6.14_less@4.1.2
   vite-plugin-eslint: registry.nlark.com/vite-plugin-eslint/1.3.0_vite@2.6.14
+  vite-plugin-style-import: registry.npmmirror.com/vite-plugin-style-import/1.4.0_vite@2.6.14
   vite-plugin-vue-setup-extend: registry.npmmirror.com/vite-plugin-vue-setup-extend/0.1.0_vite@2.6.14
   vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.5.4_vite@2.6.14
   vue-tsc: registry.npmmirror.com/vue-tsc/0.3.0_typescript@4.5.2
@@ -736,6 +742,59 @@ packages:
     engines: { node: '>=6' }
     dev: true
 
+  registry.nlark.com/camel-case/4.1.2:
+    resolution:
+      {
+        integrity: sha1-lygHKpVPgFIoIlpt7qazhGHhvVo=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/camel-case/download/camel-case-4.1.2.tgz
+      }
+    name: camel-case
+    version: 4.1.2
+    dependencies:
+      pascal-case: registry.nlark.com/pascal-case/3.1.2
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
+  registry.nlark.com/capital-case/1.0.4:
+    resolution:
+      {
+        integrity: sha1-nRMCkjU8kkn2sA+lhSvuOKcX5mk=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/capital-case/download/capital-case-1.0.4.tgz
+      }
+    name: capital-case
+    version: 1.0.4
+    dependencies:
+      no-case: registry.nlark.com/no-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+      upper-case-first: registry.nlark.com/upper-case-first/2.0.2
+    dev: true
+
+  registry.nlark.com/change-case/4.1.2:
+    resolution:
+      {
+        integrity: sha1-/t/F8TYEXiOYwEEO5EH5VwRkHhI=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/change-case/download/change-case-4.1.2.tgz
+      }
+    name: change-case
+    version: 4.1.2
+    dependencies:
+      camel-case: registry.nlark.com/camel-case/4.1.2
+      capital-case: registry.nlark.com/capital-case/1.0.4
+      constant-case: registry.npmmirror.com/constant-case/3.0.4
+      dot-case: registry.nlark.com/dot-case/3.0.4
+      header-case: registry.nlark.com/header-case/2.0.4
+      no-case: registry.nlark.com/no-case/3.0.4
+      param-case: registry.nlark.com/param-case/3.0.4
+      pascal-case: registry.nlark.com/pascal-case/3.1.2
+      path-case: registry.nlark.com/path-case/3.0.4
+      sentence-case: registry.npmmirror.com/sentence-case/3.0.4
+      snake-case: registry.npmmirror.com/snake-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/character-parser/2.2.0:
     resolution:
       {
@@ -1147,6 +1206,17 @@ packages:
     engines: { node: '>=8' }
     dev: true
 
+  registry.nlark.com/dayjs/1.10.7:
+    resolution:
+      {
+        integrity: sha1-LPX5Gt0oEWdIRAhmoKHSbzps5Gg=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/dayjs/download/dayjs-1.10.7.tgz
+      }
+    name: dayjs
+    version: 1.10.7
+    dev: false
+
   registry.nlark.com/decamelize-keys/1.1.0:
     resolution:
       {
@@ -1300,6 +1370,20 @@ packages:
       domhandler: registry.npmmirror.com/domhandler/4.3.0
     dev: true
 
+  registry.nlark.com/dot-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-mytnDQCkMWZ6inW6Kc0bmICc51E=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/dot-case/download/dot-case-3.0.4.tgz
+      }
+    name: dot-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.nlark.com/no-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/dot-prop/5.3.0:
     resolution:
       {
@@ -2177,6 +2261,20 @@ packages:
     version: 2.0.0
     dev: true
 
+  registry.nlark.com/header-case/2.0.4:
+    resolution:
+      {
+        integrity: sha1-WkLmO1UXc0nPQFvrjXdayruSwGM=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/header-case/download/header-case-2.0.4.tgz
+      }
+    name: header-case
+    version: 2.0.4
+    dependencies:
+      capital-case: registry.nlark.com/capital-case/1.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/homedir-polyfill/1.0.3:
     resolution:
       {
@@ -2940,6 +3038,7 @@ packages:
       }
     name: lodash
     version: 4.17.21
+    dev: true
 
   registry.nlark.com/longest/2.0.1:
     resolution:
@@ -2953,6 +3052,19 @@ packages:
     engines: { node: '>=0.10.0' }
     dev: true
 
+  registry.nlark.com/lower-case/2.0.2:
+    resolution:
+      {
+        integrity: sha1-b6I3xj29xKgsoP2ILkci3F5jTig=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/lower-case/download/lower-case-2.0.2.tgz
+      }
+    name: lower-case
+    version: 2.0.2
+    dependencies:
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/lru-cache/6.0.0:
     resolution:
       {
@@ -3185,6 +3297,20 @@ packages:
     dev: true
     optional: true
 
+  registry.nlark.com/no-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/no-case/download/no-case-3.0.4.tgz
+      }
+    name: no-case
+    version: 3.0.4
+    dependencies:
+      lower-case: registry.nlark.com/lower-case/2.0.2
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/normalize-package-data/2.5.0:
     resolution:
       {
@@ -3420,6 +3546,20 @@ packages:
       p-limit: registry.nlark.com/p-limit/3.1.0
     dev: true
 
+  registry.nlark.com/param-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/param-case/download/param-case-3.0.4.tgz
+      }
+    name: param-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.nlark.com/dot-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/parse-passwd/1.0.0:
     resolution:
       {
@@ -3468,6 +3608,34 @@ packages:
     engines: { node: '>= 0.8' }
     dev: true
 
+  registry.nlark.com/pascal-case/3.1.2:
+    resolution:
+      {
+        integrity: sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/pascal-case/download/pascal-case-3.1.2.tgz
+      }
+    name: pascal-case
+    version: 3.1.2
+    dependencies:
+      no-case: registry.nlark.com/no-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
+  registry.nlark.com/path-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-kWhkUzTrlCZYN1xW+AtMDLX4LG8=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/path-case/download/path-case-3.0.4.tgz
+      }
+    name: path-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.nlark.com/dot-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/path-exists/4.0.0:
     resolution:
       {
@@ -4771,6 +4939,32 @@ packages:
     engines: { node: '>=4' }
     dev: true
 
+  registry.nlark.com/upper-case-first/2.0.2:
+    resolution:
+      {
+        integrity: sha1-mSwyc/iCq9GdHgKJTMFHEX+EQyQ=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/upper-case-first/download/upper-case-first-2.0.2.tgz
+      }
+    name: upper-case-first
+    version: 2.0.2
+    dependencies:
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
+  registry.nlark.com/upper-case/2.0.2:
+    resolution:
+      {
+        integrity: sha1-2JgQgj+qsd8VSbfZenb4Ziuub3o=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.nlark.com/upper-case/download/upper-case-2.0.2.tgz
+      }
+    name: upper-case
+    version: 2.0.2
+    dependencies:
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.nlark.com/uri-js/4.4.1:
     resolution:
       {
@@ -5710,7 +5904,7 @@ packages:
     dependencies:
       '@commitlint/top-level': registry.npmmirror.com/@commitlint/top-level/15.0.0
       '@commitlint/types': registry.npmmirror.com/@commitlint/types/15.0.0
-      fs-extra: registry.nlark.com/fs-extra/10.0.0
+      fs-extra: registry.npmmirror.com/fs-extra/10.0.0
       git-raw-commits: registry.nlark.com/git-raw-commits/2.0.10
     dev: true
 
@@ -5789,16 +5983,20 @@ packages:
       chalk: registry.npmmirror.com/chalk/4.1.2
     dev: true
 
-  registry.npmmirror.com/@element-plus/icons/0.0.11:
+  registry.npmmirror.com/@element-plus/icons-vue/0.2.4_vue@3.2.24:
     resolution:
       {
-        integrity: sha1-mxh8ACd0VIuRGFDRf6X8L5pRX1c=,
+        integrity: sha512-RsJNyL58rwxtsjeMy34o8txkL6UlME1stWsUlRpTac6UE9Bx9gdJvnDXbIKhOJqBLX17fBjmposdrn6VTqim2w==,
         registry: https://registry.npm.taobao.org/,
-        tarball: https://registry.npmmirror.com/@element-plus/icons/download/@element-plus/icons-0.0.11.tgz
+        tarball: https://registry.npmmirror.com/@element-plus/icons-vue/download/@element-plus/icons-vue-0.2.4.tgz
       }
-    name: '@element-plus/icons'
-    version: 0.0.11
-    deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+    id: registry.npmmirror.com/@element-plus/icons-vue/0.2.4
+    name: '@element-plus/icons-vue'
+    version: 0.2.4
+    peerDependencies:
+      vue: ^3.2.0
+    dependencies:
+      vue: registry.npmmirror.com/vue/3.2.24
     dev: false
 
   registry.npmmirror.com/@endemolshinegroup/cosmiconfig-typescript-loader/3.0.2_b67f536f129c730ed129a6d21d223ba9:
@@ -5919,17 +6117,15 @@ packages:
     version: 1.2.1
     dev: true
 
-  registry.npmmirror.com/@iconify-json/ep/1.0.1:
+  registry.npmmirror.com/@iconify/json/1.1.441:
     resolution:
       {
-        integrity: sha512-fvbjV9/XSZKzTJbtegB4hgAPV7QUu8LmqSo00ngpWaZxtvKYBAhykYfhtPtBASUJxpr5JacoH4+sITINdSh+9g==,
+        integrity: sha512-5tSDYjvCrpLET9cDvja/CK4YtrjfSQR05LHQaNCNPhRtth8j/h9b4ly1/kgEHTGGCGCi2qG/FjMWArDxi8uRDw==,
         registry: https://registry.npm.taobao.org/,
-        tarball: https://registry.npmmirror.com/@iconify-json/ep/download/@iconify-json/ep-1.0.1.tgz
+        tarball: https://registry.npmmirror.com/@iconify/json/download/@iconify/json-1.1.441.tgz
       }
-    name: '@iconify-json/ep'
-    version: 1.0.1
-    dependencies:
-      '@iconify/types': registry.npmmirror.com/@iconify/types/1.0.12
+    name: '@iconify/json'
+    version: 1.1.441
     dev: true
 
   registry.npmmirror.com/@iconify/types/1.0.12:
@@ -6204,6 +6400,17 @@ packages:
     version: 1.2.2
     dev: true
 
+  registry.npmmirror.com/@types/node/16.11.12:
+    resolution:
+      {
+        integrity: sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/@types/node/download/@types/node-16.11.12.tgz
+      }
+    name: '@types/node'
+    version: 16.11.12
+    dev: true
+
   registry.npmmirror.com/@types/normalize-package-data/2.4.1:
     resolution:
       {
@@ -6797,7 +7004,7 @@ packages:
       {
         integrity: sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=,
         registry: https://registry.npm.taobao.org/,
-        tarball: https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz
+        tarball: https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225763269&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz
       }
     name: acorn
     version: 7.4.1
@@ -7141,6 +7348,21 @@ packages:
       strip-json-comments: registry.nlark.com/strip-json-comments/3.0.1
     dev: true
 
+  registry.npmmirror.com/constant-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-O4Sprq9M8x7EXmv13pG9+wWJ+vE=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/constant-case/download/constant-case-3.0.4.tgz
+      }
+    name: constant-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.nlark.com/no-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+      upper-case: registry.nlark.com/upper-case/2.0.2
+    dev: true
+
   registry.npmmirror.com/conventional-commits-parser/3.2.3:
     resolution:
       {
@@ -7184,17 +7406,6 @@ packages:
     version: 2.6.19
     dev: false
 
-  registry.npmmirror.com/dayjs/1.10.7:
-    resolution:
-      {
-        integrity: sha1-LPX5Gt0oEWdIRAhmoKHSbzps5Gg=,
-        registry: https://registry.npm.taobao.org/,
-        tarball: https://registry.npmmirror.com/dayjs/download/dayjs-1.10.7.tgz?cache=0&sync_timestamp=1632743415328&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdayjs%2Fdownload%2Fdayjs-1.10.7.tgz
-      }
-    name: dayjs
-    version: 1.10.7
-    dev: false
-
   registry.npmmirror.com/debug/2.6.9:
     resolution:
       {
@@ -7312,25 +7523,25 @@ packages:
     version: 1.4.12
     dev: true
 
-  registry.npmmirror.com/element-plus/1.2.0-beta.5_vue@3.2.24:
+  registry.npmmirror.com/element-plus/1.2.0-beta.6_vue@3.2.24:
     resolution:
       {
-        integrity: sha512-8KNGsNZ6RjVJ7kmxq/WLeTBMhVxSjfaGdW2QdcdXz4km1MgxbyBfdiNGVQG4XH/n+hbtLFldCPw0mVT4vkncuA==,
+        integrity: sha512-8EdSIR/5/FHcSB8w1diAh+gJMHgxIvxuZoayY99k6taAR1QyEFHuPTgFccZLopJ1+iP4UEsZFz49l57qS08Utw==,
         registry: https://registry.npm.taobao.org/,
-        tarball: https://registry.npmmirror.com/element-plus/download/element-plus-1.2.0-beta.5.tgz
+        tarball: https://registry.npmmirror.com/element-plus/download/element-plus-1.2.0-beta.6.tgz
       }
-    id: registry.npmmirror.com/element-plus/1.2.0-beta.5
+    id: registry.npmmirror.com/element-plus/1.2.0-beta.6
     name: element-plus
-    version: 1.2.0-beta.5
+    version: 1.2.0-beta.6
     peerDependencies:
       vue: ^3.2.0
     dependencies:
-      '@element-plus/icons': registry.npmmirror.com/@element-plus/icons/0.0.11
+      '@element-plus/icons-vue': registry.npmmirror.com/@element-plus/icons-vue/0.2.4_vue@3.2.24
       '@popperjs/core': registry.npmmirror.com/@popperjs/core/2.11.0
       '@vueuse/core': registry.npmmirror.com/@vueuse/core/7.1.2_vue@3.2.24
       async-validator: registry.npmmirror.com/async-validator/4.0.7
-      dayjs: registry.npmmirror.com/dayjs/1.10.7
-      lodash: registry.nlark.com/lodash/4.17.21
+      dayjs: registry.nlark.com/dayjs/1.10.7
+      lodash: registry.npmmirror.com/lodash/4.17.21
       memoize-one: registry.npmmirror.com/memoize-one/6.0.0
       normalize-wheel-es: registry.npmmirror.com/normalize-wheel-es/1.1.1
       vue: registry.npmmirror.com/vue/3.2.24
@@ -7360,6 +7571,17 @@ packages:
     version: 9.2.2
     dev: true
 
+  registry.npmmirror.com/es-module-lexer/0.9.3:
+    resolution:
+      {
+        integrity: sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/es-module-lexer/download/es-module-lexer-0.9.3.tgz
+      }
+    name: es-module-lexer
+    version: 0.9.3
+    dev: true
+
   registry.npmmirror.com/esbuild-android-arm64/0.13.15:
     resolution:
       {
@@ -8082,6 +8304,22 @@ packages:
     version: 4.1.2
     dev: true
 
+  registry.npmmirror.com/fs-extra/10.0.0:
+    resolution:
+      {
+        integrity: sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/fs-extra/download/fs-extra-10.0.0.tgz?cache=0&sync_timestamp=1632539314386&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffs-extra%2Fdownload%2Ffs-extra-10.0.0.tgz
+      }
+    name: fs-extra
+    version: 10.0.0
+    engines: { node: '>=12' }
+    dependencies:
+      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.8
+      jsonfile: registry.nlark.com/jsonfile/6.1.0
+      universalify: registry.nlark.com/universalify/2.0.0
+    dev: true
+
   registry.npmmirror.com/fsevents/2.3.2:
     resolution:
       {
@@ -8492,6 +8730,17 @@ packages:
       mlly: registry.npmmirror.com/mlly/0.2.10
     dev: true
 
+  registry.npmmirror.com/lodash/4.17.21:
+    resolution:
+      {
+        integrity: sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz
+      }
+    name: lodash
+    version: 4.17.21
+    dev: false
+
   registry.npmmirror.com/log-update/4.0.0:
     resolution:
       {
@@ -8822,6 +9071,32 @@ packages:
     name: picocolors
     version: 1.0.0
 
+  registry.npmmirror.com/pinia/2.0.6_typescript@4.5.2+vue@3.2.24:
+    resolution:
+      {
+        integrity: sha512-01mP4+KapIcTNSYLhQESy6GW0N8vY5wX3UqOwkC87e7DPjEusNJ8bENrKqdvZaRHbB2rDMOONeAbwMa3+n1/rw==,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/pinia/download/pinia-2.0.6.tgz
+      }
+    id: registry.npmmirror.com/pinia/2.0.6
+    name: pinia
+    version: 2.0.6
+    peerDependencies:
+      '@vue/composition-api': ^1.4.0
+      typescript: '>=4.4.4'
+      vue: ^2.6.14 || ^3.2.0
+    peerDependenciesMeta:
+      '@vue/composition-api':
+        optional: true
+      typescript:
+        optional: true
+    dependencies:
+      '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.0.0-beta.20.1
+      typescript: registry.npmmirror.com/typescript/4.5.2
+      vue: registry.npmmirror.com/vue/3.2.24
+      vue-demi: registry.npmmirror.com/vue-demi/0.12.1_vue@3.2.24
+    dev: false
+
   registry.npmmirror.com/postcss-html/1.3.0:
     resolution:
       {
@@ -9010,6 +9285,21 @@ packages:
       tslib: registry.nlark.com/tslib/2.1.0
     dev: true
 
+  registry.npmmirror.com/sentence-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-NkWnuMEXx4f96HAgViJbtipFEx8=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/sentence-case/download/sentence-case-3.0.4.tgz
+      }
+    name: sentence-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.nlark.com/no-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+      upper-case-first: registry.nlark.com/upper-case-first/2.0.2
+    dev: true
+
   registry.npmmirror.com/signal-exit/3.0.6:
     resolution:
       {
@@ -9037,6 +9327,20 @@ packages:
       totalist: registry.nlark.com/totalist/1.1.0
     dev: true
 
+  registry.npmmirror.com/snake-case/3.0.4:
+    resolution:
+      {
+        integrity: sha1-Tyu9Vo6ZNavf1ZPzTGkdrbScRSw=,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/snake-case/download/snake-case-3.0.4.tgz
+      }
+    name: snake-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.nlark.com/dot-case/3.0.4
+      tslib: registry.nlark.com/tslib/2.3.1
+    dev: true
+
   registry.npmmirror.com/source-map-js/1.0.1:
     resolution:
       {
@@ -9632,6 +9936,30 @@ packages:
       webpack-virtual-modules: registry.nlark.com/webpack-virtual-modules/0.4.3
     dev: true
 
+  registry.npmmirror.com/vite-plugin-style-import/1.4.0_vite@2.6.14:
+    resolution:
+      {
+        integrity: sha512-EGAx0zVGUkwAwvDaC66zxgzXyHE0CwAXp4O1xGKnpMcrDT9L1nlojiCjjLRQzL8C3zwY1jn9ilq+m0VABKiiLg==,
+        registry: https://registry.npm.taobao.org/,
+        tarball: https://registry.npmmirror.com/vite-plugin-style-import/download/vite-plugin-style-import-1.4.0.tgz
+      }
+    id: registry.npmmirror.com/vite-plugin-style-import/1.4.0
+    name: vite-plugin-style-import
+    version: 1.4.0
+    peerDependencies:
+      vite: '>=2.0.0'
+    dependencies:
+      '@rollup/pluginutils': registry.nlark.com/@rollup/pluginutils/4.1.1
+      change-case: registry.nlark.com/change-case/4.1.2
+      debug: registry.npmmirror.com/debug/4.3.3
+      es-module-lexer: registry.npmmirror.com/es-module-lexer/0.9.3
+      fs-extra: registry.npmmirror.com/fs-extra/10.0.0
+      magic-string: registry.nlark.com/magic-string/0.25.7
+      vite: registry.npmmirror.com/vite/2.6.14_less@4.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   registry.npmmirror.com/vite-plugin-vue-setup-extend/0.1.0_vite@2.6.14:
     resolution:
       {

+ 0 - 0
.prettierrc.js → prettier.config.js


+ 8 - 43
src/App.vue

@@ -1,46 +1,11 @@
-<template>
-  <div>sss</div>
-  <div v:bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"> sssss </div>
-  <div>sss</div>
-  <HelloWorld msg="Hello Vue 3 + TypeScript + Vite" />
-  <div>{{ t('test.about') }}</div>
-  <div>{{ t('test2.go') }}</div>
-  <button @click="change">切换语言</button>
-  <el-icon><ep-add-location /></el-icon>
-  <el-button size="mini">ss</el-button>
-  <el-radio v-model="radio1" label="1">Option 1</el-radio>
-  <el-radio v-model="radio1" label="2">Option 2</el-radio>
-</template>
-
 <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 HelloWorld from './components/HelloWorld.vue'
-const { t, availableLocales, locale } = useI18n()
-
-const rootStyle = document.documentElement.style
-console.log(rootStyle)
-const radio1 = ref('')
-
-function change() {
-  const color = useCssVar('--el-color-primary', document.documentElement)
-  color.value = '#df8543'
-  const locales = availableLocales
-  locale.value = locales[(locales.indexOf(locale.value) + 1) % locales.length]
-}
+import { ElConfigProvider } from 'element-plus'
+import zhCn from 'element-plus/lib/locale/lang/zh-cn'
+// import en from 'element-plus/lib/locale/lang/en'
 </script>
 
-<style scoped>
-#app {
-  margin-top: 60px;
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  color: #2c3e50;
-  text-align: center;
-}
-
-div {
-  color: #2c3e50;
-}
-</style>
+<template>
+  <ElConfigProvider :locale="zhCn">
+    <RouterView class="app" />
+  </ElConfigProvider>
+</template>

+ 3 - 0
src/components/Form/index.ts

@@ -0,0 +1,3 @@
+import BfFrom from './src/BfForm.vue'
+
+export { BfFrom }

+ 10 - 0
src/components/Form/src/BfForm.vue

@@ -0,0 +1,10 @@
+<script lang="ts" setup>
+// import { propTypes } from '@/utils/propTypes'
+// import { array } from 'vue-types'
+</script>
+
+<template>
+  <div>hahah</div>
+</template>
+
+<style lang="less" scoped></style>

+ 0 - 50
src/components/HelloWorld.vue

@@ -1,50 +0,0 @@
-<script setup lang="ts">
-import { ref } from 'vue'
-
-defineProps<{ msg: string }>()
-
-const count = ref(0)
-</script>
-
-<template>
-  <h1>{{ msg }}</h1>
-
-  <p>
-    Recommended IDE setup:
-    <a href="https://code.visualstudio.com/" target="_blank">VSCode</a>
-    +
-    <a href="https://github.com/johnsoncodehk/volar" target="_blank">Volar</a>
-  </p>
-
-  <p>See <code>README.md</code> for more information.</p>
-
-  <p>
-    <a href="https://vitejs.dev/guide/features.html" target="_blank"> Vite Docs </a>
-    |
-    <a href="https://v3.vuejs.org/" target="_blank">Vue 3 Docs</a>
-  </p>
-
-  <button type="button" @click="count++"> count is: {{ count }} </button>
-  <p>
-    Edit
-    <code>components/HelloWorld.vue</code> to test hot module replacement.
-  </p>
-</template>
-
-<style scoped>
-a {
-  color: #42b983;
-}
-
-label {
-  margin: 0 0.5em;
-  font-weight: bold;
-}
-
-code {
-  padding: 2px 4px;
-  color: #304455;
-  background-color: #eee;
-  border-radius: 4px;
-}
-</style>

+ 6 - 0
src/components/index.ts

@@ -0,0 +1,6 @@
+import type { App } from 'vue'
+import { BfFrom } from './Form'
+
+export function setupGlobCom(app: App<Element>) {
+  app.component('BfFrom', BfFrom)
+}

+ 8 - 0
src/main.ts

@@ -7,8 +7,16 @@ const app = createApp(App)
 // 引入windi css
 import '@/plugins/windicss'
 
+// 引入全局组件
+import { setupGlobCom } from '@/components'
+setupGlobCom(app)
+
 // 引入多语言
 import { setupI18n } from '@/plugins/i18n'
 setupI18n(app)
 
+// 引入状态管理
+import { setupStore } from '@/store'
+setupStore(app)
+
 app.mount('#app')

+ 10 - 0
src/store/index.ts

@@ -0,0 +1,10 @@
+import type { App } from 'vue'
+import { createPinia } from 'pinia'
+
+const store = createPinia()
+
+export function setupStore(app: App<Element>) {
+  app.use(store)
+}
+
+export { store }

+ 155 - 0
src/store/modules/app.ts

@@ -0,0 +1,155 @@
+import { defineStore } from 'pinia'
+
+import { store } from '../index'
+
+export type LayoutType = 'Classic' | 'LeftTop' | 'Top' | 'Test'
+
+export interface AppState {
+  collapsed: boolean
+  showTags: boolean
+  showLogo: boolean
+  showNavbar: boolean
+  fixedHeader: boolean
+  layout: LayoutType
+  showBreadcrumb: boolean
+  showHamburger: boolean
+  showScreenfull: boolean
+  showUserInfo: boolean
+  title: string
+  logoTitle: string
+  userInfo: string
+  greyMode: boolean
+  showBackTop: boolean
+  showMenuTab: boolean
+  requestTime: boolean
+}
+
+export const useAppStore = defineStore({
+  id: 'app',
+  state: (): AppState => ({
+    collapsed: false, // 菜单栏是否栏缩收
+    showLogo: true, // 是否显示logo
+    showTags: true, // 是否显示标签栏
+    showNavbar: true, // 是否显示navbar
+    fixedHeader: true, // 是否固定header
+    layout: 'Classic', // layout布局
+    showBreadcrumb: true, // 是否显示面包屑
+    showHamburger: true, // 是否显示侧边栏缩收按钮
+    showScreenfull: true, // 是否全屏按钮
+    showUserInfo: true, // 是否显示用户头像
+    title: 'butterfly-admin', // 标题
+    logoTitle: 'butterfly-admin', // logo标题
+    userInfo: 'userInfo', // 登录信息存储字段-建议每个项目换一个字段,避免与其他项目冲突
+    greyMode: false, // 是否开始灰色模式,用于特殊悼念日
+    showBackTop: true, // 是否显示回到顶部
+    showMenuTab: false, // 是否固定一级菜单
+    requestTime: false // 是否在接口调用时添加时间戳,避免IE缓存
+  }),
+  getters: {
+    getCollapsed(): boolean {
+      return this.collapsed
+    },
+    getShowLogo(): boolean {
+      return this.showLogo
+    },
+    getShowTags(): boolean {
+      return this.showTags
+    },
+    getShowNavbar(): boolean {
+      return this.showNavbar
+    },
+    getFixedHeader(): boolean {
+      return this.fixedHeader
+    },
+    getLayout(): LayoutType {
+      return this.layout
+    },
+    getShowBreadcrumb(): boolean {
+      return this.showBreadcrumb
+    },
+    getShowHamburger(): boolean {
+      return this.showHamburger
+    },
+    getShowScreenfull(): boolean {
+      return this.showScreenfull
+    },
+    getShowUserInfo(): boolean {
+      return this.showUserInfo
+    },
+    getTitle(): string {
+      return this.title
+    },
+    getLogoTitle(): string {
+      return this.logoTitle
+    },
+    getUserInfo(): string {
+      return this.userInfo
+    },
+    getGreyMode(): boolean {
+      return this.greyMode
+    },
+    getShowBackTop(): boolean {
+      return this.showBackTop
+    },
+    getShowMenuTab(): boolean {
+      return this.showMenuTab
+    },
+    getRequestTime(): boolean {
+      return this.requestTime
+    }
+  },
+  actions: {
+    setCollapsed(collapsed: boolean): void {
+      this.collapsed = collapsed
+    },
+    setShowLogo(showLogo: boolean): void {
+      this.showLogo = showLogo
+    },
+    setShowTags(showTags: boolean): void {
+      this.showTags = showTags
+    },
+    setShowNavbar(showNavbar: boolean): void {
+      this.showNavbar = showNavbar
+    },
+    setFixedHeader(fixedHeader: boolean): void {
+      this.fixedHeader = fixedHeader
+    },
+    setLayout(layout: LayoutType): void {
+      this.layout = layout
+    },
+    setBreadcrumb(showBreadcrumb: boolean): void {
+      this.showBreadcrumb = showBreadcrumb
+    },
+    setHamburger(showHamburger: boolean): void {
+      this.showHamburger = showHamburger
+    },
+    setScreenfull(showScreenfull: boolean): void {
+      this.showScreenfull = showScreenfull
+    },
+    setUserInfo(showUserInfo: boolean): void {
+      this.showUserInfo = showUserInfo
+    },
+    setTitle(title: string): void {
+      this.title = title
+    },
+    setLogoTitle(logoTitle: string): void {
+      this.logoTitle = logoTitle
+    },
+    setGreyMode(greyMode: boolean): void {
+      this.greyMode = greyMode
+    },
+    setShowBackTop(showBackTop: boolean): void {
+      this.showBackTop = showBackTop
+    },
+    setShowMenuTab(showMenuTab: boolean): void {
+      this.showMenuTab = showMenuTab
+    },
+    setRequestTime(requestTime: boolean): void {
+      this.requestTime = requestTime
+    }
+  }
+})
+
+export function useAppStoreWithOut() {
+  return useAppStore(store)
+}

+ 0 - 194
src/types/auto-imports.d.ts

@@ -1,194 +0,0 @@
-// Generated by 'unplugin-auto-import'
-// We suggest you to commit this file into source control
-declare global {
-  const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
-  const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
-  const biSyncRef: typeof import('@vueuse/core')['biSyncRef']
-  const computed: typeof import('vue')['computed']
-  const computedInject: typeof import('@vueuse/core')['computedInject']
-  const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
-  const controlledRef: typeof import('@vueuse/core')['controlledRef']
-  const createApp: typeof import('vue')['createApp']
-  const createEventHook: typeof import('@vueuse/core')['createEventHook']
-  const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
-  const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
-  const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
-  const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
-  const customRef: typeof import('vue')['customRef']
-  const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
-  const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
-  const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
-  const defineComponent: typeof import('vue')['defineComponent']
-  const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
-  const effectScope: typeof import('vue')['effectScope']
-  const EffectScope: typeof import('vue')['EffectScope']
-  const extendRef: typeof import('@vueuse/core')['extendRef']
-  const getCurrentInstance: typeof import('vue')['getCurrentInstance']
-  const getCurrentScope: typeof import('vue')['getCurrentScope']
-  const h: typeof import('vue')['h']
-  const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
-  const inject: typeof import('vue')['inject']
-  const isDefined: typeof import('@vueuse/core')['isDefined']
-  const isReadonly: typeof import('vue')['isReadonly']
-  const isRef: typeof import('vue')['isRef']
-  const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
-  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 onClickOutside: typeof import('@vueuse/core')['onClickOutside']
-  const onDeactivated: typeof import('vue')['onDeactivated']
-  const onErrorCaptured: typeof import('vue')['onErrorCaptured']
-  const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
-  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 onStartTyping: typeof import('@vueuse/core')['onStartTyping']
-  const onUnmounted: typeof import('vue')['onUnmounted']
-  const onUpdated: typeof import('vue')['onUpdated']
-  const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
-  const provide: typeof import('vue')['provide']
-  const reactify: typeof import('@vueuse/core')['reactify']
-  const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
-  const reactive: typeof import('vue')['reactive']
-  const reactivePick: typeof import('@vueuse/core')['reactivePick']
-  const readonly: typeof import('vue')['readonly']
-  const ref: typeof import('vue')['ref']
-  const refDefault: typeof import('@vueuse/core')['refDefault']
-  const shallowReactive: typeof import('vue')['shallowReactive']
-  const shallowReadonly: typeof import('vue')['shallowReadonly']
-  const shallowRef: typeof import('vue')['shallowRef']
-  const syncRef: typeof import('@vueuse/core')['syncRef']
-  const templateRef: typeof import('@vueuse/core')['templateRef']
-  const throttledRef: typeof import('@vueuse/core')['throttledRef']
-  const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
-  const toRaw: typeof import('vue')['toRaw']
-  const toReactive: typeof import('@vueuse/core')['toReactive']
-  const toRef: typeof import('vue')['toRef']
-  const toRefs: typeof import('vue')['toRefs']
-  const triggerRef: typeof import('vue')['triggerRef']
-  const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
-  const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
-  const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
-  const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
-  const unref: typeof import('vue')['unref']
-  const unrefElement: typeof import('@vueuse/core')['unrefElement']
-  const until: typeof import('@vueuse/core')['until']
-  const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
-  const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
-  const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
-  const useAttrs: typeof import('vue')['useAttrs']
-  const useBase64: typeof import('@vueuse/core')['useBase64']
-  const useBattery: typeof import('@vueuse/core')['useBattery']
-  const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
-  const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
-  const useClamp: typeof import('@vueuse/core')['useClamp']
-  const useClipboard: typeof import('@vueuse/core')['useClipboard']
-  const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
-  const useCounter: typeof import('@vueuse/core')['useCounter']
-  const useCssModule: typeof import('vue')['useCssModule']
-  const useCssVar: typeof import('@vueuse/core')['useCssVar']
-  const useDark: typeof import('@vueuse/core')['useDark']
-  const useDebounce: typeof import('@vueuse/core')['useDebounce']
-  const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
-  const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
-  const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
-  const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
-  const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
-  const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
-  const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
-  const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
-  const useDraggable: typeof import('@vueuse/core')['useDraggable']
-  const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
-  const useElementHover: typeof import('@vueuse/core')['useElementHover']
-  const useElementSize: typeof import('@vueuse/core')['useElementSize']
-  const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
-  const useEventBus: typeof import('@vueuse/core')['useEventBus']
-  const useEventListener: typeof import('@vueuse/core')['useEventListener']
-  const useEventSource: typeof import('@vueuse/core')['useEventSource']
-  const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
-  const useFavicon: typeof import('@vueuse/core')['useFavicon']
-  const useFetch: typeof import('@vueuse/core')['useFetch']
-  const useFocus: typeof import('@vueuse/core')['useFocus']
-  const useFps: typeof import('@vueuse/core')['useFps']
-  const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
-  const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
-  const useI18n: typeof import('vue-i18n')['useI18n']
-  const useIdle: typeof import('@vueuse/core')['useIdle']
-  const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
-  const useInterval: typeof import('@vueuse/core')['useInterval']
-  const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
-  const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
-  const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
-  const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
-  const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
-  const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
-  const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
-  const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
-  const useMemory: typeof import('@vueuse/core')['useMemory']
-  const useMounted: typeof import('@vueuse/core')['useMounted']
-  const useMouse: typeof import('@vueuse/core')['useMouse']
-  const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
-  const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
-  const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
-  const useNetwork: typeof import('@vueuse/core')['useNetwork']
-  const useNow: typeof import('@vueuse/core')['useNow']
-  const useOnline: typeof import('@vueuse/core')['useOnline']
-  const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
-  const useParallax: typeof import('@vueuse/core')['useParallax']
-  const usePermission: typeof import('@vueuse/core')['usePermission']
-  const usePointer: typeof import('@vueuse/core')['usePointer']
-  const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
-  const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
-  const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
-  const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
-  const useRafFn: typeof import('@vueuse/core')['useRafFn']
-  const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
-  const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
-  const useRoute: typeof import('vue-router')['useRoute']
-  const useRouter: typeof import('vue-router')['useRouter']
-  const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
-  const useScroll: typeof import('@vueuse/core')['useScroll']
-  const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
-  const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
-  const useShare: typeof import('@vueuse/core')['useShare']
-  const useSlots: typeof import('vue')['useSlots']
-  const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
-  const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
-  const useStorage: typeof import('@vueuse/core')['useStorage']
-  const useSwipe: typeof import('@vueuse/core')['useSwipe']
-  const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
-  const useThrottle: typeof import('@vueuse/core')['useThrottle']
-  const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
-  const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
-  const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
-  const useTimeout: typeof import('@vueuse/core')['useTimeout']
-  const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
-  const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
-  const useTitle: typeof import('@vueuse/core')['useTitle']
-  const useToggle: typeof import('@vueuse/core')['useToggle']
-  const useTransition: typeof import('@vueuse/core')['useTransition']
-  const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
-  const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
-  const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
-  const useVModel: typeof import('@vueuse/core')['useVModel']
-  const useVModels: typeof import('@vueuse/core')['useVModels']
-  const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
-  const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
-  const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
-  const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
-  const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
-  const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
-  const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
-  const watch: typeof import('vue')['watch']
-  const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
-  const watchEffect: typeof import('vue')['watchEffect']
-  const watchOnce: typeof import('@vueuse/core')['watchOnce']
-  const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
-  const whenever: typeof import('@vueuse/core')['whenever']
-}
-export {}

+ 0 - 15
src/types/components.d.ts

@@ -1,15 +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 {
-    ElButton: typeof import('element-plus/es')['ElButton']
-    ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElRadio: typeof import('element-plus/es')['ElRadio']
-    EpAddLocation: typeof import('~icons/ep/add-location')['default']
-    HelloWorld: typeof import('./../components/HelloWorld.vue')['default']
-  }
-}
-
-export {}

+ 7 - 0
src/types/v-components.d.ts

@@ -0,0 +1,7 @@
+declare module 'vue' {
+  export interface GlobalComponents {
+    BfFrom: typeof import('../components/Form/src/BfForm.vue')['default']
+  }
+}
+
+export {}

+ 18 - 0
src/utils/index.ts

@@ -0,0 +1,18 @@
+import type { App, Plugin } from 'vue'
+
+/**
+ *
+ * @param component 需要注册的组件
+ * @param alias 组件别名
+ * @returns any
+ */
+export const withInstall = <T>(component: T, alias?: string) => {
+  const comp = component as any
+  comp.install = (app: App) => {
+    app.component(comp.name || comp.displayName, component)
+    if (alias) {
+      app.config.globalProperties[alias] = component
+    }
+  }
+  return component as T & Plugin
+}

+ 0 - 20
src/utils/prop-types.ts

@@ -1,20 +0,0 @@
-import { createTypes, VueTypesInterface } from 'vue-types'
-
-// 自定义扩展vue-types
-type PropTypes = VueTypesInterface & {}
-
-const propTypes: PropTypes = createTypes({
-  func: undefined,
-  bool: undefined,
-  string: undefined,
-  number: undefined,
-  object: undefined,
-  integer: undefined,
-  array: undefined
-})
-
-// 需要自定义扩展的类型
-// see: https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method
-propTypes.extend([])
-
-export { propTypes }

+ 31 - 0
src/utils/propTypes.ts

@@ -0,0 +1,31 @@
+import { createTypes, VueTypesInterface, VueTypeValidableDef } from 'vue-types'
+import { CSSProperties } from 'vue'
+
+// 自定义扩展vue-types
+type PropTypes = VueTypesInterface & {
+  readonly style: VueTypeValidableDef<CSSProperties>
+}
+
+const propTypes = createTypes({
+  func: undefined,
+  bool: undefined,
+  string: undefined,
+  number: undefined,
+  object: undefined,
+  integer: undefined
+}) as PropTypes
+
+console.log(propTypes.array)
+
+// 需要自定义扩展的类型
+// see: https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method
+propTypes.extend([
+  {
+    name: 'style',
+    getter: true,
+    type: [String, Object],
+    default: undefined
+  }
+])
+
+export { propTypes }

+ 7 - 1
tsconfig.json

@@ -23,7 +23,13 @@
     "paths": {
       "@/*": ["src/*"]
     },
-    "types": ["@intlify/vite-plugin-vue-i18n/client", "vite/client", "element-plus/global.d.ts"]
+    "types": [
+      "@intlify/vite-plugin-vue-i18n/client",
+      "vite/client",
+      "./node_modules/element-plus/global",
+      "unplugin-icons/types/vue"
+    ],
+    "typeRoots": ["./node_modules/@types/", "./src/types"]
   },
   "include": ["src/**/*"],
   "exclude": ["dist", "node_modules"]

+ 32 - 30
vite.config.ts

@@ -3,15 +3,14 @@ import { loadEnv } from 'vite'
 import type { UserConfig, ConfigEnv } from 'vite'
 import Vue from '@vitejs/plugin-vue'
 import WindiCSS from 'vite-plugin-windicss'
-import Components from 'unplugin-vue-components/vite'
-import AutoImport from 'unplugin-auto-import/vite'
+// import Components from 'unplugin-vue-components/vite'
+// import AutoImport from 'unplugin-auto-import/vite'
 import VueJsx from '@vitejs/plugin-vue-jsx'
-import VueSetupExtend from 'vite-plugin-vue-setup-extend'
 import EslintPlugin from 'vite-plugin-eslint'
-import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
 import VueI18n from '@intlify/vite-plugin-vue-i18n'
 import Icons from 'unplugin-icons/vite'
-import IconsResolver from 'unplugin-icons/resolver'
+import StyleImport, { ElementPlusResolve } from 'vite-plugin-style-import'
 
 // https://vitejs.dev/config/
 const root = process.cwd()
@@ -36,41 +35,44 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
       Vue(),
       VueJsx(),
       WindiCSS(),
-      VueSetupExtend(),
-      AutoImport({
-        imports: [
-          'vue',
-          'vue-router',
-          'vue-i18n',
-          '@vueuse/core'
-        ],
-        dts: 'src/types/auto-imports.d.ts'
+      StyleImport({
+        resolves: [ElementPlusResolve()]
       }),
+      // AutoImport({
+      //   imports: [
+      //     'vue',
+      //     'vue-router',
+      //     'vue-i18n',
+      //     '@vueuse/core'
+      //   ],
+      //   dts: 'src/types/auto-imports.d.ts'
+      // }),
       Icons({
         compiler: 'vue3',
         autoInstall: true
       }),
-      Components({
-        dirs: ['src/components'],
-        extensions: ['vue', 'md'],
-        include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
-        // custom resolvers
-        resolvers: [
-          ElementPlusResolver(),
-          IconsResolver({
-            prefix: false,
-            enabledCollections : ['ep']
-          })
-        ],
-        dts: 'src/types/components.d.ts'
-      }),
+      // Components({
+      //   dirs: ['src/components'],
+      //   extensions: ['vue', 'md'],
+      //   include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
+      //   // custom resolvers
+      //   resolvers: [
+      //     ElementPlusResolver(),
+      //     IconsResolver({
+      //       prefix: false,
+      //       enabledCollections : ['ep']
+      //     })
+      //   ],
+      //   dts: 'src/types/components.d.ts'
+      // }),
       EslintPlugin({
+        cache: false,
         include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
       }),
       VueI18n({
         runtimeOnly: true,
         compositionOnly: true,
-        include: [pathResolve(__dirname, 'src/locales/**')]
+        include: [resolve(__dirname, 'src/locales/**')]
       })
     ],
 
@@ -124,7 +126,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
       include: [
         'vue',
         'vue-router',
-        'element-plus'
+        'vue-types'
       ]
     }
   }