Browse Source

vxetable替换eltable

tongshangming 3 years ago
parent
commit
17aba60216

+ 6 - 2
package.json

@@ -15,12 +15,15 @@
     "@vueuse/core": "^9.5.0",
     "@wangeditor/editor": "^5.1.23",
     "@wangeditor/editor-for-vue": "^5.1.12",
-    "axios": "^1.1.3",
+    "axios": "^1.2.1",
+    "dayjs": "^1.11.7",
     "element-plus": "^2.2.21",
     "nprogress": "^0.2.0",
     "pinia": "^2.0.23",
     "vue": "^3.2.45",
-    "vue-router": "^4.1.6"
+    "vue-router": "^4.1.6",
+    "vxe-table": "^4.3.6",
+    "xe-utils": "^3.5.7"
   },
   "devDependencies": {
     "@iconify-json/ep": "^1.1.8",
@@ -45,6 +48,7 @@
     "unplugin-vue-components": "^0.22.9",
     "unplugin-vue-define-options": "^0.11.2",
     "vite": "^3.2.4",
+    "vite-plugin-style-import": "^2.0.0",
     "vite-plugin-svg-icons": "^2.0.1",
     "vue-tsc": "^0.39.5"
   }

+ 217 - 9
pnpm-lock.yaml

@@ -16,7 +16,8 @@ specifiers:
   '@vueuse/core': ^9.5.0
   '@wangeditor/editor': ^5.1.23
   '@wangeditor/editor-for-vue': ^5.1.12
-  axios: ^1.1.3
+  axios: ^1.2.1
+  dayjs: ^1.11.7
   element-plus: ^2.2.21
   eslint: ^8.27.0
   eslint-plugin-vue: ^9.7.0
@@ -32,10 +33,13 @@ specifiers:
   unplugin-vue-components: ^0.22.9
   unplugin-vue-define-options: ^0.11.2
   vite: ^3.2.4
+  vite-plugin-style-import: ^2.0.0
   vite-plugin-svg-icons: ^2.0.1
   vue: ^3.2.45
   vue-router: ^4.1.6
   vue-tsc: ^0.39.5
+  vxe-table: ^4.3.6
+  xe-utils: ^3.5.7
 
 dependencies:
   '@element-plus/icons-vue': registry.npmmirror.com/@element-plus/icons-vue/2.0.10_vue@3.2.45
@@ -43,12 +47,15 @@ dependencies:
   '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45
   '@wangeditor/editor': registry.npmmirror.com/@wangeditor/editor/5.1.23
   '@wangeditor/editor-for-vue': registry.npmmirror.com/@wangeditor/editor-for-vue/5.1.12_3apfu3xbp6awzuex7ed3sbrv6y
-  axios: registry.npmmirror.com/axios/1.1.3
+  axios: registry.npmmirror.com/axios/1.2.1
+  dayjs: registry.npmmirror.com/dayjs/1.11.7
   element-plus: registry.npmmirror.com/element-plus/2.2.21_vue@3.2.45
   nprogress: registry.npmmirror.com/nprogress/0.2.0
   pinia: registry.npmmirror.com/pinia/2.0.23_e7lp6ggkpgyi5vqd44m2kxvk6i
   vue: registry.npmmirror.com/vue/3.2.45
   vue-router: registry.npmmirror.com/vue-router/4.1.6_vue@3.2.45
+  vxe-table: registry.npmmirror.com/vxe-table/4.3.6_vue@3.2.45+xe-utils@3.5.7
+  xe-utils: registry.npmmirror.com/xe-utils/3.5.7
 
 devDependencies:
   '@iconify-json/ep': registry.npmmirror.com/@iconify-json/ep/1.1.8
@@ -73,6 +80,7 @@ devDependencies:
   unplugin-vue-components: registry.npmmirror.com/unplugin-vue-components/0.22.9_vue@3.2.45
   unplugin-vue-define-options: registry.npmmirror.com/unplugin-vue-define-options/0.11.2
   vite: registry.npmmirror.com/vite/3.2.4_ine3jvitqo2wd63xsapbvgdjva
+  vite-plugin-style-import: registry.npmmirror.com/vite-plugin-style-import/2.0.0_vite@3.2.4
   vite-plugin-svg-icons: registry.npmmirror.com/vite-plugin-svg-icons/2.0.1_vite@3.2.4
   vue-tsc: registry.npmmirror.com/vue-tsc/0.39.5_typescript@4.7.4
 
@@ -1887,10 +1895,10 @@ packages:
     hasBin: true
     dev: true
 
-  registry.npmmirror.com/axios/1.1.3:
-    resolution: {integrity: sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-1.1.3.tgz}
+  registry.npmmirror.com/axios/1.2.1:
+    resolution: {integrity: sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-1.2.1.tgz}
     name: axios
-    version: 1.1.3
+    version: 1.2.1
     dependencies:
       follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2
       form-data: registry.npmmirror.com/form-data/4.0.0
@@ -2053,6 +2061,15 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
+  registry.npmmirror.com/camel-case/4.1.2:
+    resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz}
+    name: camel-case
+    version: 4.1.2
+    dependencies:
+      pascal-case: registry.npmmirror.com/pascal-case/3.1.2
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/camelcase/6.3.0:
     resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}
     name: camelcase
@@ -2066,6 +2083,16 @@ packages:
     version: 1.0.30001431
     dev: true
 
+  registry.npmmirror.com/capital-case/1.0.4:
+    resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz}
+    name: capital-case
+    version: 1.0.4
+    dependencies:
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+      upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2
+    dev: true
+
   registry.npmmirror.com/chalk/1.1.3:
     resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz}
     name: chalk
@@ -2100,6 +2127,25 @@ packages:
       supports-color: registry.npmmirror.com/supports-color/7.2.0
     dev: true
 
+  registry.npmmirror.com/change-case/4.1.2:
+    resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz}
+    name: change-case
+    version: 4.1.2
+    dependencies:
+      camel-case: registry.npmmirror.com/camel-case/4.1.2
+      capital-case: registry.npmmirror.com/capital-case/1.0.4
+      constant-case: registry.npmmirror.com/constant-case/3.0.4
+      dot-case: registry.npmmirror.com/dot-case/3.0.4
+      header-case: registry.npmmirror.com/header-case/2.0.4
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      param-case: registry.npmmirror.com/param-case/3.0.4
+      pascal-case: registry.npmmirror.com/pascal-case/3.1.2
+      path-case: registry.npmmirror.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.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/chokidar/3.5.3:
     resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
     name: chokidar
@@ -2221,6 +2267,22 @@ packages:
     version: 2.15.3
     dev: true
 
+  registry.npmmirror.com/console/0.7.2:
+    resolution: {integrity: sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/console/-/console-0.7.2.tgz}
+    name: console
+    version: 0.7.2
+    dev: true
+
+  registry.npmmirror.com/constant-case/3.0.4:
+    resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz}
+    name: constant-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+      upper-case: registry.npmmirror.com/upper-case/2.0.2
+    dev: true
+
   registry.npmmirror.com/convert-source-map/1.9.0:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz}
     name: convert-source-map
@@ -2338,10 +2400,10 @@ packages:
       type: registry.npmmirror.com/type/1.2.0
     dev: false
 
-  registry.npmmirror.com/dayjs/1.11.6:
-    resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.6.tgz}
+  registry.npmmirror.com/dayjs/1.11.7:
+    resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz}
     name: dayjs
-    version: 1.11.6
+    version: 1.11.7
     dev: false
 
   registry.npmmirror.com/debug/2.6.9:
@@ -2534,6 +2596,15 @@ packages:
       domhandler: registry.npmmirror.com/domhandler/4.3.1
     dev: true
 
+  registry.npmmirror.com/dot-case/3.0.4:
+    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz}
+    name: dot-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/duplexer/0.1.2:
     resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz}
     name: duplexer
@@ -2562,7 +2633,7 @@ packages:
       '@types/lodash-es': registry.npmmirror.com/@types/lodash-es/4.17.6
       '@vueuse/core': registry.npmmirror.com/@vueuse/core/9.5.0_vue@3.2.45
       async-validator: registry.npmmirror.com/async-validator/4.2.5
-      dayjs: registry.npmmirror.com/dayjs/1.11.6
+      dayjs: registry.npmmirror.com/dayjs/1.11.7
       escape-html: registry.npmmirror.com/escape-html/1.0.3
       lodash: registry.npmmirror.com/lodash/4.17.21
       lodash-es: registry.npmmirror.com/lodash-es/4.17.21
@@ -2633,6 +2704,12 @@ packages:
       unbox-primitive: registry.npmmirror.com/unbox-primitive/1.0.2
     dev: true
 
+  registry.npmmirror.com/es-module-lexer/0.9.3:
+    resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz}
+    name: es-module-lexer
+    version: 0.9.3
+    dev: true
+
   registry.npmmirror.com/es-to-primitive/1.2.1:
     resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz}
     name: es-to-primitive
@@ -3690,6 +3767,15 @@ packages:
     hasBin: true
     dev: true
 
+  registry.npmmirror.com/header-case/2.0.4:
+    resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz}
+    name: header-case
+    version: 2.0.4
+    dependencies:
+      capital-case: registry.npmmirror.com/capital-case/1.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/hosted-git-info/2.8.9:
     resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz}
     name: hosted-git-info
@@ -4374,6 +4460,14 @@ packages:
     name: lodash
     version: 4.17.21
 
+  registry.npmmirror.com/lower-case/2.0.2:
+    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz}
+    name: lower-case
+    version: 2.0.2
+    dependencies:
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/lru-cache/6.0.0:
     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}
     name: lru-cache
@@ -4647,6 +4741,15 @@ packages:
     version: 1.0.5
     dev: true
 
+  registry.npmmirror.com/no-case/3.0.4:
+    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz}
+    name: no-case
+    version: 3.0.4
+    dependencies:
+      lower-case: registry.npmmirror.com/lower-case/2.0.2
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/node-fetch-native/0.1.8:
     resolution: {integrity: sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-0.1.8.tgz}
     name: node-fetch-native
@@ -4845,6 +4948,15 @@ packages:
       p-limit: registry.npmmirror.com/p-limit/3.1.0
     dev: true
 
+  registry.npmmirror.com/param-case/3.0.4:
+    resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz}
+    name: param-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.npmmirror.com/dot-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/parent-module/1.0.1:
     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz}
     name: parent-module
@@ -4864,6 +4976,15 @@ packages:
       json-parse-better-errors: registry.npmmirror.com/json-parse-better-errors/1.0.2
     dev: true
 
+  registry.npmmirror.com/pascal-case/3.1.2:
+    resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz}
+    name: pascal-case
+    version: 3.1.2
+    dependencies:
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/pascalcase/0.1.1:
     resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz}
     name: pascalcase
@@ -4871,6 +4992,15 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  registry.npmmirror.com/path-case/3.0.4:
+    resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz}
+    name: path-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.npmmirror.com/dot-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/path-exists/4.0.0:
     resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz}
     name: path-exists
@@ -5383,6 +5513,16 @@ packages:
       lru-cache: registry.npmmirror.com/lru-cache/6.0.0
     dev: true
 
+  registry.npmmirror.com/sentence-case/3.0.4:
+    resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz}
+    name: sentence-case
+    version: 3.0.4
+    dependencies:
+      no-case: registry.npmmirror.com/no-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+      upper-case-first: registry.npmmirror.com/upper-case-first/2.0.2
+    dev: true
+
   registry.npmmirror.com/set-value/2.0.1:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz}
     name: set-value
@@ -5496,6 +5636,15 @@ packages:
     engines: {node: '>=8.3.0'}
     dev: false
 
+  registry.npmmirror.com/snake-case/3.0.4:
+    resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz}
+    name: snake-case
+    version: 3.0.4
+    dependencies:
+      dot-case: registry.npmmirror.com/dot-case/3.0.4
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/snapdragon-node/2.1.1:
     resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz}
     name: snapdragon-node
@@ -5902,6 +6051,12 @@ packages:
     version: 1.14.1
     dev: true
 
+  registry.npmmirror.com/tslib/2.4.1:
+    resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz}
+    name: tslib
+    version: 2.4.1
+    dev: true
+
   registry.npmmirror.com/tsutils/3.21.0_typescript@4.7.4:
     resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz}
     id: registry.npmmirror.com/tsutils/3.21.0
@@ -6217,6 +6372,22 @@ packages:
       picocolors: registry.npmmirror.com/picocolors/1.0.0
     dev: true
 
+  registry.npmmirror.com/upper-case-first/2.0.2:
+    resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz}
+    name: upper-case-first
+    version: 2.0.2
+    dependencies:
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
+  registry.npmmirror.com/upper-case/2.0.2:
+    resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz}
+    name: upper-case
+    version: 2.0.2
+    dependencies:
+      tslib: registry.npmmirror.com/tslib/2.4.1
+    dev: true
+
   registry.npmmirror.com/uri-js/4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
     name: uri-js
@@ -6261,6 +6432,24 @@ packages:
     engines: {node: '>= 0.8'}
     dev: true
 
+  registry.npmmirror.com/vite-plugin-style-import/2.0.0_vite@3.2.4:
+    resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz}
+    id: registry.npmmirror.com/vite-plugin-style-import/2.0.0
+    name: vite-plugin-style-import
+    version: 2.0.0
+    peerDependencies:
+      vite: '>=2.0.0'
+    dependencies:
+      '@rollup/pluginutils': registry.npmmirror.com/@rollup/pluginutils/4.2.1
+      change-case: registry.npmmirror.com/change-case/4.1.2
+      console: registry.npmmirror.com/console/0.7.2
+      es-module-lexer: registry.npmmirror.com/es-module-lexer/0.9.3
+      fs-extra: registry.npmmirror.com/fs-extra/10.1.0
+      magic-string: registry.npmmirror.com/magic-string/0.25.9
+      pathe: registry.npmmirror.com/pathe/0.2.0
+      vite: registry.npmmirror.com/vite/3.2.4_ine3jvitqo2wd63xsapbvgdjva
+    dev: true
+
   registry.npmmirror.com/vite-plugin-svg-icons/2.0.1_vite@3.2.4:
     resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz}
     id: registry.npmmirror.com/vite-plugin-svg-icons/2.0.1
@@ -6395,6 +6584,19 @@ packages:
       '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer/3.2.45_vue@3.2.45
       '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
 
+  registry.npmmirror.com/vxe-table/4.3.6_vue@3.2.45+xe-utils@3.5.7:
+    resolution: {integrity: sha512-SZ+ocVoOFc1PSzvpz6q5n7YvWvPSXUV+raet0zaSbQy3g8Dj7jKNlFbcsSoWZm8Uys9ufAQxeqYO5rRwOB2m7A==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vxe-table/-/vxe-table-4.3.6.tgz}
+    id: registry.npmmirror.com/vxe-table/4.3.6
+    name: vxe-table
+    version: 4.3.6
+    peerDependencies:
+      vue: ^3.2.28
+      xe-utils: ^3.5.0
+    dependencies:
+      vue: registry.npmmirror.com/vue/3.2.45
+      xe-utils: registry.npmmirror.com/xe-utils/3.5.7
+    dev: false
+
   registry.npmmirror.com/webpack-sources/3.2.3:
     resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz}
     name: webpack-sources
@@ -6458,6 +6660,12 @@ packages:
     version: 1.0.2
     dev: true
 
+  registry.npmmirror.com/xe-utils/3.5.7:
+    resolution: {integrity: sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xe-utils/-/xe-utils-3.5.7.tgz}
+    name: xe-utils
+    version: 3.5.7
+    dev: false
+
   registry.npmmirror.com/xml-name-validator/4.0.0:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==, registry: http://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz}
     name: xml-name-validator

+ 3 - 3
src/api/dict.ts

@@ -3,12 +3,12 @@ import request from '@/utils/request'
 // 字典
 export function getDictList(data: any) {
   return request.post('/sys/dict/data', data, {
-    headers: { 'content-type': 'application/x-www-form-urlencoded' }
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
   })
 }
 export function saveDict(data: any) {
   return request.post('/sys/dict/save', data, {
-    headers: { 'content-type': 'application/x-www-form-urlencoded' }
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
   })
 }
 export function deleteDict(data: any) {
@@ -23,7 +23,7 @@ export function getDictValue(dictTypeId: string | number) {
 }
 export function saveDictValue(data: any) {
   return request.post('/sys/dict/saveDictValue', data, {
-    headers: { 'content-type': 'application/x-www-form-urlencoded' }
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
   })
 }
 export function deleteDictValue(data: any) {

+ 49 - 27
src/components/ProTable.vue

@@ -8,6 +8,7 @@ export default {
 import router from '@/router'
 import { ElMessage, ElMessageBox, type DialogProps } from 'element-plus'
 import type { AdvancedForm, BasicForm, ICRUD } from '@/types/form'
+import type { VXEComponent, VxeToolbarProps, VxeToolbarEventProps } from 'vxe-table'
 
 interface CustomTable {
   showOperate?: boolean
@@ -23,6 +24,7 @@ interface Props {
   formConfig: BasicForm | AdvancedForm
   dialogConfig?: DialogProps
   tableConfig?: CustomTable
+  toolbarConfig?: VXEComponent<VxeToolbarProps, VxeToolbarEventProps>
   showToolbar?: boolean
   height?: string
 }
@@ -75,6 +77,16 @@ const tableConfig = ref<CustomTable>({
   ...props.tableConfig
 })
 
+const xTable = ref<any>()
+const xToolbar = ref<any>()
+
+nextTick(() => {
+  // 将表格和工具栏进行关联
+  const $table = xTable.value
+  const $toolbar = xToolbar.value
+  $table.connect($toolbar)
+})
+
 const getTableData = () => {
   loading.value = true
   props.crud
@@ -108,8 +120,8 @@ const refresh = () => {
 }
 
 const multipleSelection = ref<any[]>([])
-const handleSelectionChange = (columns: any[]) => {
-  multipleSelection.value = columns
+const handleSelectionChange = () => {
+  multipleSelection.value = xTable.value.getCheckboxRecords()
 }
 // ============== 表格部分结束 ===============
 
@@ -208,8 +220,8 @@ defineExpose({
     <el-card class="h-full flex-grow-1" :body-style="{ height: '100%' }" shadow="never">
       <div class="flex flex-col h-full">
         <slot name="header"></slot>
-        <div class="flex justify-between mb-20px" v-if="showToolbar">
-          <div>
+        <vxe-toolbar ref="xToolbar" v-bind="toolbarConfig" v-if="showToolbar">
+          <template #buttons>
             <el-button type="primary" icon="Plus" @click="handleCreate">新增</el-button>
             <el-button
               type="danger"
@@ -221,30 +233,37 @@ defineExpose({
               删除
             </el-button>
             <slot name="toolbar" :selection="multipleSelection"></slot>
-          </div>
+          </template>
+        </vxe-toolbar>
+        <div class="h-full flex-grow">
+          <vxe-table
+            ref="xTable"
+            id="xProTable"
+            size="medium"
+            height="100%"
+            :data="tableData"
+            :row-config="{ isHover: true }"
+            v-loading="loading"
+            v-bind="$attrs"
+            @checkbox-change="handleSelectionChange"
+            @checkbox-all="handleSelectionChange"
+          >
+            <vxe-column type="checkbox" width="50" v-if="selection"></vxe-column>
+            <slot></slot>
+            <vxe-column fixed="right" title="操作" :width="tableConfig.operateWidth" v-if="tableConfig.showOperate">
+              <template #default="{ row }">
+                <slot name="operateBefore" :row="row"></slot>
+                <el-button type="primary" size="small" @click="handleUpdate(row)" v-if="tableConfig.showEdit">
+                  编辑
+                </el-button>
+                <el-button type="danger" size="small" @click="handleDelete(row.id)" v-if="tableConfig.showDelete">
+                  删除
+                </el-button>
+                <slot name="operateAfter" :row="row"></slot>
+              </template>
+            </vxe-column>
+          </vxe-table>
         </div>
-        <el-table
-          class="flex-grow-1 h-full"
-          :data="tableData"
-          v-loading="loading"
-          v-bind="$attrs"
-          @selection-change="handleSelectionChange"
-        >
-          <el-table-column type="selection" width="50" v-if="selection"></el-table-column>
-          <slot></slot>
-          <el-table-column fixed="right" label="操作" :width="tableConfig.operateWidth" v-if="tableConfig.showOperate">
-            <template #default="{ row }">
-              <slot name="operateBefore" :row="row"></slot>
-              <el-button type="primary" size="small" @click="handleUpdate(row)" v-if="tableConfig.showEdit">
-                编辑
-              </el-button>
-              <el-button type="danger" size="small" @click="handleDelete(row.id)" v-if="tableConfig.showDelete">
-                删除
-              </el-button>
-              <slot name="operateAfter" :row="row"></slot>
-            </template>
-          </el-table-column>
-        </el-table>
         <div class="flex justify-end shrink-0">
           <el-pagination
             background
@@ -276,4 +295,7 @@ defineExpose({
   background-color: #f5f7fa;
   color: rgb(31, 34, 37);
 }
+.vxe-toolbar {
+  padding-top: 0;
+}
 </style>

+ 84 - 0
src/main.ts

@@ -11,17 +11,101 @@ import registerCopmponent from '@/components/index'
 
 import { install } from '@icon-park/vue-next/es/all'
 
+import 'xe-utils'
+import {
+  VXETable,
+  Filter,
+  Edit,
+  Menu,
+  Export,
+  Keyboard,
+  Validator,
+
+  // 可选组件
+  Icon,
+  Column,
+  // Colgroup,
+  // Grid,
+  Tooltip,
+  Toolbar,
+  Pager,
+  // Form,
+  // FormItem,
+  // FormGather,
+  Checkbox,
+  CheckboxGroup,
+  Radio,
+  RadioGroup,
+  RadioButton,
+  Switch,
+  Input,
+  Select,
+  Optgroup,
+  Option,
+  // Textarea,
+  Button,
+  Modal,
+  // List,
+  // Pulldown,
+
+  // 表格
+  Table
+} from 'vxe-table'
+
 import App from './App.vue'
 import router from './router'
 
 import './assets/main.css'
 import 'virtual:svg-icons-register'
 
+function useTable(app: any) {
+  // 表格功能
+  app.use(Filter).use(Edit).use(Menu).use(Export).use(Keyboard).use(Validator)
+
+  // 可选组件
+  app
+    .use(Icon)
+    .use(Column)
+    // .use(Colgroup)
+    // .use(Grid)
+    .use(Tooltip)
+    .use(Toolbar)
+    .use(Pager)
+    // .use(Form)
+    // .use(FormItem)
+    // .use(FormGather)
+    .use(Checkbox)
+    .use(CheckboxGroup)
+    .use(Radio)
+    .use(RadioGroup)
+    .use(RadioButton)
+    .use(Switch)
+    .use(Input)
+    .use(Select)
+    .use(Optgroup)
+    .use(Option)
+    // .use(Textarea)
+    .use(Button)
+    .use(Modal)
+    // .use(List)
+    // .use(Pulldown)
+
+    // 安装表格
+    .use(Table)
+
+  // 给 vue 实例挂载内部对象,例如:
+  // app.config.globalProperties.$XModal = VXETable.modal
+  // app.config.globalProperties.$XPrint = VXETable.print
+  // app.config.globalProperties.$XSaveFile = VXETable.saveFile
+  // app.config.globalProperties.$XReadFile = VXETable.readFile
+}
+
 const app = createApp(App)
 
 app.use(createPinia())
 app.use(router)
 app.use(ElementPlus)
+app.use(useTable)
 registerCopmponent(app)
 
 for (const [key, component] of Object.entries(ElementPlusIconsVue)) {

+ 1 - 1
src/router/guard.ts

@@ -23,7 +23,7 @@ const createRouterGuard = (router: Router) => {
         return from.path
       } else {
         const routerStore = useRouterStore()
-        // flag默认为false,为tru时表示已经获取过用户信息
+        // flag默认为false,为true时表示已经获取过用户信息
         if (!userStore.flag) {
           await userStore.getUserInfo()
 

+ 1 - 0
src/stores/user.ts

@@ -12,6 +12,7 @@ export const useUserStore = defineStore({
     async getUserInfo() {
       // const userRes: any = await getUserInfo()
       // this.user = userRes.infos[0]
+      // 这里可以添加从后台获取菜单的接口
       this.flag = true
     },
     async login(data: any) {

+ 4 - 4
src/views/miniprogram/Banner.vue

@@ -49,13 +49,13 @@ const formConfig = reactive<BasicForm>({
 
 <template>
   <pro-table :crud="CRUD" :formConfig="formConfig">
-    <el-table-column prop="name" label="标题" show-overflow-tooltip></el-table-column>
-    <el-table-column prop="image" label="图片">
+    <vxe-column field="name" title="标题" show-overflow-tooltip></vxe-column>
+    <vxe-column field="image" title="图片">
       <template #default="{ row }">
         <el-image :src="row.image" style="width: 100px"></el-image>
       </template>
-    </el-table-column>
-    <!-- <el-table-column prop="src" label="跳转地址"></el-table-column> -->
+    </vxe-column>
+    <!-- <vxe-column field="src" label="跳转地址"></vxe-column> -->
   </pro-table>
 </template>
 

+ 2 - 2
src/views/miniprogram/Feedback.vue

@@ -58,8 +58,8 @@ const handleReply = () => {
     :showToolbar="false"
     :tableConfig="{ showEdit: false }"
   >
-    <el-table-column prop="content" label="反馈内容"></el-table-column>
-    <el-table-column prop="createDate" label="反馈时间"></el-table-column>
+    <vxe-column field="content" title="反馈内容"></vxe-column>
+    <vxe-column field="createDate" title="反馈时间"></vxe-column>
     <template #operateBefore="{ row }">
       <el-button type="primary" size="small" @click="openDiolog(row)">回复</el-button>
     </template>

+ 1 - 1
src/views/miniprogram/Question.vue

@@ -55,7 +55,7 @@ const formConfig = reactive<BasicForm>({
 
 <template>
   <pro-table :crud="CRUD" :formConfig="formConfig">
-    <el-table-column prop="title" label="标题"></el-table-column>
+    <vxe-column field="title" title="标题"></vxe-column>
   </pro-table>
 </template>
 

+ 3 - 3
src/views/miniprogram/Version.vue

@@ -61,9 +61,9 @@ const formConfig = reactive<BasicForm>({
 
 <template>
   <pro-table :crud="CRUD" :formConfig="formConfig">
-    <el-table-column prop="number" label="版本号"></el-table-column>
-    <el-table-column prop="title" label="标题"></el-table-column>
-    <el-table-column prop="publishDate" label="发布日期"></el-table-column>
+    <vxe-column field="number" title="版本号"></vxe-column>
+    <vxe-column field="title" title="标题"></vxe-column>
+    <vxe-column field="publishDate" title="发布日期"></vxe-column>
   </pro-table>
 </template>
 

+ 8 - 7
src/views/system/Dict.vue

@@ -73,7 +73,8 @@ const dictFormConfig = reactive<BasicForm>({
 })
 
 const curRow = ref<any>(null)
-const handleRowClick = (row: any) => {
+const handleRowClick = ({ row }: { row: any }) => {
+  console.log(row)
   curRow.value = row
 }
 const rowClassName = ({ row }: { row: any }) => {
@@ -121,18 +122,18 @@ const dictItemFormConfig = reactive<BasicForm>({
 <template>
   <el-row :gutter="16">
     <el-col :span="12">
-      <pro-table :crud="CRUD" :formConfig="dictFormConfig" :row-class-name="rowClassName" @row-click="handleRowClick">
-        <el-table-column prop="description" label="字典名称"></el-table-column>
-        <el-table-column prop="type" label="字典值"></el-table-column>
+      <pro-table :crud="CRUD" :formConfig="dictFormConfig" :row-class-name="rowClassName" @cell-click="handleRowClick">
+        <vxe-column field="description" title="字典名称"></vxe-column>
+        <vxe-column field="type" title="字典值"></vxe-column>
       </pro-table>
     </el-col>
     <el-col :span="12" class="position-relative">
-      <div class="position-absolute right-[30px] top-[105px]">
+      <div class="position-absolute right-[30px] top-[105px] z-1">
         <el-tag>{{ curRow?.description }}</el-tag>
       </div>
       <pro-table ref="itemTableRef" :crud="itemCRUD" :formConfig="dictItemFormConfig" :selection="false" v-if="curRow">
-        <el-table-column prop="label" label="标签"></el-table-column>
-        <el-table-column prop="value" label="键值"></el-table-column>
+        <vxe-column field="label" title="标签"></vxe-column>
+        <vxe-column field="value" title="键值"></vxe-column>
       </pro-table>
       <el-empty v-else description="请选择左侧数据后操作"></el-empty>
     </el-col>

+ 5 - 5
src/views/system/Role.vue

@@ -108,8 +108,8 @@ const handleSubmit = () => {
   <el-row :gutter="16">
     <el-col :span="curRole ? 12 : 24">
       <pro-table :crud="CRUD" :formConfig="formConfig" :tableConfig="{ operateWidth: 220 }">
-        <el-table-column prop="name" label="角色名称"></el-table-column>
-        <el-table-column prop="enname" label="英文名称"></el-table-column>
+        <vxe-column field="name" title="角色名称"></vxe-column>
+        <vxe-column field="enname" title="英文名称"></vxe-column>
         <template #operateBefore="{ row }">
           <!-- <el-button type="primary" size="small" @click="handleRole(row)">角色授权</el-button> -->
           <el-button type="primary" size="small" @click="handleUser(row)">分配用户</el-button>
@@ -138,9 +138,9 @@ const handleSubmit = () => {
               <el-button type="primary" @click="handleAddUser">添加用户</el-button>
             </div>
           </template>
-          <el-table-column prop="name" label="登录名"></el-table-column>
-          <el-table-column prop="name" label="姓名"></el-table-column>
-          <el-table-column prop="phone" label="手机号"></el-table-column>
+          <vxe-column field="name" title="登录名"></vxe-column>
+          <vxe-column field="name" title="姓名"></vxe-column>
+          <vxe-column field="phone" title="手机号"></vxe-column>
         </pro-table>
       </el-card>
     </el-col>

+ 10 - 4
src/views/system/User.vue

@@ -131,10 +131,16 @@ const handleEdit = (row: any) => {
 </script>
 
 <template>
-  <pro-table :crud="CRUD" :formConfig="formConfig" @click-create="handleCreate" @click-edit="handleEdit">
-    <el-table-column prop="name" label="用户名"></el-table-column>
-    <el-table-column prop="loginName" label="登录名"></el-table-column>
-    <el-table-column prop="phone" label="手机号"></el-table-column>
+  <pro-table
+    :crud="CRUD"
+    :formConfig="formConfig"
+    :toolbarConfig="{ custom: true }"
+    @click-create="handleCreate"
+    @click-edit="handleEdit"
+  >
+    <vxe-column field="name" title="用户名"></vxe-column>
+    <vxe-column field="loginName" title="登录名"></vxe-column>
+    <vxe-column field="phone" title="手机号"></vxe-column>
   </pro-table>
 </template>
 

+ 4 - 0
vite.config.ts

@@ -8,6 +8,7 @@ import AutoImport from 'unplugin-auto-import/vite'
 import Components from 'unplugin-vue-components/vite'
 import DefineOptions from 'unplugin-vue-define-options/vite'
 import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
+import { createStyleImportPlugin, VxeTableResolve } from 'vite-plugin-style-import'
 import Unocss from 'unocss/vite'
 
 export default defineConfig(({ mode }) => {
@@ -31,6 +32,9 @@ export default defineConfig(({ mode }) => {
         iconDirs: [path.resolve(process.cwd(), 'src/assets/svg')],
         symbolId: 'icon-[dir]-[name]'
       }),
+      createStyleImportPlugin({
+        resolves: [VxeTableResolve()]
+      }),
       splitVendorChunkPlugin()
     ],
     resolve: {