@a2simcode/ui 0.0.154 → 0.0.155

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 (342) 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/input-layer/index.d.ts +2 -2
  6. package/dist/components/input-layer/src/input-layer.vue.d.ts +2 -2
  7. package/dist/simcode-ui.es.js +4361 -4349
  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/cascader-select.md +114 -114
  17. package/docs/components/checkbox.md +114 -114
  18. package/docs/components/code-mirror.md +85 -85
  19. package/docs/components/collapse.md +26 -26
  20. package/docs/components/comp.md +71 -71
  21. package/docs/components/count-up.md +24 -24
  22. package/docs/components/count.md +24 -24
  23. package/docs/components/data-panel.md +24 -24
  24. package/docs/components/date.md +76 -76
  25. package/docs/components/dialog-full.md +112 -112
  26. package/docs/components/dialog.md +127 -127
  27. package/docs/components/divider.md +24 -24
  28. package/docs/components/drawer.md +127 -127
  29. package/docs/components/dynamic-layer.md +118 -118
  30. package/docs/components/echarts.md +72 -72
  31. package/docs/components/editor.md +24 -24
  32. package/docs/components/form.md +72 -57
  33. package/docs/components/guid.md +39 -39
  34. package/docs/components/hpanel.md +24 -24
  35. package/docs/components/icon.md +56 -56
  36. package/docs/components/input-button.md +24 -24
  37. package/docs/components/input-code.md +24 -24
  38. package/docs/components/input-color.md +114 -114
  39. package/docs/components/input-layer.md +26 -26
  40. package/docs/components/input-rows.md +370 -370
  41. package/docs/components/input-tag.md +50 -50
  42. package/docs/components/input.md +129 -129
  43. package/docs/components/layer-form.md +61 -61
  44. package/docs/components/layer.md +127 -127
  45. package/docs/components/layout.md +132 -132
  46. package/docs/components/map.md +24 -24
  47. package/docs/components/menu.md +121 -121
  48. package/docs/components/meta/buttons.ts +76 -76
  49. package/docs/components/meta/code-mirror.ts +108 -108
  50. package/docs/components/meta/comp.ts +236 -236
  51. package/docs/components/meta/date.ts +267 -267
  52. package/docs/components/meta/echarts.ts +64 -64
  53. package/docs/components/meta/form-item.ts +50 -50
  54. package/docs/components/meta/form.ts +181 -181
  55. package/docs/components/meta/input-cards.ts +112 -112
  56. package/docs/components/meta/input-color.ts +243 -243
  57. package/docs/components/meta/input-layer.ts +366 -366
  58. package/docs/components/meta/input-rows.ts +113 -113
  59. package/docs/components/meta/layer-form.ts +56 -56
  60. package/docs/components/meta/map.ts +68 -68
  61. package/docs/components/meta/panel.ts +152 -152
  62. package/docs/components/meta/slider.ts +270 -270
  63. package/docs/components/meta/table-panel.ts +232 -232
  64. package/docs/components/meta/table.ts +391 -391
  65. package/docs/components/meta/tabs.ts +146 -146
  66. package/docs/components/meta/title.ts +91 -91
  67. package/docs/components/meta/tree-select.ts +199 -199
  68. package/docs/components/meta/vpanel.ts +19 -19
  69. package/docs/components/meta/workflow-viewer.ts +55 -55
  70. package/docs/components/number.md +124 -124
  71. package/docs/components/page.md +102 -102
  72. package/docs/components/panel.md +37 -37
  73. package/docs/components/radio.md +87 -87
  74. package/docs/components/rate.md +71 -71
  75. package/docs/components/select.md +133 -133
  76. package/docs/components/slider-captcha.md +41 -41
  77. package/docs/components/slider.md +101 -101
  78. package/docs/components/switch.md +90 -90
  79. package/docs/components/table-panel.md +236 -236
  80. package/docs/components/table.md +391 -391
  81. package/docs/components/tabs.md +26 -26
  82. package/docs/components/title.md +24 -24
  83. package/docs/components/tree.md +207 -207
  84. package/docs/components/upload.md +117 -117
  85. package/docs/components/workflow-viewer.md +21 -21
  86. package/docs/components/workflow.md +21 -21
  87. package/docs/examples/autocomplete/advanced.vue +35 -35
  88. package/docs/examples/autocomplete/basic.vue +32 -32
  89. package/docs/examples/autocomplete/clearable.vue +33 -33
  90. package/docs/examples/autocomplete/custom-template.vue +49 -49
  91. package/docs/examples/autocomplete/disabled.vue +33 -33
  92. package/docs/examples/autocomplete/icon.vue +37 -37
  93. package/docs/examples/barcode/all-types.vue +380 -380
  94. package/docs/examples/barcode/basic.vue +14 -14
  95. package/docs/examples/barcode/props-appearance.vue +243 -243
  96. package/docs/examples/barcode/props-geometry.vue +143 -143
  97. package/docs/examples/barcode/props-logic.vue +216 -216
  98. package/docs/examples/barcode/props-symbology.vue +199 -199
  99. package/docs/examples/barcode/props-text.vue +268 -268
  100. package/docs/examples/button/basic.vue +7 -7
  101. package/docs/examples/button/danger-ghost.vue +17 -17
  102. package/docs/examples/button/disabled.vue +10 -10
  103. package/docs/examples/button/loading.vue +6 -6
  104. package/docs/examples/button/shape.vue +7 -7
  105. package/docs/examples/button/size.vue +14 -14
  106. package/docs/examples/button/type.vue +9 -9
  107. package/docs/examples/button-select/basic.vue +19 -19
  108. package/docs/examples/buttons/basic.vue +45 -45
  109. package/docs/examples/buttons/disabled.vue +36 -36
  110. package/docs/examples/buttons/dropdown.vue +63 -63
  111. package/docs/examples/buttons/group.vue +52 -52
  112. package/docs/examples/buttons/link.vue +47 -47
  113. package/docs/examples/buttons/popup.vue +39 -39
  114. package/docs/examples/buttons/size.vue +45 -45
  115. package/docs/examples/cascader-select/basic.vue +28 -28
  116. package/docs/examples/cascader-select/clearable.vue +34 -34
  117. package/docs/examples/cascader-select/disabled.vue +43 -43
  118. package/docs/examples/cascader-select/filterable.vue +37 -37
  119. package/docs/examples/cascader-select/methods.vue +84 -84
  120. package/docs/examples/cascader-select/multiple.vue +38 -38
  121. package/docs/examples/cascader-select/slot.vue +45 -45
  122. package/docs/examples/checkbox/basic.vue +18 -18
  123. package/docs/examples/checkbox/button.vue +19 -19
  124. package/docs/examples/checkbox/color.vue +25 -25
  125. package/docs/examples/checkbox/disabled.vue +17 -17
  126. package/docs/examples/checkbox/min-max.vue +20 -20
  127. package/docs/examples/checkbox/mixed.vue +56 -56
  128. package/docs/examples/checkbox/size.vue +28 -28
  129. package/docs/examples/code-mirror/basic.vue +11 -11
  130. package/docs/examples/code-mirror/events.vue +42 -42
  131. package/docs/examples/code-mirror/height.vue +25 -25
  132. package/docs/examples/code-mirror/mode.vue +33 -33
  133. package/docs/examples/code-mirror/readonly.vue +14 -14
  134. package/docs/examples/collapse/basic.vue +82 -82
  135. package/docs/examples/comp/basic.vue +7 -7
  136. package/docs/examples/comp/collapse.vue +38 -38
  137. package/docs/examples/comp/tabs.vue +38 -38
  138. package/docs/examples/count/basic.vue +101 -101
  139. package/docs/examples/count-up/basic.vue +89 -89
  140. package/docs/examples/data-panel/basic.vue +110 -110
  141. package/docs/examples/date/basic.vue +73 -73
  142. package/docs/examples/date/default-value.vue +59 -59
  143. package/docs/examples/date/format.vue +75 -75
  144. package/docs/examples/date/range.vue +66 -66
  145. package/docs/examples/date/types.vue +79 -79
  146. package/docs/examples/decorated-title/basic.vue +31 -31
  147. package/docs/examples/dialog/basic.vue +36 -36
  148. package/docs/examples/dialog/custom-buttons.vue +44 -44
  149. package/docs/examples/dialog/fullscreen.vue +23 -23
  150. package/docs/examples/dialog/no-mask.vue +17 -17
  151. package/docs/examples/dialog/size.vue +44 -44
  152. package/docs/examples/dialog/steps.vue +57 -57
  153. package/docs/examples/dialog-full/basic.vue +29 -29
  154. package/docs/examples/dialog-full/custom-buttons.vue +45 -45
  155. package/docs/examples/dialog-full/no-buttons.vue +18 -18
  156. package/docs/examples/dialog-full/no-header.vue +27 -27
  157. package/docs/examples/dialog-full/steps.vue +71 -71
  158. package/docs/examples/divider/basic.vue +52 -52
  159. package/docs/examples/drawer/basic.vue +35 -35
  160. package/docs/examples/drawer/custom-buttons.vue +34 -34
  161. package/docs/examples/drawer/direction.vue +47 -47
  162. package/docs/examples/drawer/mask.vue +36 -36
  163. package/docs/examples/drawer/no-buttons.vue +20 -20
  164. package/docs/examples/drawer/size.vue +28 -28
  165. package/docs/examples/dynamic-layer/basic.vue +33 -33
  166. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -43
  167. package/docs/examples/dynamic-layer/form.vue +73 -73
  168. package/docs/examples/dynamic-layer/steps.vue +52 -52
  169. package/docs/examples/dynamic-layer/types.vue +40 -40
  170. package/docs/examples/echarts/basic.vue +31 -31
  171. package/docs/examples/echarts/dynamic.vue +43 -43
  172. package/docs/examples/echarts/line.vue +46 -46
  173. package/docs/examples/echarts/pie.vue +44 -44
  174. package/docs/examples/editor/basic.vue +15 -15
  175. package/docs/examples/form/basic.vue +545 -545
  176. package/docs/examples/form/init.vue +76 -76
  177. package/docs/examples/form/master-detail.vue +203 -203
  178. package/docs/examples/form/rule-format.vue +142 -0
  179. package/docs/examples/guid/basic.vue +10 -10
  180. package/docs/examples/guid/size.vue +13 -13
  181. package/docs/examples/hpanel/basic.vue +79 -79
  182. package/docs/examples/icon/basic.vue +9 -9
  183. package/docs/examples/icon/rotate-flip.vue +9 -9
  184. package/docs/examples/icon/size.vue +7 -7
  185. package/docs/examples/input/basic.vue +10 -10
  186. package/docs/examples/input/clearable.vue +12 -12
  187. package/docs/examples/input/disabled.vue +6 -6
  188. package/docs/examples/input/icon.vue +23 -23
  189. package/docs/examples/input/password.vue +18 -18
  190. package/docs/examples/input/size.vue +13 -13
  191. package/docs/examples/input/textarea.vue +25 -25
  192. package/docs/examples/input/word-limit.vue +28 -28
  193. package/docs/examples/input-button/basic.vue +33 -33
  194. package/docs/examples/input-code/basic.vue +29 -29
  195. package/docs/examples/input-color/basic.vue +10 -10
  196. package/docs/examples/input-color/disabled.vue +13 -13
  197. package/docs/examples/input-color/format.vue +17 -17
  198. package/docs/examples/input-color/no-alpha.vue +13 -13
  199. package/docs/examples/input-color/only-button.vue +15 -15
  200. package/docs/examples/input-color/predefine.vue +31 -31
  201. package/docs/examples/input-color/size.vue +15 -15
  202. package/docs/examples/input-layer/basic.vue +86 -86
  203. package/docs/examples/input-rows/basic.vue +73 -73
  204. package/docs/examples/input-rows/drag.vue +48 -48
  205. package/docs/examples/input-rows/layer-form.vue +85 -85
  206. package/docs/examples/input-rows/nested.vue +91 -91
  207. package/docs/examples/input-tag/basic.vue +27 -27
  208. package/docs/examples/input-tag/colors.vue +23 -23
  209. package/docs/examples/input-tag/readonly.vue +17 -17
  210. package/docs/examples/layer/basic.vue +43 -43
  211. package/docs/examples/layer/custom-buttons.vue +61 -61
  212. package/docs/examples/layer/drawer.vue +37 -37
  213. package/docs/examples/layer/full.vue +38 -38
  214. package/docs/examples/layer/modal.vue +34 -34
  215. package/docs/examples/layer/steps.vue +46 -46
  216. package/docs/examples/layer-form/basic.vue +76 -76
  217. package/docs/examples/layer-form/config.vue +82 -82
  218. package/docs/examples/layer-form/size.vue +72 -72
  219. package/docs/examples/layout/basic.vue +36 -36
  220. package/docs/examples/layout/custom-size.vue +50 -50
  221. package/docs/examples/layout/disable-move.vue +37 -37
  222. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -96
  223. package/docs/examples/layout/min-size.vue +73 -73
  224. package/docs/examples/layout/percent-size.vue +80 -80
  225. package/docs/examples/layout/simple.vue +22 -22
  226. package/docs/examples/layout/top-side.vue +34 -34
  227. package/docs/examples/map/basic.vue +22 -22
  228. package/docs/examples/menu/basic.vue +58 -58
  229. package/docs/examples/menu/collapsed.vue +49 -49
  230. package/docs/examples/menu/horizontal.vue +44 -44
  231. package/docs/examples/menu/selection-test.vue +104 -104
  232. package/docs/examples/menu/theme.vue +46 -46
  233. package/docs/examples/menu/vertical.vue +46 -46
  234. package/docs/examples/number/advanced.vue +143 -143
  235. package/docs/examples/number/basic.vue +63 -63
  236. package/docs/examples/number/disabled.vue +49 -49
  237. package/docs/examples/number/size.vue +42 -42
  238. package/docs/examples/number/slots.vue +123 -123
  239. package/docs/examples/number/step-strictly.vue +41 -41
  240. package/docs/examples/number/step.vue +47 -47
  241. package/docs/examples/page/basic.vue +41 -41
  242. package/docs/examples/page/code-table-model.vue +428 -428
  243. package/docs/examples/page/dept-user-management.vue +211 -211
  244. package/docs/examples/page/init.vue +87 -87
  245. package/docs/examples/page/log.vue +453 -453
  246. package/docs/examples/page/user-management.vue +313 -313
  247. package/docs/examples/panel/tool-buttons.vue +18 -18
  248. package/docs/examples/radio/basic.vue +17 -17
  249. package/docs/examples/radio/button.vue +17 -17
  250. package/docs/examples/radio/color.vue +18 -18
  251. package/docs/examples/radio/disabled.vue +17 -17
  252. package/docs/examples/radio/size.vue +29 -29
  253. package/docs/examples/rate/basic.vue +24 -24
  254. package/docs/examples/rate/half.vue +24 -24
  255. package/docs/examples/rate/readonly.vue +11 -11
  256. package/docs/examples/rate/text.vue +37 -37
  257. package/docs/examples/select/basic.vue +16 -16
  258. package/docs/examples/select/clearable.vue +22 -22
  259. package/docs/examples/select/disabled.vue +31 -31
  260. package/docs/examples/select/filterable.vue +24 -24
  261. package/docs/examples/select/group.vue +23 -23
  262. package/docs/examples/select/icon.vue +16 -16
  263. package/docs/examples/select/multiple.vue +18 -18
  264. package/docs/examples/select/size.vue +39 -39
  265. package/docs/examples/slider/basic.vue +42 -42
  266. package/docs/examples/slider/disabled.vue +17 -17
  267. package/docs/examples/slider/marks.vue +30 -30
  268. package/docs/examples/slider/size.vue +37 -37
  269. package/docs/examples/slider/tooltip.vue +36 -36
  270. package/docs/examples/slider/vertical.vue +26 -26
  271. package/docs/examples/slider-captcha/basic.vue +44 -44
  272. package/docs/examples/slider-captcha/custom.vue +48 -48
  273. package/docs/examples/switch/basic.vue +16 -16
  274. package/docs/examples/switch/disabled.vue +13 -13
  275. package/docs/examples/switch/loading.vue +13 -13
  276. package/docs/examples/switch/size.vue +15 -15
  277. package/docs/examples/switch/text.vue +13 -13
  278. package/docs/examples/table/action-filter.vue +126 -126
  279. package/docs/examples/table/actions.vue +116 -116
  280. package/docs/examples/table/add-row.vue +103 -103
  281. package/docs/examples/table/basic.vue +168 -168
  282. package/docs/examples/table/checkbox-layout.vue +68 -68
  283. package/docs/examples/table/custom-layout.vue +115 -115
  284. package/docs/examples/table/dynamic-type.vue +73 -73
  285. package/docs/examples/table/editable.vue +262 -262
  286. package/docs/examples/table/field-selection.vue +87 -87
  287. package/docs/examples/table/frozen-column.vue +140 -140
  288. package/docs/examples/table/height-mode.vue +99 -99
  289. package/docs/examples/table/icon.vue +85 -85
  290. package/docs/examples/table/link.vue +66 -66
  291. package/docs/examples/table/multiple.vue +188 -188
  292. package/docs/examples/table/pagination.vue +151 -151
  293. package/docs/examples/table/single-selection.vue +64 -64
  294. package/docs/examples/table/sub-table-lazy.vue +97 -97
  295. package/docs/examples/table/sub-table.vue +103 -103
  296. package/docs/examples/table/tag.vue +43 -43
  297. package/docs/examples/table/tree-column.vue +119 -119
  298. package/docs/examples/table/tree-data.vue +141 -141
  299. package/docs/examples/table/tree-default-expand-all.vue +60 -60
  300. package/docs/examples/table/tree-lazy.vue +80 -80
  301. package/docs/examples/table/tree-set-selection.vue +75 -75
  302. package/docs/examples/table-panel/basic.vue +229 -229
  303. package/docs/examples/table-panel/batch-operations.vue +285 -285
  304. package/docs/examples/table-panel/button-visibility.vue +88 -88
  305. package/docs/examples/table-panel/filter.vue +219 -219
  306. package/docs/examples/table-panel/get-selection.vue +111 -111
  307. package/docs/examples/table-panel/multiple-selection.vue +243 -243
  308. package/docs/examples/table-panel/pagination.vue +133 -133
  309. package/docs/examples/table-panel/sub-table-lazy.vue +118 -118
  310. package/docs/examples/table-panel/tree-parent-key.vue +67 -67
  311. package/docs/examples/tabs/basic.vue +98 -98
  312. package/docs/examples/time/base.vue +67 -67
  313. package/docs/examples/title/basic.vue +87 -87
  314. package/docs/examples/tree/accordion.vue +46 -46
  315. package/docs/examples/tree/basic.vue +50 -50
  316. package/docs/examples/tree/buttons.vue +53 -53
  317. package/docs/examples/tree/checkable.vue +52 -52
  318. package/docs/examples/tree/custom-keys.vue +39 -39
  319. package/docs/examples/tree/default-expanded.vue +52 -52
  320. package/docs/examples/tree/draggable.vue +29 -29
  321. package/docs/examples/tree/expand-on-click.vue +39 -39
  322. package/docs/examples/tree/flat-data.vue +20 -20
  323. package/docs/examples/tree/icon.vue +40 -40
  324. package/docs/examples/tree/load-data.vue +37 -37
  325. package/docs/examples/tree/methods.vue +74 -74
  326. package/docs/examples/tree/theme.vue +33 -33
  327. package/docs/examples/tree-select/basic.vue +47 -47
  328. package/docs/examples/upload/accept.vue +31 -31
  329. package/docs/examples/upload/basic.vue +12 -12
  330. package/docs/examples/upload/drag.vue +11 -11
  331. package/docs/examples/upload/image.vue +17 -17
  332. package/docs/examples/upload/limit.vue +20 -20
  333. package/docs/examples/upload/multiple.vue +17 -17
  334. package/docs/examples/upload/readonly.vue +17 -17
  335. package/docs/examples/utils/cipher.vue +160 -160
  336. package/docs/examples/utils/common.vue +153 -153
  337. package/docs/examples/utils/date.vue +56 -56
  338. package/docs/examples/utils/dom.vue +52 -52
  339. package/docs/examples/utils/is.vue +70 -70
  340. package/docs/examples/workflow/basic.vue +265 -265
  341. package/docs/examples/workflow-viewer/basic.vue +248 -248
  342. package/package.json +23 -23
@@ -1,236 +1,236 @@
1
- # TablePanel 表格面板
2
-
3
- 基于 Table 组件封装的高级表格面板,集成搜索、筛选、排序、分页等常用功能。
4
-
5
- ## 基础用法
6
-
7
- 通过 `columns` 配置列,`loadData` 加载数据,`buttons` 配置工具栏按钮,`actions` 配置行内操作按钮。需设置 `row-key` 指定行数据的唯一标识字段。
8
-
9
- <Demo :source-code="tablePanelBasicCode">
10
- <template #source>
11
- <table-panel-basic />
12
- </template>
13
- <template #description>
14
- 配置 `columns` 中的 `config.filter.isSearchKeyword` 开启关键字搜索支持。注意:必须配置 `row-key` 属性指定数据唯一标识(如 id),否则无法正常使用多选功能。**重要提示:** 关键字搜索功能需要后端支持,`loadData` 方法会接收包含 `keyword` 参数的对象,需要将关键字传递给后端接口进行数据过滤。
15
- </template>
16
- </Demo>
17
-
18
- ## 树形数据
19
-
20
- 当 `isTree` 为 `true` 时,可配合 `parentKey` 将扁平数据自动转换为树形结构展示。
21
-
22
- <Demo :source-code="tablePanelTreeParentKeyCode">
23
- <template #source>
24
- <table-panel-tree-parent-key />
25
- </template>
26
- <template #description>
27
- 设置 `is-tree` 和 `parent-key`,在 `loadData` 返回的扁平数据中通过 `parent-key` 指定的字段建立父子关系。
28
- </template>
29
- </Demo>
30
-
31
- ## 筛选功能
32
-
33
- 支持多条件筛选,可以针对不同字段类型选择不同的筛选方式。
34
-
35
- **重要提示:** 查询过滤功能(包括关键字搜索和筛选条件)需要后端支持。`loadData` 方法会接收包含 `keyword`(关键字搜索)和 `filter`(筛选条件)的参数,需要将这些参数传递给后端接口进行数据过滤。示例中的前端过滤仅用于演示,实际使用时请确保后端接口支持相应的查询参数。
36
-
37
- <Demo :source-code="tablePanelFilterCode">
38
- <template #source>
39
- <table-panel-filter />
40
- </template>
41
- <template #description>
42
- 通过 `config.dataType` 配置字段类型,筛选面板会自动根据类型提供合适的筛选方式。支持的类型:`options`(选项)、`dateTime`(日期时间)等。筛选面板可以点击固定按钮固定在右侧显示。**注意:** 此示例中的查询过滤功能需要后端支持,实际使用时请确保后端接口能够处理 `loadData` 传入的 `keyword` 和 `filter` 参数。
43
- </template>
44
- </Demo>
45
-
46
- ## 分页
47
-
48
- 通过 `isPage` 开启分页,`loadData` 返回 `{ rows, records }` 格式数据。
49
-
50
- <Demo :source-code="tablePanelPaginationCode">
51
- <template #source>
52
- <table-panel-pagination />
53
- </template>
54
- <template #description>
55
- 设置 `isPage` 为 `true` 开启分页,`loadData` 方法会接收包含 `pagination` 信息的参数对象,返回数据需要包含 `rows`(当前页数据)和 `records`(总条数)。
56
- </template>
57
- </Demo>
58
-
59
- ## 懒加载子表数据
60
-
61
- 当子表数据量较大时,可以将主表记录的 `children` 设置为 `true` 作为“需要懒加载”的标识;在用户展开该行时,组件会调用 `loadChildren(record)` 异步获取子表数据,并自动写入并展开。
62
-
63
- - 触发条件:展开行且 `originData.children === true`
64
- - 成功后:会把返回的数组设置为该行的子数据(下次再展开不会重复请求)
65
-
66
- <Demo :source-code="tablePanelSubTableLazyCode">
67
- <template #source>
68
- <table-panel-sub-table-lazy />
69
- </template>
70
- <template #description>
71
- 将主表行的 <code>children</code> 设置为 <code>true</code> 作为懒加载标识;展开该行时会调用 <code>loadChildren(record)</code> 获取子表数据并写入。
72
- </template>
73
- </Demo>
74
-
75
- ## 多选功能
76
-
77
- 通过 `is-multiple` 属性开启多选功能。多选功能支持两种使用场景:
78
-
79
- ### 1. 无批处理按钮的多选
80
-
81
- 当只需要多选功能,但不需要批处理按钮时,设置 `is-multiple` 为 `true` 即可。此时:
82
-
83
- - 表格会显示复选框列,支持单选和全选
84
- - 选中状态会跨页保持(需要配置 `row-key`)
85
- - 选中记录后,工具栏会显示选中记录数、"仅选中"/"全部"切换按钮、清空选中按钮
86
- - 支持"仅显示选中"模式,可以只查看已选中的记录
87
- - 工具栏按钮(如新增、导出等)始终显示
88
- - 查询设置按钮(搜索、筛选、排序等)在选中记录后仍显示,但进入"仅显示选中"模式后会隐藏
89
- - 可以通过组件实例的 `getSelection()` 方法获取当前选中的记录
90
- - 可以通过 `@select` 事件监听选中状态变化
91
-
92
- <Demo :source-code="tablePanelMultipleSelectionCode">
93
- <template #source>
94
- <table-panel-multiple-selection />
95
- </template>
96
- <template #description>
97
- 设置 `is-multiple` 为 `true` 开启多选功能。必须配置 `row-key` 属性指定数据唯一标识,否则无法跨页保持选中状态。选中记录后,会显示选中记录数、"仅选中"/"全部"切换按钮、清空选中按钮,支持仅显示选中项的功能。可以通过组件实例的 `getSelection()` 方法获取选中的记录,或通过 `@select` 事件监听选中状态变化。
98
- </template>
99
- </Demo>
100
-
101
- ### 2. 带批处理按钮的多选
102
-
103
- 当需要批量操作功能时,除了设置 `is-multiple` 为 `true`,还需要配置 `batchButtons` 属性。此时:
104
-
105
- - 表格会显示复选框列,支持单选和全选
106
- - 选中记录后,工具栏会显示选中记录数、切换显示模式、清空选中等控制按钮
107
- - 配置的批量操作按钮会在选中记录后显示
108
- - 选中记录后,会隐藏原先的工具栏按钮和查询设置按钮(搜索、筛选、排序、列管理、刷新)
109
- - 批量操作按钮的 `click` 函数会接收当前选中的记录数组作为参数
110
- - 支持"仅显示选中"模式,可以只查看已选中的记录
111
-
112
- <Demo :source-code="tablePanelBatchOperationsCode">
113
- <template #source>
114
- <table-panel-batch-operations />
115
- </template>
116
- <template #description>
117
- 通过 `batchButtons` 配置批量操作按钮,`click` 函数会接收当前选中的记录数组作为参数。选中记录后,会显示选中记录数、切换显示/仅显示选中、清空选中等控制按钮,以及配置的批量操作按钮。同时会隐藏原先的按钮和查询设置按钮(搜索、筛选、排序、列管理、刷新)。
118
- </template>
119
- </Demo>
120
-
121
- ### 多选功能说明
122
-
123
- **重要提示:**
124
-
125
- 1. **必须配置 `row-key`**:开启多选功能时,必须配置 `row-key` 属性指定数据唯一标识字段(如 `id`、`orderId` 等),否则无法正常使用多选功能,也无法跨页保持选中状态。
126
-
127
- 2. **跨页保持选中**:
128
- - 当配置了 `row-key` 时,选中状态会跨页保持
129
- - 切换页面时,之前选中的记录仍然保持选中状态
130
- - 如果数据被刷新或重新加载,有批处理按钮时会清空选中状态,无批处理按钮时会尝试保留仍然存在的记录
131
-
132
- 3. **获取选中数据**:
133
- <Demo :source-code="tablePanelGetSelectionCode">
134
- <template #source>
135
- <table-panel-get-selection />
136
- </template>
137
- <template #description>
138
- 通过 `@select` 监听选中变化;通过组件实例方法 `getSelection()` 获取选中数据,`clearSelection()` 清空选中。
139
- </template>
140
- </Demo>
141
-
142
- 4. **两种模式的区别**:
143
-
144
- | 特性 | 无批处理按钮 | 有批处理按钮 |
145
- | -------------- | ---------------------------------------- | ------------------------ |
146
- | 工具栏按钮 | 始终显示 | 选中后切换为选中控制按钮 |
147
- | 查询设置按钮 | 选中后仍显示,进入"仅显示选中"模式后隐藏 | 选中后立即隐藏 |
148
- | 选中状态保持 | 跨页保持,刷新后尝试保留 | 跨页保持,刷新后清空 |
149
- | 仅显示选中模式 | 支持 | 支持 |
150
- | 适用场景 | 需要获取选中数据,但操作在外部处理 | 需要批量操作功能 |
151
-
152
- ## 批量操作
153
-
154
- 批量操作是多选功能的一种扩展使用方式,详见上面的"多选功能"章节中的"带批处理按钮的多选"部分。
155
-
156
- ## 按钮显示控制
157
-
158
- 可以通过属性控制右上角功能按钮是否显示。
159
-
160
- <Demo :source-code="tablePanelButtonVisibilityCode">
161
- <template #source>
162
- <table-panel-button-visibility />
163
- </template>
164
- <template #description>
165
- 通过 `showFilterButton / showOrderButton / showColumnButton / showRefreshButton / showFullscreenButton` 控制按钮显示。
166
- </template>
167
- </Demo>
168
-
169
- ## API
170
-
171
- <ApiTable :data="tablePanelApi" componentName="table-panel" />
172
-
173
- ### ButtonItem 类型
174
-
175
- | 属性名 | 说明 | 类型 | 默认值 |
176
- | ------ | ------------ | --------------------------------------------------------------------- | ------ |
177
- | label | 按钮显示文本 | `string` | - |
178
- | icon | 按钮图标 | `string` | - |
179
- | type | 按钮类型 | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'info' \| 'text'` | - |
180
- | click | 按钮点击回调 | `() => void` | - |
181
-
182
- ### loadData 参数
183
-
184
- 调用 `loadData` 时会传入以下参数:
185
-
186
- ```ts
187
- interface LoadDataParams {
188
- // 关键字搜索
189
- keyword?: {
190
- value: string // 搜索关键字
191
- fields: string[] // 搜索字段
192
- }
193
- // 筛选条件
194
- filter?: {
195
- rel: 'and' | 'or' // 条件关系
196
- cond: {
197
- // 条件列表
198
- field: string // 字段名
199
- method: string // 筛选方式: eq, ne, like, unlike, in, nin, gte, lte, range, empty, not_empty
200
- value: any // 筛选值
201
- type: string // 值类型
202
- }[]
203
- }
204
- // 分页信息(isPage=true 时)
205
- pagination?: {
206
- rows: number // 每页条数
207
- page: number // 当前页码
208
- sort: string // 排序字段
209
- }
210
- // 排序(isPage=false 时)
211
- sort?: string
212
- }
213
- ```
214
-
215
- <script setup>
216
- import TablePanelBasic from '../examples/table-panel/basic.vue'
217
- import TablePanelTreeParentKey from '../examples/table-panel/tree-parent-key.vue'
218
- import TablePanelFilter from '../examples/table-panel/filter.vue'
219
- import TablePanelPagination from '../examples/table-panel/pagination.vue'
220
- import TablePanelMultipleSelection from '../examples/table-panel/multiple-selection.vue'
221
- import TablePanelBatchOperations from '../examples/table-panel/batch-operations.vue'
222
- import TablePanelSubTableLazy from '../examples/table-panel/sub-table-lazy.vue'
223
- import TablePanelGetSelection from '../examples/table-panel/get-selection.vue'
224
- import TablePanelButtonVisibility from '../examples/table-panel/button-visibility.vue'
225
- import tablePanelApi from './meta/table-panel'
226
-
227
- import tablePanelBasicCode from '../examples/table-panel/basic.vue?raw'
228
- import tablePanelTreeParentKeyCode from '../examples/table-panel/tree-parent-key.vue?raw'
229
- import tablePanelFilterCode from '../examples/table-panel/filter.vue?raw'
230
- import tablePanelPaginationCode from '../examples/table-panel/pagination.vue?raw'
231
- import tablePanelMultipleSelectionCode from '../examples/table-panel/multiple-selection.vue?raw'
232
- import tablePanelBatchOperationsCode from '../examples/table-panel/batch-operations.vue?raw'
233
- import tablePanelSubTableLazyCode from '../examples/table-panel/sub-table-lazy.vue?raw'
234
- import tablePanelGetSelectionCode from '../examples/table-panel/get-selection.vue?raw'
235
- import tablePanelButtonVisibilityCode from '../examples/table-panel/button-visibility.vue?raw'
236
- </script>
1
+ # TablePanel 表格面板
2
+
3
+ 基于 Table 组件封装的高级表格面板,集成搜索、筛选、排序、分页等常用功能。
4
+
5
+ ## 基础用法
6
+
7
+ 通过 `columns` 配置列,`loadData` 加载数据,`buttons` 配置工具栏按钮,`actions` 配置行内操作按钮。需设置 `row-key` 指定行数据的唯一标识字段。
8
+
9
+ <Demo :source-code="tablePanelBasicCode">
10
+ <template #source>
11
+ <table-panel-basic />
12
+ </template>
13
+ <template #description>
14
+ 配置 `columns` 中的 `config.filter.isSearchKeyword` 开启关键字搜索支持。注意:必须配置 `row-key` 属性指定数据唯一标识(如 id),否则无法正常使用多选功能。**重要提示:** 关键字搜索功能需要后端支持,`loadData` 方法会接收包含 `keyword` 参数的对象,需要将关键字传递给后端接口进行数据过滤。
15
+ </template>
16
+ </Demo>
17
+
18
+ ## 树形数据
19
+
20
+ 当 `isTree` 为 `true` 时,可配合 `parentKey` 将扁平数据自动转换为树形结构展示。
21
+
22
+ <Demo :source-code="tablePanelTreeParentKeyCode">
23
+ <template #source>
24
+ <table-panel-tree-parent-key />
25
+ </template>
26
+ <template #description>
27
+ 设置 `is-tree` 和 `parent-key`,在 `loadData` 返回的扁平数据中通过 `parent-key` 指定的字段建立父子关系。
28
+ </template>
29
+ </Demo>
30
+
31
+ ## 筛选功能
32
+
33
+ 支持多条件筛选,可以针对不同字段类型选择不同的筛选方式。
34
+
35
+ **重要提示:** 查询过滤功能(包括关键字搜索和筛选条件)需要后端支持。`loadData` 方法会接收包含 `keyword`(关键字搜索)和 `filter`(筛选条件)的参数,需要将这些参数传递给后端接口进行数据过滤。示例中的前端过滤仅用于演示,实际使用时请确保后端接口支持相应的查询参数。
36
+
37
+ <Demo :source-code="tablePanelFilterCode">
38
+ <template #source>
39
+ <table-panel-filter />
40
+ </template>
41
+ <template #description>
42
+ 通过 `config.dataType` 配置字段类型,筛选面板会自动根据类型提供合适的筛选方式。支持的类型:`options`(选项)、`dateTime`(日期时间)等。筛选面板可以点击固定按钮固定在右侧显示。**注意:** 此示例中的查询过滤功能需要后端支持,实际使用时请确保后端接口能够处理 `loadData` 传入的 `keyword` 和 `filter` 参数。
43
+ </template>
44
+ </Demo>
45
+
46
+ ## 分页
47
+
48
+ 通过 `isPage` 开启分页,`loadData` 返回 `{ rows, records }` 格式数据。
49
+
50
+ <Demo :source-code="tablePanelPaginationCode">
51
+ <template #source>
52
+ <table-panel-pagination />
53
+ </template>
54
+ <template #description>
55
+ 设置 `isPage` 为 `true` 开启分页,`loadData` 方法会接收包含 `pagination` 信息的参数对象,返回数据需要包含 `rows`(当前页数据)和 `records`(总条数)。
56
+ </template>
57
+ </Demo>
58
+
59
+ ## 懒加载子表数据
60
+
61
+ 当子表数据量较大时,可以将主表记录的 `children` 设置为 `true` 作为“需要懒加载”的标识;在用户展开该行时,组件会调用 `loadChildren(record)` 异步获取子表数据,并自动写入并展开。
62
+
63
+ - 触发条件:展开行且 `originData.children === true`
64
+ - 成功后:会把返回的数组设置为该行的子数据(下次再展开不会重复请求)
65
+
66
+ <Demo :source-code="tablePanelSubTableLazyCode">
67
+ <template #source>
68
+ <table-panel-sub-table-lazy />
69
+ </template>
70
+ <template #description>
71
+ 将主表行的 <code>children</code> 设置为 <code>true</code> 作为懒加载标识;展开该行时会调用 <code>loadChildren(record)</code> 获取子表数据并写入。
72
+ </template>
73
+ </Demo>
74
+
75
+ ## 多选功能
76
+
77
+ 通过 `is-multiple` 属性开启多选功能。多选功能支持两种使用场景:
78
+
79
+ ### 1. 无批处理按钮的多选
80
+
81
+ 当只需要多选功能,但不需要批处理按钮时,设置 `is-multiple` 为 `true` 即可。此时:
82
+
83
+ - 表格会显示复选框列,支持单选和全选
84
+ - 选中状态会跨页保持(需要配置 `row-key`)
85
+ - 选中记录后,工具栏会显示选中记录数、"仅选中"/"全部"切换按钮、清空选中按钮
86
+ - 支持"仅显示选中"模式,可以只查看已选中的记录
87
+ - 工具栏按钮(如新增、导出等)始终显示
88
+ - 查询设置按钮(搜索、筛选、排序等)在选中记录后仍显示,但进入"仅显示选中"模式后会隐藏
89
+ - 可以通过组件实例的 `getSelection()` 方法获取当前选中的记录
90
+ - 可以通过 `@select` 事件监听选中状态变化
91
+
92
+ <Demo :source-code="tablePanelMultipleSelectionCode">
93
+ <template #source>
94
+ <table-panel-multiple-selection />
95
+ </template>
96
+ <template #description>
97
+ 设置 `is-multiple` 为 `true` 开启多选功能。必须配置 `row-key` 属性指定数据唯一标识,否则无法跨页保持选中状态。选中记录后,会显示选中记录数、"仅选中"/"全部"切换按钮、清空选中按钮,支持仅显示选中项的功能。可以通过组件实例的 `getSelection()` 方法获取选中的记录,或通过 `@select` 事件监听选中状态变化。
98
+ </template>
99
+ </Demo>
100
+
101
+ ### 2. 带批处理按钮的多选
102
+
103
+ 当需要批量操作功能时,除了设置 `is-multiple` 为 `true`,还需要配置 `batchButtons` 属性。此时:
104
+
105
+ - 表格会显示复选框列,支持单选和全选
106
+ - 选中记录后,工具栏会显示选中记录数、切换显示模式、清空选中等控制按钮
107
+ - 配置的批量操作按钮会在选中记录后显示
108
+ - 选中记录后,会隐藏原先的工具栏按钮和查询设置按钮(搜索、筛选、排序、列管理、刷新)
109
+ - 批量操作按钮的 `click` 函数会接收当前选中的记录数组作为参数
110
+ - 支持"仅显示选中"模式,可以只查看已选中的记录
111
+
112
+ <Demo :source-code="tablePanelBatchOperationsCode">
113
+ <template #source>
114
+ <table-panel-batch-operations />
115
+ </template>
116
+ <template #description>
117
+ 通过 `batchButtons` 配置批量操作按钮,`click` 函数会接收当前选中的记录数组作为参数。选中记录后,会显示选中记录数、切换显示/仅显示选中、清空选中等控制按钮,以及配置的批量操作按钮。同时会隐藏原先的按钮和查询设置按钮(搜索、筛选、排序、列管理、刷新)。
118
+ </template>
119
+ </Demo>
120
+
121
+ ### 多选功能说明
122
+
123
+ **重要提示:**
124
+
125
+ 1. **必须配置 `row-key`**:开启多选功能时,必须配置 `row-key` 属性指定数据唯一标识字段(如 `id`、`orderId` 等),否则无法正常使用多选功能,也无法跨页保持选中状态。
126
+
127
+ 2. **跨页保持选中**:
128
+ - 当配置了 `row-key` 时,选中状态会跨页保持
129
+ - 切换页面时,之前选中的记录仍然保持选中状态
130
+ - 如果数据被刷新或重新加载,有批处理按钮时会清空选中状态,无批处理按钮时会尝试保留仍然存在的记录
131
+
132
+ 3. **获取选中数据**:
133
+ <Demo :source-code="tablePanelGetSelectionCode">
134
+ <template #source>
135
+ <table-panel-get-selection />
136
+ </template>
137
+ <template #description>
138
+ 通过 `@select` 监听选中变化;通过组件实例方法 `getSelection()` 获取选中数据,`clearSelection()` 清空选中。
139
+ </template>
140
+ </Demo>
141
+
142
+ 4. **两种模式的区别**:
143
+
144
+ | 特性 | 无批处理按钮 | 有批处理按钮 |
145
+ | -------------- | ---------------------------------------- | ------------------------ |
146
+ | 工具栏按钮 | 始终显示 | 选中后切换为选中控制按钮 |
147
+ | 查询设置按钮 | 选中后仍显示,进入"仅显示选中"模式后隐藏 | 选中后立即隐藏 |
148
+ | 选中状态保持 | 跨页保持,刷新后尝试保留 | 跨页保持,刷新后清空 |
149
+ | 仅显示选中模式 | 支持 | 支持 |
150
+ | 适用场景 | 需要获取选中数据,但操作在外部处理 | 需要批量操作功能 |
151
+
152
+ ## 批量操作
153
+
154
+ 批量操作是多选功能的一种扩展使用方式,详见上面的"多选功能"章节中的"带批处理按钮的多选"部分。
155
+
156
+ ## 按钮显示控制
157
+
158
+ 可以通过属性控制右上角功能按钮是否显示。
159
+
160
+ <Demo :source-code="tablePanelButtonVisibilityCode">
161
+ <template #source>
162
+ <table-panel-button-visibility />
163
+ </template>
164
+ <template #description>
165
+ 通过 `showFilterButton / showOrderButton / showColumnButton / showRefreshButton / showFullscreenButton` 控制按钮显示。
166
+ </template>
167
+ </Demo>
168
+
169
+ ## API
170
+
171
+ <ApiTable :data="tablePanelApi" componentName="table-panel" />
172
+
173
+ ### ButtonItem 类型
174
+
175
+ | 属性名 | 说明 | 类型 | 默认值 |
176
+ | ------ | ------------ | --------------------------------------------------------------------- | ------ |
177
+ | label | 按钮显示文本 | `string` | - |
178
+ | icon | 按钮图标 | `string` | - |
179
+ | type | 按钮类型 | `'primary' \| 'success' \| 'warning' \| 'danger' \| 'info' \| 'text'` | - |
180
+ | click | 按钮点击回调 | `() => void` | - |
181
+
182
+ ### loadData 参数
183
+
184
+ 调用 `loadData` 时会传入以下参数:
185
+
186
+ ```ts
187
+ interface LoadDataParams {
188
+ // 关键字搜索
189
+ keyword?: {
190
+ value: string // 搜索关键字
191
+ fields: string[] // 搜索字段
192
+ }
193
+ // 筛选条件
194
+ filter?: {
195
+ rel: 'and' | 'or' // 条件关系
196
+ cond: {
197
+ // 条件列表
198
+ field: string // 字段名
199
+ method: string // 筛选方式: eq, ne, like, unlike, in, nin, gte, lte, range, empty, not_empty
200
+ value: any // 筛选值
201
+ type: string // 值类型
202
+ }[]
203
+ }
204
+ // 分页信息(isPage=true 时)
205
+ pagination?: {
206
+ rows: number // 每页条数
207
+ page: number // 当前页码
208
+ sort: string // 排序字段
209
+ }
210
+ // 排序(isPage=false 时)
211
+ sort?: string
212
+ }
213
+ ```
214
+
215
+ <script setup>
216
+ import TablePanelBasic from '../examples/table-panel/basic.vue'
217
+ import TablePanelTreeParentKey from '../examples/table-panel/tree-parent-key.vue'
218
+ import TablePanelFilter from '../examples/table-panel/filter.vue'
219
+ import TablePanelPagination from '../examples/table-panel/pagination.vue'
220
+ import TablePanelMultipleSelection from '../examples/table-panel/multiple-selection.vue'
221
+ import TablePanelBatchOperations from '../examples/table-panel/batch-operations.vue'
222
+ import TablePanelSubTableLazy from '../examples/table-panel/sub-table-lazy.vue'
223
+ import TablePanelGetSelection from '../examples/table-panel/get-selection.vue'
224
+ import TablePanelButtonVisibility from '../examples/table-panel/button-visibility.vue'
225
+ import tablePanelApi from './meta/table-panel'
226
+
227
+ import tablePanelBasicCode from '../examples/table-panel/basic.vue?raw'
228
+ import tablePanelTreeParentKeyCode from '../examples/table-panel/tree-parent-key.vue?raw'
229
+ import tablePanelFilterCode from '../examples/table-panel/filter.vue?raw'
230
+ import tablePanelPaginationCode from '../examples/table-panel/pagination.vue?raw'
231
+ import tablePanelMultipleSelectionCode from '../examples/table-panel/multiple-selection.vue?raw'
232
+ import tablePanelBatchOperationsCode from '../examples/table-panel/batch-operations.vue?raw'
233
+ import tablePanelSubTableLazyCode from '../examples/table-panel/sub-table-lazy.vue?raw'
234
+ import tablePanelGetSelectionCode from '../examples/table-panel/get-selection.vue?raw'
235
+ import tablePanelButtonVisibilityCode from '../examples/table-panel/button-visibility.vue?raw'
236
+ </script>