Commit 135ee3f39d918bdfd31949dc43f8ed6f89b2aef8

Authored by 芋道源码
Committed by Gitee
2 parents 6f8384af 377bc504

!349 vue3 XTable 组件

Merge pull request !349 from xingyu/dev
Showing 45 changed files with 996 additions and 597 deletions
README.md
@@ -223,7 +223,7 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -223,7 +223,7 @@ ps:核心功能已经实现,正在对接微信小程序中...
223 |----------------------------------------------------------------------|:------------:|:------:| 223 |----------------------------------------------------------------------|:------------:|:------:|
224 | [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.2.45 | 224 | [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.2.45 |
225 | [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 | 225 | [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 |
226 -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.27 | 226 +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.28 |
227 | [TypeScript](https://www.typescriptlang.org/docs/) | TypeScript | 4.9.4 | 227 | [TypeScript](https://www.typescriptlang.org/docs/) | TypeScript | 4.9.4 |
228 | [pinia](https://pinia.vuejs.org/) | vuex5 | 2.0.28 | 228 | [pinia](https://pinia.vuejs.org/) | vuex5 | 2.0.28 |
229 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 | 229 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 @click="handleDelete(row.id)" 43 @click="handleDelete(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <!-- 弹窗 --> 48 <!-- 弹窗 -->
49 <XModal id="${classNameVar}Model" :loading="modelLoading" v-model="modelVisible" :title="modelTitle"> 49 <XModal id="${classNameVar}Model" :loading="modelLoading" v-model="modelVisible" :title="modelTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 // 业务相关的 import 84 // 业务相关的 import
86 import { rules, allSchemas } from './${classNameVar}.data' 85 import { rules, allSchemas } from './${classNameVar}.data'
@@ -90,8 +89,7 @@ const { t } = useI18n() // 国际化 @@ -90,8 +89,7 @@ const { t } = useI18n() // 国际化
90 const message = useMessage() // 消息弹窗 89 const message = useMessage() // 消息弹窗
91 90
92 // 列表相关的变量 91 // 列表相关的变量
93 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
94 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<${simpleClassName}Api.${simpleClassName}VO>({ 92 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
95 allSchemas: allSchemas, 93 allSchemas: allSchemas,
96 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi, 94 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi,
97 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api, 95 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api,
@@ -123,7 +121,7 @@ const handleCreate = () =&gt; { @@ -123,7 +121,7 @@ const handleCreate = () =&gt; {
123 121
124 // 导出操作 122 // 导出操作
125 const handleExport = async () => { 123 const handleExport = async () => {
126 - await exportList(xGrid, '${table.classComment}.xls') 124 + await exportList('${table.classComment}.xls')
127 } 125 }
128 126
129 // 修改操作 127 // 修改操作
@@ -145,7 +143,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -145,7 +143,7 @@ const handleDetail = async (rowId: number) =&gt; {
145 143
146 // 删除操作 144 // 删除操作
147 const handleDelete = async (rowId: number) => { 145 const handleDelete = async (rowId: number) => {
148 - await deleteData(xGrid, rowId) 146 + await deleteData(rowId)
149 } 147 }
150 148
151 // 提交按钮 149 // 提交按钮
@@ -169,7 +167,7 @@ const submitForm = async () =&gt; { @@ -169,7 +167,7 @@ const submitForm = async () =&gt; {
169 } finally { 167 } finally {
170 actionLoading.value = false 168 actionLoading.value = false
171 // 刷新列表 169 // 刷新列表
172 - await getList(xGrid) 170 + await reload()
173 } 171 }
174 } 172 }
175 }) 173 })
yudao-ui-admin-vue3/README.md
@@ -26,19 +26,19 @@ @@ -26,19 +26,19 @@
26 26
27 ### 前端依赖 27 ### 前端依赖
28 28
29 -| 框架 | 说明 | 版本 |  
30 -| --- | --- | --- | 29 +| 框架 | 说明 | 版本 |
  30 +| --- | --- |--------|
31 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.45 | 31 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.45 |
32 -| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 |  
33 -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.27 |  
34 -| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.4 | 32 +| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 |
  33 +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.28 |
  34 +| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.4 |
35 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.28 | 35 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.28 |
36 -| [vueuse](https://vueuse.org/) | 常用工具集 | 9.8.2 |  
37 -| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.7 |  
38 -| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |  
39 -| [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.6 |  
40 -| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |  
41 -| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.0.0 | 36 +| [vueuse](https://vueuse.org/) | 常用工具集 | 9.8.2 |
  37 +| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.7 |
  38 +| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
  39 +| [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.6 |
  40 +| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
  41 +| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.0.1 |
42 | [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 | 42 | [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
43 43
44 ### 推荐 VScode 开发,插件如下 44 ### 推荐 VScode 开发,插件如下
yudao-ui-admin-vue3/package.json
1 { 1 {
2 "name": "yudao-ui-admin-vue3", 2 "name": "yudao-ui-admin-vue3",
3 - "version": "1.6.5.1879", 3 + "version": "1.6.5.1901",
4 "description": "基于vue3、vite4、element-plus、typesScript", 4 "description": "基于vue3、vite4、element-plus、typesScript",
5 "author": "xingyu", 5 "author": "xingyu",
6 "private": false, 6 "private": false,
@@ -30,13 +30,13 @@ @@ -30,13 +30,13 @@
30 "@wangeditor/editor-for-vue": "^5.1.10", 30 "@wangeditor/editor-for-vue": "^5.1.10",
31 "@zxcvbn-ts/core": "^2.1.0", 31 "@zxcvbn-ts/core": "^2.1.0",
32 "animate.css": "^4.1.1", 32 "animate.css": "^4.1.1",
33 - "axios": "^1.2.1", 33 + "axios": "^1.2.2",
34 "cropperjs": "^1.5.13", 34 "cropperjs": "^1.5.13",
35 "crypto-js": "^4.1.1", 35 "crypto-js": "^4.1.1",
36 "dayjs": "^1.11.7", 36 "dayjs": "^1.11.7",
37 "echarts": "^5.4.1", 37 "echarts": "^5.4.1",
38 "echarts-wordcloud": "^2.1.0", 38 "echarts-wordcloud": "^2.1.0",
39 - "element-plus": "2.2.27", 39 + "element-plus": "2.2.28",
40 "intro.js": "^6.0.0", 40 "intro.js": "^6.0.0",
41 "jsencrypt": "^3.3.1", 41 "jsencrypt": "^3.3.1",
42 "lodash-es": "^4.17.21", 42 "lodash-es": "^4.17.21",
@@ -57,25 +57,25 @@ @@ -57,25 +57,25 @@
57 "devDependencies": { 57 "devDependencies": {
58 "@commitlint/cli": "^17.3.0", 58 "@commitlint/cli": "^17.3.0",
59 "@commitlint/config-conventional": "^17.3.0", 59 "@commitlint/config-conventional": "^17.3.0",
60 - "@iconify/json": "^2.1.157", 60 + "@iconify/json": "^2.2.1",
61 "@intlify/unplugin-vue-i18n": "^0.8.1", 61 "@intlify/unplugin-vue-i18n": "^0.8.1",
62 "@purge-icons/generated": "^0.9.0", 62 "@purge-icons/generated": "^0.9.0",
63 "@types/intro.js": "^5.1.0", 63 "@types/intro.js": "^5.1.0",
64 "@types/lodash-es": "^4.17.6", 64 "@types/lodash-es": "^4.17.6",
65 - "@types/node": "^18.11.17", 65 + "@types/node": "^18.11.18",
66 "@types/nprogress": "^0.2.0", 66 "@types/nprogress": "^0.2.0",
67 "@types/qrcode": "^1.5.0", 67 "@types/qrcode": "^1.5.0",
68 "@types/qs": "^6.9.7", 68 "@types/qs": "^6.9.7",
69 - "@typescript-eslint/eslint-plugin": "^5.47.0",  
70 - "@typescript-eslint/parser": "^5.47.0", 69 + "@typescript-eslint/eslint-plugin": "^5.48.0",
  70 + "@typescript-eslint/parser": "^5.48.0",
71 "@vitejs/plugin-legacy": "^3.0.1", 71 "@vitejs/plugin-legacy": "^3.0.1",
72 "@vitejs/plugin-vue": "^4.0.0", 72 "@vitejs/plugin-vue": "^4.0.0",
73 "@vitejs/plugin-vue-jsx": "^3.0.0", 73 "@vitejs/plugin-vue-jsx": "^3.0.0",
74 "autoprefixer": "^10.4.13", 74 "autoprefixer": "^10.4.13",
75 "consola": "^2.15.3", 75 "consola": "^2.15.3",
76 - "eslint": "^8.30.0",  
77 - "eslint-config-prettier": "^8.5.0",  
78 - "eslint-define-config": "^1.12.0", 76 + "eslint": "^8.31.0",
  77 + "eslint-config-prettier": "^8.6.0",
  78 + "eslint-define-config": "^1.13.0",
79 "eslint-plugin-prettier": "^4.2.1", 79 "eslint-plugin-prettier": "^4.2.1",
80 "eslint-plugin-vue": "^9.8.0", 80 "eslint-plugin-vue": "^9.8.0",
81 "lint-staged": "^13.1.0", 81 "lint-staged": "^13.1.0",
@@ -84,9 +84,9 @@ @@ -84,9 +84,9 @@
84 "postcss-scss": "^4.0.6", 84 "postcss-scss": "^4.0.6",
85 "prettier": "^2.8.1", 85 "prettier": "^2.8.1",
86 "rimraf": "^3.0.2", 86 "rimraf": "^3.0.2",
87 - "rollup": "^3.8.1", 87 + "rollup": "^3.9.1",
88 "sass": "^1.57.1", 88 "sass": "^1.57.1",
89 - "stylelint": "^14.16.0", 89 + "stylelint": "^14.16.1",
90 "stylelint-config-html": "^1.1.0", 90 "stylelint-config-html": "^1.1.0",
91 "stylelint-config-prettier": "^9.0.4", 91 "stylelint-config-prettier": "^9.0.4",
92 "stylelint-config-recommended": "^9.0.0", 92 "stylelint-config-recommended": "^9.0.0",
@@ -104,7 +104,7 @@ @@ -104,7 +104,7 @@
104 "vite-plugin-svg-icons": "^2.0.1", 104 "vite-plugin-svg-icons": "^2.0.1",
105 "vite-plugin-vue-setup-extend": "^0.4.0", 105 "vite-plugin-vue-setup-extend": "^0.4.0",
106 "vite-plugin-windicss": "^1.8.10", 106 "vite-plugin-windicss": "^1.8.10",
107 - "vue-tsc": "^1.0.17", 107 + "vue-tsc": "^1.0.19",
108 "windicss": "^3.5.6" 108 "windicss": "^3.5.6"
109 }, 109 },
110 "engines": { 110 "engines": {
yudao-ui-admin-vue3/pnpm-lock.yaml
@@ -4,37 +4,37 @@ specifiers: @@ -4,37 +4,37 @@ specifiers:
4 '@commitlint/cli': ^17.3.0 4 '@commitlint/cli': ^17.3.0
5 '@commitlint/config-conventional': ^17.3.0 5 '@commitlint/config-conventional': ^17.3.0
6 '@iconify/iconify': ^3.0.1 6 '@iconify/iconify': ^3.0.1
7 - '@iconify/json': ^2.1.156 7 + '@iconify/json': ^2.2.1
8 '@intlify/unplugin-vue-i18n': ^0.8.1 8 '@intlify/unplugin-vue-i18n': ^0.8.1
9 '@purge-icons/generated': ^0.9.0 9 '@purge-icons/generated': ^0.9.0
10 '@types/intro.js': ^5.1.0 10 '@types/intro.js': ^5.1.0
11 '@types/lodash-es': ^4.17.6 11 '@types/lodash-es': ^4.17.6
12 - '@types/node': ^18.11.17 12 + '@types/node': ^18.11.18
13 '@types/nprogress': ^0.2.0 13 '@types/nprogress': ^0.2.0
14 '@types/qrcode': ^1.5.0 14 '@types/qrcode': ^1.5.0
15 '@types/qs': ^6.9.7 15 '@types/qs': ^6.9.7
16 - '@typescript-eslint/eslint-plugin': ^5.47.0  
17 - '@typescript-eslint/parser': ^5.47.0 16 + '@typescript-eslint/eslint-plugin': ^5.48.0
  17 + '@typescript-eslint/parser': ^5.48.0
18 '@vitejs/plugin-legacy': ^3.0.1 18 '@vitejs/plugin-legacy': ^3.0.1
19 '@vitejs/plugin-vue': ^4.0.0 19 '@vitejs/plugin-vue': ^4.0.0
20 '@vitejs/plugin-vue-jsx': ^3.0.0 20 '@vitejs/plugin-vue-jsx': ^3.0.0
21 - '@vueuse/core': ^9.8.2 21 + '@vueuse/core': ^9.9.0
22 '@wangeditor/editor': ^5.1.23 22 '@wangeditor/editor': ^5.1.23
23 '@wangeditor/editor-for-vue': ^5.1.10 23 '@wangeditor/editor-for-vue': ^5.1.10
24 '@zxcvbn-ts/core': ^2.1.0 24 '@zxcvbn-ts/core': ^2.1.0
25 animate.css: ^4.1.1 25 animate.css: ^4.1.1
26 autoprefixer: ^10.4.13 26 autoprefixer: ^10.4.13
27 - axios: ^1.2.1 27 + axios: ^1.2.2
28 consola: ^2.15.3 28 consola: ^2.15.3
29 cropperjs: ^1.5.13 29 cropperjs: ^1.5.13
30 crypto-js: ^4.1.1 30 crypto-js: ^4.1.1
31 dayjs: ^1.11.7 31 dayjs: ^1.11.7
32 echarts: ^5.4.1 32 echarts: ^5.4.1
33 echarts-wordcloud: ^2.1.0 33 echarts-wordcloud: ^2.1.0
34 - element-plus: 2.2.27  
35 - eslint: ^8.30.0  
36 - eslint-config-prettier: ^8.5.0  
37 - eslint-define-config: ^1.12.0 34 + element-plus: 2.2.28
  35 + eslint: ^8.31.0
  36 + eslint-config-prettier: ^8.6.0
  37 + eslint-define-config: ^1.13.0
38 eslint-plugin-prettier: ^4.2.1 38 eslint-plugin-prettier: ^4.2.1
39 eslint-plugin-vue: ^9.8.0 39 eslint-plugin-vue: ^9.8.0
40 intro.js: ^6.0.0 40 intro.js: ^6.0.0
@@ -51,9 +51,9 @@ specifiers: @@ -51,9 +51,9 @@ specifiers:
51 qrcode: ^1.5.1 51 qrcode: ^1.5.1
52 qs: ^6.11.0 52 qs: ^6.11.0
53 rimraf: ^3.0.2 53 rimraf: ^3.0.2
54 - rollup: ^3.8.1 54 + rollup: ^3.9.1
55 sass: ^1.57.1 55 sass: ^1.57.1
56 - stylelint: ^14.16.0 56 + stylelint: ^14.16.1
57 stylelint-config-html: ^1.1.0 57 stylelint-config-html: ^1.1.0
58 stylelint-config-prettier: ^9.0.4 58 stylelint-config-prettier: ^9.0.4
59 stylelint-config-recommended: ^9.0.0 59 stylelint-config-recommended: ^9.0.0
@@ -75,7 +75,7 @@ specifiers: @@ -75,7 +75,7 @@ specifiers:
75 vue: 3.2.45 75 vue: 3.2.45
76 vue-i18n: 9.2.2 76 vue-i18n: 9.2.2
77 vue-router: ^4.1.6 77 vue-router: ^4.1.6
78 - vue-tsc: ^1.0.16 78 + vue-tsc: ^1.0.19
79 vue-types: ^5.0.2 79 vue-types: ^5.0.2
80 vxe-table: ^4.3.7 80 vxe-table: ^4.3.7
81 web-storage-cache: ^1.1.1 81 web-storage-cache: ^1.1.1
@@ -84,18 +84,18 @@ specifiers: @@ -84,18 +84,18 @@ specifiers:
84 84
85 dependencies: 85 dependencies:
86 '@iconify/iconify': 3.0.1 86 '@iconify/iconify': 3.0.1
87 - '@vueuse/core': 9.8.2_vue@3.2.45 87 + '@vueuse/core': 9.9.0_vue@3.2.45
88 '@wangeditor/editor': 5.1.23 88 '@wangeditor/editor': 5.1.23
89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y 89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y
90 '@zxcvbn-ts/core': 2.1.0 90 '@zxcvbn-ts/core': 2.1.0
91 animate.css: 4.1.1 91 animate.css: 4.1.1
92 - axios: 1.2.1 92 + axios: 1.2.2
93 cropperjs: 1.5.13 93 cropperjs: 1.5.13
94 crypto-js: 4.1.1 94 crypto-js: 4.1.1
95 dayjs: 1.11.7 95 dayjs: 1.11.7
96 echarts: registry.npmmirror.com/echarts/5.4.1 96 echarts: registry.npmmirror.com/echarts/5.4.1
97 echarts-wordcloud: 2.1.0_echarts@5.4.1 97 echarts-wordcloud: 2.1.0_echarts@5.4.1
98 - element-plus: 2.2.27_vue@3.2.45 98 + element-plus: 2.2.28_vue@3.2.45
99 intro.js: 6.0.0 99 intro.js: 6.0.0
100 jsencrypt: 3.3.1 100 jsencrypt: 3.3.1
101 lodash-es: 4.17.21 101 lodash-es: 4.17.21
@@ -116,58 +116,79 @@ dependencies: @@ -116,58 +116,79 @@ dependencies:
116 devDependencies: 116 devDependencies:
117 '@commitlint/cli': 17.3.0 117 '@commitlint/cli': 17.3.0
118 '@commitlint/config-conventional': 17.3.0 118 '@commitlint/config-conventional': 17.3.0
119 - '@iconify/json': 2.1.156 119 + '@iconify/json': 2.2.1
120 '@intlify/unplugin-vue-i18n': 0.8.1_vue-i18n@9.2.2 120 '@intlify/unplugin-vue-i18n': 0.8.1_vue-i18n@9.2.2
121 '@purge-icons/generated': 0.9.0 121 '@purge-icons/generated': 0.9.0
122 '@types/intro.js': 5.1.0 122 '@types/intro.js': 5.1.0
123 '@types/lodash-es': 4.17.6 123 '@types/lodash-es': 4.17.6
124 - '@types/node': 18.11.17 124 + '@types/node': 18.11.18
125 '@types/nprogress': 0.2.0 125 '@types/nprogress': 0.2.0
126 '@types/qrcode': 1.5.0 126 '@types/qrcode': 1.5.0
127 '@types/qs': 6.9.7 127 '@types/qs': 6.9.7
128 - '@typescript-eslint/eslint-plugin': 5.47.0_ncmi6noazr3nzas7jxykisekym  
129 - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa 128 + '@typescript-eslint/eslint-plugin': 5.48.0_k73wpmdolxikpyqun3p36akaaq
  129 + '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
130 '@vitejs/plugin-legacy': registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.3 130 '@vitejs/plugin-legacy': registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.3
131 '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45 131 '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45
132 '@vitejs/plugin-vue-jsx': registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45 132 '@vitejs/plugin-vue-jsx': registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45
133 autoprefixer: 10.4.13_postcss@8.4.20 133 autoprefixer: 10.4.13_postcss@8.4.20
134 consola: 2.15.3 134 consola: 2.15.3
135 - eslint: 8.30.0  
136 - eslint-config-prettier: 8.5.0_eslint@8.30.0  
137 - eslint-define-config: 1.12.0  
138 - eslint-plugin-prettier: 4.2.1_kl4pe43v5b43npmso5hoplpbyi  
139 - eslint-plugin-vue: 9.8.0_eslint@8.30.0 135 + eslint: 8.31.0
  136 + eslint-config-prettier: 8.6.0_eslint@8.31.0
  137 + eslint-define-config: 1.13.0
  138 + eslint-plugin-prettier: 4.2.1_32m5uc2milwdw3tnkcq5del26y
  139 + eslint-plugin-vue: 9.8.0_eslint@8.31.0
140 lint-staged: 13.1.0 140 lint-staged: 13.1.0
141 postcss: registry.npmmirror.com/postcss/8.4.20 141 postcss: registry.npmmirror.com/postcss/8.4.20
142 postcss-html: 1.5.0 142 postcss-html: 1.5.0
143 postcss-scss: 4.0.6_postcss@8.4.20 143 postcss-scss: 4.0.6_postcss@8.4.20
144 prettier: 2.8.1 144 prettier: 2.8.1
145 rimraf: 3.0.2 145 rimraf: 3.0.2
146 - rollup: 3.8.1 146 + rollup: 3.9.1
147 sass: 1.57.1 147 sass: 1.57.1
148 - stylelint: 14.16.0  
149 - stylelint-config-html: 1.1.0_bto6pmslw3cibsiuq6smxboytq  
150 - stylelint-config-prettier: 9.0.4_stylelint@14.16.0  
151 - stylelint-config-recommended: 9.0.0_stylelint@14.16.0  
152 - stylelint-config-standard: 29.0.0_stylelint@14.16.0  
153 - stylelint-order: 5.0.0_stylelint@14.16.0 148 + stylelint: 14.16.1
  149 + stylelint-config-html: 1.1.0_kbto3rg3njmczth2rrsgfnlsqa
  150 + stylelint-config-prettier: 9.0.4_stylelint@14.16.1
  151 + stylelint-config-recommended: 9.0.0_stylelint@14.16.1
  152 + stylelint-config-standard: 29.0.0_stylelint@14.16.1
  153 + stylelint-order: 5.0.0_stylelint@14.16.1
154 terser: 5.16.1 154 terser: 5.16.1
155 typescript: 4.9.4 155 typescript: 4.9.4
156 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 156 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
157 vite-plugin-compression: 0.5.1_vite@4.0.3 157 vite-plugin-compression: 0.5.1_vite@4.0.3
158 vite-plugin-ejs: 1.6.4 158 vite-plugin-ejs: 1.6.4
159 - vite-plugin-eslint: 1.8.1_eslint@8.30.0+vite@4.0.3 159 + vite-plugin-eslint: 1.8.1_eslint@8.31.0+vite@4.0.3
160 vite-plugin-progress: 0.0.6_vite@4.0.3 160 vite-plugin-progress: 0.0.6_vite@4.0.3
161 vite-plugin-purge-icons: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.3 161 vite-plugin-purge-icons: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.3
162 vite-plugin-style-import: 2.0.0_vite@4.0.3 162 vite-plugin-style-import: 2.0.0_vite@4.0.3
163 vite-plugin-svg-icons: 2.0.1_vite@4.0.3 163 vite-plugin-svg-icons: 2.0.1_vite@4.0.3
164 vite-plugin-vue-setup-extend: 0.4.0_vite@4.0.3 164 vite-plugin-vue-setup-extend: 0.4.0_vite@4.0.3
165 vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.3 165 vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.3
166 - vue-tsc: 1.0.16_typescript@4.9.4 166 + vue-tsc: 1.0.19_typescript@4.9.4
167 windicss: 3.5.6 167 windicss: 3.5.6
168 168
169 packages: 169 packages:
170 170
  171 + /@babel/code-frame/7.18.6:
  172 + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
  173 + engines: {node: '>=6.9.0'}
  174 + dependencies:
  175 + '@babel/highlight': 7.18.6
  176 + dev: true
  177 +
  178 + /@babel/helper-validator-identifier/7.19.1:
  179 + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
  180 + engines: {node: '>=6.9.0'}
  181 + dev: true
  182 +
  183 + /@babel/highlight/7.18.6:
  184 + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
  185 + engines: {node: '>=6.9.0'}
  186 + dependencies:
  187 + '@babel/helper-validator-identifier': 7.19.1
  188 + chalk: 2.4.2
  189 + js-tokens: 4.0.0
  190 + dev: true
  191 +
171 /@babel/parser/7.20.3: 192 /@babel/parser/7.20.3:
172 resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} 193 resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==}
173 engines: {node: '>=6.0.0'} 194 engines: {node: '>=6.0.0'}
@@ -364,7 +385,7 @@ packages: @@ -364,7 +385,7 @@ packages:
364 postcss: ^8.2 385 postcss: ^8.2
365 postcss-selector-parser: ^6.0.10 386 postcss-selector-parser: ^6.0.10
366 dependencies: 387 dependencies:
367 - postcss: registry.npmmirror.com/postcss/8.4.20 388 + postcss: 8.4.20
368 postcss-selector-parser: 6.0.11 389 postcss-selector-parser: 6.0.11
369 dev: true 390 dev: true
370 391
@@ -579,8 +600,8 @@ packages: @@ -579,8 +600,8 @@ packages:
579 dev: true 600 dev: true
580 optional: true 601 optional: true
581 602
582 - /@eslint/eslintrc/1.4.0:  
583 - resolution: {integrity: sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==} 603 + /@eslint/eslintrc/1.4.1:
  604 + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
584 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 605 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
585 dependencies: 606 dependencies:
586 ajv: 6.12.6 607 ajv: 6.12.6
@@ -631,11 +652,11 @@ packages: @@ -631,11 +652,11 @@ packages:
631 dependencies: 652 dependencies:
632 '@iconify/types': 2.0.0 653 '@iconify/types': 2.0.0
633 654
634 - /@iconify/json/2.1.156:  
635 - resolution: {integrity: sha512-QaLf/XSPRe6i35Z9WIRBxlWOLykDXNnEGYFf+9E+GWLmRqVQ2VNyTsEo6CNZqP5eGQRDPJyNhd+2vH+gbehGDg==} 655 + /@iconify/json/2.2.1:
  656 + resolution: {integrity: sha512-h6QAV4i0B/QdpJRWExgE5am3WtmNAy/NucsAGNtYsNzeLBa+TVig4QpO9nQrX172tQvEZAfSqUkvCx/y7GN0GQ==}
636 dependencies: 657 dependencies:
637 '@iconify/types': 2.0.0 658 '@iconify/types': 2.0.0
638 - pathe: 0.3.9 659 + pathe: 1.0.0
639 dev: true 660 dev: true
640 661
641 /@iconify/types/2.0.0: 662 /@iconify/types/2.0.0:
@@ -653,8 +674,8 @@ packages: @@ -653,8 +674,8 @@ packages:
653 vue-i18n: 674 vue-i18n:
654 optional: true 675 optional: true
655 dependencies: 676 dependencies:
656 - '@intlify/message-compiler': 9.3.0-beta.11  
657 - '@intlify/shared': 9.3.0-beta.11 677 + '@intlify/message-compiler': 9.3.0-beta.12
  678 + '@intlify/shared': 9.3.0-beta.12
658 jsonc-eslint-parser: 1.4.1 679 jsonc-eslint-parser: 1.4.1
659 source-map: 0.6.1 680 source-map: 0.6.1
660 vue-i18n: 9.2.2_vue@3.2.45 681 vue-i18n: 9.2.2_vue@3.2.45
@@ -683,8 +704,8 @@ packages: @@ -683,8 +704,8 @@ packages:
683 '@intlify/shared': 9.2.2 704 '@intlify/shared': 9.2.2
684 source-map: 0.6.1 705 source-map: 0.6.1
685 706
686 - /@intlify/message-compiler/9.3.0-beta.11:  
687 - resolution: {integrity: sha512-gGGfBGzM7JBXp1Q9gbDAy5jELz9ho3ILqnpxp2yp64+gkqohrqc2YXIvCdwZoc6AtKIh/Zmv4sWVqxkvMsBWtQ==} 707 + /@intlify/message-compiler/9.3.0-beta.12:
  708 + resolution: {integrity: sha512-A8/s7pb3v8nf6HG77qFPJntxgQKI9GXxGnkn7aO+b03/X/GkF/4WceDSAIk3i+yLeIgszeBn9GZ23tSg4sTEHA==}
688 engines: {node: '>= 14'} 709 engines: {node: '>= 14'}
689 dependencies: 710 dependencies:
690 '@intlify/shared': 9.3.0-beta.11 711 '@intlify/shared': 9.3.0-beta.11
@@ -700,6 +721,11 @@ packages: @@ -700,6 +721,11 @@ packages:
700 engines: {node: '>= 14'} 721 engines: {node: '>= 14'}
701 dev: true 722 dev: true
702 723
  724 + /@intlify/shared/9.3.0-beta.12:
  725 + resolution: {integrity: sha512-WsmaS54sA8xuwezPKpa/OMoaX1v2VF2fCgAmYS6prDr2ir0CkUFWPm9A8ilmxzv4nkS61/v8+vf4lGGkn5uBdA==}
  726 + engines: {node: '>= 14'}
  727 + dev: true
  728 +
703 /@intlify/unplugin-vue-i18n/0.8.1_vue-i18n@9.2.2: 729 /@intlify/unplugin-vue-i18n/0.8.1_vue-i18n@9.2.2:
704 resolution: {integrity: sha512-BhigujPmP6JL1FSxmpogCaL+REozncHCVkJuUnefz4GWBu3X+pRe5O7PeJn8/g+Iml2ieQJz4ISPMmEbuGQjqQ==} 730 resolution: {integrity: sha512-BhigujPmP6JL1FSxmpogCaL+REozncHCVkJuUnefz4GWBu3X+pRe5O7PeJn8/g+Iml2ieQJz4ISPMmEbuGQjqQ==}
705 engines: {node: '>= 14.16'} 731 engines: {node: '>= 14.16'}
@@ -716,7 +742,7 @@ packages: @@ -716,7 +742,7 @@ packages:
716 optional: true 742 optional: true
717 dependencies: 743 dependencies:
718 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2 744 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2
719 - '@intlify/shared': 9.3.0-beta.11 745 + '@intlify/shared': 9.3.0-beta.12
720 '@rollup/pluginutils': 4.2.1 746 '@rollup/pluginutils': 4.2.1
721 '@vue/compiler-sfc': 3.2.45 747 '@vue/compiler-sfc': 3.2.45
722 debug: 4.3.4 748 debug: 4.3.4
@@ -869,8 +895,8 @@ packages: @@ -869,8 +895,8 @@ packages:
869 resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==} 895 resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==}
870 dev: true 896 dev: true
871 897
872 - /@types/node/18.11.17:  
873 - resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} 898 + /@types/node/18.11.18:
  899 + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
874 dev: true 900 dev: true
875 901
876 /@types/normalize-package-data/2.4.1: 902 /@types/normalize-package-data/2.4.1:
@@ -888,7 +914,7 @@ packages: @@ -888,7 +914,7 @@ packages:
888 /@types/qrcode/1.5.0: 914 /@types/qrcode/1.5.0:
889 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} 915 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
890 dependencies: 916 dependencies:
891 - '@types/node': 18.11.17 917 + '@types/node': 18.11.18
892 dev: true 918 dev: true
893 919
894 /@types/qs/6.9.7: 920 /@types/qs/6.9.7:
@@ -902,15 +928,15 @@ packages: @@ -902,15 +928,15 @@ packages:
902 /@types/svgo/2.6.4: 928 /@types/svgo/2.6.4:
903 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} 929 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
904 dependencies: 930 dependencies:
905 - '@types/node': 18.11.17 931 + '@types/node': 18.11.18
906 dev: true 932 dev: true
907 933
908 /@types/web-bluetooth/0.0.16: 934 /@types/web-bluetooth/0.0.16:
909 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 935 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
910 dev: false 936 dev: false
911 937
912 - /@typescript-eslint/eslint-plugin/5.47.0_ncmi6noazr3nzas7jxykisekym:  
913 - resolution: {integrity: sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==} 938 + /@typescript-eslint/eslint-plugin/5.48.0_k73wpmdolxikpyqun3p36akaaq:
  939 + resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==}
914 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 940 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
915 peerDependencies: 941 peerDependencies:
916 '@typescript-eslint/parser': ^5.0.0 942 '@typescript-eslint/parser': ^5.0.0
@@ -920,12 +946,12 @@ packages: @@ -920,12 +946,12 @@ packages:
920 typescript: 946 typescript:
921 optional: true 947 optional: true
922 dependencies: 948 dependencies:
923 - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa  
924 - '@typescript-eslint/scope-manager': 5.47.0  
925 - '@typescript-eslint/type-utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa  
926 - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa 949 + '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
  950 + '@typescript-eslint/scope-manager': 5.48.0
  951 + '@typescript-eslint/type-utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
  952 + '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
927 debug: 4.3.4 953 debug: 4.3.4
928 - eslint: 8.30.0 954 + eslint: 8.31.0
929 ignore: 5.2.1 955 ignore: 5.2.1
930 natural-compare-lite: 1.4.0 956 natural-compare-lite: 1.4.0
931 regexpp: 3.2.0 957 regexpp: 3.2.0
@@ -936,8 +962,8 @@ packages: @@ -936,8 +962,8 @@ packages:
936 - supports-color 962 - supports-color
937 dev: true 963 dev: true
938 964
939 - /@typescript-eslint/parser/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
940 - resolution: {integrity: sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==} 965 + /@typescript-eslint/parser/5.48.0_iukboom6ndih5an6iafl45j2fe:
  966 + resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==}
941 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 967 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
942 peerDependencies: 968 peerDependencies:
943 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 969 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -946,26 +972,26 @@ packages: @@ -946,26 +972,26 @@ packages:
946 typescript: 972 typescript:
947 optional: true 973 optional: true
948 dependencies: 974 dependencies:
949 - '@typescript-eslint/scope-manager': 5.47.0  
950 - '@typescript-eslint/types': 5.47.0  
951 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4 975 + '@typescript-eslint/scope-manager': 5.48.0
  976 + '@typescript-eslint/types': 5.48.0
  977 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
952 debug: 4.3.4 978 debug: 4.3.4
953 - eslint: 8.30.0 979 + eslint: 8.31.0
954 typescript: 4.9.4 980 typescript: 4.9.4
955 transitivePeerDependencies: 981 transitivePeerDependencies:
956 - supports-color 982 - supports-color
957 dev: true 983 dev: true
958 984
959 - /@typescript-eslint/scope-manager/5.47.0:  
960 - resolution: {integrity: sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==} 985 + /@typescript-eslint/scope-manager/5.48.0:
  986 + resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==}
961 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 987 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
962 dependencies: 988 dependencies:
963 - '@typescript-eslint/types': 5.47.0  
964 - '@typescript-eslint/visitor-keys': 5.47.0 989 + '@typescript-eslint/types': 5.48.0
  990 + '@typescript-eslint/visitor-keys': 5.48.0
965 dev: true 991 dev: true
966 992
967 - /@typescript-eslint/type-utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
968 - resolution: {integrity: sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==} 993 + /@typescript-eslint/type-utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
  994 + resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==}
969 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 995 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
970 peerDependencies: 996 peerDependencies:
971 eslint: '*' 997 eslint: '*'
@@ -974,23 +1000,23 @@ packages: @@ -974,23 +1000,23 @@ packages:
974 typescript: 1000 typescript:
975 optional: true 1001 optional: true
976 dependencies: 1002 dependencies:
977 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4  
978 - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa 1003 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
  1004 + '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
979 debug: 4.3.4 1005 debug: 4.3.4
980 - eslint: 8.30.0 1006 + eslint: 8.31.0
981 tsutils: 3.21.0_typescript@4.9.4 1007 tsutils: 3.21.0_typescript@4.9.4
982 typescript: 4.9.4 1008 typescript: 4.9.4
983 transitivePeerDependencies: 1009 transitivePeerDependencies:
984 - supports-color 1010 - supports-color
985 dev: true 1011 dev: true
986 1012
987 - /@typescript-eslint/types/5.47.0:  
988 - resolution: {integrity: sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==} 1013 + /@typescript-eslint/types/5.48.0:
  1014 + resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==}
989 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1015 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
990 dev: true 1016 dev: true
991 1017
992 - /@typescript-eslint/typescript-estree/5.47.0_typescript@4.9.4:  
993 - resolution: {integrity: sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==} 1018 + /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4:
  1019 + resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==}
994 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1020 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
995 peerDependencies: 1021 peerDependencies:
996 typescript: '*' 1022 typescript: '*'
@@ -998,8 +1024,8 @@ packages: @@ -998,8 +1024,8 @@ packages:
998 typescript: 1024 typescript:
999 optional: true 1025 optional: true
1000 dependencies: 1026 dependencies:
1001 - '@typescript-eslint/types': 5.47.0  
1002 - '@typescript-eslint/visitor-keys': 5.47.0 1027 + '@typescript-eslint/types': 5.48.0
  1028 + '@typescript-eslint/visitor-keys': 5.48.0
1003 debug: 4.3.4 1029 debug: 4.3.4
1004 globby: 11.1.0 1030 globby: 11.1.0
1005 is-glob: 4.0.3 1031 is-glob: 4.0.3
@@ -1010,31 +1036,31 @@ packages: @@ -1010,31 +1036,31 @@ packages:
1010 - supports-color 1036 - supports-color
1011 dev: true 1037 dev: true
1012 1038
1013 - /@typescript-eslint/utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
1014 - resolution: {integrity: sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==} 1039 + /@typescript-eslint/utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
  1040 + resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==}
1015 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1041 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1016 peerDependencies: 1042 peerDependencies:
1017 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1043 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1018 dependencies: 1044 dependencies:
1019 '@types/json-schema': 7.0.11 1045 '@types/json-schema': 7.0.11
1020 '@types/semver': 7.3.13 1046 '@types/semver': 7.3.13
1021 - '@typescript-eslint/scope-manager': 5.47.0  
1022 - '@typescript-eslint/types': 5.47.0  
1023 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4  
1024 - eslint: 8.30.0 1047 + '@typescript-eslint/scope-manager': 5.48.0
  1048 + '@typescript-eslint/types': 5.48.0
  1049 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
  1050 + eslint: 8.31.0
1025 eslint-scope: 5.1.1 1051 eslint-scope: 5.1.1
1026 - eslint-utils: 3.0.0_eslint@8.30.0 1052 + eslint-utils: 3.0.0_eslint@8.31.0
1027 semver: 7.3.8 1053 semver: 7.3.8
1028 transitivePeerDependencies: 1054 transitivePeerDependencies:
1029 - supports-color 1055 - supports-color
1030 - typescript 1056 - typescript
1031 dev: true 1057 dev: true
1032 1058
1033 - /@typescript-eslint/visitor-keys/5.47.0:  
1034 - resolution: {integrity: sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==} 1059 + /@typescript-eslint/visitor-keys/5.48.0:
  1060 + resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==}
1035 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1061 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1036 dependencies: 1062 dependencies:
1037 - '@typescript-eslint/types': 5.47.0 1063 + '@typescript-eslint/types': 5.48.0
1038 eslint-visitor-keys: 3.3.0 1064 eslint-visitor-keys: 3.3.0
1039 dev: true 1065 dev: true
1040 1066
@@ -1079,31 +1105,30 @@ packages: @@ -1079,31 +1105,30 @@ packages:
1079 nanoid: registry.npmmirror.com/nanoid/3.3.4 1105 nanoid: registry.npmmirror.com/nanoid/3.3.4
1080 dev: false 1106 dev: false
1081 1107
1082 - /@volar/language-core/1.0.16:  
1083 - resolution: {integrity: sha512-IGnOxWTs4DZ81TDcmxBAkCBxs97hUblwcjpBsTx/pOGGaSSDQRJPn0wL8NYTybEObU0i7lhEpKZ+0vJfdIy1Kg==} 1108 + /@volar/language-core/1.0.19:
  1109 + resolution: {integrity: sha512-BRxhwqn66VHeLIxxgV4ybY9NDtwMp2bl1w7085qlK7i1pa4jeFR5lJG2U5qd0oI3e0PIWML+PryxSrKNd3+SZw==}
1084 dependencies: 1110 dependencies:
1085 - '@volar/source-map': 1.0.16  
1086 - '@vue/reactivity': 3.2.45 1111 + '@volar/source-map': 1.0.19
1087 muggle-string: 0.1.0 1112 muggle-string: 0.1.0
1088 dev: true 1113 dev: true
1089 1114
1090 - /@volar/source-map/1.0.16:  
1091 - resolution: {integrity: sha512-PKjzmQcg8QOGC/1V9tmGh2jcy6bKLhkW5bGidElSr83iDbCzLvldt2/La/QlDxaRCHYLT0MeyuGJBZIChB1dYQ==} 1115 + /@volar/source-map/1.0.19:
  1116 + resolution: {integrity: sha512-5fYKsl1evR/QAZ9LADto3kzbYKfpjZLWS9reNpxGR3ODPFTpaJgYk4lqghFyq4yU7/e/ZPZ1zLXjEsnL526URw==}
1092 dependencies: 1117 dependencies:
1093 muggle-string: 0.1.0 1118 muggle-string: 0.1.0
1094 dev: true 1119 dev: true
1095 1120
1096 - /@volar/typescript/1.0.16:  
1097 - resolution: {integrity: sha512-Yov+n4oO3iYnuMt9QJAFpJabfTRCzc7KvjlAwBaSuZy+Gc/f9611MgtqAh5/SIGmltFN8dXn1Ijno8ro8I4lyw==} 1121 + /@volar/typescript/1.0.19:
  1122 + resolution: {integrity: sha512-S6n945uhpc5J1qCVXVV4tz4k1nyxWaoG+wqy9TYdRDazPHeq9l45WDg58g/ehblUWux85TZN8i3zdsLRLkFrdw==}
1098 dependencies: 1123 dependencies:
1099 - '@volar/language-core': 1.0.16 1124 + '@volar/language-core': 1.0.19
1100 dev: true 1125 dev: true
1101 1126
1102 - /@volar/vue-language-core/1.0.16:  
1103 - resolution: {integrity: sha512-sQ/aW1Vuiyy4OQuh2lthyYicruM3qh9VSk/aDh8/bFvM8GoohHZqVpMN3LYldEJ9eT/rN6u4xmYP54vc/EjX4Q==} 1127 + /@volar/vue-language-core/1.0.19:
  1128 + resolution: {integrity: sha512-3mIjJvQ+0tNOp+U9+Nggy92HYIqnltf882UMG9RuNHrd0Jn/rdvjRBs0jNTzwYDV9tn3tjDHGIfQak9XrUCaRg==}
1104 dependencies: 1129 dependencies:
1105 - '@volar/language-core': 1.0.16  
1106 - '@volar/source-map': 1.0.16 1130 + '@volar/language-core': 1.0.19
  1131 + '@volar/source-map': 1.0.19
1107 '@vue/compiler-dom': 3.2.45 1132 '@vue/compiler-dom': 3.2.45
1108 '@vue/compiler-sfc': 3.2.45 1133 '@vue/compiler-sfc': 3.2.45
1109 '@vue/reactivity': 3.2.45 1134 '@vue/reactivity': 3.2.45
@@ -1112,11 +1137,11 @@ packages: @@ -1112,11 +1137,11 @@ packages:
1112 vue-template-compiler: 2.7.14 1137 vue-template-compiler: 2.7.14
1113 dev: true 1138 dev: true
1114 1139
1115 - /@volar/vue-typescript/1.0.16:  
1116 - resolution: {integrity: sha512-M018Ulg/o2FVktAdlr5b/z4K69bYzekxNUA1o39y5Ur6CObc/o+5eDCCS7gIYijWnx9iNKkSQpWWWblJFv7kHQ==} 1140 + /@volar/vue-typescript/1.0.19:
  1141 + resolution: {integrity: sha512-HKaLCz/lb5xkJ1SyaMmms0Ww/OVStQ16qWttSbHRnnyRV/IDMFrwlovA/bIAPzHUq8EVoDAznRVsCysr2QCOGA==}
1117 dependencies: 1142 dependencies:
1118 - '@volar/typescript': 1.0.16  
1119 - '@volar/vue-language-core': 1.0.16 1143 + '@volar/typescript': 1.0.19
  1144 + '@volar/vue-language-core': 1.0.19
1120 dev: true 1145 dev: true
1121 1146
1122 /@vue/compiler-core/3.2.45: 1147 /@vue/compiler-core/3.2.45:
@@ -1196,24 +1221,24 @@ packages: @@ -1196,24 +1221,24 @@ packages:
1196 /@vue/shared/3.2.45: 1221 /@vue/shared/3.2.45:
1197 resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} 1222 resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
1198 1223
1199 - /@vueuse/core/9.8.2_vue@3.2.45:  
1200 - resolution: {integrity: sha512-aWiCmcYIpPt7xjuqYiceODEMHchDYthrJ4AqI+FXPZrR23PZOqdiktbUVyQl2kGlR3H4i9UJ/uimQrwhz9UouQ==} 1224 + /@vueuse/core/9.9.0_vue@3.2.45:
  1225 + resolution: {integrity: sha512-JdDb7TrE0imZnwBhMF4+0PCJqGD3AxzH8S2sfk54P0rqvklK+EAtAR/mPb1HwV/JPujQFQJhghQ190Yq03YpVw==}
1201 dependencies: 1226 dependencies:
1202 '@types/web-bluetooth': 0.0.16 1227 '@types/web-bluetooth': 0.0.16
1203 - '@vueuse/metadata': 9.8.2  
1204 - '@vueuse/shared': 9.8.2_vue@3.2.45 1228 + '@vueuse/metadata': 9.9.0
  1229 + '@vueuse/shared': 9.9.0_vue@3.2.45
1205 vue-demi: 0.13.11_vue@3.2.45 1230 vue-demi: 0.13.11_vue@3.2.45
1206 transitivePeerDependencies: 1231 transitivePeerDependencies:
1207 - '@vue/composition-api' 1232 - '@vue/composition-api'
1208 - vue 1233 - vue
1209 dev: false 1234 dev: false
1210 1235
1211 - /@vueuse/metadata/9.8.2:  
1212 - resolution: {integrity: sha512-N4E/BKS+9VsUeD4WLVRU1J2kCOLh+iikBcMtipFcTyL204132vDYHs27zLAVabJYGnhC0dIVGdhg9pbOZiY2TQ==} 1236 + /@vueuse/metadata/9.9.0:
  1237 + resolution: {integrity: sha512-pgxsUJv/d7IjKpLeB6TthggEsaBwM3ffc5jPrr5TmxAm/fup0mGR5VTzrdA/PSx85tpb+CIvP92D+55qBNc8ag==}
1213 dev: false 1238 dev: false
1214 1239
1215 - /@vueuse/shared/9.8.2_vue@3.2.45:  
1216 - resolution: {integrity: sha512-ACjrPQzowd5dnabNJt9EoGVobco9/ENiA5qP53vjiuxndlJYuc/UegwhXC7KdQbPX4F45a50+45K3g1wNqOzmA==} 1240 + /@vueuse/shared/9.9.0_vue@3.2.45:
  1241 + resolution: {integrity: sha512-+D0XFwHG0T+uaIbCSlROBwm1wzs71B7n3KyDOxnvfEMMHDOzl09rYKwaE2AENmYwYPXfHPbSBRDD2gBVHbvTcg==}
1217 dependencies: 1242 dependencies:
1218 vue-demi: 0.13.11_vue@3.2.45 1243 vue-demi: 0.13.11_vue@3.2.45
1219 transitivePeerDependencies: 1244 transitivePeerDependencies:
@@ -1503,6 +1528,18 @@ packages: @@ -1503,6 +1528,18 @@ packages:
1503 engines: {node: '>=12'} 1528 engines: {node: '>=12'}
1504 dev: true 1529 dev: true
1505 1530
  1531 + /ansi-styles/2.2.1:
  1532 + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
  1533 + engines: {node: '>=0.10.0'}
  1534 + dev: true
  1535 +
  1536 + /ansi-styles/3.2.1:
  1537 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
  1538 + engines: {node: '>=4'}
  1539 + dependencies:
  1540 + color-convert: registry.npmmirror.com/color-convert/1.9.3
  1541 + dev: true
  1542 +
1506 /ansi-styles/4.3.0: 1543 /ansi-styles/4.3.0:
1507 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1544 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1508 engines: {node: '>=8'} 1545 engines: {node: '>=8'}
@@ -1609,8 +1646,16 @@ packages: @@ -1609,8 +1646,16 @@ packages:
1609 postcss-value-parser: 4.2.0 1646 postcss-value-parser: 4.2.0
1610 dev: true 1647 dev: true
1611 1648
1612 - /axios/1.2.1:  
1613 - resolution: {integrity: sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==} 1649 + /axios/0.26.1_debug@4.3.4:
  1650 + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
  1651 + dependencies:
  1652 + follow-redirects: 1.15.2
  1653 + transitivePeerDependencies:
  1654 + - debug
  1655 + dev: true
  1656 +
  1657 + /axios/1.2.2:
  1658 + resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==}
1614 dependencies: 1659 dependencies:
1615 follow-redirects: 1.15.2 1660 follow-redirects: 1.15.2
1616 form-data: 4.0.0 1661 form-data: 4.0.0
@@ -1751,20 +1796,20 @@ packages: @@ -1751,20 +1796,20 @@ packages:
1751 resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} 1796 resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
1752 engines: {node: '>=0.10.0'} 1797 engines: {node: '>=0.10.0'}
1753 dependencies: 1798 dependencies:
1754 - ansi-styles: registry.npmmirror.com/ansi-styles/2.2.1 1799 + ansi-styles: 2.2.1
1755 escape-string-regexp: 1.0.5 1800 escape-string-regexp: 1.0.5
1756 has-ansi: 2.0.0 1801 has-ansi: 2.0.0
1757 strip-ansi: 3.0.1 1802 strip-ansi: 3.0.1
1758 - supports-color: registry.npmmirror.com/supports-color/2.0.0 1803 + supports-color: 2.0.0
1759 dev: true 1804 dev: true
1760 1805
1761 /chalk/2.4.2: 1806 /chalk/2.4.2:
1762 resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1807 resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1763 engines: {node: '>=4'} 1808 engines: {node: '>=4'}
1764 dependencies: 1809 dependencies:
1765 - ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 1810 + ansi-styles: 3.2.1
1766 escape-string-regexp: 1.0.5 1811 escape-string-regexp: 1.0.5
1767 - supports-color: registry.npmmirror.com/supports-color/5.5.0 1812 + supports-color: 5.5.0
1768 dev: true 1813 dev: true
1769 1814
1770 /chalk/4.1.2: 1815 /chalk/4.1.2:
@@ -2312,8 +2357,8 @@ packages: @@ -2312,8 +2357,8 @@ packages:
2312 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} 2357 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
2313 dev: true 2358 dev: true
2314 2359
2315 - /element-plus/2.2.27_vue@3.2.45:  
2316 - resolution: {integrity: sha512-P04HDOZBYDdvlYuleuCZRULzAc5xJVOBfLDK9xWxVo0vyo8ntdaXS5sTU+/76vrNzuO3FhLn9kvrsbiJEVa1jg==} 2360 + /element-plus/2.2.28_vue@3.2.45:
  2361 + resolution: {integrity: sha512-BsxF7iEaBydmRfw1Tt++EO9jRBjbtJr7ZRIrnEwz4J3Cwa1IzHCNCcx3ZwcYTlJq9CYFxv94JnbNr1EbkTou3A==}
2317 peerDependencies: 2362 peerDependencies:
2318 vue: ^3.2.0 2363 vue: ^3.2.0
2319 dependencies: 2364 dependencies:
@@ -2323,7 +2368,7 @@ packages: @@ -2323,7 +2368,7 @@ packages:
2323 '@popperjs/core': /@sxzz/popperjs-es/2.11.7 2368 '@popperjs/core': /@sxzz/popperjs-es/2.11.7
2324 '@types/lodash': 4.14.189 2369 '@types/lodash': 4.14.189
2325 '@types/lodash-es': 4.17.6 2370 '@types/lodash-es': 4.17.6
2326 - '@vueuse/core': 9.8.2_vue@3.2.45 2371 + '@vueuse/core': 9.9.0_vue@3.2.45
2327 async-validator: 4.2.5 2372 async-validator: 4.2.5
2328 dayjs: 1.11.7 2373 dayjs: 1.11.7
2329 escape-html: 1.0.3 2374 escape-html: 1.0.3
@@ -2450,21 +2495,21 @@ packages: @@ -2450,21 +2495,21 @@ packages:
2450 engines: {node: '>=10'} 2495 engines: {node: '>=10'}
2451 dev: true 2496 dev: true
2452 2497
2453 - /eslint-config-prettier/8.5.0_eslint@8.30.0:  
2454 - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 2498 + /eslint-config-prettier/8.6.0_eslint@8.31.0:
  2499 + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
2455 hasBin: true 2500 hasBin: true
2456 peerDependencies: 2501 peerDependencies:
2457 eslint: '>=7.0.0' 2502 eslint: '>=7.0.0'
2458 dependencies: 2503 dependencies:
2459 - eslint: 8.30.0 2504 + eslint: 8.31.0
2460 dev: true 2505 dev: true
2461 2506
2462 - /eslint-define-config/1.12.0:  
2463 - resolution: {integrity: sha512-Kt9TcMbgsY9VRt7jIuw76KE/2RuD31eWB4Ubv6btXgU8NTSsbT6gZ8qzeiU+rAih/8sOl8Kt89spAZBMElu6qQ==} 2507 + /eslint-define-config/1.13.0:
  2508 + resolution: {integrity: sha512-d0BfmPGBcMusfiz6QY/piAhWaEyJriJtvk9SHfuJzI7am9k4ce07SfmPkpcR0ckXNyu4FBons10akOO2Tx+X+Q==}
2464 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'} 2509 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
2465 dev: true 2510 dev: true
2466 2511
2467 - /eslint-plugin-prettier/4.2.1_kl4pe43v5b43npmso5hoplpbyi: 2512 + /eslint-plugin-prettier/4.2.1_32m5uc2milwdw3tnkcq5del26y:
2468 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 2513 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
2469 engines: {node: '>=12.0.0'} 2514 engines: {node: '>=12.0.0'}
2470 peerDependencies: 2515 peerDependencies:
@@ -2475,25 +2520,25 @@ packages: @@ -2475,25 +2520,25 @@ packages:
2475 eslint-config-prettier: 2520 eslint-config-prettier:
2476 optional: true 2521 optional: true
2477 dependencies: 2522 dependencies:
2478 - eslint: 8.30.0  
2479 - eslint-config-prettier: 8.5.0_eslint@8.30.0 2523 + eslint: 8.31.0
  2524 + eslint-config-prettier: 8.6.0_eslint@8.31.0
2480 prettier: 2.8.1 2525 prettier: 2.8.1
2481 prettier-linter-helpers: 1.0.0 2526 prettier-linter-helpers: 1.0.0
2482 dev: true 2527 dev: true
2483 2528
2484 - /eslint-plugin-vue/9.8.0_eslint@8.30.0: 2529 + /eslint-plugin-vue/9.8.0_eslint@8.31.0:
2485 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} 2530 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==}
2486 engines: {node: ^14.17.0 || >=16.0.0} 2531 engines: {node: ^14.17.0 || >=16.0.0}
2487 peerDependencies: 2532 peerDependencies:
2488 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 2533 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
2489 dependencies: 2534 dependencies:
2490 - eslint: 8.30.0  
2491 - eslint-utils: 3.0.0_eslint@8.30.0 2535 + eslint: 8.31.0
  2536 + eslint-utils: 3.0.0_eslint@8.31.0
2492 natural-compare: 1.4.0 2537 natural-compare: 1.4.0
2493 nth-check: 2.1.1 2538 nth-check: 2.1.1
2494 postcss-selector-parser: 6.0.10 2539 postcss-selector-parser: 6.0.10
2495 semver: 7.3.8 2540 semver: 7.3.8
2496 - vue-eslint-parser: 9.1.0_eslint@8.30.0 2541 + vue-eslint-parser: 9.1.0_eslint@8.31.0
2497 xml-name-validator: 4.0.0 2542 xml-name-validator: 4.0.0
2498 transitivePeerDependencies: 2543 transitivePeerDependencies:
2499 - supports-color 2544 - supports-color
@@ -2522,13 +2567,13 @@ packages: @@ -2522,13 +2567,13 @@ packages:
2522 eslint-visitor-keys: 1.3.0 2567 eslint-visitor-keys: 1.3.0
2523 dev: true 2568 dev: true
2524 2569
2525 - /eslint-utils/3.0.0_eslint@8.30.0: 2570 + /eslint-utils/3.0.0_eslint@8.31.0:
2526 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 2571 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
2527 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 2572 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
2528 peerDependencies: 2573 peerDependencies:
2529 eslint: '>=5' 2574 eslint: '>=5'
2530 dependencies: 2575 dependencies:
2531 - eslint: 8.30.0 2576 + eslint: 8.31.0
2532 eslint-visitor-keys: 2.1.0 2577 eslint-visitor-keys: 2.1.0
2533 dev: true 2578 dev: true
2534 2579
@@ -2547,12 +2592,12 @@ packages: @@ -2547,12 +2592,12 @@ packages:
2547 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2592 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2548 dev: true 2593 dev: true
2549 2594
2550 - /eslint/8.30.0:  
2551 - resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} 2595 + /eslint/8.31.0:
  2596 + resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==}
2552 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2597 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2553 hasBin: true 2598 hasBin: true
2554 dependencies: 2599 dependencies:
2555 - '@eslint/eslintrc': 1.4.0 2600 + '@eslint/eslintrc': 1.4.1
2556 '@humanwhocodes/config-array': 0.11.8 2601 '@humanwhocodes/config-array': 0.11.8
2557 '@humanwhocodes/module-importer': 1.0.1 2602 '@humanwhocodes/module-importer': 1.0.1
2558 '@nodelib/fs.walk': 1.2.8 2603 '@nodelib/fs.walk': 1.2.8
@@ -2563,7 +2608,7 @@ packages: @@ -2563,7 +2608,7 @@ packages:
2563 doctrine: 3.0.0 2608 doctrine: 3.0.0
2564 escape-string-regexp: 4.0.0 2609 escape-string-regexp: 4.0.0
2565 eslint-scope: 7.1.1 2610 eslint-scope: 7.1.1
2566 - eslint-utils: 3.0.0_eslint@8.30.0 2611 + eslint-utils: 3.0.0_eslint@8.31.0
2567 eslint-visitor-keys: 3.3.0 2612 eslint-visitor-keys: 3.3.0
2568 espree: 9.4.1 2613 espree: 9.4.1
2569 esquery: 1.4.0 2614 esquery: 1.4.0
@@ -2787,7 +2832,7 @@ packages: @@ -2787,7 +2832,7 @@ packages:
2787 /filelist/1.0.4: 2832 /filelist/1.0.4:
2788 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 2833 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
2789 dependencies: 2834 dependencies:
2790 - minimatch: 5.1.0 2835 + minimatch: 5.1.2
2791 dev: true 2836 dev: true
2792 2837
2793 /find-up/4.1.0: 2838 /find-up/4.1.0:
@@ -2825,7 +2870,6 @@ packages: @@ -2825,7 +2870,6 @@ packages:
2825 peerDependenciesMeta: 2870 peerDependenciesMeta:
2826 debug: 2871 debug:
2827 optional: true 2872 optional: true
2828 - dev: false  
2829 2873
2830 /for-in/1.0.2: 2874 /for-in/1.0.2:
2831 resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} 2875 resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
@@ -3007,6 +3051,16 @@ packages: @@ -3007,6 +3051,16 @@ packages:
3007 ansi-regex: 2.1.1 3051 ansi-regex: 2.1.1
3008 dev: true 3052 dev: true
3009 3053
  3054 + /has-flag/1.0.0:
  3055 + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
  3056 + engines: {node: '>=0.10.0'}
  3057 + dev: true
  3058 +
  3059 + /has-flag/3.0.0:
  3060 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
  3061 + engines: {node: '>=4'}
  3062 + dev: true
  3063 +
3010 /has-flag/4.0.0: 3064 /has-flag/4.0.0:
3011 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 3065 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
3012 engines: {node: '>=8'} 3066 engines: {node: '>=8'}
@@ -3379,6 +3433,10 @@ packages: @@ -3379,6 +3433,10 @@ packages:
3379 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} 3433 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
3380 dev: true 3434 dev: true
3381 3435
  3436 + /js-tokens/4.0.0:
  3437 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
  3438 + dev: true
  3439 +
3382 /js-tokens/8.0.0: 3440 /js-tokens/8.0.0:
3383 resolution: {integrity: sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==} 3441 resolution: {integrity: sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==}
3384 dev: true 3442 dev: true
@@ -3828,13 +3886,6 @@ packages: @@ -3828,13 +3886,6 @@ packages:
3828 brace-expansion: 1.1.11 3886 brace-expansion: 1.1.11
3829 dev: true 3887 dev: true
3830 3888
3831 - /minimatch/5.1.0:  
3832 - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}  
3833 - engines: {node: '>=10'}  
3834 - dependencies:  
3835 - brace-expansion: 2.0.1  
3836 - dev: true  
3837 -  
3838 /minimatch/5.1.2: 3889 /minimatch/5.1.2:
3839 resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} 3890 resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==}
3840 engines: {node: '>=10'} 3891 engines: {node: '>=10'}
@@ -4105,7 +4156,7 @@ packages: @@ -4105,7 +4156,7 @@ packages:
4105 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 4156 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
4106 engines: {node: '>=8'} 4157 engines: {node: '>=8'}
4107 dependencies: 4158 dependencies:
4108 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6 4159 + '@babel/code-frame': 7.18.6
4109 error-ex: 1.3.2 4160 error-ex: 1.3.2
4110 json-parse-even-better-errors: 2.3.1 4161 json-parse-even-better-errors: 2.3.1
4111 lines-and-columns: 1.2.4 4162 lines-and-columns: 1.2.4
@@ -4162,10 +4213,6 @@ packages: @@ -4162,10 +4213,6 @@ packages:
4162 resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} 4213 resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
4163 dev: true 4214 dev: true
4164 4215
4165 - /pathe/0.3.9:  
4166 - resolution: {integrity: sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==}  
4167 - dev: true  
4168 -  
4169 /pathe/1.0.0: 4216 /pathe/1.0.0:
4170 resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==} 4217 resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==}
4171 dev: true 4218 dev: true
@@ -4555,8 +4602,8 @@ packages: @@ -4555,8 +4602,8 @@ packages:
4555 fsevents: 2.3.2 4602 fsevents: 2.3.2
4556 dev: true 4603 dev: true
4557 4604
4558 - /rollup/3.8.1:  
4559 - resolution: {integrity: sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==} 4605 + /rollup/3.9.1:
  4606 + resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==}
4560 engines: {node: '>=14.18.0', npm: '>=8.0.0'} 4607 engines: {node: '>=14.18.0', npm: '>=8.0.0'}
4561 hasBin: true 4608 hasBin: true
4562 optionalDependencies: 4609 optionalDependencies:
@@ -4691,7 +4738,7 @@ packages: @@ -4691,7 +4738,7 @@ packages:
4691 resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} 4738 resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
4692 engines: {node: '>=8'} 4739 engines: {node: '>=8'}
4693 dependencies: 4740 dependencies:
4694 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 4741 + ansi-styles: 4.3.0
4695 astral-regex: 2.0.0 4742 astral-regex: 2.0.0
4696 is-fullwidth-code-point: 3.0.0 4743 is-fullwidth-code-point: 3.0.0
4697 dev: true 4744 dev: true
@@ -4929,7 +4976,7 @@ packages: @@ -4929,7 +4976,7 @@ packages:
4929 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 4976 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
4930 dev: true 4977 dev: true
4931 4978
4932 - /stylelint-config-html/1.1.0_bto6pmslw3cibsiuq6smxboytq: 4979 + /stylelint-config-html/1.1.0_kbto3rg3njmczth2rrsgfnlsqa:
4933 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} 4980 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
4934 engines: {node: ^12 || >=14} 4981 engines: {node: ^12 || >=14}
4935 peerDependencies: 4982 peerDependencies:
@@ -4937,48 +4984,48 @@ packages: @@ -4937,48 +4984,48 @@ packages:
4937 stylelint: '>=14.0.0' 4984 stylelint: '>=14.0.0'
4938 dependencies: 4985 dependencies:
4939 postcss-html: 1.5.0 4986 postcss-html: 1.5.0
4940 - stylelint: 14.16.0 4987 + stylelint: 14.16.1
4941 dev: true 4988 dev: true
4942 4989
4943 - /stylelint-config-prettier/9.0.4_stylelint@14.16.0: 4990 + /stylelint-config-prettier/9.0.4_stylelint@14.16.1:
4944 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==} 4991 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==}
4945 engines: {node: '>= 12'} 4992 engines: {node: '>= 12'}
4946 hasBin: true 4993 hasBin: true
4947 peerDependencies: 4994 peerDependencies:
4948 stylelint: '>=11.0.0' 4995 stylelint: '>=11.0.0'
4949 dependencies: 4996 dependencies:
4950 - stylelint: 14.16.0 4997 + stylelint: 14.16.1
4951 dev: true 4998 dev: true
4952 4999
4953 - /stylelint-config-recommended/9.0.0_stylelint@14.16.0: 5000 + /stylelint-config-recommended/9.0.0_stylelint@14.16.1:
4954 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==} 5001 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==}
4955 peerDependencies: 5002 peerDependencies:
4956 stylelint: ^14.10.0 5003 stylelint: ^14.10.0
4957 dependencies: 5004 dependencies:
4958 - stylelint: 14.16.0 5005 + stylelint: 14.16.1
4959 dev: true 5006 dev: true
4960 5007
4961 - /stylelint-config-standard/29.0.0_stylelint@14.16.0: 5008 + /stylelint-config-standard/29.0.0_stylelint@14.16.1:
4962 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==} 5009 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==}
4963 peerDependencies: 5010 peerDependencies:
4964 stylelint: ^14.14.0 5011 stylelint: ^14.14.0
4965 dependencies: 5012 dependencies:
4966 - stylelint: 14.16.0  
4967 - stylelint-config-recommended: 9.0.0_stylelint@14.16.0 5013 + stylelint: 14.16.1
  5014 + stylelint-config-recommended: 9.0.0_stylelint@14.16.1
4968 dev: true 5015 dev: true
4969 5016
4970 - /stylelint-order/5.0.0_stylelint@14.16.0: 5017 + /stylelint-order/5.0.0_stylelint@14.16.1:
4971 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} 5018 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==}
4972 peerDependencies: 5019 peerDependencies:
4973 stylelint: ^14.0.0 5020 stylelint: ^14.0.0
4974 dependencies: 5021 dependencies:
4975 postcss: registry.npmmirror.com/postcss/8.4.20 5022 postcss: registry.npmmirror.com/postcss/8.4.20
4976 postcss-sorting: 7.0.1_postcss@8.4.20 5023 postcss-sorting: 7.0.1_postcss@8.4.20
4977 - stylelint: 14.16.0 5024 + stylelint: 14.16.1
4978 dev: true 5025 dev: true
4979 5026
4980 - /stylelint/14.16.0:  
4981 - resolution: {integrity: sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg==} 5027 + /stylelint/14.16.1:
  5028 + resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==}
4982 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 5029 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
4983 hasBin: true 5030 hasBin: true
4984 dependencies: 5031 dependencies:
@@ -5005,7 +5052,7 @@ packages: @@ -5005,7 +5052,7 @@ packages:
5005 micromatch: 4.0.5 5052 micromatch: 4.0.5
5006 normalize-path: 3.0.0 5053 normalize-path: 3.0.0
5007 picocolors: 1.0.0 5054 picocolors: 1.0.0
5008 - postcss: registry.npmmirror.com/postcss/8.4.20 5055 + postcss: 8.4.20
5009 postcss-media-query-parser: 0.2.3 5056 postcss-media-query-parser: 0.2.3
5010 postcss-resolve-nested-selector: 0.1.1 5057 postcss-resolve-nested-selector: 0.1.1
5011 postcss-safe-parser: 6.0.0_postcss@8.4.20 5058 postcss-safe-parser: 6.0.0_postcss@8.4.20
@@ -5024,6 +5071,18 @@ packages: @@ -5024,6 +5071,18 @@ packages:
5024 - supports-color 5071 - supports-color
5025 dev: true 5072 dev: true
5026 5073
  5074 + /supports-color/2.0.0:
  5075 + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
  5076 + engines: {node: '>=0.8.0'}
  5077 + dev: true
  5078 +
  5079 + /supports-color/5.5.0:
  5080 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
  5081 + engines: {node: '>=4'}
  5082 + dependencies:
  5083 + has-flag: 3.0.0
  5084 + dev: true
  5085 +
5027 /supports-color/7.2.0: 5086 /supports-color/7.2.0:
5028 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 5087 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
5029 engines: {node: '>=8'} 5088 engines: {node: '>=8'}
@@ -5357,7 +5416,7 @@ packages: @@ -5357,7 +5416,7 @@ packages:
5357 chalk: 4.1.2 5416 chalk: 4.1.2
5358 debug: 4.3.4 5417 debug: 4.3.4
5359 fs-extra: 10.1.0 5418 fs-extra: 10.1.0
5360 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5419 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5361 transitivePeerDependencies: 5420 transitivePeerDependencies:
5362 - supports-color 5421 - supports-color
5363 dev: true 5422 dev: true
@@ -5368,7 +5427,7 @@ packages: @@ -5368,7 +5427,7 @@ packages:
5368 ejs: 3.1.8 5427 ejs: 3.1.8
5369 dev: true 5428 dev: true
5370 5429
5371 - /vite-plugin-eslint/1.8.1_eslint@8.30.0+vite@4.0.3: 5430 + /vite-plugin-eslint/1.8.1_eslint@8.31.0+vite@4.0.3:
5372 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} 5431 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
5373 peerDependencies: 5432 peerDependencies:
5374 eslint: '>=7' 5433 eslint: '>=7'
@@ -5376,9 +5435,9 @@ packages: @@ -5376,9 +5435,9 @@ packages:
5376 dependencies: 5435 dependencies:
5377 '@rollup/pluginutils': 4.2.1 5436 '@rollup/pluginutils': 4.2.1
5378 '@types/eslint': 8.4.10 5437 '@types/eslint': 8.4.10
5379 - eslint: 8.30.0 5438 + eslint: 8.31.0
5380 rollup: 2.79.1 5439 rollup: 2.79.1
5381 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5440 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5382 dev: true 5441 dev: true
5383 5442
5384 /vite-plugin-progress/0.0.6_vite@4.0.3: 5443 /vite-plugin-progress/0.0.6_vite@4.0.3:
@@ -5390,7 +5449,7 @@ packages: @@ -5390,7 +5449,7 @@ packages:
5390 picocolors: 1.0.0 5449 picocolors: 1.0.0
5391 progress: 2.0.3 5450 progress: 2.0.3
5392 rd: 2.0.1 5451 rd: 2.0.1
5393 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5452 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5394 dev: true 5453 dev: true
5395 5454
5396 /vite-plugin-style-import/2.0.0_vite@4.0.3: 5455 /vite-plugin-style-import/2.0.0_vite@4.0.3:
@@ -5405,7 +5464,7 @@ packages: @@ -5405,7 +5464,7 @@ packages:
5405 fs-extra: 10.1.0 5464 fs-extra: 10.1.0
5406 magic-string: 0.25.9 5465 magic-string: 0.25.9
5407 pathe: 0.2.0 5466 pathe: 0.2.0
5408 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5467 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5409 dev: true 5468 dev: true
5410 5469
5411 /vite-plugin-svg-icons/2.0.1_vite@4.0.3: 5470 /vite-plugin-svg-icons/2.0.1_vite@4.0.3:
@@ -5421,7 +5480,7 @@ packages: @@ -5421,7 +5480,7 @@ packages:
5421 pathe: 0.2.0 5480 pathe: 0.2.0
5422 svg-baker: 1.7.0 5481 svg-baker: 1.7.0
5423 svgo: 2.8.0 5482 svgo: 2.8.0
5424 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5483 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5425 transitivePeerDependencies: 5484 transitivePeerDependencies:
5426 - supports-color 5485 - supports-color
5427 dev: true 5486 dev: true
@@ -5433,10 +5492,10 @@ packages: @@ -5433,10 +5492,10 @@ packages:
5433 dependencies: 5492 dependencies:
5434 '@vue/compiler-sfc': 3.2.45 5493 '@vue/compiler-sfc': 3.2.45
5435 magic-string: 0.25.9 5494 magic-string: 0.25.9
5436 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 5495 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
5437 dev: true 5496 dev: true
5438 5497
5439 - /vite/4.0.3_amyfslv6hdwxqbf7f4ldebbtce: 5498 + /vite/4.0.3_zxbrnrc4iyldik6mikh3pswz4i:
5440 resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 5499 resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==}
5441 engines: {node: ^14.18.0 || >=16.0.0} 5500 engines: {node: ^14.18.0 || >=16.0.0}
5442 hasBin: true 5501 hasBin: true
@@ -5461,11 +5520,11 @@ packages: @@ -5461,11 +5520,11 @@ packages:
5461 terser: 5520 terser:
5462 optional: true 5521 optional: true
5463 dependencies: 5522 dependencies:
5464 - '@types/node': 18.11.17 5523 + '@types/node': 18.11.18
5465 esbuild: 0.16.5 5524 esbuild: 0.16.5
5466 postcss: 8.4.20 5525 postcss: 8.4.20
5467 resolve: 1.22.1 5526 resolve: 1.22.1
5468 - rollup: 3.8.1 5527 + rollup: 3.9.1
5469 sass: 1.57.1 5528 sass: 1.57.1
5470 terser: 5.16.1 5529 terser: 5.16.1
5471 optionalDependencies: 5530 optionalDependencies:
@@ -5487,14 +5546,14 @@ packages: @@ -5487,14 +5546,14 @@ packages:
5487 vue: 3.2.45 5546 vue: 3.2.45
5488 dev: false 5547 dev: false
5489 5548
5490 - /vue-eslint-parser/9.1.0_eslint@8.30.0: 5549 + /vue-eslint-parser/9.1.0_eslint@8.31.0:
5491 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 5550 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
5492 engines: {node: ^14.17.0 || >=16.0.0} 5551 engines: {node: ^14.17.0 || >=16.0.0}
5493 peerDependencies: 5552 peerDependencies:
5494 eslint: '>=6.0.0' 5553 eslint: '>=6.0.0'
5495 dependencies: 5554 dependencies:
5496 debug: 4.3.4 5555 debug: 4.3.4
5497 - eslint: 8.30.0 5556 + eslint: 8.31.0
5498 eslint-scope: 7.1.1 5557 eslint-scope: 7.1.1
5499 eslint-visitor-keys: 3.3.0 5558 eslint-visitor-keys: 3.3.0
5500 espree: 9.4.1 5559 espree: 9.4.1
@@ -5533,14 +5592,14 @@ packages: @@ -5533,14 +5592,14 @@ packages:
5533 he: 1.2.0 5592 he: 1.2.0
5534 dev: true 5593 dev: true
5535 5594
5536 - /vue-tsc/1.0.16_typescript@4.9.4:  
5537 - resolution: {integrity: sha512-yZaiJBbcKR1rSLhiF9KryAFH7R63po+N/invr2EAHGXxMzZksE5j1zyQKvrYiqK47ZHLAlCR+re/PHqWp/UzTg==} 5595 + /vue-tsc/1.0.19_typescript@4.9.4:
  5596 + resolution: {integrity: sha512-UuI4G9PwV07Q2U+xYDLP5y3aUXTfuIF0Exy0qXT8+BbLlahubQ2r2PGSodSBnHxAhm/XsrD0KleC2rSzLKXDfQ==}
5538 hasBin: true 5597 hasBin: true
5539 peerDependencies: 5598 peerDependencies:
5540 typescript: '*' 5599 typescript: '*'
5541 dependencies: 5600 dependencies:
5542 - '@volar/vue-language-core': 1.0.16  
5543 - '@volar/vue-typescript': 1.0.16 5601 + '@volar/vue-language-core': 1.0.19
  5602 + '@volar/vue-typescript': 1.0.19
5544 typescript: 4.9.4 5603 typescript: 4.9.4
5545 dev: true 5604 dev: true
5546 5605
@@ -6229,7 +6288,7 @@ packages: @@ -6229,7 +6288,7 @@ packages:
6229 version: 0.9.1 6288 version: 0.9.1
6230 dependencies: 6289 dependencies:
6231 '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.1.2 6290 '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.1.2
6232 - axios: registry.npmmirror.com/axios/0.26.1_debug@4.3.4 6291 + axios: 0.26.1_debug@4.3.4
6233 debug: 4.3.4 6292 debug: 4.3.4
6234 fast-glob: registry.npmmirror.com/fast-glob/3.2.12 6293 fast-glob: registry.npmmirror.com/fast-glob/3.2.12
6235 fs-extra: registry.npmmirror.com/fs-extra/10.1.0 6294 fs-extra: registry.npmmirror.com/fs-extra/10.1.0
@@ -6262,7 +6321,7 @@ packages: @@ -6262,7 +6321,7 @@ packages:
6262 regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 6321 regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11
6263 systemjs: registry.npmmirror.com/systemjs/6.13.0 6322 systemjs: registry.npmmirror.com/systemjs/6.13.0
6264 terser: 5.16.1 6323 terser: 5.16.1
6265 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6324 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
6266 dev: true 6325 dev: true
6267 6326
6268 registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45: 6327 registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45:
@@ -6278,7 +6337,7 @@ packages: @@ -6278,7 +6337,7 @@ packages:
6278 '@babel/core': registry.npmmirror.com/@babel/core/7.20.5 6337 '@babel/core': registry.npmmirror.com/@babel/core/7.20.5
6279 '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5 6338 '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5
6280 '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5 6339 '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5
6281 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6340 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
6282 vue: 3.2.45 6341 vue: 3.2.45
6283 transitivePeerDependencies: 6342 transitivePeerDependencies:
6284 - supports-color 6343 - supports-color
@@ -6294,7 +6353,7 @@ packages: @@ -6294,7 +6353,7 @@ packages:
6294 vite: ^4.0.0 6353 vite: ^4.0.0
6295 vue: ^3.2.25 6354 vue: ^3.2.25
6296 dependencies: 6355 dependencies:
6297 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6356 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
6298 vue: 3.2.45 6357 vue: 3.2.45
6299 dev: true 6358 dev: true
6300 6359
@@ -6388,22 +6447,6 @@ packages: @@ -6388,22 +6447,6 @@ packages:
6388 - supports-color 6447 - supports-color
6389 dev: true 6448 dev: true
6390 6449
6391 - registry.npmmirror.com/ansi-styles/2.2.1:  
6392 - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz}  
6393 - name: ansi-styles  
6394 - version: 2.2.1  
6395 - engines: {node: '>=0.10.0'}  
6396 - dev: true  
6397 -  
6398 - registry.npmmirror.com/ansi-styles/3.2.1:  
6399 - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}  
6400 - name: ansi-styles  
6401 - version: 3.2.1  
6402 - engines: {node: '>=4'}  
6403 - dependencies:  
6404 - color-convert: registry.npmmirror.com/color-convert/1.9.3  
6405 - dev: true  
6406 -  
6407 registry.npmmirror.com/ansi-styles/4.3.0: 6450 registry.npmmirror.com/ansi-styles/4.3.0:
6408 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz} 6451 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}
6409 name: ansi-styles 6452 name: ansi-styles
@@ -6412,17 +6455,6 @@ packages: @@ -6412,17 +6455,6 @@ packages:
6412 dependencies: 6455 dependencies:
6413 color-convert: registry.npmmirror.com/color-convert/2.0.1 6456 color-convert: registry.npmmirror.com/color-convert/2.0.1
6414 6457
6415 - registry.npmmirror.com/axios/0.26.1_debug@4.3.4:  
6416 - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}  
6417 - id: registry.npmmirror.com/axios/0.26.1  
6418 - name: axios  
6419 - version: 0.26.1  
6420 - dependencies:  
6421 - follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4  
6422 - transitivePeerDependencies:  
6423 - - debug  
6424 - dev: true  
6425 -  
6426 registry.npmmirror.com/braces/2.3.2: 6458 registry.npmmirror.com/braces/2.3.2:
6427 resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz} 6459 resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
6428 name: braces 6460 name: braces
@@ -6585,7 +6617,7 @@ packages: @@ -6585,7 +6617,7 @@ packages:
6585 '@nodelib/fs.walk': 1.2.8 6617 '@nodelib/fs.walk': 1.2.8
6586 glob-parent: 5.1.2 6618 glob-parent: 5.1.2
6587 merge2: registry.npmmirror.com/merge2/1.4.1 6619 merge2: registry.npmmirror.com/merge2/1.4.1
6588 - micromatch: registry.npmmirror.com/micromatch/4.0.5 6620 + micromatch: 4.0.5
6589 dev: true 6621 dev: true
6590 6622
6591 registry.npmmirror.com/fill-range/4.0.0: 6623 registry.npmmirror.com/fill-range/4.0.0:
@@ -6609,21 +6641,6 @@ packages: @@ -6609,21 +6641,6 @@ packages:
6609 to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1 6641 to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1
6610 dev: true 6642 dev: true
6611 6643
6612 - registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4:  
6613 - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz}  
6614 - id: registry.npmmirror.com/follow-redirects/1.15.2  
6615 - name: follow-redirects  
6616 - version: 1.15.2  
6617 - engines: {node: '>=4.0'}  
6618 - peerDependencies:  
6619 - debug: '*'  
6620 - peerDependenciesMeta:  
6621 - debug:  
6622 - optional: true  
6623 - dependencies:  
6624 - debug: 4.3.4  
6625 - dev: true  
6626 -  
6627 registry.npmmirror.com/fs-extra/10.1.0: 6644 registry.npmmirror.com/fs-extra/10.1.0:
6628 resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz} 6645 resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz}
6629 name: fs-extra 6646 name: fs-extra
@@ -6653,20 +6670,6 @@ packages: @@ -6653,20 +6670,6 @@ packages:
6653 version: 4.2.10 6670 version: 4.2.10
6654 dev: true 6671 dev: true
6655 6672
6656 - registry.npmmirror.com/has-flag/1.0.0:  
6657 - resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz}  
6658 - name: has-flag  
6659 - version: 1.0.0  
6660 - engines: {node: '>=0.10.0'}  
6661 - dev: true  
6662 -  
6663 - registry.npmmirror.com/has-flag/3.0.0:  
6664 - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz}  
6665 - name: has-flag  
6666 - version: 3.0.0  
6667 - engines: {node: '>=4'}  
6668 - dev: true  
6669 -  
6670 registry.npmmirror.com/has/1.0.3: 6673 registry.npmmirror.com/has/1.0.3:
6671 resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} 6674 resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz}
6672 name: has 6675 name: has
@@ -6932,29 +6935,13 @@ packages: @@ -6932,29 +6935,13 @@ packages:
6932 version: 1.0.2 6935 version: 1.0.2
6933 engines: {node: '>=0.10.0'} 6936 engines: {node: '>=0.10.0'}
6934 6937
6935 - registry.npmmirror.com/supports-color/2.0.0:  
6936 - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz}  
6937 - name: supports-color  
6938 - version: 2.0.0  
6939 - engines: {node: '>=0.8.0'}  
6940 - dev: true  
6941 -  
6942 registry.npmmirror.com/supports-color/3.2.3: 6938 registry.npmmirror.com/supports-color/3.2.3:
6943 resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz} 6939 resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz}
6944 name: supports-color 6940 name: supports-color
6945 version: 3.2.3 6941 version: 3.2.3
6946 engines: {node: '>=0.8.0'} 6942 engines: {node: '>=0.8.0'}
6947 dependencies: 6943 dependencies:
6948 - has-flag: registry.npmmirror.com/has-flag/1.0.0  
6949 - dev: true  
6950 -  
6951 - registry.npmmirror.com/supports-color/5.5.0:  
6952 - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz}  
6953 - name: supports-color  
6954 - version: 5.5.0  
6955 - engines: {node: '>=4'}  
6956 - dependencies:  
6957 - has-flag: registry.npmmirror.com/has-flag/3.0.0 6944 + has-flag: 1.0.0
6958 dev: true 6945 dev: true
6959 6946
6960 registry.npmmirror.com/svg-tags/1.0.0: 6947 registry.npmmirror.com/svg-tags/1.0.0:
@@ -7045,7 +7032,7 @@ packages: @@ -7045,7 +7032,7 @@ packages:
7045 '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1 7032 '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1
7046 '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0 7033 '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0
7047 rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1 7034 rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1
7048 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 7035 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
7049 transitivePeerDependencies: 7036 transitivePeerDependencies:
7050 - encoding 7037 - encoding
7051 - supports-color 7038 - supports-color
@@ -7062,7 +7049,7 @@ packages: @@ -7062,7 +7049,7 @@ packages:
7062 '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.10 7049 '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.10
7063 debug: registry.npmmirror.com/debug/4.3.4 7050 debug: registry.npmmirror.com/debug/4.3.4
7064 kolorist: registry.npmmirror.com/kolorist/1.6.0 7051 kolorist: registry.npmmirror.com/kolorist/1.6.0
7065 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 7052 + vite: 4.0.3_zxbrnrc4iyldik6mikh3pswz4i
7066 windicss: registry.npmmirror.com/windicss/3.5.6 7053 windicss: registry.npmmirror.com/windicss/3.5.6
7067 transitivePeerDependencies: 7054 transitivePeerDependencies:
7068 - supports-color 7055 - supports-color
yudao-ui-admin-vue3/src/components/XTable/index.ts 0 → 100644
  1 +import XTable from './src/XTable.vue'
  2 +
  3 +export { XTable }
yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue 0 → 100644
  1 +<template>
  2 + <VxeGrid v-bind="getProps" ref="xGrid" :class="`${prefixCls}`" class="xtable-scrollbar">
  3 + <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
  4 + <slot :name="item" v-bind="data || {}"></slot>
  5 + </template>
  6 + </VxeGrid>
  7 +</template>
  8 +<script lang="ts" setup name="XTable">
  9 +import { computed, PropType, ref, unref, useAttrs, watch } from 'vue'
  10 +import { SizeType, VxeGridInstance } from 'vxe-table'
  11 +import { useAppStore } from '@/store/modules/app'
  12 +import { useDesign } from '@/hooks/web/useDesign'
  13 +import { XTableProps } from './type'
  14 +import { isBoolean, isFunction } from '@/utils/is'
  15 +import { useMessage } from '@/hooks/web/useMessage'
  16 +import download from '@/utils/download'
  17 +import { useI18n } from '@/hooks/web/useI18n'
  18 +
  19 +const { t } = useI18n()
  20 +const message = useMessage() // 消息弹窗
  21 +
  22 +const appStore = useAppStore()
  23 +
  24 +const { getPrefixCls } = useDesign()
  25 +const prefixCls = getPrefixCls('x-vxe-table')
  26 +
  27 +const attrs = useAttrs()
  28 +const emit = defineEmits(['register'])
  29 +
  30 +watch(
  31 + () => appStore.getIsDark,
  32 + () => {
  33 + if (appStore.getIsDark == true) {
  34 + import('./style/dark.scss')
  35 + }
  36 + if (appStore.getIsDark == false) {
  37 + import('./style/light.scss')
  38 + }
  39 + },
  40 + { immediate: true }
  41 +)
  42 +
  43 +const currentSize = computed(() => {
  44 + let resSize: SizeType = 'small'
  45 + const appsize = appStore.getCurrentSize
  46 + switch (appsize) {
  47 + case 'large':
  48 + resSize = 'medium'
  49 + break
  50 + case 'default':
  51 + resSize = 'small'
  52 + break
  53 + case 'small':
  54 + resSize = 'mini'
  55 + break
  56 + }
  57 + return resSize
  58 +})
  59 +
  60 +const props = defineProps({
  61 + options: {
  62 + type: Object as PropType<XTableProps>,
  63 + default: () => {}
  64 + }
  65 +})
  66 +const innerProps = ref<Partial<XTableProps>>()
  67 +
  68 +const getProps = computed(() => {
  69 + const options = innerProps.value || props.options
  70 + options.size = currentSize as any
  71 + options.height = 700
  72 + getOptionInitConfig(options)
  73 + getColumnsConfig(options)
  74 + getProxyConfig(options)
  75 + getPageConfig(options)
  76 + getToolBarConfig(options)
  77 + // console.log(options);
  78 + return {
  79 + ...options,
  80 + ...attrs
  81 + }
  82 +})
  83 +
  84 +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
  85 +
  86 +let proxyForm = false
  87 +
  88 +const getOptionInitConfig = (options: XTableProps) => {
  89 + options.size = currentSize as any
  90 + options.rowConfig = {
  91 + isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
  92 + isHover: true // 当鼠标移到行时,是否要高亮当前行
  93 + }
  94 +}
  95 +
  96 +// columns
  97 +const getColumnsConfig = (options: XTableProps) => {
  98 + const { allSchemas } = options
  99 + if (!allSchemas) return
  100 + if (allSchemas.printSchema) {
  101 + options.printConfig = {
  102 + columns: allSchemas.printSchema
  103 + }
  104 + }
  105 + if (allSchemas.formSchema) {
  106 + proxyForm = true
  107 + options.formConfig = {
  108 + enabled: true,
  109 + titleWidth: 100,
  110 + titleAlign: 'right',
  111 + items: allSchemas.searchSchema
  112 + }
  113 + }
  114 + if (allSchemas.tableSchema) {
  115 + options.columns = allSchemas.tableSchema
  116 + }
  117 +}
  118 +
  119 +// 动态请求
  120 +const getProxyConfig = (options: XTableProps) => {
  121 + const { getListApi, proxyConfig, data, isList } = options
  122 + if (proxyConfig || data) return
  123 + if (getListApi && isFunction(getListApi) && !isList) {
  124 + if (!isList) {
  125 + options.proxyConfig = {
  126 + seq: true, // 启用动态序号代理(分页之后索引自动计算为当前页的起始序号)
  127 + form: proxyForm, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
  128 + props: { result: 'list', total: 'total' },
  129 + ajax: {
  130 + query: async ({ page, form }) => {
  131 + let queryParams: any = Object.assign({}, JSON.parse(JSON.stringify(form)))
  132 + if (options.params) {
  133 + queryParams = Object.assign(queryParams, options.params)
  134 + }
  135 + if (!options?.treeConfig) {
  136 + queryParams.pageSize = page.pageSize
  137 + queryParams.pageNo = page.currentPage
  138 + }
  139 + return new Promise(async (resolve) => {
  140 + resolve(await getListApi(queryParams))
  141 + })
  142 + },
  143 + delete: ({ body }) => {
  144 + return new Promise(async (resolve) => {
  145 + if (options.deleteApi) {
  146 + resolve(await options.deleteApi(JSON.stringify(body)))
  147 + } else {
  148 + Promise.reject('未设置deleteApi')
  149 + }
  150 + })
  151 + },
  152 + queryAll: ({ form }) => {
  153 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form)))
  154 + return new Promise(async (resolve) => {
  155 + if (options.getAllListApi) {
  156 + resolve(await options.getAllListApi(queryParams))
  157 + } else {
  158 + resolve(await getListApi(queryParams))
  159 + }
  160 + })
  161 + }
  162 + }
  163 + }
  164 + } else {
  165 + options.proxyConfig = {
  166 + seq: true, // 启用动态序号代理(分页之后索引自动计算为当前页的起始序号)
  167 + form: true, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
  168 + props: { result: 'data' },
  169 + ajax: {
  170 + query: ({ form }) => {
  171 + let queryParams: any = Object.assign({}, JSON.parse(JSON.stringify(form)))
  172 + if (options?.params) {
  173 + queryParams = Object.assign(queryParams, options.params)
  174 + }
  175 + return new Promise(async (resolve) => {
  176 + resolve(await getListApi(queryParams))
  177 + })
  178 + }
  179 + }
  180 + }
  181 + }
  182 + }
  183 + if (options.exportListApi) {
  184 + options.exportConfig = {
  185 + filename: options?.exportName,
  186 + // 默认选中类型
  187 + type: 'csv',
  188 + // 自定义数据量列表
  189 + modes: options?.getAllListApi ? ['current', 'all'] : ['current'],
  190 + columns: options?.allSchemas?.printSchema
  191 + }
  192 + }
  193 +}
  194 +
  195 +// 分页
  196 +const getPageConfig = (options: XTableProps) => {
  197 + const { pagination, pagerConfig, treeConfig } = options
  198 + if (treeConfig) {
  199 + options.treeConfig = options.treeConfig
  200 + return
  201 + }
  202 + if (pagerConfig) return
  203 + if (pagination) {
  204 + if (isBoolean(pagination)) {
  205 + options.pagerConfig = {
  206 + border: false, // 带边框
  207 + background: true, // 带背景颜色
  208 + perfect: false, // 配套的样式
  209 + pageSize: 10, // 每页大小
  210 + pagerCount: 7, // 显示页码按钮的数量
  211 + autoHidden: false, // 当只有一页时自动隐藏
  212 + pageSizes: [5, 10, 20, 30, 50, 100], // 每页大小选项列表
  213 + layouts: [
  214 + 'PrevJump',
  215 + 'PrevPage',
  216 + 'JumpNumber',
  217 + 'NextPage',
  218 + 'NextJump',
  219 + 'Sizes',
  220 + 'FullJump',
  221 + 'Total'
  222 + ]
  223 + }
  224 + return
  225 + }
  226 + options.pagerConfig = pagination
  227 + } else {
  228 + if (pagination != false) {
  229 + options.pagerConfig = {
  230 + border: false, // 带边框
  231 + background: true, // 带背景颜色
  232 + perfect: false, // 配套的样式
  233 + pageSize: 10, // 每页大小
  234 + pagerCount: 7, // 显示页码按钮的数量
  235 + autoHidden: false, // 当只有一页时自动隐藏
  236 + pageSizes: [5, 10, 20, 30, 50, 100], // 每页大小选项列表
  237 + layouts: [
  238 + 'PrevJump',
  239 + 'PrevPage',
  240 + 'JumpNumber',
  241 + 'NextPage',
  242 + 'NextJump',
  243 + 'Sizes',
  244 + 'FullJump',
  245 + 'Total'
  246 + ]
  247 + }
  248 + }
  249 + }
  250 +}
  251 +
  252 +// tool bar
  253 +const getToolBarConfig = (options: XTableProps) => {
  254 + const { toolBar, toolbarConfig, topActionSlots } = options
  255 + if (toolbarConfig) return
  256 + if (toolBar) {
  257 + if (!isBoolean(toolBar)) {
  258 + options.toolbarConfig = toolBar
  259 + return
  260 + }
  261 + } else if (!topActionSlots) {
  262 + options.toolbarConfig = {
  263 + slots: { buttons: 'toolbar_buttons' }
  264 + }
  265 + }
  266 +}
  267 +
  268 +// 刷新列表
  269 +const reload = () => {
  270 + const g = unref(xGrid)
  271 + if (!g) {
  272 + return
  273 + }
  274 + g.commitProxy('query')
  275 +}
  276 +
  277 +// 删除
  278 +const deleteData = async (ids: string | number) => {
  279 + const g = unref(xGrid)
  280 + if (!g) {
  281 + return
  282 + }
  283 + const options = innerProps.value || props.options
  284 + if (!options.deleteApi) {
  285 + console.error('未传入delListApi')
  286 + return
  287 + }
  288 + return new Promise(async () => {
  289 + message.delConfirm().then(async () => {
  290 + await (options?.deleteApi && options?.deleteApi(ids))
  291 + message.success(t('common.delSuccess'))
  292 + // 刷新列表
  293 + reload()
  294 + })
  295 + })
  296 +}
  297 +
  298 +// 导出
  299 +const exportList = async (fileName?: string) => {
  300 + const g = unref(xGrid)
  301 + if (!g) {
  302 + return
  303 + }
  304 + const options = innerProps.value || props.options
  305 + if (!options?.exportListApi) {
  306 + console.error('未传入exportListApi')
  307 + return
  308 + }
  309 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(g.getProxyInfo()?.form)))
  310 + message.exportConfirm().then(async () => {
  311 + const res = await (options?.exportListApi && options?.exportListApi(queryParams))
  312 + download.excel(res as unknown as Blob, fileName ? fileName : 'excel.xls')
  313 + })
  314 +}
  315 +
  316 +// 获取查询参数
  317 +const getSearchData = () => {
  318 + const g = unref(xGrid)
  319 + if (!g) {
  320 + return
  321 + }
  322 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(g.getProxyInfo()?.form)))
  323 + return queryParams
  324 +}
  325 +
  326 +const setProps = (prop: Partial<XTableProps>) => {
  327 + innerProps.value = { ...unref(innerProps), ...prop }
  328 +}
  329 +
  330 +defineExpose({ reload, Ref: xGrid, getSearchData, deleteData, exportList })
  331 +emit('register', { reload, getSearchData, setProps, deleteData, exportList })
  332 +</script>
  333 +<style lang="scss">
  334 +@import './style/index.scss';
  335 +</style>
yudao-ui-admin-vue3/src/components/XTable/src/style/dark.scss 0 → 100644
  1 +// 修改样式变量
  2 +//@import 'vxe-table/styles/variable.scss';
  3 +
  4 +/*font*/
  5 +$vxe-font-color: #e5e7eb;
  6 +// $vxe-font-size: 14px !default;
  7 +// $vxe-font-size-medium: 16px !default;
  8 +// $vxe-font-size-small: 14px !default;
  9 +// $vxe-font-size-mini: 12px !default;
  10 +
  11 +/*color*/
  12 +$vxe-primary-color: #409eff !default;
  13 +$vxe-success-color: #67c23a !default;
  14 +$vxe-info-color: #909399 !default;
  15 +$vxe-warning-color: #e6a23c !default;
  16 +$vxe-danger-color: #f56c6c !default;
  17 +$vxe-disabled-color: #bfbfbf !default;
  18 +$vxe-primary-disabled-color: #c0c4cc !default;
  19 +
  20 +/*loading*/
  21 +$vxe-loading-color: $vxe-primary-color !default;
  22 +$vxe-loading-background-color: #1d1e1f !default;
  23 +$vxe-loading-z-index: 999 !default;
  24 +
  25 +/*icon*/
  26 +$vxe-icon-font-family: Verdana, Arial, Tahoma !default;
  27 +$vxe-icon-background-color: #e5e7eb !default;
  28 +
  29 +/*toolbar*/
  30 +$vxe-toolbar-background-color: #1d1e1f !default;
  31 +$vxe-toolbar-button-border: #dcdfe6 !default;
  32 +$vxe-toolbar-custom-active-background-color: #d9dadb !default;
  33 +$vxe-toolbar-panel-background-color: #e5e7eb !default;
  34 +
  35 +$vxe-table-font-color: #e5e7eb;
  36 +$vxe-table-header-background-color: #1d1e1f;
  37 +$vxe-table-body-background-color: #141414;
  38 +$vxe-table-row-striped-background-color: #1d1d1d;
  39 +$vxe-table-row-hover-background-color: #1d1e1f;
  40 +$vxe-table-row-hover-striped-background-color: #1e1e1e;
  41 +$vxe-table-footer-background-color: #1d1e1f;
  42 +$vxe-table-row-current-background-color: #302d2d;
  43 +$vxe-table-column-current-background-color: #302d2d;
  44 +$vxe-table-column-hover-background-color: #302d2d;
  45 +$vxe-table-row-hover-current-background-color: #302d2d;
  46 +$vxe-table-row-checkbox-checked-background-color: #3e3c37 !default;
  47 +$vxe-table-row-hover-checkbox-checked-background-color: #615a4a !default;
  48 +$vxe-table-menu-background-color: #1d1e1f;
  49 +$vxe-table-border-width: 1px !default;
  50 +$vxe-table-border-color: #4c4d4f !default;
  51 +$vxe-table-fixed-left-scrolling-box-shadow: 8px 0px 10px -5px rgba(0, 0, 0, 0.12) !default;
  52 +$vxe-table-fixed-right-scrolling-box-shadow: -8px 0px 10px -5px rgba(0, 0, 0, 0.12) !default;
  53 +
  54 +$vxe-form-background-color: #141414;
  55 +
  56 +/*pager*/
  57 +$vxe-pager-background-color: #1d1e1f !default;
  58 +$vxe-pager-perfect-background-color: #262727 !default;
  59 +$vxe-pager-perfect-button-background-color: #a7a3a3 !default;
  60 +
  61 +$vxe-input-background-color: #141414;
  62 +$vxe-input-border-color: #4c4d4f !default;
  63 +
  64 +$vxe-select-option-hover-background-color: #262626 !default;
  65 +$vxe-select-panel-background-color: #141414 !default;
  66 +$vxe-select-empty-color: #262626 !default;
  67 +$vxe-optgroup-title-color: #909399 !default;
  68 +
  69 +/*button*/
  70 +$vxe-button-default-background-color: #262626;
  71 +$vxe-button-dropdown-panel-background-color: #141414;
  72 +
  73 +/*modal*/
  74 +$vxe-modal-header-background-color: #141414;
  75 +$vxe-modal-body-background-color: #141414;
  76 +$vxe-modal-border-color: #3b3b3b;
  77 +
  78 +/*pulldown*/
  79 +$vxe-pulldown-panel-background-color: #262626 !default;
  80 +
  81 +@import 'vxe-table/styles/index';
yudao-ui-admin-vue3/src/components/XTable/src/style/index.scss 0 → 100644
  1 +@import 'vxe-table/styles/variable.scss';
  2 +@import 'vxe-table/styles/modules.scss';
  3 +// @import './theme/light.scss';
  4 +i {
  5 + border-color: initial;
  6 +}
yudao-ui-admin-vue3/src/components/XTable/src/style/light.scss 0 → 100644
  1 +// 修改样式变量
  2 +// /*font*/
  3 +// $vxe-font-size: 12px !default;
  4 +// $vxe-font-size-medium: 16px !default;
  5 +// $vxe-font-size-small: 14px !default;
  6 +// $vxe-font-size-mini: 12px !default;
  7 +/*color*/
  8 +$vxe-primary-color: #409eff !default;
  9 +$vxe-success-color: #67c23a !default;
  10 +$vxe-info-color: #909399 !default;
  11 +$vxe-warning-color: #e6a23c !default;
  12 +$vxe-danger-color: #f56c6c !default;
  13 +$vxe-disabled-color: #bfbfbf !default;
  14 +$vxe-primary-disabled-color: #c0c4cc !default;
  15 +
  16 +@import 'vxe-table/styles/index.scss';
yudao-ui-admin-vue3/src/components/XTable/src/type.ts 0 → 100644
  1 +import { CrudSchema } from '@/hooks/web/useCrudSchemas'
  2 +import type { VxeGridProps, VxeGridPropTypes, VxeTablePropTypes } from 'vxe-table'
  3 +
  4 +export type XTableProps<D = any> = VxeGridProps<D> & {
  5 + allSchemas?: CrudSchema
  6 + height?: number // 高度 默认730
  7 + topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽
  8 + treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置
  9 + isList?: boolean // 是否不带分页的list
  10 + getListApi?: Function
  11 + getAllListApi?: Function
  12 + deleteApi?: Function
  13 + exportListApi?: Function
  14 + exportName?: string // 导出文件夹名称
  15 + params?: any
  16 + pagination?: boolean | VxeGridPropTypes.PagerConfig
  17 + toolBar?: boolean | VxeGridPropTypes.ToolbarConfig
  18 + afterFetch?: Function
  19 +}
  20 +export type XColumns = VxeGridPropTypes.Columns
  21 +
  22 +export type VxeTableColumn = {
  23 + field: string
  24 + title?: string
  25 + children?: VxeTableColumn[]
  26 +} & Recordable
yudao-ui-admin-vue3/src/components/index.ts
@@ -4,6 +4,7 @@ import { Form } from &#39;@/components/Form&#39; @@ -4,6 +4,7 @@ import { Form } from &#39;@/components/Form&#39;
4 import { Table } from '@/components/Table' 4 import { Table } from '@/components/Table'
5 import { Search } from '@/components/Search' 5 import { Search } from '@/components/Search'
6 import { XModal } from '@/components/XModal' 6 import { XModal } from '@/components/XModal'
  7 +import { XTable } from '@/components/XTable'
7 import { XButton, XTextButton } from '@/components/XButton' 8 import { XButton, XTextButton } from '@/components/XButton'
8 import { DictTag } from '@/components/DictTag' 9 import { DictTag } from '@/components/DictTag'
9 import { ContentWrap } from '@/components/ContentWrap' 10 import { ContentWrap } from '@/components/ContentWrap'
@@ -15,6 +16,7 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; { @@ -15,6 +16,7 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; {
15 app.component('Table', Table) 16 app.component('Table', Table)
16 app.component('Search', Search) 17 app.component('Search', Search)
17 app.component('XModal', XModal) 18 app.component('XModal', XModal)
  19 + app.component('XTable', XTable)
18 app.component('XButton', XButton) 20 app.component('XButton', XButton)
19 app.component('XTextButton', XTextButton) 21 app.component('XTextButton', XTextButton)
20 app.component('DictTag', DictTag) 22 app.component('DictTag', DictTag)
yudao-ui-admin-vue3/src/hooks/web/useXTable.ts 0 → 100644
  1 +import { ref, unref } from 'vue'
  2 +import { XTableProps } from '@/components/XTable/src/type'
  3 +
  4 +export interface tableMethod {
  5 + reload: () => void
  6 + setProps: (props: XTableProps) => void
  7 + deleteData: (ids: string | number) => void
  8 + exportList: (fileName?: string) => void
  9 +}
  10 +
  11 +export const useXTable = (props: XTableProps): [Function, tableMethod] => {
  12 + const tableRef = ref<Nullable<tableMethod>>(null)
  13 +
  14 + const register = (instance) => {
  15 + tableRef.value = instance
  16 + props && instance.setProps(props)
  17 + }
  18 + const getInstance = (): tableMethod => {
  19 + const table = unref(tableRef)
  20 + if (!table) {
  21 + console.error('表格实例不存在')
  22 + }
  23 + return table as tableMethod
  24 + }
  25 + const methods: tableMethod = {
  26 + reload: () => getInstance().reload(),
  27 + setProps: (props) => getInstance().setProps(props),
  28 + deleteData: (ids: string | number) => getInstance().deleteData(ids),
  29 + exportList: (fileName?: string) => getInstance().exportList(fileName)
  30 + }
  31 + return [register, methods]
  32 +}
yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts
1 -import { App, unref, watch } from 'vue' 1 +import { App, unref } from 'vue'
2 import XEUtils from 'xe-utils' 2 import XEUtils from 'xe-utils'
3 -import './index.scss'  
4 import './renderer' 3 import './renderer'
5 import { i18n } from '@/plugins/vueI18n' 4 import { i18n } from '@/plugins/vueI18n'
6 -import { useAppStore } from '@/store/modules/app'  
7 import zhCN from 'vxe-table/lib/locale/lang/zh-CN' 5 import zhCN from 'vxe-table/lib/locale/lang/zh-CN'
8 import enUS from 'vxe-table/lib/locale/lang/en-US' 6 import enUS from 'vxe-table/lib/locale/lang/en-US'
9 import { 7 import {
@@ -46,21 +44,6 @@ import { @@ -46,21 +44,6 @@ import {
46 Table 44 Table
47 } from 'vxe-table' 45 } from 'vxe-table'
48 46
49 -const appStore = useAppStore()  
50 -watch(  
51 - () => appStore.getIsDark,  
52 - () => {  
53 - if (appStore.getIsDark) {  
54 - import('./theme/dark.scss')  
55 - } else {  
56 - import('./theme/light.scss')  
57 - }  
58 - },  
59 - {  
60 - deep: true,  
61 - immediate: true  
62 - }  
63 -)  
64 // 全局默认参数 47 // 全局默认参数
65 VXETable.setup({ 48 VXETable.setup({
66 size: 'medium', // 全局尺寸 49 size: 'medium', // 全局尺寸
yudao-ui-admin-vue3/src/views/infra/apiAccessLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #duration_default="{ row }"> 5 <template #duration_default="{ row }">
6 <span>{{ row.duration + 'ms' }}</span> 6 <span>{{ row.duration + 'ms' }}</span>
7 </template> 7 </template>
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 @click="handleDetail(row)" 17 @click="handleDetail(row)"
18 /> 18 />
19 </template> 19 </template>
20 - </vxe-grid> 20 + </XTable>
21 </ContentWrap> 21 </ContentWrap>
22 <XModal v-model="dialogVisible" :title="dialogTitle"> 22 <XModal v-model="dialogVisible" :title="dialogTitle">
23 <!-- 对话框(详情) --> 23 <!-- 对话框(详情) -->
@@ -38,15 +38,14 @@ @@ -38,15 +38,14 @@
38 <script setup lang="ts" name="ApiAccessLog"> 38 <script setup lang="ts" name="ApiAccessLog">
39 import { ref } from 'vue' 39 import { ref } from 'vue'
40 import { useI18n } from '@/hooks/web/useI18n' 40 import { useI18n } from '@/hooks/web/useI18n'
41 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
42 -import { VxeGridInstance } from 'vxe-table' 41 +import { useXTable } from '@/hooks/web/useXTable'
43 import { allSchemas } from './apiAccessLog.data' 42 import { allSchemas } from './apiAccessLog.data'
44 import * as ApiAccessLogApi from '@/api/infra/apiAccessLog' 43 import * as ApiAccessLogApi from '@/api/infra/apiAccessLog'
  44 +
45 const { t } = useI18n() // 国际化 45 const { t } = useI18n() // 国际化
46 46
47 // 列表相关的变量 47 // 列表相关的变量
48 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
49 -const { gridOptions } = useVxeGrid<ApiAccessLogApi.ApiAccessLogVO>({ 48 +const [registerTable] = useXTable({
50 allSchemas: allSchemas, 49 allSchemas: allSchemas,
51 topActionSlots: false, 50 topActionSlots: false,
52 getListApi: ApiAccessLogApi.getApiAccessLogPageApi 51 getListApi: ApiAccessLogApi.getApiAccessLogPageApi
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')" 40 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')"
41 /> 41 />
42 </template> 42 </template>
43 - </vxe-grid> 43 + </XTable>
44 </ContentWrap> 44 </ContentWrap>
45 <XModal v-model="dialogVisible" :title="dialogTitle"> 45 <XModal v-model="dialogVisible" :title="dialogTitle">
46 <!-- 对话框(详情) --> 46 <!-- 对话框(详情) -->
@@ -54,18 +54,17 @@ @@ -54,18 +54,17 @@
54 <script setup lang="ts" name="ApiErrorLog"> 54 <script setup lang="ts" name="ApiErrorLog">
55 import { ref } from 'vue' 55 import { ref } from 'vue'
56 import { useI18n } from '@/hooks/web/useI18n' 56 import { useI18n } from '@/hooks/web/useI18n'
57 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
58 -import { VxeGridInstance } from 'vxe-table' 57 +import { useXTable } from '@/hooks/web/useXTable'
59 import { allSchemas } from './apiErrorLog.data' 58 import { allSchemas } from './apiErrorLog.data'
60 import * as ApiErrorLogApi from '@/api/infra/apiErrorLog' 59 import * as ApiErrorLogApi from '@/api/infra/apiErrorLog'
61 import { InfraApiErrorLogProcessStatusEnum } from '@/utils/constants' 60 import { InfraApiErrorLogProcessStatusEnum } from '@/utils/constants'
62 import { useMessage } from '@/hooks/web/useMessage' 61 import { useMessage } from '@/hooks/web/useMessage'
63 -const message = useMessage() 62 +
64 const { t } = useI18n() // 国际化 63 const { t } = useI18n() // 国际化
  64 +const message = useMessage()
65 65
66 // ========== 列表相关 ========== 66 // ========== 列表相关 ==========
67 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
68 -const { gridOptions, getList, exportList } = useVxeGrid<ApiErrorLogApi.ApiErrorLogVO>({ 67 +const [registerTable, { reload, exportList }] = useXTable({
69 allSchemas: allSchemas, 68 allSchemas: allSchemas,
70 getListApi: ApiErrorLogApi.getApiErrorLogPageApi, 69 getListApi: ApiErrorLogApi.getApiErrorLogPageApi,
71 exportListApi: ApiErrorLogApi.exportApiErrorLogApi 70 exportListApi: ApiErrorLogApi.exportApiErrorLogApi
@@ -84,7 +83,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; { @@ -84,7 +83,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; {
84 } 83 }
85 // 导出 84 // 导出
86 const handleExport = async () => { 85 const handleExport = async () => {
87 - await exportList(xGrid, '错误数据.xls') 86 + await exportList('错误数据.xls')
88 } 87 }
89 // 异常处理操作 88 // 异常处理操作
90 const handleProcessClick = ( 89 const handleProcessClick = (
@@ -100,7 +99,7 @@ const handleProcessClick = ( @@ -100,7 +99,7 @@ const handleProcessClick = (
100 }) 99 })
101 .finally(async () => { 100 .finally(async () => {
102 // 刷新列表 101 // 刷新列表
103 - await getList(xGrid) 102 + await reload()
104 }) 103 })
105 .catch(() => {}) 104 .catch(() => {})
106 } 105 }
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:导入 --> 6 <!-- 操作:导入 -->
7 <XButton 7 <XButton
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 @click="handleGenTable(row)" 49 @click="handleGenTable(row)"
50 /> 50 />
51 </template> 51 </template>
52 - </vxe-grid> 52 + </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 <!-- 弹窗:导入表 --> 54 <!-- 弹窗:导入表 -->
55 <ImportTable ref="importRef" @ok="handleQuery()" /> 55 <ImportTable ref="importRef" @ok="handleQuery()" />
@@ -59,10 +59,9 @@ @@ -59,10 +59,9 @@
59 <script setup lang="ts" name="Codegen"> 59 <script setup lang="ts" name="Codegen">
60 import { ref } from 'vue' 60 import { ref } from 'vue'
61 import { useRouter } from 'vue-router' 61 import { useRouter } from 'vue-router'
62 -import { VxeGridInstance } from 'vxe-table'  
63 import { useI18n } from '@/hooks/web/useI18n' 62 import { useI18n } from '@/hooks/web/useI18n'
64 import { useMessage } from '@/hooks/web/useMessage' 63 import { useMessage } from '@/hooks/web/useMessage'
65 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 64 +import { useXTable } from '@/hooks/web/useXTable'
66 import download from '@/utils/download' 65 import download from '@/utils/download'
67 import * as CodegenApi from '@/api/infra/codegen' 66 import * as CodegenApi from '@/api/infra/codegen'
68 import { CodegenTableVO } from '@/api/infra/codegen/types' 67 import { CodegenTableVO } from '@/api/infra/codegen/types'
@@ -73,8 +72,7 @@ const { t } = useI18n() // 国际化 @@ -73,8 +72,7 @@ const { t } = useI18n() // 国际化
73 const message = useMessage() // 消息弹窗 72 const message = useMessage() // 消息弹窗
74 const { push } = useRouter() // 路由跳转 73 const { push } = useRouter() // 路由跳转
75 // 列表相关的变量 74 // 列表相关的变量
76 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
77 -const { gridOptions, getList, deleteData } = useVxeGrid<CodegenTableVO>({ 75 +const [registerTable, { reload, deleteData }] = useXTable({
78 allSchemas: allSchemas, 76 allSchemas: allSchemas,
79 getListApi: CodegenApi.getCodegenTablePageApi, 77 getListApi: CodegenApi.getCodegenTablePageApi,
80 deleteApi: CodegenApi.deleteCodegenTableApi 78 deleteApi: CodegenApi.deleteCodegenTableApi
@@ -112,10 +110,10 @@ const handleGenTable = async (row: CodegenTableVO) =&gt; { @@ -112,10 +110,10 @@ const handleGenTable = async (row: CodegenTableVO) =&gt; {
112 } 110 }
113 // 删除操作 111 // 删除操作
114 const handleDelete = async (rowId: number) => { 112 const handleDelete = async (rowId: number) => {
115 - await deleteData(xGrid, rowId) 113 + await deleteData(rowId)
116 } 114 }
117 // 查询操作 115 // 查询操作
118 const handleQuery = async () => { 116 const handleQuery = async () => {
119 - await getList(xGrid) 117 + await reload()
120 } 118 }
121 </script> 119 </script>
yudao-ui-admin-vue3/src/views/infra/config/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 @click="handleDelete(row.id)" 46 @click="handleDelete(row.id)"
47 /> 47 />
48 </template> 48 </template>
49 - </vxe-grid> 49 + </XTable>
50 </ContentWrap> 50 </ContentWrap>
51 51
52 <XModal v-model="dialogVisible" :title="dialogTitle"> 52 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -87,8 +87,7 @@ @@ -87,8 +87,7 @@
87 import { ref, unref } from 'vue' 87 import { ref, unref } from 'vue'
88 import { useI18n } from '@/hooks/web/useI18n' 88 import { useI18n } from '@/hooks/web/useI18n'
89 import { useMessage } from '@/hooks/web/useMessage' 89 import { useMessage } from '@/hooks/web/useMessage'
90 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
91 -import { VxeGridInstance } from 'vxe-table' 90 +import { useXTable } from '@/hooks/web/useXTable'
92 import { FormExpose } from '@/components/Form' 91 import { FormExpose } from '@/components/Form'
93 // 业务相关的 import 92 // 业务相关的 import
94 import * as ConfigApi from '@/api/infra/config' 93 import * as ConfigApi from '@/api/infra/config'
@@ -97,8 +96,7 @@ import { rules, allSchemas } from &#39;./config.data&#39; @@ -97,8 +96,7 @@ import { rules, allSchemas } from &#39;./config.data&#39;
97 const { t } = useI18n() // 国际化 96 const { t } = useI18n() // 国际化
98 const message = useMessage() // 消息弹窗 97 const message = useMessage() // 消息弹窗
99 // 列表相关的变量 98 // 列表相关的变量
100 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
101 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<ConfigApi.ConfigVO>({ 99 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
102 allSchemas: allSchemas, 100 allSchemas: allSchemas,
103 getListApi: ConfigApi.getConfigPageApi, 101 getListApi: ConfigApi.getConfigPageApi,
104 deleteApi: ConfigApi.deleteConfigApi, 102 deleteApi: ConfigApi.deleteConfigApi,
@@ -127,7 +125,7 @@ const handleCreate = () =&gt; { @@ -127,7 +125,7 @@ const handleCreate = () =&gt; {
127 125
128 // 导出操作 126 // 导出操作
129 const handleExport = async () => { 127 const handleExport = async () => {
130 - await exportList(xGrid, '配置.xls') 128 + await exportList('配置.xls')
131 } 129 }
132 130
133 // 修改操作 131 // 修改操作
@@ -147,7 +145,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -147,7 +145,7 @@ const handleDetail = async (rowId: number) =&gt; {
147 145
148 // 删除操作 146 // 删除操作
149 const handleDelete = async (rowId: number) => { 147 const handleDelete = async (rowId: number) => {
150 - await deleteData(xGrid, rowId) 148 + await deleteData(rowId)
151 } 149 }
152 150
153 // 提交按钮 151 // 提交按钮
@@ -171,7 +169,7 @@ const submitForm = async () =&gt; { @@ -171,7 +169,7 @@ const submitForm = async () =&gt; {
171 } finally { 169 } finally {
172 actionLoading.value = false 170 actionLoading.value = false
173 // 刷新列表 171 // 刷新列表
174 - await getList(xGrid) 172 + await reload()
175 } 173 }
176 } 174 }
177 }) 175 })
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 @click="handleDelete(row.id)" 34 @click="handleDelete(row.id)"
35 /> 35 />
36 </template> 36 </template>
37 - </vxe-grid> 37 + </XTable>
38 </ContentWrap> 38 </ContentWrap>
39 <XModal v-model="dialogVisible" :title="dialogTitle"> 39 <XModal v-model="dialogVisible" :title="dialogTitle">
40 <!-- 对话框(添加 / 修改) --> 40 <!-- 对话框(添加 / 修改) -->
@@ -69,9 +69,8 @@ @@ -69,9 +69,8 @@
69 // 全局相关的 import 69 // 全局相关的 import
70 import { ref, unref } from 'vue' 70 import { ref, unref } from 'vue'
71 import { useI18n } from '@/hooks/web/useI18n' 71 import { useI18n } from '@/hooks/web/useI18n'
  72 +import { useXTable } from '@/hooks/web/useXTable'
72 import { useMessage } from '@/hooks/web/useMessage' 73 import { useMessage } from '@/hooks/web/useMessage'
73 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
74 -import { VxeGridInstance } from 'vxe-table'  
75 import { FormExpose } from '@/components/Form' 74 import { FormExpose } from '@/components/Form'
76 // 业务相关的 import 75 // 业务相关的 import
77 import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig' 76 import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig'
@@ -80,8 +79,7 @@ import { rules, allSchemas } from &#39;./dataSourceConfig.data&#39; @@ -80,8 +79,7 @@ import { rules, allSchemas } from &#39;./dataSourceConfig.data&#39;
80 const { t } = useI18n() // 国际化 79 const { t } = useI18n() // 国际化
81 const message = useMessage() // 消息弹窗 80 const message = useMessage() // 消息弹窗
82 // 列表相关的变量 81 // 列表相关的变量
83 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
84 -const { gridOptions, getList, deleteData } = useVxeGrid<DataSourceConfiggApi.DataSourceConfigVO>({ 82 +const [registerTable, { reload, deleteData }] = useXTable({
85 allSchemas: allSchemas, 83 allSchemas: allSchemas,
86 isList: true, 84 isList: true,
87 getListApi: DataSourceConfiggApi.getDataSourceConfigListApi, 85 getListApi: DataSourceConfiggApi.getDataSourceConfigListApi,
@@ -125,7 +123,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -125,7 +123,7 @@ const handleDetail = async (rowId: number) =&gt; {
125 123
126 // 删除操作 124 // 删除操作
127 const handleDelete = async (rowId: number) => { 125 const handleDelete = async (rowId: number) => {
128 - await deleteData(xGrid, rowId) 126 + await deleteData(rowId)
129 } 127 }
130 128
131 // 提交按钮 129 // 提交按钮
@@ -149,7 +147,7 @@ const submitForm = async () =&gt; { @@ -149,7 +147,7 @@ const submitForm = async () =&gt; {
149 } finally { 147 } finally {
150 loading.value = false 148 loading.value = false
151 // 刷新列表 149 // 刷新列表
152 - await getList(xGrid) 150 + await reload()
153 } 151 }
154 } 152 }
155 }) 153 })
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 @click="handleDelete(row.id)" 44 @click="handleDelete(row.id)"
45 /> 45 />
46 </template> 46 </template>
47 - </vxe-grid> 47 + </XTable>
48 </ContentWrap> 48 </ContentWrap>
49 <XModal v-model="dialogVisible" :title="dialogTitle"> 49 <XModal v-model="dialogVisible" :title="dialogTitle">
50 <!-- 对话框(添加 / 修改) --> 50 <!-- 对话框(添加 / 修改) -->
@@ -173,8 +173,7 @@ import { @@ -173,8 +173,7 @@ import {
173 } from 'element-plus' 173 } from 'element-plus'
174 import { useI18n } from '@/hooks/web/useI18n' 174 import { useI18n } from '@/hooks/web/useI18n'
175 import { useMessage } from '@/hooks/web/useMessage' 175 import { useMessage } from '@/hooks/web/useMessage'
176 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
177 -import { VxeGridInstance } from 'vxe-table' 176 +import { useXTable } from '@/hooks/web/useXTable'
178 // 业务相关的 import 177 // 业务相关的 import
179 import * as FileConfigApi from '@/api/infra/fileConfig' 178 import * as FileConfigApi from '@/api/infra/fileConfig'
180 import { rules, allSchemas } from './fileConfig.data' 179 import { rules, allSchemas } from './fileConfig.data'
@@ -183,8 +182,7 @@ import { getIntDictOptions, DICT_TYPE } from &#39;@/utils/dict&#39; @@ -183,8 +182,7 @@ import { getIntDictOptions, DICT_TYPE } from &#39;@/utils/dict&#39;
183 const { t } = useI18n() // 国际化 182 const { t } = useI18n() // 国际化
184 const message = useMessage() // 消息弹窗 183 const message = useMessage() // 消息弹窗
185 // 列表相关的变量 184 // 列表相关的变量
186 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
187 -const { gridOptions, getList, deleteData } = useVxeGrid<FileConfigApi.FileConfigVO>({ 185 +const [registerTable, { reload, deleteData }] = useXTable({
188 allSchemas: allSchemas, 186 allSchemas: allSchemas,
189 getListApi: FileConfigApi.getFileConfigPageApi, 187 getListApi: FileConfigApi.getFileConfigPageApi,
190 deleteApi: FileConfigApi.deleteFileConfigApi 188 deleteApi: FileConfigApi.deleteFileConfigApi
@@ -276,7 +274,7 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; { @@ -276,7 +274,7 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; {
276 .confirm('是否确认修改配置【 ' + row.name + ' 】为主配置?', t('common.reminder')) 274 .confirm('是否确认修改配置【 ' + row.name + ' 】为主配置?', t('common.reminder'))
277 .then(async () => { 275 .then(async () => {
278 await FileConfigApi.updateFileConfigMasterApi(row.id) 276 await FileConfigApi.updateFileConfigMasterApi(row.id)
279 - await getList(xGrid) 277 + await reload()
280 }) 278 })
281 } 279 }
282 280
@@ -287,7 +285,7 @@ const handleTest = async (rowId: number) =&gt; { @@ -287,7 +285,7 @@ const handleTest = async (rowId: number) =&gt; {
287 285
288 // 删除操作 286 // 删除操作
289 const handleDelete = async (rowId: number) => { 287 const handleDelete = async (rowId: number) => {
290 - await deleteData(xGrid, rowId) 288 + await deleteData(rowId)
291 } 289 }
292 290
293 // 提交按钮 291 // 提交按钮
@@ -308,7 +306,7 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; { @@ -308,7 +306,7 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; {
308 dialogVisible.value = false 306 dialogVisible.value = false
309 } finally { 307 } finally {
310 actionLoading.value = false 308 actionLoading.value = false
311 - await getList(xGrid) 309 + await reload()
312 } 310 }
313 } 311 }
314 }) 312 })
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 @click="handleDelete(row.id)" 24 @click="handleDelete(row.id)"
25 /> 25 />
26 </template> 26 </template>
27 - </vxe-grid> 27 + </XTable>
28 </ContentWrap> 28 </ContentWrap>
29 <XModal v-model="dialogVisible" :title="dialogTitle"> 29 <XModal v-model="dialogVisible" :title="dialogTitle">
30 <!-- 对话框(详情) --> 30 <!-- 对话框(详情) -->
@@ -85,8 +85,7 @@ @@ -85,8 +85,7 @@
85 import { ref, unref } from 'vue' 85 import { ref, unref } from 'vue'
86 import { useI18n } from '@/hooks/web/useI18n' 86 import { useI18n } from '@/hooks/web/useI18n'
87 import { useMessage } from '@/hooks/web/useMessage' 87 import { useMessage } from '@/hooks/web/useMessage'
88 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
89 -import { VxeGridInstance } from 'vxe-table' 88 +import { useXTable } from '@/hooks/web/useXTable'
90 import { ElUpload, ElImage, UploadInstance, UploadRawFile } from 'element-plus' 89 import { ElUpload, ElImage, UploadInstance, UploadRawFile } from 'element-plus'
91 // 业务相关的 import 90 // 业务相关的 import
92 import { allSchemas } from './fileList.data' 91 import { allSchemas } from './fileList.data'
@@ -98,8 +97,7 @@ const { t } = useI18n() // 国际化 @@ -98,8 +97,7 @@ const { t } = useI18n() // 国际化
98 const message = useMessage() // 消息弹窗 97 const message = useMessage() // 消息弹窗
99 98
100 // 列表相关的变量 99 // 列表相关的变量
101 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
102 -const { gridOptions, getList, deleteData } = useVxeGrid<FileApi.FileVO>({ 100 +const [registerTable, { reload, deleteData }] = useXTable({
103 allSchemas: allSchemas, 101 allSchemas: allSchemas,
104 getListApi: FileApi.getFilePageApi, 102 getListApi: FileApi.getFilePageApi,
105 deleteApi: FileApi.deleteFileApi 103 deleteApi: FileApi.deleteFileApi
@@ -145,7 +143,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; { @@ -145,7 +143,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; {
145 message.success('上传成功') 143 message.success('上传成功')
146 uploadDialogVisible.value = false 144 uploadDialogVisible.value = false
147 uploadDisabled.value = false 145 uploadDisabled.value = false
148 - await getList(xGrid) 146 + await reload()
149 } 147 }
150 // 文件数超出提示 148 // 文件数超出提示
151 const handleExceed = (): void => { 149 const handleExceed = (): void => {
@@ -166,7 +164,7 @@ const handleDetail = (row: FileApi.FileVO) =&gt; { @@ -166,7 +164,7 @@ const handleDetail = (row: FileApi.FileVO) =&gt; {
166 164
167 // 删除操作 165 // 删除操作
168 const handleDelete = async (rowId: number) => { 166 const handleDelete = async (rowId: number) => {
169 - await deleteData(xGrid, rowId) 167 + await deleteData(rowId)
170 } 168 }
171 169
172 // ========== 复制相关 ========== 170 // ========== 复制相关 ==========
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="warning" 7 type="warning"
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 @click="handleDetail(row)" 29 @click="handleDetail(row)"
30 /> 30 />
31 </template> 31 </template>
32 - </vxe-grid> 32 + </XTable>
33 </ContentWrap> 33 </ContentWrap>
34 <XModal v-model="dialogVisible" :title="dialogTitle"> 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 <!-- 对话框(详情) --> 35 <!-- 对话框(详情) -->
@@ -51,15 +51,13 @@ @@ -51,15 +51,13 @@
51 import { ref } from 'vue' 51 import { ref } from 'vue'
52 import dayjs from 'dayjs' 52 import dayjs from 'dayjs'
53 import { useI18n } from '@/hooks/web/useI18n' 53 import { useI18n } from '@/hooks/web/useI18n'
54 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
55 -import { VxeGridInstance } from 'vxe-table' 54 +import { useXTable } from '@/hooks/web/useXTable'
56 import * as JobLogApi from '@/api/infra/jobLog' 55 import * as JobLogApi from '@/api/infra/jobLog'
57 import { allSchemas } from './jobLog.data' 56 import { allSchemas } from './jobLog.data'
58 57
59 const { t } = useI18n() // 国际化 58 const { t } = useI18n() // 国际化
60 // 列表相关的变量 59 // 列表相关的变量
61 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
62 -const { gridOptions, exportList } = useVxeGrid<JobLogApi.JobLogVO>({ 60 +const [registerTable, { exportList }] = useXTable({
63 allSchemas: allSchemas, 61 allSchemas: allSchemas,
64 getListApi: JobLogApi.getJobLogPageApi, 62 getListApi: JobLogApi.getJobLogPageApi,
65 exportListApi: JobLogApi.exportJobLogApi 63 exportListApi: JobLogApi.exportJobLogApi
@@ -81,6 +79,6 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; { @@ -81,6 +79,6 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; {
81 } 79 }
82 // 导出操作 80 // 导出操作
83 const handleExport = async () => { 81 const handleExport = async () => {
84 - await exportList(xGrid, '定时任务详情.xls') 82 + await exportList('定时任务详情.xls')
85 } 83 }
86 </script> 84 </script>
yudao-ui-admin-vue3/src/views/infra/job/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
83 </template> 83 </template>
84 </el-dropdown> 84 </el-dropdown>
85 </template> 85 </template>
86 - </vxe-grid> 86 + </XTable>
87 </ContentWrap> 87 </ContentWrap>
88 <XModal v-model="dialogVisible" :title="dialogTitle"> 88 <XModal v-model="dialogVisible" :title="dialogTitle">
89 <!-- 对话框(添加 / 修改) --> 89 <!-- 对话框(添加 / 修改) -->
@@ -134,8 +134,7 @@ import { useRouter } from &#39;vue-router&#39; @@ -134,8 +134,7 @@ import { useRouter } from &#39;vue-router&#39;
134 import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus' 134 import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus'
135 import { useI18n } from '@/hooks/web/useI18n' 135 import { useI18n } from '@/hooks/web/useI18n'
136 import { useMessage } from '@/hooks/web/useMessage' 136 import { useMessage } from '@/hooks/web/useMessage'
137 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
138 -import { VxeGridInstance } from 'vxe-table' 137 +import { useXTable } from '@/hooks/web/useXTable'
139 import { FormExpose } from '@/components/Form' 138 import { FormExpose } from '@/components/Form'
140 import { Crontab } from '@/components/Crontab' 139 import { Crontab } from '@/components/Crontab'
141 import * as JobApi from '@/api/infra/job' 140 import * as JobApi from '@/api/infra/job'
@@ -147,8 +146,7 @@ const message = useMessage() // 消息弹窗 @@ -147,8 +146,7 @@ const message = useMessage() // 消息弹窗
147 const { push } = useRouter() 146 const { push } = useRouter()
148 147
149 // 列表相关的变量 148 // 列表相关的变量
150 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
151 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<JobApi.JobVO>({ 149 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
152 allSchemas: allSchemas, 150 allSchemas: allSchemas,
153 getListApi: JobApi.getJobPageApi, 151 getListApi: JobApi.getJobPageApi,
154 deleteApi: JobApi.deleteJobApi, 152 deleteApi: JobApi.deleteJobApi,
@@ -183,7 +181,7 @@ const handleCreate = () =&gt; { @@ -183,7 +181,7 @@ const handleCreate = () =&gt; {
183 181
184 // 导出操作 182 // 导出操作
185 const handleExport = async () => { 183 const handleExport = async () => {
186 - await exportList(xGrid, '定时任务.xls') 184 + await exportList('定时任务.xls')
187 } 185 }
188 186
189 // 修改操作 187 // 修改操作
@@ -252,7 +250,7 @@ const parseTime = (time) =&gt; { @@ -252,7 +250,7 @@ const parseTime = (time) =&gt; {
252 250
253 // 删除操作 251 // 删除操作
254 const handleDelete = async (rowId: number) => { 252 const handleDelete = async (rowId: number) => {
255 - await deleteData(xGrid, rowId) 253 + await deleteData(rowId)
256 } 254 }
257 const handleChangeStatus = async (row: JobApi.JobVO) => { 255 const handleChangeStatus = async (row: JobApi.JobVO) => {
258 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭' 256 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭'
@@ -267,7 +265,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; { @@ -267,7 +265,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; {
267 : InfraJobStatusEnum.STOP 265 : InfraJobStatusEnum.STOP
268 await JobApi.updateJobStatusApi(row.id, status) 266 await JobApi.updateJobStatusApi(row.id, status)
269 message.success(text + '成功') 267 message.success(text + '成功')
270 - await getList(xGrid) 268 + await reload()
271 }) 269 })
272 .catch(() => { 270 .catch(() => {
273 row.status = 271 row.status =
@@ -289,7 +287,7 @@ const handleRun = (row: JobApi.JobVO) =&gt; { @@ -289,7 +287,7 @@ const handleRun = (row: JobApi.JobVO) =&gt; {
289 message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder')).then(async () => { 287 message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder')).then(async () => {
290 await JobApi.runJobApi(row.id) 288 await JobApi.runJobApi(row.id)
291 message.success('执行成功') 289 message.success('执行成功')
292 - await getList(xGrid) 290 + await reload()
293 }) 291 })
294 } 292 }
295 // 提交按钮 293 // 提交按钮
@@ -312,7 +310,7 @@ const submitForm = async () =&gt; { @@ -312,7 +310,7 @@ const submitForm = async () =&gt; {
312 dialogVisible.value = false 310 dialogVisible.value = false
313 } finally { 311 } finally {
314 actionLoading.value = false 312 actionLoading.value = false
315 - await getList(xGrid) 313 + await reload()
316 } 314 }
317 } 315 }
318 }) 316 })
yudao-ui-admin-vue3/src/views/pay/app/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 @click="handleDelete(row.id)" 43 @click="handleDelete(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 48
49 <XModal v-model="dialogVisible" :title="dialogTitle"> 49 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 import { rules, allSchemas } from './app.data' 84 import { rules, allSchemas } from './app.data'
86 import * as AppApi from '@/api/pay/app' 85 import * as AppApi from '@/api/pay/app'
@@ -89,8 +88,7 @@ const { t } = useI18n() // 国际化 @@ -89,8 +88,7 @@ const { t } = useI18n() // 国际化
89 const message = useMessage() // 消息弹窗 88 const message = useMessage() // 消息弹窗
90 89
91 // 列表相关的变量 90 // 列表相关的变量
92 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
93 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<AppApi.AppVO>({ 91 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
94 allSchemas: allSchemas, 92 allSchemas: allSchemas,
95 getListApi: AppApi.getAppPageApi, 93 getListApi: AppApi.getAppPageApi,
96 deleteApi: AppApi.deleteAppApi, 94 deleteApi: AppApi.deleteAppApi,
@@ -119,7 +117,7 @@ const handleCreate = () =&gt; { @@ -119,7 +117,7 @@ const handleCreate = () =&gt; {
119 117
120 // 导出操作 118 // 导出操作
121 const handleExport = async () => { 119 const handleExport = async () => {
122 - await exportList(xGrid, '应用信息.xls') 120 + await exportList('应用信息.xls')
123 } 121 }
124 122
125 // 修改操作 123 // 修改操作
@@ -139,7 +137,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -139,7 +137,7 @@ const handleDetail = async (rowId: number) =&gt; {
139 137
140 // 删除操作 138 // 删除操作
141 const handleDelete = async (rowId: number) => { 139 const handleDelete = async (rowId: number) => {
142 - await deleteData(xGrid, rowId) 140 + await deleteData(rowId)
143 } 141 }
144 142
145 // 提交按钮 143 // 提交按钮
@@ -163,7 +161,7 @@ const submitForm = async () =&gt; { @@ -163,7 +161,7 @@ const submitForm = async () =&gt; {
163 } finally { 161 } finally {
164 actionLoading.value = false 162 actionLoading.value = false
165 // 刷新列表 163 // 刷新列表
166 - await getList(xGrid) 164 + await reload()
167 } 165 }
168 } 166 }
169 }) 167 })
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 @click="handleDelete(row.id)" 43 @click="handleDelete(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <XModal v-model="dialogVisible" :title="dialogTitle"> 48 <XModal v-model="dialogVisible" :title="dialogTitle">
49 <!-- 对话框(添加 / 修改) --> 49 <!-- 对话框(添加 / 修改) -->
@@ -78,8 +78,7 @@ @@ -78,8 +78,7 @@
78 import { ref, unref } from 'vue' 78 import { ref, unref } from 'vue'
79 import { useI18n } from '@/hooks/web/useI18n' 79 import { useI18n } from '@/hooks/web/useI18n'
80 import { useMessage } from '@/hooks/web/useMessage' 80 import { useMessage } from '@/hooks/web/useMessage'
81 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
82 -import { VxeGridInstance } from 'vxe-table' 81 +import { useXTable } from '@/hooks/web/useXTable'
83 import { FormExpose } from '@/components/Form' 82 import { FormExpose } from '@/components/Form'
84 import { rules, allSchemas } from './merchant.data' 83 import { rules, allSchemas } from './merchant.data'
85 import * as MerchantApi from '@/api/pay/merchant' 84 import * as MerchantApi from '@/api/pay/merchant'
@@ -87,8 +86,7 @@ import * as MerchantApi from &#39;@/api/pay/merchant&#39; @@ -87,8 +86,7 @@ import * as MerchantApi from &#39;@/api/pay/merchant&#39;
87 const { t } = useI18n() // 国际化 86 const { t } = useI18n() // 国际化
88 const message = useMessage() // 消息弹窗 87 const message = useMessage() // 消息弹窗
89 // 列表相关的变量 88 // 列表相关的变量
90 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
91 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<MerchantApi.MerchantVO>({ 89 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
92 allSchemas: allSchemas, 90 allSchemas: allSchemas,
93 getListApi: MerchantApi.getMerchantPageApi, 91 getListApi: MerchantApi.getMerchantPageApi,
94 deleteApi: MerchantApi.deleteMerchantApi, 92 deleteApi: MerchantApi.deleteMerchantApi,
@@ -117,7 +115,7 @@ const handleCreate = () =&gt; { @@ -117,7 +115,7 @@ const handleCreate = () =&gt; {
117 115
118 // 导出操作 116 // 导出操作
119 const handleExport = async () => { 117 const handleExport = async () => {
120 - await exportList(xGrid, '商户列表.xls') 118 + await exportList('商户列表.xls')
121 } 119 }
122 120
123 // 修改操作 121 // 修改操作
@@ -137,7 +135,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -137,7 +135,7 @@ const handleDetail = async (rowId: number) =&gt; {
137 135
138 // 删除操作 136 // 删除操作
139 const handleDelete = async (rowId: number) => { 137 const handleDelete = async (rowId: number) => {
140 - await deleteData(xGrid, rowId) 138 + await deleteData(rowId)
141 } 139 }
142 140
143 // 提交按钮 141 // 提交按钮
@@ -161,7 +159,7 @@ const submitForm = async () =&gt; { @@ -161,7 +159,7 @@ const submitForm = async () =&gt; {
161 } finally { 159 } finally {
162 actionLoading.value = false 160 actionLoading.value = false
163 // 刷新列表 161 // 刷新列表
164 - await getList(xGrid) 162 + await reload()
165 } 163 }
166 } 164 }
167 }) 165 })
yudao-ui-admin-vue3/src/views/pay/order/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 @click="handleDetail(row.id)" 29 @click="handleDetail(row.id)"
30 /> 30 />
31 </template> 31 </template>
32 - </vxe-grid> 32 + </XTable>
33 </ContentWrap> 33 </ContentWrap>
34 <XModal v-model="dialogVisible" :title="dialogTitle"> 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 <!-- 对话框(详情) --> 35 <!-- 对话框(详情) -->
@@ -44,15 +44,13 @@ @@ -44,15 +44,13 @@
44 <script setup lang="ts" name="Order"> 44 <script setup lang="ts" name="Order">
45 import { ref } from 'vue' 45 import { ref } from 'vue'
46 import { useI18n } from '@/hooks/web/useI18n' 46 import { useI18n } from '@/hooks/web/useI18n'
47 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
48 -import { VxeGridInstance } from 'vxe-table' 47 +import { useXTable } from '@/hooks/web/useXTable'
49 import { allSchemas } from './order.data' 48 import { allSchemas } from './order.data'
50 import * as OrderApi from '@/api/pay/order' 49 import * as OrderApi from '@/api/pay/order'
51 50
52 const { t } = useI18n() // 国际化 51 const { t } = useI18n() // 国际化
53 // 列表相关的变量 52 // 列表相关的变量
54 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
55 -const { gridOptions, exportList } = useVxeGrid<OrderApi.OrderVO>({ 53 +const [registerTable, { exportList }] = useXTable({
56 allSchemas: allSchemas, 54 allSchemas: allSchemas,
57 getListApi: OrderApi.getOrderPageApi, 55 getListApi: OrderApi.getOrderPageApi,
58 exportListApi: OrderApi.exportOrderApi 56 exportListApi: OrderApi.exportOrderApi
@@ -76,7 +74,7 @@ const handleCreate = () =&gt; { @@ -76,7 +74,7 @@ const handleCreate = () =&gt; {
76 } 74 }
77 // 导出操作 75 // 导出操作
78 const handleExport = async () => { 76 const handleExport = async () => {
79 - await exportList(xGrid, '订单数据.xls') 77 + await exportList('订单数据.xls')
80 } 78 }
81 79
82 // 详情操作 80 // 详情操作
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:导出 --> 6 <!-- 操作:导出 -->
7 <XButton 7 <XButton
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 @click="handleDetail(row.id)" 21 @click="handleDetail(row.id)"
22 /> 22 />
23 </template> 23 </template>
24 - </vxe-grid> 24 + </XTable>
25 </ContentWrap> 25 </ContentWrap>
26 26
27 <XModal v-model="dialogVisible" :title="t('action.detail')"> 27 <XModal v-model="dialogVisible" :title="t('action.detail')">
@@ -36,16 +36,14 @@ @@ -36,16 +36,14 @@
36 <script setup lang="ts" name="Refund"> 36 <script setup lang="ts" name="Refund">
37 import { ref } from 'vue' 37 import { ref } from 'vue'
38 import { useI18n } from '@/hooks/web/useI18n' 38 import { useI18n } from '@/hooks/web/useI18n'
39 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
40 -import { VxeGridInstance } from 'vxe-table' 39 +import { useXTable } from '@/hooks/web/useXTable'
41 import { allSchemas } from './refund.data' 40 import { allSchemas } from './refund.data'
42 import * as RefundApi from '@/api/pay/refund' 41 import * as RefundApi from '@/api/pay/refund'
43 42
44 const { t } = useI18n() // 国际化 43 const { t } = useI18n() // 国际化
45 44
46 // 列表相关的变量 45 // 列表相关的变量
47 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
48 -const { gridOptions, exportList } = useVxeGrid<RefundApi.RefundVO>({ 46 +const [registerTable, { exportList }] = useXTable({
49 allSchemas: allSchemas, 47 allSchemas: allSchemas,
50 getListApi: RefundApi.getRefundPageApi, 48 getListApi: RefundApi.getRefundPageApi,
51 exportListApi: RefundApi.exportRefundApi 49 exportListApi: RefundApi.exportRefundApi
@@ -53,7 +51,7 @@ const { gridOptions, exportList } = useVxeGrid&lt;RefundApi.RefundVO&gt;({ @@ -53,7 +51,7 @@ const { gridOptions, exportList } = useVxeGrid&lt;RefundApi.RefundVO&gt;({
53 51
54 // 导出操作 52 // 导出操作
55 const handleExport = async () => { 53 const handleExport = async () => {
56 - await exportList(xGrid, '退款订单.xls') 54 + await exportList('退款订单.xls')
57 } 55 }
58 56
59 // ========== CRUD 相关 ========== 57 // ========== CRUD 相关 ==========
yudao-ui-admin-vue3/src/views/system/dept/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" show-overflow class="xtable-scrollbar"> 4 + <XTable @register="registerTable" show-overflow>
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 @click="handleDelete(row.id)" 33 @click="handleDelete(row.id)"
34 /> 34 />
35 </template> 35 </template>
36 - </vxe-grid> 36 + </XTable>
37 </ContentWrap> 37 </ContentWrap>
38 <!-- 添加或修改菜单对话框 --> 38 <!-- 添加或修改菜单对话框 -->
39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle"> 39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle">
@@ -81,7 +81,7 @@ import { VxeGridInstance } from &#39;vxe-table&#39; @@ -81,7 +81,7 @@ import { VxeGridInstance } from &#39;vxe-table&#39;
81 import { handleTree, defaultProps } from '@/utils/tree' 81 import { handleTree, defaultProps } from '@/utils/tree'
82 import { useI18n } from '@/hooks/web/useI18n' 82 import { useI18n } from '@/hooks/web/useI18n'
83 import { useMessage } from '@/hooks/web/useMessage' 83 import { useMessage } from '@/hooks/web/useMessage'
84 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 84 +import { useXTable } from '@/hooks/web/useXTable'
85 import { FormExpose } from '@/components/Form' 85 import { FormExpose } from '@/components/Form'
86 import { allSchemas, rules } from './dept.data' 86 import { allSchemas, rules } from './dept.data'
87 import * as DeptApi from '@/api/system/dept' 87 import * as DeptApi from '@/api/system/dept'
@@ -119,7 +119,7 @@ const getTree = async () =&gt; { @@ -119,7 +119,7 @@ const getTree = async () =&gt; {
119 dept.children = handleTree(res) 119 dept.children = handleTree(res)
120 deptOptions.value.push(dept) 120 deptOptions.value.push(dept)
121 } 121 }
122 -const { gridOptions, getList, deleteData } = useVxeGrid<DeptApi.DeptVO>({ 122 +const [registerTable, { reload, deleteData }] = useXTable({
123 allSchemas: allSchemas, 123 allSchemas: allSchemas,
124 treeConfig: treeConfig, 124 treeConfig: treeConfig,
125 getListApi: DeptApi.getDeptPageApi, 125 getListApi: DeptApi.getDeptPageApi,
@@ -168,7 +168,7 @@ const submitForm = async () =&gt; { @@ -168,7 +168,7 @@ const submitForm = async () =&gt; {
168 dialogVisible.value = false 168 dialogVisible.value = false
169 } finally { 169 } finally {
170 actionLoading.value = false 170 actionLoading.value = false
171 - await getList(xGrid) 171 + await reload()
172 } 172 }
173 } 173 }
174 }) 174 })
@@ -176,7 +176,7 @@ const submitForm = async () =&gt; { @@ -176,7 +176,7 @@ const submitForm = async () =&gt; {
176 176
177 // 删除操作 177 // 删除操作
178 const handleDelete = async (rowId: number) => { 178 const handleDelete = async (rowId: number) => {
179 - await deleteData(xGrid, rowId) 179 + await deleteData(rowId)
180 } 180 }
181 181
182 const userNicknameFormat = (row) => { 182 const userNicknameFormat = (row) => {
yudao-ui-admin-vue3/src/views/system/dict/index.vue
@@ -7,12 +7,7 @@ @@ -7,12 +7,7 @@
7 <span>字典分类</span> 7 <span>字典分类</span>
8 </div> 8 </div>
9 </template> 9 </template>
10 - <vxe-grid  
11 - ref="xTypeGrid"  
12 - v-bind="typeGridOptions"  
13 - @cell-click="cellClickEvent"  
14 - class="xtable-scrollbar"  
15 - > 10 + <XTable @register="registerType" @cell-click="cellClickEvent">
16 <!-- 操作:新增类型 --> 11 <!-- 操作:新增类型 -->
17 <template #toolbar_buttons> 12 <template #toolbar_buttons>
18 <XButton 13 <XButton
@@ -39,7 +34,7 @@ @@ -39,7 +34,7 @@
39 @click="handleTypeDelete(row.id)" 34 @click="handleTypeDelete(row.id)"
40 /> 35 />
41 </template> 36 </template>
42 - </vxe-grid> 37 + </XTable>
43 <!-- @星语:分页和列表重叠在一起了 --> 38 <!-- @星语:分页和列表重叠在一起了 -->
44 </el-card> 39 </el-card>
45 <!-- ====== 字典数据 ====== --> 40 <!-- ====== 字典数据 ====== -->
@@ -55,7 +50,7 @@ @@ -55,7 +50,7 @@
55 </div> 50 </div>
56 <div v-if="tableTypeSelect"> 51 <div v-if="tableTypeSelect">
57 <!-- 列表 --> 52 <!-- 列表 -->
58 - <vxe-grid ref="xDataGrid" v-bind="dataGridOptions" class="xtable-scrollbar"> 53 + <XTable @register="registerData">
59 <!-- 操作:新增数据 --> 54 <!-- 操作:新增数据 -->
60 <template #toolbar_buttons> 55 <template #toolbar_buttons>
61 <XButton 56 <XButton
@@ -82,7 +77,7 @@ @@ -82,7 +77,7 @@
82 @click="handleDataDelete(row.id)" 77 @click="handleDataDelete(row.id)"
83 /> 78 />
84 </template> 79 </template>
85 - </vxe-grid> 80 + </XTable>
86 </div> 81 </div>
87 </el-card> 82 </el-card>
88 <XModal id="dictModel" v-model="dialogVisible" :title="dialogTitle"> 83 <XModal id="dictModel" v-model="dialogVisible" :title="dialogTitle">
@@ -130,8 +125,8 @@ @@ -130,8 +125,8 @@
130 import { ref, unref, reactive } from 'vue' 125 import { ref, unref, reactive } from 'vue'
131 import { useI18n } from '@/hooks/web/useI18n' 126 import { useI18n } from '@/hooks/web/useI18n'
132 import { useMessage } from '@/hooks/web/useMessage' 127 import { useMessage } from '@/hooks/web/useMessage'
133 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
134 -import { VxeGridInstance, VxeTableEvents } from 'vxe-table' 128 +import { useXTable } from '@/hooks/web/useXTable'
  129 +import { VxeTableEvents } from 'vxe-table'
135 import { FormExpose } from '@/components/Form' 130 import { FormExpose } from '@/components/Form'
136 import { ElInput, ElTag, ElCard } from 'element-plus' 131 import { ElInput, ElTag, ElCard } from 'element-plus'
137 import * as DictTypeSchemas from './dict.type' 132 import * as DictTypeSchemas from './dict.type'
@@ -143,28 +138,18 @@ import { DictDataVO, DictTypeVO } from &#39;@/api/system/dict/types&#39; @@ -143,28 +138,18 @@ import { DictDataVO, DictTypeVO } from &#39;@/api/system/dict/types&#39;
143 const { t } = useI18n() // 国际化 138 const { t } = useI18n() // 国际化
144 const message = useMessage() // 消息弹窗 139 const message = useMessage() // 消息弹窗
145 140
146 -const xTypeGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
147 -const {  
148 - gridOptions: typeGridOptions,  
149 - getList: typeGetList,  
150 - deleteData: typeDeleteData  
151 -} = useVxeGrid<DictTypeVO>({ 141 +const [registerType, { reload: typeGetList, deleteData: typeDeleteData }] = useXTable({
152 allSchemas: DictTypeSchemas.allSchemas, 142 allSchemas: DictTypeSchemas.allSchemas,
153 getListApi: DictTypeApi.getDictTypePageApi, 143 getListApi: DictTypeApi.getDictTypePageApi,
154 deleteApi: DictTypeApi.deleteDictTypeApi 144 deleteApi: DictTypeApi.deleteDictTypeApi
155 }) 145 })
156 146
157 -const xDataGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
158 const queryParams = reactive({ 147 const queryParams = reactive({
159 dictType: null 148 dictType: null
160 }) 149 })
161 -const {  
162 - gridOptions: dataGridOptions,  
163 - getList: dataGetList,  
164 - deleteData: dataDeleteData  
165 -} = useVxeGrid<DictDataVO>({ 150 +const [registerData, { reload: dataGetList, deleteData: dataDeleteData }] = useXTable({
166 allSchemas: DictDataSchemas.allSchemas, 151 allSchemas: DictDataSchemas.allSchemas,
167 - queryParams: queryParams, 152 + params: queryParams,
168 getListApi: DictDataApi.getDictDataPageApi, 153 getListApi: DictDataApi.getDictDataPageApi,
169 deleteApi: DictDataApi.deleteDictDataApi 154 deleteApi: DictDataApi.deleteDictDataApi
170 }) 155 })
@@ -199,7 +184,7 @@ const tableTypeSelect = ref(false) @@ -199,7 +184,7 @@ const tableTypeSelect = ref(false)
199 const cellClickEvent: VxeTableEvents.CellClick = async ({ row }) => { 184 const cellClickEvent: VxeTableEvents.CellClick = async ({ row }) => {
200 tableTypeSelect.value = true 185 tableTypeSelect.value = true
201 queryParams.dictType = row['type'] 186 queryParams.dictType = row['type']
202 - await dataGetList(xDataGrid) 187 + await dataGetList()
203 parentType.value = row['type'] 188 parentType.value = row['type']
204 } 189 }
205 // 弹出框 190 // 弹出框
@@ -219,11 +204,11 @@ const setDialogTile = (type: string) =&gt; { @@ -219,11 +204,11 @@ const setDialogTile = (type: string) =&gt; {
219 204
220 // 删除操作 205 // 删除操作
221 const handleTypeDelete = async (rowId: number) => { 206 const handleTypeDelete = async (rowId: number) => {
222 - await typeDeleteData(xTypeGrid, rowId) 207 + await typeDeleteData(rowId)
223 } 208 }
224 209
225 const handleDataDelete = async (rowId: number) => { 210 const handleDataDelete = async (rowId: number) => {
226 - await dataDeleteData(xDataGrid, rowId) 211 + await dataDeleteData(rowId)
227 } 212 }
228 213
229 // 提交按钮 214 // 提交按钮
@@ -247,7 +232,7 @@ const submitTypeForm = async () =&gt; { @@ -247,7 +232,7 @@ const submitTypeForm = async () =&gt; {
247 dialogVisible.value = false 232 dialogVisible.value = false
248 } finally { 233 } finally {
249 actionLoading.value = false 234 actionLoading.value = false
250 - typeGetList(xTypeGrid) 235 + typeGetList()
251 } 236 }
252 } 237 }
253 }) 238 })
@@ -272,7 +257,7 @@ const submitDataForm = async () =&gt; { @@ -272,7 +257,7 @@ const submitDataForm = async () =&gt; {
272 dialogVisible.value = false 257 dialogVisible.value = false
273 } finally { 258 } finally {
274 actionLoading.value = false 259 actionLoading.value = false
275 - dataGetList(xDataGrid) 260 + dataGetList()
276 } 261 }
277 } 262 }
278 }) 263 })
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 @click="handleDelete(row.id)" 35 @click="handleDelete(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 <!-- 弹窗 --> 40 <!-- 弹窗 -->
41 <XModal id="errorCodeModel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="errorCodeModel" v-model="dialogVisible" :title="dialogTitle">
@@ -71,8 +71,7 @@ @@ -71,8 +71,7 @@
71 import { ref, unref } from 'vue' 71 import { ref, unref } from 'vue'
72 import { useI18n } from '@/hooks/web/useI18n' 72 import { useI18n } from '@/hooks/web/useI18n'
73 import { useMessage } from '@/hooks/web/useMessage' 73 import { useMessage } from '@/hooks/web/useMessage'
74 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
75 -import { VxeGridInstance } from 'vxe-table' 74 +import { useXTable } from '@/hooks/web/useXTable'
76 import { FormExpose } from '@/components/Form' 75 import { FormExpose } from '@/components/Form'
77 // 业务相关的 import 76 // 业务相关的 import
78 import { rules, allSchemas } from './errorCode.data' 77 import { rules, allSchemas } from './errorCode.data'
@@ -81,8 +80,7 @@ import * as ErrorCodeApi from &#39;@/api/system/errorCode&#39; @@ -81,8 +80,7 @@ import * as ErrorCodeApi from &#39;@/api/system/errorCode&#39;
81 const { t } = useI18n() // 国际化 80 const { t } = useI18n() // 国际化
82 const message = useMessage() // 消息弹窗 81 const message = useMessage() // 消息弹窗
83 // 列表相关的变量 82 // 列表相关的变量
84 -const xGrid = ref<VxeGridInstance>() // grid Ref  
85 -const { gridOptions, getList, deleteData } = useVxeGrid<ErrorCodeApi.ErrorCodeVO>({ 83 +const [registerTable, { reload, deleteData }] = useXTable({
86 allSchemas: allSchemas, 84 allSchemas: allSchemas,
87 getListApi: ErrorCodeApi.getErrorCodePageApi, 85 getListApi: ErrorCodeApi.getErrorCodePageApi,
88 deleteApi: ErrorCodeApi.deleteErrorCodeApi 86 deleteApi: ErrorCodeApi.deleteErrorCodeApi
@@ -125,7 +123,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -125,7 +123,7 @@ const handleDetail = async (rowId: number) =&gt; {
125 123
126 // 删除操作 124 // 删除操作
127 const handleDelete = async (rowId: number) => { 125 const handleDelete = async (rowId: number) => {
128 - await deleteData(xGrid, rowId) 126 + await deleteData(rowId)
129 } 127 }
130 128
131 // 提交新增/修改的表单 129 // 提交新增/修改的表单
@@ -149,7 +147,7 @@ const submitForm = async () =&gt; { @@ -149,7 +147,7 @@ const submitForm = async () =&gt; {
149 } finally { 147 } finally {
150 actionLoading.value = false 148 actionLoading.value = false
151 // 刷新列表 149 // 刷新列表
152 - await getList(xGrid) 150 + await reload()
153 } 151 }
154 } 152 }
155 }) 153 })
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <!-- 操作:详情 --> 15 <!-- 操作:详情 -->
16 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 16 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
17 </template> 17 </template>
18 - </vxe-grid> 18 + </XTable>
19 </ContentWrap> 19 </ContentWrap>
20 <!-- 弹窗 --> 20 <!-- 弹窗 -->
21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
@@ -31,16 +31,14 @@ @@ -31,16 +31,14 @@
31 // 全局相关的 import 31 // 全局相关的 import
32 import { ref } from 'vue' 32 import { ref } from 'vue'
33 import { useI18n } from '@/hooks/web/useI18n' 33 import { useI18n } from '@/hooks/web/useI18n'
34 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
35 -import { VxeGridInstance } from 'vxe-table' 34 +import { useXTable } from '@/hooks/web/useXTable'
36 // 业务相关的 import 35 // 业务相关的 import
37 import { allSchemas } from './loginLog.data' 36 import { allSchemas } from './loginLog.data'
38 import { getLoginLogPageApi, exportLoginLogApi, LoginLogVO } from '@/api/system/loginLog' 37 import { getLoginLogPageApi, exportLoginLogApi, LoginLogVO } from '@/api/system/loginLog'
39 38
40 const { t } = useI18n() // 国际化 39 const { t } = useI18n() // 国际化
41 // 列表相关的变量 40 // 列表相关的变量
42 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
43 -const { gridOptions, exportList } = useVxeGrid<LoginLogVO>({ 41 +const [registerTable, { exportList }] = useXTable({
44 allSchemas: allSchemas, 42 allSchemas: allSchemas,
45 getListApi: getLoginLogPageApi, 43 getListApi: getLoginLogPageApi,
46 exportListApi: exportLoginLogApi 44 exportListApi: exportLoginLogApi
@@ -59,6 +57,6 @@ const handleDetail = async (row: LoginLogVO) =&gt; { @@ -59,6 +57,6 @@ const handleDetail = async (row: LoginLogVO) =&gt; {
59 57
60 // 导出操作 58 // 导出操作
61 const handleExport = async () => { 59 const handleExport = async () => {
62 - await exportList(xGrid, '登录列表.xls') 60 + await exportList('登录列表.xls')
63 } 61 }
64 </script> 62 </script>
yudao-ui-admin-vue3/src/views/system/menu/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" show-overflow class="xtable-scrollbar"> 4 + <XTable @register="registerTable" show-overflow>
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 @click="handleDelete(row.id)" 34 @click="handleDelete(row.id)"
35 /> 35 />
36 </template> 36 </template>
37 - </vxe-grid> 37 + </XTable>
38 </ContentWrap> 38 </ContentWrap>
39 <!-- 添加或修改菜单对话框 --> 39 <!-- 添加或修改菜单对话框 -->
40 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle"> 40 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle">
@@ -201,7 +201,7 @@ import { SystemMenuTypeEnum, CommonStatusEnum } from &#39;@/utils/constants&#39; @@ -201,7 +201,7 @@ import { SystemMenuTypeEnum, CommonStatusEnum } from &#39;@/utils/constants&#39;
201 import { handleTree, defaultProps } from '@/utils/tree' 201 import { handleTree, defaultProps } from '@/utils/tree'
202 import * as MenuApi from '@/api/system/menu' 202 import * as MenuApi from '@/api/system/menu'
203 import { allSchemas, rules } from './menu.data' 203 import { allSchemas, rules } from './menu.data'
204 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 204 +import { useXTable } from '@/hooks/web/useXTable'
205 205
206 const { t } = useI18n() // 国际化 206 const { t } = useI18n() // 国际化
207 const message = useMessage() // 消息弹窗 207 const message = useMessage() // 消息弹窗
@@ -215,7 +215,7 @@ const treeConfig = { @@ -215,7 +215,7 @@ const treeConfig = {
215 parentField: 'parentId', 215 parentField: 'parentId',
216 expandAll: false 216 expandAll: false
217 } 217 }
218 -const { gridOptions, getList, deleteData } = useVxeGrid<MenuApi.MenuVO>({ 218 +const [registerTable, { reload, deleteData }] = useXTable({
219 allSchemas: allSchemas, 219 allSchemas: allSchemas,
220 treeConfig: treeConfig, 220 treeConfig: treeConfig,
221 getListApi: MenuApi.getMenuListApi, 221 getListApi: MenuApi.getMenuListApi,
@@ -326,7 +326,7 @@ const submitForm = async () =&gt; { @@ -326,7 +326,7 @@ const submitForm = async () =&gt; {
326 actionLoading.value = false 326 actionLoading.value = false
327 wsCache.delete(CACHE_KEY.ROLE_ROUTERS) 327 wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
328 // 操作成功,重新加载列表 328 // 操作成功,重新加载列表
329 - await getList(xGrid) 329 + await reload()
330 } 330 }
331 } 331 }
332 332
@@ -338,6 +338,6 @@ const isExternal = (path: string) =&gt; { @@ -338,6 +338,6 @@ const isExternal = (path: string) =&gt; {
338 // ========== 删除 ========== 338 // ========== 删除 ==========
339 // 删除操作 339 // 删除操作
340 const handleDelete = async (rowId: number) => { 340 const handleDelete = async (rowId: number) => {
341 - await deleteData(xGrid, rowId) 341 + await deleteData(rowId)
342 } 342 }
343 </script> 343 </script>
yudao-ui-admin-vue3/src/views/system/notice/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 @click="handleDelete(row.id)" 35 @click="handleDelete(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 <!-- 弹窗 --> 40 <!-- 弹窗 -->
41 <XModal id="noticeModel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="noticeModel" v-model="dialogVisible" :title="dialogTitle">
@@ -75,8 +75,7 @@ @@ -75,8 +75,7 @@
75 import { ref, unref } from 'vue' 75 import { ref, unref } from 'vue'
76 import { useI18n } from '@/hooks/web/useI18n' 76 import { useI18n } from '@/hooks/web/useI18n'
77 import { useMessage } from '@/hooks/web/useMessage' 77 import { useMessage } from '@/hooks/web/useMessage'
78 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
79 -import { VxeGridInstance } from 'vxe-table' 78 +import { useXTable } from '@/hooks/web/useXTable'
80 import { FormExpose } from '@/components/Form' 79 import { FormExpose } from '@/components/Form'
81 // 业务相关的 import 80 // 业务相关的 import
82 import * as NoticeApi from '@/api/system/notice' 81 import * as NoticeApi from '@/api/system/notice'
@@ -86,8 +85,7 @@ import { Editor } from &#39;@/components/Editor&#39; @@ -86,8 +85,7 @@ import { Editor } from &#39;@/components/Editor&#39;
86 const { t } = useI18n() // 国际化 85 const { t } = useI18n() // 国际化
87 const message = useMessage() // 消息弹窗 86 const message = useMessage() // 消息弹窗
88 // 列表相关的变量 87 // 列表相关的变量
89 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
90 -const { gridOptions, getList, deleteData } = useVxeGrid<NoticeApi.NoticeVO>({ 88 +const [registerTable, { reload, deleteData }] = useXTable({
91 allSchemas: allSchemas, 89 allSchemas: allSchemas,
92 getListApi: NoticeApi.getNoticePageApi, 90 getListApi: NoticeApi.getNoticePageApi,
93 deleteApi: NoticeApi.deleteNoticeApi 91 deleteApi: NoticeApi.deleteNoticeApi
@@ -130,7 +128,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -130,7 +128,7 @@ const handleDetail = async (rowId: number) =&gt; {
130 128
131 // 删除操作 129 // 删除操作
132 const handleDelete = async (rowId: number) => { 130 const handleDelete = async (rowId: number) => {
133 - await deleteData(xGrid, rowId) 131 + await deleteData(rowId)
134 } 132 }
135 133
136 // 提交新增/修改的表单 134 // 提交新增/修改的表单
@@ -153,7 +151,7 @@ const submitForm = async () =&gt; { @@ -153,7 +151,7 @@ const submitForm = async () =&gt; {
153 dialogVisible.value = false 151 dialogVisible.value = false
154 } finally { 152 } finally {
155 actionLoading.value = false 153 actionLoading.value = false
156 - await getList(xGrid) 154 + await reload()
157 } 155 }
158 } 156 }
159 }) 157 })
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 @click="handleDelete(row.id)" 51 @click="handleDelete(row.id)"
52 /> 52 />
53 </template> 53 </template>
54 - </vxe-grid> 54 + </XTable>
55 </ContentWrap> 55 </ContentWrap>
56 <!-- 弹窗 --> 56 <!-- 弹窗 -->
57 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 57 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
@@ -135,8 +135,7 @@ import { ref, unref } from &#39;vue&#39; @@ -135,8 +135,7 @@ import { ref, unref } from &#39;vue&#39;
135 import { ElTag } from 'element-plus' 135 import { ElTag } from 'element-plus'
136 import { useI18n } from '@/hooks/web/useI18n' 136 import { useI18n } from '@/hooks/web/useI18n'
137 import { useMessage } from '@/hooks/web/useMessage' 137 import { useMessage } from '@/hooks/web/useMessage'
138 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
139 -import { VxeGridInstance } from 'vxe-table' 138 +import { useXTable } from '@/hooks/web/useXTable'
140 import { FormExpose } from '@/components/Form' 139 import { FormExpose } from '@/components/Form'
141 // 业务相关的 import 140 // 业务相关的 import
142 import * as ClientApi from '@/api/system/oauth2/client' 141 import * as ClientApi from '@/api/system/oauth2/client'
@@ -146,8 +145,7 @@ const { t } = useI18n() // 国际化 @@ -146,8 +145,7 @@ const { t } = useI18n() // 国际化
146 const message = useMessage() // 消息弹窗 145 const message = useMessage() // 消息弹窗
147 146
148 // 列表相关的变量 147 // 列表相关的变量
149 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
150 -const { gridOptions, getList, deleteData } = useVxeGrid<ClientApi.OAuth2ClientVO>({ 148 +const [registerTable, { reload, deleteData }] = useXTable({
151 allSchemas: allSchemas, 149 allSchemas: allSchemas,
152 getListApi: ClientApi.getOAuth2ClientPageApi, 150 getListApi: ClientApi.getOAuth2ClientPageApi,
153 deleteApi: ClientApi.deleteOAuth2ClientApi 151 deleteApi: ClientApi.deleteOAuth2ClientApi
@@ -188,7 +186,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -188,7 +186,7 @@ const handleDetail = async (rowId: number) =&gt; {
188 186
189 // 删除操作 187 // 删除操作
190 const handleDelete = async (rowId: number) => { 188 const handleDelete = async (rowId: number) => {
191 - await deleteData(xGrid, rowId) 189 + await deleteData(rowId)
192 } 190 }
193 191
194 // 提交新增/修改的表单 192 // 提交新增/修改的表单
@@ -212,7 +210,7 @@ const submitForm = async () =&gt; { @@ -212,7 +210,7 @@ const submitForm = async () =&gt; {
212 } finally { 210 } finally {
213 actionLoading.value = false 211 actionLoading.value = false
214 // 刷新列表 212 // 刷新列表
215 - await getList(xGrid) 213 + await reload()
216 } 214 }
217 } 215 }
218 }) 216 })
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #actionbtns_default="{ row }"> 5 <template #actionbtns_default="{ row }">
6 <!-- 操作:详情 --> 6 <!-- 操作:详情 -->
7 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 7 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 @click="handleForceLogout(row.id)" 13 @click="handleForceLogout(row.id)"
14 /> 14 />
15 </template> 15 </template>
16 - </vxe-grid> 16 + </XTable>
17 </ContentWrap> 17 </ContentWrap>
18 <XModal v-model="dialogVisible" :title="dialogTitle"> 18 <XModal v-model="dialogVisible" :title="dialogTitle">
19 <!-- 对话框(详情) --> 19 <!-- 对话框(详情) -->
@@ -28,8 +28,7 @@ @@ -28,8 +28,7 @@
28 import { ref } from 'vue' 28 import { ref } from 'vue'
29 import { useI18n } from '@/hooks/web/useI18n' 29 import { useI18n } from '@/hooks/web/useI18n'
30 import { useMessage } from '@/hooks/web/useMessage' 30 import { useMessage } from '@/hooks/web/useMessage'
31 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
32 -import { VxeGridInstance } from 'vxe-table' 31 +import { useXTable } from '@/hooks/web/useXTable'
33 32
34 import { allSchemas } from './token.data' 33 import { allSchemas } from './token.data'
35 import * as TokenApi from '@/api/system/oauth2/token' 34 import * as TokenApi from '@/api/system/oauth2/token'
@@ -37,8 +36,7 @@ import * as TokenApi from &#39;@/api/system/oauth2/token&#39; @@ -37,8 +36,7 @@ import * as TokenApi from &#39;@/api/system/oauth2/token&#39;
37 const { t } = useI18n() // 国际化 36 const { t } = useI18n() // 国际化
38 const message = useMessage() // 消息弹窗 37 const message = useMessage() // 消息弹窗
39 // 列表相关的变量 38 // 列表相关的变量
40 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
41 -const { gridOptions, getList } = useVxeGrid<TokenApi.OAuth2TokenVO>({ 39 +const [registerTable, { reload }] = useXTable({
42 allSchemas: allSchemas, 40 allSchemas: allSchemas,
43 topActionSlots: false, 41 topActionSlots: false,
44 getListApi: TokenApi.getAccessTokenPageApi 42 getListApi: TokenApi.getAccessTokenPageApi
@@ -65,7 +63,7 @@ const handleForceLogout = (rowId: number) =&gt; { @@ -65,7 +63,7 @@ const handleForceLogout = (rowId: number) =&gt; {
65 }) 63 })
66 .finally(async () => { 64 .finally(async () => {
67 // 刷新列表 65 // 刷新列表
68 - await getList(xGrid) 66 + await reload()
69 }) 67 })
70 } 68 }
71 </script> 69 </script>
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <!-- 操作:详情 --> 22 <!-- 操作:详情 -->
23 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 23 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
24 </template> 24 </template>
25 - </vxe-grid> 25 + </XTable>
26 </ContentWrap> 26 </ContentWrap>
27 <!-- 弹窗 --> 27 <!-- 弹窗 -->
28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')"> 28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')">
@@ -45,16 +45,14 @@ @@ -45,16 +45,14 @@
45 // 全局相关的 import 45 // 全局相关的 import
46 import { ref } from 'vue' 46 import { ref } from 'vue'
47 import { useI18n } from '@/hooks/web/useI18n' 47 import { useI18n } from '@/hooks/web/useI18n'
48 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
49 -import { VxeGridInstance } from 'vxe-table' 48 +import { useXTable } from '@/hooks/web/useXTable'
50 // 业务相关的 import 49 // 业务相关的 import
51 import * as OperateLogApi from '@/api/system/operatelog' 50 import * as OperateLogApi from '@/api/system/operatelog'
52 import { allSchemas } from './operatelog.data' 51 import { allSchemas } from './operatelog.data'
53 52
54 const { t } = useI18n() // 国际化 53 const { t } = useI18n() // 国际化
55 // 列表相关的变量 54 // 列表相关的变量
56 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
57 -const { gridOptions, exportList } = useVxeGrid<OperateLogApi.OperateLogVO>({ 55 +const [registerTable, { exportList }] = useXTable({
58 allSchemas: allSchemas, 56 allSchemas: allSchemas,
59 getListApi: OperateLogApi.getOperateLogPageApi, 57 getListApi: OperateLogApi.getOperateLogPageApi,
60 exportListApi: OperateLogApi.exportOperateLogApi 58 exportListApi: OperateLogApi.exportOperateLogApi
@@ -73,6 +71,6 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; { @@ -73,6 +71,6 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; {
73 71
74 // 导出操作 72 // 导出操作
75 const handleExport = async () => { 73 const handleExport = async () => {
76 - await exportList(xGrid, '操作日志.xls') 74 + await exportList('操作日志.xls')
77 } 75 }
78 </script> 76 </script>
yudao-ui-admin-vue3/src/views/system/post/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 @click="handleDelete(row.id)" 43 @click="handleDelete(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <!-- 弹窗 --> 48 <!-- 弹窗 -->
49 <XModal id="postModel" :loading="modelLoading" v-model="modelVisible" :title="modelTitle"> 49 <XModal id="postModel" :loading="modelLoading" v-model="modelVisible" :title="modelTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 // 业务相关的 import 84 // 业务相关的 import
86 import * as PostApi from '@/api/system/post' 85 import * as PostApi from '@/api/system/post'
@@ -89,8 +88,7 @@ import { rules, allSchemas } from &#39;./post.data&#39; @@ -89,8 +88,7 @@ import { rules, allSchemas } from &#39;./post.data&#39;
89 const { t } = useI18n() // 国际化 88 const { t } = useI18n() // 国际化
90 const message = useMessage() // 消息弹窗 89 const message = useMessage() // 消息弹窗
91 // 列表相关的变量 90 // 列表相关的变量
92 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
93 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<PostApi.PostVO>({ 91 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
94 allSchemas: allSchemas, 92 allSchemas: allSchemas,
95 getListApi: PostApi.getPostPageApi, 93 getListApi: PostApi.getPostPageApi,
96 deleteApi: PostApi.deletePostApi, 94 deleteApi: PostApi.deletePostApi,
@@ -121,7 +119,7 @@ const handleCreate = () =&gt; { @@ -121,7 +119,7 @@ const handleCreate = () =&gt; {
121 119
122 // 导出操作 120 // 导出操作
123 const handleExport = async () => { 121 const handleExport = async () => {
124 - await exportList(xGrid, '岗位列表.xls') 122 + await exportList('岗位列表.xls')
125 } 123 }
126 124
127 // 修改操作 125 // 修改操作
@@ -143,7 +141,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -143,7 +141,7 @@ const handleDetail = async (rowId: number) =&gt; {
143 141
144 // 删除操作 142 // 删除操作
145 const handleDelete = async (rowId: number) => { 143 const handleDelete = async (rowId: number) => {
146 - await deleteData(xGrid, rowId) 144 + await deleteData(rowId)
147 } 145 }
148 146
149 // 提交新增/修改的表单 147 // 提交新增/修改的表单
@@ -167,7 +165,7 @@ const submitForm = async () =&gt; { @@ -167,7 +165,7 @@ const submitForm = async () =&gt; {
167 } finally { 165 } finally {
168 actionLoading.value = false 166 actionLoading.value = false
169 // 刷新列表 167 // 刷新列表
170 - await getList(xGrid) 168 + await reload()
171 } 169 }
172 } 170 }
173 }) 171 })
yudao-ui-admin-vue3/src/views/system/role/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 @click="handleDelete(row.id)" 49 @click="handleDelete(row.id)"
50 /> 50 />
51 </template> 51 </template>
52 - </vxe-grid> 52 + </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 54
55 <XModal v-model="dialogVisible" :title="dialogTitle"> 55 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -159,11 +159,10 @@ import { @@ -159,11 +159,10 @@ import {
159 ElSwitch, 159 ElSwitch,
160 ElTag 160 ElTag
161 } from 'element-plus' 161 } from 'element-plus'
162 -import { VxeGridInstance } from 'vxe-table'  
163 import { FormExpose } from '@/components/Form' 162 import { FormExpose } from '@/components/Form'
164 import { useI18n } from '@/hooks/web/useI18n' 163 import { useI18n } from '@/hooks/web/useI18n'
165 import { useMessage } from '@/hooks/web/useMessage' 164 import { useMessage } from '@/hooks/web/useMessage'
166 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 165 +import { useXTable } from '@/hooks/web/useXTable'
167 import { handleTree, defaultProps } from '@/utils/tree' 166 import { handleTree, defaultProps } from '@/utils/tree'
168 import { SystemDataScopeEnum } from '@/utils/constants' 167 import { SystemDataScopeEnum } from '@/utils/constants'
169 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 168 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
@@ -176,8 +175,7 @@ import * as PermissionApi from &#39;@/api/system/permission&#39; @@ -176,8 +175,7 @@ import * as PermissionApi from &#39;@/api/system/permission&#39;
176 const { t } = useI18n() // 国际化 175 const { t } = useI18n() // 国际化
177 const message = useMessage() // 消息弹窗 176 const message = useMessage() // 消息弹窗
178 // 列表相关的变量 177 // 列表相关的变量
179 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
180 -const { gridOptions, getList, deleteData } = useVxeGrid<RoleApi.RoleVO>({ 178 +const [registerTable, { reload, deleteData }] = useXTable({
181 allSchemas: allSchemas, 179 allSchemas: allSchemas,
182 getListApi: RoleApi.getRolePageApi, 180 getListApi: RoleApi.getRolePageApi,
183 deleteApi: RoleApi.deleteRoleApi 181 deleteApi: RoleApi.deleteRoleApi
@@ -221,7 +219,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -221,7 +219,7 @@ const handleDetail = async (rowId: number) =&gt; {
221 219
222 // 删除操作 220 // 删除操作
223 const handleDelete = async (rowId: number) => { 221 const handleDelete = async (rowId: number) => {
224 - await deleteData(xGrid, rowId) 222 + await deleteData(rowId)
225 } 223 }
226 224
227 // 提交按钮 225 // 提交按钮
@@ -245,7 +243,7 @@ const submitForm = async () =&gt; { @@ -245,7 +243,7 @@ const submitForm = async () =&gt; {
245 } finally { 243 } finally {
246 actionLoading.value = false 244 actionLoading.value = false
247 // 刷新列表 245 // 刷新列表
248 - await getList(xGrid) 246 + await reload()
249 } 247 }
250 } 248 }
251 }) 249 })
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 @click="handleDelete(row.id)" 53 @click="handleDelete(row.id)"
54 /> 54 />
55 </template> 55 </template>
56 - </vxe-grid> 56 + </XTable>
57 </ContentWrap> 57 </ContentWrap>
58 58
59 <XModal v-model="dialogVisible" :title="dialogTitle"> 59 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -106,8 +106,7 @@ @@ -106,8 +106,7 @@
106 import { onMounted, ref, unref } from 'vue' 106 import { onMounted, ref, unref } from 'vue'
107 import { useI18n } from '@/hooks/web/useI18n' 107 import { useI18n } from '@/hooks/web/useI18n'
108 import { useMessage } from '@/hooks/web/useMessage' 108 import { useMessage } from '@/hooks/web/useMessage'
109 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
110 -import { VxeGridInstance } from 'vxe-table' 109 +import { useXTable } from '@/hooks/web/useXTable'
111 import { FormExpose } from '@/components/Form' 110 import { FormExpose } from '@/components/Form'
112 import { ElTag, ElSelect, ElOption } from 'element-plus' 111 import { ElTag, ElSelect, ElOption } from 'element-plus'
113 import * as SensitiveWordApi from '@/api/system/sensitiveWord' 112 import * as SensitiveWordApi from '@/api/system/sensitiveWord'
@@ -116,14 +115,12 @@ import { rules, allSchemas } from &#39;./sensitiveWord.data&#39; @@ -116,14 +115,12 @@ import { rules, allSchemas } from &#39;./sensitiveWord.data&#39;
116 const { t } = useI18n() // 国际化 115 const { t } = useI18n() // 国际化
117 const message = useMessage() // 消息弹窗 116 const message = useMessage() // 消息弹窗
118 // 列表相关的变量 117 // 列表相关的变量
119 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
120 -const { gridOptions, getList, deleteData, exportList } =  
121 - useVxeGrid<SensitiveWordApi.SensitiveWordVO>({  
122 - allSchemas: allSchemas,  
123 - getListApi: SensitiveWordApi.getSensitiveWordPageApi,  
124 - deleteApi: SensitiveWordApi.deleteSensitiveWordApi,  
125 - exportListApi: SensitiveWordApi.exportSensitiveWordApi  
126 - }) 118 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
  119 + allSchemas: allSchemas,
  120 + getListApi: SensitiveWordApi.getSensitiveWordPageApi,
  121 + deleteApi: SensitiveWordApi.deleteSensitiveWordApi,
  122 + exportListApi: SensitiveWordApi.exportSensitiveWordApi
  123 +})
127 const actionLoading = ref(false) // 遮罩层 124 const actionLoading = ref(false) // 遮罩层
128 const actionType = ref('') // 操作按钮的类型 125 const actionType = ref('') // 操作按钮的类型
129 const dialogVisible = ref(false) // 是否显示弹出层 126 const dialogVisible = ref(false) // 是否显示弹出层
@@ -152,7 +149,7 @@ const handleCreate = () =&gt; { @@ -152,7 +149,7 @@ const handleCreate = () =&gt; {
152 149
153 // 导出操作 150 // 导出操作
154 const handleExport = async () => { 151 const handleExport = async () => {
155 - await exportList(xGrid, '敏感词数据.xls') 152 + await exportList('敏感词数据.xls')
156 } 153 }
157 154
158 // 修改操作 155 // 修改操作
@@ -172,7 +169,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -172,7 +169,7 @@ const handleDetail = async (rowId: number) =&gt; {
172 169
173 // 删除操作 170 // 删除操作
174 const handleDelete = async (rowId: number) => { 171 const handleDelete = async (rowId: number) => {
175 - await deleteData(xGrid, rowId) 172 + await deleteData(rowId)
176 } 173 }
177 174
178 // 提交按钮 175 // 提交按钮
@@ -196,7 +193,7 @@ const submitForm = async () =&gt; { @@ -196,7 +193,7 @@ const submitForm = async () =&gt; {
196 } finally { 193 } finally {
197 actionLoading.value = false 194 actionLoading.value = false
198 // 刷新列表 195 // 刷新列表
199 - await getList(xGrid) 196 + await reload()
200 } 197 }
201 } 198 }
202 }) 199 })
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 @click="handleDelete(row.id)" 35 @click="handleDelete(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 40
41 <XModal id="smsChannel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="smsChannel" v-model="dialogVisible" :title="dialogTitle">
@@ -72,8 +72,7 @@ @@ -72,8 +72,7 @@
72 import { ref, unref } from 'vue' 72 import { ref, unref } from 'vue'
73 import { useI18n } from '@/hooks/web/useI18n' 73 import { useI18n } from '@/hooks/web/useI18n'
74 import { useMessage } from '@/hooks/web/useMessage' 74 import { useMessage } from '@/hooks/web/useMessage'
75 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
76 -import { VxeGridInstance } from 'vxe-table' 75 +import { useXTable } from '@/hooks/web/useXTable'
77 import { FormExpose } from '@/components/Form' 76 import { FormExpose } from '@/components/Form'
78 // 业务相关的 import 77 // 业务相关的 import
79 import * as SmsChannelApi from '@/api/system/sms/smsChannel' 78 import * as SmsChannelApi from '@/api/system/sms/smsChannel'
@@ -83,8 +82,7 @@ const { t } = useI18n() // 国际化 @@ -83,8 +82,7 @@ const { t } = useI18n() // 国际化
83 const message = useMessage() // 消息弹窗 82 const message = useMessage() // 消息弹窗
84 83
85 // 列表相关的变量 84 // 列表相关的变量
86 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
87 -const { gridOptions, getList, deleteData } = useVxeGrid<SmsChannelApi.SmsChannelVO>({ 85 +const [registerTable, { reload, deleteData }] = useXTable({
88 allSchemas: allSchemas, 86 allSchemas: allSchemas,
89 getListApi: SmsChannelApi.getSmsChannelPageApi, 87 getListApi: SmsChannelApi.getSmsChannelPageApi,
90 deleteApi: SmsChannelApi.deleteSmsChannelApi 88 deleteApi: SmsChannelApi.deleteSmsChannelApi
@@ -127,7 +125,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -127,7 +125,7 @@ const handleDetail = async (rowId: number) =&gt; {
127 125
128 // 删除操作 126 // 删除操作
129 const handleDelete = async (rowId: number) => { 127 const handleDelete = async (rowId: number) => {
130 - await deleteData(xGrid, rowId) 128 + await deleteData(rowId)
131 } 129 }
132 130
133 // 提交按钮 131 // 提交按钮
@@ -151,7 +149,7 @@ const submitForm = async () =&gt; { @@ -151,7 +149,7 @@ const submitForm = async () =&gt; {
151 } finally { 149 } finally {
152 actionLoading.value = false 150 actionLoading.value = false
153 // 刷新列表 151 // 刷新列表
154 - await getList(xGrid) 152 + await reload()
155 } 153 }
156 } 154 }
157 }) 155 })
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <template #actionbtns_default="{ row }"> 14 <template #actionbtns_default="{ row }">
15 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 15 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
16 </template> 16 </template>
17 - </vxe-grid> 17 + </XTable>
18 </ContentWrap> 18 </ContentWrap>
19 19
20 <XModal id="smsLog" v-model="dialogVisible" :title="dialogTitle"> 20 <XModal id="smsLog" v-model="dialogVisible" :title="dialogTitle">
@@ -34,15 +34,13 @@ @@ -34,15 +34,13 @@
34 // 全局相关的 import 34 // 全局相关的 import
35 import { ref } from 'vue' 35 import { ref } from 'vue'
36 import { useI18n } from '@/hooks/web/useI18n' 36 import { useI18n } from '@/hooks/web/useI18n'
37 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
38 -import { VxeGridInstance } from 'vxe-table' 37 +import { useXTable } from '@/hooks/web/useXTable'
39 import { allSchemas } from './sms.log.data' 38 import { allSchemas } from './sms.log.data'
40 import * as SmsLoglApi from '@/api/system/sms/smsLog' 39 import * as SmsLoglApi from '@/api/system/sms/smsLog'
41 const { t } = useI18n() // 国际化 40 const { t } = useI18n() // 国际化
42 41
43 // 列表相关的变量 42 // 列表相关的变量
44 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
45 -const { gridOptions, exportList } = useVxeGrid<SmsLoglApi.SmsLogVO>({ 43 +const [registerTable, { exportList }] = useXTable({
46 allSchemas: allSchemas, 44 allSchemas: allSchemas,
47 getListApi: SmsLoglApi.getSmsLogPageApi, 45 getListApi: SmsLoglApi.getSmsLogPageApi,
48 exportListApi: SmsLoglApi.exportSmsLogApi 46 exportListApi: SmsLoglApi.exportSmsLogApi
@@ -62,6 +60,6 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; { @@ -62,6 +60,6 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; {
62 60
63 // 导出操作 61 // 导出操作
64 const handleExport = async () => { 62 const handleExport = async () => {
65 - await exportList(xGrid, '短信日志.xls') 63 + await exportList('短信日志.xls')
66 } 64 }
67 </script> 65 </script>
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 @click="handleDelete(row.id)" 41 @click="handleDelete(row.id)"
42 /> 42 />
43 </template> 43 </template>
44 - </vxe-grid> 44 + </XTable>
45 </ContentWrap> 45 </ContentWrap>
46 <XModal id="smsTemplate" v-model="dialogVisible" :title="dialogTitle"> 46 <XModal id="smsTemplate" v-model="dialogVisible" :title="dialogTitle">
47 <!-- 对话框(添加 / 修改) --> 47 <!-- 对话框(添加 / 修改) -->
@@ -113,8 +113,7 @@ @@ -113,8 +113,7 @@
113 import { ref, unref } from 'vue' 113 import { ref, unref } from 'vue'
114 import { useI18n } from '@/hooks/web/useI18n' 114 import { useI18n } from '@/hooks/web/useI18n'
115 import { useMessage } from '@/hooks/web/useMessage' 115 import { useMessage } from '@/hooks/web/useMessage'
116 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
117 -import { VxeGridInstance } from 'vxe-table' 116 +import { useXTable } from '@/hooks/web/useXTable'
118 import { FormExpose } from '@/components/Form' 117 import { FormExpose } from '@/components/Form'
119 import { ElForm, ElFormItem, ElInput } from 'element-plus' 118 import { ElForm, ElFormItem, ElInput } from 'element-plus'
120 // 业务相关的 import 119 // 业务相关的 import
@@ -125,8 +124,7 @@ const { t } = useI18n() // 国际化 @@ -125,8 +124,7 @@ const { t } = useI18n() // 国际化
125 const message = useMessage() // 消息弹窗 124 const message = useMessage() // 消息弹窗
126 125
127 // 列表相关的变量 126 // 列表相关的变量
128 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
129 -const { gridOptions, getList, deleteData } = useVxeGrid<SmsTemplateApi.SmsTemplateVO>({ 127 +const [registerTable, { reload, deleteData }] = useXTable({
130 allSchemas: allSchemas, 128 allSchemas: allSchemas,
131 getListApi: SmsTemplateApi.getSmsTemplatePageApi, 129 getListApi: SmsTemplateApi.getSmsTemplatePageApi,
132 deleteApi: SmsTemplateApi.deleteSmsTemplateApi 130 deleteApi: SmsTemplateApi.deleteSmsTemplateApi
@@ -170,7 +168,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -170,7 +168,7 @@ const handleDetail = async (rowId: number) =&gt; {
170 168
171 // 删除操作 169 // 删除操作
172 const handleDelete = async (rowId: number) => { 170 const handleDelete = async (rowId: number) => {
173 - await deleteData(xGrid, rowId) 171 + await deleteData(rowId)
174 } 172 }
175 173
176 // 提交按钮 174 // 提交按钮
@@ -194,7 +192,7 @@ const submitForm = async () =&gt; { @@ -194,7 +192,7 @@ const submitForm = async () =&gt; {
194 } finally { 192 } finally {
195 actionLoading.value = false 193 actionLoading.value = false
196 // 刷新列表 194 // 刷新列表
197 - await getList(xGrid) 195 + await reload()
198 } 196 }
199 } 197 }
200 }) 198 })
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 @click="handleDelete(row.id)" 49 @click="handleDelete(row.id)"
50 /> 50 />
51 </template> 51 </template>
52 - </vxe-grid> 52 + </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 <XModal v-model="dialogVisible" :title="dialogTitle"> 54 <XModal v-model="dialogVisible" :title="dialogTitle">
55 <!-- 对话框(添加 / 修改) --> 55 <!-- 对话框(添加 / 修改) -->
@@ -89,8 +89,7 @@ @@ -89,8 +89,7 @@
89 import { ref, unref } from 'vue' 89 import { ref, unref } from 'vue'
90 import { useI18n } from '@/hooks/web/useI18n' 90 import { useI18n } from '@/hooks/web/useI18n'
91 import { useMessage } from '@/hooks/web/useMessage' 91 import { useMessage } from '@/hooks/web/useMessage'
92 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
93 -import { VxeGridInstance } from 'vxe-table' 92 +import { useXTable } from '@/hooks/web/useXTable'
94 import { ElTag } from 'element-plus' 93 import { ElTag } from 'element-plus'
95 import { FormExpose } from '@/components/Form' 94 import { FormExpose } from '@/components/Form'
96 import * as TenantApi from '@/api/system/tenant' 95 import * as TenantApi from '@/api/system/tenant'
@@ -99,8 +98,7 @@ import { rules, allSchemas, tenantPackageOption } from &#39;./tenant.data&#39; @@ -99,8 +98,7 @@ import { rules, allSchemas, tenantPackageOption } from &#39;./tenant.data&#39;
99 const { t } = useI18n() // 国际化 98 const { t } = useI18n() // 国际化
100 const message = useMessage() // 消息弹窗 99 const message = useMessage() // 消息弹窗
101 // 列表相关的变量 100 // 列表相关的变量
102 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
103 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<TenantApi.TenantVO>({ 101 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
104 allSchemas: allSchemas, 102 allSchemas: allSchemas,
105 getListApi: TenantApi.getTenantPageApi, 103 getListApi: TenantApi.getTenantPageApi,
106 deleteApi: TenantApi.deleteTenantApi, 104 deleteApi: TenantApi.deleteTenantApi,
@@ -153,12 +151,12 @@ const handleDetail = async (rowId: number) =&gt; { @@ -153,12 +151,12 @@ const handleDetail = async (rowId: number) =&gt; {
153 151
154 // 删除操作 152 // 删除操作
155 const handleDelete = async (rowId: number) => { 153 const handleDelete = async (rowId: number) => {
156 - await deleteData(xGrid, rowId) 154 + await deleteData(rowId)
157 } 155 }
158 156
159 // 导出操作 157 // 导出操作
160 const handleExport = async () => { 158 const handleExport = async () => {
161 - await exportList(xGrid, '租户列表.xls') 159 + await exportList('租户列表.xls')
162 } 160 }
163 161
164 // 提交按钮 162 // 提交按钮
@@ -183,7 +181,7 @@ const submitForm = async () =&gt; { @@ -183,7 +181,7 @@ const submitForm = async () =&gt; {
183 } finally { 181 } finally {
184 actionLoading.value = false 182 actionLoading.value = false
185 // 刷新列表 183 // 刷新列表
186 - await getList(xGrid) 184 + await reload()
187 } 185 }
188 } 186 }
189 }) 187 })
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <XTextButton preIcon="ep:edit" :title="t('action.edit')" @click="handleUpdate(row.id)" /> 14 <XTextButton preIcon="ep:edit" :title="t('action.edit')" @click="handleUpdate(row.id)" />
15 <XTextButton preIcon="ep:delete" :title="t('action.del')" @click="handleDelete(row.id)" /> 15 <XTextButton preIcon="ep:delete" :title="t('action.del')" @click="handleDelete(row.id)" />
16 </template> 16 </template>
17 - </vxe-grid> 17 + </XTable>
18 </ContentWrap> 18 </ContentWrap>
19 <XModal v-model="dialogVisible" :title="dialogTitle"> 19 <XModal v-model="dialogVisible" :title="dialogTitle">
20 <!-- 对话框(添加 / 修改) --> 20 <!-- 对话框(添加 / 修改) -->
@@ -69,8 +69,7 @@ import { onMounted, ref, unref } from &#39;vue&#39; @@ -69,8 +69,7 @@ import { onMounted, ref, unref } from &#39;vue&#39;
69 import { handleTree, defaultProps } from '@/utils/tree' 69 import { handleTree, defaultProps } from '@/utils/tree'
70 import { useI18n } from '@/hooks/web/useI18n' 70 import { useI18n } from '@/hooks/web/useI18n'
71 import { useMessage } from '@/hooks/web/useMessage' 71 import { useMessage } from '@/hooks/web/useMessage'
72 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
73 -import { VxeGridInstance } from 'vxe-table' 72 +import { useXTable } from '@/hooks/web/useXTable'
74 import { FormExpose } from '@/components/Form' 73 import { FormExpose } from '@/components/Form'
75 import { ElCard, ElSwitch, ElTree } from 'element-plus' 74 import { ElCard, ElSwitch, ElTree } from 'element-plus'
76 // 业务相关的 import 75 // 业务相关的 import
@@ -86,7 +85,6 @@ const menuExpand = ref(false) @@ -86,7 +85,6 @@ const menuExpand = ref(false)
86 const menuNodeAll = ref(false) 85 const menuNodeAll = ref(false)
87 const treeRef = ref<InstanceType<typeof ElTree>>() 86 const treeRef = ref<InstanceType<typeof ElTree>>()
88 const treeNodeAll = ref(false) 87 const treeNodeAll = ref(false)
89 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
90 const formRef = ref<FormExpose>() // 表单 Ref 88 const formRef = ref<FormExpose>() // 表单 Ref
91 const loading = ref(false) // 遮罩层 89 const loading = ref(false) // 遮罩层
92 const actionType = ref('') // 操作按钮的类型 90 const actionType = ref('') // 操作按钮的类型
@@ -102,7 +100,7 @@ const getTree = async () =&gt; { @@ -102,7 +100,7 @@ const getTree = async () =&gt; {
102 menuOptions.value = handleTree(res) 100 menuOptions.value = handleTree(res)
103 } 101 }
104 102
105 -const { gridOptions, getList, deleteData } = useVxeGrid<TenantPackageApi.TenantPackageVO>({ 103 +const [registerTable, { reload, deleteData }] = useXTable({
106 allSchemas: allSchemas, 104 allSchemas: allSchemas,
107 getListApi: TenantPackageApi.getTenantPackageTypePageApi, 105 getListApi: TenantPackageApi.getTenantPackageTypePageApi,
108 deleteApi: TenantPackageApi.deleteTenantPackageTypeApi 106 deleteApi: TenantPackageApi.deleteTenantPackageTypeApi
@@ -136,7 +134,7 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -136,7 +134,7 @@ const handleUpdate = async (rowId: number) =&gt; {
136 134
137 // 删除操作 135 // 删除操作
138 const handleDelete = async (rowId: number) => { 136 const handleDelete = async (rowId: number) => {
139 - await deleteData(xGrid, rowId) 137 + await deleteData(rowId)
140 } 138 }
141 139
142 // 提交按钮 140 // 提交按钮
@@ -162,7 +160,7 @@ const submitForm = async () =&gt; { @@ -162,7 +160,7 @@ const submitForm = async () =&gt; {
162 } finally { 160 } finally {
163 loading.value = false 161 loading.value = false
164 // 刷新列表 162 // 刷新列表
165 - await getList(xGrid) 163 + await reload()
166 } 164 }
167 } 165 }
168 }) 166 })
yudao-ui-admin-vue3/src/views/system/user/index.vue
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 </div> 27 </div>
28 </template> 28 </template>
29 <!-- 列表 --> 29 <!-- 列表 -->
30 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 30 + <XTable @register="registerTable">
31 <template #toolbar_buttons> 31 <template #toolbar_buttons>
32 <!-- 操作:新增 --> 32 <!-- 操作:新增 -->
33 <XButton 33 <XButton
@@ -119,7 +119,7 @@ @@ -119,7 +119,7 @@
119 </template> 119 </template>
120 </el-dropdown> 120 </el-dropdown>
121 </template> 121 </template>
122 - </vxe-grid> 122 + </XTable>
123 </el-card> 123 </el-card>
124 </div> 124 </div>
125 <XModal v-model="dialogVisible" :title="dialogTitle"> 125 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -283,14 +283,13 @@ import { @@ -283,14 +283,13 @@ import {
283 UploadRawFile 283 UploadRawFile
284 } from 'element-plus' 284 } from 'element-plus'
285 import { useRouter } from 'vue-router' 285 import { useRouter } from 'vue-router'
286 -import { VxeGridInstance } from 'vxe-table'  
287 import { handleTree, defaultProps } from '@/utils/tree' 286 import { handleTree, defaultProps } from '@/utils/tree'
288 import download from '@/utils/download' 287 import download from '@/utils/download'
289 import { CommonStatusEnum } from '@/utils/constants' 288 import { CommonStatusEnum } from '@/utils/constants'
290 import { getAccessToken, getTenantId } from '@/utils/auth' 289 import { getAccessToken, getTenantId } from '@/utils/auth'
291 import { useI18n } from '@/hooks/web/useI18n' 290 import { useI18n } from '@/hooks/web/useI18n'
292 import { useMessage } from '@/hooks/web/useMessage' 291 import { useMessage } from '@/hooks/web/useMessage'
293 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 292 +import { useXTable } from '@/hooks/web/useXTable'
294 import { FormExpose } from '@/components/Form' 293 import { FormExpose } from '@/components/Form'
295 import { rules, allSchemas } from './user.data' 294 import { rules, allSchemas } from './user.data'
296 import * as UserApi from '@/api/system/user' 295 import * as UserApi from '@/api/system/user'
@@ -312,10 +311,9 @@ const queryParams = reactive({ @@ -312,10 +311,9 @@ const queryParams = reactive({
312 // ========== 列表相关 ========== 311 // ========== 列表相关 ==========
313 const tableTitle = ref('用户列表') 312 const tableTitle = ref('用户列表')
314 // 列表相关的变量 313 // 列表相关的变量
315 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
316 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<UserApi.UserVO>({ 314 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
317 allSchemas: allSchemas, 315 allSchemas: allSchemas,
318 - queryParams: queryParams, 316 + params: queryParams,
319 getListApi: UserApi.getUserPageApi, 317 getListApi: UserApi.getUserPageApi,
320 deleteApi: UserApi.deleteUserApi, 318 deleteApi: UserApi.deleteUserApi,
321 exportListApi: UserApi.exportUserApi 319 exportListApi: UserApi.exportUserApi
@@ -334,7 +332,7 @@ const filterNode = (value: string, data: Tree) =&gt; { @@ -334,7 +332,7 @@ const filterNode = (value: string, data: Tree) =&gt; {
334 } 332 }
335 const handleDeptNodeClick = async (row: { [key: string]: any }) => { 333 const handleDeptNodeClick = async (row: { [key: string]: any }) => {
336 queryParams.deptId = row.id 334 queryParams.deptId = row.id
337 - await getList(xGrid) 335 + await reload()
338 } 336 }
339 const { push } = useRouter() 337 const { push } = useRouter()
340 const handleDeptEdit = () => { 338 const handleDeptEdit = () => {
@@ -409,7 +407,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -409,7 +407,7 @@ const handleDetail = async (rowId: number) =&gt; {
409 } 407 }
410 // 删除操作 408 // 删除操作
411 const handleDelete = async (rowId: number) => { 409 const handleDelete = async (rowId: number) => {
412 - await deleteData(xGrid, rowId) 410 + await deleteData(rowId)
413 } 411 }
414 // 提交按钮 412 // 提交按钮
415 const submitForm = async () => { 413 const submitForm = async () => {
@@ -428,7 +426,7 @@ const submitForm = async () =&gt; { @@ -428,7 +426,7 @@ const submitForm = async () =&gt; {
428 } finally { 426 } finally {
429 // unref(formRef)?.setSchema(allSchemas.formSchema) 427 // unref(formRef)?.setSchema(allSchemas.formSchema)
430 // 刷新列表 428 // 刷新列表
431 - await getList(xGrid) 429 + await reload()
432 loading.value = false 430 loading.value = false
433 } 431 }
434 } 432 }
@@ -443,7 +441,7 @@ const handleStatusChange = async (row: UserApi.UserVO) =&gt; { @@ -443,7 +441,7 @@ const handleStatusChange = async (row: UserApi.UserVO) =&gt; {
443 await UserApi.updateUserStatusApi(row.id, row.status) 441 await UserApi.updateUserStatusApi(row.id, row.status)
444 message.success(text + '成功') 442 message.success(text + '成功')
445 // 刷新列表 443 // 刷新列表
446 - await getList(xGrid) 444 + await reload()
447 }) 445 })
448 .catch(() => { 446 .catch(() => {
449 row.status = 447 row.status =
@@ -544,7 +542,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; { @@ -544,7 +542,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; {
544 text += '< ' + username + ': ' + data.failureUsernames[username] + ' >' 542 text += '< ' + username + ': ' + data.failureUsernames[username] + ' >'
545 } 543 }
546 message.alert(text) 544 message.alert(text)
547 - await getList(xGrid) 545 + await reload()
548 } 546 }
549 // 文件数超出提示 547 // 文件数超出提示
550 const handleExceed = (): void => { 548 const handleExceed = (): void => {