@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js","sources":["../../../src/libs/Element/Form/Rules.ts","../../../src/libs/Element/Form/Validate.vue","../../../src/libs/Web/SelectCascade/Index.vue"],"sourcesContent":["import CommonBase from \"../../Common/base\";\nconst defaultRules = {\n required: (value: string) => !CommonBase.isEmpty(value),\n number: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i).test(newValue);\n }\n return check;\n },\n integer: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?\\d+$/).test(newValue);\n }\n return check;\n },\n integerPositive: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^[1-9]\\d*$/).test(newValue);\n }\n return check;\n },\n alphanum: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^\\w+$/i).test(value);\n }\n return check;\n },\n email: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^((([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i).test(value);\n }\n return check;\n },\n minLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length >= parseInt(len, 10);\n }\n return check;\n },\n maxLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length <= parseInt(len, 10);\n }\n return check;\n },\n minByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) >= parseInt(len, 10);\n }\n return check;\n },\n maxByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) <= parseInt(len, 10);\n }\n return check;\n },\n minGreater: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) > parseFloat(min);\n }\n return check;\n },\n maxGreater: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) < parseFloat(max);\n }\n return check;\n },\n minGreaterEqual: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) >= parseFloat(min);\n }\n return check;\n },\n maxGreaterEqual: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) <= parseFloat(max);\n }\n return check;\n },\n phone: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^1\\d{10}$/).test(value);\n }\n return check;\n },\n equalto: (value: string, compareValue: string) => {\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(compareValue)) {\n return value === compareValue;\n }\n return true;\n },\n regular: (value: string, strReg: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(strReg)) {\n const reg = new RegExp(strReg, \"g\");\n check = reg.test(value);\n }\n return check;\n },\n urlHttp: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^(http|https):\\/\\/[^\\s]+$/).test(value);\n }\n return check;\n },\n};\nexport default (options: any = {}) => {\n return {\n type: CommonBase.isEmpty(options.type) ? \"tip\" : options.type,\n rules: CommonBase.getJsonMerge(defaultRules, options.rules),\n messages: CommonBase.getJsonMergeDeep({}, options.messages),\n };\n};","<template>\n <div\n ref=\"refElTop\"\n :class=\"clsParent\"\n v-bind=\"optParent\"\n >\n <slot></slot>\n <div\n ref=\"refElMsg\"\n v-if=\"optBase.msgHtml.length > 0 && isShowMsg\"\n :class=\"clsErr\"\n role=\"alert\"\n >\n <cl-icon-font\n v-if=\"optBase.type === 'tip'\"\n :name=\"'exclamation-circle-fill'\"\n class=\"error-tip-el\"\n role=\"img\"\n :aria-label=\"optAriaLabel\"\n v-cltooltip=\"optBase.msgHtml\"\n ></cl-icon-font>\n <span\n v-else-if=\"optBase.type === 'text'\"\n class=\"error-text-el\"\n >{{ optBase.msgHtml }}</span\n >\n <template v-else></template>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n nextTick,\n toRaw,\n inject,\n watch,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport useLanguage from '../../Use/language';\nimport validateRules from './Rules';\nimport ClIconFont from '../IconFont/Index.vue';\n\n// defineOptions\ndefineOptions({\n name: 'ClFormValidate',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n checkValue: [String, Number], // desc: 需要校验的值\n rules: {\n type: Array, // desc: 校验规则数组,支持字符串或对象形式。字符串 'rule|param'(如 'required|必填');对象 {r: 规则名, p: 参数, m: 自定义消息, isCheck: 是否启用}\n default: () => [],\n },\n isCheck: {\n type: Boolean, // desc: 是否开启校验(false 时不执行校验);校验时机由外部调用 runValidate 触发(cl-form 容器提交时自动调用)\n default: true,\n },\n msgElementId: String, // desc: 错误消息挂载目标元素选择器(不传时展示在当前组件内部)\n msgType: {\n type: String, // desc: 错误消息展示类型 | enum: tip, text\n validator: (val: string) => ['tip', 'text'].includes(val),\n },\n pElError: String, // desc: 错误元素父级定位选择器(仅供 Form 容器错误定位消费,独立直用时无效果)\n isShowMsg: {\n type: Boolean, // desc: 是否展示错误消息(默认展示;显式传 false 仅红框不显示文案,msgElementId 迁移同样不生效)\n default: true,\n },\n});\n\n// slots: default\n\n// 常量 / 变量定义\nconst { optPageLanguage, getPageLanguage, getLanguageType } = useLanguage();\ngetPageLanguage('validate');\n\n// $ClGlobals 全局配置注入(含 validate 校验规则表);标准安装(installCore)已注册 Rules.ts 实例,\n// 外部覆盖注入时按注入优先;未注册场景(独立安装不走 installCore)由 _getValidateGlobals 回退兜底\ntype RuleFunc = (value: string, param?: string) => boolean;\ninterface ClGlobals {\n validate?: {\n type?: string;\n rules?: Record<string, RuleFunc>;\n messages?: Record<string, string>;\n };\n}\ntype ValidateGlobals = NonNullable<ClGlobals['validate']>;\n// 规则项:字符串(规则名)或对象({r, p, m, isCheck});isCheck 兼容布尔与字符串 'false'/'0'\ntype RuleItem = string | { r: string; p?: string; m?: string; isCheck?: boolean | string };\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst refElTop = ref<HTMLElement | null>(null);\nconst refElMsg = ref<HTMLElement | null>(null);\n\nconst optBase = reactive({\n type: '',\n msgHtml: '',\n check: 0,\n});\n\nconst _pageElement: { form: HTMLFormElement | null } = {\n form: null,\n};\n\nconst _pageData: {\n rules: Record<string, string>;\n messages: Record<string, string>;\n} = {\n rules: {},\n messages: {},\n};\n\n// 校验规则表统一入口:优先取全局注入 $ClGlobals.validate,缺失时回退组件内置默认规则表(Rules.ts)\n// 返回类型收口为非空:函数内所有路径都已赋值(内置或注入),null 仅作缓存未初始化哨兵\nlet _validateGlobal: ValidateGlobals | null = null;\nconst _getValidateGlobals = (): ValidateGlobals => {\n if (CommonBase.isUndefined(_validateGlobal)) {\n // 内置默认表(缺失字段的兜底来源)\n const def = validateRules();\n const injected = _clGlobals?.validate;\n if (injected) {\n if (CommonBase.isEmpty(injected.rules) && CommonBase.isEmpty(injected.messages)) {\n // 规则/消息全缺:整体回退内置,但保留注入的 type(仅注入主题类型的配置不失效)\n _validateGlobal = CommonBase.isNonEmptyString(injected.type)\n ? { ...def, type: injected.type }\n : def;\n console.warn(\n '[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则',\n );\n } else {\n // 部分字段缺失时字段级兜底:缺什么补什么(如注入 rules 缺 messages → 内置消息表仍参与合并,错误文案不退化显示规则名)\n _validateGlobal = {\n ...def,\n ...injected,\n type: injected.type ?? def.type,\n rules: injected.rules ?? def.rules,\n messages: injected.messages ?? def.messages,\n };\n }\n } else {\n _validateGlobal = def;\n console.warn(\n '[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则',\n );\n }\n }\n return _validateGlobal as ValidateGlobals;\n};\n\n// computed\nconst optParent = computed(() => {\n const temp: Record<string, string> = {\n 'data-validate-el': '',\n };\n if (props.isCheck) {\n switch (optBase.check) {\n case 1:\n temp['data-validate-success'] = '';\n break;\n case 2:\n temp['data-validate-error'] = '';\n break;\n default:\n break;\n }\n // A11y:校验失败对读屏可感知(显式 'true'/'false' 保证成功→失败切换时播报状态变化)\n temp['aria-invalid'] = optBase.check === 2 ? 'true' : 'false';\n }\n return temp;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {};\n if (props.isCheck) {\n clsTemp['panel-validate-element'] = true;\n }\n return CommonBase.getJsonMerge(clsTemp, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsErr = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-validate-errors': true,\n };\n cls[`validate-errors-${optBase.type}`] = true;\n return cls;\n});\n\n// tip 模式图标的无障碍标注(去掉消息 HTML 标签后的纯文本,读屏可读)\n// 逐条 div 结构去标签后以空格分隔,防多条消息粘连成 msg1msg2\nconst optAriaLabel = computed(() => optBase.msgHtml.replace(/<[^>]*>/g, ' ').trim());\n\n// 内部调用方法\nconst _initRules = (options: RuleItem[]) => {\n if (!CommonBase.isArray(options)) {\n console.warn('[cl-form-validate] rules 应为数组,已忽略');\n return;\n }\n const rules: Record<string, string> = {};\n const messages: Record<string, string> = {};\n options.forEach((info: RuleItem) => {\n // typeof 内联判断(RuleItem 联合类型靠字面判断收窄)\n if (typeof info === 'string') {\n if (!CommonBase.isEmpty(info)) {\n if (CommonBase.isExistValue(info, '|')) {\n const tempR = info.split('|');\n rules[tempR[0]] = tempR[1];\n if (tempR.length > 2) {\n console.warn(\n '[cl-form-validate] 字符串规则 \"' +\n info +\n '\" 含多个参数段,仅取前两段,建议改用对象形式',\n );\n }\n } else {\n rules[info] = '';\n }\n }\n } else if (typeof info === 'object' && !CommonBase.isUndefined(info)) {\n // isCheck 支持布尔与字符串 'false'/'0'(与容器 data-validate-check-* 的 'false' 约定一致)\n let isCheckOne = true;\n if (CommonBase.isBoolean(info.isCheck)) {\n isCheckOne = info.isCheck === true;\n } else if (info.isCheck === 'false' || info.isCheck === '0') {\n isCheckOne = false;\n }\n if (!CommonBase.isEmpty(info.r) && isCheckOne) {\n rules[info.r] = info.p ?? '';\n if (!CommonBase.isEmpty(info.m)) {\n messages[info.r] = info.m ?? '';\n }\n }\n }\n });\n _pageData.rules = rules;\n _pageData.messages = messages;\n};\n\nconst _mergeRules = () => {\n const cancel: string[] = [];\n const param: Record<string, string> = {};\n const message: Record<string, string> = {};\n if (refElTop.value && !CommonBase.isEmpty(refElTop.value.dataset)) {\n Object.keys(refElTop.value.dataset).forEach(key => {\n if (key.indexOf('validate') === 0) {\n // dataset 键还原为 validate-{check|param|message}-{规则名};规则名小写归一,兼容驼峰规则名(如 data-validate-param-minLen)\n const tempKey = key.replace(/[A-Z]/g, str => `-${str.toLowerCase()}`);\n const arrKey = tempKey.split('-');\n if (arrKey.length === 3) {\n const name = arrKey[2].toLowerCase();\n const value: any = refElTop.value!.dataset[key];\n switch (arrKey[1]) {\n case 'check':\n if (!CommonBase.isEmpty(value) && value.toLowerCase() === 'false') {\n cancel.push(name);\n }\n break;\n case 'param':\n param[name] = value;\n break;\n case 'message':\n message[name] = value;\n break;\n default:\n break;\n }\n }\n }\n });\n }\n\n if (!CommonBase.isEmpty(_pageData.rules)) {\n if (!CommonBase.isEmpty(cancel) || !CommonBase.isEmpty(param)) {\n const newRules: any = {};\n for (const [r, p] of Object.entries(_pageData.rules)) {\n const rKey = r.toLowerCase();\n if (!CommonBase.isExistValue(cancel, rKey)) {\n newRules[r] = CommonBase.isExistJsonKey(param, rKey) ? param[rKey] : p;\n }\n }\n _pageData.rules = newRules;\n }\n }\n if (!CommonBase.isEmpty(_pageData.messages)) {\n if (!CommonBase.isEmpty(message)) {\n const newMessages: any = {};\n for (const [r, m] of Object.entries(_pageData.messages)) {\n const rKey = r.toLowerCase();\n newMessages[r] = CommonBase.isExistJsonKey(message, rKey) ? message[rKey] : m;\n }\n _pageData.messages = newMessages;\n }\n }\n};\n\nconst _getErrData = (value: string | number | undefined) => {\n const errData: Record<string, string> = {};\n // 规则表可选字段(注入可能缺 rules),缺失时按空表处理(isExistJsonKey 对空表返回 false → 走未注册警告分支)\n const totalRules = _getValidateGlobals().rules ?? {};\n if (!CommonBase.isEmpty(_pageData.rules)) {\n // NaN 视为空值(数字类型非空但无实际值),避免 trim(NaN) 产出 'NaN' 被 required 误判通过\n const isEmpty =\n CommonBase.isEmpty(value) ||\n (CommonBase.getTypeof(value) === 'number' && CommonBase.isNaN(value));\n const newValue = isEmpty ? '' : CommonBase.trim(value);\n for (const [r, p] of Object.entries(_pageData.rules)) {\n if (CommonBase.isExistJsonKey(totalRules, r) && CommonBase.isFunction(totalRules[r])) {\n let check = true;\n if (r === 'required') {\n check = totalRules.required(newValue);\n } else {\n if (!isEmpty) {\n check = totalRules[r](newValue, p);\n }\n }\n if (!check) {\n errData[r] = p;\n }\n } else {\n console.warn('[cl-form-validate] 校验规则 \"' + r + '\" 未注册或非函数,已跳过');\n }\n }\n }\n return errData;\n};\n\nconst _getTotalMessages = () => {\n // 不缓存:语言包运行时可切换(Language.setType),每次合并保证消息跟随当前语言\n // optPageLanguage 是 setup 一次性快照,运行时切换语言后不更新——现取刷新后再合并\n getPageLanguage('validate');\n const lang = toRaw(optPageLanguage.value);\n // messages 可选字段(注入可能缺失),缺失时按空表合并(回退页语言包或内置消息)\n const vMsg = toRaw(_getValidateGlobals().messages ?? {});\n const langTypeInfo = getLanguageType();\n const msg =\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.type) ||\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.def)\n ? CommonBase.getJsonMerge({}, vMsg[langTypeInfo.def] || {}, vMsg[langTypeInfo.type] || {})\n : vMsg;\n return CommonBase.getJsonMerge({}, lang, msg);\n};\n\nconst _getErrMsg = (errData: Record<string, string>) => {\n const totalMessages = _getTotalMessages();\n const msg: string[] = [];\n Object.keys(errData).forEach(r => {\n let rMsg = '';\n // 自定义消息优先于全局消息;rMsg 可能来自外部配置(非字符串类型跳过,避免 %s 判断抛错)\n if (CommonBase.isNonEmptyString(_pageData.messages[r])) {\n rMsg = _pageData.messages[r];\n } else if (CommonBase.isNonEmptyString(totalMessages[r])) {\n rMsg = totalMessages[r];\n }\n if (!CommonBase.isEmpty(rMsg)) {\n const p = errData[r];\n // p 为空时去掉占位段,避免渲染残缺文案;多占位一并替换\n const temp = CommonBase.isExistValue(rMsg, '%s')\n ? rMsg.replace(/%s/g, CommonBase.isNonEmptyString(p) ? p : '')\n : rMsg;\n msg.push(temp);\n }\n });\n return msg;\n};\n\nconst _getForm = () => {\n // form 被 v-if 重建(detached)后缓存失效,重新查找\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(null/undefined 均跳过,语义等价)\n if (_pageElement.form && !_pageElement.form.isConnected) {\n _pageElement.form = null;\n }\n if (CommonBase.isUndefined(_pageElement.form) && refElTop.value) {\n _pageElement.form = CommonElement.getParent(refElTop.value, 'form');\n }\n return _pageElement.form;\n};\n\nconst _setThemeType = () => {\n _getForm();\n let type = _getValidateGlobals().type;\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(语义等价)\n if (_pageElement.form && !CommonBase.isEmpty(_pageElement.form.dataset.theme)) {\n type = _pageElement.form.dataset.theme;\n }\n if (CommonBase.isNonEmptyString(props.msgType)) {\n type = props.msgType;\n }\n // msgType 封闭枚举兜底:非 tip/text 一律回退 tip,保证错误消息可渲染、不误标成功\n if (type !== 'tip' && type !== 'text') {\n type = 'tip';\n }\n optBase.type = type;\n};\n\nconst _checkRun = () => {\n let isRun = true;\n _getForm();\n // 运行态契约:容器 form 带 data-cl-validate 属性(cl-form 渲染的显式标记)时,显式挂 data-run 才执行校验\n // (与 Form 运行态 optBase.isRun → data-run 对应);无 form 容器(SelectCascade 等独立使用)与原生 form\n // (含任意 data-* 属性)均默认校验——是否校验由 isCheck 门控,无容器场景保持设计意图(传了校验 props 即要校验)\n if (!CommonBase.isUndefined(_pageElement.form) && _pageElement.form) {\n if (!CommonBase.isUndefined(_pageElement.form.dataset.clValidate)) {\n isRun = !CommonBase.isUndefined(_pageElement.form.dataset.run);\n }\n }\n return isRun;\n};\n\nconst _setMsg = (msg: string) => {\n // 入参统一收口为字符串,防外部传入数字/对象污染 msgHtml(模板 length 判断失效)\n const newMsg = CommonBase.isNonEmptyString(msg) ? msg : '';\n if (CommonBase.isEmpty(newMsg)) {\n optBase.msgHtml = '';\n optBase.check = 1;\n } else {\n optBase.msgHtml = newMsg;\n optBase.check = 2;\n if (CommonBase.isNonEmptyString(props.msgElementId)) {\n // 多实例共用同一 msgElementId 时,后校验失败的实例会将节点移动到目标末尾(appendChild 移动语义)\n // 属约定行为,建议每个校验组件使用独立 msgElementId,避免串扰\n try {\n const msgEl: any = window.document.querySelector(props.msgElementId);\n if (msgEl) {\n nextTick(() => {\n // 同步查询时刻存在但回调时可能已被外部移除(detached)——降级展示在组件内部并提示\n if (refElMsg.value && msgEl.isConnected) {\n msgEl.appendChild(refElMsg.value);\n } else if (refElMsg.value) {\n console.warn(\n '[cl-form-validate] msgElementId 目标已脱离文档:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n });\n } else {\n console.warn(\n '[cl-form-validate] 未找到 msgElementId 目标元素:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n } catch (err) {\n console.warn('[cl-form-validate] msgElementId 选择器无效:' + props.msgElementId);\n }\n }\n }\n};\n\n// 复位到初始未校验态(与「校验成功」区分:reset 后不残留 data-validate-success 标记)\nconst _resetMsg = () => {\n optBase.msgHtml = '';\n optBase.check = 0;\n};\n\n// 按 msgType 组装错误消息文本(tip 逐条 div 换行 / text 逗号拼接)\nconst _formatErrMsg = (msgList: string[], type: string) => {\n let msg = '';\n if (!CommonBase.isEmpty(msgList)) {\n switch (type) {\n case 'tip':\n msg = msgList.map(info => `<div>${info}</div>`).join('');\n break;\n case 'text':\n msg = msgList.join(',');\n break;\n default:\n break;\n }\n }\n return msg;\n};\n\nconst _validate = () => {\n let result = true;\n try {\n if (props.isCheck && _checkRun()) {\n _setThemeType();\n _mergeRules();\n const errData = _getErrData(props.checkValue);\n result = CommonBase.isEmpty(errData);\n if (result) {\n _setMsg('');\n } else {\n let msg = _formatErrMsg(_getErrMsg(errData), optBase.type);\n // 校验失败但消息表无对应文案时,兜底输出规则名,避免误标成功\n if (CommonBase.isEmpty(msg)) {\n const firstRule = Object.keys(errData)[0];\n msg = CommonBase.isNonEmptyString(firstRule) ? firstRule : '校验未通过';\n }\n _setMsg(msg);\n }\n } else {\n // 未运行校验:复位到未校验态,不残留成功标记\n _resetMsg();\n }\n } catch (err) {\n console.warn('[cl-form-validate] 校验执行异常,已按未通过处理');\n // 异常按未通过处理时同步复位标记,避免残留上一次的成功视觉态与返回结果矛盾\n _resetMsg();\n result = false;\n }\n return result;\n};\n\n// 挂载在元素上的校验方法链(与 Form 容器 _validateEl 消费契约一致:Index.vue 经 el.runValidate() 取结果)\ninterface ValidateHost extends HTMLElement {\n pElError?: string;\n runValidate?: () => boolean;\n runErrMsg?: (msg: string) => void;\n runReset?: () => void;\n}\n\nconst _initMain = () => {\n // props.rules 未泛型化(defineProps type: Array → unknown[]),断言为 RuleItem[] 传入\n _initRules((props.rules as RuleItem[]) || []);\n _getForm();\n if (refElTop.value) {\n const hostEl = refElTop.value as ValidateHost;\n hostEl.pElError = props.pElError;\n hostEl.runValidate = _validate;\n // DOM 挂载版复用 expose 版方法:带 _setThemeType 同步主题类型,与外部调用 runErrMsg/runReset 行为一致\n hostEl.runErrMsg = runErrMsg;\n hostEl.runReset = runReset;\n }\n};\n\n// 生命周期\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nonBeforeUnmount(() => {\n // msgElementId 迁移到外部节点的错误消息已脱离组件 DOM 树,Vue 卸载不会清理——手动移除防残留\n refElMsg.value?.remove();\n});\n\n// watch\n// checkValue 变化只重新校验(规则表已初始化,重建纯属浪费)\nwatch(\n () => props.checkValue,\n () => {\n _validate();\n },\n);\n\n// rules / isCheck 变化才重建规则表并重新校验(isCheck 关闭时 _validate 走复位分支)\nwatch(\n [() => props.rules, () => props.isCheck],\n ([newRules]: [unknown[], boolean]) => {\n _initRules((newRules as RuleItem[]) || []);\n _validate();\n },\n { deep: true },\n);\n\n// 开放给外部使用的方法\nconst runValidate = () => {\n // 返回值与 DOM 挂载版 _validate 对齐(Index.vue _validateEl 消费 boolean 判定表单整体结果)\n return _validate();\n};\n\n// 空串 = 标记校验成功态(check=1 + data-validate-success);非空 = 失败态。\n// 需要复位到「未校验」态请用 runReset(check=0,无成功/失败标记)\nconst runErrMsg = (msg: string) => {\n _setThemeType();\n _setMsg(msg);\n};\n\nconst runReset = () => {\n _setThemeType();\n _resetMsg();\n};\n\n// 导出类型定义\nexport interface ClFormValidateExpose {\n runValidate: () => boolean;\n runErrMsg: (msg: string) => void;\n runReset: () => void;\n}\n\n// defineExpose\ndefineExpose({\n runValidate,\n runErrMsg,\n runReset,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-for=\"(item, inx) in optData\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"selectCascade-item\"\n :style=\"item.sty\"\n >\n <cl-form-validate\n :isShowMsg=\"isShowInMsg\"\n :isCheck=\"isCheckValidate\"\n :checkValue=\"item.selected\"\n :rules=\"validateRules\"\n >\n <cl-select\n :isClear=\"isClear\"\n :isSearch=\"isSearch\"\n :placeholder=\"item.placeholder\"\n :list=\"item.list\"\n :disabled=\"disabled\"\n v-model:value=\"item.selected\"\n :onOpenBefore=\"onCheckOpen\"\n @onChange=\"onChangeItem($event, inx)\"\n />\n </cl-form-validate>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, onMounted, nextTick, reactive, ref, computed } from 'vue';\nimport type { PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport useLanguage from '../../Use/language';\nimport ClFormValidate from '../../Element/Form/Validate.vue';\nimport ClSelect from '../Select/Index.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClSelectCascade' });\n\nconst props = defineProps({\n id: String, // desc: 自定义元素ID\n value: [String, Number], // desc: 选中的值\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [], // desc: 级联数据列表\n },\n placeholder: String, // desc: 各层级占位符,多个用 | 分隔\n isClear: {\n type: Boolean,\n default: false, // desc: 是否可清空\n },\n isSearch: {\n type: Boolean,\n default: false, // desc: 是否可搜索\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级键名字段\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父值\n },\n width: String, // desc: 各层级下拉宽度,多个用 | 分隔,需带单位(px/%)\n\n isCheckValidate: {\n type: Boolean,\n default: false, // desc: 是否启用校验\n },\n validateRules: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [{ r: 'required' }], // desc: 校验规则\n },\n isShowInMsg: {\n type: Boolean,\n default: true, // desc: 校验信息是否在消息中显示\n },\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 值变化时触发\n onChange: (_value: string | number) => true, // desc: 选中变化时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `selectCascade-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `selectCascade-${CommonBase.getRandom(8)}`\n\ninterface SelectCascadeItem {\n idx: number;\n pId: string;\n placeholder: string;\n list: Record<string, any>[];\n sty: Record<string, string>;\n selected: string;\n}\ninterface SelectCascadePageData {\n dataJson: Record<string, any>;\n dataGroup: Record<string, any[]>;\n parentIdsJson: Record<string, string[]>;\n}\n\nconst optBase = reactive({\n lastValue: props.value,\n isFirstDataFinish: false,\n});\nconst optData = ref<SelectCascadeItem[]>([]);\nconst _pageData: SelectCascadePageData = {\n dataJson: {},\n dataGroup: {},\n parentIdsJson: {},\n};\n\nconst optDefPlaceholder = computed(() => optPageLanguage.value.pleaseSelect);\n\nconst optPlaceholderList = computed(() => {\n const { placeholder } = props;\n const list: string[] = CommonBase.isNonEmptyString(placeholder) ? placeholder.split('|') : [];\n return list;\n});\nconst optWidthList = computed(() => {\n const { width } = props;\n const list: string[] = CommonBase.isNonEmptyString(width) ? width.split('|') : [];\n return list;\n});\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-selectCascade': true };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst _emitChange = (value: string | number) => {\n if (value !== optBase.lastValue) {\n optBase.lastValue = value;\n emit('update:value', value);\n emit('onChange', value);\n }\n};\n\nconst _checkIsChildren = (id: string) => {\n return CommonBase.isExistJsonKey(_pageData.dataGroup, id);\n};\nconst _getDataGroup = (id: string) => {\n return _checkIsChildren(id) ? _pageData.dataGroup[id] : [];\n};\nconst _getDataInfo = (id: string): Record<string, any> | null => {\n return CommonBase.isExistJsonKey(_pageData.dataJson, id) ? _pageData.dataJson[id] : null;\n};\nconst _getTopParentValue = () => {\n return `top_${props.topParentValue}`;\n};\nconst _convertData = (list: Record<string, any>[]) => {\n const { parentKey, topParentValue } = props;\n const json: Record<string, any> = {};\n const group: Record<string, any[]> = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: Record<string, any>) => {\n const newInfo = CommonBase.getJsonClone(info);\n if (\n !CommonBase.isExistJsonKey(newInfo, 'id') ||\n !CommonBase.isExistJsonKey(newInfo, parentKey)\n ) {\n return;\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n const pIdKey = pId === topParentValue.toString() ? _getTopParentValue() : pId;\n if (!CommonBase.isExistJsonKey(group, pIdKey)) {\n group[pIdKey] = [];\n }\n group[pIdKey].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n};\nconst _convertTreeItemData = (idx: number, pId: string): SelectCascadeItem => {\n const json: SelectCascadeItem = {\n idx,\n pId,\n placeholder: optDefPlaceholder.value,\n list: [],\n sty: {},\n selected: '',\n };\n if (!CommonBase.isEmpty(pId)) {\n const groupList = _getDataGroup(pId);\n json.list = CommonBase.getListClone(groupList);\n }\n const placeholderList = optPlaceholderList.value;\n const placeholderLen = placeholderList.length;\n if (placeholderLen > 0) {\n if (placeholderLen > idx) {\n json.placeholder = !CommonBase.isEmpty(placeholderList[idx])\n ? placeholderList[idx]\n : optDefPlaceholder.value;\n } else {\n if (placeholderLen === 1) {\n json.placeholder = placeholderList[0];\n }\n }\n }\n const widthList = optWidthList.value;\n if (widthList.length > idx) {\n if (!CommonBase.isEmpty(widthList[idx])) {\n json.sty.width = widthList[idx];\n json.sty.flex = 'none';\n }\n }\n return json;\n};\nconst _getRecursionParentIds = (id: string, visited?: string[]): string[] => {\n const { parentKey, topParentValue } = props;\n let arr: string[] = [];\n if (visited && visited.indexOf(id) > -1) {\n return [];\n }\n const visitList = visited ? visited.concat([id]) : [id];\n if (CommonBase.isExistJsonKey(_pageData.parentIdsJson, id)) {\n arr = _pageData.parentIdsJson[id];\n } else {\n const info = _getDataInfo(id);\n if (info !== undefined && info !== null) {\n const pId = info[parentKey].toString();\n if (pId !== topParentValue.toString()) {\n const pInfo = _getDataInfo(pId);\n if (pInfo !== undefined && pInfo !== null) {\n arr.push(pId);\n const tempIds: string[] = _getRecursionParentIds(pId, visitList);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n }\n }\n }\n _pageData.parentIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _initData = (value?: string | number) => {\n let newValue: string | number | undefined = CommonBase.isUndefined(value) ? props.value : value;\n if (\n newValue !== undefined &&\n newValue !== null &&\n !CommonBase.isEmpty(newValue) &&\n !CommonBase.isExistJsonKey(_pageData.dataJson, newValue.toString())\n ) {\n newValue = '';\n }\n const list: SelectCascadeItem[] = [];\n if (newValue === undefined || newValue === null || CommonBase.isEmpty(newValue)) {\n list.push(_convertTreeItemData(0, _getTopParentValue()));\n list.push(_convertTreeItemData(1, ''));\n } else {\n const valueStr = newValue.toString();\n const arrPIds = [..._getRecursionParentIds(valueStr)].reverse();\n const arrPIdLen = arrPIds.length;\n if (arrPIdLen > 0) {\n arrPIds.forEach((pId: string, i: number) => {\n const newPid = i === 0 ? _getTopParentValue() : pId;\n const infoItem = _convertTreeItemData(i, newPid);\n infoItem.selected = pId;\n list.push(infoItem);\n });\n const lastItem = _convertTreeItemData(arrPIdLen, arrPIds[arrPIdLen - 1]);\n lastItem.selected = valueStr;\n list.push(lastItem);\n } else {\n const firstItem = _convertTreeItemData(0, _getTopParentValue());\n firstItem.selected = valueStr;\n list.push(firstItem);\n }\n }\n optData.value = list;\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n _initData();\n optBase.isFirstDataFinish = true;\n optBase.lastValue = props.value;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== optBase.lastValue) {\n if (optBase.isFirstDataFinish) {\n _initData();\n optBase.lastValue = newValue;\n }\n }\n },\n);\n\nwatch(\n () => props.list,\n newList => {\n if (!optBase.isFirstDataFinish) {\n optBase.isFirstDataFinish = true;\n return;\n }\n _pageData.parentIdsJson = {};\n _convertData(newList);\n\n const { value } = props;\n const selectValue =\n value !== undefined &&\n value !== null &&\n !CommonBase.isEmpty(value) &&\n CommonBase.isExistJsonKey(_pageData.dataJson, value.toString())\n ? value\n : '';\n _initData(selectValue);\n optBase.lastValue = selectValue;\n },\n);\n\nconst onCheckOpen = () => {\n return true;\n};\n\nconst onChangeItem = (value: string | number, inx: number) => {\n let outValue: string | number = '';\n if (CommonBase.isEmpty(value) && inx === 0) {\n _initData('');\n } else if (CommonBase.isEmpty(value)) {\n optData.value.splice(inx + 1);\n if (inx > 0) {\n const parentItem = optData.value[inx - 1];\n if (parentItem) {\n outValue = parentItem.selected;\n }\n }\n } else {\n const valueStr = value.toString();\n if (_checkIsChildren(valueStr)) {\n optData.value.splice(inx + 1);\n optData.value.push(_convertTreeItemData(inx + 1, valueStr));\n } else {\n outValue = value;\n optData.value.splice(inx + 1);\n }\n }\n _emitChange(outValue);\n};\n\nconst getValue = () => {\n return optBase.lastValue;\n};\nconst getValueData = () => {\n const value = optBase.lastValue;\n let show = '';\n if (value !== undefined && value !== null && !CommonBase.isEmpty(value)) {\n const v = value.toString();\n const ids = _getRecursionParentIds(v);\n const chain = ids.length > 0 ? ids.slice().reverse().concat([v]) : [v];\n const names: string[] = [];\n chain.forEach((id) => {\n const info = _pageData.dataJson[id];\n if (info !== undefined && info !== null && !CommonBase.isEmpty(info.name)) {\n names.push(info.name);\n }\n });\n show = names.join(' → ');\n }\n return {\n value,\n show: show || (value !== undefined && value !== null ? value.toString() : ''),\n };\n};\nconst setValue = (value: string | number) => {\n _initData(value);\n optBase.lastValue = value;\n};\n\nexport interface ClSelectCascadeExpose {\n getValue: () => string | number | undefined;\n getValueData: () => { value: string | number | undefined; show: string };\n setValue: (value: string | number) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["defaultRules","value","CommonBase","check","newValue","len","min","max","compareValue","strReg","validateRules","options","props","__props","optPageLanguage","getPageLanguage","getLanguageType","useLanguage","_clGlobals","inject","refElTop","ref","refElMsg","optBase","reactive","_pageElement","_pageData","_validateGlobal","_getValidateGlobals","def","injected","optParent","computed","temp","clsParent","clsTemp","CommonElement","clsErr","cls","optAriaLabel","_initRules","rules","messages","info","tempR","isCheckOne","_mergeRules","cancel","param","message","key","arrKey","str","name","newRules","r","p","rKey","newMessages","m","_getErrData","errData","totalRules","isEmpty","_getTotalMessages","lang","toRaw","vMsg","langTypeInfo","msg","_getErrMsg","totalMessages","rMsg","_getForm","_setThemeType","type","_checkRun","isRun","_setMsg","newMsg","msgEl","nextTick","_resetMsg","_formatErrMsg","msgList","_validate","result","firstRule","_initMain","hostEl","runErrMsg","runReset","onMounted","onBeforeUnmount","watch","runValidate","__expose","_openBlock","_createElementBlock","_mergeProps","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_hoisted_1","_toDisplayString","_Fragment","emit","__emit","_keyIndex","elId","optData","optDefPlaceholder","optPlaceholderList","placeholder","optWidthList","width","_emitChange","_checkIsChildren","id","_getDataGroup","_getDataInfo","_getTopParentValue","_convertData","list","parentKey","topParentValue","json","group","newInfo","pId","pIdKey","_convertTreeItemData","idx","groupList","placeholderList","placeholderLen","widthList","_getRecursionParentIds","visited","arr","visitList","pInfo","tempIds","_initData","valueStr","arrPIds","arrPIdLen","i","newPid","infoItem","lastItem","firstItem","newList","selectValue","onCheckOpen","onChangeItem","inx","outValue","parentItem","show","v","ids","chain","names","_unref","_renderList","item","_normalizeStyle","_createVNode","ClFormValidate","ClSelect","$event"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js","sources":["../../../src/libs/Element/LazyImage/lazy.ts","../../../src/libs/Element/LazyImage/use.ts","../../../src/libs/Element/Image/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\nimport { LazyOptionInfo } from './interfaceItem';\nconst defOption = {\n loading:\n 'data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==',\n error:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABbFJREFUaEPtWV1sFFUUPufOLmjpD7G0nXtm11igD0Q0CpqImsiDEcGoIVEReeBBNGgkEQSjwUR4MQZ/MBr/MeFFFIkxYAR9MGr84cFijBJ9UFPD7r3TqtWWLsVuO3PM3ew20+3uzizTxpDsTSa7e+ec75zvnPtz7l2E87zhee4/NAj83xlsZKCRgZgRaAyhmAGMrV4zA5lM5sJEItGcz+dbhBDN5gGAZkRsQcTCd/Mwc0vpu+k3v5l5yHGcDUEPtdY7AeAsIp4t/5yYmCj0myefz//LzGfNY/p7enrGqjGtSEAp9ZgQYgsz07mGiJk3OY7zVklfKbULEZ88FzxE1L7vv+Q4ztPl+tMIZLPZFUKIb87FUFBHCLHQtu2+Up/WmuNi+r5/bSqVOh7EmUZAa70VAJ6PYwwRJ6SUyRKG67odzPxHHMyi7jYi2luTgOu6O5h5T1xjiLhDSvlsIAOfAcDKOLiI+KiU8pmwDGwGgFfjGCrqDhLRgkAWHmTml2PiPkBEr4URuAcA3o5pqKR+PxG9aX7M0DDaQEQHahJQSt2KiEdmiMA7RGQCUmha61jDiJlvcxznw7A5cAMzfz4TBHzfvzGVSn1qsDKZzErLsgyBac0skwBwwvf9HCKuBoD5VeRWSim/CMvAMkQ8MQME+ohoYZToE9HkapjNZq9AxFcQcUW5D8y83HGc72oSyGQyiy3L+qUeAsx8yMgj4p0BvZ1E9FRY9Jl5t+M4u4L2tNaPA0BBN9g8z+tJp9O/1iTQ39/f6fv+QB0ExoQQS4aGhv5qa2s7zsyXGl0hRJdt24W1P2TsbyWiF4L2lFL3IuK+ch+CmKV30zYyU/9YljVaB4EDRFSoeUrj3CwCUsrbw6JftPE9EV1ZloFhAGitkIGmdDpt6qjJVrEWcl03z8yTO2kImTuI6P2STDabfUQIsYqIbjJ91aJZhjkCANuZeSkArEbExeU2EXFcSjlnWn8l55RSg4h4UVgWELHPtu1FiDilzlFKmaxsNEa11ksA4KcwrLD3zPy34zjtkQhorU0RdkkYqJloRGRK5ClNKXUxIposFDax8kIOEfczcxsArI1goyTyOxF1RyKglPoBES+LAH4VEVVccrXWa4nogyKBXgBYXnR8DxH9XOz/EgCuj2AHmPlHx3Euj0RAa/0VAFwXAvw1EdU03tfXN7+7u3tIa73X87zD6XR6ygaZzWavEUJMKY9r2Kxor9okPsrMZkes1TYT0etRoldLxnXdF5l5SxgOIh6TUq6JlAGl1EFEvKsWqO/7C1Kp1GCY4bD3zDzHdd2TANBTS5aZ33McZ10kAlprM/k2VQNExENSypoEwxwPvndddyMz7w/R2UdE90UlYE5k5mRWsVWqCutxuJKs1tqUyetr4Owlom2RCLiuu4uZqx3A/yGi0D2iXkKnTp1amkgkTKVZERsRd0spp9RMxkbFSVzcTSePg2XOFNbjwcFBs9W35vP5Vs/z2oQQrYjY6vt+4dOs86ZI01o/AQA5Zs5ZljUyMTGRE0KMmN/JZHJkdHQ019TUNNLZ2ZmrVTP5vr89lUo9FykDWmsz1t6oN4pBeSHE+vHx8cN11lW1TE6e7oJCFTPQ39+/zvf9d+MQYOZlxc2rsBvHbUKIu23bPhgpA67rrmHmj2IY/bNYihiMWDcRJR8Q8RYp5dFIBAYGBhZ5njfl4FAvGSnlBUqph4QQ1eZSXZCWZS3u6ur6LRIBI6S1/hgAVkW0wsx8GhFPA8AIIuYA4OTw8PDDLS0txxBxXukutXiPOi8ibknsEyK6uZJO1ctds8qMjY2Zc+nVAFBwzjjJzCOJRCKXz+fPJJNJ46h5zti2fSaqU729vcmOjo5my7LmBS6MDSlzcdzseV7w8vjbuXPnHm9vbzfBmdYa/w9EjfpsyTUyMFuRjYrbyEDUSM2WXCMDsxXZqLjnfQb+A8eWU0/QfZYsAAAAAElFTkSuQmCC',\n attr: {\n timeOutId: 'data-lazy-timeout-id',\n },\n isCrossOrigin: false,\n};\nclass Lazy {\n public options: LazyOptionInfo = {\n loading: defOption.loading,\n error: defOption.error,\n observerOptions: {\n rootMargin: '0px',\n threshold: 0,\n },\n log: false,\n callback: {},\n };\n private _images = new WeakMap();\n constructor(options?: LazyOptionInfo) {\n this.config(options);\n }\n public config(options = {}): void {\n this.options = CommonBase.getJsonMergeDeep(this.options, options);\n }\n private _initValue(value: any, el: any) {\n let src = '';\n let loading = this.options.loading;\n let error = this.options.error;\n let callback = this.options.callback;\n let delay = this.options.delay;\n if (CommonBase.isObject(value)) {\n src = value.src;\n loading = !CommonBase.isUndefined(value.loading) ? value.loading : this.options.loading;\n error = !CommonBase.isUndefined(value.error) ? value.error : this.options.error;\n callback = !CommonBase.isUndefined(value.callback) ? value.callback : this.options.callback;\n delay = !CommonBase.isUndefined(value.delay) ? value.delay : this.options.delay;\n } else if (CommonBase.isString(value)) {\n src = value;\n } else if (CommonBase.isUndefined(value)) {\n src = (el && el.src) || '';\n }\n return {\n src,\n loading,\n error,\n callback,\n delay,\n };\n }\n public mount(el: HTMLElement, binding: any): void {\n if (CommonBase.isUndefined(el)) return;\n const value = CommonBase.isString(binding) ? binding : binding.value;\n const { src, loading, error, callback, delay } = this._initValue(value, el);\n this._setCallback(el, 'loading', callback);\n el.setAttribute('src', loading || defOption.loading);\n if (!this._checkIntersectionObserver()) {\n this._setImageSrc(el, src, error, callback);\n this._log(() => {\n throw new Error('Not support IntersectionObserver!');\n });\n return;\n }\n this._initIntersectionObserver(el, src, error, callback, delay);\n }\n public update(el: HTMLElement, binding: any): void {\n if (CommonBase.isUndefined(el)) return;\n this._realObserver(el)?.unobserve(el);\n if (el.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(el.getAttribute(defOption.attr.timeOutId)));\n el.removeAttribute(defOption.attr.timeOutId);\n }\n const value = CommonBase.isString(binding) ? binding : binding.value;\n const { src, error, callback, delay } = this._initValue(value, el);\n this._initIntersectionObserver(el, src, error, callback, delay);\n }\n public unmount(el: HTMLElement): void {\n if (CommonBase.isUndefined(el)) return;\n this._realObserver(el)?.unobserve(el);\n if (el.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(el.getAttribute(defOption.attr.timeOutId)));\n el.removeAttribute(defOption.attr.timeOutId);\n }\n // 清理 img 回调,防止卸载后 onload/onerror 仍触发\n if (el.tagName.toLowerCase() === 'img') {\n const img = el as HTMLImageElement;\n img.onload = null;\n img.onerror = null;\n }\n this._images.delete(el);\n }\n\n private _setImageSrc(el: HTMLElement, src: string, error?: string, callback?: any): void {\n if (el.tagName.toLowerCase() === 'img') {\n const elImage = el as HTMLImageElement;\n if (CommonBase.isEmpty(src)) {\n elImage.onload = null;\n this._setCallback(elImage, 'error', callback);\n this._realObserver(elImage)?.disconnect();\n if (error) {\n elImage.setAttribute('src', error);\n } else {\n elImage.removeAttribute('src');\n }\n } else {\n if (this.options.isCrossOrigin) {\n elImage.crossOrigin = 'Anonymous';\n }\n if (src) {\n const preSrc = elImage.getAttribute('src');\n if (preSrc !== src) elImage.setAttribute('src', src);\n }\n elImage.onload = () => {\n if (src) {\n this._setCallback(elImage, 'loaded', callback);\n }\n };\n elImage.onerror = () => {\n // Fix onload trigger twice, clear onload event\n // Reload on update\n elImage.onload = null;\n this._setCallback(elImage, 'error', callback);\n this._realObserver(elImage)?.disconnect();\n if (error) {\n const newImageSrc = elImage.getAttribute('src');\n if (newImageSrc !== error) elImage.setAttribute('src', error);\n }\n this._log(() => {\n throw new Error(`Image failed to load!And failed src was: ${src} `);\n });\n };\n }\n } else {\n el.style.backgroundImage = `url('${src}')`;\n }\n }\n private _setCallback(\n el: HTMLElement,\n type: 'loading' | 'loaded' | 'error',\n callback?: LazyOptionInfo['callback'],\n ): void {\n el?.setAttribute('lazy', type);\n switch (type) {\n case 'loading':\n if (callback?.loading) callback.loading(el);\n break;\n case 'loaded':\n if (callback?.loaded) callback.loaded(el);\n break;\n case 'error':\n if (callback?.error) callback.error(el);\n break;\n default:\n break;\n }\n }\n private _realObserver(el: HTMLElement) {\n return this._images.get(el);\n }\n private _checkIntersectionObserver(): boolean {\n const inBrowser = typeof window !== 'undefined' && window !== null;\n if (\n inBrowser &&\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype\n ) {\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n try {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get() {\n return this.intersectionRatio > 0;\n },\n });\n } catch (e) {\n // CSP 限制或原型冻结时降级:调用方自行用 intersectionRatio > 0 判断\n return false;\n }\n }\n return true;\n }\n return false;\n }\n private _initIntersectionObserver(\n el: HTMLElement,\n src: string,\n error?: string,\n callback?: any,\n delay?: number,\n ): void {\n const observerOptions = this.options.observerOptions;\n this._images.set(\n el,\n new IntersectionObserver(entries => {\n Array.prototype.forEach.call(entries, entry => {\n if (delay && delay > 0)\n this._delayedIntersectionCallback(el, entry, delay, src, error, callback);\n else this._intersectionCallback(el, entry, src, error, callback);\n });\n }, observerOptions),\n );\n this._realObserver(el)?.observe(el);\n }\n private _intersectionCallback(\n el: HTMLElement,\n entry: IntersectionObserverEntry,\n src: string,\n error?: string,\n callback?: any,\n ): void {\n if (entry.isIntersecting) {\n this._realObserver(el)?.unobserve(entry.target);\n this._setImageSrc(el, src, error, callback);\n }\n }\n\n private _delayedIntersectionCallback(\n el: HTMLElement,\n entry: IntersectionObserverEntry,\n delay: number,\n src: string,\n error?: string,\n callback?: any,\n ): void {\n if (entry.isIntersecting) {\n if (entry.target.hasAttribute(defOption.attr.timeOutId)) return;\n\n const timeoutId = setTimeout(() => {\n this._intersectionCallback(el, entry, src, error, callback);\n entry.target.removeAttribute(defOption.attr.timeOutId);\n }, delay);\n entry.target.setAttribute(defOption.attr.timeOutId, String(timeoutId));\n } else {\n if (entry.target.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(entry.target.getAttribute(defOption.attr.timeOutId)));\n entry.target.removeAttribute(defOption.attr.timeOutId);\n }\n }\n }\n private _log(callback: () => void): void {\n if (this.options.log) callback();\n }\n}\nexport default Lazy;\n","import { onMounted, onUnmounted, nextTick, watch, Ref } from 'vue';\nimport Lazy from './lazy';\nimport { LazyOptionInfo } from './interfaceItem';\n\nexport const useLazyload = (\n refEl: Ref<HTMLElement | null>,\n src: Ref<string>,\n options?: LazyOptionInfo,\n) => {\n const lazy = new Lazy(options);\n onMounted(() => {\n nextTick(() => {\n if (refEl.value) {\n lazy.mount(refEl.value, src);\n }\n });\n });\n onUnmounted(() => {\n if (refEl.value) {\n lazy.unmount(refEl.value);\n }\n });\n watch(src, (newVal: string) => {\n if (refEl.value) {\n lazy.update(refEl.value, newVal);\n }\n });\n};\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n :style=\"styParent\"\n >\n <img\n ref=\"refElImage\"\n :alt=\"optAlt\"\n :style=\"styImg\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { useLazyload } from '../LazyImage/use';\nimport './Index.css';\n\n// defineOptions\ndefineOptions({\n name: 'ClImage',\n});\n\n// props\nconst props = defineProps<{\n id?: string; // desc: 自定义id\n className?: string; // desc: 自定义CSS类名\n src: string; // desc: 图片地址\n alt?: string; // desc: 图片替代文本\n height?: string; // desc: 图片高度\n width?: string; // desc: 图片宽度\n isCircle?: boolean; // desc: 是否圆形展示\n fit?: string; // desc: 图片填充方式 | enum: fill, contain, cover, none, scale-down(可自定义)\n isCrossOrigin?: boolean; // desc: 是否跨域加载\n}>();\n\n// emit\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 图片加载完成时触发(成功或失败均触发)\n}>();\n\n// 常量 / 变量定义\nconst optSrcUrl = ref(CommonBase.isNonEmptyString(props.src) ? props.src : '');\nconst refElImage = ref<HTMLImageElement | null>(null);\n\nconst optAlt = computed(() => (CommonBase.isNonEmptyString(props.alt) ? props.alt : ''));\n\n// elId _elId_image\nconst elId = props.id; // || `_elId_image_${CommonBase.getRandom(5)}`;\n\nuseLazyload(refElImage, optSrcUrl, {\n callback: {\n loaded: () => {\n _emitInit();\n },\n error: () => {\n _emitInit();\n },\n },\n isCrossOrigin: props.isCrossOrigin,\n});\n\n// computed\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-imageBox': true,\n 'imageBox-circle': props.isCircle,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styParent = computed(() => {\n const { width, height } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n return sty;\n});\n\nconst styImg = computed(() => {\n const { width, height, fit } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(fit)) {\n sty['object-fit'] = fit;\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n }\n return sty;\n});\n\n// emit包装\nfunction _emitInit() {\n emit('onInit');\n}\n\n// watch\nwatch(\n () => props.src,\n newValue => {\n optSrcUrl.value = CommonBase.isNonEmptyString(newValue) ? newValue : '';\n },\n);\n</script>\n"],"names":["defOption","Lazy","options","CommonBase","value","el","src","loading","error","callback","delay","binding","img","elImage","type","observerOptions","entries","entry","timeoutId","useLazyload","refEl","lazy","onMounted","nextTick","onUnmounted","watch","newVal","props","__props","emit","__emit","optSrcUrl","ref","refElImage","optAlt","computed","elId","_emitInit","clsParent","cls","CommonElement","styParent","width","height","sty","styImg","fit","newValue","_createElementBlock","_unref","_createElementVNode"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("vue"),e=require("./base-C2QOJBgB.js"),q=require("./index-DAgtltwJ.js"),z=require("./language-DNQZvFJT.js"),U=require("./index-BJq1_knk.js"),H=require("./Index.vue_vue_type_script_setup_true_lang-g88DiQYZ.js"),W=require("./Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js"),Z={required:s=>!e.CommonBase.isEmpty(s),number:s=>{let i=!0;if(!e.CommonBase.isEmpty(s)){const l=e.CommonBase.removeReplace(s);i=/^-?(\d*\.)?\d+(e[-+]?\d+)?$/i.test(l)}return i},integer:s=>{let i=!0;if(!e.CommonBase.isEmpty(s)){const l=e.CommonBase.removeReplace(s);i=/^-?\d+$/.test(l)}return i},integerPositive:s=>{let i=!0;if(!e.CommonBase.isEmpty(s)){const l=e.CommonBase.removeReplace(s);i=/^[1-9]\d*$/.test(l)}return i},alphanum:s=>{let i=!0;return e.CommonBase.isEmpty(s)||(i=/^\w+$/i.test(s)),i},email:s=>{let i=!0;return e.CommonBase.isEmpty(s)||(i=/^((([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&"\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(s)),i},minLen:(s,i)=>{let l=!0;return e.CommonBase.isEmpty(s)||(l=s.length>=parseInt(i,10)),l},maxLen:(s,i)=>{let l=!0;return e.CommonBase.isEmpty(s)||(l=s.length<=parseInt(i,10)),l},minByte:(s,i)=>{let l=!0;return e.CommonBase.isEmpty(s)||(l=e.CommonBase.getByteLen(s)>=parseInt(i,10)),l},maxByte:(s,i)=>{let l=!0;return e.CommonBase.isEmpty(s)||(l=e.CommonBase.getByteLen(s)<=parseInt(i,10)),l},minGreater:(s,i)=>{let l=!0;if(!e.CommonBase.isEmpty(s)){const y=e.CommonBase.removeReplace(s);l=parseFloat(y)>parseFloat(i)}return l},maxGreater:(s,i)=>{let l=!0;if(!e.CommonBase.isEmpty(s)){const y=e.CommonBase.removeReplace(s);l=parseFloat(y)<parseFloat(i)}return l},minGreaterEqual:(s,i)=>{let l=!0;if(!e.CommonBase.isEmpty(s)){const y=e.CommonBase.removeReplace(s);l=parseFloat(y)>=parseFloat(i)}return l},maxGreaterEqual:(s,i)=>{let l=!0;if(!e.CommonBase.isEmpty(s)){const y=e.CommonBase.removeReplace(s);l=parseFloat(y)<=parseFloat(i)}return l},phone:s=>{let i=!0;return e.CommonBase.isEmpty(s)||(i=/^1\d{10}$/.test(s)),i},equalto:(s,i)=>!e.CommonBase.isEmpty(s)&&!e.CommonBase.isEmpty(i)?s===i:!0,regular:(s,i)=>{let l=!0;return!e.CommonBase.isEmpty(s)&&!e.CommonBase.isEmpty(i)&&(l=new RegExp(i,"g").test(s)),l},urlHttp:s=>{let i=!0;return e.CommonBase.isEmpty(s)||(i=/^(http|https):\/\/[^\s]+$/.test(s)),i}},Q=(s={})=>({type:e.CommonBase.isEmpty(s.type)?"tip":s.type,rules:e.CommonBase.getJsonMerge(Z,s.rules),messages:e.CommonBase.getJsonMergeDeep({},s.messages)}),X={key:1,class:"error-text-el"},O=r.defineComponent({name:"ClFormValidate",directives:{cltooltip:U.tooltipDirectives},__name:"Validate",props:{className:String,checkValue:[String,Number],rules:{type:Array,default:()=>[]},isCheck:{type:Boolean,default:!0},msgElementId:String,msgType:{type:String,validator:s=>["tip","text"].includes(s)},pElError:String,isShowMsg:{type:Boolean,default:!0}},setup(s,{expose:i}){const l=s,{optPageLanguage:y,getPageLanguage:w,getLanguageType:$}=z.useLanguage();w("validate");const K=r.inject("$ClGlobals",null),B=r.ref(null),_=r.ref(null),d=r.reactive({type:"",msgHtml:"",check:0}),F={form:null},f={rules:{},messages:{}};let v=null;const S=()=>{if(e.CommonBase.isUndefined(v)){const t=Q(),a=K?.validate;a?e.CommonBase.isEmpty(a.rules)&&e.CommonBase.isEmpty(a.messages)?(v=e.CommonBase.isNonEmptyString(a.type)?{...t,type:a.type}:t,console.warn("[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则")):v={...t,...a,type:a.type??t.type,rules:a.rules??t.rules,messages:a.messages??t.messages}:(v=t,console.warn("[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则"))}return v},N=r.computed(()=>{const t={"data-validate-el":""};if(l.isCheck){switch(d.check){case 1:t["data-validate-success"]="";break;case 2:t["data-validate-error"]="";break}t["aria-invalid"]=d.check===2?"true":"false"}return t}),P=r.computed(()=>{const t={};return l.isCheck&&(t["panel-validate-element"]=!0),e.CommonBase.getJsonMerge(t,q.CommonElement.getClassNameJson(l.className))}),A=r.computed(()=>{const t={"panel-validate-errors":!0};return t[`validate-errors-${d.type}`]=!0,t}),J=r.computed(()=>d.msgHtml.replace(/<[^>]*>/g," ").trim()),M=t=>{if(!e.CommonBase.isArray(t)){console.warn("[cl-form-validate] rules 应为数组,已忽略");return}const a={},m={};t.forEach(n=>{if(typeof n=="string"){if(!e.CommonBase.isEmpty(n))if(e.CommonBase.isExistValue(n,"|")){const u=n.split("|");a[u[0]]=u[1],u.length>2&&console.warn('[cl-form-validate] 字符串规则 "'+n+'" 含多个参数段,仅取前两段,建议改用对象形式')}else a[n]=""}else if(typeof n=="object"&&!e.CommonBase.isUndefined(n)){let u=!0;e.CommonBase.isBoolean(n.isCheck)?u=n.isCheck===!0:(n.isCheck==="false"||n.isCheck==="0")&&(u=!1),!e.CommonBase.isEmpty(n.r)&&u&&(a[n.r]=n.p??"",e.CommonBase.isEmpty(n.m)||(m[n.r]=n.m??""))}}),f.rules=a,f.messages=m},L=()=>{const t=[],a={},m={};if(B.value&&!e.CommonBase.isEmpty(B.value.dataset)&&Object.keys(B.value.dataset).forEach(n=>{if(n.indexOf("validate")===0){const g=n.replace(/[A-Z]/g,C=>`-${C.toLowerCase()}`).split("-");if(g.length===3){const C=g[2].toLowerCase(),h=B.value.dataset[n];switch(g[1]){case"check":!e.CommonBase.isEmpty(h)&&h.toLowerCase()==="false"&&t.push(C);break;case"param":a[C]=h;break;case"message":m[C]=h;break}}}}),!e.CommonBase.isEmpty(f.rules)&&(!e.CommonBase.isEmpty(t)||!e.CommonBase.isEmpty(a))){const n={};for(const[u,g]of Object.entries(f.rules)){const C=u.toLowerCase();e.CommonBase.isExistValue(t,C)||(n[u]=e.CommonBase.isExistJsonKey(a,C)?a[C]:g)}f.rules=n}if(!e.CommonBase.isEmpty(f.messages)&&!e.CommonBase.isEmpty(m)){const n={};for(const[u,g]of Object.entries(f.messages)){const C=u.toLowerCase();n[u]=e.CommonBase.isExistJsonKey(m,C)?m[C]:g}f.messages=n}},D=t=>{const a={},m=S().rules??{};if(!e.CommonBase.isEmpty(f.rules)){const n=e.CommonBase.isEmpty(t)||e.CommonBase.getTypeof(t)==="number"&&e.CommonBase.isNaN(t),u=n?"":e.CommonBase.trim(t);for(const[g,C]of Object.entries(f.rules))if(e.CommonBase.isExistJsonKey(m,g)&&e.CommonBase.isFunction(m[g])){let h=!0;g==="required"?h=m.required(u):n||(h=m[g](u,C)),h||(a[g]=C)}else console.warn('[cl-form-validate] 校验规则 "'+g+'" 未注册或非函数,已跳过')}return a},R=()=>{w("validate");const t=r.toRaw(y.value),a=r.toRaw(S().messages??{}),m=$(),n=e.CommonBase.isExistJsonKey(a,m.type)||e.CommonBase.isExistJsonKey(a,m.def)?e.CommonBase.getJsonMerge({},a[m.def]||{},a[m.type]||{}):a;return e.CommonBase.getJsonMerge({},t,n)},k=t=>{const a=R(),m=[];return Object.keys(t).forEach(n=>{let u="";if(e.CommonBase.isNonEmptyString(f.messages[n])?u=f.messages[n]:e.CommonBase.isNonEmptyString(a[n])&&(u=a[n]),!e.CommonBase.isEmpty(u)){const g=t[n],C=e.CommonBase.isExistValue(u,"%s")?u.replace(/%s/g,e.CommonBase.isNonEmptyString(g)?g:""):u;m.push(C)}}),m},x=()=>(F.form&&!F.form.isConnected&&(F.form=null),e.CommonBase.isUndefined(F.form)&&B.value&&(F.form=q.CommonElement.getParent(B.value,"form")),F.form),E=()=>{x();let t=S().type;F.form&&!e.CommonBase.isEmpty(F.form.dataset.theme)&&(t=F.form.dataset.theme),e.CommonBase.isNonEmptyString(l.msgType)&&(t=l.msgType),t!=="tip"&&t!=="text"&&(t="tip"),d.type=t},T=()=>{let t=!0;return x(),!e.CommonBase.isUndefined(F.form)&&F.form&&(e.CommonBase.isUndefined(F.form.dataset.clValidate)||(t=!e.CommonBase.isUndefined(F.form.dataset.run))),t},V=t=>{const a=e.CommonBase.isNonEmptyString(t)?t:"";if(e.CommonBase.isEmpty(a))d.msgHtml="",d.check=1;else if(d.msgHtml=a,d.check=2,e.CommonBase.isNonEmptyString(l.msgElementId))try{const m=window.document.querySelector(l.msgElementId);m?r.nextTick(()=>{_.value&&m.isConnected?m.appendChild(_.value):_.value&&console.warn("[cl-form-validate] msgElementId 目标已脱离文档:"+l.msgElementId+",消息展示在组件内部")}):console.warn("[cl-form-validate] 未找到 msgElementId 目标元素:"+l.msgElementId+",消息展示在组件内部")}catch{console.warn("[cl-form-validate] msgElementId 选择器无效:"+l.msgElementId)}},I=()=>{d.msgHtml="",d.check=0},G=(t,a)=>{let m="";if(!e.CommonBase.isEmpty(t))switch(a){case"tip":m=t.map(n=>`<div>${n}</div>`).join("");break;case"text":m=t.join(",");break}return m},b=()=>{let t=!0;try{if(l.isCheck&&T()){E(),L();const a=D(l.checkValue);if(t=e.CommonBase.isEmpty(a),t)V("");else{let m=G(k(a),d.type);if(e.CommonBase.isEmpty(m)){const n=Object.keys(a)[0];m=e.CommonBase.isNonEmptyString(n)?n:"校验未通过"}V(m)}}else I()}catch{console.warn("[cl-form-validate] 校验执行异常,已按未通过处理"),I(),t=!1}return t},j=()=>{if(M(l.rules||[]),x(),B.value){const t=B.value;t.pElError=l.pElError,t.runValidate=b,t.runErrMsg=c,t.runReset=p}};r.onMounted(()=>{r.nextTick(()=>{j()})}),r.onBeforeUnmount(()=>{_.value?.remove()}),r.watch(()=>l.checkValue,()=>{b()}),r.watch([()=>l.rules,()=>l.isCheck],([t])=>{M(t||[]),b()},{deep:!0});const o=()=>b(),c=t=>{E(),V(t)},p=()=>{E(),I()};return i({runValidate:o,runErrMsg:c,runReset:p}),(t,a)=>{const m=r.resolveDirective("cltooltip");return r.openBlock(),r.createElementBlock("div",r.mergeProps({ref_key:"refElTop",ref:B,class:P.value},N.value),[r.renderSlot(t.$slots,"default"),d.msgHtml.length>0&&s.isShowMsg?(r.openBlock(),r.createElementBlock("div",{key:0,ref_key:"refElMsg",ref:_,class:r.normalizeClass(A.value),role:"alert"},[d.type==="tip"?r.withDirectives((r.openBlock(),r.createBlock(H._sfc_main,{key:0,name:"exclamation-circle-fill",class:"error-tip-el",role:"img","aria-label":J.value},null,8,["aria-label"])),[[m,d.msgHtml]]):d.type==="text"?(r.openBlock(),r.createElementBlock("span",X,r.toDisplayString(d.msgHtml),1)):(r.openBlock(),r.createElementBlock(r.Fragment,{key:2},[],64))],2)):(r.openBlock(),r.createElementBlock(r.Fragment,{key:1},[],64))],16)}}}),Y=["id"],ee=r.defineComponent({name:"ClSelectCascade",__name:"Index",props:{id:String,value:[String,Number],className:{type:String,default:""},disabled:{type:Boolean,default:!1},list:{type:Array,default:()=>[]},placeholder:String,isClear:{type:Boolean,default:!1},isSearch:{type:Boolean,default:!1},parentKey:{type:String,default:"parentId"},topParentValue:{type:String,default:"0"},width:String,isCheckValidate:{type:Boolean,default:!1},validateRules:{type:Array,default:()=>[{r:"required"}]},isShowInMsg:{type:Boolean,default:!0}},emits:{"update:value":s=>!0,onChange:s=>!0},setup(s,{expose:i,emit:l}){const y=s,w=l,{optPageLanguage:$,getPageLanguage:K}=z.useLanguage();K("common");const B=`selectCascade-${e.CommonBase.getRandom(5)}`,_=y.id,d=r.reactive({lastValue:y.value,isFirstDataFinish:!1}),F=r.ref([]),f={dataJson:{},dataGroup:{},parentIdsJson:{}},v=r.computed(()=>$.value.pleaseSelect),S=r.computed(()=>{const{placeholder:o}=y;return e.CommonBase.isNonEmptyString(o)?o.split("|"):[]}),N=r.computed(()=>{const{width:o}=y;return e.CommonBase.isNonEmptyString(o)?o.split("|"):[]}),P=r.computed(()=>{let o={"panel-selectCascade":!0};return o=e.CommonBase.getJsonMerge(o,q.CommonElement.getClassNameJson(y.className)),o}),A=o=>{o!==d.lastValue&&(d.lastValue=o,w("update:value",o),w("onChange",o))},J=o=>e.CommonBase.isExistJsonKey(f.dataGroup,o),M=o=>J(o)?f.dataGroup[o]:[],L=o=>e.CommonBase.isExistJsonKey(f.dataJson,o)?f.dataJson[o]:null,D=()=>`top_${y.topParentValue}`,R=o=>{const{parentKey:c,topParentValue:p}=y,t={},a={};e.CommonBase.isEmpty(o)||o.forEach(m=>{const n=e.CommonBase.getJsonClone(m);if(!e.CommonBase.isExistJsonKey(n,"id")||!e.CommonBase.isExistJsonKey(n,c))return;const u=n.id.toString(),g=n[c].toString();t[u]=n;const C=g===p.toString()?D():g;e.CommonBase.isExistJsonKey(a,C)||(a[C]=[]),a[C].push(n)}),f.dataJson=t,f.dataGroup=a},k=(o,c)=>{const p={idx:o,pId:c,placeholder:v.value,list:[],sty:{},selected:""};if(!e.CommonBase.isEmpty(c)){const n=M(c);p.list=e.CommonBase.getListClone(n)}const t=S.value,a=t.length;a>0&&(a>o?p.placeholder=e.CommonBase.isEmpty(t[o])?v.value:t[o]:a===1&&(p.placeholder=t[0]));const m=N.value;return m.length>o&&(e.CommonBase.isEmpty(m[o])||(p.sty.width=m[o],p.sty.flex="none")),p},x=(o,c)=>{const{parentKey:p,topParentValue:t}=y;let a=[];if(c&&c.indexOf(o)>-1)return[];const m=c?c.concat([o]):[o];if(e.CommonBase.isExistJsonKey(f.parentIdsJson,o))a=f.parentIdsJson[o];else{const n=L(o);if(n!=null){const u=n[p].toString();if(u!==t.toString()){const g=L(u);if(g!=null){a.push(u);const C=x(u,m);C.length>0&&(a=a.concat(C))}}}f.parentIdsJson[o]=a}return a},E=o=>{let c=e.CommonBase.isUndefined(o)?y.value:o;c!=null&&!e.CommonBase.isEmpty(c)&&!e.CommonBase.isExistJsonKey(f.dataJson,c.toString())&&(c="");const p=[];if(c==null||e.CommonBase.isEmpty(c))p.push(k(0,D())),p.push(k(1,""));else{const t=c.toString(),a=[...x(t)].reverse(),m=a.length;if(m>0){a.forEach((u,g)=>{const C=g===0?D():u,h=k(g,C);h.selected=u,p.push(h)});const n=k(m,a[m-1]);n.selected=t,p.push(n)}else{const n=k(0,D());n.selected=t,p.push(n)}}F.value=p},T=()=>{R(y.list),E(),d.isFirstDataFinish=!0,d.lastValue=y.value};r.onMounted(()=>{r.nextTick(()=>{T()})}),r.watch(()=>y.value,o=>{o!==d.lastValue&&d.isFirstDataFinish&&(E(),d.lastValue=o)}),r.watch(()=>y.list,o=>{if(!d.isFirstDataFinish){d.isFirstDataFinish=!0;return}f.parentIdsJson={},R(o);const{value:c}=y,p=c!=null&&!e.CommonBase.isEmpty(c)&&e.CommonBase.isExistJsonKey(f.dataJson,c.toString())?c:"";E(p),d.lastValue=p});const V=()=>!0,I=(o,c)=>{let p="";if(e.CommonBase.isEmpty(o)&&c===0)E("");else if(e.CommonBase.isEmpty(o)){if(F.value.splice(c+1),c>0){const t=F.value[c-1];t&&(p=t.selected)}}else{const t=o.toString();J(t)?(F.value.splice(c+1),F.value.push(k(c+1,t))):(p=o,F.value.splice(c+1))}A(p)};return i({getValue:()=>d.lastValue,getValueData:()=>{const o=d.lastValue;let c="";if(o!=null&&!e.CommonBase.isEmpty(o)){const p=o.toString(),t=x(p),a=t.length>0?t.slice().reverse().concat([p]):[p],m=[];a.forEach(n=>{const u=f.dataJson[n];u!=null&&!e.CommonBase.isEmpty(u.name)&&m.push(u.name)}),c=m.join(" → ")}return{value:o,show:c||(o!=null?o.toString():"")}},setValue:o=>{E(o),d.lastValue=o}}),(o,c)=>(r.openBlock(),r.createElementBlock("div",{id:r.unref(_),class:r.normalizeClass(P.value)},[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(F.value,(p,t)=>(r.openBlock(),r.createElementBlock("div",{key:`${B}-${t}`,class:"selectCascade-item",style:r.normalizeStyle(p.sty)},[r.createVNode(O,{isShowMsg:s.isShowInMsg,isCheck:s.isCheckValidate,checkValue:p.selected,rules:s.validateRules},{default:r.withCtx(()=>[r.createVNode(W._sfc_main,{isClear:s.isClear,isSearch:s.isSearch,placeholder:p.placeholder,list:p.list,disabled:s.disabled,value:p.selected,"onUpdate:value":a=>p.selected=a,onOpenBefore:V,onOnChange:a=>I(a,t)},null,8,["isClear","isSearch","placeholder","list","disabled","value","onUpdate:value","onOnChange"])]),_:2},1032,["isShowMsg","isCheck","checkValue","rules"])],4))),128))],10,Y))}});exports._sfc_main=ee;exports._sfc_main$1=O;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js","sources":["../../../src/libs/Element/Form/Rules.ts","../../../src/libs/Element/Form/Validate.vue","../../../src/libs/Web/SelectCascade/Index.vue"],"sourcesContent":["import CommonBase from \"../../Common/base\";\nconst defaultRules = {\n required: (value: string) => !CommonBase.isEmpty(value),\n number: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i).test(newValue);\n }\n return check;\n },\n integer: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^-?\\d+$/).test(newValue);\n }\n return check;\n },\n integerPositive: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = (/^[1-9]\\d*$/).test(newValue);\n }\n return check;\n },\n alphanum: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^\\w+$/i).test(value);\n }\n return check;\n },\n email: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^((([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&\"\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i).test(value);\n }\n return check;\n },\n minLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length >= parseInt(len, 10);\n }\n return check;\n },\n maxLen: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = value.length <= parseInt(len, 10);\n }\n return check;\n },\n minByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) >= parseInt(len, 10);\n }\n return check;\n },\n maxByte: (value: string, len: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = CommonBase.getByteLen(value) <= parseInt(len, 10);\n }\n return check;\n },\n minGreater: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) > parseFloat(min);\n }\n return check;\n },\n maxGreater: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) < parseFloat(max);\n }\n return check;\n },\n minGreaterEqual: (value: string, min: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) >= parseFloat(min);\n }\n return check;\n },\n maxGreaterEqual: (value: string, max: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n const newValue = CommonBase.removeReplace(value);\n check = parseFloat(newValue) <= parseFloat(max);\n }\n return check;\n },\n phone: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^1\\d{10}$/).test(value);\n }\n return check;\n },\n equalto: (value: string, compareValue: string) => {\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(compareValue)) {\n return value === compareValue;\n }\n return true;\n },\n regular: (value: string, strReg: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value) && !CommonBase.isEmpty(strReg)) {\n const reg = new RegExp(strReg, \"g\");\n check = reg.test(value);\n }\n return check;\n },\n urlHttp: (value: string) => {\n let check = true;\n if (!CommonBase.isEmpty(value)) {\n check = (/^(http|https):\\/\\/[^\\s]+$/).test(value);\n }\n return check;\n },\n};\nexport default (options: any = {}) => {\n return {\n type: CommonBase.isEmpty(options.type) ? \"tip\" : options.type,\n rules: CommonBase.getJsonMerge(defaultRules, options.rules),\n messages: CommonBase.getJsonMergeDeep({}, options.messages),\n };\n};","<template>\n <div\n ref=\"refElTop\"\n :class=\"clsParent\"\n v-bind=\"optParent\"\n >\n <slot></slot>\n <div\n ref=\"refElMsg\"\n v-if=\"optBase.msgHtml.length > 0 && isShowMsg\"\n :class=\"clsErr\"\n role=\"alert\"\n >\n <cl-icon-font\n v-if=\"optBase.type === 'tip'\"\n :name=\"'exclamation-circle-fill'\"\n class=\"error-tip-el\"\n role=\"img\"\n :aria-label=\"optAriaLabel\"\n v-cltooltip=\"optBase.msgHtml\"\n ></cl-icon-font>\n <span\n v-else-if=\"optBase.type === 'text'\"\n class=\"error-text-el\"\n >{{ optBase.msgHtml }}</span\n >\n <template v-else></template>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n nextTick,\n toRaw,\n inject,\n watch,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport useLanguage from '../../Use/language';\nimport validateRules from './Rules';\nimport ClIconFont from '../IconFont/Index.vue';\n\n// defineOptions\ndefineOptions({\n name: 'ClFormValidate',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n className: String, // desc: 自定义CSS类名\n checkValue: [String, Number], // desc: 需要校验的值\n rules: {\n type: Array, // desc: 校验规则数组,支持字符串或对象形式。字符串 'rule|param'(如 'required|必填');对象 {r: 规则名, p: 参数, m: 自定义消息, isCheck: 是否启用}\n default: () => [],\n },\n isCheck: {\n type: Boolean, // desc: 是否开启校验(false 时不执行校验);校验时机由外部调用 runValidate 触发(cl-form 容器提交时自动调用)\n default: true,\n },\n msgElementId: String, // desc: 错误消息挂载目标元素选择器(不传时展示在当前组件内部)\n msgType: {\n type: String, // desc: 错误消息展示类型 | enum: tip, text\n validator: (val: string) => ['tip', 'text'].includes(val),\n },\n pElError: String, // desc: 错误元素父级定位选择器(仅供 Form 容器错误定位消费,独立直用时无效果)\n isShowMsg: {\n type: Boolean, // desc: 是否展示错误消息(默认展示;显式传 false 仅红框不显示文案,msgElementId 迁移同样不生效)\n default: true,\n },\n});\n\n// slots: default\n\n// 常量 / 变量定义\nconst { optPageLanguage, getPageLanguage, getLanguageType } = useLanguage();\ngetPageLanguage('validate');\n\n// $ClGlobals 全局配置注入(含 validate 校验规则表);标准安装(installCore)已注册 Rules.ts 实例,\n// 外部覆盖注入时按注入优先;未注册场景(独立安装不走 installCore)由 _getValidateGlobals 回退兜底\ntype RuleFunc = (value: string, param?: string) => boolean;\ninterface ClGlobals {\n validate?: {\n type?: string;\n rules?: Record<string, RuleFunc>;\n messages?: Record<string, string>;\n };\n}\ntype ValidateGlobals = NonNullable<ClGlobals['validate']>;\n// 规则项:字符串(规则名)或对象({r, p, m, isCheck});isCheck 兼容布尔与字符串 'false'/'0'\ntype RuleItem = string | { r: string; p?: string; m?: string; isCheck?: boolean | string };\nconst _clGlobals = inject<ClGlobals | null>('$ClGlobals', null);\n\nconst refElTop = ref<HTMLElement | null>(null);\nconst refElMsg = ref<HTMLElement | null>(null);\n\nconst optBase = reactive({\n type: '',\n msgHtml: '',\n check: 0,\n});\n\nconst _pageElement: { form: HTMLFormElement | null } = {\n form: null,\n};\n\nconst _pageData: {\n rules: Record<string, string>;\n messages: Record<string, string>;\n} = {\n rules: {},\n messages: {},\n};\n\n// 校验规则表统一入口:优先取全局注入 $ClGlobals.validate,缺失时回退组件内置默认规则表(Rules.ts)\n// 返回类型收口为非空:函数内所有路径都已赋值(内置或注入),null 仅作缓存未初始化哨兵\nlet _validateGlobal: ValidateGlobals | null = null;\nconst _getValidateGlobals = (): ValidateGlobals => {\n if (CommonBase.isUndefined(_validateGlobal)) {\n // 内置默认表(缺失字段的兜底来源)\n const def = validateRules();\n const injected = _clGlobals?.validate;\n if (injected) {\n if (CommonBase.isEmpty(injected.rules) && CommonBase.isEmpty(injected.messages)) {\n // 规则/消息全缺:整体回退内置,但保留注入的 type(仅注入主题类型的配置不失效)\n _validateGlobal = CommonBase.isNonEmptyString(injected.type)\n ? { ...def, type: injected.type }\n : def;\n console.warn(\n '[cl-form-validate] 全局校验规则表($ClGlobals.validate)缺少 rules/messages,已回退内置默认规则',\n );\n } else {\n // 部分字段缺失时字段级兜底:缺什么补什么(如注入 rules 缺 messages → 内置消息表仍参与合并,错误文案不退化显示规则名)\n _validateGlobal = {\n ...def,\n ...injected,\n type: injected.type ?? def.type,\n rules: injected.rules ?? def.rules,\n messages: injected.messages ?? def.messages,\n };\n }\n } else {\n _validateGlobal = def;\n console.warn(\n '[cl-form-validate] 未检测到全局校验规则表($ClGlobals.validate),已回退内置默认规则',\n );\n }\n }\n return _validateGlobal as ValidateGlobals;\n};\n\n// computed\nconst optParent = computed(() => {\n const temp: Record<string, string> = {\n 'data-validate-el': '',\n };\n if (props.isCheck) {\n switch (optBase.check) {\n case 1:\n temp['data-validate-success'] = '';\n break;\n case 2:\n temp['data-validate-error'] = '';\n break;\n default:\n break;\n }\n // A11y:校验失败对读屏可感知(显式 'true'/'false' 保证成功→失败切换时播报状态变化)\n temp['aria-invalid'] = optBase.check === 2 ? 'true' : 'false';\n }\n return temp;\n});\n\nconst clsParent = computed(() => {\n const clsTemp: Record<string, boolean> = {};\n if (props.isCheck) {\n clsTemp['panel-validate-element'] = true;\n }\n return CommonBase.getJsonMerge(clsTemp, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsErr = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-validate-errors': true,\n };\n cls[`validate-errors-${optBase.type}`] = true;\n return cls;\n});\n\n// tip 模式图标的无障碍标注(去掉消息 HTML 标签后的纯文本,读屏可读)\n// 逐条 div 结构去标签后以空格分隔,防多条消息粘连成 msg1msg2\nconst optAriaLabel = computed(() => optBase.msgHtml.replace(/<[^>]*>/g, ' ').trim());\n\n// 内部调用方法\nconst _initRules = (options: RuleItem[]) => {\n if (!CommonBase.isArray(options)) {\n console.warn('[cl-form-validate] rules 应为数组,已忽略');\n return;\n }\n const rules: Record<string, string> = {};\n const messages: Record<string, string> = {};\n options.forEach((info: RuleItem) => {\n // typeof 内联判断(RuleItem 联合类型靠字面判断收窄)\n if (typeof info === 'string') {\n if (!CommonBase.isEmpty(info)) {\n if (CommonBase.isExistValue(info, '|')) {\n const tempR = info.split('|');\n rules[tempR[0]] = tempR[1];\n if (tempR.length > 2) {\n console.warn(\n '[cl-form-validate] 字符串规则 \"' +\n info +\n '\" 含多个参数段,仅取前两段,建议改用对象形式',\n );\n }\n } else {\n rules[info] = '';\n }\n }\n } else if (typeof info === 'object' && !CommonBase.isUndefined(info)) {\n // isCheck 支持布尔与字符串 'false'/'0'(与容器 data-validate-check-* 的 'false' 约定一致)\n let isCheckOne = true;\n if (CommonBase.isBoolean(info.isCheck)) {\n isCheckOne = info.isCheck === true;\n } else if (info.isCheck === 'false' || info.isCheck === '0') {\n isCheckOne = false;\n }\n if (!CommonBase.isEmpty(info.r) && isCheckOne) {\n rules[info.r] = info.p ?? '';\n if (!CommonBase.isEmpty(info.m)) {\n messages[info.r] = info.m ?? '';\n }\n }\n }\n });\n _pageData.rules = rules;\n _pageData.messages = messages;\n};\n\nconst _mergeRules = () => {\n const cancel: string[] = [];\n const param: Record<string, string> = {};\n const message: Record<string, string> = {};\n if (refElTop.value && !CommonBase.isEmpty(refElTop.value.dataset)) {\n Object.keys(refElTop.value.dataset).forEach(key => {\n if (key.indexOf('validate') === 0) {\n // dataset 键还原为 validate-{check|param|message}-{规则名};规则名小写归一,兼容驼峰规则名(如 data-validate-param-minLen)\n const tempKey = key.replace(/[A-Z]/g, str => `-${str.toLowerCase()}`);\n const arrKey = tempKey.split('-');\n if (arrKey.length === 3) {\n const name = arrKey[2].toLowerCase();\n const value: any = refElTop.value!.dataset[key];\n switch (arrKey[1]) {\n case 'check':\n if (!CommonBase.isEmpty(value) && value.toLowerCase() === 'false') {\n cancel.push(name);\n }\n break;\n case 'param':\n param[name] = value;\n break;\n case 'message':\n message[name] = value;\n break;\n default:\n break;\n }\n }\n }\n });\n }\n\n if (!CommonBase.isEmpty(_pageData.rules)) {\n if (!CommonBase.isEmpty(cancel) || !CommonBase.isEmpty(param)) {\n const newRules: any = {};\n for (const [r, p] of Object.entries(_pageData.rules)) {\n const rKey = r.toLowerCase();\n if (!CommonBase.isExistValue(cancel, rKey)) {\n newRules[r] = CommonBase.isExistJsonKey(param, rKey) ? param[rKey] : p;\n }\n }\n _pageData.rules = newRules;\n }\n }\n if (!CommonBase.isEmpty(_pageData.messages)) {\n if (!CommonBase.isEmpty(message)) {\n const newMessages: any = {};\n for (const [r, m] of Object.entries(_pageData.messages)) {\n const rKey = r.toLowerCase();\n newMessages[r] = CommonBase.isExistJsonKey(message, rKey) ? message[rKey] : m;\n }\n _pageData.messages = newMessages;\n }\n }\n};\n\nconst _getErrData = (value: string | number | undefined) => {\n const errData: Record<string, string> = {};\n // 规则表可选字段(注入可能缺 rules),缺失时按空表处理(isExistJsonKey 对空表返回 false → 走未注册警告分支)\n const totalRules = _getValidateGlobals().rules ?? {};\n if (!CommonBase.isEmpty(_pageData.rules)) {\n // NaN 视为空值(数字类型非空但无实际值),避免 trim(NaN) 产出 'NaN' 被 required 误判通过\n const isEmpty =\n CommonBase.isEmpty(value) ||\n (CommonBase.getTypeof(value) === 'number' && CommonBase.isNaN(value));\n const newValue = isEmpty ? '' : CommonBase.trim(value);\n for (const [r, p] of Object.entries(_pageData.rules)) {\n if (CommonBase.isExistJsonKey(totalRules, r) && CommonBase.isFunction(totalRules[r])) {\n let check = true;\n if (r === 'required') {\n check = totalRules.required(newValue);\n } else {\n if (!isEmpty) {\n check = totalRules[r](newValue, p);\n }\n }\n if (!check) {\n errData[r] = p;\n }\n } else {\n console.warn('[cl-form-validate] 校验规则 \"' + r + '\" 未注册或非函数,已跳过');\n }\n }\n }\n return errData;\n};\n\nconst _getTotalMessages = () => {\n // 不缓存:语言包运行时可切换(Language.setType),每次合并保证消息跟随当前语言\n // optPageLanguage 是 setup 一次性快照,运行时切换语言后不更新——现取刷新后再合并\n getPageLanguage('validate');\n const lang = toRaw(optPageLanguage.value);\n // messages 可选字段(注入可能缺失),缺失时按空表合并(回退页语言包或内置消息)\n const vMsg = toRaw(_getValidateGlobals().messages ?? {});\n const langTypeInfo = getLanguageType();\n const msg =\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.type) ||\n CommonBase.isExistJsonKey(vMsg, langTypeInfo.def)\n ? CommonBase.getJsonMerge({}, vMsg[langTypeInfo.def] || {}, vMsg[langTypeInfo.type] || {})\n : vMsg;\n return CommonBase.getJsonMerge({}, lang, msg);\n};\n\nconst _getErrMsg = (errData: Record<string, string>) => {\n const totalMessages = _getTotalMessages();\n const msg: string[] = [];\n Object.keys(errData).forEach(r => {\n let rMsg = '';\n // 自定义消息优先于全局消息;rMsg 可能来自外部配置(非字符串类型跳过,避免 %s 判断抛错)\n if (CommonBase.isNonEmptyString(_pageData.messages[r])) {\n rMsg = _pageData.messages[r];\n } else if (CommonBase.isNonEmptyString(totalMessages[r])) {\n rMsg = totalMessages[r];\n }\n if (!CommonBase.isEmpty(rMsg)) {\n const p = errData[r];\n // p 为空时去掉占位段,避免渲染残缺文案;多占位一并替换\n const temp = CommonBase.isExistValue(rMsg, '%s')\n ? rMsg.replace(/%s/g, CommonBase.isNonEmptyString(p) ? p : '')\n : rMsg;\n msg.push(temp);\n }\n });\n return msg;\n};\n\nconst _getForm = () => {\n // form 被 v-if 重建(detached)后缓存失效,重新查找\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(null/undefined 均跳过,语义等价)\n if (_pageElement.form && !_pageElement.form.isConnected) {\n _pageElement.form = null;\n }\n if (CommonBase.isUndefined(_pageElement.form) && refElTop.value) {\n _pageElement.form = CommonElement.getParent(refElTop.value, 'form');\n }\n return _pageElement.form;\n};\n\nconst _setThemeType = () => {\n _getForm();\n let type = _getValidateGlobals().type;\n // isUndefined 非 TS 类型守卫,truthy 检查收窄(语义等价)\n if (_pageElement.form && !CommonBase.isEmpty(_pageElement.form.dataset.theme)) {\n type = _pageElement.form.dataset.theme;\n }\n if (CommonBase.isNonEmptyString(props.msgType)) {\n type = props.msgType;\n }\n // msgType 封闭枚举兜底:非 tip/text 一律回退 tip,保证错误消息可渲染、不误标成功\n if (type !== 'tip' && type !== 'text') {\n type = 'tip';\n }\n optBase.type = type;\n};\n\nconst _checkRun = () => {\n let isRun = true;\n _getForm();\n // 运行态契约:容器 form 带 data-cl-validate 属性(cl-form 渲染的显式标记)时,显式挂 data-run 才执行校验\n // (与 Form 运行态 optBase.isRun → data-run 对应);无 form 容器(SelectCascade 等独立使用)与原生 form\n // (含任意 data-* 属性)均默认校验——是否校验由 isCheck 门控,无容器场景保持设计意图(传了校验 props 即要校验)\n if (!CommonBase.isUndefined(_pageElement.form) && _pageElement.form) {\n if (!CommonBase.isUndefined(_pageElement.form.dataset.clValidate)) {\n isRun = !CommonBase.isUndefined(_pageElement.form.dataset.run);\n }\n }\n return isRun;\n};\n\nconst _setMsg = (msg: string) => {\n // 入参统一收口为字符串,防外部传入数字/对象污染 msgHtml(模板 length 判断失效)\n const newMsg = CommonBase.isNonEmptyString(msg) ? msg : '';\n if (CommonBase.isEmpty(newMsg)) {\n optBase.msgHtml = '';\n optBase.check = 1;\n } else {\n optBase.msgHtml = newMsg;\n optBase.check = 2;\n if (CommonBase.isNonEmptyString(props.msgElementId)) {\n // 多实例共用同一 msgElementId 时,后校验失败的实例会将节点移动到目标末尾(appendChild 移动语义)\n // 属约定行为,建议每个校验组件使用独立 msgElementId,避免串扰\n try {\n const msgEl: any = window.document.querySelector(props.msgElementId);\n if (msgEl) {\n nextTick(() => {\n // 同步查询时刻存在但回调时可能已被外部移除(detached)——降级展示在组件内部并提示\n if (refElMsg.value && msgEl.isConnected) {\n msgEl.appendChild(refElMsg.value);\n } else if (refElMsg.value) {\n console.warn(\n '[cl-form-validate] msgElementId 目标已脱离文档:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n });\n } else {\n console.warn(\n '[cl-form-validate] 未找到 msgElementId 目标元素:' +\n props.msgElementId +\n ',消息展示在组件内部',\n );\n }\n } catch (err) {\n console.warn('[cl-form-validate] msgElementId 选择器无效:' + props.msgElementId);\n }\n }\n }\n};\n\n// 复位到初始未校验态(与「校验成功」区分:reset 后不残留 data-validate-success 标记)\nconst _resetMsg = () => {\n optBase.msgHtml = '';\n optBase.check = 0;\n};\n\n// 按 msgType 组装错误消息文本(tip 逐条 div 换行 / text 逗号拼接)\nconst _formatErrMsg = (msgList: string[], type: string) => {\n let msg = '';\n if (!CommonBase.isEmpty(msgList)) {\n switch (type) {\n case 'tip':\n msg = msgList.map(info => `<div>${info}</div>`).join('');\n break;\n case 'text':\n msg = msgList.join(',');\n break;\n default:\n break;\n }\n }\n return msg;\n};\n\nconst _validate = () => {\n let result = true;\n try {\n if (props.isCheck && _checkRun()) {\n _setThemeType();\n _mergeRules();\n const errData = _getErrData(props.checkValue);\n result = CommonBase.isEmpty(errData);\n if (result) {\n _setMsg('');\n } else {\n let msg = _formatErrMsg(_getErrMsg(errData), optBase.type);\n // 校验失败但消息表无对应文案时,兜底输出规则名,避免误标成功\n if (CommonBase.isEmpty(msg)) {\n const firstRule = Object.keys(errData)[0];\n msg = CommonBase.isNonEmptyString(firstRule) ? firstRule : '校验未通过';\n }\n _setMsg(msg);\n }\n } else {\n // 未运行校验:复位到未校验态,不残留成功标记\n _resetMsg();\n }\n } catch (err) {\n console.warn('[cl-form-validate] 校验执行异常,已按未通过处理');\n // 异常按未通过处理时同步复位标记,避免残留上一次的成功视觉态与返回结果矛盾\n _resetMsg();\n result = false;\n }\n return result;\n};\n\n// 挂载在元素上的校验方法链(与 Form 容器 _validateEl 消费契约一致:Index.vue 经 el.runValidate() 取结果)\ninterface ValidateHost extends HTMLElement {\n pElError?: string;\n runValidate?: () => boolean;\n runErrMsg?: (msg: string) => void;\n runReset?: () => void;\n}\n\nconst _initMain = () => {\n // props.rules 未泛型化(defineProps type: Array → unknown[]),断言为 RuleItem[] 传入\n _initRules((props.rules as RuleItem[]) || []);\n _getForm();\n if (refElTop.value) {\n const hostEl = refElTop.value as ValidateHost;\n hostEl.pElError = props.pElError;\n hostEl.runValidate = _validate;\n // DOM 挂载版复用 expose 版方法:带 _setThemeType 同步主题类型,与外部调用 runErrMsg/runReset 行为一致\n hostEl.runErrMsg = runErrMsg;\n hostEl.runReset = runReset;\n }\n};\n\n// 生命周期\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nonBeforeUnmount(() => {\n // msgElementId 迁移到外部节点的错误消息已脱离组件 DOM 树,Vue 卸载不会清理——手动移除防残留\n refElMsg.value?.remove();\n});\n\n// watch\n// checkValue 变化只重新校验(规则表已初始化,重建纯属浪费)\nwatch(\n () => props.checkValue,\n () => {\n _validate();\n },\n);\n\n// rules / isCheck 变化才重建规则表并重新校验(isCheck 关闭时 _validate 走复位分支)\nwatch(\n [() => props.rules, () => props.isCheck],\n ([newRules]: [unknown[], boolean]) => {\n _initRules((newRules as RuleItem[]) || []);\n _validate();\n },\n { deep: true },\n);\n\n// 开放给外部使用的方法\nconst runValidate = () => {\n // 返回值与 DOM 挂载版 _validate 对齐(Index.vue _validateEl 消费 boolean 判定表单整体结果)\n return _validate();\n};\n\n// 空串 = 标记校验成功态(check=1 + data-validate-success);非空 = 失败态。\n// 需要复位到「未校验」态请用 runReset(check=0,无成功/失败标记)\nconst runErrMsg = (msg: string) => {\n _setThemeType();\n _setMsg(msg);\n};\n\nconst runReset = () => {\n _setThemeType();\n _resetMsg();\n};\n\n// 导出类型定义\nexport interface ClFormValidateExpose {\n runValidate: () => boolean;\n runErrMsg: (msg: string) => void;\n runReset: () => void;\n}\n\n// defineExpose\ndefineExpose({\n runValidate,\n runErrMsg,\n runReset,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div\n v-for=\"(item, inx) in optData\"\n :key=\"`${_keyIndex}-${inx}`\"\n class=\"selectCascade-item\"\n :style=\"item.sty\"\n >\n <cl-form-validate\n :isShowMsg=\"isShowInMsg\"\n :isCheck=\"isCheckValidate\"\n :checkValue=\"item.selected\"\n :rules=\"validateRules\"\n >\n <cl-select\n :isClear=\"isClear\"\n :isSearch=\"isSearch\"\n :placeholder=\"item.placeholder\"\n :list=\"item.list\"\n :disabled=\"disabled\"\n v-model:value=\"item.selected\"\n :onOpenBefore=\"onCheckOpen\"\n @onChange=\"onChangeItem($event, inx)\"\n />\n </cl-form-validate>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, onMounted, nextTick, reactive, ref, computed } from 'vue';\nimport type { PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport useLanguage from '../../Use/language';\nimport ClFormValidate from '../../Element/Form/Validate.vue';\nimport ClSelect from '../Select/Index.vue';\nimport './index.css';\n\ndefineOptions({ name: 'ClSelectCascade' });\n\nconst props = defineProps({\n id: String, // desc: 自定义元素ID\n value: [String, Number], // desc: 选中的值\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n list: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [], // desc: 级联数据列表\n },\n placeholder: String, // desc: 各层级占位符,多个用 | 分隔\n isClear: {\n type: Boolean,\n default: false, // desc: 是否可清空\n },\n isSearch: {\n type: Boolean,\n default: false, // desc: 是否可搜索\n },\n parentKey: {\n type: String,\n default: 'parentId', // desc: 父级键名字段\n },\n topParentValue: {\n type: String,\n default: '0', // desc: 顶级父值\n },\n width: String, // desc: 各层级下拉宽度,多个用 | 分隔,需带单位(px/%)\n\n isCheckValidate: {\n type: Boolean,\n default: false, // desc: 是否启用校验\n },\n validateRules: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [{ r: 'required' }], // desc: 校验规则\n },\n isShowInMsg: {\n type: Boolean,\n default: true, // desc: 校验信息是否在消息中显示\n },\n});\n\nconst emit = defineEmits({\n 'update:value': (_value: string | number) => true, // desc: 值变化时触发\n onChange: (_value: string | number) => true, // desc: 选中变化时触发\n});\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst _keyIndex = `selectCascade-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `selectCascade-${CommonBase.getRandom(8)}`\n\ninterface SelectCascadeItem {\n idx: number;\n pId: string;\n placeholder: string;\n list: Record<string, any>[];\n sty: Record<string, string>;\n selected: string;\n}\ninterface SelectCascadePageData {\n dataJson: Record<string, any>;\n dataGroup: Record<string, any[]>;\n parentIdsJson: Record<string, string[]>;\n}\n\nconst optBase = reactive({\n lastValue: props.value,\n isFirstDataFinish: false,\n});\nconst optData = ref<SelectCascadeItem[]>([]);\nconst _pageData: SelectCascadePageData = {\n dataJson: {},\n dataGroup: {},\n parentIdsJson: {},\n};\n\nconst optDefPlaceholder = computed(() => optPageLanguage.value.pleaseSelect);\n\nconst optPlaceholderList = computed(() => {\n const { placeholder } = props;\n const list: string[] = CommonBase.isNonEmptyString(placeholder) ? placeholder.split('|') : [];\n return list;\n});\nconst optWidthList = computed(() => {\n const { width } = props;\n const list: string[] = CommonBase.isNonEmptyString(width) ? width.split('|') : [];\n return list;\n});\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = { 'panel-selectCascade': true };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst _emitChange = (value: string | number) => {\n if (value !== optBase.lastValue) {\n optBase.lastValue = value;\n emit('update:value', value);\n emit('onChange', value);\n }\n};\n\nconst _checkIsChildren = (id: string) => {\n return CommonBase.isExistJsonKey(_pageData.dataGroup, id);\n};\nconst _getDataGroup = (id: string) => {\n return _checkIsChildren(id) ? _pageData.dataGroup[id] : [];\n};\nconst _getDataInfo = (id: string): Record<string, any> | null => {\n return CommonBase.isExistJsonKey(_pageData.dataJson, id) ? _pageData.dataJson[id] : null;\n};\nconst _getTopParentValue = () => {\n return `top_${props.topParentValue}`;\n};\nconst _convertData = (list: Record<string, any>[]) => {\n const { parentKey, topParentValue } = props;\n const json: Record<string, any> = {};\n const group: Record<string, any[]> = {};\n if (!CommonBase.isEmpty(list)) {\n list.forEach((info: Record<string, any>) => {\n const newInfo = CommonBase.getJsonClone(info);\n if (\n !CommonBase.isExistJsonKey(newInfo, 'id') ||\n !CommonBase.isExistJsonKey(newInfo, parentKey)\n ) {\n return;\n }\n const id = newInfo.id.toString();\n const pId = newInfo[parentKey].toString();\n json[id] = newInfo;\n const pIdKey = pId === topParentValue.toString() ? _getTopParentValue() : pId;\n if (!CommonBase.isExistJsonKey(group, pIdKey)) {\n group[pIdKey] = [];\n }\n group[pIdKey].push(newInfo);\n });\n }\n _pageData.dataJson = json;\n _pageData.dataGroup = group;\n};\nconst _convertTreeItemData = (idx: number, pId: string): SelectCascadeItem => {\n const json: SelectCascadeItem = {\n idx,\n pId,\n placeholder: optDefPlaceholder.value,\n list: [],\n sty: {},\n selected: '',\n };\n if (!CommonBase.isEmpty(pId)) {\n const groupList = _getDataGroup(pId);\n json.list = CommonBase.getListClone(groupList);\n }\n const placeholderList = optPlaceholderList.value;\n const placeholderLen = placeholderList.length;\n if (placeholderLen > 0) {\n if (placeholderLen > idx) {\n json.placeholder = !CommonBase.isEmpty(placeholderList[idx])\n ? placeholderList[idx]\n : optDefPlaceholder.value;\n } else {\n if (placeholderLen === 1) {\n json.placeholder = placeholderList[0];\n }\n }\n }\n const widthList = optWidthList.value;\n if (widthList.length > idx) {\n if (!CommonBase.isEmpty(widthList[idx])) {\n json.sty.width = widthList[idx];\n json.sty.flex = 'none';\n }\n }\n return json;\n};\nconst _getRecursionParentIds = (id: string, visited?: string[]): string[] => {\n const { parentKey, topParentValue } = props;\n let arr: string[] = [];\n if (visited && visited.indexOf(id) > -1) {\n return [];\n }\n const visitList = visited ? visited.concat([id]) : [id];\n if (CommonBase.isExistJsonKey(_pageData.parentIdsJson, id)) {\n arr = _pageData.parentIdsJson[id];\n } else {\n const info = _getDataInfo(id);\n if (info !== undefined && info !== null) {\n const pId = info[parentKey].toString();\n if (pId !== topParentValue.toString()) {\n const pInfo = _getDataInfo(pId);\n if (pInfo !== undefined && pInfo !== null) {\n arr.push(pId);\n const tempIds: string[] = _getRecursionParentIds(pId, visitList);\n if (tempIds.length > 0) {\n arr = arr.concat(tempIds);\n }\n }\n }\n }\n _pageData.parentIdsJson[id] = arr;\n }\n return arr;\n};\n\nconst _initData = (value?: string | number) => {\n let newValue: string | number | undefined = CommonBase.isUndefined(value) ? props.value : value;\n if (\n newValue !== undefined &&\n newValue !== null &&\n !CommonBase.isEmpty(newValue) &&\n !CommonBase.isExistJsonKey(_pageData.dataJson, newValue.toString())\n ) {\n newValue = '';\n }\n const list: SelectCascadeItem[] = [];\n if (newValue === undefined || newValue === null || CommonBase.isEmpty(newValue)) {\n list.push(_convertTreeItemData(0, _getTopParentValue()));\n list.push(_convertTreeItemData(1, ''));\n } else {\n const valueStr = newValue.toString();\n const arrPIds = [..._getRecursionParentIds(valueStr)].reverse();\n const arrPIdLen = arrPIds.length;\n if (arrPIdLen > 0) {\n arrPIds.forEach((pId: string, i: number) => {\n const newPid = i === 0 ? _getTopParentValue() : pId;\n const infoItem = _convertTreeItemData(i, newPid);\n infoItem.selected = pId;\n list.push(infoItem);\n });\n const lastItem = _convertTreeItemData(arrPIdLen, arrPIds[arrPIdLen - 1]);\n lastItem.selected = valueStr;\n list.push(lastItem);\n } else {\n const firstItem = _convertTreeItemData(0, _getTopParentValue());\n firstItem.selected = valueStr;\n list.push(firstItem);\n }\n }\n optData.value = list;\n};\n\nconst _initMain = () => {\n _convertData(props.list);\n _initData();\n optBase.isFirstDataFinish = true;\n optBase.lastValue = props.value;\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n });\n});\n\nwatch(\n () => props.value,\n newValue => {\n if (newValue !== optBase.lastValue) {\n if (optBase.isFirstDataFinish) {\n _initData();\n optBase.lastValue = newValue;\n }\n }\n },\n);\n\nwatch(\n () => props.list,\n newList => {\n if (!optBase.isFirstDataFinish) {\n optBase.isFirstDataFinish = true;\n return;\n }\n _pageData.parentIdsJson = {};\n _convertData(newList);\n\n const { value } = props;\n const selectValue =\n value !== undefined &&\n value !== null &&\n !CommonBase.isEmpty(value) &&\n CommonBase.isExistJsonKey(_pageData.dataJson, value.toString())\n ? value\n : '';\n _initData(selectValue);\n optBase.lastValue = selectValue;\n },\n);\n\nconst onCheckOpen = () => {\n return true;\n};\n\nconst onChangeItem = (value: string | number, inx: number) => {\n let outValue: string | number = '';\n if (CommonBase.isEmpty(value) && inx === 0) {\n _initData('');\n } else if (CommonBase.isEmpty(value)) {\n optData.value.splice(inx + 1);\n if (inx > 0) {\n const parentItem = optData.value[inx - 1];\n if (parentItem) {\n outValue = parentItem.selected;\n }\n }\n } else {\n const valueStr = value.toString();\n if (_checkIsChildren(valueStr)) {\n optData.value.splice(inx + 1);\n optData.value.push(_convertTreeItemData(inx + 1, valueStr));\n } else {\n outValue = value;\n optData.value.splice(inx + 1);\n }\n }\n _emitChange(outValue);\n};\n\nconst getValue = () => {\n return optBase.lastValue;\n};\nconst getValueData = () => {\n const value = optBase.lastValue;\n let show = '';\n if (value !== undefined && value !== null && !CommonBase.isEmpty(value)) {\n const v = value.toString();\n const ids = _getRecursionParentIds(v);\n const chain = ids.length > 0 ? ids.slice().reverse().concat([v]) : [v];\n const names: string[] = [];\n chain.forEach((id) => {\n const info = _pageData.dataJson[id];\n if (info !== undefined && info !== null && !CommonBase.isEmpty(info.name)) {\n names.push(info.name);\n }\n });\n show = names.join(' → ');\n }\n return {\n value,\n show: show || (value !== undefined && value !== null ? value.toString() : ''),\n };\n};\nconst setValue = (value: string | number) => {\n _initData(value);\n optBase.lastValue = value;\n};\n\nexport interface ClSelectCascadeExpose {\n getValue: () => string | number | undefined;\n getValueData: () => { value: string | number | undefined; show: string };\n setValue: (value: string | number) => void;\n}\n\ndefineExpose({\n getValue,\n getValueData,\n setValue,\n});\n</script>\n"],"names":["defaultRules","value","CommonBase","check","newValue","len","min","max","compareValue","strReg","validateRules","options","props","__props","optPageLanguage","getPageLanguage","getLanguageType","useLanguage","_clGlobals","inject","refElTop","ref","refElMsg","optBase","reactive","_pageElement","_pageData","_validateGlobal","_getValidateGlobals","def","injected","optParent","computed","temp","clsParent","clsTemp","CommonElement","clsErr","cls","optAriaLabel","_initRules","rules","messages","info","tempR","isCheckOne","_mergeRules","cancel","param","message","key","arrKey","str","name","newRules","r","p","rKey","newMessages","m","_getErrData","errData","totalRules","isEmpty","_getTotalMessages","lang","toRaw","vMsg","langTypeInfo","msg","_getErrMsg","totalMessages","rMsg","_getForm","_setThemeType","type","_checkRun","isRun","_setMsg","newMsg","msgEl","nextTick","_resetMsg","_formatErrMsg","msgList","_validate","result","firstRule","_initMain","hostEl","runErrMsg","runReset","onMounted","onBeforeUnmount","watch","runValidate","__expose","_openBlock","_createElementBlock","_mergeProps","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_hoisted_1","_toDisplayString","_Fragment","emit","__emit","_keyIndex","elId","optData","optDefPlaceholder","optPlaceholderList","placeholder","optWidthList","width","_emitChange","_checkIsChildren","id","_getDataGroup","_getDataInfo","_getTopParentValue","_convertData","list","parentKey","topParentValue","json","group","newInfo","pId","pIdKey","_convertTreeItemData","idx","groupList","placeholderList","placeholderLen","widthList","_getRecursionParentIds","visited","arr","visitList","pInfo","tempIds","_initData","valueStr","arrPIds","arrPIdLen","i","newPid","infoItem","lastItem","firstItem","newList","selectValue","onCheckOpen","onChangeItem","inx","outValue","parentItem","show","v","ids","chain","names","_unref","_renderList","item","_normalizeStyle","_createVNode","ClFormValidate","ClSelect","$event"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("vue"),o=require("./base-C2QOJBgB.js"),B=require("./index-DAgtltwJ.js"),a={loading:"data:image/gif;base64,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",error:"data:image/png;base64,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",attr:{timeOutId:"data-lazy-timeout-id"}};class Q{options={loading:a.loading,error:a.error,observerOptions:{rootMargin:"0px",threshold:0},log:!1,callback:{}};_images=new WeakMap;constructor(t){this.config(t)}config(t={}){this.options=o.CommonBase.getJsonMergeDeep(this.options,t)}_initValue(t,A){let e="",s=this.options.loading,i=this.options.error,n=this.options.callback,g=this.options.delay;return o.CommonBase.isObject(t)?(e=t.src,s=o.CommonBase.isUndefined(t.loading)?this.options.loading:t.loading,i=o.CommonBase.isUndefined(t.error)?this.options.error:t.error,n=o.CommonBase.isUndefined(t.callback)?this.options.callback:t.callback,g=o.CommonBase.isUndefined(t.delay)?this.options.delay:t.delay):o.CommonBase.isString(t)?e=t:o.CommonBase.isUndefined(t)&&(e=A&&A.src||""),{src:e,loading:s,error:i,callback:n,delay:g}}mount(t,A){if(o.CommonBase.isUndefined(t))return;const e=o.CommonBase.isString(A)?A:A.value,{src:s,loading:i,error:n,callback:g,delay:l}=this._initValue(e,t);if(this._setCallback(t,"loading",g),t.setAttribute("src",i||a.loading),!this._checkIntersectionObserver()){this._setImageSrc(t,s,n,g),this._log(()=>{throw new Error("Not support IntersectionObserver!")});return}this._initIntersectionObserver(t,s,n,g,l)}update(t,A){if(o.CommonBase.isUndefined(t))return;this._realObserver(t)?.unobserve(t),t.hasAttribute(a.attr.timeOutId)&&(clearTimeout(Number(t.getAttribute(a.attr.timeOutId))),t.removeAttribute(a.attr.timeOutId));const e=o.CommonBase.isString(A)?A:A.value,{src:s,error:i,callback:n,delay:g}=this._initValue(e,t);this._initIntersectionObserver(t,s,i,n,g)}unmount(t){if(!o.CommonBase.isUndefined(t)){if(this._realObserver(t)?.unobserve(t),t.hasAttribute(a.attr.timeOutId)&&(clearTimeout(Number(t.getAttribute(a.attr.timeOutId))),t.removeAttribute(a.attr.timeOutId)),t.tagName.toLowerCase()==="img"){const A=t;A.onload=null,A.onerror=null}this._images.delete(t)}}_setImageSrc(t,A,e,s){if(t.tagName.toLowerCase()==="img"){const i=t;o.CommonBase.isEmpty(A)?(i.onload=null,this._setCallback(i,"error",s),this._realObserver(i)?.disconnect(),e?i.setAttribute("src",e):i.removeAttribute("src")):(this.options.isCrossOrigin&&(i.crossOrigin="Anonymous"),A&&i.getAttribute("src")!==A&&i.setAttribute("src",A),i.onload=()=>{A&&this._setCallback(i,"loaded",s)},i.onerror=()=>{i.onload=null,this._setCallback(i,"error",s),this._realObserver(i)?.disconnect(),e&&i.getAttribute("src")!==e&&i.setAttribute("src",e),this._log(()=>{throw new Error(`Image failed to load!And failed src was: ${A} `)})})}else t.style.backgroundImage=`url('${A}')`}_setCallback(t,A,e){switch(t?.setAttribute("lazy",A),A){case"loading":e?.loading&&e.loading(t);break;case"loaded":e?.loaded&&e.loaded(t);break;case"error":e?.error&&e.error(t);break}}_realObserver(t){return this._images.get(t)}_checkIntersectionObserver(){if(typeof window<"u"&&window!==null&&"IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype){if(!("isIntersecting"in window.IntersectionObserverEntry.prototype))try{Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get(){return this.intersectionRatio>0}})}catch{return!1}return!0}return!1}_initIntersectionObserver(t,A,e,s,i){const n=this.options.observerOptions;this._images.set(t,new IntersectionObserver(g=>{Array.prototype.forEach.call(g,l=>{i&&i>0?this._delayedIntersectionCallback(t,l,i,A,e,s):this._intersectionCallback(t,l,A,e,s)})},n)),this._realObserver(t)?.observe(t)}_intersectionCallback(t,A,e,s,i){A.isIntersecting&&(this._realObserver(t)?.unobserve(A.target),this._setImageSrc(t,e,s,i))}_delayedIntersectionCallback(t,A,e,s,i,n){if(A.isIntersecting){if(A.target.hasAttribute(a.attr.timeOutId))return;const g=setTimeout(()=>{this._intersectionCallback(t,A,s,i,n),A.target.removeAttribute(a.attr.timeOutId)},e);A.target.setAttribute(a.attr.timeOutId,String(g))}else A.target.hasAttribute(a.attr.timeOutId)&&(clearTimeout(Number(A.target.getAttribute(a.attr.timeOutId))),A.target.removeAttribute(a.attr.timeOutId))}_log(t){this.options.log&&t()}}const p=(m,t,A)=>{const e=new Q(A);r.onMounted(()=>{r.nextTick(()=>{m.value&&e.mount(m.value,t)})}),r.onUnmounted(()=>{m.value&&e.unmount(m.value)}),r.watch(t,s=>{m.value&&e.update(m.value,s)})},w=["id"],k=["alt"],f=r.defineComponent({name:"ClImage",__name:"Index",props:{id:{},className:{},src:{},alt:{},height:{},width:{},isCircle:{type:Boolean},fit:{},isCrossOrigin:{type:Boolean}},emits:["onInit"],setup(m,{emit:t}){const A=m,e=t,s=r.ref(o.CommonBase.isNonEmptyString(A.src)?A.src:""),i=r.ref(null),n=r.computed(()=>o.CommonBase.isNonEmptyString(A.alt)?A.alt:""),g=A.id;p(i,s,{callback:{loaded:()=>{E()},error:()=>{E()}},isCrossOrigin:A.isCrossOrigin});const l=r.computed(()=>{let c={"panel-imageBox":!0,"imageBox-circle":A.isCircle};return c=o.CommonBase.getJsonMerge(c,B.CommonElement.getClassNameJson(A.className)),c}),u=r.computed(()=>{const{width:c,height:C}=A,d={};return o.CommonBase.isNonEmptyString(c)&&(d.width=c),o.CommonBase.isNonEmptyString(C)&&(d.height=C),d}),h=r.computed(()=>{const{width:c,height:C,fit:d}=A,I={};return o.CommonBase.isNonEmptyString(d)&&(I["object-fit"]=d,o.CommonBase.isNonEmptyString(c)&&(I.width=c),o.CommonBase.isNonEmptyString(C)&&(I.height=C)),I});function E(){e("onInit")}return r.watch(()=>A.src,c=>{s.value=o.CommonBase.isNonEmptyString(c)?c:""}),(c,C)=>(r.openBlock(),r.createElementBlock("div",{id:r.unref(g),class:r.normalizeClass(l.value),style:r.normalizeStyle(u.value)},[r.createElementVNode("img",{ref_key:"refElImage",ref:i,alt:n.value,style:r.normalizeStyle(h.value)},null,12,k)],14,w))}});exports._sfc_main=f;
|
|
2
|
-
//# sourceMappingURL=Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js","sources":["../../../src/libs/Element/LazyImage/lazy.ts","../../../src/libs/Element/LazyImage/use.ts","../../../src/libs/Element/Image/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\nimport { LazyOptionInfo } from './interfaceItem';\nconst defOption = {\n loading:\n 'data:image/gif;base64,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',\n error:\n 'data:image/png;base64,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',\n attr: {\n timeOutId: 'data-lazy-timeout-id',\n },\n isCrossOrigin: false,\n};\nclass Lazy {\n public options: LazyOptionInfo = {\n loading: defOption.loading,\n error: defOption.error,\n observerOptions: {\n rootMargin: '0px',\n threshold: 0,\n },\n log: false,\n callback: {},\n };\n private _images = new WeakMap();\n constructor(options?: LazyOptionInfo) {\n this.config(options);\n }\n public config(options = {}): void {\n this.options = CommonBase.getJsonMergeDeep(this.options, options);\n }\n private _initValue(value: any, el: any) {\n let src = '';\n let loading = this.options.loading;\n let error = this.options.error;\n let callback = this.options.callback;\n let delay = this.options.delay;\n if (CommonBase.isObject(value)) {\n src = value.src;\n loading = !CommonBase.isUndefined(value.loading) ? value.loading : this.options.loading;\n error = !CommonBase.isUndefined(value.error) ? value.error : this.options.error;\n callback = !CommonBase.isUndefined(value.callback) ? value.callback : this.options.callback;\n delay = !CommonBase.isUndefined(value.delay) ? value.delay : this.options.delay;\n } else if (CommonBase.isString(value)) {\n src = value;\n } else if (CommonBase.isUndefined(value)) {\n src = (el && el.src) || '';\n }\n return {\n src,\n loading,\n error,\n callback,\n delay,\n };\n }\n public mount(el: HTMLElement, binding: any): void {\n if (CommonBase.isUndefined(el)) return;\n const value = CommonBase.isString(binding) ? binding : binding.value;\n const { src, loading, error, callback, delay } = this._initValue(value, el);\n this._setCallback(el, 'loading', callback);\n el.setAttribute('src', loading || defOption.loading);\n if (!this._checkIntersectionObserver()) {\n this._setImageSrc(el, src, error, callback);\n this._log(() => {\n throw new Error('Not support IntersectionObserver!');\n });\n return;\n }\n this._initIntersectionObserver(el, src, error, callback, delay);\n }\n public update(el: HTMLElement, binding: any): void {\n if (CommonBase.isUndefined(el)) return;\n this._realObserver(el)?.unobserve(el);\n if (el.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(el.getAttribute(defOption.attr.timeOutId)));\n el.removeAttribute(defOption.attr.timeOutId);\n }\n const value = CommonBase.isString(binding) ? binding : binding.value;\n const { src, error, callback, delay } = this._initValue(value, el);\n this._initIntersectionObserver(el, src, error, callback, delay);\n }\n public unmount(el: HTMLElement): void {\n if (CommonBase.isUndefined(el)) return;\n this._realObserver(el)?.unobserve(el);\n if (el.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(el.getAttribute(defOption.attr.timeOutId)));\n el.removeAttribute(defOption.attr.timeOutId);\n }\n // 清理 img 回调,防止卸载后 onload/onerror 仍触发\n if (el.tagName.toLowerCase() === 'img') {\n const img = el as HTMLImageElement;\n img.onload = null;\n img.onerror = null;\n }\n this._images.delete(el);\n }\n\n private _setImageSrc(el: HTMLElement, src: string, error?: string, callback?: any): void {\n if (el.tagName.toLowerCase() === 'img') {\n const elImage = el as HTMLImageElement;\n if (CommonBase.isEmpty(src)) {\n elImage.onload = null;\n this._setCallback(elImage, 'error', callback);\n this._realObserver(elImage)?.disconnect();\n if (error) {\n elImage.setAttribute('src', error);\n } else {\n elImage.removeAttribute('src');\n }\n } else {\n if (this.options.isCrossOrigin) {\n elImage.crossOrigin = 'Anonymous';\n }\n if (src) {\n const preSrc = elImage.getAttribute('src');\n if (preSrc !== src) elImage.setAttribute('src', src);\n }\n elImage.onload = () => {\n if (src) {\n this._setCallback(elImage, 'loaded', callback);\n }\n };\n elImage.onerror = () => {\n // Fix onload trigger twice, clear onload event\n // Reload on update\n elImage.onload = null;\n this._setCallback(elImage, 'error', callback);\n this._realObserver(elImage)?.disconnect();\n if (error) {\n const newImageSrc = elImage.getAttribute('src');\n if (newImageSrc !== error) elImage.setAttribute('src', error);\n }\n this._log(() => {\n throw new Error(`Image failed to load!And failed src was: ${src} `);\n });\n };\n }\n } else {\n el.style.backgroundImage = `url('${src}')`;\n }\n }\n private _setCallback(\n el: HTMLElement,\n type: 'loading' | 'loaded' | 'error',\n callback?: LazyOptionInfo['callback'],\n ): void {\n el?.setAttribute('lazy', type);\n switch (type) {\n case 'loading':\n if (callback?.loading) callback.loading(el);\n break;\n case 'loaded':\n if (callback?.loaded) callback.loaded(el);\n break;\n case 'error':\n if (callback?.error) callback.error(el);\n break;\n default:\n break;\n }\n }\n private _realObserver(el: HTMLElement) {\n return this._images.get(el);\n }\n private _checkIntersectionObserver(): boolean {\n const inBrowser = typeof window !== 'undefined' && window !== null;\n if (\n inBrowser &&\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype\n ) {\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n try {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get() {\n return this.intersectionRatio > 0;\n },\n });\n } catch (e) {\n // CSP 限制或原型冻结时降级:调用方自行用 intersectionRatio > 0 判断\n return false;\n }\n }\n return true;\n }\n return false;\n }\n private _initIntersectionObserver(\n el: HTMLElement,\n src: string,\n error?: string,\n callback?: any,\n delay?: number,\n ): void {\n const observerOptions = this.options.observerOptions;\n this._images.set(\n el,\n new IntersectionObserver(entries => {\n Array.prototype.forEach.call(entries, entry => {\n if (delay && delay > 0)\n this._delayedIntersectionCallback(el, entry, delay, src, error, callback);\n else this._intersectionCallback(el, entry, src, error, callback);\n });\n }, observerOptions),\n );\n this._realObserver(el)?.observe(el);\n }\n private _intersectionCallback(\n el: HTMLElement,\n entry: IntersectionObserverEntry,\n src: string,\n error?: string,\n callback?: any,\n ): void {\n if (entry.isIntersecting) {\n this._realObserver(el)?.unobserve(entry.target);\n this._setImageSrc(el, src, error, callback);\n }\n }\n\n private _delayedIntersectionCallback(\n el: HTMLElement,\n entry: IntersectionObserverEntry,\n delay: number,\n src: string,\n error?: string,\n callback?: any,\n ): void {\n if (entry.isIntersecting) {\n if (entry.target.hasAttribute(defOption.attr.timeOutId)) return;\n\n const timeoutId = setTimeout(() => {\n this._intersectionCallback(el, entry, src, error, callback);\n entry.target.removeAttribute(defOption.attr.timeOutId);\n }, delay);\n entry.target.setAttribute(defOption.attr.timeOutId, String(timeoutId));\n } else {\n if (entry.target.hasAttribute(defOption.attr.timeOutId)) {\n clearTimeout(Number(entry.target.getAttribute(defOption.attr.timeOutId)));\n entry.target.removeAttribute(defOption.attr.timeOutId);\n }\n }\n }\n private _log(callback: () => void): void {\n if (this.options.log) callback();\n }\n}\nexport default Lazy;\n","import { onMounted, onUnmounted, nextTick, watch, Ref } from 'vue';\nimport Lazy from './lazy';\nimport { LazyOptionInfo } from './interfaceItem';\n\nexport const useLazyload = (\n refEl: Ref<HTMLElement | null>,\n src: Ref<string>,\n options?: LazyOptionInfo,\n) => {\n const lazy = new Lazy(options);\n onMounted(() => {\n nextTick(() => {\n if (refEl.value) {\n lazy.mount(refEl.value, src);\n }\n });\n });\n onUnmounted(() => {\n if (refEl.value) {\n lazy.unmount(refEl.value);\n }\n });\n watch(src, (newVal: string) => {\n if (refEl.value) {\n lazy.update(refEl.value, newVal);\n }\n });\n};\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n :style=\"styParent\"\n >\n <img\n ref=\"refElImage\"\n :alt=\"optAlt\"\n :style=\"styImg\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { useLazyload } from '../LazyImage/use';\nimport './Index.css';\n\n// defineOptions\ndefineOptions({\n name: 'ClImage',\n});\n\n// props\nconst props = defineProps<{\n id?: string; // desc: 自定义id\n className?: string; // desc: 自定义CSS类名\n src: string; // desc: 图片地址\n alt?: string; // desc: 图片替代文本\n height?: string; // desc: 图片高度\n width?: string; // desc: 图片宽度\n isCircle?: boolean; // desc: 是否圆形展示\n fit?: string; // desc: 图片填充方式 | enum: fill, contain, cover, none, scale-down(可自定义)\n isCrossOrigin?: boolean; // desc: 是否跨域加载\n}>();\n\n// emit\nconst emit = defineEmits<{\n (e: 'onInit'): void; // desc: 图片加载完成时触发(成功或失败均触发)\n}>();\n\n// 常量 / 变量定义\nconst optSrcUrl = ref(CommonBase.isNonEmptyString(props.src) ? props.src : '');\nconst refElImage = ref<HTMLImageElement | null>(null);\n\nconst optAlt = computed(() => (CommonBase.isNonEmptyString(props.alt) ? props.alt : ''));\n\n// elId _elId_image\nconst elId = props.id; // || `_elId_image_${CommonBase.getRandom(5)}`;\n\nuseLazyload(refElImage, optSrcUrl, {\n callback: {\n loaded: () => {\n _emitInit();\n },\n error: () => {\n _emitInit();\n },\n },\n isCrossOrigin: props.isCrossOrigin,\n});\n\n// computed\nconst clsParent = computed(() => {\n let cls: Record<string, boolean> = {\n 'panel-imageBox': true,\n 'imageBox-circle': props.isCircle,\n };\n cls = CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n return cls;\n});\n\nconst styParent = computed(() => {\n const { width, height } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n return sty;\n});\n\nconst styImg = computed(() => {\n const { width, height, fit } = props;\n const sty: Record<string, string> = {};\n if (CommonBase.isNonEmptyString(fit)) {\n sty['object-fit'] = fit;\n if (CommonBase.isNonEmptyString(width)) {\n sty.width = width;\n }\n if (CommonBase.isNonEmptyString(height)) {\n sty.height = height;\n }\n }\n return sty;\n});\n\n// emit包装\nfunction _emitInit() {\n emit('onInit');\n}\n\n// watch\nwatch(\n () => props.src,\n newValue => {\n optSrcUrl.value = CommonBase.isNonEmptyString(newValue) ? newValue : '';\n },\n);\n</script>\n"],"names":["defOption","Lazy","options","CommonBase","value","el","src","loading","error","callback","delay","binding","img","elImage","type","observerOptions","entries","entry","timeoutId","useLazyload","refEl","lazy","onMounted","nextTick","onUnmounted","watch","newVal","props","__props","emit","__emit","optSrcUrl","ref","refElImage","optAlt","computed","elId","_emitInit","clsParent","cls","CommonElement","styParent","width","height","sty","styImg","fit","newValue","_createElementBlock","_unref","_createElementVNode"],"mappings":"qGAEMA,EAAY,CAChB,QACE,67EACF,MACE,6gEACF,KAAM,CACJ,UAAW,sBAAA,CAGf,EACA,MAAMC,CAAK,CACF,QAA0B,CAC/B,QAASD,EAAU,QACnB,MAAOA,EAAU,MACjB,gBAAiB,CACf,WAAY,MACZ,UAAW,CAAA,EAEb,IAAK,GACL,SAAU,CAAA,CAAC,EAEL,YAAc,QACtB,YAAYE,EAA0B,CACpC,KAAK,OAAOA,CAAO,CACrB,CACO,OAAOA,EAAU,GAAU,CAChC,KAAK,QAAUC,EAAAA,WAAW,iBAAiB,KAAK,QAASD,CAAO,CAClE,CACQ,WAAWE,EAAYC,EAAS,CACtC,IAAIC,EAAM,GACNC,EAAU,KAAK,QAAQ,QACvBC,EAAQ,KAAK,QAAQ,MACrBC,EAAW,KAAK,QAAQ,SACxBC,EAAQ,KAAK,QAAQ,MACzB,OAAIP,EAAAA,WAAW,SAASC,CAAK,GAC3BE,EAAMF,EAAM,IACZG,EAAWJ,EAAAA,WAAW,YAAYC,EAAM,OAAO,EAAoB,KAAK,QAAQ,QAA7BA,EAAM,QACzDI,EAASL,EAAAA,WAAW,YAAYC,EAAM,KAAK,EAAkB,KAAK,QAAQ,MAA3BA,EAAM,MACrDK,EAAYN,EAAAA,WAAW,YAAYC,EAAM,QAAQ,EAAqB,KAAK,QAAQ,SAA9BA,EAAM,SAC3DM,EAASP,EAAAA,WAAW,YAAYC,EAAM,KAAK,EAAkB,KAAK,QAAQ,MAA3BA,EAAM,OAC5CD,EAAAA,WAAW,SAASC,CAAK,EAClCE,EAAMF,EACGD,EAAAA,WAAW,YAAYC,CAAK,IACrCE,EAAOD,GAAMA,EAAG,KAAQ,IAEnB,CACL,IAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,CAAA,CAEJ,CACO,MAAML,EAAiBM,EAAoB,CAChD,GAAIR,EAAAA,WAAW,YAAYE,CAAE,EAAG,OAChC,MAAMD,EAAQD,EAAAA,WAAW,SAASQ,CAAO,EAAIA,EAAUA,EAAQ,MACzD,CAAE,IAAAL,EAAK,QAAAC,EAAS,MAAAC,EAAO,SAAAC,EAAU,MAAAC,GAAU,KAAK,WAAWN,EAAOC,CAAE,EAG1E,GAFA,KAAK,aAAaA,EAAI,UAAWI,CAAQ,EACzCJ,EAAG,aAAa,MAAOE,GAAWP,EAAU,OAAO,EAC/C,CAAC,KAAK,6BAA8B,CACtC,KAAK,aAAaK,EAAIC,EAAKE,EAAOC,CAAQ,EAC1C,KAAK,KAAK,IAAM,CACd,MAAM,IAAI,MAAM,mCAAmC,CACrD,CAAC,EACD,MACF,CACA,KAAK,0BAA0BJ,EAAIC,EAAKE,EAAOC,EAAUC,CAAK,CAChE,CACO,OAAOL,EAAiBM,EAAoB,CACjD,GAAIR,EAAAA,WAAW,YAAYE,CAAE,EAAG,OAChC,KAAK,cAAcA,CAAE,GAAG,UAAUA,CAAE,EAChCA,EAAG,aAAaL,EAAU,KAAK,SAAS,IAC1C,aAAa,OAAOK,EAAG,aAAaL,EAAU,KAAK,SAAS,CAAC,CAAC,EAC9DK,EAAG,gBAAgBL,EAAU,KAAK,SAAS,GAE7C,MAAMI,EAAQD,EAAAA,WAAW,SAASQ,CAAO,EAAIA,EAAUA,EAAQ,MACzD,CAAE,IAAAL,EAAK,MAAAE,EAAO,SAAAC,EAAU,MAAAC,GAAU,KAAK,WAAWN,EAAOC,CAAE,EACjE,KAAK,0BAA0BA,EAAIC,EAAKE,EAAOC,EAAUC,CAAK,CAChE,CACO,QAAQL,EAAuB,CACpC,GAAIF,CAAAA,EAAAA,WAAW,YAAYE,CAAE,EAO7B,IANA,KAAK,cAAcA,CAAE,GAAG,UAAUA,CAAE,EAChCA,EAAG,aAAaL,EAAU,KAAK,SAAS,IAC1C,aAAa,OAAOK,EAAG,aAAaL,EAAU,KAAK,SAAS,CAAC,CAAC,EAC9DK,EAAG,gBAAgBL,EAAU,KAAK,SAAS,GAGzCK,EAAG,QAAQ,YAAA,IAAkB,MAAO,CACtC,MAAMO,EAAMP,EACZO,EAAI,OAAS,KACbA,EAAI,QAAU,IAChB,CACA,KAAK,QAAQ,OAAOP,CAAE,EACxB,CAEQ,aAAaA,EAAiBC,EAAaE,EAAgBC,EAAsB,CACvF,GAAIJ,EAAG,QAAQ,YAAA,IAAkB,MAAO,CACtC,MAAMQ,EAAUR,EACZF,EAAAA,WAAW,QAAQG,CAAG,GACxBO,EAAQ,OAAS,KACjB,KAAK,aAAaA,EAAS,QAASJ,CAAQ,EAC5C,KAAK,cAAcI,CAAO,GAAG,WAAA,EACzBL,EACFK,EAAQ,aAAa,MAAOL,CAAK,EAEjCK,EAAQ,gBAAgB,KAAK,IAG3B,KAAK,QAAQ,gBACfA,EAAQ,YAAc,aAEpBP,GACaO,EAAQ,aAAa,KAAK,IAC1BP,GAAKO,EAAQ,aAAa,MAAOP,CAAG,EAErDO,EAAQ,OAAS,IAAM,CACjBP,GACF,KAAK,aAAaO,EAAS,SAAUJ,CAAQ,CAEjD,EACAI,EAAQ,QAAU,IAAM,CAGtBA,EAAQ,OAAS,KACjB,KAAK,aAAaA,EAAS,QAASJ,CAAQ,EAC5C,KAAK,cAAcI,CAAO,GAAG,WAAA,EACzBL,GACkBK,EAAQ,aAAa,KAAK,IAC1BL,GAAOK,EAAQ,aAAa,MAAOL,CAAK,EAE9D,KAAK,KAAK,IAAM,CACd,MAAM,IAAI,MAAM,4CAA4CF,CAAG,GAAG,CACpE,CAAC,CACH,EAEJ,MACED,EAAG,MAAM,gBAAkB,QAAQC,CAAG,IAE1C,CACQ,aACND,EACAS,EACAL,EACM,CAEN,OADAJ,GAAI,aAAa,OAAQS,CAAI,EACrBA,EAAA,CACN,IAAK,UACCL,GAAU,SAASA,EAAS,QAAQJ,CAAE,EAC1C,MACF,IAAK,SACCI,GAAU,QAAQA,EAAS,OAAOJ,CAAE,EACxC,MACF,IAAK,QACCI,GAAU,OAAOA,EAAS,MAAMJ,CAAE,EACtC,KAEA,CAEN,CACQ,cAAcA,EAAiB,CACrC,OAAO,KAAK,QAAQ,IAAIA,CAAE,CAC5B,CACQ,4BAAsC,CAE5C,GADkB,OAAO,OAAW,KAAe,SAAW,MAG5D,yBAA0B,QAC1B,8BAA+B,QAC/B,sBAAuB,OAAO,0BAA0B,UACxD,CACA,GAAI,EAAE,mBAAoB,OAAO,0BAA0B,WACzD,GAAI,CACF,OAAO,eAAe,OAAO,0BAA0B,UAAW,iBAAkB,CAClF,KAAM,CACJ,OAAO,KAAK,kBAAoB,CAClC,CAAA,CACD,CACH,MAAY,CAEV,MAAO,EACT,CAEF,MAAO,EACT,CACA,MAAO,EACT,CACQ,0BACNA,EACAC,EACAE,EACAC,EACAC,EACM,CACN,MAAMK,EAAkB,KAAK,QAAQ,gBACrC,KAAK,QAAQ,IACXV,EACA,IAAI,qBAAqBW,GAAW,CAClC,MAAM,UAAU,QAAQ,KAAKA,EAASC,GAAS,CACzCP,GAASA,EAAQ,EACnB,KAAK,6BAA6BL,EAAIY,EAAOP,EAAOJ,EAAKE,EAAOC,CAAQ,OAChE,sBAAsBJ,EAAIY,EAAOX,EAAKE,EAAOC,CAAQ,CACjE,CAAC,CACH,EAAGM,CAAe,CAAA,EAEpB,KAAK,cAAcV,CAAE,GAAG,QAAQA,CAAE,CACpC,CACQ,sBACNA,EACAY,EACAX,EACAE,EACAC,EACM,CACFQ,EAAM,iBACR,KAAK,cAAcZ,CAAE,GAAG,UAAUY,EAAM,MAAM,EAC9C,KAAK,aAAaZ,EAAIC,EAAKE,EAAOC,CAAQ,EAE9C,CAEQ,6BACNJ,EACAY,EACAP,EACAJ,EACAE,EACAC,EACM,CACN,GAAIQ,EAAM,eAAgB,CACxB,GAAIA,EAAM,OAAO,aAAajB,EAAU,KAAK,SAAS,EAAG,OAEzD,MAAMkB,EAAY,WAAW,IAAM,CACjC,KAAK,sBAAsBb,EAAIY,EAAOX,EAAKE,EAAOC,CAAQ,EAC1DQ,EAAM,OAAO,gBAAgBjB,EAAU,KAAK,SAAS,CACvD,EAAGU,CAAK,EACRO,EAAM,OAAO,aAAajB,EAAU,KAAK,UAAW,OAAOkB,CAAS,CAAC,CACvE,MACMD,EAAM,OAAO,aAAajB,EAAU,KAAK,SAAS,IACpD,aAAa,OAAOiB,EAAM,OAAO,aAAajB,EAAU,KAAK,SAAS,CAAC,CAAC,EACxEiB,EAAM,OAAO,gBAAgBjB,EAAU,KAAK,SAAS,EAG3D,CACQ,KAAKS,EAA4B,CACnC,KAAK,QAAQ,KAAKA,EAAA,CACxB,CACF,CCnPO,MAAMU,EAAc,CACzBC,EACAd,EACAJ,IACG,CACH,MAAMmB,EAAO,IAAIpB,EAAKC,CAAO,EAC7BoB,EAAAA,UAAU,IAAM,CACdC,EAAAA,SAAS,IAAM,CACTH,EAAM,OACRC,EAAK,MAAMD,EAAM,MAAOd,CAAG,CAE/B,CAAC,CACH,CAAC,EACDkB,EAAAA,YAAY,IAAM,CACZJ,EAAM,OACRC,EAAK,QAAQD,EAAM,KAAK,CAE5B,CAAC,EACDK,QAAMnB,EAAMoB,GAAmB,CACzBN,EAAM,OACRC,EAAK,OAAOD,EAAM,MAAOM,CAAM,CAEnC,CAAC,CACH,mOCAA,MAAMC,EAAQC,EAaRC,EAAOC,EAKPC,EAAYC,MAAI7B,EAAAA,WAAW,iBAAiBwB,EAAM,GAAG,EAAIA,EAAM,IAAM,EAAE,EACvEM,EAAaD,EAAAA,IAA6B,IAAI,EAE9CE,EAASC,EAAAA,SAAS,IAAOhC,EAAAA,WAAW,iBAAiBwB,EAAM,GAAG,EAAIA,EAAM,IAAM,EAAG,EAGjFS,EAAOT,EAAM,GAEnBR,EAAYc,EAAYF,EAAW,CACjC,SAAU,CACR,OAAQ,IAAM,CACZM,EAAA,CACF,EACA,MAAO,IAAM,CACXA,EAAA,CACF,CAAA,EAEF,cAAeV,EAAM,aAAA,CACtB,EAGD,MAAMW,EAAYH,EAAAA,SAAS,IAAM,CAC/B,IAAII,EAA+B,CACjC,iBAAkB,GAClB,kBAAmBZ,EAAM,QAAA,EAE3B,OAAAY,EAAMpC,EAAAA,WAAW,aAAaoC,EAAKC,EAAAA,cAAc,iBAAiBb,EAAM,SAAS,CAAC,EAC3EY,CACT,CAAC,EAEKE,EAAYN,EAAAA,SAAS,IAAM,CAC/B,KAAM,CAAE,MAAAO,EAAO,OAAAC,CAAA,EAAWhB,EACpBiB,EAA8B,CAAA,EACpC,OAAIzC,EAAAA,WAAW,iBAAiBuC,CAAK,IACnCE,EAAI,MAAQF,GAEVvC,EAAAA,WAAW,iBAAiBwC,CAAM,IACpCC,EAAI,OAASD,GAERC,CACT,CAAC,EAEKC,EAASV,EAAAA,SAAS,IAAM,CAC5B,KAAM,CAAE,MAAAO,EAAO,OAAAC,EAAQ,IAAAG,CAAA,EAAQnB,EACzBiB,EAA8B,CAAA,EACpC,OAAIzC,EAAAA,WAAW,iBAAiB2C,CAAG,IACjCF,EAAI,YAAY,EAAIE,EAChB3C,EAAAA,WAAW,iBAAiBuC,CAAK,IACnCE,EAAI,MAAQF,GAEVvC,EAAAA,WAAW,iBAAiBwC,CAAM,IACpCC,EAAI,OAASD,IAGVC,CACT,CAAC,EAGD,SAASP,GAAY,CACnBR,EAAK,QAAQ,CACf,CAGAJ,OAAAA,EAAAA,MACE,IAAME,EAAM,IACZoB,GAAY,CACVhB,EAAU,MAAQ5B,EAAAA,WAAW,iBAAiB4C,CAAQ,EAAIA,EAAW,EACvE,CAAA,wBA/GAC,EAAAA,mBAUM,MAAA,CATH,GAAIC,EAAAA,MAAAb,CAAA,EACJ,uBAAOE,EAAA,KAAS,EAChB,uBAAOG,EAAA,KAAS,CAAA,GAEjBS,EAAAA,mBAIE,MAAA,SAHI,aAAJ,IAAIjB,EACH,IAAKC,EAAA,MACL,uBAAOW,EAAA,KAAM,CAAA"}
|