@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-D_IwyxiV.js","sources":["../../../src/libs/Web/DateTime/CalendarsDays.vue","../../../src/libs/Web/DateTime/CalendarsMonths.vue","../../../src/libs/Web/DateTime/CalendarsYears.vue","../../../src/libs/Web/DateTime/CalendarsClock.vue","../../../src/libs/Web/DateTime/CalendarsBase.vue","../../../src/libs/Web/DateTime/DateTimeDefault.vue","../../../src/libs/Web/DateTime/DateTimeRange.vue","../../../src/libs/Web/DateTime/DateTimeBase.vue","../../../src/libs/Web/DateTime/Index.vue"],"sourcesContent":["<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th\n class=\"time-head time-head-day\"\n colspan=\"7\"\n >\n <span class=\"time-prev\">\n <span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-double-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n <span\n class=\"prev-month\"\n :title=\"optPageLanguage.prevMonth\"\n v-if=\"optHead.isPrevMonth\"\n @click=\"onPrevMonth\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span\n class=\"datetime-switch-year\"\n @click=\"onView($event, 'years')\"\n >{{ optHead.titleYear }}</span\n >\n <span\n class=\"datetime-switch-month\"\n @click=\"onView($event, 'months')\"\n >{{ optHead.titleMonth }}</span\n >\n <span class=\"time-next\">\n <span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-double-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n <span\n class=\"next-month\"\n :title=\"optPageLanguage.nextMonth\"\n v-if=\"optHead.isNextMonth\"\n @click=\"onNextMonth\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n <tr>\n <th\n v-for=\"(w, wIdx) in optWeeks\"\n :key=\"`${_keyIndex}-week-${wIdx}`\"\n >\n {{ w }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"(wd, wdIdx) in optDays\"\n :key=\"`${_keyIndex}-days-${wdIdx}`\"\n >\n <td\n v-for=\"(d, dIdx) in wd.days\"\n :key=\"`${_keyIndex}-day-${dIdx}`\"\n role=\"gridcell\"\n tabindex=\"0\"\n :aria-disabled=\"d.isDisabled\"\n :class=\"d.cls\"\n @click=\"onSelectDay($event, d)\"\n @keydown.enter.prevent=\"onSelectDay($event, d)\"\n @keydown.space.prevent=\"onSelectDay($event, d)\"\n @mouseover=\"onHoverDay($event, d)\"\n >\n {{ d.day }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface DayCell {\n cls: string;\n day: number;\n value: number;\n isDisabled: boolean;\n isOld: boolean;\n isNew: boolean;\n}\n\ndefineOptions({ name: 'ClCalendarsDays' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onChangeType: (_value: 'years' | 'months') => true, // desc: 切换视图类型时触发\n onSelectDate: (_layerView: 'days', _info: DayCell) => true, // desc: 选中日期时触发\n onHoverDate: (_layerView: 'days', _info: DayCell) => true, // desc: 悬停日期时触发\n onInitComplete: (_value: 'days') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中日期(日期格获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsDays: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsDays-${CommonBase.getRandom(5)}`;\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsDays-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsdays': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n isPrevMonth: false,\n titleYear: '',\n titleMonth: '',\n isNextYear: false,\n isNextMonth: false,\n});\nconst optWeeks = ref<string[]>([]);\nconst optDays = ref<{ days: DayCell[] }[]>([]);\n\ninterface PageData {\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\nconst _pageData: PageData = {\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n const titleYear = _pageData.viewDate.year();\n const locale = _pageData.viewDate.localeData();\n const titleMonth = locale.monthsShort(_pageData.viewDate);\n\n const prevYear = _pageData.viewDate.clone().subtract(1, 'years').endOf('month');\n const disabledPrevYear = _selfBase.checkDataMinMax(prevYear, 'day');\n\n const prevMonth = _pageData.viewDate.clone().subtract(1, 'months').endOf('month');\n const disabledPrevMonth = _selfBase.checkDataMinMax(prevMonth, 'day');\n\n const nextMonth = _pageData.viewDate.clone().add(1, 'months').startOf('month');\n const disabledNextMonth = _selfBase.checkDataMinMax(nextMonth, 'day');\n\n const nextYear = _pageData.viewDate.clone().add(1, 'years').startOf('month');\n const disabledNextYear = _selfBase.checkDataMinMax(nextYear, 'day');\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.isPrevMonth = !disabledPrevMonth;\n optHead.titleYear = `${titleYear}${optPageLanguage.value.year}`;\n optHead.titleMonth = titleMonth;\n optHead.isNextMonth = !disabledNextMonth;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setWeek = () => {\n const locale = _pageData.viewDate.localeData();\n const days = locale.weekdaysMin();\n const first = locale.firstDayOfWeek();\n const dow: string[] = [];\n days.forEach((d: string, i: number) => {\n dow[(7 + i - first) % 7] = d;\n });\n optWeeks.value = dow;\n};\n\n// 每次 hover 触发全量 42 格 Dayjs 计算,性能敏感场景可改为仅更新变化的单元格\nconst _setDays = () => {\n const date = _pageData.viewDate.clone();\n const currentDate = _pageData.selectDate;\n const currentYear = date.year();\n const currentMonth = date.month();\n let useDate = date.clone().subtract(1, 'months');\n const weeks = [];\n let days = [];\n useDate = useDate.date(useDate.daysInMonth()).startOf('week');\n for (let i = 0; i < 42; i += 1) {\n if (i > 0) {\n useDate = useDate.add(1, 'days');\n }\n const loopDate = useDate.clone();\n const loopValue = loopDate.date();\n const isOld =\n (useDate.year() === currentYear && useDate.month() < currentMonth) ||\n useDate.year() < currentYear;\n const isNew =\n (useDate.year() === currentYear && useDate.month() > currentMonth) ||\n useDate.year() > currentYear;\n let isActive = currentDate && useDate.isSame(currentDate, 'day');\n const isDisabled = _selfBase.checkDataMinMax(loopDate, 'day');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n if (_pageData.hoverDate) {\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'day') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'day')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useDate.isSame(_pageData.startDate, 'day');\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn =\n isStart ||\n isEnd ||\n (useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n } else if (_pageData.startDate) {\n isStart = useDate.isSame(_pageData.startDate, 'day');\n isRangeIn = isStart || useDate.isSame(_pageData.hoverDate, 'day');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.hoverDate, 'day'));\n isEnd = _pageData.hoverDate.isSame(_pageData.startDate, 'day') && isStart;\n } else if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn = isEnd || useDate.isSame(_pageData.hoverDate, 'day');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n isStart = _pageData.hoverDate.isSame(_pageData.endDate, 'day') && isEnd;\n }\n } else {\n isStart = _pageData.startDate && useDate.isSame(_pageData.startDate, 'day');\n if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn =\n isStart ||\n isEnd ||\n (_pageData.startDate &&\n useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n }\n }\n isActive = isStart || isEnd;\n }\n const cls = CommonElement.getAddClass('day', {\n old: isOld,\n new: isNew,\n active: isActive && !isOld && !isNew && !isDisabled,\n disabled: isDisabled,\n 'date-start': isStart && !isOld && !isNew,\n 'date-end': isEnd && !isOld && !isNew,\n 'range-in': isRangeIn && !isOld && !isNew,\n });\n days.push({ cls, day: loopValue, value: loopValue, isDisabled, isOld, isNew });\n if (days.length === 7) {\n weeks.push({ days });\n days = [];\n }\n }\n optDays.value = weeks;\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n if (!_pageData.viewDate) {\n return;\n }\n const newViewDate = _pageData.viewDate.clone()[operate](amount, type);\n emit('onChangeDate', newViewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'days');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段,\n// 否则先到达的 select/start/end watch 被 viewDate 空守卫丢弃后选中态永久丢失\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (type: keyof PageData, newValue: any, oldValue: any) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 年份脏渲染\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _setWeek();\n _setHead();\n _setDays();\n _emitInitComplete();\n }\n }\n};\n\nconst _initMain = () => {\n if (CommonBase.isNonEmptyString(props.viewValue)) {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n _setWeek();\n _setHead();\n _setDays();\n _emitInitComplete();\n }\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch([() => props.selectValue, () => props.startValue, () => props.endValue], () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 null.clone() 崩溃\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算日期单元格样式(表头和星期不依赖 select/start/end 等 prop)\n _setDays();\n});\n\nwatch(\n () => props.hoverValue,\n () => {\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // hover 仅影响范围预览(range-in/date-start/date-end),非 range 模式无需全量重算 42 格\n if (_selfTopBase.isRange) {\n _setDays();\n }\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setDays();\n});\n\nconst onPrevYear = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'years');\n};\n\nconst onPrevMonth = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'months');\n};\n\nconst onNextMonth = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'months');\n};\n\nconst onNextYear = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'years');\n};\n\nconst onView = (e: Event, viewType: 'years' | 'months') => {\n e.preventDefault();\n e.stopPropagation();\n emit('onChangeType', viewType);\n};\n\nconst onSelectDay = (e: Event, dayInfo: DayCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!dayInfo.isDisabled) {\n emit('onSelectDate', 'days', dayInfo);\n }\n};\n\nconst onHoverDay = (e: Event, dayInfo: DayCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!dayInfo.isDisabled) {\n emit('onHoverDate', 'days', dayInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th class=\"time-head time-head-month\">\n <span class=\"time-prev\"\n ><span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span\n class=\"datetime-switch-year\"\n @click=\"onView($event, 'years')\"\n >{{ optHead.titleYear }}</span\n >\n <span class=\"time-next\"\n ><span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"time-body-month\">\n <div>\n <span\n v-for=\"(m, mIdx) in optMonths\"\n :key=\"`${_keyIndex}-month-${mIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"m.isDisabled\"\n :class=\"m.cls\"\n @click=\"onSelectMonth($event, m)\"\n @keydown.enter.prevent=\"onSelectMonth($event, m)\"\n @keydown.space.prevent=\"onSelectMonth($event, m)\"\n @mouseover=\"onHoverMonth($event, m)\"\n >{{ m.month }}</span\n >\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface MonthCell {\n cls: string;\n month: string;\n isDisabled: boolean;\n value: number;\n}\n\ninterface PageData {\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\ndefineOptions({ name: 'ClCalendarsMonths' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onChangeType: (_value: 'years') => true, // desc: 切换视图类型时触发\n onSelectDate: (_layerView: 'months', _info: MonthCell) => true, // desc: 选中月份时触发\n onHoverDate: (_layerView: 'months', _info: MonthCell) => true, // desc: 悬停月份时触发\n onInitComplete: (_value: 'months') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中月份(月份格获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsMonths-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsMonths: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsMonths-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsmonths': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n titleYear: '',\n isNextYear: false,\n});\nconst optMonths = ref<MonthCell[]>([]);\n\nconst _pageData: PageData = {\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const titleYear = _pageData.viewDate.year();\n\n const prevYear = _pageData.viewDate.clone().subtract(1, 'years').endOf('year');\n const disabledPrevYear = _selfBase.checkDataMinMax(prevYear, 'month');\n\n const nextYear = _pageData.viewDate.clone().add(1, 'years').startOf('year');\n const disabledNextYear = _selfBase.checkDataMinMax(nextYear, 'month');\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.titleYear = `${titleYear}${optPageLanguage.value.year}`;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setMonths = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const date = _pageData.viewDate.clone();\n const focusDate = _selfBase.getFocusDate();\n const currentDate = _pageData.selectDate;\n const currentYear = date.year();\n const months: MonthCell[] = [];\n date\n .localeData()\n .monthsShort()\n .forEach((m: string, i: number) => {\n const useDate = _selfBase.getViewMin(currentYear, i);\n let isActive = !!(currentDate && useDate.isSame(currentDate, 'month'));\n let isFocused = !!(focusDate && useDate.isSame(focusDate, 'month'));\n const isDisabled = _selfBase.checkDataMinMax(useDate, 'month');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n isFocused = false;\n if (_pageData.hoverDate) {\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'month') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'month')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useDate.isSame(_pageData.startDate, 'month');\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn =\n isStart ||\n isEnd ||\n (useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month'));\n } else if (_pageData.startDate) {\n isStart = useDate.isSame(_pageData.startDate, 'month');\n isRangeIn = isStart || useDate.isSame(_pageData.hoverDate, 'month');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.hoverDate, 'month'));\n // 对齐日视图:hover 与 start 同月(单点区间预览态)时 end 高亮\n isEnd =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.startDate, 'month')) &&\n isStart;\n } else if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn = isEnd || useDate.isSame(_pageData.hoverDate, 'month');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month'));\n // 对齐日视图:hover 与 end 同月(单点区间预览态)时起点也高亮\n isStart =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.endDate, 'month')) &&\n isEnd;\n }\n } else {\n isStart = !!(_pageData.startDate && useDate.isSame(_pageData.startDate, 'month'));\n if (_pageData.endDate && _pageData.startDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn =\n useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month');\n }\n }\n isActive = isStart || isEnd;\n }\n if (_selfTopBase.layerType === 'months') {\n isFocused = false;\n }\n const cls = CommonElement.getAddClass('month', {\n active: isActive && !isDisabled,\n focused: isFocused,\n disabled: isDisabled,\n 'date-start': isStart,\n 'date-end': isEnd,\n 'range-in': isRangeIn,\n });\n months.push({ cls, month: m, isDisabled, value: i });\n });\n optMonths.value = months;\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n if (!_pageData.viewDate) {\n return;\n }\n const newViewDate = _pageData.viewDate.clone()[operate](amount, type);\n emit('onChangeDate', newViewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'months');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段,\n// 否则先到达的 select/start/end watch 被 viewDate 空守卫丢弃后选中态永久丢失\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (\n type: keyof PageData,\n newValue: string | undefined,\n oldValue: string | undefined,\n) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 年份脏渲染\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _setHead();\n _setMonths();\n _emitInitComplete();\n }\n }\n};\n\nconst _initMain = () => {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n _setHead();\n _setMonths();\n\n _emitInitComplete();\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch(\n [() => props.selectValue, () => props.startValue, () => props.endValue, () => props.hoverValue],\n () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 null.clone() 崩溃\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算月份单元格样式(表头不依赖 select/start/end/hover 等 prop)\n _setMonths();\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setMonths();\n});\n\nconst onPrevYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'years');\n};\n\nconst onNextYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'years');\n};\n\nconst onView = (e: Event, viewType: 'years') => {\n e.preventDefault();\n e.stopPropagation();\n emit('onChangeType', viewType);\n};\n\nconst onSelectMonth = (e: Event, monthInfo: MonthCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!monthInfo.isDisabled) {\n emit('onSelectDate', 'months', monthInfo);\n }\n};\n\nconst onHoverMonth = (e: Event, monthInfo: MonthCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!monthInfo.isDisabled) {\n emit('onHoverDate', 'months', monthInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th class=\"time-head time-head-year\">\n <span class=\"time-prev\"\n ><span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear10\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span>{{ optHead.titleYear }}</span>\n <span class=\"time-next\"\n ><span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear10\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"time-body-year\">\n <span\n v-for=\"(y, yIdx) in optYears\"\n :key=\"`${_keyIndex}-${y.year}-${yIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"y.isDisabled\"\n :class=\"y.cls\"\n @click=\"onSelectYear($event, y)\"\n @keydown.enter.prevent=\"onSelectYear($event, y)\"\n @keydown.space.prevent=\"onSelectYear($event, y)\"\n @mouseover=\"onHoverYear($event, y)\"\n >{{ y.year }}</span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface YearCell {\n cls: string;\n year: number;\n isDisabled: boolean;\n value: number;\n}\n\ninterface PageData {\n startYear: number;\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\ndefineOptions({ name: 'ClCalendarsYears' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onSelectDate: (_layerView: 'years', _info: YearCell) => true, // desc: 选中年份时触发\n onHoverDate: (_layerView: 'years', _info: YearCell) => true, // desc: 悬停年份时触发\n onInitComplete: (_value: 'years') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中年份(年份格获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsYears: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsYears-${CommonBase.getRandom(5)}`;\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsYears-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsyears': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n titleYear: '',\n isNextYear: false,\n});\nconst optYears = ref<YearCell[]>([]);\n\nconst _pageData: PageData = {\n startYear: 0,\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const titleYear = `${_pageData.startYear}-${_pageData.startYear + 9}`;\n\n const prevDate = _selfTop.getMomentDate({ year: _pageData.startYear - 1, month: 11 });\n const nextDate = _selfTop.getMomentDate({ year: _pageData.startYear + 10, month: 0 });\n const disabledPrevYear = prevDate\n ? _selfBase.checkDataMinMax(prevDate.endOf('month'), 'year')\n : false;\n const disabledNextYear = nextDate\n ? _selfBase.checkDataMinMax(nextDate.startOf('month'), 'year')\n : false;\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.titleYear = titleYear;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setYears = () => {\n const focusDate = _selfBase.getFocusDate();\n const currentDate = _pageData.selectDate;\n const years: YearCell[] = [];\n for (let i = -1; i < 11; i += 1) {\n const useYear = _pageData.startYear + i;\n const useDate = _selfBase.getViewMin(useYear);\n const isOld = i === -1;\n const isNew = i > 9;\n let isActive = currentDate ? useDate.isSame(currentDate, 'year') : false;\n let isFocused = !!(focusDate && useDate.isSame(focusDate, 'year'));\n const isDisabled = _selfBase.checkDataMinMax(useDate, 'year');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n isFocused = false;\n if (_pageData.hoverDate) {\n const hoverYear = parseInt(_pageData.hoverDate.format('YYYY'), 10);\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'year') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'year')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useYear === parseInt(_pageData.startDate.format('YYYY'), 10);\n isEnd = useYear === parseInt(_pageData.endDate.format('YYYY'), 10);\n isRangeIn =\n isStart ||\n isEnd ||\n (useYear > parseInt(_pageData.startDate.format('YYYY'), 10) &&\n useYear < parseInt(_pageData.endDate.format('YYYY'), 10));\n } else if (_pageData.startDate) {\n isStart = useYear === parseInt(_pageData.startDate.format('YYYY'), 10);\n isRangeIn = isStart || useYear === hoverYear;\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'year') &&\n useDate.isBefore(_pageData.hoverDate, 'year'));\n isEnd = false;\n } else if (_pageData.endDate) {\n isEnd = useYear === parseInt(_pageData.endDate.format('YYYY'), 10);\n isRangeIn = isEnd || useYear === hoverYear;\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'year') &&\n useDate.isBefore(_pageData.endDate, 'year'));\n // 对齐日视图:hover 与 end 同年(单点区间预览态)时起点也高亮\n isStart =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.endDate, 'year')) &&\n isEnd;\n }\n } else {\n isStart = !!(_pageData.startDate && useDate.isSame(_pageData.startDate, 'year'));\n if (_pageData.endDate && _pageData.startDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'year');\n isRangeIn =\n useDate.isAfter(_pageData.startDate, 'year') &&\n useDate.isBefore(_pageData.endDate, 'year');\n }\n }\n isActive = isStart || isEnd;\n }\n if (_selfTopBase.layerType === 'years') {\n isFocused = false;\n }\n const cls = CommonElement.getAddClass('year', {\n old: isOld,\n new: isNew,\n active: isActive && !isOld && !isNew,\n focused: isFocused,\n disabled: isDisabled,\n 'date-start': isStart && !isOld && !isNew,\n 'date-end': isEnd && !isOld && !isNew,\n 'range-in': isRangeIn && !isOld && !isNew,\n });\n years.push({ cls, year: useYear, isDisabled, value: useYear });\n }\n optYears.value = years;\n};\n\nconst _initOptions = () => {\n _pageData.startYear = Math.floor(_pageData.viewDate.year() / 10) * 10;\n _setHead();\n _setYears();\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n // viewValue 初始无效时 viewDate 为 null(_initMain 短路),点击表头箭头前兜底保护\n if (!_pageData.viewDate) {\n return;\n }\n // 先推进本地 viewDate 再 emit:父组件异步回写 viewValue 时连点箭头基于新基点计算,不丢页\n _pageData.viewDate = _pageData.viewDate.clone()[operate](amount, type);\n _initOptions();\n emit('onChangeDate', _pageData.viewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'years');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (\n type: keyof PageData,\n newValue: string | undefined,\n oldValue: string | undefined,\n) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _initOptions();\n _emitInitComplete();\n } else {\n // viewValue 清空/无效:重置内部视图,避免「外部已清空、内部仍冻结在旧 10 年页」的脱节窗口\n _pageData.viewDate = null;\n _pageData.startYear = 0;\n optYears.value = [];\n optHead.isPrevYear = false;\n optHead.isNextYear = false;\n optHead.titleYear = '';\n }\n }\n};\n\nconst _initMain = () => {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n\n _initOptions();\n\n _emitInitComplete();\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch(\n [() => props.selectValue, () => props.startValue, () => props.endValue, () => props.hoverValue],\n () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 startYear 依赖空值\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算年份单元格样式(表头不依赖 select/start/end/hover 等 prop)\n _setYears();\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setYears();\n});\n\nconst onPrevYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 10, 'years');\n};\n\nconst onNextYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 10, 'years');\n};\n\nconst onSelectYear = (e: Event, yearInfo: YearCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!yearInfo.isDisabled) {\n emit('onSelectDate', 'years', yearInfo);\n }\n};\n\nconst onHoverYear = (e: Event, yearInfo: YearCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!yearInfo.isDisabled) {\n emit('onHoverDate', 'years', yearInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <div class=\"datetime-times-inner\"></div>\n <div>\n <div class=\"times-container\">\n <div\n class=\"times-overlay\"\n @click=\"onClickOverlay\"\n ></div>\n <div\n v-if=\"isShowCancel\"\n class=\"times-cancel\"\n :title=\"optPageLanguage.common.cancel\"\n @click=\"onCancel\"\n >\n <cl-icon-font name=\"close1\"></cl-icon-font>\n </div>\n <template v-else></template>\n <div\n v-if=\"isShowSubmit\"\n class=\"times-submit\"\n :title=\"optPageLanguage.common.submit\"\n @click=\"onSubmit\"\n >\n <cl-icon-font name=\"check1\"></cl-icon-font>\n </div>\n <template v-else></template>\n <div class=\"times-clock\">\n <div class=\"clock-nums\">\n <div\n v-for=\"(numInfo, nIdx) in optNum\"\n :key=\"`${_keyIndex}-clock-${nIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"numInfo.isDisabled\"\n :class=\"numInfo.cls\"\n @click=\"onClickNum(numInfo)\"\n @keydown.enter.prevent=\"onClickNum(numInfo)\"\n @keydown.space.prevent=\"onClickNum(numInfo)\"\n >\n {{ numInfo.num }}\n </div>\n </div>\n <div class=\"clock-pointer\">\n <div\n v-if=\"optOperate.hour\"\n :class=\"clsPointerHour\"\n @click=\"onClickPointer('hour')\"\n :style=\"{ transform: `rotate(${optRotate.hour + optRotate.hourMinute}deg)` }\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"optOperate.minute\"\n :class=\"clsPointerMinute\"\n @click=\"onClickPointer('minute')\"\n :style=\"{ transform: `rotate(${optRotate.minute + optRotate.minuteSecond}deg)` }\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"optOperate.second\"\n :class=\"clsPointerSecond\"\n @click=\"onClickPointer('second')\"\n :style=\"{ transform: `rotate(${optRotate.second}deg)` }\"\n ></div>\n <template v-else></template>\n </div>\n <div\n class=\"clock-am\"\n v-show=\"optBase.activePointer === 'hour'\"\n >\n <small\n role=\"button\"\n tabindex=\"0\"\n :class=\"clsAmAm\"\n @click=\"onClickAm('am')\"\n @keydown.enter.prevent=\"onClickAm('am')\"\n @keydown.space.prevent=\"onClickAm('am')\"\n >{{ optPageLanguage.am }}</small\n >\n <small\n role=\"button\"\n tabindex=\"0\"\n :class=\"clsAmPm\"\n @click=\"onClickAm('pm')\"\n @keydown.enter.prevent=\"onClickAm('pm')\"\n @keydown.space.prevent=\"onClickAm('pm')\"\n >{{ optPageLanguage.pm }}</small\n >\n </div>\n </div>\n </div>\n <div\n v-if=\"optOperate.hour\"\n :class=\"clsSetHour\"\n @click=\"onClickPointer('hour')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.hour\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.hourDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeHour\"\n :calculationOperateValueCallback=\"onAddSubNumHour\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n <div\n v-if=\"optOperate.minute && optOperate.minuteShowAddSub\"\n :class=\"clsSetMinute\"\n @click=\"onClickPointer('minute')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.minute\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.minuteDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeMinute\"\n :calculationOperateValueCallback=\"onAddSubNumMinute\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n <div\n v-if=\"optOperate.second\"\n :class=\"clsSetSecond\"\n @click=\"onClickPointer('second')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.second\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.secondDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeSecond\"\n :calculationOperateValueCallback=\"onAddSubNumSecond\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClInputNumberStepper from '../../Element/InputNumberStepper/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface ClockNum {\n num: number;\n cls: string;\n isDisabled: boolean;\n}\n\ndefineOptions({ name: 'ClCalendarsClocks' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n selectDay: String, // desc: 选中日期\n selectValue: String, // desc: 选中时间值\n minValue: String, // desc: 最小可选时间\n maxValue: String, // desc: 最大可选时间\n isShowPointer: {\n type: Boolean,\n default: true, // desc: 是否显示表盘指针\n },\n isShowSubmit: {\n type: Boolean,\n default: false, // desc: 是否显示确认按钮\n },\n isShowCancel: {\n type: Boolean,\n default: false, // desc: 是否显示取消按钮\n },\n isClickOverlay: {\n type: Boolean,\n default: false, // desc: 是否点击遮罩关闭\n },\n});\n\nconst emit = defineEmits({\n onSubmit: (_value: string) => true, // desc: 确认时间选择时触发\n onInitComplete: (_value: string) => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 数字选中 / AM-PM 切换(元素获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsClock-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsClocks: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// time 模式下的固定基准日期,与 Index.vue 中 _getValueEffective 保持一致\nconst _TIME_REFERENCE_DATE = '2000-01-01';\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsClock-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst optBase = reactive({\n isOpen: false,\n activePointer: 'hour',\n activeAm: 'am',\n});\nconst optOperate: Record<string, boolean> = reactive({\n hour: true,\n hourDisabled: false,\n minute: true,\n minuteDisabled: false,\n minuteShowAddSub: true,\n second: true,\n secondDisabled: false,\n});\nconst optRotate: Record<string, number> = reactive({\n hour: -90,\n hourMinute: 0,\n minute: -90,\n minuteSecond: 0,\n second: -90,\n});\nconst optSelectValue: Record<string, string> = reactive({\n hour: '00',\n minute: '00',\n second: '00',\n});\nconst optNum = ref<ClockNum[]>([]);\n\nconst _pageData: Record<string, any> = {\n selectDayDate: null,\n minDate: null,\n maxDate: null,\n timeAngle: { hour: 30, minute: 6, second: 6 },\n num: {\n hourAm: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n hourPm: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],\n minute: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],\n second: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],\n },\n origValue: {\n hour: '00',\n minute: '00',\n second: '00',\n },\n lastValue: {\n hour: '00',\n minute: '00',\n second: '00',\n },\n isCheckMin: false,\n checkMinDiff: null,\n min: {\n hour: 0,\n minute: 0,\n second: 0,\n },\n isCheckMax: false,\n checkMaxDiff: null,\n max: {\n hour: 0,\n minute: 0,\n second: 0,\n },\n};\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsclocks': true,\n 'datetime-times': true,\n };\n cls['times-open'] = optBase.isOpen;\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsPointerHour = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-hour': true };\n cls['pointer-active'] = optBase.activePointer === 'hour';\n cls['pointer-disabled'] = optOperate.hourDisabled;\n return cls;\n});\n\nconst clsPointerMinute = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-minute': true };\n cls['pointer-active'] = optBase.activePointer === 'minute';\n cls['pointer-disabled'] = optOperate.minuteDisabled;\n return cls;\n});\n\nconst clsPointerSecond = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-second': true };\n cls['pointer-active'] = optBase.activePointer === 'second';\n cls['pointer-disabled'] = optOperate.secondDisabled;\n return cls;\n});\n\nconst clsAmAm = computed(() => {\n const cls: Record<string, boolean> = { 'am-am': true };\n cls['am-active'] = optBase.activeAm === 'am';\n return cls;\n});\n\nconst clsAmPm = computed(() => {\n const cls: Record<string, boolean> = { 'am-pm': true };\n cls['am-active'] = optBase.activeAm === 'pm';\n return cls;\n});\n\nconst clsSetHour = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-hour': true };\n cls['clock-set-active'] = optBase.activePointer === 'hour';\n cls['clock-set-disabled'] = optOperate.hourDisabled;\n return cls;\n});\n\nconst clsSetMinute = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-minute': true };\n cls['clock-set-active'] = optBase.activePointer === 'minute';\n cls['clock-set-disabled'] = optOperate.minuteDisabled;\n return cls;\n});\n\nconst clsSetSecond = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-second': true };\n cls['clock-set-active'] = optBase.activePointer === 'second';\n cls['clock-set-disabled'] = optOperate.secondDisabled;\n return cls;\n});\n\nconst _updatePageDataByType = (type: string, value: any) => {\n _pageData[type] = _selfTop.getMomentDate(value);\n};\n\nconst _calculateSkipCount = (type: any) => {\n let valueOld = parseInt(_pageData.lastValue[type], 10);\n let valueNew = parseInt(optSelectValue[type], 10);\n let skip = 0;\n if (type === 'hour') {\n if (valueNew === 0 && valueOld === 23) {\n valueNew = 24;\n }\n if (valueOld === 0 && valueNew === 23) {\n valueOld = 24;\n }\n if (valueNew - valueOld > 6) {\n valueOld += 12;\n }\n if (valueOld - valueNew >= 6) {\n valueNew += 12;\n }\n skip = valueNew - valueOld;\n } else {\n if (valueNew - valueOld > 30) {\n valueOld += 60;\n }\n if (valueOld - valueNew >= 30) {\n valueNew += 60;\n }\n skip = valueNew - valueOld;\n }\n return skip;\n};\n\nconst _calculateRotate = (type: string) => {\n const skip = _calculateSkipCount(type);\n const angle = skip * _pageData.timeAngle[type];\n return optRotate[type] + (angle >= 360 ? angle % 360 : angle);\n};\n\nconst _setPointerRotate = () => {\n const hour = _calculateRotate('hour');\n const hourMinute =\n _pageData.timeAngle.hour * parseFloat((parseInt(optSelectValue.minute, 10) / 60).toString());\n const minute = _calculateRotate('minute');\n const minuteSecond =\n _pageData.timeAngle.second * parseFloat((parseInt(optSelectValue.second, 10) / 60).toString());\n const second = _calculateRotate('second');\n\n optRotate.hour = hour;\n optRotate.hourMinute = hourMinute;\n optRotate.minute = minute;\n optRotate.minuteSecond = minuteSecond;\n optRotate.second = second;\n};\n\nconst _getShowAm = (hh: string) => {\n return parseInt(hh, 10) < 12 ? 'am' : 'pm';\n};\n\nconst _compareNumPre = (type: string, minMax: string) => {\n let isRunPre = true;\n switch (type) {\n case 'hour':\n isRunPre = true;\n break;\n case 'minute':\n isRunPre = parseInt(optSelectValue.hour, 10) === _pageData[minMax].hour;\n break;\n case 'second':\n isRunPre =\n parseInt(optSelectValue.hour, 10) === _pageData[minMax].hour &&\n parseInt(optSelectValue.minute, 10) === _pageData[minMax].minute;\n break;\n default:\n break;\n }\n return isRunPre;\n};\n\n// 跨午夜时间范围(min.hour > max.hour,如 23:00~00:30 夜班配置):hour 合法值 = [min, 23] ∪ [0, max]\nconst _isCrossMidnight = () => {\n return (\n _pageData.isCheckMin &&\n _pageData.isCheckMax &&\n _pageData.checkMinDiff === 0 &&\n _pageData.checkMaxDiff === 0 &&\n _pageData.min.hour > _pageData.max.hour\n );\n};\n\nconst _checkNumDisabled = (type: string, num: number) => {\n let isDisabled = false;\n if (_isCrossMidnight() && type === 'hour') {\n // 跨午夜:hour 合法区间为 [min, 23] ∪ [0, max],区间外禁用\n isDisabled = num < _pageData.min[type] && num > _pageData.max[type];\n } else if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff === 0) {\n if (_compareNumPre(type, 'min')) {\n isDisabled = num < _pageData.min[type];\n }\n } else if (_pageData.checkMinDiff < 0) {\n isDisabled = true;\n }\n }\n if (!isDisabled && _pageData.isCheckMax) {\n if (_pageData.checkMaxDiff === 0) {\n if (_compareNumPre(type, 'max')) {\n isDisabled = num > _pageData.max[type];\n }\n } else if (_pageData.checkMaxDiff > 0) {\n isDisabled = true;\n }\n }\n return isDisabled;\n};\n\nconst _setClockNum = (type: string) => {\n let numType = type;\n if (numType === 'hour') {\n numType = optBase.activeAm === 'am' ? 'hourAm' : 'hourPm';\n }\n const isDisabled = optOperate[`${type}Disabled`];\n const nums: ClockNum[] = [];\n _pageData.num[numType].forEach((n: number, i: number) => {\n const item: ClockNum = { num: n, cls: 'clock-num', isDisabled: false };\n item.cls += ` clock-num${i + 1} `;\n item.isDisabled = isDisabled ? true : _checkNumDisabled(type, n);\n if (item.isDisabled) {\n item.cls += ' clock-nums-disabled ';\n }\n nums.push(item);\n });\n optNum.value = nums;\n};\n\nconst _setClock = (type: string) => {\n optBase.activePointer = type;\n if (type === 'hour') {\n optBase.activeAm = _getShowAm(optSelectValue.hour);\n }\n _setClockNum(type);\n};\n\nconst _isCheckDiff = (date: any) => {\n let diff = null;\n if (!CommonBase.isUndefined(date) && !CommonBase.isUndefined(_pageData.selectDayDate)) {\n const selectedDate = _pageData.selectDayDate.clone().format('YYYY-MM-DD 00:00:00');\n const tempDate = date.clone().format('YYYY-MM-DD 00:00:00');\n diff = _selfTop.Dayjs(selectedDate).diff(_selfTop.Dayjs(tempDate));\n }\n return diff;\n};\n\nconst _initOpenPointerRotate = (isRecordOrig = true) => {\n optRotate.hour = -90;\n optRotate.hourMinute = 0;\n optRotate.minute = -90;\n optRotate.minuteSecond = 0;\n optRotate.second = -90;\n _pageData.lastValue = { hour: '00', minute: '00', second: '00' };\n _setPointerRotate();\n nextTick(() => {\n const hh = optSelectValue.hour;\n const mm = optSelectValue.minute;\n const ss = optSelectValue.second;\n _pageData.lastValue = { hour: hh, minute: mm, second: ss };\n // 仅指针/初始化打开面板时记录恢复基准;加减按钮触发(关闭态先改值)不覆盖 origValue,避免取消失效\n if (isRecordOrig) {\n _pageData.origValue = { hour: hh, minute: mm, second: ss };\n }\n });\n};\n\nconst _setClockValue = (type: string, value: number) => {\n _pageData.lastValue.hour = optSelectValue.hour;\n _pageData.lastValue.minute = optSelectValue.minute;\n _pageData.lastValue.second = optSelectValue.second;\n optSelectValue[type] = CommonBase.getFillZero(value);\n _setPointerRotate();\n if (!props.isShowSubmit) {\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n }\n};\n\nconst _initValue = (value?: string) => {\n let HH = 0;\n let mm = 0;\n let ss = 0;\n if (!CommonBase.isEmpty(value)) {\n const day = (\n CommonBase.isEmpty(_pageData.selectDayDate) ? _selfTop.getNow() : _pageData.selectDayDate\n ).format('YYYY-MM-DD');\n const tempDate = _selfTop.getMomentDate(`${day} ${value}`);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 时/分/秒脏值\n if (tempDate && tempDate.isValid()) {\n HH = tempDate.hour();\n mm = tempDate.minute();\n ss = tempDate.second();\n }\n }\n return { HH, mm, ss };\n};\n\nconst _initOption = () => {\n let isShowMinute = true;\n let isShowSecond = true;\n\n const isEmptySelectDate = CommonBase.isEmpty(_pageData.selectDayDate);\n const tempValueInfo = _initValue(props.selectValue);\n const HH = tempValueInfo.HH;\n const mm = tempValueInfo.mm;\n const ss = tempValueInfo.ss;\n\n switch (_selfTopBase.layerType) {\n case 'hours':\n isShowMinute = false;\n isShowSecond = false;\n break;\n case 'minutes':\n isShowSecond = false;\n break;\n case 'seconds':\n break;\n default:\n break;\n }\n _pageData.isCheckMin = !CommonBase.isUndefined(_pageData.minDate);\n if (_pageData.isCheckMin) {\n _pageData.checkMinDiff = _selfTop.checkIsTimes() ? 0 : _isCheckDiff(_pageData.minDate);\n _pageData.min = {\n hour: _pageData.minDate.hour(),\n minute: _pageData.minDate.minute(),\n second: _pageData.minDate.second(),\n };\n }\n _pageData.isCheckMax = !CommonBase.isUndefined(_pageData.maxDate);\n if (_pageData.isCheckMax) {\n _pageData.checkMaxDiff = _selfTop.checkIsTimes() ? 0 : _isCheckDiff(_pageData.maxDate);\n _pageData.max = {\n hour: _pageData.maxDate.hour(),\n minute: _pageData.maxDate.minute(),\n second: _pageData.maxDate.second(),\n };\n }\n\n const hhStr = CommonBase.getFillZero(HH);\n let mmStr = CommonBase.getFillZero(mm);\n let ssStr = CommonBase.getFillZero(ss);\n\n // isShowHour 恒为 true(小时始终显示),直接展开兜底逻辑\n if (!isShowMinute) {\n mmStr = '00';\n }\n if (!isShowSecond) {\n ssStr = '00';\n }\n _pageData.origValue = { hour: hhStr, minute: mmStr, second: ssStr };\n\n optOperate.hour = true;\n optOperate.minute = isShowMinute;\n optOperate.second = isShowSecond;\n\n optSelectValue.hour = hhStr;\n optSelectValue.minute = mmStr;\n optSelectValue.second = ssStr;\n\n if (!_selfTop.checkIsTimes()) {\n optOperate.hourDisabled = isEmptySelectDate;\n optOperate.minuteDisabled = isEmptySelectDate;\n optOperate.secondDisabled = isEmptySelectDate;\n }\n if (_selfTopBase.layerType === 'hours') {\n optOperate.minute = true;\n optOperate.minuteDisabled = true;\n optOperate.minuteShowAddSub = false;\n }\n // 重置指针基准(00 点 + -90 度)后同步显示:skip 按 00→新值计算绝对角度\n // (watch 路径先设 lastValue 为终值再 _setPointerRotate 会 skip=0 指针不动)\n _resetPointerBase();\n _syncClockDisplay();\n};\n\n// 重置指针基准:lastValue 置 00:00:00 + 角度重置 -90,使 _setPointerRotate 按 00→当前值算绝对角度\nconst _resetPointerBase = () => {\n _pageData.lastValue = { hour: '00', minute: '00', second: '00' };\n optRotate.hour = -90;\n optRotate.hourMinute = 0;\n optRotate.minute = -90;\n optRotate.minuteSecond = 0;\n optRotate.second = -90;\n};\n\n// 外部更新 selectValue/selectDay/minValue/maxValue 后同步表盘显示(指针角度/AM-PM/数字集合)\nconst _syncClockDisplay = () => {\n _setPointerRotate();\n optBase.activeAm = _getShowAm(optSelectValue.hour);\n _setClockNum(optBase.activePointer);\n};\n\nconst _initMain = () => {\n optBase.isOpen = props.isShowPointer;\n _updatePageDataByType(\n 'selectDayDate',\n _selfTop.checkIsTimes() ? _TIME_REFERENCE_DATE : props.selectDay,\n );\n _updatePageDataByType('minDate', _selfTop.getValueEffective(props.minValue));\n _updatePageDataByType('maxDate', _selfTop.getValueEffective(props.maxValue));\n _initOption();\n _setClock('hour');\n _initOpenPointerRotate();\n nextTick(() => {\n emit('onInitComplete', 'times');\n });\n};\n\nconst _onClockSetBtnDownBefore = (type: string) => {\n let isCheck = false;\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n if (optBase.isOpen) {\n isCheck = true;\n } else {\n // 加减触发打开:不覆盖 origValue(先改值后注册回调,覆盖会导致取消失效)\n _initOpenPointerRotate(false);\n optBase.isOpen = true;\n _setClock(type);\n }\n }\n return isCheck;\n};\n\nconst _onAddSubNum = (type: string, operate: string) => {\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n if (optBase.isOpen) {\n let isRun = true;\n let min = 0;\n let max = type === 'hour' ? 23 : 59;\n if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff === 0) {\n if (_compareNumPre(type, 'min')) {\n min = _pageData.min[type];\n }\n } else if (_pageData.checkMinDiff < 0) {\n isRun = false;\n }\n }\n if (_pageData.isCheckMax) {\n if (_pageData.checkMaxDiff === 0) {\n if (_compareNumPre(type, 'max')) {\n max = _pageData.max[type];\n }\n } else if (_pageData.checkMaxDiff > 0) {\n isRun = false;\n }\n }\n if (isRun) {\n const value = parseInt(optSelectValue[type], 10);\n let newValue = 0;\n if (_isCrossMidnight() && type === 'hour') {\n // 跨午夜:23 add → 0 循环、0 sub → 23 循环,其余越界值由 _checkNumDisabled 拦截\n newValue =\n operate === 'add' ? (value >= 23 ? 0 : value + 1) : value <= 0 ? 23 : value - 1;\n } else if (operate === 'add') {\n newValue = value < min ? min : value >= max ? min : value + 1;\n } else {\n newValue = value > max ? max : value <= min ? max : value - 1;\n }\n if (!_checkNumDisabled(type, newValue)) {\n _setClockValue(type, newValue);\n _setClock(type);\n }\n }\n }\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.selectDay,\n (newValue, _oldValue) => {\n _updatePageDataByType('selectDayDate', newValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.minValue,\n (newValue, _oldValue) => {\n const tempValue = _selfTop.getValueEffective(newValue);\n _updatePageDataByType('minDate', tempValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.maxValue,\n (newValue, _oldValue) => {\n const tempValue = _selfTop.getValueEffective(newValue);\n _updatePageDataByType('maxDate', tempValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.selectValue,\n (newValue, _oldValue) => {\n const tempValueInfo = _initValue(newValue);\n const hhStr = CommonBase.getFillZero(tempValueInfo.HH);\n const mmStr = CommonBase.getFillZero(tempValueInfo.mm);\n const ssStr = CommonBase.getFillZero(tempValueInfo.ss);\n if (\n optSelectValue.hour !== hhStr ||\n optSelectValue.minute !== mmStr ||\n optSelectValue.second !== ssStr\n ) {\n optSelectValue.hour = hhStr;\n optSelectValue.minute = mmStr;\n optSelectValue.second = ssStr;\n // 同步取消恢复基准,避免外部 setValue 后取消回滚旧值\n _pageData.origValue = { hour: hhStr, minute: mmStr, second: ssStr };\n // 重置指针基准后同步显示:skip 按 00→新值计算绝对角度,避免指针停在旧位置\n _resetPointerBase();\n // 同步表盘指针/AM-PM/数字集合,避免面板打开时编程式 setValue 后显示与值脱节\n _syncClockDisplay();\n }\n },\n);\n\nconst onClickPointer = (type: string) => {\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n _setClock(type);\n if (!optBase.isOpen) {\n _initOpenPointerRotate();\n optBase.isOpen = true;\n }\n }\n};\n\nconst onClickNum = (numInfo: ClockNum) => {\n if (!numInfo.isDisabled) {\n const type = optBase.activePointer;\n const lastValue = parseInt(optSelectValue[type], 10);\n const newValue = numInfo.num;\n if (newValue !== lastValue) {\n _setClockValue(type, newValue);\n }\n }\n};\n\nconst onClickAm = (type: 'am' | 'pm') => {\n optBase.activeAm = type;\n optBase.activePointer = 'hour';\n // AM/PM 切换同步换算小时值(03↔15),避免提交值与面板展示语义矛盾\n const hourNum = parseInt(optSelectValue.hour, 10);\n if (type === 'pm' && hourNum < 12) {\n optSelectValue.hour = CommonBase.getFillZero(hourNum + 12);\n } else if (type === 'am' && hourNum >= 12) {\n optSelectValue.hour = CommonBase.getFillZero(hourNum - 12);\n }\n _setPointerRotate();\n _setClockNum('hour');\n};\n\nconst onClockSetBtnDownBeforeHour = () => {\n return _onClockSetBtnDownBefore('hour');\n};\n\n// 返回真实边界状态,驱动 InputNumberStepper 的 add/sub 按钮置灰(此前恒 false,边界点击被静默拦截)\nconst _getBtnDisabled = (type: string) => {\n let subtractDisabled = false;\n let addDisabled = false;\n const isCross = _isCrossMidnight();\n if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff < 0) {\n // min 在未来(整日禁用):加减均禁用,避免静默拦截无反馈\n subtractDisabled = true;\n addDisabled = true;\n } else if (_pageData.checkMinDiff === 0) {\n const value = parseInt(optSelectValue[type], 10);\n if (_compareNumPre(type, 'min')) {\n // 跨午夜时 0 减 1 循环到 23 合法,仅等于边界值才禁用减\n subtractDisabled = isCross ? value === _pageData.min[type] : value <= _pageData.min[type];\n }\n }\n }\n if (_pageData.isCheckMax) {\n if (_pageData.checkMaxDiff > 0) {\n // max 在过去(整日禁用):加减均禁用\n subtractDisabled = true;\n addDisabled = true;\n } else if (_pageData.checkMaxDiff === 0) {\n const value = parseInt(optSelectValue[type], 10);\n if (_compareNumPre(type, 'max')) {\n // 跨午夜时 23 加 1 循环到 0 合法,仅等于边界值才禁用加\n addDisabled = isCross ? value === _pageData.max[type] : value >= _pageData.max[type];\n }\n }\n }\n return { subtractDisabled, addDisabled };\n};\n\nconst onAddSubNumHour = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('hour', valueInfo.type);\n }\n return { value: optSelectValue.hour, ..._getBtnDisabled('hour') };\n};\n\nconst onClockSetBtnDownBeforeMinute = () => {\n return _onClockSetBtnDownBefore('minute');\n};\n\nconst onAddSubNumMinute = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('minute', valueInfo.type);\n }\n return { value: optSelectValue.minute, ..._getBtnDisabled('minute') };\n};\n\nconst onClockSetBtnDownBeforeSecond = () => {\n return _onClockSetBtnDownBefore('second');\n};\n\nconst onAddSubNumSecond = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('second', valueInfo.type);\n }\n return { value: optSelectValue.second, ..._getBtnDisabled('second') };\n};\n\nconst onClickOverlay = () => {\n // isOpen=false(提交后关闭)时 overlay 仍覆盖表盘,点击不应重复触发提交\n if (props.isClickOverlay && optBase.isOpen) {\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n }\n};\n\nconst onSubmit = () => {\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n};\n\nconst onCancel = () => {\n if (\n optSelectValue.hour !== _pageData.origValue.hour ||\n optSelectValue.minute !== _pageData.origValue.minute ||\n optSelectValue.second !== _pageData.origValue.second\n ) {\n _pageData.lastValue.hour = optSelectValue.hour;\n _pageData.lastValue.minute = optSelectValue.minute;\n _pageData.lastValue.second = optSelectValue.second;\n optSelectValue.hour = _pageData.origValue.hour;\n optSelectValue.minute = _pageData.origValue.minute;\n optSelectValue.second = _pageData.origValue.second;\n // 同步指针/AM-PM/数字集合,避免恢复值与表盘展示脱节(切过 PM 后取消恢复 am 值)\n _syncClockDisplay();\n }\n // times 模式下仅恢复原值不提交(原值已提交过),非 times 模式关闭面板\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n};\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-calendars-days\n v-if=\"optBase.currentView === 'days'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onChangeType=\"onChangeViewType\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-days>\n <cl-calendars-months\n v-else-if=\"optBase.currentView === 'months'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onChangeType=\"onChangeViewType\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-months>\n <cl-calendars-years\n v-else-if=\"optBase.currentView === 'years'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-years>\n <template v-else></template>\n <div\n v-if=\"optClock.isShow || optClock.isViewDay\"\n :class=\"{ 'datetime-days-times': optClock.isViewDay }\"\n >\n <cl-calendars-clocks\n :selectDay=\"optBase.selectClockDay\"\n :selectValue=\"optBase.selectClockTime\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n :isShowPointer=\"optClock.isShowClockPointer\"\n :isShowSubmit=\"optClock.isShowClockSubmit\"\n :isShowCancel=\"optClock.isShowClockCancel\"\n :isClickOverlay=\"optClock.isClockClickOverlay\"\n @onSubmit=\"onSelectTime\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-clocks>\n </div>\n\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, inject, onMounted, nextTick, watch, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClCalendarsDays from './CalendarsDays.vue';\nimport ClCalendarsMonths from './CalendarsMonths.vue';\nimport ClCalendarsYears from './CalendarsYears.vue';\nimport ClCalendarsClocks from './CalendarsClock.vue';\n\ndefineOptions({ name: 'ClCalendarsBase' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onSelectDate: (_value: string) => true, // desc: 选中日期时触发\n onChangeViewValue: (_value: string) => true, // desc: 视图日期变更时触发\n onHoverDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 悬停日期时触发(payload 为 Dayjs 实例,由 _getSelectDateByElement 产出)\n onChangeViewType: (_value: string) => true, // desc: 视图类型变更时触发\n onSelectTime: (_value: string) => true, // desc: 选中时间时触发\n onInitComplete: (_value?: string) => true, // desc: 初始化完成时触发\n});\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsBase: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n// 可选链防御:inject 缺失(脱离容器渲染)时 warn 已提示,避免 _selfTop.elId 直接 TypeError\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsBase-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsbase': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optBase = reactive({\n currentView: '',\n viewValue: '',\n selectValue: '',\n selectClockDay: '',\n selectClockTime: '',\n});\nconst optClock = reactive({\n isShow: false,\n isViewDay: false,\n isShowClockPointer: false,\n isShowClockSubmit: false,\n isShowClockCancel: false,\n isClockClickOverlay: false,\n});\n\nconst _pageData: Record<string, any> = {\n viewDate: null,\n selectDate: null,\n focusDate: null,\n minDate: null,\n maxDate: null,\n};\n\nconst _updatePageDataByType = (type: string, newValue: any) => {\n // 类型守卫:Symbol/带恶意 toString 的对象会在 dayjs 内部 new Date() 抛 TypeError\n // (Index._checkMinMax 消费同一 props 前经 _getValueEffective 净化,此处对齐)\n _pageData[type] = CommonBase.isString(newValue) ? _selfTop.getMomentDate(newValue) : null;\n};\n\n// 通用状态更新器:按 key 合并 state 到 optBase 或 _pageData\n// 注意:调用方传入 viewValue 时需同时传入 currentView,否则 onChangeViewValue 不会触发\ninterface UpdateState {\n currentView?: string;\n viewValue?: string;\n selectValue?: string;\n selectClockDay?: string;\n selectClockTime?: string;\n viewDate?: ReturnType<typeof Dayjs>;\n selectDate?: ReturnType<typeof Dayjs>;\n}\n\nconst _updateState = (state: UpdateState) => {\n const tempKey = Object.keys(state);\n if (CommonBase.isExistValue(tempKey, 'viewValue')) {\n if (_selfTopBase.layerView === state.currentView) {\n emit('onChangeViewValue', state.viewValue as string);\n }\n }\n tempKey.forEach((k: string) => {\n const key = k as keyof UpdateState;\n const value = state[key];\n if (CommonBase.isExistJsonKey(optBase, key) && (optBase as any)[key] !== value) {\n (optBase as any)[key] = value;\n }\n if (CommonBase.isExistJsonKey(_pageData, key)) {\n _pageData[key] = value;\n }\n });\n};\n\nconst _checkDataMinMax = (value: any, diffType?: string) => {\n let isIn = false;\n // 空值/无效输入直接放行:dayjs(undefined)=当前时间会误判,dayjs('')=Invalid Date 恒 false\n if (CommonBase.isEmpty(value) || CommonBase.isNaN(value)) {\n return isIn;\n }\n if (!CommonBase.isEmpty(_pageData.minDate)) {\n isIn = _selfTop.Dayjs(value).isBefore(_pageData.minDate, diffType);\n }\n if (!isIn && !CommonBase.isEmpty(_pageData.maxDate)) {\n isIn = _selfTop.Dayjs(value).isAfter(_pageData.maxDate, diffType);\n }\n return isIn;\n};\n\nconst _getViewMin = (y: number, m?: number) => {\n let newMonth = 0;\n let newDay = 1;\n if (!CommonBase.isEmpty(_pageData.minDate)) {\n const isMinYear = y === _pageData.minDate.year();\n let isMinMonth = true;\n if (CommonBase.isUndefined(m)) {\n newMonth = isMinYear ? _pageData.minDate.month() : 0;\n } else {\n isMinMonth = m === _pageData.minDate.month();\n newMonth = m as number;\n }\n newDay = isMinYear && isMinMonth ? _pageData.minDate.date() : 1;\n } else if (!CommonBase.isUndefined(m)) {\n newMonth = m as number;\n }\n // getMomentDate 可能返回 null(边界组合无效),兜底今年初保证接口非空契约\n return (\n _selfTop.getMomentDate({ year: y, month: newMonth, day: newDay }) ??\n _selfTop.getNow().startOf('year')\n );\n};\n\nconst _getNextView = (type: string) => {\n let nextView = '';\n switch (type) {\n case 'months':\n nextView = 'days';\n break;\n case 'years':\n nextView = 'months';\n break;\n default:\n // 末端视图(days)与未知类型:回到 days 视图\n nextView = 'days';\n break;\n }\n return nextView;\n};\n\nconst _getDateMergeHSM = (selectDate?: any) => {\n const newSelectDate = selectDate || _pageData.selectDate || _pageData.viewDate;\n const tempTime =\n newSelectDate.format('YYYY-MM-DD') +\n ' ' +\n (CommonBase.isEmpty(optBase.selectClockTime) ? '00:00:00' : optBase.selectClockTime);\n return _selfTop.Dayjs(tempTime);\n};\n\nconst _getSelectDateByElement = (layerView: string, info: any) => {\n const viewDate = _pageData.viewDate.clone();\n const value = parseInt(info.value, 10);\n if (CommonBase.isNaN(value)) {\n // info.value 非数字时兜底返回当前视图日期,避免 Invalid Date 字符串经 emit 传播\n return _getDateMergeHSM(viewDate);\n }\n let selectDate;\n switch (layerView) {\n case 'days': {\n let modifier = 0;\n if (info.isNew) {\n modifier = 1;\n } else if (info.isOld) {\n modifier = -1;\n }\n selectDate = viewDate.month(viewDate.month() + modifier).date(value);\n break;\n }\n case 'months': {\n const currentDate = _pageData.selectDate || viewDate;\n const targetMonth = viewDate.month(value);\n // 钳制日号:已选日号超过目标月天数时取月末,避免 dayjs .date(31) 溢出到下月\n selectDate = targetMonth.date(Math.min(currentDate.date(), targetMonth.daysInMonth()));\n break;\n }\n case 'years':\n selectDate = viewDate.month(0).date(1).year(value);\n break;\n default:\n selectDate = viewDate;\n break;\n }\n return _getDateMergeHSM(selectDate);\n};\n\nconst _initViewData = () => {\n optBase.viewValue = _pageData.viewDate.format(_selfTopBase.formatIn);\n _pageData.focusDate = _pageData.viewDate.clone();\n};\n\nconst _initSelectDate = (value: any) => {\n _updatePageDataByType('selectDate', value === '-1' ? '' : value);\n const selectDay = _pageData.selectDate ? _pageData.selectDate.format('YYYY-MM-DD') : '';\n optBase.selectValue = selectDay;\n optBase.selectClockDay = selectDay;\n optBase.selectClockTime = _pageData.selectDate ? _pageData.selectDate.format('HH:mm:ss') : '';\n};\n\nconst _initClock = () => {\n let isShow = false;\n let isViewDay = false;\n let isShowClockPointer = false;\n let isShowClockSubmit = false;\n let isShowClockCancel = false;\n let isClockClickOverlay = false;\n\n if (optBase.currentView === 'times') {\n isShow = true;\n isShowClockPointer = true;\n isClockClickOverlay = false;\n isShowClockSubmit = _selfTopBase.isDefault && _selfTopBase.isShowPopup;\n isShowClockCancel = _selfTopBase.isDefault && _selfTopBase.isShowPopup;\n if (_selfTopBase.layerType === 'hours') {\n isShowClockCancel = false;\n isShowClockSubmit = false;\n }\n } else {\n if (optBase.currentView === 'days') {\n isViewDay = _selfTopBase.timeType === 'datetime';\n if (isViewDay) {\n isShowClockCancel = true;\n isShowClockSubmit = true;\n isShowClockPointer = false;\n isClockClickOverlay = true;\n }\n }\n }\n optClock.isShow = isShow;\n optClock.isViewDay = isViewDay;\n optClock.isShowClockPointer = isShowClockPointer;\n optClock.isShowClockSubmit = isShowClockSubmit;\n optClock.isShowClockCancel = isShowClockCancel;\n optClock.isClockClickOverlay = isClockClickOverlay;\n};\n\nconst _initMain = () => {\n optBase.currentView = _selfTopBase.layerView;\n\n _pageData.viewDate = _selfTop.getViewDate(props.viewValue);\n _initViewData();\n\n _initSelectDate(props.selectValue);\n _updatePageDataByType('minDate', props.minValue);\n _updatePageDataByType('maxDate', props.maxValue);\n _initClock();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, _oldValue) => {\n _pageData.viewDate = _selfTop.getViewDate(newValue);\n _initViewData();\n },\n);\n\nwatch(\n () => props.selectValue,\n (newValue, _oldValue) => {\n const isRangeRun = _selfTopBase.isRange && newValue === '-1';\n let value = newValue;\n const lastClockTime = optBase.selectClockTime;\n if (isRangeRun) {\n value = '';\n }\n _initSelectDate(value);\n\n if (isRangeRun) {\n optBase.selectClockTime = lastClockTime;\n }\n },\n);\n\nwatch(\n () => props.minValue,\n (newValue, _oldValue) => {\n _updatePageDataByType('minDate', newValue);\n },\n);\n\nwatch(\n () => props.maxValue,\n (newValue, _oldValue) => {\n _updatePageDataByType('maxDate', newValue);\n },\n);\n\nconst onChangeViewData = (viewDate: ReturnType<typeof Dayjs>) => {\n _updateState({\n currentView: optBase.currentView,\n viewDate: viewDate.clone(),\n viewValue: viewDate.format(_selfTopBase.formatIn),\n });\n};\n\nconst onChangeViewType = (view: string) => {\n optBase.currentView = view;\n _pageData.focusDate = _pageData.viewDate.clone();\n _initClock();\n // 手动切换视图也触发变更事件(此前仅选中回切时 emit,上层 DateTimeDefault 的提交按钮显示会失步)\n emit('onChangeViewType', view);\n};\n\nconst onSelectDate = (layerView: string, info: any) => {\n const selectDate = _getSelectDateByElement(layerView, info);\n const selectValue = selectDate.format('YYYY-MM-DD');\n const updState: any = {};\n\n if (_selfTopBase.layerView === layerView) {\n updState.selectDate = selectDate;\n updState.selectValue = selectValue;\n if (!_selfTopBase.isRange) {\n updState.selectClockDay = selectValue;\n }\n _updateState(updState);\n emit('onSelectDate', selectValue);\n } else {\n const nextView = _getNextView(layerView);\n if (nextView === layerView) {\n // 末端视图(days)在非 days 配置下点击:按完成选中处理,避免视图切换死循环\n updState.selectDate = selectDate;\n updState.selectValue = selectValue;\n if (!_selfTopBase.isRange) {\n updState.selectClockDay = selectValue;\n }\n _updateState(updState);\n emit('onSelectDate', selectValue);\n return;\n }\n updState.viewDate = selectDate.clone().startOf('month');\n // 与 onChangeViewData 路径统一用 formatIn 格式化(datetime 模式含时间,避免 payload 格式漂移)\n updState.viewValue = updState.viewDate.format(_selfTopBase.formatIn);\n\n updState.currentView = nextView;\n _updateState(updState);\n _initClock();\n emit('onChangeViewType', updState.currentView);\n }\n};\n\nconst onHoverDate = (layerView: string, info: any) => {\n const hoverDate = _getSelectDateByElement(layerView, info);\n emit('onHoverDate', hoverDate);\n};\n\nconst onSelectTime = (value: string) => {\n _updateState({ selectClockTime: value });\n emit('onSelectTime', value);\n};\n\n// 视图往返切换会重建子面板:同一 type 的 onInitComplete 仅转发首次(上层一次性初始化语义)\nconst _emittedViewTypes = new Set<string>();\nconst onInitComplete = (type: string) => {\n if (_selfTopBase.layerView === type && !_emittedViewTypes.has(type)) {\n _emittedViewTypes.add(type);\n emit('onInitComplete', type);\n }\n};\n\nprovide('$DateTimeBase', {\n checkDataMinMax: _checkDataMinMax,\n getViewMin: _getViewMin,\n getFocusDate: () => {\n return _pageData.focusDate && _pageData.focusDate.clone();\n },\n});\n</script>\n","<template>\n <cl-calendars-base\n :class=\"clsParent\"\n :selectValue=\"value\"\n :viewValue=\"value\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onSelectDate=\"onChangeDate\"\n @onSelectTime=\"onChangeTime\"\n @onChangeViewType=\"onChangeViewType\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-base>\n <div\n v-if=\"optBase.isShowSubmit\"\n role=\"button\"\n :tabindex=\"optBase.isSubmitDisplay ? -1 : 0\"\n :aria-disabled=\"optBase.isSubmitDisplay\"\n :class=\"{ 'datetime-days-submit': true, 'days-submit-disabled': optBase.isSubmitDisplay }\"\n @click=\"onSubmit\"\n @keydown.enter.prevent=\"onSubmit\"\n @keydown.space.prevent=\"onSubmit\"\n >\n <span>{{ optPageLanguage.common.submit }}</span>\n </div>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, reactive, computed } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClCalendarsBase from './CalendarsBase.vue';\nimport useLanguage from '../../Use/language';\n\ndefineOptions({ name: 'ClDatetimeDefault' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n value: String, // desc: 绑定日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n // payload 为选中值解析后的 Dayjs 实例(_emitSelectValue 已判空,永不 emit null)\n onSelectValue: (_value: NonNullable<ReturnType<DateTimeTop['getMomentDate']>>) => true, // desc: 选中值变更时触发\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 提交(提交按钮获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClDatetimeDefault: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst optBase = reactive({\n isShowSubmit: false,\n isSubmitDisplay: false,\n});\nconst optSelectValue = reactive({\n day: '',\n time: '',\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetimedefault': true,\n 'datetime-default': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\n// _changeCheckValue 在函数末尾统一覆盖 isSubmitDisplay,确保校验结果优先级最高\nconst _changeCheckValue = () => {\n const value = _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time);\n const checkInfo = _selfTop.checkValue(value);\n optBase.isSubmitDisplay = CommonBase.isEmpty(optSelectValue.day) || checkInfo.errMsg.length > 0;\n};\n\nconst _initShowSubmit = (viewType: string) => {\n // 不依赖 isShowPopup:内嵌(isDropdown=false)模式下 datetime 也显示提交按钮,\n // 否则内嵌 datetime 选中值无提交确认入口(onChangeTime 在 datetime 模式下已即时回传)\n let isShowSubmit = false;\n if (_selfTopBase.timeType === 'datetime') {\n isShowSubmit = viewType === 'days';\n }\n optBase.isShowSubmit = isShowSubmit;\n};\n\nconst _initSelectValue = (value?: string) => {\n let date = '';\n let time = '';\n let isSubmitDisplay = true;\n if (CommonBase.isNonEmptyString(value)) {\n const tempDate = _selfTop.getMomentDate(value);\n if (tempDate) {\n date = tempDate.format('YYYY-MM-DD');\n time = tempDate.format('HH:mm:ss');\n isSubmitDisplay = false;\n }\n }\n optSelectValue.day = date;\n optSelectValue.time = time;\n optBase.isSubmitDisplay = isSubmitDisplay;\n _changeCheckValue();\n};\n\nconst _initMain = () => {\n _initShowSubmit(_selfTopBase.layerView);\n _initSelectValue(props.value);\n};\n\n// 统一选中值回传:getMomentDate 可能返回 null(值无效),判空后 emit 避免调用方收到 null 崩溃\nconst _emitSelectValue = () => {\n const value = _selfTop.getMomentDate(\n _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time),\n );\n if (value) {\n emit('onSelectValue', value);\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n _initSelectValue(newValue);\n }\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 变化后重算校验,避免提交按钮禁用态过期(已选值可能因范围收窄越界)\n _changeCheckValue();\n});\n\nconst onChangeDate = (date: string) => {\n optSelectValue.day = date;\n _changeCheckValue();\n if (_selfTopBase.timeType === 'date') {\n _emitSelectValue();\n }\n};\n\nconst onChangeTime = (time: string) => {\n optSelectValue.time = time;\n _changeCheckValue();\n if (_selfTopBase.timeType === 'time') {\n _emitSelectValue();\n } else if (_selfTopBase.timeType === 'datetime' && !optBase.isSubmitDisplay) {\n // datetime 模式:时钟确认按钮点击即回传(需日期已选且校验通过),此前该路径静默无效\n _emitSelectValue();\n }\n};\n\nconst onChangeViewType = (type: string) => {\n _initShowSubmit(type);\n};\n\nconst onSubmit = () => {\n if (optBase.isShowSubmit && !optBase.isSubmitDisplay) {\n _emitSelectValue();\n }\n};\n\nconst onInitComplete = () => {\n emit('onInitComplete');\n};\n\nconst getValue = () => {\n const value = _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time);\n return _selfTop.getMomentDate(value);\n};\n\n// 导出类型定义\nexport interface ClDatetimeDefaultExpose {\n // 返回选中值解析后的 Dayjs 实例;未选择/值无效时返回 null\n getValue: () => ReturnType<DateTimeTop['getMomentDate']>;\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n @mouseleave=\"onMouseLeave\"\n >\n <div class=\"calendar-range calendar-left\">\n <div class=\"calendar-text\">\n <div class=\"time-input-base\">\n <input\n class=\"form-control time-input\"\n type=\"text\"\n :readonly=\"true\"\n :value=\"optLeft.text\"\n :name=\"optLeft.name\"\n />\n <cl-icon-font\n name=\"calendar\"\n className=\"time-icon\"\n ></cl-icon-font>\n </div>\n </div>\n <div class=\"calendar-panel\">\n <cl-calendars-base\n :selectValue=\"optBase.selectCount === 2 ? optStart.value : '-1'\"\n :startValue=\"optBase.previewStart || optStart.value\"\n :endValue=\"optBase.previewEnd || optEnd.value\"\n :viewValue=\"optLeft.view\"\n :hoverValue=\"optBase.hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeViewValue=\"onLeftChangeView\"\n @onSelectDate=\"onLeftSelectDay\"\n @onSelectTime=\"onLeftSelectTime\"\n @onHoverDate=\"onLeftHoverDate\"\n ></cl-calendars-base>\n </div>\n </div>\n <div class=\"calendar-range calendar-right\">\n <div class=\"calendar-text\">\n <div class=\"time-input-base\">\n <input\n class=\"form-control time-input\"\n type=\"text\"\n :readonly=\"true\"\n :value=\"optRight.text\"\n :name=\"optRight.name\"\n />\n <cl-icon-font\n name=\"calendar\"\n className=\"time-icon\"\n ></cl-icon-font>\n </div>\n </div>\n <div class=\"calendar-panel\">\n <cl-calendars-base\n :selectValue=\"optBase.selectCount === 2 ? optEnd.value : '-1'\"\n :startValue=\"optBase.previewStart || optStart.value\"\n :endValue=\"optBase.previewEnd || optEnd.value\"\n :viewValue=\"optRight.view\"\n :hoverValue=\"optBase.hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeViewValue=\"onRightChangeView\"\n @onSelectDate=\"onRightSelectDay\"\n @onSelectTime=\"onRightSelectTime\"\n @onHoverDate=\"onRightHoverDate\"\n ></cl-calendars-base>\n </div>\n </div>\n <div class=\"calendar-range calendar-quick\">\n <ul>\n <li\n v-for=\"(rInfo, rIdx) in optQuick\"\n :key=\"`${_keyIndex}-${rInfo.id}-${rIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :class=\"{\n active: rInfo.id === optBase.activeQuick,\n 'calendar-quick-special': rInfo.id === '-1',\n }\"\n @click=\"onChangeQuick(rInfo)\"\n @keydown.enter.prevent=\"onChangeQuick(rInfo)\"\n @keydown.space.prevent=\"onChangeQuick(rInfo)\"\n >\n {{ rInfo.text }}\n </li>\n </ul>\n <div\n v-if=\"optBase.isShowQuickBtn\"\n class=\"panel-quick-btn\"\n >\n <cl-button\n className=\"quick-submit\"\n :label=\"optPageLanguage.common.submit\"\n size=\"small\"\n :disabled=\"optBase.selectCount !== 2 || !optBase.isCheck\"\n @onClick=\"onQuickSubmit\"\n ></cl-button>\n <cl-button\n className=\"quick-cancel\"\n :label=\"optPageLanguage.common.cancel\"\n size=\"small\"\n color=\"grayLight\"\n @onClick=\"onQuickCancel\"\n ></cl-button>\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, reactive, ref, watch, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonDay from '../../Common/day';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, QuickItem } from './types';\nimport ClCalendarsBase from './CalendarsBase.vue';\nimport ClButton from '../../Element/Button/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ndefineOptions({ name: 'ClDateTimeRange' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n startValue: String, // desc: 范围开始日期值\n endValue: String, // desc: 范围结束日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 快捷选项列表\n },\n});\n\nconst emit = defineEmits({\n onSubmit: (_value: { start: string; end: string }) => true, // desc: 确认范围选择时触发\n onCancel: () => true, // desc: 取消选择时触发\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中快捷项(快捷列表获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `dateTimeRange-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClDateTimeRange: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-dateTimeRange-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetimerange': true,\n 'panel-range-calendar': true,\n // datetime-range 是共享 index.css 布局体系(.datetime-range .calendar-range 等),必须保留\n 'datetime-range': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optBase = reactive({\n operateViewDataType: '',\n selectCount: 0,\n hoverValue: '',\n activeQuick: '',\n isCheck: true,\n // 内嵌 datetime 模式也显示提交按钮,避免「选完日期后时间无法选择、值无法回传」的死锁\n isShowQuickBtn: _selfTopBase.isShowPopup || _selfTopBase.timeType === 'datetime',\n previewStart: '',\n previewEnd: '',\n});\nconst optLeft = reactive({\n view: '',\n text: '',\n name: `input_${CommonBase.getRandom(8)}`,\n});\nconst optRight = reactive({\n view: '',\n text: '',\n name: `input_${CommonBase.getRandom(8)}`,\n});\nconst optStart = reactive({\n day: '',\n time: '',\n value: '',\n});\nconst optEnd = reactive({\n day: '',\n time: '',\n value: '',\n});\nconst optQuick = ref<QuickItem[]>([]);\n\nconst _getOtherViewValue = (value: string, type: string) => {\n const tempDate = _selfTop.getViewDate(value);\n const diff = _selfTopBase.layerView === 'years' ? 10 : 1;\n return tempDate[type](diff, optBase.operateViewDataType).format(_selfTopBase.formatIn);\n};\n\nconst _showDateFormatOut = (dateValue: string | ReturnType<typeof Dayjs>, formatType: string) => {\n if (CommonBase.isEmpty(dateValue)) {\n return '';\n }\n const newFormat = formatType === 'right' ? _selfTopBase.formatOutEnd : _selfTopBase.formatOut;\n if (CommonBase.isString(dateValue)) {\n const momentDate = _selfTop.getMomentDate(dateValue);\n return momentDate ? momentDate.format(newFormat) : '';\n }\n return dateValue.format(newFormat);\n};\n\nconst _setStartSelectValue = () => {\n const value = _selfTop.getMergeDayTime(optStart.day, optStart.time);\n optStart.value = value;\n optLeft.text = _showDateFormatOut(value, 'left');\n};\n\nconst _setEndSelectValue = () => {\n const value = _selfTop.getMergeDayTime(optEnd.day, optEnd.time);\n optEnd.value = value;\n optRight.text = _showDateFormatOut(value, 'right');\n};\n\nconst _setQuickActive = () => {\n if (optBase.selectCount === 2) {\n let active = '-1';\n if (\n !CommonBase.isEmpty(optStart.day) &&\n !CommonBase.isEmpty(optEnd.day) &&\n !CommonBase.isEmpty(optQuick.value)\n ) {\n const tempFormat = 'YYYY-MM-DD';\n let startDate = _selfTop.getMomentDate(optStart.day, tempFormat);\n let endDate = _selfTop.getMomentDate(optEnd.day, tempFormat);\n if (startDate && endDate) {\n switch (_selfTopBase.layerType) {\n case 'years':\n startDate = _selfTop.getMomentDate(\n startDate.startOf('year').format(tempFormat),\n tempFormat,\n );\n endDate = _selfTop.getMomentDate(endDate.endOf('year').format(tempFormat), tempFormat);\n if (!startDate || !endDate) {\n optBase.activeQuick = '-1';\n return;\n }\n break;\n case 'months':\n startDate = _selfTop.getMomentDate(\n startDate.startOf('month').format(tempFormat),\n tempFormat,\n );\n endDate = _selfTop.getMomentDate(endDate.endOf('month').format(tempFormat), tempFormat);\n if (!startDate || !endDate) {\n optBase.activeQuick = '-1';\n return;\n }\n break;\n default:\n break;\n }\n optQuick.value.forEach((info: QuickItem) => {\n if (\n info.start &&\n info.end &&\n startDate.isSame(CommonDay.getDayjsObject(info.start).format(tempFormat)) &&\n endDate.isSame(CommonDay.getDayjsObject(info.end).format(tempFormat))\n ) {\n active = info.id;\n }\n });\n }\n }\n optBase.activeQuick = active;\n }\n};\n\nconst _checkStartEnd = (data: any) => {\n const startValue = optStart.value;\n const endValue = optEnd.value;\n const isEmptyStart = CommonBase.isEmpty(startValue);\n const isEmptyEnd = CommonBase.isEmpty(endValue);\n const isStart = !isEmptyStart && isEmptyEnd;\n const isEnd = isEmptyStart && !isEmptyEnd;\n let isBefore = false;\n let isSame = false;\n if (data && (isStart || isEnd)) {\n const temp = _selfTop.getMomentDate(isStart ? startValue : endValue);\n if (temp) {\n isBefore = data.isBefore(temp, 'day');\n isSame = data.isSame(temp, 'day');\n }\n }\n return { isStart, isEnd, isBefore, isSame };\n};\n\nconst _setHoverDate = (hoverDate: any) => {\n if (optBase.selectCount === 1) {\n const hoverValue = hoverDate.format('YYYY-MM-DD');\n const startValue = optStart.day;\n const endValue = optEnd.day;\n const checkStartEnd = _checkStartEnd(hoverDate);\n optBase.hoverValue = hoverValue;\n // 预览态:仅更新预览 start/end 与文本,不修改真实选择状态\n // (原实现直接篡改 optStart/optEnd,且无 mouseout 恢复,移开后状态被永久污染导致数据丢失)\n let previewStart = '';\n let previewEnd = '';\n if (checkStartEnd.isBefore) {\n previewStart = hoverValue;\n previewEnd = checkStartEnd.isStart ? startValue : endValue;\n } else {\n previewStart = checkStartEnd.isEnd ? endValue : startValue;\n previewEnd = hoverValue;\n }\n optBase.previewStart = previewStart;\n optBase.previewEnd = previewEnd;\n optLeft.text = _showDateFormatOut(\n _selfTop.getMergeDayTime(previewStart, optStart.time),\n 'left',\n );\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(previewEnd, optEnd.time), 'right');\n }\n};\n\n// 状态机:0(无)→1(选start)→2(完整范围);case 2 再点击即重新开始选择\nconst _setSelectDay = (value: string) => {\n optBase.previewStart = '';\n optBase.previewEnd = '';\n switch (optBase.selectCount) {\n case 0:\n case 2: {\n optBase.selectCount = 1;\n // 重新选择开始时重置快捷高亮(_setQuickActive 仅在 selectCount===2 时重算)\n optBase.activeQuick = '';\n\n optStart.day = value;\n _setStartSelectValue();\n\n optEnd.day = '';\n optEnd.time = '';\n\n optEnd.value = '';\n\n // 结束端 time 一并重置,避免右侧输入框混入上次选择的时间段\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(value, ''), 'right');\n\n optBase.hoverValue = value;\n break;\n }\n case 1: {\n optBase.selectCount = 2;\n\n const selectedDate = _selfTop.getMomentDate(value);\n if (!selectedDate) {\n // 无效日期拒绝接受,回退到等待有效结束日选择\n optBase.selectCount = 1;\n break;\n }\n const checkStartEnd = _checkStartEnd(selectedDate);\n\n if (checkStartEnd.isSame) {\n optStart.day = value;\n _setStartSelectValue();\n\n optEnd.day = value;\n _setEndSelectValue();\n } else {\n if (checkStartEnd.isBefore) {\n // 新选值早于当前开始值:自动交换——新值作为开始,原开始作为结束\n optEnd.day = optStart.day;\n optEnd.time = optStart.time;\n optStart.day = value;\n _setStartSelectValue();\n _setEndSelectValue();\n } else {\n optEnd.day = value;\n _setEndSelectValue();\n }\n }\n\n optBase.hoverValue = '';\n break;\n }\n default:\n break;\n }\n\n if (optBase.selectCount === 2) {\n _setQuickActive();\n }\n};\n\n// 内联模式(无快捷提交按钮)且范围完整且校验通过时自动提交;datetime 内联因 isShowQuickBtn=true 走按钮提交\nconst _autoSubmit = () => {\n if (!optBase.isShowQuickBtn && optBase.selectCount === 2 && optBase.isCheck) {\n emit('onSubmit', { start: optStart.value, end: optEnd.value });\n }\n};\n\nconst _initValueStartEnd = (isStart: boolean, value?: string) => {\n const tempDate = _selfTop.getMomentDate(value);\n const day = tempDate ? tempDate.format('YYYY-MM-DD') : '';\n const time = tempDate ? tempDate.format('HH:mm:ss') : '';\n const text = tempDate ? _selfTop.getMergeDayTime(day, time) : '';\n if (isStart) {\n optStart.day = day;\n optStart.time = time;\n optStart.value = text;\n optLeft.text = _showDateFormatOut(text, 'left');\n } else {\n optEnd.day = day;\n optEnd.time = time;\n optEnd.value = text;\n optRight.text = _showDateFormatOut(text, 'right');\n }\n};\n\nconst _initOption = () => {\n let operateMomentType = '';\n switch (_selfTopBase.layerType) {\n case 'days':\n operateMomentType = 'months';\n break;\n case 'months':\n operateMomentType = 'years';\n break;\n case 'years':\n operateMomentType = 'years';\n break;\n default:\n operateMomentType = 'months';\n }\n optBase.operateViewDataType = operateMomentType;\n\n const startValue = props.startValue || '';\n const endValue = props.endValue || '';\n const isStart = !CommonBase.isEmpty(startValue);\n const isEnd = !CommonBase.isEmpty(endValue);\n optBase.selectCount = isStart && isEnd ? 2 : isStart || isEnd ? 1 : 0;\n\n optLeft.view = _selfTop.getViewDate(startValue).format(_selfTopBase.formatIn);\n\n optRight.view = _getOtherViewValue(optLeft.view, 'add');\n\n _initValueStartEnd(true, startValue);\n _initValueStartEnd(false, endValue);\n\n if (_selfTopBase.timeType === 'time') {\n optBase.selectCount = 2;\n const tempTimeValue = _selfTopBase.layerType === 'seconds' ? '00:00:00' : '00:00';\n if (CommonBase.isEmpty(optLeft.text)) {\n _initValueStartEnd(true, _selfTop.getValueEffective(tempTimeValue));\n }\n if (CommonBase.isEmpty(optRight.text)) {\n _initValueStartEnd(false, _selfTop.getValueEffective(tempTimeValue));\n }\n }\n\n _buildQuickList();\n};\n\n// 重建快捷列表:先判类型,再过滤非对象/缺 id 项([null]/[42] 会让模板 rInfo.id 崩溃)\nconst _buildQuickList = () => {\n let rangeQuick: QuickItem[] = [];\n if (CommonBase.isArray(props.rangeQuick)) {\n rangeQuick = CommonBase.getListClone(props.rangeQuick).filter(\n (item: any): item is QuickItem =>\n CommonBase.isObject(item) && CommonBase.isNonEmptyString(item.id),\n );\n if (rangeQuick.length > 0) {\n rangeQuick.push({ id: '-1', text: optPageLanguage.value.common.custom });\n }\n }\n optQuick.value = rangeQuick;\n};\n\nconst _initMain = () => {\n _initOption();\n _setQuickActive();\n // 双重 nextTick 确保左右两个日历面板都已完成初始化后再通知上层\n nextTick(() => {\n nextTick(() => {\n emit('onInitComplete');\n });\n });\n};\n\nconst _checkChangeValue = () => {\n if (optBase.selectCount === 2) {\n const checkInfo = _selfTop.checkValue(optStart.value, optEnd.value);\n optBase.isCheck = checkInfo.errMsg.length === 0;\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch([() => props.startValue, () => props.endValue], ([newStart, newEnd]) => {\n // 外部更新 startValue/endValue(如调用 Index.setValue)后面板内状态同步刷新:\n // 值 + 状态机(selectCount)+ hover 残留清除 + 快捷高亮 + 校验重算\n _initValueStartEnd(true, newStart);\n _initValueStartEnd(false, newEnd);\n const isStart = !CommonBase.isEmpty(newStart);\n const isEnd = !CommonBase.isEmpty(newEnd);\n optBase.selectCount = isStart && isEnd ? 2 : isStart || isEnd ? 1 : 0;\n if (optBase.selectCount !== 2) {\n // selectCount 降级时重置快捷高亮,避免残留旧快捷项 id\n optBase.activeQuick = '';\n }\n optBase.hoverValue = '';\n optBase.previewStart = '';\n optBase.previewEnd = '';\n _setQuickActive();\n _checkChangeValue();\n});\n\nwatch(\n () => props.rangeQuick,\n () => {\n // 外部运行时更新 rangeQuick:仅重建快捷列表,不重跑 _initOption(避免覆盖用户已选值)\n if (!optBase.operateViewDataType) {\n return;\n }\n _buildQuickList();\n },\n);\n\n// 鼠标移出面板时清除 hover 预览与残留高亮,并恢复输入框文本为真实选择值\nconst onMouseLeave = () => {\n optBase.hoverValue = '';\n optBase.previewStart = '';\n optBase.previewEnd = '';\n optLeft.text = _showDateFormatOut(_selfTop.getMergeDayTime(optStart.day, optStart.time), 'left');\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(optEnd.day, optEnd.time), 'right');\n};\n\nconst onLeftChangeView = (value: string) => {\n optLeft.view = value;\n optRight.view = _getOtherViewValue(value, 'add');\n};\n\nconst onLeftSelectDay = (day: string) => {\n _setSelectDay(day);\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onLeftSelectTime = (time: string) => {\n optStart.time = time;\n _setStartSelectValue();\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onLeftHoverDate = (hoverDate: any) => {\n _setHoverDate(hoverDate);\n};\n\nconst onRightChangeView = (value: string) => {\n optLeft.view = _getOtherViewValue(value, 'subtract');\n optRight.view = value;\n};\n\nconst onRightSelectDay = (day: string) => {\n _setSelectDay(day);\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onRightSelectTime = (time: string) => {\n optEnd.time = time;\n _setEndSelectValue();\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onRightHoverDate = (hoverDate: any) => {\n _setHoverDate(hoverDate);\n};\n\nconst onChangeQuick = (info: QuickItem) => {\n if (info.id !== '-1') {\n if (CommonBase.isEmpty(info.start) || CommonBase.isEmpty(info.end)) {\n return;\n }\n const startObj = CommonDay.getDayjsObject(info.start);\n const endObj = CommonDay.getDayjsObject(info.end);\n // 无效日期(如 'abc')产出 Invalid Date 脏值,显式校验后拒绝,不依赖 checkMinMax 拦截\n if (!startObj.isValid() || !endObj.isValid()) {\n console.warn(`ClDateTimeRange: 快捷项 \"${info.text}\" 日期无效,已忽略`);\n return;\n }\n let start = startObj.format('YYYY-MM-DD');\n let end = endObj.format('YYYY-MM-DD');\n const checkInfo = _selfTop.checkMinMax(start, end, 'YYYY-MM-DD');\n\n if (!checkInfo.isStartMax || !checkInfo.isEndMin) {\n console.warn(`ClDateTimeRange: 快捷项 \"${info.text}\" 超出可选范围,已忽略`);\n return;\n }\n // 裁剪到 min/max 边界(isStartMax 和 isEndMin 已在外层确保为 true)\n if (!checkInfo.isStartMin) {\n start = checkInfo.minDay;\n }\n if (!checkInfo.isEndMax) {\n end = checkInfo.maxDay;\n }\n\n optStart.day = start;\n _setStartSelectValue();\n\n optEnd.day = end;\n _setEndSelectValue();\n\n optLeft.view = start;\n // 右面板定位到 end 所在月:自定义快捷项跨度超过 2 个月时 end 仍可见\n const endViewDate = CommonBase.isEmpty(end) ? null : _selfTop.getMomentDate(end);\n optRight.view = endViewDate\n ? endViewDate.startOf('month').format(_selfTopBase.formatIn)\n : _getOtherViewValue(start, 'add');\n\n optBase.hoverValue = '';\n // 清除 hover 预览残留(日历面板 hover 后直接点击快捷项不触发 onMouseLeave)\n optBase.previewStart = '';\n optBase.previewEnd = '';\n optBase.selectCount = 2;\n optBase.activeQuick = info.id;\n\n // 无条件重算校验:仅 datetime 分支重算会导致 date 模式 isCheck 陈旧(校验失败后无法恢复提交)\n _checkChangeValue();\n _autoSubmit();\n }\n};\n\nconst onQuickSubmit = () => {\n if (optBase.selectCount === 2 && optBase.isCheck) {\n emit('onSubmit', { start: optStart.value, end: optEnd.value });\n // 提交后重置校验状态:需重新选择才可再次提交,防连点重复 emit 相同 payload\n optBase.isCheck = false;\n }\n};\n\nconst onQuickCancel = () => {\n emit('onCancel');\n};\n\n// 返回范围选择原始值(start/end 为 day+time 合并后的完整日期时间字符串,如 \"2024-01-15 14:30:00\")\nconst getValue = () => {\n return { start: optStart.value, end: optEnd.value };\n};\n\n// 导出类型定义\nexport interface ClDateTimeRangeExpose {\n getValue: () => { start: string; end: string };\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <cl-datetime-default\n v-if=\"optIsValid && isDefault\"\n ref=\"refEl\"\n :value=\"start\"\n :minValue=\"minDate\"\n :maxValue=\"maxDate\"\n @onSelectValue=\"onSelectValue\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-default>\n <cl-date-time-range\n v-else-if=\"optIsValid && isRange\"\n ref=\"refEl\"\n :rangeQuick=\"rangeQuick\"\n :minValue=\"minDate\"\n :maxValue=\"maxDate\"\n :startValue=\"start\"\n :endValue=\"end\"\n @onSubmit=\"onSelectValue\"\n @onCancel=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-date-time-range>\n <template v-else></template>\n <ul\n v-if=\"optIsShowErrMsg\"\n class=\"datetime-errmsg\"\n role=\"alert\"\n >\n <li\n v-for=\"(emsg, eIdx) in errMsg\"\n :key=\"`${_keyIndex}-err-${eIdx}`\"\n >\n {{ emsg }}\n </li>\n </ul>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport type { DateTimeTop, QuickItem } from './types';\nimport ClDatetimeDefault from './DateTimeDefault.vue';\nimport ClDateTimeRange from './DateTimeRange.vue';\n\ndefineOptions({ name: 'ClDatetimeBase' });\n\nconst props = defineProps({\n isDefault: {\n type: Boolean,\n default: false, // desc: 是否默认(单选)模式\n },\n isRange: {\n type: Boolean,\n default: false, // desc: 是否范围选择模式\n },\n start: String, // desc: 开始日期值\n end: String, // desc: 结束日期值\n minDate: String, // desc: 最小可选日期\n maxDate: String, // desc: 最大可选日期\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 范围模式快捷选项列表\n },\n errMsg: {\n type: Array as () => string[],\n default: () => [], // desc: 错误消息列表\n },\n});\n\nconst emit = defineEmits({\n // default 模式 payload 为 Dayjs 实例;range 模式 payload 为 { start, end }——调用方按 isDefault/isRange 分支消费\n onSelectValue: (_value: ReturnType<typeof Dayjs> | { start: string; end: string }) => true, // desc: 选中值变更时触发\n onClose: () => true, // desc: 关闭面板时触发(仅 range 模式可达,default 模式无关闭事件来源)\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n\n// 模板 v-for key 前缀(errMsg 列表)\nconst _keyIndex = `clDatetimeBase-${CommonBase.getRandom(5)}`;\n\n// $DateTimeTop 由父组件 Index.vue 注入;缺失时提示挂载位置错误\nconst dateTimeTop = inject<DateTimeTop>('$DateTimeTop');\nif (!dateTimeTop) {\n console.warn('ClDateTimeBase: 未找到 $DateTimeTop 注入,请确保组件在 ClDatetime 组件树内使用');\n}\n// 注入缺失时不渲染子组件(子组件依赖注入非空断言,缺失会 TypeError 崩溃),并阻断 onInitComplete\nconst optIsValid = computed(() => !!dateTimeTop);\n\n// isDefault/isRange 互斥校验:两者同真同假均属误用,提示后由 Index 的 theme 兜底保证至少 default 分支可渲染\nif (props.isDefault === props.isRange) {\n console.warn(\n `ClDateTimeBase: isDefault(${props.isDefault}) 与 isRange(${props.isRange}) 必须恰好一个为 true`,\n );\n}\n\nconst refEl = ref<\n InstanceType<typeof ClDatetimeDefault> | InstanceType<typeof ClDateTimeRange> | null\n>(null);\n\n// isDefault/isRange 分支切换会重挂载子组件:onInitComplete 仅首次转发(父组件一次性初始化语义)\nlet isInitCompleteEmitted = false;\n\n// errMsg 为公开 Array prop,显式传 null 时 default 不生效,消费前判空防崩溃\nconst optIsShowErrMsg = computed(() => CommonBase.isArray(props.errMsg) && props.errMsg.length > 0);\n\nconst onSelectValue = (data: any) => {\n emit('onSelectValue', data);\n};\n\nconst onClose = () => {\n emit('onClose');\n};\n\nconst onInitComplete = () => {\n if (!isInitCompleteEmitted) {\n isInitCompleteEmitted = true;\n emit('onInitComplete');\n }\n};\n\nconst getValue = ():\n | ReturnType<typeof Dayjs>\n | null\n | string\n | { start?: string; end?: string } => {\n if (refEl.value) {\n return refEl.value.getValue();\n }\n // 面板未挂载(懒渲染/关闭即销毁):回退 props 值,保持与显示值一致,避免已选值丢失\n // default 模式与子组件挂载态返回值对齐(Dayjs 实例),未挂载且 props 不可解析时回退原串\n if (props.isDefault) {\n if (CommonBase.isNonEmptyString(props.start)) {\n return dateTimeTop?.getMomentDate(props.start) ?? props.start;\n }\n return null;\n }\n if (CommonBase.isNonEmptyString(props.start) || CommonBase.isNonEmptyString(props.end)) {\n return { start: props.start, end: props.end };\n }\n return '';\n};\n\n// 导出类型定义\nexport interface ClDateTimeBaseExpose {\n // 返回值形态:default 模式挂载态 Dayjs|null、未挂载态 Dayjs|string;range 模式 {start, end};均空 ''——调用方按模式判空消费\n getValue: () => ReturnType<typeof Dayjs> | null | string | { start?: string; end?: string };\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <cl-dropdownlayer-list\n v-if=\"isDropdown\"\n ref=\"refElDropdownLayer\"\n :id=\"elId\"\n :classParent=\"clsParent\"\n :classDropDown=\"clsDropdown\"\n :placeholder=\"placeholder\"\n :isDisabled=\"disabled\"\n :isClear=\"isClear\"\n :textLabel=\"optValue.showText\"\n :textArrowDirection=\"optArrowDirection\"\n :dropdownArrowPos=\"direction\"\n :isUseDropdownArrow=\"isUseDropdownArrow\"\n @onChangeOpen=\"onToggleOpen\"\n @onClear=\"onClearText\"\n >\n <template v-slot:textExtend>\n <cl-icon-font\n :name=\"optBase.timeType === 'time' ? 'clock' : 'calendar'\"\n className=\"datetime-icon\"\n aria-hidden=\"true\"\n ></cl-icon-font>\n </template>\n <template v-slot:dropdown>\n <cl-datetime-base\n ref=\"refElDatetime\"\n :isDefault=\"optBase.isDefault\"\n :isRange=\"optBase.isRange\"\n :start=\"optValue.start\"\n :end=\"optValue.end\"\n :minDate=\"minDate\"\n :maxDate=\"maxDate\"\n :rangeQuick=\"optBase.rangeQuick\"\n :errMsg=\"optBase.errMsg\"\n @onSelectValue=\"onSelectValue\"\n @onClose=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-base>\n </template>\n </cl-dropdownlayer-list>\n <div\n v-else\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-datetime-base\n v-if=\"optBase.isInit\"\n ref=\"refElDatetime\"\n :isDefault=\"optBase.isDefault\"\n :isRange=\"optBase.isRange\"\n :start=\"optValue.start\"\n :end=\"optValue.end\"\n :minDate=\"minDate\"\n :maxDate=\"maxDate\"\n :rangeQuick=\"optBase.rangeQuick\"\n :errMsg=\"optBase.errMsg\"\n @onSelectValue=\"onSelectValue\"\n @onClose=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-base>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, readonly, onMounted, nextTick, watch, computed, reactive, ref } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { QuickItem } from './types';\nimport ClDropdownlayerList from '../DropdownLayer/List.vue';\nimport ClDatetimeBase from './DateTimeBase.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n// 副作用导入:确保 dayjs 插件(isSameOrAfter 等)注册,消除对 DateTimeRange import 链的隐式依赖\nimport '../../Common/day';\nimport './index.css';\n\ndefineOptions({ name: 'ClDatetime' });\n\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n value: String, // desc: 绑定值,默认格式 YYYY-MM-DD,范围格式 start~end\n className: String, // desc: 自定义 CSS 类名\n placeholder: String, // desc: 占位文本\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n theme: {\n type: String,\n default: 'default',\n validator: (value: string) => ['default', 'range'].includes(value), // desc: 主题类型 | enum: default, range\n },\n layerType: {\n type: String,\n default: 'days',\n validator: (value: string) =>\n ['years', 'months', 'days', 'hours', 'minutes', 'seconds'].includes(value), // desc: 面板精度 | enum: years, months, days, hours, minutes, seconds\n },\n timeType: {\n type: String,\n default: 'date',\n validator: (value: string) => ['date', 'time', 'datetime'].includes(value), // desc: 时间类型 | enum: date, time, datetime\n },\n format: String, // desc: 自定义输出格式,不设则根据 layerType 推断:years→YYYY,months→YYYY-MM,days→YYYY-MM-DD,hours→HH:00,minutes→HH:mm,seconds→HH:mm:ss\n formatEnd: String, // desc: 范围模式结束值格式\n direction: {\n type: String,\n default: 'left', // desc: 弹出层三角箭头位置 | enum: left, right (可自定义)\n },\n minDate: String, // desc: 最小可选日期\n maxDate: String, // desc: 最大可选日期\n isClear: {\n type: Boolean,\n default: false, // desc: 是否显示清除按钮\n },\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 范围模式快捷选项,每项结构 { id, text, start, end },start/end 支持 Dayjs 或 string\n },\n isDropdown: {\n type: Boolean,\n default: true, // desc: 是否以下拉方式展示\n },\n themeStyle: {\n type: String,\n default: 'default',\n validator: (value: string) => ['default', 'noBorder'].includes(value), // desc: 主题样式 | enum: default, noBorder\n },\n arrowDirection: {\n type: String,\n default: 'right', // desc: 箭头在文本左侧还是右侧 | enum: left, right (可自定义)\n },\n isUseDropdownArrow: {\n type: Boolean,\n default: true, // desc: 是否显示弹出层三角箭头\n },\n checkCallback: Function, // desc: 校验回调,返回 false 阻止选择;default 模式参数为 Dayjs 实例,range 模式参数为 (start, end) 字符串\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string) => true, // desc: v-model 值更新时触发\n onChange: (_value: string, _info: ClDatetimeValueInfo) => true, // desc: 选中值变更时触发\n onInit: () => true, // desc: 组件初始化完成时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst optKeyIndex = `datetime-${CommonBase.getRandom(8)}`;\nconst elId = props.id; // || `_elId_-${CommonBase.getRandom(8)}`\n\nconst refElDropdownLayer = ref<InstanceType<typeof ClDropdownlayerList>>();\nconst refElDatetime = ref<InstanceType<typeof ClDatetimeBase>>();\n\n// time 模式下时间值拼接的固定基准日期,避免跨天导致日期变化\nconst _TIME_REFERENCE_DATE = '2000-01-01';\n\nconst optBase = reactive({\n isInit: false,\n isDefault: props.theme !== 'range',\n isRange: props.theme === 'range',\n isShowPopup: props.isDropdown,\n timeType: '',\n layerType: props.layerType,\n layerView: '',\n formatIn: '',\n formatOut: '',\n formatOutEnd: '',\n rangeQuick: [] as any[],\n errMsg: [] as string[],\n});\nconst optValue = reactive({\n showText: '',\n start: '',\n end: '',\n});\n\nconst _pageData: any = {\n lastStart: '',\n lastEnd: '',\n};\n\nconst optArrowDirection = computed(() => {\n let direction = props.arrowDirection;\n if (CommonBase.isEmpty(direction)) {\n // 空串(显式传空)按主题降级:noBorder 默认左箭头,其余默认右箭头,避免空串传给子组件触发 validator 警告\n direction = props.themeStyle === 'noBorder' ? 'left' : 'right';\n }\n return direction;\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetime': true,\n 'box-width': true,\n };\n if (props.themeStyle === 'noBorder') {\n cls['datetime-themeStyle-noBorder'] = true;\n }\n // 空值(无选中文本)时撑满父容器,日历/时钟图标居右显示\n if (props.themeStyle === 'noBorder' && CommonBase.isEmpty(optValue.showText)) {\n cls['datetime-empty'] = true;\n }\n if (!props.isDropdown) {\n cls['datetime-noPopup'] = true;\n cls[`datetime-${props.theme}`] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n // 接收方 cl-dropdownlayer-list 的 classParent 只支持字符串,对象需转字符串后返回\n return CommonBase.getStringByJson(cls, ' ');\n});\n\nconst clsDropdown = computed(() => {\n return `datetime-dropdown datetime-${props.theme}`;\n});\n\n// 快捷选项工厂函数:每次调用重建 Dayjs 日期,避免跨天后「今天/昨天/本月」等选项过期\nconst _getRangeQuickDays = () => [\n { id: 'today', text: optPageLanguage.value.today, start: Dayjs(), end: Dayjs() },\n {\n id: 'yesterDay',\n text: optPageLanguage.value.yesterDay,\n start: Dayjs().subtract(1, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'pastDays7',\n text: optPageLanguage.value.pastDays7,\n start: Dayjs().subtract(7, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'pastDays30',\n text: optPageLanguage.value.pastDays30,\n start: Dayjs().subtract(30, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'mont',\n text: optPageLanguage.value.montCurrent,\n start: Dayjs().startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'montLast',\n text: optPageLanguage.value.montLast,\n start: Dayjs().subtract(1, 'month').startOf('month'),\n end: Dayjs().subtract(1, 'month').endOf('month'),\n },\n];\nconst _getRangeQuickMonths = () => [\n {\n id: 'mont',\n text: optPageLanguage.value.montCurrent,\n start: Dayjs().startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'montLast',\n text: optPageLanguage.value.montLast,\n start: Dayjs().subtract(1, 'month').startOf('month'),\n end: Dayjs().subtract(1, 'month').endOf('month'),\n },\n {\n id: 'montLately6',\n text: optPageLanguage.value.montLately6,\n start: Dayjs().subtract(5, 'month').startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'year',\n text: optPageLanguage.value.yearCurrent,\n start: Dayjs().startOf('year'),\n end: Dayjs().endOf('year'),\n },\n {\n id: 'yearLast',\n text: optPageLanguage.value.yearLast,\n start: Dayjs().subtract(1, 'year').startOf('year'),\n end: Dayjs().subtract(1, 'year').endOf('year'),\n },\n];\nconst _getRangeQuickYears = () => [\n {\n id: 'year',\n text: optPageLanguage.value.yearCurrent,\n start: Dayjs().startOf('year'),\n end: Dayjs().endOf('year'),\n },\n {\n id: 'yearLast',\n text: optPageLanguage.value.yearLast,\n start: Dayjs().subtract(1, 'year').startOf('year'),\n end: Dayjs().subtract(1, 'year').endOf('year'),\n },\n];\n\nconst _getExportValue = (valueInfo: any): { value: string; info: ClDatetimeValueInfo } => {\n const isEmptyStart = CommonBase.isEmpty(valueInfo.start);\n const isEmptyEnd = CommonBase.isEmpty(valueInfo.end);\n // v-model 值用 formatIn(标准格式),保证回传时可解析\n const startIn = isEmptyStart ? '' : Dayjs(valueInfo.start).format(optBase.formatIn);\n const endIn = isEmptyEnd ? '' : Dayjs(valueInfo.end).format(optBase.formatIn);\n\n const value = optBase.isDefault\n ? startIn\n : isEmptyStart || isEmptyEnd\n ? ''\n : `${startIn}~${endIn}`;\n const json: ClDatetimeValueInfo = optBase.isDefault\n ? { value: startIn }\n : { start: startIn, end: endIn, value };\n return { value, info: json };\n};\n\nconst _setDropdownOpen = () => {\n if (refElDropdownLayer.value) {\n refElDropdownLayer.value.setOpen(false);\n }\n};\n\nconst _isCheckTypeTime = () => {\n return optBase.timeType === 'time';\n};\n\nconst _getValueEffective = (value?: string): string => {\n if (!value) {\n return '';\n }\n // 字符串守卫:trim 对非字符串执行 toString(),带恶意 toString 的对象会抛错\n const newValue = CommonBase.isString(value) ? CommonBase.trim(value) : '';\n if (!_isCheckTypeTime()) {\n return newValue;\n }\n // time 模式下:已是完整日期时间(含日期前缀)或日期串则不再重复拼接基准日期,避免双重拼接解析失败\n const isFullDate = /^\\d{4}-\\d{2}-\\d{2}/.test(newValue);\n return isFullDate ? newValue : `${_TIME_REFERENCE_DATE} ${newValue}`;\n};\n\nconst _getNow = () => {\n return Dayjs();\n};\n\nconst _getMomentDate = (value: any, format?: string): ReturnType<typeof Dayjs> | null => {\n let dateFormat: ReturnType<typeof Dayjs> | null = null;\n if (!CommonBase.isEmpty(value)) {\n const strFormat = CommonBase.isUndefined(format) ? optBase.formatIn : format;\n dateFormat = CommonBase.isString(value) ? Dayjs(value, strFormat) : Dayjs(value);\n if (dateFormat && !dateFormat.isValid()) {\n dateFormat = null;\n }\n }\n return dateFormat;\n};\n\nconst _getViewDate = (value: any) => {\n const viewDate = _getMomentDate(value);\n return CommonBase.isUndefined(viewDate) ? _getNow().startOf('month') : viewDate.startOf('month');\n};\n\nconst _checkMinMax = (start: string, end: string, format?: string) => {\n const newFormat = CommonBase.isEmpty(format) ? optBase.formatIn : format;\n let minDay = '';\n if (!CommonBase.isEmpty(props.minDate)) {\n const minDate = _getMomentDate(_getValueEffective(props.minDate));\n minDay = minDate ? minDate.format(newFormat) : '';\n }\n let maxDay = '';\n if (!CommonBase.isEmpty(props.maxDate)) {\n const maxDate = _getMomentDate(_getValueEffective(props.maxDate));\n maxDay = maxDate ? maxDate.format(newFormat) : '';\n }\n\n let isStartMin = true;\n let isStartMax = true;\n let isEndMin = true;\n let isEndMax = true;\n let isStartEnd = true;\n let isRangeEmpty = false;\n const isStartEmpty = CommonBase.isEmpty(start);\n const isEndEmpty = CommonBase.isEmpty(end);\n let diffType: any;\n switch (props.layerType) {\n case 'years':\n diffType = 'year';\n break;\n case 'months':\n diffType = 'month';\n break;\n case 'days':\n diffType = 'day';\n break;\n case 'hours':\n diffType = 'hour';\n break;\n case 'minutes':\n diffType = 'minute';\n break;\n case 'seconds':\n diffType = 'second';\n break;\n default:\n diffType = 'day';\n break;\n }\n if (!isStartEmpty) {\n const startDate = Dayjs(start);\n if (startDate.isValid()) {\n if (!CommonBase.isEmpty(minDay)) {\n isStartMin = startDate.isSameOrAfter(minDay, diffType);\n }\n if (!CommonBase.isEmpty(maxDay)) {\n isStartMax = startDate.isSameOrBefore(maxDay, diffType);\n }\n if (!isEndEmpty) {\n const endDate = Dayjs(end);\n if (endDate.isValid()) {\n if (!CommonBase.isEmpty(minDay)) {\n isEndMin = endDate.isSameOrAfter(minDay, diffType);\n }\n if (!CommonBase.isEmpty(maxDay)) {\n isEndMax = endDate.isSameOrBefore(maxDay, diffType);\n }\n if (endDate.isBefore(startDate)) {\n isStartEnd = false;\n }\n }\n }\n }\n }\n const errMsg = [];\n const preStart = optBase.isRange ? optPageLanguage.value.rangeStartLabel : '';\n if (!isStartMax) {\n errMsg.push(\n `${preStart}${optPageLanguage.value.checkStartMaxLabel}(${_getMomentDate(maxDay, newFormat)?.format(optBase.formatOut) ?? maxDay})`,\n );\n } else if (!isEndMin) {\n errMsg.push(\n `${optPageLanguage.value.checkEndMinLabel}(${_getMomentDate(minDay, newFormat)?.format(optBase.formatOut) ?? minDay})`,\n );\n } else {\n if (!isStartMin) {\n errMsg.push(\n `${preStart}${optPageLanguage.value.checkStartMinLabel}(${_getMomentDate(minDay, newFormat)?.format(optBase.formatOut) ?? minDay})`,\n );\n }\n if (!isEndMax) {\n errMsg.push(\n `${optPageLanguage.value.checkEndMaxLabel}(${_getMomentDate(maxDay, newFormat)?.format(optBase.formatOut) ?? maxDay})`,\n );\n }\n }\n if (optBase.isRange) {\n if (isStartEmpty || isEndEmpty) {\n isRangeEmpty = true;\n errMsg.push(optPageLanguage.value.checkRangeEmptyLabel);\n }\n if (!isStartEnd) {\n errMsg.push(optPageLanguage.value.checkStartEndLabel);\n }\n }\n return {\n isStartMin,\n isStartMax,\n isEndMin,\n isEndMax,\n isStartEnd,\n isRangeEmpty,\n errMsg,\n minDay,\n maxDay,\n };\n};\n\nconst _checkValue = (start: string, end?: string, format?: string) => {\n const checkInfo = _checkMinMax(start, end || '', format);\n optBase.errMsg = checkInfo.errMsg;\n if (refElDropdownLayer.value) {\n nextTick(() => {\n refElDropdownLayer.value?.calculationPosition();\n });\n }\n return checkInfo;\n};\n\n// 内置快捷选项工厂(按 layerType 分派),空数组/非数组误传时回退\nconst _getDefaultRangeQuick = (): QuickItem[] => {\n let rangeQuick: QuickItem[] = [];\n switch (props.layerType) {\n case 'days':\n case 'hours':\n case 'minutes':\n case 'seconds':\n rangeQuick = optBase.timeType === 'time' ? [] : _getRangeQuickDays();\n break;\n case 'months':\n rangeQuick = _getRangeQuickMonths();\n break;\n case 'years':\n rangeQuick = _getRangeQuickYears();\n break;\n default:\n break;\n }\n return rangeQuick;\n};\n\nconst _initRangeQuick = () => {\n let rangeQuick: QuickItem[] = [];\n if (optBase.isRange) {\n if (CommonBase.isArray(props.rangeQuick) && props.rangeQuick.length > 0) {\n // isArray 前置:非数组(对象/数字)展开会抛 \"not iterable\"\n rangeQuick = [...props.rangeQuick];\n } else {\n // 空数组/非数组误传:回退内置选项(保持兜底功能一致)\n rangeQuick = _getDefaultRangeQuick();\n }\n }\n optBase.rangeQuick = rangeQuick;\n};\n\nconst _checkPropEnums = () => {\n // 运行时枚举校验 + 中文警告(validator 内禁止 console,故放此处)\n if (!['default', 'range'].includes(props.theme)) {\n console.warn(`ClDatetime: theme 非法值 \"${props.theme}\",可选值 default/range`);\n }\n if (!['years', 'months', 'days', 'hours', 'minutes', 'seconds'].includes(props.layerType)) {\n console.warn(`ClDatetime: layerType 非法值 \"${props.layerType}\"`);\n }\n if (!['date', 'time', 'datetime'].includes(props.timeType)) {\n console.warn(`ClDatetime: timeType 非法值 \"${props.timeType}\"`);\n }\n if (!['default', 'noBorder'].includes(props.themeStyle)) {\n console.warn(`ClDatetime: themeStyle 非法值 \"${props.themeStyle}\"`);\n }\n};\n\nconst _initOption = () => {\n _checkPropEnums();\n let timeType = '';\n let formatOut = '';\n let layerView = '';\n switch (props.layerType) {\n case 'years':\n timeType = 'date';\n formatOut = 'YYYY';\n layerView = props.layerType;\n break;\n case 'months':\n timeType = 'date';\n formatOut = 'YYYY-MM';\n layerView = props.layerType;\n break;\n case 'days':\n timeType = 'date';\n formatOut = 'YYYY-MM-DD';\n layerView = props.layerType;\n break;\n case 'hours':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:00' : 'YYYY-MM-DD HH:00';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n case 'minutes':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:mm' : 'YYYY-MM-DD HH:mm';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n case 'seconds':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:mm:ss' : 'YYYY-MM-DD HH:mm:ss';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n default:\n timeType = 'date';\n formatOut = 'YYYY-MM-DD';\n layerView = props.layerType;\n break;\n }\n\n optBase.timeType = timeType;\n optBase.layerView = layerView;\n optBase.formatIn = timeType === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss';\n optBase.formatOut = CommonBase.isNonEmptyString(props.format) ? props.format : formatOut;\n optBase.formatOutEnd = CommonBase.isNonEmptyString(props.formatEnd) ? props.formatEnd : formatOut;\n};\n\nconst _initValue = (value?: string) => {\n let text = '';\n let start = '';\n let end = '';\n if (CommonBase.isNonEmptyString(value)) {\n if (optBase.isDefault) {\n const newValue = _getValueEffective(value);\n const tempDate = Dayjs(newValue);\n if (tempDate.isValid()) {\n start = tempDate.format(optBase.formatIn);\n text = tempDate.format(optBase.formatOut);\n }\n } else if (optBase.isRange) {\n const tempArr = value.split('~');\n if (tempArr.length === 2) {\n const newValue1 = _getValueEffective(tempArr[0]);\n const newValue2 = _getValueEffective(tempArr[1]);\n const startDate1 = Dayjs(newValue1);\n const endDate2 = Dayjs(newValue2);\n if (startDate1.isValid() && endDate2.isValid()) {\n start = startDate1.format(optBase.formatIn);\n end = endDate2.format(optBase.formatIn);\n text = `${startDate1.format(optBase.formatOut)} ~ ${endDate2.format(optBase.formatOutEnd)}`;\n }\n }\n }\n }\n optValue.start = start;\n optValue.end = end;\n optValue.showText = text;\n};\n\nconst _operateCheckCallback = (data: any) => {\n let isChange = true;\n if (props.checkCallback && !CommonBase.isEmpty(data)) {\n try {\n if (optBase.isDefault) {\n isChange = props.checkCallback(data);\n } else if (optBase.isRange) {\n isChange = props.checkCallback(data.start, data.end);\n }\n } catch (error) {\n // 用户回调异常不应中断选择流程:按不通过处理并提示\n console.warn('ClDatetime: checkCallback 回调执行异常,本次选择不生效', error);\n isChange = false;\n }\n isChange = CommonBase.isBoolean(isChange) ? isChange : true;\n }\n return isChange;\n};\n\nconst _operateSetSelectValue = (data: any) => {\n let text = '';\n let start = '';\n let end = '';\n\n let isChange = false;\n if (optBase.isDefault) {\n if (!CommonBase.isEmpty(data)) {\n const newValueDate = _getMomentDate(data);\n if (newValueDate) {\n start = newValueDate.format(optBase.formatIn);\n text = newValueDate.format(optBase.formatOut);\n }\n }\n isChange = start !== _pageData.lastStart;\n } else if (optBase.isRange) {\n if (\n !CommonBase.isEmpty(data) &&\n !CommonBase.isEmpty(data.start) &&\n !CommonBase.isEmpty(data.end)\n ) {\n const startDate = _getMomentDate(data.start);\n const endDate = _getMomentDate(data.end);\n\n if (startDate && endDate) {\n start = startDate.format(optBase.formatIn);\n end = endDate.format(optBase.formatIn);\n text = `${startDate.format(optBase.formatOut)} ~ ${endDate.format(optBase.formatOutEnd)}`;\n }\n }\n isChange = start !== _pageData.lastStart || end !== _pageData.lastEnd;\n }\n\n const checkInfo = _checkMinMax(start, end);\n let isCheck = false;\n if (checkInfo.errMsg.length === 0) {\n isCheck = _operateCheckCallback(data);\n }\n\n optBase.errMsg = checkInfo.errMsg;\n if (refElDropdownLayer.value) {\n nextTick(() => {\n refElDropdownLayer.value?.calculationPosition();\n });\n }\n return { start, end, text, isChange, checkInfo, isCheck };\n};\n\nconst _initMain = () => {\n _initOption();\n _initRangeQuick();\n _initValue(props.value);\n nextTick(() => {\n optBase.isInit = true;\n });\n};\n\nconst _getValueBase = () => {\n const data = refElDatetime.value?.getValue();\n let start = '';\n let end = '';\n if (optBase.isDefault) {\n if (!CommonBase.isEmpty(data)) {\n const newValueDate = _getMomentDate(data);\n if (newValueDate) {\n start = newValueDate.format(optBase.formatIn);\n }\n }\n } else if (optBase.isRange) {\n if (!CommonBase.isEmpty(data?.start) && !CommonBase.isEmpty(data?.end)) {\n const startDate = _getMomentDate(data.start);\n const endDate = _getMomentDate(data.end);\n if (startDate && endDate) {\n start = startDate.format(optBase.formatIn);\n end = endDate.format(optBase.formatIn);\n }\n }\n }\n // 纯查询路径:不写 optBase.errMsg、不重算下拉位置,避免查询方法污染界面状态\n return _getExportValue({ start, end });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n _initValue(newValue);\n // 同步选择快照,与 setValue 入口一致,避免下拉打开期间外部改值后重选旧值误判未变化\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n }\n },\n);\n\nwatch(\n () => props.isDropdown,\n newValue => {\n // 同步 isShowPopup,避免运行时动态切换 isDropdown 后 onInitComplete 分支错位\n optBase.isShowPopup = newValue;\n },\n);\n\nwatch(\n [\n () => props.theme,\n () => props.layerType,\n () => props.timeType,\n () => props.format,\n () => props.formatEnd,\n ],\n () => {\n // 快照参数运行时变更:重建初始化快照,避免内部状态与 props 脱节\n // theme 变化需同步 isDefault/isRange(_initOption 不重建这两个字段)\n optBase.isDefault = props.theme !== 'range';\n optBase.isRange = props.theme === 'range';\n _initOption();\n _initRangeQuick();\n _initValue(props.value);\n // 同步选择快照,避免 theme 切换后重选旧值 isChange 误判(与 watch value/setValue 一致)\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n },\n);\n\nconst onToggleOpen = (value: boolean) => {\n if (!props.disabled) {\n if (value) {\n optBase.errMsg = [];\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n // 每次打开下拉时重新计算快捷选项日期,避免跨天后\"今天\"等选项过期\n _initRangeQuick();\n }\n }\n};\n\nconst onClearText = () => {\n if (!props.disabled) {\n optValue.start = '';\n optValue.end = '';\n optValue.showText = '';\n // 同步选择快照,避免「选A→清除→再选A」时 isChange 误判为未变化导致 v-model 不回传\n _pageData.lastStart = '';\n _pageData.lastEnd = '';\n const data = _getExportValue(optValue);\n emit('update:value', data.value);\n emit('onChange', data.value, data.info);\n }\n};\n\nconst onSelectValue = (data: any) => {\n if (!props.disabled) {\n const { start, end, text, isChange, isCheck } = _operateSetSelectValue(data);\n if (isCheck) {\n optValue.start = start;\n optValue.end = end;\n optValue.showText = text;\n\n // 内联模式无 onToggleOpen 快照更新:选择后同步快照,避免重复选同值重复 emit(与下拉模式一致)\n _pageData.lastStart = start;\n _pageData.lastEnd = end;\n\n _setDropdownOpen();\n\n if (isChange) {\n const exportData = _getExportValue(optValue);\n emit('update:value', exportData.value);\n emit('onChange', exportData.value, exportData.info);\n }\n }\n }\n};\n\nconst onClose = () => {\n _setDropdownOpen();\n};\n\n// popup 模式每次打开下拉都会重新挂载面板触发 onInitComplete:onInit 仅首次触发(与内联模式一致)\nlet isInitEmitted = false;\nconst onInitComplete = () => {\n if (optBase.isShowPopup) {\n if (refElDropdownLayer.value) {\n if (!refElDropdownLayer.value.checkIsShowOpen()) {\n refElDropdownLayer.value.initCompleteOpen();\n }\n }\n }\n if (!isInitEmitted) {\n isInitEmitted = true;\n emit('onInit');\n }\n};\n\n// 向子组件树注入公共方法和 Dayjs 实例,避免逐层传递 props\n// 接口定义见 ./types.ts -> DateTimeTop\nprovide('$DateTimeTop', {\n keyIndex: optKeyIndex,\n elId: props.id,\n getMomentDate: _getMomentDate,\n getViewDate: _getViewDate,\n getNow: _getNow,\n checkIsTimes: _isCheckTypeTime,\n checkValue: _checkValue,\n checkMinMax: _checkMinMax,\n getValueEffective: _getValueEffective,\n getMergeDayTime: (day: string, time: string) => {\n let value = '';\n const newDay = CommonBase.isString(day) ? CommonBase.trim(day) : '';\n let newTime = CommonBase.isString(time) ? CommonBase.trim(time) : '';\n switch (optBase.timeType) {\n case 'date':\n value = newDay;\n break;\n case 'time':\n value = _getValueEffective(newTime) || '';\n break;\n case 'datetime':\n if (!CommonBase.isEmpty(newDay)) {\n newTime = CommonBase.isEmpty(time) ? '00:00:00' : newTime;\n value = `${newDay} ${newTime}`;\n }\n break;\n default:\n break;\n }\n return value;\n },\n Dayjs: Dayjs,\n});\n\nprovide('$DateTimeTopBase', readonly(optBase));\n\nconst getValue = () => {\n // 时序契约:onInit 完成前调用(面板未挂载)返回 '',调用方依赖 onInit 确定可读时机\n const data = _getValueBase();\n return data.value;\n};\n\nconst getValueData = () => {\n const data = _getValueBase();\n return data.info;\n};\n\nconst setValue = (value?: string) => {\n // 编程式设置仅更新内部显示与快照,不回传 update:value/onChange(受控模式下由父组件同步 value)\n _initValue(value);\n // 同步选择快照,避免「setValue(A)→再选A」时 isChange 误判为未变化\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n};\n\n// 导出值结构:default 模式 { value };range 模式 { start, end, value }\nexport interface ClDatetimeValueInfo {\n value: string;\n start?: string;\n end?: string;\n}\n\nexport interface ClDatetimeExpose {\n getValue: () => string;\n getValueData: () => ClDatetimeValueInfo;\n setValue: (value?: string) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_selfTop","inject","_selfTopBase","_selfBase","_keyIndex","CommonBase","elId","clsParent","computed","cls","CommonElement","optHead","reactive","optWeeks","ref","optDays","_pageData","_setHead","titleYear","titleMonth","prevYear","disabledPrevYear","prevMonth","disabledPrevMonth","nextMonth","disabledNextMonth","nextYear","disabledNextYear","_setWeek","locale","days","first","dow","d","i","_setDays","date","currentDate","currentYear","currentMonth","useDate","weeks","loopDate","loopValue","isOld","isNew","isActive","isDisabled","isStart","isEnd","isRangeIn","_setViewDate","operate","amount","type","newViewDate","isInitComplete","_emitInitComplete","nextTick","_syncPageData","_changeWatchValue","newValue","oldValue","tempDate","_initMain","viewDate","onMounted","watch","onPrevYear","e","onPrevMonth","onNextMonth","onNextYear","onView","viewType","onSelectDay","dayInfo","onHoverDay","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_hoisted_3","_createVNode","ClIconFont","_Fragment","_cache","$event","_toDisplayString","_hoisted_6","_openBlock","_renderList","w","wIdx","wd","wdIdx","dIdx","_normalizeClass","_hoisted_9","optMonths","_setMonths","focusDate","months","m","isFocused","onSelectMonth","monthInfo","onHoverMonth","_hoisted_5","_hoisted_7","mIdx","_hoisted_8","optYears","prevDate","nextDate","_setYears","years","useYear","hoverYear","_initOptions","onSelectYear","yearInfo","onHoverYear","y","yIdx","_TIME_REFERENCE_DATE","optBase","optOperate","optRotate","optSelectValue","optNum","clsPointerHour","clsPointerMinute","clsPointerSecond","clsAmAm","clsAmPm","clsSetHour","clsSetMinute","clsSetSecond","_updatePageDataByType","value","_calculateSkipCount","valueOld","valueNew","skip","_calculateRotate","angle","_setPointerRotate","hour","hourMinute","minute","minuteSecond","second","_getShowAm","hh","_compareNumPre","minMax","isRunPre","_isCrossMidnight","_checkNumDisabled","num","_setClockNum","numType","nums","n","item","_setClock","_isCheckDiff","diff","selectedDate","_initOpenPointerRotate","isRecordOrig","mm","ss","_setClockValue","_initValue","HH","day","_initOption","isShowMinute","isShowSecond","isEmptySelectDate","tempValueInfo","hhStr","mmStr","ssStr","_resetPointerBase","_syncClockDisplay","_onClockSetBtnDownBefore","isCheck","_onAddSubNum","isRun","min","max","_oldValue","tempValue","onClickPointer","onClickNum","numInfo","lastValue","onClickAm","hourNum","onClockSetBtnDownBeforeHour","_getBtnDisabled","subtractDisabled","addDisabled","isCross","onAddSubNumHour","valueInfo","onClockSetBtnDownBeforeMinute","onAddSubNumMinute","onClockSetBtnDownBeforeSecond","onAddSubNumSecond","onClickOverlay","onSubmit","onCancel","nIdx","_withKeys","_withModifiers","_normalizeStyle","_withDirectives","_vShow","ClInputNumberStepper","optClock","_updateState","state","tempKey","k","key","_checkDataMinMax","diffType","isIn","_getViewMin","newMonth","newDay","isMinYear","isMinMonth","_getNextView","nextView","_getDateMergeHSM","selectDate","tempTime","_getSelectDateByElement","layerView","info","modifier","targetMonth","_initViewData","_initSelectDate","selectDay","_initClock","isShow","isViewDay","isShowClockPointer","isShowClockSubmit","isShowClockCancel","isClockClickOverlay","isRangeRun","lastClockTime","onChangeViewData","onChangeViewType","view","onSelectDate","selectValue","updState","onHoverDate","hoverDate","onSelectTime","_emittedViewTypes","onInitComplete","provide","_createBlock","ClCalendarsDays","ClCalendarsMonths","ClCalendarsYears","ClCalendarsClocks","_changeCheckValue","checkInfo","_initShowSubmit","isShowSubmit","_initSelectValue","time","isSubmitDisplay","_emitSelectValue","onChangeDate","onChangeTime","__expose","ClCalendarsBase","optLeft","optRight","optStart","optEnd","optQuick","_getOtherViewValue","_showDateFormatOut","dateValue","formatType","newFormat","momentDate","_setStartSelectValue","_setEndSelectValue","_setQuickActive","active","tempFormat","startDate","endDate","CommonDay","_checkStartEnd","data","startValue","endValue","isEmptyStart","isEmptyEnd","isBefore","isSame","temp","_setHoverDate","hoverValue","checkStartEnd","previewStart","previewEnd","_setSelectDay","_autoSubmit","_initValueStartEnd","text","operateMomentType","tempTimeValue","_buildQuickList","rangeQuick","_checkChangeValue","newStart","newEnd","onMouseLeave","onLeftChangeView","onLeftSelectDay","onLeftSelectTime","onLeftHoverDate","onRightChangeView","onRightSelectDay","onRightSelectTime","onRightHoverDate","onChangeQuick","startObj","endObj","start","end","endViewDate","onQuickSubmit","onQuickCancel","_hoisted_4","_hoisted_11","_hoisted_12","rInfo","rIdx","_hoisted_13","_hoisted_14","ClButton","dateTimeTop","optIsValid","refEl","isInitCompleteEmitted","optIsShowErrMsg","onSelectValue","onClose","ClDatetimeDefault","ClDateTimeRange","_hoisted_1","emsg","eIdx","optKeyIndex","refElDropdownLayer","refElDatetime","optValue","optArrowDirection","direction","clsDropdown","_getRangeQuickDays","Dayjs","_getRangeQuickMonths","_getRangeQuickYears","_getExportValue","startIn","endIn","json","_setDropdownOpen","_isCheckTypeTime","_getValueEffective","_getNow","_getMomentDate","format","dateFormat","strFormat","_getViewDate","_checkMinMax","minDay","minDate","maxDay","maxDate","isStartMin","isStartMax","isEndMin","isEndMax","isStartEnd","isRangeEmpty","isStartEmpty","isEndEmpty","errMsg","preStart","_checkValue","_getDefaultRangeQuick","_initRangeQuick","_checkPropEnums","timeType","formatOut","tempArr","newValue1","newValue2","startDate1","endDate2","_operateCheckCallback","isChange","error","_operateSetSelectValue","newValueDate","_getValueBase","onToggleOpen","onClearText","exportData","isInitEmitted","newTime","readonly","ClDropdownlayerList","ClDatetimeBase"],"mappings":"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"}
1
+ {"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js","sources":["../../../src/libs/Web/DateTime/CalendarsDays.vue","../../../src/libs/Web/DateTime/CalendarsMonths.vue","../../../src/libs/Web/DateTime/CalendarsYears.vue","../../../src/libs/Web/DateTime/CalendarsClock.vue","../../../src/libs/Web/DateTime/CalendarsBase.vue","../../../src/libs/Web/DateTime/DateTimeDefault.vue","../../../src/libs/Web/DateTime/DateTimeRange.vue","../../../src/libs/Web/DateTime/DateTimeBase.vue","../../../src/libs/Web/DateTime/Index.vue"],"sourcesContent":["<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th\n class=\"time-head time-head-day\"\n colspan=\"7\"\n >\n <span class=\"time-prev\">\n <span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-double-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n <span\n class=\"prev-month\"\n :title=\"optPageLanguage.prevMonth\"\n v-if=\"optHead.isPrevMonth\"\n @click=\"onPrevMonth\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span\n class=\"datetime-switch-year\"\n @click=\"onView($event, 'years')\"\n >{{ optHead.titleYear }}</span\n >\n <span\n class=\"datetime-switch-month\"\n @click=\"onView($event, 'months')\"\n >{{ optHead.titleMonth }}</span\n >\n <span class=\"time-next\">\n <span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-double-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n <span\n class=\"next-month\"\n :title=\"optPageLanguage.nextMonth\"\n v-if=\"optHead.isNextMonth\"\n @click=\"onNextMonth\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n <tr>\n <th\n v-for=\"(w, wIdx) in optWeeks\"\n :key=\"`${_keyIndex}-week-${wIdx}`\"\n >\n {{ w }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"(wd, wdIdx) in optDays\"\n :key=\"`${_keyIndex}-days-${wdIdx}`\"\n >\n <td\n v-for=\"(d, dIdx) in wd.days\"\n :key=\"`${_keyIndex}-day-${dIdx}`\"\n role=\"gridcell\"\n tabindex=\"0\"\n :aria-disabled=\"d.isDisabled\"\n :class=\"d.cls\"\n @click=\"onSelectDay($event, d)\"\n @keydown.enter.prevent=\"onSelectDay($event, d)\"\n @keydown.space.prevent=\"onSelectDay($event, d)\"\n @mouseover=\"onHoverDay($event, d)\"\n >\n {{ d.day }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface DayCell {\n cls: string;\n day: number;\n value: number;\n isDisabled: boolean;\n isOld: boolean;\n isNew: boolean;\n}\n\ndefineOptions({ name: 'ClCalendarsDays' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onChangeType: (_value: 'years' | 'months') => true, // desc: 切换视图类型时触发\n onSelectDate: (_layerView: 'days', _info: DayCell) => true, // desc: 选中日期时触发\n onHoverDate: (_layerView: 'days', _info: DayCell) => true, // desc: 悬停日期时触发\n onInitComplete: (_value: 'days') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中日期(日期格获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsDays: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsDays-${CommonBase.getRandom(5)}`;\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsDays-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsdays': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n isPrevMonth: false,\n titleYear: '',\n titleMonth: '',\n isNextYear: false,\n isNextMonth: false,\n});\nconst optWeeks = ref<string[]>([]);\nconst optDays = ref<{ days: DayCell[] }[]>([]);\n\ninterface PageData {\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\nconst _pageData: PageData = {\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n const titleYear = _pageData.viewDate.year();\n const locale = _pageData.viewDate.localeData();\n const titleMonth = locale.monthsShort(_pageData.viewDate);\n\n const prevYear = _pageData.viewDate.clone().subtract(1, 'years').endOf('month');\n const disabledPrevYear = _selfBase.checkDataMinMax(prevYear, 'day');\n\n const prevMonth = _pageData.viewDate.clone().subtract(1, 'months').endOf('month');\n const disabledPrevMonth = _selfBase.checkDataMinMax(prevMonth, 'day');\n\n const nextMonth = _pageData.viewDate.clone().add(1, 'months').startOf('month');\n const disabledNextMonth = _selfBase.checkDataMinMax(nextMonth, 'day');\n\n const nextYear = _pageData.viewDate.clone().add(1, 'years').startOf('month');\n const disabledNextYear = _selfBase.checkDataMinMax(nextYear, 'day');\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.isPrevMonth = !disabledPrevMonth;\n optHead.titleYear = `${titleYear}${optPageLanguage.value.year}`;\n optHead.titleMonth = titleMonth;\n optHead.isNextMonth = !disabledNextMonth;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setWeek = () => {\n const locale = _pageData.viewDate.localeData();\n const days = locale.weekdaysMin();\n const first = locale.firstDayOfWeek();\n const dow: string[] = [];\n days.forEach((d: string, i: number) => {\n dow[(7 + i - first) % 7] = d;\n });\n optWeeks.value = dow;\n};\n\n// 每次 hover 触发全量 42 格 Dayjs 计算,性能敏感场景可改为仅更新变化的单元格\nconst _setDays = () => {\n const date = _pageData.viewDate.clone();\n const currentDate = _pageData.selectDate;\n const currentYear = date.year();\n const currentMonth = date.month();\n let useDate = date.clone().subtract(1, 'months');\n const weeks = [];\n let days = [];\n useDate = useDate.date(useDate.daysInMonth()).startOf('week');\n for (let i = 0; i < 42; i += 1) {\n if (i > 0) {\n useDate = useDate.add(1, 'days');\n }\n const loopDate = useDate.clone();\n const loopValue = loopDate.date();\n const isOld =\n (useDate.year() === currentYear && useDate.month() < currentMonth) ||\n useDate.year() < currentYear;\n const isNew =\n (useDate.year() === currentYear && useDate.month() > currentMonth) ||\n useDate.year() > currentYear;\n let isActive = currentDate && useDate.isSame(currentDate, 'day');\n const isDisabled = _selfBase.checkDataMinMax(loopDate, 'day');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n if (_pageData.hoverDate) {\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'day') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'day')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useDate.isSame(_pageData.startDate, 'day');\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn =\n isStart ||\n isEnd ||\n (useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n } else if (_pageData.startDate) {\n isStart = useDate.isSame(_pageData.startDate, 'day');\n isRangeIn = isStart || useDate.isSame(_pageData.hoverDate, 'day');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.hoverDate, 'day'));\n isEnd = _pageData.hoverDate.isSame(_pageData.startDate, 'day') && isStart;\n } else if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn = isEnd || useDate.isSame(_pageData.hoverDate, 'day');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n isStart = _pageData.hoverDate.isSame(_pageData.endDate, 'day') && isEnd;\n }\n } else {\n isStart = _pageData.startDate && useDate.isSame(_pageData.startDate, 'day');\n if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'day');\n isRangeIn =\n isStart ||\n isEnd ||\n (_pageData.startDate &&\n useDate.isAfter(_pageData.startDate, 'day') &&\n useDate.isBefore(_pageData.endDate, 'day'));\n }\n }\n isActive = isStart || isEnd;\n }\n const cls = CommonElement.getAddClass('day', {\n old: isOld,\n new: isNew,\n active: isActive && !isOld && !isNew && !isDisabled,\n disabled: isDisabled,\n 'date-start': isStart && !isOld && !isNew,\n 'date-end': isEnd && !isOld && !isNew,\n 'range-in': isRangeIn && !isOld && !isNew,\n });\n days.push({ cls, day: loopValue, value: loopValue, isDisabled, isOld, isNew });\n if (days.length === 7) {\n weeks.push({ days });\n days = [];\n }\n }\n optDays.value = weeks;\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n if (!_pageData.viewDate) {\n return;\n }\n const newViewDate = _pageData.viewDate.clone()[operate](amount, type);\n emit('onChangeDate', newViewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'days');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段,\n// 否则先到达的 select/start/end watch 被 viewDate 空守卫丢弃后选中态永久丢失\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (type: keyof PageData, newValue: any, oldValue: any) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 年份脏渲染\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _setWeek();\n _setHead();\n _setDays();\n _emitInitComplete();\n }\n }\n};\n\nconst _initMain = () => {\n if (CommonBase.isNonEmptyString(props.viewValue)) {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n _setWeek();\n _setHead();\n _setDays();\n _emitInitComplete();\n }\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch([() => props.selectValue, () => props.startValue, () => props.endValue], () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 null.clone() 崩溃\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算日期单元格样式(表头和星期不依赖 select/start/end 等 prop)\n _setDays();\n});\n\nwatch(\n () => props.hoverValue,\n () => {\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // hover 仅影响范围预览(range-in/date-start/date-end),非 range 模式无需全量重算 42 格\n if (_selfTopBase.isRange) {\n _setDays();\n }\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setDays();\n});\n\nconst onPrevYear = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'years');\n};\n\nconst onPrevMonth = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'months');\n};\n\nconst onNextMonth = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'months');\n};\n\nconst onNextYear = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'years');\n};\n\nconst onView = (e: Event, viewType: 'years' | 'months') => {\n e.preventDefault();\n e.stopPropagation();\n emit('onChangeType', viewType);\n};\n\nconst onSelectDay = (e: Event, dayInfo: DayCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!dayInfo.isDisabled) {\n emit('onSelectDate', 'days', dayInfo);\n }\n};\n\nconst onHoverDay = (e: Event, dayInfo: DayCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!dayInfo.isDisabled) {\n emit('onHoverDate', 'days', dayInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th class=\"time-head time-head-month\">\n <span class=\"time-prev\"\n ><span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span\n class=\"datetime-switch-year\"\n @click=\"onView($event, 'years')\"\n >{{ optHead.titleYear }}</span\n >\n <span class=\"time-next\"\n ><span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"time-body-month\">\n <div>\n <span\n v-for=\"(m, mIdx) in optMonths\"\n :key=\"`${_keyIndex}-month-${mIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"m.isDisabled\"\n :class=\"m.cls\"\n @click=\"onSelectMonth($event, m)\"\n @keydown.enter.prevent=\"onSelectMonth($event, m)\"\n @keydown.space.prevent=\"onSelectMonth($event, m)\"\n @mouseover=\"onHoverMonth($event, m)\"\n >{{ m.month }}</span\n >\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface MonthCell {\n cls: string;\n month: string;\n isDisabled: boolean;\n value: number;\n}\n\ninterface PageData {\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\ndefineOptions({ name: 'ClCalendarsMonths' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onChangeType: (_value: 'years') => true, // desc: 切换视图类型时触发\n onSelectDate: (_layerView: 'months', _info: MonthCell) => true, // desc: 选中月份时触发\n onHoverDate: (_layerView: 'months', _info: MonthCell) => true, // desc: 悬停月份时触发\n onInitComplete: (_value: 'months') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中月份(月份格获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsMonths-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsMonths: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsMonths-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsmonths': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n titleYear: '',\n isNextYear: false,\n});\nconst optMonths = ref<MonthCell[]>([]);\n\nconst _pageData: PageData = {\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const titleYear = _pageData.viewDate.year();\n\n const prevYear = _pageData.viewDate.clone().subtract(1, 'years').endOf('year');\n const disabledPrevYear = _selfBase.checkDataMinMax(prevYear, 'month');\n\n const nextYear = _pageData.viewDate.clone().add(1, 'years').startOf('year');\n const disabledNextYear = _selfBase.checkDataMinMax(nextYear, 'month');\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.titleYear = `${titleYear}${optPageLanguage.value.year}`;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setMonths = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const date = _pageData.viewDate.clone();\n const focusDate = _selfBase.getFocusDate();\n const currentDate = _pageData.selectDate;\n const currentYear = date.year();\n const months: MonthCell[] = [];\n date\n .localeData()\n .monthsShort()\n .forEach((m: string, i: number) => {\n const useDate = _selfBase.getViewMin(currentYear, i);\n let isActive = !!(currentDate && useDate.isSame(currentDate, 'month'));\n let isFocused = !!(focusDate && useDate.isSame(focusDate, 'month'));\n const isDisabled = _selfBase.checkDataMinMax(useDate, 'month');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n isFocused = false;\n if (_pageData.hoverDate) {\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'month') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'month')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useDate.isSame(_pageData.startDate, 'month');\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn =\n isStart ||\n isEnd ||\n (useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month'));\n } else if (_pageData.startDate) {\n isStart = useDate.isSame(_pageData.startDate, 'month');\n isRangeIn = isStart || useDate.isSame(_pageData.hoverDate, 'month');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.hoverDate, 'month'));\n // 对齐日视图:hover 与 start 同月(单点区间预览态)时 end 高亮\n isEnd =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.startDate, 'month')) &&\n isStart;\n } else if (_pageData.endDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn = isEnd || useDate.isSame(_pageData.hoverDate, 'month');\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month'));\n // 对齐日视图:hover 与 end 同月(单点区间预览态)时起点也高亮\n isStart =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.endDate, 'month')) &&\n isEnd;\n }\n } else {\n isStart = !!(_pageData.startDate && useDate.isSame(_pageData.startDate, 'month'));\n if (_pageData.endDate && _pageData.startDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'month');\n isRangeIn =\n useDate.isAfter(_pageData.startDate, 'month') &&\n useDate.isBefore(_pageData.endDate, 'month');\n }\n }\n isActive = isStart || isEnd;\n }\n if (_selfTopBase.layerType === 'months') {\n isFocused = false;\n }\n const cls = CommonElement.getAddClass('month', {\n active: isActive && !isDisabled,\n focused: isFocused,\n disabled: isDisabled,\n 'date-start': isStart,\n 'date-end': isEnd,\n 'range-in': isRangeIn,\n });\n months.push({ cls, month: m, isDisabled, value: i });\n });\n optMonths.value = months;\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n if (!_pageData.viewDate) {\n return;\n }\n const newViewDate = _pageData.viewDate.clone()[operate](amount, type);\n emit('onChangeDate', newViewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'months');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段,\n// 否则先到达的 select/start/end watch 被 viewDate 空守卫丢弃后选中态永久丢失\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (\n type: keyof PageData,\n newValue: string | undefined,\n oldValue: string | undefined,\n) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 年份脏渲染\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _setHead();\n _setMonths();\n _emitInitComplete();\n }\n }\n};\n\nconst _initMain = () => {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n _setHead();\n _setMonths();\n\n _emitInitComplete();\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch(\n [() => props.selectValue, () => props.startValue, () => props.endValue, () => props.hoverValue],\n () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 null.clone() 崩溃\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算月份单元格样式(表头不依赖 select/start/end/hover 等 prop)\n _setMonths();\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setMonths();\n});\n\nconst onPrevYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 1, 'years');\n};\n\nconst onNextYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 1, 'years');\n};\n\nconst onView = (e: Event, viewType: 'years') => {\n e.preventDefault();\n e.stopPropagation();\n emit('onChangeType', viewType);\n};\n\nconst onSelectMonth = (e: Event, monthInfo: MonthCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!monthInfo.isDisabled) {\n emit('onSelectDate', 'months', monthInfo);\n }\n};\n\nconst onHoverMonth = (e: Event, monthInfo: MonthCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!monthInfo.isDisabled) {\n emit('onHoverDate', 'months', monthInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <table>\n <thead>\n <tr>\n <th class=\"time-head time-head-year\">\n <span class=\"time-prev\"\n ><span\n class=\"prev-year\"\n :title=\"optPageLanguage.prevYear10\"\n v-if=\"optHead.isPrevYear\"\n @click=\"onPrevYear\"\n ><cl-icon-font name=\"angle-left\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n <span>{{ optHead.titleYear }}</span>\n <span class=\"time-next\"\n ><span\n class=\"next-year\"\n :title=\"optPageLanguage.nextYear10\"\n v-if=\"optHead.isNextYear\"\n @click=\"onNextYear\"\n ><cl-icon-font name=\"angle-right\"></cl-icon-font\n ></span>\n <template v-else></template>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"time-body-year\">\n <span\n v-for=\"(y, yIdx) in optYears\"\n :key=\"`${_keyIndex}-${y.year}-${yIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"y.isDisabled\"\n :class=\"y.cls\"\n @click=\"onSelectYear($event, y)\"\n @keydown.enter.prevent=\"onSelectYear($event, y)\"\n @keydown.space.prevent=\"onSelectYear($event, y)\"\n @mouseover=\"onHoverYear($event, y)\"\n >{{ y.year }}</span\n >\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, ref, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, DateTimeBase } from './types';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface YearCell {\n cls: string;\n year: number;\n isDisabled: boolean;\n value: number;\n}\n\ninterface PageData {\n startYear: number;\n viewDate: ReturnType<typeof Dayjs> | null;\n selectDate: ReturnType<typeof Dayjs> | null;\n startDate: ReturnType<typeof Dayjs> | null;\n endDate: ReturnType<typeof Dayjs> | null;\n hoverDate: ReturnType<typeof Dayjs> | null;\n}\n\ndefineOptions({ name: 'ClCalendarsYears' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onChangeDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 视图日期变更时触发\n onSelectDate: (_layerView: 'years', _info: YearCell) => true, // desc: 选中年份时触发\n onHoverDate: (_layerView: 'years', _info: YearCell) => true, // desc: 悬停年份时触发\n onInitComplete: (_value: 'years') => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中年份(年份格获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nconst _selfBase = inject<DateTimeBase>('$DateTimeBase')!;\nif (!_selfTop || !_selfTopBase || !_selfBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsYears: 未找到 $DateTimeTop/$DateTimeTopBase/$DateTimeBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsYears-${CommonBase.getRandom(5)}`;\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsYears-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsyears': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optHead = reactive({\n isPrevYear: false,\n titleYear: '',\n isNextYear: false,\n});\nconst optYears = ref<YearCell[]>([]);\n\nconst _pageData: PageData = {\n startYear: 0,\n viewDate: null,\n selectDate: null,\n startDate: null,\n endDate: null,\n hoverDate: null,\n};\n\nconst _setHead = () => {\n if (!_pageData.viewDate) {\n return;\n }\n const titleYear = `${_pageData.startYear}-${_pageData.startYear + 9}`;\n\n const prevDate = _selfTop.getMomentDate({ year: _pageData.startYear - 1, month: 11 });\n const nextDate = _selfTop.getMomentDate({ year: _pageData.startYear + 10, month: 0 });\n const disabledPrevYear = prevDate\n ? _selfBase.checkDataMinMax(prevDate.endOf('month'), 'year')\n : false;\n const disabledNextYear = nextDate\n ? _selfBase.checkDataMinMax(nextDate.startOf('month'), 'year')\n : false;\n\n optHead.isPrevYear = !disabledPrevYear;\n optHead.titleYear = titleYear;\n optHead.isNextYear = !disabledNextYear;\n};\n\nconst _setYears = () => {\n const focusDate = _selfBase.getFocusDate();\n const currentDate = _pageData.selectDate;\n const years: YearCell[] = [];\n for (let i = -1; i < 11; i += 1) {\n const useYear = _pageData.startYear + i;\n const useDate = _selfBase.getViewMin(useYear);\n const isOld = i === -1;\n const isNew = i > 9;\n let isActive = currentDate ? useDate.isSame(currentDate, 'year') : false;\n let isFocused = !!(focusDate && useDate.isSame(focusDate, 'year'));\n const isDisabled = _selfBase.checkDataMinMax(useDate, 'year');\n let isStart = false;\n let isEnd = false;\n let isRangeIn = false;\n if (_selfTopBase.isRange) {\n isFocused = false;\n if (_pageData.hoverDate) {\n const hoverYear = parseInt(_pageData.hoverDate.format('YYYY'), 10);\n if (\n _pageData.startDate &&\n _pageData.endDate &&\n _pageData.startDate.isSame(_pageData.hoverDate, 'year') &&\n _pageData.hoverDate.isBefore(_pageData.endDate, 'year')\n ) {\n // 反向悬停:Range 翻转后 startValue=hover(早)、endValue=真实起点(晚),\n // 按 [startDate, endDate] 渲染完整区间(与提交后视觉一致:左端 startDate date-start、右端 endDate date-end)\n isStart = useYear === parseInt(_pageData.startDate.format('YYYY'), 10);\n isEnd = useYear === parseInt(_pageData.endDate.format('YYYY'), 10);\n isRangeIn =\n isStart ||\n isEnd ||\n (useYear > parseInt(_pageData.startDate.format('YYYY'), 10) &&\n useYear < parseInt(_pageData.endDate.format('YYYY'), 10));\n } else if (_pageData.startDate) {\n isStart = useYear === parseInt(_pageData.startDate.format('YYYY'), 10);\n isRangeIn = isStart || useYear === hoverYear;\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.startDate, 'year') &&\n useDate.isBefore(_pageData.hoverDate, 'year'));\n isEnd = false;\n } else if (_pageData.endDate) {\n isEnd = useYear === parseInt(_pageData.endDate.format('YYYY'), 10);\n isRangeIn = isEnd || useYear === hoverYear;\n isRangeIn =\n isRangeIn ||\n (useDate.isAfter(_pageData.hoverDate, 'year') &&\n useDate.isBefore(_pageData.endDate, 'year'));\n // 对齐日视图:hover 与 end 同年(单点区间预览态)时起点也高亮\n isStart =\n !!(_pageData.hoverDate && _pageData.hoverDate.isSame(_pageData.endDate, 'year')) &&\n isEnd;\n }\n } else {\n isStart = !!(_pageData.startDate && useDate.isSame(_pageData.startDate, 'year'));\n if (_pageData.endDate && _pageData.startDate) {\n isEnd = useDate.isSame(_pageData.endDate, 'year');\n isRangeIn =\n useDate.isAfter(_pageData.startDate, 'year') &&\n useDate.isBefore(_pageData.endDate, 'year');\n }\n }\n isActive = isStart || isEnd;\n }\n if (_selfTopBase.layerType === 'years') {\n isFocused = false;\n }\n const cls = CommonElement.getAddClass('year', {\n old: isOld,\n new: isNew,\n active: isActive && !isOld && !isNew,\n focused: isFocused,\n disabled: isDisabled,\n 'date-start': isStart && !isOld && !isNew,\n 'date-end': isEnd && !isOld && !isNew,\n 'range-in': isRangeIn && !isOld && !isNew,\n });\n years.push({ cls, year: useYear, isDisabled, value: useYear });\n }\n optYears.value = years;\n};\n\nconst _initOptions = () => {\n _pageData.startYear = Math.floor(_pageData.viewDate.year() / 10) * 10;\n _setHead();\n _setYears();\n};\n\nconst _setViewDate = (operate: 'subtract' | 'add', amount: number, type: string) => {\n // viewValue 初始无效时 viewDate 为 null(_initMain 短路),点击表头箭头前兜底保护\n if (!_pageData.viewDate) {\n return;\n }\n // 先推进本地 viewDate 再 emit:父组件异步回写 viewValue 时连点箭头基于新基点计算,不丢页\n _pageData.viewDate = _pageData.viewDate.clone()[operate](amount, type);\n _initOptions();\n emit('onChangeDate', _pageData.viewDate);\n};\n\n// onInitComplete 只发一次:_initMain(初始有值)或 _changeWatchValue 首次数值初始化(初始为空,异步补值)任一路径触发\nlet isInitComplete = false;\nconst _emitInitComplete = () => {\n if (!isInitComplete) {\n isInitComplete = true;\n nextTick(() => {\n emit('onInitComplete', 'years');\n });\n }\n};\n\n// 异步补值路径(viewValue 初始为空后到达):与 _initMain 对齐,同步其余 4 个日期字段\nconst _syncPageData = () => {\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n};\n\nconst _changeWatchValue = (\n type: keyof PageData,\n newValue: string | undefined,\n oldValue: string | undefined,\n) => {\n if (newValue !== oldValue) {\n const tempDate = _selfTop.getMomentDate(newValue);\n if (tempDate && tempDate.isValid()) {\n _pageData[type] = tempDate;\n _syncPageData();\n _initOptions();\n _emitInitComplete();\n } else {\n // viewValue 清空/无效:重置内部视图,避免「外部已清空、内部仍冻结在旧 10 年页」的脱节窗口\n _pageData.viewDate = null;\n _pageData.startYear = 0;\n optYears.value = [];\n optHead.isPrevYear = false;\n optHead.isNextYear = false;\n optHead.titleYear = '';\n }\n }\n};\n\nconst _initMain = () => {\n const viewDate = _selfTop.getMomentDate(props.viewValue);\n if (viewDate && viewDate.isValid()) {\n _pageData.viewDate = viewDate;\n _syncPageData();\n\n _initOptions();\n\n _emitInitComplete();\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, oldValue) => {\n _changeWatchValue('viewDate', newValue, oldValue);\n },\n);\n\nwatch(\n [() => props.selectValue, () => props.startValue, () => props.endValue, () => props.hoverValue],\n () => {\n // viewDate 未初始化(viewValue 初始为空)时跳过,避免 startYear 依赖空值\n if (!_pageData.viewDate) {\n return;\n }\n _pageData.selectDate = _selfTop.getMomentDate(props.selectValue);\n _pageData.startDate = _selfTop.getMomentDate(props.startValue);\n _pageData.endDate = _selfTop.getMomentDate(props.endValue);\n _pageData.hoverDate = _selfTop.getMomentDate(props.hoverValue);\n // 仅重算年份单元格样式(表头不依赖 select/start/end/hover 等 prop)\n _setYears();\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 动态变化:重算禁用格与表头箭头(checkDataMinMax 读取 _selfBase 闭包中的最新值)\n if (!_pageData.viewDate) {\n return;\n }\n _setHead();\n _setYears();\n});\n\nconst onPrevYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('subtract', 10, 'years');\n};\n\nconst onNextYear = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n _setViewDate('add', 10, 'years');\n};\n\nconst onSelectYear = (e: Event, yearInfo: YearCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!yearInfo.isDisabled) {\n emit('onSelectDate', 'years', yearInfo);\n }\n};\n\nconst onHoverYear = (e: Event, yearInfo: YearCell) => {\n e.preventDefault();\n e.stopPropagation();\n if (!yearInfo.isDisabled) {\n emit('onHoverDate', 'years', yearInfo);\n }\n};\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <div class=\"datetime-times-inner\"></div>\n <div>\n <div class=\"times-container\">\n <div\n class=\"times-overlay\"\n @click=\"onClickOverlay\"\n ></div>\n <div\n v-if=\"isShowCancel\"\n class=\"times-cancel\"\n :title=\"optPageLanguage.common.cancel\"\n @click=\"onCancel\"\n >\n <cl-icon-font name=\"close1\"></cl-icon-font>\n </div>\n <template v-else></template>\n <div\n v-if=\"isShowSubmit\"\n class=\"times-submit\"\n :title=\"optPageLanguage.common.submit\"\n @click=\"onSubmit\"\n >\n <cl-icon-font name=\"check1\"></cl-icon-font>\n </div>\n <template v-else></template>\n <div class=\"times-clock\">\n <div class=\"clock-nums\">\n <div\n v-for=\"(numInfo, nIdx) in optNum\"\n :key=\"`${_keyIndex}-clock-${nIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"numInfo.isDisabled\"\n :class=\"numInfo.cls\"\n @click=\"onClickNum(numInfo)\"\n @keydown.enter.prevent=\"onClickNum(numInfo)\"\n @keydown.space.prevent=\"onClickNum(numInfo)\"\n >\n {{ numInfo.num }}\n </div>\n </div>\n <div class=\"clock-pointer\">\n <div\n v-if=\"optOperate.hour\"\n :class=\"clsPointerHour\"\n @click=\"onClickPointer('hour')\"\n :style=\"{ transform: `rotate(${optRotate.hour + optRotate.hourMinute}deg)` }\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"optOperate.minute\"\n :class=\"clsPointerMinute\"\n @click=\"onClickPointer('minute')\"\n :style=\"{ transform: `rotate(${optRotate.minute + optRotate.minuteSecond}deg)` }\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"optOperate.second\"\n :class=\"clsPointerSecond\"\n @click=\"onClickPointer('second')\"\n :style=\"{ transform: `rotate(${optRotate.second}deg)` }\"\n ></div>\n <template v-else></template>\n </div>\n <div\n class=\"clock-am\"\n v-show=\"optBase.activePointer === 'hour'\"\n >\n <small\n role=\"button\"\n tabindex=\"0\"\n :class=\"clsAmAm\"\n @click=\"onClickAm('am')\"\n @keydown.enter.prevent=\"onClickAm('am')\"\n @keydown.space.prevent=\"onClickAm('am')\"\n >{{ optPageLanguage.am }}</small\n >\n <small\n role=\"button\"\n tabindex=\"0\"\n :class=\"clsAmPm\"\n @click=\"onClickAm('pm')\"\n @keydown.enter.prevent=\"onClickAm('pm')\"\n @keydown.space.prevent=\"onClickAm('pm')\"\n >{{ optPageLanguage.pm }}</small\n >\n </div>\n </div>\n </div>\n <div\n v-if=\"optOperate.hour\"\n :class=\"clsSetHour\"\n @click=\"onClickPointer('hour')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.hour\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.hourDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeHour\"\n :calculationOperateValueCallback=\"onAddSubNumHour\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n <div\n v-if=\"optOperate.minute && optOperate.minuteShowAddSub\"\n :class=\"clsSetMinute\"\n @click=\"onClickPointer('minute')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.minute\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.minuteDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeMinute\"\n :calculationOperateValueCallback=\"onAddSubNumMinute\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n <div\n v-if=\"optOperate.second\"\n :class=\"clsSetSecond\"\n @click=\"onClickPointer('second')\"\n >\n <cl-input-number-stepper\n v-model:value=\"optSelectValue.second\"\n size=\"small\"\n :isClean=\"false\"\n :disabled=\"optOperate.secondDisabled\"\n :isTextRead=\"true\"\n :fillZeroCount=\"2\"\n :isLoop=\"true\"\n btnTheme=\"upDown\"\n :operateBtnDownBeforeCallback=\"onClockSetBtnDownBeforeSecond\"\n :calculationOperateValueCallback=\"onAddSubNumSecond\"\n ></cl-input-number-stepper>\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, computed, ref, reactive } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClInputNumberStepper from '../../Element/InputNumberStepper/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ninterface ClockNum {\n num: number;\n cls: string;\n isDisabled: boolean;\n}\n\ndefineOptions({ name: 'ClCalendarsClocks' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n selectDay: String, // desc: 选中日期\n selectValue: String, // desc: 选中时间值\n minValue: String, // desc: 最小可选时间\n maxValue: String, // desc: 最大可选时间\n isShowPointer: {\n type: Boolean,\n default: true, // desc: 是否显示表盘指针\n },\n isShowSubmit: {\n type: Boolean,\n default: false, // desc: 是否显示确认按钮\n },\n isShowCancel: {\n type: Boolean,\n default: false, // desc: 是否显示取消按钮\n },\n isClickOverlay: {\n type: Boolean,\n default: false, // desc: 是否点击遮罩关闭\n },\n});\n\nconst emit = defineEmits({\n onSubmit: (_value: string) => true, // desc: 确认时间选择时触发\n onInitComplete: (_value: string) => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 数字选中 / AM-PM 切换(元素获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `calendarsClock-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsClocks: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\n// time 模式下的固定基准日期,与 Index.vue 中 _getValueEffective 保持一致\nconst _TIME_REFERENCE_DATE = '2000-01-01';\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsClock-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst optBase = reactive({\n isOpen: false,\n activePointer: 'hour',\n activeAm: 'am',\n});\nconst optOperate: Record<string, boolean> = reactive({\n hour: true,\n hourDisabled: false,\n minute: true,\n minuteDisabled: false,\n minuteShowAddSub: true,\n second: true,\n secondDisabled: false,\n});\nconst optRotate: Record<string, number> = reactive({\n hour: -90,\n hourMinute: 0,\n minute: -90,\n minuteSecond: 0,\n second: -90,\n});\nconst optSelectValue: Record<string, string> = reactive({\n hour: '00',\n minute: '00',\n second: '00',\n});\nconst optNum = ref<ClockNum[]>([]);\n\nconst _pageData: Record<string, any> = {\n selectDayDate: null,\n minDate: null,\n maxDate: null,\n timeAngle: { hour: 30, minute: 6, second: 6 },\n num: {\n hourAm: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n hourPm: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],\n minute: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],\n second: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],\n },\n origValue: {\n hour: '00',\n minute: '00',\n second: '00',\n },\n lastValue: {\n hour: '00',\n minute: '00',\n second: '00',\n },\n isCheckMin: false,\n checkMinDiff: null,\n min: {\n hour: 0,\n minute: 0,\n second: 0,\n },\n isCheckMax: false,\n checkMaxDiff: null,\n max: {\n hour: 0,\n minute: 0,\n second: 0,\n },\n};\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsclocks': true,\n 'datetime-times': true,\n };\n cls['times-open'] = optBase.isOpen;\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsPointerHour = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-hour': true };\n cls['pointer-active'] = optBase.activePointer === 'hour';\n cls['pointer-disabled'] = optOperate.hourDisabled;\n return cls;\n});\n\nconst clsPointerMinute = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-minute': true };\n cls['pointer-active'] = optBase.activePointer === 'minute';\n cls['pointer-disabled'] = optOperate.minuteDisabled;\n return cls;\n});\n\nconst clsPointerSecond = computed(() => {\n const cls: Record<string, boolean> = { 'pointer-second': true };\n cls['pointer-active'] = optBase.activePointer === 'second';\n cls['pointer-disabled'] = optOperate.secondDisabled;\n return cls;\n});\n\nconst clsAmAm = computed(() => {\n const cls: Record<string, boolean> = { 'am-am': true };\n cls['am-active'] = optBase.activeAm === 'am';\n return cls;\n});\n\nconst clsAmPm = computed(() => {\n const cls: Record<string, boolean> = { 'am-pm': true };\n cls['am-active'] = optBase.activeAm === 'pm';\n return cls;\n});\n\nconst clsSetHour = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-hour': true };\n cls['clock-set-active'] = optBase.activePointer === 'hour';\n cls['clock-set-disabled'] = optOperate.hourDisabled;\n return cls;\n});\n\nconst clsSetMinute = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-minute': true };\n cls['clock-set-active'] = optBase.activePointer === 'minute';\n cls['clock-set-disabled'] = optOperate.minuteDisabled;\n return cls;\n});\n\nconst clsSetSecond = computed(() => {\n const cls: Record<string, boolean> = { 'clock-set': true, 'clock-set-second': true };\n cls['clock-set-active'] = optBase.activePointer === 'second';\n cls['clock-set-disabled'] = optOperate.secondDisabled;\n return cls;\n});\n\nconst _updatePageDataByType = (type: string, value: any) => {\n _pageData[type] = _selfTop.getMomentDate(value);\n};\n\nconst _calculateSkipCount = (type: any) => {\n let valueOld = parseInt(_pageData.lastValue[type], 10);\n let valueNew = parseInt(optSelectValue[type], 10);\n let skip = 0;\n if (type === 'hour') {\n if (valueNew === 0 && valueOld === 23) {\n valueNew = 24;\n }\n if (valueOld === 0 && valueNew === 23) {\n valueOld = 24;\n }\n if (valueNew - valueOld > 6) {\n valueOld += 12;\n }\n if (valueOld - valueNew >= 6) {\n valueNew += 12;\n }\n skip = valueNew - valueOld;\n } else {\n if (valueNew - valueOld > 30) {\n valueOld += 60;\n }\n if (valueOld - valueNew >= 30) {\n valueNew += 60;\n }\n skip = valueNew - valueOld;\n }\n return skip;\n};\n\nconst _calculateRotate = (type: string) => {\n const skip = _calculateSkipCount(type);\n const angle = skip * _pageData.timeAngle[type];\n return optRotate[type] + (angle >= 360 ? angle % 360 : angle);\n};\n\nconst _setPointerRotate = () => {\n const hour = _calculateRotate('hour');\n const hourMinute =\n _pageData.timeAngle.hour * parseFloat((parseInt(optSelectValue.minute, 10) / 60).toString());\n const minute = _calculateRotate('minute');\n const minuteSecond =\n _pageData.timeAngle.second * parseFloat((parseInt(optSelectValue.second, 10) / 60).toString());\n const second = _calculateRotate('second');\n\n optRotate.hour = hour;\n optRotate.hourMinute = hourMinute;\n optRotate.minute = minute;\n optRotate.minuteSecond = minuteSecond;\n optRotate.second = second;\n};\n\nconst _getShowAm = (hh: string) => {\n return parseInt(hh, 10) < 12 ? 'am' : 'pm';\n};\n\nconst _compareNumPre = (type: string, minMax: string) => {\n let isRunPre = true;\n switch (type) {\n case 'hour':\n isRunPre = true;\n break;\n case 'minute':\n isRunPre = parseInt(optSelectValue.hour, 10) === _pageData[minMax].hour;\n break;\n case 'second':\n isRunPre =\n parseInt(optSelectValue.hour, 10) === _pageData[minMax].hour &&\n parseInt(optSelectValue.minute, 10) === _pageData[minMax].minute;\n break;\n default:\n break;\n }\n return isRunPre;\n};\n\n// 跨午夜时间范围(min.hour > max.hour,如 23:00~00:30 夜班配置):hour 合法值 = [min, 23] ∪ [0, max]\nconst _isCrossMidnight = () => {\n return (\n _pageData.isCheckMin &&\n _pageData.isCheckMax &&\n _pageData.checkMinDiff === 0 &&\n _pageData.checkMaxDiff === 0 &&\n _pageData.min.hour > _pageData.max.hour\n );\n};\n\nconst _checkNumDisabled = (type: string, num: number) => {\n let isDisabled = false;\n if (_isCrossMidnight() && type === 'hour') {\n // 跨午夜:hour 合法区间为 [min, 23] ∪ [0, max],区间外禁用\n isDisabled = num < _pageData.min[type] && num > _pageData.max[type];\n } else if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff === 0) {\n if (_compareNumPre(type, 'min')) {\n isDisabled = num < _pageData.min[type];\n }\n } else if (_pageData.checkMinDiff < 0) {\n isDisabled = true;\n }\n }\n if (!isDisabled && _pageData.isCheckMax) {\n if (_pageData.checkMaxDiff === 0) {\n if (_compareNumPre(type, 'max')) {\n isDisabled = num > _pageData.max[type];\n }\n } else if (_pageData.checkMaxDiff > 0) {\n isDisabled = true;\n }\n }\n return isDisabled;\n};\n\nconst _setClockNum = (type: string) => {\n let numType = type;\n if (numType === 'hour') {\n numType = optBase.activeAm === 'am' ? 'hourAm' : 'hourPm';\n }\n const isDisabled = optOperate[`${type}Disabled`];\n const nums: ClockNum[] = [];\n _pageData.num[numType].forEach((n: number, i: number) => {\n const item: ClockNum = { num: n, cls: 'clock-num', isDisabled: false };\n item.cls += ` clock-num${i + 1} `;\n item.isDisabled = isDisabled ? true : _checkNumDisabled(type, n);\n if (item.isDisabled) {\n item.cls += ' clock-nums-disabled ';\n }\n nums.push(item);\n });\n optNum.value = nums;\n};\n\nconst _setClock = (type: string) => {\n optBase.activePointer = type;\n if (type === 'hour') {\n optBase.activeAm = _getShowAm(optSelectValue.hour);\n }\n _setClockNum(type);\n};\n\nconst _isCheckDiff = (date: any) => {\n let diff = null;\n if (!CommonBase.isUndefined(date) && !CommonBase.isUndefined(_pageData.selectDayDate)) {\n const selectedDate = _pageData.selectDayDate.clone().format('YYYY-MM-DD 00:00:00');\n const tempDate = date.clone().format('YYYY-MM-DD 00:00:00');\n diff = _selfTop.Dayjs(selectedDate).diff(_selfTop.Dayjs(tempDate));\n }\n return diff;\n};\n\nconst _initOpenPointerRotate = (isRecordOrig = true) => {\n optRotate.hour = -90;\n optRotate.hourMinute = 0;\n optRotate.minute = -90;\n optRotate.minuteSecond = 0;\n optRotate.second = -90;\n _pageData.lastValue = { hour: '00', minute: '00', second: '00' };\n _setPointerRotate();\n nextTick(() => {\n const hh = optSelectValue.hour;\n const mm = optSelectValue.minute;\n const ss = optSelectValue.second;\n _pageData.lastValue = { hour: hh, minute: mm, second: ss };\n // 仅指针/初始化打开面板时记录恢复基准;加减按钮触发(关闭态先改值)不覆盖 origValue,避免取消失效\n if (isRecordOrig) {\n _pageData.origValue = { hour: hh, minute: mm, second: ss };\n }\n });\n};\n\nconst _setClockValue = (type: string, value: number) => {\n _pageData.lastValue.hour = optSelectValue.hour;\n _pageData.lastValue.minute = optSelectValue.minute;\n _pageData.lastValue.second = optSelectValue.second;\n optSelectValue[type] = CommonBase.getFillZero(value);\n _setPointerRotate();\n if (!props.isShowSubmit) {\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n }\n};\n\nconst _initValue = (value?: string) => {\n let HH = 0;\n let mm = 0;\n let ss = 0;\n if (!CommonBase.isEmpty(value)) {\n const day = (\n CommonBase.isEmpty(_pageData.selectDayDate) ? _selfTop.getNow() : _pageData.selectDayDate\n ).format('YYYY-MM-DD');\n const tempDate = _selfTop.getMomentDate(`${day} ${value}`);\n // isValid 校验:Invalid Date 实例(truthy 对象)穿透守卫会产生 NaN 时/分/秒脏值\n if (tempDate && tempDate.isValid()) {\n HH = tempDate.hour();\n mm = tempDate.minute();\n ss = tempDate.second();\n }\n }\n return { HH, mm, ss };\n};\n\nconst _initOption = () => {\n let isShowMinute = true;\n let isShowSecond = true;\n\n const isEmptySelectDate = CommonBase.isEmpty(_pageData.selectDayDate);\n const tempValueInfo = _initValue(props.selectValue);\n const HH = tempValueInfo.HH;\n const mm = tempValueInfo.mm;\n const ss = tempValueInfo.ss;\n\n switch (_selfTopBase.layerType) {\n case 'hours':\n isShowMinute = false;\n isShowSecond = false;\n break;\n case 'minutes':\n isShowSecond = false;\n break;\n case 'seconds':\n break;\n default:\n break;\n }\n _pageData.isCheckMin = !CommonBase.isUndefined(_pageData.minDate);\n if (_pageData.isCheckMin) {\n _pageData.checkMinDiff = _selfTop.checkIsTimes() ? 0 : _isCheckDiff(_pageData.minDate);\n _pageData.min = {\n hour: _pageData.minDate.hour(),\n minute: _pageData.minDate.minute(),\n second: _pageData.minDate.second(),\n };\n }\n _pageData.isCheckMax = !CommonBase.isUndefined(_pageData.maxDate);\n if (_pageData.isCheckMax) {\n _pageData.checkMaxDiff = _selfTop.checkIsTimes() ? 0 : _isCheckDiff(_pageData.maxDate);\n _pageData.max = {\n hour: _pageData.maxDate.hour(),\n minute: _pageData.maxDate.minute(),\n second: _pageData.maxDate.second(),\n };\n }\n\n const hhStr = CommonBase.getFillZero(HH);\n let mmStr = CommonBase.getFillZero(mm);\n let ssStr = CommonBase.getFillZero(ss);\n\n // isShowHour 恒为 true(小时始终显示),直接展开兜底逻辑\n if (!isShowMinute) {\n mmStr = '00';\n }\n if (!isShowSecond) {\n ssStr = '00';\n }\n _pageData.origValue = { hour: hhStr, minute: mmStr, second: ssStr };\n\n optOperate.hour = true;\n optOperate.minute = isShowMinute;\n optOperate.second = isShowSecond;\n\n optSelectValue.hour = hhStr;\n optSelectValue.minute = mmStr;\n optSelectValue.second = ssStr;\n\n if (!_selfTop.checkIsTimes()) {\n optOperate.hourDisabled = isEmptySelectDate;\n optOperate.minuteDisabled = isEmptySelectDate;\n optOperate.secondDisabled = isEmptySelectDate;\n }\n if (_selfTopBase.layerType === 'hours') {\n optOperate.minute = true;\n optOperate.minuteDisabled = true;\n optOperate.minuteShowAddSub = false;\n }\n // 重置指针基准(00 点 + -90 度)后同步显示:skip 按 00→新值计算绝对角度\n // (watch 路径先设 lastValue 为终值再 _setPointerRotate 会 skip=0 指针不动)\n _resetPointerBase();\n _syncClockDisplay();\n};\n\n// 重置指针基准:lastValue 置 00:00:00 + 角度重置 -90,使 _setPointerRotate 按 00→当前值算绝对角度\nconst _resetPointerBase = () => {\n _pageData.lastValue = { hour: '00', minute: '00', second: '00' };\n optRotate.hour = -90;\n optRotate.hourMinute = 0;\n optRotate.minute = -90;\n optRotate.minuteSecond = 0;\n optRotate.second = -90;\n};\n\n// 外部更新 selectValue/selectDay/minValue/maxValue 后同步表盘显示(指针角度/AM-PM/数字集合)\nconst _syncClockDisplay = () => {\n _setPointerRotate();\n optBase.activeAm = _getShowAm(optSelectValue.hour);\n _setClockNum(optBase.activePointer);\n};\n\nconst _initMain = () => {\n optBase.isOpen = props.isShowPointer;\n _updatePageDataByType(\n 'selectDayDate',\n _selfTop.checkIsTimes() ? _TIME_REFERENCE_DATE : props.selectDay,\n );\n _updatePageDataByType('minDate', _selfTop.getValueEffective(props.minValue));\n _updatePageDataByType('maxDate', _selfTop.getValueEffective(props.maxValue));\n _initOption();\n _setClock('hour');\n _initOpenPointerRotate();\n nextTick(() => {\n emit('onInitComplete', 'times');\n });\n};\n\nconst _onClockSetBtnDownBefore = (type: string) => {\n let isCheck = false;\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n if (optBase.isOpen) {\n isCheck = true;\n } else {\n // 加减触发打开:不覆盖 origValue(先改值后注册回调,覆盖会导致取消失效)\n _initOpenPointerRotate(false);\n optBase.isOpen = true;\n _setClock(type);\n }\n }\n return isCheck;\n};\n\nconst _onAddSubNum = (type: string, operate: string) => {\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n if (optBase.isOpen) {\n let isRun = true;\n let min = 0;\n let max = type === 'hour' ? 23 : 59;\n if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff === 0) {\n if (_compareNumPre(type, 'min')) {\n min = _pageData.min[type];\n }\n } else if (_pageData.checkMinDiff < 0) {\n isRun = false;\n }\n }\n if (_pageData.isCheckMax) {\n if (_pageData.checkMaxDiff === 0) {\n if (_compareNumPre(type, 'max')) {\n max = _pageData.max[type];\n }\n } else if (_pageData.checkMaxDiff > 0) {\n isRun = false;\n }\n }\n if (isRun) {\n const value = parseInt(optSelectValue[type], 10);\n let newValue = 0;\n if (_isCrossMidnight() && type === 'hour') {\n // 跨午夜:23 add → 0 循环、0 sub → 23 循环,其余越界值由 _checkNumDisabled 拦截\n newValue =\n operate === 'add' ? (value >= 23 ? 0 : value + 1) : value <= 0 ? 23 : value - 1;\n } else if (operate === 'add') {\n newValue = value < min ? min : value >= max ? min : value + 1;\n } else {\n newValue = value > max ? max : value <= min ? max : value - 1;\n }\n if (!_checkNumDisabled(type, newValue)) {\n _setClockValue(type, newValue);\n _setClock(type);\n }\n }\n }\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.selectDay,\n (newValue, _oldValue) => {\n _updatePageDataByType('selectDayDate', newValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.minValue,\n (newValue, _oldValue) => {\n const tempValue = _selfTop.getValueEffective(newValue);\n _updatePageDataByType('minDate', tempValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.maxValue,\n (newValue, _oldValue) => {\n const tempValue = _selfTop.getValueEffective(newValue);\n _updatePageDataByType('maxDate', tempValue);\n _initOption();\n },\n);\n\nwatch(\n () => props.selectValue,\n (newValue, _oldValue) => {\n const tempValueInfo = _initValue(newValue);\n const hhStr = CommonBase.getFillZero(tempValueInfo.HH);\n const mmStr = CommonBase.getFillZero(tempValueInfo.mm);\n const ssStr = CommonBase.getFillZero(tempValueInfo.ss);\n if (\n optSelectValue.hour !== hhStr ||\n optSelectValue.minute !== mmStr ||\n optSelectValue.second !== ssStr\n ) {\n optSelectValue.hour = hhStr;\n optSelectValue.minute = mmStr;\n optSelectValue.second = ssStr;\n // 同步取消恢复基准,避免外部 setValue 后取消回滚旧值\n _pageData.origValue = { hour: hhStr, minute: mmStr, second: ssStr };\n // 重置指针基准后同步显示:skip 按 00→新值计算绝对角度,避免指针停在旧位置\n _resetPointerBase();\n // 同步表盘指针/AM-PM/数字集合,避免面板打开时编程式 setValue 后显示与值脱节\n _syncClockDisplay();\n }\n },\n);\n\nconst onClickPointer = (type: string) => {\n if (optOperate[type] && !optOperate[`${type}Disabled`]) {\n _setClock(type);\n if (!optBase.isOpen) {\n _initOpenPointerRotate();\n optBase.isOpen = true;\n }\n }\n};\n\nconst onClickNum = (numInfo: ClockNum) => {\n if (!numInfo.isDisabled) {\n const type = optBase.activePointer;\n const lastValue = parseInt(optSelectValue[type], 10);\n const newValue = numInfo.num;\n if (newValue !== lastValue) {\n _setClockValue(type, newValue);\n }\n }\n};\n\nconst onClickAm = (type: 'am' | 'pm') => {\n optBase.activeAm = type;\n optBase.activePointer = 'hour';\n // AM/PM 切换同步换算小时值(03↔15),避免提交值与面板展示语义矛盾\n const hourNum = parseInt(optSelectValue.hour, 10);\n if (type === 'pm' && hourNum < 12) {\n optSelectValue.hour = CommonBase.getFillZero(hourNum + 12);\n } else if (type === 'am' && hourNum >= 12) {\n optSelectValue.hour = CommonBase.getFillZero(hourNum - 12);\n }\n _setPointerRotate();\n _setClockNum('hour');\n};\n\nconst onClockSetBtnDownBeforeHour = () => {\n return _onClockSetBtnDownBefore('hour');\n};\n\n// 返回真实边界状态,驱动 InputNumberStepper 的 add/sub 按钮置灰(此前恒 false,边界点击被静默拦截)\nconst _getBtnDisabled = (type: string) => {\n let subtractDisabled = false;\n let addDisabled = false;\n const isCross = _isCrossMidnight();\n if (_pageData.isCheckMin) {\n if (_pageData.checkMinDiff < 0) {\n // min 在未来(整日禁用):加减均禁用,避免静默拦截无反馈\n subtractDisabled = true;\n addDisabled = true;\n } else if (_pageData.checkMinDiff === 0) {\n const value = parseInt(optSelectValue[type], 10);\n if (_compareNumPre(type, 'min')) {\n // 跨午夜时 0 减 1 循环到 23 合法,仅等于边界值才禁用减\n subtractDisabled = isCross ? value === _pageData.min[type] : value <= _pageData.min[type];\n }\n }\n }\n if (_pageData.isCheckMax) {\n if (_pageData.checkMaxDiff > 0) {\n // max 在过去(整日禁用):加减均禁用\n subtractDisabled = true;\n addDisabled = true;\n } else if (_pageData.checkMaxDiff === 0) {\n const value = parseInt(optSelectValue[type], 10);\n if (_compareNumPre(type, 'max')) {\n // 跨午夜时 23 加 1 循环到 0 合法,仅等于边界值才禁用加\n addDisabled = isCross ? value === _pageData.max[type] : value >= _pageData.max[type];\n }\n }\n }\n return { subtractDisabled, addDisabled };\n};\n\nconst onAddSubNumHour = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('hour', valueInfo.type);\n }\n return { value: optSelectValue.hour, ..._getBtnDisabled('hour') };\n};\n\nconst onClockSetBtnDownBeforeMinute = () => {\n return _onClockSetBtnDownBefore('minute');\n};\n\nconst onAddSubNumMinute = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('minute', valueInfo.type);\n }\n return { value: optSelectValue.minute, ..._getBtnDisabled('minute') };\n};\n\nconst onClockSetBtnDownBeforeSecond = () => {\n return _onClockSetBtnDownBefore('second');\n};\n\nconst onAddSubNumSecond = (valueInfo: any) => {\n if (!CommonBase.isEmpty(valueInfo.type)) {\n _onAddSubNum('second', valueInfo.type);\n }\n return { value: optSelectValue.second, ..._getBtnDisabled('second') };\n};\n\nconst onClickOverlay = () => {\n // isOpen=false(提交后关闭)时 overlay 仍覆盖表盘,点击不应重复触发提交\n if (props.isClickOverlay && optBase.isOpen) {\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n }\n};\n\nconst onSubmit = () => {\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n emit('onSubmit', `${optSelectValue.hour}:${optSelectValue.minute}:${optSelectValue.second}`);\n};\n\nconst onCancel = () => {\n if (\n optSelectValue.hour !== _pageData.origValue.hour ||\n optSelectValue.minute !== _pageData.origValue.minute ||\n optSelectValue.second !== _pageData.origValue.second\n ) {\n _pageData.lastValue.hour = optSelectValue.hour;\n _pageData.lastValue.minute = optSelectValue.minute;\n _pageData.lastValue.second = optSelectValue.second;\n optSelectValue.hour = _pageData.origValue.hour;\n optSelectValue.minute = _pageData.origValue.minute;\n optSelectValue.second = _pageData.origValue.second;\n // 同步指针/AM-PM/数字集合,避免恢复值与表盘展示脱节(切过 PM 后取消恢复 am 值)\n _syncClockDisplay();\n }\n // times 模式下仅恢复原值不提交(原值已提交过),非 times 模式关闭面板\n if (!_selfTop.checkIsTimes()) {\n optBase.isOpen = false;\n }\n};\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-calendars-days\n v-if=\"optBase.currentView === 'days'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onChangeType=\"onChangeViewType\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-days>\n <cl-calendars-months\n v-else-if=\"optBase.currentView === 'months'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onChangeType=\"onChangeViewType\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-months>\n <cl-calendars-years\n v-else-if=\"optBase.currentView === 'years'\"\n :viewValue=\"optBase.viewValue\"\n :selectValue=\"optBase.selectValue\"\n :startValue=\"startValue\"\n :endValue=\"endValue\"\n :hoverValue=\"hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeDate=\"onChangeViewData\"\n @onSelectDate=\"onSelectDate\"\n @onHoverDate=\"onHoverDate\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-years>\n <template v-else></template>\n <div\n v-if=\"optClock.isShow || optClock.isViewDay\"\n :class=\"{ 'datetime-days-times': optClock.isViewDay }\"\n >\n <cl-calendars-clocks\n :selectDay=\"optBase.selectClockDay\"\n :selectValue=\"optBase.selectClockTime\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n :isShowPointer=\"optClock.isShowClockPointer\"\n :isShowSubmit=\"optClock.isShowClockSubmit\"\n :isShowCancel=\"optClock.isShowClockCancel\"\n :isClickOverlay=\"optClock.isClockClickOverlay\"\n @onSubmit=\"onSelectTime\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-clocks>\n </div>\n\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, inject, onMounted, nextTick, watch, reactive, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClCalendarsDays from './CalendarsDays.vue';\nimport ClCalendarsMonths from './CalendarsMonths.vue';\nimport ClCalendarsYears from './CalendarsYears.vue';\nimport ClCalendarsClocks from './CalendarsClock.vue';\n\ndefineOptions({ name: 'ClCalendarsBase' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n viewValue: String, // desc: 当前视图日期值\n selectValue: String, // desc: 当前选中日期值\n startValue: String, // desc: 范围选择开始值\n endValue: String, // desc: 范围选择结束值\n hoverValue: String, // desc: 悬停日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n onSelectDate: (_value: string) => true, // desc: 选中日期时触发\n onChangeViewValue: (_value: string) => true, // desc: 视图日期变更时触发\n onHoverDate: (_value: ReturnType<typeof Dayjs>) => true, // desc: 悬停日期时触发(payload 为 Dayjs 实例,由 _getSelectDateByElement 产出)\n onChangeViewType: (_value: string) => true, // desc: 视图类型变更时触发\n onSelectTime: (_value: string) => true, // desc: 选中时间时触发\n onInitComplete: (_value?: string) => true, // desc: 初始化完成时触发\n});\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClCalendarsBase: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n// 可选链防御:inject 缺失(脱离容器渲染)时 warn 已提示,避免 _selfTop.elId 直接 TypeError\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-calendarsBase-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-calendarsbase': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optBase = reactive({\n currentView: '',\n viewValue: '',\n selectValue: '',\n selectClockDay: '',\n selectClockTime: '',\n});\nconst optClock = reactive({\n isShow: false,\n isViewDay: false,\n isShowClockPointer: false,\n isShowClockSubmit: false,\n isShowClockCancel: false,\n isClockClickOverlay: false,\n});\n\nconst _pageData: Record<string, any> = {\n viewDate: null,\n selectDate: null,\n focusDate: null,\n minDate: null,\n maxDate: null,\n};\n\nconst _updatePageDataByType = (type: string, newValue: any) => {\n // 类型守卫:Symbol/带恶意 toString 的对象会在 dayjs 内部 new Date() 抛 TypeError\n // (Index._checkMinMax 消费同一 props 前经 _getValueEffective 净化,此处对齐)\n _pageData[type] = CommonBase.isString(newValue) ? _selfTop.getMomentDate(newValue) : null;\n};\n\n// 通用状态更新器:按 key 合并 state 到 optBase 或 _pageData\n// 注意:调用方传入 viewValue 时需同时传入 currentView,否则 onChangeViewValue 不会触发\ninterface UpdateState {\n currentView?: string;\n viewValue?: string;\n selectValue?: string;\n selectClockDay?: string;\n selectClockTime?: string;\n viewDate?: ReturnType<typeof Dayjs>;\n selectDate?: ReturnType<typeof Dayjs>;\n}\n\nconst _updateState = (state: UpdateState) => {\n const tempKey = Object.keys(state);\n if (CommonBase.isExistValue(tempKey, 'viewValue')) {\n if (_selfTopBase.layerView === state.currentView) {\n emit('onChangeViewValue', state.viewValue as string);\n }\n }\n tempKey.forEach((k: string) => {\n const key = k as keyof UpdateState;\n const value = state[key];\n if (CommonBase.isExistJsonKey(optBase, key) && (optBase as any)[key] !== value) {\n (optBase as any)[key] = value;\n }\n if (CommonBase.isExistJsonKey(_pageData, key)) {\n _pageData[key] = value;\n }\n });\n};\n\nconst _checkDataMinMax = (value: any, diffType?: string) => {\n let isIn = false;\n // 空值/无效输入直接放行:dayjs(undefined)=当前时间会误判,dayjs('')=Invalid Date 恒 false\n if (CommonBase.isEmpty(value) || CommonBase.isNaN(value)) {\n return isIn;\n }\n if (!CommonBase.isEmpty(_pageData.minDate)) {\n isIn = _selfTop.Dayjs(value).isBefore(_pageData.minDate, diffType);\n }\n if (!isIn && !CommonBase.isEmpty(_pageData.maxDate)) {\n isIn = _selfTop.Dayjs(value).isAfter(_pageData.maxDate, diffType);\n }\n return isIn;\n};\n\nconst _getViewMin = (y: number, m?: number) => {\n let newMonth = 0;\n let newDay = 1;\n if (!CommonBase.isEmpty(_pageData.minDate)) {\n const isMinYear = y === _pageData.minDate.year();\n let isMinMonth = true;\n if (CommonBase.isUndefined(m)) {\n newMonth = isMinYear ? _pageData.minDate.month() : 0;\n } else {\n isMinMonth = m === _pageData.minDate.month();\n newMonth = m as number;\n }\n newDay = isMinYear && isMinMonth ? _pageData.minDate.date() : 1;\n } else if (!CommonBase.isUndefined(m)) {\n newMonth = m as number;\n }\n // getMomentDate 可能返回 null(边界组合无效),兜底今年初保证接口非空契约\n return (\n _selfTop.getMomentDate({ year: y, month: newMonth, day: newDay }) ??\n _selfTop.getNow().startOf('year')\n );\n};\n\nconst _getNextView = (type: string) => {\n let nextView = '';\n switch (type) {\n case 'months':\n nextView = 'days';\n break;\n case 'years':\n nextView = 'months';\n break;\n default:\n // 末端视图(days)与未知类型:回到 days 视图\n nextView = 'days';\n break;\n }\n return nextView;\n};\n\nconst _getDateMergeHSM = (selectDate?: any) => {\n const newSelectDate = selectDate || _pageData.selectDate || _pageData.viewDate;\n const tempTime =\n newSelectDate.format('YYYY-MM-DD') +\n ' ' +\n (CommonBase.isEmpty(optBase.selectClockTime) ? '00:00:00' : optBase.selectClockTime);\n return _selfTop.Dayjs(tempTime);\n};\n\nconst _getSelectDateByElement = (layerView: string, info: any) => {\n const viewDate = _pageData.viewDate.clone();\n const value = parseInt(info.value, 10);\n if (CommonBase.isNaN(value)) {\n // info.value 非数字时兜底返回当前视图日期,避免 Invalid Date 字符串经 emit 传播\n return _getDateMergeHSM(viewDate);\n }\n let selectDate;\n switch (layerView) {\n case 'days': {\n let modifier = 0;\n if (info.isNew) {\n modifier = 1;\n } else if (info.isOld) {\n modifier = -1;\n }\n selectDate = viewDate.month(viewDate.month() + modifier).date(value);\n break;\n }\n case 'months': {\n const currentDate = _pageData.selectDate || viewDate;\n const targetMonth = viewDate.month(value);\n // 钳制日号:已选日号超过目标月天数时取月末,避免 dayjs .date(31) 溢出到下月\n selectDate = targetMonth.date(Math.min(currentDate.date(), targetMonth.daysInMonth()));\n break;\n }\n case 'years':\n selectDate = viewDate.month(0).date(1).year(value);\n break;\n default:\n selectDate = viewDate;\n break;\n }\n return _getDateMergeHSM(selectDate);\n};\n\nconst _initViewData = () => {\n optBase.viewValue = _pageData.viewDate.format(_selfTopBase.formatIn);\n _pageData.focusDate = _pageData.viewDate.clone();\n};\n\nconst _initSelectDate = (value: any) => {\n _updatePageDataByType('selectDate', value === '-1' ? '' : value);\n const selectDay = _pageData.selectDate ? _pageData.selectDate.format('YYYY-MM-DD') : '';\n optBase.selectValue = selectDay;\n optBase.selectClockDay = selectDay;\n optBase.selectClockTime = _pageData.selectDate ? _pageData.selectDate.format('HH:mm:ss') : '';\n};\n\nconst _initClock = () => {\n let isShow = false;\n let isViewDay = false;\n let isShowClockPointer = false;\n let isShowClockSubmit = false;\n let isShowClockCancel = false;\n let isClockClickOverlay = false;\n\n if (optBase.currentView === 'times') {\n isShow = true;\n isShowClockPointer = true;\n isClockClickOverlay = false;\n isShowClockSubmit = _selfTopBase.isDefault && _selfTopBase.isShowPopup;\n isShowClockCancel = _selfTopBase.isDefault && _selfTopBase.isShowPopup;\n if (_selfTopBase.layerType === 'hours') {\n isShowClockCancel = false;\n isShowClockSubmit = false;\n }\n } else {\n if (optBase.currentView === 'days') {\n isViewDay = _selfTopBase.timeType === 'datetime';\n if (isViewDay) {\n isShowClockCancel = true;\n isShowClockSubmit = true;\n isShowClockPointer = false;\n isClockClickOverlay = true;\n }\n }\n }\n optClock.isShow = isShow;\n optClock.isViewDay = isViewDay;\n optClock.isShowClockPointer = isShowClockPointer;\n optClock.isShowClockSubmit = isShowClockSubmit;\n optClock.isShowClockCancel = isShowClockCancel;\n optClock.isClockClickOverlay = isClockClickOverlay;\n};\n\nconst _initMain = () => {\n optBase.currentView = _selfTopBase.layerView;\n\n _pageData.viewDate = _selfTop.getViewDate(props.viewValue);\n _initViewData();\n\n _initSelectDate(props.selectValue);\n _updatePageDataByType('minDate', props.minValue);\n _updatePageDataByType('maxDate', props.maxValue);\n _initClock();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.viewValue,\n (newValue, _oldValue) => {\n _pageData.viewDate = _selfTop.getViewDate(newValue);\n _initViewData();\n },\n);\n\nwatch(\n () => props.selectValue,\n (newValue, _oldValue) => {\n const isRangeRun = _selfTopBase.isRange && newValue === '-1';\n let value = newValue;\n const lastClockTime = optBase.selectClockTime;\n if (isRangeRun) {\n value = '';\n }\n _initSelectDate(value);\n\n if (isRangeRun) {\n optBase.selectClockTime = lastClockTime;\n }\n },\n);\n\nwatch(\n () => props.minValue,\n (newValue, _oldValue) => {\n _updatePageDataByType('minDate', newValue);\n },\n);\n\nwatch(\n () => props.maxValue,\n (newValue, _oldValue) => {\n _updatePageDataByType('maxDate', newValue);\n },\n);\n\nconst onChangeViewData = (viewDate: ReturnType<typeof Dayjs>) => {\n _updateState({\n currentView: optBase.currentView,\n viewDate: viewDate.clone(),\n viewValue: viewDate.format(_selfTopBase.formatIn),\n });\n};\n\nconst onChangeViewType = (view: string) => {\n optBase.currentView = view;\n _pageData.focusDate = _pageData.viewDate.clone();\n _initClock();\n // 手动切换视图也触发变更事件(此前仅选中回切时 emit,上层 DateTimeDefault 的提交按钮显示会失步)\n emit('onChangeViewType', view);\n};\n\nconst onSelectDate = (layerView: string, info: any) => {\n const selectDate = _getSelectDateByElement(layerView, info);\n const selectValue = selectDate.format('YYYY-MM-DD');\n const updState: any = {};\n\n if (_selfTopBase.layerView === layerView) {\n updState.selectDate = selectDate;\n updState.selectValue = selectValue;\n if (!_selfTopBase.isRange) {\n updState.selectClockDay = selectValue;\n }\n _updateState(updState);\n emit('onSelectDate', selectValue);\n } else {\n const nextView = _getNextView(layerView);\n if (nextView === layerView) {\n // 末端视图(days)在非 days 配置下点击:按完成选中处理,避免视图切换死循环\n updState.selectDate = selectDate;\n updState.selectValue = selectValue;\n if (!_selfTopBase.isRange) {\n updState.selectClockDay = selectValue;\n }\n _updateState(updState);\n emit('onSelectDate', selectValue);\n return;\n }\n updState.viewDate = selectDate.clone().startOf('month');\n // 与 onChangeViewData 路径统一用 formatIn 格式化(datetime 模式含时间,避免 payload 格式漂移)\n updState.viewValue = updState.viewDate.format(_selfTopBase.formatIn);\n\n updState.currentView = nextView;\n _updateState(updState);\n _initClock();\n emit('onChangeViewType', updState.currentView);\n }\n};\n\nconst onHoverDate = (layerView: string, info: any) => {\n const hoverDate = _getSelectDateByElement(layerView, info);\n emit('onHoverDate', hoverDate);\n};\n\nconst onSelectTime = (value: string) => {\n _updateState({ selectClockTime: value });\n emit('onSelectTime', value);\n};\n\n// 视图往返切换会重建子面板:同一 type 的 onInitComplete 仅转发首次(上层一次性初始化语义)\nconst _emittedViewTypes = new Set<string>();\nconst onInitComplete = (type: string) => {\n if (_selfTopBase.layerView === type && !_emittedViewTypes.has(type)) {\n _emittedViewTypes.add(type);\n emit('onInitComplete', type);\n }\n};\n\nprovide('$DateTimeBase', {\n checkDataMinMax: _checkDataMinMax,\n getViewMin: _getViewMin,\n getFocusDate: () => {\n return _pageData.focusDate && _pageData.focusDate.clone();\n },\n});\n</script>\n","<template>\n <cl-calendars-base\n :class=\"clsParent\"\n :selectValue=\"value\"\n :viewValue=\"value\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onSelectDate=\"onChangeDate\"\n @onSelectTime=\"onChangeTime\"\n @onChangeViewType=\"onChangeViewType\"\n @onInitComplete=\"onInitComplete\"\n ></cl-calendars-base>\n <div\n v-if=\"optBase.isShowSubmit\"\n role=\"button\"\n :tabindex=\"optBase.isSubmitDisplay ? -1 : 0\"\n :aria-disabled=\"optBase.isSubmitDisplay\"\n :class=\"{ 'datetime-days-submit': true, 'days-submit-disabled': optBase.isSubmitDisplay }\"\n @click=\"onSubmit\"\n @keydown.enter.prevent=\"onSubmit\"\n @keydown.space.prevent=\"onSubmit\"\n >\n <span>{{ optPageLanguage.common.submit }}</span>\n </div>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, watch, reactive, computed } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase } from './types';\nimport ClCalendarsBase from './CalendarsBase.vue';\nimport useLanguage from '../../Use/language';\n\ndefineOptions({ name: 'ClDatetimeDefault' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n value: String, // desc: 绑定日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n});\n\nconst emit = defineEmits({\n // payload 为选中值解析后的 Dayjs 实例(_emitSelectValue 已判空,永不 emit null)\n onSelectValue: (_value: NonNullable<ReturnType<DateTimeTop['getMomentDate']>>) => true, // desc: 选中值变更时触发\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 提交(提交按钮获取焦点后生效)\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClDatetimeDefault: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst optBase = reactive({\n isShowSubmit: false,\n isSubmitDisplay: false,\n});\nconst optSelectValue = reactive({\n day: '',\n time: '',\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetimedefault': true,\n 'datetime-default': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\n// _changeCheckValue 在函数末尾统一覆盖 isSubmitDisplay,确保校验结果优先级最高\nconst _changeCheckValue = () => {\n const value = _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time);\n const checkInfo = _selfTop.checkValue(value);\n optBase.isSubmitDisplay = CommonBase.isEmpty(optSelectValue.day) || checkInfo.errMsg.length > 0;\n};\n\nconst _initShowSubmit = (viewType: string) => {\n // 不依赖 isShowPopup:内嵌(isDropdown=false)模式下 datetime 也显示提交按钮,\n // 否则内嵌 datetime 选中值无提交确认入口(onChangeTime 在 datetime 模式下已即时回传)\n let isShowSubmit = false;\n if (_selfTopBase.timeType === 'datetime') {\n isShowSubmit = viewType === 'days';\n }\n optBase.isShowSubmit = isShowSubmit;\n};\n\nconst _initSelectValue = (value?: string) => {\n let date = '';\n let time = '';\n let isSubmitDisplay = true;\n if (CommonBase.isNonEmptyString(value)) {\n const tempDate = _selfTop.getMomentDate(value);\n if (tempDate) {\n date = tempDate.format('YYYY-MM-DD');\n time = tempDate.format('HH:mm:ss');\n isSubmitDisplay = false;\n }\n }\n optSelectValue.day = date;\n optSelectValue.time = time;\n optBase.isSubmitDisplay = isSubmitDisplay;\n _changeCheckValue();\n};\n\nconst _initMain = () => {\n _initShowSubmit(_selfTopBase.layerView);\n _initSelectValue(props.value);\n};\n\n// 统一选中值回传:getMomentDate 可能返回 null(值无效),判空后 emit 避免调用方收到 null 崩溃\nconst _emitSelectValue = () => {\n const value = _selfTop.getMomentDate(\n _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time),\n );\n if (value) {\n emit('onSelectValue', value);\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n _initSelectValue(newValue);\n }\n },\n);\n\nwatch([() => props.minValue, () => props.maxValue], () => {\n // min/max 变化后重算校验,避免提交按钮禁用态过期(已选值可能因范围收窄越界)\n _changeCheckValue();\n});\n\nconst onChangeDate = (date: string) => {\n optSelectValue.day = date;\n _changeCheckValue();\n if (_selfTopBase.timeType === 'date') {\n _emitSelectValue();\n }\n};\n\nconst onChangeTime = (time: string) => {\n optSelectValue.time = time;\n _changeCheckValue();\n if (_selfTopBase.timeType === 'time') {\n _emitSelectValue();\n } else if (_selfTopBase.timeType === 'datetime' && !optBase.isSubmitDisplay) {\n // datetime 模式:时钟确认按钮点击即回传(需日期已选且校验通过),此前该路径静默无效\n _emitSelectValue();\n }\n};\n\nconst onChangeViewType = (type: string) => {\n _initShowSubmit(type);\n};\n\nconst onSubmit = () => {\n if (optBase.isShowSubmit && !optBase.isSubmitDisplay) {\n _emitSelectValue();\n }\n};\n\nconst onInitComplete = () => {\n emit('onInitComplete');\n};\n\nconst getValue = () => {\n const value = _selfTop.getMergeDayTime(optSelectValue.day, optSelectValue.time);\n return _selfTop.getMomentDate(value);\n};\n\n// 导出类型定义\nexport interface ClDatetimeDefaultExpose {\n // 返回选中值解析后的 Dayjs 实例;未选择/值无效时返回 null\n getValue: () => ReturnType<DateTimeTop['getMomentDate']>;\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n @mouseleave=\"onMouseLeave\"\n >\n <div class=\"calendar-range calendar-left\">\n <div class=\"calendar-text\">\n <div class=\"time-input-base\">\n <input\n class=\"form-control time-input\"\n type=\"text\"\n :readonly=\"true\"\n :value=\"optLeft.text\"\n :name=\"optLeft.name\"\n />\n <cl-icon-font\n name=\"calendar\"\n className=\"time-icon\"\n ></cl-icon-font>\n </div>\n </div>\n <div class=\"calendar-panel\">\n <cl-calendars-base\n :selectValue=\"optBase.selectCount === 2 ? optStart.value : '-1'\"\n :startValue=\"optBase.previewStart || optStart.value\"\n :endValue=\"optBase.previewEnd || optEnd.value\"\n :viewValue=\"optLeft.view\"\n :hoverValue=\"optBase.hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeViewValue=\"onLeftChangeView\"\n @onSelectDate=\"onLeftSelectDay\"\n @onSelectTime=\"onLeftSelectTime\"\n @onHoverDate=\"onLeftHoverDate\"\n ></cl-calendars-base>\n </div>\n </div>\n <div class=\"calendar-range calendar-right\">\n <div class=\"calendar-text\">\n <div class=\"time-input-base\">\n <input\n class=\"form-control time-input\"\n type=\"text\"\n :readonly=\"true\"\n :value=\"optRight.text\"\n :name=\"optRight.name\"\n />\n <cl-icon-font\n name=\"calendar\"\n className=\"time-icon\"\n ></cl-icon-font>\n </div>\n </div>\n <div class=\"calendar-panel\">\n <cl-calendars-base\n :selectValue=\"optBase.selectCount === 2 ? optEnd.value : '-1'\"\n :startValue=\"optBase.previewStart || optStart.value\"\n :endValue=\"optBase.previewEnd || optEnd.value\"\n :viewValue=\"optRight.view\"\n :hoverValue=\"optBase.hoverValue\"\n :minValue=\"minValue\"\n :maxValue=\"maxValue\"\n @onChangeViewValue=\"onRightChangeView\"\n @onSelectDate=\"onRightSelectDay\"\n @onSelectTime=\"onRightSelectTime\"\n @onHoverDate=\"onRightHoverDate\"\n ></cl-calendars-base>\n </div>\n </div>\n <div class=\"calendar-range calendar-quick\">\n <ul>\n <li\n v-for=\"(rInfo, rIdx) in optQuick\"\n :key=\"`${_keyIndex}-${rInfo.id}-${rIdx}`\"\n role=\"button\"\n tabindex=\"0\"\n :class=\"{\n active: rInfo.id === optBase.activeQuick,\n 'calendar-quick-special': rInfo.id === '-1',\n }\"\n @click=\"onChangeQuick(rInfo)\"\n @keydown.enter.prevent=\"onChangeQuick(rInfo)\"\n @keydown.space.prevent=\"onChangeQuick(rInfo)\"\n >\n {{ rInfo.text }}\n </li>\n </ul>\n <div\n v-if=\"optBase.isShowQuickBtn\"\n class=\"panel-quick-btn\"\n >\n <cl-button\n className=\"quick-submit\"\n :label=\"optPageLanguage.common.submit\"\n size=\"small\"\n :disabled=\"optBase.selectCount !== 2 || !optBase.isCheck\"\n @onClick=\"onQuickSubmit\"\n ></cl-button>\n <cl-button\n className=\"quick-cancel\"\n :label=\"optPageLanguage.common.cancel\"\n size=\"small\"\n color=\"grayLight\"\n @onClick=\"onQuickCancel\"\n ></cl-button>\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, onMounted, nextTick, reactive, ref, watch, computed } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonDay from '../../Common/day';\nimport CommonElement from '../../Common/Element/index';\nimport type { DateTimeTop, DateTimeTopBase, QuickItem } from './types';\nimport ClCalendarsBase from './CalendarsBase.vue';\nimport ClButton from '../../Element/Button/Index.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n\ndefineOptions({ name: 'ClDateTimeRange' });\n\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n startValue: String, // desc: 范围开始日期值\n endValue: String, // desc: 范围结束日期值\n minValue: String, // desc: 最小可选日期\n maxValue: String, // desc: 最大可选日期\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 快捷选项列表\n },\n});\n\nconst emit = defineEmits({\n onSubmit: (_value: { start: string; end: string }) => true, // desc: 确认范围选择时触发\n onCancel: () => true, // desc: 取消选择时触发\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n// kb: Enter/Space 选中快捷项(快捷列表获取焦点后生效)\n\n// elId 由父组件 Index.vue 注入派生,保证多实例场景下 DOM 查询限定唯一\nconst _keyIndex = `dateTimeRange-${CommonBase.getRandom(5)}`;\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst _selfTop = inject<DateTimeTop>('$DateTimeTop')!;\nconst _selfTopBase = inject<DateTimeTopBase>('$DateTimeTopBase')!;\nif (!_selfTop || !_selfTopBase) {\n // 脱离 ClDatetime 容器独立渲染时尽早暴露依赖缺失\n console.warn(\n 'ClDateTimeRange: 未找到 $DateTimeTop/$DateTimeTopBase 注入,请确保组件在 ClDatetime 组件树内使用',\n );\n}\n\nconst elId = _selfTop?.elId\n ? `${_selfTop.elId}-dateTimeRange-${CommonBase.getRandom(5)}`\n : undefined;\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetimerange': true,\n 'panel-range-calendar': true,\n // datetime-range 是共享 index.css 布局体系(.datetime-range .calendar-range 等),必须保留\n 'datetime-range': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst optBase = reactive({\n operateViewDataType: '',\n selectCount: 0,\n hoverValue: '',\n activeQuick: '',\n isCheck: true,\n // 内嵌 datetime 模式也显示提交按钮,避免「选完日期后时间无法选择、值无法回传」的死锁\n isShowQuickBtn: _selfTopBase.isShowPopup || _selfTopBase.timeType === 'datetime',\n previewStart: '',\n previewEnd: '',\n});\nconst optLeft = reactive({\n view: '',\n text: '',\n name: `input_${CommonBase.getRandom(8)}`,\n});\nconst optRight = reactive({\n view: '',\n text: '',\n name: `input_${CommonBase.getRandom(8)}`,\n});\nconst optStart = reactive({\n day: '',\n time: '',\n value: '',\n});\nconst optEnd = reactive({\n day: '',\n time: '',\n value: '',\n});\nconst optQuick = ref<QuickItem[]>([]);\n\nconst _getOtherViewValue = (value: string, type: string) => {\n const tempDate = _selfTop.getViewDate(value);\n const diff = _selfTopBase.layerView === 'years' ? 10 : 1;\n return tempDate[type](diff, optBase.operateViewDataType).format(_selfTopBase.formatIn);\n};\n\nconst _showDateFormatOut = (dateValue: string | ReturnType<typeof Dayjs>, formatType: string) => {\n if (CommonBase.isEmpty(dateValue)) {\n return '';\n }\n const newFormat = formatType === 'right' ? _selfTopBase.formatOutEnd : _selfTopBase.formatOut;\n if (CommonBase.isString(dateValue)) {\n const momentDate = _selfTop.getMomentDate(dateValue);\n return momentDate ? momentDate.format(newFormat) : '';\n }\n return dateValue.format(newFormat);\n};\n\nconst _setStartSelectValue = () => {\n const value = _selfTop.getMergeDayTime(optStart.day, optStart.time);\n optStart.value = value;\n optLeft.text = _showDateFormatOut(value, 'left');\n};\n\nconst _setEndSelectValue = () => {\n const value = _selfTop.getMergeDayTime(optEnd.day, optEnd.time);\n optEnd.value = value;\n optRight.text = _showDateFormatOut(value, 'right');\n};\n\nconst _setQuickActive = () => {\n if (optBase.selectCount === 2) {\n let active = '-1';\n if (\n !CommonBase.isEmpty(optStart.day) &&\n !CommonBase.isEmpty(optEnd.day) &&\n !CommonBase.isEmpty(optQuick.value)\n ) {\n const tempFormat = 'YYYY-MM-DD';\n let startDate = _selfTop.getMomentDate(optStart.day, tempFormat);\n let endDate = _selfTop.getMomentDate(optEnd.day, tempFormat);\n if (startDate && endDate) {\n switch (_selfTopBase.layerType) {\n case 'years':\n startDate = _selfTop.getMomentDate(\n startDate.startOf('year').format(tempFormat),\n tempFormat,\n );\n endDate = _selfTop.getMomentDate(endDate.endOf('year').format(tempFormat), tempFormat);\n if (!startDate || !endDate) {\n optBase.activeQuick = '-1';\n return;\n }\n break;\n case 'months':\n startDate = _selfTop.getMomentDate(\n startDate.startOf('month').format(tempFormat),\n tempFormat,\n );\n endDate = _selfTop.getMomentDate(endDate.endOf('month').format(tempFormat), tempFormat);\n if (!startDate || !endDate) {\n optBase.activeQuick = '-1';\n return;\n }\n break;\n default:\n break;\n }\n optQuick.value.forEach((info: QuickItem) => {\n if (\n info.start &&\n info.end &&\n startDate.isSame(CommonDay.getDayjsObject(info.start).format(tempFormat)) &&\n endDate.isSame(CommonDay.getDayjsObject(info.end).format(tempFormat))\n ) {\n active = info.id;\n }\n });\n }\n }\n optBase.activeQuick = active;\n }\n};\n\nconst _checkStartEnd = (data: any) => {\n const startValue = optStart.value;\n const endValue = optEnd.value;\n const isEmptyStart = CommonBase.isEmpty(startValue);\n const isEmptyEnd = CommonBase.isEmpty(endValue);\n const isStart = !isEmptyStart && isEmptyEnd;\n const isEnd = isEmptyStart && !isEmptyEnd;\n let isBefore = false;\n let isSame = false;\n if (data && (isStart || isEnd)) {\n const temp = _selfTop.getMomentDate(isStart ? startValue : endValue);\n if (temp) {\n isBefore = data.isBefore(temp, 'day');\n isSame = data.isSame(temp, 'day');\n }\n }\n return { isStart, isEnd, isBefore, isSame };\n};\n\nconst _setHoverDate = (hoverDate: any) => {\n if (optBase.selectCount === 1) {\n const hoverValue = hoverDate.format('YYYY-MM-DD');\n const startValue = optStart.day;\n const endValue = optEnd.day;\n const checkStartEnd = _checkStartEnd(hoverDate);\n optBase.hoverValue = hoverValue;\n // 预览态:仅更新预览 start/end 与文本,不修改真实选择状态\n // (原实现直接篡改 optStart/optEnd,且无 mouseout 恢复,移开后状态被永久污染导致数据丢失)\n let previewStart = '';\n let previewEnd = '';\n if (checkStartEnd.isBefore) {\n previewStart = hoverValue;\n previewEnd = checkStartEnd.isStart ? startValue : endValue;\n } else {\n previewStart = checkStartEnd.isEnd ? endValue : startValue;\n previewEnd = hoverValue;\n }\n optBase.previewStart = previewStart;\n optBase.previewEnd = previewEnd;\n optLeft.text = _showDateFormatOut(\n _selfTop.getMergeDayTime(previewStart, optStart.time),\n 'left',\n );\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(previewEnd, optEnd.time), 'right');\n }\n};\n\n// 状态机:0(无)→1(选start)→2(完整范围);case 2 再点击即重新开始选择\nconst _setSelectDay = (value: string) => {\n optBase.previewStart = '';\n optBase.previewEnd = '';\n switch (optBase.selectCount) {\n case 0:\n case 2: {\n optBase.selectCount = 1;\n // 重新选择开始时重置快捷高亮(_setQuickActive 仅在 selectCount===2 时重算)\n optBase.activeQuick = '';\n\n optStart.day = value;\n _setStartSelectValue();\n\n optEnd.day = '';\n optEnd.time = '';\n\n optEnd.value = '';\n\n // 结束端 time 一并重置,避免右侧输入框混入上次选择的时间段\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(value, ''), 'right');\n\n optBase.hoverValue = value;\n break;\n }\n case 1: {\n optBase.selectCount = 2;\n\n const selectedDate = _selfTop.getMomentDate(value);\n if (!selectedDate) {\n // 无效日期拒绝接受,回退到等待有效结束日选择\n optBase.selectCount = 1;\n break;\n }\n const checkStartEnd = _checkStartEnd(selectedDate);\n\n if (checkStartEnd.isSame) {\n optStart.day = value;\n _setStartSelectValue();\n\n optEnd.day = value;\n _setEndSelectValue();\n } else {\n if (checkStartEnd.isBefore) {\n // 新选值早于当前开始值:自动交换——新值作为开始,原开始作为结束\n optEnd.day = optStart.day;\n optEnd.time = optStart.time;\n optStart.day = value;\n _setStartSelectValue();\n _setEndSelectValue();\n } else {\n optEnd.day = value;\n _setEndSelectValue();\n }\n }\n\n optBase.hoverValue = '';\n break;\n }\n default:\n break;\n }\n\n if (optBase.selectCount === 2) {\n _setQuickActive();\n }\n};\n\n// 内联模式(无快捷提交按钮)且范围完整且校验通过时自动提交;datetime 内联因 isShowQuickBtn=true 走按钮提交\nconst _autoSubmit = () => {\n if (!optBase.isShowQuickBtn && optBase.selectCount === 2 && optBase.isCheck) {\n emit('onSubmit', { start: optStart.value, end: optEnd.value });\n }\n};\n\nconst _initValueStartEnd = (isStart: boolean, value?: string) => {\n const tempDate = _selfTop.getMomentDate(value);\n const day = tempDate ? tempDate.format('YYYY-MM-DD') : '';\n const time = tempDate ? tempDate.format('HH:mm:ss') : '';\n const text = tempDate ? _selfTop.getMergeDayTime(day, time) : '';\n if (isStart) {\n optStart.day = day;\n optStart.time = time;\n optStart.value = text;\n optLeft.text = _showDateFormatOut(text, 'left');\n } else {\n optEnd.day = day;\n optEnd.time = time;\n optEnd.value = text;\n optRight.text = _showDateFormatOut(text, 'right');\n }\n};\n\nconst _initOption = () => {\n let operateMomentType = '';\n switch (_selfTopBase.layerType) {\n case 'days':\n operateMomentType = 'months';\n break;\n case 'months':\n operateMomentType = 'years';\n break;\n case 'years':\n operateMomentType = 'years';\n break;\n default:\n operateMomentType = 'months';\n }\n optBase.operateViewDataType = operateMomentType;\n\n const startValue = props.startValue || '';\n const endValue = props.endValue || '';\n const isStart = !CommonBase.isEmpty(startValue);\n const isEnd = !CommonBase.isEmpty(endValue);\n optBase.selectCount = isStart && isEnd ? 2 : isStart || isEnd ? 1 : 0;\n\n optLeft.view = _selfTop.getViewDate(startValue).format(_selfTopBase.formatIn);\n\n optRight.view = _getOtherViewValue(optLeft.view, 'add');\n\n _initValueStartEnd(true, startValue);\n _initValueStartEnd(false, endValue);\n\n if (_selfTopBase.timeType === 'time') {\n optBase.selectCount = 2;\n const tempTimeValue = _selfTopBase.layerType === 'seconds' ? '00:00:00' : '00:00';\n if (CommonBase.isEmpty(optLeft.text)) {\n _initValueStartEnd(true, _selfTop.getValueEffective(tempTimeValue));\n }\n if (CommonBase.isEmpty(optRight.text)) {\n _initValueStartEnd(false, _selfTop.getValueEffective(tempTimeValue));\n }\n }\n\n _buildQuickList();\n};\n\n// 重建快捷列表:先判类型,再过滤非对象/缺 id 项([null]/[42] 会让模板 rInfo.id 崩溃)\nconst _buildQuickList = () => {\n let rangeQuick: QuickItem[] = [];\n if (CommonBase.isArray(props.rangeQuick)) {\n rangeQuick = CommonBase.getListClone(props.rangeQuick).filter(\n (item: any): item is QuickItem =>\n CommonBase.isObject(item) && CommonBase.isNonEmptyString(item.id),\n );\n if (rangeQuick.length > 0) {\n rangeQuick.push({ id: '-1', text: optPageLanguage.value.common.custom });\n }\n }\n optQuick.value = rangeQuick;\n};\n\nconst _initMain = () => {\n _initOption();\n _setQuickActive();\n // 双重 nextTick 确保左右两个日历面板都已完成初始化后再通知上层\n nextTick(() => {\n nextTick(() => {\n emit('onInitComplete');\n });\n });\n};\n\nconst _checkChangeValue = () => {\n if (optBase.selectCount === 2) {\n const checkInfo = _selfTop.checkValue(optStart.value, optEnd.value);\n optBase.isCheck = checkInfo.errMsg.length === 0;\n }\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch([() => props.startValue, () => props.endValue], ([newStart, newEnd]) => {\n // 外部更新 startValue/endValue(如调用 Index.setValue)后面板内状态同步刷新:\n // 值 + 状态机(selectCount)+ hover 残留清除 + 快捷高亮 + 校验重算\n _initValueStartEnd(true, newStart);\n _initValueStartEnd(false, newEnd);\n const isStart = !CommonBase.isEmpty(newStart);\n const isEnd = !CommonBase.isEmpty(newEnd);\n optBase.selectCount = isStart && isEnd ? 2 : isStart || isEnd ? 1 : 0;\n if (optBase.selectCount !== 2) {\n // selectCount 降级时重置快捷高亮,避免残留旧快捷项 id\n optBase.activeQuick = '';\n }\n optBase.hoverValue = '';\n optBase.previewStart = '';\n optBase.previewEnd = '';\n _setQuickActive();\n _checkChangeValue();\n});\n\nwatch(\n () => props.rangeQuick,\n () => {\n // 外部运行时更新 rangeQuick:仅重建快捷列表,不重跑 _initOption(避免覆盖用户已选值)\n if (!optBase.operateViewDataType) {\n return;\n }\n _buildQuickList();\n },\n);\n\n// 鼠标移出面板时清除 hover 预览与残留高亮,并恢复输入框文本为真实选择值\nconst onMouseLeave = () => {\n optBase.hoverValue = '';\n optBase.previewStart = '';\n optBase.previewEnd = '';\n optLeft.text = _showDateFormatOut(_selfTop.getMergeDayTime(optStart.day, optStart.time), 'left');\n optRight.text = _showDateFormatOut(_selfTop.getMergeDayTime(optEnd.day, optEnd.time), 'right');\n};\n\nconst onLeftChangeView = (value: string) => {\n optLeft.view = value;\n optRight.view = _getOtherViewValue(value, 'add');\n};\n\nconst onLeftSelectDay = (day: string) => {\n _setSelectDay(day);\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onLeftSelectTime = (time: string) => {\n optStart.time = time;\n _setStartSelectValue();\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onLeftHoverDate = (hoverDate: any) => {\n _setHoverDate(hoverDate);\n};\n\nconst onRightChangeView = (value: string) => {\n optLeft.view = _getOtherViewValue(value, 'subtract');\n optRight.view = value;\n};\n\nconst onRightSelectDay = (day: string) => {\n _setSelectDay(day);\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onRightSelectTime = (time: string) => {\n optEnd.time = time;\n _setEndSelectValue();\n _checkChangeValue();\n _autoSubmit();\n};\n\nconst onRightHoverDate = (hoverDate: any) => {\n _setHoverDate(hoverDate);\n};\n\nconst onChangeQuick = (info: QuickItem) => {\n if (info.id !== '-1') {\n if (CommonBase.isEmpty(info.start) || CommonBase.isEmpty(info.end)) {\n return;\n }\n const startObj = CommonDay.getDayjsObject(info.start);\n const endObj = CommonDay.getDayjsObject(info.end);\n // 无效日期(如 'abc')产出 Invalid Date 脏值,显式校验后拒绝,不依赖 checkMinMax 拦截\n if (!startObj.isValid() || !endObj.isValid()) {\n console.warn(`ClDateTimeRange: 快捷项 \"${info.text}\" 日期无效,已忽略`);\n return;\n }\n let start = startObj.format('YYYY-MM-DD');\n let end = endObj.format('YYYY-MM-DD');\n const checkInfo = _selfTop.checkMinMax(start, end, 'YYYY-MM-DD');\n\n if (!checkInfo.isStartMax || !checkInfo.isEndMin) {\n console.warn(`ClDateTimeRange: 快捷项 \"${info.text}\" 超出可选范围,已忽略`);\n return;\n }\n // 裁剪到 min/max 边界(isStartMax 和 isEndMin 已在外层确保为 true)\n if (!checkInfo.isStartMin) {\n start = checkInfo.minDay;\n }\n if (!checkInfo.isEndMax) {\n end = checkInfo.maxDay;\n }\n\n optStart.day = start;\n _setStartSelectValue();\n\n optEnd.day = end;\n _setEndSelectValue();\n\n optLeft.view = start;\n // 右面板定位到 end 所在月:自定义快捷项跨度超过 2 个月时 end 仍可见\n const endViewDate = CommonBase.isEmpty(end) ? null : _selfTop.getMomentDate(end);\n optRight.view = endViewDate\n ? endViewDate.startOf('month').format(_selfTopBase.formatIn)\n : _getOtherViewValue(start, 'add');\n\n optBase.hoverValue = '';\n // 清除 hover 预览残留(日历面板 hover 后直接点击快捷项不触发 onMouseLeave)\n optBase.previewStart = '';\n optBase.previewEnd = '';\n optBase.selectCount = 2;\n optBase.activeQuick = info.id;\n\n // 无条件重算校验:仅 datetime 分支重算会导致 date 模式 isCheck 陈旧(校验失败后无法恢复提交)\n _checkChangeValue();\n _autoSubmit();\n }\n};\n\nconst onQuickSubmit = () => {\n if (optBase.selectCount === 2 && optBase.isCheck) {\n emit('onSubmit', { start: optStart.value, end: optEnd.value });\n // 提交后重置校验状态:需重新选择才可再次提交,防连点重复 emit 相同 payload\n optBase.isCheck = false;\n }\n};\n\nconst onQuickCancel = () => {\n emit('onCancel');\n};\n\n// 返回范围选择原始值(start/end 为 day+time 合并后的完整日期时间字符串,如 \"2024-01-15 14:30:00\")\nconst getValue = () => {\n return { start: optStart.value, end: optEnd.value };\n};\n\n// 导出类型定义\nexport interface ClDateTimeRangeExpose {\n getValue: () => { start: string; end: string };\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <cl-datetime-default\n v-if=\"optIsValid && isDefault\"\n ref=\"refEl\"\n :value=\"start\"\n :minValue=\"minDate\"\n :maxValue=\"maxDate\"\n @onSelectValue=\"onSelectValue\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-default>\n <cl-date-time-range\n v-else-if=\"optIsValid && isRange\"\n ref=\"refEl\"\n :rangeQuick=\"rangeQuick\"\n :minValue=\"minDate\"\n :maxValue=\"maxDate\"\n :startValue=\"start\"\n :endValue=\"end\"\n @onSubmit=\"onSelectValue\"\n @onCancel=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-date-time-range>\n <template v-else></template>\n <ul\n v-if=\"optIsShowErrMsg\"\n class=\"datetime-errmsg\"\n role=\"alert\"\n >\n <li\n v-for=\"(emsg, eIdx) in errMsg\"\n :key=\"`${_keyIndex}-err-${eIdx}`\"\n >\n {{ emsg }}\n </li>\n </ul>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport type { DateTimeTop, QuickItem } from './types';\nimport ClDatetimeDefault from './DateTimeDefault.vue';\nimport ClDateTimeRange from './DateTimeRange.vue';\n\ndefineOptions({ name: 'ClDatetimeBase' });\n\nconst props = defineProps({\n isDefault: {\n type: Boolean,\n default: false, // desc: 是否默认(单选)模式\n },\n isRange: {\n type: Boolean,\n default: false, // desc: 是否范围选择模式\n },\n start: String, // desc: 开始日期值\n end: String, // desc: 结束日期值\n minDate: String, // desc: 最小可选日期\n maxDate: String, // desc: 最大可选日期\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 范围模式快捷选项列表\n },\n errMsg: {\n type: Array as () => string[],\n default: () => [], // desc: 错误消息列表\n },\n});\n\nconst emit = defineEmits({\n // default 模式 payload 为 Dayjs 实例;range 模式 payload 为 { start, end }——调用方按 isDefault/isRange 分支消费\n onSelectValue: (_value: ReturnType<typeof Dayjs> | { start: string; end: string }) => true, // desc: 选中值变更时触发\n onClose: () => true, // desc: 关闭面板时触发(仅 range 模式可达,default 模式无关闭事件来源)\n onInitComplete: () => true, // desc: 初始化完成时触发\n});\n\n// 模板 v-for key 前缀(errMsg 列表)\nconst _keyIndex = `clDatetimeBase-${CommonBase.getRandom(5)}`;\n\n// $DateTimeTop 由父组件 Index.vue 注入;缺失时提示挂载位置错误\nconst dateTimeTop = inject<DateTimeTop>('$DateTimeTop');\nif (!dateTimeTop) {\n console.warn('ClDateTimeBase: 未找到 $DateTimeTop 注入,请确保组件在 ClDatetime 组件树内使用');\n}\n// 注入缺失时不渲染子组件(子组件依赖注入非空断言,缺失会 TypeError 崩溃),并阻断 onInitComplete\nconst optIsValid = computed(() => !!dateTimeTop);\n\n// isDefault/isRange 互斥校验:两者同真同假均属误用,提示后由 Index 的 theme 兜底保证至少 default 分支可渲染\nif (props.isDefault === props.isRange) {\n console.warn(\n `ClDateTimeBase: isDefault(${props.isDefault}) 与 isRange(${props.isRange}) 必须恰好一个为 true`,\n );\n}\n\nconst refEl = ref<\n InstanceType<typeof ClDatetimeDefault> | InstanceType<typeof ClDateTimeRange> | null\n>(null);\n\n// isDefault/isRange 分支切换会重挂载子组件:onInitComplete 仅首次转发(父组件一次性初始化语义)\nlet isInitCompleteEmitted = false;\n\n// errMsg 为公开 Array prop,显式传 null 时 default 不生效,消费前判空防崩溃\nconst optIsShowErrMsg = computed(() => CommonBase.isArray(props.errMsg) && props.errMsg.length > 0);\n\nconst onSelectValue = (data: any) => {\n emit('onSelectValue', data);\n};\n\nconst onClose = () => {\n emit('onClose');\n};\n\nconst onInitComplete = () => {\n if (!isInitCompleteEmitted) {\n isInitCompleteEmitted = true;\n emit('onInitComplete');\n }\n};\n\nconst getValue = ():\n | ReturnType<typeof Dayjs>\n | null\n | string\n | { start?: string; end?: string } => {\n if (refEl.value) {\n return refEl.value.getValue();\n }\n // 面板未挂载(懒渲染/关闭即销毁):回退 props 值,保持与显示值一致,避免已选值丢失\n // default 模式与子组件挂载态返回值对齐(Dayjs 实例),未挂载且 props 不可解析时回退原串\n if (props.isDefault) {\n if (CommonBase.isNonEmptyString(props.start)) {\n return dateTimeTop?.getMomentDate(props.start) ?? props.start;\n }\n return null;\n }\n if (CommonBase.isNonEmptyString(props.start) || CommonBase.isNonEmptyString(props.end)) {\n return { start: props.start, end: props.end };\n }\n return '';\n};\n\n// 导出类型定义\nexport interface ClDateTimeBaseExpose {\n // 返回值形态:default 模式挂载态 Dayjs|null、未挂载态 Dayjs|string;range 模式 {start, end};均空 ''——调用方按模式判空消费\n getValue: () => ReturnType<typeof Dayjs> | null | string | { start?: string; end?: string };\n}\n\ndefineExpose({\n getValue,\n});\n</script>\n","<template>\n <cl-dropdownlayer-list\n v-if=\"isDropdown\"\n ref=\"refElDropdownLayer\"\n :id=\"elId\"\n :classParent=\"clsParent\"\n :classDropDown=\"clsDropdown\"\n :placeholder=\"placeholder\"\n :isDisabled=\"disabled\"\n :isClear=\"isClear\"\n :textLabel=\"optValue.showText\"\n :textArrowDirection=\"optArrowDirection\"\n :dropdownArrowPos=\"direction\"\n :isUseDropdownArrow=\"isUseDropdownArrow\"\n @onChangeOpen=\"onToggleOpen\"\n @onClear=\"onClearText\"\n >\n <template v-slot:textExtend>\n <cl-icon-font\n :name=\"optBase.timeType === 'time' ? 'clock' : 'calendar'\"\n className=\"datetime-icon\"\n aria-hidden=\"true\"\n ></cl-icon-font>\n </template>\n <template v-slot:dropdown>\n <cl-datetime-base\n ref=\"refElDatetime\"\n :isDefault=\"optBase.isDefault\"\n :isRange=\"optBase.isRange\"\n :start=\"optValue.start\"\n :end=\"optValue.end\"\n :minDate=\"minDate\"\n :maxDate=\"maxDate\"\n :rangeQuick=\"optBase.rangeQuick\"\n :errMsg=\"optBase.errMsg\"\n @onSelectValue=\"onSelectValue\"\n @onClose=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-base>\n </template>\n </cl-dropdownlayer-list>\n <div\n v-else\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-datetime-base\n v-if=\"optBase.isInit\"\n ref=\"refElDatetime\"\n :isDefault=\"optBase.isDefault\"\n :isRange=\"optBase.isRange\"\n :start=\"optValue.start\"\n :end=\"optValue.end\"\n :minDate=\"minDate\"\n :maxDate=\"maxDate\"\n :rangeQuick=\"optBase.rangeQuick\"\n :errMsg=\"optBase.errMsg\"\n @onSelectValue=\"onSelectValue\"\n @onClose=\"onClose\"\n @onInitComplete=\"onInitComplete\"\n ></cl-datetime-base>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, readonly, onMounted, nextTick, watch, computed, reactive, ref } from 'vue';\nimport Dayjs from 'dayjs';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport type { QuickItem } from './types';\nimport ClDropdownlayerList from '../DropdownLayer/List.vue';\nimport ClDatetimeBase from './DateTimeBase.vue';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport useLanguage from '../../Use/language';\n// 副作用导入:确保 dayjs 插件(isSameOrAfter 等)注册,消除对 DateTimeRange import 链的隐式依赖\nimport '../../Common/day';\nimport './index.css';\n\ndefineOptions({ name: 'ClDatetime' });\n\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n value: String, // desc: 绑定值,默认格式 YYYY-MM-DD,范围格式 start~end\n className: String, // desc: 自定义 CSS 类名\n placeholder: String, // desc: 占位文本\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n theme: {\n type: String,\n default: 'default',\n validator: (value: string) => ['default', 'range'].includes(value), // desc: 主题类型 | enum: default, range\n },\n layerType: {\n type: String,\n default: 'days',\n validator: (value: string) =>\n ['years', 'months', 'days', 'hours', 'minutes', 'seconds'].includes(value), // desc: 面板精度 | enum: years, months, days, hours, minutes, seconds\n },\n timeType: {\n type: String,\n default: 'date',\n validator: (value: string) => ['date', 'time', 'datetime'].includes(value), // desc: 时间类型 | enum: date, time, datetime\n },\n format: String, // desc: 自定义输出格式,不设则根据 layerType 推断:years→YYYY,months→YYYY-MM,days→YYYY-MM-DD,hours→HH:00,minutes→HH:mm,seconds→HH:mm:ss\n formatEnd: String, // desc: 范围模式结束值格式\n direction: {\n type: String,\n default: 'left', // desc: 弹出层三角箭头位置 | enum: left, right (可自定义)\n },\n minDate: String, // desc: 最小可选日期\n maxDate: String, // desc: 最大可选日期\n isClear: {\n type: Boolean,\n default: false, // desc: 是否显示清除按钮\n },\n rangeQuick: {\n type: Array as () => QuickItem[],\n default: () => [], // desc: 范围模式快捷选项,每项结构 { id, text, start, end },start/end 支持 Dayjs 或 string\n },\n isDropdown: {\n type: Boolean,\n default: true, // desc: 是否以下拉方式展示\n },\n themeStyle: {\n type: String,\n default: 'default',\n validator: (value: string) => ['default', 'noBorder'].includes(value), // desc: 主题样式 | enum: default, noBorder\n },\n arrowDirection: {\n type: String,\n default: 'right', // desc: 箭头在文本左侧还是右侧 | enum: left, right (可自定义)\n },\n isUseDropdownArrow: {\n type: Boolean,\n default: true, // desc: 是否显示弹出层三角箭头\n },\n checkCallback: Function, // desc: 校验回调,返回 false 阻止选择;default 模式参数为 Dayjs 实例,range 模式参数为 (start, end) 字符串\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string) => true, // desc: v-model 值更新时触发\n onChange: (_value: string, _info: ClDatetimeValueInfo) => true, // desc: 选中值变更时触发\n onInit: () => true, // desc: 组件初始化完成时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('dataTime');\n\nconst optKeyIndex = `datetime-${CommonBase.getRandom(8)}`;\nconst elId = props.id; // || `_elId_-${CommonBase.getRandom(8)}`\n\nconst refElDropdownLayer = ref<InstanceType<typeof ClDropdownlayerList>>();\nconst refElDatetime = ref<InstanceType<typeof ClDatetimeBase>>();\n\n// time 模式下时间值拼接的固定基准日期,避免跨天导致日期变化\nconst _TIME_REFERENCE_DATE = '2000-01-01';\n\nconst optBase = reactive({\n isInit: false,\n isDefault: props.theme !== 'range',\n isRange: props.theme === 'range',\n isShowPopup: props.isDropdown,\n timeType: '',\n layerType: props.layerType,\n layerView: '',\n formatIn: '',\n formatOut: '',\n formatOutEnd: '',\n rangeQuick: [] as any[],\n errMsg: [] as string[],\n});\nconst optValue = reactive({\n showText: '',\n start: '',\n end: '',\n});\n\nconst _pageData: any = {\n lastStart: '',\n lastEnd: '',\n};\n\nconst optArrowDirection = computed(() => {\n let direction = props.arrowDirection;\n if (CommonBase.isEmpty(direction)) {\n // 空串(显式传空)按主题降级:noBorder 默认左箭头,其余默认右箭头,避免空串传给子组件触发 validator 警告\n direction = props.themeStyle === 'noBorder' ? 'left' : 'right';\n }\n return direction;\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-datetime': true,\n 'box-width': true,\n };\n if (props.themeStyle === 'noBorder') {\n cls['datetime-themeStyle-noBorder'] = true;\n }\n // 空值(无选中文本)时撑满父容器,日历/时钟图标居右显示\n if (props.themeStyle === 'noBorder' && CommonBase.isEmpty(optValue.showText)) {\n cls['datetime-empty'] = true;\n }\n if (!props.isDropdown) {\n cls['datetime-noPopup'] = true;\n cls[`datetime-${props.theme}`] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n // 接收方 cl-dropdownlayer-list 的 classParent 只支持字符串,对象需转字符串后返回\n return CommonBase.getStringByJson(cls, ' ');\n});\n\nconst clsDropdown = computed(() => {\n return `datetime-dropdown datetime-${props.theme}`;\n});\n\n// 快捷选项工厂函数:每次调用重建 Dayjs 日期,避免跨天后「今天/昨天/本月」等选项过期\nconst _getRangeQuickDays = () => [\n { id: 'today', text: optPageLanguage.value.today, start: Dayjs(), end: Dayjs() },\n {\n id: 'yesterDay',\n text: optPageLanguage.value.yesterDay,\n start: Dayjs().subtract(1, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'pastDays7',\n text: optPageLanguage.value.pastDays7,\n start: Dayjs().subtract(7, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'pastDays30',\n text: optPageLanguage.value.pastDays30,\n start: Dayjs().subtract(30, 'day'),\n end: Dayjs().subtract(1, 'day'),\n },\n {\n id: 'mont',\n text: optPageLanguage.value.montCurrent,\n start: Dayjs().startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'montLast',\n text: optPageLanguage.value.montLast,\n start: Dayjs().subtract(1, 'month').startOf('month'),\n end: Dayjs().subtract(1, 'month').endOf('month'),\n },\n];\nconst _getRangeQuickMonths = () => [\n {\n id: 'mont',\n text: optPageLanguage.value.montCurrent,\n start: Dayjs().startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'montLast',\n text: optPageLanguage.value.montLast,\n start: Dayjs().subtract(1, 'month').startOf('month'),\n end: Dayjs().subtract(1, 'month').endOf('month'),\n },\n {\n id: 'montLately6',\n text: optPageLanguage.value.montLately6,\n start: Dayjs().subtract(5, 'month').startOf('month'),\n end: Dayjs().endOf('month'),\n },\n {\n id: 'year',\n text: optPageLanguage.value.yearCurrent,\n start: Dayjs().startOf('year'),\n end: Dayjs().endOf('year'),\n },\n {\n id: 'yearLast',\n text: optPageLanguage.value.yearLast,\n start: Dayjs().subtract(1, 'year').startOf('year'),\n end: Dayjs().subtract(1, 'year').endOf('year'),\n },\n];\nconst _getRangeQuickYears = () => [\n {\n id: 'year',\n text: optPageLanguage.value.yearCurrent,\n start: Dayjs().startOf('year'),\n end: Dayjs().endOf('year'),\n },\n {\n id: 'yearLast',\n text: optPageLanguage.value.yearLast,\n start: Dayjs().subtract(1, 'year').startOf('year'),\n end: Dayjs().subtract(1, 'year').endOf('year'),\n },\n];\n\nconst _getExportValue = (valueInfo: any): { value: string; info: ClDatetimeValueInfo } => {\n const isEmptyStart = CommonBase.isEmpty(valueInfo.start);\n const isEmptyEnd = CommonBase.isEmpty(valueInfo.end);\n // v-model 值用 formatIn(标准格式),保证回传时可解析\n const startIn = isEmptyStart ? '' : Dayjs(valueInfo.start).format(optBase.formatIn);\n const endIn = isEmptyEnd ? '' : Dayjs(valueInfo.end).format(optBase.formatIn);\n\n const value = optBase.isDefault\n ? startIn\n : isEmptyStart || isEmptyEnd\n ? ''\n : `${startIn}~${endIn}`;\n const json: ClDatetimeValueInfo = optBase.isDefault\n ? { value: startIn }\n : { start: startIn, end: endIn, value };\n return { value, info: json };\n};\n\nconst _setDropdownOpen = () => {\n if (refElDropdownLayer.value) {\n refElDropdownLayer.value.setOpen(false);\n }\n};\n\nconst _isCheckTypeTime = () => {\n return optBase.timeType === 'time';\n};\n\nconst _getValueEffective = (value?: string): string => {\n if (!value) {\n return '';\n }\n // 字符串守卫:trim 对非字符串执行 toString(),带恶意 toString 的对象会抛错\n const newValue = CommonBase.isString(value) ? CommonBase.trim(value) : '';\n if (!_isCheckTypeTime()) {\n return newValue;\n }\n // time 模式下:已是完整日期时间(含日期前缀)或日期串则不再重复拼接基准日期,避免双重拼接解析失败\n const isFullDate = /^\\d{4}-\\d{2}-\\d{2}/.test(newValue);\n return isFullDate ? newValue : `${_TIME_REFERENCE_DATE} ${newValue}`;\n};\n\nconst _getNow = () => {\n return Dayjs();\n};\n\nconst _getMomentDate = (value: any, format?: string): ReturnType<typeof Dayjs> | null => {\n let dateFormat: ReturnType<typeof Dayjs> | null = null;\n if (!CommonBase.isEmpty(value)) {\n const strFormat = CommonBase.isUndefined(format) ? optBase.formatIn : format;\n dateFormat = CommonBase.isString(value) ? Dayjs(value, strFormat) : Dayjs(value);\n if (dateFormat && !dateFormat.isValid()) {\n dateFormat = null;\n }\n }\n return dateFormat;\n};\n\nconst _getViewDate = (value: any) => {\n const viewDate = _getMomentDate(value);\n return CommonBase.isUndefined(viewDate) ? _getNow().startOf('month') : viewDate.startOf('month');\n};\n\nconst _checkMinMax = (start: string, end: string, format?: string) => {\n const newFormat = CommonBase.isEmpty(format) ? optBase.formatIn : format;\n let minDay = '';\n if (!CommonBase.isEmpty(props.minDate)) {\n const minDate = _getMomentDate(_getValueEffective(props.minDate));\n minDay = minDate ? minDate.format(newFormat) : '';\n }\n let maxDay = '';\n if (!CommonBase.isEmpty(props.maxDate)) {\n const maxDate = _getMomentDate(_getValueEffective(props.maxDate));\n maxDay = maxDate ? maxDate.format(newFormat) : '';\n }\n\n let isStartMin = true;\n let isStartMax = true;\n let isEndMin = true;\n let isEndMax = true;\n let isStartEnd = true;\n let isRangeEmpty = false;\n const isStartEmpty = CommonBase.isEmpty(start);\n const isEndEmpty = CommonBase.isEmpty(end);\n let diffType: any;\n switch (props.layerType) {\n case 'years':\n diffType = 'year';\n break;\n case 'months':\n diffType = 'month';\n break;\n case 'days':\n diffType = 'day';\n break;\n case 'hours':\n diffType = 'hour';\n break;\n case 'minutes':\n diffType = 'minute';\n break;\n case 'seconds':\n diffType = 'second';\n break;\n default:\n diffType = 'day';\n break;\n }\n if (!isStartEmpty) {\n const startDate = Dayjs(start);\n if (startDate.isValid()) {\n if (!CommonBase.isEmpty(minDay)) {\n isStartMin = startDate.isSameOrAfter(minDay, diffType);\n }\n if (!CommonBase.isEmpty(maxDay)) {\n isStartMax = startDate.isSameOrBefore(maxDay, diffType);\n }\n if (!isEndEmpty) {\n const endDate = Dayjs(end);\n if (endDate.isValid()) {\n if (!CommonBase.isEmpty(minDay)) {\n isEndMin = endDate.isSameOrAfter(minDay, diffType);\n }\n if (!CommonBase.isEmpty(maxDay)) {\n isEndMax = endDate.isSameOrBefore(maxDay, diffType);\n }\n if (endDate.isBefore(startDate)) {\n isStartEnd = false;\n }\n }\n }\n }\n }\n const errMsg = [];\n const preStart = optBase.isRange ? optPageLanguage.value.rangeStartLabel : '';\n if (!isStartMax) {\n errMsg.push(\n `${preStart}${optPageLanguage.value.checkStartMaxLabel}(${_getMomentDate(maxDay, newFormat)?.format(optBase.formatOut) ?? maxDay})`,\n );\n } else if (!isEndMin) {\n errMsg.push(\n `${optPageLanguage.value.checkEndMinLabel}(${_getMomentDate(minDay, newFormat)?.format(optBase.formatOut) ?? minDay})`,\n );\n } else {\n if (!isStartMin) {\n errMsg.push(\n `${preStart}${optPageLanguage.value.checkStartMinLabel}(${_getMomentDate(minDay, newFormat)?.format(optBase.formatOut) ?? minDay})`,\n );\n }\n if (!isEndMax) {\n errMsg.push(\n `${optPageLanguage.value.checkEndMaxLabel}(${_getMomentDate(maxDay, newFormat)?.format(optBase.formatOut) ?? maxDay})`,\n );\n }\n }\n if (optBase.isRange) {\n if (isStartEmpty || isEndEmpty) {\n isRangeEmpty = true;\n errMsg.push(optPageLanguage.value.checkRangeEmptyLabel);\n }\n if (!isStartEnd) {\n errMsg.push(optPageLanguage.value.checkStartEndLabel);\n }\n }\n return {\n isStartMin,\n isStartMax,\n isEndMin,\n isEndMax,\n isStartEnd,\n isRangeEmpty,\n errMsg,\n minDay,\n maxDay,\n };\n};\n\nconst _checkValue = (start: string, end?: string, format?: string) => {\n const checkInfo = _checkMinMax(start, end || '', format);\n optBase.errMsg = checkInfo.errMsg;\n if (refElDropdownLayer.value) {\n nextTick(() => {\n refElDropdownLayer.value?.calculationPosition();\n });\n }\n return checkInfo;\n};\n\n// 内置快捷选项工厂(按 layerType 分派),空数组/非数组误传时回退\nconst _getDefaultRangeQuick = (): QuickItem[] => {\n let rangeQuick: QuickItem[] = [];\n switch (props.layerType) {\n case 'days':\n case 'hours':\n case 'minutes':\n case 'seconds':\n rangeQuick = optBase.timeType === 'time' ? [] : _getRangeQuickDays();\n break;\n case 'months':\n rangeQuick = _getRangeQuickMonths();\n break;\n case 'years':\n rangeQuick = _getRangeQuickYears();\n break;\n default:\n break;\n }\n return rangeQuick;\n};\n\nconst _initRangeQuick = () => {\n let rangeQuick: QuickItem[] = [];\n if (optBase.isRange) {\n if (CommonBase.isArray(props.rangeQuick) && props.rangeQuick.length > 0) {\n // isArray 前置:非数组(对象/数字)展开会抛 \"not iterable\"\n rangeQuick = [...props.rangeQuick];\n } else {\n // 空数组/非数组误传:回退内置选项(保持兜底功能一致)\n rangeQuick = _getDefaultRangeQuick();\n }\n }\n optBase.rangeQuick = rangeQuick;\n};\n\nconst _checkPropEnums = () => {\n // 运行时枚举校验 + 中文警告(validator 内禁止 console,故放此处)\n if (!['default', 'range'].includes(props.theme)) {\n console.warn(`ClDatetime: theme 非法值 \"${props.theme}\",可选值 default/range`);\n }\n if (!['years', 'months', 'days', 'hours', 'minutes', 'seconds'].includes(props.layerType)) {\n console.warn(`ClDatetime: layerType 非法值 \"${props.layerType}\"`);\n }\n if (!['date', 'time', 'datetime'].includes(props.timeType)) {\n console.warn(`ClDatetime: timeType 非法值 \"${props.timeType}\"`);\n }\n if (!['default', 'noBorder'].includes(props.themeStyle)) {\n console.warn(`ClDatetime: themeStyle 非法值 \"${props.themeStyle}\"`);\n }\n};\n\nconst _initOption = () => {\n _checkPropEnums();\n let timeType = '';\n let formatOut = '';\n let layerView = '';\n switch (props.layerType) {\n case 'years':\n timeType = 'date';\n formatOut = 'YYYY';\n layerView = props.layerType;\n break;\n case 'months':\n timeType = 'date';\n formatOut = 'YYYY-MM';\n layerView = props.layerType;\n break;\n case 'days':\n timeType = 'date';\n formatOut = 'YYYY-MM-DD';\n layerView = props.layerType;\n break;\n case 'hours':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:00' : 'YYYY-MM-DD HH:00';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n case 'minutes':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:mm' : 'YYYY-MM-DD HH:mm';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n case 'seconds':\n timeType = props.timeType === 'date' ? 'datetime' : props.timeType;\n formatOut = timeType === 'time' ? 'HH:mm:ss' : 'YYYY-MM-DD HH:mm:ss';\n layerView = timeType === 'datetime' ? 'days' : 'times';\n break;\n default:\n timeType = 'date';\n formatOut = 'YYYY-MM-DD';\n layerView = props.layerType;\n break;\n }\n\n optBase.timeType = timeType;\n optBase.layerView = layerView;\n optBase.formatIn = timeType === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss';\n optBase.formatOut = CommonBase.isNonEmptyString(props.format) ? props.format : formatOut;\n optBase.formatOutEnd = CommonBase.isNonEmptyString(props.formatEnd) ? props.formatEnd : formatOut;\n};\n\nconst _initValue = (value?: string) => {\n let text = '';\n let start = '';\n let end = '';\n if (CommonBase.isNonEmptyString(value)) {\n if (optBase.isDefault) {\n const newValue = _getValueEffective(value);\n const tempDate = Dayjs(newValue);\n if (tempDate.isValid()) {\n start = tempDate.format(optBase.formatIn);\n text = tempDate.format(optBase.formatOut);\n }\n } else if (optBase.isRange) {\n const tempArr = value.split('~');\n if (tempArr.length === 2) {\n const newValue1 = _getValueEffective(tempArr[0]);\n const newValue2 = _getValueEffective(tempArr[1]);\n const startDate1 = Dayjs(newValue1);\n const endDate2 = Dayjs(newValue2);\n if (startDate1.isValid() && endDate2.isValid()) {\n start = startDate1.format(optBase.formatIn);\n end = endDate2.format(optBase.formatIn);\n text = `${startDate1.format(optBase.formatOut)} ~ ${endDate2.format(optBase.formatOutEnd)}`;\n }\n }\n }\n }\n optValue.start = start;\n optValue.end = end;\n optValue.showText = text;\n};\n\nconst _operateCheckCallback = (data: any) => {\n let isChange = true;\n if (props.checkCallback && !CommonBase.isEmpty(data)) {\n try {\n if (optBase.isDefault) {\n isChange = props.checkCallback(data);\n } else if (optBase.isRange) {\n isChange = props.checkCallback(data.start, data.end);\n }\n } catch (error) {\n // 用户回调异常不应中断选择流程:按不通过处理并提示\n console.warn('ClDatetime: checkCallback 回调执行异常,本次选择不生效', error);\n isChange = false;\n }\n isChange = CommonBase.isBoolean(isChange) ? isChange : true;\n }\n return isChange;\n};\n\nconst _operateSetSelectValue = (data: any) => {\n let text = '';\n let start = '';\n let end = '';\n\n let isChange = false;\n if (optBase.isDefault) {\n if (!CommonBase.isEmpty(data)) {\n const newValueDate = _getMomentDate(data);\n if (newValueDate) {\n start = newValueDate.format(optBase.formatIn);\n text = newValueDate.format(optBase.formatOut);\n }\n }\n isChange = start !== _pageData.lastStart;\n } else if (optBase.isRange) {\n if (\n !CommonBase.isEmpty(data) &&\n !CommonBase.isEmpty(data.start) &&\n !CommonBase.isEmpty(data.end)\n ) {\n const startDate = _getMomentDate(data.start);\n const endDate = _getMomentDate(data.end);\n\n if (startDate && endDate) {\n start = startDate.format(optBase.formatIn);\n end = endDate.format(optBase.formatIn);\n text = `${startDate.format(optBase.formatOut)} ~ ${endDate.format(optBase.formatOutEnd)}`;\n }\n }\n isChange = start !== _pageData.lastStart || end !== _pageData.lastEnd;\n }\n\n const checkInfo = _checkMinMax(start, end);\n let isCheck = false;\n if (checkInfo.errMsg.length === 0) {\n isCheck = _operateCheckCallback(data);\n }\n\n optBase.errMsg = checkInfo.errMsg;\n if (refElDropdownLayer.value) {\n nextTick(() => {\n refElDropdownLayer.value?.calculationPosition();\n });\n }\n return { start, end, text, isChange, checkInfo, isCheck };\n};\n\nconst _initMain = () => {\n _initOption();\n _initRangeQuick();\n _initValue(props.value);\n nextTick(() => {\n optBase.isInit = true;\n });\n};\n\nconst _getValueBase = () => {\n const data = refElDatetime.value?.getValue();\n let start = '';\n let end = '';\n if (optBase.isDefault) {\n if (!CommonBase.isEmpty(data)) {\n const newValueDate = _getMomentDate(data);\n if (newValueDate) {\n start = newValueDate.format(optBase.formatIn);\n }\n }\n } else if (optBase.isRange) {\n if (!CommonBase.isEmpty(data?.start) && !CommonBase.isEmpty(data?.end)) {\n const startDate = _getMomentDate(data.start);\n const endDate = _getMomentDate(data.end);\n if (startDate && endDate) {\n start = startDate.format(optBase.formatIn);\n end = endDate.format(optBase.formatIn);\n }\n }\n }\n // 纯查询路径:不写 optBase.errMsg、不重算下拉位置,避免查询方法污染界面状态\n return _getExportValue({ start, end });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n _initValue(newValue);\n // 同步选择快照,与 setValue 入口一致,避免下拉打开期间外部改值后重选旧值误判未变化\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n }\n },\n);\n\nwatch(\n () => props.isDropdown,\n newValue => {\n // 同步 isShowPopup,避免运行时动态切换 isDropdown 后 onInitComplete 分支错位\n optBase.isShowPopup = newValue;\n },\n);\n\nwatch(\n [\n () => props.theme,\n () => props.layerType,\n () => props.timeType,\n () => props.format,\n () => props.formatEnd,\n ],\n () => {\n // 快照参数运行时变更:重建初始化快照,避免内部状态与 props 脱节\n // theme 变化需同步 isDefault/isRange(_initOption 不重建这两个字段)\n optBase.isDefault = props.theme !== 'range';\n optBase.isRange = props.theme === 'range';\n _initOption();\n _initRangeQuick();\n _initValue(props.value);\n // 同步选择快照,避免 theme 切换后重选旧值 isChange 误判(与 watch value/setValue 一致)\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n },\n);\n\nconst onToggleOpen = (value: boolean) => {\n if (!props.disabled) {\n if (value) {\n optBase.errMsg = [];\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n // 每次打开下拉时重新计算快捷选项日期,避免跨天后\"今天\"等选项过期\n _initRangeQuick();\n }\n }\n};\n\nconst onClearText = () => {\n if (!props.disabled) {\n optValue.start = '';\n optValue.end = '';\n optValue.showText = '';\n // 同步选择快照,避免「选A→清除→再选A」时 isChange 误判为未变化导致 v-model 不回传\n _pageData.lastStart = '';\n _pageData.lastEnd = '';\n const data = _getExportValue(optValue);\n emit('update:value', data.value);\n emit('onChange', data.value, data.info);\n }\n};\n\nconst onSelectValue = (data: any) => {\n if (!props.disabled) {\n const { start, end, text, isChange, isCheck } = _operateSetSelectValue(data);\n if (isCheck) {\n optValue.start = start;\n optValue.end = end;\n optValue.showText = text;\n\n // 内联模式无 onToggleOpen 快照更新:选择后同步快照,避免重复选同值重复 emit(与下拉模式一致)\n _pageData.lastStart = start;\n _pageData.lastEnd = end;\n\n _setDropdownOpen();\n\n if (isChange) {\n const exportData = _getExportValue(optValue);\n emit('update:value', exportData.value);\n emit('onChange', exportData.value, exportData.info);\n }\n }\n }\n};\n\nconst onClose = () => {\n _setDropdownOpen();\n};\n\n// popup 模式每次打开下拉都会重新挂载面板触发 onInitComplete:onInit 仅首次触发(与内联模式一致)\nlet isInitEmitted = false;\nconst onInitComplete = () => {\n if (optBase.isShowPopup) {\n if (refElDropdownLayer.value) {\n if (!refElDropdownLayer.value.checkIsShowOpen()) {\n refElDropdownLayer.value.initCompleteOpen();\n }\n }\n }\n if (!isInitEmitted) {\n isInitEmitted = true;\n emit('onInit');\n }\n};\n\n// 向子组件树注入公共方法和 Dayjs 实例,避免逐层传递 props\n// 接口定义见 ./types.ts -> DateTimeTop\nprovide('$DateTimeTop', {\n keyIndex: optKeyIndex,\n elId: props.id,\n getMomentDate: _getMomentDate,\n getViewDate: _getViewDate,\n getNow: _getNow,\n checkIsTimes: _isCheckTypeTime,\n checkValue: _checkValue,\n checkMinMax: _checkMinMax,\n getValueEffective: _getValueEffective,\n getMergeDayTime: (day: string, time: string) => {\n let value = '';\n const newDay = CommonBase.isString(day) ? CommonBase.trim(day) : '';\n let newTime = CommonBase.isString(time) ? CommonBase.trim(time) : '';\n switch (optBase.timeType) {\n case 'date':\n value = newDay;\n break;\n case 'time':\n value = _getValueEffective(newTime) || '';\n break;\n case 'datetime':\n if (!CommonBase.isEmpty(newDay)) {\n newTime = CommonBase.isEmpty(time) ? '00:00:00' : newTime;\n value = `${newDay} ${newTime}`;\n }\n break;\n default:\n break;\n }\n return value;\n },\n Dayjs: Dayjs,\n});\n\nprovide('$DateTimeTopBase', readonly(optBase));\n\nconst getValue = () => {\n // 时序契约:onInit 完成前调用(面板未挂载)返回 '',调用方依赖 onInit 确定可读时机\n const data = _getValueBase();\n return data.value;\n};\n\nconst getValueData = () => {\n const data = _getValueBase();\n return data.info;\n};\n\nconst setValue = (value?: string) => {\n // 编程式设置仅更新内部显示与快照,不回传 update:value/onChange(受控模式下由父组件同步 value)\n _initValue(value);\n // 同步选择快照,避免「setValue(A)→再选A」时 isChange 误判为未变化\n _pageData.lastStart = optValue.start;\n _pageData.lastEnd = optValue.end;\n};\n\n// 导出值结构:default 模式 { value };range 模式 { start, end, value }\nexport interface ClDatetimeValueInfo {\n value: string;\n start?: string;\n end?: string;\n}\n\nexport interface ClDatetimeExpose {\n getValue: () => string;\n getValueData: () => ClDatetimeValueInfo;\n setValue: (value?: string) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_selfTop","inject","_selfTopBase","_selfBase","_keyIndex","CommonBase","elId","clsParent","computed","cls","CommonElement","optHead","reactive","optWeeks","ref","optDays","_pageData","_setHead","titleYear","titleMonth","prevYear","disabledPrevYear","prevMonth","disabledPrevMonth","nextMonth","disabledNextMonth","nextYear","disabledNextYear","_setWeek","locale","days","first","dow","d","i","_setDays","date","currentDate","currentYear","currentMonth","useDate","weeks","loopDate","loopValue","isOld","isNew","isActive","isDisabled","isStart","isEnd","isRangeIn","_setViewDate","operate","amount","type","newViewDate","isInitComplete","_emitInitComplete","nextTick","_syncPageData","_changeWatchValue","newValue","oldValue","tempDate","_initMain","viewDate","onMounted","watch","onPrevYear","e","onPrevMonth","onNextMonth","onNextYear","onView","viewType","onSelectDay","dayInfo","onHoverDay","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_hoisted_3","_createVNode","ClIconFont","_Fragment","_cache","$event","_toDisplayString","_hoisted_6","_openBlock","_renderList","w","wIdx","wd","wdIdx","dIdx","_normalizeClass","_hoisted_9","optMonths","_setMonths","focusDate","months","m","isFocused","onSelectMonth","monthInfo","onHoverMonth","_hoisted_5","_hoisted_7","mIdx","_hoisted_8","optYears","prevDate","nextDate","_setYears","years","useYear","hoverYear","_initOptions","onSelectYear","yearInfo","onHoverYear","y","yIdx","_TIME_REFERENCE_DATE","optBase","optOperate","optRotate","optSelectValue","optNum","clsPointerHour","clsPointerMinute","clsPointerSecond","clsAmAm","clsAmPm","clsSetHour","clsSetMinute","clsSetSecond","_updatePageDataByType","value","_calculateSkipCount","valueOld","valueNew","skip","_calculateRotate","angle","_setPointerRotate","hour","hourMinute","minute","minuteSecond","second","_getShowAm","hh","_compareNumPre","minMax","isRunPre","_isCrossMidnight","_checkNumDisabled","num","_setClockNum","numType","nums","n","item","_setClock","_isCheckDiff","diff","selectedDate","_initOpenPointerRotate","isRecordOrig","mm","ss","_setClockValue","_initValue","HH","day","_initOption","isShowMinute","isShowSecond","isEmptySelectDate","tempValueInfo","hhStr","mmStr","ssStr","_resetPointerBase","_syncClockDisplay","_onClockSetBtnDownBefore","isCheck","_onAddSubNum","isRun","min","max","_oldValue","tempValue","onClickPointer","onClickNum","numInfo","lastValue","onClickAm","hourNum","onClockSetBtnDownBeforeHour","_getBtnDisabled","subtractDisabled","addDisabled","isCross","onAddSubNumHour","valueInfo","onClockSetBtnDownBeforeMinute","onAddSubNumMinute","onClockSetBtnDownBeforeSecond","onAddSubNumSecond","onClickOverlay","onSubmit","onCancel","nIdx","_withKeys","_withModifiers","_normalizeStyle","_withDirectives","_vShow","ClInputNumberStepper","optClock","_updateState","state","tempKey","k","key","_checkDataMinMax","diffType","isIn","_getViewMin","newMonth","newDay","isMinYear","isMinMonth","_getNextView","nextView","_getDateMergeHSM","selectDate","tempTime","_getSelectDateByElement","layerView","info","modifier","targetMonth","_initViewData","_initSelectDate","selectDay","_initClock","isShow","isViewDay","isShowClockPointer","isShowClockSubmit","isShowClockCancel","isClockClickOverlay","isRangeRun","lastClockTime","onChangeViewData","onChangeViewType","view","onSelectDate","selectValue","updState","onHoverDate","hoverDate","onSelectTime","_emittedViewTypes","onInitComplete","provide","_createBlock","ClCalendarsDays","ClCalendarsMonths","ClCalendarsYears","ClCalendarsClocks","_changeCheckValue","checkInfo","_initShowSubmit","isShowSubmit","_initSelectValue","time","isSubmitDisplay","_emitSelectValue","onChangeDate","onChangeTime","__expose","ClCalendarsBase","optLeft","optRight","optStart","optEnd","optQuick","_getOtherViewValue","_showDateFormatOut","dateValue","formatType","newFormat","momentDate","_setStartSelectValue","_setEndSelectValue","_setQuickActive","active","tempFormat","startDate","endDate","CommonDay","_checkStartEnd","data","startValue","endValue","isEmptyStart","isEmptyEnd","isBefore","isSame","temp","_setHoverDate","hoverValue","checkStartEnd","previewStart","previewEnd","_setSelectDay","_autoSubmit","_initValueStartEnd","text","operateMomentType","tempTimeValue","_buildQuickList","rangeQuick","_checkChangeValue","newStart","newEnd","onMouseLeave","onLeftChangeView","onLeftSelectDay","onLeftSelectTime","onLeftHoverDate","onRightChangeView","onRightSelectDay","onRightSelectTime","onRightHoverDate","onChangeQuick","startObj","endObj","start","end","endViewDate","onQuickSubmit","onQuickCancel","_hoisted_4","_hoisted_11","_hoisted_12","rInfo","rIdx","_hoisted_13","_hoisted_14","ClButton","dateTimeTop","optIsValid","refEl","isInitCompleteEmitted","optIsShowErrMsg","onSelectValue","onClose","ClDatetimeDefault","ClDateTimeRange","_hoisted_1","emsg","eIdx","optKeyIndex","refElDropdownLayer","refElDatetime","optValue","optArrowDirection","direction","clsDropdown","_getRangeQuickDays","Dayjs","_getRangeQuickMonths","_getRangeQuickYears","_getExportValue","startIn","endIn","json","_setDropdownOpen","_isCheckTypeTime","_getValueEffective","_getNow","_getMomentDate","format","dateFormat","strFormat","_getViewDate","_checkMinMax","minDay","minDate","maxDay","maxDate","isStartMin","isStartMax","isEndMin","isEndMax","isStartEnd","isRangeEmpty","isStartEmpty","isEndEmpty","errMsg","preStart","_checkValue","_getDefaultRangeQuick","_initRangeQuick","_checkPropEnums","timeType","formatOut","tempArr","newValue1","newValue2","startDate1","endDate2","_operateCheckCallback","isChange","error","_operateSetSelectValue","newValueDate","_getValueBase","onToggleOpen","onClearText","exportData","isInitEmitted","newTime","readonly","ClDropdownlayerList","ClDatetimeBase"],"mappings":"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"}