@a2simcode/ui 0.0.284 → 0.0.285

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.cursor/skills/ui-component-helper/README.md +86 -86
  2. package/.cursor/skills/ui-component-helper/SKILL.md +115 -115
  3. package/LICENSE +53 -53
  4. package/README.md +156 -156
  5. package/dist/components/table/index.d.ts +9 -3
  6. package/dist/components/table/src/table.vue.d.ts +3 -1
  7. package/dist/simcode-ui.es.js +179 -179
  8. package/dist/simcode-ui.umd.js +2 -2
  9. package/dist/stats.html +1 -1
  10. package/dist/ui.css +1 -1
  11. package/docs/components/autocomplete.md +89 -89
  12. package/docs/components/barcode.md +101 -101
  13. package/docs/components/button-select.md +24 -24
  14. package/docs/components/button.md +117 -117
  15. package/docs/components/buttons.md +119 -119
  16. package/docs/components/card-list.md +38 -38
  17. package/docs/components/cascader-select.md +114 -114
  18. package/docs/components/checkbox.md +114 -114
  19. package/docs/components/code-mirror.md +85 -85
  20. package/docs/components/collapse.md +26 -26
  21. package/docs/components/comp.md +106 -106
  22. package/docs/components/count-up.md +24 -24
  23. package/docs/components/count.md +24 -24
  24. package/docs/components/data-panel.md +24 -24
  25. package/docs/components/date.md +76 -76
  26. package/docs/components/dialog-full.md +112 -112
  27. package/docs/components/dialog.md +127 -127
  28. package/docs/components/divider.md +24 -24
  29. package/docs/components/drawer.md +127 -127
  30. package/docs/components/dynamic-layer.md +118 -118
  31. package/docs/components/echarts.md +72 -72
  32. package/docs/components/editor.md +24 -24
  33. package/docs/components/form.md +87 -87
  34. package/docs/components/guid.md +39 -39
  35. package/docs/components/hpanel.md +24 -24
  36. package/docs/components/icon.md +56 -56
  37. package/docs/components/input-button.md +24 -24
  38. package/docs/components/input-code.md +24 -24
  39. package/docs/components/input-color.md +114 -114
  40. package/docs/components/input-layer.md +56 -56
  41. package/docs/components/input-rows.md +370 -370
  42. package/docs/components/input-tag.md +50 -50
  43. package/docs/components/input.md +129 -129
  44. package/docs/components/layer-form.md +61 -61
  45. package/docs/components/layer.md +127 -127
  46. package/docs/components/layout.md +132 -132
  47. package/docs/components/map.md +24 -24
  48. package/docs/components/menu.md +121 -121
  49. package/docs/components/meta/button.ts +212 -212
  50. package/docs/components/meta/buttons.ts +76 -76
  51. package/docs/components/meta/card-list.ts +210 -210
  52. package/docs/components/meta/code-mirror.ts +108 -108
  53. package/docs/components/meta/comp.ts +236 -236
  54. package/docs/components/meta/date.ts +267 -267
  55. package/docs/components/meta/echarts.ts +64 -64
  56. package/docs/components/meta/form-item.ts +62 -62
  57. package/docs/components/meta/form.ts +181 -181
  58. package/docs/components/meta/input-button.ts +175 -175
  59. package/docs/components/meta/input-cards.ts +112 -112
  60. package/docs/components/meta/input-code.ts +161 -161
  61. package/docs/components/meta/input-color.ts +243 -243
  62. package/docs/components/meta/input-rows.ts +119 -119
  63. package/docs/components/meta/layer-form.ts +74 -74
  64. package/docs/components/meta/map.ts +68 -68
  65. package/docs/components/meta/panel.ts +152 -152
  66. package/docs/components/meta/radio.ts +55 -55
  67. package/docs/components/meta/select.ts +279 -279
  68. package/docs/components/meta/slider.ts +270 -270
  69. package/docs/components/meta/table-panel.ts +326 -326
  70. package/docs/components/meta/table.ts +489 -489
  71. package/docs/components/meta/tabs.ts +146 -146
  72. package/docs/components/meta/title.ts +91 -91
  73. package/docs/components/meta/tree.ts +225 -225
  74. package/docs/components/meta/vpanel.ts +19 -19
  75. package/docs/components/meta/workflow-viewer.ts +55 -55
  76. package/docs/components/number.md +124 -124
  77. package/docs/components/page.md +102 -102
  78. package/docs/components/panel.md +37 -37
  79. package/docs/components/radio.md +87 -87
  80. package/docs/components/rate.md +71 -71
  81. package/docs/components/select.md +133 -133
  82. package/docs/components/slider-captcha.md +41 -41
  83. package/docs/components/slider.md +101 -101
  84. package/docs/components/switch.md +90 -90
  85. package/docs/components/table-panel.md +327 -327
  86. package/docs/components/table.md +510 -510
  87. package/docs/components/tabs.md +26 -26
  88. package/docs/components/title.md +24 -24
  89. package/docs/components/tree.md +222 -222
  90. package/docs/components/upload.md +117 -117
  91. package/docs/components/workflow-viewer.md +21 -21
  92. package/docs/components/workflow.md +21 -21
  93. package/docs/examples/autocomplete/advanced.vue +35 -35
  94. package/docs/examples/autocomplete/basic.vue +32 -32
  95. package/docs/examples/autocomplete/clearable.vue +33 -33
  96. package/docs/examples/autocomplete/custom-template.vue +49 -49
  97. package/docs/examples/autocomplete/disabled.vue +33 -33
  98. package/docs/examples/autocomplete/icon.vue +37 -37
  99. package/docs/examples/barcode/all-types.vue +380 -380
  100. package/docs/examples/barcode/basic.vue +14 -14
  101. package/docs/examples/barcode/props-appearance.vue +243 -243
  102. package/docs/examples/barcode/props-geometry.vue +143 -143
  103. package/docs/examples/barcode/props-logic.vue +216 -216
  104. package/docs/examples/barcode/props-symbology.vue +199 -199
  105. package/docs/examples/barcode/props-text.vue +268 -268
  106. package/docs/examples/button/basic.vue +7 -7
  107. package/docs/examples/button/disabled.vue +42 -42
  108. package/docs/examples/button/loading.vue +6 -6
  109. package/docs/examples/button/shape.vue +7 -7
  110. package/docs/examples/button/size.vue +14 -14
  111. package/docs/examples/button/status.vue +34 -34
  112. package/docs/examples/button/type.vue +10 -10
  113. package/docs/examples/button-select/basic.vue +19 -19
  114. package/docs/examples/buttons/basic.vue +62 -62
  115. package/docs/examples/buttons/disabled.vue +36 -36
  116. package/docs/examples/buttons/dropdown.vue +63 -63
  117. package/docs/examples/buttons/group.vue +52 -52
  118. package/docs/examples/buttons/link.vue +47 -47
  119. package/docs/examples/buttons/popup.vue +39 -39
  120. package/docs/examples/buttons/size.vue +45 -45
  121. package/docs/examples/card-list/basic.vue +70 -70
  122. package/docs/examples/card-list/selection-pagination.vue +69 -69
  123. package/docs/examples/cascader-select/basic.vue +28 -28
  124. package/docs/examples/cascader-select/clearable.vue +34 -34
  125. package/docs/examples/cascader-select/disabled.vue +43 -43
  126. package/docs/examples/cascader-select/filterable.vue +37 -37
  127. package/docs/examples/cascader-select/methods.vue +84 -84
  128. package/docs/examples/cascader-select/multiple.vue +38 -38
  129. package/docs/examples/cascader-select/slot.vue +45 -45
  130. package/docs/examples/checkbox/basic.vue +18 -18
  131. package/docs/examples/checkbox/button.vue +19 -19
  132. package/docs/examples/checkbox/color.vue +25 -25
  133. package/docs/examples/checkbox/disabled.vue +17 -17
  134. package/docs/examples/checkbox/min-max.vue +20 -20
  135. package/docs/examples/checkbox/mixed.vue +56 -56
  136. package/docs/examples/checkbox/size.vue +28 -28
  137. package/docs/examples/code-mirror/basic.vue +11 -11
  138. package/docs/examples/code-mirror/events.vue +42 -42
  139. package/docs/examples/code-mirror/height.vue +25 -25
  140. package/docs/examples/code-mirror/mode.vue +33 -33
  141. package/docs/examples/code-mirror/readonly.vue +14 -14
  142. package/docs/examples/collapse/basic.vue +82 -82
  143. package/docs/examples/comp/basic.vue +7 -7
  144. package/docs/examples/comp/collapse.vue +38 -38
  145. package/docs/examples/comp/table-merge-rows.vue +77 -77
  146. package/docs/examples/comp/table-row-fixed-merge.vue +105 -105
  147. package/docs/examples/comp/tabs.vue +38 -38
  148. package/docs/examples/count/basic.vue +101 -101
  149. package/docs/examples/count-up/basic.vue +89 -89
  150. package/docs/examples/data-panel/basic.vue +110 -110
  151. package/docs/examples/date/basic.vue +73 -73
  152. package/docs/examples/date/default-value.vue +59 -59
  153. package/docs/examples/date/format.vue +75 -75
  154. package/docs/examples/date/range.vue +66 -66
  155. package/docs/examples/date/types.vue +79 -79
  156. package/docs/examples/decorated-title/basic.vue +31 -31
  157. package/docs/examples/dialog/basic.vue +36 -36
  158. package/docs/examples/dialog/custom-buttons.vue +44 -44
  159. package/docs/examples/dialog/fullscreen.vue +23 -23
  160. package/docs/examples/dialog/no-mask.vue +17 -17
  161. package/docs/examples/dialog/size.vue +44 -44
  162. package/docs/examples/dialog/steps.vue +57 -57
  163. package/docs/examples/dialog-full/basic.vue +29 -29
  164. package/docs/examples/dialog-full/custom-buttons.vue +45 -45
  165. package/docs/examples/dialog-full/no-buttons.vue +18 -18
  166. package/docs/examples/dialog-full/no-header.vue +27 -27
  167. package/docs/examples/dialog-full/steps.vue +71 -71
  168. package/docs/examples/divider/basic.vue +52 -52
  169. package/docs/examples/drawer/basic.vue +35 -35
  170. package/docs/examples/drawer/custom-buttons.vue +34 -34
  171. package/docs/examples/drawer/direction.vue +47 -47
  172. package/docs/examples/drawer/mask.vue +36 -36
  173. package/docs/examples/drawer/no-buttons.vue +20 -20
  174. package/docs/examples/drawer/size.vue +28 -28
  175. package/docs/examples/dynamic-layer/basic.vue +33 -33
  176. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -43
  177. package/docs/examples/dynamic-layer/form.vue +73 -73
  178. package/docs/examples/dynamic-layer/steps.vue +52 -52
  179. package/docs/examples/dynamic-layer/types.vue +40 -40
  180. package/docs/examples/echarts/basic.vue +31 -31
  181. package/docs/examples/echarts/dynamic.vue +43 -43
  182. package/docs/examples/echarts/line.vue +46 -46
  183. package/docs/examples/echarts/pie.vue +44 -44
  184. package/docs/examples/editor/basic.vue +15 -15
  185. package/docs/examples/form/basic.vue +688 -688
  186. package/docs/examples/form/init.vue +76 -76
  187. package/docs/examples/form/master-detail.vue +203 -203
  188. package/docs/examples/form/rule-format.vue +179 -179
  189. package/docs/examples/form/view-table.vue +378 -378
  190. package/docs/examples/guid/basic.vue +10 -10
  191. package/docs/examples/guid/size.vue +13 -13
  192. package/docs/examples/hpanel/basic.vue +79 -79
  193. package/docs/examples/icon/basic.vue +9 -9
  194. package/docs/examples/icon/rotate-flip.vue +9 -9
  195. package/docs/examples/icon/size.vue +7 -7
  196. package/docs/examples/input/basic.vue +10 -10
  197. package/docs/examples/input/clearable.vue +12 -12
  198. package/docs/examples/input/disabled.vue +6 -6
  199. package/docs/examples/input/icon.vue +23 -23
  200. package/docs/examples/input/password.vue +18 -18
  201. package/docs/examples/input/size.vue +13 -13
  202. package/docs/examples/input/textarea.vue +25 -25
  203. package/docs/examples/input/word-limit.vue +28 -28
  204. package/docs/examples/input-button/basic.vue +33 -33
  205. package/docs/examples/input-cards/basic.vue +79 -79
  206. package/docs/examples/input-code/basic.vue +29 -29
  207. package/docs/examples/input-color/basic.vue +10 -10
  208. package/docs/examples/input-color/disabled.vue +13 -13
  209. package/docs/examples/input-color/format.vue +17 -17
  210. package/docs/examples/input-color/no-alpha.vue +13 -13
  211. package/docs/examples/input-color/only-button.vue +15 -15
  212. package/docs/examples/input-color/predefine.vue +31 -31
  213. package/docs/examples/input-color/size.vue +15 -15
  214. package/docs/examples/input-layer/basic.vue +85 -85
  215. package/docs/examples/input-layer/render-vnode-page.vue +160 -160
  216. package/docs/examples/input-layer/render-vnode.vue +127 -127
  217. package/docs/examples/input-rows/basic.vue +73 -73
  218. package/docs/examples/input-rows/drag.vue +48 -48
  219. package/docs/examples/input-rows/layer-form.vue +85 -85
  220. package/docs/examples/input-rows/nested.vue +91 -91
  221. package/docs/examples/input-tag/basic.vue +27 -27
  222. package/docs/examples/input-tag/colors.vue +23 -23
  223. package/docs/examples/input-tag/readonly.vue +17 -17
  224. package/docs/examples/layer/basic.vue +43 -43
  225. package/docs/examples/layer/custom-buttons.vue +61 -61
  226. package/docs/examples/layer/drawer.vue +37 -37
  227. package/docs/examples/layer/full.vue +38 -38
  228. package/docs/examples/layer/modal.vue +34 -34
  229. package/docs/examples/layer/steps.vue +46 -46
  230. package/docs/examples/layer-form/basic.vue +76 -76
  231. package/docs/examples/layer-form/config.vue +82 -82
  232. package/docs/examples/layer-form/size.vue +72 -72
  233. package/docs/examples/layout/basic.vue +36 -36
  234. package/docs/examples/layout/custom-size.vue +50 -50
  235. package/docs/examples/layout/disable-move.vue +37 -37
  236. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -96
  237. package/docs/examples/layout/min-size.vue +73 -73
  238. package/docs/examples/layout/percent-size.vue +80 -80
  239. package/docs/examples/layout/simple.vue +22 -22
  240. package/docs/examples/layout/top-side.vue +34 -34
  241. package/docs/examples/map/basic.vue +22 -22
  242. package/docs/examples/menu/basic.vue +58 -58
  243. package/docs/examples/menu/collapsed.vue +49 -49
  244. package/docs/examples/menu/horizontal.vue +44 -44
  245. package/docs/examples/menu/selection-test.vue +104 -104
  246. package/docs/examples/menu/theme.vue +46 -46
  247. package/docs/examples/menu/vertical.vue +46 -46
  248. package/docs/examples/number/advanced.vue +143 -143
  249. package/docs/examples/number/basic.vue +63 -63
  250. package/docs/examples/number/disabled.vue +49 -49
  251. package/docs/examples/number/size.vue +42 -42
  252. package/docs/examples/number/slots.vue +123 -123
  253. package/docs/examples/number/step-strictly.vue +41 -41
  254. package/docs/examples/number/step.vue +47 -47
  255. package/docs/examples/page/basic.vue +41 -41
  256. package/docs/examples/page/code-table-model.vue +428 -428
  257. package/docs/examples/page/dept-user-management.vue +211 -211
  258. package/docs/examples/page/init.vue +87 -87
  259. package/docs/examples/page/log.vue +453 -453
  260. package/docs/examples/page/user-management.vue +313 -313
  261. package/docs/examples/panel/tool-buttons.vue +18 -18
  262. package/docs/examples/radio/basic.vue +17 -17
  263. package/docs/examples/radio/button.vue +17 -17
  264. package/docs/examples/radio/color.vue +18 -18
  265. package/docs/examples/radio/disabled.vue +17 -17
  266. package/docs/examples/radio/size.vue +29 -29
  267. package/docs/examples/rate/basic.vue +24 -24
  268. package/docs/examples/rate/half.vue +24 -24
  269. package/docs/examples/rate/readonly.vue +11 -11
  270. package/docs/examples/rate/text.vue +37 -37
  271. package/docs/examples/select/basic.vue +16 -16
  272. package/docs/examples/select/clearable.vue +22 -22
  273. package/docs/examples/select/disabled.vue +31 -31
  274. package/docs/examples/select/filterable.vue +24 -24
  275. package/docs/examples/select/group.vue +23 -23
  276. package/docs/examples/select/icon.vue +16 -16
  277. package/docs/examples/select/multiple.vue +18 -18
  278. package/docs/examples/select/size.vue +39 -39
  279. package/docs/examples/slider/basic.vue +42 -42
  280. package/docs/examples/slider/disabled.vue +17 -17
  281. package/docs/examples/slider/marks.vue +30 -30
  282. package/docs/examples/slider/size.vue +37 -37
  283. package/docs/examples/slider/tooltip.vue +36 -36
  284. package/docs/examples/slider/vertical.vue +26 -26
  285. package/docs/examples/slider-captcha/basic.vue +44 -44
  286. package/docs/examples/slider-captcha/custom.vue +48 -48
  287. package/docs/examples/switch/basic.vue +16 -16
  288. package/docs/examples/switch/disabled.vue +13 -13
  289. package/docs/examples/switch/loading.vue +13 -13
  290. package/docs/examples/switch/size.vue +15 -15
  291. package/docs/examples/switch/text.vue +13 -13
  292. package/docs/examples/table/action-filter.vue +126 -126
  293. package/docs/examples/table/actions.vue +116 -116
  294. package/docs/examples/table/add-row.vue +103 -103
  295. package/docs/examples/table/basic.vue +168 -168
  296. package/docs/examples/table/checkbox-layout.vue +68 -68
  297. package/docs/examples/table/column-filter.vue +96 -96
  298. package/docs/examples/table/custom-layout.vue +115 -115
  299. package/docs/examples/table/custom-merge-cell.vue +206 -206
  300. package/docs/examples/table/dynamic-type.vue +73 -73
  301. package/docs/examples/table/editable.vue +262 -262
  302. package/docs/examples/table/field-selection.vue +87 -87
  303. package/docs/examples/table/frozen-column.vue +140 -140
  304. package/docs/examples/table/height-mode.vue +99 -99
  305. package/docs/examples/table/icon.vue +85 -85
  306. package/docs/examples/table/layer-form.vue +133 -133
  307. package/docs/examples/table/link.vue +66 -66
  308. package/docs/examples/table/merge-cell.vue +78 -78
  309. package/docs/examples/table/merge-header.vue +86 -86
  310. package/docs/examples/table/multiple-disabled.vue +112 -112
  311. package/docs/examples/table/multiple.vue +188 -188
  312. package/docs/examples/table/pagination.vue +151 -151
  313. package/docs/examples/table/row-drag.vue +67 -67
  314. package/docs/examples/table/row-fixed.vue +61 -61
  315. package/docs/examples/table/single-selection.vue +64 -64
  316. package/docs/examples/table/sub-table-lazy.vue +97 -97
  317. package/docs/examples/table/sub-table.vue +103 -103
  318. package/docs/examples/table/tag.vue +43 -43
  319. package/docs/examples/table/tree-column.vue +119 -119
  320. package/docs/examples/table/tree-data.vue +141 -141
  321. package/docs/examples/table/tree-default-expand-all.vue +60 -60
  322. package/docs/examples/table/tree-lazy.vue +80 -80
  323. package/docs/examples/table/tree-set-selection.vue +75 -75
  324. package/docs/examples/table-panel/basic.vue +229 -229
  325. package/docs/examples/table-panel/batch-operations.vue +286 -286
  326. package/docs/examples/table-panel/button-visibility.vue +88 -88
  327. package/docs/examples/table-panel/card.vue +101 -101
  328. package/docs/examples/table-panel/column-filter.vue +116 -116
  329. package/docs/examples/table-panel/filter.vue +219 -219
  330. package/docs/examples/table-panel/get-selection.vue +111 -111
  331. package/docs/examples/table-panel/mask.vue +151 -151
  332. package/docs/examples/table-panel/model-value.vue +87 -87
  333. package/docs/examples/table-panel/multiple-selection.vue +243 -243
  334. package/docs/examples/table-panel/pagination-select-state-key.vue +176 -176
  335. package/docs/examples/table-panel/pagination.vue +133 -133
  336. package/docs/examples/table-panel/search-list.vue +207 -207
  337. package/docs/examples/table-panel/sub-table-lazy.vue +118 -118
  338. package/docs/examples/table-panel/tree-parent-key.vue +67 -67
  339. package/docs/examples/tabs/basic.vue +98 -98
  340. package/docs/examples/time/base.vue +67 -67
  341. package/docs/examples/title/basic.vue +87 -87
  342. package/docs/examples/tree/accordion.vue +46 -46
  343. package/docs/examples/tree/basic.vue +50 -50
  344. package/docs/examples/tree/buttons.vue +53 -53
  345. package/docs/examples/tree/check-strictly.vue +53 -53
  346. package/docs/examples/tree/checkable.vue +52 -52
  347. package/docs/examples/tree/custom-keys.vue +39 -39
  348. package/docs/examples/tree/default-expanded.vue +52 -52
  349. package/docs/examples/tree/draggable.vue +29 -29
  350. package/docs/examples/tree/expand-on-click.vue +39 -39
  351. package/docs/examples/tree/flat-data.vue +20 -20
  352. package/docs/examples/tree/icon.vue +40 -40
  353. package/docs/examples/tree/load-data.vue +37 -37
  354. package/docs/examples/tree/methods.vue +74 -74
  355. package/docs/examples/tree/theme.vue +33 -33
  356. package/docs/examples/tree-select/basic.vue +47 -47
  357. package/docs/examples/tree-select/lazy.vue +42 -42
  358. package/docs/examples/upload/accept.vue +31 -31
  359. package/docs/examples/upload/basic.vue +12 -12
  360. package/docs/examples/upload/drag.vue +11 -11
  361. package/docs/examples/upload/image.vue +17 -17
  362. package/docs/examples/upload/limit.vue +20 -20
  363. package/docs/examples/upload/multiple.vue +17 -17
  364. package/docs/examples/upload/readonly.vue +17 -17
  365. package/docs/examples/utils/cipher.vue +160 -160
  366. package/docs/examples/utils/common.vue +153 -153
  367. package/docs/examples/utils/date.vue +56 -56
  368. package/docs/examples/utils/dom.vue +52 -52
  369. package/docs/examples/utils/is.vue +70 -70
  370. package/docs/examples/workflow/basic.vue +265 -265
  371. package/docs/examples/workflow-viewer/basic.vue +248 -248
  372. package/package.json +23 -23
@@ -1,176 +1,176 @@
1
- <template>
2
- <div style="margin-bottom: 10px; display: flex; gap: 8px; align-items: center">
3
- <j-button type="primary" label="获取跨页选中" @click="getAllSelected" />
4
- <j-button type="primary" label="设置跨页选中" @click="setAllSelected" />
5
- </div>
6
- <div style="position: relative; width: 100%; height: 500px">
7
- <j-table-panel
8
- ref="tablePanelRef"
9
- row-key="orderId"
10
- is-multiple
11
- select-state-key="selected"
12
- :columns="columns"
13
- :load-data="loadData"
14
- :is-page="true"
15
- :page-size="10"
16
- @select="handleSelect"
17
- />
18
- </div>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import { ref } from 'vue'
23
- import { ElMessageBox } from 'element-plus'
24
-
25
- const tablePanelRef = ref()
26
- // 外部维护选中的 ID 集合
27
- const selectedIds = ref(new Set<string>())
28
-
29
- // 选中变化时用事件携带的 keys(跨页选中的完整 ID 列表)整体同步,清空选中时 keys 为空数组
30
- const handleSelect = ({ keys }: { keys: string[] }) => {
31
- selectedIds.value = new Set(keys)
32
- }
33
-
34
- // 获取所有页选中的数据
35
- const getAllSelected = () => {
36
- const ids = Array.from(selectedIds.value)
37
- console.log('跨页选中的 ID:', ids)
38
- ElMessageBox.alert(`跨页共选中 ${ids.length} 条,ID 列表详情请看控制台`, '提示', {
39
- confirmButtonText: '知道了',
40
- type: 'info',
41
- })
42
- }
43
-
44
- // 程序化设置跨页选中
45
- const ids = ['ORD-000001', 'ORD-000030']
46
- const setAllSelected = () => {
47
- selectedIds.value = new Set(ids)
48
- // 按 ID 设置跨页选中,选中计数立即生效(无需等待对应页数据加载)
49
- tablePanelRef.value?.setSelectionById?.(ids)
50
- // 刷新表格,loadData 会根据 selectedIds 标记 selected 字段
51
- tablePanelRef.value?.refreshData?.()
52
- }
53
-
54
- const columns = ref([
55
- {
56
- id: 'orderId',
57
- type: '',
58
- config: {
59
- label: '订单号',
60
- width: 150,
61
- filter: {
62
- isSearchKeyword: true,
63
- },
64
- },
65
- },
66
- {
67
- id: 'customerId',
68
- type: '',
69
- config: {
70
- label: '客户编号',
71
- width: 120,
72
- filter: {
73
- isSearchKeyword: true,
74
- },
75
- },
76
- },
77
- {
78
- id: 'productName',
79
- type: '',
80
- config: {
81
- label: '产品名称',
82
- filter: {
83
- isSearchKeyword: true,
84
- },
85
- },
86
- },
87
- {
88
- id: 'category',
89
- type: '',
90
- config: {
91
- label: '类别',
92
- width: 120,
93
- },
94
- },
95
- {
96
- id: 'region',
97
- type: '',
98
- config: {
99
- label: '区域',
100
- width: 100,
101
- },
102
- },
103
- {
104
- id: 'sales',
105
- type: '',
106
- config: {
107
- label: '销售额',
108
- width: 100,
109
- align: 'right',
110
- },
111
- },
112
- ])
113
-
114
- // 生成模拟数据
115
- const generateMockData = (count: number): Record<string, any>[] => {
116
- const categories = ['办公用品', '科技产品', '家具']
117
- const regions = ['华东', '华南', '华北', '华中', '西南', '西北']
118
- const data: Record<string, any>[] = []
119
-
120
- for (let i = 1; i <= count; i++) {
121
- data.push({
122
- orderId: `ORD-${String(i).padStart(6, '0')}`,
123
- customerId: `CUS-${String(Math.floor(Math.random() * 10000)).padStart(5, '0')}`,
124
- productName: `产品名称 ${i}`,
125
- category: categories[Math.floor(Math.random() * categories.length)],
126
- region: regions[Math.floor(Math.random() * regions.length)],
127
- sales: (Math.random() * 10000).toFixed(2),
128
- })
129
- }
130
-
131
- return data
132
- }
133
-
134
- const allData = generateMockData(100)
135
-
136
- // 模拟后端分页接口
137
- // 使用 select-state-key 时,需要在数据加载时标记 selected 字段
138
- const loadData = async (params: Record<string, any>) => {
139
- const hasKeyword = params.keyword?.value
140
- const hasFilter = params.filter?.cond?.length > 0
141
-
142
- if (hasKeyword || hasFilter) {
143
- ElMessageBox.alert(
144
- '查询过滤功能需要后端支持。在实际使用中,请将查询参数(keyword 和 filter)传递给后端接口进行数据过滤。',
145
- '提示',
146
- {
147
- confirmButtonText: '知道了',
148
- type: 'info',
149
- }
150
- )
151
- }
152
-
153
- return new Promise((resolve) => {
154
- setTimeout(() => {
155
- const { pagination } = params
156
- const { rows, page } = pagination || { rows: 10, page: 1 }
157
- const start = (page - 1) * rows
158
- const end = start + rows
159
-
160
- // 获取当前页数据
161
- const pageData = allData.slice(start, end)
162
-
163
- // 根据 selectedIds 标记 selected 字段
164
- // select-state-key="selected" 会让表格自动根据此字段初始化选中状态
165
- pageData.forEach((item) => {
166
- item.selected = selectedIds.value.has(item.orderId)
167
- })
168
-
169
- resolve({
170
- rows: pageData,
171
- records: allData.length,
172
- })
173
- }, 300)
174
- })
175
- }
176
- </script>
1
+ <template>
2
+ <div style="margin-bottom: 10px; display: flex; gap: 8px; align-items: center">
3
+ <j-button type="primary" label="获取跨页选中" @click="getAllSelected" />
4
+ <j-button type="primary" label="设置跨页选中" @click="setAllSelected" />
5
+ </div>
6
+ <div style="position: relative; width: 100%; height: 500px">
7
+ <j-table-panel
8
+ ref="tablePanelRef"
9
+ row-key="orderId"
10
+ is-multiple
11
+ select-state-key="selected"
12
+ :columns="columns"
13
+ :load-data="loadData"
14
+ :is-page="true"
15
+ :page-size="10"
16
+ @select="handleSelect"
17
+ />
18
+ </div>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import { ref } from 'vue'
23
+ import { ElMessageBox } from 'element-plus'
24
+
25
+ const tablePanelRef = ref()
26
+ // 外部维护选中的 ID 集合
27
+ const selectedIds = ref(new Set<string>())
28
+
29
+ // 选中变化时用事件携带的 keys(跨页选中的完整 ID 列表)整体同步,清空选中时 keys 为空数组
30
+ const handleSelect = ({ keys }: { keys: string[] }) => {
31
+ selectedIds.value = new Set(keys)
32
+ }
33
+
34
+ // 获取所有页选中的数据
35
+ const getAllSelected = () => {
36
+ const ids = Array.from(selectedIds.value)
37
+ console.log('跨页选中的 ID:', ids)
38
+ ElMessageBox.alert(`跨页共选中 ${ids.length} 条,ID 列表详情请看控制台`, '提示', {
39
+ confirmButtonText: '知道了',
40
+ type: 'info',
41
+ })
42
+ }
43
+
44
+ // 程序化设置跨页选中
45
+ const ids = ['ORD-000001', 'ORD-000030']
46
+ const setAllSelected = () => {
47
+ selectedIds.value = new Set(ids)
48
+ // 按 ID 设置跨页选中,选中计数立即生效(无需等待对应页数据加载)
49
+ tablePanelRef.value?.setSelectionById?.(ids)
50
+ // 刷新表格,loadData 会根据 selectedIds 标记 selected 字段
51
+ tablePanelRef.value?.refreshData?.()
52
+ }
53
+
54
+ const columns = ref([
55
+ {
56
+ id: 'orderId',
57
+ type: '',
58
+ config: {
59
+ label: '订单号',
60
+ width: 150,
61
+ filter: {
62
+ isSearchKeyword: true,
63
+ },
64
+ },
65
+ },
66
+ {
67
+ id: 'customerId',
68
+ type: '',
69
+ config: {
70
+ label: '客户编号',
71
+ width: 120,
72
+ filter: {
73
+ isSearchKeyword: true,
74
+ },
75
+ },
76
+ },
77
+ {
78
+ id: 'productName',
79
+ type: '',
80
+ config: {
81
+ label: '产品名称',
82
+ filter: {
83
+ isSearchKeyword: true,
84
+ },
85
+ },
86
+ },
87
+ {
88
+ id: 'category',
89
+ type: '',
90
+ config: {
91
+ label: '类别',
92
+ width: 120,
93
+ },
94
+ },
95
+ {
96
+ id: 'region',
97
+ type: '',
98
+ config: {
99
+ label: '区域',
100
+ width: 100,
101
+ },
102
+ },
103
+ {
104
+ id: 'sales',
105
+ type: '',
106
+ config: {
107
+ label: '销售额',
108
+ width: 100,
109
+ align: 'right',
110
+ },
111
+ },
112
+ ])
113
+
114
+ // 生成模拟数据
115
+ const generateMockData = (count: number): Record<string, any>[] => {
116
+ const categories = ['办公用品', '科技产品', '家具']
117
+ const regions = ['华东', '华南', '华北', '华中', '西南', '西北']
118
+ const data: Record<string, any>[] = []
119
+
120
+ for (let i = 1; i <= count; i++) {
121
+ data.push({
122
+ orderId: `ORD-${String(i).padStart(6, '0')}`,
123
+ customerId: `CUS-${String(Math.floor(Math.random() * 10000)).padStart(5, '0')}`,
124
+ productName: `产品名称 ${i}`,
125
+ category: categories[Math.floor(Math.random() * categories.length)],
126
+ region: regions[Math.floor(Math.random() * regions.length)],
127
+ sales: (Math.random() * 10000).toFixed(2),
128
+ })
129
+ }
130
+
131
+ return data
132
+ }
133
+
134
+ const allData = generateMockData(100)
135
+
136
+ // 模拟后端分页接口
137
+ // 使用 select-state-key 时,需要在数据加载时标记 selected 字段
138
+ const loadData = async (params: Record<string, any>) => {
139
+ const hasKeyword = params.keyword?.value
140
+ const hasFilter = params.filter?.cond?.length > 0
141
+
142
+ if (hasKeyword || hasFilter) {
143
+ ElMessageBox.alert(
144
+ '查询过滤功能需要后端支持。在实际使用中,请将查询参数(keyword 和 filter)传递给后端接口进行数据过滤。',
145
+ '提示',
146
+ {
147
+ confirmButtonText: '知道了',
148
+ type: 'info',
149
+ }
150
+ )
151
+ }
152
+
153
+ return new Promise((resolve) => {
154
+ setTimeout(() => {
155
+ const { pagination } = params
156
+ const { rows, page } = pagination || { rows: 10, page: 1 }
157
+ const start = (page - 1) * rows
158
+ const end = start + rows
159
+
160
+ // 获取当前页数据
161
+ const pageData = allData.slice(start, end)
162
+
163
+ // 根据 selectedIds 标记 selected 字段
164
+ // select-state-key="selected" 会让表格自动根据此字段初始化选中状态
165
+ pageData.forEach((item) => {
166
+ item.selected = selectedIds.value.has(item.orderId)
167
+ })
168
+
169
+ resolve({
170
+ rows: pageData,
171
+ records: allData.length,
172
+ })
173
+ }, 300)
174
+ })
175
+ }
176
+ </script>
@@ -1,133 +1,133 @@
1
- <template>
2
- <div style="position: relative; width: 100%; height: 500px">
3
- <j-table-panel
4
- ref="tablePanelRef"
5
- row-key="orderId"
6
- :columns="columns"
7
- :load-data="loadData"
8
- :is-page="true"
9
- :page-size="10"
10
- />
11
- </div>
12
- </template>
13
-
14
- <script setup lang="ts">
15
- import { ref } from 'vue'
16
- import { ElMessageBox } from 'element-plus'
17
-
18
- const tablePanelRef = ref()
19
-
20
- const columns = ref([
21
- {
22
- id: 'orderId',
23
- type: '',
24
- config: {
25
- label: '订单号',
26
- width: 150,
27
- filter: {
28
- isSearchKeyword: true,
29
- },
30
- },
31
- },
32
- {
33
- id: 'customerId',
34
- type: '',
35
- config: {
36
- label: '客户编号',
37
- width: 120,
38
- filter: {
39
- isSearchKeyword: true,
40
- },
41
- },
42
- },
43
- {
44
- id: 'productName',
45
- type: '',
46
- config: {
47
- label: '产品名称',
48
- filter: {
49
- isSearchKeyword: true,
50
- },
51
- },
52
- },
53
- {
54
- id: 'category',
55
- type: '',
56
- config: {
57
- label: '类别',
58
- width: 120,
59
- },
60
- },
61
- {
62
- id: 'region',
63
- type: '',
64
- config: {
65
- label: '区域',
66
- width: 100,
67
- },
68
- },
69
- {
70
- id: 'sales',
71
- type: '',
72
- config: {
73
- label: '销售额',
74
- width: 100,
75
- align: 'right',
76
- },
77
- },
78
- ])
79
-
80
- // 生成模拟数据
81
- const generateMockData = (count: number) => {
82
- const categories = ['办公用品', '科技产品', '家具']
83
- const regions = ['华东', '华南', '华北', '华中', '西南', '西北']
84
- const data = []
85
-
86
- for (let i = 1; i <= count; i++) {
87
- data.push({
88
- orderId: `ORD-${String(i).padStart(6, '0')}`,
89
- customerId: `CUS-${String(Math.floor(Math.random() * 10000)).padStart(5, '0')}`,
90
- productName: `产品名称 ${i}`,
91
- category: categories[Math.floor(Math.random() * categories.length)],
92
- region: regions[Math.floor(Math.random() * regions.length)],
93
- sales: (Math.random() * 10000).toFixed(2),
94
- })
95
- }
96
-
97
- return data
98
- }
99
-
100
- const allData = generateMockData(100)
101
-
102
- const loadData = async (params: Record<string, any>) => {
103
- // 检测是否有查询过滤参数
104
- const hasKeyword = params.keyword?.value
105
- const hasFilter = params.filter?.cond?.length > 0
106
-
107
- if (hasKeyword || hasFilter) {
108
- ElMessageBox.alert(
109
- '查询过滤功能需要后端支持。在实际使用中,请将查询参数(keyword 和 filter)传递给后端接口进行数据过滤。',
110
- '提示',
111
- {
112
- confirmButtonText: '知道了',
113
- type: 'info',
114
- }
115
- )
116
- }
117
-
118
- // 模拟异步分页加载
119
- return new Promise((resolve) => {
120
- setTimeout(() => {
121
- const { pagination } = params
122
- const { rows, page } = pagination || { rows: 10, page: 1 }
123
- const start = (page - 1) * rows
124
- const end = start + rows
125
-
126
- resolve({
127
- rows: allData.slice(start, end),
128
- records: allData.length,
129
- })
130
- }, 300)
131
- })
132
- }
133
- </script>
1
+ <template>
2
+ <div style="position: relative; width: 100%; height: 500px">
3
+ <j-table-panel
4
+ ref="tablePanelRef"
5
+ row-key="orderId"
6
+ :columns="columns"
7
+ :load-data="loadData"
8
+ :is-page="true"
9
+ :page-size="10"
10
+ />
11
+ </div>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ import { ref } from 'vue'
16
+ import { ElMessageBox } from 'element-plus'
17
+
18
+ const tablePanelRef = ref()
19
+
20
+ const columns = ref([
21
+ {
22
+ id: 'orderId',
23
+ type: '',
24
+ config: {
25
+ label: '订单号',
26
+ width: 150,
27
+ filter: {
28
+ isSearchKeyword: true,
29
+ },
30
+ },
31
+ },
32
+ {
33
+ id: 'customerId',
34
+ type: '',
35
+ config: {
36
+ label: '客户编号',
37
+ width: 120,
38
+ filter: {
39
+ isSearchKeyword: true,
40
+ },
41
+ },
42
+ },
43
+ {
44
+ id: 'productName',
45
+ type: '',
46
+ config: {
47
+ label: '产品名称',
48
+ filter: {
49
+ isSearchKeyword: true,
50
+ },
51
+ },
52
+ },
53
+ {
54
+ id: 'category',
55
+ type: '',
56
+ config: {
57
+ label: '类别',
58
+ width: 120,
59
+ },
60
+ },
61
+ {
62
+ id: 'region',
63
+ type: '',
64
+ config: {
65
+ label: '区域',
66
+ width: 100,
67
+ },
68
+ },
69
+ {
70
+ id: 'sales',
71
+ type: '',
72
+ config: {
73
+ label: '销售额',
74
+ width: 100,
75
+ align: 'right',
76
+ },
77
+ },
78
+ ])
79
+
80
+ // 生成模拟数据
81
+ const generateMockData = (count: number) => {
82
+ const categories = ['办公用品', '科技产品', '家具']
83
+ const regions = ['华东', '华南', '华北', '华中', '西南', '西北']
84
+ const data = []
85
+
86
+ for (let i = 1; i <= count; i++) {
87
+ data.push({
88
+ orderId: `ORD-${String(i).padStart(6, '0')}`,
89
+ customerId: `CUS-${String(Math.floor(Math.random() * 10000)).padStart(5, '0')}`,
90
+ productName: `产品名称 ${i}`,
91
+ category: categories[Math.floor(Math.random() * categories.length)],
92
+ region: regions[Math.floor(Math.random() * regions.length)],
93
+ sales: (Math.random() * 10000).toFixed(2),
94
+ })
95
+ }
96
+
97
+ return data
98
+ }
99
+
100
+ const allData = generateMockData(100)
101
+
102
+ const loadData = async (params: Record<string, any>) => {
103
+ // 检测是否有查询过滤参数
104
+ const hasKeyword = params.keyword?.value
105
+ const hasFilter = params.filter?.cond?.length > 0
106
+
107
+ if (hasKeyword || hasFilter) {
108
+ ElMessageBox.alert(
109
+ '查询过滤功能需要后端支持。在实际使用中,请将查询参数(keyword 和 filter)传递给后端接口进行数据过滤。',
110
+ '提示',
111
+ {
112
+ confirmButtonText: '知道了',
113
+ type: 'info',
114
+ }
115
+ )
116
+ }
117
+
118
+ // 模拟异步分页加载
119
+ return new Promise((resolve) => {
120
+ setTimeout(() => {
121
+ const { pagination } = params
122
+ const { rows, page } = pagination || { rows: 10, page: 1 }
123
+ const start = (page - 1) * rows
124
+ const end = start + rows
125
+
126
+ resolve({
127
+ rows: allData.slice(start, end),
128
+ records: allData.length,
129
+ })
130
+ }, 300)
131
+ })
132
+ }
133
+ </script>