@cldemo/ui-kit 1.0.10 → 1.0.11

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 (201) hide show
  1. package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
  2. package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
  3. package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
  4. package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
  5. package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
  6. package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
  7. package/buildLibs/utils/Element/ClFormValidate.js +5 -0
  8. package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
  9. package/buildLibs/utils/Element/ClImage.cjs +1 -1
  10. package/buildLibs/utils/Element/ClImage.js +1 -1
  11. package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
  12. package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
  13. package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
  14. package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
  15. package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
  16. package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
  17. package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
  18. package/buildLibs/utils/Element/ClLoadIng.js +5 -0
  19. package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
  20. package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
  21. package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
  22. package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
  23. package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
  24. package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
  25. package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
  26. package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
  27. package/buildLibs/utils/Element/ClRadioOne.js +5 -0
  28. package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
  29. package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
  30. package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
  31. package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
  32. package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
  33. package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
  34. package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
  35. package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
  36. package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
  37. package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
  38. package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
  39. package/buildLibs/utils/Mobile/ClBanner.js +1 -1
  40. package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
  41. package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
  42. package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
  43. package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
  44. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
  45. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
  46. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
  47. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
  48. package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
  49. package/buildLibs/utils/Mobile/ClPicker.js +1 -1
  50. package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
  51. package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
  52. package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
  53. package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
  54. package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
  55. package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
  56. package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
  57. package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
  58. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js} +1 -1
  59. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js.map → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js.map} +1 -1
  60. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
  61. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
  62. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js} +1 -1
  63. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js.map → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js.map} +1 -1
  64. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js} +1 -1
  65. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js.map → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js.map} +1 -1
  66. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js} +1 -1
  67. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js.map → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js.map} +1 -1
  68. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js} +1 -1
  69. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js.map → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map} +1 -1
  70. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js} +1 -1
  71. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js.map → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map} +1 -1
  72. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js} +1 -1
  73. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js.map → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map} +1 -1
  74. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js} +1 -1
  75. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js.map → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map} +1 -1
  76. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js} +1 -1
  77. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map} +1 -1
  78. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
  79. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
  80. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js} +1 -1
  81. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map} +1 -1
  82. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
  83. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
  84. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js} +2 -2
  85. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js.map → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map} +1 -1
  86. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
  87. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
  88. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js} +1 -1
  89. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js.map → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js.map} +1 -1
  90. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js} +2 -2
  91. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js.map → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js.map} +1 -1
  92. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js} +1 -1
  93. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js.map → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js.map} +1 -1
  94. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js} +2 -2
  95. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js.map → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js.map} +1 -1
  96. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js} +1 -1
  97. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js.map → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js.map} +1 -1
  98. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js} +1 -1
  99. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js.map → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js.map} +1 -1
  100. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js} +1 -1
  101. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js.map → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js.map} +1 -1
  102. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js} +1 -1
  103. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js.map → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js.map} +1 -1
  104. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js} +1 -1
  105. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js.map → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js.map} +1 -1
  106. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js} +2 -2
  107. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js.map → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js.map} +1 -1
  108. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js} +1 -1
  109. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js.map → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js.map} +1 -1
  110. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js} +1 -1
  111. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js.map → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map} +1 -1
  112. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js} +1 -1
  113. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js.map → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js.map} +1 -1
  114. package/buildLibs/utils/Shared/Index24.css +1 -1
  115. package/buildLibs/utils/Shared/Index25.css +1 -1
  116. package/buildLibs/utils/Shared/Index26.css +1 -1
  117. package/buildLibs/utils/Shared/Index27.css +1 -1
  118. package/buildLibs/utils/Shared/Index28.css +1 -1
  119. package/buildLibs/utils/Shared/Index29.css +1 -1
  120. package/buildLibs/utils/Shared/Index30.css +1 -1
  121. package/buildLibs/utils/Shared/Index31.css +1 -1
  122. package/buildLibs/utils/Shared/Index32.css +1 -1
  123. package/buildLibs/utils/Shared/Index33.css +1 -1
  124. package/buildLibs/utils/Shared/Index34.css +1 -1
  125. package/buildLibs/utils/Shared/Index35.css +1 -1
  126. package/buildLibs/utils/Shared/Index36.css +1 -1
  127. package/buildLibs/utils/Shared/Index37.css +1 -0
  128. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
  129. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
  130. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
  131. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
  132. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
  133. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
  134. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
  135. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
  136. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
  137. package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
  138. package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
  139. package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
  140. package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
  141. package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
  142. package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
  143. package/buildLibs/utils/Web/ClDatetime.js +1 -1
  144. package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
  145. package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
  146. package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
  147. package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
  148. package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
  149. package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
  150. package/buildLibs/utils/Web/ClEcharts.js +1 -1
  151. package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
  152. package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
  153. package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
  154. package/buildLibs/utils/Web/ClFileUpload.js +1 -1
  155. package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
  156. package/buildLibs/utils/Web/ClInputTag.js +1 -1
  157. package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
  158. package/buildLibs/utils/Web/ClPaginate.js +1 -1
  159. package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
  160. package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
  161. package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
  162. package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
  163. package/buildLibs/utils/Web/ClSelect.cjs +1 -1
  164. package/buildLibs/utils/Web/ClSelect.js +1 -1
  165. package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
  166. package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
  167. package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
  168. package/buildLibs/utils/Web/ClSelectTag.js +1 -1
  169. package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
  170. package/buildLibs/utils/Web/ClSelectTree.js +1 -1
  171. package/buildLibs/utils/Web/ClTable.cjs +1 -1
  172. package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
  173. package/buildLibs/utils/Web/ClTable.js +1081 -1218
  174. package/buildLibs/utils/Web/ClTable.js.map +1 -1
  175. package/buildLibs/utils/Web/ClTabs.cjs +1 -1
  176. package/buildLibs/utils/Web/ClTabs.js +1 -1
  177. package/buildLibs/utils/Web/ClTree.cjs +1 -1
  178. package/buildLibs/utils/Web/ClTree.js +1 -1
  179. package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
  180. package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
  181. package/buildLibs/utils/Web/ClXeditable.js +33 -32
  182. package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
  183. package/package.json +21 -8
  184. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
  185. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
  186. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
  187. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
  188. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
  189. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
  190. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
  191. package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
  192. package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
  193. package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
  194. package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
  195. package/buildLibs/utils/Shared/Video.css +0 -1
  196. package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
  197. package/buildLibs/utils/Web/ClPreview.cjs +0 -2
  198. package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
  199. package/buildLibs/utils/Web/ClPreview.css +0 -1
  200. package/buildLibs/utils/Web/ClPreview.js +0 -353
  201. package/buildLibs/utils/Web/ClPreview.js.map +0 -1
@@ -0,0 +1,406 @@
1
+ import { defineComponent as X, inject as Y, ref as $, reactive as ee, computed as v, onMounted as te, nextTick as A, onBeforeUnmount as se, watch as I, resolveDirective as re, openBlock as y, createElementBlock as k, mergeProps as ae, renderSlot as le, normalizeClass as ne, withDirectives as ie, createBlock as oe, toDisplayString as ce, Fragment as N, toRaw as B } from "vue";
2
+ import { C as e } from "./base-DU7nGSf6.js";
3
+ import { C as T } from "./index-DvNmQjNH.js";
4
+ import { t as ue } from "./index-B_roHdyy.js";
5
+ import { u as me } from "./language-BxAxu5Gv.js";
6
+ import { _ as pe } from "./Index.vue_vue_type_script_setup_true_lang-D4kAoS8e.js";
7
+ const Fe = {
8
+ required: (s) => !e.isEmpty(s),
9
+ number: (s) => {
10
+ let a = !0;
11
+ if (!e.isEmpty(s)) {
12
+ const r = e.removeReplace(s);
13
+ a = /^-?(\d*\.)?\d+(e[-+]?\d+)?$/i.test(r);
14
+ }
15
+ return a;
16
+ },
17
+ integer: (s) => {
18
+ let a = !0;
19
+ if (!e.isEmpty(s)) {
20
+ const r = e.removeReplace(s);
21
+ a = /^-?\d+$/.test(r);
22
+ }
23
+ return a;
24
+ },
25
+ integerPositive: (s) => {
26
+ let a = !0;
27
+ if (!e.isEmpty(s)) {
28
+ const r = e.removeReplace(s);
29
+ a = /^[1-9]\d*$/.test(r);
30
+ }
31
+ return a;
32
+ },
33
+ alphanum: (s) => {
34
+ let a = !0;
35
+ return e.isEmpty(s) || (a = /^\w+$/i.test(s)), a;
36
+ },
37
+ email: (s) => {
38
+ let a = !0;
39
+ return e.isEmpty(s) || (a = /^((([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(s)), a;
40
+ },
41
+ minLen: (s, a) => {
42
+ let r = !0;
43
+ return e.isEmpty(s) || (r = s.length >= parseInt(a, 10)), r;
44
+ },
45
+ maxLen: (s, a) => {
46
+ let r = !0;
47
+ return e.isEmpty(s) || (r = s.length <= parseInt(a, 10)), r;
48
+ },
49
+ minByte: (s, a) => {
50
+ let r = !0;
51
+ return e.isEmpty(s) || (r = e.getByteLen(s) >= parseInt(a, 10)), r;
52
+ },
53
+ maxByte: (s, a) => {
54
+ let r = !0;
55
+ return e.isEmpty(s) || (r = e.getByteLen(s) <= parseInt(a, 10)), r;
56
+ },
57
+ minGreater: (s, a) => {
58
+ let r = !0;
59
+ if (!e.isEmpty(s)) {
60
+ const f = e.removeReplace(s);
61
+ r = parseFloat(f) > parseFloat(a);
62
+ }
63
+ return r;
64
+ },
65
+ maxGreater: (s, a) => {
66
+ let r = !0;
67
+ if (!e.isEmpty(s)) {
68
+ const f = e.removeReplace(s);
69
+ r = parseFloat(f) < parseFloat(a);
70
+ }
71
+ return r;
72
+ },
73
+ minGreaterEqual: (s, a) => {
74
+ let r = !0;
75
+ if (!e.isEmpty(s)) {
76
+ const f = e.removeReplace(s);
77
+ r = parseFloat(f) >= parseFloat(a);
78
+ }
79
+ return r;
80
+ },
81
+ maxGreaterEqual: (s, a) => {
82
+ let r = !0;
83
+ if (!e.isEmpty(s)) {
84
+ const f = e.removeReplace(s);
85
+ r = parseFloat(f) <= parseFloat(a);
86
+ }
87
+ return r;
88
+ },
89
+ phone: (s) => {
90
+ let a = !0;
91
+ return e.isEmpty(s) || (a = /^1\d{10}$/.test(s)), a;
92
+ },
93
+ equalto: (s, a) => !e.isEmpty(s) && !e.isEmpty(a) ? s === a : !0,
94
+ regular: (s, a) => {
95
+ let r = !0;
96
+ return !e.isEmpty(s) && !e.isEmpty(a) && (r = new RegExp(a, "g").test(s)), r;
97
+ },
98
+ urlHttp: (s) => {
99
+ let a = !0;
100
+ return e.isEmpty(s) || (a = /^(http|https):\/\/[^\s]+$/.test(s)), a;
101
+ }
102
+ }, fe = (s = {}) => ({
103
+ type: e.isEmpty(s.type) ? "tip" : s.type,
104
+ rules: e.getJsonMerge(Fe, s.rules),
105
+ messages: e.getJsonMergeDeep({}, s.messages)
106
+ }), ge = {
107
+ key: 1,
108
+ class: "error-text-el"
109
+ }, ve = /* @__PURE__ */ X({
110
+ name: "ClFormValidate",
111
+ directives: {
112
+ cltooltip: ue
113
+ },
114
+ __name: "Validate",
115
+ props: {
116
+ className: String,
117
+ // desc: 自定义CSS类名
118
+ checkValue: [String, Number],
119
+ // desc: 需要校验的值
120
+ rules: {
121
+ type: Array,
122
+ // desc: 校验规则数组,支持字符串或对象形式。字符串 'rule|param'(如 'required|必填');对象 {r: 规则名, p: 参数, m: 自定义消息, isCheck: 是否启用}
123
+ default: () => []
124
+ },
125
+ isCheck: {
126
+ type: Boolean,
127
+ // desc: 是否开启校验(false 时不执行校验);校验时机由外部调用 runValidate 触发(cl-form 容器提交时自动调用)
128
+ default: !0
129
+ },
130
+ msgElementId: String,
131
+ // desc: 错误消息挂载目标元素选择器(不传时展示在当前组件内部)
132
+ msgType: {
133
+ type: String,
134
+ // desc: 错误消息展示类型 | enum: tip, text
135
+ validator: (s) => ["tip", "text"].includes(s)
136
+ },
137
+ pElError: String,
138
+ // desc: 错误元素父级定位选择器(仅供 Form 容器错误定位消费,独立直用时无效果)
139
+ isShowMsg: {
140
+ type: Boolean,
141
+ // desc: 是否展示错误消息(默认展示;显式传 false 仅红框不显示文案,msgElementId 迁移同样不生效)
142
+ default: !0
143
+ }
144
+ },
145
+ setup(s, { expose: a }) {
146
+ const r = s, { optPageLanguage: f, getPageLanguage: M, getLanguageType: L } = me();
147
+ M("validate");
148
+ const j = Y("$ClGlobals", null), g = $(null), E = $(null), c = ee({
149
+ type: "",
150
+ msgHtml: "",
151
+ check: 0
152
+ }), p = {
153
+ form: null
154
+ }, F = {
155
+ rules: {},
156
+ messages: {}
157
+ };
158
+ let h = null;
159
+ const D = () => {
160
+ if (e.isUndefined(h)) {
161
+ const t = fe(), n = j?.validate;
162
+ n ? e.isEmpty(n.rules) && e.isEmpty(n.messages) ? (h = e.isNonEmptyString(n.type) ? { ...t, type: n.type } : t, console.warn(
163
+ "[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则"
164
+ )) : h = {
165
+ ...t,
166
+ ...n,
167
+ type: n.type ?? t.type,
168
+ rules: n.rules ?? t.rules,
169
+ messages: n.messages ?? t.messages
170
+ } : (h = t, console.warn(
171
+ "[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则"
172
+ ));
173
+ }
174
+ return h;
175
+ }, z = v(() => {
176
+ const t = {
177
+ "data-validate-el": ""
178
+ };
179
+ if (r.isCheck) {
180
+ switch (c.check) {
181
+ case 1:
182
+ t["data-validate-success"] = "";
183
+ break;
184
+ case 2:
185
+ t["data-validate-error"] = "";
186
+ break;
187
+ }
188
+ t["aria-invalid"] = c.check === 2 ? "true" : "false";
189
+ }
190
+ return t;
191
+ }), J = v(() => {
192
+ const t = {};
193
+ return r.isCheck && (t["panel-validate-element"] = !0), e.getJsonMerge(t, T.getClassNameJson(r.className));
194
+ }), G = v(() => {
195
+ const t = {
196
+ "panel-validate-errors": !0
197
+ };
198
+ return t[`validate-errors-${c.type}`] = !0, t;
199
+ }), K = v(() => c.msgHtml.replace(/<[^>]*>/g, " ").trim()), R = (t) => {
200
+ if (!e.isArray(t)) {
201
+ console.warn("[cl-form-validate] rules 应为数组,已忽略");
202
+ return;
203
+ }
204
+ const n = {}, i = {};
205
+ t.forEach((l) => {
206
+ if (typeof l == "string") {
207
+ if (!e.isEmpty(l))
208
+ if (e.isExistValue(l, "|")) {
209
+ const o = l.split("|");
210
+ n[o[0]] = o[1], o.length > 2 && console.warn(
211
+ '[cl-form-validate] 字符串规则 "' + l + '" 含多个参数段,仅取前两段,建议改用对象形式'
212
+ );
213
+ } else
214
+ n[l] = "";
215
+ } else if (typeof l == "object" && !e.isUndefined(l)) {
216
+ let o = !0;
217
+ e.isBoolean(l.isCheck) ? o = l.isCheck === !0 : (l.isCheck === "false" || l.isCheck === "0") && (o = !1), !e.isEmpty(l.r) && o && (n[l.r] = l.p ?? "", e.isEmpty(l.m) || (i[l.r] = l.m ?? ""));
218
+ }
219
+ }), F.rules = n, F.messages = i;
220
+ }, H = () => {
221
+ const t = [], n = {}, i = {};
222
+ if (g.value && !e.isEmpty(g.value.dataset) && Object.keys(g.value.dataset).forEach((l) => {
223
+ if (l.indexOf("validate") === 0) {
224
+ const u = l.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).split("-");
225
+ if (u.length === 3) {
226
+ const m = u[2].toLowerCase(), d = g.value.dataset[l];
227
+ switch (u[1]) {
228
+ case "check":
229
+ !e.isEmpty(d) && d.toLowerCase() === "false" && t.push(m);
230
+ break;
231
+ case "param":
232
+ n[m] = d;
233
+ break;
234
+ case "message":
235
+ i[m] = d;
236
+ break;
237
+ }
238
+ }
239
+ }
240
+ }), !e.isEmpty(F.rules) && (!e.isEmpty(t) || !e.isEmpty(n))) {
241
+ const l = {};
242
+ for (const [o, u] of Object.entries(F.rules)) {
243
+ const m = o.toLowerCase();
244
+ e.isExistValue(t, m) || (l[o] = e.isExistJsonKey(n, m) ? n[m] : u);
245
+ }
246
+ F.rules = l;
247
+ }
248
+ if (!e.isEmpty(F.messages) && !e.isEmpty(i)) {
249
+ const l = {};
250
+ for (const [o, u] of Object.entries(F.messages)) {
251
+ const m = o.toLowerCase();
252
+ l[o] = e.isExistJsonKey(i, m) ? i[m] : u;
253
+ }
254
+ F.messages = l;
255
+ }
256
+ }, O = (t) => {
257
+ const n = {}, i = D().rules ?? {};
258
+ if (!e.isEmpty(F.rules)) {
259
+ const l = e.isEmpty(t) || e.getTypeof(t) === "number" && e.isNaN(t), o = l ? "" : e.trim(t);
260
+ for (const [u, m] of Object.entries(F.rules))
261
+ if (e.isExistJsonKey(i, u) && e.isFunction(i[u])) {
262
+ let d = !0;
263
+ u === "required" ? d = i.required(o) : l || (d = i[u](o, m)), d || (n[u] = m);
264
+ } else
265
+ console.warn('[cl-form-validate] 校验规则 "' + u + '" 未注册或非函数,已跳过');
266
+ }
267
+ return n;
268
+ }, q = () => {
269
+ M("validate");
270
+ const t = B(f.value), n = B(D().messages ?? {}), i = L(), l = e.isExistJsonKey(n, i.type) || e.isExistJsonKey(n, i.def) ? e.getJsonMerge({}, n[i.def] || {}, n[i.type] || {}) : n;
271
+ return e.getJsonMerge({}, t, l);
272
+ }, P = (t) => {
273
+ const n = q(), i = [];
274
+ return Object.keys(t).forEach((l) => {
275
+ let o = "";
276
+ if (e.isNonEmptyString(F.messages[l]) ? o = F.messages[l] : e.isNonEmptyString(n[l]) && (o = n[l]), !e.isEmpty(o)) {
277
+ const u = t[l], m = e.isExistValue(o, "%s") ? o.replace(/%s/g, e.isNonEmptyString(u) ? u : "") : o;
278
+ i.push(m);
279
+ }
280
+ }), i;
281
+ }, C = () => (p.form && !p.form.isConnected && (p.form = null), e.isUndefined(p.form) && g.value && (p.form = T.getParent(g.value, "form")), p.form), w = () => {
282
+ C();
283
+ let t = D().type;
284
+ p.form && !e.isEmpty(p.form.dataset.theme) && (t = p.form.dataset.theme), e.isNonEmptyString(r.msgType) && (t = r.msgType), t !== "tip" && t !== "text" && (t = "tip"), c.type = t;
285
+ }, U = () => {
286
+ let t = !0;
287
+ return C(), !e.isUndefined(p.form) && p.form && (e.isUndefined(p.form.dataset.clValidate) || (t = !e.isUndefined(p.form.dataset.run))), t;
288
+ }, _ = (t) => {
289
+ const n = e.isNonEmptyString(t) ? t : "";
290
+ if (e.isEmpty(n))
291
+ c.msgHtml = "", c.check = 1;
292
+ else if (c.msgHtml = n, c.check = 2, e.isNonEmptyString(r.msgElementId))
293
+ try {
294
+ const i = window.document.querySelector(r.msgElementId);
295
+ i ? A(() => {
296
+ E.value && i.isConnected ? i.appendChild(E.value) : E.value && console.warn(
297
+ "[cl-form-validate] msgElementId 目标已脱离文档:" + r.msgElementId + ",消息展示在组件内部"
298
+ );
299
+ }) : console.warn(
300
+ "[cl-form-validate] 未找到 msgElementId 目标元素:" + r.msgElementId + ",消息展示在组件内部"
301
+ );
302
+ } catch {
303
+ console.warn("[cl-form-validate] msgElementId 选择器无效:" + r.msgElementId);
304
+ }
305
+ }, b = () => {
306
+ c.msgHtml = "", c.check = 0;
307
+ }, Z = (t, n) => {
308
+ let i = "";
309
+ if (!e.isEmpty(t))
310
+ switch (n) {
311
+ case "tip":
312
+ i = t.map((l) => `<div>${l}</div>`).join("");
313
+ break;
314
+ case "text":
315
+ i = t.join(",");
316
+ break;
317
+ }
318
+ return i;
319
+ }, x = () => {
320
+ let t = !0;
321
+ try {
322
+ if (r.isCheck && U()) {
323
+ w(), H();
324
+ const n = O(r.checkValue);
325
+ if (t = e.isEmpty(n), t)
326
+ _("");
327
+ else {
328
+ let i = Z(P(n), c.type);
329
+ if (e.isEmpty(i)) {
330
+ const l = Object.keys(n)[0];
331
+ i = e.isNonEmptyString(l) ? l : "校验未通过";
332
+ }
333
+ _(i);
334
+ }
335
+ } else
336
+ b();
337
+ } catch {
338
+ console.warn("[cl-form-validate] 校验执行异常,已按未通过处理"), b(), t = !1;
339
+ }
340
+ return t;
341
+ }, Q = () => {
342
+ if (R(r.rules || []), C(), g.value) {
343
+ const t = g.value;
344
+ t.pElError = r.pElError, t.runValidate = x, t.runErrMsg = V, t.runReset = S;
345
+ }
346
+ };
347
+ te(() => {
348
+ A(() => {
349
+ Q();
350
+ });
351
+ }), se(() => {
352
+ E.value?.remove();
353
+ }), I(
354
+ () => r.checkValue,
355
+ () => {
356
+ x();
357
+ }
358
+ ), I(
359
+ [() => r.rules, () => r.isCheck],
360
+ ([t]) => {
361
+ R(t || []), x();
362
+ },
363
+ { deep: !0 }
364
+ );
365
+ const W = () => x(), V = (t) => {
366
+ w(), _(t);
367
+ }, S = () => {
368
+ w(), b();
369
+ };
370
+ return a({
371
+ runValidate: W,
372
+ runErrMsg: V,
373
+ runReset: S
374
+ }), (t, n) => {
375
+ const i = re("cltooltip");
376
+ return y(), k("div", ae({
377
+ ref_key: "refElTop",
378
+ ref: g,
379
+ class: J.value
380
+ }, z.value), [
381
+ le(t.$slots, "default"),
382
+ c.msgHtml.length > 0 && s.isShowMsg ? (y(), k("div", {
383
+ key: 0,
384
+ ref_key: "refElMsg",
385
+ ref: E,
386
+ class: ne(G.value),
387
+ role: "alert"
388
+ }, [
389
+ c.type === "tip" ? ie((y(), oe(pe, {
390
+ key: 0,
391
+ name: "exclamation-circle-fill",
392
+ class: "error-tip-el",
393
+ role: "img",
394
+ "aria-label": K.value
395
+ }, null, 8, ["aria-label"])), [
396
+ [i, c.msgHtml]
397
+ ]) : c.type === "text" ? (y(), k("span", ge, ce(c.msgHtml), 1)) : (y(), k(N, { key: 2 }, [], 64))
398
+ ], 2)) : (y(), k(N, { key: 1 }, [], 64))
399
+ ], 16);
400
+ };
401
+ }
402
+ });
403
+ export {
404
+ ve as _
405
+ };
406
+ //# sourceMappingURL=Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js","sources":["../../../src/libs/Element/Form/Rules.ts","../../../src/libs/Element/Form/Validate.vue"],"sourcesContent":["import CommonBase from \"../../Common/base\";\nconst defaultRules = {\n required: (value: string) => !CommonBase.isEmpty(value),\n number: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i).test(newValue);\n }\n return check;\n },\n integer: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?\\d+$/).test(newValue);\n }\n return check;\n },\n integerPositive: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^[1-9]\\d*$/).test(newValue);\n }\n return check;\n },\n alphanum: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^\\w+$/i).test(value);\n }\n return check;\n },\n email: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^((([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i).test(value);\n }\n return check;\n },\n minLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length >= parseInt(len, 10);\n }\n return check;\n },\n maxLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length <= parseInt(len, 10);\n }\n return check;\n },\n minByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) >= parseInt(len, 10);\n }\n return check;\n },\n maxByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) <= parseInt(len, 10);\n }\n return check;\n },\n minGreater: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) > parseFloat(min);\n }\n return check;\n },\n maxGreater: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) < parseFloat(max);\n }\n return check;\n },\n minGreaterEqual: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) >= parseFloat(min);\n }\n return check;\n },\n maxGreaterEqual: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) <= parseFloat(max);\n }\n return check;\n },\n phone: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^1\\d{10}$/).test(value);\n }\n return check;\n },\n equalto: (value: string, compareValue: string) => {\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(compareValue)) {\n return value === compareValue;\n }\n return true;\n },\n regular: (value: string, strReg: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(strReg)) {\n const reg = new RegExp(strReg, \"g\");\n check = reg.test(value);\n }\n return check;\n },\n urlHttp: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^(http|https):\\/\\/[^\\s]+$/).test(value);\n }\n return check;\n },\n};\nexport default (options: any = {}) => {\n return {\n type: CommonBase.isEmpty(options.type) ? \"tip\" : options.type,\n rules: CommonBase.getJsonMerge(defaultRules, options.rules),\n messages: CommonBase.getJsonMergeDeep({}, options.messages),\n };\n};","<template>\n <div\n ref=\"refElTop\"\n :class=\"clsParent\"\n v-bind=\"optParent\"\n >\n <slot></slot>\n <div\n ref=\"refElMsg\"\n v-if=\"optBase.msgHtml.length > 0 && isShowMsg\"\n :class=\"clsErr\"\n role=\"alert\"\n >\n <cl-icon-font\n v-if=\"optBase.type === 'tip'\"\n :name=\"'exclamation-circle-fill'\"\n class=\"error-tip-el\"\n role=\"img\"\n :aria-label=\"optAriaLabel\"\n v-cltooltip=\"optBase.msgHtml\"\n ></cl-icon-font>\n <span\n v-else-if=\"optBase.type === 'text'\"\n class=\"error-text-el\"\n >{{ optBase.msgHtml }}</span\n >\n <template v-else></template>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n nextTick,\n toRaw,\n inject,\n watch,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport useLanguage from '../../Use/language';\nimport validateRules from './Rules';\nimport ClIconFont from '../IconFont/Index.vue';\n\n// defineOptions\ndefineOptions({\n name: 'ClFormValidate',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n checkValue: [String, Number], // desc: 需要校验的值\n rules: {\n type: Array, // desc: 校验规则数组,支持字符串或对象形式。字符串 'rule|param'(如 'required|必填');对象 {r: 规则名, p: 参数, m: 自定义消息, isCheck: 是否启用}\n default: () => [],\n },\n isCheck: {\n type: Boolean, // desc: 是否开启校验(false 时不执行校验);校验时机由外部调用 runValidate 触发(cl-form 容器提交时自动调用)\n default: true,\n },\n msgElementId: String, // desc: 错误消息挂载目标元素选择器(不传时展示在当前组件内部)\n msgType: {\n type: String, // desc: 错误消息展示类型 | enum: tip, text\n validator: (val: string) => ['tip', 'text'].includes(val),\n },\n pElError: String, // desc: 错误元素父级定位选择器(仅供 Form 容器错误定位消费,独立直用时无效果)\n isShowMsg: {\n type: Boolean, // desc: 是否展示错误消息(默认展示;显式传 false 仅红框不显示文案,msgElementId 迁移同样不生效)\n default: true,\n },\n});\n\n// slots: default\n\n// 常量 / 变量定义\nconst { optPageLanguage, getPageLanguage, getLanguageType } = useLanguage();\ngetPageLanguage('validate');\n\n// $ClGlobals 全局配置注入(含 validate 校验规则表);标准安装(installCore)已注册 Rules.ts 实例,\n// 外部覆盖注入时按注入优先;未注册场景(独立安装不走 installCore)由 _getValidateGlobals 回退兜底\ntype RuleFunc = (value: string, param?: string) => boolean;\ninterface ClGlobals {\n validate?: {\n type?: string;\n rules?: Record<string, RuleFunc>;\n messages?: Record<string, string>;\n };\n}\ntype ValidateGlobals = NonNullable<ClGlobals['validate']>;\n// 规则项:字符串(规则名)或对象({r, p, m, isCheck});isCheck 兼容布尔与字符串 'false'/'0'\ntype RuleItem = string | { r: string; p?: string; m?: string; isCheck?: boolean | string };\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst refElTop = ref<HTMLElement | null>(null);\nconst refElMsg = ref<HTMLElement | null>(null);\n\nconst optBase = reactive({\n type: '',\n msgHtml: '',\n check: 0,\n});\n\nconst _pageElement: { form: HTMLFormElement | null } = {\n form: null,\n};\n\nconst _pageData: {\n rules: Record<string, string>;\n messages: Record<string, string>;\n} = {\n rules: {},\n messages: {},\n};\n\n// 校验规则表统一入口:优先取全局注入 $ClGlobals.validate,缺失时回退组件内置默认规则表(Rules.ts)\n// 返回类型收口为非空:函数内所有路径都已赋值(内置或注入),null 仅作缓存未初始化哨兵\nlet _validateGlobal: ValidateGlobals | null = null;\nconst _getValidateGlobals = (): ValidateGlobals => {\n if (CommonBase.isUndefined(_validateGlobal)) {\n // 内置默认表(缺失字段的兜底来源)\n const def = validateRules();\n const injected = _clGlobals?.validate;\n if (injected) {\n if (CommonBase.isEmpty(injected.rules) && CommonBase.isEmpty(injected.messages)) {\n // 规则/消息全缺:整体回退内置,但保留注入的 type(仅注入主题类型的配置不失效)\n _validateGlobal = CommonBase.isNonEmptyString(injected.type)\n ? { ...def, type: injected.type }\n : def;\n console.warn(\n '[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则',\n );\n } else {\n // 部分字段缺失时字段级兜底:缺什么补什么(如注入 rules 缺 messages → 内置消息表仍参与合并,错误文案不退化显示规则名)\n _validateGlobal = {\n ...def,\n ...injected,\n type: injected.type ?? def.type,\n rules: injected.rules ?? def.rules,\n messages: injected.messages ?? def.messages,\n };\n }\n } else {\n _validateGlobal = def;\n console.warn(\n '[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则',\n );\n }\n }\n return _validateGlobal as ValidateGlobals;\n};\n\n// computed\nconst optParent = computed(() => {\n const temp: Record<string, string> = {\n 'data-validate-el': '',\n };\n if (props.isCheck) {\n switch (optBase.check) {\n case 1:\n temp['data-validate-success'] = '';\n break;\n case 2:\n temp['data-validate-error'] = '';\n break;\n default:\n break;\n }\n // A11y:校验失败对读屏可感知(显式 'true'/'false' 保证成功→失败切换时播报状态变化)\n temp['aria-invalid'] = optBase.check === 2 ? 'true' : 'false';\n }\n return temp;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {};\n if (props.isCheck) {\n clsTemp['panel-validate-element'] = true;\n }\n return CommonBase.getJsonMerge(clsTemp, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsErr = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-validate-errors': true,\n };\n cls[`validate-errors-${optBase.type}`] = true;\n return cls;\n});\n\n// tip 模式图标的无障碍标注(去掉消息 HTML 标签后的纯文本,读屏可读)\n// 逐条 div 结构去标签后以空格分隔,防多条消息粘连成 msg1msg2\nconst optAriaLabel = computed(() => optBase.msgHtml.replace(/<[^>]*>/g, ' ').trim());\n\n// 内部调用方法\nconst _initRules = (options: RuleItem[]) => {\n if (!CommonBase.isArray(options)) {\n console.warn('[cl-form-validate] rules 应为数组,已忽略');\n return;\n }\n const rules: Record<string, string> = {};\n const messages: Record<string, string> = {};\n options.forEach((info: RuleItem) => {\n // typeof 内联判断(RuleItem 联合类型靠字面判断收窄)\n if (typeof info === 'string') {\n if (!CommonBase.isEmpty(info)) {\n if (CommonBase.isExistValue(info, '|')) {\n const tempR = info.split('|');\n rules[tempR[0]] = tempR[1];\n if (tempR.length > 2) {\n console.warn(\n '[cl-form-validate] 字符串规则 \"' +\n info +\n '\" 含多个参数段,仅取前两段,建议改用对象形式',\n );\n }\n } else {\n rules[info] = '';\n }\n }\n } else if (typeof info === 'object' && !CommonBase.isUndefined(info)) {\n // isCheck 支持布尔与字符串 'false'/'0'(与容器 data-validate-check-* 的 'false' 约定一致)\n let isCheckOne = true;\n if (CommonBase.isBoolean(info.isCheck)) {\n isCheckOne = info.isCheck === true;\n } else if (info.isCheck === 'false' || info.isCheck === '0') {\n isCheckOne = false;\n }\n if (!CommonBase.isEmpty(info.r) && isCheckOne) {\n rules[info.r] = info.p ?? '';\n if (!CommonBase.isEmpty(info.m)) {\n messages[info.r] = info.m ?? '';\n }\n }\n }\n });\n _pageData.rules = rules;\n _pageData.messages = messages;\n};\n\nconst _mergeRules = () => {\n const cancel: string[] = [];\n const param: Record<string, string> = {};\n const message: Record<string, string> = {};\n if (refElTop.value && !CommonBase.isEmpty(refElTop.value.dataset)) {\n Object.keys(refElTop.value.dataset).forEach(key => {\n if (key.indexOf('validate') === 0) {\n // dataset 键还原为 validate-{check|param|message}-{规则名};规则名小写归一,兼容驼峰规则名(如 data-validate-param-minLen)\n const tempKey = key.replace(/[A-Z]/g, str => `-${str.toLowerCase()}`);\n const arrKey = tempKey.split('-');\n if (arrKey.length === 3) {\n const name = arrKey[2].toLowerCase();\n const value: any = refElTop.value!.dataset[key];\n switch (arrKey[1]) {\n case 'check':\n if (!CommonBase.isEmpty(value) && value.toLowerCase() === 'false') {\n cancel.push(name);\n }\n break;\n case 'param':\n param[name] = value;\n break;\n case 'message':\n message[name] = value;\n break;\n default:\n break;\n }\n }\n }\n });\n }\n\n if (!CommonBase.isEmpty(_pageData.rules)) {\n if (!CommonBase.isEmpty(cancel) || !CommonBase.isEmpty(param)) {\n const newRules: any = {};\n for (const [r, p] of Object.entries(_pageData.rules)) {\n const rKey = r.toLowerCase();\n if (!CommonBase.isExistValue(cancel, rKey)) {\n newRules[r] = CommonBase.isExistJsonKey(param, rKey) ? param[rKey] : p;\n }\n }\n _pageData.rules = newRules;\n }\n }\n if (!CommonBase.isEmpty(_pageData.messages)) {\n if (!CommonBase.isEmpty(message)) {\n const newMessages: any = {};\n for (const [r, m] of Object.entries(_pageData.messages)) {\n const rKey = r.toLowerCase();\n newMessages[r] = CommonBase.isExistJsonKey(message, rKey) ? message[rKey] : m;\n }\n _pageData.messages = newMessages;\n }\n }\n};\n\nconst _getErrData = (value: string | number | undefined) => {\n const errData: Record<string, string> = {};\n // 规则表可选字段(注入可能缺 rules),缺失时按空表处理(isExistJsonKey 对空表返回 false → 走未注册警告分支)\n const totalRules = _getValidateGlobals().rules ?? {};\n if (!CommonBase.isEmpty(_pageData.rules)) {\n // NaN 视为空值(数字类型非空但无实际值),避免 trim(NaN) 产出 'NaN' 被 required 误判通过\n const isEmpty =\n CommonBase.isEmpty(value) ||\n (CommonBase.getTypeof(value) === 'number' && CommonBase.isNaN(value));\n const newValue = isEmpty ? '' : CommonBase.trim(value);\n for (const [r, p] of Object.entries(_pageData.rules)) {\n if (CommonBase.isExistJsonKey(totalRules, r) && CommonBase.isFunction(totalRules[r])) {\n let check = true;\n if (r === 'required') {\n check = totalRules.required(newValue);\n } else {\n if (!isEmpty) {\n check = totalRules[r](newValue, p);\n }\n }\n if (!check) {\n errData[r] = p;\n }\n } else {\n console.warn('[cl-form-validate] 校验规则 \"' + r + '\" 未注册或非函数,已跳过');\n }\n }\n }\n return errData;\n};\n\nconst _getTotalMessages = () => {\n // 不缓存:语言包运行时可切换(Language.setType),每次合并保证消息跟随当前语言\n // optPageLanguage 是 setup 一次性快照,运行时切换语言后不更新——现取刷新后再合并\n getPageLanguage('validate');\n const lang = toRaw(optPageLanguage.value);\n // messages 可选字段(注入可能缺失),缺失时按空表合并(回退页语言包或内置消息)\n const vMsg = toRaw(_getValidateGlobals().messages ?? {});\n const langTypeInfo = getLanguageType();\n const msg =\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.type) ||\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.def)\n ? CommonBase.getJsonMerge({}, vMsg[langTypeInfo.def] || {}, vMsg[langTypeInfo.type] || {})\n : vMsg;\n return CommonBase.getJsonMerge({}, lang, msg);\n};\n\nconst _getErrMsg = (errData: Record<string, string>) => {\n const totalMessages = _getTotalMessages();\n const msg: string[] = [];\n Object.keys(errData).forEach(r => {\n let rMsg = '';\n // 自定义消息优先于全局消息;rMsg 可能来自外部配置(非字符串类型跳过,避免 %s 判断抛错)\n if (CommonBase.isNonEmptyString(_pageData.messages[r])) {\n rMsg = _pageData.messages[r];\n } else if (CommonBase.isNonEmptyString(totalMessages[r])) {\n rMsg = totalMessages[r];\n }\n if (!CommonBase.isEmpty(rMsg)) {\n const p = errData[r];\n // p 为空时去掉占位段,避免渲染残缺文案;多占位一并替换\n const temp = CommonBase.isExistValue(rMsg, '%s')\n ? rMsg.replace(/%s/g, CommonBase.isNonEmptyString(p) ? p : '')\n : rMsg;\n msg.push(temp);\n }\n });\n return msg;\n};\n\nconst _getForm = () => {\n // form 被 v-if 重建(detached)后缓存失效,重新查找\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(null/undefined 均跳过,语义等价)\n if (_pageElement.form && !_pageElement.form.isConnected) {\n _pageElement.form = null;\n }\n if (CommonBase.isUndefined(_pageElement.form) && refElTop.value) {\n _pageElement.form = CommonElement.getParent(refElTop.value, 'form');\n }\n return _pageElement.form;\n};\n\nconst _setThemeType = () => {\n _getForm();\n let type = _getValidateGlobals().type;\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(语义等价)\n if (_pageElement.form && !CommonBase.isEmpty(_pageElement.form.dataset.theme)) {\n type = _pageElement.form.dataset.theme;\n }\n if (CommonBase.isNonEmptyString(props.msgType)) {\n type = props.msgType;\n }\n // msgType 封闭枚举兜底:非 tip/text 一律回退 tip,保证错误消息可渲染、不误标成功\n if (type !== 'tip' && type !== 'text') {\n type = 'tip';\n }\n optBase.type = type;\n};\n\nconst _checkRun = () => {\n let isRun = true;\n _getForm();\n // 运行态契约:容器 form 带 data-cl-validate 属性(cl-form 渲染的显式标记)时,显式挂 data-run 才执行校验\n // (与 Form 运行态 optBase.isRun → data-run 对应);无 form 容器(SelectCascade 等独立使用)与原生 form\n // (含任意 data-* 属性)均默认校验——是否校验由 isCheck 门控,无容器场景保持设计意图(传了校验 props 即要校验)\n if (!CommonBase.isUndefined(_pageElement.form) && _pageElement.form) {\n if (!CommonBase.isUndefined(_pageElement.form.dataset.clValidate)) {\n isRun = !CommonBase.isUndefined(_pageElement.form.dataset.run);\n }\n }\n return isRun;\n};\n\nconst _setMsg = (msg: string) => {\n // 入参统一收口为字符串,防外部传入数字/对象污染 msgHtml(模板 length 判断失效)\n const newMsg = CommonBase.isNonEmptyString(msg) ? msg : '';\n if (CommonBase.isEmpty(newMsg)) {\n optBase.msgHtml = '';\n optBase.check = 1;\n } else {\n optBase.msgHtml = newMsg;\n optBase.check = 2;\n if (CommonBase.isNonEmptyString(props.msgElementId)) {\n // 多实例共用同一 msgElementId 时,后校验失败的实例会将节点移动到目标末尾(appendChild 移动语义)\n // 属约定行为,建议每个校验组件使用独立 msgElementId,避免串扰\n try {\n const msgEl: any = window.document.querySelector(props.msgElementId);\n if (msgEl) {\n nextTick(() => {\n // 同步查询时刻存在但回调时可能已被外部移除(detached)——降级展示在组件内部并提示\n if (refElMsg.value && msgEl.isConnected) {\n msgEl.appendChild(refElMsg.value);\n } else if (refElMsg.value) {\n console.warn(\n '[cl-form-validate] msgElementId 目标已脱离文档:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n });\n } else {\n console.warn(\n '[cl-form-validate] 未找到 msgElementId 目标元素:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n } catch (err) {\n console.warn('[cl-form-validate] msgElementId 选择器无效:' + props.msgElementId);\n }\n }\n }\n};\n\n// 复位到初始未校验态(与「校验成功」区分:reset 后不残留 data-validate-success 标记)\nconst _resetMsg = () => {\n optBase.msgHtml = '';\n optBase.check = 0;\n};\n\n// 按 msgType 组装错误消息文本(tip 逐条 div 换行 / text 逗号拼接)\nconst _formatErrMsg = (msgList: string[], type: string) => {\n let msg = '';\n if (!CommonBase.isEmpty(msgList)) {\n switch (type) {\n case 'tip':\n msg = msgList.map(info => `<div>${info}</div>`).join('');\n break;\n case 'text':\n msg = msgList.join(',');\n break;\n default:\n break;\n }\n }\n return msg;\n};\n\nconst _validate = () => {\n let result = true;\n try {\n if (props.isCheck && _checkRun()) {\n _setThemeType();\n _mergeRules();\n const errData = _getErrData(props.checkValue);\n result = CommonBase.isEmpty(errData);\n if (result) {\n _setMsg('');\n } else {\n let msg = _formatErrMsg(_getErrMsg(errData), optBase.type);\n // 校验失败但消息表无对应文案时,兜底输出规则名,避免误标成功\n if (CommonBase.isEmpty(msg)) {\n const firstRule = Object.keys(errData)[0];\n msg = CommonBase.isNonEmptyString(firstRule) ? firstRule : '校验未通过';\n }\n _setMsg(msg);\n }\n } else {\n // 未运行校验:复位到未校验态,不残留成功标记\n _resetMsg();\n }\n } catch (err) {\n console.warn('[cl-form-validate] 校验执行异常,已按未通过处理');\n // 异常按未通过处理时同步复位标记,避免残留上一次的成功视觉态与返回结果矛盾\n _resetMsg();\n result = false;\n }\n return result;\n};\n\n// 挂载在元素上的校验方法链(与 Form 容器 _validateEl 消费契约一致:Index.vue 经 el.runValidate() 取结果)\ninterface ValidateHost extends HTMLElement {\n pElError?: string;\n runValidate?: () => boolean;\n runErrMsg?: (msg: string) => void;\n runReset?: () => void;\n}\n\nconst _initMain = () => {\n // props.rules 未泛型化(defineProps type: Array → unknown[]),断言为 RuleItem[] 传入\n _initRules((props.rules as RuleItem[]) || []);\n _getForm();\n if (refElTop.value) {\n const hostEl = refElTop.value as ValidateHost;\n hostEl.pElError = props.pElError;\n hostEl.runValidate = _validate;\n // DOM 挂载版复用 expose 版方法:带 _setThemeType 同步主题类型,与外部调用 runErrMsg/runReset 行为一致\n hostEl.runErrMsg = runErrMsg;\n hostEl.runReset = runReset;\n }\n};\n\n// 生命周期\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nonBeforeUnmount(() => {\n // msgElementId 迁移到外部节点的错误消息已脱离组件 DOM 树,Vue 卸载不会清理——手动移除防残留\n refElMsg.value?.remove();\n});\n\n// watch\n// checkValue 变化只重新校验(规则表已初始化,重建纯属浪费)\nwatch(\n () => props.checkValue,\n () => {\n _validate();\n },\n);\n\n// rules / isCheck 变化才重建规则表并重新校验(isCheck 关闭时 _validate 走复位分支)\nwatch(\n [() => props.rules, () => props.isCheck],\n ([newRules]: [unknown[], boolean]) => {\n _initRules((newRules as RuleItem[]) || []);\n _validate();\n },\n { deep: true },\n);\n\n// 开放给外部使用的方法\nconst runValidate = () => {\n // 返回值与 DOM 挂载版 _validate 对齐(Index.vue _validateEl 消费 boolean 判定表单整体结果)\n return _validate();\n};\n\n// 空串 = 标记校验成功态(check=1 + data-validate-success);非空 = 失败态。\n// 需要复位到「未校验」态请用 runReset(check=0,无成功/失败标记)\nconst runErrMsg = (msg: string) => {\n _setThemeType();\n _setMsg(msg);\n};\n\nconst runReset = () => {\n _setThemeType();\n _resetMsg();\n};\n\n// 导出类型定义\nexport interface ClFormValidateExpose {\n runValidate: () => boolean;\n runErrMsg: (msg: string) => void;\n runReset: () => void;\n}\n\n// defineExpose\ndefineExpose({\n runValidate,\n runErrMsg,\n runReset,\n});\n</script>\n"],"names":["defaultRules","value","CommonBase","check","newValue","len","min","max","compareValue","strReg","validateRules","options","props","__props","optPageLanguage","getPageLanguage","getLanguageType","useLanguage","_clGlobals","inject","refElTop","ref","refElMsg","optBase","reactive","_pageElement","_pageData","_validateGlobal","_getValidateGlobals","def","injected","optParent","computed","temp","clsParent","clsTemp","CommonElement","clsErr","cls","optAriaLabel","_initRules","rules","messages","info","tempR","isCheckOne","_mergeRules","cancel","param","message","key","arrKey","str","name","newRules","r","p","rKey","newMessages","m","_getErrData","errData","totalRules","isEmpty","_getTotalMessages","lang","toRaw","vMsg","langTypeInfo","msg","_getErrMsg","totalMessages","rMsg","_getForm","_setThemeType","type","_checkRun","isRun","_setMsg","newMsg","msgEl","nextTick","_resetMsg","_formatErrMsg","msgList","_validate","result","firstRule","_initMain","hostEl","runErrMsg","runReset","onMounted","onBeforeUnmount","watch","runValidate","__expose","_openBlock","_createElementBlock","_mergeProps","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_hoisted_1","_toDisplayString","_Fragment"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const r=require("vue"),e=require("./base-C2QOJBgB.js"),R=require("./index-DAgtltwJ.js"),H=require("./index-BJq1_knk.js"),O=require("./language-DNQZvFJT.js"),P=require("./Index.vue_vue_type_script_setup_true_lang-g88DiQYZ.js"),U={required:s=>!e.CommonBase.isEmpty(s),number:s=>{let a=!0;if(!e.CommonBase.isEmpty(s)){const o=e.CommonBase.removeReplace(s);a=/^-?(\d*\.)?\d+(e[-+]?\d+)?$/i.test(o)}return a},integer:s=>{let a=!0;if(!e.CommonBase.isEmpty(s)){const o=e.CommonBase.removeReplace(s);a=/^-?\d+$/.test(o)}return a},integerPositive:s=>{let a=!0;if(!e.CommonBase.isEmpty(s)){const o=e.CommonBase.removeReplace(s);a=/^[1-9]\d*$/.test(o)}return a},alphanum:s=>{let a=!0;return e.CommonBase.isEmpty(s)||(a=/^\w+$/i.test(s)),a},email:s=>{let a=!0;return e.CommonBase.isEmpty(s)||(a=/^((([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(s)),a},minLen:(s,a)=>{let o=!0;return e.CommonBase.isEmpty(s)||(o=s.length>=parseInt(a,10)),o},maxLen:(s,a)=>{let o=!0;return e.CommonBase.isEmpty(s)||(o=s.length<=parseInt(a,10)),o},minByte:(s,a)=>{let o=!0;return e.CommonBase.isEmpty(s)||(o=e.CommonBase.getByteLen(s)>=parseInt(a,10)),o},maxByte:(s,a)=>{let o=!0;return e.CommonBase.isEmpty(s)||(o=e.CommonBase.getByteLen(s)<=parseInt(a,10)),o},minGreater:(s,a)=>{let o=!0;if(!e.CommonBase.isEmpty(s)){const f=e.CommonBase.removeReplace(s);o=parseFloat(f)>parseFloat(a)}return o},maxGreater:(s,a)=>{let o=!0;if(!e.CommonBase.isEmpty(s)){const f=e.CommonBase.removeReplace(s);o=parseFloat(f)<parseFloat(a)}return o},minGreaterEqual:(s,a)=>{let o=!0;if(!e.CommonBase.isEmpty(s)){const f=e.CommonBase.removeReplace(s);o=parseFloat(f)>=parseFloat(a)}return o},maxGreaterEqual:(s,a)=>{let o=!0;if(!e.CommonBase.isEmpty(s)){const f=e.CommonBase.removeReplace(s);o=parseFloat(f)<=parseFloat(a)}return o},phone:s=>{let a=!0;return e.CommonBase.isEmpty(s)||(a=/^1\d{10}$/.test(s)),a},equalto:(s,a)=>!e.CommonBase.isEmpty(s)&&!e.CommonBase.isEmpty(a)?s===a:!0,regular:(s,a)=>{let o=!0;return!e.CommonBase.isEmpty(s)&&!e.CommonBase.isEmpty(a)&&(o=new RegExp(a,"g").test(s)),o},urlHttp:s=>{let a=!0;return e.CommonBase.isEmpty(s)||(a=/^(http|https):\/\/[^\s]+$/.test(s)),a}},Z=(s={})=>({type:e.CommonBase.isEmpty(s.type)?"tip":s.type,rules:e.CommonBase.getJsonMerge(U,s.rules),messages:e.CommonBase.getJsonMergeDeep({},s.messages)}),Q={key:1,class:"error-text-el"},W=r.defineComponent({name:"ClFormValidate",directives:{cltooltip:H.tooltipDirectives},__name:"Validate",props:{className:String,checkValue:[String,Number],rules:{type:Array,default:()=>[]},isCheck:{type:Boolean,default:!0},msgElementId:String,msgType:{type:String,validator:s=>["tip","text"].includes(s)},pElError:String,isShowMsg:{type:Boolean,default:!0}},setup(s,{expose:a}){const o=s,{optPageLanguage:f,getPageLanguage:_,getLanguageType:V}=O.useLanguage();_("validate");const S=r.inject("$ClGlobals",null),C=r.ref(null),y=r.ref(null),c=r.reactive({type:"",msgHtml:"",check:0}),F={form:null},g={rules:{},messages:{}};let E=null;const h=()=>{if(e.CommonBase.isUndefined(E)){const t=Z(),m=S?.validate;m?e.CommonBase.isEmpty(m.rules)&&e.CommonBase.isEmpty(m.messages)?(E=e.CommonBase.isNonEmptyString(m.type)?{...t,type:m.type}:t,console.warn("[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则")):E={...t,...m,type:m.type??t.type,rules:m.rules??t.rules,messages:m.messages??t.messages}:(E=t,console.warn("[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则"))}return E},$=r.computed(()=>{const t={"data-validate-el":""};if(o.isCheck){switch(c.check){case 1:t["data-validate-success"]="";break;case 2:t["data-validate-error"]="";break}t["aria-invalid"]=c.check===2?"true":"false"}return t}),A=r.computed(()=>{const t={};return o.isCheck&&(t["panel-validate-element"]=!0),e.CommonBase.getJsonMerge(t,R.CommonElement.getClassNameJson(o.className))}),I=r.computed(()=>{const t={"panel-validate-errors":!0};return t[`validate-errors-${c.type}`]=!0,t}),N=r.computed(()=>c.msgHtml.replace(/<[^>]*>/g," ").trim()),w=t=>{if(!e.CommonBase.isArray(t)){console.warn("[cl-form-validate] rules 应为数组,已忽略");return}const m={},l={};t.forEach(n=>{if(typeof n=="string"){if(!e.CommonBase.isEmpty(n))if(e.CommonBase.isExistValue(n,"|")){const i=n.split("|");m[i[0]]=i[1],i.length>2&&console.warn('[cl-form-validate] 字符串规则 "'+n+'" 含多个参数段,仅取前两段,建议改用对象形式')}else m[n]=""}else if(typeof n=="object"&&!e.CommonBase.isUndefined(n)){let i=!0;e.CommonBase.isBoolean(n.isCheck)?i=n.isCheck===!0:(n.isCheck==="false"||n.isCheck==="0")&&(i=!1),!e.CommonBase.isEmpty(n.r)&&i&&(m[n.r]=n.p??"",e.CommonBase.isEmpty(n.m)||(l[n.r]=n.m??""))}}),g.rules=m,g.messages=l},T=()=>{const t=[],m={},l={};if(C.value&&!e.CommonBase.isEmpty(C.value.dataset)&&Object.keys(C.value.dataset).forEach(n=>{if(n.indexOf("validate")===0){const u=n.replace(/[A-Z]/g,p=>`-${p.toLowerCase()}`).split("-");if(u.length===3){const p=u[2].toLowerCase(),d=C.value.dataset[n];switch(u[1]){case"check":!e.CommonBase.isEmpty(d)&&d.toLowerCase()==="false"&&t.push(p);break;case"param":m[p]=d;break;case"message":l[p]=d;break}}}}),!e.CommonBase.isEmpty(g.rules)&&(!e.CommonBase.isEmpty(t)||!e.CommonBase.isEmpty(m))){const n={};for(const[i,u]of Object.entries(g.rules)){const p=i.toLowerCase();e.CommonBase.isExistValue(t,p)||(n[i]=e.CommonBase.isExistJsonKey(m,p)?m[p]:u)}g.rules=n}if(!e.CommonBase.isEmpty(g.messages)&&!e.CommonBase.isEmpty(l)){const n={};for(const[i,u]of Object.entries(g.messages)){const p=i.toLowerCase();n[i]=e.CommonBase.isExistJsonKey(l,p)?l[p]:u}g.messages=n}},q=t=>{const m={},l=h().rules??{};if(!e.CommonBase.isEmpty(g.rules)){const n=e.CommonBase.isEmpty(t)||e.CommonBase.getTypeof(t)==="number"&&e.CommonBase.isNaN(t),i=n?"":e.CommonBase.trim(t);for(const[u,p]of Object.entries(g.rules))if(e.CommonBase.isExistJsonKey(l,u)&&e.CommonBase.isFunction(l[u])){let d=!0;u==="required"?d=l.required(i):n||(d=l[u](i,p)),d||(m[u]=p)}else console.warn('[cl-form-validate] 校验规则 "'+u+'" 未注册或非函数,已跳过')}return m},L=()=>{_("validate");const t=r.toRaw(f.value),m=r.toRaw(h().messages??{}),l=V(),n=e.CommonBase.isExistJsonKey(m,l.type)||e.CommonBase.isExistJsonKey(m,l.def)?e.CommonBase.getJsonMerge({},m[l.def]||{},m[l.type]||{}):m;return e.CommonBase.getJsonMerge({},t,n)},j=t=>{const m=L(),l=[];return Object.keys(t).forEach(n=>{let i="";if(e.CommonBase.isNonEmptyString(g.messages[n])?i=g.messages[n]:e.CommonBase.isNonEmptyString(m[n])&&(i=m[n]),!e.CommonBase.isEmpty(i)){const u=t[n],p=e.CommonBase.isExistValue(i,"%s")?i.replace(/%s/g,e.CommonBase.isNonEmptyString(u)?u:""):i;l.push(p)}}),l},k=()=>(F.form&&!F.form.isConnected&&(F.form=null),e.CommonBase.isUndefined(F.form)&&C.value&&(F.form=R.CommonElement.getParent(C.value,"form")),F.form),x=()=>{k();let t=h().type;F.form&&!e.CommonBase.isEmpty(F.form.dataset.theme)&&(t=F.form.dataset.theme),e.CommonBase.isNonEmptyString(o.msgType)&&(t=o.msgType),t!=="tip"&&t!=="text"&&(t="tip"),c.type=t},z=()=>{let t=!0;return k(),!e.CommonBase.isUndefined(F.form)&&F.form&&(e.CommonBase.isUndefined(F.form.dataset.clValidate)||(t=!e.CommonBase.isUndefined(F.form.dataset.run))),t},v=t=>{const m=e.CommonBase.isNonEmptyString(t)?t:"";if(e.CommonBase.isEmpty(m))c.msgHtml="",c.check=1;else if(c.msgHtml=m,c.check=2,e.CommonBase.isNonEmptyString(o.msgElementId))try{const l=window.document.querySelector(o.msgElementId);l?r.nextTick(()=>{y.value&&l.isConnected?l.appendChild(y.value):y.value&&console.warn("[cl-form-validate] msgElementId 目标已脱离文档:"+o.msgElementId+",消息展示在组件内部")}):console.warn("[cl-form-validate] 未找到 msgElementId 目标元素:"+o.msgElementId+",消息展示在组件内部")}catch{console.warn("[cl-form-validate] msgElementId 选择器无效:"+o.msgElementId)}},D=()=>{c.msgHtml="",c.check=0},J=(t,m)=>{let l="";if(!e.CommonBase.isEmpty(t))switch(m){case"tip":l=t.map(n=>`<div>${n}</div>`).join("");break;case"text":l=t.join(",");break}return l},B=()=>{let t=!0;try{if(o.isCheck&&z()){x(),T();const m=q(o.checkValue);if(t=e.CommonBase.isEmpty(m),t)v("");else{let l=J(j(m),c.type);if(e.CommonBase.isEmpty(l)){const n=Object.keys(m)[0];l=e.CommonBase.isNonEmptyString(n)?n:"校验未通过"}v(l)}}else D()}catch{console.warn("[cl-form-validate] 校验执行异常,已按未通过处理"),D(),t=!1}return t},G=()=>{if(w(o.rules||[]),k(),C.value){const t=C.value;t.pElError=o.pElError,t.runValidate=B,t.runErrMsg=b,t.runReset=M}};r.onMounted(()=>{r.nextTick(()=>{G()})}),r.onBeforeUnmount(()=>{y.value?.remove()}),r.watch(()=>o.checkValue,()=>{B()}),r.watch([()=>o.rules,()=>o.isCheck],([t])=>{w(t||[]),B()},{deep:!0});const K=()=>B(),b=t=>{x(),v(t)},M=()=>{x(),D()};return a({runValidate:K,runErrMsg:b,runReset:M}),(t,m)=>{const l=r.resolveDirective("cltooltip");return r.openBlock(),r.createElementBlock("div",r.mergeProps({ref_key:"refElTop",ref:C,class:A.value},$.value),[r.renderSlot(t.$slots,"default"),c.msgHtml.length>0&&s.isShowMsg?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"refElMsg",ref:y,class:r.normalizeClass(I.value),role:"alert"},[c.type==="tip"?r.withDirectives((r.openBlock(),r.createBlock(P._sfc_main,{key:0,name:"exclamation-circle-fill",class:"error-tip-el",role:"img","aria-label":N.value},null,8,["aria-label"])),[[l,c.msgHtml]]):c.type==="text"?(r.openBlock(),r.createElementBlock("span",Q,r.toDisplayString(c.msgHtml),1)):(r.openBlock(),r.createElementBlock(r.Fragment,{key:2},[],64))],2)):(r.openBlock(),r.createElementBlock(r.Fragment,{key:1},[],64))],16)}}});exports._sfc_main=W;
2
+ //# sourceMappingURL=Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js","sources":["../../../src/libs/Element/Form/Rules.ts","../../../src/libs/Element/Form/Validate.vue"],"sourcesContent":["import CommonBase from \"../../Common/base\";\nconst defaultRules = {\n required: (value: string) => !CommonBase.isEmpty(value),\n number: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i).test(newValue);\n }\n return check;\n },\n integer: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?\\d+$/).test(newValue);\n }\n return check;\n },\n integerPositive: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^[1-9]\\d*$/).test(newValue);\n }\n return check;\n },\n alphanum: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^\\w+$/i).test(value);\n }\n return check;\n },\n email: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^((([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i).test(value);\n }\n return check;\n },\n minLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length >= parseInt(len, 10);\n }\n return check;\n },\n maxLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length <= parseInt(len, 10);\n }\n return check;\n },\n minByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) >= parseInt(len, 10);\n }\n return check;\n },\n maxByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) <= parseInt(len, 10);\n }\n return check;\n },\n minGreater: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) > parseFloat(min);\n }\n return check;\n },\n maxGreater: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) < parseFloat(max);\n }\n return check;\n },\n minGreaterEqual: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) >= parseFloat(min);\n }\n return check;\n },\n maxGreaterEqual: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) <= parseFloat(max);\n }\n return check;\n },\n phone: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^1\\d{10}$/).test(value);\n }\n return check;\n },\n equalto: (value: string, compareValue: string) => {\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(compareValue)) {\n return value === compareValue;\n }\n return true;\n },\n regular: (value: string, strReg: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(strReg)) {\n const reg = new RegExp(strReg, \"g\");\n check = reg.test(value);\n }\n return check;\n },\n urlHttp: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^(http|https):\\/\\/[^\\s]+$/).test(value);\n }\n return check;\n },\n};\nexport default (options: any = {}) => {\n return {\n type: CommonBase.isEmpty(options.type) ? \"tip\" : options.type,\n rules: CommonBase.getJsonMerge(defaultRules, options.rules),\n messages: CommonBase.getJsonMergeDeep({}, options.messages),\n };\n};","<template>\n <div\n ref=\"refElTop\"\n :class=\"clsParent\"\n v-bind=\"optParent\"\n >\n <slot></slot>\n <div\n ref=\"refElMsg\"\n v-if=\"optBase.msgHtml.length > 0 && isShowMsg\"\n :class=\"clsErr\"\n role=\"alert\"\n >\n <cl-icon-font\n v-if=\"optBase.type === 'tip'\"\n :name=\"'exclamation-circle-fill'\"\n class=\"error-tip-el\"\n role=\"img\"\n :aria-label=\"optAriaLabel\"\n v-cltooltip=\"optBase.msgHtml\"\n ></cl-icon-font>\n <span\n v-else-if=\"optBase.type === 'text'\"\n class=\"error-text-el\"\n >{{ optBase.msgHtml }}</span\n >\n <template v-else></template>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n nextTick,\n toRaw,\n inject,\n watch,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport useLanguage from '../../Use/language';\nimport validateRules from './Rules';\nimport ClIconFont from '../IconFont/Index.vue';\n\n// defineOptions\ndefineOptions({\n name: 'ClFormValidate',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n checkValue: [String, Number], // desc: 需要校验的值\n rules: {\n type: Array, // desc: 校验规则数组,支持字符串或对象形式。字符串 'rule|param'(如 'required|必填');对象 {r: 规则名, p: 参数, m: 自定义消息, isCheck: 是否启用}\n default: () => [],\n },\n isCheck: {\n type: Boolean, // desc: 是否开启校验(false 时不执行校验);校验时机由外部调用 runValidate 触发(cl-form 容器提交时自动调用)\n default: true,\n },\n msgElementId: String, // desc: 错误消息挂载目标元素选择器(不传时展示在当前组件内部)\n msgType: {\n type: String, // desc: 错误消息展示类型 | enum: tip, text\n validator: (val: string) => ['tip', 'text'].includes(val),\n },\n pElError: String, // desc: 错误元素父级定位选择器(仅供 Form 容器错误定位消费,独立直用时无效果)\n isShowMsg: {\n type: Boolean, // desc: 是否展示错误消息(默认展示;显式传 false 仅红框不显示文案,msgElementId 迁移同样不生效)\n default: true,\n },\n});\n\n// slots: default\n\n// 常量 / 变量定义\nconst { optPageLanguage, getPageLanguage, getLanguageType } = useLanguage();\ngetPageLanguage('validate');\n\n// $ClGlobals 全局配置注入(含 validate 校验规则表);标准安装(installCore)已注册 Rules.ts 实例,\n// 外部覆盖注入时按注入优先;未注册场景(独立安装不走 installCore)由 _getValidateGlobals 回退兜底\ntype RuleFunc = (value: string, param?: string) => boolean;\ninterface ClGlobals {\n validate?: {\n type?: string;\n rules?: Record<string, RuleFunc>;\n messages?: Record<string, string>;\n };\n}\ntype ValidateGlobals = NonNullable<ClGlobals['validate']>;\n// 规则项:字符串(规则名)或对象({r, p, m, isCheck});isCheck 兼容布尔与字符串 'false'/'0'\ntype RuleItem = string | { r: string; p?: string; m?: string; isCheck?: boolean | string };\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst refElTop = ref<HTMLElement | null>(null);\nconst refElMsg = ref<HTMLElement | null>(null);\n\nconst optBase = reactive({\n type: '',\n msgHtml: '',\n check: 0,\n});\n\nconst _pageElement: { form: HTMLFormElement | null } = {\n form: null,\n};\n\nconst _pageData: {\n rules: Record<string, string>;\n messages: Record<string, string>;\n} = {\n rules: {},\n messages: {},\n};\n\n// 校验规则表统一入口:优先取全局注入 $ClGlobals.validate,缺失时回退组件内置默认规则表(Rules.ts)\n// 返回类型收口为非空:函数内所有路径都已赋值(内置或注入),null 仅作缓存未初始化哨兵\nlet _validateGlobal: ValidateGlobals | null = null;\nconst _getValidateGlobals = (): ValidateGlobals => {\n if (CommonBase.isUndefined(_validateGlobal)) {\n // 内置默认表(缺失字段的兜底来源)\n const def = validateRules();\n const injected = _clGlobals?.validate;\n if (injected) {\n if (CommonBase.isEmpty(injected.rules) && CommonBase.isEmpty(injected.messages)) {\n // 规则/消息全缺:整体回退内置,但保留注入的 type(仅注入主题类型的配置不失效)\n _validateGlobal = CommonBase.isNonEmptyString(injected.type)\n ? { ...def, type: injected.type }\n : def;\n console.warn(\n '[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则',\n );\n } else {\n // 部分字段缺失时字段级兜底:缺什么补什么(如注入 rules 缺 messages → 内置消息表仍参与合并,错误文案不退化显示规则名)\n _validateGlobal = {\n ...def,\n ...injected,\n type: injected.type ?? def.type,\n rules: injected.rules ?? def.rules,\n messages: injected.messages ?? def.messages,\n };\n }\n } else {\n _validateGlobal = def;\n console.warn(\n '[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则',\n );\n }\n }\n return _validateGlobal as ValidateGlobals;\n};\n\n// computed\nconst optParent = computed(() => {\n const temp: Record<string, string> = {\n 'data-validate-el': '',\n };\n if (props.isCheck) {\n switch (optBase.check) {\n case 1:\n temp['data-validate-success'] = '';\n break;\n case 2:\n temp['data-validate-error'] = '';\n break;\n default:\n break;\n }\n // A11y:校验失败对读屏可感知(显式 'true'/'false' 保证成功→失败切换时播报状态变化)\n temp['aria-invalid'] = optBase.check === 2 ? 'true' : 'false';\n }\n return temp;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {};\n if (props.isCheck) {\n clsTemp['panel-validate-element'] = true;\n }\n return CommonBase.getJsonMerge(clsTemp, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsErr = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-validate-errors': true,\n };\n cls[`validate-errors-${optBase.type}`] = true;\n return cls;\n});\n\n// tip 模式图标的无障碍标注(去掉消息 HTML 标签后的纯文本,读屏可读)\n// 逐条 div 结构去标签后以空格分隔,防多条消息粘连成 msg1msg2\nconst optAriaLabel = computed(() => optBase.msgHtml.replace(/<[^>]*>/g, ' ').trim());\n\n// 内部调用方法\nconst _initRules = (options: RuleItem[]) => {\n if (!CommonBase.isArray(options)) {\n console.warn('[cl-form-validate] rules 应为数组,已忽略');\n return;\n }\n const rules: Record<string, string> = {};\n const messages: Record<string, string> = {};\n options.forEach((info: RuleItem) => {\n // typeof 内联判断(RuleItem 联合类型靠字面判断收窄)\n if (typeof info === 'string') {\n if (!CommonBase.isEmpty(info)) {\n if (CommonBase.isExistValue(info, '|')) {\n const tempR = info.split('|');\n rules[tempR[0]] = tempR[1];\n if (tempR.length > 2) {\n console.warn(\n '[cl-form-validate] 字符串规则 \"' +\n info +\n '\" 含多个参数段,仅取前两段,建议改用对象形式',\n );\n }\n } else {\n rules[info] = '';\n }\n }\n } else if (typeof info === 'object' && !CommonBase.isUndefined(info)) {\n // isCheck 支持布尔与字符串 'false'/'0'(与容器 data-validate-check-* 的 'false' 约定一致)\n let isCheckOne = true;\n if (CommonBase.isBoolean(info.isCheck)) {\n isCheckOne = info.isCheck === true;\n } else if (info.isCheck === 'false' || info.isCheck === '0') {\n isCheckOne = false;\n }\n if (!CommonBase.isEmpty(info.r) && isCheckOne) {\n rules[info.r] = info.p ?? '';\n if (!CommonBase.isEmpty(info.m)) {\n messages[info.r] = info.m ?? '';\n }\n }\n }\n });\n _pageData.rules = rules;\n _pageData.messages = messages;\n};\n\nconst _mergeRules = () => {\n const cancel: string[] = [];\n const param: Record<string, string> = {};\n const message: Record<string, string> = {};\n if (refElTop.value && !CommonBase.isEmpty(refElTop.value.dataset)) {\n Object.keys(refElTop.value.dataset).forEach(key => {\n if (key.indexOf('validate') === 0) {\n // dataset 键还原为 validate-{check|param|message}-{规则名};规则名小写归一,兼容驼峰规则名(如 data-validate-param-minLen)\n const tempKey = key.replace(/[A-Z]/g, str => `-${str.toLowerCase()}`);\n const arrKey = tempKey.split('-');\n if (arrKey.length === 3) {\n const name = arrKey[2].toLowerCase();\n const value: any = refElTop.value!.dataset[key];\n switch (arrKey[1]) {\n case 'check':\n if (!CommonBase.isEmpty(value) && value.toLowerCase() === 'false') {\n cancel.push(name);\n }\n break;\n case 'param':\n param[name] = value;\n break;\n case 'message':\n message[name] = value;\n break;\n default:\n break;\n }\n }\n }\n });\n }\n\n if (!CommonBase.isEmpty(_pageData.rules)) {\n if (!CommonBase.isEmpty(cancel) || !CommonBase.isEmpty(param)) {\n const newRules: any = {};\n for (const [r, p] of Object.entries(_pageData.rules)) {\n const rKey = r.toLowerCase();\n if (!CommonBase.isExistValue(cancel, rKey)) {\n newRules[r] = CommonBase.isExistJsonKey(param, rKey) ? param[rKey] : p;\n }\n }\n _pageData.rules = newRules;\n }\n }\n if (!CommonBase.isEmpty(_pageData.messages)) {\n if (!CommonBase.isEmpty(message)) {\n const newMessages: any = {};\n for (const [r, m] of Object.entries(_pageData.messages)) {\n const rKey = r.toLowerCase();\n newMessages[r] = CommonBase.isExistJsonKey(message, rKey) ? message[rKey] : m;\n }\n _pageData.messages = newMessages;\n }\n }\n};\n\nconst _getErrData = (value: string | number | undefined) => {\n const errData: Record<string, string> = {};\n // 规则表可选字段(注入可能缺 rules),缺失时按空表处理(isExistJsonKey 对空表返回 false → 走未注册警告分支)\n const totalRules = _getValidateGlobals().rules ?? {};\n if (!CommonBase.isEmpty(_pageData.rules)) {\n // NaN 视为空值(数字类型非空但无实际值),避免 trim(NaN) 产出 'NaN' 被 required 误判通过\n const isEmpty =\n CommonBase.isEmpty(value) ||\n (CommonBase.getTypeof(value) === 'number' && CommonBase.isNaN(value));\n const newValue = isEmpty ? '' : CommonBase.trim(value);\n for (const [r, p] of Object.entries(_pageData.rules)) {\n if (CommonBase.isExistJsonKey(totalRules, r) && CommonBase.isFunction(totalRules[r])) {\n let check = true;\n if (r === 'required') {\n check = totalRules.required(newValue);\n } else {\n if (!isEmpty) {\n check = totalRules[r](newValue, p);\n }\n }\n if (!check) {\n errData[r] = p;\n }\n } else {\n console.warn('[cl-form-validate] 校验规则 \"' + r + '\" 未注册或非函数,已跳过');\n }\n }\n }\n return errData;\n};\n\nconst _getTotalMessages = () => {\n // 不缓存:语言包运行时可切换(Language.setType),每次合并保证消息跟随当前语言\n // optPageLanguage 是 setup 一次性快照,运行时切换语言后不更新——现取刷新后再合并\n getPageLanguage('validate');\n const lang = toRaw(optPageLanguage.value);\n // messages 可选字段(注入可能缺失),缺失时按空表合并(回退页语言包或内置消息)\n const vMsg = toRaw(_getValidateGlobals().messages ?? {});\n const langTypeInfo = getLanguageType();\n const msg =\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.type) ||\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.def)\n ? CommonBase.getJsonMerge({}, vMsg[langTypeInfo.def] || {}, vMsg[langTypeInfo.type] || {})\n : vMsg;\n return CommonBase.getJsonMerge({}, lang, msg);\n};\n\nconst _getErrMsg = (errData: Record<string, string>) => {\n const totalMessages = _getTotalMessages();\n const msg: string[] = [];\n Object.keys(errData).forEach(r => {\n let rMsg = '';\n // 自定义消息优先于全局消息;rMsg 可能来自外部配置(非字符串类型跳过,避免 %s 判断抛错)\n if (CommonBase.isNonEmptyString(_pageData.messages[r])) {\n rMsg = _pageData.messages[r];\n } else if (CommonBase.isNonEmptyString(totalMessages[r])) {\n rMsg = totalMessages[r];\n }\n if (!CommonBase.isEmpty(rMsg)) {\n const p = errData[r];\n // p 为空时去掉占位段,避免渲染残缺文案;多占位一并替换\n const temp = CommonBase.isExistValue(rMsg, '%s')\n ? rMsg.replace(/%s/g, CommonBase.isNonEmptyString(p) ? p : '')\n : rMsg;\n msg.push(temp);\n }\n });\n return msg;\n};\n\nconst _getForm = () => {\n // form 被 v-if 重建(detached)后缓存失效,重新查找\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(null/undefined 均跳过,语义等价)\n if (_pageElement.form && !_pageElement.form.isConnected) {\n _pageElement.form = null;\n }\n if (CommonBase.isUndefined(_pageElement.form) && refElTop.value) {\n _pageElement.form = CommonElement.getParent(refElTop.value, 'form');\n }\n return _pageElement.form;\n};\n\nconst _setThemeType = () => {\n _getForm();\n let type = _getValidateGlobals().type;\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(语义等价)\n if (_pageElement.form && !CommonBase.isEmpty(_pageElement.form.dataset.theme)) {\n type = _pageElement.form.dataset.theme;\n }\n if (CommonBase.isNonEmptyString(props.msgType)) {\n type = props.msgType;\n }\n // msgType 封闭枚举兜底:非 tip/text 一律回退 tip,保证错误消息可渲染、不误标成功\n if (type !== 'tip' && type !== 'text') {\n type = 'tip';\n }\n optBase.type = type;\n};\n\nconst _checkRun = () => {\n let isRun = true;\n _getForm();\n // 运行态契约:容器 form 带 data-cl-validate 属性(cl-form 渲染的显式标记)时,显式挂 data-run 才执行校验\n // (与 Form 运行态 optBase.isRun → data-run 对应);无 form 容器(SelectCascade 等独立使用)与原生 form\n // (含任意 data-* 属性)均默认校验——是否校验由 isCheck 门控,无容器场景保持设计意图(传了校验 props 即要校验)\n if (!CommonBase.isUndefined(_pageElement.form) && _pageElement.form) {\n if (!CommonBase.isUndefined(_pageElement.form.dataset.clValidate)) {\n isRun = !CommonBase.isUndefined(_pageElement.form.dataset.run);\n }\n }\n return isRun;\n};\n\nconst _setMsg = (msg: string) => {\n // 入参统一收口为字符串,防外部传入数字/对象污染 msgHtml(模板 length 判断失效)\n const newMsg = CommonBase.isNonEmptyString(msg) ? msg : '';\n if (CommonBase.isEmpty(newMsg)) {\n optBase.msgHtml = '';\n optBase.check = 1;\n } else {\n optBase.msgHtml = newMsg;\n optBase.check = 2;\n if (CommonBase.isNonEmptyString(props.msgElementId)) {\n // 多实例共用同一 msgElementId 时,后校验失败的实例会将节点移动到目标末尾(appendChild 移动语义)\n // 属约定行为,建议每个校验组件使用独立 msgElementId,避免串扰\n try {\n const msgEl: any = window.document.querySelector(props.msgElementId);\n if (msgEl) {\n nextTick(() => {\n // 同步查询时刻存在但回调时可能已被外部移除(detached)——降级展示在组件内部并提示\n if (refElMsg.value && msgEl.isConnected) {\n msgEl.appendChild(refElMsg.value);\n } else if (refElMsg.value) {\n console.warn(\n '[cl-form-validate] msgElementId 目标已脱离文档:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n });\n } else {\n console.warn(\n '[cl-form-validate] 未找到 msgElementId 目标元素:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n } catch (err) {\n console.warn('[cl-form-validate] msgElementId 选择器无效:' + props.msgElementId);\n }\n }\n }\n};\n\n// 复位到初始未校验态(与「校验成功」区分:reset 后不残留 data-validate-success 标记)\nconst _resetMsg = () => {\n optBase.msgHtml = '';\n optBase.check = 0;\n};\n\n// 按 msgType 组装错误消息文本(tip 逐条 div 换行 / text 逗号拼接)\nconst _formatErrMsg = (msgList: string[], type: string) => {\n let msg = '';\n if (!CommonBase.isEmpty(msgList)) {\n switch (type) {\n case 'tip':\n msg = msgList.map(info => `<div>${info}</div>`).join('');\n break;\n case 'text':\n msg = msgList.join(',');\n break;\n default:\n break;\n }\n }\n return msg;\n};\n\nconst _validate = () => {\n let result = true;\n try {\n if (props.isCheck && _checkRun()) {\n _setThemeType();\n _mergeRules();\n const errData = _getErrData(props.checkValue);\n result = CommonBase.isEmpty(errData);\n if (result) {\n _setMsg('');\n } else {\n let msg = _formatErrMsg(_getErrMsg(errData), optBase.type);\n // 校验失败但消息表无对应文案时,兜底输出规则名,避免误标成功\n if (CommonBase.isEmpty(msg)) {\n const firstRule = Object.keys(errData)[0];\n msg = CommonBase.isNonEmptyString(firstRule) ? firstRule : '校验未通过';\n }\n _setMsg(msg);\n }\n } else {\n // 未运行校验:复位到未校验态,不残留成功标记\n _resetMsg();\n }\n } catch (err) {\n console.warn('[cl-form-validate] 校验执行异常,已按未通过处理');\n // 异常按未通过处理时同步复位标记,避免残留上一次的成功视觉态与返回结果矛盾\n _resetMsg();\n result = false;\n }\n return result;\n};\n\n// 挂载在元素上的校验方法链(与 Form 容器 _validateEl 消费契约一致:Index.vue 经 el.runValidate() 取结果)\ninterface ValidateHost extends HTMLElement {\n pElError?: string;\n runValidate?: () => boolean;\n runErrMsg?: (msg: string) => void;\n runReset?: () => void;\n}\n\nconst _initMain = () => {\n // props.rules 未泛型化(defineProps type: Array → unknown[]),断言为 RuleItem[] 传入\n _initRules((props.rules as RuleItem[]) || []);\n _getForm();\n if (refElTop.value) {\n const hostEl = refElTop.value as ValidateHost;\n hostEl.pElError = props.pElError;\n hostEl.runValidate = _validate;\n // DOM 挂载版复用 expose 版方法:带 _setThemeType 同步主题类型,与外部调用 runErrMsg/runReset 行为一致\n hostEl.runErrMsg = runErrMsg;\n hostEl.runReset = runReset;\n }\n};\n\n// 生命周期\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nonBeforeUnmount(() => {\n // msgElementId 迁移到外部节点的错误消息已脱离组件 DOM 树,Vue 卸载不会清理——手动移除防残留\n refElMsg.value?.remove();\n});\n\n// watch\n// checkValue 变化只重新校验(规则表已初始化,重建纯属浪费)\nwatch(\n () => props.checkValue,\n () => {\n _validate();\n },\n);\n\n// rules / isCheck 变化才重建规则表并重新校验(isCheck 关闭时 _validate 走复位分支)\nwatch(\n [() => props.rules, () => props.isCheck],\n ([newRules]: [unknown[], boolean]) => {\n _initRules((newRules as RuleItem[]) || []);\n _validate();\n },\n { deep: true },\n);\n\n// 开放给外部使用的方法\nconst runValidate = () => {\n // 返回值与 DOM 挂载版 _validate 对齐(Index.vue _validateEl 消费 boolean 判定表单整体结果)\n return _validate();\n};\n\n// 空串 = 标记校验成功态(check=1 + data-validate-success);非空 = 失败态。\n// 需要复位到「未校验」态请用 runReset(check=0,无成功/失败标记)\nconst runErrMsg = (msg: string) => {\n _setThemeType();\n _setMsg(msg);\n};\n\nconst runReset = () => {\n _setThemeType();\n _resetMsg();\n};\n\n// 导出类型定义\nexport interface ClFormValidateExpose {\n runValidate: () => boolean;\n runErrMsg: (msg: string) => void;\n runReset: () => void;\n}\n\n// defineExpose\ndefineExpose({\n runValidate,\n runErrMsg,\n runReset,\n});\n</script>\n"],"names":["defaultRules","value","CommonBase","check","newValue","len","min","max","compareValue","strReg","validateRules","options","props","__props","optPageLanguage","getPageLanguage","getLanguageType","useLanguage","_clGlobals","inject","refElTop","ref","refElMsg","optBase","reactive","_pageElement","_pageData","_validateGlobal","_getValidateGlobals","def","injected","optParent","computed","temp","clsParent","clsTemp","CommonElement","clsErr","cls","optAriaLabel","_initRules","rules","messages","info","tempR","isCheckOne","_mergeRules","cancel","param","message","key","arrKey","str","name","newRules","r","p","rKey","newMessages","m","_getErrData","errData","totalRules","isEmpty","_getTotalMessages","lang","toRaw","vMsg","langTypeInfo","msg","_getErrMsg","totalMessages","rMsg","_getForm","_setThemeType","type","_checkRun","isRun","_setMsg","newMsg","msgEl","nextTick","_resetMsg","_formatErrMsg","msgList","_validate","result","firstRule","_initMain","hostEl","runErrMsg","runReset","onMounted","onBeforeUnmount","watch","runValidate","__expose","_openBlock","_createElementBlock","_mergeProps","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_hoisted_1","_toDisplayString","_Fragment"],"mappings":"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"}