@cldemo/ui-kit 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.js +5 -0
- package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
- package/buildLibs/utils/Element/ClImage.cjs +1 -1
- package/buildLibs/utils/Element/ClImage.js +1 -1
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.js +5 -0
- package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
- package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.js +5 -0
- package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
- package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
- package/buildLibs/utils/Mobile/ClBanner.js +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
- package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPicker.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js.map → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js.map → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js.map → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js.map → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js.map → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js.map → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js.map → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js.map → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js.map → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js.map → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js.map → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js.map → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js.map → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js.map → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js.map → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js.map → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js.map → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js.map → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js.map → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js.map → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js.map → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js.map → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js.map} +1 -1
- package/buildLibs/utils/Shared/Index24.css +1 -1
- package/buildLibs/utils/Shared/Index25.css +1 -1
- package/buildLibs/utils/Shared/Index26.css +1 -1
- package/buildLibs/utils/Shared/Index27.css +1 -1
- package/buildLibs/utils/Shared/Index28.css +1 -1
- package/buildLibs/utils/Shared/Index29.css +1 -1
- package/buildLibs/utils/Shared/Index30.css +1 -1
- package/buildLibs/utils/Shared/Index31.css +1 -1
- package/buildLibs/utils/Shared/Index32.css +1 -1
- package/buildLibs/utils/Shared/Index33.css +1 -1
- package/buildLibs/utils/Shared/Index34.css +1 -1
- package/buildLibs/utils/Shared/Index35.css +1 -1
- package/buildLibs/utils/Shared/Index36.css +1 -1
- package/buildLibs/utils/Shared/Index37.css +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
- package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
- package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
- package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
- package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
- package/buildLibs/utils/Web/ClDatetime.js +1 -1
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
- package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
- package/buildLibs/utils/Web/ClEcharts.js +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
- package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
- package/buildLibs/utils/Web/ClFileUpload.js +1 -1
- package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
- package/buildLibs/utils/Web/ClInputTag.js +1 -1
- package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
- package/buildLibs/utils/Web/ClPaginate.js +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
- package/buildLibs/utils/Web/ClSelect.cjs +1 -1
- package/buildLibs/utils/Web/ClSelect.js +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
- package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTag.js +1 -1
- package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTree.js +1 -1
- package/buildLibs/utils/Web/ClTable.cjs +1 -1
- package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClTable.js +1081 -1218
- package/buildLibs/utils/Web/ClTable.js.map +1 -1
- package/buildLibs/utils/Web/ClTabs.cjs +1 -1
- package/buildLibs/utils/Web/ClTabs.js +1 -1
- package/buildLibs/utils/Web/ClTree.cjs +1 -1
- package/buildLibs/utils/Web/ClTree.js +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClXeditable.js +33 -32
- package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
- package/package.json +21 -8
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
- package/buildLibs/utils/Shared/Video.css +0 -1
- package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
- package/buildLibs/utils/Web/ClPreview.cjs +0 -2
- package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
- package/buildLibs/utils/Web/ClPreview.css +0 -1
- package/buildLibs/utils/Web/ClPreview.js +0 -353
- package/buildLibs/utils/Web/ClPreview.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js","sources":["../../../src/libs/Web/ScrollxFence/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-if=\"isShowLeft\"\n class=\"fenceScrollX-left\"\n :style=\"{ width: leftWidth }\"\n >\n <div></div>\n </div>\n <template v-else></template>\n <div\n class=\"fenceScrollX-center\"\n ref=\"refElScrollX\"\n >\n <div :style=\"{ width: centerWidth }\"></div>\n </div>\n <div\n v-if=\"isShowRight\"\n class=\"fenceScrollX-right\"\n :style=\"{ width: rightWidth }\"\n >\n <div></div>\n </div>\n <template v-else></template>\n <div\n v-if=\"isShowCorner\"\n :class=\"clsCorner\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"isShowCover\"\n class=\"fenceScrollX-cover\"\n ></div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n computed,\n ref,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport './Index.css';\n\ndefineOptions({ name: 'ClScrollXFence' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n isShowLeft: {\n type: Boolean,\n default: true, // desc: 是否显示左侧装饰区\n },\n isShowRight: {\n type: Boolean,\n default: true, // desc: 是否显示右侧装饰区\n },\n isShowCorner: {\n type: Boolean,\n default: false, // desc: 是否显示角落区域\n },\n isShowCover: {\n type: Boolean,\n default: false, // desc: 是否显示覆盖层\n },\n cornerType: {\n type: String,\n default: '', // desc: 角落类型 | enum: right-top, right-bottom (可自定义)\n },\n leftWidth: {\n type: String,\n default: '0', // desc: 左侧装饰区宽度\n },\n centerWidth: {\n type: String,\n default: '0', // desc: 中间滚动区宽度\n },\n rightWidth: {\n type: String,\n default: '0', // desc: 右侧装饰区宽度\n },\n initLeft: String, // desc: 初始滚动位置(像素值字符串)\n});\n\nconst emit = defineEmits<{\n (e: 'onScrollX', event: Event): void; // desc: 横向滚动事件\n}>();\n\nconst elId = props.id; // || `scrollxfence-${CommonBase.getRandom(5)}`\n\nconst refElScrollX = ref<HTMLElement | null>(null);\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-fenceScrollX': true,\n };\n if (props.isShowCorner && CommonBase.isNonEmptyString(props.cornerType)) {\n cls[`fenceScrollX-showCorner-${props.cornerType}`] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['fenceScrollX-mob'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsCorner = computed(() => {\n const cls: Record<string, boolean> = {\n 'fenceScrollX-corner': true,\n };\n if (CommonBase.isNonEmptyString(props.cornerType)) {\n cls[`fenceScrollX-corner-${props.cornerType}`] = true;\n }\n return cls;\n});\n\nconst _onScrollX = (e: Event) => {\n emit('onScrollX', e);\n};\n\nonMounted(() => {\n nextTick(() => {\n if (refElScrollX.value) {\n if (CommonBase.isNonEmptyString(props.initLeft)) {\n const leftVal = parseInt(props.initLeft, 10);\n if (CommonBase.isFinite(leftVal)) {\n refElScrollX.value.scrollLeft = leftVal;\n }\n }\n refElScrollX.value.addEventListener('scroll', _onScrollX);\n }\n });\n});\n\nonBeforeUnmount(() => {\n if (refElScrollX.value) {\n refElScrollX.value.removeEventListener('scroll', _onScrollX);\n }\n});\n\nonActivated(() => {\n if (refElScrollX.value) {\n refElScrollX.value.addEventListener('scroll', _onScrollX);\n }\n});\n\nonDeactivated(() => {\n if (refElScrollX.value) {\n refElScrollX.value.removeEventListener('scroll', _onScrollX);\n }\n});\n\nconst setScrollLeft = (left: number) => {\n if (refElScrollX.value && CommonBase.isFinite(left)) {\n refElScrollX.value.scrollLeft = left;\n }\n};\n\nexport interface ClScrollXFenceExpose {\n setScrollLeft: (left: number) => void;\n}\n\ndefineExpose({\n setScrollLeft,\n});\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElScrollX","ref","clsParent","computed","cls","CommonBase","CommonElement","clsCorner","_onScrollX","onMounted","nextTick","leftVal","onBeforeUnmount","onActivated","onDeactivated","__expose","left","_createElementBlock","_unref","_createElementVNode","_Fragment","_openBlock","_hoisted_2"],"mappings":"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"}
|
|
@@ -289,4 +289,4 @@ const pe = ["id"], ge = { class: "selectTag-container" }, he = ["aria-selected",
|
|
|
289
289
|
export {
|
|
290
290
|
Te as _
|
|
291
291
|
};
|
|
292
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
292
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js","sources":["../../../src/libs/Web/SelectTag/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <ul class=\"selectTag-container\">\n <li\n v-if=\"isShowAll\"\n role=\"option\"\n :aria-selected=\"optAllValue\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"{\n 'selectTag-item': true,\n 'selectTag-active': optAllValue,\n 'selectTag-disabled': disabled,\n }\"\n :style=\"styItem\"\n @click=\"onClickAll()\"\n @keydown.enter.prevent=\"onClickAll()\"\n @keydown.space.prevent=\"onClickAll()\"\n >\n <span>{{ showAllLabel || optPageLanguage.checkboxAll }}</span>\n </li>\n <template v-else></template>\n <li\n v-for=\"(info, stIndex) in list\"\n :key=\"`${_keyIndex}-${info.id}-${stIndex}`\"\n role=\"option\"\n :aria-selected=\"_isItemActive(info)\"\n :aria-disabled=\"info.isDisabled || disabled\"\n :tabindex=\"info.isDisabled || disabled ? -1 : 0\"\n :class=\"{\n 'selectTag-item': true,\n 'selectTag-active': _isItemActive(info),\n 'selectTag-disabled': info.isDisabled || disabled,\n }\"\n :style=\"styItemFun(info)\"\n @click=\"onClickItem(info)\"\n @keydown.enter.prevent=\"onClickItem(info)\"\n @keydown.space.prevent=\"onClickItem(info)\"\n >\n <slot :data=\"info\">\n <span\n v-if=\"info.isHtml\"\n v-html=\"CommonBase.encodeHTML(info.name)\"\n ></span>\n <span v-else>{{ info.name }}</span>\n </slot>\n </li>\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, nextTick, watch, reactive, ref, computed } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { getGlobalConfig } from '../../Common/globalConfig';\nimport useLanguage from '../../Use/language';\nimport './index.css';\n\nexport interface ListInfo {\n id: string | number;\n name: string;\n isDisabled: boolean;\n type: string;\n isHtml: boolean;\n width?: string; // desc: 选项宽度(优先级高于组件 width)\n}\n\nexport interface ClSelectTagExpose {\n getValue: () => string;\n getValueData: () => ListInfo | ListInfo[] | null;\n setValue: (value: string) => void;\n runInitComplete: () => void;\n}\n\ndefineOptions({ name: 'ClSelectTag' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识(DOM id)\n value: [String, Number], // desc: 选中值,逗号分隔的字符串\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用\n type: {\n type: String,\n required: true, // desc: 选择类型 | enum: checkbox, radio\n validator: (value: string) => {\n return ['checkbox', 'radio'].indexOf(value) !== -1;\n },\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [],\n }, // desc: 选项列表(数据变更需传入新引用)\n theme: String, // desc: 主题 | enum: default, interval (可自定义)\n width: String, // desc: 选项宽度\n isShowAll: Boolean, // desc: 是否显示全选\n showAllLabel: String, // desc: 全选按钮自定义文案\n isInitRadioValue: {\n type: Boolean,\n default: true,\n }, // desc: 单选模式下是否自动选中第一项\n isRadioClickCancel: Boolean, // desc: 单选模式下点击已选中项是否取消选中\n checkChangeBefore: Function, // desc: 选中变更前的异步校验,返回 false 阻止变更\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 选中值更新时触发(v-model 绑定,回传为逗号分隔字符串)\n onChange: (\n _value: string | number,\n _info: ListInfo | ListInfo[],\n _isAll: boolean,\n _changeInfo: { value: string; info: ListInfo | ListInfo[] },\n ) => true, // desc: 选中值变更时触发(radio 模式 info 为单对象,checkbox 模式为数组;changeInfo 为变更前旧值快照)\n onInit: (_value: string | number, _info: ListInfo | ListInfo[], _isAll: boolean) => true, // desc: 组件初始化完成时触发(info 形态同 onChange)\n onError: (_message: string) => true, // desc: 选中变更前异步校验执行异常时触发\n});\n// kb: Enter/Space 选中当前项(li 聚焦后生效)\n// slots: default\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `s-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `st-${CommonBase.getRandom(8)}`\nconst optBase = reactive<{ theme: string }>({\n theme: '',\n});\n\nconst optAllValue = ref(false);\n\nconst _convertValueArr = (value: any) => {\n let arr: any[] = [];\n if (!CommonBase.isEmpty(value)) {\n arr = value.toString().split(',');\n }\n return arr;\n};\n\nconst optTextValue = ref(_convertValueArr(props.value));\nlet _listAllId: string[] = [];\nlet _listDataToJson: Record<string, ListInfo> = {};\nconst _optIsFirstDataFinish = ref(false);\nlet _clickSeq = 0;\n\nconst clsParent = computed(() => {\n const { theme } = props;\n const cls: any = {\n 'panel-selectTag': true,\n };\n let newTheme: string | undefined = optBase.theme;\n if (theme) {\n newTheme = theme;\n }\n if (!CommonBase.isEmpty(newTheme)) {\n cls[`selectTag-${newTheme}`] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst styItem = computed(() => {\n const sty: any = {};\n if (!CommonBase.isEmpty(props.width)) {\n sty.width = props.width;\n }\n return sty;\n});\n\nconst _emitModelValue = (value: string) => {\n emit('update:value', value);\n};\n\nconst _emitChange = (arrIds: string[]) => {\n if (!CommonBase.isEqualArr(optTextValue.value, arrIds)) {\n const oldSelectValue = CommonBase.getArrClone(optTextValue.value);\n const oldSelectInfo = _getValueInfo(oldSelectValue);\n optTextValue.value = CommonBase.getArrClone(arrIds);\n const { value, isAll, info } = _getValueInfo(arrIds);\n if (props.isShowAll) {\n optAllValue.value = isAll;\n }\n _emitModelValue(value);\n emit('onChange', value, info, isAll, {\n value: oldSelectInfo.value,\n info: oldSelectInfo.info,\n });\n }\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n const { value, isAll, info } = _getValueInfo(optTextValue.value);\n emit('onInit', value, info, isAll);\n });\n};\n\nconst _getValueInfo = (ids: string[]) => {\n const dataList: any[] = [];\n if (!CommonBase.isEmpty(ids)) {\n ids.forEach((v: string) => {\n if (CommonBase.isExistJsonKey(_listDataToJson, v)) {\n dataList.push(CommonBase.getJsonClone(_listDataToJson[v]));\n }\n });\n }\n const value = ids.join(',');\n const isAll = dataList.length > 0 && dataList.length === _listAllId.length;\n let info: any;\n if (props.type === 'radio') {\n info = {};\n if (dataList.length > 0) {\n info = dataList[0];\n }\n } else {\n info = dataList;\n }\n return { value, info, isAll };\n};\n\nconst _isItemActive = (info: ListInfo) => {\n return !CommonBase.isEmpty(info.id) && optTextValue.value.includes(info.id.toString());\n};\n\nconst styItemFun = (info: any) => {\n const sty: any = {};\n if (info.isHtml) {\n sty.width = 'auto';\n } else if (!CommonBase.isEmpty(info.width)) {\n sty.width = info.width;\n } else if (!CommonBase.isEmpty(props.width)) {\n sty.width = props.width;\n }\n return sty;\n};\n\nconst _initMergeGlobalsOption = () => {\n const opt = getGlobalConfig<{ theme?: string }>('selectTag');\n if (opt?.theme) {\n optBase.theme = opt.theme;\n }\n};\n\nconst _getEffectiveValue = (selectValue: any[]) => {\n const effectiveValue: any[] = [];\n if (selectValue.length > 0) {\n const firstInfo = _listDataToJson[selectValue[0]];\n const firstType =\n firstInfo && !CommonBase.isEmpty(firstInfo.type) ? firstInfo.type : props.type;\n selectValue.forEach((v: string) => {\n if (CommonBase.isExistJsonKey(_listDataToJson, v)) {\n const info = _listDataToJson[v];\n const type = CommonBase.isEmpty(info.type) ? props.type : info.type;\n if (type === firstType) {\n switch (firstType) {\n case 'radio':\n if (effectiveValue.length === 0) {\n effectiveValue.push(v);\n }\n break;\n case 'checkbox':\n effectiveValue.push(v);\n break;\n default:\n break;\n }\n }\n }\n });\n }\n return effectiveValue;\n};\n\nconst _convertListToJson = (list: any[]) => {\n _listDataToJson = {};\n _listAllId = [];\n if (!CommonBase.isEmpty(list)) {\n const selectValue: any[] = CommonBase.getArrClone(optTextValue.value);\n list.forEach((info: any) => {\n if (CommonBase.isExistJsonKey(info, 'id')) {\n const id = info.id.toString();\n _listDataToJson[id] = info;\n if (info.isDisabled) {\n if (CommonBase.isExistValue(selectValue, id)) {\n _listAllId.push(id);\n }\n } else {\n _listAllId.push(id);\n }\n }\n });\n }\n};\n\nconst _checkValueInList = () => {\n if (_optIsFirstDataFinish.value) {\n let effectiveValue = [];\n if (!CommonBase.isEmpty(optTextValue.value)) {\n effectiveValue = _getEffectiveValue(optTextValue.value);\n if (!CommonBase.isEqualArr(optTextValue.value, effectiveValue)) {\n optTextValue.value = effectiveValue;\n _emitModelValue(effectiveValue.join(','));\n }\n }\n if (props.isShowAll) {\n optAllValue.value = effectiveValue.length > 0 && effectiveValue.length === _listAllId.length;\n }\n }\n};\n\nconst _initRadioDefaultValue = () => {\n if (\n props.type === 'radio' &&\n props.isInitRadioValue &&\n CommonBase.isEmpty(optTextValue.value) &&\n !CommonBase.isEmpty(props.list)\n ) {\n const firstEnabled = props.list.find((info: ListInfo) => !info.isDisabled);\n if (firstEnabled && !CommonBase.isEmpty(firstEnabled.id)) {\n const value = firstEnabled.id.toString();\n optTextValue.value = [value];\n _emitModelValue(value);\n }\n }\n};\n\nconst _setValue = (value: any) => {\n const arrValue = _convertValueArr(value);\n if (!CommonBase.isEqualArr(optTextValue.value, arrValue)) {\n optTextValue.value = arrValue;\n _emitModelValue(arrValue.join(','));\n }\n};\n\nconst _initMain = () => {\n _initMergeGlobalsOption();\n _optIsFirstDataFinish.value = !CommonBase.isEmpty(props.list);\n _convertListToJson(props.list);\n _initRadioDefaultValue();\n _checkValueInList();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(_optIsFirstDataFinish, newValue => {\n if (newValue) {\n _emitInit();\n }\n});\n\nwatch(\n [() => props.list, () => props.value, () => props.type],\n ([newList, newValue], [oldList, oldValue]) => {\n const list = newList as any[];\n if (!_optIsFirstDataFinish.value && list !== oldList) {\n _optIsFirstDataFinish.value = true;\n }\n if (newValue !== oldValue) {\n _setValue(newValue);\n }\n _convertListToJson(list);\n if (newValue === oldValue) {\n _initRadioDefaultValue();\n }\n _checkValueInList();\n },\n);\n\nconst onClickAll = async () => {\n if (!props.disabled && !CommonBase.isEmpty(props.list)) {\n const clickSeq = ++_clickSeq;\n const hasEnabled = props.list.some((info: ListInfo) => !info.isDisabled);\n if (!hasEnabled) {\n return;\n }\n const selectIds: string[] = [];\n props.list.forEach((info: any) => {\n if (CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (info.isDisabled) {\n if (CommonBase.isExistValue(optTextValue.value, id)) {\n selectIds.push(id);\n }\n } else if (!optAllValue.value) {\n selectIds.push(id);\n }\n });\n const arrValue = _getEffectiveValue(selectIds);\n let tempCheck: any = true;\n if (props.checkChangeBefore) {\n const { value: newVal } = _getValueInfo(arrValue);\n const oldInfo = _getValueInfo(CommonBase.getArrClone(optTextValue.value));\n try {\n tempCheck = await props.checkChangeBefore(newVal, oldInfo.value);\n tempCheck = CommonBase.isBoolean(tempCheck) ? tempCheck : true;\n } catch (err) {\n tempCheck = false;\n emit('onError', err instanceof Error ? err.message : String(err));\n }\n }\n if (tempCheck && clickSeq === _clickSeq) {\n _emitChange(arrValue);\n }\n }\n};\n\nconst onClickItem = async (item: any) => {\n if (!item.isDisabled && !props.disabled && !CommonBase.isEmpty(item.id)) {\n const clickSeq = ++_clickSeq;\n let type = props.type;\n type = CommonBase.isEmpty(item.type) ? type : item.type;\n\n const oldSelectValue = CommonBase.getArrClone(optTextValue.value);\n let newSelectValue = [];\n const value: string = item.id.toString();\n if (oldSelectValue.length === 0) {\n newSelectValue = [value];\n } else if (type === 'radio') {\n if (CommonBase.isEqualArr(oldSelectValue, [value])) {\n newSelectValue = props.isRadioClickCancel ? [] : oldSelectValue;\n } else {\n newSelectValue = [value];\n }\n } else {\n const oldFirstInfo = _listDataToJson[oldSelectValue[0]];\n const oldFirstType =\n oldFirstInfo && !CommonBase.isEmpty(oldFirstInfo.type) ? oldFirstInfo.type : props.type;\n if (oldFirstType === 'radio') {\n newSelectValue = [value];\n } else if (CommonBase.isExistValue(oldSelectValue, value)) {\n newSelectValue = CommonBase.getArrRemoveById(oldSelectValue, value);\n } else {\n newSelectValue = oldSelectValue;\n newSelectValue.push(value);\n }\n }\n\n let tempCheck: any = true;\n if (props.checkChangeBefore) {\n const { value: newVal } = _getValueInfo(newSelectValue);\n const oldInfo = _getValueInfo(oldSelectValue);\n try {\n tempCheck = await props.checkChangeBefore(newVal, oldInfo.value);\n tempCheck = CommonBase.isBoolean(tempCheck) ? tempCheck : true;\n } catch (err) {\n tempCheck = false;\n emit('onError', err instanceof Error ? err.message : String(err));\n }\n }\n if (tempCheck && clickSeq === _clickSeq) {\n _emitChange(newSelectValue);\n }\n }\n};\n\nconst getValue = () => {\n const values = _getEffectiveValue(optTextValue.value);\n return values.join(',');\n};\nconst getValueData = () => {\n const { value, info } = _getValueInfo(getValue().split(','));\n if (props.type === 'radio') {\n return CommonBase.isEmpty(value) ? null : info;\n }\n return info;\n};\nconst setValue = (value: string) => {\n _setValue(value);\n _convertListToJson(props.list);\n _checkValueInList();\n};\nconst runInitComplete = () => {\n if (!_optIsFirstDataFinish.value) {\n _optIsFirstDataFinish.value = true;\n _setValue(props.value);\n _convertListToJson(props.list);\n _initRadioDefaultValue();\n _checkValueInList();\n }\n};\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n runInitComplete,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_keyIndex","CommonBase","elId","optBase","reactive","optAllValue","ref","_convertValueArr","value","arr","optTextValue","_listAllId","_listDataToJson","_optIsFirstDataFinish","_clickSeq","clsParent","computed","theme","cls","newTheme","CommonElement","styItem","sty","_emitModelValue","_emitChange","arrIds","oldSelectValue","oldSelectInfo","_getValueInfo","isAll","info","_emitInit","nextTick","ids","dataList","v","_isItemActive","styItemFun","_initMergeGlobalsOption","opt","getGlobalConfig","_getEffectiveValue","selectValue","effectiveValue","firstInfo","firstType","_convertListToJson","list","id","_checkValueInList","_initRadioDefaultValue","firstEnabled","_setValue","arrValue","_initMain","onMounted","watch","newValue","newList","oldList","oldValue","onClickAll","clickSeq","selectIds","tempCheck","newVal","oldInfo","err","onClickItem","item","type","newSelectValue","oldFirstInfo","getValue","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_toDisplayString","_Fragment","_openBlock","_renderList","stIndex","_normalizeStyle","$event","_withKeys","_withModifiers","_renderSlot","_ctx","_hoisted_6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js","sources":["../../../src/libs/Web/SelectTag/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <ul class=\"selectTag-container\">\n <li\n v-if=\"isShowAll\"\n role=\"option\"\n :aria-selected=\"optAllValue\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"{\n 'selectTag-item': true,\n 'selectTag-active': optAllValue,\n 'selectTag-disabled': disabled,\n }\"\n :style=\"styItem\"\n @click=\"onClickAll()\"\n @keydown.enter.prevent=\"onClickAll()\"\n @keydown.space.prevent=\"onClickAll()\"\n >\n <span>{{ showAllLabel || optPageLanguage.checkboxAll }}</span>\n </li>\n <template v-else></template>\n <li\n v-for=\"(info, stIndex) in list\"\n :key=\"`${_keyIndex}-${info.id}-${stIndex}`\"\n role=\"option\"\n :aria-selected=\"_isItemActive(info)\"\n :aria-disabled=\"info.isDisabled || disabled\"\n :tabindex=\"info.isDisabled || disabled ? -1 : 0\"\n :class=\"{\n 'selectTag-item': true,\n 'selectTag-active': _isItemActive(info),\n 'selectTag-disabled': info.isDisabled || disabled,\n }\"\n :style=\"styItemFun(info)\"\n @click=\"onClickItem(info)\"\n @keydown.enter.prevent=\"onClickItem(info)\"\n @keydown.space.prevent=\"onClickItem(info)\"\n >\n <slot :data=\"info\">\n <span\n v-if=\"info.isHtml\"\n v-html=\"CommonBase.encodeHTML(info.name)\"\n ></span>\n <span v-else>{{ info.name }}</span>\n </slot>\n </li>\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, nextTick, watch, reactive, ref, computed } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { getGlobalConfig } from '../../Common/globalConfig';\nimport useLanguage from '../../Use/language';\nimport './index.css';\n\nexport interface ListInfo {\n id: string | number;\n name: string;\n isDisabled: boolean;\n type: string;\n isHtml: boolean;\n width?: string; // desc: 选项宽度(优先级高于组件 width)\n}\n\nexport interface ClSelectTagExpose {\n getValue: () => string;\n getValueData: () => ListInfo | ListInfo[] | null;\n setValue: (value: string) => void;\n runInitComplete: () => void;\n}\n\ndefineOptions({ name: 'ClSelectTag' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识(DOM id)\n value: [String, Number], // desc: 选中值,逗号分隔的字符串\n className: String, // desc: 自定义CSS类名\n disabled: Boolean, // desc: 是否禁用\n type: {\n type: String,\n required: true, // desc: 选择类型 | enum: checkbox, radio\n validator: (value: string) => {\n return ['checkbox', 'radio'].indexOf(value) !== -1;\n },\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [],\n }, // desc: 选项列表(数据变更需传入新引用)\n theme: String, // desc: 主题 | enum: default, interval (可自定义)\n width: String, // desc: 选项宽度\n isShowAll: Boolean, // desc: 是否显示全选\n showAllLabel: String, // desc: 全选按钮自定义文案\n isInitRadioValue: {\n type: Boolean,\n default: true,\n }, // desc: 单选模式下是否自动选中第一项\n isRadioClickCancel: Boolean, // desc: 单选模式下点击已选中项是否取消选中\n checkChangeBefore: Function, // desc: 选中变更前的异步校验,返回 false 阻止变更\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 选中值更新时触发(v-model 绑定,回传为逗号分隔字符串)\n onChange: (\n _value: string | number,\n _info: ListInfo | ListInfo[],\n _isAll: boolean,\n _changeInfo: { value: string; info: ListInfo | ListInfo[] },\n ) => true, // desc: 选中值变更时触发(radio 模式 info 为单对象,checkbox 模式为数组;changeInfo 为变更前旧值快照)\n onInit: (_value: string | number, _info: ListInfo | ListInfo[], _isAll: boolean) => true, // desc: 组件初始化完成时触发(info 形态同 onChange)\n onError: (_message: string) => true, // desc: 选中变更前异步校验执行异常时触发\n});\n// kb: Enter/Space 选中当前项(li 聚焦后生效)\n// slots: default\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `s-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `st-${CommonBase.getRandom(8)}`\nconst optBase = reactive<{ theme: string }>({\n theme: '',\n});\n\nconst optAllValue = ref(false);\n\nconst _convertValueArr = (value: any) => {\n let arr: any[] = [];\n if (!CommonBase.isEmpty(value)) {\n arr = value.toString().split(',');\n }\n return arr;\n};\n\nconst optTextValue = ref(_convertValueArr(props.value));\nlet _listAllId: string[] = [];\nlet _listDataToJson: Record<string, ListInfo> = {};\nconst _optIsFirstDataFinish = ref(false);\nlet _clickSeq = 0;\n\nconst clsParent = computed(() => {\n const { theme } = props;\n const cls: any = {\n 'panel-selectTag': true,\n };\n let newTheme: string | undefined = optBase.theme;\n if (theme) {\n newTheme = theme;\n }\n if (!CommonBase.isEmpty(newTheme)) {\n cls[`selectTag-${newTheme}`] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst styItem = computed(() => {\n const sty: any = {};\n if (!CommonBase.isEmpty(props.width)) {\n sty.width = props.width;\n }\n return sty;\n});\n\nconst _emitModelValue = (value: string) => {\n emit('update:value', value);\n};\n\nconst _emitChange = (arrIds: string[]) => {\n if (!CommonBase.isEqualArr(optTextValue.value, arrIds)) {\n const oldSelectValue = CommonBase.getArrClone(optTextValue.value);\n const oldSelectInfo = _getValueInfo(oldSelectValue);\n optTextValue.value = CommonBase.getArrClone(arrIds);\n const { value, isAll, info } = _getValueInfo(arrIds);\n if (props.isShowAll) {\n optAllValue.value = isAll;\n }\n _emitModelValue(value);\n emit('onChange', value, info, isAll, {\n value: oldSelectInfo.value,\n info: oldSelectInfo.info,\n });\n }\n};\n\nconst _emitInit = () => {\n nextTick(() => {\n const { value, isAll, info } = _getValueInfo(optTextValue.value);\n emit('onInit', value, info, isAll);\n });\n};\n\nconst _getValueInfo = (ids: string[]) => {\n const dataList: any[] = [];\n if (!CommonBase.isEmpty(ids)) {\n ids.forEach((v: string) => {\n if (CommonBase.isExistJsonKey(_listDataToJson, v)) {\n dataList.push(CommonBase.getJsonClone(_listDataToJson[v]));\n }\n });\n }\n const value = ids.join(',');\n const isAll = dataList.length > 0 && dataList.length === _listAllId.length;\n let info: any;\n if (props.type === 'radio') {\n info = {};\n if (dataList.length > 0) {\n info = dataList[0];\n }\n } else {\n info = dataList;\n }\n return { value, info, isAll };\n};\n\nconst _isItemActive = (info: ListInfo) => {\n return !CommonBase.isEmpty(info.id) && optTextValue.value.includes(info.id.toString());\n};\n\nconst styItemFun = (info: any) => {\n const sty: any = {};\n if (info.isHtml) {\n sty.width = 'auto';\n } else if (!CommonBase.isEmpty(info.width)) {\n sty.width = info.width;\n } else if (!CommonBase.isEmpty(props.width)) {\n sty.width = props.width;\n }\n return sty;\n};\n\nconst _initMergeGlobalsOption = () => {\n const opt = getGlobalConfig<{ theme?: string }>('selectTag');\n if (opt?.theme) {\n optBase.theme = opt.theme;\n }\n};\n\nconst _getEffectiveValue = (selectValue: any[]) => {\n const effectiveValue: any[] = [];\n if (selectValue.length > 0) {\n const firstInfo = _listDataToJson[selectValue[0]];\n const firstType =\n firstInfo && !CommonBase.isEmpty(firstInfo.type) ? firstInfo.type : props.type;\n selectValue.forEach((v: string) => {\n if (CommonBase.isExistJsonKey(_listDataToJson, v)) {\n const info = _listDataToJson[v];\n const type = CommonBase.isEmpty(info.type) ? props.type : info.type;\n if (type === firstType) {\n switch (firstType) {\n case 'radio':\n if (effectiveValue.length === 0) {\n effectiveValue.push(v);\n }\n break;\n case 'checkbox':\n effectiveValue.push(v);\n break;\n default:\n break;\n }\n }\n }\n });\n }\n return effectiveValue;\n};\n\nconst _convertListToJson = (list: any[]) => {\n _listDataToJson = {};\n _listAllId = [];\n if (!CommonBase.isEmpty(list)) {\n const selectValue: any[] = CommonBase.getArrClone(optTextValue.value);\n list.forEach((info: any) => {\n if (CommonBase.isExistJsonKey(info, 'id')) {\n const id = info.id.toString();\n _listDataToJson[id] = info;\n if (info.isDisabled) {\n if (CommonBase.isExistValue(selectValue, id)) {\n _listAllId.push(id);\n }\n } else {\n _listAllId.push(id);\n }\n }\n });\n }\n};\n\nconst _checkValueInList = () => {\n if (_optIsFirstDataFinish.value) {\n let effectiveValue = [];\n if (!CommonBase.isEmpty(optTextValue.value)) {\n effectiveValue = _getEffectiveValue(optTextValue.value);\n if (!CommonBase.isEqualArr(optTextValue.value, effectiveValue)) {\n optTextValue.value = effectiveValue;\n _emitModelValue(effectiveValue.join(','));\n }\n }\n if (props.isShowAll) {\n optAllValue.value = effectiveValue.length > 0 && effectiveValue.length === _listAllId.length;\n }\n }\n};\n\nconst _initRadioDefaultValue = () => {\n if (\n props.type === 'radio' &&\n props.isInitRadioValue &&\n CommonBase.isEmpty(optTextValue.value) &&\n !CommonBase.isEmpty(props.list)\n ) {\n const firstEnabled = props.list.find((info: ListInfo) => !info.isDisabled);\n if (firstEnabled && !CommonBase.isEmpty(firstEnabled.id)) {\n const value = firstEnabled.id.toString();\n optTextValue.value = [value];\n _emitModelValue(value);\n }\n }\n};\n\nconst _setValue = (value: any) => {\n const arrValue = _convertValueArr(value);\n if (!CommonBase.isEqualArr(optTextValue.value, arrValue)) {\n optTextValue.value = arrValue;\n _emitModelValue(arrValue.join(','));\n }\n};\n\nconst _initMain = () => {\n _initMergeGlobalsOption();\n _optIsFirstDataFinish.value = !CommonBase.isEmpty(props.list);\n _convertListToJson(props.list);\n _initRadioDefaultValue();\n _checkValueInList();\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(_optIsFirstDataFinish, newValue => {\n if (newValue) {\n _emitInit();\n }\n});\n\nwatch(\n [() => props.list, () => props.value, () => props.type],\n ([newList, newValue], [oldList, oldValue]) => {\n const list = newList as any[];\n if (!_optIsFirstDataFinish.value && list !== oldList) {\n _optIsFirstDataFinish.value = true;\n }\n if (newValue !== oldValue) {\n _setValue(newValue);\n }\n _convertListToJson(list);\n if (newValue === oldValue) {\n _initRadioDefaultValue();\n }\n _checkValueInList();\n },\n);\n\nconst onClickAll = async () => {\n if (!props.disabled && !CommonBase.isEmpty(props.list)) {\n const clickSeq = ++_clickSeq;\n const hasEnabled = props.list.some((info: ListInfo) => !info.isDisabled);\n if (!hasEnabled) {\n return;\n }\n const selectIds: string[] = [];\n props.list.forEach((info: any) => {\n if (CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (info.isDisabled) {\n if (CommonBase.isExistValue(optTextValue.value, id)) {\n selectIds.push(id);\n }\n } else if (!optAllValue.value) {\n selectIds.push(id);\n }\n });\n const arrValue = _getEffectiveValue(selectIds);\n let tempCheck: any = true;\n if (props.checkChangeBefore) {\n const { value: newVal } = _getValueInfo(arrValue);\n const oldInfo = _getValueInfo(CommonBase.getArrClone(optTextValue.value));\n try {\n tempCheck = await props.checkChangeBefore(newVal, oldInfo.value);\n tempCheck = CommonBase.isBoolean(tempCheck) ? tempCheck : true;\n } catch (err) {\n tempCheck = false;\n emit('onError', err instanceof Error ? err.message : String(err));\n }\n }\n if (tempCheck && clickSeq === _clickSeq) {\n _emitChange(arrValue);\n }\n }\n};\n\nconst onClickItem = async (item: any) => {\n if (!item.isDisabled && !props.disabled && !CommonBase.isEmpty(item.id)) {\n const clickSeq = ++_clickSeq;\n let type = props.type;\n type = CommonBase.isEmpty(item.type) ? type : item.type;\n\n const oldSelectValue = CommonBase.getArrClone(optTextValue.value);\n let newSelectValue = [];\n const value: string = item.id.toString();\n if (oldSelectValue.length === 0) {\n newSelectValue = [value];\n } else if (type === 'radio') {\n if (CommonBase.isEqualArr(oldSelectValue, [value])) {\n newSelectValue = props.isRadioClickCancel ? [] : oldSelectValue;\n } else {\n newSelectValue = [value];\n }\n } else {\n const oldFirstInfo = _listDataToJson[oldSelectValue[0]];\n const oldFirstType =\n oldFirstInfo && !CommonBase.isEmpty(oldFirstInfo.type) ? oldFirstInfo.type : props.type;\n if (oldFirstType === 'radio') {\n newSelectValue = [value];\n } else if (CommonBase.isExistValue(oldSelectValue, value)) {\n newSelectValue = CommonBase.getArrRemoveById(oldSelectValue, value);\n } else {\n newSelectValue = oldSelectValue;\n newSelectValue.push(value);\n }\n }\n\n let tempCheck: any = true;\n if (props.checkChangeBefore) {\n const { value: newVal } = _getValueInfo(newSelectValue);\n const oldInfo = _getValueInfo(oldSelectValue);\n try {\n tempCheck = await props.checkChangeBefore(newVal, oldInfo.value);\n tempCheck = CommonBase.isBoolean(tempCheck) ? tempCheck : true;\n } catch (err) {\n tempCheck = false;\n emit('onError', err instanceof Error ? err.message : String(err));\n }\n }\n if (tempCheck && clickSeq === _clickSeq) {\n _emitChange(newSelectValue);\n }\n }\n};\n\nconst getValue = () => {\n const values = _getEffectiveValue(optTextValue.value);\n return values.join(',');\n};\nconst getValueData = () => {\n const { value, info } = _getValueInfo(getValue().split(','));\n if (props.type === 'radio') {\n return CommonBase.isEmpty(value) ? null : info;\n }\n return info;\n};\nconst setValue = (value: string) => {\n _setValue(value);\n _convertListToJson(props.list);\n _checkValueInList();\n};\nconst runInitComplete = () => {\n if (!_optIsFirstDataFinish.value) {\n _optIsFirstDataFinish.value = true;\n _setValue(props.value);\n _convertListToJson(props.list);\n _initRadioDefaultValue();\n _checkValueInList();\n }\n};\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n runInitComplete,\n});\n</script>\n"],"names":["props","__props","emit","__emit","optPageLanguage","getPageLanguage","useLanguage","_keyIndex","CommonBase","elId","optBase","reactive","optAllValue","ref","_convertValueArr","value","arr","optTextValue","_listAllId","_listDataToJson","_optIsFirstDataFinish","_clickSeq","clsParent","computed","theme","cls","newTheme","CommonElement","styItem","sty","_emitModelValue","_emitChange","arrIds","oldSelectValue","oldSelectInfo","_getValueInfo","isAll","info","_emitInit","nextTick","ids","dataList","v","_isItemActive","styItemFun","_initMergeGlobalsOption","opt","getGlobalConfig","_getEffectiveValue","selectValue","effectiveValue","firstInfo","firstType","_convertListToJson","list","id","_checkValueInList","_initRadioDefaultValue","firstEnabled","_setValue","arrValue","_initMain","onMounted","watch","newValue","newList","oldList","oldValue","onClickAll","clickSeq","selectIds","tempCheck","newVal","oldInfo","err","onClickItem","item","type","newSelectValue","oldFirstInfo","getValue","__expose","_createElementBlock","_unref","_createElementVNode","_hoisted_2","_normalizeClass","_toDisplayString","_Fragment","_openBlock","_renderList","stIndex","_normalizeStyle","$event","_withKeys","_withModifiers","_renderSlot","_ctx","_hoisted_6"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";const e=require("vue"),d=require("./base-C2QOJBgB.js"),Y=require("./index-DAgtltwJ.js"),j=require("./Index.vue_vue_type_script_setup_true_lang-Dvy5B6_y.js"),J=["aria-readonly"],X=["aria-selected"],G={key:0},K=["innerHTML"],U=300,Q=15,W=.003,Z=e.defineComponent({name:"ClPickerColumn",__name:"Column",props:{className:String,optionsList:{type:Array,default:()=>[]},valueIndex:{type:Number,default:0},optionHeight:{type:Number,default:44},visibleOptionNum:{type:Number,default:6},swipeDuration:{type:Number,default:1e3},isAllowHtml:Boolean,isReadonly:Boolean},emits:["onSelect"],setup(u,{emit:z}){const a=u,r=z,S=`pickerColumn-${d.CommonBase.getRandom(5)}`,C=e.ref((Math.max(1,a.visibleOptionNum)*a.optionHeight-a.optionHeight)/2-(d.CommonBase.isFinite(a.valueIndex)&&a.valueIndex>=0?a.valueIndex:0)*a.optionHeight),b=e.ref(0),p=e.ref(!1),m=e.ref(0),M=e.ref(0);let v=null,N=0,E=0,_=0;const D=e.computed(()=>Math.max(1,a.visibleOptionNum)*a.optionHeight),k=e.computed(()=>(D.value-a.optionHeight)/2),f=e.computed(()=>C.value+b.value),A=e.computed(()=>(k.value-f.value)/a.optionHeight),V=e.computed(()=>({height:`${D.value}px`})),x=e.computed(()=>({transform:`translateY(${f.value}px)`,transition:m.value>0?`transform ${m.value}ms cubic-bezier(0.23, 1, 0.32, 1)`:"none"})),B=l=>({"picker-column-item--active":Math.round(A.value)===l,"picker-column-item--disabled":!!a.optionsList[l]?.disabled}),T=l=>{const t=Math.abs(l-A.value);return{height:`${a.optionHeight}px`,lineHeight:`${a.optionHeight}px`,opacity:Math.max(1-t*.4,0),transform:`rotateX(${-t*12}deg) scale(${Math.max(1-t*.15,.5)})`}},w=l=>{if("touches"in l){const t=l.touches;return t.length>0?t[0].clientY:0}return l.clientY},H=l=>Math.round((k.value-l)/a.optionHeight),O=l=>{const t=a.optionsList.length;if(t===0){C.value=k.value,b.value=0;return}const o=H(f.value);let n=H(l);if(n=Math.min(Math.max(n,0),t-1),a.optionsList[n]?.disabled){let c=-1;for(let i=1;i<t;i++){if(n-i>=0&&!a.optionsList[n-i]?.disabled){c=n-i;break}if(n+i<t&&!a.optionsList[n+i]?.disabled){c=n+i;break}}c>=0?n=c:n=o}C.value=k.value-n*a.optionHeight;const s=Math.abs(n-o);m.value=Math.min(a.swipeDuration,Math.max(200,s*150)),b.value=0,n!==a.valueIndex&&r("onSelect",n)},F=(l=>P(l)),I=(l=>L(l)),$=()=>{document.addEventListener("mousemove",F),document.addEventListener("mouseup",I)},R=()=>{document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",I)};e.onBeforeUnmount(()=>{R(),v!==null&&cancelAnimationFrame(v)}),e.watch(()=>a.valueIndex,l=>{p.value||!d.CommonBase.isFinite(l)||l<0||(C.value=k.value-l*a.optionHeight,m.value=200)}),e.watch(()=>a.optionsList,()=>{if(p.value)return;const l=a.optionsList.length;let t=d.CommonBase.isFinite(a.valueIndex)&&a.valueIndex>=0?a.valueIndex:0;l>0&&(t=Math.min(t,l-1)),C.value=k.value-t*a.optionHeight,m.value=0});const q=l=>{a.isReadonly||!("touches"in l)&&l.button!==0||(p.value&&R(),M.value=w(l),E=Date.now(),_=0,p.value=!0,m.value=0,"touches"in l||$())},P=l=>{if(!p.value)return;if(!("touches"in l)&&l.buttons===0){L();return}l.preventDefault();const o=w(l)-M.value,n=Date.now();n-E>U&&(E=n,_=o),v===null&&(v=requestAnimationFrame(()=>{v=null,b.value=N})),N=o},L=l=>{if(!p.value)return;if(p.value=!1,R(),l?.type==="touchcancel"){b.value=0;return}v!==null&&(cancelAnimationFrame(v),v=null,b.value=N);const t=N-_,o=Date.now()-E,s=o>0&&o<U&&Math.abs(t)>Q?Math.abs(t)/o/W*(t<0?-1:1):0;O(f.value+s)};return(l,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["picker-column",u.className]),style:e.normalizeStyle(V.value),role:"listbox","aria-readonly":u.isReadonly||void 0,onTouchstart:q,onTouchmove:P,onTouchend:L,onTouchcancel:L,onMousedown:q},[e.createElementVNode("div",{class:"picker-column-list",style:e.normalizeStyle(x.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.optionsList,(o,n)=>(e.openBlock(),e.createElementBlock("div",{key:`${S}-${n}`,class:e.normalizeClass(["picker-column-item",B(n)]),style:e.normalizeStyle(T(n)),role:"option","aria-selected":B(n)["picker-column-item--active"]||void 0},[u.isAllowHtml?(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:o.text},null,8,K)):(e.openBlock(),e.createElementBlock("span",G,e.toDisplayString(o.text),1))],14,X))),128))],4)],46,J))}}),ee=["id"],te={key:0,class:"picker-toolbar"},ne={class:"picker-toolbar-title"},oe={key:0,class:"picker-loading-mask"},le={key:2,class:"picker-toolbar picker-toolbar--bottom"},ae={class:"picker-toolbar-title"},se=e.defineComponent({name:"ClPicker",__name:"Index",props:{id:String,value:{type:Array,default:()=>[]},className:String,columnsList:{type:Array,default:()=>[]},columnsFieldNames:{type:Object,default:()=>({})},title:String,confirmButtonText:{type:String,default:"确认"},cancelButtonText:{type:String,default:"取消"},toolbarPosition:{type:String,default:"top",validator:u=>["top","bottom"].indexOf(u)!==-1},isShowToolbar:{type:Boolean,default:!0},isLoading:Boolean,isReadonly:Boolean,isAllowHtml:Boolean,optionHeight:{type:Number,default:44},visibleOptionNum:{type:Number,default:6},swipeDuration:{type:Number,default:1e3}},emits:["update:value","onConfirm","onCancel","onChange"],setup(u,{expose:z,emit:a}){const r=u,S=a,C=`picker-${d.CommonBase.getRandom(5)}`,b=r.id,p=e.ref([]),m=e.ref([]),M=e.computed(()=>({text:r.columnsFieldNames?.text||"text",value:r.columnsFieldNames?.value||"value",children:r.columnsFieldNames?.children||"children"})),v=e.computed(()=>d.CommonBase.isFinite(r.optionHeight)&&r.optionHeight>0?r.optionHeight:44),N=e.computed(()=>d.CommonBase.isFinite(r.visibleOptionNum)?Math.max(1,r.visibleOptionNum):6),E=e.computed(()=>d.CommonBase.isFinite(r.swipeDuration)?Math.max(0,r.swipeDuration):1e3),_=e.computed(()=>({height:`${N.value*v.value}px`})),D=e.computed(()=>({height:`${v.value}px`})),k=e.computed(()=>{let t={"panel-picker":!0,"picker-readonly":r.isReadonly};return t=d.CommonBase.getJsonMerge(t,Y.CommonElement.getClassNameJson(r.className)),t}),f=t=>{if(d.CommonBase.isString(t)||d.CommonBase.isNumber(t))return{text:String(t),value:t};if(d.CommonBase.getTypeof(t)==="object"&&t!==null){const o=t,n=o[M.value.text],s=o[M.value.value],c=o[M.value.children],i=d.CommonBase.isString(n)?n:d.CommonBase.isNumber(n)?String(n):"",g=d.CommonBase.isString(s)||d.CommonBase.isNumber(s)?s:"",h=Array.isArray(c)?c:void 0;return{text:i,value:g,disabled:!!o.disabled,children:h?h.map(f).filter(y=>y!==null):void 0}}return null},A=()=>{const t=r.columnsList;if(!Array.isArray(t)||t.length===0)return!1;const o=t[0];return d.CommonBase.getTypeof(o)==="object"&&o!==null&&Array.isArray(o.values)},V=()=>{const t=r.columnsList;if(!Array.isArray(t)||t.length===0)return[];if(A())return t.map(c=>{const i=Array.isArray(c.values)?c.values.map(f).filter(h=>h!==null):[],g=d.CommonBase.isFinite(c.defaultIndex)?c.defaultIndex:0;return{options:i,defaultIndex:i.length>0?Math.min(Math.max(0,Math.floor(g)),i.length-1):0,className:d.CommonBase.isString(c.className)?c.className:void 0}});const o=[];let n=t.map(f).filter(c=>c!==null),s=0;for(;n.length>0&&s<20;){s++,o.push({options:n,defaultIndex:0});const i=n[m.value[o.length-1]||0]?.children;if(i&&i.length>0)n=i;else break}return o},x=()=>m.value.map((t,o)=>p.value[o]?.options[t]?.value).filter(t=>t!==void 0),B=()=>m.value.map((t,o)=>p.value[o]?.options[t]).filter(t=>!!t),T=()=>[...m.value],w=(t,o)=>t.length===o.length&&t.every((n,s)=>n===o[s]),H=()=>{const t=x(),o=Array.isArray(r.value)?r.value:[];w(t,o)||S("update:value",t)},O=t=>{const o=r.columnsList;if(!Array.isArray(o)||o.length===0){p.value=[],m.value=[];return}const n=[];if(A())o.forEach((s,c)=>{const i=Array.isArray(s.values)?s.values.map(f).filter(y=>y!==null):[],g=t?.[c];let h=i.findIndex(y=>y.value===g);if(h<0){const y=d.CommonBase.isFinite(s.defaultIndex)?s.defaultIndex:0;h=i.length>0?Math.min(Math.max(0,Math.floor(y)),i.length-1):0}n.push(h)});else{let s=o.map(f).filter(i=>i!==null),c=0;for(;s.length>0&&c<20;){c++;const i=t?.[n.length];let g=s.findIndex(y=>y.value===i);g<0&&(g=0),n.push(g);const h=s[g]?.children;if(h&&h.length>0)s=h;else break}}m.value=n,p.value=V()};e.watch(()=>r.columnsList,()=>{O(Array.isArray(r.value)?r.value:void 0)},{deep:!0,immediate:!0}),e.watch(()=>r.value,t=>{if(!Array.isArray(t))return;const o=x();w(o,t)||O(t)},{deep:!0});const F=(t,o)=>{if(m.value[t]===o)return;m.value[t]=o,m.value=m.value.slice(0,t+1),p.value=V();const n=m.value.slice(0,t+1);for(let s=n.length;s<p.value.length;s++)n.push(p.value[s].defaultIndex);m.value=n,S("onChange",{selectedValues:x(),selectedOptions:B(),selectedIndexes:T(),columnIndex:t}),H()},I=()=>{S("onConfirm",{selectedValues:x(),selectedOptions:B(),selectedIndexes:T()})},$=()=>{S("onCancel",{selectedValues:x(),selectedOptions:B(),selectedIndexes:T()})};return z({getValue:()=>x(),setValue:t=>{O(t),H()},getValueData:()=>B(),getSelectedOptions:()=>B(),confirm:()=>I()}),(t,o)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(b),class:e.normalizeClass(k.value)},[u.isShowToolbar&&u.toolbarPosition==="top"?(e.openBlock(),e.createElementBlock("div",te,[e.createElementVNode("button",{type:"button",class:"picker-toolbar-btn picker-toolbar-btn--cancel",onClick:$},e.toDisplayString(u.cancelButtonText),1),e.createElementVNode("div",ne,[e.renderSlot(t.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(u.title),1)])]),e.createElementVNode("button",{type:"button",class:"picker-toolbar-btn picker-toolbar-btn--confirm",onClick:I},e.toDisplayString(u.confirmButtonText),1)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[],64)),e.renderSlot(t.$slots,"columnsTop"),e.createElementVNode("div",{class:"picker-columns",style:e.normalizeStyle(_.value)},[e.createElementVNode("div",{class:"picker-frame",style:e.normalizeStyle(D.value)},null,4),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(n,s)=>(e.openBlock(),e.createBlock(Z,{key:`${C}-col-${s}`,className:n.className,optionsList:n.options,valueIndex:m.value[s]||0,optionHeight:v.value,visibleOptionNum:N.value,swipeDuration:E.value,isAllowHtml:u.isAllowHtml,isReadonly:u.isReadonly,onOnSelect:c=>F(s,c)},null,8,["className","optionsList","valueIndex","optionHeight","visibleOptionNum","swipeDuration","isAllowHtml","isReadonly","onOnSelect"]))),128)),u.isLoading?(e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(j._sfc_main,{size:"26"})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[],64))],4),e.renderSlot(t.$slots,"columnsBottom"),u.isShowToolbar&&u.toolbarPosition==="bottom"?(e.openBlock(),e.createElementBlock("div",le,[e.createElementVNode("button",{type:"button",class:"picker-toolbar-btn picker-toolbar-btn--cancel",onClick:$},e.toDisplayString(u.cancelButtonText),1),e.createElementVNode("div",ae,[e.renderSlot(t.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(u.title),1)])]),e.createElementVNode("button",{type:"button",class:"picker-toolbar-btn picker-toolbar-btn--confirm",onClick:I},e.toDisplayString(u.confirmButtonText),1)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[],64))],10,ee))}});exports._sfc_main=se;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js","sources":["../../../src/libs/Mobile/Picker/Column.vue","../../../src/libs/Mobile/Picker/Index.vue"],"sourcesContent":["<template>\n <div\n class=\"picker-column\"\n :class=\"className\"\n :style=\"styColumn\"\n role=\"listbox\"\n :aria-readonly=\"isReadonly || undefined\"\n @touchstart=\"onTouchStart\"\n @touchmove=\"onTouchMove\"\n @touchend=\"onTouchEnd\"\n @touchcancel=\"onTouchEnd\"\n @mousedown=\"onTouchStart\"\n >\n <div\n class=\"picker-column-list\"\n :style=\"styList\"\n >\n <div\n v-for=\"(optionItem, inx) in optionsList\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"picker-column-item\"\n :class=\"optItemCls(inx)\"\n :style=\"optItemSty(inx)\"\n role=\"option\"\n :aria-selected=\"optItemCls(inx)['picker-column-item--active'] || undefined\"\n >\n <span v-if=\"!isAllowHtml\">{{ optionItem.text }}</span>\n <span\n v-else\n v-html=\"optionItem.text\"\n ></span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onBeforeUnmount, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport type { PickerOption } from './PickerOption';\n\ndefineOptions({ name: 'ClPickerColumn' });\n\n// 惯性滑动触发条件(对齐 Vant):最后一次位移窗口 < MOMENTUM_TIME 且距离 > MOMENTUM_DISTANCE 才触发惯性\nconst MOMENTUM_TIME = 300;\nconst MOMENTUM_DISTANCE = 15;\nconst MOMENTUM_FRICTION = 0.003;\n\n// props\nconst props = defineProps({\n className: String, // desc: 该列自定义CSS类名\n optionsList: {\n type: Array as PropType<PickerOption[]>,\n default: () => [],\n },\n valueIndex: {\n type: Number,\n default: 0, // desc: 当前选中项索引\n },\n optionHeight: {\n type: Number,\n default: 44, // desc: 选项高度(px)\n },\n visibleOptionNum: {\n type: Number,\n default: 6, // desc: 可见选项个数\n },\n swipeDuration: {\n type: Number,\n default: 1000, // desc: 惯性滚动动画时长(ms)\n },\n isAllowHtml: Boolean, // desc: 是否允许选项内容渲染 HTML\n isReadonly: Boolean, // desc: 是否只读(禁止滑动切换)\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onSelect', index: number): void; // desc: 滑动吸附完成后选中索引变化\n}>();\n\nconst _keyIndex = `pickerColumn-${CommonBase.getRandom(5)}`;\n\n// state\n// 初始定位偏移:让 valueIndex 项位于容器垂直中心\nconst _currentOffset = ref(\n (Math.max(1, props.visibleOptionNum) * props.optionHeight - props.optionHeight) / 2 -\n (CommonBase.isFinite(props.valueIndex) && props.valueIndex >= 0 ? props.valueIndex : 0) *\n props.optionHeight,\n);\nconst _dragOffset = ref(0);\nconst _isDragging = ref(false);\nconst _transitionDuration = ref(0);\nconst _startY = ref(0);\nlet _rafId: number | null = null;\nlet _pendingOffset = 0;\nlet _momentumStartTime = 0;\nlet _momentumStartDelta = 0;\n\n// computed\nconst optVisibleHeight = computed(() => Math.max(1, props.visibleOptionNum) * props.optionHeight);\n// 选中项中心在容器内的偏移(从容器顶部算)\nconst optCenter = computed(() => (optVisibleHeight.value - props.optionHeight) / 2);\nconst optTotalOffset = computed(() => _currentOffset.value + _dragOffset.value);\n// 当前视觉上\"选中行\"的浮点索引(拖拽中为小数)\nconst optVisualIndex = computed(\n () => (optCenter.value - optTotalOffset.value) / props.optionHeight,\n);\n\nconst styColumn = computed(() => ({ height: `${optVisibleHeight.value}px` }));\n\nconst styList = computed(() => ({\n transform: `translateY(${optTotalOffset.value}px)`,\n transition:\n _transitionDuration.value > 0\n ? `transform ${_transitionDuration.value}ms cubic-bezier(0.23, 1, 0.32, 1)`\n : 'none',\n}));\n\nconst optItemCls = (inx: number) => ({\n 'picker-column-item--active': Math.round(optVisualIndex.value) === inx,\n 'picker-column-item--disabled': !!props.optionsList[inx]?.disabled,\n});\n\nconst optItemSty = (inx: number) => {\n const dist = Math.abs(inx - optVisualIndex.value);\n return {\n height: `${props.optionHeight}px`,\n lineHeight: `${props.optionHeight}px`,\n opacity: Math.max(1 - dist * 0.4, 0),\n transform: `rotateX(${-dist * 12}deg) scale(${Math.max(1 - dist * 0.15, 0.5)})`,\n };\n};\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// 由偏移量反推吸附索引\nconst _getIndexByOffset = (offset: number) =>\n Math.round((optCenter.value - offset) / props.optionHeight);\n\n// 吸附到目标偏移(含惯性目标),跳过后禁用的选项\nconst _snapTo = (targetOffset: number) => {\n const len = props.optionsList.length;\n if (len === 0) {\n _currentOffset.value = optCenter.value;\n _dragOffset.value = 0;\n return;\n }\n const currentIndex = _getIndexByOffset(optTotalOffset.value);\n let inx = _getIndexByOffset(targetOffset);\n inx = Math.min(Math.max(inx, 0), len - 1);\n // disabled 项不可停靠:向最近的可选项吸附\n if (props.optionsList[inx]?.disabled) {\n let found = -1;\n for (let step = 1; step < len; step++) {\n if (inx - step >= 0 && !props.optionsList[inx - step]?.disabled) {\n found = inx - step;\n break;\n }\n if (inx + step < len && !props.optionsList[inx + step]?.disabled) {\n found = inx + step;\n break;\n }\n }\n if (found >= 0) inx = found;\n // 全部禁用:不改变当前索引、不触发选中\n else inx = currentIndex;\n }\n _currentOffset.value = optCenter.value - inx * props.optionHeight;\n // 动画时长按索引位移量钳制:小位移快速吸附,大位移随惯性渐停\n const indexDiff = Math.abs(inx - currentIndex);\n _transitionDuration.value = Math.min(props.swipeDuration, Math.max(200, indexDiff * 150));\n _dragOffset.value = 0;\n if (inx !== props.valueIndex) {\n emit('onSelect', inx);\n }\n};\n\n// 鼠标拖拽的 document 监听适配\nconst _onDocMove = ((e: Event) => onTouchMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onTouchEnd(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\n// 生命周期\nonBeforeUnmount(() => {\n _stopMouseListeners();\n if (_rafId !== null) cancelAnimationFrame(_rafId);\n});\n\n// watch\n// 父级索引变化(外部 setValue / 联动重置)时定位\nwatch(\n () => props.valueIndex,\n val => {\n if (_isDragging.value || !CommonBase.isFinite(val) || val < 0) return;\n _currentOffset.value = optCenter.value - val * props.optionHeight;\n _transitionDuration.value = 200;\n },\n);\n\n// 列数据重建(级联联动)时直接定位,不做动画;有拖拽进行时不打断\nwatch(\n () => props.optionsList,\n () => {\n if (_isDragging.value) return;\n const len = props.optionsList.length;\n let idx = CommonBase.isFinite(props.valueIndex) && props.valueIndex >= 0 ? props.valueIndex : 0;\n if (len > 0) idx = Math.min(idx, len - 1);\n _currentOffset.value = optCenter.value - idx * props.optionHeight;\n _transitionDuration.value = 0;\n },\n);\n\n// 事件方法\nconst onTouchStart = (e: TouchEvent | MouseEvent) => {\n if (props.isReadonly) return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理,避免监听残留\n if (_isDragging.value) {\n _stopMouseListeners();\n }\n _startY.value = _getClientY(e);\n _momentumStartTime = Date.now();\n _momentumStartDelta = 0;\n _isDragging.value = true;\n _transitionDuration.value = 0;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onTouchMove = (e: TouchEvent | MouseEvent) => {\n if (!_isDragging.value) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onTouchEnd();\n return;\n }\n e.preventDefault();\n const y = _getClientY(e);\n const delta = y - _startY.value;\n // 每超过 MOMENTUM_TIME 重置惯性采样窗口,仅保留最近一段位移用于甩动判定\n const now = Date.now();\n if (now - _momentumStartTime > MOMENTUM_TIME) {\n _momentumStartTime = now;\n _momentumStartDelta = delta;\n }\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n // 应用最新位移(非发起时的闭包值),避免高频 movemove 下最后一段位移丢失\n _dragOffset.value = _pendingOffset;\n });\n }\n // 始终记录最新位移,RAF 执行时读取\n _pendingOffset = delta;\n};\n\nconst onTouchEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isDragging.value) return;\n _isDragging.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发吸附,仅复位\n if (e?.type === 'touchcancel') {\n _dragOffset.value = 0;\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算\n _dragOffset.value = _pendingOffset;\n }\n // 甩动判定:仅最近一段位移窗口足够快(<300ms 且 >15px)才触发惯性,\n // 慢拖/正常拖直接就近吸附,避免松手后往拖动方向多跳一格\n const distance = _pendingOffset - _momentumStartDelta;\n const duration = Date.now() - _momentumStartTime;\n const isFlick = duration > 0 && duration < MOMENTUM_TIME && Math.abs(distance) > MOMENTUM_DISTANCE;\n const momentum = isFlick\n ? (Math.abs(distance) / duration / MOMENTUM_FRICTION) * (distance < 0 ? -1 : 1)\n : 0;\n _snapTo(optTotalOffset.value + momentum);\n};\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-if=\"isShowToolbar && toolbarPosition === 'top'\"\n class=\"picker-toolbar\"\n >\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--cancel\"\n @click=\"onCancel\"\n >\n {{ cancelButtonText }}\n </button>\n <div class=\"picker-toolbar-title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--confirm\"\n @click=\"onConfirm\"\n >\n {{ confirmButtonText }}\n </button>\n </div>\n <template v-else></template>\n\n <slot name=\"columnsTop\"></slot>\n\n <div\n class=\"picker-columns\"\n :style=\"styColumns\"\n >\n <div\n class=\"picker-frame\"\n :style=\"styFrame\"\n ></div>\n <cl-picker-column\n v-for=\"(colItem, inx) in optColumns\"\n :key=\"`${_keyIndex}-col-${inx}`\"\n :className=\"colItem.className\"\n :optionsList=\"colItem.options\"\n :valueIndex=\"optIndexes[inx] || 0\"\n :optionHeight=\"optOptionHeight\"\n :visibleOptionNum=\"optVisibleOptionNum\"\n :swipeDuration=\"optSwipeDuration\"\n :isAllowHtml=\"isAllowHtml\"\n :isReadonly=\"isReadonly\"\n @onSelect=\"onSelect(inx, $event)\"\n ></cl-picker-column>\n <div\n v-if=\"isLoading\"\n class=\"picker-loading-mask\"\n >\n <cl-load size=\"26\"></cl-load>\n </div>\n <template v-else></template>\n </div>\n\n <slot name=\"columnsBottom\"></slot>\n\n <div\n v-if=\"isShowToolbar && toolbarPosition === 'bottom'\"\n class=\"picker-toolbar picker-toolbar--bottom\"\n >\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--cancel\"\n @click=\"onCancel\"\n >\n {{ cancelButtonText }}\n </button>\n <div class=\"picker-toolbar-title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--confirm\"\n @click=\"onConfirm\"\n >\n {{ confirmButtonText }}\n </button>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport './Index.css';\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport ClPickerColumn from './Column.vue';\nimport type {\n PickerChangePayload,\n PickerColumnConfig,\n PickerColumnItem,\n PickerColumns,\n PickerFieldNames,\n PickerOption,\n PickerSelectPayload,\n} from './PickerOption';\n\ndefineOptions({ name: 'ClPicker' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n value: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n }, // desc: 选中值数组(每列一个值),支持 v-model:value\n className: String, // desc: 自定义CSS类名\n columnsList: {\n type: Array as PropType<PickerColumns>,\n default: () => [],\n }, // desc: 列配置:显式多列 [{ values, defaultIndex }] 或树形级联(选项 children)\n columnsFieldNames: {\n type: Object as PropType<PickerFieldNames>,\n default: () => ({}),\n }, // desc: 选项字段映射 | enum: { text, value, children }\n title: String, // desc: 顶部栏标题\n confirmButtonText: {\n type: String,\n default: '确认', // desc: 确认按钮文字\n },\n cancelButtonText: {\n type: String,\n default: '取消', // desc: 取消按钮文字\n },\n toolbarPosition: {\n type: String,\n default: 'top', // desc: 顶部栏位置 | enum: top, bottom\n validator: (value: string) => {\n return ['top', 'bottom'].indexOf(value) !== -1;\n },\n },\n isShowToolbar: {\n type: Boolean,\n default: true, // desc: 是否显示顶部栏(确认/取消按钮)\n },\n isLoading: Boolean, // desc: 是否显示加载状态\n isReadonly: Boolean, // desc: 是否只读(禁止滑动切换选项)\n isAllowHtml: Boolean, // desc: 是否允许选项内容渲染 HTML(默认关闭,防注入)\n optionHeight: {\n type: Number,\n default: 44, // desc: 选项高度(px)\n },\n visibleOptionNum: {\n type: Number,\n default: 6, // desc: 可见选项个数(建议奇数,居中效果更好)\n },\n swipeDuration: {\n type: Number,\n default: 1000, // desc: 快速滑动时惯性滚动的动画时长(ms)\n },\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'update:value', value: (string | number)[]): void; // desc: 选中值数组变化(每列一个值)\n (e: 'onConfirm', payload: PickerSelectPayload): void; // desc: 点击确认按钮时触发\n (e: 'onCancel', payload: PickerSelectPayload): void; // desc: 点击取消按钮时触发\n (e: 'onChange', payload: PickerChangePayload): void; // desc: 选项改变时触发(columnIndex 标识变化列)\n}>();\n\n// slots: title(顶部栏标题), columnsTop(选项上方), columnsBottom(选项下方)\n\nconst _keyIndex = `picker-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `picker-${CommonBase.getRandom(8)}`\n\n// 解析后的列配置\ninterface PickerResolvedColumn {\n options: PickerOption[];\n defaultIndex: number;\n className?: string;\n}\nconst optColumns = ref<PickerResolvedColumn[]>([]);\nconst optIndexes = ref<number[]>([]);\n\n// computed\nconst optFieldNames = computed(() => ({\n text: props.columnsFieldNames?.text || 'text',\n value: props.columnsFieldNames?.value || 'value',\n children: props.columnsFieldNames?.children || 'children',\n}));\n\nconst optOptionHeight = computed(() =>\n CommonBase.isFinite(props.optionHeight) && props.optionHeight > 0 ? props.optionHeight : 44,\n);\n\nconst optVisibleOptionNum = computed(() =>\n CommonBase.isFinite(props.visibleOptionNum) ? Math.max(1, props.visibleOptionNum) : 6,\n);\n\nconst optSwipeDuration = computed(() =>\n CommonBase.isFinite(props.swipeDuration) ? Math.max(0, props.swipeDuration) : 1000,\n);\n\nconst styColumns = computed(() => ({\n height: `${optVisibleOptionNum.value * optOptionHeight.value}px`,\n}));\n\nconst styFrame = computed(() => ({\n height: `${optOptionHeight.value}px`,\n}));\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-picker': true,\n 'picker-readonly': props.isReadonly,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\n// 内部方法\n// 解析原始数据项 → 内部选项对象\nconst _parseOption = (item: PickerColumnItem): PickerOption | null => {\n if (CommonBase.isString(item) || CommonBase.isNumber(item)) {\n // CommonBase.isString/isNumber 非 TS 类型守卫,需手动断言收窄\n return { text: String(item), value: item as string | number };\n }\n if (CommonBase.getTypeof(item) === 'object' && item !== null) {\n const obj = item as Record<string, unknown>;\n const rawText = obj[optFieldNames.value.text];\n const rawValue = obj[optFieldNames.value.value];\n const rawChildren = obj[optFieldNames.value.children];\n const text = CommonBase.isString(rawText)\n ? (rawText as string)\n : CommonBase.isNumber(rawText)\n ? String(rawText)\n : '';\n const value =\n CommonBase.isString(rawValue) || CommonBase.isNumber(rawValue)\n ? (rawValue as string | number)\n : '';\n const children = Array.isArray(rawChildren) ? rawChildren : undefined;\n return {\n text,\n value,\n disabled: !!obj.disabled,\n children: children\n ? children.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : undefined,\n };\n }\n return null;\n};\n\n// 判断是否为显式多列模式(第一项带 values 字段)\nconst _isExplicitColumns = (): boolean => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) return false;\n const first = c[0];\n return (\n CommonBase.getTypeof(first) === 'object' &&\n first !== null &&\n Array.isArray((first as Record<string, unknown>).values)\n );\n};\n\n// 根据当前索引展开列(树形级联:选中项 children 作为下一列数据)\nconst _resolveColumns = (): PickerResolvedColumn[] => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) return [];\n if (_isExplicitColumns()) {\n return (c as PickerColumnConfig[]).map(col => {\n const options = Array.isArray(col.values)\n ? col.values.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : [];\n const di = CommonBase.isFinite(col.defaultIndex) ? (col.defaultIndex as number) : 0;\n return {\n options,\n defaultIndex: options.length > 0 ? Math.min(Math.max(0, Math.floor(di)), options.length - 1) : 0,\n className: CommonBase.isString(col.className) ? col.className : undefined,\n };\n });\n }\n // 树形级联:逐级展开(选中项 children 作为下一列数据)\n const resolved: PickerResolvedColumn[] = [];\n let options = (c as PickerColumnItem[])\n .map(_parseOption)\n .filter((opt): opt is PickerOption => opt !== null);\n let guard = 0;\n while (options.length > 0 && guard < 20) {\n guard++;\n resolved.push({ options, defaultIndex: 0 });\n const selected = options[optIndexes.value[resolved.length - 1] || 0];\n const children = selected?.children;\n if (children && children.length > 0) {\n options = children;\n } else {\n break;\n }\n }\n return resolved;\n};\n\nconst _getSelectedValues = (): (string | number)[] =>\n optIndexes.value\n .map((i, col) => optColumns.value[col]?.options[i]?.value)\n .filter((v): v is string | number => v !== undefined);\n\nconst _getSelectedOptions = (): PickerOption[] =>\n optIndexes.value\n .map((i, col) => optColumns.value[col]?.options[i])\n .filter((opt): opt is PickerOption => !!opt);\n\nconst _getSelectedIndexes = (): number[] => [...optIndexes.value];\n\nconst _valuesEqual = (a: (string | number)[], b: (string | number)[]): boolean =>\n a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst _syncValue = () => {\n const values = _getSelectedValues();\n const old = Array.isArray(props.value) ? props.value : [];\n if (!_valuesEqual(values, old)) {\n emit('update:value', values);\n }\n};\n\n// 应用选中值(外部回显 / setValue),逐列反查索引\nconst _applyValue = (val?: (string | number)[]) => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) {\n optColumns.value = [];\n optIndexes.value = [];\n return;\n }\n const newIndexes: number[] = [];\n if (_isExplicitColumns()) {\n (c as PickerColumnConfig[]).forEach((col, i) => {\n const options = Array.isArray(col.values)\n ? col.values.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : [];\n const target = val?.[i];\n let idx = options.findIndex(opt => opt.value === target);\n if (idx < 0) {\n const di = CommonBase.isFinite(col.defaultIndex) ? (col.defaultIndex as number) : 0;\n idx = options.length > 0 ? Math.min(Math.max(0, Math.floor(di)), options.length - 1) : 0;\n }\n newIndexes.push(idx);\n });\n } else {\n // 树形级联:逐级展开并反查\n let options = (c as PickerColumnItem[])\n .map(_parseOption)\n .filter((opt): opt is PickerOption => opt !== null);\n let guard = 0;\n while (options.length > 0 && guard < 20) {\n guard++;\n const target = val?.[newIndexes.length];\n let idx = options.findIndex(opt => opt.value === target);\n if (idx < 0) idx = 0;\n newIndexes.push(idx);\n const children = options[idx]?.children;\n if (children && children.length > 0) {\n options = children;\n } else {\n break;\n }\n }\n }\n optIndexes.value = newIndexes;\n optColumns.value = _resolveColumns();\n};\n\n// watch\nwatch(\n () => props.columnsList,\n () => {\n _applyValue(Array.isArray(props.value) ? props.value : undefined);\n },\n { deep: true, immediate: true },\n);\n\n// 外部 value 变化(回显 / v-model 赋值)且与内部不一致时重新定位\nwatch(\n () => props.value,\n val => {\n if (!Array.isArray(val)) return;\n const values = _getSelectedValues();\n if (!_valuesEqual(values, val)) {\n _applyValue(val);\n }\n },\n { deep: true },\n);\n\n// 事件方法\nconst onSelect = (columnIndex: number, optionIndex: number) => {\n if (optIndexes.value[columnIndex] === optionIndex) return;\n optIndexes.value[columnIndex] = optionIndex;\n // 先截断该列之后的索引,避免 _resolveColumns 读到陈旧深层索引导致级联列数据与高亮错位/截断\n optIndexes.value = optIndexes.value.slice(0, columnIndex + 1);\n // 该列之后的列按新选中项 children 重建,索引重置为新列 defaultIndex\n optColumns.value = _resolveColumns();\n const nextIndexes = optIndexes.value.slice(0, columnIndex + 1);\n for (let i = nextIndexes.length; i < optColumns.value.length; i++) {\n nextIndexes.push(optColumns.value[i].defaultIndex);\n }\n optIndexes.value = nextIndexes;\n emit('onChange', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n columnIndex,\n });\n _syncValue();\n};\n\nconst onConfirm = () => {\n emit('onConfirm', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n });\n};\n\nconst onCancel = () => {\n emit('onCancel', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n });\n};\n\n// 开放给外部使用的方法\nconst getValue = (): (string | number)[] => _getSelectedValues();\nconst setValue = (values: (string | number)[]): void => {\n _applyValue(values);\n // 同步回写 v-model:value,避免内部选中与父 value 长期不一致\n _syncValue();\n};\nconst getValueData = (): PickerOption[] => _getSelectedOptions();\nconst getSelectedOptions = (): PickerOption[] => _getSelectedOptions();\nconst confirm = (): void => onConfirm();\n\n// 导出类型\nexport interface ClPickerExpose {\n getValue: () => (string | number)[];\n setValue: (values: (string | number)[]) => void;\n getValueData: () => PickerOption[];\n getSelectedOptions: () => PickerOption[];\n confirm: () => void;\n}\n\n// defineExpose(必须放在最后)\ndefineExpose({ getValue, setValue, getValueData, getSelectedOptions, confirm });\n</script>\n"],"names":["MOMENTUM_TIME","MOMENTUM_DISTANCE","MOMENTUM_FRICTION","props","__props","emit","__emit","_keyIndex","CommonBase","_currentOffset","ref","_dragOffset","_isDragging","_transitionDuration","_startY","_rafId","_pendingOffset","_momentumStartTime","_momentumStartDelta","optVisibleHeight","computed","optCenter","optTotalOffset","optVisualIndex","styColumn","styList","optItemCls","inx","optItemSty","dist","_getClientY","e","touches","_getIndexByOffset","offset","_snapTo","targetOffset","len","currentIndex","found","step","indexDiff","_onDocMove","onTouchMove","_onDocUp","onTouchEnd","_startMouseListeners","_stopMouseListeners","onBeforeUnmount","watch","val","idx","onTouchStart","delta","now","distance","duration","momentum","_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_Fragment","_renderList","optionItem","_normalizeStyle","_hoisted_3","_toDisplayString","elId","optColumns","optIndexes","optFieldNames","optOptionHeight","optVisibleOptionNum","optSwipeDuration","styColumns","styFrame","clsParent","cls","CommonElement","_parseOption","item","obj","rawText","rawValue","rawChildren","text","value","children","opt","_isExplicitColumns","c","first","_resolveColumns","col","options","di","resolved","guard","_getSelectedValues","i","v","_getSelectedOptions","_getSelectedIndexes","_valuesEqual","a","b","_syncValue","values","old","_applyValue","newIndexes","target","onSelect","columnIndex","optionIndex","nextIndexes","onConfirm","onCancel","__expose","_unref","_hoisted_2","_renderSlot","_ctx","colItem","_createBlock","ClPickerColumn","$event","_hoisted_4","_createVNode","ClLoad","_hoisted_5","_hoisted_6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js","sources":["../../../src/libs/Mobile/Picker/Column.vue","../../../src/libs/Mobile/Picker/Index.vue"],"sourcesContent":["<template>\n <div\n class=\"picker-column\"\n :class=\"className\"\n :style=\"styColumn\"\n role=\"listbox\"\n :aria-readonly=\"isReadonly || undefined\"\n @touchstart=\"onTouchStart\"\n @touchmove=\"onTouchMove\"\n @touchend=\"onTouchEnd\"\n @touchcancel=\"onTouchEnd\"\n @mousedown=\"onTouchStart\"\n >\n <div\n class=\"picker-column-list\"\n :style=\"styList\"\n >\n <div\n v-for=\"(optionItem, inx) in optionsList\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"picker-column-item\"\n :class=\"optItemCls(inx)\"\n :style=\"optItemSty(inx)\"\n role=\"option\"\n :aria-selected=\"optItemCls(inx)['picker-column-item--active'] || undefined\"\n >\n <span v-if=\"!isAllowHtml\">{{ optionItem.text }}</span>\n <span\n v-else\n v-html=\"optionItem.text\"\n ></span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onBeforeUnmount, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport type { PickerOption } from './PickerOption';\n\ndefineOptions({ name: 'ClPickerColumn' });\n\n// 惯性滑动触发条件(对齐 Vant):最后一次位移窗口 < MOMENTUM_TIME 且距离 > MOMENTUM_DISTANCE 才触发惯性\nconst MOMENTUM_TIME = 300;\nconst MOMENTUM_DISTANCE = 15;\nconst MOMENTUM_FRICTION = 0.003;\n\n// props\nconst props = defineProps({\n className: String, // desc: 该列自定义CSS类名\n optionsList: {\n type: Array as PropType<PickerOption[]>,\n default: () => [],\n },\n valueIndex: {\n type: Number,\n default: 0, // desc: 当前选中项索引\n },\n optionHeight: {\n type: Number,\n default: 44, // desc: 选项高度(px)\n },\n visibleOptionNum: {\n type: Number,\n default: 6, // desc: 可见选项个数\n },\n swipeDuration: {\n type: Number,\n default: 1000, // desc: 惯性滚动动画时长(ms)\n },\n isAllowHtml: Boolean, // desc: 是否允许选项内容渲染 HTML\n isReadonly: Boolean, // desc: 是否只读(禁止滑动切换)\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'onSelect', index: number): void; // desc: 滑动吸附完成后选中索引变化\n}>();\n\nconst _keyIndex = `pickerColumn-${CommonBase.getRandom(5)}`;\n\n// state\n// 初始定位偏移:让 valueIndex 项位于容器垂直中心\nconst _currentOffset = ref(\n (Math.max(1, props.visibleOptionNum) * props.optionHeight - props.optionHeight) / 2 -\n (CommonBase.isFinite(props.valueIndex) && props.valueIndex >= 0 ? props.valueIndex : 0) *\n props.optionHeight,\n);\nconst _dragOffset = ref(0);\nconst _isDragging = ref(false);\nconst _transitionDuration = ref(0);\nconst _startY = ref(0);\nlet _rafId: number | null = null;\nlet _pendingOffset = 0;\nlet _momentumStartTime = 0;\nlet _momentumStartDelta = 0;\n\n// computed\nconst optVisibleHeight = computed(() => Math.max(1, props.visibleOptionNum) * props.optionHeight);\n// 选中项中心在容器内的偏移(从容器顶部算)\nconst optCenter = computed(() => (optVisibleHeight.value - props.optionHeight) / 2);\nconst optTotalOffset = computed(() => _currentOffset.value + _dragOffset.value);\n// 当前视觉上\"选中行\"的浮点索引(拖拽中为小数)\nconst optVisualIndex = computed(\n () => (optCenter.value - optTotalOffset.value) / props.optionHeight,\n);\n\nconst styColumn = computed(() => ({ height: `${optVisibleHeight.value}px` }));\n\nconst styList = computed(() => ({\n transform: `translateY(${optTotalOffset.value}px)`,\n transition:\n _transitionDuration.value > 0\n ? `transform ${_transitionDuration.value}ms cubic-bezier(0.23, 1, 0.32, 1)`\n : 'none',\n}));\n\nconst optItemCls = (inx: number) => ({\n 'picker-column-item--active': Math.round(optVisualIndex.value) === inx,\n 'picker-column-item--disabled': !!props.optionsList[inx]?.disabled,\n});\n\nconst optItemSty = (inx: number) => {\n const dist = Math.abs(inx - optVisualIndex.value);\n return {\n height: `${props.optionHeight}px`,\n lineHeight: `${props.optionHeight}px`,\n opacity: Math.max(1 - dist * 0.4, 0),\n transform: `rotateX(${-dist * 12}deg) scale(${Math.max(1 - dist * 0.15, 0.5)})`,\n };\n};\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// 由偏移量反推吸附索引\nconst _getIndexByOffset = (offset: number) =>\n Math.round((optCenter.value - offset) / props.optionHeight);\n\n// 吸附到目标偏移(含惯性目标),跳过后禁用的选项\nconst _snapTo = (targetOffset: number) => {\n const len = props.optionsList.length;\n if (len === 0) {\n _currentOffset.value = optCenter.value;\n _dragOffset.value = 0;\n return;\n }\n const currentIndex = _getIndexByOffset(optTotalOffset.value);\n let inx = _getIndexByOffset(targetOffset);\n inx = Math.min(Math.max(inx, 0), len - 1);\n // disabled 项不可停靠:向最近的可选项吸附\n if (props.optionsList[inx]?.disabled) {\n let found = -1;\n for (let step = 1; step < len; step++) {\n if (inx - step >= 0 && !props.optionsList[inx - step]?.disabled) {\n found = inx - step;\n break;\n }\n if (inx + step < len && !props.optionsList[inx + step]?.disabled) {\n found = inx + step;\n break;\n }\n }\n if (found >= 0) inx = found;\n // 全部禁用:不改变当前索引、不触发选中\n else inx = currentIndex;\n }\n _currentOffset.value = optCenter.value - inx * props.optionHeight;\n // 动画时长按索引位移量钳制:小位移快速吸附,大位移随惯性渐停\n const indexDiff = Math.abs(inx - currentIndex);\n _transitionDuration.value = Math.min(props.swipeDuration, Math.max(200, indexDiff * 150));\n _dragOffset.value = 0;\n if (inx !== props.valueIndex) {\n emit('onSelect', inx);\n }\n};\n\n// 鼠标拖拽的 document 监听适配\nconst _onDocMove = ((e: Event) => onTouchMove(e as MouseEvent)) as EventListener;\nconst _onDocUp = ((e: Event) => onTouchEnd(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\n// 生命周期\nonBeforeUnmount(() => {\n _stopMouseListeners();\n if (_rafId !== null) cancelAnimationFrame(_rafId);\n});\n\n// watch\n// 父级索引变化(外部 setValue / 联动重置)时定位\nwatch(\n () => props.valueIndex,\n val => {\n if (_isDragging.value || !CommonBase.isFinite(val) || val < 0) return;\n _currentOffset.value = optCenter.value - val * props.optionHeight;\n _transitionDuration.value = 200;\n },\n);\n\n// 列数据重建(级联联动)时直接定位,不做动画;有拖拽进行时不打断\nwatch(\n () => props.optionsList,\n () => {\n if (_isDragging.value) return;\n const len = props.optionsList.length;\n let idx = CommonBase.isFinite(props.valueIndex) && props.valueIndex >= 0 ? props.valueIndex : 0;\n if (len > 0) idx = Math.min(idx, len - 1);\n _currentOffset.value = optCenter.value - idx * props.optionHeight;\n _transitionDuration.value = 0;\n },\n);\n\n// 事件方法\nconst onTouchStart = (e: TouchEvent | MouseEvent) => {\n if (props.isReadonly) return;\n if (!('touches' in e) && (e as MouseEvent).button !== 0) return;\n // 上次会话未正常收尾(窗口外松手等)时先清理,避免监听残留\n if (_isDragging.value) {\n _stopMouseListeners();\n }\n _startY.value = _getClientY(e);\n _momentumStartTime = Date.now();\n _momentumStartDelta = 0;\n _isDragging.value = true;\n _transitionDuration.value = 0;\n if (!('touches' in e)) {\n _startMouseListeners();\n }\n};\n\nconst onTouchMove = (e: TouchEvent | MouseEvent) => {\n if (!_isDragging.value) return;\n // 鼠标已无按键按下(窗口外松手)时自愈收尾\n if (!('touches' in e) && (e as MouseEvent).buttons === 0) {\n onTouchEnd();\n return;\n }\n e.preventDefault();\n const y = _getClientY(e);\n const delta = y - _startY.value;\n // 每超过 MOMENTUM_TIME 重置惯性采样窗口,仅保留最近一段位移用于甩动判定\n const now = Date.now();\n if (now - _momentumStartTime > MOMENTUM_TIME) {\n _momentumStartTime = now;\n _momentumStartDelta = delta;\n }\n if (_rafId === null) {\n _rafId = requestAnimationFrame(() => {\n _rafId = null;\n // 应用最新位移(非发起时的闭包值),避免高频 movemove 下最后一段位移丢失\n _dragOffset.value = _pendingOffset;\n });\n }\n // 始终记录最新位移,RAF 执行时读取\n _pendingOffset = delta;\n};\n\nconst onTouchEnd = (e?: TouchEvent | MouseEvent) => {\n if (!_isDragging.value) return;\n _isDragging.value = false;\n _stopMouseListeners();\n // 手势取消(来电/系统接管)不触发吸附,仅复位\n if (e?.type === 'touchcancel') {\n _dragOffset.value = 0;\n return;\n }\n if (_rafId !== null) {\n cancelAnimationFrame(_rafId);\n _rafId = null;\n // RAF 尚未执行时按最新位移补算\n _dragOffset.value = _pendingOffset;\n }\n // 甩动判定:仅最近一段位移窗口足够快(<300ms 且 >15px)才触发惯性,\n // 慢拖/正常拖直接就近吸附,避免松手后往拖动方向多跳一格\n const distance = _pendingOffset - _momentumStartDelta;\n const duration = Date.now() - _momentumStartTime;\n const isFlick = duration > 0 && duration < MOMENTUM_TIME && Math.abs(distance) > MOMENTUM_DISTANCE;\n const momentum = isFlick\n ? (Math.abs(distance) / duration / MOMENTUM_FRICTION) * (distance < 0 ? -1 : 1)\n : 0;\n _snapTo(optTotalOffset.value + momentum);\n};\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-if=\"isShowToolbar && toolbarPosition === 'top'\"\n class=\"picker-toolbar\"\n >\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--cancel\"\n @click=\"onCancel\"\n >\n {{ cancelButtonText }}\n </button>\n <div class=\"picker-toolbar-title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--confirm\"\n @click=\"onConfirm\"\n >\n {{ confirmButtonText }}\n </button>\n </div>\n <template v-else></template>\n\n <slot name=\"columnsTop\"></slot>\n\n <div\n class=\"picker-columns\"\n :style=\"styColumns\"\n >\n <div\n class=\"picker-frame\"\n :style=\"styFrame\"\n ></div>\n <cl-picker-column\n v-for=\"(colItem, inx) in optColumns\"\n :key=\"`${_keyIndex}-col-${inx}`\"\n :className=\"colItem.className\"\n :optionsList=\"colItem.options\"\n :valueIndex=\"optIndexes[inx] || 0\"\n :optionHeight=\"optOptionHeight\"\n :visibleOptionNum=\"optVisibleOptionNum\"\n :swipeDuration=\"optSwipeDuration\"\n :isAllowHtml=\"isAllowHtml\"\n :isReadonly=\"isReadonly\"\n @onSelect=\"onSelect(inx, $event)\"\n ></cl-picker-column>\n <div\n v-if=\"isLoading\"\n class=\"picker-loading-mask\"\n >\n <cl-load size=\"26\"></cl-load>\n </div>\n <template v-else></template>\n </div>\n\n <slot name=\"columnsBottom\"></slot>\n\n <div\n v-if=\"isShowToolbar && toolbarPosition === 'bottom'\"\n class=\"picker-toolbar picker-toolbar--bottom\"\n >\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--cancel\"\n @click=\"onCancel\"\n >\n {{ cancelButtonText }}\n </button>\n <div class=\"picker-toolbar-title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <button\n type=\"button\"\n class=\"picker-toolbar-btn picker-toolbar-btn--confirm\"\n @click=\"onConfirm\"\n >\n {{ confirmButtonText }}\n </button>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport './Index.css';\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport ClPickerColumn from './Column.vue';\nimport type {\n PickerChangePayload,\n PickerColumnConfig,\n PickerColumnItem,\n PickerColumns,\n PickerFieldNames,\n PickerOption,\n PickerSelectPayload,\n} from './PickerOption';\n\ndefineOptions({ name: 'ClPicker' });\n\n// props\nconst props = defineProps({\n id: String, // desc: 组件实例唯一标识,用于多实例场景下 DOM 查询限定\n value: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n }, // desc: 选中值数组(每列一个值),支持 v-model:value\n className: String, // desc: 自定义CSS类名\n columnsList: {\n type: Array as PropType<PickerColumns>,\n default: () => [],\n }, // desc: 列配置:显式多列 [{ values, defaultIndex }] 或树形级联(选项 children)\n columnsFieldNames: {\n type: Object as PropType<PickerFieldNames>,\n default: () => ({}),\n }, // desc: 选项字段映射 | enum: { text, value, children }\n title: String, // desc: 顶部栏标题\n confirmButtonText: {\n type: String,\n default: '确认', // desc: 确认按钮文字\n },\n cancelButtonText: {\n type: String,\n default: '取消', // desc: 取消按钮文字\n },\n toolbarPosition: {\n type: String,\n default: 'top', // desc: 顶部栏位置 | enum: top, bottom\n validator: (value: string) => {\n return ['top', 'bottom'].indexOf(value) !== -1;\n },\n },\n isShowToolbar: {\n type: Boolean,\n default: true, // desc: 是否显示顶部栏(确认/取消按钮)\n },\n isLoading: Boolean, // desc: 是否显示加载状态\n isReadonly: Boolean, // desc: 是否只读(禁止滑动切换选项)\n isAllowHtml: Boolean, // desc: 是否允许选项内容渲染 HTML(默认关闭,防注入)\n optionHeight: {\n type: Number,\n default: 44, // desc: 选项高度(px)\n },\n visibleOptionNum: {\n type: Number,\n default: 6, // desc: 可见选项个数(建议奇数,居中效果更好)\n },\n swipeDuration: {\n type: Number,\n default: 1000, // desc: 快速滑动时惯性滚动的动画时长(ms)\n },\n});\n\n// emit\nconst emit = defineEmits<{\n (e: 'update:value', value: (string | number)[]): void; // desc: 选中值数组变化(每列一个值)\n (e: 'onConfirm', payload: PickerSelectPayload): void; // desc: 点击确认按钮时触发\n (e: 'onCancel', payload: PickerSelectPayload): void; // desc: 点击取消按钮时触发\n (e: 'onChange', payload: PickerChangePayload): void; // desc: 选项改变时触发(columnIndex 标识变化列)\n}>();\n\n// slots: title(顶部栏标题), columnsTop(选项上方), columnsBottom(选项下方)\n\nconst _keyIndex = `picker-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `picker-${CommonBase.getRandom(8)}`\n\n// 解析后的列配置\ninterface PickerResolvedColumn {\n options: PickerOption[];\n defaultIndex: number;\n className?: string;\n}\nconst optColumns = ref<PickerResolvedColumn[]>([]);\nconst optIndexes = ref<number[]>([]);\n\n// computed\nconst optFieldNames = computed(() => ({\n text: props.columnsFieldNames?.text || 'text',\n value: props.columnsFieldNames?.value || 'value',\n children: props.columnsFieldNames?.children || 'children',\n}));\n\nconst optOptionHeight = computed(() =>\n CommonBase.isFinite(props.optionHeight) && props.optionHeight > 0 ? props.optionHeight : 44,\n);\n\nconst optVisibleOptionNum = computed(() =>\n CommonBase.isFinite(props.visibleOptionNum) ? Math.max(1, props.visibleOptionNum) : 6,\n);\n\nconst optSwipeDuration = computed(() =>\n CommonBase.isFinite(props.swipeDuration) ? Math.max(0, props.swipeDuration) : 1000,\n);\n\nconst styColumns = computed(() => ({\n height: `${optVisibleOptionNum.value * optOptionHeight.value}px`,\n}));\n\nconst styFrame = computed(() => ({\n height: `${optOptionHeight.value}px`,\n}));\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-picker': true,\n 'picker-readonly': props.isReadonly,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\n// 内部方法\n// 解析原始数据项 → 内部选项对象\nconst _parseOption = (item: PickerColumnItem): PickerOption | null => {\n if (CommonBase.isString(item) || CommonBase.isNumber(item)) {\n // CommonBase.isString/isNumber 非 TS 类型守卫,需手动断言收窄\n return { text: String(item), value: item as string | number };\n }\n if (CommonBase.getTypeof(item) === 'object' && item !== null) {\n const obj = item as Record<string, unknown>;\n const rawText = obj[optFieldNames.value.text];\n const rawValue = obj[optFieldNames.value.value];\n const rawChildren = obj[optFieldNames.value.children];\n const text = CommonBase.isString(rawText)\n ? (rawText as string)\n : CommonBase.isNumber(rawText)\n ? String(rawText)\n : '';\n const value =\n CommonBase.isString(rawValue) || CommonBase.isNumber(rawValue)\n ? (rawValue as string | number)\n : '';\n const children = Array.isArray(rawChildren) ? rawChildren : undefined;\n return {\n text,\n value,\n disabled: !!obj.disabled,\n children: children\n ? children.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : undefined,\n };\n }\n return null;\n};\n\n// 判断是否为显式多列模式(第一项带 values 字段)\nconst _isExplicitColumns = (): boolean => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) return false;\n const first = c[0];\n return (\n CommonBase.getTypeof(first) === 'object' &&\n first !== null &&\n Array.isArray((first as Record<string, unknown>).values)\n );\n};\n\n// 根据当前索引展开列(树形级联:选中项 children 作为下一列数据)\nconst _resolveColumns = (): PickerResolvedColumn[] => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) return [];\n if (_isExplicitColumns()) {\n return (c as PickerColumnConfig[]).map(col => {\n const options = Array.isArray(col.values)\n ? col.values.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : [];\n const di = CommonBase.isFinite(col.defaultIndex) ? (col.defaultIndex as number) : 0;\n return {\n options,\n defaultIndex: options.length > 0 ? Math.min(Math.max(0, Math.floor(di)), options.length - 1) : 0,\n className: CommonBase.isString(col.className) ? col.className : undefined,\n };\n });\n }\n // 树形级联:逐级展开(选中项 children 作为下一列数据)\n const resolved: PickerResolvedColumn[] = [];\n let options = (c as PickerColumnItem[])\n .map(_parseOption)\n .filter((opt): opt is PickerOption => opt !== null);\n let guard = 0;\n while (options.length > 0 && guard < 20) {\n guard++;\n resolved.push({ options, defaultIndex: 0 });\n const selected = options[optIndexes.value[resolved.length - 1] || 0];\n const children = selected?.children;\n if (children && children.length > 0) {\n options = children;\n } else {\n break;\n }\n }\n return resolved;\n};\n\nconst _getSelectedValues = (): (string | number)[] =>\n optIndexes.value\n .map((i, col) => optColumns.value[col]?.options[i]?.value)\n .filter((v): v is string | number => v !== undefined);\n\nconst _getSelectedOptions = (): PickerOption[] =>\n optIndexes.value\n .map((i, col) => optColumns.value[col]?.options[i])\n .filter((opt): opt is PickerOption => !!opt);\n\nconst _getSelectedIndexes = (): number[] => [...optIndexes.value];\n\nconst _valuesEqual = (a: (string | number)[], b: (string | number)[]): boolean =>\n a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst _syncValue = () => {\n const values = _getSelectedValues();\n const old = Array.isArray(props.value) ? props.value : [];\n if (!_valuesEqual(values, old)) {\n emit('update:value', values);\n }\n};\n\n// 应用选中值(外部回显 / setValue),逐列反查索引\nconst _applyValue = (val?: (string | number)[]) => {\n const c = props.columnsList;\n if (!Array.isArray(c) || c.length === 0) {\n optColumns.value = [];\n optIndexes.value = [];\n return;\n }\n const newIndexes: number[] = [];\n if (_isExplicitColumns()) {\n (c as PickerColumnConfig[]).forEach((col, i) => {\n const options = Array.isArray(col.values)\n ? col.values.map(_parseOption).filter((opt): opt is PickerOption => opt !== null)\n : [];\n const target = val?.[i];\n let idx = options.findIndex(opt => opt.value === target);\n if (idx < 0) {\n const di = CommonBase.isFinite(col.defaultIndex) ? (col.defaultIndex as number) : 0;\n idx = options.length > 0 ? Math.min(Math.max(0, Math.floor(di)), options.length - 1) : 0;\n }\n newIndexes.push(idx);\n });\n } else {\n // 树形级联:逐级展开并反查\n let options = (c as PickerColumnItem[])\n .map(_parseOption)\n .filter((opt): opt is PickerOption => opt !== null);\n let guard = 0;\n while (options.length > 0 && guard < 20) {\n guard++;\n const target = val?.[newIndexes.length];\n let idx = options.findIndex(opt => opt.value === target);\n if (idx < 0) idx = 0;\n newIndexes.push(idx);\n const children = options[idx]?.children;\n if (children && children.length > 0) {\n options = children;\n } else {\n break;\n }\n }\n }\n optIndexes.value = newIndexes;\n optColumns.value = _resolveColumns();\n};\n\n// watch\nwatch(\n () => props.columnsList,\n () => {\n _applyValue(Array.isArray(props.value) ? props.value : undefined);\n },\n { deep: true, immediate: true },\n);\n\n// 外部 value 变化(回显 / v-model 赋值)且与内部不一致时重新定位\nwatch(\n () => props.value,\n val => {\n if (!Array.isArray(val)) return;\n const values = _getSelectedValues();\n if (!_valuesEqual(values, val)) {\n _applyValue(val);\n }\n },\n { deep: true },\n);\n\n// 事件方法\nconst onSelect = (columnIndex: number, optionIndex: number) => {\n if (optIndexes.value[columnIndex] === optionIndex) return;\n optIndexes.value[columnIndex] = optionIndex;\n // 先截断该列之后的索引,避免 _resolveColumns 读到陈旧深层索引导致级联列数据与高亮错位/截断\n optIndexes.value = optIndexes.value.slice(0, columnIndex + 1);\n // 该列之后的列按新选中项 children 重建,索引重置为新列 defaultIndex\n optColumns.value = _resolveColumns();\n const nextIndexes = optIndexes.value.slice(0, columnIndex + 1);\n for (let i = nextIndexes.length; i < optColumns.value.length; i++) {\n nextIndexes.push(optColumns.value[i].defaultIndex);\n }\n optIndexes.value = nextIndexes;\n emit('onChange', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n columnIndex,\n });\n _syncValue();\n};\n\nconst onConfirm = () => {\n emit('onConfirm', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n });\n};\n\nconst onCancel = () => {\n emit('onCancel', {\n selectedValues: _getSelectedValues(),\n selectedOptions: _getSelectedOptions(),\n selectedIndexes: _getSelectedIndexes(),\n });\n};\n\n// 开放给外部使用的方法\nconst getValue = (): (string | number)[] => _getSelectedValues();\nconst setValue = (values: (string | number)[]): void => {\n _applyValue(values);\n // 同步回写 v-model:value,避免内部选中与父 value 长期不一致\n _syncValue();\n};\nconst getValueData = (): PickerOption[] => _getSelectedOptions();\nconst getSelectedOptions = (): PickerOption[] => _getSelectedOptions();\nconst confirm = (): void => onConfirm();\n\n// 导出类型\nexport interface ClPickerExpose {\n getValue: () => (string | number)[];\n setValue: (values: (string | number)[]) => void;\n getValueData: () => PickerOption[];\n getSelectedOptions: () => PickerOption[];\n confirm: () => void;\n}\n\n// defineExpose(必须放在最后)\ndefineExpose({ getValue, setValue, getValueData, getSelectedOptions, confirm });\n</script>\n"],"names":["MOMENTUM_TIME","MOMENTUM_DISTANCE","MOMENTUM_FRICTION","props","__props","emit","__emit","_keyIndex","CommonBase","_currentOffset","ref","_dragOffset","_isDragging","_transitionDuration","_startY","_rafId","_pendingOffset","_momentumStartTime","_momentumStartDelta","optVisibleHeight","computed","optCenter","optTotalOffset","optVisualIndex","styColumn","styList","optItemCls","inx","optItemSty","dist","_getClientY","e","touches","_getIndexByOffset","offset","_snapTo","targetOffset","len","currentIndex","found","step","indexDiff","_onDocMove","onTouchMove","_onDocUp","onTouchEnd","_startMouseListeners","_stopMouseListeners","onBeforeUnmount","watch","val","idx","onTouchStart","delta","now","distance","duration","momentum","_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_Fragment","_renderList","optionItem","_normalizeStyle","_hoisted_3","_toDisplayString","elId","optColumns","optIndexes","optFieldNames","optOptionHeight","optVisibleOptionNum","optSwipeDuration","styColumns","styFrame","clsParent","cls","CommonElement","_parseOption","item","obj","rawText","rawValue","rawChildren","text","value","children","opt","_isExplicitColumns","c","first","_resolveColumns","col","options","di","resolved","guard","_getSelectedValues","i","v","_getSelectedOptions","_getSelectedIndexes","_valuesEqual","a","b","_syncValue","values","old","_applyValue","newIndexes","target","onSelect","columnIndex","optionIndex","nextIndexes","onConfirm","onCancel","__expose","_unref","_hoisted_2","_renderSlot","_ctx","colItem","_createBlock","ClPickerColumn","$event","_hoisted_4","_createVNode","ClLoad","_hoisted_5","_hoisted_6"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";const e=require("vue"),r=require("./base-C2QOJBgB.js"),S=require("./index-DAgtltwJ.js"),v=["id"],y={key:6,class:"fenceScrollX-cover"},B=e.defineComponent({name:"ClScrollXFence",__name:"Index",props:{id:String,className:String,isShowLeft:{type:Boolean,default:!0},isShowRight:{type:Boolean,default:!0},isShowCorner:{type:Boolean,default:!1},isShowCover:{type:Boolean,default:!1},cornerType:{type:String,default:""},leftWidth:{type:String,default:"0"},centerWidth:{type:String,default:"0"},rightWidth:{type:String,default:"0"},initLeft:String},emits:["onScrollX"],setup(o,{expose:s,emit:a}){const n=o,m=a,f=n.id,l=e.ref(null),u=e.computed(()=>{let t={"panel-fenceScrollX":!0};return n.isShowCorner&&r.CommonBase.isNonEmptyString(n.cornerType)&&(t[`fenceScrollX-showCorner-${n.cornerType}`]=!0),r.CommonBase.osType().isMobile&&(t["fenceScrollX-mob"]=!0),t=r.CommonBase.getJsonMerge(t,S.CommonElement.getClassNameJson(n.className)),t}),d=e.computed(()=>{const t={"fenceScrollX-corner":!0};return r.CommonBase.isNonEmptyString(n.cornerType)&&(t[`fenceScrollX-corner-${n.cornerType}`]=!0),t}),c=t=>{m("onScrollX",t)};return e.onMounted(()=>{e.nextTick(()=>{if(l.value){if(r.CommonBase.isNonEmptyString(n.initLeft)){const t=parseInt(n.initLeft,10);r.CommonBase.isFinite(t)&&(l.value.scrollLeft=t)}l.value.addEventListener("scroll",c)}})}),e.onBeforeUnmount(()=>{l.value&&l.value.removeEventListener("scroll",c)}),e.onActivated(()=>{l.value&&l.value.addEventListener("scroll",c)}),e.onDeactivated(()=>{l.value&&l.value.removeEventListener("scroll",c)}),s({setScrollLeft:t=>{l.value&&r.CommonBase.isFinite(t)&&(l.value.scrollLeft=t)}}),(t,i)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(f),class:e.normalizeClass(u.value)},[o.isShowLeft?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fenceScrollX-left",style:e.normalizeStyle({width:o.leftWidth})},[...i[0]||(i[0]=[e.createElementVNode("div",null,null,-1)])],4)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[],64)),e.createElementVNode("div",{class:"fenceScrollX-center",ref_key:"refElScrollX",ref:l},[e.createElementVNode("div",{style:e.normalizeStyle({width:o.centerWidth})},null,4)],512),o.isShowRight?(e.openBlock(),e.createElementBlock("div",{key:2,class:"fenceScrollX-right",style:e.normalizeStyle({width:o.rightWidth})},[...i[1]||(i[1]=[e.createElementVNode("div",null,null,-1)])],4)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[],64)),o.isShowCorner?(e.openBlock(),e.createElementBlock("div",{key:4,class:e.normalizeClass(d.value)},null,2)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:5},[],64)),o.isShowCover?(e.openBlock(),e.createElementBlock("div",y)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[],64))],10,v))}});exports._sfc_main=B;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js","sources":["../../../src/libs/Web/ScrollxFence/Index.vue"],"sourcesContent":["<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-if=\"isShowLeft\"\n class=\"fenceScrollX-left\"\n :style=\"{ width: leftWidth }\"\n >\n <div></div>\n </div>\n <template v-else></template>\n <div\n class=\"fenceScrollX-center\"\n ref=\"refElScrollX\"\n >\n <div :style=\"{ width: centerWidth }\"></div>\n </div>\n <div\n v-if=\"isShowRight\"\n class=\"fenceScrollX-right\"\n :style=\"{ width: rightWidth }\"\n >\n <div></div>\n </div>\n <template v-else></template>\n <div\n v-if=\"isShowCorner\"\n :class=\"clsCorner\"\n ></div>\n <template v-else></template>\n <div\n v-if=\"isShowCover\"\n class=\"fenceScrollX-cover\"\n ></div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n computed,\n ref,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport './Index.css';\n\ndefineOptions({ name: 'ClScrollXFence' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n isShowLeft: {\n type: Boolean,\n default: true, // desc: 是否显示左侧装饰区\n },\n isShowRight: {\n type: Boolean,\n default: true, // desc: 是否显示右侧装饰区\n },\n isShowCorner: {\n type: Boolean,\n default: false, // desc: 是否显示角落区域\n },\n isShowCover: {\n type: Boolean,\n default: false, // desc: 是否显示覆盖层\n },\n cornerType: {\n type: String,\n default: '', // desc: 角落类型 | enum: right-top, right-bottom (可自定义)\n },\n leftWidth: {\n type: String,\n default: '0', // desc: 左侧装饰区宽度\n },\n centerWidth: {\n type: String,\n default: '0', // desc: 中间滚动区宽度\n },\n rightWidth: {\n type: String,\n default: '0', // desc: 右侧装饰区宽度\n },\n initLeft: String, // desc: 初始滚动位置(像素值字符串)\n});\n\nconst emit = defineEmits<{\n (e: 'onScrollX', event: Event): void; // desc: 横向滚动事件\n}>();\n\nconst elId = props.id; // || `scrollxfence-${CommonBase.getRandom(5)}`\n\nconst refElScrollX = ref<HTMLElement | null>(null);\n\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-fenceScrollX': true,\n };\n if (props.isShowCorner && CommonBase.isNonEmptyString(props.cornerType)) {\n cls[`fenceScrollX-showCorner-${props.cornerType}`] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['fenceScrollX-mob'] = true;\n }\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst clsCorner = computed(() => {\n const cls: Record<string, boolean> = {\n 'fenceScrollX-corner': true,\n };\n if (CommonBase.isNonEmptyString(props.cornerType)) {\n cls[`fenceScrollX-corner-${props.cornerType}`] = true;\n }\n return cls;\n});\n\nconst _onScrollX = (e: Event) => {\n emit('onScrollX', e);\n};\n\nonMounted(() => {\n nextTick(() => {\n if (refElScrollX.value) {\n if (CommonBase.isNonEmptyString(props.initLeft)) {\n const leftVal = parseInt(props.initLeft, 10);\n if (CommonBase.isFinite(leftVal)) {\n refElScrollX.value.scrollLeft = leftVal;\n }\n }\n refElScrollX.value.addEventListener('scroll', _onScrollX);\n }\n });\n});\n\nonBeforeUnmount(() => {\n if (refElScrollX.value) {\n refElScrollX.value.removeEventListener('scroll', _onScrollX);\n }\n});\n\nonActivated(() => {\n if (refElScrollX.value) {\n refElScrollX.value.addEventListener('scroll', _onScrollX);\n }\n});\n\nonDeactivated(() => {\n if (refElScrollX.value) {\n refElScrollX.value.removeEventListener('scroll', _onScrollX);\n }\n});\n\nconst setScrollLeft = (left: number) => {\n if (refElScrollX.value && CommonBase.isFinite(left)) {\n refElScrollX.value.scrollLeft = left;\n }\n};\n\nexport interface ClScrollXFenceExpose {\n setScrollLeft: (left: number) => void;\n}\n\ndefineExpose({\n setScrollLeft,\n});\n</script>\n"],"names":["props","__props","emit","__emit","elId","refElScrollX","ref","clsParent","computed","cls","CommonBase","CommonElement","clsCorner","_onScrollX","e","onMounted","nextTick","leftVal","onBeforeUnmount","onActivated","onDeactivated","__expose","left","_createElementBlock","_unref","_createElementVNode","_Fragment","_openBlock","_hoisted_2"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";const e=require("vue"),V=require("vue-virtual-scroller"),S=require("./base-C2QOJBgB.js"),W=require("./index-DAgtltwJ.js"),A=require("./Index.vue_vue_type_script_setup_true_lang-Dvy5B6_y.js");;/* empty css */const X=["id"],Z={class:"ptr-track"},ee={class:"ptr-text"},te={key:0,class:"ptr-scroller-wrap"},ne={key:0,class:"ptr-loadmore"},le={key:2,class:"ptr-finished"},oe=e.defineComponent({name:"ClPullToRefresh",__name:"Index",props:{id:String,className:String,disabled:Boolean,threshold:{type:Number,default:60},list:Array,minItemSize:{type:Number,default:60},keyField:{type:String,default:"id"},isFinished:Boolean,isLoading:Boolean,pullIcon:{type:String,default:"ptr-icon-arrow"},pullingText:{type:String,default:"下拉即可刷新..."},readyText:{type:String,default:"释放即可刷新..."},refreshingText:{type:String,default:"加载中..."},loadingText:{type:String,default:"加载中..."},finishedText:{type:String,default:"没有更多了"},sizeDependencies:{type:Function}},emits:["onRefresh","onLoadMore"],setup(r,{expose:P,emit:q}){const n=r,_=q,$=n.id,k=e.ref(null),o=e.ref("idle"),d=e.ref(0),E=e.ref(0),s=e.ref(!1),a=e.ref(!1),h=e.ref(0);let i=null,f=0,g=0,T=0,m=null;const p=e.computed(()=>{const t=n.threshold;return S.CommonBase.isFinite(t)&&typeof t=="number"?Math.max(1,t):60}),c=e.computed(()=>S.CommonBase.isArray(n.list)),H=e.computed(()=>c.value?n.list.filter(t=>t!=null):[]),R=e.computed(()=>{const t=n.minItemSize;return S.CommonBase.isFinite(t)&&typeof t=="number"?Math.max(1,t):60}),Y=e.computed(()=>{switch(o.value){case"loading":return n.refreshingText;case"ready":return n.readyText;case"pulling":return n.pullingText;default:return""}}),J=e.computed(()=>{let t={"panel-pulltorefresh":!0};return n.disabled&&(t["ptr-disabled"]=!0),a.value&&(t["ptr-is-pulling"]=!0),t=S.CommonBase.getJsonMerge(t,W.CommonElement.getClassNameJson(n.className)),t}),U=e.computed(()=>({height:`${d.value}px`})),j=e.computed(()=>s.value&&a.value?{touchAction:"none"}:{}),x=t=>Math.min(t*.4,p.value*2),G=()=>{if(c.value)return h.value<=1;const t=k.value;return t?t.scrollTop<=1:!0},z=t=>{if("touches"in t){const l=t.touches;return l.length>0?l[0].clientY:0}return t.clientY},C=(t=>N(t)),D=(t=>y(t)),K=()=>{document.addEventListener("mousemove",C),document.addEventListener("mouseup",D)},b=()=>{document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",D)},u=()=>{i!==null&&(cancelAnimationFrame(i),i=null),f=0,a.value=!1,d.value=0,o.value="idle"},O=t=>{if(n.sizeDependencies)try{return n.sizeDependencies(t)}catch{return}},Q=()=>{const t=Date.now();t-g<500||!n.isFinished&&!n.isLoading&&(g=t,_("onLoadMore"))},w=()=>{if(!c.value||n.isFinished||n.isLoading)return;const t=Date.now();if(t-T<100){m===null&&(m=window.setTimeout(()=>{m=null,w()},100));return}const l=k.value?.querySelector(".ptr-scroller");l&&(h.value=l.scrollTop||0,!(l.clientHeight<=0)&&l.scrollHeight<=l.clientHeight&&(T=t,g=t,_("onLoadMore")))},v=()=>{b(),i!==null&&(cancelAnimationFrame(i),i=null),s.value=!1};e.onBeforeUnmount(()=>{v(),m!==null&&(clearTimeout(m),m=null)}),e.onDeactivated(()=>{v(),o.value!=="loading"&&u()}),e.watch(()=>n.disabled,t=>{t&&(v(),o.value!=="loading"&&u())}),e.watch(()=>c.value,t=>{t&&(h.value=0)}),e.watch(()=>[n.list,n.list?.length],async()=>{c.value&&(await e.nextTick(),w())},{immediate:!0});const L=t=>{n.disabled||o.value==="loading"||!("touches"in t)&&t.button!==0||(s.value&&(v(),u()),E.value=z(t),s.value=!0,"touches"in t||K())},N=t=>{if(!(!s.value||n.disabled)){if(!("touches"in t)&&t.buttons===0){y();return}f=z(t)-E.value,f>0&&G()?(a.value=!0,t.preventDefault(),i===null&&(i=requestAnimationFrame(()=>{i=null;const l=x(f);d.value=l,o.value=l>=p.value?"ready":"pulling"}))):a.value&&u()}},y=t=>{if(s.value){if(s.value=!1,b(),t?.type==="touchcancel"){u();return}if(i!==null){cancelAnimationFrame(i),i=null;const l=x(f);l>=0&&(d.value=l,o.value=l>=p.value?"ready":"pulling")}n.disabled||!(a.value&&o.value==="ready")?u():(o.value="loading",d.value=p.value,a.value=!1,_("onRefresh"))}},F=t=>{const l=t.target;h.value=l?.scrollTop||0,l&&l.scrollTop+l.clientHeight>=l.scrollHeight&&Q()};return P({finishRefresh:()=>{v(),u(),g=0,T=0}}),(t,l)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref($),class:e.normalizeClass(J.value)},[e.createElementVNode("div",Z,[e.createElementVNode("div",{class:"ptr-indicator",style:e.normalizeStyle(U.value),role:"status","aria-live":"polite"},[e.createElementVNode("div",{class:e.normalizeClass(["ptr-indicator-inner",`ptr-state-${o.value}`])},[e.renderSlot(t.$slots,"indicator",{state:o.value,distance:d.value,threshold:p.value},()=>[o.value==="loading"?(e.openBlock(),e.createBlock(A._sfc_main,{key:0,theme:"circleSpinner",size:"small",color:"#999",className:"ptr-indicator-load"})):(e.openBlock(),e.createElementBlock("i",{key:1,class:e.normalizeClass(r.pullIcon),"aria-hidden":"true"},null,2)),e.createElementVNode("span",ee,e.toDisplayString(Y.value),1)])],2)],4),e.createElementVNode("div",{ref_key:"refElContent",ref:k,class:e.normalizeClass(["ptr-content",{"ptr-content-virtual":c.value}]),style:e.normalizeStyle(j.value),onScroll:F,onTouchstart:L,onTouchmove:N,onTouchend:y,onTouchcancel:y,onMousedown:L},[c.value?(e.openBlock(),e.createElementBlock("div",te,[e.createVNode(e.unref(V.DynamicScroller),{class:"ptr-scroller",items:H.value,"min-item-size":R.value,"key-field":r.keyField,onScroll:F},{default:e.withCtx(({item:B,index:M,active:I})=>[e.createVNode(e.unref(V.DynamicScrollerItem),{item:B,index:M,active:I,"size-dependencies":O(B)},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"item",{item:B,index:M,active:I})]),_:2},1032,["item","index","active","size-dependencies"])]),after:e.withCtx(()=>[r.isLoading?(e.openBlock(),e.createElementBlock("div",ne,[e.renderSlot(t.$slots,"loadMore",{},()=>[e.createVNode(A._sfc_main,{theme:"circleSpinner",size:"small",color:"#999",className:"ptr-loadmore-load"}),e.createElementVNode("span",null,e.toDisplayString(r.loadingText),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[],64)),r.isFinished&&!r.isLoading?(e.openBlock(),e.createElementBlock("div",le,[e.renderSlot(t.$slots,"finished",{},()=>[e.createElementVNode("span",null,e.toDisplayString(r.finishedText),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[],64))]),_:3},8,["items","min-item-size","key-field"])])):e.renderSlot(t.$slots,"default",{key:1})],38)])],10,X))}});exports._sfc_main=oe;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map
|