@cldemo/ui-kit 1.0.9 → 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/COMPONENT_CATALOG.md +2 -2
- package/buildLibs/all/index.cjs +2 -5
- package/buildLibs/all/index.css +1 -0
- package/buildLibs/all/index.js +82 -6
- package/buildLibs/mobile/index.cjs +2 -5
- package/buildLibs/mobile/index.css +1 -0
- package/buildLibs/mobile/index.js +50 -6
- package/buildLibs/utils/Element/ClBadge.d.ts +3 -0
- package/buildLibs/utils/Element/ClBreadcrumb.d.ts +3 -0
- package/buildLibs/utils/Element/ClButton.d.ts +3 -0
- package/buildLibs/utils/Element/ClCallout.d.ts +3 -0
- package/buildLibs/utils/Element/ClCard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCardColor.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckbox.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClCheckboxOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
- package/buildLibs/utils/Element/ClClipboard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCollapse.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountDown.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountUp.d.ts +3 -0
- package/buildLibs/utils/Element/ClCropper.d.ts +3 -0
- package/buildLibs/utils/Element/ClDarg.d.ts +3 -0
- package/buildLibs/utils/Element/ClDivider.d.ts +3 -0
- package/buildLibs/utils/Element/ClEllipsis.d.ts +3 -0
- package/buildLibs/utils/Element/ClEmpty.d.ts +3 -0
- package/buildLibs/utils/Element/ClForm.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormGroup.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.js +5 -0
- package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
- package/buildLibs/utils/Element/ClIconFont.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.cjs +1 -1
- package/buildLibs/utils/Element/ClImage.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.js +1 -1
- package/buildLibs/utils/Element/ClInput.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputCaptcha.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumber.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumberStepper.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputPassword.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputSearch.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputTextarea.d.ts +3 -0
- package/buildLibs/utils/Element/ClLink.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoad.d.ts +3 -0
- 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.d.ts +3 -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.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadIng.js +5 -0
- package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadScreen.d.ts +3 -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.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
- package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
- package/buildLibs/utils/Element/ClModal.d.ts +3 -0
- package/buildLibs/utils/Element/ClOverlay.d.ts +3 -0
- package/buildLibs/utils/Element/ClProgress.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadio.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.js +5 -0
- package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
- package/buildLibs/utils/Element/ClSlider.d.ts +3 -0
- package/buildLibs/utils/Element/ClSwitchery.d.ts +3 -0
- package/buildLibs/utils/Element/ClTags.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
- package/buildLibs/utils/Element/ClWaterfall.d.ts +3 -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.d.ts +3 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
- package/buildLibs/utils/Mobile/ClActionBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClActionSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClAreaM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBackTop.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
- package/buildLibs/utils/Mobile/ClBanner.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.js +1 -1
- package/buildLibs/utils/Mobile/ClCalendarM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCell.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCellSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCodeLegendM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.d.ts +3 -0
- 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.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
- package/buildLibs/utils/Mobile/ClFloatingBubble.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClFloatingPanel.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClGrid.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClHighlightM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClIndexBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClInputOtp.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNavBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNoticeBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNotifyM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNumberKeyboard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPicker.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerCascader.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
- package/buildLibs/utils/Mobile/ClPopup.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
- package/buildLibs/utils/Mobile/ClRate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
- package/buildLibs/utils/Mobile/ClShareSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebarSelect.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSignature.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSteps.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabbar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClToast.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClWatermark.d.ts +3 -0
- 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/ClAnchorNav.d.ts +3 -0
- package/buildLibs/utils/Web/ClCalendar.d.ts +3 -0
- package/buildLibs/utils/Web/ClCodeLegend.d.ts +3 -0
- package/buildLibs/utils/Web/ClColorpicker.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
- package/buildLibs/utils/Web/ClCropperPreview.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
- package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
- package/buildLibs/utils/Web/ClDatetime.d.ts +3 -0
- package/buildLibs/utils/Web/ClDatetime.js +1 -1
- package/buildLibs/utils/Web/ClDropdownMenu.d.ts +3 -0
- 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.d.ts +3 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
- package/buildLibs/utils/Web/ClDropdownPopup.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
- package/buildLibs/utils/Web/ClEcharts.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.js +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
- package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
- package/buildLibs/utils/Web/ClFileUpload.d.ts +3 -0
- package/buildLibs/utils/Web/ClFileUpload.js +1 -1
- package/buildLibs/utils/Web/ClFramePhone.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
- package/buildLibs/utils/Web/ClInputTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.js +1 -1
- package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
- package/buildLibs/utils/Web/ClPaginate.d.ts +3 -0
- package/buildLibs/utils/Web/ClPaginate.js +1 -1
- package/buildLibs/utils/Web/ClPortlet.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.d.ts +3 -0
- package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
- package/buildLibs/utils/Web/ClSelect.cjs +1 -1
- package/buildLibs/utils/Web/ClSelect.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelect.js +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
- package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTag.js +1 -1
- package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTree.js +1 -1
- package/buildLibs/utils/Web/ClSelectmove.d.ts +3 -0
- package/buildLibs/utils/Web/ClSidemenu.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.cjs +1 -1
- package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClTable.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.js +1081 -1218
- package/buildLibs/utils/Web/ClTable.js.map +1 -1
- package/buildLibs/utils/Web/ClTableEdit.d.ts +3 -0
- package/buildLibs/utils/Web/ClTableSimple.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.cjs +1 -1
- package/buildLibs/utils/Web/ClTabs.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.js +1 -1
- package/buildLibs/utils/Web/ClTree.cjs +1 -1
- package/buildLibs/utils/Web/ClTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClTree.js +1 -1
- package/buildLibs/utils/Web/ClWeekhour.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClXeditable.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.js +33 -32
- package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
- package/buildLibs/web/index.cjs +2 -5
- package/buildLibs/web/index.css +1 -0
- package/buildLibs/web/index.js +76 -6
- package/docs/components/Element/Input.md +1 -1
- package/docs/components/Element/InputNumber.md +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-N1GhNa1r.js","sources":["../../../src/libs/Mobile/PullToRefresh/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"ptr-track\">\n <div\n class=\"ptr-indicator\"\n :style=\"styIndicator\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n class=\"ptr-indicator-inner\"\n :class=\"`ptr-state-${optState}`\"\n >\n <slot\n name=\"indicator\"\n :state=\"optState\"\n :distance=\"optPullDistance\"\n :threshold=\"optThreshold\"\n >\n <cl-load\n v-if=\"optState === 'loading'\"\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-indicator-load\"\n />\n <template v-else>\n <i\n :class=\"pullIcon\"\n aria-hidden=\"true\"\n ></i>\n </template>\n <span class=\"ptr-text\">{{ optIndicatorText }}</span>\n </slot>\n </div>\n </div>\n <div\n ref=\"refElContent\"\n class=\"ptr-content\"\n :class=\"{ 'ptr-content-virtual': optIsVirtual }\"\n :style=\"styContent\"\n @scroll=\"onScrollScroller\"\n @touchstart=\"onPullStart\"\n @touchmove=\"onPullMove\"\n @touchend=\"onPullEnd\"\n @touchcancel=\"onPullEnd\"\n @mousedown=\"onPullStart\"\n >\n <div\n v-if=\"optIsVirtual\"\n class=\"ptr-scroller-wrap\"\n >\n <DynamicScroller\n class=\"ptr-scroller\"\n :items=\"optSafeList\"\n :min-item-size=\"optMinItemSize\"\n :key-field=\"keyField\"\n @scroll=\"onScrollScroller\"\n >\n <template v-slot:default=\"{ item, index, active }\">\n <DynamicScrollerItem\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n :size-dependencies=\"_getSizeDependencies(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n />\n </DynamicScrollerItem>\n </template>\n <template v-slot:after>\n <div\n v-if=\"isLoading\"\n class=\"ptr-loadmore\"\n >\n <slot name=\"loadMore\">\n <cl-load\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-loadmore-load\"\n />\n <span>{{ loadingText }}</span>\n </slot>\n </div>\n <template v-else></template>\n <div\n v-if=\"isFinished && !isLoading\"\n class=\"ptr-finished\"\n >\n <slot name=\"finished\">\n <span>{{ finishedText }}</span>\n </slot>\n </div>\n <template v-else></template>\n </template>\n </DynamicScroller>\n </div>\n <slot v-else></slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onBeforeUnmount, onDeactivated, type PropType } from 'vue';\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './Index.css';\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\ndefineOptions({ name: 'ClPullToRefresh' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用下拉刷新\n threshold: {\n type: Number,\n default: 60, // desc: 下拉刷新阈值(px)\n },\n list: Array as () => any[], // desc: 列表数据,传入则启用虚拟滚动渲染\n minItemSize: {\n type: Number,\n default: 60, // desc: 列表项最小高度(px),用于 DynamicScroller 初始估算\n },\n keyField: {\n type: String,\n default: 'id', // desc: 虚拟滚动列表项的 key 字段名\n },\n isFinished: Boolean, // desc: 是否已加载完全部数据\n isLoading: Boolean, // desc: 是否正在加载更多\n pullIcon: {\n type: String,\n default: 'ptr-icon-arrow', // desc: 下拉刷新箭头图标类名(<i> 元素)\n },\n pullingText: {\n type: String,\n default: '下拉即可刷新...', // desc: 下拉中提示文字\n },\n readyText: {\n type: String,\n default: '释放即可刷新...', // desc: 达到阈值松手即可刷新的提示文字\n },\n refreshingText: {\n type: String,\n default: '加载中...', // desc: 刷新中提示文字\n },\n loadingText: {\n type: String,\n default: '加载中...', // desc: 加载更多时提示文字\n },\n finishedText: {\n type: String,\n default: '没有更多了', // desc: 已加载全部提示文字\n },\n sizeDependencies: {\n type: Function as PropType<\n (item: any) => Record<string, unknown> | unknown[] | null | undefined\n >,\n }, // desc: 列表项高度依赖项提取函数,用于动态高度重算\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onRefresh'): void; // desc: 下拉达到阈值松手后触发刷新\n (e: 'onLoadMore'): void; // desc: 虚拟滚动滚动到底部时触发加载更多\n}>();\n// slots: indicator(下拉指示器,携带 state/distance/threshold), item(列表项,携带 item/index/active), loadMore(加载更多提示), finished(加载完成提示), default(非虚拟滚动时的默认内容)\n\nconst elId = props.id; // || `_elId_pulltorefresh-${CommonBase.getRandom(8)}`\n\n// ref\nconst refElContent = ref<HTMLElement | null>(null);\n\n// state\nconst optState = ref<'idle' | 'pulling' | 'ready' | 'loading'>('idle');\nconst optPullDistance = ref<number>(0);\nconst _startY = ref<number>(0);\nconst _isTracking = ref<boolean>(false);\nconst _isPulling = ref<boolean>(false);\nconst _scrollTop = ref<number>(0);\nlet _rafId: number | null = null;\nlet _pendingDeltaY = 0;\nlet _lastLoadMoreAt = 0;\nlet _lastProbeAt = 0;\nlet _probeTimer: number | null = null;\n\n// computed\nconst optThreshold = computed(() => {\n const t = props.threshold;\n // isFinite 兜底 NaN/undefined(default 60 已覆盖 undefined,NaN 需显式拦截)\n // typeof number 拦截隐式 Number() 转换的脏值('' → 0 / true → 1),Math.max(1, t) 钳制 0 值防阈值失禁\n return CommonBase.isFinite(t) && typeof t === 'number' ? Math.max(1, t) : 60;\n});\n\nconst optIsVirtual = computed(() => CommonBase.isArray(props.list));\n\n// 虚拟列表项过滤 null/undefined(第三方 DynamicScroller 对空项 getKey 抛 TypeError,渲染中断);\n// 契约:插槽 item/index 基于过滤后数组,脏项存在时 index 与父组件原 list 索引错位,父组件勿按 index 回写原 list\nconst optSafeList = computed(() =>\n optIsVirtual.value\n ? (props.list as unknown[]).filter(item => item !== null && item !== undefined)\n : [],\n);\n\nconst optMinItemSize = computed(() => {\n const v = props.minItemSize;\n // 与 optThreshold 同模式钳制(typeof number 拦脏值),防 0/NaN/负值导致 DynamicScroller 估算异常\n return CommonBase.isFinite(v) && typeof v === 'number' ? Math.max(1, v) : 60;\n});\n\nconst optIndicatorText = computed(() => {\n switch (optState.value) {\n case 'loading':\n return props.refreshingText;\n case 'ready':\n return props.readyText;\n case 'pulling':\n return props.pullingText;\n default:\n return '';\n }\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-pulltorefresh': true };\n if (props.disabled) {\n cls['ptr-disabled'] = true;\n }\n if (_isPulling.value) {\n cls['ptr-is-pulling'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styIndicator = computed(() => ({\n height: `${optPullDistance.value}px`,\n}));\n\n// 拖拽会话中接管手势(touch-action: none 使 preventDefault 生效,避免被浏览器原生 pan 吞掉);\n// 非拖拽时返回空,让 CSS 的 touch-action: pan-y 保留页面原生纵向滚动\nconst styContent = computed(() =>\n _isTracking.value && _isPulling.value ? { touchAction: 'none' } : {},\n);\n\n// 内部方法\n// 阻尼换算并封顶(0.4 平滑拉距,2×阈值封顶防极端长拖撑爆指示器)\nconst _calcDistance = (deltaY: number) => Math.min(deltaY * 0.4, optThreshold.value * 2);\n\nconst _isAtTop = () => {\n // 容忍 1px 亚像素回弹(iOS 滚动容器 scrollTop 会停在 0.1~1px)\n if (optIsVirtual.value) {\n return _scrollTop.value <= 1;\n }\n const el = refElContent.value;\n if (!el) return true;\n return el.scrollTop <= 1;\n};\n\nconst _getClientY = (e: TouchEvent | MouseEvent): number => {\n if ('touches' in e) {\n const touches = (e as TouchEvent).touches;\n return touches.length > 0 ? touches[0].clientY : 0;\n }\n return (e as MouseEvent).clientY;\n};\n\n// 适配函数包装,避免 as any 双断言绕过类型系统\nconst _onDocMove = ((e: Event) => onPullMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onPullEnd(e as MouseEvent)) as EventListener;\n\nconst _startMouseListeners = () => {\n document.addEventListener('mousemove', _onDocMove);\n document.addEventListener('mouseup', _onDocUp);\n};\n\nconst _stopMouseListeners = () => {\n document.removeEventListener('mousemove', _onDocMove);\n document.removeEventListener('mouseup', _onDocUp);\n};\n\nconst _resetPull = () => {\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _pendingDeltaY = 0;\n _isPulling.value = false;\n optPullDistance.value = 0;\n optState.value = 'idle';\n};\n// 提取内部方法,避免模板内联三元 + 函数调用\n// try/catch 兜底:sizeDependencies 为父组件提供的函数,抛错时不击穿模板渲染\nconst _getSizeDependencies = (item: unknown) => {\n if (!props.sizeDependencies) return undefined;\n try {\n return props.sizeDependencies(item);\n } catch {\n return undefined;\n }\n};\n\nconst _emitLoadMore = () => {\n const now = Date.now();\n if (now - _lastLoadMoreAt < 500) return;\n if (!props.isFinished && !props.isLoading) {\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\n// 虚拟滚动\"补满一屏\"探测补发:与滚动路径(_emitLoadMore 500ms 节流)分离,\n// 用独立微节流(_lastProbeAt),避免被滚动节流吞掉导致加载停摆(父端响应快 + 首屏不满时滚动路径不可达)\nconst _probeFill = () => {\n if (!optIsVirtual.value || props.isFinished || props.isLoading) return;\n const now = Date.now();\n if (now - _lastProbeAt < 100) {\n // 节流窗口内末次变化:延后到窗口结束补发一次,防被吞后无新 list 变化驱动导致补发停摆\n if (_probeTimer === null) {\n _probeTimer = window.setTimeout(() => {\n _probeTimer = null;\n _probeFill();\n }, 100);\n }\n return;\n }\n // 经模板静态类名定位 DynamicScroller 根滚动元素(class 绑定必然落根),不依赖第三方内部类名\n const scroller = refElContent.value?.querySelector<HTMLElement>('.ptr-scroller');\n if (!scroller) return;\n // 同步滚动位置缓存:list 替换/刷新后浏览器未必补发 scroll 事件,避免下拉被旧 _scrollTop 抑制或误判顶部\n _scrollTop.value = scroller.scrollTop || 0;\n // 容器不可见(clientHeight=0,如 keep-alive 停用/父未布局)时不补发,避免后台无谓请求\n if (scroller.clientHeight <= 0) return;\n if (scroller.scrollHeight <= scroller.clientHeight) {\n _lastProbeAt = now;\n // 与滚动路径共享 500ms 加载节流戳,防 probe 补发后父端 push 使列表可滚动、短窗口内滚动触底重复 onLoadMore\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\nconst _cleanupTracking = () => {\n _stopMouseListeners();\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _isTracking.value = false;\n};\n\n// 生命周期\nonBeforeUnmount(() => {\n _cleanupTracking();\n if (_probeTimer !== null) {\n clearTimeout(_probeTimer);\n _probeTimer = null;\n }\n});\nonDeactivated(() => {\n _cleanupTracking();\n // 非 loading 态复位视觉状态,避免 keep-alive 切回后指示器残留\n if (optState.value !== 'loading') _resetPull();\n});\n\n// watch\nwatch(\n () => props.disabled,\n val => {\n if (val) {\n _cleanupTracking();\n // loading 期间禁用只停交互,加载状态由父组件 finishRefresh 收尾\n if (optState.value !== 'loading') _resetPull();\n }\n },\n);\n\n// 虚拟模式重建时重置滚动位置标记,防止 list 置空/重赋后下拉被抑制\nwatch(\n () => optIsVirtual.value,\n val => {\n if (val) _scrollTop.value = 0;\n },\n);\n\n// 虚拟滚动内容不足一屏时 scroll-end 不触发,列表变化后主动补发 onLoadMore\n// 同时监听引用与长度,覆盖引用替换(等量替换)与原地修改(push)两类盲区\nwatch(\n () => [props.list, props.list?.length],\n async () => {\n if (!optIsVirtual.value) return;\n await nextTick();\n _probeFill();\n },\n { immediate: true },\n);\n\n// 事件方法\nconst onPullStart = (e: TouchEvent | MouseEvent) => {\n if (props.disabled || optState.value === 'loading') return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理并复位视觉状态,避免残留 ready 态点击误触发刷新\n if (_isTracking.value) {\n _cleanupTracking();\n _resetPull();\n }\n _startY.value = _getClientY(e);\n _isTracking.value = true;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onPullMove = (e: TouchEvent | MouseEvent) => {\n if (!_isTracking.value || props.disabled) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾,防止监听残留\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onPullEnd();\n return;\n }\n _pendingDeltaY = _getClientY(e) - _startY.value;\n if (_pendingDeltaY > 0 && _isAtTop()) {\n _isPulling.value = true;\n e.preventDefault();\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n const d = _calcDistance(_pendingDeltaY);\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n });\n }\n } else if (_isPulling.value) {\n _resetPull();\n }\n};\n\nconst onPullEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isTracking.value) return;\n _isTracking.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发刷新,仅复位\n if (e?.type === 'touchcancel') {\n _resetPull();\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算状态,防止快速松手丢 onRefresh(阻尼 0.4 + 2×阈值封顶)\n const d = _calcDistance(_pendingDeltaY);\n if (d >= 0) {\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n }\n }\n if (props.disabled || !(_isPulling.value && optState.value === 'ready')) {\n _resetPull();\n } else {\n optState.value = 'loading';\n optPullDistance.value = optThreshold.value;\n // loading 期间不算拖拽,释放 ptr-is-pulling 类避免 user-select 持续锁定\n _isPulling.value = false;\n emit('onRefresh');\n }\n};\n\nconst onScrollScroller = (e: Event) => {\n const el = e.target as HTMLElement | null;\n _scrollTop.value = el?.scrollTop || 0;\n // 内容不足一屏时 scroll-end 不触发,主动补发 onLoadMore\n if (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n _emitLoadMore();\n }\n};\n\n// 开放方法\nconst finishRefresh = () => {\n // 先终止跟踪会话(拖拽中调用时防监听残留与二次 emit),再复位视觉状态\n _cleanupTracking();\n _resetPull();\n // 下拉刷新替换短列表后清空加载/探测节流戳,避免补发 onLoadMore 被旧节流窗口吞掉\n _lastLoadMoreAt = 0;\n _lastProbeAt = 0;\n};\n\n// 导出类型\nexport interface ClPullToRefreshExpose {\n finishRefresh: () => void;\n}\n\ndefineExpose({ finishRefresh });\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElContent","ref","optState","optPullDistance","_startY","_isTracking","_isPulling","_scrollTop","_rafId","_pendingDeltaY","_lastLoadMoreAt","_lastProbeAt","_probeTimer","optThreshold","computed","t","CommonBase","optIsVirtual","optSafeList","item","optMinItemSize","v","optIndicatorText","clsParent","cls","CommonElement","styIndicator","styContent","_calcDistance","deltaY","_isAtTop","el","_getClientY","touches","_onDocMove","onPullMove","_onDocUp","onPullEnd","_startMouseListeners","_stopMouseListeners","_resetPull","_getSizeDependencies","_emitLoadMore","now","_probeFill","scroller","_cleanupTracking","onBeforeUnmount","onDeactivated","watch","val","nextTick","onPullStart","d","onScrollScroller","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_renderSlot","_ctx","_createBlock","ClLoad","_hoisted_3","_toDisplayString","_openBlock","_hoisted_4","_createVNode","DynamicScroller","index","active","DynamicScrollerItem","_hoisted_5","_Fragment","_hoisted_6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js","sources":["../../../src/libs/Mobile/PullToRefresh/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"ptr-track\">\n <div\n class=\"ptr-indicator\"\n :style=\"styIndicator\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n class=\"ptr-indicator-inner\"\n :class=\"`ptr-state-${optState}`\"\n >\n <slot\n name=\"indicator\"\n :state=\"optState\"\n :distance=\"optPullDistance\"\n :threshold=\"optThreshold\"\n >\n <cl-load\n v-if=\"optState === 'loading'\"\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-indicator-load\"\n />\n <template v-else>\n <i\n :class=\"pullIcon\"\n aria-hidden=\"true\"\n ></i>\n </template>\n <span class=\"ptr-text\">{{ optIndicatorText }}</span>\n </slot>\n </div>\n </div>\n <div\n ref=\"refElContent\"\n class=\"ptr-content\"\n :class=\"{ 'ptr-content-virtual': optIsVirtual }\"\n :style=\"styContent\"\n @scroll=\"onScrollScroller\"\n @touchstart=\"onPullStart\"\n @touchmove=\"onPullMove\"\n @touchend=\"onPullEnd\"\n @touchcancel=\"onPullEnd\"\n @mousedown=\"onPullStart\"\n >\n <div\n v-if=\"optIsVirtual\"\n class=\"ptr-scroller-wrap\"\n >\n <DynamicScroller\n class=\"ptr-scroller\"\n :items=\"optSafeList\"\n :min-item-size=\"optMinItemSize\"\n :key-field=\"keyField\"\n @scroll=\"onScrollScroller\"\n >\n <template v-slot:default=\"{ item, index, active }\">\n <DynamicScrollerItem\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n :size-dependencies=\"_getSizeDependencies(item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n :active=\"active\"\n />\n </DynamicScrollerItem>\n </template>\n <template v-slot:after>\n <div\n v-if=\"isLoading\"\n class=\"ptr-loadmore\"\n >\n <slot name=\"loadMore\">\n <cl-load\n theme=\"circleSpinner\"\n size=\"small\"\n color=\"#999\"\n className=\"ptr-loadmore-load\"\n />\n <span>{{ loadingText }}</span>\n </slot>\n </div>\n <template v-else></template>\n <div\n v-if=\"isFinished && !isLoading\"\n class=\"ptr-finished\"\n >\n <slot name=\"finished\">\n <span>{{ finishedText }}</span>\n </slot>\n </div>\n <template v-else></template>\n </template>\n </DynamicScroller>\n </div>\n <slot v-else></slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, onBeforeUnmount, onDeactivated, type PropType } from 'vue';\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './Index.css';\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\ndefineOptions({ name: 'ClPullToRefresh' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用下拉刷新\n threshold: {\n type: Number,\n default: 60, // desc: 下拉刷新阈值(px)\n },\n list: Array as () => any[], // desc: 列表数据,传入则启用虚拟滚动渲染\n minItemSize: {\n type: Number,\n default: 60, // desc: 列表项最小高度(px),用于 DynamicScroller 初始估算\n },\n keyField: {\n type: String,\n default: 'id', // desc: 虚拟滚动列表项的 key 字段名\n },\n isFinished: Boolean, // desc: 是否已加载完全部数据\n isLoading: Boolean, // desc: 是否正在加载更多\n pullIcon: {\n type: String,\n default: 'ptr-icon-arrow', // desc: 下拉刷新箭头图标类名(<i> 元素)\n },\n pullingText: {\n type: String,\n default: '下拉即可刷新...', // desc: 下拉中提示文字\n },\n readyText: {\n type: String,\n default: '释放即可刷新...', // desc: 达到阈值松手即可刷新的提示文字\n },\n refreshingText: {\n type: String,\n default: '加载中...', // desc: 刷新中提示文字\n },\n loadingText: {\n type: String,\n default: '加载中...', // desc: 加载更多时提示文字\n },\n finishedText: {\n type: String,\n default: '没有更多了', // desc: 已加载全部提示文字\n },\n sizeDependencies: {\n type: Function as PropType<\n (item: any) => Record<string, unknown> | unknown[] | null | undefined\n >,\n }, // desc: 列表项高度依赖项提取函数,用于动态高度重算\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onRefresh'): void; // desc: 下拉达到阈值松手后触发刷新\n (e: 'onLoadMore'): void; // desc: 虚拟滚动滚动到底部时触发加载更多\n}>();\n// slots: indicator(下拉指示器,携带 state/distance/threshold), item(列表项,携带 item/index/active), loadMore(加载更多提示), finished(加载完成提示), default(非虚拟滚动时的默认内容)\n\nconst elId = props.id; // || `_elId_pulltorefresh-${CommonBase.getRandom(8)}`\n\n// ref\nconst refElContent = ref<HTMLElement | null>(null);\n\n// state\nconst optState = ref<'idle' | 'pulling' | 'ready' | 'loading'>('idle');\nconst optPullDistance = ref<number>(0);\nconst _startY = ref<number>(0);\nconst _isTracking = ref<boolean>(false);\nconst _isPulling = ref<boolean>(false);\nconst _scrollTop = ref<number>(0);\nlet _rafId: number | null = null;\nlet _pendingDeltaY = 0;\nlet _lastLoadMoreAt = 0;\nlet _lastProbeAt = 0;\nlet _probeTimer: number | null = null;\n\n// computed\nconst optThreshold = computed(() => {\n const t = props.threshold;\n // isFinite 兜底 NaN/undefined(default 60 已覆盖 undefined,NaN 需显式拦截)\n // typeof number 拦截隐式 Number() 转换的脏值('' → 0 / true → 1),Math.max(1, t) 钳制 0 值防阈值失禁\n return CommonBase.isFinite(t) && typeof t === 'number' ? Math.max(1, t) : 60;\n});\n\nconst optIsVirtual = computed(() => CommonBase.isArray(props.list));\n\n// 虚拟列表项过滤 null/undefined(第三方 DynamicScroller 对空项 getKey 抛 TypeError,渲染中断);\n// 契约:插槽 item/index 基于过滤后数组,脏项存在时 index 与父组件原 list 索引错位,父组件勿按 index 回写原 list\nconst optSafeList = computed(() =>\n optIsVirtual.value\n ? (props.list as unknown[]).filter(item => item !== null && item !== undefined)\n : [],\n);\n\nconst optMinItemSize = computed(() => {\n const v = props.minItemSize;\n // 与 optThreshold 同模式钳制(typeof number 拦脏值),防 0/NaN/负值导致 DynamicScroller 估算异常\n return CommonBase.isFinite(v) && typeof v === 'number' ? Math.max(1, v) : 60;\n});\n\nconst optIndicatorText = computed(() => {\n switch (optState.value) {\n case 'loading':\n return props.refreshingText;\n case 'ready':\n return props.readyText;\n case 'pulling':\n return props.pullingText;\n default:\n return '';\n }\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-pulltorefresh': true };\n if (props.disabled) {\n cls['ptr-disabled'] = true;\n }\n if (_isPulling.value) {\n cls['ptr-is-pulling'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styIndicator = computed(() => ({\n height: `${optPullDistance.value}px`,\n}));\n\n// 拖拽会话中接管手势(touch-action: none 使 preventDefault 生效,避免被浏览器原生 pan 吞掉);\n// 非拖拽时返回空,让 CSS 的 touch-action: pan-y 保留页面原生纵向滚动\nconst styContent = computed(() =>\n _isTracking.value && _isPulling.value ? { touchAction: 'none' } : {},\n);\n\n// 内部方法\n// 阻尼换算并封顶(0.4 平滑拉距,2×阈值封顶防极端长拖撑爆指示器)\nconst _calcDistance = (deltaY: number) => Math.min(deltaY * 0.4, optThreshold.value * 2);\n\nconst _isAtTop = () => {\n // 容忍 1px 亚像素回弹(iOS 滚动容器 scrollTop 会停在 0.1~1px)\n if (optIsVirtual.value) {\n return _scrollTop.value <= 1;\n }\n const el = refElContent.value;\n if (!el) return true;\n return el.scrollTop <= 1;\n};\n\nconst _getClientY = (e: TouchEvent | MouseEvent): number => {\n if ('touches' in e) {\n const touches = (e as TouchEvent).touches;\n return touches.length > 0 ? touches[0].clientY : 0;\n }\n return (e as MouseEvent).clientY;\n};\n\n// 适配函数包装,避免 as any 双断言绕过类型系统\nconst _onDocMove = ((e: Event) => onPullMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onPullEnd(e as MouseEvent)) as EventListener;\n\nconst _startMouseListeners = () => {\n document.addEventListener('mousemove', _onDocMove);\n document.addEventListener('mouseup', _onDocUp);\n};\n\nconst _stopMouseListeners = () => {\n document.removeEventListener('mousemove', _onDocMove);\n document.removeEventListener('mouseup', _onDocUp);\n};\n\nconst _resetPull = () => {\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _pendingDeltaY = 0;\n _isPulling.value = false;\n optPullDistance.value = 0;\n optState.value = 'idle';\n};\n// 提取内部方法,避免模板内联三元 + 函数调用\n// try/catch 兜底:sizeDependencies 为父组件提供的函数,抛错时不击穿模板渲染\nconst _getSizeDependencies = (item: unknown) => {\n if (!props.sizeDependencies) return undefined;\n try {\n return props.sizeDependencies(item);\n } catch {\n return undefined;\n }\n};\n\nconst _emitLoadMore = () => {\n const now = Date.now();\n if (now - _lastLoadMoreAt < 500) return;\n if (!props.isFinished && !props.isLoading) {\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\n// 虚拟滚动\"补满一屏\"探测补发:与滚动路径(_emitLoadMore 500ms 节流)分离,\n// 用独立微节流(_lastProbeAt),避免被滚动节流吞掉导致加载停摆(父端响应快 + 首屏不满时滚动路径不可达)\nconst _probeFill = () => {\n if (!optIsVirtual.value || props.isFinished || props.isLoading) return;\n const now = Date.now();\n if (now - _lastProbeAt < 100) {\n // 节流窗口内末次变化:延后到窗口结束补发一次,防被吞后无新 list 变化驱动导致补发停摆\n if (_probeTimer === null) {\n _probeTimer = window.setTimeout(() => {\n _probeTimer = null;\n _probeFill();\n }, 100);\n }\n return;\n }\n // 经模板静态类名定位 DynamicScroller 根滚动元素(class 绑定必然落根),不依赖第三方内部类名\n const scroller = refElContent.value?.querySelector<HTMLElement>('.ptr-scroller');\n if (!scroller) return;\n // 同步滚动位置缓存:list 替换/刷新后浏览器未必补发 scroll 事件,避免下拉被旧 _scrollTop 抑制或误判顶部\n _scrollTop.value = scroller.scrollTop || 0;\n // 容器不可见(clientHeight=0,如 keep-alive 停用/父未布局)时不补发,避免后台无谓请求\n if (scroller.clientHeight <= 0) return;\n if (scroller.scrollHeight <= scroller.clientHeight) {\n _lastProbeAt = now;\n // 与滚动路径共享 500ms 加载节流戳,防 probe 补发后父端 push 使列表可滚动、短窗口内滚动触底重复 onLoadMore\n _lastLoadMoreAt = now;\n emit('onLoadMore');\n }\n};\n\nconst _cleanupTracking = () => {\n _stopMouseListeners();\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n }\n _isTracking.value = false;\n};\n\n// 生命周期\nonBeforeUnmount(() => {\n _cleanupTracking();\n if (_probeTimer !== null) {\n clearTimeout(_probeTimer);\n _probeTimer = null;\n }\n});\nonDeactivated(() => {\n _cleanupTracking();\n // 非 loading 态复位视觉状态,避免 keep-alive 切回后指示器残留\n if (optState.value !== 'loading') _resetPull();\n});\n\n// watch\nwatch(\n () => props.disabled,\n val => {\n if (val) {\n _cleanupTracking();\n // loading 期间禁用只停交互,加载状态由父组件 finishRefresh 收尾\n if (optState.value !== 'loading') _resetPull();\n }\n },\n);\n\n// 虚拟模式重建时重置滚动位置标记,防止 list 置空/重赋后下拉被抑制\nwatch(\n () => optIsVirtual.value,\n val => {\n if (val) _scrollTop.value = 0;\n },\n);\n\n// 虚拟滚动内容不足一屏时 scroll-end 不触发,列表变化后主动补发 onLoadMore\n// 同时监听引用与长度,覆盖引用替换(等量替换)与原地修改(push)两类盲区\nwatch(\n () => [props.list, props.list?.length],\n async () => {\n if (!optIsVirtual.value) return;\n await nextTick();\n _probeFill();\n },\n { immediate: true },\n);\n\n// 事件方法\nconst onPullStart = (e: TouchEvent | MouseEvent) => {\n if (props.disabled || optState.value === 'loading') return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理并复位视觉状态,避免残留 ready 态点击误触发刷新\n if (_isTracking.value) {\n _cleanupTracking();\n _resetPull();\n }\n _startY.value = _getClientY(e);\n _isTracking.value = true;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onPullMove = (e: TouchEvent | MouseEvent) => {\n if (!_isTracking.value || props.disabled) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾,防止监听残留\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onPullEnd();\n return;\n }\n _pendingDeltaY = _getClientY(e) - _startY.value;\n if (_pendingDeltaY > 0 && _isAtTop()) {\n _isPulling.value = true;\n e.preventDefault();\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n const d = _calcDistance(_pendingDeltaY);\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n });\n }\n } else if (_isPulling.value) {\n _resetPull();\n }\n};\n\nconst onPullEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isTracking.value) return;\n _isTracking.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发刷新,仅复位\n if (e?.type === 'touchcancel') {\n _resetPull();\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算状态,防止快速松手丢 onRefresh(阻尼 0.4 + 2×阈值封顶)\n const d = _calcDistance(_pendingDeltaY);\n if (d >= 0) {\n optPullDistance.value = d;\n optState.value = d >= optThreshold.value ? 'ready' : 'pulling';\n }\n }\n if (props.disabled || !(_isPulling.value && optState.value === 'ready')) {\n _resetPull();\n } else {\n optState.value = 'loading';\n optPullDistance.value = optThreshold.value;\n // loading 期间不算拖拽,释放 ptr-is-pulling 类避免 user-select 持续锁定\n _isPulling.value = false;\n emit('onRefresh');\n }\n};\n\nconst onScrollScroller = (e: Event) => {\n const el = e.target as HTMLElement | null;\n _scrollTop.value = el?.scrollTop || 0;\n // 内容不足一屏时 scroll-end 不触发,主动补发 onLoadMore\n if (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n _emitLoadMore();\n }\n};\n\n// 开放方法\nconst finishRefresh = () => {\n // 先终止跟踪会话(拖拽中调用时防监听残留与二次 emit),再复位视觉状态\n _cleanupTracking();\n _resetPull();\n // 下拉刷新替换短列表后清空加载/探测节流戳,避免补发 onLoadMore 被旧节流窗口吞掉\n _lastLoadMoreAt = 0;\n _lastProbeAt = 0;\n};\n\n// 导出类型\nexport interface ClPullToRefreshExpose {\n finishRefresh: () => void;\n}\n\ndefineExpose({ finishRefresh });\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElContent","ref","optState","optPullDistance","_startY","_isTracking","_isPulling","_scrollTop","_rafId","_pendingDeltaY","_lastLoadMoreAt","_lastProbeAt","_probeTimer","optThreshold","computed","t","CommonBase","optIsVirtual","optSafeList","item","optMinItemSize","v","optIndicatorText","clsParent","cls","CommonElement","styIndicator","styContent","_calcDistance","deltaY","_isAtTop","el","_getClientY","touches","_onDocMove","onPullMove","_onDocUp","onPullEnd","_startMouseListeners","_stopMouseListeners","_resetPull","_getSizeDependencies","_emitLoadMore","now","_probeFill","scroller","_cleanupTracking","onBeforeUnmount","onDeactivated","watch","val","nextTick","onPullStart","d","onScrollScroller","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_renderSlot","_ctx","_createBlock","ClLoad","_hoisted_3","_toDisplayString","_openBlock","_hoisted_4","_createVNode","DynamicScroller","index","active","DynamicScrollerItem","_hoisted_5","_Fragment","_hoisted_6"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),o=require("./base-C2QOJBgB.js"),C=require("./index-DAgtltwJ.js"),B=require("./use-D0Yu2Dbn.js"),_=["id"],E=["alt"],N=e.defineComponent({name:"ClImage",__name:"Index",props:{id:{},className:{},src:{},alt:{},height:{},width:{},isCircle:{type:Boolean},fit:{},isCrossOrigin:{type:Boolean}},emits:["onInit"],setup(l,{emit:u}){const n=l,g=u,m=e.ref(o.CommonBase.isNonEmptyString(n.src)?n.src:""),a=e.ref(null),d=e.computed(()=>o.CommonBase.isNonEmptyString(n.alt)?n.alt:""),p=n.id;B.useLazyload(a,m,{callback:{loaded:()=>{c()},error:()=>{c()}},isCrossOrigin:n.isCrossOrigin});const y=e.computed(()=>{let t={"panel-imageBox":!0,"imageBox-circle":n.isCircle};return t=o.CommonBase.getJsonMerge(t,C.CommonElement.getClassNameJson(n.className)),t}),f=e.computed(()=>{const{width:t,height:s}=n,i={};return o.CommonBase.isNonEmptyString(t)&&(i.width=t),o.CommonBase.isNonEmptyString(s)&&(i.height=s),i}),h=e.computed(()=>{const{width:t,height:s,fit:i}=n,r={};return o.CommonBase.isNonEmptyString(i)&&(r["object-fit"]=i,o.CommonBase.isNonEmptyString(t)&&(r.width=t),o.CommonBase.isNonEmptyString(s)&&(r.height=s)),r});function c(){g("onInit")}return e.watch(()=>n.src,t=>{m.value=o.CommonBase.isNonEmptyString(t)?t:""}),(t,s)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(p),class:e.normalizeClass(y.value),style:e.normalizeStyle(f.value)},[e.createElementVNode("img",{ref_key:"refElImage",ref:a,alt:d.value,style:e.normalizeStyle(h.value)},null,12,E)],14,_))}});exports._sfc_main=N;
|
|
2
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CumTbPny.js","sources":["../../../src/libs/Element/Image/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n :style=\"styParent\"\n >\n <img\n ref=\"refElImage\"\n :alt=\"optAlt\"\n :style=\"styImg\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { useLazyload } from '../LazyImage/use';\nimport './Index.css';\n\n// defineOptions\ndefineOptions({\n name: 'ClImage',\n});\n\n// props\nconst props = defineProps<{\n id?: string; // desc: 自定义id\n className?: string; // desc: 自定义CSS类名\n src: string; // desc: 图片地址\n alt?: string; // desc: 图片替代文本\n height?: string; // desc: 图片高度\n width?: string; // desc: 图片宽度\n isCircle?: boolean; // desc: 是否圆形展示\n fit?: string; // desc: 图片填充方式 | enum: fill, contain, cover, none, scale-down(可自定义)\n isCrossOrigin?: boolean; // desc: 是否跨域加载\n}>();\n\n// emit\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 图片加载完成时触发(成功或失败均触发)\n}>();\n\n// 常量 / 变量定义\nconst optSrcUrl = ref(CommonBase.isNonEmptyString(props.src) ? props.src : '');\nconst refElImage = ref<HTMLImageElement | null>(null);\n\nconst optAlt = computed(() => (CommonBase.isNonEmptyString(props.alt) ? props.alt : ''));\n\n// elId _elId_image\nconst elId = props.id; // || `_elId_image_${CommonBase.getRandom(5)}`;\n\nuseLazyload(refElImage, optSrcUrl, {\n callback: {\n loaded: () => {\n _emitInit();\n },\n error: () => {\n _emitInit();\n },\n },\n isCrossOrigin: props.isCrossOrigin,\n});\n\n// computed\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-imageBox': true,\n 'imageBox-circle': props.isCircle,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styParent = computed(() => {\n const { width, height } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n return sty;\n});\n\nconst styImg = computed(() => {\n const { width, height, fit } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(fit)) {\n sty['object-fit'] = fit;\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n }\n return sty;\n});\n\n// emit包装\nfunction _emitInit() {\n emit('onInit');\n}\n\n// watch\nwatch(\n () => props.src,\n newValue => {\n optSrcUrl.value = CommonBase.isNonEmptyString(newValue) ? newValue : '';\n },\n);\n</script>\n"],"names":["props","__props","emit","__emit","optSrcUrl","ref","CommonBase","refElImage","optAlt","computed","elId","useLazyload","_emitInit","clsParent","cls","CommonElement","styParent","width","height","sty","styImg","fit","watch","newValue","_createElementBlock","_unref","_createElementVNode"],"mappings":"qWA2BA,MAAMA,EAAQC,EAaRC,EAAOC,EAKPC,EAAYC,MAAIC,EAAAA,WAAW,iBAAiBN,EAAM,GAAG,EAAIA,EAAM,IAAM,EAAE,EACvEO,EAAaF,EAAAA,IAA6B,IAAI,EAE9CG,EAASC,EAAAA,SAAS,IAAOH,EAAAA,WAAW,iBAAiBN,EAAM,GAAG,EAAIA,EAAM,IAAM,EAAG,EAGjFU,EAAOV,EAAM,GAEnBW,EAAAA,YAAYJ,EAAYH,EAAW,CACjC,SAAU,CACR,OAAQ,IAAM,CACZQ,EAAA,CACF,EACA,MAAO,IAAM,CACXA,EAAA,CACF,CAAA,EAEF,cAAeZ,EAAM,aAAA,CACtB,EAGD,MAAMa,EAAYJ,EAAAA,SAAS,IAAM,CAC/B,IAAIK,EAA+B,CACjC,iBAAkB,GAClB,kBAAmBd,EAAM,QAAA,EAE3B,OAAAc,EAAMR,EAAAA,WAAW,aAAaQ,EAAKC,EAAAA,cAAc,iBAAiBf,EAAM,SAAS,CAAC,EAC3Ec,CACT,CAAC,EAEKE,EAAYP,EAAAA,SAAS,IAAM,CAC/B,KAAM,CAAE,MAAAQ,EAAO,OAAAC,CAAA,EAAWlB,EACpBmB,EAA8B,CAAA,EACpC,OAAIb,EAAAA,WAAW,iBAAiBW,CAAK,IACnCE,EAAI,MAAQF,GAEVX,EAAAA,WAAW,iBAAiBY,CAAM,IACpCC,EAAI,OAASD,GAERC,CACT,CAAC,EAEKC,EAASX,EAAAA,SAAS,IAAM,CAC5B,KAAM,CAAE,MAAAQ,EAAO,OAAAC,EAAQ,IAAAG,CAAA,EAAQrB,EACzBmB,EAA8B,CAAA,EACpC,OAAIb,EAAAA,WAAW,iBAAiBe,CAAG,IACjCF,EAAI,YAAY,EAAIE,EAChBf,EAAAA,WAAW,iBAAiBW,CAAK,IACnCE,EAAI,MAAQF,GAEVX,EAAAA,WAAW,iBAAiBY,CAAM,IACpCC,EAAI,OAASD,IAGVC,CACT,CAAC,EAGD,SAASP,GAAY,CACnBV,EAAK,QAAQ,CACf,CAGAoB,OAAAA,EAAAA,MACE,IAAMtB,EAAM,IACZuB,GAAY,CACVnB,EAAU,MAAQE,EAAAA,WAAW,iBAAiBiB,CAAQ,EAAIA,EAAW,EACvE,CAAA,wBA/GAC,EAAAA,mBAUM,MAAA,CATH,GAAIC,EAAAA,MAAAf,CAAA,EACJ,uBAAOG,EAAA,KAAS,EAChB,uBAAOG,EAAA,KAAS,CAAA,GAEjBU,EAAAA,mBAIE,MAAA,SAHI,aAAJ,IAAInB,EACH,IAAKC,EAAA,MACL,uBAAOY,EAAA,KAAM,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { defineComponent as q, inject as A, reactive as H, ref as O, computed as
|
|
|
2
2
|
import { C as r } from "./base-DU7nGSf6.js";
|
|
3
3
|
import { C as S } from "./index-DvNmQjNH.js";
|
|
4
4
|
import { _ as b } from "./Index.vue_vue_type_script_setup_true_lang-D4kAoS8e.js";
|
|
5
|
-
import { _ as I } from "./Index.vue_vue_type_script_setup_true_lang-
|
|
5
|
+
import { _ as I } from "./Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js";
|
|
6
6
|
import { _ as ae } from "./Index.vue_vue_type_script_setup_true_lang-C06bNoBf.js";
|
|
7
7
|
const ie = ["id"], se = { class: "previewExample-image-icon" }, ne = { class: "previewExample-video-img previewExample-image" }, oe = ["onClick"], re = {
|
|
8
8
|
key: 3,
|
|
@@ -259,4 +259,4 @@ const ie = ["id"], se = { class: "previewExample-image-icon" }, ne = { class: "p
|
|
|
259
259
|
export {
|
|
260
260
|
ye as _
|
|
261
261
|
};
|
|
262
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
262
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js","sources":["../../../src/libs/Web/PreviewExample/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div :class=\"clsContainer\">\n <div\n v-for=\"(info, inx) in optList\"\n :key=\"`${_keyIndex}-${inx}`\"\n :class=\"clsItem\"\n :style=\"styWH\"\n v-bind=\"attrItemFun(info)\"\n >\n <template v-if=\"type === 'image'\">\n <cl-image\n :src=\"info.value\"\n :class=\"{ 'cursor-pointer': isClickImagePreview }\"\n @click.stop=\"onClickImage(info, inx)\"\n />\n <div class=\"previewExample-image-icon\">\n <cl-icon-font\n title=\"预览\"\n name=\"search\"\n aria-label=\"预览\"\n @click.stop=\"onPreview(info, inx, 'image')\"\n />\n <cl-icon-font\n v-if=\"isShowDelete\"\n title=\"删除\"\n name=\"close\"\n aria-label=\"删除\"\n @click.stop=\"onDelete(inx)\"\n />\n <template v-else></template>\n </div>\n </template>\n <template v-else-if=\"type === 'video'\">\n <div class=\"previewExample-video-img previewExample-image\">\n <cl-image\n v-if=\"info.imgUrl && info.imgUrl.length > 0\"\n :src=\"info.imgUrl\"\n />\n </div>\n <div\n class=\"previewExample-video-icon\"\n @click.stop=\"onPreview(info, inx, 'video')\"\n >\n <cl-icon-font\n name=\"play\"\n aria-label=\"播放\"\n />\n </div>\n </template>\n <template v-else></template>\n <div\n v-if=\"(label && label.length > 0) || (info.label && info.label.length > 0)\"\n class=\"previewExample-label-msg\"\n >\n {{ label && label.length > 0 ? label : info.label }}\n </div>\n <template v-else></template>\n <div\n v-if=\"showNum > -1 && inx === optList.length - 1 && optPageBase.totalCount > showNum\"\n class=\"previewExample-totalCount\"\n >\n <span>共{{ optPageBase.totalCount }}{{ type === 'image' ? '张' : '个' }}</span>\n </div>\n <template v-else></template>\n <slot\n name=\"extend\"\n :data=\"info\"\n :inx=\"inx\"\n />\n </div>\n <div\n v-if=\"isShowLoading && isLoading\"\n :class=\"[`previewExample-${type}`]\"\n :style=\"styWH\"\n >\n <cl-load\n theme=\"circleNotch\"\n size=\"large\"\n />\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, watch, onMounted, nextTick, computed, reactive, ref } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport ClImage from '../../Element/Image/Index.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './index.css';\n\nexport interface ListInfo {\n value: string;\n imgUrl?: string;\n label?: string;\n id?: string;\n ranId?: string;\n}\n\ninterface ClGlobals {\n preview: {\n show: (opts: {\n type: string;\n src: string | string[];\n showIndex: number;\n isShowCopy: boolean;\n }) => void;\n };\n}\n\ndefineOptions({ name: 'ClPreviewExample' });\n\nconst props = defineProps({\n id: String, // desc: 元素唯一标识\n className: String, // desc: 自定义 CSS 类名\n classContainer: String, // desc: 容器自定义 CSS 类名\n classItem: String, // desc: 单项自定义 CSS 类名\n type: {\n type: String,\n default: 'image', // desc: 预览类型 | enum: image, video\n validator: (v: string) => ['image', 'video'].includes(v),\n },\n width: {\n type: [Number, String],\n default: 'auto', // desc: 预览区域宽度\n },\n height: {\n type: Number,\n required: true, // desc: 预览区域高度(必填)\n },\n isWidthFull: {\n type: Boolean,\n default: true, // desc: 宽度是否铺满 | enum: true, false\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 预览数据列表\n },\n label: String, // desc: 标签文本\n previewIconSize: {\n type: String,\n default: 'large', // desc: 预览图标尺寸 | enum: large, small (可自定义)\n },\n isShowLoading: {\n type: Boolean,\n default: false, // desc: 是否显示加载状态\n },\n isLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowDelete: {\n type: Boolean,\n default: false, // desc: 是否显示删除按钮\n },\n showNum: {\n type: Number,\n default: -1, // desc: 最多显示数量,-1 表示不限制\n },\n srcValueKey: {\n type: String,\n default: 'value', // desc: 列表项中取 src 的 key 名\n },\n isShowCopy: {\n type: Boolean,\n default: true, // desc: 是否显示复制功能\n },\n isClickImagePreview: {\n type: Boolean,\n default: false, // desc: 点击图片是否触发预览\n },\n previewCallback: Function, // desc: 自定义预览回调\n});\n\nconst emit = defineEmits<{ onDelete: [inx: number] }>(); // desc: 删除项时触发,参数为项索引\n// slots: extend\n\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst _keyIndex = `previewexample-${CommonBase.getRandom(5)}`;\n\nconst elId = props.id; // || `_elId_previewexample-${CommonBase.getRandom(5)}`\n\nconst optPageBase = reactive({\n totalCount: -1,\n});\nconst optList = ref<ListInfo[]>([]);\n\nconst optIsWidthEmpty = computed(() => {\n const { width } = props;\n let isEmpty = false;\n if (CommonBase.isEmpty(width)) {\n isEmpty = true;\n } else {\n if (typeof width === 'string' && width === 'auto') {\n isEmpty = true;\n } else if (typeof width === 'number' && width <= 0) {\n isEmpty = true;\n }\n }\n return isEmpty;\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-previewexample': true,\n 'previewExample-width-default': props.isWidthFull,\n 'previewExample-width-auto': !props.isWidthFull,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsContainer = computed(() => {\n let cls: Record<string, boolean> = {\n 'previewExample-container': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.classContainer));\n return cls;\n});\n\nconst clsItem = computed(() => {\n const { type, previewIconSize } = props;\n let cls: Record<string, boolean> = {\n 'previewExample-item': true,\n };\n cls[`previewExample-${type}`] = true;\n cls[`previewExample-iconSize-${previewIconSize}`] = true;\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.classItem));\n return cls;\n});\n\nconst styWH = computed(() => {\n const sty: Record<string, string> = {\n height: `${props.height}px`,\n };\n if (!optIsWidthEmpty.value) {\n let width = props.width.toString();\n if (width.indexOf('%') === -1) {\n width = `${props.width}px`;\n }\n sty['width'] = width;\n }\n return sty;\n});\n\nconst _emitDelete = (inx: number) => {\n emit('onDelete', inx);\n};\n\nconst _initList = () => {\n const { list, showNum, srcValueKey } = props;\n let newList = CommonBase.getListClone(list);\n let newShowNum = list.length;\n if (showNum > 0 && list.length >= showNum) {\n newShowNum = showNum;\n }\n const temp: ListInfo[] = [];\n newList.forEach((info: any, i: number) => {\n if (CommonBase.isEmpty(info)) return;\n if (i + 1 <= newShowNum) {\n if (CommonBase.isString(info)) {\n temp.push({ value: info });\n } else {\n const srcValue = CommonBase.isExistJsonKey(info, srcValueKey)\n ? info[srcValueKey]\n : info.value;\n temp.push({ ...info, value: srcValue });\n }\n }\n });\n newList = temp;\n optPageBase.totalCount = list.length;\n optList.value = newList;\n};\n\nconst _initMain = () => {\n _initList();\n};\n\nconst attrItemFun = (info: any) => {\n const attr: Record<string, string> = {};\n if (!CommonBase.isEmpty(info.id)) {\n attr['data-id'] = info.id;\n }\n if (!CommonBase.isEmpty(info.ranId)) {\n attr['data-ran-id'] = info.ranId;\n }\n return attr;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n () => {\n _initList();\n },\n { deep: true },\n);\n\nconst onClickImage = (info: any, showIndex: number) => {\n if (props.isClickImagePreview) {\n onPreview(info, showIndex, 'image');\n }\n};\n\nconst onPreview = (info: any, showIndex: number, type: string) => {\n try {\n if (props.previewCallback) {\n props.previewCallback(type, info, showIndex);\n } else {\n if (!_clGlobals || CommonBase.isEmpty(_clGlobals.preview)) return;\n const { list } = props;\n let src;\n if (list.length === 1) {\n src = info.value;\n } else {\n src = list.map((p: any) => (CommonBase.isString(p) ? p : p.value));\n }\n _clGlobals.preview.show({\n type,\n src,\n showIndex,\n isShowCopy: props.isShowCopy,\n });\n }\n } catch (e) {\n // 预览异常静默处理,避免阻塞用户交互\n }\n};\n\nconst onDelete = (inx: number) => {\n _emitDelete(inx);\n};\n</script>\n"],"names":["props","__props","emit","__emit","_clGlobals","inject","_keyIndex","CommonBase","elId","optPageBase","reactive","optList","ref","optIsWidthEmpty","computed","width","isEmpty","clsParent","cls","CommonElement","clsContainer","clsItem","type","previewIconSize","styWH","sty","_emitDelete","inx","_initList","list","showNum","srcValueKey","newList","newShowNum","temp","info","i","srcValue","_initMain","attrItemFun","attr","onMounted","nextTick","watch","onClickImage","showIndex","onPreview","src","p","onDelete","_createElementBlock","_unref","_createElementVNode","_openBlock","_Fragment","_renderList","_mergeProps","_createVNode","ClImage","_withModifiers","$event","_hoisted_2","ClIconFont","_createBlock","_hoisted_3","_hoisted_5","_toDisplayString","_hoisted_6","_renderSlot","_ctx","ClLoad"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js","sources":["../../../src/libs/Web/PreviewExample/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div :class=\"clsContainer\">\n <div\n v-for=\"(info, inx) in optList\"\n :key=\"`${_keyIndex}-${inx}`\"\n :class=\"clsItem\"\n :style=\"styWH\"\n v-bind=\"attrItemFun(info)\"\n >\n <template v-if=\"type === 'image'\">\n <cl-image\n :src=\"info.value\"\n :class=\"{ 'cursor-pointer': isClickImagePreview }\"\n @click.stop=\"onClickImage(info, inx)\"\n />\n <div class=\"previewExample-image-icon\">\n <cl-icon-font\n title=\"预览\"\n name=\"search\"\n aria-label=\"预览\"\n @click.stop=\"onPreview(info, inx, 'image')\"\n />\n <cl-icon-font\n v-if=\"isShowDelete\"\n title=\"删除\"\n name=\"close\"\n aria-label=\"删除\"\n @click.stop=\"onDelete(inx)\"\n />\n <template v-else></template>\n </div>\n </template>\n <template v-else-if=\"type === 'video'\">\n <div class=\"previewExample-video-img previewExample-image\">\n <cl-image\n v-if=\"info.imgUrl && info.imgUrl.length > 0\"\n :src=\"info.imgUrl\"\n />\n </div>\n <div\n class=\"previewExample-video-icon\"\n @click.stop=\"onPreview(info, inx, 'video')\"\n >\n <cl-icon-font\n name=\"play\"\n aria-label=\"播放\"\n />\n </div>\n </template>\n <template v-else></template>\n <div\n v-if=\"(label && label.length > 0) || (info.label && info.label.length > 0)\"\n class=\"previewExample-label-msg\"\n >\n {{ label && label.length > 0 ? label : info.label }}\n </div>\n <template v-else></template>\n <div\n v-if=\"showNum > -1 && inx === optList.length - 1 && optPageBase.totalCount > showNum\"\n class=\"previewExample-totalCount\"\n >\n <span>共{{ optPageBase.totalCount }}{{ type === 'image' ? '张' : '个' }}</span>\n </div>\n <template v-else></template>\n <slot\n name=\"extend\"\n :data=\"info\"\n :inx=\"inx\"\n />\n </div>\n <div\n v-if=\"isShowLoading && isLoading\"\n :class=\"[`previewExample-${type}`]\"\n :style=\"styWH\"\n >\n <cl-load\n theme=\"circleNotch\"\n size=\"large\"\n />\n </div>\n <template v-else></template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, watch, onMounted, nextTick, computed, reactive, ref } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport ClImage from '../../Element/Image/Index.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport './index.css';\n\nexport interface ListInfo {\n value: string;\n imgUrl?: string;\n label?: string;\n id?: string;\n ranId?: string;\n}\n\ninterface ClGlobals {\n preview: {\n show: (opts: {\n type: string;\n src: string | string[];\n showIndex: number;\n isShowCopy: boolean;\n }) => void;\n };\n}\n\ndefineOptions({ name: 'ClPreviewExample' });\n\nconst props = defineProps({\n id: String, // desc: 元素唯一标识\n className: String, // desc: 自定义 CSS 类名\n classContainer: String, // desc: 容器自定义 CSS 类名\n classItem: String, // desc: 单项自定义 CSS 类名\n type: {\n type: String,\n default: 'image', // desc: 预览类型 | enum: image, video\n validator: (v: string) => ['image', 'video'].includes(v),\n },\n width: {\n type: [Number, String],\n default: 'auto', // desc: 预览区域宽度\n },\n height: {\n type: Number,\n required: true, // desc: 预览区域高度(必填)\n },\n isWidthFull: {\n type: Boolean,\n default: true, // desc: 宽度是否铺满 | enum: true, false\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 预览数据列表\n },\n label: String, // desc: 标签文本\n previewIconSize: {\n type: String,\n default: 'large', // desc: 预览图标尺寸 | enum: large, small (可自定义)\n },\n isShowLoading: {\n type: Boolean,\n default: false, // desc: 是否显示加载状态\n },\n isLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowDelete: {\n type: Boolean,\n default: false, // desc: 是否显示删除按钮\n },\n showNum: {\n type: Number,\n default: -1, // desc: 最多显示数量,-1 表示不限制\n },\n srcValueKey: {\n type: String,\n default: 'value', // desc: 列表项中取 src 的 key 名\n },\n isShowCopy: {\n type: Boolean,\n default: true, // desc: 是否显示复制功能\n },\n isClickImagePreview: {\n type: Boolean,\n default: false, // desc: 点击图片是否触发预览\n },\n previewCallback: Function, // desc: 自定义预览回调\n});\n\nconst emit = defineEmits<{ onDelete: [inx: number] }>(); // desc: 删除项时触发,参数为项索引\n// slots: extend\n\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst _keyIndex = `previewexample-${CommonBase.getRandom(5)}`;\n\nconst elId = props.id; // || `_elId_previewexample-${CommonBase.getRandom(5)}`\n\nconst optPageBase = reactive({\n totalCount: -1,\n});\nconst optList = ref<ListInfo[]>([]);\n\nconst optIsWidthEmpty = computed(() => {\n const { width } = props;\n let isEmpty = false;\n if (CommonBase.isEmpty(width)) {\n isEmpty = true;\n } else {\n if (typeof width === 'string' && width === 'auto') {\n isEmpty = true;\n } else if (typeof width === 'number' && width <= 0) {\n isEmpty = true;\n }\n }\n return isEmpty;\n});\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-previewexample': true,\n 'previewExample-width-default': props.isWidthFull,\n 'previewExample-width-auto': !props.isWidthFull,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsContainer = computed(() => {\n let cls: Record<string, boolean> = {\n 'previewExample-container': true,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.classContainer));\n return cls;\n});\n\nconst clsItem = computed(() => {\n const { type, previewIconSize } = props;\n let cls: Record<string, boolean> = {\n 'previewExample-item': true,\n };\n cls[`previewExample-${type}`] = true;\n cls[`previewExample-iconSize-${previewIconSize}`] = true;\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.classItem));\n return cls;\n});\n\nconst styWH = computed(() => {\n const sty: Record<string, string> = {\n height: `${props.height}px`,\n };\n if (!optIsWidthEmpty.value) {\n let width = props.width.toString();\n if (width.indexOf('%') === -1) {\n width = `${props.width}px`;\n }\n sty['width'] = width;\n }\n return sty;\n});\n\nconst _emitDelete = (inx: number) => {\n emit('onDelete', inx);\n};\n\nconst _initList = () => {\n const { list, showNum, srcValueKey } = props;\n let newList = CommonBase.getListClone(list);\n let newShowNum = list.length;\n if (showNum > 0 && list.length >= showNum) {\n newShowNum = showNum;\n }\n const temp: ListInfo[] = [];\n newList.forEach((info: any, i: number) => {\n if (CommonBase.isEmpty(info)) return;\n if (i + 1 <= newShowNum) {\n if (CommonBase.isString(info)) {\n temp.push({ value: info });\n } else {\n const srcValue = CommonBase.isExistJsonKey(info, srcValueKey)\n ? info[srcValueKey]\n : info.value;\n temp.push({ ...info, value: srcValue });\n }\n }\n });\n newList = temp;\n optPageBase.totalCount = list.length;\n optList.value = newList;\n};\n\nconst _initMain = () => {\n _initList();\n};\n\nconst attrItemFun = (info: any) => {\n const attr: Record<string, string> = {};\n if (!CommonBase.isEmpty(info.id)) {\n attr['data-id'] = info.id;\n }\n if (!CommonBase.isEmpty(info.ranId)) {\n attr['data-ran-id'] = info.ranId;\n }\n return attr;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.list,\n () => {\n _initList();\n },\n { deep: true },\n);\n\nconst onClickImage = (info: any, showIndex: number) => {\n if (props.isClickImagePreview) {\n onPreview(info, showIndex, 'image');\n }\n};\n\nconst onPreview = (info: any, showIndex: number, type: string) => {\n try {\n if (props.previewCallback) {\n props.previewCallback(type, info, showIndex);\n } else {\n if (!_clGlobals || CommonBase.isEmpty(_clGlobals.preview)) return;\n const { list } = props;\n let src;\n if (list.length === 1) {\n src = info.value;\n } else {\n src = list.map((p: any) => (CommonBase.isString(p) ? p : p.value));\n }\n _clGlobals.preview.show({\n type,\n src,\n showIndex,\n isShowCopy: props.isShowCopy,\n });\n }\n } catch (e) {\n // 预览异常静默处理,避免阻塞用户交互\n }\n};\n\nconst onDelete = (inx: number) => {\n _emitDelete(inx);\n};\n</script>\n"],"names":["props","__props","emit","__emit","_clGlobals","inject","_keyIndex","CommonBase","elId","optPageBase","reactive","optList","ref","optIsWidthEmpty","computed","width","isEmpty","clsParent","cls","CommonElement","clsContainer","clsItem","type","previewIconSize","styWH","sty","_emitDelete","inx","_initList","list","showNum","srcValueKey","newList","newShowNum","temp","info","i","srcValue","_initMain","attrItemFun","attr","onMounted","nextTick","watch","onClickImage","showIndex","onPreview","src","p","onDelete","_createElementBlock","_unref","_createElementVNode","_openBlock","_Fragment","_renderList","_mergeProps","_createVNode","ClImage","_withModifiers","$event","_hoisted_2","ClIconFont","_createBlock","_hoisted_3","_hoisted_5","_toDisplayString","_hoisted_6","_renderSlot","_ctx","ClLoad"],"mappings":"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"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { defineComponent as z, reactive as A, ref as q, computed as S, onMounted as W, nextTick as H, watch as k, openBlock as V, createElementBlock as E, normalizeClass as Q, unref as X, Fragment as Y, renderList as Z, normalizeStyle as ee, createVNode as L, withCtx as te } from "vue";
|
|
2
|
+
import { C as a } from "./base-DU7nGSf6.js";
|
|
3
|
+
import { C as se } from "./index-DvNmQjNH.js";
|
|
4
|
+
import { u as ae } from "./language-BxAxu5Gv.js";
|
|
5
|
+
import { _ as ne } from "./Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js";
|
|
6
|
+
import { _ as oe } from "./Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js";
|
|
7
|
+
const le = ["id"], me = /* @__PURE__ */ z({
|
|
8
|
+
name: "ClSelectCascade",
|
|
9
|
+
__name: "Index",
|
|
10
|
+
props: {
|
|
11
|
+
id: String,
|
|
12
|
+
// desc: 自定义元素ID
|
|
13
|
+
value: [String, Number],
|
|
14
|
+
// desc: 选中的值
|
|
15
|
+
className: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: ""
|
|
18
|
+
// desc: 自定义CSS类名
|
|
19
|
+
},
|
|
20
|
+
disabled: {
|
|
21
|
+
type: Boolean,
|
|
22
|
+
default: !1
|
|
23
|
+
// desc: 是否禁用
|
|
24
|
+
},
|
|
25
|
+
list: {
|
|
26
|
+
type: Array,
|
|
27
|
+
default: () => []
|
|
28
|
+
// desc: 级联数据列表
|
|
29
|
+
},
|
|
30
|
+
placeholder: String,
|
|
31
|
+
// desc: 各层级占位符,多个用 | 分隔
|
|
32
|
+
isClear: {
|
|
33
|
+
type: Boolean,
|
|
34
|
+
default: !1
|
|
35
|
+
// desc: 是否可清空
|
|
36
|
+
},
|
|
37
|
+
isSearch: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: !1
|
|
40
|
+
// desc: 是否可搜索
|
|
41
|
+
},
|
|
42
|
+
parentKey: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: "parentId"
|
|
45
|
+
// desc: 父级键名字段
|
|
46
|
+
},
|
|
47
|
+
topParentValue: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: "0"
|
|
50
|
+
// desc: 顶级父值
|
|
51
|
+
},
|
|
52
|
+
width: String,
|
|
53
|
+
// desc: 各层级下拉宽度,多个用 | 分隔,需带单位(px/%)
|
|
54
|
+
isCheckValidate: {
|
|
55
|
+
type: Boolean,
|
|
56
|
+
default: !1
|
|
57
|
+
// desc: 是否启用校验
|
|
58
|
+
},
|
|
59
|
+
validateRules: {
|
|
60
|
+
type: Array,
|
|
61
|
+
default: () => [{ r: "required" }]
|
|
62
|
+
// desc: 校验规则
|
|
63
|
+
},
|
|
64
|
+
isShowInMsg: {
|
|
65
|
+
type: Boolean,
|
|
66
|
+
default: !0
|
|
67
|
+
// desc: 校验信息是否在消息中显示
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
emits: {
|
|
71
|
+
"update:value": (p) => !0,
|
|
72
|
+
// desc: 值变化时触发
|
|
73
|
+
onChange: (p) => !0
|
|
74
|
+
// desc: 选中变化时触发
|
|
75
|
+
},
|
|
76
|
+
setup(p, { expose: K, emit: F }) {
|
|
77
|
+
const i = p, I = F, { optPageLanguage: B, getPageLanguage: M } = ae();
|
|
78
|
+
M("common");
|
|
79
|
+
const N = `selectCascade-${a.getRandom(5)}`, $ = i.id, u = A({
|
|
80
|
+
lastValue: i.value,
|
|
81
|
+
isFirstDataFinish: !1
|
|
82
|
+
}), g = q([]), d = {
|
|
83
|
+
dataJson: {},
|
|
84
|
+
dataGroup: {},
|
|
85
|
+
parentIdsJson: {}
|
|
86
|
+
}, J = S(() => B.value.pleaseSelect), b = S(() => {
|
|
87
|
+
const { placeholder: e } = i;
|
|
88
|
+
return a.isNonEmptyString(e) ? e.split("|") : [];
|
|
89
|
+
}), G = S(() => {
|
|
90
|
+
const { width: e } = i;
|
|
91
|
+
return a.isNonEmptyString(e) ? e.split("|") : [];
|
|
92
|
+
}), O = S(() => {
|
|
93
|
+
let e = { "panel-selectCascade": !0 };
|
|
94
|
+
return e = a.getJsonMerge(e, se.getClassNameJson(i.className)), e;
|
|
95
|
+
}), x = (e) => {
|
|
96
|
+
e !== u.lastValue && (u.lastValue = e, I("update:value", e), I("onChange", e));
|
|
97
|
+
}, _ = (e) => a.isExistJsonKey(d.dataGroup, e), R = (e) => _(e) ? d.dataGroup[e] : [], D = (e) => a.isExistJsonKey(d.dataJson, e) ? d.dataJson[e] : null, v = () => `top_${i.topParentValue}`, w = (e) => {
|
|
98
|
+
const { parentKey: t, topParentValue: s } = i, n = {}, o = {};
|
|
99
|
+
a.isEmpty(e) || e.forEach((r) => {
|
|
100
|
+
const l = a.getJsonClone(r);
|
|
101
|
+
if (!a.isExistJsonKey(l, "id") || !a.isExistJsonKey(l, t))
|
|
102
|
+
return;
|
|
103
|
+
const c = l.id.toString(), f = l[t].toString();
|
|
104
|
+
n[c] = l;
|
|
105
|
+
const h = f === s.toString() ? v() : f;
|
|
106
|
+
a.isExistJsonKey(o, h) || (o[h] = []), o[h].push(l);
|
|
107
|
+
}), d.dataJson = n, d.dataGroup = o;
|
|
108
|
+
}, m = (e, t) => {
|
|
109
|
+
const s = {
|
|
110
|
+
idx: e,
|
|
111
|
+
pId: t,
|
|
112
|
+
placeholder: J.value,
|
|
113
|
+
list: [],
|
|
114
|
+
sty: {},
|
|
115
|
+
selected: ""
|
|
116
|
+
};
|
|
117
|
+
if (!a.isEmpty(t)) {
|
|
118
|
+
const l = R(t);
|
|
119
|
+
s.list = a.getListClone(l);
|
|
120
|
+
}
|
|
121
|
+
const n = b.value, o = n.length;
|
|
122
|
+
o > 0 && (o > e ? s.placeholder = a.isEmpty(n[e]) ? J.value : n[e] : o === 1 && (s.placeholder = n[0]));
|
|
123
|
+
const r = G.value;
|
|
124
|
+
return r.length > e && (a.isEmpty(r[e]) || (s.sty.width = r[e], s.sty.flex = "none")), s;
|
|
125
|
+
}, C = (e, t) => {
|
|
126
|
+
const { parentKey: s, topParentValue: n } = i;
|
|
127
|
+
let o = [];
|
|
128
|
+
if (t && t.indexOf(e) > -1)
|
|
129
|
+
return [];
|
|
130
|
+
const r = t ? t.concat([e]) : [e];
|
|
131
|
+
if (a.isExistJsonKey(d.parentIdsJson, e))
|
|
132
|
+
o = d.parentIdsJson[e];
|
|
133
|
+
else {
|
|
134
|
+
const l = D(e);
|
|
135
|
+
if (l != null) {
|
|
136
|
+
const c = l[s].toString();
|
|
137
|
+
if (c !== n.toString()) {
|
|
138
|
+
const f = D(c);
|
|
139
|
+
if (f != null) {
|
|
140
|
+
o.push(c);
|
|
141
|
+
const h = C(c, r);
|
|
142
|
+
h.length > 0 && (o = o.concat(h));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
d.parentIdsJson[e] = o;
|
|
147
|
+
}
|
|
148
|
+
return o;
|
|
149
|
+
}, y = (e) => {
|
|
150
|
+
let t = a.isUndefined(e) ? i.value : e;
|
|
151
|
+
t != null && !a.isEmpty(t) && !a.isExistJsonKey(d.dataJson, t.toString()) && (t = "");
|
|
152
|
+
const s = [];
|
|
153
|
+
if (t == null || a.isEmpty(t))
|
|
154
|
+
s.push(m(0, v())), s.push(m(1, ""));
|
|
155
|
+
else {
|
|
156
|
+
const n = t.toString(), o = [...C(n)].reverse(), r = o.length;
|
|
157
|
+
if (r > 0) {
|
|
158
|
+
o.forEach((c, f) => {
|
|
159
|
+
const h = f === 0 ? v() : c, P = m(f, h);
|
|
160
|
+
P.selected = c, s.push(P);
|
|
161
|
+
});
|
|
162
|
+
const l = m(r, o[r - 1]);
|
|
163
|
+
l.selected = n, s.push(l);
|
|
164
|
+
} else {
|
|
165
|
+
const l = m(0, v());
|
|
166
|
+
l.selected = n, s.push(l);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
g.value = s;
|
|
170
|
+
}, j = () => {
|
|
171
|
+
w(i.list), y(), u.isFirstDataFinish = !0, u.lastValue = i.value;
|
|
172
|
+
};
|
|
173
|
+
W(() => {
|
|
174
|
+
H(() => {
|
|
175
|
+
j();
|
|
176
|
+
});
|
|
177
|
+
}), k(
|
|
178
|
+
() => i.value,
|
|
179
|
+
(e) => {
|
|
180
|
+
e !== u.lastValue && u.isFirstDataFinish && (y(), u.lastValue = e);
|
|
181
|
+
}
|
|
182
|
+
), k(
|
|
183
|
+
() => i.list,
|
|
184
|
+
(e) => {
|
|
185
|
+
if (!u.isFirstDataFinish) {
|
|
186
|
+
u.isFirstDataFinish = !0;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
d.parentIdsJson = {}, w(e);
|
|
190
|
+
const { value: t } = i, s = t != null && !a.isEmpty(t) && a.isExistJsonKey(d.dataJson, t.toString()) ? t : "";
|
|
191
|
+
y(s), u.lastValue = s;
|
|
192
|
+
}
|
|
193
|
+
);
|
|
194
|
+
const T = () => !0, U = (e, t) => {
|
|
195
|
+
let s = "";
|
|
196
|
+
if (a.isEmpty(e) && t === 0)
|
|
197
|
+
y("");
|
|
198
|
+
else if (a.isEmpty(e)) {
|
|
199
|
+
if (g.value.splice(t + 1), t > 0) {
|
|
200
|
+
const n = g.value[t - 1];
|
|
201
|
+
n && (s = n.selected);
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
const n = e.toString();
|
|
205
|
+
_(n) ? (g.value.splice(t + 1), g.value.push(m(t + 1, n))) : (s = e, g.value.splice(t + 1));
|
|
206
|
+
}
|
|
207
|
+
x(s);
|
|
208
|
+
};
|
|
209
|
+
return K({
|
|
210
|
+
getValue: () => u.lastValue,
|
|
211
|
+
getValueData: () => {
|
|
212
|
+
const e = u.lastValue;
|
|
213
|
+
let t = "";
|
|
214
|
+
if (e != null && !a.isEmpty(e)) {
|
|
215
|
+
const s = e.toString(), n = C(s), o = n.length > 0 ? n.slice().reverse().concat([s]) : [s], r = [];
|
|
216
|
+
o.forEach((l) => {
|
|
217
|
+
const c = d.dataJson[l];
|
|
218
|
+
c != null && !a.isEmpty(c.name) && r.push(c.name);
|
|
219
|
+
}), t = r.join(" → ");
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
value: e,
|
|
223
|
+
show: t || (e != null ? e.toString() : "")
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
setValue: (e) => {
|
|
227
|
+
y(e), u.lastValue = e;
|
|
228
|
+
}
|
|
229
|
+
}), (e, t) => (V(), E("div", {
|
|
230
|
+
id: X($),
|
|
231
|
+
class: Q(O.value)
|
|
232
|
+
}, [
|
|
233
|
+
(V(!0), E(Y, null, Z(g.value, (s, n) => (V(), E("div", {
|
|
234
|
+
key: `${N}-${n}`,
|
|
235
|
+
class: "selectCascade-item",
|
|
236
|
+
style: ee(s.sty)
|
|
237
|
+
}, [
|
|
238
|
+
L(ne, {
|
|
239
|
+
isShowMsg: p.isShowInMsg,
|
|
240
|
+
isCheck: p.isCheckValidate,
|
|
241
|
+
checkValue: s.selected,
|
|
242
|
+
rules: p.validateRules
|
|
243
|
+
}, {
|
|
244
|
+
default: te(() => [
|
|
245
|
+
L(oe, {
|
|
246
|
+
isClear: p.isClear,
|
|
247
|
+
isSearch: p.isSearch,
|
|
248
|
+
placeholder: s.placeholder,
|
|
249
|
+
list: s.list,
|
|
250
|
+
disabled: p.disabled,
|
|
251
|
+
value: s.selected,
|
|
252
|
+
"onUpdate:value": (o) => s.selected = o,
|
|
253
|
+
onOpenBefore: T,
|
|
254
|
+
onOnChange: (o) => U(o, n)
|
|
255
|
+
}, null, 8, ["isClear", "isSearch", "placeholder", "list", "disabled", "value", "onUpdate:value", "onOnChange"])
|
|
256
|
+
]),
|
|
257
|
+
_: 2
|
|
258
|
+
}, 1032, ["isShowMsg", "isCheck", "checkValue", "rules"])
|
|
259
|
+
], 4))), 128))
|
|
260
|
+
], 10, le));
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
export {
|
|
264
|
+
me as _
|
|
265
|
+
};
|
|
266
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js","sources":["../../../src/libs/Web/SelectCascade/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-for=\"(item, inx) in optData\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"selectCascade-item\"\n :style=\"item.sty\"\n >\n <cl-form-validate\n :isShowMsg=\"isShowInMsg\"\n :isCheck=\"isCheckValidate\"\n :checkValue=\"item.selected\"\n :rules=\"validateRules\"\n >\n <cl-select\n :isClear=\"isClear\"\n :isSearch=\"isSearch\"\n :placeholder=\"item.placeholder\"\n :list=\"item.list\"\n :disabled=\"disabled\"\n v-model:value=\"item.selected\"\n :onOpenBefore=\"onCheckOpen\"\n @onChange=\"onChangeItem($event, inx)\"\n />\n </cl-form-validate>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, onMounted, nextTick, reactive, ref, computed } from 'vue';\nimport type { PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport useLanguage from '../../Use/language';\nimport ClFormValidate from '../../Element/Form/Validate.vue';\nimport ClSelect from '../Select/Index.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClSelectCascade' });\n\nconst props = defineProps({\n id: String, // desc: 自定义元素ID\n value: [String, Number], // desc: 选中的值\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [], // desc: 级联数据列表\n },\n placeholder: String, // desc: 各层级占位符,多个用 | 分隔\n isClear: {\n type: Boolean,\n default: false, // desc: 是否可清空\n },\n isSearch: {\n type: Boolean,\n default: false, // desc: 是否可搜索\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级键名字段\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父值\n },\n width: String, // desc: 各层级下拉宽度,多个用 | 分隔,需带单位(px/%)\n\n isCheckValidate: {\n type: Boolean,\n default: false, // desc: 是否启用校验\n },\n validateRules: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [{ r: 'required' }], // desc: 校验规则\n },\n isShowInMsg: {\n type: Boolean,\n default: true, // desc: 校验信息是否在消息中显示\n },\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 值变化时触发\n onChange: (_value: string | number) => true, // desc: 选中变化时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `selectCascade-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `selectCascade-${CommonBase.getRandom(8)}`\n\ninterface SelectCascadeItem {\n idx: number;\n pId: string;\n placeholder: string;\n list: Record<string, any>[];\n sty: Record<string, string>;\n selected: string;\n}\ninterface SelectCascadePageData {\n dataJson: Record<string, any>;\n dataGroup: Record<string, any[]>;\n parentIdsJson: Record<string, string[]>;\n}\n\nconst optBase = reactive({\n lastValue: props.value,\n isFirstDataFinish: false,\n});\nconst optData = ref<SelectCascadeItem[]>([]);\nconst _pageData: SelectCascadePageData = {\n dataJson: {},\n dataGroup: {},\n parentIdsJson: {},\n};\n\nconst optDefPlaceholder = computed(() => optPageLanguage.value.pleaseSelect);\n\nconst optPlaceholderList = computed(() => {\n const { placeholder } = props;\n const list: string[] = CommonBase.isNonEmptyString(placeholder) ? placeholder.split('|') : [];\n return list;\n});\nconst optWidthList = computed(() => {\n const { width } = props;\n const list: string[] = CommonBase.isNonEmptyString(width) ? width.split('|') : [];\n return list;\n});\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-selectCascade': true };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst _emitChange = (value: string | number) => {\n if (value !== optBase.lastValue) {\n optBase.lastValue = value;\n emit('update:value', value);\n emit('onChange', value);\n }\n};\n\nconst _checkIsChildren = (id: string) => {\n return CommonBase.isExistJsonKey(_pageData.dataGroup, id);\n};\nconst _getDataGroup = (id: string) => {\n return _checkIsChildren(id) ? _pageData.dataGroup[id] : [];\n};\nconst _getDataInfo = (id: string): Record<string, any> | null => {\n return CommonBase.isExistJsonKey(_pageData.dataJson, id) ? _pageData.dataJson[id] : null;\n};\nconst _getTopParentValue = () => {\n return `top_${props.topParentValue}`;\n};\nconst _convertData = (list: Record<string, any>[]) => {\n const { parentKey, topParentValue } = props;\n const json: Record<string, any> = {};\n const group: Record<string, any[]> = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: Record<string, any>) => {\n const newInfo = CommonBase.getJsonClone(info);\n if (\n !CommonBase.isExistJsonKey(newInfo, 'id') ||\n !CommonBase.isExistJsonKey(newInfo, parentKey)\n ) {\n return;\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n const pIdKey = pId === topParentValue.toString() ? _getTopParentValue() : pId;\n if (!CommonBase.isExistJsonKey(group, pIdKey)) {\n group[pIdKey] = [];\n }\n group[pIdKey].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n};\nconst _convertTreeItemData = (idx: number, pId: string): SelectCascadeItem => {\n const json: SelectCascadeItem = {\n idx,\n pId,\n placeholder: optDefPlaceholder.value,\n list: [],\n sty: {},\n selected: '',\n };\n if (!CommonBase.isEmpty(pId)) {\n const groupList = _getDataGroup(pId);\n json.list = CommonBase.getListClone(groupList);\n }\n const placeholderList = optPlaceholderList.value;\n const placeholderLen = placeholderList.length;\n if (placeholderLen > 0) {\n if (placeholderLen > idx) {\n json.placeholder = !CommonBase.isEmpty(placeholderList[idx])\n ? placeholderList[idx]\n : optDefPlaceholder.value;\n } else {\n if (placeholderLen === 1) {\n json.placeholder = placeholderList[0];\n }\n }\n }\n const widthList = optWidthList.value;\n if (widthList.length > idx) {\n if (!CommonBase.isEmpty(widthList[idx])) {\n json.sty.width = widthList[idx];\n json.sty.flex = 'none';\n }\n }\n return json;\n};\nconst _getRecursionParentIds = (id: string, visited?: string[]): string[] => {\n const { parentKey, topParentValue } = props;\n let arr: string[] = [];\n if (visited && visited.indexOf(id) > -1) {\n return [];\n }\n const visitList = visited ? visited.concat([id]) : [id];\n if (CommonBase.isExistJsonKey(_pageData.parentIdsJson, id)) {\n arr = _pageData.parentIdsJson[id];\n } else {\n const info = _getDataInfo(id);\n if (info !== undefined && info !== null) {\n const pId = info[parentKey].toString();\n if (pId !== topParentValue.toString()) {\n const pInfo = _getDataInfo(pId);\n if (pInfo !== undefined && pInfo !== null) {\n arr.push(pId);\n const tempIds: string[] = _getRecursionParentIds(pId, visitList);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n }\n }\n }\n _pageData.parentIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _initData = (value?: string | number) => {\n let newValue: string | number | undefined = CommonBase.isUndefined(value) ? props.value : value;\n if (\n newValue !== undefined &&\n newValue !== null &&\n !CommonBase.isEmpty(newValue) &&\n !CommonBase.isExistJsonKey(_pageData.dataJson, newValue.toString())\n ) {\n newValue = '';\n }\n const list: SelectCascadeItem[] = [];\n if (newValue === undefined || newValue === null || CommonBase.isEmpty(newValue)) {\n list.push(_convertTreeItemData(0, _getTopParentValue()));\n list.push(_convertTreeItemData(1, ''));\n } else {\n const valueStr = newValue.toString();\n const arrPIds = [..._getRecursionParentIds(valueStr)].reverse();\n const arrPIdLen = arrPIds.length;\n if (arrPIdLen > 0) {\n arrPIds.forEach((pId: string, i: number) => {\n const newPid = i === 0 ? _getTopParentValue() : pId;\n const infoItem = _convertTreeItemData(i, newPid);\n infoItem.selected = pId;\n list.push(infoItem);\n });\n const lastItem = _convertTreeItemData(arrPIdLen, arrPIds[arrPIdLen - 1]);\n lastItem.selected = valueStr;\n list.push(lastItem);\n } else {\n const firstItem = _convertTreeItemData(0, _getTopParentValue());\n firstItem.selected = valueStr;\n list.push(firstItem);\n }\n }\n optData.value = list;\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n _initData();\n optBase.isFirstDataFinish = true;\n optBase.lastValue = props.value;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== optBase.lastValue) {\n if (optBase.isFirstDataFinish) {\n _initData();\n optBase.lastValue = newValue;\n }\n }\n },\n);\n\nwatch(\n () => props.list,\n newList => {\n if (!optBase.isFirstDataFinish) {\n optBase.isFirstDataFinish = true;\n return;\n }\n _pageData.parentIdsJson = {};\n _convertData(newList);\n\n const { value } = props;\n const selectValue =\n value !== undefined &&\n value !== null &&\n !CommonBase.isEmpty(value) &&\n CommonBase.isExistJsonKey(_pageData.dataJson, value.toString())\n ? value\n : '';\n _initData(selectValue);\n optBase.lastValue = selectValue;\n },\n);\n\nconst onCheckOpen = () => {\n return true;\n};\n\nconst onChangeItem = (value: string | number, inx: number) => {\n let outValue: string | number = '';\n if (CommonBase.isEmpty(value) && inx === 0) {\n _initData('');\n } else if (CommonBase.isEmpty(value)) {\n optData.value.splice(inx + 1);\n if (inx > 0) {\n const parentItem = optData.value[inx - 1];\n if (parentItem) {\n outValue = parentItem.selected;\n }\n }\n } else {\n const valueStr = value.toString();\n if (_checkIsChildren(valueStr)) {\n optData.value.splice(inx + 1);\n optData.value.push(_convertTreeItemData(inx + 1, valueStr));\n } else {\n outValue = value;\n optData.value.splice(inx + 1);\n }\n }\n _emitChange(outValue);\n};\n\nconst getValue = () => {\n return optBase.lastValue;\n};\nconst getValueData = () => {\n const value = optBase.lastValue;\n let show = '';\n if (value !== undefined && value !== null && !CommonBase.isEmpty(value)) {\n const v = value.toString();\n const ids = _getRecursionParentIds(v);\n const chain = ids.length > 0 ? ids.slice().reverse().concat([v]) : [v];\n const names: string[] = [];\n chain.forEach((id) => {\n const info = _pageData.dataJson[id];\n if (info !== undefined && info !== null && !CommonBase.isEmpty(info.name)) {\n names.push(info.name);\n }\n });\n show = names.join(' → ');\n }\n return {\n value,\n show: show || (value !== undefined && value !== null ? value.toString() : ''),\n };\n};\nconst setValue = (value: string | number) => {\n _initData(value);\n optBase.lastValue = value;\n};\n\nexport interface ClSelectCascadeExpose {\n getValue: () => string | number | undefined;\n getValueData: () => { value: string | number | undefined; show: string };\n setValue: (value: string | number) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_keyIndex","CommonBase","elId","optBase","reactive","optData","ref","_pageData","optDefPlaceholder","computed","optPlaceholderList","placeholder","optWidthList","width","clsParent","cls","CommonElement","_emitChange","value","_checkIsChildren","id","_getDataGroup","_getDataInfo","_getTopParentValue","_convertData","list","parentKey","topParentValue","json","group","info","newInfo","pId","pIdKey","_convertTreeItemData","idx","groupList","placeholderList","placeholderLen","widthList","_getRecursionParentIds","visited","arr","visitList","pInfo","tempIds","_initData","newValue","valueStr","arrPIds","arrPIdLen","i","newPid","infoItem","lastItem","firstItem","_initMain","onMounted","nextTick","watch","newList","selectValue","onCheckOpen","onChangeItem","inx","outValue","parentItem","__expose","show","v","ids","chain","names","_createElementBlock","_unref","_openBlock","_Fragment","_renderList","item","_normalizeStyle","_createVNode","ClFormValidate","ClSelect","$event"],"mappings":"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"}
|