@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
@@ -1 +1 @@
1
- {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js","sources":["../../../src/libs/Mobile/PullToRefresh/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"ptr-track\">\n <div\n class=\"ptr-indicator\"\n :style=\"styIndicator\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n class=\"ptr-indicator-inner\"\n :class=\"`ptr-state-${optState}`\"\n >\n <slot\n name=\"indicator\"\n :state=\"optState\"\n :distance=\"optPullDistance\"\n :threshold=\"optThreshold\"\n >\n <cl-load\n v-if=\"optState === 'loading'\"\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-indicator-load\"\n />\n <template v-else>\n <i\n :class=\"pullIcon\"\n aria-hidden=\"true\"\n ></i>\n </template>\n <span class=\"ptr-text\">{{ optIndicatorText }}</span>\n </slot>\n </div>\n </div>\n <div\n ref=\"refElContent\"\n class=\"ptr-content\"\n :class=\"{ 'ptr-content-virtual': optIsVirtual }\"\n :style=\"styContent\"\n @scroll=\"onScrollScroller\"\n @touchstart=\"onPullStart\"\n @touchmove=\"onPullMove\"\n @touchend=\"onPullEnd\"\n @touchcancel=\"onPullEnd\"\n @mousedown=\"onPullStart\"\n >\n <div\n v-if=\"optIsVirtual\"\n class=\"ptr-scroller-wrap\"\n >\n <DynamicScroller\n class=\"ptr-scroller\"\n :items=\"optSafeList\"\n :min-item-size=\"optMinItemSize\"\n :key-field=\"keyField\"\n @scroll=\"onScrollScroller\"\n >\n <template v-slot:default=\"{ item, index, active }\">\n <DynamicScrollerItem\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n :size-dependencies=\"_getSizeDependencies(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n />\n </DynamicScrollerItem>\n </template>\n <template v-slot:after>\n <div\n v-if=\"isLoading\"\n class=\"ptr-loadmore\"\n >\n <slot name=\"loadMore\">\n <cl-load\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-loadmore-load\"\n />\n <span>{{ loadingText }}</span>\n </slot>\n </div>\n <template v-else></template>\n <div\n v-if=\"isFinished && !isLoading\"\n class=\"ptr-finished\"\n >\n <slot name=\"finished\">\n <span>{{ finishedText }}</span>\n </slot>\n </div>\n <template v-else></template>\n </template>\n </DynamicScroller>\n </div>\n <slot v-else></slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onBeforeUnmount, onDeactivated, type PropType } from 'vue';\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './Index.css';\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\ndefineOptions({ name: 'ClPullToRefresh' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用下拉刷新\n threshold: {\n type: Number,\n default: 60, // desc: 下拉刷新阈值(px)\n },\n list: Array as () => any[], // desc: 列表数据,传入则启用虚拟滚动渲染\n minItemSize: {\n type: Number,\n default: 60, // desc: 列表项最小高度(px),用于 DynamicScroller 初始估算\n },\n keyField: {\n type: String,\n default: 'id', // desc: 虚拟滚动列表项的 key 字段名\n },\n isFinished: Boolean, // desc: 是否已加载完全部数据\n isLoading: Boolean, // desc: 是否正在加载更多\n pullIcon: {\n type: String,\n default: 'ptr-icon-arrow', // desc: 下拉刷新箭头图标类名(<i> 元素)\n },\n pullingText: {\n type: String,\n default: '下拉即可刷新...', // desc: 下拉中提示文字\n },\n readyText: {\n type: String,\n default: '释放即可刷新...', // desc: 达到阈值松手即可刷新的提示文字\n },\n refreshingText: {\n type: String,\n default: '加载中...', // desc: 刷新中提示文字\n },\n loadingText: {\n type: String,\n default: '加载中...', // desc: 加载更多时提示文字\n },\n finishedText: {\n type: String,\n default: '没有更多了', // desc: 已加载全部提示文字\n },\n sizeDependencies: {\n type: Function as PropType<\n (item: any) => Record<string, unknown> | unknown[] | null | undefined\n >,\n }, // desc: 列表项高度依赖项提取函数,用于动态高度重算\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onRefresh'): void; // desc: 下拉达到阈值松手后触发刷新\n (e: 'onLoadMore'): void; // desc: 虚拟滚动滚动到底部时触发加载更多\n}>();\n// slots: indicator(下拉指示器,携带 state/distance/threshold), item(列表项,携带 item/index/active), loadMore(加载更多提示), finished(加载完成提示), default(非虚拟滚动时的默认内容)\n\nconst elId = props.id; // || `_elId_pulltorefresh-${CommonBase.getRandom(8)}`\n\n// ref\nconst refElContent = ref<HTMLElement | null>(null);\n\n// state\nconst optState = ref<'idle' | 'pulling' | 'ready' | 'loading'>('idle');\nconst optPullDistance = ref<number>(0);\nconst _startY = ref<number>(0);\nconst _isTracking = ref<boolean>(false);\nconst _isPulling = ref<boolean>(false);\nconst _scrollTop = ref<number>(0);\nlet _rafId: number | null = null;\nlet _pendingDeltaY = 0;\nlet _lastLoadMoreAt = 0;\nlet _lastProbeAt = 0;\nlet _probeTimer: number | null = null;\n\n// computed\nconst optThreshold = computed(() => {\n const t = props.threshold;\n // isFinite 兜底 NaN/undefined(default 60 已覆盖 undefined,NaN 需显式拦截)\n // typeof number 拦截隐式 Number() 转换的脏值('' → 0 / true → 1),Math.max(1, t) 钳制 0 值防阈值失禁\n return CommonBase.isFinite(t) && typeof t === 'number' ? Math.max(1, t) : 60;\n});\n\nconst optIsVirtual = computed(() => CommonBase.isArray(props.list));\n\n// 虚拟列表项过滤 null/undefined(第三方 DynamicScroller 对空项 getKey 抛 TypeError,渲染中断);\n// 契约:插槽 item/index 基于过滤后数组,脏项存在时 index 与父组件原 list 索引错位,父组件勿按 index 回写原 list\nconst optSafeList = computed(() =>\n optIsVirtual.value\n ? (props.list as unknown[]).filter(item => item !== null && item !== undefined)\n : [],\n);\n\nconst optMinItemSize = computed(() => {\n const v = props.minItemSize;\n // 与 optThreshold 同模式钳制(typeof number 拦脏值),防 0/NaN/负值导致 DynamicScroller 估算异常\n return CommonBase.isFinite(v) && typeof v === 'number' ? Math.max(1, v) : 60;\n});\n\nconst optIndicatorText = computed(() => {\n switch (optState.value) {\n case 'loading':\n return props.refreshingText;\n case 'ready':\n return props.readyText;\n case 'pulling':\n return props.pullingText;\n default:\n return '';\n }\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-pulltorefresh': true };\n if (props.disabled) {\n cls['ptr-disabled'] = true;\n }\n if (_isPulling.value) {\n cls['ptr-is-pulling'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styIndicator = computed(() => ({\n height: `${optPullDistance.value}px`,\n}));\n\n// 拖拽会话中接管手势(touch-action: none 使 preventDefault 生效,避免被浏览器原生 pan 吞掉);\n// 非拖拽时返回空,让 CSS 的 touch-action: pan-y 保留页面原生纵向滚动\nconst styContent = computed(() =>\n _isTracking.value && _isPulling.value ? { touchAction: 'none' } : {},\n);\n\n// 内部方法\n// 阻尼换算并封顶(0.4 平滑拉距,2×阈值封顶防极端长拖撑爆指示器)\nconst _calcDistance = (deltaY: number) => Math.min(deltaY * 0.4, optThreshold.value * 2);\n\nconst _isAtTop = () => {\n // 容忍 1px 亚像素回弹(iOS 滚动容器 scrollTop 会停在 0.1~1px)\n if (optIsVirtual.value) {\n return _scrollTop.value <= 1;\n }\n const el = refElContent.value;\n if (!el) return true;\n return el.scrollTop <= 1;\n};\n\nconst _getClientY = (e: TouchEvent | MouseEvent): number => {\n if ('touches' in e) {\n const touches = (e as TouchEvent).touches;\n return touches.length > 0 ? touches[0].clientY : 0;\n }\n return (e as MouseEvent).clientY;\n};\n\n// 适配函数包装,避免 as any 双断言绕过类型系统\nconst _onDocMove = ((e: Event) => onPullMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onPullEnd(e as MouseEvent)) as EventListener;\n\nconst _startMouseListeners = () => {\n document.addEventListener('mousemove', _onDocMove);\n document.addEventListener('mouseup', _onDocUp);\n};\n\nconst _stopMouseListeners = () => {\n document.removeEventListener('mousemove', _onDocMove);\n document.removeEventListener('mouseup', _onDocUp);\n};\n\nconst _resetPull = () => {\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _pendingDeltaY = 0;\n _isPulling.value = false;\n optPullDistance.value = 0;\n optState.value = 'idle';\n};\n// 提取内部方法,避免模板内联三元 + 函数调用\n// try/catch 兜底:sizeDependencies 为父组件提供的函数,抛错时不击穿模板渲染\nconst _getSizeDependencies = (item: unknown) => {\n if (!props.sizeDependencies) return undefined;\n try {\n return props.sizeDependencies(item);\n } catch {\n return undefined;\n }\n};\n\nconst _emitLoadMore = () => {\n const now = Date.now();\n if (now - _lastLoadMoreAt < 500) return;\n if (!props.isFinished && !props.isLoading) {\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\n// 虚拟滚动\"补满一屏\"探测补发:与滚动路径(_emitLoadMore 500ms 节流)分离,\n// 用独立微节流(_lastProbeAt),避免被滚动节流吞掉导致加载停摆(父端响应快 + 首屏不满时滚动路径不可达)\nconst _probeFill = () => {\n if (!optIsVirtual.value || props.isFinished || props.isLoading) return;\n const now = Date.now();\n if (now - _lastProbeAt < 100) {\n // 节流窗口内末次变化:延后到窗口结束补发一次,防被吞后无新 list 变化驱动导致补发停摆\n if (_probeTimer === null) {\n _probeTimer = window.setTimeout(() => {\n _probeTimer = null;\n _probeFill();\n }, 100);\n }\n return;\n }\n // 经模板静态类名定位 DynamicScroller 根滚动元素(class 绑定必然落根),不依赖第三方内部类名\n const scroller = refElContent.value?.querySelector<HTMLElement>('.ptr-scroller');\n if (!scroller) return;\n // 同步滚动位置缓存:list 替换/刷新后浏览器未必补发 scroll 事件,避免下拉被旧 _scrollTop 抑制或误判顶部\n _scrollTop.value = scroller.scrollTop || 0;\n // 容器不可见(clientHeight=0,如 keep-alive 停用/父未布局)时不补发,避免后台无谓请求\n if (scroller.clientHeight <= 0) return;\n if (scroller.scrollHeight <= scroller.clientHeight) {\n _lastProbeAt = now;\n // 与滚动路径共享 500ms 加载节流戳,防 probe 补发后父端 push 使列表可滚动、短窗口内滚动触底重复 onLoadMore\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\nconst _cleanupTracking = () => {\n _stopMouseListeners();\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _isTracking.value = false;\n};\n\n// 生命周期\nonBeforeUnmount(() => {\n _cleanupTracking();\n if (_probeTimer !== null) {\n clearTimeout(_probeTimer);\n _probeTimer = null;\n }\n});\nonDeactivated(() => {\n _cleanupTracking();\n // 非 loading 态复位视觉状态,避免 keep-alive 切回后指示器残留\n if (optState.value !== 'loading') _resetPull();\n});\n\n// watch\nwatch(\n () => props.disabled,\n val => {\n if (val) {\n _cleanupTracking();\n // loading 期间禁用只停交互,加载状态由父组件 finishRefresh 收尾\n if (optState.value !== 'loading') _resetPull();\n }\n },\n);\n\n// 虚拟模式重建时重置滚动位置标记,防止 list 置空/重赋后下拉被抑制\nwatch(\n () => optIsVirtual.value,\n val => {\n if (val) _scrollTop.value = 0;\n },\n);\n\n// 虚拟滚动内容不足一屏时 scroll-end 不触发,列表变化后主动补发 onLoadMore\n// 同时监听引用与长度,覆盖引用替换(等量替换)与原地修改(push)两类盲区\nwatch(\n () => [props.list, props.list?.length],\n async () => {\n if (!optIsVirtual.value) return;\n await nextTick();\n _probeFill();\n },\n { immediate: true },\n);\n\n// 事件方法\nconst onPullStart = (e: TouchEvent | MouseEvent) => {\n if (props.disabled || optState.value === 'loading') return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理并复位视觉状态,避免残留 ready 态点击误触发刷新\n if (_isTracking.value) {\n _cleanupTracking();\n _resetPull();\n }\n _startY.value = _getClientY(e);\n _isTracking.value = true;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onPullMove = (e: TouchEvent | MouseEvent) => {\n if (!_isTracking.value || props.disabled) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾,防止监听残留\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onPullEnd();\n return;\n }\n _pendingDeltaY = _getClientY(e) - _startY.value;\n if (_pendingDeltaY > 0 && _isAtTop()) {\n _isPulling.value = true;\n e.preventDefault();\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n const d = _calcDistance(_pendingDeltaY);\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n });\n }\n } else if (_isPulling.value) {\n _resetPull();\n }\n};\n\nconst onPullEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isTracking.value) return;\n _isTracking.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发刷新,仅复位\n if (e?.type === 'touchcancel') {\n _resetPull();\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算状态,防止快速松手丢 onRefresh(阻尼 0.4 + 2×阈值封顶)\n const d = _calcDistance(_pendingDeltaY);\n if (d >= 0) {\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n }\n }\n if (props.disabled || !(_isPulling.value && optState.value === 'ready')) {\n _resetPull();\n } else {\n optState.value = 'loading';\n optPullDistance.value = optThreshold.value;\n // loading 期间不算拖拽,释放 ptr-is-pulling 类避免 user-select 持续锁定\n _isPulling.value = false;\n emit('onRefresh');\n }\n};\n\nconst onScrollScroller = (e: Event) => {\n const el = e.target as HTMLElement | null;\n _scrollTop.value = el?.scrollTop || 0;\n // 内容不足一屏时 scroll-end 不触发,主动补发 onLoadMore\n if (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n _emitLoadMore();\n }\n};\n\n// 开放方法\nconst finishRefresh = () => {\n // 先终止跟踪会话(拖拽中调用时防监听残留与二次 emit),再复位视觉状态\n _cleanupTracking();\n _resetPull();\n // 下拉刷新替换短列表后清空加载/探测节流戳,避免补发 onLoadMore 被旧节流窗口吞掉\n _lastLoadMoreAt = 0;\n _lastProbeAt = 0;\n};\n\n// 导出类型\nexport interface ClPullToRefreshExpose {\n finishRefresh: () => void;\n}\n\ndefineExpose({ finishRefresh });\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElContent","ref","optState","optPullDistance","_startY","_isTracking","_isPulling","_scrollTop","_rafId","_pendingDeltaY","_lastLoadMoreAt","_lastProbeAt","_probeTimer","optThreshold","computed","CommonBase","optIsVirtual","optSafeList","item","optMinItemSize","v","optIndicatorText","clsParent","cls","CommonElement","styIndicator","styContent","_calcDistance","deltaY","_isAtTop","el","_getClientY","e","touches","_onDocMove","onPullMove","_onDocUp","onPullEnd","_startMouseListeners","_stopMouseListeners","_resetPull","_getSizeDependencies","_emitLoadMore","now","_probeFill","scroller","_cleanupTracking","onBeforeUnmount","onDeactivated","watch","val","nextTick","onPullStart","d","onScrollScroller","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_renderSlot","_ctx","_createBlock","ClLoad","_hoisted_3","_toDisplayString","_openBlock","_hoisted_4","_createVNode","DynamicScroller","index","active","DynamicScrollerItem","_hoisted_5","_Fragment","_hoisted_6"],"mappings":"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"}
1
+ {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js","sources":["../../../src/libs/Mobile/PullToRefresh/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"ptr-track\">\n <div\n class=\"ptr-indicator\"\n :style=\"styIndicator\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n class=\"ptr-indicator-inner\"\n :class=\"`ptr-state-${optState}`\"\n >\n <slot\n name=\"indicator\"\n :state=\"optState\"\n :distance=\"optPullDistance\"\n :threshold=\"optThreshold\"\n >\n <cl-load\n v-if=\"optState === 'loading'\"\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-indicator-load\"\n />\n <template v-else>\n <i\n :class=\"pullIcon\"\n aria-hidden=\"true\"\n ></i>\n </template>\n <span class=\"ptr-text\">{{ optIndicatorText }}</span>\n </slot>\n </div>\n </div>\n <div\n ref=\"refElContent\"\n class=\"ptr-content\"\n :class=\"{ 'ptr-content-virtual': optIsVirtual }\"\n :style=\"styContent\"\n @scroll=\"onScrollScroller\"\n @touchstart=\"onPullStart\"\n @touchmove=\"onPullMove\"\n @touchend=\"onPullEnd\"\n @touchcancel=\"onPullEnd\"\n @mousedown=\"onPullStart\"\n >\n <div\n v-if=\"optIsVirtual\"\n class=\"ptr-scroller-wrap\"\n >\n <DynamicScroller\n class=\"ptr-scroller\"\n :items=\"optSafeList\"\n :min-item-size=\"optMinItemSize\"\n :key-field=\"keyField\"\n @scroll=\"onScrollScroller\"\n >\n <template v-slot:default=\"{ item, index, active }\">\n <DynamicScrollerItem\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n :size-dependencies=\"_getSizeDependencies(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n />\n </DynamicScrollerItem>\n </template>\n <template v-slot:after>\n <div\n v-if=\"isLoading\"\n class=\"ptr-loadmore\"\n >\n <slot name=\"loadMore\">\n <cl-load\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-loadmore-load\"\n />\n <span>{{ loadingText }}</span>\n </slot>\n </div>\n <template v-else></template>\n <div\n v-if=\"isFinished && !isLoading\"\n class=\"ptr-finished\"\n >\n <slot name=\"finished\">\n <span>{{ finishedText }}</span>\n </slot>\n </div>\n <template v-else></template>\n </template>\n </DynamicScroller>\n </div>\n <slot v-else></slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onBeforeUnmount, onDeactivated, type PropType } from 'vue';\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './Index.css';\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\ndefineOptions({ name: 'ClPullToRefresh' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用下拉刷新\n threshold: {\n type: Number,\n default: 60, // desc: 下拉刷新阈值(px)\n },\n list: Array as () => any[], // desc: 列表数据,传入则启用虚拟滚动渲染\n minItemSize: {\n type: Number,\n default: 60, // desc: 列表项最小高度(px),用于 DynamicScroller 初始估算\n },\n keyField: {\n type: String,\n default: 'id', // desc: 虚拟滚动列表项的 key 字段名\n },\n isFinished: Boolean, // desc: 是否已加载完全部数据\n isLoading: Boolean, // desc: 是否正在加载更多\n pullIcon: {\n type: String,\n default: 'ptr-icon-arrow', // desc: 下拉刷新箭头图标类名(<i> 元素)\n },\n pullingText: {\n type: String,\n default: '下拉即可刷新...', // desc: 下拉中提示文字\n },\n readyText: {\n type: String,\n default: '释放即可刷新...', // desc: 达到阈值松手即可刷新的提示文字\n },\n refreshingText: {\n type: String,\n default: '加载中...', // desc: 刷新中提示文字\n },\n loadingText: {\n type: String,\n default: '加载中...', // desc: 加载更多时提示文字\n },\n finishedText: {\n type: String,\n default: '没有更多了', // desc: 已加载全部提示文字\n },\n sizeDependencies: {\n type: Function as PropType<\n (item: any) => Record<string, unknown> | unknown[] | null | undefined\n >,\n }, // desc: 列表项高度依赖项提取函数,用于动态高度重算\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onRefresh'): void; // desc: 下拉达到阈值松手后触发刷新\n (e: 'onLoadMore'): void; // desc: 虚拟滚动滚动到底部时触发加载更多\n}>();\n// slots: indicator(下拉指示器,携带 state/distance/threshold), item(列表项,携带 item/index/active), loadMore(加载更多提示), finished(加载完成提示), default(非虚拟滚动时的默认内容)\n\nconst elId = props.id; // || `_elId_pulltorefresh-${CommonBase.getRandom(8)}`\n\n// ref\nconst refElContent = ref<HTMLElement | null>(null);\n\n// state\nconst optState = ref<'idle' | 'pulling' | 'ready' | 'loading'>('idle');\nconst optPullDistance = ref<number>(0);\nconst _startY = ref<number>(0);\nconst _isTracking = ref<boolean>(false);\nconst _isPulling = ref<boolean>(false);\nconst _scrollTop = ref<number>(0);\nlet _rafId: number | null = null;\nlet _pendingDeltaY = 0;\nlet _lastLoadMoreAt = 0;\nlet _lastProbeAt = 0;\nlet _probeTimer: number | null = null;\n\n// computed\nconst optThreshold = computed(() => {\n const t = props.threshold;\n // isFinite 兜底 NaN/undefined(default 60 已覆盖 undefined,NaN 需显式拦截)\n // typeof number 拦截隐式 Number() 转换的脏值('' → 0 / true → 1),Math.max(1, t) 钳制 0 值防阈值失禁\n return CommonBase.isFinite(t) && typeof t === 'number' ? Math.max(1, t) : 60;\n});\n\nconst optIsVirtual = computed(() => CommonBase.isArray(props.list));\n\n// 虚拟列表项过滤 null/undefined(第三方 DynamicScroller 对空项 getKey 抛 TypeError,渲染中断);\n// 契约:插槽 item/index 基于过滤后数组,脏项存在时 index 与父组件原 list 索引错位,父组件勿按 index 回写原 list\nconst optSafeList = computed(() =>\n optIsVirtual.value\n ? (props.list as unknown[]).filter(item => item !== null && item !== undefined)\n : [],\n);\n\nconst optMinItemSize = computed(() => {\n const v = props.minItemSize;\n // 与 optThreshold 同模式钳制(typeof number 拦脏值),防 0/NaN/负值导致 DynamicScroller 估算异常\n return CommonBase.isFinite(v) && typeof v === 'number' ? Math.max(1, v) : 60;\n});\n\nconst optIndicatorText = computed(() => {\n switch (optState.value) {\n case 'loading':\n return props.refreshingText;\n case 'ready':\n return props.readyText;\n case 'pulling':\n return props.pullingText;\n default:\n return '';\n }\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-pulltorefresh': true };\n if (props.disabled) {\n cls['ptr-disabled'] = true;\n }\n if (_isPulling.value) {\n cls['ptr-is-pulling'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styIndicator = computed(() => ({\n height: `${optPullDistance.value}px`,\n}));\n\n// 拖拽会话中接管手势(touch-action: none 使 preventDefault 生效,避免被浏览器原生 pan 吞掉);\n// 非拖拽时返回空,让 CSS 的 touch-action: pan-y 保留页面原生纵向滚动\nconst styContent = computed(() =>\n _isTracking.value && _isPulling.value ? { touchAction: 'none' } : {},\n);\n\n// 内部方法\n// 阻尼换算并封顶(0.4 平滑拉距,2×阈值封顶防极端长拖撑爆指示器)\nconst _calcDistance = (deltaY: number) => Math.min(deltaY * 0.4, optThreshold.value * 2);\n\nconst _isAtTop = () => {\n // 容忍 1px 亚像素回弹(iOS 滚动容器 scrollTop 会停在 0.1~1px)\n if (optIsVirtual.value) {\n return _scrollTop.value <= 1;\n }\n const el = refElContent.value;\n if (!el) return true;\n return el.scrollTop <= 1;\n};\n\nconst _getClientY = (e: TouchEvent | MouseEvent): number => {\n if ('touches' in e) {\n const touches = (e as TouchEvent).touches;\n return touches.length > 0 ? touches[0].clientY : 0;\n }\n return (e as MouseEvent).clientY;\n};\n\n// 适配函数包装,避免 as any 双断言绕过类型系统\nconst _onDocMove = ((e: Event) => onPullMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onPullEnd(e as MouseEvent)) as EventListener;\n\nconst _startMouseListeners = () => {\n document.addEventListener('mousemove', _onDocMove);\n document.addEventListener('mouseup', _onDocUp);\n};\n\nconst _stopMouseListeners = () => {\n document.removeEventListener('mousemove', _onDocMove);\n document.removeEventListener('mouseup', _onDocUp);\n};\n\nconst _resetPull = () => {\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _pendingDeltaY = 0;\n _isPulling.value = false;\n optPullDistance.value = 0;\n optState.value = 'idle';\n};\n// 提取内部方法,避免模板内联三元 + 函数调用\n// try/catch 兜底:sizeDependencies 为父组件提供的函数,抛错时不击穿模板渲染\nconst _getSizeDependencies = (item: unknown) => {\n if (!props.sizeDependencies) return undefined;\n try {\n return props.sizeDependencies(item);\n } catch {\n return undefined;\n }\n};\n\nconst _emitLoadMore = () => {\n const now = Date.now();\n if (now - _lastLoadMoreAt < 500) return;\n if (!props.isFinished && !props.isLoading) {\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\n// 虚拟滚动\"补满一屏\"探测补发:与滚动路径(_emitLoadMore 500ms 节流)分离,\n// 用独立微节流(_lastProbeAt),避免被滚动节流吞掉导致加载停摆(父端响应快 + 首屏不满时滚动路径不可达)\nconst _probeFill = () => {\n if (!optIsVirtual.value || props.isFinished || props.isLoading) return;\n const now = Date.now();\n if (now - _lastProbeAt < 100) {\n // 节流窗口内末次变化:延后到窗口结束补发一次,防被吞后无新 list 变化驱动导致补发停摆\n if (_probeTimer === null) {\n _probeTimer = window.setTimeout(() => {\n _probeTimer = null;\n _probeFill();\n }, 100);\n }\n return;\n }\n // 经模板静态类名定位 DynamicScroller 根滚动元素(class 绑定必然落根),不依赖第三方内部类名\n const scroller = refElContent.value?.querySelector<HTMLElement>('.ptr-scroller');\n if (!scroller) return;\n // 同步滚动位置缓存:list 替换/刷新后浏览器未必补发 scroll 事件,避免下拉被旧 _scrollTop 抑制或误判顶部\n _scrollTop.value = scroller.scrollTop || 0;\n // 容器不可见(clientHeight=0,如 keep-alive 停用/父未布局)时不补发,避免后台无谓请求\n if (scroller.clientHeight <= 0) return;\n if (scroller.scrollHeight <= scroller.clientHeight) {\n _lastProbeAt = now;\n // 与滚动路径共享 500ms 加载节流戳,防 probe 补发后父端 push 使列表可滚动、短窗口内滚动触底重复 onLoadMore\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\nconst _cleanupTracking = () => {\n _stopMouseListeners();\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _isTracking.value = false;\n};\n\n// 生命周期\nonBeforeUnmount(() => {\n _cleanupTracking();\n if (_probeTimer !== null) {\n clearTimeout(_probeTimer);\n _probeTimer = null;\n }\n});\nonDeactivated(() => {\n _cleanupTracking();\n // 非 loading 态复位视觉状态,避免 keep-alive 切回后指示器残留\n if (optState.value !== 'loading') _resetPull();\n});\n\n// watch\nwatch(\n () => props.disabled,\n val => {\n if (val) {\n _cleanupTracking();\n // loading 期间禁用只停交互,加载状态由父组件 finishRefresh 收尾\n if (optState.value !== 'loading') _resetPull();\n }\n },\n);\n\n// 虚拟模式重建时重置滚动位置标记,防止 list 置空/重赋后下拉被抑制\nwatch(\n () => optIsVirtual.value,\n val => {\n if (val) _scrollTop.value = 0;\n },\n);\n\n// 虚拟滚动内容不足一屏时 scroll-end 不触发,列表变化后主动补发 onLoadMore\n// 同时监听引用与长度,覆盖引用替换(等量替换)与原地修改(push)两类盲区\nwatch(\n () => [props.list, props.list?.length],\n async () => {\n if (!optIsVirtual.value) return;\n await nextTick();\n _probeFill();\n },\n { immediate: true },\n);\n\n// 事件方法\nconst onPullStart = (e: TouchEvent | MouseEvent) => {\n if (props.disabled || optState.value === 'loading') return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理并复位视觉状态,避免残留 ready 态点击误触发刷新\n if (_isTracking.value) {\n _cleanupTracking();\n _resetPull();\n }\n _startY.value = _getClientY(e);\n _isTracking.value = true;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onPullMove = (e: TouchEvent | MouseEvent) => {\n if (!_isTracking.value || props.disabled) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾,防止监听残留\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onPullEnd();\n return;\n }\n _pendingDeltaY = _getClientY(e) - _startY.value;\n if (_pendingDeltaY > 0 && _isAtTop()) {\n _isPulling.value = true;\n e.preventDefault();\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n const d = _calcDistance(_pendingDeltaY);\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n });\n }\n } else if (_isPulling.value) {\n _resetPull();\n }\n};\n\nconst onPullEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isTracking.value) return;\n _isTracking.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发刷新,仅复位\n if (e?.type === 'touchcancel') {\n _resetPull();\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算状态,防止快速松手丢 onRefresh(阻尼 0.4 + 2×阈值封顶)\n const d = _calcDistance(_pendingDeltaY);\n if (d >= 0) {\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n }\n }\n if (props.disabled || !(_isPulling.value && optState.value === 'ready')) {\n _resetPull();\n } else {\n optState.value = 'loading';\n optPullDistance.value = optThreshold.value;\n // loading 期间不算拖拽,释放 ptr-is-pulling 类避免 user-select 持续锁定\n _isPulling.value = false;\n emit('onRefresh');\n }\n};\n\nconst onScrollScroller = (e: Event) => {\n const el = e.target as HTMLElement | null;\n _scrollTop.value = el?.scrollTop || 0;\n // 内容不足一屏时 scroll-end 不触发,主动补发 onLoadMore\n if (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n _emitLoadMore();\n }\n};\n\n// 开放方法\nconst finishRefresh = () => {\n // 先终止跟踪会话(拖拽中调用时防监听残留与二次 emit),再复位视觉状态\n _cleanupTracking();\n _resetPull();\n // 下拉刷新替换短列表后清空加载/探测节流戳,避免补发 onLoadMore 被旧节流窗口吞掉\n _lastLoadMoreAt = 0;\n _lastProbeAt = 0;\n};\n\n// 导出类型\nexport interface ClPullToRefreshExpose {\n finishRefresh: () => void;\n}\n\ndefineExpose({ finishRefresh });\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElContent","ref","optState","optPullDistance","_startY","_isTracking","_isPulling","_scrollTop","_rafId","_pendingDeltaY","_lastLoadMoreAt","_lastProbeAt","_probeTimer","optThreshold","computed","CommonBase","optIsVirtual","optSafeList","item","optMinItemSize","v","optIndicatorText","clsParent","cls","CommonElement","styIndicator","styContent","_calcDistance","deltaY","_isAtTop","el","_getClientY","e","touches","_onDocMove","onPullMove","_onDocUp","onPullEnd","_startMouseListeners","_stopMouseListeners","_resetPull","_getSizeDependencies","_emitLoadMore","now","_probeFill","scroller","_cleanupTracking","onBeforeUnmount","onDeactivated","watch","val","nextTick","onPullStart","d","onScrollScroller","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_renderSlot","_ctx","_createBlock","ClLoad","_hoisted_3","_toDisplayString","_openBlock","_hoisted_4","_createVNode","DynamicScroller","index","active","DynamicScrollerItem","_hoisted_5","_Fragment","_hoisted_6"],"mappings":"ihCA2HA,MAAMA,EAAQC,EAmDRC,EAAOC,EAMPC,EAAOJ,EAAM,GAGbK,EAAeC,EAAAA,IAAwB,IAAI,EAG3CC,EAAWD,EAAAA,IAA8C,MAAM,EAC/DE,EAAkBF,EAAAA,IAAY,CAAC,EAC/BG,EAAUH,EAAAA,IAAY,CAAC,EACvBI,EAAcJ,EAAAA,IAAa,EAAK,EAChCK,EAAaL,EAAAA,IAAa,EAAK,EAC/BM,EAAaN,EAAAA,IAAY,CAAC,EAChC,IAAIO,EAAwB,KACxBC,EAAiB,EACjBC,EAAkB,EAClBC,EAAe,EACfC,EAA6B,KAGjC,MAAMC,EAAeC,EAAAA,SAAS,IAAM,CAClC,MAAM,EAAInB,EAAM,UAGhB,OAAOoB,aAAW,SAAS,CAAC,GAAK,OAAO,GAAM,SAAW,KAAK,IAAI,EAAG,CAAC,EAAI,EAC5E,CAAC,EAEKC,EAAeF,EAAAA,SAAS,IAAMC,EAAAA,WAAW,QAAQpB,EAAM,IAAI,CAAC,EAI5DsB,EAAcH,EAAAA,SAAS,IAC3BE,EAAa,MACRrB,EAAM,KAAmB,OAAOuB,GAAQA,GAAS,IAA0B,EAC5E,CAAA,CAAC,EAGDC,EAAiBL,EAAAA,SAAS,IAAM,CACpC,MAAMM,EAAIzB,EAAM,YAEhB,OAAOoB,aAAW,SAASK,CAAC,GAAK,OAAOA,GAAM,SAAW,KAAK,IAAI,EAAGA,CAAC,EAAI,EAC5E,CAAC,EAEKC,EAAmBP,EAAAA,SAAS,IAAM,CACtC,OAAQZ,EAAS,MAAA,CACf,IAAK,UACH,OAAOP,EAAM,eACf,IAAK,QACH,OAAOA,EAAM,UACf,IAAK,UACH,OAAOA,EAAM,YACf,QACE,MAAO,EAAA,CAEb,CAAC,EAEK2B,EAAYR,EAAAA,SAAS,IAAM,CAC/B,IAAIS,EAA+B,CAAE,sBAAuB,EAAA,EAC5D,OAAI5B,EAAM,WACR4B,EAAI,cAAc,EAAI,IAEpBjB,EAAW,QACbiB,EAAI,gBAAgB,EAAI,IAE1BA,EAAMR,EAAAA,WAAW,aAAaQ,EAAKC,EAAAA,cAAc,iBAAiB7B,EAAM,SAAS,CAAC,EAC3E4B,CACT,CAAC,EAEKE,EAAeX,EAAAA,SAAS,KAAO,CACnC,OAAQ,GAAGX,EAAgB,KAAK,IAAA,EAChC,EAIIuB,EAAaZ,EAAAA,SAAS,IAC1BT,EAAY,OAASC,EAAW,MAAQ,CAAE,YAAa,QAAW,CAAA,CAAC,EAK/DqB,EAAiBC,GAAmB,KAAK,IAAIA,EAAS,GAAKf,EAAa,MAAQ,CAAC,EAEjFgB,EAAW,IAAM,CAErB,GAAIb,EAAa,MACf,OAAOT,EAAW,OAAS,EAE7B,MAAMuB,EAAK9B,EAAa,MACxB,OAAK8B,EACEA,EAAG,WAAa,EADP,EAElB,EAEMC,EAAeC,GAAuC,CAC1D,GAAI,YAAaA,EAAG,CAClB,MAAMC,EAAWD,EAAiB,QAClC,OAAOC,EAAQ,OAAS,EAAIA,EAAQ,CAAC,EAAE,QAAU,CACnD,CACA,OAAQD,EAAiB,OAC3B,EAGME,GAAeF,GAAaG,EAAWH,CAAe,GACtDI,GAAaJ,GAAaK,EAAUL,CAAe,GAEnDM,EAAuB,IAAM,CACjC,SAAS,iBAAiB,YAAaJ,CAAU,EACjD,SAAS,iBAAiB,UAAWE,CAAQ,CAC/C,EAEMG,EAAsB,IAAM,CAChC,SAAS,oBAAoB,YAAaL,CAAU,EACpD,SAAS,oBAAoB,UAAWE,CAAQ,CAClD,EAEMI,EAAa,IAAM,CACnBhC,IAAW,OACb,qBAAqBA,CAAM,EAC3BA,EAAS,MAEXC,EAAiB,EACjBH,EAAW,MAAQ,GACnBH,EAAgB,MAAQ,EACxBD,EAAS,MAAQ,MACnB,EAGMuC,EAAwBvB,GAAkB,CAC9C,GAAKvB,EAAM,iBACX,GAAI,CACF,OAAOA,EAAM,iBAAiBuB,CAAI,CACpC,MAAQ,CACN,MACF,CACF,EAEMwB,EAAgB,IAAM,CAC1B,MAAMC,EAAM,KAAK,IAAA,EACbA,EAAMjC,EAAkB,KACxB,CAACf,EAAM,YAAc,CAACA,EAAM,YAC9Be,EAAkBiC,EAClB9C,EAAK,YAAY,EAErB,EAIM+C,EAAa,IAAM,CACvB,GAAI,CAAC5B,EAAa,OAASrB,EAAM,YAAcA,EAAM,UAAW,OAChE,MAAMgD,EAAM,KAAK,IAAA,EACjB,GAAIA,EAAMhC,EAAe,IAAK,CAExBC,IAAgB,OAClBA,EAAc,OAAO,WAAW,IAAM,CACpCA,EAAc,KACdgC,EAAA,CACF,EAAG,GAAG,GAER,MACF,CAEA,MAAMC,EAAW7C,EAAa,OAAO,cAA2B,eAAe,EAC1E6C,IAELtC,EAAW,MAAQsC,EAAS,WAAa,EAErC,EAAAA,EAAS,cAAgB,IACzBA,EAAS,cAAgBA,EAAS,eACpClC,EAAegC,EAEfjC,EAAkBiC,EAClB9C,EAAK,YAAY,GAErB,EAEMiD,EAAmB,IAAM,CAC7BP,EAAA,EACI/B,IAAW,OACb,qBAAqBA,CAAM,EAC3BA,EAAS,MAEXH,EAAY,MAAQ,EACtB,EAGA0C,EAAAA,gBAAgB,IAAM,CACpBD,EAAA,EACIlC,IAAgB,OAClB,aAAaA,CAAW,EACxBA,EAAc,KAElB,CAAC,EACDoC,EAAAA,cAAc,IAAM,CAClBF,EAAA,EAEI5C,EAAS,QAAU,WAAWsC,EAAA,CACpC,CAAC,EAGDS,EAAAA,MACE,IAAMtD,EAAM,SACZuD,GAAO,CACDA,IACFJ,EAAA,EAEI5C,EAAS,QAAU,WAAWsC,EAAA,EAEtC,CAAA,EAIFS,EAAAA,MACE,IAAMjC,EAAa,MACnBkC,GAAO,CACDA,MAAgB,MAAQ,EAC9B,CAAA,EAKFD,EAAAA,MACE,IAAM,CAACtD,EAAM,KAAMA,EAAM,MAAM,MAAM,EACrC,SAAY,CACLqB,EAAa,QAClB,MAAMmC,WAAA,EACNP,EAAA,EACF,EACA,CAAE,UAAW,EAAA,CAAK,EAIpB,MAAMQ,EAAepB,GAA+B,CAC9CrC,EAAM,UAAYO,EAAS,QAAU,WACrC,EAAE,YAAa8B,IAAOA,EAAiB,SAAW,IAElD3B,EAAY,QACdyC,EAAA,EACAN,EAAA,GAEFpC,EAAQ,MAAQ2B,EAAYC,CAAC,EAC7B3B,EAAY,MAAQ,GACd,YAAa2B,GACjBM,EAAA,EAEJ,EAEMH,EAAcH,GAA+B,CACjD,GAAI,GAAC3B,EAAY,OAASV,EAAM,UAEhC,IAAI,EAAE,YAAaqC,IAAOA,EAAiB,UAAY,EAAG,CACxDK,EAAA,EACA,MACF,CACA5B,EAAiBsB,EAAYC,CAAC,EAAI5B,EAAQ,MACtCK,EAAiB,GAAKoB,KACxBvB,EAAW,MAAQ,GACnB0B,EAAE,eAAA,EACExB,IAAW,OACbA,EAAS,sBAAsB,IAAM,CACnCA,EAAS,KACT,MAAM6C,EAAI1B,EAAclB,CAAc,EACtCN,EAAgB,MAAQkD,EACxBnD,EAAS,MAAQmD,GAAKxC,EAAa,MAAQ,QAAU,SACvD,CAAC,IAEMP,EAAW,OACpBkC,EAAA,EAEJ,EAEMH,EAAaL,GAAgC,CACjD,GAAK3B,EAAY,MAIjB,IAHAA,EAAY,MAAQ,GACpBkC,EAAA,EAEIP,GAAG,OAAS,cAAe,CAC7BQ,EAAA,EACA,MACF,CACA,GAAIhC,IAAW,KAAM,CACnB,qBAAqBA,CAAM,EAC3BA,EAAS,KAET,MAAM6C,EAAI1B,EAAclB,CAAc,EAClC4C,GAAK,IACPlD,EAAgB,MAAQkD,EACxBnD,EAAS,MAAQmD,GAAKxC,EAAa,MAAQ,QAAU,UAEzD,CACIlB,EAAM,UAAY,EAAEW,EAAW,OAASJ,EAAS,QAAU,SAC7DsC,EAAA,GAEAtC,EAAS,MAAQ,UACjBC,EAAgB,MAAQU,EAAa,MAErCP,EAAW,MAAQ,GACnBT,EAAK,WAAW,GAEpB,EAEMyD,EAAoBtB,GAAa,CACrC,MAAMF,EAAKE,EAAE,OACbzB,EAAW,MAAQuB,GAAI,WAAa,EAEhCA,GAAMA,EAAG,UAAYA,EAAG,cAAgBA,EAAG,cAC7CY,EAAA,CAEJ,EAiBA,OAAAa,EAAa,CAAE,cAdO,IAAM,CAE1BT,EAAA,EACAN,EAAA,EAEA9B,EAAkB,EAClBC,EAAe,CACjB,EAO8B,wBArf5B6C,EAAAA,mBA2GM,MAAA,CA1GH,GAAIC,EAAAA,MAAA1D,CAAA,EACJ,uBAAOuB,EAAA,KAAS,CAAA,GAEjBoC,EAAAA,mBAsGM,MAtGNC,EAsGM,CArGJD,EAAAA,mBAgCM,MAAA,CA/BJ,MAAM,gBACL,uBAAOjC,EAAA,KAAY,EACpB,KAAK,SACL,YAAU,QAAA,GAEViC,EAAAA,mBAyBM,MAAA,CAxBJ,MAAKE,EAAAA,eAAA,CAAC,sBAAqB,aACN1D,EAAA,KAAQ,EAAA,CAAA,CAAA,GAE7B2D,aAoBOC,EAAA,OAAA,YAAA,CAlBJ,MAAO5D,EAAA,MACP,SAAUC,EAAA,MACV,UAAWU,EAAA,KAAA,EAJd,IAoBO,CAbGX,EAAA,QAAQ,yBADhB6D,EAAAA,YAMEC,EAAAA,UAAA,OAJA,MAAM,gBACN,KAAK,QACL,MAAM,OACN,UAAU,oBAAA,mBAGVR,EAAAA,mBAGK,IAAA,OAFF,uBAAO5D,EAAA,QAAQ,EAChB,cAAY,MAAA,WAGhB8D,EAAAA,mBAAoD,OAApDO,GAAoDC,EAAAA,gBAA1B7C,EAAA,KAAgB,EAAA,CAAA,CAAA,WAIhDqC,EAAAA,mBAmEM,MAAA,SAlEA,eAAJ,IAAI1D,EACJ,MAAK4D,EAAAA,eAAA,CAAC,cAAa,CAAA,sBACc5C,EAAA,KAAA,CAAY,CAAA,EAC5C,uBAAOU,EAAA,KAAU,EACjB,SAAQ4B,EACR,aAAYF,EACZ,YAAWjB,EACX,WAAUE,EACV,cAAaA,EACb,YAAWe,CAAA,GAGJpC,EAAA,OADRmD,EAAAA,UAAA,EAAAX,EAAAA,mBAqDM,MArDNY,GAqDM,CAjDJC,cAgDkBZ,EAAAA,MAAAa,EAAAA,eAAA,EAAA,CA/ChB,MAAM,eACL,MAAOrD,EAAA,MACP,gBAAeE,EAAA,MACf,YAAWvB,EAAA,SACX,SAAQ0D,CAAA,GAEQ,kBACf,CAYsB,CAbI,KAAApC,EAAM,MAAAqD,EAAO,OAAAC,KAAM,CAC7CH,cAYsBZ,EAAAA,MAAAgB,EAAAA,mBAAA,EAAA,CAXnB,KAAAvD,EACA,MAAAqD,EACA,OAAAC,EACA,oBAAmB/B,EAAqBvB,CAAI,CAAA,qBAE7C,IAKE,CALF2C,aAKEC,EAAA,OAAA,OAAA,CAHC,KAAA5C,EACA,MAAAqD,EACA,OAAAC,CAAA,gEAIU,gBACf,IAaM,CAZE5E,EAAA,WADRuE,EAAAA,UAAA,EAAAX,EAAAA,mBAaM,MAbNkB,GAaM,CATJb,EAAAA,WAQOC,uBARP,IAQO,CAPLO,EAAAA,YAKEL,EAAAA,UAAA,CAJA,MAAM,gBACN,KAAK,QACL,MAAM,OACN,UAAU,mBAAA,GAEZN,EAAAA,mBAA8B,8BAArB9D,EAAA,WAAW,EAAA,CAAA,CAAA,qBAGxB4D,EAAAA,mBAA4BmB,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpB/E,EAAA,aAAeA,EAAA,WADvBuE,EAAAA,YAAAX,EAAAA,mBAOM,MAPNoB,GAOM,CAHJf,EAAAA,WAEOC,uBAFP,IAEO,CADLJ,EAAAA,mBAA+B,8BAAtB9D,EAAA,YAAY,EAAA,CAAA,CAAA,qBAGzB4D,EAAAA,mBAA4BmB,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,oDAIlCd,EAAAA,WAAoBC,EAAA,OAAA,UAAA,CAAA,IAAA,CAAA,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
1
  "use strict";const o=require("vue"),n=require("./base-C2QOJBgB.js"),oe=require("./index-DAgtltwJ.js"),re=require("./SlideUpDown.vue_vue_type_script_setup_true_lang-dmJX02R8.js"),le={class:"tree-ul"},ie=["onClick"],ae=["aria-checked","onClick"],ce=["tabindex","aria-disabled","onClick","onDblclick","onKeydown"],de=["innerHTML"],me={key:1},Y=170,Q=o.defineComponent({name:"ClTreeUl",__name:"Ul",props:{list:{type:Array,default:()=>[]},multiple:{type:Boolean,default:!1},isSingleSelectParent:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},firstOpenIds:{type:Array,default:()=>[]},openIds:{type:Array,default:()=>[]},selectIds:{type:Array,default:()=>[]},selectUnIds:{type:Array,default:()=>[]}},emits:["onSelect","onShrink"],setup(B,{emit:R}){const y=B,c=R,_=`tree-${n.CommonBase.getRandom(5)}`;let V=!1;const l=o.inject("$TreeTop",{isCheckChildren:()=>(V||(V=!0,console.warn("ClTreeUl:未检测到 ClTree 容器提供 $TreeTop,子级判断降级为 false")),!1)}),h={dbClickTimeOut:null},H=o.computed(()=>new Set(y.firstOpenIds)),L=o.computed(()=>new Set(y.selectIds)),b=o.computed(()=>new Set(y.selectUnIds)),N=o.computed(()=>new Set(y.openIds)),U=m=>{n.CommonBase.isUndefined(m)||c("onSelect",m.toString())},E=m=>{n.CommonBase.isUndefined(m)||c("onShrink",m.toString())},O=m=>n.CommonBase.isUndefined(m.id)?"":m.id.toString(),A=m=>{const C=O(m);return L.value.has(C)?"true":b.value.has(C)?"mixed":"false"},F=m=>{const C={"tree-node":!0};if(C["tree-node-end"]=m.isEnd,!m.isEnd){const g=n.CommonBase.isUndefined(m.id)?"":m.id.toString(),T=N.value.has(g);C["tree-node-open"]=T,C["tree-node-closed"]=!T}return C},w=m=>{const C=n.CommonBase.isUndefined(m.id)?"":m.id.toString(),g={"tree-node-text":!0};return g["tree-node-select"]=L.value.has(C),g["tree-node-selectUn"]=b.value.has(C),g};o.onBeforeUnmount(()=>{h.dbClickTimeOut&&window.clearTimeout(h.dbClickTimeOut)});const J=m=>{y.disabled||(window.clearTimeout(h.dbClickTimeOut),E(m.id))},M=m=>{y.disabled||(window.clearTimeout(h.dbClickTimeOut),U(m.id))},v=m=>{if(!y.disabled)if(l.isCheckChildren(m.id)){let C=!0;!y.multiple&&!y.isSingleSelectParent&&(C=!1),C?(window.clearTimeout(h.dbClickTimeOut),h.dbClickTimeOut=window.setTimeout(()=>{y.disabled||U(m.id)},Y)):window.clearTimeout(h.dbClickTimeOut)}else window.clearTimeout(h.dbClickTimeOut),h.dbClickTimeOut=window.setTimeout(()=>{y.disabled||U(m.id)},Y)},j=m=>{y.disabled||l.isCheckChildren(m.id)&&(h.dbClickTimeOut&&window.clearTimeout(h.dbClickTimeOut),E(m.id))},K=m=>{U(m)},$=m=>{E(m)};return(m,C)=>(o.openBlock(),o.createElementBlock("ul",le,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(B.list,(g,T)=>(o.openBlock(),o.createElementBlock("li",{key:`${_}-${g.id}-${T}`,class:o.normalizeClass(F(g))},[o.createElementVNode("i",{class:"tree-shrink",onClick:o.withModifiers(x=>J(g),["stop"])},null,8,ie),o.createElementVNode("span",{class:o.normalizeClass(w(g))},[B.multiple?(o.openBlock(),o.createElementBlock("i",{key:0,class:"tree-node-checkbox",role:"checkbox","aria-checked":A(g),onClick:o.withModifiers(x=>M(g),["stop"])},null,8,ae)):(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[],64)),o.createElementVNode("a",{href:"javascript:",tabindex:B.disabled?-1:0,"aria-disabled":B.disabled,onClick:o.withModifiers(x=>v(g),["stop"]),onDblclick:o.withModifiers(x=>j(g),["stop"]),onKeydown:o.withKeys(o.withModifiers(x=>v(g),["prevent"]),["enter"])},[g.showTextLabelHtml?(o.openBlock(),o.createElementBlock("span",{key:0,innerHTML:g.showTextLabel},null,8,de)):(o.openBlock(),o.createElementBlock("span",me,o.toDisplayString(g.showTextLabel),1))],40,ce)],2),H.value.has(O(g))?(o.openBlock(),o.createBlock(re._sfc_main,{key:0},{default:o.withCtx(()=>[o.withDirectives(o.createVNode(Q,{list:g.list,multiple:B.multiple,isSingleSelectParent:B.isSingleSelectParent,disabled:B.disabled,firstOpenIds:B.firstOpenIds,openIds:B.openIds,selectIds:B.selectIds,selectUnIds:B.selectUnIds,onOnSelect:K,onOnShrink:$},null,8,["list","multiple","isSingleSelectParent","disabled","firstOpenIds","openIds","selectIds","selectUnIds"]),[[o.vShow,N.value.has(O(g))]])]),_:2},1024)):(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[],64))],2))),128))]))}}),pe=["id"],ue=o.defineComponent({name:"ClTree",__name:"Index",props:{id:String,value:String,className:String,disabled:{type:Boolean,default:!1},list:{type:Array,default:()=>[]},multiple:{type:Boolean,default:!1},isSingleSelectParent:{type:Boolean,default:!1},isOutMerge:{type:Boolean,default:!0},parentKey:{type:String,default:"parentId"},topParentValue:{type:String,default:"0"},searchOpenParentIds:{type:String,default:""},searchFoldParentIds:{type:String,default:""},searchKeyword:{type:String,default:""},highlightMode:{type:String,default:""},highlightColor:{type:String,default:""}},emits:["update:value","onChange","onInit"],setup(B,{expose:R,emit:y}){const c=B,_=y,V=c.id,l=o.reactive({firstOpenIds:[],openParentIds:[],selectedIds:[],selectedUnIds:[],list:[]}),h={dataJson:{},dataGroup:{},childLastIdsJson:{},prevSearchOpenParentIds:"",prevSearchFoldParentIds:""},H=o.computed(()=>({multiple:c.multiple,disabled:c.disabled,isSingleSelectParent:c.isSingleSelectParent})),L=o.computed(()=>n.CommonBase.getJsonMerge({"panel-tree":!0},oe.CommonElement.getClassNameJson(c.className))),b=t=>{_("update:value",t)},N=(t,e)=>{b(t),_("onChange",t,e)},U=()=>{o.nextTick(()=>{_("onInit")})},E=t=>{const e=n.CommonBase.isUndefined(t)?"":t.toString();return n.CommonBase.isExistJsonKey(h.dataGroup,e)},O=t=>{const e=n.CommonBase.isUndefined(t)?"":t.toString();return E(e)?h.dataGroup[e]:[]},A=t=>{const e=t.toString();return n.CommonBase.isExistJsonKey(h.dataJson,e)?h.dataJson[e]:null},F=(t,e,s)=>{const i=[],u=e+1;return s===void 0&&(s=new Set),s.has(t)||(s.add(t),O(t).forEach(d=>{const a={...d},r=a.id.toString(),p=E(r);a.isEnd=!p,a.level=u,p&&(a.list=F(r,u,s)),i.push(a)})),i},w=t=>t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),J=t=>{const e=c.searchKeyword,s=c.highlightMode;if(!n.CommonBase.isNonEmptyString(t)||n.CommonBase.isEmpty(e))return w(String(t));const i=n.CommonBase.isNonEmptyString(c.highlightColor)?c.highlightColor:"#ffe58f",u=I=>`<mark style="background:${i}">${w(I)}</mark>`;if(s==="full")return t.includes(e)?u(t):w(t);const d=t.indexOf(e);if(d===-1)return w(t);const a=w(t.slice(0,d)),r=u(t.slice(d,d+e.length)),p=w(t.slice(d+e.length));return`${a}${r}${p}`},M=t=>{const{parentKey:e,topParentValue:s}=c,i=n.CommonBase.isNonEmptyString(s)?s:"0",u={},d={};n.CommonBase.isEmpty(t)||t.forEach(a=>{const r=n.CommonBase.getJsonClone(a),p=!n.CommonBase.isEmpty(c.searchKeyword)&&!n.CommonBase.isEmpty(c.highlightMode);r.showTextLabelHtml=p,r.showTextLabel=p?J(n.CommonBase.isString(r.name)?r.name:""):n.CommonBase.isString(r.name)?r.name:"";const I=n.CommonBase.isString(r.id)||typeof r.id=="number"&&n.CommonBase.isFinite(r.id),f=n.CommonBase.isString(r[e])||typeof r[e]=="number"&&n.CommonBase.isFinite(r[e]);if(!I||!f)return;const k=r.id.toString(),S=r[e].toString();u[k]=r,n.CommonBase.isExistJsonKey(d,S)||(d[S]=[]),d[S].push(r)}),h.dataJson=u,h.dataGroup=d,h.childLastIdsJson={},l.list=F(i,0)},v=(t,e)=>{let s=[];const{parentKey:i,topParentValue:u}=c,d=n.CommonBase.isNonEmptyString(u)?u:"0",a=n.CommonBase.isEmpty(t)?"":t.toString();if(e===void 0&&(e=new Set),n.CommonBase.isExistJsonKey(h.dataJson,a)&&!e.has(a)){e.add(a),s.push(a);const r=h.dataJson[a][i].toString();if(r!==d){const p=v(r,e);s=s.concat(p)}}return s},j=t=>{const e=v(t);return e.splice(0,1),e.reverse(),e},K=(t,e)=>{let s=[];const i=n.CommonBase.isEmpty(t)?"":t.toString();return e===void 0&&(e=new Set),e.has(i)||(e.add(i),s.push(i),E(i)&&O(i).forEach(u=>{const d=u.id.toString(),a=K(d,e);s=s.concat(a)})),s},$=t=>{const e=K(t);return e.splice(0,1),e},m=(t,e,s,i)=>{const u={add:[],del:[]},d={add:[],del:[]};let a=n.CommonBase.isUndefined(e)?n.CommonBase.getArrClone(l.selectedIds):e,r=n.CommonBase.isUndefined(s)?n.CommonBase.getArrClone(l.selectedUnIds):s;const p=a.indexOf(t);i?p===-1&&a.push(t):p===-1?a.push(t):a.splice(p,1),r=n.CommonBase.getArrRemoveById(r,t);const I=j(t);return I.reverse(),I.length>0&&I.forEach(f=>{let k=0,S=0;h.dataGroup[f].forEach(se=>{const W=se.id.toString();n.CommonBase.isExistValue(a,W)&&(k+=1),n.CommonBase.isExistValue(r,W)&&(S+=1)});const q=h.dataGroup[f].length;k===0&&S===0?(u.del.push(f),a=n.CommonBase.getArrRemoveById(a,f),d.del.push(f),r=n.CommonBase.getArrRemoveById(r,f)):k===q?(u.add.push(f),a.push(f),d.del.push(f),r=n.CommonBase.getArrRemoveById(r,f)):(u.del.push(f),a=n.CommonBase.getArrRemoveById(a,f),d.add.push(f),r.push(f))}),{select:u,selectUn:d}},C=(t,e)=>{let s=[];if(e===void 0&&(e=new Set),n.CommonBase.isExistJsonKey(h.childLastIdsJson,t)&&h.childLastIdsJson[t].length>0)s=h.childLastIdsJson[t];else{if(e.has(t))return s;E(t)?(e.add(t),O(t).forEach(i=>{const u=C(i.id.toString(),e);u.length>0&&(s=s.concat(u))})):s.push(t),h.childLastIdsJson[t]=s}return s},g=(t,e)=>{const{parentKey:s,topParentValue:i}=c,u=n.CommonBase.isNonEmptyString(i)?i:"0",d={},a=[];let r=[];if(e===void 0&&(e=new Set),t.forEach(p=>{const I=A(p);if(!n.CommonBase.isUndefined(I)){const f=I[s].toString();f===u?r.push(p):(n.CommonBase.isExistJsonKey(d,f)||(d[f]=[]),d[f].push(p))}}),!n.CommonBase.isEmpty(d))for(const[p,I]of Object.entries(d))I.length===O(p).length?a.push(p):r=r.concat(I);if(a.length>0){r.push(...a);const p=n.CommonBase.getArrUnique(r),I=a.some(f=>!e.has(f));return a.forEach(f=>e.add(f)),I?g(p,e):r}else return r},T=t=>{const e=[],s=n.CommonBase.getArrConvertJson(t);return t.forEach(u=>{const d=O(u);if(n.CommonBase.isEmpty(d))e.push(u);else{const a=[];d.forEach(r=>{n.CommonBase.isExistJsonKey(s,r.id.toString())&&a.push(r.id)}),d.length!==a.length&&e.push(u)}}),g(e)},x=t=>{let e=[];return t.forEach(s=>{const i=C(s);e.push(...i)}),e=n.CommonBase.getArrUnique(e),e},P=(t,e)=>c.multiple?(n.CommonBase.isBoolean(e)?e:c.isOutMerge)?T(t):x(t):t,G=t=>{const e=[];return t.forEach(s=>{const i=A(s);n.CommonBase.isUndefined(i)||e.push(i)}),e},D=t=>{const e=c.multiple?t:t.slice(0,1);let s=[],i=[];e.forEach(d=>{const a=A(d);if(!n.CommonBase.isUndefined(a)){const r=m(d,s,i,!0);s=n.CommonBase.getArrRemoveById(s,r.select.del),r.select.add.length>0&&s.push(...r.select.add),i=n.CommonBase.getArrRemoveById(i,r.selectUn.del),r.selectUn.add.length>0&&i.push(...r.selectUn.add);const p=$(d);s.push(...p),s.push(d),s=n.CommonBase.getArrUnique(s),i=n.CommonBase.getArrUnique(i)}}),l.selectedIds=s;const u=n.CommonBase.getArrRemoveById(i,s);l.selectedUnIds=n.CommonBase.getArrClone(u),l.firstOpenIds=n.CommonBase.getArrUnique(l.firstOpenIds.concat(u)),l.openParentIds=n.CommonBase.getArrUnique(l.openParentIds.concat(u))},X=()=>{if(M(c.list),n.CommonBase.isNonEmptyString(c.value)){const t=c.value.split(",");D(t)}U()};o.onMounted(()=>{o.nextTick(()=>{X()})}),o.watch(()=>c.list,t=>{M(t);const e=l.selectedIds,s=n.CommonBase.isNonEmptyString(c.value)?c.value.split(","):[];l.selectedIds=[],D(n.CommonBase.getArrUnique(e.concat(s)));const i=P(l.selectedIds);i.join(",")!==c.value&&b(i.join(","))}),o.watch(()=>c.value,t=>{if(t!==void 0){const e=l.selectedIds,s=n.CommonBase.isNonEmptyString(t)?t.split(","):[],i=P(s),u=P(e);n.CommonBase.isEqualArr(i,u)||(l.selectedIds=[],D(s))}});const Z=()=>{const t=n.CommonBase.isNonEmptyString(h.prevSearchFoldParentIds)?h.prevSearchFoldParentIds.split(","):[];l.firstOpenIds=n.CommonBase.getArrRemoveById(l.firstOpenIds,t),(n.CommonBase.isNonEmptyString(c.searchFoldParentIds)?c.searchFoldParentIds.split(","):[]).forEach(s=>{const i=s.toString();l.firstOpenIds.indexOf(i)===-1&&l.firstOpenIds.push(i)}),h.prevSearchFoldParentIds=n.CommonBase.isNonEmptyString(c.searchFoldParentIds)?c.searchFoldParentIds:""},ee=()=>{const t=n.CommonBase.isNonEmptyString(h.prevSearchOpenParentIds)?h.prevSearchOpenParentIds.split(","):[];l.firstOpenIds=n.CommonBase.getArrRemoveById(l.firstOpenIds,t),l.openParentIds=n.CommonBase.getArrRemoveById(l.openParentIds,t),(n.CommonBase.isNonEmptyString(c.searchOpenParentIds)?c.searchOpenParentIds.split(","):[]).forEach(s=>{const i=s.toString();l.firstOpenIds.indexOf(i)===-1&&l.firstOpenIds.push(i),l.openParentIds.indexOf(i)===-1&&l.openParentIds.push(i)}),h.prevSearchOpenParentIds=n.CommonBase.isNonEmptyString(c.searchOpenParentIds)?c.searchOpenParentIds:""};o.watch(()=>c.searchOpenParentIds,()=>ee()),o.watch(()=>c.searchFoldParentIds,()=>Z());const z=t=>{Array.isArray(t)&&t.forEach(e=>{if(!e)return;const s=!n.CommonBase.isEmpty(c.searchKeyword)&&!n.CommonBase.isEmpty(c.highlightMode);e.showTextLabelHtml=s,e.showTextLabel=s?J(n.CommonBase.isString(e.name)?e.name:""):n.CommonBase.isString(e.name)?e.name:"",Array.isArray(e.list)&&z(e.list)})};o.watch(()=>[c.searchKeyword,c.highlightMode,c.highlightColor],()=>z(l.list));const te=t=>{const e=t.toString();n.CommonBase.isExistValue(l.firstOpenIds,e)||l.firstOpenIds.push(e),o.nextTick(()=>{const s=l.openParentIds.indexOf(e);s===-1?l.openParentIds.push(e):l.openParentIds.splice(s,1)})},ne=t=>{const e=t.toString();if(c.multiple){const u=l.selectedIds.indexOf(e)===-1,d=$(e),a=m(e);let r=n.CommonBase.getArrClone(l.selectedIds),p=n.CommonBase.getArrClone(l.selectedUnIds);a.select.del.forEach(k=>{const S=r.indexOf(k);S>-1&&r.splice(S,1)}),a.select.add.length>0&&(r=r.concat(a.select.add),r=n.CommonBase.getArrUnique(r)),a.selectUn.del.forEach(k=>{const S=p.indexOf(k);S>-1&&p.splice(S,1)}),a.selectUn.add.length>0&&(p=p.concat(a.selectUn.add),p=n.CommonBase.getArrUnique(p)),d.length>0&&d.forEach(k=>{const S=r.indexOf(k),q=p.indexOf(k);u?S===-1&&r.push(k):S>-1&&r.splice(S,1),q>-1&&p.splice(q,1)});const I=r.indexOf(e);I>-1?r.splice(I,1):r.push(e);const f=p.indexOf(e);f>-1&&p.splice(f,1),l.selectedIds=r,l.selectedUnIds=p}else l.selectedIds=[e],l.selectedUnIds=[];const s=P(l.selectedIds);N(s.join(","),G(s))};return o.provide("$TreeTop",{isCheckChildren:E}),R({getValue:()=>P(l.selectedIds).join(","),getValueData:()=>{const t=P(l.selectedIds);return G(t)},setValue:t=>{const e=n.CommonBase.isNonEmptyString(t)?t.split(","):[];l.selectedIds=[],D(e)}}),(t,e)=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(L.value),id:o.unref(V)},[l.list.length>0?(o.openBlock(),o.createBlock(Q,o.mergeProps({key:0,list:l.list,firstOpenIds:l.firstOpenIds,openIds:l.openParentIds,selectIds:l.selectedIds,selectUnIds:l.selectedUnIds},H.value,{onOnSelect:ne,onOnShrink:te}),null,16,["list","firstOpenIds","openIds","selectIds","selectUnIds"])):(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[],64))],10,pe))}});exports._sfc_main=ue;
2
- //# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map
2
+ //# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js","sources":["../../../src/libs/Web/Tree/Ul.vue","../../../src/libs/Web/Tree/Index.vue"],"sourcesContent":["<template>\n <ul class=\"tree-ul\">\n <li\n v-for=\"(item, rIndex) in list\"\n :key=\"`${_keyIndex}-${item.id}-${rIndex}`\"\n :class=\"clsLiFun(item)\"\n >\n <i\n class=\"tree-shrink\"\n @click.stop=\"onClickShrink(item)\"\n ></i>\n <span :class=\"clsLabelFun(item)\">\n <i\n v-if=\"multiple\"\n class=\"tree-node-checkbox\"\n role=\"checkbox\"\n :aria-checked=\"_getCheckState(item)\"\n @click.stop=\"onClickCheckbox(item)\"\n ></i>\n <template v-else></template>\n <a\n href=\"javascript:\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-disabled=\"disabled\"\n @click.stop=\"onClickText(item)\"\n @dblclick.stop=\"onClickTextDbl(item)\"\n @keydown.enter.prevent=\"onClickText(item)\"\n >\n <span\n v-if=\"item.showTextLabelHtml\"\n v-html=\"item.showTextLabel\"\n ></span>\n <span v-else>{{ item.showTextLabel }}</span>\n </a>\n </span>\n\n <template v-if=\"firstOpenIdSet.has(_getIdStr(item))\">\n <cl-transition-slideupdown>\n <cl-tree-ul\n v-show=\"openIdSet.has(_getIdStr(item))\"\n :list=\"item.list\"\n :multiple=\"multiple\"\n :isSingleSelectParent=\"isSingleSelectParent\"\n :disabled=\"disabled\"\n :firstOpenIds=\"firstOpenIds\"\n :openIds=\"openIds\"\n :selectIds=\"selectIds\"\n :selectUnIds=\"selectUnIds\"\n @onSelect=\"onRecursionSelect\"\n @onShrink=\"onRecursionShrink\"\n ></cl-tree-ul>\n </cl-transition-slideupdown>\n </template>\n <template v-else></template>\n </li>\n </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTreeUl from './Ul.vue';\nimport ClTransitionSlideupdown from '../../Element/Transition/SlideUpDown.vue';\nimport './css/Ul.css';\n\ninterface TreeTop {\n isCheckChildren: (id: any) => boolean;\n}\n\ndefineOptions({ name: 'ClTreeUl' });\n\nconst props = defineProps({\n list: {\n type: Array as () => any[],\n default: () => [], // desc: 数据列表\n },\n multiple: {\n type: Boolean,\n default: false, // desc: 是否多选\n },\n isSingleSelectParent: {\n type: Boolean,\n default: false, // desc: 单选时是否可选择父级\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n firstOpenIds: {\n type: Array as () => string[],\n default: () => [], // desc: 首次展开的节点\n },\n openIds: {\n type: Array as () => string[],\n default: () => [], // desc: 展开的节点\n },\n selectIds: {\n type: Array as () => string[],\n default: () => [], // desc: 选中的节点\n },\n selectUnIds: {\n type: Array as () => string[],\n default: () => [], // desc: 半选状态的节点\n },\n});\n\nconst emit = defineEmits<{\n (e: 'onSelect', id: string): void; // desc: 节点选中\n (e: 'onShrink', id: string): void; // desc: 节点收缩\n}>();\n\n// kb: Enter 选中节点(获取焦点后生效,走 onClickText 防抖逻辑)\n\nconst _keyIndex = `tree-${CommonBase.getRandom(5)}`;\n\nconst DB_CLICK_DELAY = 170;\n\nlet _isTreeTopWarned = false;\n\nconst _selfTop = inject<TreeTop>('$TreeTop', {\n isCheckChildren: () => {\n if (!_isTreeTopWarned) {\n _isTreeTopWarned = true;\n console.warn('ClTreeUl:未检测到 ClTree 容器提供 $TreeTop,子级判断降级为 false');\n }\n return false;\n },\n});\n\nconst _pageData: any = {\n dbClickTimeOut: null as number | null,\n};\n\n// 选中/展开态 Set 化:避免 v-for 逐节点 indexOf 线性查找(O(n²) → O(1))\nconst firstOpenIdSet = computed(() => new Set(props.firstOpenIds));\nconst selectIdSet = computed(() => new Set(props.selectIds));\nconst selectUnIdSet = computed(() => new Set(props.selectUnIds));\nconst openIdSet = computed(() => new Set(props.openIds));\n\nconst _emitSelect = (id: any) => {\n if (CommonBase.isUndefined(id)) {\n return; // 缺 id 数据项不触发选中\n }\n emit('onSelect', id.toString());\n};\n\nconst _emitShrink = (id: any) => {\n if (CommonBase.isUndefined(id)) {\n return; // 缺 id 数据项不触发收缩\n }\n emit('onShrink', id.toString());\n};\n\nconst _getIdStr = (itemInfo: any) => {\n return CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n};\n\nconst _getCheckState = (itemInfo: any) => {\n const id = _getIdStr(itemInfo);\n if (selectIdSet.value.has(id)) {\n return 'true';\n }\n if (selectUnIdSet.value.has(id)) {\n return 'mixed';\n }\n return 'false';\n};\n\nconst clsLiFun = (itemInfo: any) => {\n const clsTemp: Record<string, boolean> = {\n 'tree-node': true,\n };\n clsTemp['tree-node-end'] = itemInfo.isEnd;\n if (!itemInfo.isEnd) {\n const strId = CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n const isOpen = openIdSet.value.has(strId);\n clsTemp['tree-node-open'] = isOpen;\n clsTemp['tree-node-closed'] = !isOpen;\n }\n return clsTemp;\n};\n\nconst clsLabelFun = (itemInfo: any) => {\n const id = CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n const clsTemp: Record<string, boolean> = {\n 'tree-node-text': true,\n };\n clsTemp['tree-node-select'] = selectIdSet.value.has(id);\n clsTemp['tree-node-selectUn'] = selectUnIdSet.value.has(id);\n return clsTemp;\n};\n\nonBeforeUnmount(() => {\n if (_pageData.dbClickTimeOut) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n});\n\nconst onClickShrink = (info: any) => {\n if (props.disabled) return;\n window.clearTimeout(_pageData.dbClickTimeOut);\n _emitShrink(info.id);\n};\n\nconst onClickCheckbox = (info: any) => {\n if (props.disabled) return;\n window.clearTimeout(_pageData.dbClickTimeOut);\n _emitSelect(info.id);\n};\n\nconst onClickText = (info: any) => {\n if (props.disabled) return;\n if (_selfTop.isCheckChildren(info.id)) {\n let isRun = true;\n if (!props.multiple && !props.isSingleSelectParent) {\n isRun = false;\n }\n if (isRun) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n _pageData.dbClickTimeOut = window.setTimeout(() => {\n if (!props.disabled) {\n _emitSelect(info.id);\n }\n }, DB_CLICK_DELAY);\n } else {\n // 单选不可选父级:清除 pending 防抖,避免模式切换瞬间迟到触发选中\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n } else {\n // 叶子路径与父级统一走防抖:双击叶子不再触发「选中→取消」竞态\n window.clearTimeout(_pageData.dbClickTimeOut);\n _pageData.dbClickTimeOut = window.setTimeout(() => {\n if (!props.disabled) {\n _emitSelect(info.id);\n }\n }, DB_CLICK_DELAY);\n }\n};\n\nconst onClickTextDbl = (info: any) => {\n if (props.disabled) return;\n if (_selfTop.isCheckChildren(info.id)) {\n if (_pageData.dbClickTimeOut) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n _emitShrink(info.id);\n }\n};\n\nconst onRecursionSelect = (id: string) => {\n _emitSelect(id);\n};\n\nconst onRecursionShrink = (id: string) => {\n _emitShrink(id);\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <cl-tree-ul\n v-if=\"optBase.list.length > 0\"\n :list=\"optBase.list\"\n :firstOpenIds=\"optBase.firstOpenIds\"\n :openIds=\"optBase.openParentIds\"\n :selectIds=\"optBase.selectedIds\"\n :selectUnIds=\"optBase.selectedUnIds\"\n v-bind=\"optSubUnit\"\n @onSelect=\"onSelect\"\n @onShrink=\"onShrink\"\n ></cl-tree-ul>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, onMounted, nextTick, watch, computed, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClTreeUl from './Ul.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClTree' });\n\nconst props = defineProps({\n id: String, // desc: 唯一标识\n value: String, // desc: 选中值\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as () => any[],\n default: () => [], // desc: 数据列表\n },\n multiple: {\n type: Boolean,\n default: false, // desc: 是否多选\n },\n isSingleSelectParent: {\n type: Boolean,\n default: false, // desc: 单选时是否可选择父级\n },\n isOutMerge: {\n type: Boolean,\n default: true, // desc: 是否合并父级输出\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父级值\n },\n searchOpenParentIds: {\n type: String,\n default: '', // desc: 搜索联动需展开显示的父级 id 集合(逗号分隔),清空时自动还原\n },\n searchFoldParentIds: {\n type: String,\n default: '', // desc: 搜索联动需可点开但默认折叠的父级 id 集合(逗号分隔),清空时自动还原\n },\n searchKeyword: {\n type: String,\n default: '', // desc: 搜索关键词,非空时对节点文本命中的内容高亮\n },\n highlightMode: {\n type: String,\n default: '', // desc: 搜索高亮模式 | enum: full, whole\n },\n highlightColor: {\n type: String,\n default: '', // desc: 搜索高亮背景色;空则使用默认高亮样式\n },\n});\n\nconst emit = defineEmits<{\n (e: 'update:value', value: string): void; // desc: 值更新\n (e: 'onChange', value: string, data: any): void; // desc: 选中变化\n (e: 'onInit'): void; // desc: 初始化完成\n}>();\n\nconst elId = props.id; // || `tree-${CommonBase.getRandom(8)}`\n\nconst optBase: any = reactive({\n firstOpenIds: [] as string[],\n openParentIds: [] as string[],\n selectedIds: [] as string[],\n selectedUnIds: [] as string[],\n list: [] as any[],\n});\n\nconst _pageData: any = {\n dataJson: {},\n dataGroup: {},\n childLastIdsJson: {},\n prevSearchOpenParentIds: '',\n prevSearchFoldParentIds: '',\n};\n\nconst optSubUnit = computed(() => {\n return {\n multiple: props.multiple,\n disabled: props.disabled,\n isSingleSelectParent: props.isSingleSelectParent,\n };\n});\n\nconst clsParent = computed(() => {\n return CommonBase.getJsonMerge(\n { 'panel-tree': true },\n CommonElement.getClassNameJson(props.className),\n );\n});\n\nconst _emitModelValue = (value: string) => {\n emit('update:value', value);\n};\n\nconst _emitChange = (value: string, data: any) => {\n _emitModelValue(value);\n emit('onChange', value, data);\n};\n\nconst _emitInitComplete = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _checkIsChildren = (id: any) => {\n const idStr = CommonBase.isUndefined(id) ? '' : id.toString();\n return CommonBase.isExistJsonKey(_pageData.dataGroup, idStr);\n};\n\nconst _getDataGroup = (id: any) => {\n const idStr = CommonBase.isUndefined(id) ? '' : id.toString();\n return _checkIsChildren(idStr) ? _pageData.dataGroup[idStr] : [];\n};\n\nconst _getDataInfo = (id: any) => {\n const idStr = id.toString();\n return CommonBase.isExistJsonKey(_pageData.dataJson, idStr) ? _pageData.dataJson[idStr] : null;\n};\n\nconst _recursionListLevel = (parentId: string, level: number, visited?: Set<string>): any[] => {\n const list: any[] = [];\n const newLevel = level + 1;\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (visited.has(parentId)) {\n return list; // 环检测:父级已展开过则终止递归\n }\n visited.add(parentId);\n _getDataGroup(parentId).forEach((info: any) => {\n const newInfo = { ...info } as any;\n const id = newInfo.id.toString();\n const isExistChild = _checkIsChildren(id);\n newInfo.isEnd = !isExistChild;\n newInfo.level = newLevel;\n if (isExistChild) {\n newInfo.list = _recursionListLevel(id, newLevel, visited);\n }\n list.push(newInfo);\n });\n return list;\n};\n\nconst _escapeHtmlText = (text: string) =>\n text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nconst _getHighlightHtml = (text: string): string => {\n const keyword = props.searchKeyword;\n const mode = props.highlightMode;\n if (!CommonBase.isNonEmptyString(text) || CommonBase.isEmpty(keyword)) {\n return _escapeHtmlText(String(text));\n }\n const color = CommonBase.isNonEmptyString(props.highlightColor)\n ? props.highlightColor\n : '#ffe58f';\n const markText = (raw: string) => `<mark style=\"background:${color}\">${_escapeHtmlText(raw)}</mark>`;\n // full 模式:只要显示文本命中关键词,整条文本整体背景高亮\n if (mode === 'full') {\n if (text.includes(keyword)) {\n return markText(text);\n }\n return _escapeHtmlText(text);\n }\n // whole 模式:命中的整段关键词整体背景高亮,取首次命中\n const inx = text.indexOf(keyword);\n if (inx === -1) {\n return _escapeHtmlText(text);\n }\n const pre = _escapeHtmlText(text.slice(0, inx));\n const hit = markText(text.slice(inx, inx + keyword.length));\n const post = _escapeHtmlText(text.slice(inx + keyword.length));\n return `${pre}${hit}${post}`;\n};\n\nconst _convertData = (list: any[]) => {\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const json: any = {};\n const group: any = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: any) => {\n const newInfo = CommonBase.getJsonClone(info);\n // 搜索关键词与高亮模式均非空时才高亮(highlightMode 控制开关),无关键词/未启用保持纯文本,向后兼容\n const isHighl = !CommonBase.isEmpty(props.searchKeyword) && !CommonBase.isEmpty(props.highlightMode);\n newInfo.showTextLabelHtml = isHighl;\n newInfo.showTextLabel = isHighl\n ? _getHighlightHtml(CommonBase.isString(newInfo.name) ? newInfo.name : '')\n : (CommonBase.isString(newInfo.name) ? newInfo.name : '');\n // isFinite 为宽松实现(Number() 转换,isFinite(null)=true),数字分支必须叠加 typeof 严格检查\n const isIdValid =\n CommonBase.isString(newInfo.id) ||\n (typeof newInfo.id === 'number' && CommonBase.isFinite(newInfo.id));\n const isPIdValid =\n CommonBase.isString(newInfo[parentKey]) ||\n (typeof newInfo[parentKey] === 'number' && CommonBase.isFinite(newInfo[parentKey]));\n if (!isIdValid || !isPIdValid) {\n return; // 跳过缺失或类型异常(对象/布尔/null)的核心字段数据项\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n if (!CommonBase.isExistJsonKey(group, pId)) {\n group[pId] = [];\n }\n group[pId].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n _pageData.childLastIdsJson = {};\n optBase.list = _recursionListLevel(strTopPValue, 0);\n};\n\nconst _recursionParentIds = (value: any, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const strValue = CommonBase.isEmpty(value) ? '' : value.toString();\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (CommonBase.isExistJsonKey(_pageData.dataJson, strValue) && !visited.has(strValue)) {\n visited.add(strValue);\n arr.push(strValue);\n const pId = _pageData.dataJson[strValue][parentKey].toString();\n if (pId !== strTopPValue) {\n const pArr = _recursionParentIds(pId, visited);\n arr = arr.concat(pArr);\n }\n }\n return arr;\n};\n\nconst _getParentIds = (value: any) => {\n const parentArr = _recursionParentIds(value);\n parentArr.splice(0, 1);\n parentArr.reverse();\n return parentArr;\n};\n\nconst _recursionChildIds = (value: any, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n const strValue = CommonBase.isEmpty(value) ? '' : value.toString();\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (!visited.has(strValue)) {\n visited.add(strValue);\n arr.push(strValue);\n if (_checkIsChildren(strValue)) {\n _getDataGroup(strValue).forEach((pInfo: any) => {\n const cId = pInfo.id.toString();\n const cArr = _recursionChildIds(cId, visited);\n arr = arr.concat(cArr);\n });\n }\n }\n return arr;\n};\n\nconst _getChildIds = (value: any) => {\n const childArr = _recursionChildIds(value);\n childArr.splice(0, 1);\n return childArr;\n};\n\nconst _getParentSelectAndUn = (\n currentId: string,\n selectedIds?: any,\n selectedUnIds?: any,\n isForceCheck?: boolean,\n) => {\n const select: any = { add: [] as string[], del: [] as string[] };\n const selectUn: any = { add: [] as string[], del: [] as string[] };\n // 未传数组时克隆全局状态(onSelect 场景防副作用);已传数组时直接用引用(_initSelectAndUn 累积场景,消除 O(n²) 克隆)\n let arrSelect = CommonBase.isUndefined(selectedIds)\n ? CommonBase.getArrClone(optBase.selectedIds)\n : selectedIds;\n let arrSelectUn = CommonBase.isUndefined(selectedUnIds)\n ? CommonBase.getArrClone(optBase.selectedUnIds)\n : selectedUnIds;\n\n const currentIdInx = arrSelect.indexOf(currentId);\n if (isForceCheck) {\n // 初始化/重放场景:只加不删(重复 id 触发取消由 onSelect 交互承担,重放不做 toggle)\n if (currentIdInx === -1) {\n arrSelect.push(currentId);\n }\n } else if (currentIdInx === -1) {\n arrSelect.push(currentId);\n } else {\n arrSelect.splice(currentIdInx, 1);\n }\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, currentId);\n\n const parentIds = _getParentIds(currentId);\n parentIds.reverse();\n if (parentIds.length > 0) {\n parentIds.forEach((id: string) => {\n let childSelect = 0;\n let childSelectUn = 0;\n _pageData.dataGroup[id].forEach((cInfo: any) => {\n const strCId = cInfo.id.toString();\n if (CommonBase.isExistValue(arrSelect, strCId)) {\n childSelect += 1;\n }\n if (CommonBase.isExistValue(arrSelectUn, strCId)) {\n childSelectUn += 1;\n }\n });\n const cTotal = _pageData.dataGroup[id].length;\n if (childSelect === 0 && childSelectUn === 0) {\n select.del.push(id);\n arrSelect = CommonBase.getArrRemoveById(arrSelect, id);\n\n selectUn.del.push(id);\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, id);\n } else {\n if (childSelect === cTotal) {\n select.add.push(id);\n arrSelect.push(id);\n\n selectUn.del.push(id);\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, id);\n } else {\n select.del.push(id);\n arrSelect = CommonBase.getArrRemoveById(arrSelect, id);\n\n selectUn.add.push(id);\n arrSelectUn.push(id);\n }\n }\n });\n }\n return { select, selectUn };\n};\n\nconst _getLastChildIds = (id: string, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (\n CommonBase.isExistJsonKey(_pageData.childLastIdsJson, id) &&\n _pageData.childLastIdsJson[id].length > 0\n ) {\n arr = _pageData.childLastIdsJson[id];\n } else {\n // 环检测放在缓存检查之后:DAG 数据(多父共享子节点)命中缓存直接返回,不受 visited 影响\n if (visited.has(id)) {\n return arr; // 环检测:父级已展开过则终止递归\n }\n if (_checkIsChildren(id)) {\n visited.add(id);\n _getDataGroup(id).forEach((info: any) => {\n const tempIds = _getLastChildIds(info.id.toString(), visited);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n });\n } else {\n arr.push(id);\n }\n _pageData.childLastIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _getMergeParentRecursionData = (ids: string[], visited?: Set<string>): any => {\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const parent: any = {};\n const merge: string[] = [];\n let single: any = [];\n if (visited === undefined) {\n visited = new Set<string>();\n }\n ids.forEach(id => {\n const info = _getDataInfo(id);\n if (!CommonBase.isUndefined(info)) {\n const parentId = info[parentKey].toString();\n if (parentId === strTopPValue) {\n single.push(id);\n } else {\n if (!CommonBase.isExistJsonKey(parent, parentId)) {\n parent[parentId] = [];\n }\n parent[parentId].push(id);\n }\n }\n });\n if (!CommonBase.isEmpty(parent)) {\n for (const [pk, pv] of Object.entries(parent)) {\n if ((pv as any).length === _getDataGroup(pk).length) {\n merge.push(pk);\n } else {\n single = single.concat(pv);\n }\n }\n }\n if (merge.length > 0) {\n single.push(...merge);\n const nextValue = CommonBase.getArrUnique(single);\n // 环检测:本次上推的父级全部已在 visited 中 → 终止递归(脏数据防栈溢出,与 _recursionListLevel 等一致)\n const hasNew = merge.some((id: string) => !visited.has(id));\n merge.forEach((id: string) => visited.add(id));\n if (hasNew) {\n return _getMergeParentRecursionData(nextValue, visited);\n }\n return single;\n } else {\n return single;\n }\n};\n\nconst _getValueMergeParent = (ids: any) => {\n const cIds: string[] = [];\n const jsonIds = CommonBase.getArrConvertJson(ids);\n ids.forEach((id: string) => {\n const dataGroup = _getDataGroup(id);\n if (CommonBase.isEmpty(dataGroup)) {\n cIds.push(id);\n } else {\n const tempFilterList: any[] = [];\n dataGroup.forEach((cInfo: any) => {\n if (CommonBase.isExistJsonKey(jsonIds, cInfo.id.toString())) {\n tempFilterList.push(cInfo.id);\n }\n });\n if (dataGroup.length !== tempFilterList.length) {\n cIds.push(id);\n }\n }\n });\n const newSelectIds = _getMergeParentRecursionData(cIds);\n return newSelectIds;\n};\n\nconst _getValueSplitChild = (ids: any) => {\n let newSelectIds: string[] = [];\n ids.forEach((id: string) => {\n const cIds = _getLastChildIds(id);\n newSelectIds.push(...cIds);\n });\n newSelectIds = CommonBase.getArrUnique(newSelectIds);\n return newSelectIds;\n};\n\nconst _getOutValue = (ids: any, isMerge?: any) => {\n if (props.multiple) {\n const isMergeNew = CommonBase.isBoolean(isMerge) ? isMerge : props.isOutMerge;\n return isMergeNew ? _getValueMergeParent(ids) : _getValueSplitChild(ids);\n } else {\n return ids;\n }\n};\n\nconst _getValueData = (ids: any) => {\n const list: any = [];\n ids.forEach((id: string) => {\n const info = _getDataInfo(id);\n if (!CommonBase.isUndefined(info)) {\n list.push(info);\n }\n });\n return list;\n};\n\nconst _initSelectAndUn = (value: string[]) => {\n // 单选契约:多值 value 仅取首项,避免输出逗号多值\n const validValue = props.multiple ? value : value.slice(0, 1);\n let tempSelect: string[] = [];\n let tempUn: string[] = [];\n validValue.forEach((v: string) => {\n const info = _getDataInfo(v);\n if (!CommonBase.isUndefined(info)) {\n // 引用累积 + isForceCheck:只加不删,重复 push 由下方 getArrUnique 兜底去重\n const parentInfo = _getParentSelectAndUn(v, tempSelect, tempUn, true);\n tempSelect = CommonBase.getArrRemoveById(tempSelect, parentInfo.select.del);\n if (parentInfo.select.add.length > 0) {\n tempSelect.push(...parentInfo.select.add);\n }\n tempUn = CommonBase.getArrRemoveById(tempUn, parentInfo.selectUn.del);\n if (parentInfo.selectUn.add.length > 0) {\n tempUn.push(...parentInfo.selectUn.add);\n }\n\n const childIds = _getChildIds(v);\n tempSelect.push(...childIds);\n\n tempSelect.push(v);\n\n tempSelect = CommonBase.getArrUnique(tempSelect);\n tempUn = CommonBase.getArrUnique(tempUn);\n }\n });\n optBase.selectedIds = tempSelect;\n const newUn = CommonBase.getArrRemoveById(tempUn, tempSelect);\n optBase.selectedUnIds = CommonBase.getArrClone(newUn);\n\n // 与已有展开态合并(保留用户手动展开/收起),不覆盖\n optBase.firstOpenIds = CommonBase.getArrUnique(optBase.firstOpenIds.concat(newUn));\n optBase.openParentIds = CommonBase.getArrUnique(optBase.openParentIds.concat(newUn));\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n if (CommonBase.isNonEmptyString(props.value)) {\n const arrIds = props.value.split(',');\n _initSelectAndUn(arrIds);\n }\n _emitInitComplete();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n newList => {\n _convertData(newList);\n const oldSelectedId = optBase.selectedIds;\n // 合并 value prop 中的 id(父组件可能异步回显 value,重放缺口:仅按旧选中重放会丢 value 里的新 id)\n const valueIds = CommonBase.isNonEmptyString(props.value) ? props.value.split(',') : [];\n optBase.selectedIds = [];\n _initSelectAndUn(CommonBase.getArrUnique(oldSelectedId.concat(valueIds)));\n // 重放后输出与 value prop 不一致(悬空 id 被过滤)→ 回写同步契约\n const outValue = _getOutValue(optBase.selectedIds);\n if (outValue.join(',') !== props.value) {\n _emitModelValue(outValue.join(','));\n }\n },\n);\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== undefined) {\n // undefined 跳过;null 与 '' 一致走清空分支\n const oldSelectedId = optBase.selectedIds;\n const ids = CommonBase.isNonEmptyString(newValue) ? newValue.split(',') : [];\n const newOutValue = _getOutValue(ids);\n const oldOutValue = _getOutValue(oldSelectedId);\n const isEqual = CommonBase.isEqualArr(newOutValue, oldOutValue);\n if (!isEqual) {\n optBase.selectedIds = [];\n _initSelectAndUn(ids);\n }\n }\n },\n);\n\nconst _applySearchFold = () => {\n // 先撤销上次搜索折叠链,再追加本次\"可点开但折叠\"的父级(进结构 firstOpenIds,不进展开 openParentIds),保留用户手动展开\n const prevFold = CommonBase.isNonEmptyString(_pageData.prevSearchFoldParentIds)\n ? _pageData.prevSearchFoldParentIds.split(',')\n : [];\n optBase.firstOpenIds = CommonBase.getArrRemoveById(optBase.firstOpenIds, prevFold);\n const newFold = CommonBase.isNonEmptyString(props.searchFoldParentIds)\n ? props.searchFoldParentIds.split(',')\n : [];\n newFold.forEach((id: string) => {\n const strId = id.toString();\n if (optBase.firstOpenIds.indexOf(strId) === -1) {\n optBase.firstOpenIds.push(strId);\n }\n });\n _pageData.prevSearchFoldParentIds = CommonBase.isNonEmptyString(props.searchFoldParentIds)\n ? props.searchFoldParentIds\n : '';\n};\n\nconst _applySearchOpen = () => {\n // 先撤销上次搜索展开链,再追加本次需展开显示的祖先链(firstOpenIds + openParentIds),保留用户手动展开\n const prevOpen = CommonBase.isNonEmptyString(_pageData.prevSearchOpenParentIds)\n ? _pageData.prevSearchOpenParentIds.split(',')\n : [];\n optBase.firstOpenIds = CommonBase.getArrRemoveById(optBase.firstOpenIds, prevOpen);\n optBase.openParentIds = CommonBase.getArrRemoveById(optBase.openParentIds, prevOpen);\n const newOpen = CommonBase.isNonEmptyString(props.searchOpenParentIds)\n ? props.searchOpenParentIds.split(',')\n : [];\n newOpen.forEach((id: string) => {\n const strId = id.toString();\n if (optBase.firstOpenIds.indexOf(strId) === -1) {\n optBase.firstOpenIds.push(strId);\n }\n if (optBase.openParentIds.indexOf(strId) === -1) {\n optBase.openParentIds.push(strId);\n }\n });\n _pageData.prevSearchOpenParentIds = CommonBase.isNonEmptyString(props.searchOpenParentIds)\n ? props.searchOpenParentIds\n : '';\n};\n\nwatch(\n () => props.searchOpenParentIds,\n () => _applySearchOpen(),\n);\n\nwatch(\n () => props.searchFoldParentIds,\n () => _applySearchFold(),\n);\n\n// 搜索关键词变化时重算节点文本高亮(清空搜索也走这里,还原纯文本)\nconst _recomputeHighlight = (list: any[]) => {\n if (!Array.isArray(list)) {\n return;\n }\n list.forEach((item: any) => {\n if (!item) {\n return;\n }\n const isHighl = !CommonBase.isEmpty(props.searchKeyword) && !CommonBase.isEmpty(props.highlightMode);\n item.showTextLabelHtml = isHighl;\n item.showTextLabel = isHighl\n ? _getHighlightHtml(CommonBase.isString(item.name) ? item.name : '')\n : (CommonBase.isString(item.name) ? item.name : '');\n if (Array.isArray(item.list)) {\n _recomputeHighlight(item.list);\n }\n });\n};\n\nwatch(\n () => [props.searchKeyword, props.highlightMode, props.highlightColor],\n () => _recomputeHighlight(optBase.list),\n);\n\nconst onShrink = (id: any) => {\n const strId = id.toString();\n if (!CommonBase.isExistValue(optBase.firstOpenIds, strId)) {\n optBase.firstOpenIds.push(strId);\n }\n nextTick(() => {\n const inx = optBase.openParentIds.indexOf(strId);\n if (inx === -1) {\n optBase.openParentIds.push(strId);\n } else {\n optBase.openParentIds.splice(inx, 1);\n }\n });\n};\n\nconst onSelect = (id: any) => {\n const strId = id.toString();\n if (props.multiple) {\n const checkedInx = optBase.selectedIds.indexOf(strId);\n const isChecked = checkedInx === -1;\n const childIds = _getChildIds(strId);\n const parentInfo = _getParentSelectAndUn(strId);\n let arrSelect = CommonBase.getArrClone(optBase.selectedIds);\n let arrSelectUn = CommonBase.getArrClone(optBase.selectedUnIds);\n\n parentInfo.select.del.forEach((sdId: string) => {\n const sdInx = arrSelect.indexOf(sdId);\n if (sdInx > -1) {\n arrSelect.splice(sdInx, 1);\n }\n });\n if (parentInfo.select.add.length > 0) {\n arrSelect = arrSelect.concat(parentInfo.select.add);\n arrSelect = CommonBase.getArrUnique(arrSelect);\n }\n\n parentInfo.selectUn.del.forEach((sdId: string) => {\n const sdInx = arrSelectUn.indexOf(sdId);\n if (sdInx > -1) {\n arrSelectUn.splice(sdInx, 1);\n }\n });\n if (parentInfo.selectUn.add.length > 0) {\n arrSelectUn = arrSelectUn.concat(parentInfo.selectUn.add);\n arrSelectUn = CommonBase.getArrUnique(arrSelectUn);\n }\n\n if (childIds.length > 0) {\n childIds.forEach(cId => {\n const scInx = arrSelect.indexOf(cId);\n const sucInx = arrSelectUn.indexOf(cId);\n if (isChecked) {\n if (scInx === -1) {\n arrSelect.push(cId);\n }\n } else {\n if (scInx > -1) {\n arrSelect.splice(scInx, 1);\n }\n }\n if (sucInx > -1) {\n arrSelectUn.splice(sucInx, 1);\n }\n });\n }\n\n const ckInx = arrSelect.indexOf(strId);\n if (ckInx > -1) {\n arrSelect.splice(ckInx, 1);\n } else {\n arrSelect.push(strId);\n }\n const ckUnInx = arrSelectUn.indexOf(strId);\n if (ckUnInx > -1) {\n arrSelectUn.splice(ckUnInx, 1);\n }\n optBase.selectedIds = arrSelect;\n optBase.selectedUnIds = arrSelectUn;\n } else {\n optBase.selectedIds = [strId];\n optBase.selectedUnIds = [];\n }\n const arrValue = _getOutValue(optBase.selectedIds);\n _emitChange(arrValue.join(','), _getValueData(arrValue));\n};\n\nprovide('$TreeTop', {\n isCheckChildren: _checkIsChildren,\n});\n\nconst getValue = () => {\n const arrValue = _getOutValue(optBase.selectedIds);\n return arrValue.join(',');\n};\n\nconst getValueData = () => {\n const arrValue = _getOutValue(optBase.selectedIds);\n return _getValueData(arrValue);\n};\n\nconst setValue = (value: string) => {\n const arrIds = CommonBase.isNonEmptyString(value) ? value.split(',') : [];\n optBase.selectedIds = [];\n _initSelectAndUn(arrIds);\n};\n\nexport interface ClTreeExpose {\n getValue: () => string;\n getValueData: () => any[];\n setValue: (value: string) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["DB_CLICK_DELAY","props","__props","emit","__emit","_keyIndex","CommonBase","_isTreeTopWarned","_selfTop","inject","_pageData","firstOpenIdSet","computed","selectIdSet","selectUnIdSet","openIdSet","_emitSelect","id","_emitShrink","_getIdStr","itemInfo","_getCheckState","clsLiFun","clsTemp","strId","isOpen","clsLabelFun","onBeforeUnmount","onClickShrink","info","onClickCheckbox","onClickText","isRun","onClickTextDbl","onRecursionSelect","onRecursionShrink","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","item","rIndex","_normalizeClass","_createElementVNode","_withModifiers","$event","_withKeys","_hoisted_6","_toDisplayString","_createBlock","ClTransitionSlideupdown","_createVNode","ClTreeUl","_vShow","elId","optBase","reactive","optSubUnit","clsParent","CommonElement","_emitModelValue","value","_emitChange","data","_emitInitComplete","nextTick","_checkIsChildren","idStr","_getDataGroup","_getDataInfo","_recursionListLevel","parentId","level","visited","list","newLevel","newInfo","isExistChild","_escapeHtmlText","text","_getHighlightHtml","keyword","mode","color","markText","raw","inx","pre","hit","post","_convertData","parentKey","topParentValue","strTopPValue","json","group","isHighl","isIdValid","isPIdValid","pId","_recursionParentIds","arr","strValue","pArr","_getParentIds","parentArr","_recursionChildIds","pInfo","cId","cArr","_getChildIds","childArr","_getParentSelectAndUn","currentId","selectedIds","selectedUnIds","isForceCheck","select","selectUn","arrSelect","arrSelectUn","currentIdInx","parentIds","childSelect","childSelectUn","cInfo","strCId","cTotal","_getLastChildIds","tempIds","_getMergeParentRecursionData","ids","parent","merge","single","pk","pv","nextValue","hasNew","_getValueMergeParent","cIds","jsonIds","dataGroup","tempFilterList","_getValueSplitChild","newSelectIds","_getOutValue","isMerge","_getValueData","_initSelectAndUn","validValue","tempSelect","tempUn","v","parentInfo","childIds","newUn","_initMain","arrIds","onMounted","watch","newList","oldSelectedId","valueIds","outValue","newValue","newOutValue","oldOutValue","_applySearchFold","prevFold","_applySearchOpen","prevOpen","_recomputeHighlight","onShrink","onSelect","isChecked","sdId","sdInx","scInx","sucInx","ckInx","ckUnInx","arrValue","provide","__expose","_unref","_mergeProps"],"mappings":"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"}
1
+ {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js","sources":["../../../src/libs/Web/Tree/Ul.vue","../../../src/libs/Web/Tree/Index.vue"],"sourcesContent":["<template>\n <ul class=\"tree-ul\">\n <li\n v-for=\"(item, rIndex) in list\"\n :key=\"`${_keyIndex}-${item.id}-${rIndex}`\"\n :class=\"clsLiFun(item)\"\n >\n <i\n class=\"tree-shrink\"\n @click.stop=\"onClickShrink(item)\"\n ></i>\n <span :class=\"clsLabelFun(item)\">\n <i\n v-if=\"multiple\"\n class=\"tree-node-checkbox\"\n role=\"checkbox\"\n :aria-checked=\"_getCheckState(item)\"\n @click.stop=\"onClickCheckbox(item)\"\n ></i>\n <template v-else></template>\n <a\n href=\"javascript:\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-disabled=\"disabled\"\n @click.stop=\"onClickText(item)\"\n @dblclick.stop=\"onClickTextDbl(item)\"\n @keydown.enter.prevent=\"onClickText(item)\"\n >\n <span\n v-if=\"item.showTextLabelHtml\"\n v-html=\"item.showTextLabel\"\n ></span>\n <span v-else>{{ item.showTextLabel }}</span>\n </a>\n </span>\n\n <template v-if=\"firstOpenIdSet.has(_getIdStr(item))\">\n <cl-transition-slideupdown>\n <cl-tree-ul\n v-show=\"openIdSet.has(_getIdStr(item))\"\n :list=\"item.list\"\n :multiple=\"multiple\"\n :isSingleSelectParent=\"isSingleSelectParent\"\n :disabled=\"disabled\"\n :firstOpenIds=\"firstOpenIds\"\n :openIds=\"openIds\"\n :selectIds=\"selectIds\"\n :selectUnIds=\"selectUnIds\"\n @onSelect=\"onRecursionSelect\"\n @onShrink=\"onRecursionShrink\"\n ></cl-tree-ul>\n </cl-transition-slideupdown>\n </template>\n <template v-else></template>\n </li>\n </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTreeUl from './Ul.vue';\nimport ClTransitionSlideupdown from '../../Element/Transition/SlideUpDown.vue';\nimport './css/Ul.css';\n\ninterface TreeTop {\n isCheckChildren: (id: any) => boolean;\n}\n\ndefineOptions({ name: 'ClTreeUl' });\n\nconst props = defineProps({\n list: {\n type: Array as () => any[],\n default: () => [], // desc: 数据列表\n },\n multiple: {\n type: Boolean,\n default: false, // desc: 是否多选\n },\n isSingleSelectParent: {\n type: Boolean,\n default: false, // desc: 单选时是否可选择父级\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n firstOpenIds: {\n type: Array as () => string[],\n default: () => [], // desc: 首次展开的节点\n },\n openIds: {\n type: Array as () => string[],\n default: () => [], // desc: 展开的节点\n },\n selectIds: {\n type: Array as () => string[],\n default: () => [], // desc: 选中的节点\n },\n selectUnIds: {\n type: Array as () => string[],\n default: () => [], // desc: 半选状态的节点\n },\n});\n\nconst emit = defineEmits<{\n (e: 'onSelect', id: string): void; // desc: 节点选中\n (e: 'onShrink', id: string): void; // desc: 节点收缩\n}>();\n\n// kb: Enter 选中节点(获取焦点后生效,走 onClickText 防抖逻辑)\n\nconst _keyIndex = `tree-${CommonBase.getRandom(5)}`;\n\nconst DB_CLICK_DELAY = 170;\n\nlet _isTreeTopWarned = false;\n\nconst _selfTop = inject<TreeTop>('$TreeTop', {\n isCheckChildren: () => {\n if (!_isTreeTopWarned) {\n _isTreeTopWarned = true;\n console.warn('ClTreeUl:未检测到 ClTree 容器提供 $TreeTop,子级判断降级为 false');\n }\n return false;\n },\n});\n\nconst _pageData: any = {\n dbClickTimeOut: null as number | null,\n};\n\n// 选中/展开态 Set 化:避免 v-for 逐节点 indexOf 线性查找(O(n²) → O(1))\nconst firstOpenIdSet = computed(() => new Set(props.firstOpenIds));\nconst selectIdSet = computed(() => new Set(props.selectIds));\nconst selectUnIdSet = computed(() => new Set(props.selectUnIds));\nconst openIdSet = computed(() => new Set(props.openIds));\n\nconst _emitSelect = (id: any) => {\n if (CommonBase.isUndefined(id)) {\n return; // 缺 id 数据项不触发选中\n }\n emit('onSelect', id.toString());\n};\n\nconst _emitShrink = (id: any) => {\n if (CommonBase.isUndefined(id)) {\n return; // 缺 id 数据项不触发收缩\n }\n emit('onShrink', id.toString());\n};\n\nconst _getIdStr = (itemInfo: any) => {\n return CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n};\n\nconst _getCheckState = (itemInfo: any) => {\n const id = _getIdStr(itemInfo);\n if (selectIdSet.value.has(id)) {\n return 'true';\n }\n if (selectUnIdSet.value.has(id)) {\n return 'mixed';\n }\n return 'false';\n};\n\nconst clsLiFun = (itemInfo: any) => {\n const clsTemp: Record<string, boolean> = {\n 'tree-node': true,\n };\n clsTemp['tree-node-end'] = itemInfo.isEnd;\n if (!itemInfo.isEnd) {\n const strId = CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n const isOpen = openIdSet.value.has(strId);\n clsTemp['tree-node-open'] = isOpen;\n clsTemp['tree-node-closed'] = !isOpen;\n }\n return clsTemp;\n};\n\nconst clsLabelFun = (itemInfo: any) => {\n const id = CommonBase.isUndefined(itemInfo.id) ? '' : itemInfo.id.toString();\n const clsTemp: Record<string, boolean> = {\n 'tree-node-text': true,\n };\n clsTemp['tree-node-select'] = selectIdSet.value.has(id);\n clsTemp['tree-node-selectUn'] = selectUnIdSet.value.has(id);\n return clsTemp;\n};\n\nonBeforeUnmount(() => {\n if (_pageData.dbClickTimeOut) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n});\n\nconst onClickShrink = (info: any) => {\n if (props.disabled) return;\n window.clearTimeout(_pageData.dbClickTimeOut);\n _emitShrink(info.id);\n};\n\nconst onClickCheckbox = (info: any) => {\n if (props.disabled) return;\n window.clearTimeout(_pageData.dbClickTimeOut);\n _emitSelect(info.id);\n};\n\nconst onClickText = (info: any) => {\n if (props.disabled) return;\n if (_selfTop.isCheckChildren(info.id)) {\n let isRun = true;\n if (!props.multiple && !props.isSingleSelectParent) {\n isRun = false;\n }\n if (isRun) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n _pageData.dbClickTimeOut = window.setTimeout(() => {\n if (!props.disabled) {\n _emitSelect(info.id);\n }\n }, DB_CLICK_DELAY);\n } else {\n // 单选不可选父级:清除 pending 防抖,避免模式切换瞬间迟到触发选中\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n } else {\n // 叶子路径与父级统一走防抖:双击叶子不再触发「选中→取消」竞态\n window.clearTimeout(_pageData.dbClickTimeOut);\n _pageData.dbClickTimeOut = window.setTimeout(() => {\n if (!props.disabled) {\n _emitSelect(info.id);\n }\n }, DB_CLICK_DELAY);\n }\n};\n\nconst onClickTextDbl = (info: any) => {\n if (props.disabled) return;\n if (_selfTop.isCheckChildren(info.id)) {\n if (_pageData.dbClickTimeOut) {\n window.clearTimeout(_pageData.dbClickTimeOut);\n }\n _emitShrink(info.id);\n }\n};\n\nconst onRecursionSelect = (id: string) => {\n _emitSelect(id);\n};\n\nconst onRecursionShrink = (id: string) => {\n _emitShrink(id);\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <cl-tree-ul\n v-if=\"optBase.list.length > 0\"\n :list=\"optBase.list\"\n :firstOpenIds=\"optBase.firstOpenIds\"\n :openIds=\"optBase.openParentIds\"\n :selectIds=\"optBase.selectedIds\"\n :selectUnIds=\"optBase.selectedUnIds\"\n v-bind=\"optSubUnit\"\n @onSelect=\"onSelect\"\n @onShrink=\"onShrink\"\n ></cl-tree-ul>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, onMounted, nextTick, watch, computed, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClTreeUl from './Ul.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClTree' });\n\nconst props = defineProps({\n id: String, // desc: 唯一标识\n value: String, // desc: 选中值\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as () => any[],\n default: () => [], // desc: 数据列表\n },\n multiple: {\n type: Boolean,\n default: false, // desc: 是否多选\n },\n isSingleSelectParent: {\n type: Boolean,\n default: false, // desc: 单选时是否可选择父级\n },\n isOutMerge: {\n type: Boolean,\n default: true, // desc: 是否合并父级输出\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级字段名\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父级值\n },\n searchOpenParentIds: {\n type: String,\n default: '', // desc: 搜索联动需展开显示的父级 id 集合(逗号分隔),清空时自动还原\n },\n searchFoldParentIds: {\n type: String,\n default: '', // desc: 搜索联动需可点开但默认折叠的父级 id 集合(逗号分隔),清空时自动还原\n },\n searchKeyword: {\n type: String,\n default: '', // desc: 搜索关键词,非空时对节点文本命中的内容高亮\n },\n highlightMode: {\n type: String,\n default: '', // desc: 搜索高亮模式 | enum: full, whole\n },\n highlightColor: {\n type: String,\n default: '', // desc: 搜索高亮背景色;空则使用默认高亮样式\n },\n});\n\nconst emit = defineEmits<{\n (e: 'update:value', value: string): void; // desc: 值更新\n (e: 'onChange', value: string, data: any): void; // desc: 选中变化\n (e: 'onInit'): void; // desc: 初始化完成\n}>();\n\nconst elId = props.id; // || `tree-${CommonBase.getRandom(8)}`\n\nconst optBase: any = reactive({\n firstOpenIds: [] as string[],\n openParentIds: [] as string[],\n selectedIds: [] as string[],\n selectedUnIds: [] as string[],\n list: [] as any[],\n});\n\nconst _pageData: any = {\n dataJson: {},\n dataGroup: {},\n childLastIdsJson: {},\n prevSearchOpenParentIds: '',\n prevSearchFoldParentIds: '',\n};\n\nconst optSubUnit = computed(() => {\n return {\n multiple: props.multiple,\n disabled: props.disabled,\n isSingleSelectParent: props.isSingleSelectParent,\n };\n});\n\nconst clsParent = computed(() => {\n return CommonBase.getJsonMerge(\n { 'panel-tree': true },\n CommonElement.getClassNameJson(props.className),\n );\n});\n\nconst _emitModelValue = (value: string) => {\n emit('update:value', value);\n};\n\nconst _emitChange = (value: string, data: any) => {\n _emitModelValue(value);\n emit('onChange', value, data);\n};\n\nconst _emitInitComplete = () => {\n nextTick(() => {\n emit('onInit');\n });\n};\n\nconst _checkIsChildren = (id: any) => {\n const idStr = CommonBase.isUndefined(id) ? '' : id.toString();\n return CommonBase.isExistJsonKey(_pageData.dataGroup, idStr);\n};\n\nconst _getDataGroup = (id: any) => {\n const idStr = CommonBase.isUndefined(id) ? '' : id.toString();\n return _checkIsChildren(idStr) ? _pageData.dataGroup[idStr] : [];\n};\n\nconst _getDataInfo = (id: any) => {\n const idStr = id.toString();\n return CommonBase.isExistJsonKey(_pageData.dataJson, idStr) ? _pageData.dataJson[idStr] : null;\n};\n\nconst _recursionListLevel = (parentId: string, level: number, visited?: Set<string>): any[] => {\n const list: any[] = [];\n const newLevel = level + 1;\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (visited.has(parentId)) {\n return list; // 环检测:父级已展开过则终止递归\n }\n visited.add(parentId);\n _getDataGroup(parentId).forEach((info: any) => {\n const newInfo = { ...info } as any;\n const id = newInfo.id.toString();\n const isExistChild = _checkIsChildren(id);\n newInfo.isEnd = !isExistChild;\n newInfo.level = newLevel;\n if (isExistChild) {\n newInfo.list = _recursionListLevel(id, newLevel, visited);\n }\n list.push(newInfo);\n });\n return list;\n};\n\nconst _escapeHtmlText = (text: string) =>\n text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nconst _getHighlightHtml = (text: string): string => {\n const keyword = props.searchKeyword;\n const mode = props.highlightMode;\n if (!CommonBase.isNonEmptyString(text) || CommonBase.isEmpty(keyword)) {\n return _escapeHtmlText(String(text));\n }\n const color = CommonBase.isNonEmptyString(props.highlightColor)\n ? props.highlightColor\n : '#ffe58f';\n const markText = (raw: string) => `<mark style=\"background:${color}\">${_escapeHtmlText(raw)}</mark>`;\n // full 模式:只要显示文本命中关键词,整条文本整体背景高亮\n if (mode === 'full') {\n if (text.includes(keyword)) {\n return markText(text);\n }\n return _escapeHtmlText(text);\n }\n // whole 模式:命中的整段关键词整体背景高亮,取首次命中\n const inx = text.indexOf(keyword);\n if (inx === -1) {\n return _escapeHtmlText(text);\n }\n const pre = _escapeHtmlText(text.slice(0, inx));\n const hit = markText(text.slice(inx, inx + keyword.length));\n const post = _escapeHtmlText(text.slice(inx + keyword.length));\n return `${pre}${hit}${post}`;\n};\n\nconst _convertData = (list: any[]) => {\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const json: any = {};\n const group: any = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: any) => {\n const newInfo = CommonBase.getJsonClone(info);\n // 搜索关键词与高亮模式均非空时才高亮(highlightMode 控制开关),无关键词/未启用保持纯文本,向后兼容\n const isHighl = !CommonBase.isEmpty(props.searchKeyword) && !CommonBase.isEmpty(props.highlightMode);\n newInfo.showTextLabelHtml = isHighl;\n newInfo.showTextLabel = isHighl\n ? _getHighlightHtml(CommonBase.isString(newInfo.name) ? newInfo.name : '')\n : (CommonBase.isString(newInfo.name) ? newInfo.name : '');\n // isFinite 为宽松实现(Number() 转换,isFinite(null)=true),数字分支必须叠加 typeof 严格检查\n const isIdValid =\n CommonBase.isString(newInfo.id) ||\n (typeof newInfo.id === 'number' && CommonBase.isFinite(newInfo.id));\n const isPIdValid =\n CommonBase.isString(newInfo[parentKey]) ||\n (typeof newInfo[parentKey] === 'number' && CommonBase.isFinite(newInfo[parentKey]));\n if (!isIdValid || !isPIdValid) {\n return; // 跳过缺失或类型异常(对象/布尔/null)的核心字段数据项\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n if (!CommonBase.isExistJsonKey(group, pId)) {\n group[pId] = [];\n }\n group[pId].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n _pageData.childLastIdsJson = {};\n optBase.list = _recursionListLevel(strTopPValue, 0);\n};\n\nconst _recursionParentIds = (value: any, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const strValue = CommonBase.isEmpty(value) ? '' : value.toString();\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (CommonBase.isExistJsonKey(_pageData.dataJson, strValue) && !visited.has(strValue)) {\n visited.add(strValue);\n arr.push(strValue);\n const pId = _pageData.dataJson[strValue][parentKey].toString();\n if (pId !== strTopPValue) {\n const pArr = _recursionParentIds(pId, visited);\n arr = arr.concat(pArr);\n }\n }\n return arr;\n};\n\nconst _getParentIds = (value: any) => {\n const parentArr = _recursionParentIds(value);\n parentArr.splice(0, 1);\n parentArr.reverse();\n return parentArr;\n};\n\nconst _recursionChildIds = (value: any, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n const strValue = CommonBase.isEmpty(value) ? '' : value.toString();\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (!visited.has(strValue)) {\n visited.add(strValue);\n arr.push(strValue);\n if (_checkIsChildren(strValue)) {\n _getDataGroup(strValue).forEach((pInfo: any) => {\n const cId = pInfo.id.toString();\n const cArr = _recursionChildIds(cId, visited);\n arr = arr.concat(cArr);\n });\n }\n }\n return arr;\n};\n\nconst _getChildIds = (value: any) => {\n const childArr = _recursionChildIds(value);\n childArr.splice(0, 1);\n return childArr;\n};\n\nconst _getParentSelectAndUn = (\n currentId: string,\n selectedIds?: any,\n selectedUnIds?: any,\n isForceCheck?: boolean,\n) => {\n const select: any = { add: [] as string[], del: [] as string[] };\n const selectUn: any = { add: [] as string[], del: [] as string[] };\n // 未传数组时克隆全局状态(onSelect 场景防副作用);已传数组时直接用引用(_initSelectAndUn 累积场景,消除 O(n²) 克隆)\n let arrSelect = CommonBase.isUndefined(selectedIds)\n ? CommonBase.getArrClone(optBase.selectedIds)\n : selectedIds;\n let arrSelectUn = CommonBase.isUndefined(selectedUnIds)\n ? CommonBase.getArrClone(optBase.selectedUnIds)\n : selectedUnIds;\n\n const currentIdInx = arrSelect.indexOf(currentId);\n if (isForceCheck) {\n // 初始化/重放场景:只加不删(重复 id 触发取消由 onSelect 交互承担,重放不做 toggle)\n if (currentIdInx === -1) {\n arrSelect.push(currentId);\n }\n } else if (currentIdInx === -1) {\n arrSelect.push(currentId);\n } else {\n arrSelect.splice(currentIdInx, 1);\n }\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, currentId);\n\n const parentIds = _getParentIds(currentId);\n parentIds.reverse();\n if (parentIds.length > 0) {\n parentIds.forEach((id: string) => {\n let childSelect = 0;\n let childSelectUn = 0;\n _pageData.dataGroup[id].forEach((cInfo: any) => {\n const strCId = cInfo.id.toString();\n if (CommonBase.isExistValue(arrSelect, strCId)) {\n childSelect += 1;\n }\n if (CommonBase.isExistValue(arrSelectUn, strCId)) {\n childSelectUn += 1;\n }\n });\n const cTotal = _pageData.dataGroup[id].length;\n if (childSelect === 0 && childSelectUn === 0) {\n select.del.push(id);\n arrSelect = CommonBase.getArrRemoveById(arrSelect, id);\n\n selectUn.del.push(id);\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, id);\n } else {\n if (childSelect === cTotal) {\n select.add.push(id);\n arrSelect.push(id);\n\n selectUn.del.push(id);\n arrSelectUn = CommonBase.getArrRemoveById(arrSelectUn, id);\n } else {\n select.del.push(id);\n arrSelect = CommonBase.getArrRemoveById(arrSelect, id);\n\n selectUn.add.push(id);\n arrSelectUn.push(id);\n }\n }\n });\n }\n return { select, selectUn };\n};\n\nconst _getLastChildIds = (id: string, visited?: Set<string>): string[] => {\n let arr: string[] = [];\n if (visited === undefined) {\n visited = new Set<string>();\n }\n if (\n CommonBase.isExistJsonKey(_pageData.childLastIdsJson, id) &&\n _pageData.childLastIdsJson[id].length > 0\n ) {\n arr = _pageData.childLastIdsJson[id];\n } else {\n // 环检测放在缓存检查之后:DAG 数据(多父共享子节点)命中缓存直接返回,不受 visited 影响\n if (visited.has(id)) {\n return arr; // 环检测:父级已展开过则终止递归\n }\n if (_checkIsChildren(id)) {\n visited.add(id);\n _getDataGroup(id).forEach((info: any) => {\n const tempIds = _getLastChildIds(info.id.toString(), visited);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n });\n } else {\n arr.push(id);\n }\n _pageData.childLastIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _getMergeParentRecursionData = (ids: string[], visited?: Set<string>): any => {\n const { parentKey, topParentValue } = props;\n const strTopPValue = CommonBase.isNonEmptyString(topParentValue) ? topParentValue : '0';\n const parent: any = {};\n const merge: string[] = [];\n let single: any = [];\n if (visited === undefined) {\n visited = new Set<string>();\n }\n ids.forEach(id => {\n const info = _getDataInfo(id);\n if (!CommonBase.isUndefined(info)) {\n const parentId = info[parentKey].toString();\n if (parentId === strTopPValue) {\n single.push(id);\n } else {\n if (!CommonBase.isExistJsonKey(parent, parentId)) {\n parent[parentId] = [];\n }\n parent[parentId].push(id);\n }\n }\n });\n if (!CommonBase.isEmpty(parent)) {\n for (const [pk, pv] of Object.entries(parent)) {\n if ((pv as any).length === _getDataGroup(pk).length) {\n merge.push(pk);\n } else {\n single = single.concat(pv);\n }\n }\n }\n if (merge.length > 0) {\n single.push(...merge);\n const nextValue = CommonBase.getArrUnique(single);\n // 环检测:本次上推的父级全部已在 visited 中 → 终止递归(脏数据防栈溢出,与 _recursionListLevel 等一致)\n const hasNew = merge.some((id: string) => !visited.has(id));\n merge.forEach((id: string) => visited.add(id));\n if (hasNew) {\n return _getMergeParentRecursionData(nextValue, visited);\n }\n return single;\n } else {\n return single;\n }\n};\n\nconst _getValueMergeParent = (ids: any) => {\n const cIds: string[] = [];\n const jsonIds = CommonBase.getArrConvertJson(ids);\n ids.forEach((id: string) => {\n const dataGroup = _getDataGroup(id);\n if (CommonBase.isEmpty(dataGroup)) {\n cIds.push(id);\n } else {\n const tempFilterList: any[] = [];\n dataGroup.forEach((cInfo: any) => {\n if (CommonBase.isExistJsonKey(jsonIds, cInfo.id.toString())) {\n tempFilterList.push(cInfo.id);\n }\n });\n if (dataGroup.length !== tempFilterList.length) {\n cIds.push(id);\n }\n }\n });\n const newSelectIds = _getMergeParentRecursionData(cIds);\n return newSelectIds;\n};\n\nconst _getValueSplitChild = (ids: any) => {\n let newSelectIds: string[] = [];\n ids.forEach((id: string) => {\n const cIds = _getLastChildIds(id);\n newSelectIds.push(...cIds);\n });\n newSelectIds = CommonBase.getArrUnique(newSelectIds);\n return newSelectIds;\n};\n\nconst _getOutValue = (ids: any, isMerge?: any) => {\n if (props.multiple) {\n const isMergeNew = CommonBase.isBoolean(isMerge) ? isMerge : props.isOutMerge;\n return isMergeNew ? _getValueMergeParent(ids) : _getValueSplitChild(ids);\n } else {\n return ids;\n }\n};\n\nconst _getValueData = (ids: any) => {\n const list: any = [];\n ids.forEach((id: string) => {\n const info = _getDataInfo(id);\n if (!CommonBase.isUndefined(info)) {\n list.push(info);\n }\n });\n return list;\n};\n\nconst _initSelectAndUn = (value: string[]) => {\n // 单选契约:多值 value 仅取首项,避免输出逗号多值\n const validValue = props.multiple ? value : value.slice(0, 1);\n let tempSelect: string[] = [];\n let tempUn: string[] = [];\n validValue.forEach((v: string) => {\n const info = _getDataInfo(v);\n if (!CommonBase.isUndefined(info)) {\n // 引用累积 + isForceCheck:只加不删,重复 push 由下方 getArrUnique 兜底去重\n const parentInfo = _getParentSelectAndUn(v, tempSelect, tempUn, true);\n tempSelect = CommonBase.getArrRemoveById(tempSelect, parentInfo.select.del);\n if (parentInfo.select.add.length > 0) {\n tempSelect.push(...parentInfo.select.add);\n }\n tempUn = CommonBase.getArrRemoveById(tempUn, parentInfo.selectUn.del);\n if (parentInfo.selectUn.add.length > 0) {\n tempUn.push(...parentInfo.selectUn.add);\n }\n\n const childIds = _getChildIds(v);\n tempSelect.push(...childIds);\n\n tempSelect.push(v);\n\n tempSelect = CommonBase.getArrUnique(tempSelect);\n tempUn = CommonBase.getArrUnique(tempUn);\n }\n });\n optBase.selectedIds = tempSelect;\n const newUn = CommonBase.getArrRemoveById(tempUn, tempSelect);\n optBase.selectedUnIds = CommonBase.getArrClone(newUn);\n\n // 与已有展开态合并(保留用户手动展开/收起),不覆盖\n optBase.firstOpenIds = CommonBase.getArrUnique(optBase.firstOpenIds.concat(newUn));\n optBase.openParentIds = CommonBase.getArrUnique(optBase.openParentIds.concat(newUn));\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n if (CommonBase.isNonEmptyString(props.value)) {\n const arrIds = props.value.split(',');\n _initSelectAndUn(arrIds);\n }\n _emitInitComplete();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n newList => {\n _convertData(newList);\n const oldSelectedId = optBase.selectedIds;\n // 合并 value prop 中的 id(父组件可能异步回显 value,重放缺口:仅按旧选中重放会丢 value 里的新 id)\n const valueIds = CommonBase.isNonEmptyString(props.value) ? props.value.split(',') : [];\n optBase.selectedIds = [];\n _initSelectAndUn(CommonBase.getArrUnique(oldSelectedId.concat(valueIds)));\n // 重放后输出与 value prop 不一致(悬空 id 被过滤)→ 回写同步契约\n const outValue = _getOutValue(optBase.selectedIds);\n if (outValue.join(',') !== props.value) {\n _emitModelValue(outValue.join(','));\n }\n },\n);\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== undefined) {\n // undefined 跳过;null 与 '' 一致走清空分支\n const oldSelectedId = optBase.selectedIds;\n const ids = CommonBase.isNonEmptyString(newValue) ? newValue.split(',') : [];\n const newOutValue = _getOutValue(ids);\n const oldOutValue = _getOutValue(oldSelectedId);\n const isEqual = CommonBase.isEqualArr(newOutValue, oldOutValue);\n if (!isEqual) {\n optBase.selectedIds = [];\n _initSelectAndUn(ids);\n }\n }\n },\n);\n\nconst _applySearchFold = () => {\n // 先撤销上次搜索折叠链,再追加本次\"可点开但折叠\"的父级(进结构 firstOpenIds,不进展开 openParentIds),保留用户手动展开\n const prevFold = CommonBase.isNonEmptyString(_pageData.prevSearchFoldParentIds)\n ? _pageData.prevSearchFoldParentIds.split(',')\n : [];\n optBase.firstOpenIds = CommonBase.getArrRemoveById(optBase.firstOpenIds, prevFold);\n const newFold = CommonBase.isNonEmptyString(props.searchFoldParentIds)\n ? props.searchFoldParentIds.split(',')\n : [];\n newFold.forEach((id: string) => {\n const strId = id.toString();\n if (optBase.firstOpenIds.indexOf(strId) === -1) {\n optBase.firstOpenIds.push(strId);\n }\n });\n _pageData.prevSearchFoldParentIds = CommonBase.isNonEmptyString(props.searchFoldParentIds)\n ? props.searchFoldParentIds\n : '';\n};\n\nconst _applySearchOpen = () => {\n // 先撤销上次搜索展开链,再追加本次需展开显示的祖先链(firstOpenIds + openParentIds),保留用户手动展开\n const prevOpen = CommonBase.isNonEmptyString(_pageData.prevSearchOpenParentIds)\n ? _pageData.prevSearchOpenParentIds.split(',')\n : [];\n optBase.firstOpenIds = CommonBase.getArrRemoveById(optBase.firstOpenIds, prevOpen);\n optBase.openParentIds = CommonBase.getArrRemoveById(optBase.openParentIds, prevOpen);\n const newOpen = CommonBase.isNonEmptyString(props.searchOpenParentIds)\n ? props.searchOpenParentIds.split(',')\n : [];\n newOpen.forEach((id: string) => {\n const strId = id.toString();\n if (optBase.firstOpenIds.indexOf(strId) === -1) {\n optBase.firstOpenIds.push(strId);\n }\n if (optBase.openParentIds.indexOf(strId) === -1) {\n optBase.openParentIds.push(strId);\n }\n });\n _pageData.prevSearchOpenParentIds = CommonBase.isNonEmptyString(props.searchOpenParentIds)\n ? props.searchOpenParentIds\n : '';\n};\n\nwatch(\n () => props.searchOpenParentIds,\n () => _applySearchOpen(),\n);\n\nwatch(\n () => props.searchFoldParentIds,\n () => _applySearchFold(),\n);\n\n// 搜索关键词变化时重算节点文本高亮(清空搜索也走这里,还原纯文本)\nconst _recomputeHighlight = (list: any[]) => {\n if (!Array.isArray(list)) {\n return;\n }\n list.forEach((item: any) => {\n if (!item) {\n return;\n }\n const isHighl = !CommonBase.isEmpty(props.searchKeyword) && !CommonBase.isEmpty(props.highlightMode);\n item.showTextLabelHtml = isHighl;\n item.showTextLabel = isHighl\n ? _getHighlightHtml(CommonBase.isString(item.name) ? item.name : '')\n : (CommonBase.isString(item.name) ? item.name : '');\n if (Array.isArray(item.list)) {\n _recomputeHighlight(item.list);\n }\n });\n};\n\nwatch(\n () => [props.searchKeyword, props.highlightMode, props.highlightColor],\n () => _recomputeHighlight(optBase.list),\n);\n\nconst onShrink = (id: any) => {\n const strId = id.toString();\n if (!CommonBase.isExistValue(optBase.firstOpenIds, strId)) {\n optBase.firstOpenIds.push(strId);\n }\n nextTick(() => {\n const inx = optBase.openParentIds.indexOf(strId);\n if (inx === -1) {\n optBase.openParentIds.push(strId);\n } else {\n optBase.openParentIds.splice(inx, 1);\n }\n });\n};\n\nconst onSelect = (id: any) => {\n const strId = id.toString();\n if (props.multiple) {\n const checkedInx = optBase.selectedIds.indexOf(strId);\n const isChecked = checkedInx === -1;\n const childIds = _getChildIds(strId);\n const parentInfo = _getParentSelectAndUn(strId);\n let arrSelect = CommonBase.getArrClone(optBase.selectedIds);\n let arrSelectUn = CommonBase.getArrClone(optBase.selectedUnIds);\n\n parentInfo.select.del.forEach((sdId: string) => {\n const sdInx = arrSelect.indexOf(sdId);\n if (sdInx > -1) {\n arrSelect.splice(sdInx, 1);\n }\n });\n if (parentInfo.select.add.length > 0) {\n arrSelect = arrSelect.concat(parentInfo.select.add);\n arrSelect = CommonBase.getArrUnique(arrSelect);\n }\n\n parentInfo.selectUn.del.forEach((sdId: string) => {\n const sdInx = arrSelectUn.indexOf(sdId);\n if (sdInx > -1) {\n arrSelectUn.splice(sdInx, 1);\n }\n });\n if (parentInfo.selectUn.add.length > 0) {\n arrSelectUn = arrSelectUn.concat(parentInfo.selectUn.add);\n arrSelectUn = CommonBase.getArrUnique(arrSelectUn);\n }\n\n if (childIds.length > 0) {\n childIds.forEach(cId => {\n const scInx = arrSelect.indexOf(cId);\n const sucInx = arrSelectUn.indexOf(cId);\n if (isChecked) {\n if (scInx === -1) {\n arrSelect.push(cId);\n }\n } else {\n if (scInx > -1) {\n arrSelect.splice(scInx, 1);\n }\n }\n if (sucInx > -1) {\n arrSelectUn.splice(sucInx, 1);\n }\n });\n }\n\n const ckInx = arrSelect.indexOf(strId);\n if (ckInx > -1) {\n arrSelect.splice(ckInx, 1);\n } else {\n arrSelect.push(strId);\n }\n const ckUnInx = arrSelectUn.indexOf(strId);\n if (ckUnInx > -1) {\n arrSelectUn.splice(ckUnInx, 1);\n }\n optBase.selectedIds = arrSelect;\n optBase.selectedUnIds = arrSelectUn;\n } else {\n optBase.selectedIds = [strId];\n optBase.selectedUnIds = [];\n }\n const arrValue = _getOutValue(optBase.selectedIds);\n _emitChange(arrValue.join(','), _getValueData(arrValue));\n};\n\nprovide('$TreeTop', {\n isCheckChildren: _checkIsChildren,\n});\n\nconst getValue = () => {\n const arrValue = _getOutValue(optBase.selectedIds);\n return arrValue.join(',');\n};\n\nconst getValueData = () => {\n const arrValue = _getOutValue(optBase.selectedIds);\n return _getValueData(arrValue);\n};\n\nconst setValue = (value: string) => {\n const arrIds = CommonBase.isNonEmptyString(value) ? value.split(',') : [];\n optBase.selectedIds = [];\n _initSelectAndUn(arrIds);\n};\n\nexport interface ClTreeExpose {\n getValue: () => string;\n getValueData: () => any[];\n setValue: (value: string) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["DB_CLICK_DELAY","props","__props","emit","__emit","_keyIndex","CommonBase","_isTreeTopWarned","_selfTop","inject","_pageData","firstOpenIdSet","computed","selectIdSet","selectUnIdSet","openIdSet","_emitSelect","id","_emitShrink","_getIdStr","itemInfo","_getCheckState","clsLiFun","clsTemp","strId","isOpen","clsLabelFun","onBeforeUnmount","onClickShrink","info","onClickCheckbox","onClickText","isRun","onClickTextDbl","onRecursionSelect","onRecursionShrink","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","item","rIndex","_normalizeClass","_createElementVNode","_withModifiers","$event","_withKeys","_hoisted_6","_toDisplayString","_createBlock","ClTransitionSlideupdown","_createVNode","ClTreeUl","_vShow","elId","optBase","reactive","optSubUnit","clsParent","CommonElement","_emitModelValue","value","_emitChange","data","_emitInitComplete","nextTick","_checkIsChildren","idStr","_getDataGroup","_getDataInfo","_recursionListLevel","parentId","level","visited","list","newLevel","newInfo","isExistChild","_escapeHtmlText","text","_getHighlightHtml","keyword","mode","color","markText","raw","inx","pre","hit","post","_convertData","parentKey","topParentValue","strTopPValue","json","group","isHighl","isIdValid","isPIdValid","pId","_recursionParentIds","arr","strValue","pArr","_getParentIds","parentArr","_recursionChildIds","pInfo","cId","cArr","_getChildIds","childArr","_getParentSelectAndUn","currentId","selectedIds","selectedUnIds","isForceCheck","select","selectUn","arrSelect","arrSelectUn","currentIdInx","parentIds","childSelect","childSelectUn","cInfo","strCId","cTotal","_getLastChildIds","tempIds","_getMergeParentRecursionData","ids","parent","merge","single","pk","pv","nextValue","hasNew","_getValueMergeParent","cIds","jsonIds","dataGroup","tempFilterList","_getValueSplitChild","newSelectIds","_getOutValue","isMerge","_getValueData","_initSelectAndUn","validValue","tempSelect","tempUn","v","parentInfo","childIds","newUn","_initMain","arrIds","onMounted","watch","newList","oldSelectedId","valueIds","outValue","newValue","newOutValue","oldOutValue","_applySearchFold","prevFold","_applySearchOpen","prevOpen","_recomputeHighlight","onShrink","onSelect","isChecked","sdId","sdInx","scInx","sucInx","ckInx","ckUnInx","arrValue","provide","__expose","_unref","_mergeProps"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const l=require("vue"),n=require("./base-C2QOJBgB.js"),R=require("./index-DAgtltwJ.js"),$=require("./language-DNQZvFJT.js"),j=require("./Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js"),T=require("./Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js"),U=["id"],z=l.defineComponent({name:"ClSelectCascade",__name:"Index",props:{id:String,value:[String,Number],className:{type:String,default:""},disabled:{type:Boolean,default:!1},list:{type:Array,default:()=>[]},placeholder:String,isClear:{type:Boolean,default:!1},isSearch:{type:Boolean,default:!1},parentKey:{type:String,default:"parentId"},topParentValue:{type:String,default:"0"},width:String,isCheckValidate:{type:Boolean,default:!1},validateRules:{type:Array,default:()=>[{r:"required"}]},isShowInMsg:{type:Boolean,default:!0}},emits:{"update:value":p=>!0,onChange:p=>!0},setup(p,{expose:k,emit:w}){const c=p,S=w,{optPageLanguage:D,getPageLanguage:P}=$.useLanguage();P("common");const L=`selectCascade-${n.CommonBase.getRandom(5)}`,K=c.id,m=l.reactive({lastValue:c.value,isFirstDataFinish:!1}),g=l.ref([]),d={dataJson:{},dataGroup:{},parentIdsJson:{}},_=l.computed(()=>D.value.pleaseSelect),F=l.computed(()=>{const{placeholder:e}=c;return n.CommonBase.isNonEmptyString(e)?e.split("|"):[]}),N=l.computed(()=>{const{width:e}=c;return n.CommonBase.isNonEmptyString(e)?e.split("|"):[]}),q=l.computed(()=>{let e={"panel-selectCascade":!0};return e=n.CommonBase.getJsonMerge(e,R.CommonElement.getClassNameJson(c.className)),e}),M=e=>{e!==m.lastValue&&(m.lastValue=e,S("update:value",e),S("onChange",e))},V=e=>n.CommonBase.isExistJsonKey(d.dataGroup,e),b=e=>V(e)?d.dataGroup[e]:[],E=e=>n.CommonBase.isExistJsonKey(d.dataJson,e)?d.dataJson[e]:null,v=()=>`top_${c.topParentValue}`,I=e=>{const{parentKey:t,topParentValue:s}=c,a={},o={};n.CommonBase.isEmpty(e)||e.forEach(r=>{const i=n.CommonBase.getJsonClone(r);if(!n.CommonBase.isExistJsonKey(i,"id")||!n.CommonBase.isExistJsonKey(i,t))return;const u=i.id.toString(),h=i[t].toString();a[u]=i;const f=h===s.toString()?v():h;n.CommonBase.isExistJsonKey(o,f)||(o[f]=[]),o[f].push(i)}),d.dataJson=a,d.dataGroup=o},C=(e,t)=>{const s={idx:e,pId:t,placeholder:_.value,list:[],sty:{},selected:""};if(!n.CommonBase.isEmpty(t)){const i=b(t);s.list=n.CommonBase.getListClone(i)}const a=F.value,o=a.length;o>0&&(o>e?s.placeholder=n.CommonBase.isEmpty(a[e])?_.value:a[e]:o===1&&(s.placeholder=a[0]));const r=N.value;return r.length>e&&(n.CommonBase.isEmpty(r[e])||(s.sty.width=r[e],s.sty.flex="none")),s},B=(e,t)=>{const{parentKey:s,topParentValue:a}=c;let o=[];if(t&&t.indexOf(e)>-1)return[];const r=t?t.concat([e]):[e];if(n.CommonBase.isExistJsonKey(d.parentIdsJson,e))o=d.parentIdsJson[e];else{const i=E(e);if(i!=null){const u=i[s].toString();if(u!==a.toString()){const h=E(u);if(h!=null){o.push(u);const f=B(u,r);f.length>0&&(o=o.concat(f))}}}d.parentIdsJson[e]=o}return o},y=e=>{let t=n.CommonBase.isUndefined(e)?c.value:e;t!=null&&!n.CommonBase.isEmpty(t)&&!n.CommonBase.isExistJsonKey(d.dataJson,t.toString())&&(t="");const s=[];if(t==null||n.CommonBase.isEmpty(t))s.push(C(0,v())),s.push(C(1,""));else{const a=t.toString(),o=[...B(a)].reverse(),r=o.length;if(r>0){o.forEach((u,h)=>{const f=h===0?v():u,J=C(h,f);J.selected=u,s.push(J)});const i=C(r,o[r-1]);i.selected=a,s.push(i)}else{const i=C(0,v());i.selected=a,s.push(i)}}g.value=s},x=()=>{I(c.list),y(),m.isFirstDataFinish=!0,m.lastValue=c.value};l.onMounted(()=>{l.nextTick(()=>{x()})}),l.watch(()=>c.value,e=>{e!==m.lastValue&&m.isFirstDataFinish&&(y(),m.lastValue=e)}),l.watch(()=>c.list,e=>{if(!m.isFirstDataFinish){m.isFirstDataFinish=!0;return}d.parentIdsJson={},I(e);const{value:t}=c,s=t!=null&&!n.CommonBase.isEmpty(t)&&n.CommonBase.isExistJsonKey(d.dataJson,t.toString())?t:"";y(s),m.lastValue=s});const G=()=>!0,O=(e,t)=>{let s="";if(n.CommonBase.isEmpty(e)&&t===0)y("");else if(n.CommonBase.isEmpty(e)){if(g.value.splice(t+1),t>0){const a=g.value[t-1];a&&(s=a.selected)}}else{const a=e.toString();V(a)?(g.value.splice(t+1),g.value.push(C(t+1,a))):(s=e,g.value.splice(t+1))}M(s)};return k({getValue:()=>m.lastValue,getValueData:()=>{const e=m.lastValue;let t="";if(e!=null&&!n.CommonBase.isEmpty(e)){const s=e.toString(),a=B(s),o=a.length>0?a.slice().reverse().concat([s]):[s],r=[];o.forEach(i=>{const u=d.dataJson[i];u!=null&&!n.CommonBase.isEmpty(u.name)&&r.push(u.name)}),t=r.join(" → ")}return{value:e,show:t||(e!=null?e.toString():"")}},setValue:e=>{y(e),m.lastValue=e}}),(e,t)=>(l.openBlock(),l.createElementBlock("div",{id:l.unref(K),class:l.normalizeClass(q.value)},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(g.value,(s,a)=>(l.openBlock(),l.createElementBlock("div",{key:`${L}-${a}`,class:"selectCascade-item",style:l.normalizeStyle(s.sty)},[l.createVNode(j._sfc_main,{isShowMsg:p.isShowInMsg,isCheck:p.isCheckValidate,checkValue:s.selected,rules:p.validateRules},{default:l.withCtx(()=>[l.createVNode(T._sfc_main,{isClear:p.isClear,isSearch:p.isSearch,placeholder:s.placeholder,list:s.list,disabled:p.disabled,value:s.selected,"onUpdate:value":o=>s.selected=o,onOpenBefore:G,onOnChange:o=>O(o,a)},null,8,["isClear","isSearch","placeholder","list","disabled","value","onUpdate:value","onOnChange"])]),_:2},1032,["isShowMsg","isCheck","checkValue","rules"])],4))),128))],10,U))}});exports._sfc_main=z;
2
+ //# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js","sources":["../../../src/libs/Web/SelectCascade/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-for=\"(item, inx) in optData\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"selectCascade-item\"\n :style=\"item.sty\"\n >\n <cl-form-validate\n :isShowMsg=\"isShowInMsg\"\n :isCheck=\"isCheckValidate\"\n :checkValue=\"item.selected\"\n :rules=\"validateRules\"\n >\n <cl-select\n :isClear=\"isClear\"\n :isSearch=\"isSearch\"\n :placeholder=\"item.placeholder\"\n :list=\"item.list\"\n :disabled=\"disabled\"\n v-model:value=\"item.selected\"\n :onOpenBefore=\"onCheckOpen\"\n @onChange=\"onChangeItem($event, inx)\"\n />\n </cl-form-validate>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, onMounted, nextTick, reactive, ref, computed } from 'vue';\nimport type { PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport useLanguage from '../../Use/language';\nimport ClFormValidate from '../../Element/Form/Validate.vue';\nimport ClSelect from '../Select/Index.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClSelectCascade' });\n\nconst props = defineProps({\n id: String, // desc: 自定义元素ID\n value: [String, Number], // desc: 选中的值\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [], // desc: 级联数据列表\n },\n placeholder: String, // desc: 各层级占位符,多个用 | 分隔\n isClear: {\n type: Boolean,\n default: false, // desc: 是否可清空\n },\n isSearch: {\n type: Boolean,\n default: false, // desc: 是否可搜索\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级键名字段\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父值\n },\n width: String, // desc: 各层级下拉宽度,多个用 | 分隔,需带单位(px/%)\n\n isCheckValidate: {\n type: Boolean,\n default: false, // desc: 是否启用校验\n },\n validateRules: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [{ r: 'required' }], // desc: 校验规则\n },\n isShowInMsg: {\n type: Boolean,\n default: true, // desc: 校验信息是否在消息中显示\n },\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 值变化时触发\n onChange: (_value: string | number) => true, // desc: 选中变化时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `selectCascade-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `selectCascade-${CommonBase.getRandom(8)}`\n\ninterface SelectCascadeItem {\n idx: number;\n pId: string;\n placeholder: string;\n list: Record<string, any>[];\n sty: Record<string, string>;\n selected: string;\n}\ninterface SelectCascadePageData {\n dataJson: Record<string, any>;\n dataGroup: Record<string, any[]>;\n parentIdsJson: Record<string, string[]>;\n}\n\nconst optBase = reactive({\n lastValue: props.value,\n isFirstDataFinish: false,\n});\nconst optData = ref<SelectCascadeItem[]>([]);\nconst _pageData: SelectCascadePageData = {\n dataJson: {},\n dataGroup: {},\n parentIdsJson: {},\n};\n\nconst optDefPlaceholder = computed(() => optPageLanguage.value.pleaseSelect);\n\nconst optPlaceholderList = computed(() => {\n const { placeholder } = props;\n const list: string[] = CommonBase.isNonEmptyString(placeholder) ? placeholder.split('|') : [];\n return list;\n});\nconst optWidthList = computed(() => {\n const { width } = props;\n const list: string[] = CommonBase.isNonEmptyString(width) ? width.split('|') : [];\n return list;\n});\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-selectCascade': true };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst _emitChange = (value: string | number) => {\n if (value !== optBase.lastValue) {\n optBase.lastValue = value;\n emit('update:value', value);\n emit('onChange', value);\n }\n};\n\nconst _checkIsChildren = (id: string) => {\n return CommonBase.isExistJsonKey(_pageData.dataGroup, id);\n};\nconst _getDataGroup = (id: string) => {\n return _checkIsChildren(id) ? _pageData.dataGroup[id] : [];\n};\nconst _getDataInfo = (id: string): Record<string, any> | null => {\n return CommonBase.isExistJsonKey(_pageData.dataJson, id) ? _pageData.dataJson[id] : null;\n};\nconst _getTopParentValue = () => {\n return `top_${props.topParentValue}`;\n};\nconst _convertData = (list: Record<string, any>[]) => {\n const { parentKey, topParentValue } = props;\n const json: Record<string, any> = {};\n const group: Record<string, any[]> = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: Record<string, any>) => {\n const newInfo = CommonBase.getJsonClone(info);\n if (\n !CommonBase.isExistJsonKey(newInfo, 'id') ||\n !CommonBase.isExistJsonKey(newInfo, parentKey)\n ) {\n return;\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n const pIdKey = pId === topParentValue.toString() ? _getTopParentValue() : pId;\n if (!CommonBase.isExistJsonKey(group, pIdKey)) {\n group[pIdKey] = [];\n }\n group[pIdKey].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n};\nconst _convertTreeItemData = (idx: number, pId: string): SelectCascadeItem => {\n const json: SelectCascadeItem = {\n idx,\n pId,\n placeholder: optDefPlaceholder.value,\n list: [],\n sty: {},\n selected: '',\n };\n if (!CommonBase.isEmpty(pId)) {\n const groupList = _getDataGroup(pId);\n json.list = CommonBase.getListClone(groupList);\n }\n const placeholderList = optPlaceholderList.value;\n const placeholderLen = placeholderList.length;\n if (placeholderLen > 0) {\n if (placeholderLen > idx) {\n json.placeholder = !CommonBase.isEmpty(placeholderList[idx])\n ? placeholderList[idx]\n : optDefPlaceholder.value;\n } else {\n if (placeholderLen === 1) {\n json.placeholder = placeholderList[0];\n }\n }\n }\n const widthList = optWidthList.value;\n if (widthList.length > idx) {\n if (!CommonBase.isEmpty(widthList[idx])) {\n json.sty.width = widthList[idx];\n json.sty.flex = 'none';\n }\n }\n return json;\n};\nconst _getRecursionParentIds = (id: string, visited?: string[]): string[] => {\n const { parentKey, topParentValue } = props;\n let arr: string[] = [];\n if (visited && visited.indexOf(id) > -1) {\n return [];\n }\n const visitList = visited ? visited.concat([id]) : [id];\n if (CommonBase.isExistJsonKey(_pageData.parentIdsJson, id)) {\n arr = _pageData.parentIdsJson[id];\n } else {\n const info = _getDataInfo(id);\n if (info !== undefined && info !== null) {\n const pId = info[parentKey].toString();\n if (pId !== topParentValue.toString()) {\n const pInfo = _getDataInfo(pId);\n if (pInfo !== undefined && pInfo !== null) {\n arr.push(pId);\n const tempIds: string[] = _getRecursionParentIds(pId, visitList);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n }\n }\n }\n _pageData.parentIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _initData = (value?: string | number) => {\n let newValue: string | number | undefined = CommonBase.isUndefined(value) ? props.value : value;\n if (\n newValue !== undefined &&\n newValue !== null &&\n !CommonBase.isEmpty(newValue) &&\n !CommonBase.isExistJsonKey(_pageData.dataJson, newValue.toString())\n ) {\n newValue = '';\n }\n const list: SelectCascadeItem[] = [];\n if (newValue === undefined || newValue === null || CommonBase.isEmpty(newValue)) {\n list.push(_convertTreeItemData(0, _getTopParentValue()));\n list.push(_convertTreeItemData(1, ''));\n } else {\n const valueStr = newValue.toString();\n const arrPIds = [..._getRecursionParentIds(valueStr)].reverse();\n const arrPIdLen = arrPIds.length;\n if (arrPIdLen > 0) {\n arrPIds.forEach((pId: string, i: number) => {\n const newPid = i === 0 ? _getTopParentValue() : pId;\n const infoItem = _convertTreeItemData(i, newPid);\n infoItem.selected = pId;\n list.push(infoItem);\n });\n const lastItem = _convertTreeItemData(arrPIdLen, arrPIds[arrPIdLen - 1]);\n lastItem.selected = valueStr;\n list.push(lastItem);\n } else {\n const firstItem = _convertTreeItemData(0, _getTopParentValue());\n firstItem.selected = valueStr;\n list.push(firstItem);\n }\n }\n optData.value = list;\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n _initData();\n optBase.isFirstDataFinish = true;\n optBase.lastValue = props.value;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== optBase.lastValue) {\n if (optBase.isFirstDataFinish) {\n _initData();\n optBase.lastValue = newValue;\n }\n }\n },\n);\n\nwatch(\n () => props.list,\n newList => {\n if (!optBase.isFirstDataFinish) {\n optBase.isFirstDataFinish = true;\n return;\n }\n _pageData.parentIdsJson = {};\n _convertData(newList);\n\n const { value } = props;\n const selectValue =\n value !== undefined &&\n value !== null &&\n !CommonBase.isEmpty(value) &&\n CommonBase.isExistJsonKey(_pageData.dataJson, value.toString())\n ? value\n : '';\n _initData(selectValue);\n optBase.lastValue = selectValue;\n },\n);\n\nconst onCheckOpen = () => {\n return true;\n};\n\nconst onChangeItem = (value: string | number, inx: number) => {\n let outValue: string | number = '';\n if (CommonBase.isEmpty(value) && inx === 0) {\n _initData('');\n } else if (CommonBase.isEmpty(value)) {\n optData.value.splice(inx + 1);\n if (inx > 0) {\n const parentItem = optData.value[inx - 1];\n if (parentItem) {\n outValue = parentItem.selected;\n }\n }\n } else {\n const valueStr = value.toString();\n if (_checkIsChildren(valueStr)) {\n optData.value.splice(inx + 1);\n optData.value.push(_convertTreeItemData(inx + 1, valueStr));\n } else {\n outValue = value;\n optData.value.splice(inx + 1);\n }\n }\n _emitChange(outValue);\n};\n\nconst getValue = () => {\n return optBase.lastValue;\n};\nconst getValueData = () => {\n const value = optBase.lastValue;\n let show = '';\n if (value !== undefined && value !== null && !CommonBase.isEmpty(value)) {\n const v = value.toString();\n const ids = _getRecursionParentIds(v);\n const chain = ids.length > 0 ? ids.slice().reverse().concat([v]) : [v];\n const names: string[] = [];\n chain.forEach((id) => {\n const info = _pageData.dataJson[id];\n if (info !== undefined && info !== null && !CommonBase.isEmpty(info.name)) {\n names.push(info.name);\n }\n });\n show = names.join(' → ');\n }\n return {\n value,\n show: show || (value !== undefined && value !== null ? value.toString() : ''),\n };\n};\nconst setValue = (value: string | number) => {\n _initData(value);\n optBase.lastValue = value;\n};\n\nexport interface ClSelectCascadeExpose {\n getValue: () => string | number | undefined;\n getValueData: () => { value: string | number | undefined; show: string };\n setValue: (value: string | number) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_keyIndex","CommonBase","elId","optBase","reactive","optData","ref","_pageData","optDefPlaceholder","computed","optPlaceholderList","placeholder","optWidthList","width","clsParent","cls","CommonElement","_emitChange","value","_checkIsChildren","id","_getDataGroup","_getDataInfo","_getTopParentValue","_convertData","list","parentKey","topParentValue","json","group","info","newInfo","pId","pIdKey","_convertTreeItemData","idx","groupList","placeholderList","placeholderLen","widthList","_getRecursionParentIds","visited","arr","visitList","pInfo","tempIds","_initData","newValue","valueStr","arrPIds","arrPIdLen","i","newPid","infoItem","lastItem","firstItem","_initMain","onMounted","nextTick","watch","newList","selectValue","onCheckOpen","onChangeItem","inx","outValue","parentItem","__expose","show","v","ids","chain","names","_createElementBlock","_unref","_openBlock","_Fragment","_renderList","item","_normalizeStyle","_createVNode","ClFormValidate","ClSelect","$event"],"mappings":"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"}
@@ -304,4 +304,4 @@ const ge = ["id"], ye = { class: "ptr-track" }, Te = { class: "ptr-text" }, Se =
304
304
  export {
305
305
  we as _
306
306
  };
307
- //# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map
307
+ //# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map