@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.
- package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.js +5 -0
- package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
- package/buildLibs/utils/Element/ClImage.cjs +1 -1
- package/buildLibs/utils/Element/ClImage.js +1 -1
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.js +5 -0
- package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
- package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.js +5 -0
- package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
- package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
- package/buildLibs/utils/Mobile/ClBanner.js +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
- package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPicker.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
- 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
- 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
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
- 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
- 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
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
- 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
- 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
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/buildLibs/utils/Shared/Index24.css +1 -1
- package/buildLibs/utils/Shared/Index25.css +1 -1
- package/buildLibs/utils/Shared/Index26.css +1 -1
- package/buildLibs/utils/Shared/Index27.css +1 -1
- package/buildLibs/utils/Shared/Index28.css +1 -1
- package/buildLibs/utils/Shared/Index29.css +1 -1
- package/buildLibs/utils/Shared/Index30.css +1 -1
- package/buildLibs/utils/Shared/Index31.css +1 -1
- package/buildLibs/utils/Shared/Index32.css +1 -1
- package/buildLibs/utils/Shared/Index33.css +1 -1
- package/buildLibs/utils/Shared/Index34.css +1 -1
- package/buildLibs/utils/Shared/Index35.css +1 -1
- package/buildLibs/utils/Shared/Index36.css +1 -1
- package/buildLibs/utils/Shared/Index37.css +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
- package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
- package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
- package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
- package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
- package/buildLibs/utils/Web/ClDatetime.js +1 -1
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
- package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
- package/buildLibs/utils/Web/ClEcharts.js +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
- package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
- package/buildLibs/utils/Web/ClFileUpload.js +1 -1
- package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
- package/buildLibs/utils/Web/ClInputTag.js +1 -1
- package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
- package/buildLibs/utils/Web/ClPaginate.js +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
- package/buildLibs/utils/Web/ClSelect.cjs +1 -1
- package/buildLibs/utils/Web/ClSelect.js +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
- package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTag.js +1 -1
- package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTree.js +1 -1
- package/buildLibs/utils/Web/ClTable.cjs +1 -1
- package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClTable.js +1081 -1218
- package/buildLibs/utils/Web/ClTable.js.map +1 -1
- package/buildLibs/utils/Web/ClTabs.cjs +1 -1
- package/buildLibs/utils/Web/ClTabs.js +1 -1
- package/buildLibs/utils/Web/ClTree.cjs +1 -1
- package/buildLibs/utils/Web/ClTree.js +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClXeditable.js +33 -32
- package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
- package/package.json +21 -8
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
- package/buildLibs/utils/Shared/Video.css +0 -1
- package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
- package/buildLibs/utils/Web/ClPreview.cjs +0 -2
- package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
- package/buildLibs/utils/Web/ClPreview.css +0 -1
- package/buildLibs/utils/Web/ClPreview.js +0 -353
- package/buildLibs/utils/Web/ClPreview.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-BKr3_J68.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-Lwl-M8kR.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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"}
|