@a2simcode/ui 0.0.318 → 0.0.320

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