@a2simcode/ui 0.0.310 → 0.0.313

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 (378) 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 +20 -0
  6. package/dist/components/table/src/table.vue.d.ts +17 -0
  7. package/dist/components/table-panel/index.d.ts +15 -0
  8. package/dist/components/table-panel/src/table-panel.vue.d.ts +15 -0
  9. package/dist/simcode-ui.es.js +4846 -4790
  10. package/dist/simcode-ui.umd.js +2 -2
  11. package/dist/stats.html +1 -1
  12. package/dist/ui.css +1 -1
  13. package/docs/components/autocomplete.md +89 -89
  14. package/docs/components/barcode.md +101 -101
  15. package/docs/components/button-select.md +24 -24
  16. package/docs/components/button.md +117 -117
  17. package/docs/components/buttons.md +119 -119
  18. package/docs/components/card-list.md +38 -38
  19. package/docs/components/cascader-select.md +114 -114
  20. package/docs/components/checkbox.md +114 -114
  21. package/docs/components/code-mirror.md +85 -85
  22. package/docs/components/collapse.md +26 -26
  23. package/docs/components/comp.md +106 -106
  24. package/docs/components/count-up.md +24 -24
  25. package/docs/components/count.md +24 -24
  26. package/docs/components/data-panel.md +24 -24
  27. package/docs/components/date.md +76 -76
  28. package/docs/components/dialog-full.md +112 -112
  29. package/docs/components/dialog.md +127 -127
  30. package/docs/components/divider.md +24 -24
  31. package/docs/components/drawer.md +127 -127
  32. package/docs/components/dynamic-layer.md +118 -118
  33. package/docs/components/echarts.md +72 -72
  34. package/docs/components/editor.md +24 -24
  35. package/docs/components/form.md +87 -87
  36. package/docs/components/guid.md +39 -39
  37. package/docs/components/hpanel.md +24 -24
  38. package/docs/components/icon.md +56 -56
  39. package/docs/components/input-button.md +24 -24
  40. package/docs/components/input-code.md +24 -24
  41. package/docs/components/input-color.md +114 -114
  42. package/docs/components/input-layer.md +56 -56
  43. package/docs/components/input-rows.md +370 -370
  44. package/docs/components/input-tag.md +50 -50
  45. package/docs/components/input.md +129 -129
  46. package/docs/components/layer-form.md +61 -61
  47. package/docs/components/layer.md +127 -127
  48. package/docs/components/layout.md +132 -132
  49. package/docs/components/map.md +24 -24
  50. package/docs/components/menu.md +121 -121
  51. package/docs/components/meta/button.ts +212 -212
  52. package/docs/components/meta/buttons.ts +81 -81
  53. package/docs/components/meta/card-list.ts +210 -210
  54. package/docs/components/meta/code-mirror.ts +108 -108
  55. package/docs/components/meta/comp.ts +235 -235
  56. package/docs/components/meta/date.ts +277 -277
  57. package/docs/components/meta/echarts.ts +64 -64
  58. package/docs/components/meta/form-item.ts +62 -62
  59. package/docs/components/meta/form.ts +181 -181
  60. package/docs/components/meta/input-button.ts +175 -175
  61. package/docs/components/meta/input-cards.ts +112 -112
  62. package/docs/components/meta/input-code.ts +161 -161
  63. package/docs/components/meta/input-color.ts +243 -243
  64. package/docs/components/meta/input-rows.ts +119 -119
  65. package/docs/components/meta/layer-form.ts +74 -74
  66. package/docs/components/meta/map.ts +68 -68
  67. package/docs/components/meta/panel.ts +152 -152
  68. package/docs/components/meta/radio.ts +55 -55
  69. package/docs/components/meta/select.ts +289 -289
  70. package/docs/components/meta/slider.ts +270 -270
  71. package/docs/components/meta/table-panel.ts +343 -337
  72. package/docs/components/meta/table.ts +495 -489
  73. package/docs/components/meta/tabs.ts +146 -146
  74. package/docs/components/meta/title.ts +91 -91
  75. package/docs/components/meta/tree-select.ts +220 -220
  76. package/docs/components/meta/tree.ts +225 -225
  77. package/docs/components/meta/vpanel.ts +19 -19
  78. package/docs/components/meta/workflow-viewer.ts +55 -55
  79. package/docs/components/number.md +124 -124
  80. package/docs/components/page.md +102 -102
  81. package/docs/components/panel.md +37 -37
  82. package/docs/components/radio.md +87 -87
  83. package/docs/components/rate.md +71 -71
  84. package/docs/components/select.md +149 -149
  85. package/docs/components/slider-captcha.md +41 -41
  86. package/docs/components/slider.md +101 -101
  87. package/docs/components/switch.md +90 -90
  88. package/docs/components/table-panel.md +342 -342
  89. package/docs/components/table.md +526 -526
  90. package/docs/components/tabs.md +26 -26
  91. package/docs/components/title.md +24 -24
  92. package/docs/components/tree.md +222 -222
  93. package/docs/components/upload.md +117 -117
  94. package/docs/components/workflow-viewer.md +21 -21
  95. package/docs/components/workflow.md +21 -21
  96. package/docs/examples/autocomplete/advanced.vue +35 -35
  97. package/docs/examples/autocomplete/basic.vue +32 -32
  98. package/docs/examples/autocomplete/clearable.vue +33 -33
  99. package/docs/examples/autocomplete/custom-template.vue +49 -49
  100. package/docs/examples/autocomplete/disabled.vue +33 -33
  101. package/docs/examples/autocomplete/icon.vue +37 -37
  102. package/docs/examples/barcode/all-types.vue +380 -380
  103. package/docs/examples/barcode/basic.vue +14 -14
  104. package/docs/examples/barcode/props-appearance.vue +243 -243
  105. package/docs/examples/barcode/props-geometry.vue +143 -143
  106. package/docs/examples/barcode/props-logic.vue +216 -216
  107. package/docs/examples/barcode/props-symbology.vue +199 -199
  108. package/docs/examples/barcode/props-text.vue +268 -268
  109. package/docs/examples/button/basic.vue +7 -7
  110. package/docs/examples/button/disabled.vue +42 -42
  111. package/docs/examples/button/loading.vue +6 -6
  112. package/docs/examples/button/shape.vue +7 -7
  113. package/docs/examples/button/size.vue +14 -14
  114. package/docs/examples/button/status.vue +34 -34
  115. package/docs/examples/button/type.vue +10 -10
  116. package/docs/examples/button-select/basic.vue +19 -19
  117. package/docs/examples/buttons/basic.vue +62 -62
  118. package/docs/examples/buttons/disabled.vue +36 -36
  119. package/docs/examples/buttons/dropdown.vue +63 -63
  120. package/docs/examples/buttons/group.vue +52 -52
  121. package/docs/examples/buttons/link.vue +47 -47
  122. package/docs/examples/buttons/popup.vue +39 -39
  123. package/docs/examples/buttons/size.vue +45 -45
  124. package/docs/examples/card-list/basic.vue +70 -70
  125. package/docs/examples/card-list/selection-pagination.vue +69 -69
  126. package/docs/examples/cascader-select/basic.vue +28 -28
  127. package/docs/examples/cascader-select/clearable.vue +34 -34
  128. package/docs/examples/cascader-select/disabled.vue +43 -43
  129. package/docs/examples/cascader-select/filterable.vue +37 -37
  130. package/docs/examples/cascader-select/methods.vue +84 -84
  131. package/docs/examples/cascader-select/multiple.vue +38 -38
  132. package/docs/examples/cascader-select/slot.vue +45 -45
  133. package/docs/examples/checkbox/basic.vue +18 -18
  134. package/docs/examples/checkbox/button.vue +19 -19
  135. package/docs/examples/checkbox/color.vue +25 -25
  136. package/docs/examples/checkbox/disabled.vue +17 -17
  137. package/docs/examples/checkbox/min-max.vue +20 -20
  138. package/docs/examples/checkbox/mixed.vue +56 -56
  139. package/docs/examples/checkbox/size.vue +28 -28
  140. package/docs/examples/code-mirror/basic.vue +11 -11
  141. package/docs/examples/code-mirror/events.vue +42 -42
  142. package/docs/examples/code-mirror/height.vue +25 -25
  143. package/docs/examples/code-mirror/mode.vue +33 -33
  144. package/docs/examples/code-mirror/readonly.vue +14 -14
  145. package/docs/examples/collapse/basic.vue +82 -82
  146. package/docs/examples/comp/basic.vue +7 -7
  147. package/docs/examples/comp/collapse.vue +38 -38
  148. package/docs/examples/comp/table-merge-rows.vue +77 -77
  149. package/docs/examples/comp/table-row-fixed-merge.vue +105 -105
  150. package/docs/examples/comp/tabs.vue +38 -38
  151. package/docs/examples/count/basic.vue +101 -101
  152. package/docs/examples/count-up/basic.vue +89 -89
  153. package/docs/examples/data-panel/basic.vue +110 -110
  154. package/docs/examples/date/basic.vue +73 -73
  155. package/docs/examples/date/default-value.vue +59 -59
  156. package/docs/examples/date/format.vue +75 -75
  157. package/docs/examples/date/range.vue +66 -66
  158. package/docs/examples/date/types.vue +79 -79
  159. package/docs/examples/decorated-title/basic.vue +31 -31
  160. package/docs/examples/dialog/basic.vue +36 -36
  161. package/docs/examples/dialog/custom-buttons.vue +44 -44
  162. package/docs/examples/dialog/fullscreen.vue +23 -23
  163. package/docs/examples/dialog/no-mask.vue +17 -17
  164. package/docs/examples/dialog/size.vue +44 -44
  165. package/docs/examples/dialog/steps.vue +57 -57
  166. package/docs/examples/dialog-full/basic.vue +29 -29
  167. package/docs/examples/dialog-full/custom-buttons.vue +45 -45
  168. package/docs/examples/dialog-full/no-buttons.vue +18 -18
  169. package/docs/examples/dialog-full/no-header.vue +27 -27
  170. package/docs/examples/dialog-full/steps.vue +71 -71
  171. package/docs/examples/divider/basic.vue +52 -52
  172. package/docs/examples/drawer/basic.vue +35 -35
  173. package/docs/examples/drawer/custom-buttons.vue +34 -34
  174. package/docs/examples/drawer/direction.vue +47 -47
  175. package/docs/examples/drawer/mask.vue +36 -36
  176. package/docs/examples/drawer/no-buttons.vue +20 -20
  177. package/docs/examples/drawer/size.vue +28 -28
  178. package/docs/examples/dynamic-layer/basic.vue +33 -33
  179. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -43
  180. package/docs/examples/dynamic-layer/form.vue +73 -73
  181. package/docs/examples/dynamic-layer/steps.vue +52 -52
  182. package/docs/examples/dynamic-layer/types.vue +40 -40
  183. package/docs/examples/echarts/basic.vue +31 -31
  184. package/docs/examples/echarts/dynamic.vue +43 -43
  185. package/docs/examples/echarts/line.vue +46 -46
  186. package/docs/examples/echarts/pie.vue +44 -44
  187. package/docs/examples/editor/basic.vue +15 -15
  188. package/docs/examples/form/basic.vue +688 -688
  189. package/docs/examples/form/init.vue +76 -76
  190. package/docs/examples/form/master-detail.vue +203 -203
  191. package/docs/examples/form/rule-format.vue +179 -179
  192. package/docs/examples/form/view-table.vue +378 -378
  193. package/docs/examples/guid/basic.vue +10 -10
  194. package/docs/examples/guid/size.vue +13 -13
  195. package/docs/examples/hpanel/basic.vue +79 -79
  196. package/docs/examples/icon/basic.vue +9 -9
  197. package/docs/examples/icon/rotate-flip.vue +9 -9
  198. package/docs/examples/icon/size.vue +7 -7
  199. package/docs/examples/input/basic.vue +10 -10
  200. package/docs/examples/input/clearable.vue +12 -12
  201. package/docs/examples/input/disabled.vue +6 -6
  202. package/docs/examples/input/icon.vue +23 -23
  203. package/docs/examples/input/password.vue +18 -18
  204. package/docs/examples/input/size.vue +13 -13
  205. package/docs/examples/input/textarea.vue +25 -25
  206. package/docs/examples/input/word-limit.vue +28 -28
  207. package/docs/examples/input-button/basic.vue +33 -33
  208. package/docs/examples/input-cards/basic.vue +79 -79
  209. package/docs/examples/input-code/basic.vue +29 -29
  210. package/docs/examples/input-color/basic.vue +10 -10
  211. package/docs/examples/input-color/disabled.vue +13 -13
  212. package/docs/examples/input-color/format.vue +17 -17
  213. package/docs/examples/input-color/no-alpha.vue +13 -13
  214. package/docs/examples/input-color/only-button.vue +15 -15
  215. package/docs/examples/input-color/predefine.vue +31 -31
  216. package/docs/examples/input-color/size.vue +15 -15
  217. package/docs/examples/input-layer/basic.vue +85 -85
  218. package/docs/examples/input-layer/render-vnode-page.vue +160 -160
  219. package/docs/examples/input-layer/render-vnode.vue +127 -127
  220. package/docs/examples/input-rows/basic.vue +73 -73
  221. package/docs/examples/input-rows/drag.vue +48 -48
  222. package/docs/examples/input-rows/layer-form.vue +85 -85
  223. package/docs/examples/input-rows/nested.vue +91 -91
  224. package/docs/examples/input-tag/basic.vue +27 -27
  225. package/docs/examples/input-tag/colors.vue +23 -23
  226. package/docs/examples/input-tag/readonly.vue +17 -17
  227. package/docs/examples/layer/basic.vue +43 -43
  228. package/docs/examples/layer/custom-buttons.vue +61 -61
  229. package/docs/examples/layer/drawer.vue +37 -37
  230. package/docs/examples/layer/full.vue +38 -38
  231. package/docs/examples/layer/modal.vue +34 -34
  232. package/docs/examples/layer/steps.vue +46 -46
  233. package/docs/examples/layer-form/basic.vue +76 -76
  234. package/docs/examples/layer-form/config.vue +82 -82
  235. package/docs/examples/layer-form/size.vue +72 -72
  236. package/docs/examples/layout/basic.vue +36 -36
  237. package/docs/examples/layout/custom-size.vue +50 -50
  238. package/docs/examples/layout/disable-move.vue +37 -37
  239. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -96
  240. package/docs/examples/layout/min-size.vue +73 -73
  241. package/docs/examples/layout/percent-size.vue +80 -80
  242. package/docs/examples/layout/simple.vue +22 -22
  243. package/docs/examples/layout/top-side.vue +34 -34
  244. package/docs/examples/map/basic.vue +22 -22
  245. package/docs/examples/menu/basic.vue +58 -58
  246. package/docs/examples/menu/collapsed.vue +49 -49
  247. package/docs/examples/menu/horizontal.vue +44 -44
  248. package/docs/examples/menu/selection-test.vue +104 -104
  249. package/docs/examples/menu/theme.vue +46 -46
  250. package/docs/examples/menu/vertical.vue +46 -46
  251. package/docs/examples/number/advanced.vue +143 -143
  252. package/docs/examples/number/basic.vue +63 -63
  253. package/docs/examples/number/disabled.vue +49 -49
  254. package/docs/examples/number/size.vue +42 -42
  255. package/docs/examples/number/slots.vue +123 -123
  256. package/docs/examples/number/step-strictly.vue +41 -41
  257. package/docs/examples/number/step.vue +47 -47
  258. package/docs/examples/page/basic.vue +41 -41
  259. package/docs/examples/page/code-table-model.vue +428 -428
  260. package/docs/examples/page/dept-user-management.vue +211 -211
  261. package/docs/examples/page/init.vue +87 -87
  262. package/docs/examples/page/log.vue +453 -453
  263. package/docs/examples/page/user-management.vue +313 -313
  264. package/docs/examples/panel/tool-buttons.vue +18 -18
  265. package/docs/examples/radio/basic.vue +17 -17
  266. package/docs/examples/radio/button.vue +17 -17
  267. package/docs/examples/radio/color.vue +18 -18
  268. package/docs/examples/radio/disabled.vue +17 -17
  269. package/docs/examples/radio/size.vue +29 -29
  270. package/docs/examples/rate/basic.vue +24 -24
  271. package/docs/examples/rate/half.vue +24 -24
  272. package/docs/examples/rate/readonly.vue +11 -11
  273. package/docs/examples/rate/text.vue +37 -37
  274. package/docs/examples/select/basic.vue +16 -16
  275. package/docs/examples/select/clearable.vue +22 -22
  276. package/docs/examples/select/color.vue +16 -16
  277. package/docs/examples/select/disabled.vue +31 -31
  278. package/docs/examples/select/filterable.vue +24 -24
  279. package/docs/examples/select/group.vue +23 -23
  280. package/docs/examples/select/icon.vue +16 -16
  281. package/docs/examples/select/multiple.vue +18 -18
  282. package/docs/examples/select/size.vue +39 -39
  283. package/docs/examples/slider/basic.vue +42 -42
  284. package/docs/examples/slider/disabled.vue +17 -17
  285. package/docs/examples/slider/marks.vue +30 -30
  286. package/docs/examples/slider/size.vue +37 -37
  287. package/docs/examples/slider/tooltip.vue +36 -36
  288. package/docs/examples/slider/vertical.vue +26 -26
  289. package/docs/examples/slider-captcha/basic.vue +44 -44
  290. package/docs/examples/slider-captcha/custom.vue +48 -48
  291. package/docs/examples/switch/basic.vue +16 -16
  292. package/docs/examples/switch/disabled.vue +13 -13
  293. package/docs/examples/switch/loading.vue +13 -13
  294. package/docs/examples/switch/size.vue +15 -15
  295. package/docs/examples/switch/text.vue +13 -13
  296. package/docs/examples/table/action-filter.vue +126 -126
  297. package/docs/examples/table/actions.vue +116 -116
  298. package/docs/examples/table/add-row.vue +98 -98
  299. package/docs/examples/table/basic.vue +168 -168
  300. package/docs/examples/table/checkbox-layout.vue +68 -68
  301. package/docs/examples/table/column-filter.vue +96 -96
  302. package/docs/examples/table/custom-layout.vue +115 -115
  303. package/docs/examples/table/custom-merge-cell.vue +206 -206
  304. package/docs/examples/table/dynamic-type.vue +74 -74
  305. package/docs/examples/table/editable.vue +290 -290
  306. package/docs/examples/table/field-selection.vue +87 -87
  307. package/docs/examples/table/frozen-column.vue +140 -140
  308. package/docs/examples/table/height-mode.vue +99 -99
  309. package/docs/examples/table/icon.vue +85 -85
  310. package/docs/examples/table/layer-form.vue +133 -133
  311. package/docs/examples/table/link.vue +66 -66
  312. package/docs/examples/table/merge-cell.vue +78 -78
  313. package/docs/examples/table/merge-header.vue +86 -86
  314. package/docs/examples/table/multiple-disabled.vue +112 -112
  315. package/docs/examples/table/multiple.vue +188 -188
  316. package/docs/examples/table/pagination.vue +151 -151
  317. package/docs/examples/table/row-drag.vue +67 -67
  318. package/docs/examples/table/row-fixed.vue +61 -61
  319. package/docs/examples/table/show-tag.vue +68 -68
  320. package/docs/examples/table/single-selection.vue +64 -64
  321. package/docs/examples/table/sub-table-lazy.vue +97 -97
  322. package/docs/examples/table/sub-table.vue +103 -103
  323. package/docs/examples/table/tag.vue +43 -43
  324. package/docs/examples/table/tree-column.vue +119 -119
  325. package/docs/examples/table/tree-data.vue +141 -141
  326. package/docs/examples/table/tree-default-expand-all.vue +60 -60
  327. package/docs/examples/table/tree-lazy.vue +80 -80
  328. package/docs/examples/table/tree-set-selection.vue +75 -75
  329. package/docs/examples/table-panel/basic.vue +229 -229
  330. package/docs/examples/table-panel/batch-operations.vue +286 -286
  331. package/docs/examples/table-panel/button-visibility.vue +88 -88
  332. package/docs/examples/table-panel/card.vue +101 -101
  333. package/docs/examples/table-panel/column-filter.vue +116 -116
  334. package/docs/examples/table-panel/filter.vue +219 -219
  335. package/docs/examples/table-panel/get-selection.vue +111 -111
  336. package/docs/examples/table-panel/mask.vue +151 -151
  337. package/docs/examples/table-panel/model-value.vue +87 -87
  338. package/docs/examples/table-panel/multiple-selection.vue +243 -243
  339. package/docs/examples/table-panel/pagination-select-state-key.vue +176 -176
  340. package/docs/examples/table-panel/pagination.vue +133 -133
  341. package/docs/examples/table-panel/remote-selection.vue +159 -159
  342. package/docs/examples/table-panel/search-list.vue +207 -207
  343. package/docs/examples/table-panel/sub-table-lazy.vue +118 -118
  344. package/docs/examples/table-panel/tree-parent-key.vue +67 -67
  345. package/docs/examples/tabs/basic.vue +98 -98
  346. package/docs/examples/time/base.vue +67 -67
  347. package/docs/examples/title/basic.vue +87 -87
  348. package/docs/examples/tree/accordion.vue +46 -46
  349. package/docs/examples/tree/basic.vue +50 -50
  350. package/docs/examples/tree/buttons.vue +53 -53
  351. package/docs/examples/tree/check-strictly.vue +53 -53
  352. package/docs/examples/tree/checkable.vue +52 -52
  353. package/docs/examples/tree/custom-keys.vue +39 -39
  354. package/docs/examples/tree/default-expanded.vue +52 -52
  355. package/docs/examples/tree/draggable.vue +29 -29
  356. package/docs/examples/tree/expand-on-click.vue +39 -39
  357. package/docs/examples/tree/flat-data.vue +20 -20
  358. package/docs/examples/tree/icon.vue +40 -40
  359. package/docs/examples/tree/load-data.vue +37 -37
  360. package/docs/examples/tree/methods.vue +74 -74
  361. package/docs/examples/tree/theme.vue +33 -33
  362. package/docs/examples/tree-select/basic.vue +47 -47
  363. package/docs/examples/tree-select/lazy.vue +42 -42
  364. package/docs/examples/upload/accept.vue +31 -31
  365. package/docs/examples/upload/basic.vue +12 -12
  366. package/docs/examples/upload/drag.vue +11 -11
  367. package/docs/examples/upload/image.vue +17 -17
  368. package/docs/examples/upload/limit.vue +20 -20
  369. package/docs/examples/upload/multiple.vue +17 -17
  370. package/docs/examples/upload/readonly.vue +17 -17
  371. package/docs/examples/utils/cipher.vue +160 -160
  372. package/docs/examples/utils/common.vue +153 -153
  373. package/docs/examples/utils/date.vue +56 -56
  374. package/docs/examples/utils/dom.vue +52 -52
  375. package/docs/examples/utils/is.vue +70 -70
  376. package/docs/examples/workflow/basic.vue +265 -265
  377. package/docs/examples/workflow-viewer/basic.vue +248 -248
  378. 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>