@a2simcode/ui 0.0.45 → 0.0.47

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 (337) hide show
  1. package/.cursor/skills/ui-component-helper/README.md +43 -0
  2. package/.cursor/skills/ui-component-helper/SKILL.md +81 -0
  3. package/dist/components/index.d.ts +1 -1
  4. package/dist/components/workflow-viewer/index.d.ts +4 -4
  5. package/dist/simcode-ui.es.js +1 -1
  6. package/dist/simcode-ui.umd.js +1 -1
  7. package/dist/stats.html +1 -1
  8. package/docs/components/autocomplete.md +89 -0
  9. package/docs/components/barcode.md +101 -0
  10. package/docs/components/button-select.md +24 -0
  11. package/docs/components/button.md +117 -0
  12. package/docs/components/buttons.md +119 -0
  13. package/docs/components/cascader-select.md +114 -0
  14. package/docs/components/checkbox.md +114 -0
  15. package/docs/components/code-mirror.md +85 -0
  16. package/docs/components/collapse.md +26 -0
  17. package/docs/components/comp.md +71 -0
  18. package/docs/components/count-up.md +24 -0
  19. package/docs/components/count.md +24 -0
  20. package/docs/components/data-panel.md +24 -0
  21. package/docs/components/dialog-full.md +112 -0
  22. package/docs/components/dialog.md +127 -0
  23. package/docs/components/divider.md +24 -0
  24. package/docs/components/drawer.md +127 -0
  25. package/docs/components/dynamic-layer.md +118 -0
  26. package/docs/components/echarts.md +72 -0
  27. package/docs/components/editor.md +24 -0
  28. package/docs/components/form.md +27 -0
  29. package/docs/components/guid.md +39 -0
  30. package/docs/components/hpanel.md +24 -0
  31. package/docs/components/icon.md +56 -0
  32. package/docs/components/input-button.md +24 -0
  33. package/docs/components/input-code.md +24 -0
  34. package/docs/components/input-color.md +114 -0
  35. package/docs/components/input-layer.md +26 -0
  36. package/docs/components/input-rows.md +370 -0
  37. package/docs/components/input-tag.md +50 -0
  38. package/docs/components/input.md +129 -0
  39. package/docs/components/layer-form.md +61 -0
  40. package/docs/components/layer.md +127 -0
  41. package/docs/components/layout.md +132 -0
  42. package/docs/components/map.md +24 -0
  43. package/docs/components/menu.md +121 -0
  44. package/docs/components/meta/autocomplete.ts +335 -0
  45. package/docs/components/meta/barcode.ts +216 -0
  46. package/docs/components/meta/button-select.ts +94 -0
  47. package/docs/components/meta/button.ts +123 -0
  48. package/docs/components/meta/buttons.ts +56 -0
  49. package/docs/components/meta/cascader-select.ts +328 -0
  50. package/docs/components/meta/checkbox.ts +194 -0
  51. package/docs/components/meta/code-mirror.ts +108 -0
  52. package/docs/components/meta/collapse.ts +52 -0
  53. package/docs/components/meta/comp.ts +224 -0
  54. package/docs/components/meta/count-up.ts +126 -0
  55. package/docs/components/meta/count.ts +113 -0
  56. package/docs/components/meta/data-panel.ts +34 -0
  57. package/docs/components/meta/dialog-full.ts +133 -0
  58. package/docs/components/meta/dialog.ts +175 -0
  59. package/docs/components/meta/divider.ts +66 -0
  60. package/docs/components/meta/drawer.ts +158 -0
  61. package/docs/components/meta/dynamic-layer.ts +99 -0
  62. package/docs/components/meta/echarts.ts +64 -0
  63. package/docs/components/meta/editor.ts +67 -0
  64. package/docs/components/meta/form-item.ts +50 -0
  65. package/docs/components/meta/form.ts +160 -0
  66. package/docs/components/meta/guid.ts +42 -0
  67. package/docs/components/meta/hpanel.ts +20 -0
  68. package/docs/components/meta/icon.ts +68 -0
  69. package/docs/components/meta/input-button.ts +165 -0
  70. package/docs/components/meta/input-code.ts +151 -0
  71. package/docs/components/meta/input-color.ts +243 -0
  72. package/docs/components/meta/input-layer.ts +336 -0
  73. package/docs/components/meta/input-rows.ts +113 -0
  74. package/docs/components/meta/input-tag.ts +112 -0
  75. package/docs/components/meta/input.ts +411 -0
  76. package/docs/components/meta/layer-form.ts +56 -0
  77. package/docs/components/meta/layer.ts +122 -0
  78. package/docs/components/meta/layout.ts +101 -0
  79. package/docs/components/meta/map.ts +68 -0
  80. package/docs/components/meta/menu.ts +43 -0
  81. package/docs/components/meta/number.ts +296 -0
  82. package/docs/components/meta/page.ts +67 -0
  83. package/docs/components/meta/radio.ts +55 -0
  84. package/docs/components/meta/rate.ts +124 -0
  85. package/docs/components/meta/select.ts +279 -0
  86. package/docs/components/meta/slider-captcha.ts +70 -0
  87. package/docs/components/meta/slider.ts +270 -0
  88. package/docs/components/meta/switch.ts +272 -0
  89. package/docs/components/meta/table-panel.ts +154 -0
  90. package/docs/components/meta/table.ts +328 -0
  91. package/docs/components/meta/tabs.ts +136 -0
  92. package/docs/components/meta/title.ts +80 -0
  93. package/docs/components/meta/tree.ts +242 -0
  94. package/docs/components/meta/upload.ts +186 -0
  95. package/docs/components/meta/workflow-viewer.ts +55 -0
  96. package/docs/components/meta/workflow.ts +113 -0
  97. package/docs/components/number.md +124 -0
  98. package/docs/components/page.md +42 -0
  99. package/docs/components/radio.md +87 -0
  100. package/docs/components/rate.md +71 -0
  101. package/docs/components/select.md +133 -0
  102. package/docs/components/slider-captcha.md +41 -0
  103. package/docs/components/slider.md +101 -0
  104. package/docs/components/switch.md +90 -0
  105. package/docs/components/table-panel.md +199 -0
  106. package/docs/components/table.md +202 -0
  107. package/docs/components/tabs.md +26 -0
  108. package/docs/components/title.md +24 -0
  109. package/docs/components/tree.md +207 -0
  110. package/docs/components/upload.md +117 -0
  111. package/docs/components/workflow-viewer.md +21 -0
  112. package/docs/components/workflow.md +21 -0
  113. package/docs/examples/autocomplete/advanced.vue +35 -0
  114. package/docs/examples/autocomplete/basic.vue +32 -0
  115. package/docs/examples/autocomplete/clearable.vue +33 -0
  116. package/docs/examples/autocomplete/custom-template.vue +49 -0
  117. package/docs/examples/autocomplete/disabled.vue +33 -0
  118. package/docs/examples/autocomplete/icon.vue +37 -0
  119. package/docs/examples/barcode/all-types.vue +380 -0
  120. package/docs/examples/barcode/basic.vue +14 -0
  121. package/docs/examples/barcode/props-appearance.vue +243 -0
  122. package/docs/examples/barcode/props-geometry.vue +143 -0
  123. package/docs/examples/barcode/props-logic.vue +216 -0
  124. package/docs/examples/barcode/props-symbology.vue +199 -0
  125. package/docs/examples/barcode/props-text.vue +268 -0
  126. package/docs/examples/button/basic.vue +7 -0
  127. package/docs/examples/button/danger-ghost.vue +17 -0
  128. package/docs/examples/button/disabled.vue +10 -0
  129. package/docs/examples/button/loading.vue +6 -0
  130. package/docs/examples/button/shape.vue +7 -0
  131. package/docs/examples/button/size.vue +14 -0
  132. package/docs/examples/button/type.vue +9 -0
  133. package/docs/examples/button-select/basic.vue +19 -0
  134. package/docs/examples/buttons/basic.vue +45 -0
  135. package/docs/examples/buttons/disabled.vue +36 -0
  136. package/docs/examples/buttons/dropdown.vue +63 -0
  137. package/docs/examples/buttons/group.vue +52 -0
  138. package/docs/examples/buttons/link.vue +47 -0
  139. package/docs/examples/buttons/popup.vue +39 -0
  140. package/docs/examples/buttons/size.vue +45 -0
  141. package/docs/examples/cascader-select/basic.vue +28 -0
  142. package/docs/examples/cascader-select/clearable.vue +34 -0
  143. package/docs/examples/cascader-select/disabled.vue +43 -0
  144. package/docs/examples/cascader-select/filterable.vue +37 -0
  145. package/docs/examples/cascader-select/methods.vue +84 -0
  146. package/docs/examples/cascader-select/multiple.vue +38 -0
  147. package/docs/examples/cascader-select/slot.vue +45 -0
  148. package/docs/examples/checkbox/basic.vue +18 -0
  149. package/docs/examples/checkbox/button.vue +19 -0
  150. package/docs/examples/checkbox/color.vue +25 -0
  151. package/docs/examples/checkbox/disabled.vue +17 -0
  152. package/docs/examples/checkbox/min-max.vue +20 -0
  153. package/docs/examples/checkbox/mixed.vue +56 -0
  154. package/docs/examples/checkbox/size.vue +28 -0
  155. package/docs/examples/code-mirror/basic.vue +11 -0
  156. package/docs/examples/code-mirror/events.vue +42 -0
  157. package/docs/examples/code-mirror/height.vue +25 -0
  158. package/docs/examples/code-mirror/mode.vue +33 -0
  159. package/docs/examples/code-mirror/readonly.vue +14 -0
  160. package/docs/examples/collapse/basic.vue +82 -0
  161. package/docs/examples/comp/basic.vue +7 -0
  162. package/docs/examples/comp/collapse.vue +38 -0
  163. package/docs/examples/comp/tabs.vue +38 -0
  164. package/docs/examples/count/basic.vue +54 -0
  165. package/docs/examples/count-up/basic.vue +89 -0
  166. package/docs/examples/data-panel/basic.vue +110 -0
  167. package/docs/examples/dialog/basic.vue +36 -0
  168. package/docs/examples/dialog/custom-buttons.vue +44 -0
  169. package/docs/examples/dialog/fullscreen.vue +23 -0
  170. package/docs/examples/dialog/no-mask.vue +17 -0
  171. package/docs/examples/dialog/size.vue +44 -0
  172. package/docs/examples/dialog/steps.vue +57 -0
  173. package/docs/examples/dialog-full/basic.vue +29 -0
  174. package/docs/examples/dialog-full/custom-buttons.vue +45 -0
  175. package/docs/examples/dialog-full/no-buttons.vue +18 -0
  176. package/docs/examples/dialog-full/no-header.vue +27 -0
  177. package/docs/examples/dialog-full/steps.vue +71 -0
  178. package/docs/examples/divider/basic.vue +52 -0
  179. package/docs/examples/drawer/basic.vue +35 -0
  180. package/docs/examples/drawer/custom-buttons.vue +34 -0
  181. package/docs/examples/drawer/direction.vue +47 -0
  182. package/docs/examples/drawer/mask.vue +36 -0
  183. package/docs/examples/drawer/no-buttons.vue +20 -0
  184. package/docs/examples/drawer/size.vue +28 -0
  185. package/docs/examples/dynamic-layer/basic.vue +33 -0
  186. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -0
  187. package/docs/examples/dynamic-layer/form.vue +73 -0
  188. package/docs/examples/dynamic-layer/steps.vue +52 -0
  189. package/docs/examples/dynamic-layer/types.vue +40 -0
  190. package/docs/examples/echarts/basic.vue +31 -0
  191. package/docs/examples/echarts/dynamic.vue +43 -0
  192. package/docs/examples/echarts/line.vue +46 -0
  193. package/docs/examples/echarts/pie.vue +44 -0
  194. package/docs/examples/editor/basic.vue +15 -0
  195. package/docs/examples/form/basic.vue +224 -0
  196. package/docs/examples/guid/basic.vue +10 -0
  197. package/docs/examples/guid/size.vue +13 -0
  198. package/docs/examples/hpanel/basic.vue +79 -0
  199. package/docs/examples/icon/basic.vue +9 -0
  200. package/docs/examples/icon/rotate-flip.vue +9 -0
  201. package/docs/examples/icon/size.vue +7 -0
  202. package/docs/examples/input/basic.vue +10 -0
  203. package/docs/examples/input/clearable.vue +12 -0
  204. package/docs/examples/input/disabled.vue +6 -0
  205. package/docs/examples/input/icon.vue +23 -0
  206. package/docs/examples/input/password.vue +18 -0
  207. package/docs/examples/input/size.vue +13 -0
  208. package/docs/examples/input/textarea.vue +25 -0
  209. package/docs/examples/input/word-limit.vue +28 -0
  210. package/docs/examples/input-button/basic.vue +33 -0
  211. package/docs/examples/input-code/basic.vue +29 -0
  212. package/docs/examples/input-color/basic.vue +10 -0
  213. package/docs/examples/input-color/disabled.vue +13 -0
  214. package/docs/examples/input-color/format.vue +17 -0
  215. package/docs/examples/input-color/no-alpha.vue +13 -0
  216. package/docs/examples/input-color/only-button.vue +15 -0
  217. package/docs/examples/input-color/predefine.vue +31 -0
  218. package/docs/examples/input-color/size.vue +15 -0
  219. package/docs/examples/input-layer/basic.vue +69 -0
  220. package/docs/examples/input-rows/basic.vue +73 -0
  221. package/docs/examples/input-rows/drag.vue +48 -0
  222. package/docs/examples/input-rows/layer-form.vue +85 -0
  223. package/docs/examples/input-rows/nested.vue +91 -0
  224. package/docs/examples/input-tag/basic.vue +27 -0
  225. package/docs/examples/input-tag/colors.vue +23 -0
  226. package/docs/examples/input-tag/readonly.vue +17 -0
  227. package/docs/examples/layer/basic.vue +43 -0
  228. package/docs/examples/layer/custom-buttons.vue +61 -0
  229. package/docs/examples/layer/drawer.vue +37 -0
  230. package/docs/examples/layer/full.vue +38 -0
  231. package/docs/examples/layer/modal.vue +34 -0
  232. package/docs/examples/layer/steps.vue +46 -0
  233. package/docs/examples/layer-form/basic.vue +76 -0
  234. package/docs/examples/layer-form/config.vue +82 -0
  235. package/docs/examples/layer-form/size.vue +72 -0
  236. package/docs/examples/layout/basic.vue +36 -0
  237. package/docs/examples/layout/custom-size.vue +50 -0
  238. package/docs/examples/layout/disable-move.vue +37 -0
  239. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -0
  240. package/docs/examples/layout/min-size.vue +73 -0
  241. package/docs/examples/layout/percent-size.vue +80 -0
  242. package/docs/examples/layout/simple.vue +22 -0
  243. package/docs/examples/layout/top-side.vue +34 -0
  244. package/docs/examples/map/basic.vue +22 -0
  245. package/docs/examples/menu/basic.vue +58 -0
  246. package/docs/examples/menu/collapsed.vue +49 -0
  247. package/docs/examples/menu/horizontal.vue +44 -0
  248. package/docs/examples/menu/selection-test.vue +104 -0
  249. package/docs/examples/menu/theme.vue +46 -0
  250. package/docs/examples/menu/vertical.vue +46 -0
  251. package/docs/examples/number/advanced.vue +143 -0
  252. package/docs/examples/number/basic.vue +63 -0
  253. package/docs/examples/number/disabled.vue +49 -0
  254. package/docs/examples/number/size.vue +42 -0
  255. package/docs/examples/number/slots.vue +123 -0
  256. package/docs/examples/number/step-strictly.vue +41 -0
  257. package/docs/examples/number/step.vue +47 -0
  258. package/docs/examples/page/basic.vue +41 -0
  259. package/docs/examples/page/init.vue +87 -0
  260. package/docs/examples/radio/basic.vue +17 -0
  261. package/docs/examples/radio/button.vue +17 -0
  262. package/docs/examples/radio/color.vue +18 -0
  263. package/docs/examples/radio/disabled.vue +17 -0
  264. package/docs/examples/radio/size.vue +29 -0
  265. package/docs/examples/rate/basic.vue +24 -0
  266. package/docs/examples/rate/half.vue +24 -0
  267. package/docs/examples/rate/readonly.vue +11 -0
  268. package/docs/examples/rate/text.vue +32 -0
  269. package/docs/examples/select/basic.vue +16 -0
  270. package/docs/examples/select/clearable.vue +22 -0
  271. package/docs/examples/select/disabled.vue +31 -0
  272. package/docs/examples/select/filterable.vue +24 -0
  273. package/docs/examples/select/group.vue +23 -0
  274. package/docs/examples/select/icon.vue +16 -0
  275. package/docs/examples/select/multiple.vue +18 -0
  276. package/docs/examples/select/size.vue +39 -0
  277. package/docs/examples/slider/basic.vue +42 -0
  278. package/docs/examples/slider/disabled.vue +17 -0
  279. package/docs/examples/slider/marks.vue +30 -0
  280. package/docs/examples/slider/size.vue +37 -0
  281. package/docs/examples/slider/tooltip.vue +36 -0
  282. package/docs/examples/slider/vertical.vue +26 -0
  283. package/docs/examples/slider-captcha/basic.vue +44 -0
  284. package/docs/examples/slider-captcha/custom.vue +48 -0
  285. package/docs/examples/switch/basic.vue +16 -0
  286. package/docs/examples/switch/disabled.vue +13 -0
  287. package/docs/examples/switch/loading.vue +13 -0
  288. package/docs/examples/switch/size.vue +15 -0
  289. package/docs/examples/switch/text.vue +13 -0
  290. package/docs/examples/table/actions.vue +116 -0
  291. package/docs/examples/table/add-row.vue +103 -0
  292. package/docs/examples/table/basic.vue +168 -0
  293. package/docs/examples/table/editable.vue +261 -0
  294. package/docs/examples/table/field-selection.vue +87 -0
  295. package/docs/examples/table/frozen-column.vue +140 -0
  296. package/docs/examples/table/height-mode.vue +99 -0
  297. package/docs/examples/table/multiple.vue +178 -0
  298. package/docs/examples/table/pagination.vue +151 -0
  299. package/docs/examples/table/single-selection.vue +64 -0
  300. package/docs/examples/table/tree-column.vue +119 -0
  301. package/docs/examples/table/tree-data.vue +141 -0
  302. package/docs/examples/table-panel/basic.vue +228 -0
  303. package/docs/examples/table-panel/batch-operations.vue +285 -0
  304. package/docs/examples/table-panel/filter.vue +209 -0
  305. package/docs/examples/table-panel/multiple-selection.vue +243 -0
  306. package/docs/examples/table-panel/pagination.vue +133 -0
  307. package/docs/examples/tabs/basic.vue +98 -0
  308. package/docs/examples/title/basic.vue +80 -0
  309. package/docs/examples/tree/accordion.vue +46 -0
  310. package/docs/examples/tree/basic.vue +50 -0
  311. package/docs/examples/tree/buttons.vue +53 -0
  312. package/docs/examples/tree/checkable.vue +52 -0
  313. package/docs/examples/tree/custom-keys.vue +39 -0
  314. package/docs/examples/tree/default-expanded.vue +52 -0
  315. package/docs/examples/tree/draggable.vue +29 -0
  316. package/docs/examples/tree/expand-on-click.vue +39 -0
  317. package/docs/examples/tree/flat-data.vue +20 -0
  318. package/docs/examples/tree/icon.vue +40 -0
  319. package/docs/examples/tree/load-data.vue +37 -0
  320. package/docs/examples/tree/methods.vue +74 -0
  321. package/docs/examples/tree/theme.vue +33 -0
  322. package/docs/examples/upload/accept.vue +31 -0
  323. package/docs/examples/upload/basic.vue +12 -0
  324. package/docs/examples/upload/drag.vue +11 -0
  325. package/docs/examples/upload/image.vue +17 -0
  326. package/docs/examples/upload/limit.vue +20 -0
  327. package/docs/examples/upload/multiple.vue +17 -0
  328. package/docs/examples/upload/readonly.vue +17 -0
  329. package/docs/examples/utils/cipher.vue +160 -0
  330. package/docs/examples/utils/common.vue +153 -0
  331. package/docs/examples/utils/date.vue +56 -0
  332. package/docs/examples/utils/dom.vue +52 -0
  333. package/docs/examples/utils/is.vue +70 -0
  334. package/docs/examples/workflow/basic.vue +265 -0
  335. package/docs/examples/workflow-viewer/basic.vue +248 -0
  336. package/package.json +6 -2
  337. /package/dist/components/workflow-viewer/src/{j-workflow.vue.d.ts → workflow.vue.d.ts} +0 -0
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div style="margin-bottom: 10px">
3
+ <j-button type="primary" label="获取选中数据" @click="getSelection" />
4
+ </div>
5
+ <div style="position: relative; width: 100%; height: 500px">
6
+ <j-table
7
+ ref="tableRef"
8
+ :columns="columns"
9
+ :records="records"
10
+ is-multiple
11
+ select-field="checkState"
12
+ />
13
+ </div>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { ref } from 'vue'
18
+
19
+ const tableRef = ref()
20
+
21
+ const getSelection = () => {
22
+ const records = tableRef.value.getSelection()
23
+ console.log(records)
24
+ alert(`选中了 ${records.length} 条数据,详情请查看控制台`)
25
+ }
26
+
27
+ const columns = ref([
28
+ {
29
+ id: 'Order ID',
30
+ config: {
31
+ label: 'Order ID',
32
+ width: 'auto',
33
+ align: 'left',
34
+ },
35
+ },
36
+ {
37
+ id: 'Customer ID',
38
+ config: {
39
+ label: 'Customer ID',
40
+ width: 'auto',
41
+ align: 'left',
42
+ },
43
+ },
44
+ {
45
+ id: 'Product Name',
46
+ config: {
47
+ label: 'Product Name',
48
+ width: 'auto',
49
+ align: 'left',
50
+ },
51
+ },
52
+ ])
53
+
54
+ const records = ref([
55
+ {
56
+ 'Order ID': 'CA-2016-152156',
57
+ 'Customer ID': 'CG-12520',
58
+ 'Product Name': 'Canon ImageCLASS 2200 Advanced Copier',
59
+ checkState: true,
60
+ },
61
+ {
62
+ 'Order ID': 'CA-2017-152157',
63
+ 'Customer ID': 'DV-13045',
64
+ 'Product Name': 'Logitech Wireless Mouse',
65
+ checkState: {
66
+ text: '已选',
67
+ checked: true,
68
+ disable: false,
69
+ },
70
+ },
71
+ {
72
+ 'Order ID': 'US-2017-108966',
73
+ 'Customer ID': 'SO-20335',
74
+ 'Product Name': 'HON Mesh Task Chair',
75
+ checkState: false,
76
+ },
77
+ {
78
+ 'Order ID': 'US-2016-108967',
79
+ 'Customer ID': 'AB-10015',
80
+ 'Product Name': 'Avery Binder Labels',
81
+ checkState: {
82
+ checked: false,
83
+ disable: true, // 禁用
84
+ },
85
+ },
86
+ ])
87
+ </script>
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <div style="position: relative; width: 100%; height: 500px">
3
+ <j-table :columns="columns" :records="records" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { ref } from 'vue'
9
+
10
+ const columns = ref([
11
+ {
12
+ id: 'Order Info',
13
+ config: {
14
+ label: 'Order Info',
15
+ align: 'center',
16
+ },
17
+ children: [
18
+ {
19
+ id: 'Order ID',
20
+ config: {
21
+ label: 'Order ID',
22
+ width: 150,
23
+ align: 'left',
24
+ frozen: 'left',
25
+ },
26
+ },
27
+ {
28
+ id: 'Order Date',
29
+ config: {
30
+ label: 'Order Date',
31
+ width: 150,
32
+ align: 'center',
33
+ frozen: 'left',
34
+ },
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ id: 'Customer ID',
40
+ config: {
41
+ label: 'Customer ID',
42
+ width: 150,
43
+ align: 'left',
44
+ },
45
+ },
46
+ {
47
+ id: 'Quantity',
48
+ config: {
49
+ label: 'Quantity',
50
+ width: 150,
51
+ align: 'right',
52
+ },
53
+ },
54
+ {
55
+ id: 'Sales',
56
+ config: {
57
+ label: 'Sales',
58
+ width: 150,
59
+ align: 'right',
60
+ },
61
+ },
62
+ {
63
+ id: 'Profit',
64
+ config: {
65
+ label: 'Profit',
66
+ width: 150,
67
+ align: 'right',
68
+ frozen: 'right',
69
+ },
70
+ },
71
+ ])
72
+
73
+ const records = ref([
74
+ {
75
+ 'Order ID': 'CA-2016-152156',
76
+ 'Customer ID': 'CG-12520',
77
+ 'Product Name': 'Canon ImageCLASS 2200 Advanced Copier',
78
+ Category: 'Office Supplies',
79
+ 'Sub-Category': 'Copiers',
80
+ Region: 'West',
81
+ City: 'Los Angeles',
82
+ 'Order Date': '2016-11-08',
83
+ Quantity: 2,
84
+ Sales: 2399.99,
85
+ Profit: 400.0,
86
+ },
87
+ {
88
+ 'Order ID': 'CA-2017-152157',
89
+ 'Customer ID': 'DV-13045',
90
+ 'Product Name': 'Logitech Wireless Mouse',
91
+ Category: 'Technology',
92
+ 'Sub-Category': 'Accessories',
93
+ Region: 'West',
94
+ City: 'San Francisco',
95
+ 'Order Date': '2017-03-15',
96
+ Quantity: 3,
97
+ Sales: 89.97,
98
+ Profit: 25.5,
99
+ },
100
+ {
101
+ 'Order ID': 'US-2017-108966',
102
+ 'Customer ID': 'SO-20335',
103
+ 'Product Name': 'HON Mesh Task Chair',
104
+ Category: 'Furniture',
105
+ 'Sub-Category': 'Chairs',
106
+ Region: 'East',
107
+ City: 'New York',
108
+ 'Order Date': '2017-06-21',
109
+ Quantity: 4,
110
+ Sales: 799.96,
111
+ Profit: 120.0,
112
+ },
113
+ {
114
+ 'Order ID': 'US-2016-108967',
115
+ 'Customer ID': 'AB-10015',
116
+ 'Product Name': 'Avery Binder Labels',
117
+ Category: 'Office Supplies',
118
+ 'Sub-Category': 'Labels',
119
+ Region: 'Central',
120
+ City: 'Chicago',
121
+ 'Order Date': '2016-02-03',
122
+ Quantity: 10,
123
+ Sales: 15.9,
124
+ Profit: 5.2,
125
+ },
126
+ {
127
+ 'Order ID': 'CA-2015-108968',
128
+ 'Customer ID': 'ML-12515',
129
+ 'Product Name': 'Apple iPhone 7',
130
+ Category: 'Technology',
131
+ 'Sub-Category': 'Phones',
132
+ Region: 'South',
133
+ City: 'Dallas',
134
+ 'Order Date': '2015-09-12',
135
+ Quantity: 1,
136
+ Sales: 699.0,
137
+ Profit: 80.0,
138
+ },
139
+ ])
140
+ </script>
@@ -0,0 +1,99 @@
1
+ <template>
2
+ <div style="width: 100%">
3
+ <div style="margin-bottom: 16px">
4
+ <el-radio-group v-model="heightMode">
5
+ <el-radio-button value="full">充满父容器 (Full)</el-radio-button>
6
+ <el-radio-button value="auto">内容自适应 (Auto)</el-radio-button>
7
+ </el-radio-group>
8
+ </div>
9
+
10
+ <div
11
+ :style="{
12
+ position: 'relative',
13
+ width: '100%',
14
+ height: heightMode === 'full' ? '500px' : 'auto',
15
+ }"
16
+ >
17
+ <j-table
18
+ :columns="columns"
19
+ :records="records"
20
+ :height-mode="heightMode"
21
+ :max-height="heightMode === 'auto' ? 300 : undefined"
22
+ />
23
+ </div>
24
+ </div>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import { ref } from 'vue'
29
+
30
+ const heightMode = ref<'full' | 'auto'>('auto')
31
+
32
+ const columns = ref([
33
+ {
34
+ id: 'Order ID',
35
+ config: {
36
+ label: 'Order ID',
37
+ width: 'auto',
38
+ align: 'left',
39
+ },
40
+ },
41
+ {
42
+ id: 'Customer ID',
43
+ config: {
44
+ label: 'Customer ID',
45
+ width: 'auto',
46
+ align: 'left',
47
+ },
48
+ },
49
+ {
50
+ id: 'Product Name',
51
+ config: {
52
+ label: 'Product Name',
53
+ width: 'auto',
54
+ align: 'left',
55
+ },
56
+ },
57
+ {
58
+ id: 'Category',
59
+ config: {
60
+ label: 'Category',
61
+ width: 'auto',
62
+ align: 'left',
63
+ },
64
+ },
65
+ ])
66
+
67
+ const records = ref([
68
+ {
69
+ 'Order ID': 'CA-2016-152156',
70
+ 'Customer ID': 'CG-12520',
71
+ 'Product Name': 'Canon ImageCLASS 2200 Advanced Copier',
72
+ Category: 'Office Supplies',
73
+ },
74
+ {
75
+ 'Order ID': 'CA-2017-152157',
76
+ 'Customer ID': 'DV-13045',
77
+ 'Product Name': 'Logitech Wireless Mouse',
78
+ Category: 'Technology',
79
+ },
80
+ {
81
+ 'Order ID': 'US-2017-108966',
82
+ 'Customer ID': 'SO-20335',
83
+ 'Product Name': 'HON Mesh Task Chair',
84
+ Category: 'Furniture',
85
+ },
86
+ {
87
+ 'Order ID': 'US-2016-108967',
88
+ 'Customer ID': 'AB-10015',
89
+ 'Product Name': 'Avery Binder Labels',
90
+ Category: 'Office Supplies',
91
+ },
92
+ {
93
+ 'Order ID': 'CA-2015-108968',
94
+ 'Customer ID': 'ML-12515',
95
+ 'Product Name': 'Apple iPhone 7',
96
+ Category: 'Technology',
97
+ },
98
+ ])
99
+ </script>
@@ -0,0 +1,178 @@
1
+ <template>
2
+ <div style="margin-bottom: 10px">
3
+ <j-button type="primary" label="获取选中数据" @click="getSelection" />
4
+ <j-button label="选中前两行" @click="setSelection" />
5
+ </div>
6
+ <div style="position: relative; width: 100%; height: 500px">
7
+ <j-table ref="tableRef" :columns="columns" :records="records" is-multiple />
8
+ </div>
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import { ref } from 'vue'
13
+
14
+ const tableRef = ref()
15
+
16
+ const getSelection = () => {
17
+ const records = tableRef.value.getSelection()
18
+ console.log(records)
19
+ alert(`选中了 ${records.length} 条数据,详情请查看控制台`)
20
+ }
21
+
22
+ const setSelection = () => {
23
+ const selectedRecords = [records.value[0], records.value[1]]
24
+ tableRef.value.setSelection(selectedRecords)
25
+ }
26
+
27
+ const columns = ref([
28
+ {
29
+ id: 'Order ID',
30
+ config: {
31
+ label: 'Order ID',
32
+ width: 'auto',
33
+ align: 'left',
34
+ },
35
+ },
36
+ {
37
+ id: 'Customer ID',
38
+ config: {
39
+ label: 'Customer ID',
40
+ width: 'auto',
41
+ align: 'left',
42
+ },
43
+ },
44
+ {
45
+ id: 'Product Name',
46
+ config: {
47
+ label: 'Product Name',
48
+ width: 'auto',
49
+ align: 'left',
50
+ },
51
+ },
52
+ {
53
+ id: 'Category',
54
+ config: {
55
+ label: 'Category',
56
+ width: 'auto',
57
+ align: 'left',
58
+ },
59
+ },
60
+ {
61
+ id: 'Quantity',
62
+ config: {
63
+ label: 'Quantity',
64
+ width: 'auto',
65
+ align: 'right',
66
+ },
67
+ },
68
+ {
69
+ id: 'Sales',
70
+ config: {
71
+ label: 'Sales',
72
+ width: 'auto',
73
+ align: 'right',
74
+ },
75
+ },
76
+ {
77
+ id: 'Profit',
78
+ config: {
79
+ label: 'Profit',
80
+ width: 'auto',
81
+ align: 'right',
82
+ },
83
+ },
84
+ ])
85
+
86
+ const records = ref([
87
+ {
88
+ 'Order ID': 'CA-2016-152156',
89
+ 'Customer ID': 'CG-12520',
90
+ 'Product Name': 'Canon ImageCLASS 2200 Advanced Copier',
91
+ Category: 'Office Supplies',
92
+ Quantity: 2,
93
+ Sales: 2399.99,
94
+ Profit: 400.0,
95
+ },
96
+ {
97
+ 'Order ID': 'CA-2017-152157',
98
+ 'Customer ID': 'DV-13045',
99
+ 'Product Name': 'Logitech Wireless Mouse',
100
+ Category: 'Technology',
101
+ Quantity: 3,
102
+ Sales: 89.97,
103
+ Profit: 25.5,
104
+ },
105
+ {
106
+ 'Order ID': 'US-2017-108966',
107
+ 'Customer ID': 'SO-20335',
108
+ 'Product Name': 'HON Mesh Task Chair',
109
+ Category: 'Furniture',
110
+ Quantity: 4,
111
+ Sales: 799.96,
112
+ Profit: 120.0,
113
+ },
114
+ {
115
+ 'Order ID': 'US-2016-108967',
116
+ 'Customer ID': 'AB-10015',
117
+ 'Product Name': 'Avery Binder Labels',
118
+ Category: 'Office Supplies',
119
+ Quantity: 10,
120
+ Sales: 15.9,
121
+ Profit: 5.2,
122
+ },
123
+ {
124
+ 'Order ID': 'CA-2015-108968',
125
+ 'Customer ID': 'ML-12515',
126
+ 'Product Name': 'Apple iPhone 7',
127
+ Category: 'Technology',
128
+ Quantity: 1,
129
+ Sales: 699.0,
130
+ Profit: 80.0,
131
+ },
132
+ {
133
+ 'Order ID': 'CA-2016-108969',
134
+ 'Customer ID': 'CG-12520',
135
+ 'Product Name': 'Staples Paper',
136
+ Category: 'Office Supplies',
137
+ Quantity: 20,
138
+ Sales: 40.0,
139
+ Profit: 12.0,
140
+ },
141
+ {
142
+ 'Order ID': 'US-2016-108970',
143
+ 'Customer ID': 'DV-13045',
144
+ 'Product Name': 'Dell Monitor 24"',
145
+ Category: 'Technology',
146
+ Quantity: 2,
147
+ Sales: 320.0,
148
+ Profit: 60.0,
149
+ },
150
+ {
151
+ 'Order ID': 'US-2017-108971',
152
+ 'Customer ID': 'SO-20335',
153
+ 'Product Name': 'Office Chair Ergonomic',
154
+ Category: 'Furniture',
155
+ Quantity: 1,
156
+ Sales: 199.0,
157
+ Profit: 35.0,
158
+ },
159
+ {
160
+ 'Order ID': 'CA-2017-108972',
161
+ 'Customer ID': 'AB-10015',
162
+ 'Product Name': 'Notebook Set',
163
+ Category: 'Office Supplies',
164
+ Quantity: 15,
165
+ Sales: 60.0,
166
+ Profit: 18.0,
167
+ },
168
+ {
169
+ 'Order ID': 'US-2015-108973',
170
+ 'Customer ID': 'ML-12515',
171
+ 'Product Name': 'Bluetooth Headset',
172
+ Category: 'Technology',
173
+ Quantity: 2,
174
+ Sales: 150.0,
175
+ Profit: 30.0,
176
+ },
177
+ ])
178
+ </script>
@@ -0,0 +1,151 @@
1
+ <template>
2
+ <div style="position: relative; width: 100%; height: 500px">
3
+ <j-table
4
+ ref="tableRef"
5
+ v-model:table-page="currentPage"
6
+ v-model:page-size="pageSize"
7
+ :columns="columns"
8
+ :records="records"
9
+ :is-page="true"
10
+ :page-total="pageTotal"
11
+ @load-page-data="handleLoadPageData"
12
+ />
13
+ </div>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { ref, onMounted } from 'vue'
18
+
19
+ const columns = ref([
20
+ {
21
+ id: 'Order ID',
22
+ config: {
23
+ label: 'Order ID',
24
+ width: 'auto',
25
+ align: 'left',
26
+ },
27
+ },
28
+ {
29
+ id: 'Customer ID',
30
+ config: {
31
+ label: 'Customer ID',
32
+ width: 'auto',
33
+ align: 'left',
34
+ },
35
+ },
36
+ {
37
+ id: 'Product Name',
38
+ config: {
39
+ label: 'Product Name',
40
+ width: 'auto',
41
+ align: 'left',
42
+ },
43
+ },
44
+ {
45
+ id: 'Category',
46
+ config: {
47
+ label: 'Category',
48
+ width: 'auto',
49
+ align: 'left',
50
+ },
51
+ },
52
+ {
53
+ id: 'Sub-Category',
54
+ config: {
55
+ label: 'Sub-Category',
56
+ width: 'auto',
57
+ align: 'left',
58
+ },
59
+ },
60
+ {
61
+ id: 'Region',
62
+ config: {
63
+ label: 'Region',
64
+ width: 'auto',
65
+ align: 'left',
66
+ },
67
+ },
68
+ {
69
+ id: 'City',
70
+ config: {
71
+ label: 'City',
72
+ width: 'auto',
73
+ align: 'left',
74
+ },
75
+ },
76
+ {
77
+ id: 'Order Date',
78
+ config: {
79
+ label: 'Order Date',
80
+ width: 'auto',
81
+ align: 'center',
82
+ },
83
+ },
84
+ {
85
+ id: 'Quantity',
86
+ config: {
87
+ label: 'Quantity',
88
+ width: 'auto',
89
+ align: 'right',
90
+ },
91
+ },
92
+ {
93
+ id: 'Sales',
94
+ config: {
95
+ label: 'Sales',
96
+ width: 'auto',
97
+ align: 'right',
98
+ },
99
+ },
100
+ {
101
+ id: 'Profit',
102
+ config: {
103
+ label: 'Profit',
104
+ width: 'auto',
105
+ align: 'right',
106
+ },
107
+ },
108
+ ])
109
+
110
+ let records: Record<string, any>[] = []
111
+ const tableRef = ref()
112
+ const allData = ref<any[]>([])
113
+ const currentPage = ref(1)
114
+ const pageSize = ref(20)
115
+ const pageTotal = ref(0)
116
+
117
+ // 加载分页数据
118
+ const handleLoadPageData = ({ page, rows }: { page: number; rows: number }) => {
119
+ const start = (page - 1) * rows
120
+ const end = start + rows
121
+ records = allData.value.slice(start, end)
122
+
123
+ tableRef.value?.setRecords(records)
124
+ }
125
+
126
+ const generateLocalData = () => {
127
+ const data: any[] = []
128
+ for (let i = 1; i <= 100; i++) {
129
+ data.push({
130
+ 'Order ID': `CA-2016-${150000 + i}`,
131
+ 'Customer ID': `CU-${10000 + i}`,
132
+ 'Product Name': `Sample Product ${i}`,
133
+ Category: i % 2 === 0 ? 'Office Supplies' : 'Technology',
134
+ 'Sub-Category': i % 3 === 0 ? 'Chairs' : 'Accessories',
135
+ Region: i % 4 === 0 ? 'West' : 'East',
136
+ City: i % 5 === 0 ? 'Los Angeles' : 'New York',
137
+ 'Order Date': `2016-01-${(i % 28) + 1}`.padStart(10, '0'),
138
+ Quantity: (i % 10) + 1,
139
+ Sales: 50 + i,
140
+ Profit: 10 + (i % 20),
141
+ })
142
+ }
143
+ return data
144
+ }
145
+
146
+ onMounted(() => {
147
+ allData.value = generateLocalData()
148
+ pageTotal.value = allData.value.length
149
+ handleLoadPageData({ page: currentPage.value, rows: pageSize.value })
150
+ })
151
+ </script>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div style="position: relative; width: 100%; height: 500px">
3
+ <j-table
4
+ ref="tableRef"
5
+ :columns="columns"
6
+ :records="records"
7
+ @selection-changed="onSelectionChanged"
8
+ />
9
+ </div>
10
+ <div style="margin-top: 10px">Selected: {{ selected }}</div>
11
+ <div style="margin-top: 10px">
12
+ <el-button @click="getSelectionManual">Get Selection Manually</el-button>
13
+ </div>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { ref } from 'vue'
18
+
19
+ const tableRef = ref()
20
+ const selected = ref<any[]>([])
21
+
22
+ const onSelectionChanged = (selection: any[]) => {
23
+ console.log('selection changed', selection)
24
+ selected.value = selection
25
+ }
26
+
27
+ const getSelectionManual = () => {
28
+ if (tableRef.value) {
29
+ const selection = tableRef.value.getSelection()
30
+ console.log('manual selection', selection)
31
+ selected.value = selection
32
+ }
33
+ }
34
+
35
+ const columns = ref([
36
+ {
37
+ id: 'Order ID',
38
+ config: {
39
+ label: 'Order ID',
40
+ width: 'auto',
41
+ align: 'left',
42
+ },
43
+ },
44
+ {
45
+ id: 'Customer ID',
46
+ config: {
47
+ label: 'Customer ID',
48
+ width: 'auto',
49
+ align: 'left',
50
+ },
51
+ },
52
+ ])
53
+
54
+ const records = ref([
55
+ {
56
+ 'Order ID': 'CA-2016-152156',
57
+ 'Customer ID': 'CG-12520',
58
+ },
59
+ {
60
+ 'Order ID': 'CA-2016-138688',
61
+ 'Customer ID': 'DV-13045',
62
+ },
63
+ ])
64
+ </script>