Commit 29cd9b79defce7fdf3772ac74cb12ddebef0f0f1

Authored by 芋道源码
Committed by Gitee
2 parents 85f83b97 7cbd6cfb

!299 refactor vue3 vxe crud

Merge pull request !299 from xingyu/feature/vue3
yudao-ui-admin-vue3/pnpm-lock.yaml
1 -lockfileVersion: 5.3 1 +lockfileVersion: 5.4
2 2
3 specifiers: 3 specifiers:
4 '@commitlint/cli': ^17.2.0 4 '@commitlint/cli': ^17.2.0
@@ -84,7 +84,7 @@ dependencies: @@ -84,7 +84,7 @@ dependencies:
84 '@iconify/iconify': 3.0.0 84 '@iconify/iconify': 3.0.0
85 '@vueuse/core': 9.5.0_vue@3.2.44 85 '@vueuse/core': 9.5.0_vue@3.2.44
86 '@wangeditor/editor': 5.1.22 86 '@wangeditor/editor': 5.1.22
87 - '@wangeditor/editor-for-vue': 5.1.12_95363b7c2c964a937bf2a01c911df30e 87 + '@wangeditor/editor-for-vue': 5.1.12_su3dw7bmszfjg67suaojchptby
88 '@zxcvbn-ts/core': 2.1.0 88 '@zxcvbn-ts/core': 2.1.0
89 animate.css: 4.1.1 89 animate.css: 4.1.1
90 axios: 0.27.2 90 axios: 0.27.2
@@ -99,7 +99,7 @@ dependencies: @@ -99,7 +99,7 @@ dependencies:
99 lodash-es: 4.17.21 99 lodash-es: 4.17.21
100 mitt: 3.0.0 100 mitt: 3.0.0
101 nprogress: 0.2.0 101 nprogress: 0.2.0
102 - pinia: 2.0.23_typescript@4.8.4+vue@3.2.44 102 + pinia: 2.0.23_d45o5shxrtvj6wh4y524t7cqnm
103 qrcode: 1.5.1 103 qrcode: 1.5.1
104 qs: 6.11.0 104 qs: 6.11.0
105 url: 0.11.0 105 url: 0.11.0
@@ -124,15 +124,15 @@ devDependencies: @@ -124,15 +124,15 @@ devDependencies:
124 '@types/nprogress': 0.2.0 124 '@types/nprogress': 0.2.0
125 '@types/qrcode': 1.5.0 125 '@types/qrcode': 1.5.0
126 '@types/qs': 6.9.7 126 '@types/qs': 6.9.7
127 - '@typescript-eslint/eslint-plugin': 5.42.1_d506b9be61cb4ac2646ecbc6e0680464  
128 - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0+typescript@4.8.4 127 + '@typescript-eslint/eslint-plugin': 5.42.1_2udltptbznfmezdozpdoa2aemq
  128 + '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
129 '@vitejs/plugin-vue': 3.2.0_vite@3.2.3+vue@3.2.44 129 '@vitejs/plugin-vue': 3.2.0_vite@3.2.3+vue@3.2.44
130 '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.3+vue@3.2.44 130 '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.3+vue@3.2.44
131 autoprefixer: 10.4.13_postcss@8.4.18 131 autoprefixer: 10.4.13_postcss@8.4.18
132 eslint: 8.27.0 132 eslint: 8.27.0
133 eslint-config-prettier: 8.5.0_eslint@8.27.0 133 eslint-config-prettier: 8.5.0_eslint@8.27.0
134 eslint-define-config: 1.12.0 134 eslint-define-config: 1.12.0
135 - eslint-plugin-prettier: 4.2.1_afddd95fb7dd832efd05cfac2e17feb1 135 + eslint-plugin-prettier: 4.2.1_v7o5sx5x3wbs57ifz6wc4f76we
136 eslint-plugin-vue: 9.7.0_eslint@8.27.0 136 eslint-plugin-vue: 9.7.0_eslint@8.27.0
137 less: 4.1.3 137 less: 4.1.3
138 lint-staged: 13.0.3 138 lint-staged: 13.0.3
@@ -144,14 +144,14 @@ devDependencies: @@ -144,14 +144,14 @@ devDependencies:
144 rimraf: 3.0.2 144 rimraf: 3.0.2
145 rollup: 3.2.5 145 rollup: 3.2.5
146 stylelint: 14.14.1 146 stylelint: 14.14.1
147 - stylelint-config-html: 1.1.0_0711e485e505c8bbf0b549e6b356f7f2 147 + stylelint-config-html: 1.1.0_a4i6jbpfaxelx4fvjhtlgvxx6i
148 stylelint-config-prettier: 9.0.4_stylelint@14.14.1 148 stylelint-config-prettier: 9.0.4_stylelint@14.14.1
149 stylelint-config-recommended: 9.0.0_stylelint@14.14.1 149 stylelint-config-recommended: 9.0.0_stylelint@14.14.1
150 stylelint-config-standard: 29.0.0_stylelint@14.14.1 150 stylelint-config-standard: 29.0.0_stylelint@14.14.1
151 stylelint-order: 5.0.0_stylelint@14.14.1 151 stylelint-order: 5.0.0_stylelint@14.14.1
152 typescript: 4.8.4 152 typescript: 4.8.4
153 - unplugin-vue-macros: 0.16.2_688fcac82e974ec4fd5c071d8de5a7a5  
154 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 153 + unplugin-vue-macros: 0.16.2_nch4vsbos5hmj7k4a4oy3znhuu
  154 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
155 vite-plugin-compression: 0.5.1_vite@3.2.3 155 vite-plugin-compression: 0.5.1_vite@3.2.3
156 vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.3 156 vite-plugin-eslint: 1.8.1_eslint@8.27.0+vite@3.2.3
157 vite-plugin-html: 3.2.0_vite@3.2.3 157 vite-plugin-html: 3.2.0_vite@3.2.3
@@ -574,10 +574,10 @@ packages: @@ -574,10 +574,10 @@ packages:
574 '@types/node': 14.18.31 574 '@types/node': 14.18.31
575 chalk: 4.1.2 575 chalk: 4.1.2
576 cosmiconfig: 7.0.1 576 cosmiconfig: 7.0.1
577 - cosmiconfig-typescript-loader: 4.1.1_33d7b64ae90e9bb80d48469351c457b9 577 + cosmiconfig-typescript-loader: 4.1.1_gpl3msxjb2n3qdkii2jvdrcxxe
578 lodash: 4.17.21 578 lodash: 4.17.21
579 resolve-from: 5.0.0 579 resolve-from: 5.0.0
580 - ts-node: 10.9.1_2abc08acbb4fe741ae8218df9aa74f5c 580 + ts-node: 10.9.1_fk6arlf3j7tudlucddpzvj2plq
581 typescript: 4.8.4 581 typescript: 4.8.4
582 transitivePeerDependencies: 582 transitivePeerDependencies:
583 - '@swc/core' 583 - '@swc/core'
@@ -658,7 +658,7 @@ packages: @@ -658,7 +658,7 @@ packages:
658 '@jridgewell/trace-mapping': 0.3.9 658 '@jridgewell/trace-mapping': 0.3.9
659 dev: true 659 dev: true
660 660
661 - /@csstools/selector-specificity/2.0.2_1d546e2941f6b4ca889831b9fbdc79d8: 661 + /@csstools/selector-specificity/2.0.2_dvkg4kkb622mvceygg47xxdz3a:
662 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} 662 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
663 engines: {node: ^12 || ^14 || >=16} 663 engines: {node: ^12 || ^14 || >=16}
664 peerDependencies: 664 peerDependencies:
@@ -798,14 +798,12 @@ packages: @@ -798,14 +798,12 @@ packages:
798 '@intlify/message-compiler': 9.2.2 798 '@intlify/message-compiler': 9.2.2
799 '@intlify/shared': 9.2.2 799 '@intlify/shared': 9.2.2
800 '@intlify/vue-devtools': 9.2.2 800 '@intlify/vue-devtools': 9.2.2
801 - dev: false  
802 801
803 /@intlify/devtools-if/9.2.2: 802 /@intlify/devtools-if/9.2.2:
804 resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==} 803 resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
805 engines: {node: '>= 14'} 804 engines: {node: '>= 14'}
806 dependencies: 805 dependencies:
807 '@intlify/shared': 9.2.2 806 '@intlify/shared': 9.2.2
808 - dev: false  
809 807
810 /@intlify/message-compiler/9.2.2: 808 /@intlify/message-compiler/9.2.2:
811 resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==} 809 resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
@@ -813,7 +811,6 @@ packages: @@ -813,7 +811,6 @@ packages:
813 dependencies: 811 dependencies:
814 '@intlify/shared': 9.2.2 812 '@intlify/shared': 9.2.2
815 source-map: 0.6.1 813 source-map: 0.6.1
816 - dev: false  
817 814
818 /@intlify/message-compiler/9.3.0-beta.6: 815 /@intlify/message-compiler/9.3.0-beta.6:
819 resolution: {integrity: sha512-3PJqRJoqvFHExA9DCkf7fZYKbvYne1tYQ0fptJAhUOZsELarh8wr4aPLKWCkQSRuutdrtZ/n5CcPgJgUmVthDw==} 816 resolution: {integrity: sha512-3PJqRJoqvFHExA9DCkf7fZYKbvYne1tYQ0fptJAhUOZsELarh8wr4aPLKWCkQSRuutdrtZ/n5CcPgJgUmVthDw==}
@@ -826,7 +823,6 @@ packages: @@ -826,7 +823,6 @@ packages:
826 /@intlify/shared/9.2.2: 823 /@intlify/shared/9.2.2:
827 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} 824 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
828 engines: {node: '>= 14'} 825 engines: {node: '>= 14'}
829 - dev: false  
830 826
831 /@intlify/shared/9.3.0-beta.6: 827 /@intlify/shared/9.3.0-beta.6:
832 resolution: {integrity: sha512-ITA1R4tvJYwZXT5x6QCSwxcwQ4dU52zrzVm/EUbgsp8oWzYS1xexBrxyNM80PSQudYvL2rvcZJKQ7yBh7b0LkQ==} 828 resolution: {integrity: sha512-ITA1R4tvJYwZXT5x6QCSwxcwQ4dU52zrzVm/EUbgsp8oWzYS1xexBrxyNM80PSQudYvL2rvcZJKQ7yBh7b0LkQ==}
@@ -854,7 +850,7 @@ packages: @@ -854,7 +850,7 @@ packages:
854 debug: 4.3.4 850 debug: 4.3.4
855 fast-glob: 3.2.12 851 fast-glob: 3.2.12
856 source-map: 0.6.1 852 source-map: 0.6.1
857 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 853 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
858 vue-i18n: 9.2.2_vue@3.2.44 854 vue-i18n: 9.2.2_vue@3.2.44
859 transitivePeerDependencies: 855 transitivePeerDependencies:
860 - supports-color 856 - supports-color
@@ -866,7 +862,6 @@ packages: @@ -866,7 +862,6 @@ packages:
866 dependencies: 862 dependencies:
867 '@intlify/core-base': 9.2.2 863 '@intlify/core-base': 9.2.2
868 '@intlify/shared': 9.2.2 864 '@intlify/shared': 9.2.2
869 - dev: false  
870 865
871 /@jridgewell/gen-mapping/0.1.1: 866 /@jridgewell/gen-mapping/0.1.1:
872 resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 867 resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
@@ -1097,9 +1092,8 @@ packages: @@ -1097,9 +1092,8 @@ packages:
1097 1092
1098 /@types/web-bluetooth/0.0.16: 1093 /@types/web-bluetooth/0.0.16:
1099 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 1094 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
1100 - dev: false  
1101 1095
1102 - /@typescript-eslint/eslint-plugin/5.42.1_d506b9be61cb4ac2646ecbc6e0680464: 1096 + /@typescript-eslint/eslint-plugin/5.42.1_2udltptbznfmezdozpdoa2aemq:
1103 resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==} 1097 resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==}
1104 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1098 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1105 peerDependencies: 1099 peerDependencies:
@@ -1110,10 +1104,10 @@ packages: @@ -1110,10 +1104,10 @@ packages:
1110 typescript: 1104 typescript:
1111 optional: true 1105 optional: true
1112 dependencies: 1106 dependencies:
1113 - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0+typescript@4.8.4 1107 + '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
1114 '@typescript-eslint/scope-manager': 5.42.1 1108 '@typescript-eslint/scope-manager': 5.42.1
1115 - '@typescript-eslint/type-utils': 5.42.1_eslint@8.27.0+typescript@4.8.4  
1116 - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0+typescript@4.8.4 1109 + '@typescript-eslint/type-utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
  1110 + '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
1117 debug: 4.3.4 1111 debug: 4.3.4
1118 eslint: 8.27.0 1112 eslint: 8.27.0
1119 ignore: 5.2.0 1113 ignore: 5.2.0
@@ -1126,7 +1120,7 @@ packages: @@ -1126,7 +1120,7 @@ packages:
1126 - supports-color 1120 - supports-color
1127 dev: true 1121 dev: true
1128 1122
1129 - /@typescript-eslint/parser/5.42.1_eslint@8.27.0+typescript@4.8.4: 1123 + /@typescript-eslint/parser/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
1130 resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==} 1124 resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==}
1131 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1125 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1132 peerDependencies: 1126 peerDependencies:
@@ -1154,7 +1148,7 @@ packages: @@ -1154,7 +1148,7 @@ packages:
1154 '@typescript-eslint/visitor-keys': 5.42.1 1148 '@typescript-eslint/visitor-keys': 5.42.1
1155 dev: true 1149 dev: true
1156 1150
1157 - /@typescript-eslint/type-utils/5.42.1_eslint@8.27.0+typescript@4.8.4: 1151 + /@typescript-eslint/type-utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
1158 resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==} 1152 resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==}
1159 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1153 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1160 peerDependencies: 1154 peerDependencies:
@@ -1165,7 +1159,7 @@ packages: @@ -1165,7 +1159,7 @@ packages:
1165 optional: true 1159 optional: true
1166 dependencies: 1160 dependencies:
1167 '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4 1161 '@typescript-eslint/typescript-estree': 5.42.1_typescript@4.8.4
1168 - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0+typescript@4.8.4 1162 + '@typescript-eslint/utils': 5.42.1_rmayb2veg2btbq6mbmnyivgasy
1169 debug: 4.3.4 1163 debug: 4.3.4
1170 eslint: 8.27.0 1164 eslint: 8.27.0
1171 tsutils: 3.21.0_typescript@4.8.4 1165 tsutils: 3.21.0_typescript@4.8.4
@@ -1200,7 +1194,7 @@ packages: @@ -1200,7 +1194,7 @@ packages:
1200 - supports-color 1194 - supports-color
1201 dev: true 1195 dev: true
1202 1196
1203 - /@typescript-eslint/utils/5.42.1_eslint@8.27.0+typescript@4.8.4: 1197 + /@typescript-eslint/utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy:
1204 resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==} 1198 resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==}
1205 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1199 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1206 peerDependencies: 1200 peerDependencies:
@@ -1279,7 +1273,7 @@ packages: @@ -1279,7 +1273,7 @@ packages:
1279 '@babel/core': 7.19.6 1273 '@babel/core': 7.19.6
1280 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.19.6 1274 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.19.6
1281 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.19.6 1275 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.19.6
1282 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 1276 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
1283 vue: 3.2.44 1277 vue: 3.2.44
1284 transitivePeerDependencies: 1278 transitivePeerDependencies:
1285 - supports-color 1279 - supports-color
@@ -1292,7 +1286,7 @@ packages: @@ -1292,7 +1286,7 @@ packages:
1292 vite: ^3.0.0 1286 vite: ^3.0.0
1293 vue: ^3.2.25 1287 vue: ^3.2.25
1294 dependencies: 1288 dependencies:
1295 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 1289 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
1296 vue: 3.2.44 1290 vue: 3.2.44
1297 dev: true 1291 dev: true
1298 1292
@@ -1424,7 +1418,7 @@ packages: @@ -1424,7 +1418,7 @@ packages:
1424 unplugin: 0.10.2 1418 unplugin: 0.10.2
1425 dev: true 1419 dev: true
1426 1420
1427 - /@vue-macros/named-template/0.0.5_aaae75a03f99901122a33a7412c8cd0a: 1421 + /@vue-macros/named-template/0.0.5_vkxhlib7tgibcivdhj2bfsgnbi:
1428 resolution: {integrity: sha512-bZRUljNyvOOqeE9dyqXvKPQCLUCcPt1EkThmXqSbxagV29ohyviF8+CCs/8OdmNygLTBIChjP8DexQ3nUIFzUg==} 1422 resolution: {integrity: sha512-bZRUljNyvOOqeE9dyqXvKPQCLUCcPt1EkThmXqSbxagV29ohyviF8+CCs/8OdmNygLTBIChjP8DexQ3nUIFzUg==}
1429 engines: {node: '>=14.19.0'} 1423 engines: {node: '>=14.19.0'}
1430 dependencies: 1424 dependencies:
@@ -1521,7 +1515,6 @@ packages: @@ -1521,7 +1515,6 @@ packages:
1521 '@vue/shared': 3.2.44 1515 '@vue/shared': 3.2.44
1522 estree-walker: 2.0.2 1516 estree-walker: 2.0.2
1523 source-map: 0.6.1 1517 source-map: 0.6.1
1524 - dev: false  
1525 1518
1526 /@vue/compiler-dom/3.2.41: 1519 /@vue/compiler-dom/3.2.41:
1527 resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==} 1520 resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==}
@@ -1542,7 +1535,6 @@ packages: @@ -1542,7 +1535,6 @@ packages:
1542 dependencies: 1535 dependencies:
1543 '@vue/compiler-core': 3.2.44 1536 '@vue/compiler-core': 3.2.44
1544 '@vue/shared': 3.2.44 1537 '@vue/shared': 3.2.44
1545 - dev: false  
1546 1538
1547 /@vue/compiler-sfc/3.2.41: 1539 /@vue/compiler-sfc/3.2.41:
1548 resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==} 1540 resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==}
@@ -1587,7 +1579,6 @@ packages: @@ -1587,7 +1579,6 @@ packages:
1587 magic-string: 0.25.9 1579 magic-string: 0.25.9
1588 postcss: 8.4.18 1580 postcss: 8.4.18
1589 source-map: 0.6.1 1581 source-map: 0.6.1
1590 - dev: false  
1591 1582
1592 /@vue/compiler-ssr/3.2.41: 1583 /@vue/compiler-ssr/3.2.41:
1593 resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==} 1584 resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==}
@@ -1608,11 +1599,9 @@ packages: @@ -1608,11 +1599,9 @@ packages:
1608 dependencies: 1599 dependencies:
1609 '@vue/compiler-dom': 3.2.44 1600 '@vue/compiler-dom': 3.2.44
1610 '@vue/shared': 3.2.44 1601 '@vue/shared': 3.2.44
1611 - dev: false  
1612 1602
1613 /@vue/devtools-api/6.4.3: 1603 /@vue/devtools-api/6.4.3:
1614 resolution: {integrity: sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==} 1604 resolution: {integrity: sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==}
1615 - dev: false  
1616 1605
1617 /@vue/devtools-api/6.4.4: 1606 /@vue/devtools-api/6.4.4:
1618 resolution: {integrity: sha512-Ku31WzpOV/8cruFaXaEZKF81WkNnvCSlBY4eOGtz5WMSdJvX1v1WWlSMGZeqUwPtQ27ZZz7B62erEMq8JDjcXw==} 1607 resolution: {integrity: sha512-Ku31WzpOV/8cruFaXaEZKF81WkNnvCSlBY4eOGtz5WMSdJvX1v1WWlSMGZeqUwPtQ27ZZz7B62erEMq8JDjcXw==}
@@ -1650,7 +1639,6 @@ packages: @@ -1650,7 +1639,6 @@ packages:
1650 '@vue/shared': 3.2.44 1639 '@vue/shared': 3.2.44
1651 estree-walker: 2.0.2 1640 estree-walker: 2.0.2
1652 magic-string: 0.25.9 1641 magic-string: 0.25.9
1653 - dev: false  
1654 1642
1655 /@vue/reactivity/3.2.41: 1643 /@vue/reactivity/3.2.41:
1656 resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==} 1644 resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==}
@@ -1662,14 +1650,12 @@ packages: @@ -1662,14 +1650,12 @@ packages:
1662 resolution: {integrity: sha512-Fe0s52fTsPl+RSdvoqUZ3HRKlaVsKhIh1mea5EWOedFvZCjnymzlj3YC1wZMxi89qXRFSdEASVA/BWUGypk0Ig==} 1650 resolution: {integrity: sha512-Fe0s52fTsPl+RSdvoqUZ3HRKlaVsKhIh1mea5EWOedFvZCjnymzlj3YC1wZMxi89qXRFSdEASVA/BWUGypk0Ig==}
1663 dependencies: 1651 dependencies:
1664 '@vue/shared': 3.2.44 1652 '@vue/shared': 3.2.44
1665 - dev: false  
1666 1653
1667 /@vue/runtime-core/3.2.44: 1654 /@vue/runtime-core/3.2.44:
1668 resolution: {integrity: sha512-uwEV1cttL33k2dC+CNGYhKEYqGejT9KmgQ+4n/LmYUfZ1Gorl8F32DlIX+1pANyGHL1tBAisqHDxKyQBp2oBNA==} 1655 resolution: {integrity: sha512-uwEV1cttL33k2dC+CNGYhKEYqGejT9KmgQ+4n/LmYUfZ1Gorl8F32DlIX+1pANyGHL1tBAisqHDxKyQBp2oBNA==}
1669 dependencies: 1656 dependencies:
1670 '@vue/reactivity': 3.2.44 1657 '@vue/reactivity': 3.2.44
1671 '@vue/shared': 3.2.44 1658 '@vue/shared': 3.2.44
1672 - dev: false  
1673 1659
1674 /@vue/runtime-dom/3.2.44: 1660 /@vue/runtime-dom/3.2.44:
1675 resolution: {integrity: sha512-LDzNwXpU/nSpxrLk5jS0bfStgt88msgsgFzj6vHrl7es3QktIrCGybQS5CB/p/TO0q98iAiYtEVmi+Lej7Vgjg==} 1661 resolution: {integrity: sha512-LDzNwXpU/nSpxrLk5jS0bfStgt88msgsgFzj6vHrl7es3QktIrCGybQS5CB/p/TO0q98iAiYtEVmi+Lej7Vgjg==}
@@ -1677,7 +1663,6 @@ packages: @@ -1677,7 +1663,6 @@ packages:
1677 '@vue/runtime-core': 3.2.44 1663 '@vue/runtime-core': 3.2.44
1678 '@vue/shared': 3.2.44 1664 '@vue/shared': 3.2.44
1679 csstype: 2.6.21 1665 csstype: 2.6.21
1680 - dev: false  
1681 1666
1682 /@vue/server-renderer/3.2.44_vue@3.2.44: 1667 /@vue/server-renderer/3.2.44_vue@3.2.44:
1683 resolution: {integrity: sha512-3+ArN07UgOAdbGKIp3uVqeC3bnR3J324QNjPR6vxHbLrTlkibFv8QNled/ux3fVq0KDCkVVKGOKB2V4sCIYOgg==} 1668 resolution: {integrity: sha512-3+ArN07UgOAdbGKIp3uVqeC3bnR3J324QNjPR6vxHbLrTlkibFv8QNled/ux3fVq0KDCkVVKGOKB2V4sCIYOgg==}
@@ -1687,7 +1672,6 @@ packages: @@ -1687,7 +1672,6 @@ packages:
1687 '@vue/compiler-ssr': 3.2.44 1672 '@vue/compiler-ssr': 3.2.44
1688 '@vue/shared': 3.2.44 1673 '@vue/shared': 3.2.44
1689 vue: 3.2.44 1674 vue: 3.2.44
1690 - dev: false  
1691 1675
1692 /@vue/shared/3.2.41: 1676 /@vue/shared/3.2.41:
1693 resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==} 1677 resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==}
@@ -1699,7 +1683,6 @@ packages: @@ -1699,7 +1683,6 @@ packages:
1699 1683
1700 /@vue/shared/3.2.44: 1684 /@vue/shared/3.2.44:
1701 resolution: {integrity: sha512-mGZ44bnn0zpZ36nXtxbrBPno43yr96wjQE1dBEKS1Sieugt27HS4OGZVBRIgsdGzosB7vqZAvu0ttu1FDVdolA==} 1685 resolution: {integrity: sha512-mGZ44bnn0zpZ36nXtxbrBPno43yr96wjQE1dBEKS1Sieugt27HS4OGZVBRIgsdGzosB7vqZAvu0ttu1FDVdolA==}
1702 - dev: false  
1703 1686
1704 /@vueuse/core/9.5.0_vue@3.2.44: 1687 /@vueuse/core/9.5.0_vue@3.2.44:
1705 resolution: {integrity: sha512-6GsWBsJHEb3sYw15mbLrcbslAVY45pkzjJYTKYKCXv88z7srAF0VEW0q+oXKsl58tCbqooplInahXFg8Yo1m4w==} 1688 resolution: {integrity: sha512-6GsWBsJHEb3sYw15mbLrcbslAVY45pkzjJYTKYKCXv88z7srAF0VEW0q+oXKsl58tCbqooplInahXFg8Yo1m4w==}
@@ -1711,11 +1694,9 @@ packages: @@ -1711,11 +1694,9 @@ packages:
1711 transitivePeerDependencies: 1694 transitivePeerDependencies:
1712 - '@vue/composition-api' 1695 - '@vue/composition-api'
1713 - vue 1696 - vue
1714 - dev: false  
1715 1697
1716 /@vueuse/metadata/9.5.0: 1698 /@vueuse/metadata/9.5.0:
1717 resolution: {integrity: sha512-4M1AyPZmIv41pym+K5+4wup3bKuYebbH8w8BROY1hmT7rIwcyS4tEL+UsGz0Hiu1FCOxcoBrwtAizc0YmBJjyQ==} 1699 resolution: {integrity: sha512-4M1AyPZmIv41pym+K5+4wup3bKuYebbH8w8BROY1hmT7rIwcyS4tEL+UsGz0Hiu1FCOxcoBrwtAizc0YmBJjyQ==}
1718 - dev: false  
1719 1700
1720 /@vueuse/shared/9.5.0_vue@3.2.44: 1701 /@vueuse/shared/9.5.0_vue@3.2.44:
1721 resolution: {integrity: sha512-HnnCWU1Vg9CVWRCcI8ohDKDRB2Sc4bTgT1XAIaoLSfVHHn+TKbrox6pd3klCSw4UDxkhDfOk8cAdcK+Z5KleCA==} 1702 resolution: {integrity: sha512-HnnCWU1Vg9CVWRCcI8ohDKDRB2Sc4bTgT1XAIaoLSfVHHn+TKbrox6pd3klCSw4UDxkhDfOk8cAdcK+Z5KleCA==}
@@ -1724,9 +1705,8 @@ packages: @@ -1724,9 +1705,8 @@ packages:
1724 transitivePeerDependencies: 1705 transitivePeerDependencies:
1725 - '@vue/composition-api' 1706 - '@vue/composition-api'
1726 - vue 1707 - vue
1727 - dev: false  
1728 1708
1729 - /@wangeditor/basic-modules/1.1.6_77a30faf19af486fa77beec27d9e830b: 1709 + /@wangeditor/basic-modules/1.1.6_o6rq7lyzv5eg7j3353bh3hudbm:
1730 resolution: {integrity: sha512-wckcFm/kEAHpTn7dTmN0+7POFoygqt9bZdNHJUkdKObXtAerml8RdjrkHRcwJFCkSELbrNK63fvkwS0+FsabfA==} 1710 resolution: {integrity: sha512-wckcFm/kEAHpTn7dTmN0+7POFoygqt9bZdNHJUkdKObXtAerml8RdjrkHRcwJFCkSELbrNK63fvkwS0+FsabfA==}
1731 peerDependencies: 1711 peerDependencies:
1732 '@wangeditor/core': 1.x 1712 '@wangeditor/core': 1.x
@@ -1736,7 +1716,7 @@ packages: @@ -1736,7 +1716,7 @@ packages:
1736 slate: ^0.72.0 1716 slate: ^0.72.0
1737 snabbdom: ^3.1.0 1717 snabbdom: ^3.1.0
1738 dependencies: 1718 dependencies:
1739 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1719 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1740 dom7: 3.0.0 1720 dom7: 3.0.0
1741 is-url: 1.2.4 1721 is-url: 1.2.4
1742 lodash.throttle: 4.1.1 1722 lodash.throttle: 4.1.1
@@ -1745,7 +1725,7 @@ packages: @@ -1745,7 +1725,7 @@ packages:
1745 snabbdom: 3.5.1 1725 snabbdom: 3.5.1
1746 dev: false 1726 dev: false
1747 1727
1748 - /@wangeditor/code-highlight/1.0.3_5fc334405e4d9219aba9f66fdd32274f: 1728 + /@wangeditor/code-highlight/1.0.3_l7btiqc6jwjbtk5j6zx52mrhj4:
1749 resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==} 1729 resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==}
1750 peerDependencies: 1730 peerDependencies:
1751 '@wangeditor/core': 1.x 1731 '@wangeditor/core': 1.x
@@ -1753,14 +1733,14 @@ packages: @@ -1753,14 +1733,14 @@ packages:
1753 slate: ^0.72.0 1733 slate: ^0.72.0
1754 snabbdom: ^3.1.0 1734 snabbdom: ^3.1.0
1755 dependencies: 1735 dependencies:
1756 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1736 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1757 dom7: 3.0.0 1737 dom7: 3.0.0
1758 prismjs: 1.29.0 1738 prismjs: 1.29.0
1759 slate: 0.72.8 1739 slate: 0.72.8
1760 snabbdom: 3.5.1 1740 snabbdom: 3.5.1
1761 dev: false 1741 dev: false
1762 1742
1763 - /@wangeditor/core/1.1.18_83942e33b1d7a7a6aab922626cc5c0f9: 1743 + /@wangeditor/core/1.1.18_qokc4m5r26t2nkvzejrgzroa7e:
1764 resolution: {integrity: sha512-GZsW/8tm2Hc2hZKX8BZP9PO7vTZll9YXsOt+jKck3D2bj9nk4T0FZymuE5fq9ZHdo+MwLiXBHXS/D1SIGlVnGQ==} 1744 resolution: {integrity: sha512-GZsW/8tm2Hc2hZKX8BZP9PO7vTZll9YXsOt+jKck3D2bj9nk4T0FZymuE5fq9ZHdo+MwLiXBHXS/D1SIGlVnGQ==}
1765 peerDependencies: 1745 peerDependencies:
1766 '@uppy/core': ^2.1.1 1746 '@uppy/core': ^2.1.1
@@ -1800,7 +1780,7 @@ packages: @@ -1800,7 +1780,7 @@ packages:
1800 snabbdom: 3.5.1 1780 snabbdom: 3.5.1
1801 dev: false 1781 dev: false
1802 1782
1803 - /@wangeditor/editor-for-vue/5.1.12_95363b7c2c964a937bf2a01c911df30e: 1783 + /@wangeditor/editor-for-vue/5.1.12_su3dw7bmszfjg67suaojchptby:
1804 resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==} 1784 resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==}
1805 peerDependencies: 1785 peerDependencies:
1806 '@wangeditor/editor': '>=5.1.0' 1786 '@wangeditor/editor': '>=5.1.0'
@@ -1815,13 +1795,13 @@ packages: @@ -1815,13 +1795,13 @@ packages:
1815 dependencies: 1795 dependencies:
1816 '@uppy/core': 2.3.4 1796 '@uppy/core': 2.3.4
1817 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4 1797 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4
1818 - '@wangeditor/basic-modules': 1.1.6_77a30faf19af486fa77beec27d9e830b  
1819 - '@wangeditor/code-highlight': 1.0.3_5fc334405e4d9219aba9f66fdd32274f  
1820 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9  
1821 - '@wangeditor/list-module': 1.0.5_5fc334405e4d9219aba9f66fdd32274f  
1822 - '@wangeditor/table-module': 1.1.4_5d8cd29e73aad229850928ebedfb04b7  
1823 - '@wangeditor/upload-image-module': 1.0.2_7a9aad2bf3b86405f1f37087d2b924a4  
1824 - '@wangeditor/video-module': 1.1.4_47db22f98847f2d6b6569a7e95c5dcf5 1798 + '@wangeditor/basic-modules': 1.1.6_o6rq7lyzv5eg7j3353bh3hudbm
  1799 + '@wangeditor/code-highlight': 1.0.3_l7btiqc6jwjbtk5j6zx52mrhj4
  1800 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
  1801 + '@wangeditor/list-module': 1.0.5_l7btiqc6jwjbtk5j6zx52mrhj4
  1802 + '@wangeditor/table-module': 1.1.4_lwgnfhttvljctbijfdv636yew4
  1803 + '@wangeditor/upload-image-module': 1.0.2_pknk2k7txbsal4ptocd5fojeuq
  1804 + '@wangeditor/video-module': 1.1.4_i7nsf6mii7znnnswtj7jlro46u
1825 dom7: 3.0.0 1805 dom7: 3.0.0
1826 is-hotkey: 0.2.0 1806 is-hotkey: 0.2.0
1827 lodash.camelcase: 4.3.0 1807 lodash.camelcase: 4.3.0
@@ -1836,7 +1816,7 @@ packages: @@ -1836,7 +1816,7 @@ packages:
1836 snabbdom: 3.5.1 1816 snabbdom: 3.5.1
1837 dev: false 1817 dev: false
1838 1818
1839 - /@wangeditor/list-module/1.0.5_5fc334405e4d9219aba9f66fdd32274f: 1819 + /@wangeditor/list-module/1.0.5_l7btiqc6jwjbtk5j6zx52mrhj4:
1840 resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==} 1820 resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==}
1841 peerDependencies: 1821 peerDependencies:
1842 '@wangeditor/core': 1.x 1822 '@wangeditor/core': 1.x
@@ -1844,13 +1824,13 @@ packages: @@ -1844,13 +1824,13 @@ packages:
1844 slate: ^0.72.0 1824 slate: ^0.72.0
1845 snabbdom: ^3.1.0 1825 snabbdom: ^3.1.0
1846 dependencies: 1826 dependencies:
1847 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1827 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1848 dom7: 3.0.0 1828 dom7: 3.0.0
1849 slate: 0.72.8 1829 slate: 0.72.8
1850 snabbdom: 3.5.1 1830 snabbdom: 3.5.1
1851 dev: false 1831 dev: false
1852 1832
1853 - /@wangeditor/table-module/1.1.4_5d8cd29e73aad229850928ebedfb04b7: 1833 + /@wangeditor/table-module/1.1.4_lwgnfhttvljctbijfdv636yew4:
1854 resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==} 1834 resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==}
1855 peerDependencies: 1835 peerDependencies:
1856 '@wangeditor/core': 1.x 1836 '@wangeditor/core': 1.x
@@ -1861,7 +1841,7 @@ packages: @@ -1861,7 +1841,7 @@ packages:
1861 slate: ^0.72.0 1841 slate: ^0.72.0
1862 snabbdom: ^3.1.0 1842 snabbdom: ^3.1.0
1863 dependencies: 1843 dependencies:
1864 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1844 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1865 dom7: 3.0.0 1845 dom7: 3.0.0
1866 lodash.isequal: 4.5.0 1846 lodash.isequal: 4.5.0
1867 lodash.throttle: 4.1.1 1847 lodash.throttle: 4.1.1
@@ -1870,7 +1850,7 @@ packages: @@ -1870,7 +1850,7 @@ packages:
1870 snabbdom: 3.5.1 1850 snabbdom: 3.5.1
1871 dev: false 1851 dev: false
1872 1852
1873 - /@wangeditor/upload-image-module/1.0.2_7a9aad2bf3b86405f1f37087d2b924a4: 1853 + /@wangeditor/upload-image-module/1.0.2_pknk2k7txbsal4ptocd5fojeuq:
1874 resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==} 1854 resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==}
1875 peerDependencies: 1855 peerDependencies:
1876 '@uppy/core': ^2.0.3 1856 '@uppy/core': ^2.0.3
@@ -1884,15 +1864,15 @@ packages: @@ -1884,15 +1864,15 @@ packages:
1884 dependencies: 1864 dependencies:
1885 '@uppy/core': 2.3.4 1865 '@uppy/core': 2.3.4
1886 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4 1866 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4
1887 - '@wangeditor/basic-modules': 1.1.6_77a30faf19af486fa77beec27d9e830b  
1888 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1867 + '@wangeditor/basic-modules': 1.1.6_o6rq7lyzv5eg7j3353bh3hudbm
  1868 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1889 dom7: 3.0.0 1869 dom7: 3.0.0
1890 lodash.foreach: 4.5.0 1870 lodash.foreach: 4.5.0
1891 slate: 0.72.8 1871 slate: 0.72.8
1892 snabbdom: 3.5.1 1872 snabbdom: 3.5.1
1893 dev: false 1873 dev: false
1894 1874
1895 - /@wangeditor/video-module/1.1.4_47db22f98847f2d6b6569a7e95c5dcf5: 1875 + /@wangeditor/video-module/1.1.4_i7nsf6mii7znnnswtj7jlro46u:
1896 resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==} 1876 resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==}
1897 peerDependencies: 1877 peerDependencies:
1898 '@uppy/core': ^2.1.4 1878 '@uppy/core': ^2.1.4
@@ -1905,7 +1885,7 @@ packages: @@ -1905,7 +1885,7 @@ packages:
1905 dependencies: 1885 dependencies:
1906 '@uppy/core': 2.3.4 1886 '@uppy/core': 2.3.4
1907 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4 1887 '@uppy/xhr-upload': 2.1.3_@uppy+core@2.3.4
1908 - '@wangeditor/core': 1.1.18_83942e33b1d7a7a6aab922626cc5c0f9 1888 + '@wangeditor/core': 1.1.18_qokc4m5r26t2nkvzejrgzroa7e
1909 dom7: 3.0.0 1889 dom7: 3.0.0
1910 nanoid: 3.3.4 1890 nanoid: 3.3.4
1911 slate: 0.72.8 1891 slate: 0.72.8
@@ -2269,6 +2249,8 @@ packages: @@ -2269,6 +2249,8 @@ packages:
2269 snapdragon-node: 2.1.1 2249 snapdragon-node: 2.1.1
2270 split-string: 3.1.0 2250 split-string: 3.1.0
2271 to-regex: 3.0.2 2251 to-regex: 3.0.2
  2252 + transitivePeerDependencies:
  2253 + - supports-color
2272 dev: true 2254 dev: true
2273 2255
2274 /braces/3.0.2: 2256 /braces/3.0.2:
@@ -2652,8 +2634,8 @@ packages: @@ -2652,8 +2634,8 @@ packages:
2652 engines: {node: '>=10'} 2634 engines: {node: '>=10'}
2653 hasBin: true 2635 hasBin: true
2654 dependencies: 2636 dependencies:
2655 - is-text-path: 1.0.1  
2656 JSONStream: 1.3.5 2637 JSONStream: 1.3.5
  2638 + is-text-path: 1.0.1
2657 lodash: 4.17.21 2639 lodash: 4.17.21
2658 meow: 8.1.2 2640 meow: 8.1.2
2659 split2: 3.2.2 2641 split2: 3.2.2
@@ -2685,7 +2667,7 @@ packages: @@ -2685,7 +2667,7 @@ packages:
2685 vary: 1.1.2 2667 vary: 1.1.2
2686 dev: true 2668 dev: true
2687 2669
2688 - /cosmiconfig-typescript-loader/4.1.1_33d7b64ae90e9bb80d48469351c457b9: 2670 + /cosmiconfig-typescript-loader/4.1.1_gpl3msxjb2n3qdkii2jvdrcxxe:
2689 resolution: {integrity: sha512-9DHpa379Gp0o0Zefii35fcmuuin6q92FnLDffzdZ0l9tVd3nEobG3O+MZ06+kuBvFTSVScvNb/oHA13Nd4iipg==} 2671 resolution: {integrity: sha512-9DHpa379Gp0o0Zefii35fcmuuin6q92FnLDffzdZ0l9tVd3nEobG3O+MZ06+kuBvFTSVScvNb/oHA13Nd4iipg==}
2690 engines: {node: '>=12', npm: '>=6'} 2672 engines: {node: '>=12', npm: '>=6'}
2691 peerDependencies: 2673 peerDependencies:
@@ -2696,7 +2678,7 @@ packages: @@ -2696,7 +2678,7 @@ packages:
2696 dependencies: 2678 dependencies:
2697 '@types/node': 14.18.31 2679 '@types/node': 14.18.31
2698 cosmiconfig: 7.0.1 2680 cosmiconfig: 7.0.1
2699 - ts-node: 10.9.1_2abc08acbb4fe741ae8218df9aa74f5c 2681 + ts-node: 10.9.1_fk6arlf3j7tudlucddpzvj2plq
2700 typescript: 4.8.4 2682 typescript: 4.8.4
2701 dev: true 2683 dev: true
2702 2684
@@ -2779,7 +2761,6 @@ packages: @@ -2779,7 +2761,6 @@ packages:
2779 2761
2780 /csstype/2.6.21: 2762 /csstype/2.6.21:
2781 resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} 2763 resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
2782 - dev: false  
2783 2764
2784 /d/1.0.1: 2765 /d/1.0.1:
2785 resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} 2766 resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
@@ -2803,12 +2784,22 @@ packages: @@ -2803,12 +2784,22 @@ packages:
2803 2784
2804 /debug/2.6.9: 2785 /debug/2.6.9:
2805 resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 2786 resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
  2787 + peerDependencies:
  2788 + supports-color: '*'
  2789 + peerDependenciesMeta:
  2790 + supports-color:
  2791 + optional: true
2806 dependencies: 2792 dependencies:
2807 ms: 2.0.0 2793 ms: 2.0.0
2808 dev: true 2794 dev: true
2809 2795
2810 /debug/3.2.7: 2796 /debug/3.2.7:
2811 resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 2797 resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
  2798 + peerDependencies:
  2799 + supports-color: '*'
  2800 + peerDependenciesMeta:
  2801 + supports-color:
  2802 + optional: true
2812 dependencies: 2803 dependencies:
2813 ms: 2.1.3 2804 ms: 2.1.3
2814 dev: true 2805 dev: true
@@ -3074,7 +3065,7 @@ packages: @@ -3074,7 +3065,7 @@ packages:
3074 escape-html: 1.0.3 3065 escape-html: 1.0.3
3075 lodash: 4.17.21 3066 lodash: 4.17.21
3076 lodash-es: 4.17.21 3067 lodash-es: 4.17.21
3077 - lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd 3068 + lodash-unified: 1.0.2_3ib2ivapxullxkx3xftsimdk7u
3078 memoize-one: 6.0.0 3069 memoize-one: 6.0.0
3079 normalize-wheel-es: 1.2.0 3070 normalize-wheel-es: 1.2.0
3080 vue: 3.2.44 3071 vue: 3.2.44
@@ -3398,7 +3389,7 @@ packages: @@ -3398,7 +3389,7 @@ packages:
3398 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'} 3389 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
3399 dev: true 3390 dev: true
3400 3391
3401 - /eslint-plugin-prettier/4.2.1_afddd95fb7dd832efd05cfac2e17feb1: 3392 + /eslint-plugin-prettier/4.2.1_v7o5sx5x3wbs57ifz6wc4f76we:
3402 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 3393 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
3403 engines: {node: '>=12.0.0'} 3394 engines: {node: '>=12.0.0'}
3404 peerDependencies: 3395 peerDependencies:
@@ -3632,6 +3623,8 @@ packages: @@ -3632,6 +3623,8 @@ packages:
3632 regex-not: 1.0.2 3623 regex-not: 1.0.2
3633 snapdragon: 0.8.2 3624 snapdragon: 0.8.2
3634 to-regex: 3.0.2 3625 to-regex: 3.0.2
  3626 + transitivePeerDependencies:
  3627 + - supports-color
3635 dev: true 3628 dev: true
3636 3629
3637 /expand-tilde/2.0.2: 3630 /expand-tilde/2.0.2:
@@ -3687,6 +3680,8 @@ packages: @@ -3687,6 +3680,8 @@ packages:
3687 regex-not: 1.0.2 3680 regex-not: 1.0.2
3688 snapdragon: 0.8.2 3681 snapdragon: 0.8.2
3689 to-regex: 3.0.2 3682 to-regex: 3.0.2
  3683 + transitivePeerDependencies:
  3684 + - supports-color
3690 dev: true 3685 dev: true
3691 3686
3692 /fast-deep-equal/3.1.3: 3687 /fast-deep-equal/3.1.3:
@@ -4708,6 +4703,8 @@ packages: @@ -4708,6 +4703,8 @@ packages:
4708 mime: 1.6.0 4703 mime: 1.6.0
4709 needle: 3.1.0 4704 needle: 3.1.0
4710 source-map: 0.6.1 4705 source-map: 0.6.1
  4706 + transitivePeerDependencies:
  4707 + - supports-color
4711 dev: true 4708 dev: true
4712 4709
4713 /levn/0.4.1: 4710 /levn/0.4.1:
@@ -4814,7 +4811,7 @@ packages: @@ -4814,7 +4811,7 @@ packages:
4814 resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 4811 resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
4815 dev: false 4812 dev: false
4816 4813
4817 - /lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd: 4814 + /lodash-unified/1.0.2_3ib2ivapxullxkx3xftsimdk7u:
4818 resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==} 4815 resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==}
4819 peerDependencies: 4816 peerDependencies:
4820 '@types/lodash-es': '*' 4817 '@types/lodash-es': '*'
@@ -5043,6 +5040,8 @@ packages: @@ -5043,6 +5040,8 @@ packages:
5043 regex-not: 1.0.2 5040 regex-not: 1.0.2
5044 snapdragon: 0.8.2 5041 snapdragon: 0.8.2
5045 to-regex: 3.0.2 5042 to-regex: 3.0.2
  5043 + transitivePeerDependencies:
  5044 + - supports-color
5046 dev: true 5045 dev: true
5047 5046
5048 /micromatch/4.0.5: 5047 /micromatch/4.0.5:
@@ -5183,6 +5182,8 @@ packages: @@ -5183,6 +5182,8 @@ packages:
5183 regex-not: 1.0.2 5182 regex-not: 1.0.2
5184 snapdragon: 0.8.2 5183 snapdragon: 0.8.2
5185 to-regex: 3.0.2 5184 to-regex: 3.0.2
  5185 + transitivePeerDependencies:
  5186 + - supports-color
5186 dev: true 5187 dev: true
5187 5188
5188 /natural-compare-lite/1.4.0: 5189 /natural-compare-lite/1.4.0:
@@ -5202,6 +5203,8 @@ packages: @@ -5202,6 +5203,8 @@ packages:
5202 debug: 3.2.7 5203 debug: 3.2.7
5203 iconv-lite: 0.6.3 5204 iconv-lite: 0.6.3
5204 sax: 1.2.4 5205 sax: 1.2.4
  5206 + transitivePeerDependencies:
  5207 + - supports-color
5205 dev: true 5208 dev: true
5206 optional: true 5209 optional: true
5207 5210
@@ -5602,7 +5605,7 @@ packages: @@ -5602,7 +5605,7 @@ packages:
5602 dev: true 5605 dev: true
5603 optional: true 5606 optional: true
5604 5607
5605 - /pinia/2.0.23_typescript@4.8.4+vue@3.2.44: 5608 + /pinia/2.0.23_d45o5shxrtvj6wh4y524t7cqnm:
5606 resolution: {integrity: sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==} 5609 resolution: {integrity: sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==}
5607 peerDependencies: 5610 peerDependencies:
5608 '@vue/composition-api': ^1.4.0 5611 '@vue/composition-api': ^1.4.0
@@ -6258,6 +6261,8 @@ packages: @@ -6258,6 +6261,8 @@ packages:
6258 source-map: 0.5.7 6261 source-map: 0.5.7
6259 source-map-resolve: 0.5.3 6262 source-map-resolve: 0.5.3
6260 use: 3.1.1 6263 use: 3.1.1
  6264 + transitivePeerDependencies:
  6265 + - supports-color
6261 dev: true 6266 dev: true
6262 6267
6263 /source-map-js/1.0.2: 6268 /source-map-js/1.0.2:
@@ -6430,7 +6435,7 @@ packages: @@ -6430,7 +6435,7 @@ packages:
6430 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 6435 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
6431 dev: true 6436 dev: true
6432 6437
6433 - /stylelint-config-html/1.1.0_0711e485e505c8bbf0b549e6b356f7f2: 6438 + /stylelint-config-html/1.1.0_a4i6jbpfaxelx4fvjhtlgvxx6i:
6434 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} 6439 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
6435 engines: {node: ^12 || >=14} 6440 engines: {node: ^12 || >=14}
6436 peerDependencies: 6441 peerDependencies:
@@ -6483,7 +6488,7 @@ packages: @@ -6483,7 +6488,7 @@ packages:
6483 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 6488 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
6484 hasBin: true 6489 hasBin: true
6485 dependencies: 6490 dependencies:
6486 - '@csstools/selector-specificity': 2.0.2_1d546e2941f6b4ca889831b9fbdc79d8 6491 + '@csstools/selector-specificity': 2.0.2_dvkg4kkb622mvceygg47xxdz3a
6487 balanced-match: 2.0.0 6492 balanced-match: 2.0.0
6488 colord: 2.9.3 6493 colord: 2.9.3
6489 cosmiconfig: 7.0.1 6494 cosmiconfig: 7.0.1
@@ -6580,6 +6585,8 @@ packages: @@ -6580,6 +6585,8 @@ packages:
6580 posthtml-svg-mode: 1.0.3 6585 posthtml-svg-mode: 1.0.3
6581 query-string: 4.3.4 6586 query-string: 4.3.4
6582 traverse: 0.6.6 6587 traverse: 0.6.6
  6588 + transitivePeerDependencies:
  6589 + - supports-color
6583 dev: true 6590 dev: true
6584 6591
6585 /svg-tags/1.0.0: 6592 /svg-tags/1.0.0:
@@ -6707,7 +6714,7 @@ packages: @@ -6707,7 +6714,7 @@ packages:
6707 engines: {node: '>=8'} 6714 engines: {node: '>=8'}
6708 dev: true 6715 dev: true
6709 6716
6710 - /ts-node/10.9.1_2abc08acbb4fe741ae8218df9aa74f5c: 6717 + /ts-node/10.9.1_fk6arlf3j7tudlucddpzvj2plq:
6711 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 6718 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
6712 hasBin: true 6719 hasBin: true
6713 peerDependencies: 6720 peerDependencies:
@@ -6804,7 +6811,6 @@ packages: @@ -6804,7 +6811,6 @@ packages:
6804 resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} 6811 resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
6805 engines: {node: '>=4.2.0'} 6812 engines: {node: '>=4.2.0'}
6806 hasBin: true 6813 hasBin: true
6807 - dev: true  
6808 6814
6809 /uglify-js/3.17.3: 6815 /uglify-js/3.17.3:
6810 resolution: {integrity: sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==} 6816 resolution: {integrity: sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==}
@@ -6855,7 +6861,7 @@ packages: @@ -6855,7 +6861,7 @@ packages:
6855 '@antfu/utils': 0.6.0 6861 '@antfu/utils': 0.6.0
6856 rollup: 3.2.5 6862 rollup: 3.2.5
6857 unplugin: 0.10.2 6863 unplugin: 0.10.2
6858 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 6864 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
6859 dev: true 6865 dev: true
6860 6866
6861 /unplugin-vue-define-options/0.12.7: 6867 /unplugin-vue-define-options/0.12.7:
@@ -6868,7 +6874,7 @@ packages: @@ -6868,7 +6874,7 @@ packages:
6868 unplugin: 0.10.2 6874 unplugin: 0.10.2
6869 dev: true 6875 dev: true
6870 6876
6871 - /unplugin-vue-macros/0.16.2_688fcac82e974ec4fd5c071d8de5a7a5: 6877 + /unplugin-vue-macros/0.16.2_nch4vsbos5hmj7k4a4oy3znhuu:
6872 resolution: {integrity: sha512-uNfjIXVUYBujbjJUcjXreE6zipZlPAIEMsx6bc/5qygwTfdvkJeHCAvvxrl0c8hdcT5/18OV2VDdwI60vCh56g==} 6878 resolution: {integrity: sha512-uNfjIXVUYBujbjJUcjXreE6zipZlPAIEMsx6bc/5qygwTfdvkJeHCAvvxrl0c8hdcT5/18OV2VDdwI60vCh56g==}
6873 engines: {node: '>=14.19.0'} 6879 engines: {node: '>=14.19.0'}
6874 peerDependencies: 6880 peerDependencies:
@@ -6881,7 +6887,7 @@ packages: @@ -6881,7 +6887,7 @@ packages:
6881 '@vue-macros/define-render': 0.13.8_vue@3.2.44 6887 '@vue-macros/define-render': 0.13.8_vue@3.2.44
6882 '@vue-macros/define-slots': 0.0.5_vue@3.2.44 6888 '@vue-macros/define-slots': 0.0.5_vue@3.2.44
6883 '@vue-macros/hoist-static': 0.12.7 6889 '@vue-macros/hoist-static': 0.12.7
6884 - '@vue-macros/named-template': 0.0.5_aaae75a03f99901122a33a7412c8cd0a 6890 + '@vue-macros/named-template': 0.0.5_vkxhlib7tgibcivdhj2bfsgnbi
6885 '@vue-macros/setup-component': 0.12.7_rollup@3.2.5+vite@3.2.3 6891 '@vue-macros/setup-component': 0.12.7_rollup@3.2.5+vite@3.2.3
6886 '@vue-macros/setup-sfc': 0.12.7 6892 '@vue-macros/setup-sfc': 0.12.7
6887 '@vue-macros/short-emits': 0.12.8 6893 '@vue-macros/short-emits': 0.12.8
@@ -6997,7 +7003,7 @@ packages: @@ -6997,7 +7003,7 @@ packages:
6997 chalk: 4.1.2 7003 chalk: 4.1.2
6998 debug: 4.3.4 7004 debug: 4.3.4
6999 fs-extra: 10.1.0 7005 fs-extra: 10.1.0
7000 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7006 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7001 transitivePeerDependencies: 7007 transitivePeerDependencies:
7002 - supports-color 7008 - supports-color
7003 dev: true 7009 dev: true
@@ -7012,7 +7018,7 @@ packages: @@ -7012,7 +7018,7 @@ packages:
7012 '@types/eslint': 8.4.6 7018 '@types/eslint': 8.4.6
7013 eslint: 8.27.0 7019 eslint: 8.27.0
7014 rollup: 2.79.1 7020 rollup: 2.79.1
7015 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7021 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7016 dev: true 7022 dev: true
7017 7023
7018 /vite-plugin-html/3.2.0_vite@3.2.3: 7024 /vite-plugin-html/3.2.0_vite@3.2.3:
@@ -7032,7 +7038,7 @@ packages: @@ -7032,7 +7038,7 @@ packages:
7032 html-minifier-terser: 6.1.0 7038 html-minifier-terser: 6.1.0
7033 node-html-parser: 5.4.2 7039 node-html-parser: 5.4.2
7034 pathe: 0.2.0 7040 pathe: 0.2.0
7035 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7041 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7036 dev: true 7042 dev: true
7037 7043
7038 /vite-plugin-purge-icons/0.9.1_vite@3.2.3: 7044 /vite-plugin-purge-icons/0.9.1_vite@3.2.3:
@@ -7044,7 +7050,7 @@ packages: @@ -7044,7 +7050,7 @@ packages:
7044 '@purge-icons/core': 0.9.1 7050 '@purge-icons/core': 0.9.1
7045 '@purge-icons/generated': 0.9.0 7051 '@purge-icons/generated': 0.9.0
7046 rollup-plugin-purge-icons: 0.9.1 7052 rollup-plugin-purge-icons: 0.9.1
7047 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7053 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7048 transitivePeerDependencies: 7054 transitivePeerDependencies:
7049 - encoding 7055 - encoding
7050 - supports-color 7056 - supports-color
@@ -7062,7 +7068,7 @@ packages: @@ -7062,7 +7068,7 @@ packages:
7062 fs-extra: 10.1.0 7068 fs-extra: 10.1.0
7063 magic-string: 0.25.9 7069 magic-string: 0.25.9
7064 pathe: 0.2.0 7070 pathe: 0.2.0
7065 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7071 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7066 dev: true 7072 dev: true
7067 7073
7068 /vite-plugin-svg-icons/2.0.1_vite@3.2.3: 7074 /vite-plugin-svg-icons/2.0.1_vite@3.2.3:
@@ -7078,7 +7084,7 @@ packages: @@ -7078,7 +7084,7 @@ packages:
7078 pathe: 0.2.0 7084 pathe: 0.2.0
7079 svg-baker: 1.7.0 7085 svg-baker: 1.7.0
7080 svgo: 2.8.0 7086 svgo: 2.8.0
7081 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7087 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7082 transitivePeerDependencies: 7088 transitivePeerDependencies:
7083 - supports-color 7089 - supports-color
7084 dev: true 7090 dev: true
@@ -7091,13 +7097,13 @@ packages: @@ -7091,13 +7097,13 @@ packages:
7091 '@windicss/plugin-utils': 1.8.8 7097 '@windicss/plugin-utils': 1.8.8
7092 debug: 4.3.4 7098 debug: 4.3.4
7093 kolorist: 1.6.0 7099 kolorist: 1.6.0
7094 - vite: 3.2.3_@types+node@18.11.9+less@4.1.3 7100 + vite: 3.2.3_mp5lu76ee5qtwstsyca37sdhqi
7095 windicss: 3.5.6 7101 windicss: 3.5.6
7096 transitivePeerDependencies: 7102 transitivePeerDependencies:
7097 - supports-color 7103 - supports-color
7098 dev: true 7104 dev: true
7099 7105
7100 - /vite/3.2.3_@types+node@18.11.9+less@4.1.3: 7106 + /vite/3.2.3_mp5lu76ee5qtwstsyca37sdhqi:
7101 resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==} 7107 resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==}
7102 engines: {node: ^14.18.0 || >=16.0.0} 7108 engines: {node: ^14.18.0 || >=16.0.0}
7103 hasBin: true 7109 hasBin: true
@@ -7149,7 +7155,6 @@ packages: @@ -7149,7 +7155,6 @@ packages:
7149 optional: true 7155 optional: true
7150 dependencies: 7156 dependencies:
7151 vue: 3.2.44 7157 vue: 3.2.44
7152 - dev: false  
7153 7158
7154 /vue-eslint-parser/9.1.0_eslint@8.27.0: 7159 /vue-eslint-parser/9.1.0_eslint@8.27.0:
7155 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 7160 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
@@ -7180,7 +7185,6 @@ packages: @@ -7180,7 +7185,6 @@ packages:
7180 '@intlify/vue-devtools': 9.2.2 7185 '@intlify/vue-devtools': 9.2.2
7181 '@vue/devtools-api': 6.4.3 7186 '@vue/devtools-api': 6.4.3
7182 vue: 3.2.44 7187 vue: 3.2.44
7183 - dev: false  
7184 7188
7185 /vue-router/4.1.6_vue@3.2.44: 7189 /vue-router/4.1.6_vue@3.2.44:
7186 resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==} 7190 resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
@@ -7227,7 +7231,6 @@ packages: @@ -7227,7 +7231,6 @@ packages:
7227 '@vue/runtime-dom': 3.2.44 7231 '@vue/runtime-dom': 3.2.44
7228 '@vue/server-renderer': 3.2.44_vue@3.2.44 7232 '@vue/server-renderer': 3.2.44_vue@3.2.44
7229 '@vue/shared': 3.2.44 7233 '@vue/shared': 3.2.44
7230 - dev: false  
7231 7234
7232 /vxe-table/4.3.5_vue@3.2.44+xe-utils@3.5.7: 7235 /vxe-table/4.3.5_vue@3.2.44+xe-utils@3.5.7:
7233 resolution: {integrity: sha512-JEvGAs7SBN1rWn5f2tkoRiXd/rAT7RfnDTTlFsHsTtASiUTKNTISI2WBsVeLkkNRTs0SXh6FgrYsIPO2soSBXA==} 7236 resolution: {integrity: sha512-JEvGAs7SBN1rWn5f2tkoRiXd/rAT7RfnDTTlFsHsTtASiUTKNTISI2WBsVeLkkNRTs0SXh6FgrYsIPO2soSBXA==}
yudao-ui-admin-vue3/src/api/system/menu/index.ts
1 import request from '@/config/axios' 1 import request from '@/config/axios'
2 import type { MenuVO } from './types' 2 import type { MenuVO } from './types'
3 3
4 -// 查询菜单(精简)列表 4 +// 查询菜单(精简)列表
5 export const listSimpleMenusApi = () => { 5 export const listSimpleMenusApi = () => {
6 return request.get({ url: '/system/menu/list-all-simple' }) 6 return request.get({ url: '/system/menu/list-all-simple' })
7 } 7 }
  8 +
8 // 查询菜单列表 9 // 查询菜单列表
9 export const getMenuListApi = (params) => { 10 export const getMenuListApi = (params) => {
10 return request.get({ url: '/system/menu/list', params }) 11 return request.get({ url: '/system/menu/list', params })
yudao-ui-admin-vue3/src/api/system/post/index.ts
@@ -31,6 +31,7 @@ export const deletePostApi = async (id: number) => { @@ -31,6 +31,7 @@ export const deletePostApi = async (id: number) => {
31 } 31 }
32 32
33 // 导出岗位 33 // 导出岗位
  34 +// TODO @星语:导出这块,咱怎么弄哈
34 export const exportPostApi = async (params: PostExportReqVO) => { 35 export const exportPostApi = async (params: PostExportReqVO) => {
35 return await request.download({ url: '/system/post/export', params }) 36 return await request.download({ url: '/system/post/export', params })
36 } 37 }
yudao-ui-admin-vue3/src/api/system/post/types.ts
@@ -8,6 +8,7 @@ export type PostVO = { @@ -8,6 +8,7 @@ export type PostVO = {
8 createTime?: string 8 createTime?: string
9 } 9 }
10 10
  11 +// TODO @星语:要不要搞个 Page 基类呀?和后端对应
11 export type PostPageReqVO = { 12 export type PostPageReqVO = {
12 code: string 13 code: string
13 name: string 14 name: string
yudao-ui-admin-vue3/src/components/Descriptions/src/Descriptions.vue
1 <script setup lang="ts"> 1 <script setup lang="ts">
  2 +import dayjs from 'dayjs'
2 import { ElCollapseTransition, ElDescriptions, ElDescriptionsItem, ElTooltip } from 'element-plus' 3 import { ElCollapseTransition, ElDescriptions, ElDescriptionsItem, ElTooltip } from 'element-plus'
3 import { useDesign } from '@/hooks/web/useDesign' 4 import { useDesign } from '@/hooks/web/useDesign'
4 import { propTypes } from '@/utils/propTypes' 5 import { propTypes } from '@/utils/propTypes'
@@ -111,7 +112,13 @@ const toggleClick = () =&gt; { @@ -111,7 +112,13 @@ const toggleClick = () =&gt; {
111 </template> 112 </template>
112 113
113 <template #default> 114 <template #default>
114 - <slot :name="item.field" :row="data">{{ data[item.field] }}</slot> 115 + <slot v-if="item.dateFormat">
  116 + {{ dayjs(data[item.field]).format(item.dateFormat) }}
  117 + </slot>
  118 + <slot v-else-if="item.dictType">
  119 + <DictTag :type="item.dictType" :value="data[item.field]" />
  120 + </slot>
  121 + <slot v-else :name="item.field" :row="data">{{ data[item.field] }}</slot>
115 </template> 122 </template>
116 </ElDescriptionsItem> 123 </ElDescriptionsItem>
117 </ElDescriptions> 124 </ElDescriptions>
yudao-ui-admin-vue3/src/config/axios/service.ts
@@ -5,7 +5,7 @@ import axios, { @@ -5,7 +5,7 @@ import axios, {
5 AxiosResponse, 5 AxiosResponse,
6 AxiosError 6 AxiosError
7 } from 'axios' 7 } from 'axios'
8 -import { useMessage } from '@/hooks/web/useMessage' 8 +import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
9 import qs from 'qs' 9 import qs from 'qs'
10 import { config } from '@/config/axios/config' 10 import { config } from '@/config/axios/config'
11 import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth' 11 import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth'
@@ -17,7 +17,6 @@ import { useCache } from &#39;@/hooks/web/useCache&#39; @@ -17,7 +17,6 @@ import { useCache } from &#39;@/hooks/web/useCache&#39;
17 const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE 17 const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE
18 const { result_code, base_url, request_timeout } = config 18 const { result_code, base_url, request_timeout } = config
19 19
20 -const message = useMessage()  
21 // 需要忽略的提示。忽略后,自动 Promise.reject('error') 20 // 需要忽略的提示。忽略后,自动 Promise.reject('error')
22 const ignoreMsgs = [ 21 const ignoreMsgs = [
23 '无效的刷新令牌', // 刷新令牌被删除时,不用提示 22 '无效的刷新令牌', // 刷新令牌被删除时,不用提示
@@ -30,6 +29,8 @@ export const isRelogin = { show: false } @@ -30,6 +29,8 @@ export const isRelogin = { show: false }
30 let requestList: any[] = [] 29 let requestList: any[] = []
31 // 是否正在刷新中 30 // 是否正在刷新中
32 let isRefreshToken = false 31 let isRefreshToken = false
  32 +// 请求白名单,无须token的接口
  33 +const whiteList: string[] = ['/login', '/refresh-token']
33 34
34 // 创建axios实例 35 // 创建axios实例
35 const service: AxiosInstance = axios.create({ 36 const service: AxiosInstance = axios.create({
@@ -42,14 +43,20 @@ const service: AxiosInstance = axios.create({ @@ -42,14 +43,20 @@ const service: AxiosInstance = axios.create({
42 service.interceptors.request.use( 43 service.interceptors.request.use(
43 (config: AxiosRequestConfig) => { 44 (config: AxiosRequestConfig) => {
44 // 是否需要设置 token 45 // 是否需要设置 token
45 - const isToken = (config!.headers || {}).isToken === false 46 + let isToken = (config!.headers || {}).isToken === false
  47 + whiteList.some((v) => {
  48 + if (config.url) {
  49 + config.url.indexOf(v) > -1
  50 + return (isToken = false)
  51 + }
  52 + })
46 if (getAccessToken() && !isToken) { 53 if (getAccessToken() && !isToken) {
47 ;(config as Recordable).headers.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 54 ;(config as Recordable).headers.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token
48 } 55 }
49 // 设置租户 56 // 设置租户
50 if (tenantEnable && tenantEnable === 'true') { 57 if (tenantEnable && tenantEnable === 'true') {
51 const tenantId = getTenantId() 58 const tenantId = getTenantId()
52 - if (tenantId) (config as Recordable).headers.common['tenant-id'] = tenantId 59 + if (tenantId) (config as Recordable).headers['tenant-id'] = tenantId
53 } 60 }
54 const params = config.params || {} 61 const params = config.params || {}
55 const data = config.data || false 62 const data = config.data || false
@@ -157,10 +164,10 @@ service.interceptors.response.use( @@ -157,10 +164,10 @@ service.interceptors.response.use(
157 }) 164 })
158 } 165 }
159 } else if (code === 500) { 166 } else if (code === 500) {
160 - message.error(t('sys.api.errMsg500')) 167 + ElMessage.error(t('sys.api.errMsg500'))
161 return Promise.reject(new Error(msg)) 168 return Promise.reject(new Error(msg))
162 } else if (code === 901) { 169 } else if (code === 901) {
163 - message.error( 170 + ElMessage.error(
164 '<div>' + 171 '<div>' +
165 t('sys.api.errMsg901') + 172 t('sys.api.errMsg901') +
166 '</div>' + 173 '</div>' +
@@ -175,7 +182,7 @@ service.interceptors.response.use( @@ -175,7 +182,7 @@ service.interceptors.response.use(
175 // hard coding:忽略这个提示,直接登出 182 // hard coding:忽略这个提示,直接登出
176 console.log(msg) 183 console.log(msg)
177 } else { 184 } else {
178 - message.notifyError(msg) 185 + ElNotification.error({ title: msg })
179 } 186 }
180 return Promise.reject('error') 187 return Promise.reject('error')
181 } else { 188 } else {
@@ -184,16 +191,16 @@ service.interceptors.response.use( @@ -184,16 +191,16 @@ service.interceptors.response.use(
184 }, 191 },
185 (error: AxiosError) => { 192 (error: AxiosError) => {
186 console.log('err' + error) // for debug 193 console.log('err' + error) // for debug
187 - let { message: msg } = error 194 + let { message } = error
188 const { t } = useI18n() 195 const { t } = useI18n()
189 - if (msg === 'Network Error') {  
190 - msg = t('sys.api.errorMessage')  
191 - } else if (msg.includes('timeout')) {  
192 - msg = t('sys.api.apiTimeoutMessage')  
193 - } else if (msg.includes('Request failed with status code')) {  
194 - msg = t('sys.api.apiRequestFailed') + msg.substr(msg.length - 3) 196 + if (message === 'Network Error') {
  197 + message = t('sys.api.errorMessage')
  198 + } else if (message.includes('timeout')) {
  199 + message = t('sys.api.apiTimeoutMessage')
  200 + } else if (message.includes('Request failed with status code')) {
  201 + message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
195 } 202 }
196 - message.error(msg) 203 + ElMessage.error(message)
197 return Promise.reject(error) 204 return Promise.reject(error)
198 } 205 }
199 ) 206 )
@@ -205,8 +212,11 @@ const handleAuthorized = () =&gt; { @@ -205,8 +212,11 @@ const handleAuthorized = () =&gt; {
205 const { t } = useI18n() 212 const { t } = useI18n()
206 if (!isRelogin.show) { 213 if (!isRelogin.show) {
207 isRelogin.show = true 214 isRelogin.show = true
208 - message  
209 - .confirm(t('sys.api.timeoutMessage')) 215 + ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
  216 + confirmButtonText: t('login.relogin'),
  217 + cancelButtonText: t('common.cancel'),
  218 + type: 'warning'
  219 + })
210 .then(() => { 220 .then(() => {
211 const { wsCache } = useCache() 221 const { wsCache } = useCache()
212 resetRouter() // 重置静态路由表 222 resetRouter() // 重置静态路由表
yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts
@@ -14,18 +14,31 @@ import { VxeTableColumn } from &#39;@/types/table&#39; @@ -14,18 +14,31 @@ import { VxeTableColumn } from &#39;@/types/table&#39;
14 import { FormSchema } from '@/types/form' 14 import { FormSchema } from '@/types/form'
15 import { ComponentOptions } from '@/types/components' 15 import { ComponentOptions } from '@/types/components'
16 16
17 -export type VxeCrudSchema = Omit<VxeTableColumn, 'children'> & { 17 +export type VxeCrudSchema = {
  18 + // 主键ID
  19 + primaryKey?: string
  20 + primaryType?: VxeColumnPropTypes.Type
  21 + // 是否开启操作栏插槽
  22 + action?: boolean
  23 + columns: VxeCrudColumns[]
  24 +}
  25 +type VxeCrudColumns = Omit<VxeTableColumn, 'children'> & {
18 field: string 26 field: string
19 title?: string 27 title?: string
20 formatter?: VxeColumnPropTypes.Formatter 28 formatter?: VxeColumnPropTypes.Formatter
  29 + isSearch?: boolean
21 search?: CrudSearchParams 30 search?: CrudSearchParams
  31 + isTable?: boolean
22 table?: CrudTableParams 32 table?: CrudTableParams
  33 + isForm?: boolean
23 form?: CrudFormParams 34 form?: CrudFormParams
  35 + isDetail?: boolean
24 detail?: CrudDescriptionsParams 36 detail?: CrudDescriptionsParams
25 print?: CrudPrintParams 37 print?: CrudPrintParams
26 - children?: VxeCrudSchema[] 38 + children?: VxeCrudColumns[]
27 dictType?: string 39 dictType?: string
28 } 40 }
  41 +
29 type CrudSearchParams = { 42 type CrudSearchParams = {
30 // 是否显示在查询项 43 // 是否显示在查询项
31 show?: boolean 44 show?: boolean
@@ -61,7 +74,7 @@ export type VxeAllSchemas = { @@ -61,7 +74,7 @@ export type VxeAllSchemas = {
61 74
62 // 过滤所有结构 75 // 过滤所有结构
63 export const useVxeCrudSchemas = ( 76 export const useVxeCrudSchemas = (
64 - crudSchema: VxeCrudSchema[] 77 + crudSchema: VxeCrudSchema
65 ): { 78 ): {
66 allSchemas: VxeAllSchemas 79 allSchemas: VxeAllSchemas
67 } => { 80 } => {
@@ -95,12 +108,12 @@ export const useVxeCrudSchemas = ( @@ -95,12 +108,12 @@ export const useVxeCrudSchemas = (
95 } 108 }
96 109
97 // 过滤 Search 结构 110 // 过滤 Search 结构
98 -const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] => {  
99 - const searchSchema: VxeFormItemProps[] = [] 111 +const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] => {
100 const { t } = useI18n() 112 const { t } = useI18n()
101 - eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { 113 + const searchSchema: VxeFormItemProps[] = []
  114 + eachTree(crudSchema.columns, (schemaItem: VxeCrudColumns) => {
102 // 判断是否显示 115 // 判断是否显示
103 - if (schemaItem?.search?.show) { 116 + if (schemaItem?.isSearch) {
104 let itemRenderName = schemaItem?.search?.itemRender?.name || '$input' 117 let itemRenderName = schemaItem?.search?.itemRender?.name || '$input'
105 const options: any[] = [] 118 const options: any[] = []
106 let itemRender: FormItemRenderOptions = { 119 let itemRender: FormItemRenderOptions = {
@@ -114,7 +127,7 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt; @@ -114,7 +127,7 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt;
114 options.push(dict) 127 options.push(dict)
115 }) 128 })
116 itemRender.options = options 129 itemRender.options = options
117 - if (!schemaItem.search.itemRender?.name) itemRenderName = '$select' 130 + if (!schemaItem?.search?.itemRender?.name) itemRenderName = '$select'
118 itemRender = { 131 itemRender = {
119 name: itemRenderName, 132 name: itemRenderName,
120 options: options, 133 options: options,
@@ -123,15 +136,12 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt; @@ -123,15 +136,12 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt;
123 } 136 }
124 const searchSchemaItem = { 137 const searchSchemaItem = {
125 // 默认为 input 138 // 默认为 input
126 - span: 8,  
127 folding: searchSchema.length > 2, 139 folding: searchSchema.length > 2,
128 - itemRender: itemRender,  
129 - ...schemaItem.search, 140 + itemRender: schemaItem.itemRender ? schemaItem.itemRender : itemRender,
130 field: schemaItem.field, 141 field: schemaItem.field,
131 - title: schemaItem.search?.title || schemaItem.title 142 + title: schemaItem.search?.title || schemaItem.title,
  143 + span: 8
132 } 144 }
133 - // 删除不必要的字段  
134 - delete searchSchemaItem.show  
135 145
136 searchSchema.push(searchSchemaItem) 146 searchSchema.push(searchSchemaItem)
137 } 147 }
@@ -154,36 +164,63 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt; @@ -154,36 +164,63 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema[]): VxeFormItemProps[] =&gt;
154 } 164 }
155 165
156 // 过滤 table 结构 166 // 过滤 table 结构
157 -const filterTableSchema = (crudSchema: VxeCrudSchema[]): VxeGridPropTypes.Columns => { 167 +const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns => {
  168 + const { t } = useI18n()
158 const tableSchema: VxeGridPropTypes.Columns = [] 169 const tableSchema: VxeGridPropTypes.Columns = []
159 - eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { 170 + // 主键ID
  171 + if (crudSchema.primaryKey) {
  172 + const tableSchemaItem = {
  173 + title: t('common.index'),
  174 + field: crudSchema.primaryKey,
  175 + type: crudSchema.primaryType ? crudSchema.primaryType : 'seq',
  176 + width: '50px'
  177 + }
  178 + tableSchema.push(tableSchemaItem)
  179 + }
  180 + eachTree(crudSchema.columns, (schemaItem: VxeCrudColumns) => {
160 // 判断是否显示 181 // 判断是否显示
161 - if (schemaItem?.table?.show !== false) { 182 + if (schemaItem?.isTable !== false) {
162 const tableSchemaItem = { 183 const tableSchemaItem = {
163 ...schemaItem.table, 184 ...schemaItem.table,
164 field: schemaItem.field, 185 field: schemaItem.field,
165 title: schemaItem.table?.title || schemaItem.title 186 title: schemaItem.table?.title || schemaItem.title
166 } 187 }
  188 + tableSchemaItem.showOverflow = 'tooltip'
167 if (schemaItem?.formatter) { 189 if (schemaItem?.formatter) {
168 tableSchemaItem.formatter = schemaItem.formatter 190 tableSchemaItem.formatter = schemaItem.formatter
169 } 191 }
170 -  
171 - // 删除不必要的字段  
172 - delete tableSchemaItem.show 192 + if (schemaItem?.dictType) {
  193 + tableSchemaItem.cellRender = {
  194 + name: 'XDict',
  195 + content: schemaItem.dictType
  196 + }
  197 + }
173 198
174 tableSchema.push(tableSchemaItem) 199 tableSchema.push(tableSchemaItem)
175 } 200 }
176 }) 201 })
  202 + // 操作栏插槽
  203 + if (crudSchema.action && crudSchema.action == true) {
  204 + const tableSchemaItem = {
  205 + title: t('table.action'),
  206 + field: 'actionbtns',
  207 + width: '240px',
  208 + slots: {
  209 + default: 'actionbtns_default'
  210 + }
  211 + }
  212 + tableSchema.push(tableSchemaItem)
  213 + }
177 return tableSchema 214 return tableSchema
178 } 215 }
179 216
180 // 过滤 form 结构 217 // 过滤 form 结构
181 -const filterFormSchema = (crudSchema: VxeCrudSchema[]): FormSchema[] => { 218 +const filterFormSchema = (crudSchema: VxeCrudSchema): FormSchema[] => {
182 const formSchema: FormSchema[] = [] 219 const formSchema: FormSchema[] = []
183 220
184 - eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { 221 + eachTree(crudSchema.columns, (schemaItem: VxeCrudColumns) => {
185 // 判断是否显示 222 // 判断是否显示
186 - if (schemaItem?.form?.show !== false) { 223 + if (schemaItem?.isForm !== false) {
187 let component = schemaItem?.form?.component || 'Input' 224 let component = schemaItem?.form?.component || 'Input'
188 const options: ComponentOptions[] = [] 225 const options: ComponentOptions[] = []
189 let comonentProps = {} 226 let comonentProps = {}
@@ -205,9 +242,6 @@ const filterFormSchema = (crudSchema: VxeCrudSchema[]): FormSchema[] =&gt; { @@ -205,9 +242,6 @@ const filterFormSchema = (crudSchema: VxeCrudSchema[]): FormSchema[] =&gt; {
205 label: schemaItem.form?.label || schemaItem.title 242 label: schemaItem.form?.label || schemaItem.title
206 } 243 }
207 244
208 - // 删除不必要的字段  
209 - delete formSchemaItem.show  
210 -  
211 formSchema.push(formSchemaItem) 245 formSchema.push(formSchemaItem)
212 } 246 }
213 }) 247 })
@@ -216,20 +250,26 @@ const filterFormSchema = (crudSchema: VxeCrudSchema[]): FormSchema[] =&gt; { @@ -216,20 +250,26 @@ const filterFormSchema = (crudSchema: VxeCrudSchema[]): FormSchema[] =&gt; {
216 } 250 }
217 251
218 // 过滤 descriptions 结构 252 // 过滤 descriptions 结构
219 -const filterDescriptionsSchema = (crudSchema: VxeCrudSchema[]): DescriptionsSchema[] => { 253 +const filterDescriptionsSchema = (crudSchema: VxeCrudSchema): DescriptionsSchema[] => {
220 const descriptionsSchema: DescriptionsSchema[] = [] 254 const descriptionsSchema: DescriptionsSchema[] = []
221 255
222 - eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { 256 + eachTree(crudSchema.columns, (schemaItem: VxeCrudColumns) => {
223 // 判断是否显示 257 // 判断是否显示
224 - if (schemaItem?.detail?.show !== false) { 258 + if (schemaItem?.isDetail !== false) {
225 const descriptionsSchemaItem = { 259 const descriptionsSchemaItem = {
226 ...schemaItem.detail, 260 ...schemaItem.detail,
227 field: schemaItem.field, 261 field: schemaItem.field,
228 label: schemaItem.detail?.label || schemaItem.title 262 label: schemaItem.detail?.label || schemaItem.title
229 } 263 }
230 -  
231 - // 删除不必要的字段  
232 - delete descriptionsSchemaItem.show 264 + if (schemaItem.dictType) {
  265 + descriptionsSchemaItem.dictType = schemaItem.dictType
  266 + }
  267 + if (schemaItem.detail?.dateFormat || schemaItem.formatter == 'formatDate') {
  268 + // descriptionsSchemaItem.dateFormat = schemaItem.detail.dateFormat
  269 + // ? schemaItem?.detail?.dateFormat
  270 + // : 'YYYY-MM-DD HH:mm:ss'
  271 + descriptionsSchemaItem.dateFormat = 'YYYY-MM-DD HH:mm:ss'
  272 + }
233 273
234 descriptionsSchema.push(descriptionsSchemaItem) 274 descriptionsSchema.push(descriptionsSchemaItem)
235 } 275 }
@@ -239,10 +279,10 @@ const filterDescriptionsSchema = (crudSchema: VxeCrudSchema[]): DescriptionsSche @@ -239,10 +279,10 @@ const filterDescriptionsSchema = (crudSchema: VxeCrudSchema[]): DescriptionsSche
239 } 279 }
240 280
241 // 过滤 打印 结构 281 // 过滤 打印 结构
242 -const filterPrintSchema = (crudSchema: VxeCrudSchema[]): any[] => { 282 +const filterPrintSchema = (crudSchema: VxeCrudSchema): any[] => {
243 const printSchema: any[] = [] 283 const printSchema: any[] = []
244 284
245 - eachTree(crudSchema, (schemaItem: VxeCrudSchema) => { 285 + eachTree(crudSchema.columns, (schemaItem: VxeCrudColumns) => {
246 // 判断是否显示 286 // 判断是否显示
247 if (schemaItem?.print?.show !== false) { 287 if (schemaItem?.print?.show !== false) {
248 const printSchemaItem = { 288 const printSchemaItem = {
yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts
@@ -43,10 +43,6 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; { @@ -43,10 +43,6 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
43 isCurrent: true, // 当鼠标点击行时,是否要高亮当前行 43 isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
44 isHover: true // 当鼠标移到行时,是否要高亮当前行 44 isHover: true // 当鼠标移到行时,是否要高亮当前行
45 }, 45 },
46 - showOverflow: 'tooltip', // 当内容溢出时显示为省略号  
47 - tooltipConfig: {  
48 - showAll: true // 开启全表工具提示  
49 - },  
50 toolbarConfig: { 46 toolbarConfig: {
51 custom: true, 47 custom: true,
52 slots: { buttons: 'toolbar_buttons' } 48 slots: { buttons: 'toolbar_buttons' }
@@ -85,7 +81,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; { @@ -85,7 +81,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
85 props: { result: 'list', total: 'total' }, 81 props: { result: 'list', total: 'total' },
86 ajax: { 82 ajax: {
87 query: ({ page, form }) => { 83 query: ({ page, form }) => {
88 - const queryParams = Object.assign({}, form) 84 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form)))
89 queryParams.pageSize = page.pageSize 85 queryParams.pageSize = page.pageSize
90 queryParams.pageNo = page.currentPage 86 queryParams.pageNo = page.currentPage
91 gridOptions.loading = false 87 gridOptions.loading = false
yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts
1 import { App, unref } from 'vue' 1 import { App, unref } from 'vue'
2 import 'xe-utils' 2 import 'xe-utils'
3 import XEUtils from 'xe-utils' 3 import XEUtils from 'xe-utils'
  4 +import './renderer'
4 import { i18n } from '@/plugins/vueI18n' 5 import { i18n } from '@/plugins/vueI18n'
5 import zhCN from 'vxe-table/es/locale/lang/zh-CN' 6 import zhCN from 'vxe-table/es/locale/lang/zh-CN'
6 import enUS from 'vxe-table/lib/locale/lang/en-US' 7 import enUS from 'vxe-table/lib/locale/lang/en-US'
@@ -138,6 +139,10 @@ VXETable.formats.mixin({ @@ -138,6 +139,10 @@ VXETable.formats.mixin({
138 formatDate({ cellValue }, format) { 139 formatDate({ cellValue }, format) {
139 return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss') 140 return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
140 }, 141 },
  142 + // 格式字典
  143 + formatDict() {
  144 + return 'cellValue 123'
  145 + },
141 // 四舍五入金额,每隔3位逗号分隔,默认2位数 146 // 四舍五入金额,每隔3位逗号分隔,默认2位数
142 formatAmount({ cellValue }, digits = 2) { 147 formatAmount({ cellValue }, digits = 2) {
143 return XEUtils.commafy(Number(cellValue), { digits }) 148 return XEUtils.commafy(Number(cellValue), { digits })
yudao-ui-admin-vue3/src/plugins/vxeTable/renderer/dataTimePicker.tsx 0 → 100644
  1 +import { useI18n } from '@/hooks/web/useI18n'
  2 +import { ElDatePicker } from 'element-plus'
  3 +import { VXETable } from 'vxe-table'
  4 +
  5 +// 日期区间选择渲染
  6 +VXETable.renderer.add('XDataTimePicker', {
  7 + // 默认显示模板
  8 + renderItemContent(renderOpts, params) {
  9 + const { t } = useI18n()
  10 + const { data, field } = params
  11 + const { content } = renderOpts
  12 + return (
  13 + <ElDatePicker
  14 + v-model={data[field]}
  15 + type={content ? (content as any) : 'datetimerange'}
  16 + value-format="YYYY-MM-DD HH:mm:ss"
  17 + range-separator="-"
  18 + start-placeholder={t('common.startTimeText')}
  19 + end-placeholder={t('common.endTimeText')}
  20 + ></ElDatePicker>
  21 + )
  22 + }
  23 +})
yudao-ui-admin-vue3/src/plugins/vxeTable/renderer/dict.tsx 0 → 100644
  1 +import { DictTag } from '@/components/DictTag'
  2 +import { VXETable } from 'vxe-table'
  3 +
  4 +// 字典渲染
  5 +VXETable.renderer.add('XDict', {
  6 + // 默认显示模板
  7 + renderDefault(renderOpts, params) {
  8 + const { row, column } = params
  9 + const { content } = renderOpts
  10 + return <DictTag type={content as unknown as string} value={row[column.field]}></DictTag>
  11 + }
  12 +})
yudao-ui-admin-vue3/src/plugins/vxeTable/renderer/index.tsx 0 → 100644
  1 +import './dataTimePicker'
  2 +import './dict'
yudao-ui-admin-vue3/src/types/descriptions.d.ts
@@ -8,4 +8,6 @@ export interface DescriptionsSchema { @@ -8,4 +8,6 @@ export interface DescriptionsSchema {
8 labelAlign?: 'left' | 'center' | 'right' 8 labelAlign?: 'left' | 'center' | 'right'
9 className?: string 9 className?: string
10 labelClassName?: string 10 labelClassName?: string
  11 + dateFormat?: string
  12 + dictType?: string
11 } 13 }
yudao-ui-admin-vue3/src/views/system/errorCode/errorCode.data.ts
@@ -2,9 +2,8 @@ import { reactive } from &#39;vue&#39; @@ -2,9 +2,8 @@ import { reactive } from &#39;vue&#39;
2 import { required } from '@/utils/formRules' 2 import { required } from '@/utils/formRules'
3 import { useI18n } from '@/hooks/web/useI18n' 3 import { useI18n } from '@/hooks/web/useI18n'
4 import { DICT_TYPE } from '@/utils/dict' 4 import { DICT_TYPE } from '@/utils/dict'
5 -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'  
6 -// 国际化  
7 -const { t } = useI18n() 5 +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas'
  6 +const { t } = useI18n() // 国际化
8 // 表单校验 7 // 表单校验
9 export const rules = reactive({ 8 export const rules = reactive({
10 applicationName: [required], 9 applicationName: [required],
@@ -12,71 +11,43 @@ export const rules = reactive({ @@ -12,71 +11,43 @@ export const rules = reactive({
12 message: [required] 11 message: [required]
13 }) 12 })
14 // 新增 + 修改 13 // 新增 + 修改
15 -const crudSchemas = reactive<CrudSchema[]>([  
16 - {  
17 - label: t('common.index'),  
18 - field: 'id',  
19 - type: 'index',  
20 - form: {  
21 - show: false 14 +const crudSchemas = reactive<VxeCrudSchema>({
  15 + primaryKey: 'id',
  16 + primaryType: 'seq',
  17 + action: true,
  18 + columns: [
  19 + {
  20 + title: '错误码类型',
  21 + field: 'type',
  22 + dictType: DICT_TYPE.SYSTEM_ERROR_CODE_TYPE,
  23 + isSearch: true
22 }, 24 },
23 - detail: {  
24 - show: false  
25 - }  
26 - },  
27 - {  
28 - label: '错误码类型',  
29 - field: 'type',  
30 - component: 'InputNumber',  
31 - dictType: DICT_TYPE.SYSTEM_ERROR_CODE_TYPE,  
32 - search: {  
33 - show: true  
34 - }  
35 - },  
36 - {  
37 - label: '应用名',  
38 - field: 'applicationName',  
39 - search: {  
40 - show: true  
41 - }  
42 - },  
43 - {  
44 - label: '错误码编码',  
45 - field: 'code',  
46 - search: {  
47 - show: true  
48 - }  
49 - },  
50 - {  
51 - label: '错误码错误提示',  
52 - field: 'message'  
53 - },  
54 - {  
55 - label: t('common.createTime'),  
56 - field: 'createTime',  
57 - form: {  
58 - show: false 25 + {
  26 + title: '应用名',
  27 + field: 'applicationName',
  28 + isSearch: true
59 }, 29 },
60 - search: {  
61 - show: true,  
62 - component: 'DatePicker',  
63 - componentProps: {  
64 - type: 'daterange',  
65 - valueFormat: 'YYYY-MM-DD HH:mm:ss',  
66 - defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]  
67 - }  
68 - }  
69 - },  
70 - {  
71 - field: 'action',  
72 - width: '240px',  
73 - label: t('table.action'),  
74 - form: {  
75 - show: false 30 + {
  31 + title: '错误码编码',
  32 + field: 'code',
  33 + isSearch: true
  34 + },
  35 + {
  36 + title: '错误码错误提示',
  37 + field: 'message'
76 }, 38 },
77 - detail: {  
78 - show: false 39 + {
  40 + title: t('common.createTime'),
  41 + field: 'createTime',
  42 + formatter: 'formatDate',
  43 + isForm: false,
  44 + isSearch: true,
  45 + search: {
  46 + itemRender: {
  47 + name: 'XDataTimePicker'
  48 + }
  49 + }
79 } 50 }
80 - }  
81 -])  
82 -export const { allSchemas } = useCrudSchemas(crudSchemas) 51 + ]
  52 +})
  53 +export const { allSchemas } = useVxeCrudSchemas(crudSchemas)
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
  1 +<template>
  2 + <ContentWrap>
  3 + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar">
  4 + <template #toolbar_buttons>
  5 + <XButton
  6 + type="primary"
  7 + preIcon="ep:zoom-in"
  8 + :title="t('action.add')"
  9 + v-hasPermi="['system:error-code:create']"
  10 + @click="handleCreate()"
  11 + />
  12 + </template>
  13 + <template #actionbtns_default="{ row }">
  14 + <XTextButton
  15 + preIcon="ep:edit"
  16 + :title="t('action.edit')"
  17 + v-hasPermi="['system:error-code:update']"
  18 + @click="handleUpdate(row.id)"
  19 + />
  20 + <XTextButton
  21 + preIcon="ep:view"
  22 + :title="t('action.detail')"
  23 + v-hasPermi="['system:error-code:update']"
  24 + @click="handleDetail(row)"
  25 + />
  26 + <XTextButton
  27 + preIcon="ep:delete"
  28 + :title="t('action.del')"
  29 + v-hasPermi="['system:error-code:delete']"
  30 + @click="handleDelete(row.id)"
  31 + />
  32 + </template>
  33 + </vxe-grid>
  34 + </ContentWrap>
  35 + <XModal id="errorCodeModel" v-model="dialogVisible" :title="dialogTitle">
  36 + <template #default>
  37 + <!-- 对话框(添加 / 修改) -->
  38 + <Form
  39 + v-if="['create', 'update'].includes(actionType)"
  40 + :schema="allSchemas.formSchema"
  41 + :rules="rules"
  42 + ref="formRef"
  43 + />
  44 + <!-- 对话框(详情) -->
  45 + <Descriptions
  46 + v-if="actionType === 'detail'"
  47 + :schema="allSchemas.detailSchema"
  48 + :data="detailRef"
  49 + />
  50 + </template>
  51 + <!-- 操作按钮 -->
  52 + <template #footer>
  53 + <XButton
  54 + v-if="['create', 'update'].includes(actionType)"
  55 + type="primary"
  56 + :title="t('action.save')"
  57 + :loading="actionLoading"
  58 + @click="submitForm"
  59 + />
  60 + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
  61 + </template>
  62 + </XModal>
  63 +</template>
  64 +
1 <script setup lang="ts"> 65 <script setup lang="ts">
2 import { ref, unref } from 'vue' 66 import { ref, unref } from 'vue'
3 -import dayjs from 'dayjs'  
4 -import { ElMessage } from 'element-plus'  
5 -import { DICT_TYPE } from '@/utils/dict'  
6 -import { useTable } from '@/hooks/web/useTable'  
7 -import { useI18n } from '@/hooks/web/useI18n'  
8 -import { FormExpose } from '@/components/Form'  
9 import type { ErrorCodeVO } from '@/api/system/errorCode/types' 67 import type { ErrorCodeVO } from '@/api/system/errorCode/types'
10 import { rules, allSchemas } from './errorCode.data' 68 import { rules, allSchemas } from './errorCode.data'
11 import * as ErrorCodeApi from '@/api/system/errorCode' 69 import * as ErrorCodeApi from '@/api/system/errorCode'
12 -const { t } = useI18n() // 国际化  
13 -  
14 -// ========== 列表相关 ==========  
15 -const { register, tableObject, methods } = useTable<ErrorCodeVO>({  
16 - getListApi: ErrorCodeApi.getErrorCodePageApi,  
17 - delListApi: ErrorCodeApi.deleteErrorCodeApi  
18 -})  
19 -const { getList, setSearchParams, delList } = methods 70 +import { useI18n } from '@/hooks/web/useI18n'
  71 +import { useMessage } from '@/hooks/web/useMessage'
  72 +import { useVxeGrid } from '@/hooks/web/useVxeGrid'
  73 +import { VxeGridInstance } from 'vxe-table'
  74 +import { FormExpose } from '@/components/Form'
20 75
21 -// ========== CRUD 相关 ==========  
22 -const loading = ref(false) // 遮罩层  
23 -const actionType = ref('') // 操作按钮的类型 76 +const { t } = useI18n() // 国际化
  77 +const message = useMessage() // 消息弹窗
24 const dialogVisible = ref(false) // 是否显示弹出层 78 const dialogVisible = ref(false) // 是否显示弹出层
25 const dialogTitle = ref('edit') // 弹出层标题 79 const dialogTitle = ref('edit') // 弹出层标题
  80 +const actionType = ref('') // 操作按钮的类型
  81 +const actionLoading = ref(false) // 按钮Loading
  82 +const xGrid = ref<VxeGridInstance>() // grid Ref
26 const formRef = ref<FormExpose>() // 表单 Ref 83 const formRef = ref<FormExpose>() // 表单 Ref
  84 +const detailRef = ref() // 详情 Ref
27 85
  86 +const { gridOptions } = useVxeGrid<ErrorCodeVO>({
  87 + allSchemas: allSchemas,
  88 + getListApi: ErrorCodeApi.getErrorCodePageApi
  89 +})
28 // 设置标题 90 // 设置标题
29 const setDialogTile = (type: string) => { 91 const setDialogTile = (type: string) => {
30 dialogTitle.value = t('action.' + type) 92 dialogTitle.value = t('action.' + type)
@@ -39,147 +101,57 @@ const handleCreate = () =&gt; { @@ -39,147 +101,57 @@ const handleCreate = () =&gt; {
39 unref(formRef)?.getElFormRef()?.resetFields() 101 unref(formRef)?.getElFormRef()?.resetFields()
40 } 102 }
41 103
  104 +// 详情操作
  105 +const handleDetail = async (row: ErrorCodeVO) => {
  106 + // 设置数据
  107 + detailRef.value = row
  108 + setDialogTile('detail')
  109 +}
  110 +
42 // 修改操作 111 // 修改操作
43 -const handleUpdate = async (row: ErrorCodeVO) => { 112 +const handleUpdate = async (rowId: number) => {
44 setDialogTile('update') 113 setDialogTile('update')
45 // 设置数据 114 // 设置数据
46 - const res = await ErrorCodeApi.getErrorCodeApi(row.id) 115 + const res = await ErrorCodeApi.getErrorCodeApi(rowId)
47 unref(formRef)?.setValues(res) 116 unref(formRef)?.setValues(res)
48 } 117 }
49 118
  119 +// 删除操作
  120 +const handleDelete = async (rowId: number) => {
  121 + message
  122 + .delConfirm()
  123 + .then(async () => {
  124 + await ErrorCodeApi.deleteErrorCodeApi(rowId)
  125 + message.success(t('common.delSuccess'))
  126 + })
  127 + .finally(() => {
  128 + xGrid.value?.commitProxy('query')
  129 + })
  130 +}
  131 +
50 // 提交按钮 132 // 提交按钮
51 const submitForm = async () => { 133 const submitForm = async () => {
52 const elForm = unref(formRef)?.getElFormRef() 134 const elForm = unref(formRef)?.getElFormRef()
53 if (!elForm) return 135 if (!elForm) return
54 elForm.validate(async (valid) => { 136 elForm.validate(async (valid) => {
55 if (valid) { 137 if (valid) {
56 - loading.value = true 138 + actionLoading.value = true
57 // 提交请求 139 // 提交请求
58 try { 140 try {
59 const data = unref(formRef)?.formModel as ErrorCodeVO 141 const data = unref(formRef)?.formModel as ErrorCodeVO
60 if (actionType.value === 'create') { 142 if (actionType.value === 'create') {
61 await ErrorCodeApi.createErrorCodeApi(data) 143 await ErrorCodeApi.createErrorCodeApi(data)
62 - ElMessage.success(t('common.createSuccess')) 144 + message.success(t('common.createSuccess'))
63 } else { 145 } else {
64 await ErrorCodeApi.updateErrorCodeApi(data) 146 await ErrorCodeApi.updateErrorCodeApi(data)
65 - ElMessage.success(t('common.updateSuccess')) 147 + message.success(t('common.updateSuccess'))
66 } 148 }
67 - // 操作成功,重新加载列表  
68 dialogVisible.value = false 149 dialogVisible.value = false
69 - await getList()  
70 } finally { 150 } finally {
71 - loading.value = false 151 + actionLoading.value = false
  152 + xGrid.value?.commitProxy('query')
72 } 153 }
73 } 154 }
74 }) 155 })
75 } 156 }
76 -  
77 -// ========== 详情相关 ==========  
78 -const detailRef = ref() // 详情 Ref  
79 -  
80 -// 详情操作  
81 -const handleDetail = async (row: ErrorCodeVO) => {  
82 - // 设置数据  
83 - detailRef.value = row  
84 - setDialogTile('detail')  
85 -}  
86 -  
87 -// ========== 初始化 ==========  
88 -getList()  
89 </script> 157 </script>
90 -  
91 -<template>  
92 - <!-- 搜索工作区 -->  
93 - <ContentWrap>  
94 - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />  
95 - </ContentWrap>  
96 - <ContentWrap>  
97 - <!-- 操作工具栏 -->  
98 - <div class="mb-10px">  
99 - <el-button v-hasPermi="['system:error-code:create']" type="primary" @click="handleCreate">  
100 - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}  
101 - </el-button>  
102 - </div>  
103 - <!-- 列表 -->  
104 - <Table  
105 - :columns="allSchemas.tableColumns"  
106 - :selection="false"  
107 - :data="tableObject.tableList"  
108 - :loading="tableObject.loading"  
109 - :pagination="{  
110 - total: tableObject.total  
111 - }"  
112 - v-model:pageSize="tableObject.pageSize"  
113 - v-model:currentPage="tableObject.currentPage"  
114 - @register="register"  
115 - >  
116 - <template #type="{ row }">  
117 - <DictTag :type="DICT_TYPE.SYSTEM_ERROR_CODE_TYPE" :value="row.type" />  
118 - </template>  
119 - <template #createTime="{ row }">  
120 - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>  
121 - </template>  
122 - <template #action="{ row }">  
123 - <el-button  
124 - link  
125 - type="primary"  
126 - v-hasPermi="['system:error-code:update']"  
127 - @click="handleUpdate(row)"  
128 - >  
129 - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}  
130 - </el-button>  
131 - <el-button  
132 - link  
133 - type="primary"  
134 - v-hasPermi="['system:error-code:update']"  
135 - @click="handleDetail(row)"  
136 - >  
137 - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}  
138 - </el-button>  
139 - <el-button  
140 - link  
141 - type="primary"  
142 - v-hasPermi="['system:error-code:delete']"  
143 - @click="delList(row.id, false)"  
144 - >  
145 - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}  
146 - </el-button>  
147 - </template>  
148 - </Table>  
149 - </ContentWrap>  
150 -  
151 - <Dialog v-model="dialogVisible" :title="dialogTitle">  
152 - <!-- 对话框(添加 / 修改) -->  
153 - <Form  
154 - v-if="['create', 'update'].includes(actionType)"  
155 - :schema="allSchemas.formSchema"  
156 - :rules="rules"  
157 - ref="formRef"  
158 - />  
159 - <!-- 对话框(详情) -->  
160 - <Descriptions  
161 - v-if="actionType === 'detail'"  
162 - :schema="allSchemas.detailSchema"  
163 - :data="detailRef"  
164 - >  
165 - <template #type="{ row }">  
166 - <DictTag :type="DICT_TYPE.SYSTEM_ERROR_CODE_TYPE" :value="row.type" />  
167 - </template>  
168 - <template #createTime="{ row }">  
169 - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>  
170 - </template>  
171 - </Descriptions>  
172 - <!-- 操作按钮 -->  
173 - <template #footer>  
174 - <el-button  
175 - v-if="['create', 'update'].includes(actionType)"  
176 - type="primary"  
177 - :loading="loading"  
178 - @click="submitForm"  
179 - >  
180 - {{ t('action.save') }}  
181 - </el-button>  
182 - <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>  
183 - </template>  
184 - </Dialog>  
185 -</template>  
yudao-ui-admin-vue3/src/views/system/menu/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
  3 + <!-- 搜索工作栏 -->
3 <el-form :model="queryParams" ref="queryForm" :inline="true"> 4 <el-form :model="queryParams" ref="queryForm" :inline="true">
4 <el-form-item label="菜单名称" prop="name"> 5 <el-form-item label="菜单名称" prop="name">
5 <el-input v-model="queryParams.name" placeholder="请输入菜单名称" /> 6 <el-input v-model="queryParams.name" placeholder="请输入菜单名称" />
@@ -15,17 +16,20 @@ @@ -15,17 +16,20 @@
15 </el-select> 16 </el-select>
16 </el-form-item> 17 </el-form-item>
17 <el-form-item> 18 <el-form-item>
  19 + <!-- 操作:搜索 -->
18 <XButton 20 <XButton
19 type="primary" 21 type="primary"
20 preIcon="ep:search" 22 preIcon="ep:search"
21 :title="t('common.query')" 23 :title="t('common.query')"
22 @click="handleQuery()" 24 @click="handleQuery()"
23 /> 25 />
  26 + <!-- 操作:重置 -->
24 <XButton preIcon="ep:refresh-right" :title="t('common.reset')" @click="resetQuery()" /> 27 <XButton preIcon="ep:refresh-right" :title="t('common.reset')" @click="resetQuery()" />
25 </el-form-item> 28 </el-form-item>
26 </el-form> 29 </el-form>
27 <vxe-toolbar> 30 <vxe-toolbar>
28 <template #buttons> 31 <template #buttons>
  32 + <!-- 操作:新增 -->
29 <XButton 33 <XButton
30 type="primary" 34 type="primary"
31 preIcon="ep:zoom-in" 35 preIcon="ep:zoom-in"
@@ -37,6 +41,8 @@ @@ -37,6 +41,8 @@
37 <XButton title="关闭所有" @click="xTable?.clearTreeExpand()" /> 41 <XButton title="关闭所有" @click="xTable?.clearTreeExpand()" />
38 </template> 42 </template>
39 </vxe-toolbar> 43 </vxe-toolbar>
  44 + <!-- 列表 -->
  45 + <!-- TODO 星语:是不是也搞成 grid 会好点,后续代码就统一走 grid 风格? -->
40 <vxe-table 46 <vxe-table
41 show-overflow 47 show-overflow
42 keep-source 48 keep-source
@@ -73,12 +79,14 @@ @@ -73,12 +79,14 @@
73 <vxe-column title="创建时间" field="createTime" formatter="formatDate" /> 79 <vxe-column title="创建时间" field="createTime" formatter="formatDate" />
74 <vxe-column title="操作" width="200"> 80 <vxe-column title="操作" width="200">
75 <template #default="{ row }"> 81 <template #default="{ row }">
  82 + <!-- 操作:修改 -->
76 <XTextButton 83 <XTextButton
77 preIcon="ep:edit" 84 preIcon="ep:edit"
78 :title="t('action.edit')" 85 :title="t('action.edit')"
79 v-hasPermi="['system:menu:update']" 86 v-hasPermi="['system:menu:update']"
80 @click="handleUpdate(row)" 87 @click="handleUpdate(row)"
81 /> 88 />
  89 + <!-- 操作:删除 -->
82 <XTextButton 90 <XTextButton
83 preIcon="ep:delete" 91 preIcon="ep:delete"
84 :title="t('action.del')" 92 :title="t('action.del')"
@@ -89,6 +97,7 @@ @@ -89,6 +97,7 @@
89 </vxe-column> 97 </vxe-column>
90 </vxe-table> 98 </vxe-table>
91 </ContentWrap> 99 </ContentWrap>
  100 + <!-- 添加或修改菜单对话框 -->
92 <XModal v-model="dialogVisible" id="menuModel" :title="dialogTitle"> 101 <XModal v-model="dialogVisible" id="menuModel" :title="dialogTitle">
93 <template #default> 102 <template #default>
94 <!-- 对话框(添加 / 修改) --> 103 <!-- 对话框(添加 / 修改) -->
@@ -107,6 +116,7 @@ @@ -107,6 +116,7 @@
107 v-model="menuForm.parentId" 116 v-model="menuForm.parentId"
108 :props="menuProps" 117 :props="menuProps"
109 :data="menuOptions" 118 :data="menuOptions"
  119 + :default-expanded-keys="[0]"
110 check-strictly 120 check-strictly
111 /> 121 />
112 </el-form-item> 122 </el-form-item>
@@ -226,7 +236,7 @@ @@ -226,7 +236,7 @@
226 </el-form> 236 </el-form>
227 </template> 237 </template>
228 <template #footer> 238 <template #footer>
229 - <!-- 操作按钮 --> 239 + <!-- 按钮:保存 -->
230 <XButton 240 <XButton
231 v-if="['create', 'update'].includes(actionType)" 241 v-if="['create', 'update'].includes(actionType)"
232 type="primary" 242 type="primary"
@@ -234,22 +244,17 @@ @@ -234,22 +244,17 @@
234 @click="submitForm" 244 @click="submitForm"
235 :title="t('action.save')" 245 :title="t('action.save')"
236 /> 246 />
  247 + <!-- 按钮:关闭 -->
237 <XButton :loading="actionLoading" @click="dialogVisible = false" :title="t('dialog.close')" /> 248 <XButton :loading="actionLoading" @click="dialogVisible = false" :title="t('dialog.close')" />
238 </template> 249 </template>
239 </XModal> 250 </XModal>
240 </template> 251 </template>
241 <script setup lang="ts"> 252 <script setup lang="ts">
242 -import * as MenuApi from '@/api/system/menu'  
243 -import { MenuVO } from '@/api/system/menu/types' 253 +// 全局相关的 import
  254 +import { onMounted, reactive, ref } from 'vue'
244 import { useI18n } from '@/hooks/web/useI18n' 255 import { useI18n } from '@/hooks/web/useI18n'
245 import { useMessage } from '@/hooks/web/useMessage' 256 import { useMessage } from '@/hooks/web/useMessage'
246 -import { IconSelect } from '@/components/Icon'  
247 -import { Tooltip } from '@/components/Tooltip'  
248 -import { required } from '@/utils/formRules.js'  
249 -import { onMounted, reactive, ref } from 'vue'  
250 -import { VxeTableInstance } from 'vxe-table'  
251 -import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'  
252 -import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants' 257 +// TODO @星语:是不是 'element-plus' 和 '@/components/Tooltip' 和 '@/components/Icon' 全局直接引入
253 import { 258 import {
254 ElRow, 259 ElRow,
255 ElCol, 260 ElCol,
@@ -263,17 +268,29 @@ import { @@ -263,17 +268,29 @@ import {
263 ElRadioGroup, 268 ElRadioGroup,
264 ElRadioButton 269 ElRadioButton
265 } from 'element-plus' 270 } from 'element-plus'
  271 +import { Tooltip } from '@/components/Tooltip'
  272 +import { IconSelect } from '@/components/Icon'
  273 +import { VxeTableInstance } from 'vxe-table'
  274 +// 业务相关的 import
  275 +import * as MenuApi from '@/api/system/menu'
  276 +import { MenuVO } from '@/api/system/menu/types'
  277 +import { required } from '@/utils/formRules.js'
  278 +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  279 +import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
266 import { handleTree } from '@/utils/tree' 280 import { handleTree } from '@/utils/tree'
  281 +
267 const { t } = useI18n() // 国际化 282 const { t } = useI18n() // 国际化
268 -const message = useMessage() 283 +const message = useMessage() // 消息弹窗
  284 +// 列表相关的变量
269 const xTable = ref<VxeTableInstance>() 285 const xTable = ref<VxeTableInstance>()
270 const tableLoading = ref(false) 286 const tableLoading = ref(false)
271 const tableData = ref() 287 const tableData = ref()
272 -const actionLoading = ref(false) // 遮罩层  
273 -const actionType = ref('') // 操作按钮的类型 288 +// 弹窗相关的变量
274 const dialogVisible = ref(false) // 是否显示弹出层 289 const dialogVisible = ref(false) // 是否显示弹出层
275 const dialogTitle = ref('edit') // 弹出层标题 290 const dialogTitle = ref('edit') // 弹出层标题
276 -const statusOption = ref() // 状态选项 291 +const actionType = ref('') // 操作按钮的类型
  292 +const actionLoading = ref(false) // 遮罩层
  293 +// 新增和修改的表单值
277 const menuForm = ref<MenuVO>({ 294 const menuForm = ref<MenuVO>({
278 id: 0, 295 id: 0,
279 name: '', 296 name: '',
@@ -289,12 +306,24 @@ const menuForm = ref&lt;MenuVO&gt;({ @@ -289,12 +306,24 @@ const menuForm = ref&lt;MenuVO&gt;({
289 keepAlive: true, 306 keepAlive: true,
290 createTime: '' 307 createTime: ''
291 }) 308 })
  309 +// 新增和修改的表单校验
  310 +const rules = reactive({
  311 + name: [required],
  312 + sort: [required],
  313 + path: [required],
  314 + status: [required]
  315 +})
  316 +
  317 +// ========== 下拉框[上级菜单] ==========
  318 +// 下拉框[上级菜单]的配置项目
  319 +// TODO @星语:menuProps 貌似也可以抽到全局?
292 const menuProps = { 320 const menuProps = {
293 checkStrictly: true, 321 checkStrictly: true,
294 children: 'children', 322 children: 'children',
295 label: 'name', 323 label: 'name',
296 value: 'id' 324 value: 'id'
297 } 325 }
  326 +// TODO @星语:Tree 可以是全局的
298 interface Tree { 327 interface Tree {
299 id: number 328 id: number
300 name: string 329 name: string
@@ -308,6 +337,7 @@ const getTree = async () =&gt; { @@ -308,6 +337,7 @@ const getTree = async () =&gt; {
308 menu.children = handleTree(res) 337 menu.children = handleTree(res)
309 menuOptions.value.push(menu) 338 menuOptions.value.push(menu)
310 } 339 }
  340 +
311 // ========== 查询 ========== 341 // ========== 查询 ==========
312 const queryParams = reactive({ 342 const queryParams = reactive({
313 name: null, 343 name: null,
@@ -315,58 +345,47 @@ const queryParams = reactive({ @@ -315,58 +345,47 @@ const queryParams = reactive({
315 }) 345 })
316 const getList = async () => { 346 const getList = async () => {
317 tableLoading.value = true 347 tableLoading.value = true
318 - statusOption.value = getIntDictOptions(DICT_TYPE.COMMON_STATUS)  
319 const res = await MenuApi.getMenuListApi(queryParams) 348 const res = await MenuApi.getMenuListApi(queryParams)
320 tableData.value = res 349 tableData.value = res
321 tableLoading.value = false 350 tableLoading.value = false
322 } 351 }
  352 +
  353 +// 查询操作
  354 +const handleQuery = async () => {
  355 + await getList()
  356 +}
  357 +
  358 +// 重置操作
  359 +const resetQuery = async () => {
  360 + queryParams.name = null
  361 + queryParams.status = null
  362 + await getList()
  363 +}
  364 +
  365 +// ========== 新增/修改 ==========
  366 +
323 // 设置标题 367 // 设置标题
324 const setDialogTile = (type: string) => { 368 const setDialogTile = (type: string) => {
325 dialogTitle.value = t('action.' + type) 369 dialogTitle.value = t('action.' + type)
326 actionType.value = type 370 actionType.value = type
327 dialogVisible.value = true 371 dialogVisible.value = true
328 } 372 }
  373 +
329 // 新建操作 374 // 新建操作
330 const handleCreate = () => { 375 const handleCreate = () => {
331 setDialogTile('create') 376 setDialogTile('create')
  377 + // TODO @星语:重置表单
332 } 378 }
  379 +
333 // 修改操作 380 // 修改操作
334 const handleUpdate = async (row: MenuVO) => { 381 const handleUpdate = async (row: MenuVO) => {
  382 + setDialogTile('update')
335 // 设置数据 383 // 设置数据
336 const res = await MenuApi.getMenuApi(row.id) 384 const res = await MenuApi.getMenuApi(row.id)
337 - console.log(res)  
338 menuForm.value = res 385 menuForm.value = res
339 - setDialogTile('update')  
340 -}  
341 -// 删除操作  
342 -const handleDelete = async (row: MenuVO) => {  
343 - message.confirm(t('common.delDataMessage'), t('common.confirmTitle')).then(async () => {  
344 - await MenuApi.deleteMenuApi(row.id)  
345 - message.success(t('common.delSuccess'))  
346 - await getList()  
347 - })  
348 -}  
349 -// 表单校验  
350 -const rules = reactive({  
351 - name: [required],  
352 - sort: [required],  
353 - path: [required],  
354 - status: [required]  
355 -})  
356 -// 查询操作  
357 -const handleQuery = async () => {  
358 - await getList()  
359 -}  
360 -// 重置操作  
361 -const resetQuery = async () => {  
362 - queryParams.name = null  
363 - queryParams.status = null  
364 - await getList()  
365 -}  
366 -// 保存操作  
367 -const isExternal = (path: string) => {  
368 - return /^(https?:|mailto:|tel:)/.test(path)  
369 } 386 }
  387 +
  388 +// 提交新增/修改的表单
370 const submitForm = async () => { 389 const submitForm = async () => {
371 actionLoading.value = true 390 actionLoading.value = true
372 // 提交请求 391 // 提交请求
@@ -399,8 +418,26 @@ const submitForm = async () =&gt; { @@ -399,8 +418,26 @@ const submitForm = async () =&gt; {
399 actionLoading.value = false 418 actionLoading.value = false
400 } 419 }
401 } 420 }
  421 +
  422 +// 判断 path 是不是外部的 HTTP 等链接
  423 +const isExternal = (path: string) => {
  424 + return /^(https?:|mailto:|tel:)/.test(path)
  425 +}
  426 +
  427 +// ========== 删除 ==========
  428 +// 删除操作
  429 +const handleDelete = async (row: MenuVO) => {
  430 + message.confirm(t('common.delDataMessage'), t('common.confirmTitle')).then(async () => {
  431 + await MenuApi.deleteMenuApi(row.id)
  432 + message.success(t('common.delSuccess'))
  433 + await getList()
  434 + })
  435 +}
  436 +
  437 +// ========== 初始化 ==========
402 onMounted(async () => { 438 onMounted(async () => {
403 await getList() 439 await getList()
  440 + // TODO @星语:这个告警解决下;是不是改成新增和修改点击的时候,去加载下好一点哈?
404 getTree() 441 getTree()
405 }) 442 })
406 </script> 443 </script>
yudao-ui-admin-vue3/src/views/system/notice/index.vue
  1 +<template>
  2 + <ContentWrap>
  3 + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar">
  4 + <template #toolbar_buttons>
  5 + <XButton
  6 + type="primary"
  7 + preIcon="ep:zoom-in"
  8 + :title="t('action.add')"
  9 + v-hasPermi="['system:notice:create']"
  10 + @click="handleCreate()"
  11 + />
  12 + </template>
  13 + <template #actionbtns_default="{ row }">
  14 + <XTextButton
  15 + preIcon="ep:edit"
  16 + :title="t('action.edit')"
  17 + v-hasPermi="['system:notice:update']"
  18 + @click="handleUpdate(row.id)"
  19 + />
  20 + <XTextButton
  21 + preIcon="ep:view"
  22 + :title="t('action.detail')"
  23 + v-hasPermi="['system:notice:update']"
  24 + @click="handleDetail(row)"
  25 + />
  26 + <XTextButton
  27 + preIcon="ep:delete"
  28 + :title="t('action.del')"
  29 + v-hasPermi="['system:notice:delete']"
  30 + @click="handleDelete(row.id)"
  31 + />
  32 + </template>
  33 + </vxe-grid>
  34 + </ContentWrap>
  35 + <XModal id="noticeModel" v-model="dialogVisible" :title="dialogTitle">
  36 + <template #default>
  37 + <!-- 对话框(添加 / 修改) -->
  38 + <Form
  39 + v-if="['create', 'update'].includes(actionType)"
  40 + :schema="allSchemas.formSchema"
  41 + :rules="rules"
  42 + ref="formRef"
  43 + />
  44 + <!-- 对话框(详情) -->
  45 + <Descriptions
  46 + v-if="actionType === 'detail'"
  47 + :schema="allSchemas.detailSchema"
  48 + :data="detailRef"
  49 + />
  50 + </template>
  51 + <!-- 操作按钮 -->
  52 + <template #footer>
  53 + <XButton
  54 + v-if="['create', 'update'].includes(actionType)"
  55 + type="primary"
  56 + :title="t('action.save')"
  57 + :loading="actionLoading"
  58 + @click="submitForm"
  59 + />
  60 + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
  61 + </template>
  62 + </XModal>
  63 +</template>
1 <script setup lang="ts"> 64 <script setup lang="ts">
2 import { ref, unref } from 'vue' 65 import { ref, unref } from 'vue'
3 -import dayjs from 'dayjs'  
4 -import { ElMessage } from 'element-plus'  
5 -import { DICT_TYPE } from '@/utils/dict'  
6 -import { useTable } from '@/hooks/web/useTable' 66 +import * as NoticeApi from '@/api/system/notice'
  67 +import { NoticeVO } from '@/api/system/notice/types'
  68 +import { rules, allSchemas } from './notice.data'
7 import { useI18n } from '@/hooks/web/useI18n' 69 import { useI18n } from '@/hooks/web/useI18n'
  70 +import { useMessage } from '@/hooks/web/useMessage'
  71 +import { useVxeGrid } from '@/hooks/web/useVxeGrid'
  72 +import { VxeGridInstance } from 'vxe-table'
8 import { FormExpose } from '@/components/Form' 73 import { FormExpose } from '@/components/Form'
9 -import type { NoticeVO } from '@/api/system/notice/types'  
10 -import { rules, allSchemas } from './notice.data'  
11 -import * as NoticeApi from '@/api/system/notice'  
12 -const { t } = useI18n() // 国际化  
13 -// ========== 列表相关 ==========  
14 -const { register, tableObject, methods } = useTable<NoticeVO>({  
15 - getListApi: NoticeApi.getNoticePageApi,  
16 - delListApi: NoticeApi.deleteNoticeApi  
17 -})  
18 -const { getList, setSearchParams, delList } = methods  
19 74
20 -// ========== CRUD 相关 ==========  
21 -const actionLoading = ref(false) // 遮罩层  
22 -const actionType = ref('') // 操作按钮的类型 75 +const { t } = useI18n() // 国际化
  76 +const message = useMessage() // 消息弹窗
23 const dialogVisible = ref(false) // 是否显示弹出层 77 const dialogVisible = ref(false) // 是否显示弹出层
24 const dialogTitle = ref('edit') // 弹出层标题 78 const dialogTitle = ref('edit') // 弹出层标题
  79 +const actionType = ref('') // 操作按钮的类型
  80 +const actionLoading = ref(false) // 按钮Loading
  81 +const xGrid = ref<VxeGridInstance>() // grid Ref
25 const formRef = ref<FormExpose>() // 表单 Ref 82 const formRef = ref<FormExpose>() // 表单 Ref
  83 +const detailRef = ref() // 详情 Ref
  84 +
  85 +const { gridOptions } = useVxeGrid<NoticeVO>({
  86 + allSchemas: allSchemas,
  87 + getListApi: NoticeApi.getNoticePageApi
  88 +})
26 89
27 // 设置标题 90 // 设置标题
28 const setDialogTile = (type: string) => { 91 const setDialogTile = (type: string) => {
@@ -39,13 +102,32 @@ const handleCreate = () =&gt; { @@ -39,13 +102,32 @@ const handleCreate = () =&gt; {
39 } 102 }
40 103
41 // 修改操作 104 // 修改操作
42 -const handleUpdate = async (row: NoticeVO) => { 105 +const handleUpdate = async (rowId: number) => {
43 setDialogTile('update') 106 setDialogTile('update')
44 // 设置数据 107 // 设置数据
45 - const res = await NoticeApi.getNoticeApi(row.id) 108 + const res = await NoticeApi.getNoticeApi(rowId)
46 unref(formRef)?.setValues(res) 109 unref(formRef)?.setValues(res)
47 } 110 }
48 111
  112 +// 详情操作
  113 +const handleDetail = (row: NoticeVO) => {
  114 + setDialogTile('detail')
  115 + detailRef.value = row
  116 +}
  117 +
  118 +// 删除操作
  119 +const handleDelete = async (rowId: number) => {
  120 + message
  121 + .delConfirm()
  122 + .then(async () => {
  123 + await NoticeApi.deleteNoticeApi(rowId)
  124 + message.success(t('common.delSuccess'))
  125 + })
  126 + .finally(() => {
  127 + xGrid.value?.commitProxy('query')
  128 + })
  129 +}
  130 +
49 // 提交按钮 131 // 提交按钮
50 const submitForm = async () => { 132 const submitForm = async () => {
51 const elForm = unref(formRef)?.getElFormRef() 133 const elForm = unref(formRef)?.getElFormRef()
@@ -58,133 +140,17 @@ const submitForm = async () =&gt; { @@ -58,133 +140,17 @@ const submitForm = async () =&gt; {
58 const data = unref(formRef)?.formModel as NoticeVO 140 const data = unref(formRef)?.formModel as NoticeVO
59 if (actionType.value === 'create') { 141 if (actionType.value === 'create') {
60 await NoticeApi.createNoticeApi(data) 142 await NoticeApi.createNoticeApi(data)
61 - ElMessage.success(t('common.createSuccess')) 143 + message.success(t('common.createSuccess'))
62 } else { 144 } else {
63 await NoticeApi.updateNoticeApi(data) 145 await NoticeApi.updateNoticeApi(data)
64 - ElMessage.success(t('common.updateSuccess')) 146 + message.success(t('common.updateSuccess'))
65 } 147 }
66 - // 操作成功,重新加载列表  
67 dialogVisible.value = false 148 dialogVisible.value = false
68 - await getList()  
69 } finally { 149 } finally {
70 actionLoading.value = false 150 actionLoading.value = false
  151 + xGrid.value?.commitProxy('query')
71 } 152 }
72 } 153 }
73 }) 154 })
74 } 155 }
75 -  
76 -// ========== 详情相关 ==========  
77 -const detailRef = ref() // 详情 Ref  
78 -  
79 -// 详情操作  
80 -const handleDetail = async (row: NoticeVO) => {  
81 - // 设置数据  
82 - detailRef.value = row  
83 - setDialogTile('detail')  
84 -}  
85 -  
86 -// ========== 初始化 ==========  
87 -getList()  
88 </script> 156 </script>
89 -  
90 -<template>  
91 - <!-- 搜索工作区 -->  
92 - <ContentWrap>  
93 - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />  
94 - </ContentWrap>  
95 - <ContentWrap>  
96 - <!-- 操作工具栏 -->  
97 - <div class="mb-10px">  
98 - <el-button type="primary" v-hasPermi="['system:notice:create']" @click="handleCreate">  
99 - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}  
100 - </el-button>  
101 - </div>  
102 - <!-- 列表 -->  
103 - <Table  
104 - :columns="allSchemas.tableColumns"  
105 - :selection="false"  
106 - :data="tableObject.tableList"  
107 - :loading="tableObject.loading"  
108 - :pagination="{  
109 - total: tableObject.total  
110 - }"  
111 - v-model:pageSize="tableObject.pageSize"  
112 - v-model:currentPage="tableObject.currentPage"  
113 - @register="register"  
114 - >  
115 - <template #type="{ row }">  
116 - <DictTag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="row.type" />  
117 - </template>  
118 - <template #status="{ row }">  
119 - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />  
120 - </template>  
121 - <template #createTime="{ row }">  
122 - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>  
123 - </template>  
124 - <template #action="{ row }">  
125 - <el-button  
126 - link  
127 - type="primary"  
128 - v-hasPermi="['system:notice:update']"  
129 - @click="handleUpdate(row)"  
130 - >  
131 - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}  
132 - </el-button>  
133 - <el-button  
134 - link  
135 - type="primary"  
136 - v-hasPermi="['system:notice:update']"  
137 - @click="handleDetail(row)"  
138 - >  
139 - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}  
140 - </el-button>  
141 - <el-button  
142 - link  
143 - type="primary"  
144 - v-hasPermi="['system:notice:delete']"  
145 - @click="delList(row.id, false)"  
146 - >  
147 - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}  
148 - </el-button>  
149 - </template>  
150 - </Table>  
151 - </ContentWrap>  
152 -  
153 - <Dialog v-model="dialogVisible" :title="dialogTitle" maxHeight="500px" width="50%">  
154 - <!-- 对话框(添加 / 修改) -->  
155 - <Form  
156 - v-if="['create', 'update'].includes(actionType)"  
157 - :schema="allSchemas.formSchema"  
158 - :rules="rules"  
159 - ref="formRef"  
160 - />  
161 - <!-- 对话框(详情) -->  
162 - <Descriptions  
163 - v-if="actionType === 'detail'"  
164 - :schema="allSchemas.detailSchema"  
165 - :data="detailRef"  
166 - >  
167 - <template #type="{ row }">  
168 - <DictTag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="row.type" />  
169 - </template>  
170 - <template #status="{ row }">  
171 - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />  
172 - </template>  
173 - <template #createTime="{ row }">  
174 - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>  
175 - </template>  
176 - </Descriptions>  
177 - <!-- 操作按钮 -->  
178 - <template #footer>  
179 - <el-button  
180 - v-if="['create', 'update'].includes(actionType)"  
181 - type="primary"  
182 - :loading="actionLoading"  
183 - @click="submitForm"  
184 - >  
185 - {{ t('action.save') }}  
186 - </el-button>  
187 - <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>  
188 - </template>  
189 - </Dialog>  
190 -</template>  
yudao-ui-admin-vue3/src/views/system/notice/notice.data.ts
@@ -2,7 +2,7 @@ import { reactive } from &#39;vue&#39; @@ -2,7 +2,7 @@ import { reactive } from &#39;vue&#39;
2 import { useI18n } from '@/hooks/web/useI18n' 2 import { useI18n } from '@/hooks/web/useI18n'
3 import { required } from '@/utils/formRules' 3 import { required } from '@/utils/formRules'
4 import { DICT_TYPE } from '@/utils/dict' 4 import { DICT_TYPE } from '@/utils/dict'
5 -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' 5 +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas'
6 const { t } = useI18n() // 国际化 6 const { t } = useI18n() // 国际化
7 7
8 // 表单校验 8 // 表单校验
@@ -12,74 +12,47 @@ export const rules = reactive({ @@ -12,74 +12,47 @@ export const rules = reactive({
12 }) 12 })
13 13
14 // CrudSchema 14 // CrudSchema
15 -const crudSchemas = reactive<CrudSchema[]>([  
16 - {  
17 - label: t('common.index'),  
18 - field: 'id',  
19 - type: 'index',  
20 - form: {  
21 - show: false 15 +const crudSchemas = reactive<VxeCrudSchema>({
  16 + primaryKey: 'id',
  17 + primaryType: 'seq',
  18 + action: true,
  19 + columns: [
  20 + {
  21 + title: '公告标题',
  22 + field: 'title',
  23 + isSearch: true
22 }, 24 },
23 - detail: {  
24 - show: false  
25 - }  
26 - },  
27 - {  
28 - label: '公告标题',  
29 - field: 'title',  
30 - search: {  
31 - show: true  
32 - }  
33 - },  
34 - {  
35 - label: '公告类型',  
36 - field: 'type',  
37 - dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE,  
38 - search: {  
39 - show: true  
40 - }  
41 - },  
42 - {  
43 - label: t('common.status'),  
44 - field: 'status',  
45 - dictType: DICT_TYPE.COMMON_STATUS,  
46 - search: {  
47 - show: true 25 + {
  26 + title: '公告类型',
  27 + field: 'type',
  28 + dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE,
  29 + isSearch: true
48 }, 30 },
49 - form: {  
50 - component: 'RadioButton'  
51 - }  
52 - },  
53 - {  
54 - label: '公告内容',  
55 - field: 'content',  
56 - form: {  
57 - component: 'Editor',  
58 - colProps: {  
59 - span: 24  
60 - },  
61 - componentProps: {  
62 - valueHtml: '' 31 + {
  32 + title: t('common.status'),
  33 + field: 'status',
  34 + dictType: DICT_TYPE.COMMON_STATUS,
  35 + isSearch: true
  36 + },
  37 + {
  38 + title: '公告内容',
  39 + field: 'content',
  40 + form: {
  41 + component: 'Editor',
  42 + colProps: {
  43 + span: 24
  44 + },
  45 + componentProps: {
  46 + valueHtml: ''
  47 + }
63 } 48 }
64 - }  
65 - },  
66 - {  
67 - label: t('common.createTime'),  
68 - field: 'createTime',  
69 - form: {  
70 - show: false  
71 - }  
72 - },  
73 - {  
74 - label: t('table.action'),  
75 - field: 'action',  
76 - width: '240px',  
77 - form: {  
78 - show: false  
79 }, 49 },
80 - detail: {  
81 - show: false 50 + {
  51 + title: t('common.createTime'),
  52 + field: 'createTime',
  53 + formatter: 'formatDate',
  54 + isForm: false
82 } 55 }
83 - }  
84 -])  
85 -export const { allSchemas } = useCrudSchemas(crudSchemas) 56 + ]
  57 +})
  58 +export const { allSchemas } = useVxeCrudSchemas(crudSchemas)
yudao-ui-admin-vue3/src/views/system/post/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
  3 + <!-- 列表 -->
3 <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar">
  5 + <!-- 操作:新增 -->
4 <template #toolbar_buttons> 6 <template #toolbar_buttons>
5 <XButton 7 <XButton
6 type="primary" 8 type="primary"
@@ -10,22 +12,22 @@ @@ -10,22 +12,22 @@
10 @click="handleCreate()" 12 @click="handleCreate()"
11 /> 13 />
12 </template> 14 </template>
13 - <template #status_default="{ row }">  
14 - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />  
15 - </template>  
16 - <template #action_default="{ row }"> 15 + <template #actionbtns_default="{ row }">
  16 + <!-- 操作:修改 -->
17 <XTextButton 17 <XTextButton
18 preIcon="ep:edit" 18 preIcon="ep:edit"
19 :title="t('action.edit')" 19 :title="t('action.edit')"
20 v-hasPermi="['system:post:update']" 20 v-hasPermi="['system:post:update']"
21 @click="handleUpdate(row.id)" 21 @click="handleUpdate(row.id)"
22 /> 22 />
  23 + <!-- 操作:详情 -->
23 <XTextButton 24 <XTextButton
24 preIcon="ep:view" 25 preIcon="ep:view"
25 :title="t('action.detail')" 26 :title="t('action.detail')"
26 v-hasPermi="['system:post:update']" 27 v-hasPermi="['system:post:update']"
27 @click="handleDetail(row)" 28 @click="handleDetail(row)"
28 /> 29 />
  30 + <!-- 操作:删除 -->
29 <XTextButton 31 <XTextButton
30 preIcon="ep:delete" 32 preIcon="ep:delete"
31 :title="t('action.del')" 33 :title="t('action.del')"
@@ -35,29 +37,25 @@ @@ -35,29 +37,25 @@
35 </template> 37 </template>
36 </vxe-grid> 38 </vxe-grid>
37 </ContentWrap> 39 </ContentWrap>
  40 + <!-- 弹窗 -->
38 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
39 <template #default> 42 <template #default>
40 - <!-- 对话框(添加 / 修改) --> 43 + <!-- 表单:添加/修改 -->
41 <Form 44 <Form
42 v-if="['create', 'update'].includes(actionType)" 45 v-if="['create', 'update'].includes(actionType)"
43 :schema="allSchemas.formSchema" 46 :schema="allSchemas.formSchema"
44 :rules="rules" 47 :rules="rules"
45 ref="formRef" 48 ref="formRef"
46 /> 49 />
  50 + <!-- 表单:详情 -->
47 <Descriptions 51 <Descriptions
48 v-if="actionType === 'detail'" 52 v-if="actionType === 'detail'"
49 :schema="allSchemas.detailSchema" 53 :schema="allSchemas.detailSchema"
50 :data="detailRef" 54 :data="detailRef"
51 - >  
52 - <template #status="{ row }">  
53 - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />  
54 - </template>  
55 - <template #createTime="{ row }">  
56 - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>  
57 - </template>  
58 - </Descriptions> 55 + />
59 </template> 56 </template>
60 <template #footer> 57 <template #footer>
  58 + <!-- 按钮:保存 -->
61 <XButton 59 <XButton
62 v-if="['create', 'update'].includes(actionType)" 60 v-if="['create', 'update'].includes(actionType)"
63 type="primary" 61 type="primary"
@@ -65,38 +63,40 @@ @@ -65,38 +63,40 @@
65 :loading="actionLoading" 63 :loading="actionLoading"
66 @click="submitForm" 64 @click="submitForm"
67 /> 65 />
  66 + <!-- 按钮:关闭 -->
68 <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> 67 <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
69 </template> 68 </template>
70 </XModal> 69 </XModal>
71 </template> 70 </template>
72 <script setup lang="ts"> 71 <script setup lang="ts">
  72 +// 全局相关的 import
73 import { ref, unref } from 'vue' 73 import { ref, unref } from 'vue'
74 -import dayjs from 'dayjs'  
75 -import { DICT_TYPE } from '@/utils/dict'  
76 -import * as PostApi from '@/api/system/post'  
77 -import { PostVO } from '@/api/system/post/types'  
78 -import { rules, allSchemas } from './post.data'  
79 import { useI18n } from '@/hooks/web/useI18n' 74 import { useI18n } from '@/hooks/web/useI18n'
80 import { useMessage } from '@/hooks/web/useMessage' 75 import { useMessage } from '@/hooks/web/useMessage'
81 import { useVxeGrid } from '@/hooks/web/useVxeGrid' 76 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
82 import { VxeGridInstance } from 'vxe-table' 77 import { VxeGridInstance } from 'vxe-table'
83 import { FormExpose } from '@/components/Form' 78 import { FormExpose } from '@/components/Form'
  79 +// 业务相关的 import
  80 +import * as PostApi from '@/api/system/post'
  81 +import { PostVO } from '@/api/system/post/types'
  82 +import { rules, allSchemas } from './post.data'
84 83
85 const { t } = useI18n() // 国际化 84 const { t } = useI18n() // 国际化
86 const message = useMessage() // 消息弹窗 85 const message = useMessage() // 消息弹窗
  86 +// 列表相关的变量
  87 +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
  88 +const { gridOptions } = useVxeGrid<PostVO>({
  89 + allSchemas: allSchemas,
  90 + getListApi: PostApi.getPostPageApi
  91 +})
  92 +// 弹窗相关的变量
87 const dialogVisible = ref(false) // 是否显示弹出层 93 const dialogVisible = ref(false) // 是否显示弹出层
88 const dialogTitle = ref('edit') // 弹出层标题 94 const dialogTitle = ref('edit') // 弹出层标题
89 const actionType = ref('') // 操作按钮的类型 95 const actionType = ref('') // 操作按钮的类型
90 -const actionLoading = ref(false) // 按钮Loading  
91 -const xGrid = ref<VxeGridInstance>() // grid Ref 96 +const actionLoading = ref(false) // 按钮 Loading
92 const formRef = ref<FormExpose>() // 表单 Ref 97 const formRef = ref<FormExpose>() // 表单 Ref
93 const detailRef = ref() // 详情 Ref 98 const detailRef = ref() // 详情 Ref
94 99
95 -const { gridOptions } = useVxeGrid<PostVO>({  
96 - allSchemas: allSchemas,  
97 - getListApi: PostApi.getPostPageApi  
98 -})  
99 -  
100 // 设置标题 100 // 设置标题
101 const setDialogTile = (type: string) => { 101 const setDialogTile = (type: string) => {
102 dialogTitle.value = t('action.' + type) 102 dialogTitle.value = t('action.' + type)
@@ -111,12 +111,6 @@ const handleCreate = () =&gt; { @@ -111,12 +111,6 @@ const handleCreate = () =&gt; {
111 unref(formRef)?.getElFormRef()?.resetFields() 111 unref(formRef)?.getElFormRef()?.resetFields()
112 } 112 }
113 113
114 -// 详情操作  
115 -const handleDetail = (row: PostVO) => {  
116 - setDialogTile('detail')  
117 - detailRef.value = row  
118 -}  
119 -  
120 // 修改操作 114 // 修改操作
121 const handleUpdate = async (rowId: number) => { 115 const handleUpdate = async (rowId: number) => {
122 setDialogTile('update') 116 setDialogTile('update')
@@ -125,6 +119,13 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -125,6 +119,13 @@ const handleUpdate = async (rowId: number) =&gt; {
125 unref(formRef)?.setValues(res) 119 unref(formRef)?.setValues(res)
126 } 120 }
127 121
  122 +// 详情操作
  123 +const handleDetail = (row: PostVO) => {
  124 + setDialogTile('detail')
  125 + // TODO @星语:要不读取下后端?
  126 + detailRef.value = row
  127 +}
  128 +
128 // 删除操作 129 // 删除操作
129 const handleDelete = async (rowId: number) => { 130 const handleDelete = async (rowId: number) => {
130 message 131 message
@@ -134,14 +135,16 @@ const handleDelete = async (rowId: number) =&gt; { @@ -134,14 +135,16 @@ const handleDelete = async (rowId: number) =&gt; {
134 message.success(t('common.delSuccess')) 135 message.success(t('common.delSuccess'))
135 }) 136 })
136 .finally(() => { 137 .finally(() => {
  138 + // 刷新列表
137 xGrid.value?.commitProxy('query') 139 xGrid.value?.commitProxy('query')
138 }) 140 })
139 } 141 }
140 142
141 -// 提交按钮 143 +// 提交新增/修改的表单
142 const submitForm = async () => { 144 const submitForm = async () => {
143 const elForm = unref(formRef)?.getElFormRef() 145 const elForm = unref(formRef)?.getElFormRef()
144 if (!elForm) return 146 if (!elForm) return
  147 + // TODO @星语:这个告警,要不要解决下?
145 elForm.validate(async (valid) => { 148 elForm.validate(async (valid) => {
146 if (valid) { 149 if (valid) {
147 actionLoading.value = true 150 actionLoading.value = true
@@ -158,6 +161,7 @@ const submitForm = async () =&gt; { @@ -158,6 +161,7 @@ const submitForm = async () =&gt; {
158 dialogVisible.value = false 161 dialogVisible.value = false
159 } finally { 162 } finally {
160 actionLoading.value = false 163 actionLoading.value = false
  164 + // 刷新列表
161 xGrid.value?.commitProxy('query') 165 xGrid.value?.commitProxy('query')
162 } 166 }
163 } 167 }
yudao-ui-admin-vue3/src/views/system/post/post.data.ts
@@ -13,79 +13,42 @@ export const rules = reactive({ @@ -13,79 +13,42 @@ export const rules = reactive({
13 }) 13 })
14 14
15 // CrudSchema 15 // CrudSchema
16 -const crudSchemas = reactive<VxeCrudSchema[]>([  
17 - {  
18 - title: t('common.index'),  
19 - field: 'id',  
20 - type: 'seq',  
21 - form: {  
22 - show: false 16 +const crudSchemas = reactive<VxeCrudSchema>({
  17 + primaryKey: 'id',
  18 + primaryType: 'seq',
  19 + action: true,
  20 + columns: [
  21 + {
  22 + title: '岗位名称',
  23 + field: 'name',
  24 + isSearch: true
23 }, 25 },
24 - detail: {  
25 - show: false  
26 - }  
27 - },  
28 - {  
29 - title: '岗位名称',  
30 - field: 'name',  
31 - search: {  
32 - show: true  
33 - }  
34 - },  
35 - {  
36 - title: '岗位编码',  
37 - field: 'code',  
38 - search: {  
39 - show: true  
40 - }  
41 - },  
42 - {  
43 - title: '岗位顺序',  
44 - field: 'sort'  
45 - },  
46 - {  
47 - title: t('common.status'),  
48 - field: 'status',  
49 - dictType: DICT_TYPE.COMMON_STATUS,  
50 - table: {  
51 - slots: {  
52 - default: 'status_default'  
53 - } 26 + {
  27 + title: '岗位编码',
  28 + field: 'code',
  29 + isSearch: true
54 }, 30 },
55 - search: {  
56 - show: true  
57 - }  
58 - },  
59 - {  
60 - title: '备注',  
61 - field: 'remark',  
62 - table: {  
63 - show: false  
64 - }  
65 - },  
66 - {  
67 - title: t('common.createTime'),  
68 - field: 'createTime',  
69 - formatter: 'formatDate',  
70 - form: {  
71 - show: false  
72 - }  
73 - },  
74 - {  
75 - title: t('table.action'),  
76 - field: 'action',  
77 - table: {  
78 - width: '240px',  
79 - slots: {  
80 - default: 'action_default'  
81 - } 31 + {
  32 + title: '岗位顺序',
  33 + field: 'sort'
82 }, 34 },
83 - form: {  
84 - show: false 35 + {
  36 + title: t('common.status'),
  37 + field: 'status',
  38 + dictType: DICT_TYPE.COMMON_STATUS,
  39 + isSearch: true
85 }, 40 },
86 - detail: {  
87 - show: false 41 + {
  42 + title: '备注',
  43 + field: 'remark',
  44 + isTable: false
  45 + },
  46 + {
  47 + title: t('common.createTime'),
  48 + field: 'createTime',
  49 + formatter: 'formatDate',
  50 + isForm: false
88 } 51 }
89 - }  
90 -]) 52 + ]
  53 +})
91 export const { allSchemas } = useVxeCrudSchemas(crudSchemas) 54 export const { allSchemas } = useVxeCrudSchemas(crudSchemas)