@a2simcode/ui 0.0.213 → 0.0.214

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 (354) hide show
  1. package/.cursor/skills/ui-component-helper/README.md +86 -86
  2. package/.cursor/skills/ui-component-helper/SKILL.md +115 -115
  3. package/LICENSE +53 -53
  4. package/README.md +156 -156
  5. package/dist/components/table/index.d.ts +15 -0
  6. package/dist/components/table/src/table.vue.d.ts +15 -0
  7. package/dist/components/table-panel/index.d.ts +15 -0
  8. package/dist/components/table-panel/src/table-panel.vue.d.ts +15 -0
  9. package/dist/simcode-ui.es.js +2280 -2251
  10. package/dist/simcode-ui.umd.js +2 -2
  11. package/dist/stats.html +1 -1
  12. package/dist/ui.css +1 -1
  13. package/docs/components/autocomplete.md +89 -89
  14. package/docs/components/barcode.md +101 -101
  15. package/docs/components/button-select.md +24 -24
  16. package/docs/components/button.md +117 -117
  17. package/docs/components/buttons.md +119 -119
  18. package/docs/components/cascader-select.md +114 -114
  19. package/docs/components/checkbox.md +114 -114
  20. package/docs/components/code-mirror.md +85 -85
  21. package/docs/components/collapse.md +26 -26
  22. package/docs/components/comp.md +71 -71
  23. package/docs/components/count-up.md +24 -24
  24. package/docs/components/count.md +24 -24
  25. package/docs/components/data-panel.md +24 -24
  26. package/docs/components/date.md +76 -76
  27. package/docs/components/dialog-full.md +112 -112
  28. package/docs/components/dialog.md +127 -127
  29. package/docs/components/divider.md +24 -24
  30. package/docs/components/drawer.md +127 -127
  31. package/docs/components/dynamic-layer.md +118 -118
  32. package/docs/components/echarts.md +72 -72
  33. package/docs/components/editor.md +24 -24
  34. package/docs/components/form.md +72 -72
  35. package/docs/components/guid.md +39 -39
  36. package/docs/components/hpanel.md +24 -24
  37. package/docs/components/icon.md +56 -56
  38. package/docs/components/input-button.md +24 -24
  39. package/docs/components/input-code.md +24 -24
  40. package/docs/components/input-color.md +114 -114
  41. package/docs/components/input-layer.md +56 -56
  42. package/docs/components/input-rows.md +370 -370
  43. package/docs/components/input-tag.md +50 -50
  44. package/docs/components/input.md +129 -129
  45. package/docs/components/layer-form.md +61 -61
  46. package/docs/components/layer.md +127 -127
  47. package/docs/components/layout.md +132 -132
  48. package/docs/components/map.md +24 -24
  49. package/docs/components/menu.md +121 -121
  50. package/docs/components/meta/button.ts +223 -223
  51. package/docs/components/meta/buttons.ts +76 -76
  52. package/docs/components/meta/code-mirror.ts +108 -108
  53. package/docs/components/meta/comp.ts +236 -236
  54. package/docs/components/meta/date.ts +267 -267
  55. package/docs/components/meta/echarts.ts +64 -64
  56. package/docs/components/meta/form-item.ts +50 -50
  57. package/docs/components/meta/form.ts +181 -181
  58. package/docs/components/meta/input-button.ts +165 -165
  59. package/docs/components/meta/input-cards.ts +112 -112
  60. package/docs/components/meta/input-code.ts +151 -151
  61. package/docs/components/meta/input-color.ts +243 -243
  62. package/docs/components/meta/input-layer.ts +392 -392
  63. package/docs/components/meta/input-rows.ts +119 -119
  64. package/docs/components/meta/layer-form.ts +56 -56
  65. package/docs/components/meta/map.ts +68 -68
  66. package/docs/components/meta/panel.ts +152 -152
  67. package/docs/components/meta/radio.ts +55 -55
  68. package/docs/components/meta/slider.ts +270 -270
  69. package/docs/components/meta/table-panel.ts +242 -242
  70. package/docs/components/meta/table.ts +397 -391
  71. package/docs/components/meta/tabs.ts +146 -146
  72. package/docs/components/meta/title.ts +91 -91
  73. package/docs/components/meta/tree-select.ts +199 -199
  74. package/docs/components/meta/tree.ts +219 -219
  75. package/docs/components/meta/vpanel.ts +19 -19
  76. package/docs/components/meta/workflow-viewer.ts +55 -55
  77. package/docs/components/number.md +124 -124
  78. package/docs/components/page.md +102 -102
  79. package/docs/components/panel.md +37 -37
  80. package/docs/components/radio.md +87 -87
  81. package/docs/components/rate.md +71 -71
  82. package/docs/components/select.md +133 -133
  83. package/docs/components/slider-captcha.md +41 -41
  84. package/docs/components/slider.md +101 -101
  85. package/docs/components/switch.md +90 -90
  86. package/docs/components/table-panel.md +251 -251
  87. package/docs/components/table.md +405 -391
  88. package/docs/components/tabs.md +26 -26
  89. package/docs/components/title.md +24 -24
  90. package/docs/components/tree.md +207 -207
  91. package/docs/components/upload.md +117 -117
  92. package/docs/components/workflow-viewer.md +21 -21
  93. package/docs/components/workflow.md +21 -21
  94. package/docs/examples/autocomplete/advanced.vue +35 -35
  95. package/docs/examples/autocomplete/basic.vue +32 -32
  96. package/docs/examples/autocomplete/clearable.vue +33 -33
  97. package/docs/examples/autocomplete/custom-template.vue +49 -49
  98. package/docs/examples/autocomplete/disabled.vue +33 -33
  99. package/docs/examples/autocomplete/icon.vue +37 -37
  100. package/docs/examples/barcode/all-types.vue +380 -380
  101. package/docs/examples/barcode/basic.vue +14 -14
  102. package/docs/examples/barcode/props-appearance.vue +243 -243
  103. package/docs/examples/barcode/props-geometry.vue +143 -143
  104. package/docs/examples/barcode/props-logic.vue +216 -216
  105. package/docs/examples/barcode/props-symbology.vue +199 -199
  106. package/docs/examples/barcode/props-text.vue +268 -268
  107. package/docs/examples/button/basic.vue +7 -7
  108. package/docs/examples/button/danger-ghost.vue +17 -17
  109. package/docs/examples/button/disabled.vue +10 -10
  110. package/docs/examples/button/loading.vue +6 -6
  111. package/docs/examples/button/shape.vue +7 -7
  112. package/docs/examples/button/size.vue +14 -14
  113. package/docs/examples/button/type.vue +10 -10
  114. package/docs/examples/button-select/basic.vue +19 -19
  115. package/docs/examples/buttons/basic.vue +62 -62
  116. package/docs/examples/buttons/disabled.vue +36 -36
  117. package/docs/examples/buttons/dropdown.vue +63 -63
  118. package/docs/examples/buttons/group.vue +52 -52
  119. package/docs/examples/buttons/link.vue +47 -47
  120. package/docs/examples/buttons/popup.vue +39 -39
  121. package/docs/examples/buttons/size.vue +45 -45
  122. package/docs/examples/cascader-select/basic.vue +28 -28
  123. package/docs/examples/cascader-select/clearable.vue +34 -34
  124. package/docs/examples/cascader-select/disabled.vue +43 -43
  125. package/docs/examples/cascader-select/filterable.vue +37 -37
  126. package/docs/examples/cascader-select/methods.vue +84 -84
  127. package/docs/examples/cascader-select/multiple.vue +38 -38
  128. package/docs/examples/cascader-select/slot.vue +45 -45
  129. package/docs/examples/checkbox/basic.vue +18 -18
  130. package/docs/examples/checkbox/button.vue +19 -19
  131. package/docs/examples/checkbox/color.vue +25 -25
  132. package/docs/examples/checkbox/disabled.vue +17 -17
  133. package/docs/examples/checkbox/min-max.vue +20 -20
  134. package/docs/examples/checkbox/mixed.vue +56 -56
  135. package/docs/examples/checkbox/size.vue +28 -28
  136. package/docs/examples/code-mirror/basic.vue +11 -11
  137. package/docs/examples/code-mirror/events.vue +42 -42
  138. package/docs/examples/code-mirror/height.vue +25 -25
  139. package/docs/examples/code-mirror/mode.vue +33 -33
  140. package/docs/examples/code-mirror/readonly.vue +14 -14
  141. package/docs/examples/collapse/basic.vue +82 -82
  142. package/docs/examples/comp/basic.vue +7 -7
  143. package/docs/examples/comp/collapse.vue +38 -38
  144. package/docs/examples/comp/tabs.vue +38 -38
  145. package/docs/examples/count/basic.vue +101 -101
  146. package/docs/examples/count-up/basic.vue +89 -89
  147. package/docs/examples/data-panel/basic.vue +110 -110
  148. package/docs/examples/date/basic.vue +73 -73
  149. package/docs/examples/date/default-value.vue +59 -59
  150. package/docs/examples/date/format.vue +75 -75
  151. package/docs/examples/date/range.vue +66 -66
  152. package/docs/examples/date/types.vue +79 -79
  153. package/docs/examples/decorated-title/basic.vue +31 -31
  154. package/docs/examples/dialog/basic.vue +36 -36
  155. package/docs/examples/dialog/custom-buttons.vue +44 -44
  156. package/docs/examples/dialog/fullscreen.vue +23 -23
  157. package/docs/examples/dialog/no-mask.vue +17 -17
  158. package/docs/examples/dialog/size.vue +44 -44
  159. package/docs/examples/dialog/steps.vue +57 -57
  160. package/docs/examples/dialog-full/basic.vue +29 -29
  161. package/docs/examples/dialog-full/custom-buttons.vue +45 -45
  162. package/docs/examples/dialog-full/no-buttons.vue +18 -18
  163. package/docs/examples/dialog-full/no-header.vue +27 -27
  164. package/docs/examples/dialog-full/steps.vue +71 -71
  165. package/docs/examples/divider/basic.vue +52 -52
  166. package/docs/examples/drawer/basic.vue +35 -35
  167. package/docs/examples/drawer/custom-buttons.vue +34 -34
  168. package/docs/examples/drawer/direction.vue +47 -47
  169. package/docs/examples/drawer/mask.vue +36 -36
  170. package/docs/examples/drawer/no-buttons.vue +20 -20
  171. package/docs/examples/drawer/size.vue +28 -28
  172. package/docs/examples/dynamic-layer/basic.vue +33 -33
  173. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -43
  174. package/docs/examples/dynamic-layer/form.vue +73 -73
  175. package/docs/examples/dynamic-layer/steps.vue +52 -52
  176. package/docs/examples/dynamic-layer/types.vue +40 -40
  177. package/docs/examples/echarts/basic.vue +31 -31
  178. package/docs/examples/echarts/dynamic.vue +43 -43
  179. package/docs/examples/echarts/line.vue +46 -46
  180. package/docs/examples/echarts/pie.vue +44 -44
  181. package/docs/examples/editor/basic.vue +15 -15
  182. package/docs/examples/form/basic.vue +663 -663
  183. package/docs/examples/form/init.vue +76 -76
  184. package/docs/examples/form/master-detail.vue +203 -203
  185. package/docs/examples/form/rule-format.vue +179 -179
  186. package/docs/examples/guid/basic.vue +10 -10
  187. package/docs/examples/guid/size.vue +13 -13
  188. package/docs/examples/hpanel/basic.vue +79 -79
  189. package/docs/examples/icon/basic.vue +9 -9
  190. package/docs/examples/icon/rotate-flip.vue +9 -9
  191. package/docs/examples/icon/size.vue +7 -7
  192. package/docs/examples/input/basic.vue +10 -10
  193. package/docs/examples/input/clearable.vue +12 -12
  194. package/docs/examples/input/disabled.vue +6 -6
  195. package/docs/examples/input/icon.vue +23 -23
  196. package/docs/examples/input/password.vue +18 -18
  197. package/docs/examples/input/size.vue +13 -13
  198. package/docs/examples/input/textarea.vue +25 -25
  199. package/docs/examples/input/word-limit.vue +28 -28
  200. package/docs/examples/input-button/basic.vue +33 -33
  201. package/docs/examples/input-cards/basic.vue +79 -79
  202. package/docs/examples/input-code/basic.vue +29 -29
  203. package/docs/examples/input-color/basic.vue +10 -10
  204. package/docs/examples/input-color/disabled.vue +13 -13
  205. package/docs/examples/input-color/format.vue +17 -17
  206. package/docs/examples/input-color/no-alpha.vue +13 -13
  207. package/docs/examples/input-color/only-button.vue +15 -15
  208. package/docs/examples/input-color/predefine.vue +31 -31
  209. package/docs/examples/input-color/size.vue +15 -15
  210. package/docs/examples/input-layer/basic.vue +86 -86
  211. package/docs/examples/input-layer/render-vnode-page.vue +160 -160
  212. package/docs/examples/input-layer/render-vnode.vue +127 -127
  213. package/docs/examples/input-rows/basic.vue +73 -73
  214. package/docs/examples/input-rows/drag.vue +48 -48
  215. package/docs/examples/input-rows/layer-form.vue +85 -85
  216. package/docs/examples/input-rows/nested.vue +91 -91
  217. package/docs/examples/input-tag/basic.vue +27 -27
  218. package/docs/examples/input-tag/colors.vue +23 -23
  219. package/docs/examples/input-tag/readonly.vue +17 -17
  220. package/docs/examples/layer/basic.vue +43 -43
  221. package/docs/examples/layer/custom-buttons.vue +61 -61
  222. package/docs/examples/layer/drawer.vue +37 -37
  223. package/docs/examples/layer/full.vue +38 -38
  224. package/docs/examples/layer/modal.vue +34 -34
  225. package/docs/examples/layer/steps.vue +46 -46
  226. package/docs/examples/layer-form/basic.vue +76 -76
  227. package/docs/examples/layer-form/config.vue +82 -82
  228. package/docs/examples/layer-form/size.vue +72 -72
  229. package/docs/examples/layout/basic.vue +36 -36
  230. package/docs/examples/layout/custom-size.vue +50 -50
  231. package/docs/examples/layout/disable-move.vue +37 -37
  232. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -96
  233. package/docs/examples/layout/min-size.vue +73 -73
  234. package/docs/examples/layout/percent-size.vue +80 -80
  235. package/docs/examples/layout/simple.vue +22 -22
  236. package/docs/examples/layout/top-side.vue +34 -34
  237. package/docs/examples/map/basic.vue +22 -22
  238. package/docs/examples/menu/basic.vue +58 -58
  239. package/docs/examples/menu/collapsed.vue +49 -49
  240. package/docs/examples/menu/horizontal.vue +44 -44
  241. package/docs/examples/menu/selection-test.vue +104 -104
  242. package/docs/examples/menu/theme.vue +46 -46
  243. package/docs/examples/menu/vertical.vue +46 -46
  244. package/docs/examples/number/advanced.vue +143 -143
  245. package/docs/examples/number/basic.vue +63 -63
  246. package/docs/examples/number/disabled.vue +49 -49
  247. package/docs/examples/number/size.vue +42 -42
  248. package/docs/examples/number/slots.vue +123 -123
  249. package/docs/examples/number/step-strictly.vue +41 -41
  250. package/docs/examples/number/step.vue +47 -47
  251. package/docs/examples/page/basic.vue +41 -41
  252. package/docs/examples/page/code-table-model.vue +428 -428
  253. package/docs/examples/page/dept-user-management.vue +211 -211
  254. package/docs/examples/page/init.vue +87 -87
  255. package/docs/examples/page/log.vue +453 -453
  256. package/docs/examples/page/user-management.vue +313 -313
  257. package/docs/examples/panel/tool-buttons.vue +18 -18
  258. package/docs/examples/radio/basic.vue +17 -17
  259. package/docs/examples/radio/button.vue +17 -17
  260. package/docs/examples/radio/color.vue +18 -18
  261. package/docs/examples/radio/disabled.vue +17 -17
  262. package/docs/examples/radio/size.vue +29 -29
  263. package/docs/examples/rate/basic.vue +24 -24
  264. package/docs/examples/rate/half.vue +24 -24
  265. package/docs/examples/rate/readonly.vue +11 -11
  266. package/docs/examples/rate/text.vue +37 -37
  267. package/docs/examples/select/basic.vue +16 -16
  268. package/docs/examples/select/clearable.vue +22 -22
  269. package/docs/examples/select/disabled.vue +31 -31
  270. package/docs/examples/select/filterable.vue +24 -24
  271. package/docs/examples/select/group.vue +23 -23
  272. package/docs/examples/select/icon.vue +16 -16
  273. package/docs/examples/select/multiple.vue +18 -18
  274. package/docs/examples/select/size.vue +39 -39
  275. package/docs/examples/slider/basic.vue +42 -42
  276. package/docs/examples/slider/disabled.vue +17 -17
  277. package/docs/examples/slider/marks.vue +30 -30
  278. package/docs/examples/slider/size.vue +37 -37
  279. package/docs/examples/slider/tooltip.vue +36 -36
  280. package/docs/examples/slider/vertical.vue +26 -26
  281. package/docs/examples/slider-captcha/basic.vue +44 -44
  282. package/docs/examples/slider-captcha/custom.vue +48 -48
  283. package/docs/examples/switch/basic.vue +16 -16
  284. package/docs/examples/switch/disabled.vue +13 -13
  285. package/docs/examples/switch/loading.vue +13 -13
  286. package/docs/examples/switch/size.vue +15 -15
  287. package/docs/examples/switch/text.vue +13 -13
  288. package/docs/examples/table/action-filter.vue +126 -126
  289. package/docs/examples/table/actions.vue +116 -116
  290. package/docs/examples/table/add-row.vue +103 -103
  291. package/docs/examples/table/basic.vue +168 -168
  292. package/docs/examples/table/checkbox-layout.vue +68 -68
  293. package/docs/examples/table/custom-layout.vue +115 -115
  294. package/docs/examples/table/dynamic-type.vue +73 -73
  295. package/docs/examples/table/editable.vue +262 -262
  296. package/docs/examples/table/field-selection.vue +87 -87
  297. package/docs/examples/table/frozen-column.vue +140 -140
  298. package/docs/examples/table/height-mode.vue +99 -99
  299. package/docs/examples/table/icon.vue +85 -85
  300. package/docs/examples/table/link.vue +66 -66
  301. package/docs/examples/table/multiple-disabled.vue +112 -0
  302. package/docs/examples/table/multiple.vue +188 -188
  303. package/docs/examples/table/pagination.vue +151 -151
  304. package/docs/examples/table/single-selection.vue +64 -64
  305. package/docs/examples/table/sub-table-lazy.vue +97 -97
  306. package/docs/examples/table/sub-table.vue +103 -103
  307. package/docs/examples/table/tag.vue +43 -43
  308. package/docs/examples/table/tree-column.vue +119 -119
  309. package/docs/examples/table/tree-data.vue +141 -141
  310. package/docs/examples/table/tree-default-expand-all.vue +60 -60
  311. package/docs/examples/table/tree-lazy.vue +80 -80
  312. package/docs/examples/table/tree-set-selection.vue +75 -75
  313. package/docs/examples/table-panel/basic.vue +229 -229
  314. package/docs/examples/table-panel/batch-operations.vue +285 -285
  315. package/docs/examples/table-panel/button-visibility.vue +88 -88
  316. package/docs/examples/table-panel/filter.vue +219 -219
  317. package/docs/examples/table-panel/get-selection.vue +111 -111
  318. package/docs/examples/table-panel/mask.vue +151 -151
  319. package/docs/examples/table-panel/multiple-selection.vue +243 -243
  320. package/docs/examples/table-panel/pagination.vue +133 -133
  321. package/docs/examples/table-panel/sub-table-lazy.vue +118 -118
  322. package/docs/examples/table-panel/tree-parent-key.vue +67 -67
  323. package/docs/examples/tabs/basic.vue +98 -98
  324. package/docs/examples/time/base.vue +67 -67
  325. package/docs/examples/title/basic.vue +87 -87
  326. package/docs/examples/tree/accordion.vue +46 -46
  327. package/docs/examples/tree/basic.vue +50 -50
  328. package/docs/examples/tree/buttons.vue +53 -53
  329. package/docs/examples/tree/checkable.vue +52 -52
  330. package/docs/examples/tree/custom-keys.vue +39 -39
  331. package/docs/examples/tree/default-expanded.vue +52 -52
  332. package/docs/examples/tree/draggable.vue +29 -29
  333. package/docs/examples/tree/expand-on-click.vue +39 -39
  334. package/docs/examples/tree/flat-data.vue +20 -20
  335. package/docs/examples/tree/icon.vue +40 -40
  336. package/docs/examples/tree/load-data.vue +37 -37
  337. package/docs/examples/tree/methods.vue +74 -74
  338. package/docs/examples/tree/theme.vue +33 -33
  339. package/docs/examples/tree-select/basic.vue +47 -47
  340. package/docs/examples/upload/accept.vue +31 -31
  341. package/docs/examples/upload/basic.vue +12 -12
  342. package/docs/examples/upload/drag.vue +11 -11
  343. package/docs/examples/upload/image.vue +17 -17
  344. package/docs/examples/upload/limit.vue +20 -20
  345. package/docs/examples/upload/multiple.vue +17 -17
  346. package/docs/examples/upload/readonly.vue +17 -17
  347. package/docs/examples/utils/cipher.vue +160 -160
  348. package/docs/examples/utils/common.vue +153 -153
  349. package/docs/examples/utils/date.vue +56 -56
  350. package/docs/examples/utils/dom.vue +52 -52
  351. package/docs/examples/utils/is.vue +70 -70
  352. package/docs/examples/workflow/basic.vue +265 -265
  353. package/docs/examples/workflow-viewer/basic.vue +248 -248
  354. package/package.json +26 -26
@@ -1,153 +1,153 @@
1
- <template>
2
- <div class="utils-demo">
3
- <h3>通用工具方法示例</h3>
4
-
5
- <div class="demo-section">
6
- <h4>1. deepClone - 深拷贝对象</h4>
7
- <div class="demo-content">
8
- <p>原始对象: {{ JSON.stringify(originalObj) }}</p>
9
- <p>深拷贝后: {{ JSON.stringify(clonedObj) }}</p>
10
- <j-button label="修改拷贝对象" @click="modifyCloned" />
11
- <p style="color: #67c23a">💡 修改拷贝对象不会影响原始对象</p>
12
- </div>
13
- </div>
14
-
15
- <div class="demo-section">
16
- <h4>2. buildUUID - 生成UUID</h4>
17
- <div class="demo-content">
18
- <p>UUID: {{ uuid }}</p>
19
- <j-button label="生成新UUID" @click="generateUUID" />
20
- </div>
21
- </div>
22
-
23
- <div class="demo-section">
24
- <h4>3. buildShortUUID - 生成短UUID</h4>
25
- <div class="demo-content">
26
- <p>短UUID: {{ shortUUID }}</p>
27
- <j-button label="生成新短UUID" @click="generateShortUUID" />
28
- </div>
29
- </div>
30
-
31
- <div class="demo-section">
32
- <h4>4. set - 通过路径设置对象属性</h4>
33
- <div class="demo-content">
34
- <p>对象: {{ JSON.stringify(pathObj) }}</p>
35
- <j-button label="设置 user.profile.name = 'Alice'" @click="setByPath" />
36
- </div>
37
- </div>
38
-
39
- <div class="demo-section">
40
- <h4>5. pagination - 数组分页</h4>
41
- <div class="demo-content">
42
- <p>数据总数: {{ dataList.length }}</p>
43
- <p>当前页: {{ currentPage }}, 每页: {{ pageSize }}</p>
44
- <p>当前页数据: {{ JSON.stringify(currentPageData) }}</p>
45
- <j-button label="下一页" @click="nextPage" />
46
- </div>
47
- </div>
48
-
49
- <div class="demo-section">
50
- <h4>6. numberToChinese - 数字转中文</h4>
51
- <div class="demo-content">
52
- <j-input v-model="numberInput" placeholder="输入数字" style="width: 200px" />
53
- <p>中文: {{ chineseNumber }}</p>
54
- </div>
55
- </div>
56
-
57
- <div class="demo-section">
58
- <h4>7. numberToThousandSeparator - 千分位分隔符</h4>
59
- <div class="demo-content">
60
- <j-input v-model="thousandInput" placeholder="输入数字" style="width: 200px" />
61
- <p>格式化: {{ formattedNumber }}</p>
62
- </div>
63
- </div>
64
- </div>
65
- </template>
66
-
67
- <script setup>
68
- import { ref, computed } from 'vue'
69
- import {
70
- deepClone,
71
- buildUUID,
72
- buildShortUUID,
73
- set,
74
- pagination,
75
- numberToChinese,
76
- numberToThousandSeparator,
77
- } from '@/core'
78
-
79
- // 深拷贝示例
80
- const originalObj = ref({ name: '张三', age: 25, hobbies: ['读书', '运动'] })
81
- const clonedObj = ref(deepClone(originalObj.value))
82
-
83
- const modifyCloned = () => {
84
- clonedObj.value.name = '李四'
85
- clonedObj.value.hobbies.push('音乐')
86
- }
87
-
88
- // UUID示例
89
- const uuid = ref(buildUUID())
90
- const generateUUID = () => {
91
- uuid.value = buildUUID()
92
- }
93
-
94
- // 短UUID示例
95
- const shortUUID = ref(buildShortUUID('prefix'))
96
- const generateShortUUID = () => {
97
- shortUUID.value = buildShortUUID('prefix')
98
- }
99
-
100
- // 路径设置示例
101
- const pathObj = ref({ user: {} })
102
- const setByPath = () => {
103
- set(pathObj.value, 'user.profile.name', 'Alice')
104
- set(pathObj.value, 'user.age', 30)
105
- }
106
-
107
- // 分页示例
108
- const dataList = ref(Array.from({ length: 50 }, (_, i) => `项目${i + 1}`))
109
- const currentPage = ref(1)
110
- const pageSize = ref(5)
111
- const currentPageData = computed(() => {
112
- return pagination(currentPage.value, pageSize.value, dataList.value)
113
- })
114
- const nextPage = () => {
115
- if (currentPage.value * pageSize.value < dataList.value.length) {
116
- currentPage.value++
117
- }
118
- }
119
-
120
- // 数字转中文示例
121
- const numberInput = ref('12345.67')
122
- const chineseNumber = computed(() => {
123
- return numberToChinese(numberInput.value)
124
- })
125
-
126
- // 千分位分隔符示例
127
- const thousandInput = ref('1234567.89')
128
- const formattedNumber = computed(() => {
129
- return numberToThousandSeparator(thousandInput.value)
130
- })
131
- </script>
132
-
133
- <style scoped>
134
- .utils-demo {
135
- padding: 20px;
136
- }
137
- .demo-section {
138
- margin-bottom: 30px;
139
- padding: 15px;
140
- border: 1px solid #eee;
141
- border-radius: 4px;
142
- }
143
- .demo-section h4 {
144
- margin-top: 0;
145
- color: #409eff;
146
- }
147
- .demo-content {
148
- margin-top: 10px;
149
- }
150
- .demo-content p {
151
- margin: 8px 0;
152
- }
153
- </style>
1
+ <template>
2
+ <div class="utils-demo">
3
+ <h3>通用工具方法示例</h3>
4
+
5
+ <div class="demo-section">
6
+ <h4>1. deepClone - 深拷贝对象</h4>
7
+ <div class="demo-content">
8
+ <p>原始对象: {{ JSON.stringify(originalObj) }}</p>
9
+ <p>深拷贝后: {{ JSON.stringify(clonedObj) }}</p>
10
+ <j-button label="修改拷贝对象" @click="modifyCloned" />
11
+ <p style="color: #67c23a">💡 修改拷贝对象不会影响原始对象</p>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="demo-section">
16
+ <h4>2. buildUUID - 生成UUID</h4>
17
+ <div class="demo-content">
18
+ <p>UUID: {{ uuid }}</p>
19
+ <j-button label="生成新UUID" @click="generateUUID" />
20
+ </div>
21
+ </div>
22
+
23
+ <div class="demo-section">
24
+ <h4>3. buildShortUUID - 生成短UUID</h4>
25
+ <div class="demo-content">
26
+ <p>短UUID: {{ shortUUID }}</p>
27
+ <j-button label="生成新短UUID" @click="generateShortUUID" />
28
+ </div>
29
+ </div>
30
+
31
+ <div class="demo-section">
32
+ <h4>4. set - 通过路径设置对象属性</h4>
33
+ <div class="demo-content">
34
+ <p>对象: {{ JSON.stringify(pathObj) }}</p>
35
+ <j-button label="设置 user.profile.name = 'Alice'" @click="setByPath" />
36
+ </div>
37
+ </div>
38
+
39
+ <div class="demo-section">
40
+ <h4>5. pagination - 数组分页</h4>
41
+ <div class="demo-content">
42
+ <p>数据总数: {{ dataList.length }}</p>
43
+ <p>当前页: {{ currentPage }}, 每页: {{ pageSize }}</p>
44
+ <p>当前页数据: {{ JSON.stringify(currentPageData) }}</p>
45
+ <j-button label="下一页" @click="nextPage" />
46
+ </div>
47
+ </div>
48
+
49
+ <div class="demo-section">
50
+ <h4>6. numberToChinese - 数字转中文</h4>
51
+ <div class="demo-content">
52
+ <j-input v-model="numberInput" placeholder="输入数字" style="width: 200px" />
53
+ <p>中文: {{ chineseNumber }}</p>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="demo-section">
58
+ <h4>7. numberToThousandSeparator - 千分位分隔符</h4>
59
+ <div class="demo-content">
60
+ <j-input v-model="thousandInput" placeholder="输入数字" style="width: 200px" />
61
+ <p>格式化: {{ formattedNumber }}</p>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </template>
66
+
67
+ <script setup>
68
+ import { ref, computed } from 'vue'
69
+ import {
70
+ deepClone,
71
+ buildUUID,
72
+ buildShortUUID,
73
+ set,
74
+ pagination,
75
+ numberToChinese,
76
+ numberToThousandSeparator,
77
+ } from '@/core'
78
+
79
+ // 深拷贝示例
80
+ const originalObj = ref({ name: '张三', age: 25, hobbies: ['读书', '运动'] })
81
+ const clonedObj = ref(deepClone(originalObj.value))
82
+
83
+ const modifyCloned = () => {
84
+ clonedObj.value.name = '李四'
85
+ clonedObj.value.hobbies.push('音乐')
86
+ }
87
+
88
+ // UUID示例
89
+ const uuid = ref(buildUUID())
90
+ const generateUUID = () => {
91
+ uuid.value = buildUUID()
92
+ }
93
+
94
+ // 短UUID示例
95
+ const shortUUID = ref(buildShortUUID('prefix'))
96
+ const generateShortUUID = () => {
97
+ shortUUID.value = buildShortUUID('prefix')
98
+ }
99
+
100
+ // 路径设置示例
101
+ const pathObj = ref({ user: {} })
102
+ const setByPath = () => {
103
+ set(pathObj.value, 'user.profile.name', 'Alice')
104
+ set(pathObj.value, 'user.age', 30)
105
+ }
106
+
107
+ // 分页示例
108
+ const dataList = ref(Array.from({ length: 50 }, (_, i) => `项目${i + 1}`))
109
+ const currentPage = ref(1)
110
+ const pageSize = ref(5)
111
+ const currentPageData = computed(() => {
112
+ return pagination(currentPage.value, pageSize.value, dataList.value)
113
+ })
114
+ const nextPage = () => {
115
+ if (currentPage.value * pageSize.value < dataList.value.length) {
116
+ currentPage.value++
117
+ }
118
+ }
119
+
120
+ // 数字转中文示例
121
+ const numberInput = ref('12345.67')
122
+ const chineseNumber = computed(() => {
123
+ return numberToChinese(numberInput.value)
124
+ })
125
+
126
+ // 千分位分隔符示例
127
+ const thousandInput = ref('1234567.89')
128
+ const formattedNumber = computed(() => {
129
+ return numberToThousandSeparator(thousandInput.value)
130
+ })
131
+ </script>
132
+
133
+ <style scoped>
134
+ .utils-demo {
135
+ padding: 20px;
136
+ }
137
+ .demo-section {
138
+ margin-bottom: 30px;
139
+ padding: 15px;
140
+ border: 1px solid #eee;
141
+ border-radius: 4px;
142
+ }
143
+ .demo-section h4 {
144
+ margin-top: 0;
145
+ color: #409eff;
146
+ }
147
+ .demo-content {
148
+ margin-top: 10px;
149
+ }
150
+ .demo-content p {
151
+ margin: 8px 0;
152
+ }
153
+ </style>
@@ -1,56 +1,56 @@
1
- <template>
2
- <div class="utils-demo">
3
- <h3>日期工具方法示例</h3>
4
-
5
- <div class="demo-section">
6
- <h4>1. formatToDateTime - 格式化为日期时间</h4>
7
- <div class="demo-content">
8
- <p>当前时间: {{ formatToDateTime(currentDate) }}</p>
9
- <p>自定义格式: {{ formatToDateTime(currentDate, 'YYYY年MM月DD日 HH:mm:ss') }}</p>
10
- <j-button label="更新时间" @click="updateTime" />
11
- </div>
12
- </div>
13
-
14
- <div class="demo-section">
15
- <h4>2. formatToDate - 格式化为日期</h4>
16
- <div class="demo-content">
17
- <p>当前日期: {{ formatToDate(currentDate) }}</p>
18
- <p>自定义格式: {{ formatToDate(currentDate, 'YYYY/MM/DD') }}</p>
19
- <p style="color: #67c23a">💡 常用于日期选择器的值格式化</p>
20
- </div>
21
- </div>
22
- </div>
23
- </template>
24
-
25
- <script setup>
26
- import { ref } from 'vue'
27
- import { formatToDateTime, formatToDate } from '@/core'
28
-
29
- const currentDate = ref(new Date())
30
-
31
- const updateTime = () => {
32
- currentDate.value = new Date()
33
- }
34
- </script>
35
-
36
- <style scoped>
37
- .utils-demo {
38
- padding: 20px;
39
- }
40
- .demo-section {
41
- margin-bottom: 30px;
42
- padding: 15px;
43
- border: 1px solid #eee;
44
- border-radius: 4px;
45
- }
46
- .demo-section h4 {
47
- margin-top: 0;
48
- color: #409eff;
49
- }
50
- .demo-content {
51
- margin-top: 10px;
52
- }
53
- .demo-content p {
54
- margin: 8px 0;
55
- }
56
- </style>
1
+ <template>
2
+ <div class="utils-demo">
3
+ <h3>日期工具方法示例</h3>
4
+
5
+ <div class="demo-section">
6
+ <h4>1. formatToDateTime - 格式化为日期时间</h4>
7
+ <div class="demo-content">
8
+ <p>当前时间: {{ formatToDateTime(currentDate) }}</p>
9
+ <p>自定义格式: {{ formatToDateTime(currentDate, 'YYYY年MM月DD日 HH:mm:ss') }}</p>
10
+ <j-button label="更新时间" @click="updateTime" />
11
+ </div>
12
+ </div>
13
+
14
+ <div class="demo-section">
15
+ <h4>2. formatToDate - 格式化为日期</h4>
16
+ <div class="demo-content">
17
+ <p>当前日期: {{ formatToDate(currentDate) }}</p>
18
+ <p>自定义格式: {{ formatToDate(currentDate, 'YYYY/MM/DD') }}</p>
19
+ <p style="color: #67c23a">💡 常用于日期选择器的值格式化</p>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </template>
24
+
25
+ <script setup>
26
+ import { ref } from 'vue'
27
+ import { formatToDateTime, formatToDate } from '@/core'
28
+
29
+ const currentDate = ref(new Date())
30
+
31
+ const updateTime = () => {
32
+ currentDate.value = new Date()
33
+ }
34
+ </script>
35
+
36
+ <style scoped>
37
+ .utils-demo {
38
+ padding: 20px;
39
+ }
40
+ .demo-section {
41
+ margin-bottom: 30px;
42
+ padding: 15px;
43
+ border: 1px solid #eee;
44
+ border-radius: 4px;
45
+ }
46
+ .demo-section h4 {
47
+ margin-top: 0;
48
+ color: #409eff;
49
+ }
50
+ .demo-content {
51
+ margin-top: 10px;
52
+ }
53
+ .demo-content p {
54
+ margin: 8px 0;
55
+ }
56
+ </style>
@@ -1,52 +1,52 @@
1
- <template>
2
- <div class="utils-demo">
3
- <h3>DOM工具方法示例</h3>
4
-
5
- <div class="demo-section">
6
- <h4>fullScreenLoading - 全屏加载</h4>
7
- <div class="demo-content">
8
- <j-button label="显示全屏加载" type="primary" @click="showLoading" />
9
- <j-button label="隐藏全屏加载" @click="hideLoading" />
10
- <p style="color: #67c23a">💡 点击按钮查看全屏加载效果,3秒后自动关闭</p>
11
- </div>
12
- </div>
13
- </div>
14
- </template>
15
-
16
- <script setup>
17
- import { fullScreenLoading } from '@/core'
18
-
19
- const showLoading = () => {
20
- fullScreenLoading(true)
21
- // 3秒后自动关闭
22
- setTimeout(() => {
23
- fullScreenLoading(false)
24
- }, 3000)
25
- }
26
-
27
- const hideLoading = () => {
28
- fullScreenLoading(false)
29
- }
30
- </script>
31
-
32
- <style scoped>
33
- .utils-demo {
34
- padding: 20px;
35
- }
36
- .demo-section {
37
- margin-bottom: 30px;
38
- padding: 15px;
39
- border: 1px solid #eee;
40
- border-radius: 4px;
41
- }
42
- .demo-section h4 {
43
- margin-top: 0;
44
- color: #409eff;
45
- }
46
- .demo-content {
47
- margin-top: 10px;
48
- }
49
- .demo-content p {
50
- margin: 8px 0;
51
- }
52
- </style>
1
+ <template>
2
+ <div class="utils-demo">
3
+ <h3>DOM工具方法示例</h3>
4
+
5
+ <div class="demo-section">
6
+ <h4>fullScreenLoading - 全屏加载</h4>
7
+ <div class="demo-content">
8
+ <j-button label="显示全屏加载" type="primary" @click="showLoading" />
9
+ <j-button label="隐藏全屏加载" @click="hideLoading" />
10
+ <p style="color: #67c23a">💡 点击按钮查看全屏加载效果,3秒后自动关闭</p>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </template>
15
+
16
+ <script setup>
17
+ import { fullScreenLoading } from '@/core'
18
+
19
+ const showLoading = () => {
20
+ fullScreenLoading(true)
21
+ // 3秒后自动关闭
22
+ setTimeout(() => {
23
+ fullScreenLoading(false)
24
+ }, 3000)
25
+ }
26
+
27
+ const hideLoading = () => {
28
+ fullScreenLoading(false)
29
+ }
30
+ </script>
31
+
32
+ <style scoped>
33
+ .utils-demo {
34
+ padding: 20px;
35
+ }
36
+ .demo-section {
37
+ margin-bottom: 30px;
38
+ padding: 15px;
39
+ border: 1px solid #eee;
40
+ border-radius: 4px;
41
+ }
42
+ .demo-section h4 {
43
+ margin-top: 0;
44
+ color: #409eff;
45
+ }
46
+ .demo-content {
47
+ margin-top: 10px;
48
+ }
49
+ .demo-content p {
50
+ margin: 8px 0;
51
+ }
52
+ </style>
@@ -1,70 +1,70 @@
1
- <template>
2
- <div class="utils-demo">
3
- <h3>类型判断工具方法示例</h3>
4
-
5
- <div class="demo-section">
6
- <h4>1. isArray - 判断是否为数组</h4>
7
- <div class="demo-content">
8
- <p>测试值: {{ JSON.stringify(testArray) }}</p>
9
- <p>是否为数组: {{ isArray(testArray) ? '是' : '否' }}</p>
10
- <p>测试值: {{ testString }}</p>
11
- <p>是否为数组: {{ isArray(testString) ? '是' : '否' }}</p>
12
- </div>
13
- </div>
14
-
15
- <div class="demo-section">
16
- <h4>2. isObject - 判断是否为对象</h4>
17
- <div class="demo-content">
18
- <p>测试值: {{ JSON.stringify(testObj) }}</p>
19
- <p>是否为对象: {{ isObject(testObj) ? '是' : '否' }}</p>
20
- <p>测试值: {{ testNull }}</p>
21
- <p>是否为对象: {{ isObject(testNull) ? '是' : '否' }}</p>
22
- </div>
23
- </div>
24
-
25
- <div class="demo-section">
26
- <h4>3. isNullOrEmpty - 判断是否为空</h4>
27
- <div class="demo-content">
28
- <p>null: {{ isNullOrEmpty(null) ? '是空' : '不是空' }}</p>
29
- <p>undefined: {{ isNullOrEmpty(undefined) ? '是空' : '不是空' }}</p>
30
- <p>'': {{ isNullOrEmpty('') ? '是空' : '不是空' }}</p>
31
- <p>[]: {{ isNullOrEmpty([]) ? '是空' : '不是空' }}</p>
32
- <p>{}: {{ isNullOrEmpty({}) ? '是空' : '不是空' }}</p>
33
- <p>'hello': {{ isNullOrEmpty('hello') ? '是空' : '不是空' }}</p>
34
- <p style="color: #67c23a">💡 可用于表单验证,判断值是否有效</p>
35
- </div>
36
- </div>
37
- </div>
38
- </template>
39
-
40
- <script setup>
41
- import { ref } from 'vue'
42
- import { isArray, isObject, isNullOrEmpty } from '@/core'
43
-
44
- const testArray = ref([1, 2, 3])
45
- const testString = ref('hello')
46
- const testObj = ref({ name: '测试' })
47
- const testNull = ref(null)
48
- </script>
49
-
50
- <style scoped>
51
- .utils-demo {
52
- padding: 20px;
53
- }
54
- .demo-section {
55
- margin-bottom: 30px;
56
- padding: 15px;
57
- border: 1px solid #eee;
58
- border-radius: 4px;
59
- }
60
- .demo-section h4 {
61
- margin-top: 0;
62
- color: #409eff;
63
- }
64
- .demo-content {
65
- margin-top: 10px;
66
- }
67
- .demo-content p {
68
- margin: 8px 0;
69
- }
70
- </style>
1
+ <template>
2
+ <div class="utils-demo">
3
+ <h3>类型判断工具方法示例</h3>
4
+
5
+ <div class="demo-section">
6
+ <h4>1. isArray - 判断是否为数组</h4>
7
+ <div class="demo-content">
8
+ <p>测试值: {{ JSON.stringify(testArray) }}</p>
9
+ <p>是否为数组: {{ isArray(testArray) ? '是' : '否' }}</p>
10
+ <p>测试值: {{ testString }}</p>
11
+ <p>是否为数组: {{ isArray(testString) ? '是' : '否' }}</p>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="demo-section">
16
+ <h4>2. isObject - 判断是否为对象</h4>
17
+ <div class="demo-content">
18
+ <p>测试值: {{ JSON.stringify(testObj) }}</p>
19
+ <p>是否为对象: {{ isObject(testObj) ? '是' : '否' }}</p>
20
+ <p>测试值: {{ testNull }}</p>
21
+ <p>是否为对象: {{ isObject(testNull) ? '是' : '否' }}</p>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="demo-section">
26
+ <h4>3. isNullOrEmpty - 判断是否为空</h4>
27
+ <div class="demo-content">
28
+ <p>null: {{ isNullOrEmpty(null) ? '是空' : '不是空' }}</p>
29
+ <p>undefined: {{ isNullOrEmpty(undefined) ? '是空' : '不是空' }}</p>
30
+ <p>'': {{ isNullOrEmpty('') ? '是空' : '不是空' }}</p>
31
+ <p>[]: {{ isNullOrEmpty([]) ? '是空' : '不是空' }}</p>
32
+ <p>{}: {{ isNullOrEmpty({}) ? '是空' : '不是空' }}</p>
33
+ <p>'hello': {{ isNullOrEmpty('hello') ? '是空' : '不是空' }}</p>
34
+ <p style="color: #67c23a">💡 可用于表单验证,判断值是否有效</p>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+ <script setup>
41
+ import { ref } from 'vue'
42
+ import { isArray, isObject, isNullOrEmpty } from '@/core'
43
+
44
+ const testArray = ref([1, 2, 3])
45
+ const testString = ref('hello')
46
+ const testObj = ref({ name: '测试' })
47
+ const testNull = ref(null)
48
+ </script>
49
+
50
+ <style scoped>
51
+ .utils-demo {
52
+ padding: 20px;
53
+ }
54
+ .demo-section {
55
+ margin-bottom: 30px;
56
+ padding: 15px;
57
+ border: 1px solid #eee;
58
+ border-radius: 4px;
59
+ }
60
+ .demo-section h4 {
61
+ margin-top: 0;
62
+ color: #409eff;
63
+ }
64
+ .demo-content {
65
+ margin-top: 10px;
66
+ }
67
+ .demo-content p {
68
+ margin: 8px 0;
69
+ }
70
+ </style>