@a2simcode/ui 0.0.46 → 0.0.48

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 (335) 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 -0
  4. package/dist/simcode-ui.es.js +222 -195
  5. package/dist/simcode-ui.umd.js +2 -2
  6. package/dist/stats.html +1 -1
  7. package/docs/components/autocomplete.md +89 -0
  8. package/docs/components/barcode.md +101 -0
  9. package/docs/components/button-select.md +24 -0
  10. package/docs/components/button.md +117 -0
  11. package/docs/components/buttons.md +119 -0
  12. package/docs/components/cascader-select.md +114 -0
  13. package/docs/components/checkbox.md +114 -0
  14. package/docs/components/code-mirror.md +85 -0
  15. package/docs/components/collapse.md +26 -0
  16. package/docs/components/comp.md +71 -0
  17. package/docs/components/count-up.md +24 -0
  18. package/docs/components/count.md +24 -0
  19. package/docs/components/data-panel.md +24 -0
  20. package/docs/components/dialog-full.md +112 -0
  21. package/docs/components/dialog.md +127 -0
  22. package/docs/components/divider.md +24 -0
  23. package/docs/components/drawer.md +127 -0
  24. package/docs/components/dynamic-layer.md +118 -0
  25. package/docs/components/echarts.md +72 -0
  26. package/docs/components/editor.md +24 -0
  27. package/docs/components/form.md +27 -0
  28. package/docs/components/guid.md +39 -0
  29. package/docs/components/hpanel.md +24 -0
  30. package/docs/components/icon.md +56 -0
  31. package/docs/components/input-button.md +24 -0
  32. package/docs/components/input-code.md +24 -0
  33. package/docs/components/input-color.md +114 -0
  34. package/docs/components/input-layer.md +26 -0
  35. package/docs/components/input-rows.md +370 -0
  36. package/docs/components/input-tag.md +50 -0
  37. package/docs/components/input.md +129 -0
  38. package/docs/components/layer-form.md +61 -0
  39. package/docs/components/layer.md +127 -0
  40. package/docs/components/layout.md +132 -0
  41. package/docs/components/map.md +24 -0
  42. package/docs/components/menu.md +121 -0
  43. package/docs/components/meta/autocomplete.ts +335 -0
  44. package/docs/components/meta/barcode.ts +216 -0
  45. package/docs/components/meta/button-select.ts +94 -0
  46. package/docs/components/meta/button.ts +123 -0
  47. package/docs/components/meta/buttons.ts +56 -0
  48. package/docs/components/meta/cascader-select.ts +328 -0
  49. package/docs/components/meta/checkbox.ts +194 -0
  50. package/docs/components/meta/code-mirror.ts +108 -0
  51. package/docs/components/meta/collapse.ts +52 -0
  52. package/docs/components/meta/comp.ts +224 -0
  53. package/docs/components/meta/count-up.ts +126 -0
  54. package/docs/components/meta/count.ts +113 -0
  55. package/docs/components/meta/data-panel.ts +34 -0
  56. package/docs/components/meta/dialog-full.ts +133 -0
  57. package/docs/components/meta/dialog.ts +175 -0
  58. package/docs/components/meta/divider.ts +66 -0
  59. package/docs/components/meta/drawer.ts +158 -0
  60. package/docs/components/meta/dynamic-layer.ts +99 -0
  61. package/docs/components/meta/echarts.ts +64 -0
  62. package/docs/components/meta/editor.ts +67 -0
  63. package/docs/components/meta/form-item.ts +50 -0
  64. package/docs/components/meta/form.ts +160 -0
  65. package/docs/components/meta/guid.ts +42 -0
  66. package/docs/components/meta/hpanel.ts +20 -0
  67. package/docs/components/meta/icon.ts +68 -0
  68. package/docs/components/meta/input-button.ts +165 -0
  69. package/docs/components/meta/input-code.ts +151 -0
  70. package/docs/components/meta/input-color.ts +243 -0
  71. package/docs/components/meta/input-layer.ts +336 -0
  72. package/docs/components/meta/input-rows.ts +113 -0
  73. package/docs/components/meta/input-tag.ts +112 -0
  74. package/docs/components/meta/input.ts +411 -0
  75. package/docs/components/meta/layer-form.ts +56 -0
  76. package/docs/components/meta/layer.ts +122 -0
  77. package/docs/components/meta/layout.ts +101 -0
  78. package/docs/components/meta/map.ts +68 -0
  79. package/docs/components/meta/menu.ts +43 -0
  80. package/docs/components/meta/number.ts +296 -0
  81. package/docs/components/meta/page.ts +67 -0
  82. package/docs/components/meta/radio.ts +55 -0
  83. package/docs/components/meta/rate.ts +124 -0
  84. package/docs/components/meta/select.ts +279 -0
  85. package/docs/components/meta/slider-captcha.ts +70 -0
  86. package/docs/components/meta/slider.ts +270 -0
  87. package/docs/components/meta/switch.ts +272 -0
  88. package/docs/components/meta/table-panel.ts +154 -0
  89. package/docs/components/meta/table.ts +328 -0
  90. package/docs/components/meta/tabs.ts +136 -0
  91. package/docs/components/meta/title.ts +80 -0
  92. package/docs/components/meta/tree.ts +242 -0
  93. package/docs/components/meta/upload.ts +186 -0
  94. package/docs/components/meta/workflow-viewer.ts +55 -0
  95. package/docs/components/meta/workflow.ts +113 -0
  96. package/docs/components/number.md +124 -0
  97. package/docs/components/page.md +42 -0
  98. package/docs/components/radio.md +87 -0
  99. package/docs/components/rate.md +71 -0
  100. package/docs/components/select.md +133 -0
  101. package/docs/components/slider-captcha.md +41 -0
  102. package/docs/components/slider.md +101 -0
  103. package/docs/components/switch.md +90 -0
  104. package/docs/components/table-panel.md +199 -0
  105. package/docs/components/table.md +202 -0
  106. package/docs/components/tabs.md +26 -0
  107. package/docs/components/title.md +24 -0
  108. package/docs/components/tree.md +207 -0
  109. package/docs/components/upload.md +117 -0
  110. package/docs/components/workflow-viewer.md +21 -0
  111. package/docs/components/workflow.md +21 -0
  112. package/docs/examples/autocomplete/advanced.vue +35 -0
  113. package/docs/examples/autocomplete/basic.vue +32 -0
  114. package/docs/examples/autocomplete/clearable.vue +33 -0
  115. package/docs/examples/autocomplete/custom-template.vue +49 -0
  116. package/docs/examples/autocomplete/disabled.vue +33 -0
  117. package/docs/examples/autocomplete/icon.vue +37 -0
  118. package/docs/examples/barcode/all-types.vue +380 -0
  119. package/docs/examples/barcode/basic.vue +14 -0
  120. package/docs/examples/barcode/props-appearance.vue +243 -0
  121. package/docs/examples/barcode/props-geometry.vue +143 -0
  122. package/docs/examples/barcode/props-logic.vue +216 -0
  123. package/docs/examples/barcode/props-symbology.vue +199 -0
  124. package/docs/examples/barcode/props-text.vue +268 -0
  125. package/docs/examples/button/basic.vue +7 -0
  126. package/docs/examples/button/danger-ghost.vue +17 -0
  127. package/docs/examples/button/disabled.vue +10 -0
  128. package/docs/examples/button/loading.vue +6 -0
  129. package/docs/examples/button/shape.vue +7 -0
  130. package/docs/examples/button/size.vue +14 -0
  131. package/docs/examples/button/type.vue +9 -0
  132. package/docs/examples/button-select/basic.vue +19 -0
  133. package/docs/examples/buttons/basic.vue +45 -0
  134. package/docs/examples/buttons/disabled.vue +36 -0
  135. package/docs/examples/buttons/dropdown.vue +63 -0
  136. package/docs/examples/buttons/group.vue +52 -0
  137. package/docs/examples/buttons/link.vue +47 -0
  138. package/docs/examples/buttons/popup.vue +39 -0
  139. package/docs/examples/buttons/size.vue +45 -0
  140. package/docs/examples/cascader-select/basic.vue +28 -0
  141. package/docs/examples/cascader-select/clearable.vue +34 -0
  142. package/docs/examples/cascader-select/disabled.vue +43 -0
  143. package/docs/examples/cascader-select/filterable.vue +37 -0
  144. package/docs/examples/cascader-select/methods.vue +84 -0
  145. package/docs/examples/cascader-select/multiple.vue +38 -0
  146. package/docs/examples/cascader-select/slot.vue +45 -0
  147. package/docs/examples/checkbox/basic.vue +18 -0
  148. package/docs/examples/checkbox/button.vue +19 -0
  149. package/docs/examples/checkbox/color.vue +25 -0
  150. package/docs/examples/checkbox/disabled.vue +17 -0
  151. package/docs/examples/checkbox/min-max.vue +20 -0
  152. package/docs/examples/checkbox/mixed.vue +56 -0
  153. package/docs/examples/checkbox/size.vue +28 -0
  154. package/docs/examples/code-mirror/basic.vue +11 -0
  155. package/docs/examples/code-mirror/events.vue +42 -0
  156. package/docs/examples/code-mirror/height.vue +25 -0
  157. package/docs/examples/code-mirror/mode.vue +33 -0
  158. package/docs/examples/code-mirror/readonly.vue +14 -0
  159. package/docs/examples/collapse/basic.vue +82 -0
  160. package/docs/examples/comp/basic.vue +7 -0
  161. package/docs/examples/comp/collapse.vue +38 -0
  162. package/docs/examples/comp/tabs.vue +38 -0
  163. package/docs/examples/count/basic.vue +54 -0
  164. package/docs/examples/count-up/basic.vue +89 -0
  165. package/docs/examples/data-panel/basic.vue +110 -0
  166. package/docs/examples/dialog/basic.vue +36 -0
  167. package/docs/examples/dialog/custom-buttons.vue +44 -0
  168. package/docs/examples/dialog/fullscreen.vue +23 -0
  169. package/docs/examples/dialog/no-mask.vue +17 -0
  170. package/docs/examples/dialog/size.vue +44 -0
  171. package/docs/examples/dialog/steps.vue +57 -0
  172. package/docs/examples/dialog-full/basic.vue +29 -0
  173. package/docs/examples/dialog-full/custom-buttons.vue +45 -0
  174. package/docs/examples/dialog-full/no-buttons.vue +18 -0
  175. package/docs/examples/dialog-full/no-header.vue +27 -0
  176. package/docs/examples/dialog-full/steps.vue +71 -0
  177. package/docs/examples/divider/basic.vue +52 -0
  178. package/docs/examples/drawer/basic.vue +35 -0
  179. package/docs/examples/drawer/custom-buttons.vue +34 -0
  180. package/docs/examples/drawer/direction.vue +47 -0
  181. package/docs/examples/drawer/mask.vue +36 -0
  182. package/docs/examples/drawer/no-buttons.vue +20 -0
  183. package/docs/examples/drawer/size.vue +28 -0
  184. package/docs/examples/dynamic-layer/basic.vue +33 -0
  185. package/docs/examples/dynamic-layer/custom-buttons.vue +43 -0
  186. package/docs/examples/dynamic-layer/form.vue +73 -0
  187. package/docs/examples/dynamic-layer/steps.vue +52 -0
  188. package/docs/examples/dynamic-layer/types.vue +40 -0
  189. package/docs/examples/echarts/basic.vue +31 -0
  190. package/docs/examples/echarts/dynamic.vue +43 -0
  191. package/docs/examples/echarts/line.vue +46 -0
  192. package/docs/examples/echarts/pie.vue +44 -0
  193. package/docs/examples/editor/basic.vue +15 -0
  194. package/docs/examples/form/basic.vue +224 -0
  195. package/docs/examples/guid/basic.vue +10 -0
  196. package/docs/examples/guid/size.vue +13 -0
  197. package/docs/examples/hpanel/basic.vue +79 -0
  198. package/docs/examples/icon/basic.vue +9 -0
  199. package/docs/examples/icon/rotate-flip.vue +9 -0
  200. package/docs/examples/icon/size.vue +7 -0
  201. package/docs/examples/input/basic.vue +10 -0
  202. package/docs/examples/input/clearable.vue +12 -0
  203. package/docs/examples/input/disabled.vue +6 -0
  204. package/docs/examples/input/icon.vue +23 -0
  205. package/docs/examples/input/password.vue +18 -0
  206. package/docs/examples/input/size.vue +13 -0
  207. package/docs/examples/input/textarea.vue +25 -0
  208. package/docs/examples/input/word-limit.vue +28 -0
  209. package/docs/examples/input-button/basic.vue +33 -0
  210. package/docs/examples/input-code/basic.vue +29 -0
  211. package/docs/examples/input-color/basic.vue +10 -0
  212. package/docs/examples/input-color/disabled.vue +13 -0
  213. package/docs/examples/input-color/format.vue +17 -0
  214. package/docs/examples/input-color/no-alpha.vue +13 -0
  215. package/docs/examples/input-color/only-button.vue +15 -0
  216. package/docs/examples/input-color/predefine.vue +31 -0
  217. package/docs/examples/input-color/size.vue +15 -0
  218. package/docs/examples/input-layer/basic.vue +69 -0
  219. package/docs/examples/input-rows/basic.vue +73 -0
  220. package/docs/examples/input-rows/drag.vue +48 -0
  221. package/docs/examples/input-rows/layer-form.vue +85 -0
  222. package/docs/examples/input-rows/nested.vue +91 -0
  223. package/docs/examples/input-tag/basic.vue +27 -0
  224. package/docs/examples/input-tag/colors.vue +23 -0
  225. package/docs/examples/input-tag/readonly.vue +17 -0
  226. package/docs/examples/layer/basic.vue +43 -0
  227. package/docs/examples/layer/custom-buttons.vue +61 -0
  228. package/docs/examples/layer/drawer.vue +37 -0
  229. package/docs/examples/layer/full.vue +38 -0
  230. package/docs/examples/layer/modal.vue +34 -0
  231. package/docs/examples/layer/steps.vue +46 -0
  232. package/docs/examples/layer-form/basic.vue +76 -0
  233. package/docs/examples/layer-form/config.vue +82 -0
  234. package/docs/examples/layer-form/size.vue +72 -0
  235. package/docs/examples/layout/basic.vue +36 -0
  236. package/docs/examples/layout/custom-size.vue +50 -0
  237. package/docs/examples/layout/disable-move.vue +37 -0
  238. package/docs/examples/layout/hide-mid-when-narrow.vue +96 -0
  239. package/docs/examples/layout/min-size.vue +73 -0
  240. package/docs/examples/layout/percent-size.vue +80 -0
  241. package/docs/examples/layout/simple.vue +22 -0
  242. package/docs/examples/layout/top-side.vue +34 -0
  243. package/docs/examples/map/basic.vue +22 -0
  244. package/docs/examples/menu/basic.vue +58 -0
  245. package/docs/examples/menu/collapsed.vue +49 -0
  246. package/docs/examples/menu/horizontal.vue +44 -0
  247. package/docs/examples/menu/selection-test.vue +104 -0
  248. package/docs/examples/menu/theme.vue +46 -0
  249. package/docs/examples/menu/vertical.vue +46 -0
  250. package/docs/examples/number/advanced.vue +143 -0
  251. package/docs/examples/number/basic.vue +63 -0
  252. package/docs/examples/number/disabled.vue +49 -0
  253. package/docs/examples/number/size.vue +42 -0
  254. package/docs/examples/number/slots.vue +123 -0
  255. package/docs/examples/number/step-strictly.vue +41 -0
  256. package/docs/examples/number/step.vue +47 -0
  257. package/docs/examples/page/basic.vue +41 -0
  258. package/docs/examples/page/init.vue +87 -0
  259. package/docs/examples/radio/basic.vue +17 -0
  260. package/docs/examples/radio/button.vue +17 -0
  261. package/docs/examples/radio/color.vue +18 -0
  262. package/docs/examples/radio/disabled.vue +17 -0
  263. package/docs/examples/radio/size.vue +29 -0
  264. package/docs/examples/rate/basic.vue +24 -0
  265. package/docs/examples/rate/half.vue +24 -0
  266. package/docs/examples/rate/readonly.vue +11 -0
  267. package/docs/examples/rate/text.vue +32 -0
  268. package/docs/examples/select/basic.vue +16 -0
  269. package/docs/examples/select/clearable.vue +22 -0
  270. package/docs/examples/select/disabled.vue +31 -0
  271. package/docs/examples/select/filterable.vue +24 -0
  272. package/docs/examples/select/group.vue +23 -0
  273. package/docs/examples/select/icon.vue +16 -0
  274. package/docs/examples/select/multiple.vue +18 -0
  275. package/docs/examples/select/size.vue +39 -0
  276. package/docs/examples/slider/basic.vue +42 -0
  277. package/docs/examples/slider/disabled.vue +17 -0
  278. package/docs/examples/slider/marks.vue +30 -0
  279. package/docs/examples/slider/size.vue +37 -0
  280. package/docs/examples/slider/tooltip.vue +36 -0
  281. package/docs/examples/slider/vertical.vue +26 -0
  282. package/docs/examples/slider-captcha/basic.vue +44 -0
  283. package/docs/examples/slider-captcha/custom.vue +48 -0
  284. package/docs/examples/switch/basic.vue +16 -0
  285. package/docs/examples/switch/disabled.vue +13 -0
  286. package/docs/examples/switch/loading.vue +13 -0
  287. package/docs/examples/switch/size.vue +15 -0
  288. package/docs/examples/switch/text.vue +13 -0
  289. package/docs/examples/table/actions.vue +116 -0
  290. package/docs/examples/table/add-row.vue +103 -0
  291. package/docs/examples/table/basic.vue +168 -0
  292. package/docs/examples/table/editable.vue +261 -0
  293. package/docs/examples/table/field-selection.vue +87 -0
  294. package/docs/examples/table/frozen-column.vue +140 -0
  295. package/docs/examples/table/height-mode.vue +99 -0
  296. package/docs/examples/table/multiple.vue +178 -0
  297. package/docs/examples/table/pagination.vue +151 -0
  298. package/docs/examples/table/single-selection.vue +64 -0
  299. package/docs/examples/table/tree-column.vue +119 -0
  300. package/docs/examples/table/tree-data.vue +141 -0
  301. package/docs/examples/table-panel/basic.vue +228 -0
  302. package/docs/examples/table-panel/batch-operations.vue +285 -0
  303. package/docs/examples/table-panel/filter.vue +209 -0
  304. package/docs/examples/table-panel/multiple-selection.vue +243 -0
  305. package/docs/examples/table-panel/pagination.vue +133 -0
  306. package/docs/examples/tabs/basic.vue +98 -0
  307. package/docs/examples/title/basic.vue +80 -0
  308. package/docs/examples/tree/accordion.vue +46 -0
  309. package/docs/examples/tree/basic.vue +50 -0
  310. package/docs/examples/tree/buttons.vue +53 -0
  311. package/docs/examples/tree/checkable.vue +52 -0
  312. package/docs/examples/tree/custom-keys.vue +39 -0
  313. package/docs/examples/tree/default-expanded.vue +52 -0
  314. package/docs/examples/tree/draggable.vue +29 -0
  315. package/docs/examples/tree/expand-on-click.vue +39 -0
  316. package/docs/examples/tree/flat-data.vue +20 -0
  317. package/docs/examples/tree/icon.vue +40 -0
  318. package/docs/examples/tree/load-data.vue +37 -0
  319. package/docs/examples/tree/methods.vue +74 -0
  320. package/docs/examples/tree/theme.vue +33 -0
  321. package/docs/examples/upload/accept.vue +31 -0
  322. package/docs/examples/upload/basic.vue +12 -0
  323. package/docs/examples/upload/drag.vue +11 -0
  324. package/docs/examples/upload/image.vue +17 -0
  325. package/docs/examples/upload/limit.vue +20 -0
  326. package/docs/examples/upload/multiple.vue +17 -0
  327. package/docs/examples/upload/readonly.vue +17 -0
  328. package/docs/examples/utils/cipher.vue +160 -0
  329. package/docs/examples/utils/common.vue +153 -0
  330. package/docs/examples/utils/date.vue +56 -0
  331. package/docs/examples/utils/dom.vue +52 -0
  332. package/docs/examples/utils/is.vue +70 -0
  333. package/docs/examples/workflow/basic.vue +265 -0
  334. package/docs/examples/workflow-viewer/basic.vue +248 -0
  335. package/package.json +6 -2
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <div class="utils-demo">
3
+ <h3>加密工具方法示例</h3>
4
+
5
+ <div class="demo-section">
6
+ <h4>1. AES加密/解密</h4>
7
+ <div class="demo-content">
8
+ <j-input v-model="plainText" placeholder="输入明文" style="width: 300px" />
9
+ <j-input v-model="aesKey" placeholder="输入密钥" style="width: 300px; margin-top: 10px" />
10
+ <div style="margin-top: 10px">
11
+ <j-button label="AES加密" type="primary" @click="doAesEncrypt" />
12
+ <j-button label="AES解密" @click="doAesDecrypt" />
13
+ </div>
14
+ <p>加密结果: {{ encryptedText }}</p>
15
+ <p>解密结果: {{ decryptedText }}</p>
16
+ <p style="color: #67c23a">💡 AES加密适用于敏感数据传输</p>
17
+ </div>
18
+ </div>
19
+
20
+ <div class="demo-section">
21
+ <h4>2. Base64编码/解码</h4>
22
+ <div class="demo-content">
23
+ <j-input v-model="base64Text" placeholder="输入文本" style="width: 300px" />
24
+ <div style="margin-top: 10px">
25
+ <j-button label="Base64编码" type="primary" @click="doBase64Encode" />
26
+ <j-button label="Base64解码" @click="doBase64Decode" />
27
+ </div>
28
+ <p>编码结果: {{ base64Encoded }}</p>
29
+ <p>解码结果: {{ base64Decoded }}</p>
30
+ </div>
31
+ </div>
32
+
33
+ <div class="demo-section">
34
+ <h4>3. MD5哈希</h4>
35
+ <div class="demo-content">
36
+ <j-input v-model="md5Text" placeholder="输入文本" style="width: 300px" />
37
+ <j-button label="生成MD5" style="margin-top: 10px" type="primary" @click="doMd5Hash" />
38
+ <p>MD5: {{ md5Hash }}</p>
39
+ <p style="color: #67c23a">💡 常用于密码加密存储</p>
40
+ </div>
41
+ </div>
42
+
43
+ <div class="demo-section">
44
+ <h4>4. SHA256哈希</h4>
45
+ <div class="demo-content">
46
+ <j-input v-model="sha256Text" placeholder="输入文本" style="width: 300px" />
47
+ <j-button
48
+ label="生成SHA256"
49
+ type="primary"
50
+ style="margin-top: 10px"
51
+ @click="doSha256Hash"
52
+ />
53
+ <p>SHA256: {{ sha256Hash }}</p>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="demo-section">
58
+ <h4>5. SHA512哈希</h4>
59
+ <div class="demo-content">
60
+ <j-input v-model="sha512Text" placeholder="输入文本" style="width: 300px" />
61
+ <j-button
62
+ label="生成SHA512"
63
+ type="primary"
64
+ style="margin-top: 10px"
65
+ @click="doSha512Hash"
66
+ />
67
+ <p style="word-break: break-all">SHA512: {{ sha512Hash }}</p>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </template>
72
+
73
+ <script setup>
74
+ import { ref } from 'vue'
75
+ import { EncryptionFactory, HashingFactory } from '@/core'
76
+
77
+ // AES加密
78
+ const plainText = ref('Hello World')
79
+ const aesKey = ref('my-secret-key-123')
80
+ const encryptedText = ref('')
81
+ const decryptedText = ref('')
82
+
83
+ const doAesEncrypt = () => {
84
+ const aes = EncryptionFactory.createAesEncryption({ key: aesKey.value })
85
+ encryptedText.value = aes.encrypt(plainText.value)
86
+ }
87
+
88
+ const doAesDecrypt = () => {
89
+ if (encryptedText.value) {
90
+ const aes = EncryptionFactory.createAesEncryption({ key: aesKey.value })
91
+ decryptedText.value = aes.decrypt(encryptedText.value)
92
+ }
93
+ }
94
+
95
+ // Base64编码
96
+ const base64Text = ref('Hello World')
97
+ const base64Encoded = ref('')
98
+ const base64Decoded = ref('')
99
+
100
+ const doBase64Encode = () => {
101
+ const base64 = EncryptionFactory.createBase64Encryption()
102
+ base64Encoded.value = base64.encrypt(base64Text.value)
103
+ }
104
+
105
+ const doBase64Decode = () => {
106
+ if (base64Encoded.value) {
107
+ const base64 = EncryptionFactory.createBase64Encryption()
108
+ base64Decoded.value = base64.decrypt(base64Encoded.value)
109
+ }
110
+ }
111
+
112
+ // MD5哈希
113
+ const md5Text = ref('password123')
114
+ const md5Hash = ref('')
115
+
116
+ const doMd5Hash = () => {
117
+ const md5 = HashingFactory.createMD5Hashing()
118
+ md5Hash.value = md5.hash(md5Text.value)
119
+ }
120
+
121
+ // SHA256哈希
122
+ const sha256Text = ref('Hello World')
123
+ const sha256Hash = ref('')
124
+
125
+ const doSha256Hash = () => {
126
+ const sha256 = HashingFactory.createSHA256Hashing()
127
+ sha256Hash.value = sha256.hash(sha256Text.value)
128
+ }
129
+
130
+ // SHA512哈希
131
+ const sha512Text = ref('Hello World')
132
+ const sha512Hash = ref('')
133
+
134
+ const doSha512Hash = () => {
135
+ const sha512 = HashingFactory.createSHA512Hashing()
136
+ sha512Hash.value = sha512.hash(sha512Text.value)
137
+ }
138
+ </script>
139
+
140
+ <style scoped>
141
+ .utils-demo {
142
+ padding: 20px;
143
+ }
144
+ .demo-section {
145
+ margin-bottom: 30px;
146
+ padding: 15px;
147
+ border: 1px solid #eee;
148
+ border-radius: 4px;
149
+ }
150
+ .demo-section h4 {
151
+ margin-top: 0;
152
+ color: #409eff;
153
+ }
154
+ .demo-content {
155
+ margin-top: 10px;
156
+ }
157
+ .demo-content p {
158
+ margin: 8px 0;
159
+ }
160
+ </style>
@@ -0,0 +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>
@@ -0,0 +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>
@@ -0,0 +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>
@@ -0,0 +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>