@cldemo/ui-kit 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPONENT_CATALOG.md +2 -2
- package/buildLibs/all/index.cjs +2 -5
- package/buildLibs/all/index.css +1 -0
- package/buildLibs/all/index.js +82 -6
- package/buildLibs/mobile/index.cjs +2 -5
- package/buildLibs/mobile/index.css +1 -0
- package/buildLibs/mobile/index.js +50 -6
- package/buildLibs/utils/Element/ClBadge.d.ts +3 -0
- package/buildLibs/utils/Element/ClBreadcrumb.d.ts +3 -0
- package/buildLibs/utils/Element/ClButton.d.ts +3 -0
- package/buildLibs/utils/Element/ClCallout.d.ts +3 -0
- package/buildLibs/utils/Element/ClCard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCardColor.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckbox.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
- package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClCheckboxOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
- package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
- package/buildLibs/utils/Element/ClClipboard.d.ts +3 -0
- package/buildLibs/utils/Element/ClCollapse.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountDown.d.ts +3 -0
- package/buildLibs/utils/Element/ClCountUp.d.ts +3 -0
- package/buildLibs/utils/Element/ClCropper.d.ts +3 -0
- package/buildLibs/utils/Element/ClDarg.d.ts +3 -0
- package/buildLibs/utils/Element/ClDivider.d.ts +3 -0
- package/buildLibs/utils/Element/ClEllipsis.d.ts +3 -0
- package/buildLibs/utils/Element/ClEmpty.d.ts +3 -0
- package/buildLibs/utils/Element/ClForm.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormGroup.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
- package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
- package/buildLibs/utils/Element/ClFormValidate.d.ts +3 -0
- package/buildLibs/utils/Element/ClFormValidate.js +5 -0
- package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
- package/buildLibs/utils/Element/ClIconFont.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.cjs +1 -1
- package/buildLibs/utils/Element/ClImage.d.ts +3 -0
- package/buildLibs/utils/Element/ClImage.js +1 -1
- package/buildLibs/utils/Element/ClInput.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputCaptcha.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumber.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputNumberStepper.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputPassword.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputSearch.d.ts +3 -0
- package/buildLibs/utils/Element/ClInputTextarea.d.ts +3 -0
- package/buildLibs/utils/Element/ClLink.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoad.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
- package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadIng.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadIng.js +5 -0
- package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
- package/buildLibs/utils/Element/ClLoadScreen.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
- package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
- package/buildLibs/utils/Element/ClLoadWarp.d.ts +3 -0
- package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
- package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
- package/buildLibs/utils/Element/ClModal.d.ts +3 -0
- package/buildLibs/utils/Element/ClOverlay.d.ts +3 -0
- package/buildLibs/utils/Element/ClProgress.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadio.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
- package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
- package/buildLibs/utils/Element/ClRadioOne.d.ts +3 -0
- package/buildLibs/utils/Element/ClRadioOne.js +5 -0
- package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
- package/buildLibs/utils/Element/ClSlider.d.ts +3 -0
- package/buildLibs/utils/Element/ClSwitchery.d.ts +3 -0
- package/buildLibs/utils/Element/ClTags.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.d.ts +3 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
- package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
- package/buildLibs/utils/Element/ClWaterfall.d.ts +3 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
- package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
- package/buildLibs/utils/Element/ClWaterfallImage.d.ts +3 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
- package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
- package/buildLibs/utils/Mobile/ClActionBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClActionSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClAreaM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBackTop.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
- package/buildLibs/utils/Mobile/ClBanner.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClBanner.js +1 -1
- package/buildLibs/utils/Mobile/ClCalendarM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCell.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCellSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClCodeLegendM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
- package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
- package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
- package/buildLibs/utils/Mobile/ClFloatingBubble.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClFloatingPanel.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClGrid.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClHighlightM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClIndexBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClInputOtp.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNavBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNoticeBar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNotifyM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClNumberKeyboard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPicker.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPicker.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerCascader.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerDate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPickerTime.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
- package/buildLibs/utils/Mobile/ClPopup.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
- package/buildLibs/utils/Mobile/ClPullToRefresh.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
- package/buildLibs/utils/Mobile/ClRate.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
- package/buildLibs/utils/Mobile/ClScrollCard.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
- package/buildLibs/utils/Mobile/ClShareSheet.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSidebarSelect.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSignature.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSteps.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClSwipe.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabM.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClTabbar.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClToast.d.ts +3 -0
- package/buildLibs/utils/Mobile/ClWatermark.d.ts +3 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js.map → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js.map → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js.map → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js.map → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js.map → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js.map → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js.map → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js.map → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js.map → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map} +1 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js.map → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js.map → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js.map → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js.map → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js.map → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js.map → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js.map → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js.map → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js.map → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js} +2 -2
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js.map → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js.map → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js.map → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js} +1 -1
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js.map → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js.map} +1 -1
- package/buildLibs/utils/Shared/Index24.css +1 -1
- package/buildLibs/utils/Shared/Index25.css +1 -1
- package/buildLibs/utils/Shared/Index26.css +1 -1
- package/buildLibs/utils/Shared/Index27.css +1 -1
- package/buildLibs/utils/Shared/Index28.css +1 -1
- package/buildLibs/utils/Shared/Index29.css +1 -1
- package/buildLibs/utils/Shared/Index30.css +1 -1
- package/buildLibs/utils/Shared/Index31.css +1 -1
- package/buildLibs/utils/Shared/Index32.css +1 -1
- package/buildLibs/utils/Shared/Index33.css +1 -1
- package/buildLibs/utils/Shared/Index34.css +1 -1
- package/buildLibs/utils/Shared/Index35.css +1 -1
- package/buildLibs/utils/Shared/Index36.css +1 -1
- package/buildLibs/utils/Shared/Index37.css +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
- package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
- package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
- package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
- package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
- package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
- package/buildLibs/utils/Web/ClAnchorNav.d.ts +3 -0
- package/buildLibs/utils/Web/ClCalendar.d.ts +3 -0
- package/buildLibs/utils/Web/ClCodeLegend.d.ts +3 -0
- package/buildLibs/utils/Web/ClColorpicker.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
- package/buildLibs/utils/Web/ClCropperPreview.d.ts +3 -0
- package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
- package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
- package/buildLibs/utils/Web/ClDatetime.d.ts +3 -0
- package/buildLibs/utils/Web/ClDatetime.js +1 -1
- package/buildLibs/utils/Web/ClDropdownMenu.d.ts +3 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.d.ts +3 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
- package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
- package/buildLibs/utils/Web/ClDropdownPopup.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
- package/buildLibs/utils/Web/ClEcharts.d.ts +3 -0
- package/buildLibs/utils/Web/ClEcharts.js +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
- package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
- package/buildLibs/utils/Web/ClFileUpload.d.ts +3 -0
- package/buildLibs/utils/Web/ClFileUpload.js +1 -1
- package/buildLibs/utils/Web/ClFramePhone.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
- package/buildLibs/utils/Web/ClInputTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClInputTag.js +1 -1
- package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
- package/buildLibs/utils/Web/ClPaginate.d.ts +3 -0
- package/buildLibs/utils/Web/ClPaginate.js +1 -1
- package/buildLibs/utils/Web/ClPortlet.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
- package/buildLibs/utils/Web/ClPreviewExample.d.ts +3 -0
- package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
- package/buildLibs/utils/Web/ClScrollXFence.d.ts +3 -0
- package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
- package/buildLibs/utils/Web/ClSelect.cjs +1 -1
- package/buildLibs/utils/Web/ClSelect.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelect.js +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectCascade.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
- package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTag.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTag.js +1 -1
- package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
- package/buildLibs/utils/Web/ClSelectTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClSelectTree.js +1 -1
- package/buildLibs/utils/Web/ClSelectmove.d.ts +3 -0
- package/buildLibs/utils/Web/ClSidemenu.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.cjs +1 -1
- package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClTable.d.ts +3 -0
- package/buildLibs/utils/Web/ClTable.js +1081 -1218
- package/buildLibs/utils/Web/ClTable.js.map +1 -1
- package/buildLibs/utils/Web/ClTableEdit.d.ts +3 -0
- package/buildLibs/utils/Web/ClTableSimple.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.cjs +1 -1
- package/buildLibs/utils/Web/ClTabs.d.ts +3 -0
- package/buildLibs/utils/Web/ClTabs.js +1 -1
- package/buildLibs/utils/Web/ClTree.cjs +1 -1
- package/buildLibs/utils/Web/ClTree.d.ts +3 -0
- package/buildLibs/utils/Web/ClTree.js +1 -1
- package/buildLibs/utils/Web/ClWeekhour.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
- package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
- package/buildLibs/utils/Web/ClXeditable.d.ts +3 -0
- package/buildLibs/utils/Web/ClXeditable.js +33 -32
- package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
- package/buildLibs/web/index.cjs +2 -5
- package/buildLibs/web/index.css +1 -0
- package/buildLibs/web/index.js +76 -6
- package/docs/components/Element/Input.md +1 -1
- package/docs/components/Element/InputNumber.md +1 -1
- package/package.json +21 -8
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
- package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
- package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
- package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
- package/buildLibs/utils/Shared/Video.css +0 -1
- package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
- package/buildLibs/utils/Web/ClPreview.cjs +0 -2
- package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
- package/buildLibs/utils/Web/ClPreview.css +0 -1
- package/buildLibs/utils/Web/ClPreview.js +0 -353
- package/buildLibs/utils/Web/ClPreview.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClTable.js","sources":["../../../src/libs/Web/Table/TipIcon.ts","../../../src/libs/Web/Table/Th.vue","../../../src/libs/Web/Table/Td.vue","../../../src/libs/Web/Table/Head.vue","../../../src/libs/Element/Radio/One.vue","../../../src/libs/Web/Table/TdChecked.vue","../../../src/libs/Web/Table/Body.vue","../../../src/libs/Web/Table/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\n\nexport interface TipIconInfo {\n name: string;\n className: string;\n}\n\n// 解析 tipIcon 配置为图标渲染信息:\n// clIcon- 前缀 → 内置图标通道(前缀后非纯图标名回退默认);clicon 大小写错误回退默认;\n// 裸内置图标名自动补前缀走内置通道;其余按第三方自定义类名处理\nexport const getTipIconInfo = (tipIcon: string | undefined): TipIconInfo => {\n if (CommonBase.isNonEmptyString(tipIcon)) {\n if (tipIcon.indexOf('clIcon-') === 0) {\n // clIcon- 前缀:去前缀走内置图标通道,前缀后非纯图标名(含空格等)回退默认\n const name = tipIcon.substring('clIcon-'.length);\n if (CommonBase.isNonEmptyString(name) && /^[a-zA-Z0-9-]+$/.test(name)) {\n return { name, className: '' };\n }\n return { name: 'question-circle', className: '' };\n }\n if (/^clicon/i.test(tipIcon)) {\n // clIcon- 前缀写错(漏 -、大写):回退默认图标\n return { name: 'question-circle', className: '' };\n }\n if (/^[a-zA-Z0-9-]+$/.test(tipIcon)) {\n // 裸内置图标名(未加 clIcon- 前缀):自动补前缀走内置通道\n return { name: tipIcon, className: '' };\n }\n // 第三方自定义类名(如 fa fa-star)\n return { name: '', className: tipIcon };\n }\n return { name: 'question-circle', className: '' };\n};\n","<template>\n <th\n v-if=\"CommonBase.isBoolean(thInfo?.visible) ? thInfo.visible : true\"\n :class=\"clsTh\"\n :style=\"styTh\"\n scope=\"col\"\n :aria-sort=\"optAriaSort\"\n >\n <span\n class=\"th-title\"\n @click=\"onClickOrderBy\"\n >\n <slot />\n </span>\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(thInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"th-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: thInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n <i\n v-if=\"optSortType !== ''\"\n class=\"tr-sort-icon\"\n aria-hidden=\"true\"\n @click=\"onClickOrderBy\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTh',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n thIndex: {\n type: Number,\n default: 0, // desc: 表头单元格索引\n },\n thInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 表头配置信息\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickOrderBy: (_thInfo: ColumnsInfo, _thIndex: number, _sortType: string) => true, // desc: 点击排序事件\n});\n\n// slots: default 表头内容\n\nconst optTipIcon = computed(() => getTipIconInfo(props.thInfo?.tipIcon));\n\n// thInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象;\n// 非对象 truthy 输入(字符串/数字)同样归一为 {}——原始类型取 .sort/.width 等属性语义异常(空表头误判可排序);\n// 数组是 isObject=true 但语义上非列配置,保持透传不归一(.sort 命中原生数组方法不崩溃,仅属性访问 undefined)\nconst optThInfo = computed(() =>\n CommonBase.isObject(props.thInfo) && !CommonBase.isEmpty(props.thInfo)\n ? (props.thInfo as ColumnsInfo)\n : ({} as ColumnsInfo),\n);\n\n// 当前列可排序判定(isOrder 且该列 sort 未显式禁用;空 sort 视为 true 默认可排)。\n// 不受 disabled 影响:disabled 仍保留排序图标与激活态展示,仅拦截交互(见 optSortInteractive)\nconst optSortable = computed(() => {\n if (!props.isOrder) {\n return false;\n }\n // columns 含 null/空对象项(配置错误输入)时前置返回 false:空表头不渲染排序交互,\n // 与 Index._analysisColumns/_initOrderData 跳过 null 列的口径对齐(否则点击空表头激活别的列)\n // 守卫用归一后的 optThInfo(非对象 truthy 归一为 {} 后同样拦截,与判定谓词一致)\n if (CommonBase.isEmpty(optThInfo.value)) {\n return false;\n }\n return CommonBase.isEmpty(optThInfo.value.sort) ? true : optThInfo.value.sort === true;\n});\n\n// 当前列是否允许排序交互:具备排序能力且组件未禁用(disabled 时拦截点击)\nconst optSortInteractive = computed(() => optSortable.value && !props.disabled);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.thInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\n// 当前列排序状态:'asc' | 'desc'(激活排序)| 'none'(可排未激活)| ''(不可排)\nconst optSortType = computed(() => {\n if (!optSortable.value) {\n return '';\n }\n const orderSort = CommonBase.isEmpty(props.orderSort) ? [] : props.orderSort;\n if (orderSort.length > 0 && orderSort[0] === props.thIndex) {\n // length===1(仅索引未选方向)→ 默认 desc 激活;length===2 但方向非法 / length>2 畸形元组 → 不静默激活,返回 'none'\n return orderSort.length === 2\n ? orderSort[1] === 'asc' || orderSort[1] === 'desc'\n ? orderSort[1]\n : 'none'\n : orderSort.length === 1\n ? 'desc'\n : 'none';\n }\n return 'none';\n});\n\nconst optAriaSort = computed(() => {\n if (optSortType.value === 'asc') {\n return 'ascending';\n }\n if (optSortType.value === 'desc') {\n return 'descending';\n }\n if (optSortType.value === 'none') {\n return 'none';\n }\n return undefined;\n});\n\nconst clsTh = computed(() => {\n const cls: Record<string, boolean> = {};\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n cls[`${props.widthClassPrefix}${thInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${thInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['th-hidden'] =\n (props.fixedLeftIndex > -1 && props.thIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.thIndex < props.fixedRightIndex);\n }\n if (optSortable.value) {\n cls['th-sort'] = true;\n cls['sort-none'] = true;\n cls['th-sort-near'] = thInfo.sortNear === true;\n // 激活列判定已收敛至 optSortType(asc/desc 当且仅当 orderSort[0] === thIndex),激活时覆盖 sort-none\n const activeSort = optSortType.value;\n if (activeSort === 'asc' || activeSort === 'desc') {\n cls[`sort-${activeSort}`] = true;\n cls['sort-none'] = false;\n }\n }\n if (CommonBase.isNonEmptyString(thInfo.tipMsg)) {\n cls['th-tip'] = true;\n cls['th-tip-sideAlign'] = thInfo.tipSideAlign === true;\n }\n if (props.disabled) {\n cls['th-disabled'] = true;\n }\n if (CommonBase.isNonEmptyString(thInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], thInfo.textAlign)) {\n cls[`text-${thInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.className));\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.classTh));\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTh = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n sty.width = CommonBase.isFinite(Number(thInfo.width))\n ? `${Number(thInfo.width)}px`\n : `${thInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(thInfo.widthMin))\n ? `${Number(thInfo.widthMin)}px`\n : `${thInfo.widthMin}`;\n }\n return sty;\n});\n\nconst _emitClickOrderBy = (thInfo: ColumnsInfo, sortType: string) => {\n emit('onClickOrderBy', thInfo, props.thIndex, sortType);\n};\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n\nconst onClickOrderBy = () => {\n // disabled 时拦截排序(optSortInteractive=false),但保留排序图标展示\n if (optSortInteractive.value) {\n // 未激活('none')默认 desc,已激活翻转(orderSort 解析已收敛至 optSortType)\n const newSortType = optSortType.value === 'desc' ? 'asc' : 'desc';\n _emitClickOrderBy(optThInfo.value, newSortType);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"CommonBase.isBoolean(tdInfo?.visible) ? tdInfo.visible : true\"\n :class=\"clsTd\"\n :style=\"styTd\"\n >\n <slot />\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(tdInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"td-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: tdInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTd',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n tdIndex: {\n type: Number,\n default: 0, // desc: 单元格索引\n },\n tdInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 单元格配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n useType: {\n type: String,\n default: 'td', // desc: 使用类型 | enum: td, total\n validator: (value: string) => ['td', 'total'].indexOf(value) > -1,\n },\n});\n\n// slots: default 默认单元格内容\n\n// 提示图标:与 Th 侧同构,抽取至 TipIcon.ts 统一维护\nconst optTipIcon = computed(() => getTipIconInfo(props.tdInfo?.tipIcon));\n\n// tdInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象\nconst optTdInfo = computed(() =>\n CommonBase.isEmpty(props.tdInfo) ? ({} as ColumnsInfo) : props.tdInfo,\n);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.tdInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\nconst clsTd = computed(() => {\n const cls: Record<string, boolean> = {};\n const tdInfo = optTdInfo.value;\n\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n cls[`${props.widthClassPrefix}${tdInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${tdInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['td-hidden'] =\n (props.fixedLeftIndex > -1 && props.tdIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.tdIndex < props.fixedRightIndex);\n }\n if (props.isOrder) {\n const sort = CommonBase.isEmpty(tdInfo.sort) ? true : tdInfo.sort === true;\n if (sort) {\n cls['td-sort'] = true;\n cls['td-sort-near'] = tdInfo.sortNear === true;\n }\n }\n if (CommonBase.isNonEmptyString(tdInfo.tipMsg)) {\n cls['td-tip'] = true;\n cls['td-tip-sideAlign'] = tdInfo.tipSideAlign === true;\n }\n if (CommonBase.isNonEmptyString(tdInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], tdInfo.textAlign)) {\n cls[`text-${tdInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.className));\n if (props.useType === 'td') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTd));\n } else if (props.useType === 'total') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTotal));\n }\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTd = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const tdInfo = optTdInfo.value;\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n sty.width = CommonBase.isFinite(Number(tdInfo.width))\n ? `${Number(tdInfo.width)}px`\n : `${tdInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(tdInfo.widthMin))\n ? `${Number(tdInfo.widthMin)}px`\n : `${tdInfo.widthMin}`;\n }\n return sty;\n});\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n</script>\n","<template>\n <table\n :class=\"clsParent\"\n :style=\"styTable\"\n :aria-hidden=\"!CommonBase.isEmpty(fixedType)\"\n ref=\"refElTable\"\n >\n <thead>\n <tr>\n <th\n v-if=\"isShowRadio || isShowCheckbox\"\n :class=\"{ 'th-rc': true, 'th-hidden': fixedRightIndex > -1 }\"\n scope=\"col\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox && isShowCheckboxAll\"\n :forId=\"\n CommonBase.isNonEmptyString(keyIndex) ? `${keyIndex}_${fixedType}_cb_all` : undefined\n \"\n :value=\"checkboxAllValue\"\n :disabled=\"disabled\"\n @onChange=\"onSelectAll\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n <template\n v-for=\"(thInfo, thIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_head_th_${thIndex}`\"\n >\n <cl-table-th\n :thInfo=\"thInfo\"\n :thIndex=\"thIndex\"\n :isOrder=\"isOrder\"\n :disabled=\"disabled\"\n :orderSort=\"orderSort\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickOrderBy=\"onClickOrderBy\"\n >\n <template v-slot>\n <slot\n :name=\"`th_${thInfo?.data ?? ''}`\"\n :data=\"thInfo\"\n >\n <span>{{ optFunGetThValue(thInfo) }}</span>\n </slot>\n </template>\n </cl-table-th>\n </template>\n </tr>\n </thead>\n <tbody v-if=\"isShowTotal\">\n <tr\n :class=\"{\n 'tr-total': true,\n 'tr-hover': hoverIndex === NO_HOVER_TOTAL_INDEX,\n }\"\n @mouseenter=\"onHoverInTotal\"\n @mouseleave=\"onHoverOutTotal\"\n >\n <td v-if=\"isShowRadio || isShowCheckbox\" />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_total_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n useType=\"total\"\n >\n <template v-slot>\n <slot\n :name=\"`total_${tdInfo?.data ?? ''}`\"\n :data=\"totalInfo\"\n >{{ optFunGetTotalValue(totalInfo, tdInfo) }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </tbody>\n <template v-else></template>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClTableTh from './Th.vue';\nimport ClTableTd from './Td.vue';\nimport type { ColumnsInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableHead' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isShowTotal: {\n type: Boolean,\n default: false, // desc: 是否显示总计行\n },\n totalInfo: {\n type: Object as () => Record<string, any>,\n default: () => ({}), // desc: 总计数据信息\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引(99999999 = 总计行悬停哨兵,与 NO_HOVER_TOTAL_INDEX 契约一致)\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n checkboxAllValue: {\n type: Boolean,\n default: false, // desc: 全选状态\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right\n validator: (value: string) => ['', 'left', 'right'].indexOf(value) > -1,\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickAll: () => true, // desc: 点击全选事件\n onClickOrderBy: (_info: ColumnsInfo, _inx: number, _sortType: string) => true, // desc: 点击排序事件\n onHoverIn: (_index: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: th_{data} 列头自定义内容 | total_{data} 总计行单元格自定义内容\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n// 总计行悬停哨兵索引,与 Index 侧 hoverIndex 的隐式契约值(99999999 永不等于数据行索引)\nconst NO_HOVER_TOTAL_INDEX = 99999999;\n\nconst clsParent = computed(() => {\n const cls = {\n 'table-default': true,\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (CommonBase.isEmpty(props.fixedType)) {\n // fixedType isEmpty 判空:null/空串归非固定分支(外部传 null 时原 .length 写法崩溃)\n if (\n props.isUseScrollX &&\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式(对齐 Body 侧 styTable 口径)\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst optFunGetThValue = (info: ColumnsInfo | null) => {\n if (!info) {\n return '';\n }\n return CommonBase.isUndefined(info.title)\n ? CommonBase.isUndefined(info.data)\n ? ''\n : info.data\n : info.title;\n};\n\nconst optFunGetTdValue = (value: any, opt: ColumnsInfo | null) => {\n if (CommonBase.isUndefined(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// totalInfo 显式传 null 时守卫(type: Object 的 prop 校验放行 null,模板内直接取字段会崩溃;isUndefined 已覆盖 null)\nconst optFunGetTotalValue = (info: Record<string, any> | null, opt: ColumnsInfo | null) => {\n if (!info || !opt) {\n return '';\n }\n return optFunGetTdValue(info[opt.data], opt);\n};\n\n// isShowTotal 翻转 false 时总计行被 v-if 直接从 DOM 移除,浏览器对移除悬停中元素不保证补发 mouseleave\n// → watch 兜底主动重置悬停态。hoverIndex === NO_HOVER_TOTAL_INDEX 前置:仅总计行悬停哨兵残留时才补发,\n// 数据行悬停中翻转(如父组件单独清空 totalData)不连带清除行高亮(Index 侧 onHoverOutTr 无条件重置\n// hoverTrIndex/hoverTrElasticIndex 两字段且幂等,重复触发无害)\nwatch(\n () => props.isShowTotal,\n nv => {\n if (!nv && props.hoverIndex === NO_HOVER_TOTAL_INDEX) {\n emit('onHoverOut');\n }\n },\n);\n\nconst onSelectAll = () => {\n emit('onClickAll');\n};\n\nconst onClickOrderBy = (info: ColumnsInfo, inx: number, sortType: string) => {\n emit('onClickOrderBy', info, inx, sortType);\n};\n\nconst onHoverInTotal = () => {\n emit('onHoverIn', NO_HOVER_TOTAL_INDEX);\n};\n\nconst onHoverOutTotal = () => {\n emit('onHoverOut');\n};\n\nconst getOffsetHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.offsetHeight;\n};\n\n// 读取全选/单选列宽度(主表头场景契约;固定副本的 rc 列含 th-hidden 时返回隐藏列布局宽度而非 0)\nconst getRcWidth = () => {\n let w = 0;\n if (props.isShowRadio || props.isShowCheckbox) {\n if (refElTable.value) {\n const elRc = refElTable.value.querySelector('.th-rc');\n if (elRc) {\n w = elRc.clientWidth;\n }\n }\n }\n return w;\n};\n\nconst getPaddingLr = () => {\n let totalPadding = 0;\n if (!refElTable.value) {\n return totalPadding;\n }\n const elThs = refElTable.value.querySelectorAll('th:not(.th-rc)');\n for (let ti = 0; ti < elThs.length; ti++) {\n const thStyle = CommonElement.getStyle(elThs[ti]);\n const plRaw = parseFloat(thStyle.paddingLeft);\n const prRaw = parseFloat(thStyle.paddingRight);\n const pl = CommonBase.isFinite(plRaw) ? plRaw : 0;\n const pr = CommonBase.isFinite(prRaw) ? prRaw : 0;\n totalPadding += pl + pr;\n }\n return totalPadding;\n};\n\nconst getElTh = () => {\n return refElTable.value ? refElTable.value.querySelectorAll('th') : [];\n};\n\nconst getTotalHeight = () => {\n let h = 0;\n if (props.isShowTotal) {\n if (refElTable.value) {\n const elTotal = refElTable.value.querySelector('.tr-total');\n if (elTotal) {\n h = elTotal.clientHeight;\n }\n }\n }\n return h;\n};\n\nexport interface ClTableHeadExpose {\n getOffsetHeight: () => number;\n getRcWidth: () => number;\n getPaddingLr: () => number;\n getElTh: () => NodeListOf<HTMLTableHeaderCellElement> | [];\n getTotalHeight: () => number;\n}\n\ndefineExpose({\n getOffsetHeight,\n getRcWidth,\n getPaddingLr,\n getElTh,\n getTotalHeight,\n});\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <span>\n <span>\n <input\n type=\"radio\"\n :id=\"optForId\"\n :name=\"name\"\n :checked=\"value\"\n :disabled=\"disabled\"\n @click=\"onClick\"\n />\n <label :for=\"optForId\">\n <span\n v-if=\"icon && icon.length > 0\"\n v-cltooltip=\"{ html: label, className: 'tooltip-modal' }\"\n >\n <cl-icon-font :name=\"icon\"></cl-icon-font>\n </span>\n <template v-else> {{ label }}</template>\n </label>\n </span>\n <template v-if=\"tipMsg && tipMsg.length > 0\">\n <template v-if=\"tipMode === 'tooltip'\">\n <cl-icon-font\n :name=\"CommonBase.isNonEmptyString(props.tipIcon) ? undefined : 'question-circle'\"\n :className=\"CommonBase.isNonEmptyString(props.tipIcon) ? props.tipIcon : undefined\"\n class=\"radio-icon-tip\"\n v-cltooltip=\"{ html: tipMsg, className: 'tooltip-modal' }\"\n ></cl-icon-font>\n </template>\n <template v-else>\n <cl-icon-font\n :name=\"CommonBase.isNonEmptyString(props.tipIcon) ? undefined : 'question-circle'\"\n :className=\"CommonBase.isNonEmptyString(props.tipIcon) ? props.tipIcon : undefined\"\n class=\"radio-icon-tip\"\n @click.stop=\"onTipClick\"\n ></cl-icon-font>\n </template>\n </template>\n <template v-else></template>\n </span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport './Index.css';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\n\n// defineOptions\ndefineOptions({\n name: 'ClRadioOne',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n id: {\n type: String,\n default: '', // desc: 组件实例唯一标识,用于多实例场景 DOM id 隔离\n },\n name: {\n type: String,\n default: '', // desc: 单选框 name 属性\n },\n value: {\n type: Boolean,\n default: false, // desc: 当前选中状态\n },\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n forId: {\n type: String,\n default: '', // desc: input 元素的 id 属性,为空时自动生成\n },\n label: {\n type: String,\n default: '', // desc: 单选项标签文本\n },\n icon: {\n type: String,\n default: '', // desc: 内置图标名称(如 edit),设置后以图标替代文本标签\n },\n tipMsg: {\n type: String,\n default: '', // desc: 提示信息文本\n },\n tipIcon: {\n type: String,\n default: '', // desc: 提示图标类名,为空时使用默认问号图标\n },\n tipMode: {\n type: String,\n default: 'tooltip', // desc: tipMsg 交互方式 | enum: tooltip, clickCallback\n validator: (value: string) => ['tooltip', 'clickCallback'].includes(value),\n },\n});\n\n// emit\nconst emit = defineEmits({\n 'update:value': (_value: boolean) => true, // desc: 选中状态变更时触发\n onChange: (_value: boolean) => true, // desc: 选中状态变更时触发\n onTipClick: () => true, // desc: tipMode 为 clickCallback 时,点击提示图标触发\n});\n\n// 常量 / 变量定义\nconst elId = props.id; // || `rdOne-${CommonBase.getRandom(8)}`\nconst optForId = computed(() =>\n CommonBase.isEmpty(props.forId)\n ? `rd_${props.name || ''}_${CommonBase.getRandom(8)}`\n : props.forId,\n);\n\n// computed\nconst clsParent = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-radioone': true,\n radio: true,\n 'radio-default': true,\n 'radio-inline': true,\n };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// 内部调用方法\nconst _emitChange = (value: boolean) => {\n emit('update:value', value);\n emit('onChange', value);\n};\n\n// 事件方法\nconst onTipClick = () => {\n emit('onTipClick');\n};\n\nconst onClick = (event: MouseEvent) => {\n const target = event.currentTarget as HTMLInputElement | null;\n if (target && target.checked) {\n _emitChange(true);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"isShowRadio || isShowCheckbox\"\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox\"\n :forId=\"optForIdCb\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <cl-radio-one\n v-else-if=\"isShowRadio\"\n :forId=\"optForIdRd\"\n :name=\"optForIdRd\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClRadioOne from '../../Element/Radio/One.vue';\nimport type { ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableTdChecked' });\n\n// 选中态依赖原生 click 冒泡到 tr.onClickTr 的 .th-rc 类名事件委托(Index 侧 _setSelectRc),勿在此添加 stopPropagation\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n value: {\n type: Boolean,\n default: false, // desc: 选中状态\n },\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选\n },\n keyIndex: String, // desc: 唯一键前缀\n info: {\n type: Object as PropType<ListInfo>,\n default: () => ({}), // desc: 数据项信息\n },\n});\n\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst optForIdCb = computed(() => _getForId('cb'));\n\nconst optForIdRd = computed(() => _getForId('rd'));\n\n// 严格 true 才选中:无论外部传 'false' 字符串(Vue 会 cast 为 false)还是其他非 true 值,严格判定均可防误选\nconst optIsChecked = computed(() => props.value === true);\n\nconst optIsDisabled = computed(\n () =>\n props.disabled === true ||\n (CommonBase.isBoolean(props.info?.isDisabled) && props.info.isDisabled),\n);\n\nconst clsParent = computed(() => {\n const cls = { 'th-rc': true };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// forId/name 行级唯一值(含行号,_cb/_rd 后缀区分):原生互斥仅在同 name 组内生效,跨行单选互斥由 Index 状态层 _setSelectRc 保证(单选模式单值覆盖);forId 保持唯一供 label for 关联\nconst _getForId = (suffix: 'cb' | 'rd') =>\n CommonBase.isNonEmptyString(props.keyIndex) ? `${props.keyIndex}_${suffix}` : undefined;\n</script>\n","<template>\n <table\n :class=\"clsTable\"\n :style=\"styTable\"\n ref=\"refElTable\"\n >\n <tbody>\n <template v-if=\"!CommonBase.isEmpty(list)\">\n <template\n v-for=\"(trInfo, trIndex) in list\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n >\n <tr\n :class=\"{\n odd: isStriped && trIndex % 2 === 0,\n 'tr-customInterval-odd':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 0,\n 'tr-customInterval-even':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 1,\n 'tr-disabled': CommonBase.isBoolean(trInfo?.isDisabled) && trInfo.isDisabled,\n 'tr-selected': optIsTrSelected(trInfo),\n 'tr-hover': hoverIndex === trIndex,\n }\"\n @click=\"onClickTr($event, trInfo, trIndex)\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <cl-table-td-checked\n v-if=\"isShowRadio || isShowCheckbox\"\n :keyIndex=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n :isShowRadio=\"isShowRadio\"\n :isShowCheckbox=\"isShowCheckbox\"\n :value=\"optIsTrSelected(trInfo)\"\n :info=\"trInfo\"\n :disabled=\"disabled\"\n />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_${tdInfo?.data ?? ''}`\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n >{{\n optFunGetTdValue(trInfo && tdInfo ? trInfo[tdInfo.data] : undefined, tdInfo)\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n <template\n v-if=\"\n isElastic &&\n !CommonBase.isEmpty(trInfo?.id) &&\n optElasticOpenSet.has(trInfo.id.toString())\n \"\n >\n <template v-if=\"elasticType === 'default'\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n :class=\"{\n 'td-elastic-load': optIsElasticLoading(trInfo),\n }\"\n >\n <div\n v-if=\"optIsElasticLoading(trInfo)\"\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n <div\n v-else\n :class=\"[\n `elastic-container`,\n {\n 'elastic-container-absolute': optElasticAbsoluteIds.has(\n trInfo.id.toString(),\n ),\n },\n ]\"\n :data-elastic-id=\"trInfo.id\"\n >\n <slot\n name=\"tr_elastic_children\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n />\n </div>\n </td>\n </tr>\n </template>\n <template v-else-if=\"elasticType === 'sameDataStructure'\">\n <template v-if=\"optIsElasticLoading(trInfo)\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-elastic-load\"\n >\n <div\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n </td>\n </tr>\n </template>\n <template v-else>\n <template\n v-for=\"(trElasticInfo, trElasticInx) in optGetElasticDataList(\n trInfo.id.toString(),\n )\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}`\"\n >\n <tr\n :class=\"{\n // 预留外部覆盖钩子(无内置 CSS 规则):斑马纹由 odd、悬停由 tr-hover 承载\n 'tr-elastic-sameDataStructure': true,\n odd: isStriped && trElasticInx % 2 === 0,\n 'tr-disabled':\n CommonBase.isBoolean(trElasticInfo?.isDisabled) && trElasticInfo.isDisabled,\n 'tr-hover': hoverElasticIndex === trElasticInx && hoverIndex === trIndex,\n }\"\n @mouseenter=\"onHoverInTr(trIndex, trElasticInx)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <template\n v-for=\"(tdElasticInfo, tdElasticIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}_td_${tdElasticIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdElasticIndex\"\n :tdInfo=\"tdElasticInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_elastic_${tdElasticInfo?.data ?? ''}`\"\n :data=\"trElasticInfo\"\n :trIndex=\"trIndex\"\n :trElasticInx=\"trElasticInx\"\n >{{\n optFunGetTdValue(\n trElasticInfo && tdElasticInfo\n ? trElasticInfo[tdElasticInfo.data]\n : undefined,\n tdElasticInfo,\n )\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </template>\n </template>\n </template>\n <template v-else></template>\n </template><template v-else></template>\n </template>\n </template>\n <template v-else></template>\n <tr\n v-if=\"CommonBase.isEmpty(list) && !isRunLoading && !CommonBase.isNonEmptyString(fixedType)\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-empty\"\n >\n <div\n class=\"panel-table-empty\"\n role=\"status\"\n >\n {{ CommonBase.isNonEmptyString(emptyText) ? emptyText : optPageLanguage.noResultsText }}\n </div>\n </td>\n </tr>\n <template v-else></template>\n </tbody>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTableTd from './Td.vue';\nimport ClTableTdChecked from './TdChecked.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport useLanguage from '../../Use/language';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableBody' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 数据列表\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n selectValue: {\n type: Array,\n default: () => [], // desc: 选中值列表\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引\n },\n hoverElasticIndex: {\n type: Number,\n default: -1, // desc: 悬停展开行索引\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n colspanCount: {\n type: Number,\n default: 1, // desc: 跨列数\n },\n isRunLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n elasticOpen: {\n type: Array,\n default: () => [], // desc: 展开的行 id 列表\n },\n elasticLoading: {\n type: Array,\n default: () => [], // desc: 展开加载中的行 id 列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object as PropType<Record<string, ListInfo[]>>,\n default: () => ({}), // desc: 展开数据(key 为行 id,值为行列表)\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right (可自定义)\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n});\n\nconst emit = defineEmits({\n onClickTr: (_e: MouseEvent | KeyboardEvent, _info: ListInfo | null, _inx: number) => true, // desc: 点击行事件\n onHoverIn: (_inx: number, _elasticInx: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: td_{data}(动态,按列 data 命名)| td_elastic_{data}(动态)| tr_elastic_children\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n\n// 展开行 absolute 定位状态集:setElasticHeight 标记的 id 走模板响应式 :class,\n// 避免直接改 elElastic.className 被 Vue patch 覆盖丢失(fixed 模式滚动后 absolute 定位失效)\nconst optElasticAbsoluteIds = ref<Set<string | number>>(new Set());\n\n// 选中/加载中 id 判定的 O(1) 查找集(selectValue/elasticLoading 为 id 字符串数组,模板多处分号重复 indexOf)\n// 外部显式传 null 时兜底空数组(Array prop 校验放行 null,.map 会崩溃)\n// 元素级过滤:null/undefined 元素经 String 转成 'null' 字符串,会与真实 'null' 字符串 id 歧义(isUndefined 含 null 判定,保留空串/0)\nconst optSelectedSet = computed(\n () =>\n new Set(\n (Array.isArray(props.selectValue) ? props.selectValue : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticLoadingSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticLoading) ? props.elasticLoading : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticOpenSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticOpen) ? props.elasticOpen : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\n\n// colspan 兜底:NaN/负数/0/非数字归一为 1(Math.max 对 NaN 返回 NaN,:colspan 输出无效值靠浏览器兜底不直观,显式归一)\nconst optColspanCount = computed(() => {\n const n = Number(props.colspanCount);\n return CommonBase.isFinite(n) && n >= 1 ? Math.floor(n) : 1;\n});\n\nconst clsTable = computed(() => {\n const cls = {\n 'table-default': true,\n 'table-empty': CommonBase.isEmpty(props.list),\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (!CommonBase.isNonEmptyString(props.fixedType)) {\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式,浏览器静默忽略非法值会致预期列宽失效\n if (\n props.isUseScrollX &&\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n emit('onClickTr', e, info, inx);\n};\n\n// elasticInx = -1 哨兵值:主数据行悬停不携带展开行索引(展开行悬停才传行内索引)\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n emit('onHoverIn', inx, elasticInx);\n};\n\nconst onHoverOutTr = () => {\n emit('onHoverOut');\n};\n\nconst optFunGetTdValue = (value: unknown, opt: ColumnsInfo) => {\n if (CommonBase.isEmpty(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// 展开数据按行 id 取列表(Record 契约:缺失 key 返回空数组)\nconst optGetElasticDataList = (id: string) => {\n const elasticData = (props.elasticData || {}) as Record<string, ListInfo[]>;\n return Object.prototype.hasOwnProperty.call(elasticData, id) ? elasticData[id] : [];\n};\n\n// 选中/加载中判定模板方法:与 class 判定共用,一处调整全局生效\n// 行对象判空前置:list 含 null 项时 info.id 解引用在判空工具求值前即崩溃,须先判 info 再取 id\nconst optIsTrSelected = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optSelectedSet.value.has(info.id.toString());\nconst optIsElasticLoading = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optElasticLoadingSet.value.has(info.id.toString());\n\nconst getWidth = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientWidth;\n};\n\nconst getHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientHeight;\n};\n\nconst setElasticWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (!parentEl) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const w = parentEl.clientWidth;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.width = `${w}px`;\n }\n};\n\nconst setElasticHeight = (id: string) => {\n if (!refElTable.value) {\n return;\n }\n const elElastic = refElTable.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null;\n if (elElastic) {\n const parentEl = elElastic.parentNode as HTMLElement | null;\n if (parentEl) {\n elElastic.style.height = '';\n parentEl.style.height = '';\n const h = `${elElastic.clientHeight}px`;\n elElastic.style.height = h;\n parentEl.style.height = h;\n }\n const cur = optElasticAbsoluteIds.value;\n if (!cur.has(id)) {\n optElasticAbsoluteIds.value = new Set(cur).add(id);\n }\n }\n};\n\n// 展开行收起时清理 absolute 标记:Set 只增不减会在同 id 重开时残留 elastic-container-absolute 类\n// (fixed 模式 + 非加载路径无 setElasticHeight 重算 → td 高度归 0 展开内容塌陷)\nconst removeElasticAbsolute = (id: string) => {\n if (optElasticAbsoluteIds.value.has(id)) {\n const next = new Set(optElasticAbsoluteIds.value);\n next.delete(id);\n optElasticAbsoluteIds.value = next;\n }\n};\n\n// 数据替换/切页强制全关时清空全部标记(旧行 id 作废,absolute 状态一并失效)\nconst clearElasticAbsolute = () => {\n if (optElasticAbsoluteIds.value.size > 0) {\n optElasticAbsoluteIds.value = new Set();\n }\n};\n\nconst setElasticLoadLeft = (scrollLeft: number) => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.left = `${safeLeft}px`;\n }\n};\n\nconst setEmptyWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null;\n if (el) {\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (parentEl) {\n const w = parentEl.clientWidth;\n el.style.width = `${w}px`;\n }\n }\n};\n\nconst setEmptyLeft = (scrollLeft: number) => {\n const el = refElTable.value\n ? (refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null)\n : null;\n if (el) {\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n el.style.left = `${safeLeft}px`;\n }\n};\n\nexport interface ClTableBodyExpose {\n getWidth: () => number;\n getHeight: () => number;\n setElasticWidth: () => void;\n setElasticHeight: (id: string) => void;\n removeElasticAbsolute: (id: string) => void;\n clearElasticAbsolute: () => void;\n setElasticLoadLeft: (scrollLeft: number) => void;\n setEmptyWidth: () => void;\n setEmptyLeft: (scrollLeft: number) => void;\n}\n\ndefineExpose({\n getWidth,\n getHeight,\n setElasticWidth,\n setElasticHeight,\n removeElasticAbsolute,\n clearElasticAbsolute,\n setElasticLoadLeft,\n setEmptyWidth,\n setEmptyLeft,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"table-wrapper\">\n <template v-if=\"isHead\">\n <div\n :class=\"clsHeadWrapper\"\n :style=\"{ width: optFixedHead.width }\"\n ref=\"refElHeadWrapper\"\n >\n <div\n :class=\"clsHeadContainer\"\n ref=\"refElHeadContainer\"\n >\n <div\n class=\"table-head-main\"\n ref=\"refElHeadMain\"\n >\n <cl-table-head\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElHeadTable\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-head\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-left-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-left-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-head\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-right-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-right-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optScrollYIsShow\"\n class=\"table-scroll-occupy-container\"\n >\n <div />\n <div\n v-if=\"optIsShowTotal\"\n class=\"table-scroll-occupy-total\"\n :style=\"{ height: optBase.totalHeight }\"\n />\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n :class=\"{ 'table-scroll-occupy-corner': optScrollX.isShow }\"\n />\n <template v-else></template>\n </div>\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n v-show=\"optScrollX.isShow\"\n class=\"table-fixed-column-scrollX\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n cornerType=\"right-top\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElHeadFixedScrollX\"\n />\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedHead.isShow && optBase.isRunLoading\"\n class=\"table-fixed-head-load\"\n />\n <template v-else></template>\n </div>\n <div\n v-if=\"optFixedHead.isShow\"\n :style=\"{ height: optFixedHead.height, width: optFixedHead.width }\"\n />\n <template v-else></template>\n </template>\n <template v-else></template>\n <div\n :class=\"clsBodyWrapper\"\n ref=\"refElBodyWrapper\"\n >\n <div\n class=\"table-body-container\"\n :style=\"styBodyContainer\"\n ref=\"refElBodyContainer\"\n >\n <div\n :class=\"{ 'table-body-main': true, 'table-body-empty': optNewList.length === 0 }\"\n :style=\"styBodyMain\"\n ref=\"refElBodyMain\"\n >\n <cl-table-body\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElBodyTable\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-left-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-left-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-right-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-right-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n </div>\n <template v-if=\"isScrollX && optNewList.length > 0 && optScrollX.isShow\">\n <div\n v-if=\"isScrollXBottom\"\n class=\"table-fixed-column-scrollX\"\n :style=\"{ bottom: optScrollYIsUse ? '-1px' : '1px' }\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n :isShowCover=\"false\"\n cornerType=\"right-bottom\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElBodyFixedScrollX\"\n />\n </div>\n <div\n v-else\n class=\"table-fixed-column-scrollX\"\n >\n <div :style=\"{ height: `${SCROLLBAR_HEIGHT}px` }\" />\n </div>\n </template>\n <template v-else></template>\n </div>\n <div\n v-if=\"isPaginate && optNewList.length > 0\"\n class=\"table-footer-wrapper\"\n >\n <div />\n <cl-paginate\n :currentPage=\"optPageInfo.pages\"\n :limitValue=\"optPageInfo.limit\"\n :limitData=\"paginateLimitData\"\n :isShowLimit=\"isPaginateLimit\"\n :totalCount=\"optTotalCount\"\n :disabled=\"disabled || optBase.isRunLoading\"\n @onChange=\"onChangePaginate\"\n />\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optBase.isRunLoading\"\n class=\"table-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"table-load-wrapper\">\n <div\n class=\"table-load-head\"\n :style=\"styLoadHead\"\n />\n <div :class=\"{ 'table-load-body': true, 'table-load-bg-gray': isLoading }\">\n <cl-load-ing :isLoadIng=\"isLoading\" size=\"xxl\" :theme=\"loadTheme\" :color=\"loadColor || undefined\" />\n </div>\n </div>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n watch,\n computed,\n ref,\n reactive,\n toRaw,\n useSlots,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { Resize as ResizeEvent } from '../../Common/Element/Event/index';\nimport ClTableHead from './Head.vue';\nimport ClTableBody from './Body.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport ClPaginate from '../Paginate/Index.vue';\nimport type { PaginateLimitItem } from '../Paginate/Index.vue';\nimport ClScrollXFence from '../ScrollxFence/Index.vue';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\nimport './index.css';\n\n// 数据请求参数契约(onGetData/onChangeParams 载荷与 getParamInfo 返回值共用;空配置时字段缺失)\nexport interface TableEmitParam {\n pages?: number;\n limit?: number;\n offset?: number;\n orderIndex?: number;\n orderBy?: string;\n orderColumns?: string;\n}\n\n// 选中变化扩展信息(onChangeChecked 第三参)\nexport interface TableChangeCheckedExt {\n checkedIds: string[];\n unCheckedIds: string[];\n}\n\n// 内部状态容器:显式类型约束,字段名变更/类型漂移由编译器发现(原整体 any 静默放行)\ninterface TablePageData {\n dataJson: Record<string, any>;\n changeNewPaginate: { pages: number; limit: number };\n changeNewSort: { orderIndex: number | undefined; orderBy: string | undefined };\n sortLocalData: any[];\n scrollBody: { left: number };\n scrollHead: { left: number };\n resizeEvent: ResizeEvent | null;\n // setTimeout 返回类型按环境为 number(DOM)或 Timeout(Node),用 ReturnType 兼容两者\n timerBody: ReturnType<typeof setTimeout> | null;\n // keep-alive 取消未决请求标记:onDeactivated 清 timerBody 时置位,onActivated 补发数据\n pendingCanceled: boolean;\n}\n\ndefineOptions({ name: 'ClTable' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息;含 null 项(非法输入)时降级渲染空单元格,仅运行时兜底\n },\n list: {\n type: Array,\n default: () => [], // desc: 数据列表\n },\n totalLength: Number, // desc: 数据总条数\n totalData: {\n type: Object,\n default: () => ({}), // desc: 总计数据\n },\n isServer: {\n type: Boolean,\n default: true, // desc: 是否为服务端模式\n },\n isParamTriggerServer: {\n type: Boolean,\n default: false, // desc: 本地数据是否触发服务端参数事件\n },\n isLoading: {\n type: Boolean,\n default: true, // desc: 加载中状态\n },\n loadTheme: {\n type: String,\n default: 'circleBubble', // desc: 加载动画主题,透传至 cl-load-ing | enum: rotaryLine, circleNotch, circleBubble, ballColor4, dotTyping, dotWave, dotBounce, dotPulse, dotOrbit, dotFlow, dotSlide, dotSlider, dotFold, dotSquare, barEqualizer, barWave, barPulse, barStretch, barMeter, barBounce, barRamp, ringRotate, ringDot, ringPulse, ringClip, ringFan, circleSpinner, dotRipple, dotRipple3, ringCross, squareTrace, squareTrace2, crossMove, snakePath, squareMirror, dotPulse5, diamondShuttle, barStream, newtonCradle, dotSpin, orbitSwap, typingBounce, ringGlow\n },\n loadColor: {\n type: String,\n default: '#1088f0', // desc: 加载动画颜色,透传至 cl-load-ing\n },\n isShowInitLoadIng: {\n type: Boolean,\n default: true, // desc: 是否显示初始加载动画(仅本地模式生效,服务端模式强制显示加载遮罩防误操作)\n },\n isPaginate: {\n type: Boolean,\n default: true, // desc: 是否启用分页\n },\n pageOffset: {\n type: Number,\n default: 0, // desc: 分页偏移量\n },\n isPaginateLimit: {\n type: Boolean,\n default: true, // desc: 是否启用每页条数选择\n },\n paginateLimit: {\n type: Number,\n default: 10, // desc: 每页条数\n },\n paginateLimitData: { type: Array as () => PaginateLimitItem[], default: () => [] }, // desc: 每页条数可选列表\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array,\n default: () => [], // desc: 排序配置\n },\n selectValue: {\n type: [String, Number],\n default: '', // desc: 选中值\n },\n checkedRowType: {\n type: String,\n default: 'none', // desc: 选中行类型 | enum: none, radio, checkbox\n validator: (value: string) => ['none', 'radio', 'checkbox'].indexOf(value) > -1,\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n isScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isScrollXBottom: {\n type: Boolean,\n default: false, // desc: 是否启用底部横向滚动\n },\n isFixedHead: {\n type: Boolean,\n default: false, // desc: 是否固定表头\n },\n scrollY: {\n type: Number,\n default: -1, // desc: 纵向滚动高度\n },\n fixedColumnLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedColumnRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n isClickRowLinkage: {\n type: Boolean,\n default: false, // desc: 点击行是否联动选中\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n isElasticLoad: {\n type: Boolean,\n default: true, // desc: 是否启用展开加载动画\n },\n rowClickKeyInvalid: {\n type: String,\n default: '.tr-click-invalid', // desc: 无效点击区域选择器\n },\n rowClickKeyElastic: {\n type: String,\n default: '.tr-click-elastic', // desc: 展开点击区域选择器\n },\n elasticIconCls: {\n type: Array,\n default: () => [], // desc: 展开图标类名列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object,\n default: () => ({}), // desc: 展开数据\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n isHead: {\n type: Boolean,\n default: true, // desc: 是否显示表头\n },\n});\n\nconst emit = defineEmits({\n onGetData: (_param: TableEmitParam) => true, // desc: 获取数据事件\n onClickRow: (_info: ListInfo, _inx: number, _isRc?: boolean) => true, // desc: 点击行事件(isRc: 点击是否落在 th-rc 单元格)\n onClickElastic: (_id: string, _info: ListInfo, _trIndex: number, _isOpen: boolean, _el: any) =>\n true, // desc: 点击展开事件\n onChangeChecked: (_ids: string, _list: ListInfo[], _ext: TableChangeCheckedExt) => true, // desc: 选中变化事件\n onChangeParams: (_param: TableEmitParam) => true, // desc: 参数变化事件\n});\n\n// slots: th_{data} | td_{data} | total_{data} | td_elastic_{data}(动态,按 data 前缀转发)| tr_elastic_children(展开行内容,isElastic 时追加)\n\nconst slots = useSlots();\n\nconst _initOrderData = (orderSort: any[]): [number, string] | [] => {\n let data: [number, string] | [] = [];\n if (props.isOrder) {\n // orderSort 显式传 null 时 Array prop 校验放行(default 不生效),归一为空数组避免 .length 崩溃\n const orderSortInfo: any[] = CommonBase.isEmpty(orderSort) ? [] : orderSort;\n let initFirstSort: [number, string] = [0, 'desc'];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n for (let i = 0; i < columns.length; i += 1) {\n const columnInfo: any = columns[i];\n // columns 含 null 项(配置错误输入)时跳过,崩溃降级为忽略该列\n if (CommonBase.isEmpty(columnInfo)) {\n continue;\n }\n const sort =\n columnInfo.sort === undefined || columnInfo.sort === null ? true : columnInfo.sort === true;\n const visible = CommonBase.isBoolean(columnInfo.visible) ? columnInfo.visible : true;\n if (sort && visible) {\n initFirstSort = [i, 'desc'];\n break;\n }\n }\n if (orderSortInfo.length === 0) {\n data = initFirstSort;\n } else {\n const columnOrderInfo: any = columns[orderSortInfo[0]];\n if (!CommonBase.isEmpty(columnOrderInfo)) {\n const sort =\n columnOrderInfo.sort === undefined || columnOrderInfo.sort === null\n ? true\n : columnOrderInfo.sort === true;\n const visible = CommonBase.isBoolean(columnOrderInfo.visible)\n ? columnOrderInfo.visible\n : true;\n const orderIndex = Array.isArray(orderSortInfo) ? orderSortInfo[0] : undefined;\n const orderBy =\n Array.isArray(orderSortInfo) && (orderSortInfo[1] === 'asc' || orderSortInfo[1] === 'desc')\n ? orderSortInfo[1]\n : undefined;\n data =\n sort && visible && !CommonBase.isUndefined(orderIndex)\n ? ([orderIndex, orderBy ?? 'desc'] as [number, string])\n : initFirstSort;\n } else {\n data = initFirstSort;\n }\n }\n }\n return data;\n};\n\nconst _initPaginatePages = () => {\n let pages = 1;\n if (props.paginateLimit > 0 && props.pageOffset >= 0) {\n pages = Math.floor(props.pageOffset / props.paginateLimit) + 1;\n }\n return pages;\n};\n\nconst _initOrderSort = _initOrderData(props.orderSort);\n\nconst _pageData: TablePageData = {\n dataJson: CommonBase.getJsonByList(props.list),\n changeNewPaginate: {\n pages: _initPaginatePages(),\n limit: props.paginateLimit,\n },\n changeNewSort: {\n // isOrder=false 时 _initOrderSort 为空数组,字段实际为 undefined(类型层如实表达,原 as 断言掩盖)\n orderIndex: _initOrderSort[0],\n orderBy: _initOrderSort[1],\n },\n sortLocalData: [],\n scrollBody: {\n left: 0,\n },\n scrollHead: {\n left: 0,\n },\n resizeEvent: null,\n timerBody: null,\n pendingCanceled: false,\n};\n\nconst _pageObject: { observerBodyScrollY: MutationObserver | null } = {\n observerBodyScrollY: null,\n};\nconst SCROLLBAR_HEIGHT = 15;\nconst FIXED_HEAD_THRESHOLD = 30; // 固定表头吸附判定阈值\nconst SELECT_SCROLL_THRESHOLD = 180; // 选中行滚动定位判定阈值\nconst SELECT_SCROLL_OFFSET = 50; // 选中行滚动定位偏移\nconst LOCAL_LOAD_DELAY = 300; // 本地模式数据加载防抖时长\nconst _keyIndex = `table-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst refElHeadWrapper = ref<HTMLDivElement | null>(null);\nconst refElHeadContainer = ref<HTMLDivElement | null>(null);\nconst refElHeadMain = ref<HTMLDivElement | null>(null);\nconst refElHeadTable = ref<InstanceType<typeof ClTableHead> | null>(null);\nconst refElHeadFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst refElBodyWrapper = ref<HTMLDivElement | null>(null);\nconst refElBodyContainer = ref<HTMLDivElement | null>(null);\nconst refElBodyMain = ref<HTMLDivElement | null>(null);\nconst refElBodyTable = ref<InstanceType<typeof ClTableBody> | null>(null);\nconst refElBodyFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst optBase = reactive({\n isRunLoading: false,\n isCheckedRadio: props.checkedRowType === 'radio',\n isCheckedCheckbox: props.checkedRowType === 'checkbox',\n colspanCount: 0,\n hoverTrIndex: -1,\n hoverTrElasticIndex: -1,\n totalHeight: '0',\n});\n\nconst optNewList = ref<ListInfo[]>([]);\nconst optPageInfo = reactive({\n pages: _pageData.changeNewPaginate.pages,\n limit: _pageData.changeNewPaginate.limit,\n});\nconst optOrderSort = ref<[number, string] | []>(_initOrderSort);\nconst optAllValue = ref<boolean>(false);\n\n// 取 selectValue 的 id 数组:String|Number 混合类型 + 显式传 undefined 时守卫,防止 .toString() 崩溃\nconst _getSelectValueIds = () => {\n const selectValue = props.selectValue;\n if (CommonBase.isNonEmptyString(selectValue)) {\n return CommonBase.split(selectValue);\n }\n if (CommonBase.isNumber(selectValue)) {\n return CommonBase.split(selectValue.toString());\n }\n return [];\n};\nconst optCurrentPageSelectIds = ref<string[]>(_getSelectValueIds());\n\nconst optElastic = reactive({\n open: [] as string[],\n loading: [] as string[],\n});\n\nconst optScrollX = reactive({\n isShow: false,\n minWidth: 'auto',\n posType: 'left',\n});\n\nconst optScrollYIsShow = ref<boolean>(false);\n\nconst optFixedColumn = reactive({\n totalWidth: '0',\n centerWidth: '0',\n leftColumnLength: 0,\n leftWidth: '0',\n rightColumnLength: 0,\n rightWidth: '0',\n});\n\nconst optFixedHead = reactive({\n isShow: false,\n width: 'auto',\n height: 'auto',\n});\n\nconst optLoadInfo = reactive({\n headHeight: 0,\n});\n\nlet _rafIdScrollX: number | null = null;\nlet _rafIdWinScroll: number | null = null;\nlet _scrollLeftCache = 0;\n\n// 动态插槽转发键集合:实时取自 slots 代理(父组件运行期增删插槽时响应式更新;原 setup 快照不感知增删,动态插槽静默不渲染)\nconst optSlotsKeyTh = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('th_') === 0);\n});\nconst optSlotsKeyTd = computed(() => {\n const names = Object.keys(slots).filter(\n (n: string) => n.indexOf('td_') === 0 && n.indexOf('td_elastic_') !== 0,\n );\n if (props.isElastic) {\n names.push('tr_elastic_children');\n }\n return names;\n});\nconst optSlotsKeyTotal = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('total_') === 0);\n});\nconst optSlotsKeyTdElastic = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('td_elastic_') === 0);\n});\n\nconst optIsShowCheckboxAll = computed(() => {\n return props.isShowCheckboxAll && optNewList.value.length > 0;\n});\n\nconst optIsShowTotal = computed(() => {\n return !CommonBase.isEmpty(props.totalData) && optNewList.value.length > 0;\n});\n\nconst optTotalCount = computed(() => {\n if (props.isServer) {\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : 0;\n }\n // 本地模式:未显式传 totalLength 时自动取 list 长度兜底,避免分页总数显示 0\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : props.list?.length || 0;\n});\n\nconst optScrollXIsUse = computed(() => {\n return props.isScrollX || props.isScrollXBottom;\n});\n\nconst optScrollYIsUse = computed(() => {\n return props.scrollY > 0;\n});\n\n// isHead=false 时无表头测量基准(headWrapper 不渲染,elTds 恒空),固定列宽度恒 0 渲染空白竖条,禁用固定列\nconst optFixedLeftIsUse = computed(() => {\n return props.isHead && props.fixedColumnLeftIndex > -1 && optScrollXIsUse.value;\n});\n\nconst optFixedRightIsUse = computed(() => {\n return (\n props.isHead &&\n props.fixedColumnRightIndex > -1 &&\n optScrollXIsUse.value &&\n props.fixedColumnRightIndex > props.fixedColumnLeftIndex + 1\n );\n});\n\nconst clsParent = computed(() => {\n const cls: any = {\n 'panel-table': true,\n 'table-disabled': props.disabled,\n };\n if (optBase.isRunLoading) {\n cls['table-loading'] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['table-mob'] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsHeadWrapper = computed(() => {\n const cls: any = {\n 'table-head-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scroll-occupy-y': optScrollYIsShow.value,\n };\n if (optFixedHead.isShow) {\n cls['table-fixed-head'] = true;\n }\n return cls;\n});\n\nconst clsHeadContainer = computed(() => {\n const cls: any = {\n 'table-head-container': true,\n };\n if (props.isScrollX) {\n cls['table-scrollX'] = true;\n }\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst clsBodyWrapper = computed(() => {\n const cls: any = {\n 'table-body-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scrollX': props.isScrollX,\n 'table-scrollX-bottom': optScrollX.isShow,\n };\n cls['table-scroll-borderT0'] = optScrollX.isShow && props.isScrollX;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst styBodyContainer = computed(() => {\n const sty: any = {};\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (optScrollYIsUse.value) {\n const maxH = optScrollX.isShow\n ? Math.max(0, props.scrollY - SCROLLBAR_HEIGHT)\n : props.scrollY;\n sty.maxHeight = `${maxH}px`;\n }\n }\n return sty;\n});\n\nconst styBodyMain = computed(() => {\n const sty: any = {};\n if (!(optFixedLeftIsUse.value || optFixedRightIsUse.value)) {\n if (optScrollYIsUse.value) {\n sty.maxHeight = `${props.scrollY}px`;\n }\n }\n return sty;\n});\n\nconst styLoadHead = computed(() => {\n const sty: any = {};\n if (optBase.isRunLoading) {\n sty.height = `${optLoadInfo.headHeight}px`;\n }\n return sty;\n});\n\nconst _emitGetData = (param: any) => {\n emit('onGetData', param);\n};\n\nconst _emitClickElastic = (id: string, info: any, trIndex: number, isOpen: boolean, el: any) => {\n emit('onClickElastic', id, info, trIndex, isOpen, el);\n};\n\n// isRc 第三参向后兼容:true 表示点击落在 .th-rc 单元格(直接操作复选框/单选框),false 表示行联动选中\nconst _emitClickRow = (info: any, inx: number, isRc = false) => {\n emit('onClickRow', info, inx, isRc);\n};\n\nconst _emitChangeChecked = (ids: string, list: any[], ext: any) => {\n emit('onChangeChecked', ids, list, ext);\n};\n\nconst _emitChangeParams = () => {\n const param = _getPaginateSort();\n emit('onChangeParams', param);\n};\n\nconst _runLoadStart = () => {\n nextTick(() => {\n if (refElHeadMain.value) {\n const elThead = refElHeadMain.value.querySelector('thead');\n if (elThead) {\n optLoadInfo.headHeight = elThead.offsetHeight;\n }\n }\n });\n optBase.isRunLoading = true;\n};\n\nconst _runLoadStop = () => {\n optBase.isRunLoading = false;\n};\n\nconst _analysisColumns = () => {\n let colspanCount = 0;\n let minWidth = 0;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n colspanCount = 1;\n if (refElHeadTable.value) {\n minWidth = refElHeadTable.value.getRcWidth();\n }\n }\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any) => {\n // 计数口径对齐渲染链:columns 含 null 项(配置错误输入)时 Body/Head 仍渲染空单元格占一列,\n // 此处同样 +1,避免展开行/空数据行 colspan 少覆盖一列(null 项无 width,宽度贡献为 0)\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n colspanCount += 1;\n if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.width)) {\n minWidth += Number(info.width) || 0;\n } else if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.widthMin)) {\n minWidth += Number(info.widthMin) || 0;\n }\n }\n });\n const totalPadding = refElHeadTable.value ? refElHeadTable.value.getPaddingLr() : 0;\n minWidth += totalPadding;\n\n optBase.colspanCount = colspanCount;\n if (optScrollXIsUse.value) {\n optScrollX.minWidth = minWidth > 0 ? `${minWidth}px` : 'auto';\n }\n};\n\nconst _analysisFixedColumns = () => {\n return new Promise<void>((resolve, reject) => {\n nextTick(() => {\n try {\n // 卸载竞态兜底:已排队的 nextTick 无法取消,ref 被置 null 时直接 resolve\n if (!refElBodyTable.value) {\n resolve();\n return;\n }\n const totalWidth = refElBodyTable.value.getWidth();\n optFixedColumn.totalWidth = `${totalWidth}px`;\n\n let centerWidth = totalWidth;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n const leftColumn: any = [];\n const rightColumn: any = [];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any, i: number) => {\n // 口径对齐渲染链:null 项同样计入固定列(渲染链对 null 项渲染空 th/td 占位),\n // 保证 leftColumn.length 与 elTds(真实 DOM 全量 th)索引对齐,固定列宽度测量不错位\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n if (optFixedLeftIsUse.value) {\n if (i <= props.fixedColumnLeftIndex) {\n leftColumn.push(info);\n }\n }\n if (optFixedRightIsUse.value) {\n if (i >= props.fixedColumnRightIndex) {\n rightColumn.push(info);\n }\n }\n }\n });\n\n const isRc = optBase.isCheckedRadio || optBase.isCheckedCheckbox;\n const elTds = refElHeadTable.value ? refElHeadTable.value.getElTh() : [];\n const totalLen = elTds.length;\n\n let leftColspanCount = leftColumn.length;\n const rightColspanCount = rightColumn.length;\n let leftIndexMax = leftColspanCount - 1;\n const rightIndexMin = totalLen - rightColspanCount;\n if (isRc) {\n leftColspanCount += 1;\n leftIndexMax += 1;\n }\n let leftWidth = 0;\n let rightWidth = 0;\n for (let fi = 0; fi < totalLen; fi++) {\n const elTd = elTds[fi];\n if (!elTd) {\n continue;\n }\n const tempW = elTd.clientWidth;\n if (fi <= leftIndexMax) {\n leftWidth += tempW;\n }\n if (fi >= rightIndexMin) {\n rightWidth += tempW;\n }\n }\n\n if (optFixedLeftIsUse.value) {\n optFixedColumn.leftColumnLength = leftColumn.length;\n optFixedColumn.leftWidth = `${leftWidth}px`;\n centerWidth -= leftWidth;\n }\n if (optFixedRightIsUse.value) {\n optFixedColumn.rightColumnLength = rightColumn.length;\n optFixedColumn.rightWidth = `${rightWidth}px`;\n centerWidth -= rightWidth;\n }\n }\n centerWidth = Math.max(0, centerWidth);\n optFixedColumn.centerWidth = `${centerWidth}px`;\n nextTick(() => {\n resolve();\n });\n } catch (err) {\n reject(err);\n }\n });\n });\n};\n\nconst _setElasticWidth = () => {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticWidth();\n }\n });\n};\n\nconst _setElasticHeight = (id: string) => {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticHeight(id);\n }\n }\n};\n\nconst _runElasticLoadStart = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n if (arr.indexOf(id) === -1) {\n arr.push(id);\n optElastic.loading = arr;\n }\n }\n};\n\nconst _runElasticLoadStop = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n const inx = arr.indexOf(id);\n if (inx > -1) {\n arr.splice(inx, 1);\n optElastic.loading = arr;\n nextTick(() => {\n _setElasticHeight(id);\n });\n }\n }\n};\n\nconst _setSelectElasticIds = (info: any, trIndex: number, elElastic?: any, isEmit?: boolean) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中/展开链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n const arr = CommonBase.getArrClone(optElastic.open);\n const inx = arr.indexOf(id);\n const isOpen = inx === -1;\n if (isOpen) {\n arr.push(id);\n _runElasticLoadStart(id);\n } else {\n arr.splice(inx, 1);\n _runElasticLoadStop(id);\n // 收起时同步清理 Body 侧 absolute 标记:Set 只增不减会在同 id 重开时残留 absolute 类导致塌陷\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.removeElasticAbsolute(id);\n }\n }\n _initElasticOneClass(elElastic, isOpen);\n const isEmitUse = CommonBase.isBoolean(isEmit) ? isEmit : true;\n optElastic.open = arr;\n if (isEmitUse) {\n _emitClickElastic(id, info, trIndex, isOpen, elElastic);\n }\n _setElasticWidth();\n};\n\nconst _initElasticAllData = () => {\n const newList: any[] = [];\n // 外部显式传 null 时 prop default 不生效,先判空兜底(null.length 会崩溃且阻断数据更新链)\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n const list: any[] = optNewList.value;\n const arrOpenId: any[] = optElastic.open;\n list.forEach((info: any) => {\n // null 行守卫:list 可含 null 项(渲染层已承认),getJsonClone(null) 返回 null 后解引用崩溃\n if (!info) {\n newList.push(info);\n return;\n }\n const newInfo = CommonBase.getJsonClone(info);\n if (!CommonBase.isEmpty(newInfo.id)) {\n const id = newInfo.id.toString();\n newInfo._elasticIconCls =\n arrOpenId.indexOf(id) > -1 ? elasticIconCls[1] : elasticIconCls[0];\n }\n newList.push(newInfo);\n });\n }\n if (newList.length > 0) {\n optNewList.value = newList;\n }\n};\n\nconst _initElasticOneClass = (elElastic?: any, isOpen = false) => {\n if (elElastic) {\n const addCls = [];\n const removeCls = ['elastic-expand', 'elastic-retract'];\n isOpen ? addCls.push('elastic-expand') : addCls.push('elastic-retract');\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n removeCls.push(elasticIconCls[0]);\n removeCls.push(elasticIconCls[1]);\n isOpen ? addCls.push(elasticIconCls[1]) : addCls.push(elasticIconCls[0]);\n }\n let newCls = CommonElement.getRemoveClass(elElastic.className, removeCls.join(' '));\n newCls = CommonElement.getAddClass(newCls, addCls);\n elElastic.className = newCls;\n }\n};\n\nconst _getCurrentPageAllUse = () => {\n const allIds: string[] = [];\n optNewList.value.forEach((info: any) => {\n // null 行守卫:getListClone 原样保留 null 行(渲染层已防崩溃),全选 id 收集同样跳过 null 行\n if (CommonBase.isEmpty(info)) {\n return;\n }\n const b = CommonBase.isBoolean(info.isDisabled) ? info.isDisabled : false;\n if (!b && !CommonBase.isEmpty(info.id)) {\n allIds.push(info.id.toString());\n }\n });\n return allIds;\n};\n\nconst _getCurrentSelectUse = (selectIds: any = null) => {\n // isUndefined 不挡 null(签名默认 null):null 视为未传参;空数组是合法输入(表示清空)不可用 isEmpty 拦截\n const sIds =\n CommonBase.isUndefined(selectIds) || selectIds === null\n ? optCurrentPageSelectIds.value\n : (selectIds as string[]);\n const useIds: string[] = [];\n if (!Array.isArray(sIds)) {\n return [];\n }\n if (sIds.length > 0) {\n const allIds = _getCurrentPageAllUse();\n sIds.forEach((sId: string) => {\n if (CommonBase.isExistValue(allIds, sId)) {\n useIds.push(sId);\n }\n });\n }\n // 单选模式收敛为首个有效 id:radio 语义下多值无意义,selectValue 传入多 id 时丢弃首个之外的\n if (optBase.isCheckedRadio && useIds.length > 1) {\n return [useIds[0]];\n }\n return useIds;\n};\n\nconst _setCheckboxAll = () => {\n if (optBase.isCheckedCheckbox) {\n const allIds = _getCurrentPageAllUse();\n const checkedIds: string[] = _getCurrentSelectUse();\n optAllValue.value = checkedIds.length > 0 && checkedIds.length === allIds.length;\n }\n};\n\nconst _getSelectDataItem = () => {\n const list: any[] = [];\n const checkedIds: string[] = _getCurrentSelectUse();\n const unCheckedIds: string[] = [];\n const allIds = _getCurrentPageAllUse();\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(checkedIds, aId)) {\n unCheckedIds.push(aId);\n }\n });\n\n if (optBase.isCheckedCheckbox) {\n checkedIds.forEach((id: any) => {\n const data = _pageData.dataJson[id.toString()];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n });\n } else if (optBase.isCheckedRadio) {\n if (checkedIds.length > 0) {\n const data = _pageData.dataJson[checkedIds[0]];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n }\n }\n return { checkedIds, unCheckedIds, checkedData: list };\n};\n\nconst _emitChangeCheckedBefore = () => {\n const selectDataItem = _getSelectDataItem();\n _emitChangeChecked(selectDataItem.checkedIds.join(','), selectDataItem.checkedData, {\n checkedIds: selectDataItem.checkedIds,\n unCheckedIds: selectDataItem.unCheckedIds,\n });\n};\n\nconst _setSelectRc = (info: any) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const newId = info.id.toString();\n const oldSelectValue = optCurrentPageSelectIds.value;\n let newSelectValue: string[] = [];\n if (optBase.isCheckedCheckbox) {\n const isExist = CommonBase.isExistValue(oldSelectValue, newId);\n oldSelectValue.forEach((id: string) => {\n if (id !== newId) {\n newSelectValue.push(id);\n }\n });\n if (!isExist) {\n newSelectValue.push(newId);\n }\n optCurrentPageSelectIds.value = newSelectValue;\n _setCheckboxAll();\n _emitChangeCheckedBefore();\n } else {\n if (!(oldSelectValue.length > 0 && oldSelectValue[0] === newId)) {\n newSelectValue = [newId];\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n }\n }\n};\n\nconst _calculationScrollX = () => {\n if (optScrollXIsUse.value && refElBodyMain.value && refElBodyTable.value) {\n const pW = refElBodyMain.value.clientWidth;\n const tW = refElBodyTable.value.getWidth();\n optScrollX.isShow = tW > pW;\n }\n};\n\nconst _calculationScrollY = () => {\n if (optScrollYIsUse.value && refElBodyTable.value) {\n const bodyHeight = refElBodyTable.value.getHeight();\n let isY = bodyHeight > props.scrollY;\n if (!isY) {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyContainer.value) {\n isY = bodyHeight > refElBodyContainer.value.clientHeight;\n }\n } else {\n if (refElBodyMain.value && refElBodyMain.value.offsetHeight >= props.scrollY) {\n isY = bodyHeight > refElBodyMain.value.clientHeight;\n }\n }\n }\n if (isY && optIsShowTotal.value) {\n if (refElHeadTable.value) {\n const h = refElHeadTable.value.getTotalHeight() - (CommonBase.osType().isMobile ? 2 : 0);\n optBase.totalHeight = `${h}px`;\n }\n }\n optScrollYIsShow.value = isY;\n }\n};\n\nconst _calculationScrollFixedColumn = () => {\n if (\n (optFixedLeftIsUse.value || optFixedRightIsUse.value) &&\n refElBodyMain.value &&\n refElBodyTable.value\n ) {\n let scrollLeft = refElBodyMain.value.scrollLeft;\n const pWidth = refElBodyMain.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n let posType = 'left';\n if (scrollLeft > 0) {\n const tempSum = pWidth + scrollLeft;\n if (tempSum >= cWidth) {\n posType = 'right';\n } else {\n posType = 'center';\n }\n }\n optScrollX.posType = posType;\n }\n};\n\nconst _calculationScrollRelation = () => {\n if (!refElBodyWrapper.value || !refElBodyTable.value) {\n return;\n }\n let scrollLeft = refElHeadMain.value ? refElHeadMain.value.scrollLeft : 0;\n const pWidth = refElBodyWrapper.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n if (pWidth + scrollLeft > cWidth) {\n scrollLeft = 0;\n }\n if (optElastic.loading.length > 0) {\n refElBodyTable.value.setElasticLoadLeft(scrollLeft);\n }\n if (optNewList.value.length === 0) {\n refElBodyTable.value.setEmptyLeft(scrollLeft);\n }\n};\n\n// rAF 节流:滚动事件高频触发,同步 head/固定列与两轮布局计算合并到下一帧执行一次。\n// 每次调用先更新 cache(最后触发源胜),回调不再依赖首个事件对象——同帧多滚动源(head 滚动条 + body 惯性)时不会用旧源值覆盖回跳\nconst _onScrollX = (e: Event) => {\n _scrollLeftCache = (e.target as HTMLElement).scrollLeft;\n if (_rafIdScrollX !== null) {\n return;\n }\n _rafIdScrollX = requestAnimationFrame(() => {\n _rafIdScrollX = null;\n const scrollLeft = _scrollLeftCache;\n\n if (refElHeadMain.value) {\n refElHeadMain.value.scrollLeft = scrollLeft;\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.scrollLeft = scrollLeft;\n }\n\n if (refElHeadFixedScrollX.value) {\n refElHeadFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n if (refElBodyFixedScrollX.value) {\n refElBodyFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n\n _calculationScrollFixedColumn();\n _calculationScrollRelation();\n });\n};\n\n// head 滚动监听(与 body 侧 _onScrollBody 对称的变化过滤 + clamp 回跳防护):\n// head 滚动范围随滚动条占位(occupy 类)切换,程序赋值被浏览器 clamp 到上限时下一帧派发 scroll 事件,\n// 不加过滤时该 clamp 值覆盖 cache 把 body 拉回 head 上限(用户无法把 body 滚过 head 的滚动范围)\nconst _onScrollHead = (e: Event) => {\n const el = e.target as HTMLElement;\n const left = el.scrollLeft;\n const maxLeft = el.scrollWidth - el.clientWidth;\n if (maxLeft - left < 1 && refElBodyMain.value && refElBodyMain.value.scrollLeft > left) {\n return;\n }\n if (left !== _pageData.scrollHead.left) {\n _onScrollX(e);\n }\n _pageData.scrollHead.left = left;\n};\n\nconst _onScrollBody = (e: Event) => {\n const left = (e.target as HTMLElement).scrollLeft;\n if (left !== _pageData.scrollBody.left) {\n _onScrollX(e);\n }\n _pageData.scrollBody.left = left;\n};\n\nconst _calculationFixedHeadInfo = () => {\n if (props.isFixedHead && refElHeadWrapper.value && !optBase.isRunLoading) {\n let isShowFixed = false;\n let width = 'auto';\n let height = 'auto';\n const pos =\n refElHeadWrapper.value && refElHeadWrapper.value.parentNode\n ? CommonElement.getPositionView(refElHeadWrapper.value.parentNode)\n : null;\n if (pos && pos.top < 0 && refElBodyWrapper.value && refElHeadContainer.value && refElHeadTable.value) {\n const bodyH = refElBodyWrapper.value.clientHeight;\n if (pos.top > (bodyH - FIXED_HEAD_THRESHOLD) * -1) {\n isShowFixed = true;\n const w = refElBodyWrapper.value.offsetWidth;\n const h =\n optScrollX.isShow && props.isScrollX\n ? refElHeadContainer.value.offsetHeight\n : refElHeadTable.value.getOffsetHeight();\n width = `${w}px`;\n height = `${h}px`;\n }\n }\n optFixedHead.isShow = isShowFixed;\n optFixedHead.width = width;\n optFixedHead.height = height;\n }\n};\n\nconst _setEmptyWidth = () => {\n if (optNewList.value.length === 0) {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setEmptyWidth();\n }\n });\n }\n};\n\nconst _getPaginateSort = (): TableEmitParam => {\n const param: TableEmitParam = {};\n if (props.isPaginate) {\n const { pages, limit } = _pageData.changeNewPaginate;\n param.pages = pages;\n param.limit = limit;\n // isPaginate 开启时 pages/limit 必有初值(1/limit),as 收窄消除 undefined 分支\n param.offset = ((param.pages as number) - 1) * (param.limit as number);\n }\n if (props.isOrder) {\n const { orderIndex, orderBy } = _pageData.changeNewSort;\n param.orderIndex = orderIndex;\n param.orderBy = orderBy;\n const orderColumn = (props.columns as any[])[orderIndex as number];\n if (!CommonBase.isUndefined(orderColumn)) {\n param.orderColumns = orderColumn.data;\n }\n }\n return param;\n};\n\nconst _initScrollSelect = () => {\n if (props.scrollY > 0) {\n nextTick(() => {\n if (!refElBodyMain.value) {\n return;\n }\n const elSelected = refElBodyMain.value.querySelectorAll('.tr-selected');\n refElBodyMain.value.scrollTop =\n elSelected && elSelected.length > 0\n ? (elSelected[0] as HTMLElement).offsetTop > SELECT_SCROLL_THRESHOLD\n ? (elSelected[0] as HTMLElement).offsetTop - SELECT_SCROLL_OFFSET\n : 0\n : 0;\n });\n }\n};\n\nconst _setNewDataAfter = (opt: any = {}) => {\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n _initScrollSelect();\n }\n\n if (props.isElastic) {\n const isElasticCloseAll = CommonBase.isBoolean(opt.isElasticCloseAll)\n ? opt.isElasticCloseAll\n : true;\n if (isElasticCloseAll) {\n optElastic.open = [];\n // 全关时清空 Body 侧 absolute 标记(旧行 id 作废,残留标记在 id 复用场景会命中)\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.clearElasticAbsolute();\n }\n }\n optElastic.loading = [];\n _initElasticAllData();\n }\n // 数据替换后重置悬停高亮:hover 跟随行索引,新数据同索引行会残留旧高亮\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n nextTick(() => {\n if (props.isPaginate) {\n optPageInfo.pages = _pageData.changeNewPaginate.pages;\n optPageInfo.limit = _pageData.changeNewPaginate.limit;\n }\n if (props.isOrder) {\n optOrderSort.value = _initOrderData([\n _pageData.changeNewSort.orderIndex,\n _pageData.changeNewSort.orderBy,\n ]);\n }\n _runLoadStop();\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setEmptyWidth();\n _calculationFixedHeadInfo();\n });\n });\n};\n\nconst _getNewDataByLocal = (param: any, isInitSort: boolean) => {\n const list = CommonBase.isEmpty(props.list) ? [] : props.list;\n let newSortData: any[] = [];\n if (isInitSort) {\n if (props.isOrder) {\n const jsonData: any = {};\n const sortKey: any[] = [];\n let sortFormat = 'string';\n if (!CommonBase.isUndefined(param.orderIndex)) {\n const orderColumns = param.orderColumns;\n const columnsInfo = (props.columns as any[])[param.orderIndex];\n if (!CommonBase.isUndefined(columnsInfo)) {\n if (CommonBase.isEmpty(columnsInfo.sortType)) {\n switch (columnsInfo.format) {\n case 'int':\n case 'float2':\n case 'float3':\n sortFormat = 'number';\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n sortFormat = 'date';\n break;\n default:\n sortFormat = 'string';\n }\n } else {\n sortFormat = columnsInfo.sortType;\n }\n }\n list.forEach((info: any) => {\n if (!info) {\n return;\n }\n let temp = info[orderColumns];\n temp = CommonBase.isUndefined(temp) || temp === null ? '' : temp;\n const tempStr = temp.toString();\n if (!CommonBase.isExistJsonKey(jsonData, tempStr)) {\n jsonData[tempStr] = [];\n sortKey.push(temp);\n }\n jsonData[tempStr].push(CommonBase.getJsonClone(info));\n });\n }\n if (sortKey.length > 0) {\n const newSortKey: any[] =\n param.orderBy === 'desc'\n ? CommonBase.getArrDesc(sortKey, sortFormat)\n : CommonBase.getArrAsc(sortKey, sortFormat);\n newSortKey.forEach((k: any) => {\n newSortData.push(...jsonData[k.toString()]);\n });\n }\n } else {\n newSortData = CommonBase.getListClone(props.list);\n }\n _pageData.sortLocalData = newSortData;\n } else {\n newSortData = _pageData.sortLocalData;\n }\n if (props.isPaginate) {\n const newData = [];\n const len = newSortData.length;\n const s = param.offset;\n let e = param.offset + param.limit;\n e = len < e ? len : e;\n if (len) {\n if (len >= s && len > 0) {\n for (let i = s; i < e; i += 1) {\n newData.push(CommonBase.getJsonClone(newSortData[i]));\n }\n }\n }\n return newData;\n } else {\n return newSortData;\n }\n};\n\nconst _getNewDataBefore = (opt: any = {}) => {\n const param = _getPaginateSort();\n optCurrentPageSelectIds.value = [];\n optAllValue.value = false;\n _runLoadStart();\n if (props.isServer) {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n _emitGetData(param);\n }, LOCAL_LOAD_DELAY);\n } else {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n const isInitSortData = CommonBase.isBoolean(opt.isChangePage) ? !opt.isChangePage : true;\n optNewList.value = _getNewDataByLocal(param, isInitSortData);\n _setNewDataAfter();\n }, LOCAL_LOAD_DELAY);\n }\n};\n\nconst _listenerTableScrollX = () => {\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.addEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.addEventListener('scroll', _onScrollBody);\n }\n }\n};\n\nconst _listenerTableScrollY = () => {\n if (optScrollYIsUse.value) {\n const win: any = window;\n const MutationObserver: any =\n win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver;\n if (!MutationObserver) {\n return;\n }\n _pageObject.observerBodyScrollY = new MutationObserver(() => {\n _calculationScrollY();\n });\n const observer = _pageObject.observerBodyScrollY;\n if (refElBodyTable.value && refElBodyTable.value.$el && observer) {\n observer.observe(refElBodyTable.value.$el, {\n childList: true,\n subtree: true,\n });\n }\n }\n};\n\nconst _onWinResize = () => {\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setElasticWidth();\n _setEmptyWidth();\n _calculationScrollRelation();\n nextTick(() => {\n _calculationFixedHeadInfo();\n });\n};\n\nconst _onWinScroll = () => {\n if (_rafIdWinScroll !== null) {\n return;\n }\n _rafIdWinScroll = requestAnimationFrame(() => {\n _rafIdWinScroll = null;\n _calculationFixedHeadInfo();\n });\n};\n\nconst _initMain = () => {\n _analysisColumns();\n nextTick(() => {\n if (props.isServer) {\n _getNewDataBefore();\n } else {\n if (!CommonBase.isEmpty(props.list)) {\n _getNewDataBefore();\n if (!props.isShowInitLoadIng) {\n optBase.isRunLoading = false;\n }\n } else {\n if (props.isShowInitLoadIng) {\n _runLoadStart();\n } else {\n nextTick(() => {\n _setEmptyWidth();\n });\n }\n }\n }\n });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n _listenerTableScrollX();\n _listenerTableScrollY();\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true, // 拖拽窗口高频触发 resize,DelayFun 默认 200ms 节流(isDelay 默认即 true,显式标注语义)\n callback: () => {\n _onWinResize();\n },\n });\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n });\n});\n\nonActivated(() => {\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n // 与 scroll 同源处理:deactivated 时已销毁,激活后重建 resize 监听,防止缓存期间持续执行布局计算\n if (!_pageData.resizeEvent) {\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true,\n callback: () => {\n _onWinResize();\n },\n });\n }\n // 缓存期间窗口尺寸变化已丢失监听,激活后立即补一次布局重算(固定列宽/滚动量判定停留在缓存前状态,否则持续错误到下次 resize)\n _onWinResize();\n // deactivated 时取消了未决加载请求 → 激活后补发数据(keep-alive 切走切回场景,数据不停滞)\n if (_pageData.pendingCanceled) {\n _pageData.pendingCanceled = false;\n _getNewDataBefore();\n }\n});\n\nonDeactivated(() => {\n window.removeEventListener('scroll', _onWinScroll);\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n // 取消未决加载后同步复位 loading:否则 isRunLoading 残留 true,\n // 遮罩常驻 + onChangePaginate/refresh/onClickOrderBy 的守卫把交互全部吞掉(keep-alive 缓存期)\n optBase.isRunLoading = false;\n // 标记未决请求被取消:onActivated 时补发数据(否则 keep-alive 切回后数据停留旧状态,\n // 与 onBeforeUnmount→onMounted 经 _initMain 重拉的路径不对称——Index R4 回归发现)\n _pageData.pendingCanceled = true;\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n _pageData.resizeEvent = null;\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n});\n\nonBeforeUnmount(() => {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n if (_pageObject.observerBodyScrollY) {\n _pageObject.observerBodyScrollY.disconnect();\n _pageObject.observerBodyScrollY.takeRecords();\n _pageObject.observerBodyScrollY = null;\n }\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.removeEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.removeEventListener('scroll', _onScrollBody);\n }\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n window.removeEventListener('scroll', _onWinScroll);\n});\n\nwatch(\n () => props.list,\n (newValue: any[], oldValue: any[]) => {\n // 外部传 null 兜底空数组(Array prop 校验放行 null,getJsonByList/遍历会崩溃)\n const safeList: any[] = CommonBase.isEmpty(newValue) ? [] : newValue;\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n _pageData.dataJson = CommonBase.getJsonByList(safeList);\n\n if (props.isServer) {\n // 克隆后赋值:与本地模式一致,防止子组件原地修改行对象污染外部传入的 props.list\n optNewList.value = CommonBase.getListClone(safeList) as ListInfo[];\n } else {\n if (props.isParamTriggerServer) {\n optNewList.value = CommonBase.getListClone(safeList, true);\n } else {\n _pageData.changeNewPaginate.pages = 1;\n const paramLocal = _getPaginateSort();\n optNewList.value = _getNewDataByLocal(paramLocal, true) as ListInfo[];\n }\n }\n const opt: any = {};\n if (props.isElastic) {\n // 原地 mutation 时 newValue 与 oldValue 为同一批对象引用,逐项比较 id 恒相等;\n // 改为 id 集合 diff:以「内容是否变化」判断是否为数据更新(引用变化时 isUpd 为 true,不走关闭逻辑)\n let isUpd = false;\n if (oldValue) {\n if (safeList.length === oldValue.length) {\n // list 中含 null 行时 null.id 会中断回调,用可选链兜底(null 行无 id 可比较,不视为更新)\n const oldIdSet = new Set(oldValue.map((item: any) => item?.id));\n isUpd = safeList.some((info: any) => info && !oldIdSet.has(info.id));\n } else {\n // 长度变化(新增/删除行)也视为数据更新,被删行的展开 id 不再残留\n isUpd = true;\n }\n }\n if (!isUpd) {\n opt.isElasticCloseAll = false;\n }\n }\n _setNewDataAfter(opt);\n },\n { deep: true },\n);\n\nwatch(\n () => props.columns,\n () => {\n nextTick(() => {\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n });\n });\n },\n { deep: true },\n);\n\nwatch(\n () => props.selectValue,\n () => {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n },\n);\n\nwatch(\n () => props.orderSort,\n (newValue: unknown[], _oldValue: unknown[]) => {\n if (newValue && newValue.length >= 2) {\n if (\n !(\n newValue[0] === _pageData.changeNewSort.orderIndex &&\n newValue[1] === _pageData.changeNewSort.orderBy\n )\n ) {\n const newOrderSort = _initOrderData(props.orderSort);\n // 与 onClickOrderBy 一致:排序变更从第 1 页开始,避免停留在旧页码切片\n _pageData.changeNewPaginate.pages = 1;\n // 页码 UI 立即同步:服务端模式下 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移\n optPageInfo.pages = 1;\n _pageData.changeNewSort = {\n orderIndex: newOrderSort[0],\n orderBy: newOrderSort[1],\n };\n optOrderSort.value = newOrderSort;\n // 非 isParamTriggerServer 模式:外部改 props 排序需本地重算数据(与 onClickOrderBy 分支一致)\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n }\n },\n { deep: true },\n);\n\nwatch(\n [() => props.pageOffset, () => props.paginateLimit],\n ([_newOffset, newLimit], [_oldOffset, _oldLimit]) => {\n const pages = _initPaginatePages();\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = newLimit;\n optPageInfo.pages = pages;\n optPageInfo.limit = newLimit;\n // 外部改 props 分页需本地重算数据(与 onChangePaginate 分支一致);isParamTriggerServer 由外部拉数,不重算\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n },\n);\n\nconst onSelectAll = () => {\n // 组件禁用时全选一并拦截:表头 checkbox 已随 disabled 置灰,此处为逻辑层兜底,防任何路径绕过 UI 触发全选\n if (props.disabled) {\n return;\n }\n const newAllValue = !optAllValue.value;\n let newSelectValue: string[] = [];\n if (newAllValue) {\n const allIds = _getCurrentPageAllUse();\n const sIds = optCurrentPageSelectIds.value;\n const temp: string[] = [];\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(sIds, aId)) {\n temp.push(aId);\n }\n });\n newSelectValue = sIds.concat(temp);\n }\n optAllValue.value = newAllValue;\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n};\n\nconst onClickOrderBy = (_info: any, inx: number, sortType: string) => {\n // 组件禁用时排序一并拦截:表头排序图标已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发排序\n if (props.disabled) {\n return;\n }\n if (!optBase.isRunLoading) {\n _pageData.changeNewPaginate.pages = 1;\n // 与 watch orderSort 一致:页码 UI 立即同步(服务端模式 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移)\n optPageInfo.pages = 1;\n _pageData.changeNewSort.orderIndex = inx;\n _pageData.changeNewSort.orderBy = sortType;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n};\n\n// info 允许 null:Body emit 声明 ListInfo | null(list 含 null 行时点击行携带 null),isEmpty 守卫已拦截\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n // null 行守卫:list 含 null 项时 info.isDisabled 解引用崩溃(null 行无行为,直接返回);!info 同时提供 TS 收窄\n if (!info || CommonBase.isEmpty(info)) {\n return;\n }\n // 禁用行统一拦截:行禁用或组件禁用时,选中、弹性展开、onClickRow 事件全部不触发\n if ((CommonBase.isBoolean(info.isDisabled) && info.isDisabled) || props.disabled) {\n return;\n }\n // 空串语义 = 不启用拦截:getParent 空串分支返回 parentNode 会误拦截全部点击,先守卫\n const elInvalid = CommonBase.isNonEmptyString(props.rowClickKeyInvalid)\n ? CommonElement.getParent(e.target, props.rowClickKeyInvalid, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elInvalid)) {\n if (props.isElastic) {\n const elElastic = CommonBase.isNonEmptyString(props.rowClickKeyElastic)\n ? CommonElement.getParent(e.target, props.rowClickKeyElastic, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elElastic)) {\n if (props.isClickRowLinkage) {\n _setSelectElasticIds(info, inx);\n }\n } else {\n _setSelectElasticIds(info, inx, elElastic);\n return;\n }\n }\n let isRc = false;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n let elRc = CommonElement.getParent(e.target, '.th-rc', e.currentTarget, false);\n if (elRc === e.currentTarget) {\n elRc = null;\n }\n if (CommonBase.isUndefined(elRc)) {\n if (props.isClickRowLinkage) {\n _setSelectRc(info);\n }\n } else {\n isRc = true;\n _setSelectRc(info);\n }\n }\n _emitClickRow(info, inx, isRc);\n }\n};\n\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n optBase.hoverTrIndex = inx;\n optBase.hoverTrElasticIndex = elasticInx;\n};\n\nconst onHoverOutTr = () => {\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n};\n\nconst onChangePaginate = (pages: number, limit: number) => {\n // 组件禁用时分页一并拦截:分页条已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发翻页\n if (props.disabled) {\n return;\n }\n if (optBase.isRunLoading) {\n return;\n }\n if (props.isPaginate) {\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = limit;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n }\n};\n\nconst onFixedScrollX = (e: Event) => {\n _onScrollX(e);\n};\n\nconst getParamInfo = () => {\n return _getPaginateSort();\n};\n\nconst refresh = (isInit = true) => {\n if (optBase.isRunLoading) {\n return;\n }\n if (isInit) {\n _pageData.changeNewPaginate.pages = 1;\n }\n _getNewDataBefore();\n};\n\nconst getData = (): ListInfo[] => {\n // 浅拷贝契约:行对象一层克隆,嵌套对象与内部状态共享引用(外部拿到后不会改到内部状态,但嵌套引用仍共享)\n const list = toRaw(optNewList.value);\n return CommonBase.getListClone(list) as ListInfo[];\n};\n\nconst getSelectData = () => {\n const selectDataItem = _getSelectDataItem();\n const checkedIds = selectDataItem?.checkedIds || [];\n return { ids: checkedIds.join(','), list: selectDataItem?.checkedData || [] };\n};\n\nconst loadStart = () => {\n _runLoadStart();\n};\n\nconst loadStop = () => {\n _runLoadStop();\n};\n\n// 与 closeElastic 一致:外部可能传数字 id(ListInfo.id 为 string | number),入口归一为字符串防 indexOf 失配\nconst loadElasticStart = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStart(id.toString());\n};\n\nconst loadElasticStop = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStop(id.toString());\n};\n\n// 幂等关闭:未展开的行直接返回,避免调用方按「关闭」语义误触「展开 + 触发加载」\nconst closeElastic = (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => {\n // null 行守卫:运行时兜底(list 含 null 项场景调用方可能传入空 info),info.id 解引用前先判空\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (optElastic.open.indexOf(id) === -1) {\n return;\n }\n // elElastic 缺省时按 data-elastic-id 定位(Body 模板挂载点),供关闭后弹性容器类名/高度复位\n const el =\n elElastic ||\n (refElBodyMain.value\n ? (refElBodyMain.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null)\n : null);\n _setSelectElasticIds(info, trIndex, el, false);\n};\n\nconst refreshResize = () => {\n _onWinResize();\n};\n\nexport interface ClTableExpose {\n getParamInfo: () => TableEmitParam;\n refresh: (isInit?: boolean) => void;\n getData: () => ListInfo[];\n getSelectData: () => { ids: string; list: ListInfo[] };\n loadStart: () => void;\n loadStop: () => void;\n loadElasticStart: (id: string | number) => void;\n loadElasticStop: (id: string | number) => void;\n closeElastic: (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => void;\n refreshResize: () => void;\n}\n\ndefineExpose({\n getParamInfo,\n refresh,\n getData,\n getSelectData,\n loadStart,\n loadStop,\n loadElasticStart,\n loadElasticStop,\n closeElastic,\n refreshResize,\n});\n</script>\n"],"names":["getTipIconInfo","tipIcon","CommonBase","name","props","__props","emit","__emit","optTipIcon","computed","optThInfo","optSortable","optSortInteractive","optTipMsgText","tipMsg","text","optSortType","orderSort","optAriaSort","clsTh","cls","thInfo","_isWidthValid","activeSort","clsFinal","CommonElement","styTh","sty","_emitClickOrderBy","sortType","w","onClickOrderBy","newSortType","_unref","_createElementBlock","_createElementVNode","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_Fragment","optTdInfo","clsTd","tdInfo","styTd","NO_HOVER_TOTAL_INDEX","refElTable","ref","clsParent","styTable","optFunGetThValue","info","optFunGetTdValue","value","opt","optFunGetTotalValue","watch","nv","onSelectAll","inx","onHoverInTotal","onHoverOutTotal","__expose","elRc","totalPadding","elThs","ti","thStyle","plRaw","prRaw","pl","pr","h","elTotal","ClCheckboxOne","_openBlock","_renderList","thIndex","ClTableTh","_toDisplayString","_hoisted_2","_normalizeClass","_hoisted_3","tdIndex","ClTableTd","elId","optForId","_emitChange","onTipClick","onClick","event","target","_hoisted_4","_createVNode","optForIdCb","_getForId","optForIdRd","optIsChecked","optIsDisabled","suffix","ClRadioOne","optPageLanguage","getPageLanguage","useLanguage","optElasticAbsoluteIds","optSelectedSet","v","optElasticLoadingSet","optElasticOpenSet","optColspanCount","n","clsTable","onClickTr","e","onHoverInTr","elasticInx","onHoverOutTr","optGetElasticDataList","id","elasticData","optIsTrSelected","optIsElasticLoading","parentEl","el","li","elElastic","cur","next","scrollLeft","safeLeft","trInfo","trIndex","$event","ClTableTdChecked","_createTextVNode","_hoisted_5","ClLoad","_hoisted_9","_hoisted_10","trElasticInfo","trElasticInx","tdElasticInfo","tdElasticIndex","_hoisted_12","_hoisted_14","SCROLLBAR_HEIGHT","FIXED_HEAD_THRESHOLD","SELECT_SCROLL_THRESHOLD","SELECT_SCROLL_OFFSET","LOCAL_LOAD_DELAY","slots","useSlots","_initOrderData","data","orderSortInfo","initFirstSort","columns","i","columnInfo","sort","visible","columnOrderInfo","orderIndex","orderBy","_initPaginatePages","pages","_initOrderSort","_pageData","_pageObject","_keyIndex","refElHeadWrapper","refElHeadContainer","refElHeadMain","refElHeadTable","refElHeadFixedScrollX","refElBodyWrapper","refElBodyContainer","refElBodyMain","refElBodyTable","refElBodyFixedScrollX","optBase","reactive","optNewList","optPageInfo","optOrderSort","optAllValue","_getSelectValueIds","selectValue","optCurrentPageSelectIds","optElastic","optScrollX","optScrollYIsShow","optFixedColumn","optFixedHead","optLoadInfo","_rafIdScrollX","_rafIdWinScroll","_scrollLeftCache","optSlotsKeyTh","optSlotsKeyTd","names","optSlotsKeyTotal","optSlotsKeyTdElastic","optIsShowCheckboxAll","optIsShowTotal","optTotalCount","optScrollXIsUse","optScrollYIsUse","optFixedLeftIsUse","optFixedRightIsUse","clsHeadWrapper","clsHeadContainer","clsBodyWrapper","styBodyContainer","maxH","styBodyMain","styLoadHead","_emitGetData","param","_emitClickElastic","isOpen","_emitClickRow","isRc","_emitChangeChecked","ids","list","ext","_emitChangeParams","_getPaginateSort","_runLoadStart","nextTick","elThead","_runLoadStop","_analysisColumns","colspanCount","minWidth","_analysisFixedColumns","resolve","reject","totalWidth","centerWidth","leftColumn","rightColumn","elTds","totalLen","leftColspanCount","rightColspanCount","leftIndexMax","rightIndexMin","leftWidth","rightWidth","fi","elTd","tempW","err","_setElasticWidth","_setElasticHeight","_runElasticLoadStart","arr","_runElasticLoadStop","_setSelectElasticIds","isEmit","_initElasticOneClass","isEmitUse","_initElasticAllData","newList","elasticIconCls","arrOpenId","newInfo","addCls","removeCls","newCls","_getCurrentPageAllUse","allIds","_getCurrentSelectUse","selectIds","sIds","useIds","sId","_setCheckboxAll","checkedIds","_getSelectDataItem","unCheckedIds","aId","_emitChangeCheckedBefore","selectDataItem","_setSelectRc","newId","oldSelectValue","newSelectValue","isExist","_calculationScrollX","pW","tW","_calculationScrollY","bodyHeight","isY","_calculationScrollFixedColumn","pWidth","cWidth","posType","_calculationScrollRelation","_onScrollX","_onScrollHead","left","_onScrollBody","_calculationFixedHeadInfo","isShowFixed","width","height","pos","bodyH","_setEmptyWidth","limit","orderColumn","_initScrollSelect","elSelected","_setNewDataAfter","arrSelectIds","_getNewDataByLocal","isInitSort","newSortData","jsonData","sortKey","sortFormat","orderColumns","columnsInfo","temp","tempStr","k","newData","len","s","_getNewDataBefore","isInitSortData","_listenerTableScrollX","_listenerTableScrollY","win","MutationObserver","observer","_onWinResize","_onWinScroll","_initMain","onMounted","ResizeEvent","onActivated","onDeactivated","onBeforeUnmount","newValue","oldValue","safeList","paramLocal","isUpd","oldIdSet","item","_oldValue","newOrderSort","_newOffset","newLimit","_oldOffset","_oldLimit","newAllValue","_info","elInvalid","onChangePaginate","onFixedScrollX","isInit","toRaw","_normalizeStyle","ClTableHead","skTh","_withCtx","slotProps","skTotal","_withDirectives","_hoisted_6","ClScrollXFence","_vShow","_hoisted_7","ClTableBody","skTd","skTdElastic","_hoisted_8","_hoisted_11","ClPaginate","_hoisted_13","ClLoadIng"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClTable.js","sources":["../../../src/libs/Web/Table/TipIcon.ts","../../../src/libs/Web/Table/Th.vue","../../../src/libs/Web/Table/Td.vue","../../../src/libs/Web/Table/Head.vue","../../../src/libs/Web/Table/TdChecked.vue","../../../src/libs/Web/Table/Body.vue","../../../src/libs/Web/Table/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\n\nexport interface TipIconInfo {\n name: string;\n className: string;\n}\n\n// 解析 tipIcon 配置为图标渲染信息:\n// clIcon- 前缀 → 内置图标通道(前缀后非纯图标名回退默认);clicon 大小写错误回退默认;\n// 裸内置图标名自动补前缀走内置通道;其余按第三方自定义类名处理\nexport const getTipIconInfo = (tipIcon: string | undefined): TipIconInfo => {\n if (CommonBase.isNonEmptyString(tipIcon)) {\n if (tipIcon.indexOf('clIcon-') === 0) {\n // clIcon- 前缀:去前缀走内置图标通道,前缀后非纯图标名(含空格等)回退默认\n const name = tipIcon.substring('clIcon-'.length);\n if (CommonBase.isNonEmptyString(name) && /^[a-zA-Z0-9-]+$/.test(name)) {\n return { name, className: '' };\n }\n return { name: 'question-circle', className: '' };\n }\n if (/^clicon/i.test(tipIcon)) {\n // clIcon- 前缀写错(漏 -、大写):回退默认图标\n return { name: 'question-circle', className: '' };\n }\n if (/^[a-zA-Z0-9-]+$/.test(tipIcon)) {\n // 裸内置图标名(未加 clIcon- 前缀):自动补前缀走内置通道\n return { name: tipIcon, className: '' };\n }\n // 第三方自定义类名(如 fa fa-star)\n return { name: '', className: tipIcon };\n }\n return { name: 'question-circle', className: '' };\n};\n","<template>\n <th\n v-if=\"CommonBase.isBoolean(thInfo?.visible) ? thInfo.visible : true\"\n :class=\"clsTh\"\n :style=\"styTh\"\n scope=\"col\"\n :aria-sort=\"optAriaSort\"\n >\n <span\n class=\"th-title\"\n @click=\"onClickOrderBy\"\n >\n <slot />\n </span>\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(thInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"th-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: thInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n <i\n v-if=\"optSortType !== ''\"\n class=\"tr-sort-icon\"\n aria-hidden=\"true\"\n @click=\"onClickOrderBy\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTh',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n thIndex: {\n type: Number,\n default: 0, // desc: 表头单元格索引\n },\n thInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 表头配置信息\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickOrderBy: (_thInfo: ColumnsInfo, _thIndex: number, _sortType: string) => true, // desc: 点击排序事件\n});\n\n// slots: default 表头内容\n\nconst optTipIcon = computed(() => getTipIconInfo(props.thInfo?.tipIcon));\n\n// thInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象;\n// 非对象 truthy 输入(字符串/数字)同样归一为 {}——原始类型取 .sort/.width 等属性语义异常(空表头误判可排序);\n// 数组是 isObject=true 但语义上非列配置,保持透传不归一(.sort 命中原生数组方法不崩溃,仅属性访问 undefined)\nconst optThInfo = computed(() =>\n CommonBase.isObject(props.thInfo) && !CommonBase.isEmpty(props.thInfo)\n ? (props.thInfo as ColumnsInfo)\n : ({} as ColumnsInfo),\n);\n\n// 当前列可排序判定(isOrder 且该列 sort 未显式禁用;空 sort 视为 true 默认可排)。\n// 不受 disabled 影响:disabled 仍保留排序图标与激活态展示,仅拦截交互(见 optSortInteractive)\nconst optSortable = computed(() => {\n if (!props.isOrder) {\n return false;\n }\n // columns 含 null/空对象项(配置错误输入)时前置返回 false:空表头不渲染排序交互,\n // 与 Index._analysisColumns/_initOrderData 跳过 null 列的口径对齐(否则点击空表头激活别的列)\n // 守卫用归一后的 optThInfo(非对象 truthy 归一为 {} 后同样拦截,与判定谓词一致)\n if (CommonBase.isEmpty(optThInfo.value)) {\n return false;\n }\n return CommonBase.isEmpty(optThInfo.value.sort) ? true : optThInfo.value.sort === true;\n});\n\n// 当前列是否允许排序交互:具备排序能力且组件未禁用(disabled 时拦截点击)\nconst optSortInteractive = computed(() => optSortable.value && !props.disabled);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.thInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\n// 当前列排序状态:'asc' | 'desc'(激活排序)| 'none'(可排未激活)| ''(不可排)\nconst optSortType = computed(() => {\n if (!optSortable.value) {\n return '';\n }\n const orderSort = CommonBase.isEmpty(props.orderSort) ? [] : props.orderSort;\n if (orderSort.length > 0 && orderSort[0] === props.thIndex) {\n // length===1(仅索引未选方向)→ 默认 desc 激活;length===2 但方向非法 / length>2 畸形元组 → 不静默激活,返回 'none'\n return orderSort.length === 2\n ? orderSort[1] === 'asc' || orderSort[1] === 'desc'\n ? orderSort[1]\n : 'none'\n : orderSort.length === 1\n ? 'desc'\n : 'none';\n }\n return 'none';\n});\n\nconst optAriaSort = computed(() => {\n if (optSortType.value === 'asc') {\n return 'ascending';\n }\n if (optSortType.value === 'desc') {\n return 'descending';\n }\n if (optSortType.value === 'none') {\n return 'none';\n }\n return undefined;\n});\n\nconst clsTh = computed(() => {\n const cls: Record<string, boolean> = {};\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n cls[`${props.widthClassPrefix}${thInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${thInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['th-hidden'] =\n (props.fixedLeftIndex > -1 && props.thIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.thIndex < props.fixedRightIndex);\n }\n if (optSortable.value) {\n cls['th-sort'] = true;\n cls['sort-none'] = true;\n cls['th-sort-near'] = thInfo.sortNear === true;\n // 激活列判定已收敛至 optSortType(asc/desc 当且仅当 orderSort[0] === thIndex),激活时覆盖 sort-none\n const activeSort = optSortType.value;\n if (activeSort === 'asc' || activeSort === 'desc') {\n cls[`sort-${activeSort}`] = true;\n cls['sort-none'] = false;\n }\n }\n if (CommonBase.isNonEmptyString(thInfo.tipMsg)) {\n cls['th-tip'] = true;\n cls['th-tip-sideAlign'] = thInfo.tipSideAlign === true;\n }\n if (props.disabled) {\n cls['th-disabled'] = true;\n }\n if (CommonBase.isNonEmptyString(thInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], thInfo.textAlign)) {\n cls[`text-${thInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.className));\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.classTh));\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTh = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n sty.width = CommonBase.isFinite(Number(thInfo.width))\n ? `${Number(thInfo.width)}px`\n : `${thInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(thInfo.widthMin))\n ? `${Number(thInfo.widthMin)}px`\n : `${thInfo.widthMin}`;\n }\n return sty;\n});\n\nconst _emitClickOrderBy = (thInfo: ColumnsInfo, sortType: string) => {\n emit('onClickOrderBy', thInfo, props.thIndex, sortType);\n};\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n\nconst onClickOrderBy = () => {\n // disabled 时拦截排序(optSortInteractive=false),但保留排序图标展示\n if (optSortInteractive.value) {\n // 未激活('none')默认 desc,已激活翻转(orderSort 解析已收敛至 optSortType)\n const newSortType = optSortType.value === 'desc' ? 'asc' : 'desc';\n _emitClickOrderBy(optThInfo.value, newSortType);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"CommonBase.isBoolean(tdInfo?.visible) ? tdInfo.visible : true\"\n :class=\"clsTd\"\n :style=\"styTd\"\n >\n <slot />\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(tdInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"td-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: tdInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTd',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n tdIndex: {\n type: Number,\n default: 0, // desc: 单元格索引\n },\n tdInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 单元格配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n useType: {\n type: String,\n default: 'td', // desc: 使用类型 | enum: td, total\n validator: (value: string) => ['td', 'total'].indexOf(value) > -1,\n },\n});\n\n// slots: default 默认单元格内容\n\n// 提示图标:与 Th 侧同构,抽取至 TipIcon.ts 统一维护\nconst optTipIcon = computed(() => getTipIconInfo(props.tdInfo?.tipIcon));\n\n// tdInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象\nconst optTdInfo = computed(() =>\n CommonBase.isEmpty(props.tdInfo) ? ({} as ColumnsInfo) : props.tdInfo,\n);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.tdInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\nconst clsTd = computed(() => {\n const cls: Record<string, boolean> = {};\n const tdInfo = optTdInfo.value;\n\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n cls[`${props.widthClassPrefix}${tdInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${tdInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['td-hidden'] =\n (props.fixedLeftIndex > -1 && props.tdIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.tdIndex < props.fixedRightIndex);\n }\n if (props.isOrder) {\n const sort = CommonBase.isEmpty(tdInfo.sort) ? true : tdInfo.sort === true;\n if (sort) {\n cls['td-sort'] = true;\n cls['td-sort-near'] = tdInfo.sortNear === true;\n }\n }\n if (CommonBase.isNonEmptyString(tdInfo.tipMsg)) {\n cls['td-tip'] = true;\n cls['td-tip-sideAlign'] = tdInfo.tipSideAlign === true;\n }\n if (CommonBase.isNonEmptyString(tdInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], tdInfo.textAlign)) {\n cls[`text-${tdInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.className));\n if (props.useType === 'td') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTd));\n } else if (props.useType === 'total') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTotal));\n }\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTd = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const tdInfo = optTdInfo.value;\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n sty.width = CommonBase.isFinite(Number(tdInfo.width))\n ? `${Number(tdInfo.width)}px`\n : `${tdInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(tdInfo.widthMin))\n ? `${Number(tdInfo.widthMin)}px`\n : `${tdInfo.widthMin}`;\n }\n return sty;\n});\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n</script>\n","<template>\n <table\n :class=\"clsParent\"\n :style=\"styTable\"\n :aria-hidden=\"!CommonBase.isEmpty(fixedType)\"\n ref=\"refElTable\"\n >\n <thead>\n <tr>\n <th\n v-if=\"isShowRadio || isShowCheckbox\"\n :class=\"{ 'th-rc': true, 'th-hidden': fixedRightIndex > -1 }\"\n scope=\"col\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox && isShowCheckboxAll\"\n :forId=\"\n CommonBase.isNonEmptyString(keyIndex) ? `${keyIndex}_${fixedType}_cb_all` : undefined\n \"\n :value=\"checkboxAllValue\"\n :disabled=\"disabled\"\n @onChange=\"onSelectAll\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n <template\n v-for=\"(thInfo, thIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_head_th_${thIndex}`\"\n >\n <cl-table-th\n :thInfo=\"thInfo\"\n :thIndex=\"thIndex\"\n :isOrder=\"isOrder\"\n :disabled=\"disabled\"\n :orderSort=\"orderSort\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickOrderBy=\"onClickOrderBy\"\n >\n <template v-slot>\n <slot\n :name=\"`th_${thInfo?.data ?? ''}`\"\n :data=\"thInfo\"\n >\n <span>{{ optFunGetThValue(thInfo) }}</span>\n </slot>\n </template>\n </cl-table-th>\n </template>\n </tr>\n </thead>\n <tbody v-if=\"isShowTotal\">\n <tr\n :class=\"{\n 'tr-total': true,\n 'tr-hover': hoverIndex === NO_HOVER_TOTAL_INDEX,\n }\"\n @mouseenter=\"onHoverInTotal\"\n @mouseleave=\"onHoverOutTotal\"\n >\n <td v-if=\"isShowRadio || isShowCheckbox\" />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_total_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n useType=\"total\"\n >\n <template v-slot>\n <slot\n :name=\"`total_${tdInfo?.data ?? ''}`\"\n :data=\"totalInfo\"\n >{{ optFunGetTotalValue(totalInfo, tdInfo) }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </tbody>\n <template v-else></template>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClTableTh from './Th.vue';\nimport ClTableTd from './Td.vue';\nimport type { ColumnsInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableHead' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isShowTotal: {\n type: Boolean,\n default: false, // desc: 是否显示总计行\n },\n totalInfo: {\n type: Object as () => Record<string, any>,\n default: () => ({}), // desc: 总计数据信息\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引(99999999 = 总计行悬停哨兵,与 NO_HOVER_TOTAL_INDEX 契约一致)\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n checkboxAllValue: {\n type: Boolean,\n default: false, // desc: 全选状态\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right\n validator: (value: string) => ['', 'left', 'right'].indexOf(value) > -1,\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickAll: () => true, // desc: 点击全选事件\n onClickOrderBy: (_info: ColumnsInfo, _inx: number, _sortType: string) => true, // desc: 点击排序事件\n onHoverIn: (_index: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: th_{data} 列头自定义内容 | total_{data} 总计行单元格自定义内容\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n// 总计行悬停哨兵索引,与 Index 侧 hoverIndex 的隐式契约值(99999999 永不等于数据行索引)\nconst NO_HOVER_TOTAL_INDEX = 99999999;\n\nconst clsParent = computed(() => {\n const cls = {\n 'table-default': true,\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (CommonBase.isEmpty(props.fixedType)) {\n // fixedType isEmpty 判空:null/空串归非固定分支(外部传 null 时原 .length 写法崩溃)\n if (\n props.isUseScrollX &&\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式(对齐 Body 侧 styTable 口径)\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst optFunGetThValue = (info: ColumnsInfo | null) => {\n if (!info) {\n return '';\n }\n return CommonBase.isUndefined(info.title)\n ? CommonBase.isUndefined(info.data)\n ? ''\n : info.data\n : info.title;\n};\n\nconst optFunGetTdValue = (value: any, opt: ColumnsInfo | null) => {\n if (CommonBase.isUndefined(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// totalInfo 显式传 null 时守卫(type: Object 的 prop 校验放行 null,模板内直接取字段会崩溃;isUndefined 已覆盖 null)\nconst optFunGetTotalValue = (info: Record<string, any> | null, opt: ColumnsInfo | null) => {\n if (!info || !opt) {\n return '';\n }\n return optFunGetTdValue(info[opt.data], opt);\n};\n\n// isShowTotal 翻转 false 时总计行被 v-if 直接从 DOM 移除,浏览器对移除悬停中元素不保证补发 mouseleave\n// → watch 兜底主动重置悬停态。hoverIndex === NO_HOVER_TOTAL_INDEX 前置:仅总计行悬停哨兵残留时才补发,\n// 数据行悬停中翻转(如父组件单独清空 totalData)不连带清除行高亮(Index 侧 onHoverOutTr 无条件重置\n// hoverTrIndex/hoverTrElasticIndex 两字段且幂等,重复触发无害)\nwatch(\n () => props.isShowTotal,\n nv => {\n if (!nv && props.hoverIndex === NO_HOVER_TOTAL_INDEX) {\n emit('onHoverOut');\n }\n },\n);\n\nconst onSelectAll = () => {\n emit('onClickAll');\n};\n\nconst onClickOrderBy = (info: ColumnsInfo, inx: number, sortType: string) => {\n emit('onClickOrderBy', info, inx, sortType);\n};\n\nconst onHoverInTotal = () => {\n emit('onHoverIn', NO_HOVER_TOTAL_INDEX);\n};\n\nconst onHoverOutTotal = () => {\n emit('onHoverOut');\n};\n\nconst getOffsetHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.offsetHeight;\n};\n\n// 读取全选/单选列宽度(主表头场景契约;固定副本的 rc 列含 th-hidden 时返回隐藏列布局宽度而非 0)\nconst getRcWidth = () => {\n let w = 0;\n if (props.isShowRadio || props.isShowCheckbox) {\n if (refElTable.value) {\n const elRc = refElTable.value.querySelector('.th-rc');\n if (elRc) {\n w = elRc.clientWidth;\n }\n }\n }\n return w;\n};\n\nconst getPaddingLr = () => {\n let totalPadding = 0;\n if (!refElTable.value) {\n return totalPadding;\n }\n const elThs = refElTable.value.querySelectorAll('th:not(.th-rc)');\n for (let ti = 0; ti < elThs.length; ti++) {\n const thStyle = CommonElement.getStyle(elThs[ti]);\n const plRaw = parseFloat(thStyle.paddingLeft);\n const prRaw = parseFloat(thStyle.paddingRight);\n const pl = CommonBase.isFinite(plRaw) ? plRaw : 0;\n const pr = CommonBase.isFinite(prRaw) ? prRaw : 0;\n totalPadding += pl + pr;\n }\n return totalPadding;\n};\n\nconst getElTh = () => {\n return refElTable.value ? refElTable.value.querySelectorAll('th') : [];\n};\n\nconst getTotalHeight = () => {\n let h = 0;\n if (props.isShowTotal) {\n if (refElTable.value) {\n const elTotal = refElTable.value.querySelector('.tr-total');\n if (elTotal) {\n h = elTotal.clientHeight;\n }\n }\n }\n return h;\n};\n\nexport interface ClTableHeadExpose {\n getOffsetHeight: () => number;\n getRcWidth: () => number;\n getPaddingLr: () => number;\n getElTh: () => NodeListOf<HTMLTableHeaderCellElement> | [];\n getTotalHeight: () => number;\n}\n\ndefineExpose({\n getOffsetHeight,\n getRcWidth,\n getPaddingLr,\n getElTh,\n getTotalHeight,\n});\n</script>\n","<template>\n <td\n v-if=\"isShowRadio || isShowCheckbox\"\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox\"\n :forId=\"optForIdCb\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <cl-radio-one\n v-else-if=\"isShowRadio\"\n :forId=\"optForIdRd\"\n :name=\"optForIdRd\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClRadioOne from '../../Element/Radio/One.vue';\nimport type { ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableTdChecked' });\n\n// 选中态依赖原生 click 冒泡到 tr.onClickTr 的 .th-rc 类名事件委托(Index 侧 _setSelectRc),勿在此添加 stopPropagation\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n value: {\n type: Boolean,\n default: false, // desc: 选中状态\n },\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选\n },\n keyIndex: String, // desc: 唯一键前缀\n info: {\n type: Object as PropType<ListInfo>,\n default: () => ({}), // desc: 数据项信息\n },\n});\n\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst optForIdCb = computed(() => _getForId('cb'));\n\nconst optForIdRd = computed(() => _getForId('rd'));\n\n// 严格 true 才选中:无论外部传 'false' 字符串(Vue 会 cast 为 false)还是其他非 true 值,严格判定均可防误选\nconst optIsChecked = computed(() => props.value === true);\n\nconst optIsDisabled = computed(\n () =>\n props.disabled === true ||\n (CommonBase.isBoolean(props.info?.isDisabled) && props.info.isDisabled),\n);\n\nconst clsParent = computed(() => {\n const cls = { 'th-rc': true };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// forId/name 行级唯一值(含行号,_cb/_rd 后缀区分):原生互斥仅在同 name 组内生效,跨行单选互斥由 Index 状态层 _setSelectRc 保证(单选模式单值覆盖);forId 保持唯一供 label for 关联\nconst _getForId = (suffix: 'cb' | 'rd') =>\n CommonBase.isNonEmptyString(props.keyIndex) ? `${props.keyIndex}_${suffix}` : undefined;\n</script>\n","<template>\n <table\n :class=\"clsTable\"\n :style=\"styTable\"\n ref=\"refElTable\"\n >\n <tbody>\n <template v-if=\"!CommonBase.isEmpty(list)\">\n <template\n v-for=\"(trInfo, trIndex) in list\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n >\n <tr\n :class=\"{\n odd: isStriped && trIndex % 2 === 0,\n 'tr-customInterval-odd':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 0,\n 'tr-customInterval-even':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 1,\n 'tr-disabled': CommonBase.isBoolean(trInfo?.isDisabled) && trInfo.isDisabled,\n 'tr-selected': optIsTrSelected(trInfo),\n 'tr-hover': hoverIndex === trIndex,\n }\"\n @click=\"onClickTr($event, trInfo, trIndex)\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <cl-table-td-checked\n v-if=\"isShowRadio || isShowCheckbox\"\n :keyIndex=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n :isShowRadio=\"isShowRadio\"\n :isShowCheckbox=\"isShowCheckbox\"\n :value=\"optIsTrSelected(trInfo)\"\n :info=\"trInfo\"\n :disabled=\"disabled\"\n />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_${tdInfo?.data ?? ''}`\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n >{{\n optFunGetTdValue(trInfo && tdInfo ? trInfo[tdInfo.data] : undefined, tdInfo)\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n <template\n v-if=\"\n isElastic &&\n !CommonBase.isEmpty(trInfo?.id) &&\n optElasticOpenSet.has(trInfo.id.toString())\n \"\n >\n <template v-if=\"elasticType === 'default'\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n :class=\"{\n 'td-elastic-load': optIsElasticLoading(trInfo),\n }\"\n >\n <div\n v-if=\"optIsElasticLoading(trInfo)\"\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n <div\n v-else\n :class=\"[\n `elastic-container`,\n {\n 'elastic-container-absolute': optElasticAbsoluteIds.has(\n trInfo.id.toString(),\n ),\n },\n ]\"\n :data-elastic-id=\"trInfo.id\"\n >\n <slot\n name=\"tr_elastic_children\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n />\n </div>\n </td>\n </tr>\n </template>\n <template v-else-if=\"elasticType === 'sameDataStructure'\">\n <template v-if=\"optIsElasticLoading(trInfo)\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-elastic-load\"\n >\n <div\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n </td>\n </tr>\n </template>\n <template v-else>\n <template\n v-for=\"(trElasticInfo, trElasticInx) in optGetElasticDataList(\n trInfo.id.toString(),\n )\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}`\"\n >\n <tr\n :class=\"{\n // 预留外部覆盖钩子(无内置 CSS 规则):斑马纹由 odd、悬停由 tr-hover 承载\n 'tr-elastic-sameDataStructure': true,\n odd: isStriped && trElasticInx % 2 === 0,\n 'tr-disabled':\n CommonBase.isBoolean(trElasticInfo?.isDisabled) && trElasticInfo.isDisabled,\n 'tr-hover': hoverElasticIndex === trElasticInx && hoverIndex === trIndex,\n }\"\n @mouseenter=\"onHoverInTr(trIndex, trElasticInx)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <template\n v-for=\"(tdElasticInfo, tdElasticIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}_td_${tdElasticIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdElasticIndex\"\n :tdInfo=\"tdElasticInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_elastic_${tdElasticInfo?.data ?? ''}`\"\n :data=\"trElasticInfo\"\n :trIndex=\"trIndex\"\n :trElasticInx=\"trElasticInx\"\n >{{\n optFunGetTdValue(\n trElasticInfo && tdElasticInfo\n ? trElasticInfo[tdElasticInfo.data]\n : undefined,\n tdElasticInfo,\n )\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </template>\n </template>\n </template>\n <template v-else></template>\n </template><template v-else></template>\n </template>\n </template>\n <template v-else></template>\n <tr\n v-if=\"CommonBase.isEmpty(list) && !isRunLoading && !CommonBase.isNonEmptyString(fixedType)\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-empty\"\n >\n <div\n class=\"panel-table-empty\"\n role=\"status\"\n >\n {{ CommonBase.isNonEmptyString(emptyText) ? emptyText : optPageLanguage.noResultsText }}\n </div>\n </td>\n </tr>\n <template v-else></template>\n </tbody>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTableTd from './Td.vue';\nimport ClTableTdChecked from './TdChecked.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport useLanguage from '../../Use/language';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableBody' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 数据列表\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n selectValue: {\n type: Array,\n default: () => [], // desc: 选中值列表\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引\n },\n hoverElasticIndex: {\n type: Number,\n default: -1, // desc: 悬停展开行索引\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n colspanCount: {\n type: Number,\n default: 1, // desc: 跨列数\n },\n isRunLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n elasticOpen: {\n type: Array,\n default: () => [], // desc: 展开的行 id 列表\n },\n elasticLoading: {\n type: Array,\n default: () => [], // desc: 展开加载中的行 id 列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object as PropType<Record<string, ListInfo[]>>,\n default: () => ({}), // desc: 展开数据(key 为行 id,值为行列表)\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right (可自定义)\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n});\n\nconst emit = defineEmits({\n onClickTr: (_e: MouseEvent | KeyboardEvent, _info: ListInfo | null, _inx: number) => true, // desc: 点击行事件\n onHoverIn: (_inx: number, _elasticInx: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: td_{data}(动态,按列 data 命名)| td_elastic_{data}(动态)| tr_elastic_children\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n\n// 展开行 absolute 定位状态集:setElasticHeight 标记的 id 走模板响应式 :class,\n// 避免直接改 elElastic.className 被 Vue patch 覆盖丢失(fixed 模式滚动后 absolute 定位失效)\nconst optElasticAbsoluteIds = ref<Set<string | number>>(new Set());\n\n// 选中/加载中 id 判定的 O(1) 查找集(selectValue/elasticLoading 为 id 字符串数组,模板多处分号重复 indexOf)\n// 外部显式传 null 时兜底空数组(Array prop 校验放行 null,.map 会崩溃)\n// 元素级过滤:null/undefined 元素经 String 转成 'null' 字符串,会与真实 'null' 字符串 id 歧义(isUndefined 含 null 判定,保留空串/0)\nconst optSelectedSet = computed(\n () =>\n new Set(\n (Array.isArray(props.selectValue) ? props.selectValue : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticLoadingSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticLoading) ? props.elasticLoading : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticOpenSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticOpen) ? props.elasticOpen : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\n\n// colspan 兜底:NaN/负数/0/非数字归一为 1(Math.max 对 NaN 返回 NaN,:colspan 输出无效值靠浏览器兜底不直观,显式归一)\nconst optColspanCount = computed(() => {\n const n = Number(props.colspanCount);\n return CommonBase.isFinite(n) && n >= 1 ? Math.floor(n) : 1;\n});\n\nconst clsTable = computed(() => {\n const cls = {\n 'table-default': true,\n 'table-empty': CommonBase.isEmpty(props.list),\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (!CommonBase.isNonEmptyString(props.fixedType)) {\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式,浏览器静默忽略非法值会致预期列宽失效\n if (\n props.isUseScrollX &&\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n emit('onClickTr', e, info, inx);\n};\n\n// elasticInx = -1 哨兵值:主数据行悬停不携带展开行索引(展开行悬停才传行内索引)\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n emit('onHoverIn', inx, elasticInx);\n};\n\nconst onHoverOutTr = () => {\n emit('onHoverOut');\n};\n\nconst optFunGetTdValue = (value: unknown, opt: ColumnsInfo) => {\n if (CommonBase.isEmpty(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// 展开数据按行 id 取列表(Record 契约:缺失 key 返回空数组)\nconst optGetElasticDataList = (id: string) => {\n const elasticData = (props.elasticData || {}) as Record<string, ListInfo[]>;\n return Object.prototype.hasOwnProperty.call(elasticData, id) ? elasticData[id] : [];\n};\n\n// 选中/加载中判定模板方法:与 class 判定共用,一处调整全局生效\n// 行对象判空前置:list 含 null 项时 info.id 解引用在判空工具求值前即崩溃,须先判 info 再取 id\nconst optIsTrSelected = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optSelectedSet.value.has(info.id.toString());\nconst optIsElasticLoading = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optElasticLoadingSet.value.has(info.id.toString());\n\nconst getWidth = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientWidth;\n};\n\nconst getHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientHeight;\n};\n\nconst setElasticWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (!parentEl) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const w = parentEl.clientWidth;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.width = `${w}px`;\n }\n};\n\nconst setElasticHeight = (id: string) => {\n if (!refElTable.value) {\n return;\n }\n const elElastic = refElTable.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null;\n if (elElastic) {\n const parentEl = elElastic.parentNode as HTMLElement | null;\n if (parentEl) {\n elElastic.style.height = '';\n parentEl.style.height = '';\n const h = `${elElastic.clientHeight}px`;\n elElastic.style.height = h;\n parentEl.style.height = h;\n }\n const cur = optElasticAbsoluteIds.value;\n if (!cur.has(id)) {\n optElasticAbsoluteIds.value = new Set(cur).add(id);\n }\n }\n};\n\n// 展开行收起时清理 absolute 标记:Set 只增不减会在同 id 重开时残留 elastic-container-absolute 类\n// (fixed 模式 + 非加载路径无 setElasticHeight 重算 → td 高度归 0 展开内容塌陷)\nconst removeElasticAbsolute = (id: string) => {\n if (optElasticAbsoluteIds.value.has(id)) {\n const next = new Set(optElasticAbsoluteIds.value);\n next.delete(id);\n optElasticAbsoluteIds.value = next;\n }\n};\n\n// 数据替换/切页强制全关时清空全部标记(旧行 id 作废,absolute 状态一并失效)\nconst clearElasticAbsolute = () => {\n if (optElasticAbsoluteIds.value.size > 0) {\n optElasticAbsoluteIds.value = new Set();\n }\n};\n\nconst setElasticLoadLeft = (scrollLeft: number) => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.left = `${safeLeft}px`;\n }\n};\n\nconst setEmptyWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null;\n if (el) {\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (parentEl) {\n const w = parentEl.clientWidth;\n el.style.width = `${w}px`;\n }\n }\n};\n\nconst setEmptyLeft = (scrollLeft: number) => {\n const el = refElTable.value\n ? (refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null)\n : null;\n if (el) {\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n el.style.left = `${safeLeft}px`;\n }\n};\n\nexport interface ClTableBodyExpose {\n getWidth: () => number;\n getHeight: () => number;\n setElasticWidth: () => void;\n setElasticHeight: (id: string) => void;\n removeElasticAbsolute: (id: string) => void;\n clearElasticAbsolute: () => void;\n setElasticLoadLeft: (scrollLeft: number) => void;\n setEmptyWidth: () => void;\n setEmptyLeft: (scrollLeft: number) => void;\n}\n\ndefineExpose({\n getWidth,\n getHeight,\n setElasticWidth,\n setElasticHeight,\n removeElasticAbsolute,\n clearElasticAbsolute,\n setElasticLoadLeft,\n setEmptyWidth,\n setEmptyLeft,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"table-wrapper\">\n <template v-if=\"isHead\">\n <div\n :class=\"clsHeadWrapper\"\n :style=\"{ width: optFixedHead.width }\"\n ref=\"refElHeadWrapper\"\n >\n <div\n :class=\"clsHeadContainer\"\n ref=\"refElHeadContainer\"\n >\n <div\n class=\"table-head-main\"\n ref=\"refElHeadMain\"\n >\n <cl-table-head\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElHeadTable\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-head\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-left-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-left-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-head\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-right-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-right-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optScrollYIsShow\"\n class=\"table-scroll-occupy-container\"\n >\n <div />\n <div\n v-if=\"optIsShowTotal\"\n class=\"table-scroll-occupy-total\"\n :style=\"{ height: optBase.totalHeight }\"\n />\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n :class=\"{ 'table-scroll-occupy-corner': optScrollX.isShow }\"\n />\n <template v-else></template>\n </div>\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n v-show=\"optScrollX.isShow\"\n class=\"table-fixed-column-scrollX\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n cornerType=\"right-top\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElHeadFixedScrollX\"\n />\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedHead.isShow && optBase.isRunLoading\"\n class=\"table-fixed-head-load\"\n />\n <template v-else></template>\n </div>\n <div\n v-if=\"optFixedHead.isShow\"\n :style=\"{ height: optFixedHead.height, width: optFixedHead.width }\"\n />\n <template v-else></template>\n </template>\n <template v-else></template>\n <div\n :class=\"clsBodyWrapper\"\n ref=\"refElBodyWrapper\"\n >\n <div\n class=\"table-body-container\"\n :style=\"styBodyContainer\"\n ref=\"refElBodyContainer\"\n >\n <div\n :class=\"{ 'table-body-main': true, 'table-body-empty': optNewList.length === 0 }\"\n :style=\"styBodyMain\"\n ref=\"refElBodyMain\"\n >\n <cl-table-body\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElBodyTable\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-left-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-left-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-right-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-right-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n </div>\n <template v-if=\"isScrollX && optNewList.length > 0 && optScrollX.isShow\">\n <div\n v-if=\"isScrollXBottom\"\n class=\"table-fixed-column-scrollX\"\n :style=\"{ bottom: optScrollYIsUse ? '-1px' : '1px' }\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n :isShowCover=\"false\"\n cornerType=\"right-bottom\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElBodyFixedScrollX\"\n />\n </div>\n <div\n v-else\n class=\"table-fixed-column-scrollX\"\n >\n <div :style=\"{ height: `${SCROLLBAR_HEIGHT}px` }\" />\n </div>\n </template>\n <template v-else></template>\n </div>\n <div\n v-if=\"isPaginate && optNewList.length > 0\"\n class=\"table-footer-wrapper\"\n >\n <div />\n <cl-paginate\n :currentPage=\"optPageInfo.pages\"\n :limitValue=\"optPageInfo.limit\"\n :limitData=\"paginateLimitData\"\n :isShowLimit=\"isPaginateLimit\"\n :totalCount=\"optTotalCount\"\n :disabled=\"disabled || optBase.isRunLoading\"\n @onChange=\"onChangePaginate\"\n />\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optBase.isRunLoading\"\n class=\"table-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"table-load-wrapper\">\n <div\n class=\"table-load-head\"\n :style=\"styLoadHead\"\n />\n <div :class=\"{ 'table-load-body': true, 'table-load-bg-gray': isLoading }\">\n <cl-load-ing :isLoadIng=\"isLoading\" size=\"xxl\" :theme=\"loadTheme\" :color=\"loadColor || undefined\" />\n </div>\n </div>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n watch,\n computed,\n ref,\n reactive,\n toRaw,\n useSlots,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { Resize as ResizeEvent } from '../../Common/Element/Event/index';\nimport ClTableHead from './Head.vue';\nimport ClTableBody from './Body.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport ClPaginate from '../Paginate/Index.vue';\nimport type { PaginateLimitItem } from '../Paginate/Index.vue';\nimport ClScrollXFence from '../ScrollxFence/Index.vue';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\nimport './index.css';\n\n// 数据请求参数契约(onGetData/onChangeParams 载荷与 getParamInfo 返回值共用;空配置时字段缺失)\nexport interface TableEmitParam {\n pages?: number;\n limit?: number;\n offset?: number;\n orderIndex?: number;\n orderBy?: string;\n orderColumns?: string;\n}\n\n// 选中变化扩展信息(onChangeChecked 第三参)\nexport interface TableChangeCheckedExt {\n checkedIds: string[];\n unCheckedIds: string[];\n}\n\n// 内部状态容器:显式类型约束,字段名变更/类型漂移由编译器发现(原整体 any 静默放行)\ninterface TablePageData {\n dataJson: Record<string, any>;\n changeNewPaginate: { pages: number; limit: number };\n changeNewSort: { orderIndex: number | undefined; orderBy: string | undefined };\n sortLocalData: any[];\n scrollBody: { left: number };\n scrollHead: { left: number };\n resizeEvent: ResizeEvent | null;\n // setTimeout 返回类型按环境为 number(DOM)或 Timeout(Node),用 ReturnType 兼容两者\n timerBody: ReturnType<typeof setTimeout> | null;\n // keep-alive 取消未决请求标记:onDeactivated 清 timerBody 时置位,onActivated 补发数据\n pendingCanceled: boolean;\n}\n\ndefineOptions({ name: 'ClTable' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息;含 null 项(非法输入)时降级渲染空单元格,仅运行时兜底\n },\n list: {\n type: Array,\n default: () => [], // desc: 数据列表\n },\n totalLength: Number, // desc: 数据总条数\n totalData: {\n type: Object,\n default: () => ({}), // desc: 总计数据\n },\n isServer: {\n type: Boolean,\n default: true, // desc: 是否为服务端模式\n },\n isParamTriggerServer: {\n type: Boolean,\n default: false, // desc: 本地数据是否触发服务端参数事件\n },\n isLoading: {\n type: Boolean,\n default: true, // desc: 加载中状态\n },\n loadTheme: {\n type: String,\n default: 'circleBubble', // desc: 加载动画主题,透传至 cl-load-ing | enum: rotaryLine, circleNotch, circleBubble, ballColor4, dotTyping, dotWave, dotBounce, dotPulse, dotOrbit, dotFlow, dotSlide, dotSlider, dotFold, dotSquare, barEqualizer, barWave, barPulse, barStretch, barMeter, barBounce, barRamp, ringRotate, ringDot, ringPulse, ringClip, ringFan, circleSpinner, dotRipple, dotRipple3, ringCross, squareTrace, squareTrace2, crossMove, snakePath, squareMirror, dotPulse5, diamondShuttle, barStream, newtonCradle, dotSpin, orbitSwap, typingBounce, ringGlow\n },\n loadColor: {\n type: String,\n default: '#1088f0', // desc: 加载动画颜色,透传至 cl-load-ing\n },\n isShowInitLoadIng: {\n type: Boolean,\n default: true, // desc: 是否显示初始加载动画(仅本地模式生效,服务端模式强制显示加载遮罩防误操作)\n },\n isPaginate: {\n type: Boolean,\n default: true, // desc: 是否启用分页\n },\n pageOffset: {\n type: Number,\n default: 0, // desc: 分页偏移量\n },\n isPaginateLimit: {\n type: Boolean,\n default: true, // desc: 是否启用每页条数选择\n },\n paginateLimit: {\n type: Number,\n default: 10, // desc: 每页条数\n },\n paginateLimitData: { type: Array as () => PaginateLimitItem[], default: () => [] }, // desc: 每页条数可选列表\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array,\n default: () => [], // desc: 排序配置\n },\n selectValue: {\n type: [String, Number],\n default: '', // desc: 选中值\n },\n checkedRowType: {\n type: String,\n default: 'none', // desc: 选中行类型 | enum: none, radio, checkbox\n validator: (value: string) => ['none', 'radio', 'checkbox'].indexOf(value) > -1,\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n isScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isScrollXBottom: {\n type: Boolean,\n default: false, // desc: 是否启用底部横向滚动\n },\n isFixedHead: {\n type: Boolean,\n default: false, // desc: 是否固定表头\n },\n scrollY: {\n type: Number,\n default: -1, // desc: 纵向滚动高度\n },\n fixedColumnLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedColumnRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n isClickRowLinkage: {\n type: Boolean,\n default: false, // desc: 点击行是否联动选中\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n isElasticLoad: {\n type: Boolean,\n default: true, // desc: 是否启用展开加载动画\n },\n rowClickKeyInvalid: {\n type: String,\n default: '.tr-click-invalid', // desc: 无效点击区域选择器\n },\n rowClickKeyElastic: {\n type: String,\n default: '.tr-click-elastic', // desc: 展开点击区域选择器\n },\n elasticIconCls: {\n type: Array,\n default: () => [], // desc: 展开图标类名列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object,\n default: () => ({}), // desc: 展开数据\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n isHead: {\n type: Boolean,\n default: true, // desc: 是否显示表头\n },\n});\n\nconst emit = defineEmits({\n onGetData: (_param: TableEmitParam) => true, // desc: 获取数据事件\n onClickRow: (_info: ListInfo, _inx: number, _isRc?: boolean) => true, // desc: 点击行事件(isRc: 点击是否落在 th-rc 单元格)\n onClickElastic: (_id: string, _info: ListInfo, _trIndex: number, _isOpen: boolean, _el: any) =>\n true, // desc: 点击展开事件\n onChangeChecked: (_ids: string, _list: ListInfo[], _ext: TableChangeCheckedExt) => true, // desc: 选中变化事件\n onChangeParams: (_param: TableEmitParam) => true, // desc: 参数变化事件\n});\n\n// slots: th_{data} | td_{data} | total_{data} | td_elastic_{data}(动态,按 data 前缀转发)| tr_elastic_children(展开行内容,isElastic 时追加)\n\nconst slots = useSlots();\n\nconst _initOrderData = (orderSort: any[]): [number, string] | [] => {\n let data: [number, string] | [] = [];\n if (props.isOrder) {\n // orderSort 显式传 null 时 Array prop 校验放行(default 不生效),归一为空数组避免 .length 崩溃\n const orderSortInfo: any[] = CommonBase.isEmpty(orderSort) ? [] : orderSort;\n let initFirstSort: [number, string] = [0, 'desc'];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n for (let i = 0; i < columns.length; i += 1) {\n const columnInfo: any = columns[i];\n // columns 含 null 项(配置错误输入)时跳过,崩溃降级为忽略该列\n if (CommonBase.isEmpty(columnInfo)) {\n continue;\n }\n const sort =\n columnInfo.sort === undefined || columnInfo.sort === null ? true : columnInfo.sort === true;\n const visible = CommonBase.isBoolean(columnInfo.visible) ? columnInfo.visible : true;\n if (sort && visible) {\n initFirstSort = [i, 'desc'];\n break;\n }\n }\n if (orderSortInfo.length === 0) {\n data = initFirstSort;\n } else {\n const columnOrderInfo: any = columns[orderSortInfo[0]];\n if (!CommonBase.isEmpty(columnOrderInfo)) {\n const sort =\n columnOrderInfo.sort === undefined || columnOrderInfo.sort === null\n ? true\n : columnOrderInfo.sort === true;\n const visible = CommonBase.isBoolean(columnOrderInfo.visible)\n ? columnOrderInfo.visible\n : true;\n const orderIndex = Array.isArray(orderSortInfo) ? orderSortInfo[0] : undefined;\n const orderBy =\n Array.isArray(orderSortInfo) && (orderSortInfo[1] === 'asc' || orderSortInfo[1] === 'desc')\n ? orderSortInfo[1]\n : undefined;\n data =\n sort && visible && !CommonBase.isUndefined(orderIndex)\n ? ([orderIndex, orderBy ?? 'desc'] as [number, string])\n : initFirstSort;\n } else {\n data = initFirstSort;\n }\n }\n }\n return data;\n};\n\nconst _initPaginatePages = () => {\n let pages = 1;\n if (props.paginateLimit > 0 && props.pageOffset >= 0) {\n pages = Math.floor(props.pageOffset / props.paginateLimit) + 1;\n }\n return pages;\n};\n\nconst _initOrderSort = _initOrderData(props.orderSort);\n\nconst _pageData: TablePageData = {\n dataJson: CommonBase.getJsonByList(props.list),\n changeNewPaginate: {\n pages: _initPaginatePages(),\n limit: props.paginateLimit,\n },\n changeNewSort: {\n // isOrder=false 时 _initOrderSort 为空数组,字段实际为 undefined(类型层如实表达,原 as 断言掩盖)\n orderIndex: _initOrderSort[0],\n orderBy: _initOrderSort[1],\n },\n sortLocalData: [],\n scrollBody: {\n left: 0,\n },\n scrollHead: {\n left: 0,\n },\n resizeEvent: null,\n timerBody: null,\n pendingCanceled: false,\n};\n\nconst _pageObject: { observerBodyScrollY: MutationObserver | null } = {\n observerBodyScrollY: null,\n};\nconst SCROLLBAR_HEIGHT = 15;\nconst FIXED_HEAD_THRESHOLD = 30; // 固定表头吸附判定阈值\nconst SELECT_SCROLL_THRESHOLD = 180; // 选中行滚动定位判定阈值\nconst SELECT_SCROLL_OFFSET = 50; // 选中行滚动定位偏移\nconst LOCAL_LOAD_DELAY = 300; // 本地模式数据加载防抖时长\nconst _keyIndex = `table-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst refElHeadWrapper = ref<HTMLDivElement | null>(null);\nconst refElHeadContainer = ref<HTMLDivElement | null>(null);\nconst refElHeadMain = ref<HTMLDivElement | null>(null);\nconst refElHeadTable = ref<InstanceType<typeof ClTableHead> | null>(null);\nconst refElHeadFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst refElBodyWrapper = ref<HTMLDivElement | null>(null);\nconst refElBodyContainer = ref<HTMLDivElement | null>(null);\nconst refElBodyMain = ref<HTMLDivElement | null>(null);\nconst refElBodyTable = ref<InstanceType<typeof ClTableBody> | null>(null);\nconst refElBodyFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst optBase = reactive({\n isRunLoading: false,\n isCheckedRadio: props.checkedRowType === 'radio',\n isCheckedCheckbox: props.checkedRowType === 'checkbox',\n colspanCount: 0,\n hoverTrIndex: -1,\n hoverTrElasticIndex: -1,\n totalHeight: '0',\n});\n\nconst optNewList = ref<ListInfo[]>([]);\nconst optPageInfo = reactive({\n pages: _pageData.changeNewPaginate.pages,\n limit: _pageData.changeNewPaginate.limit,\n});\nconst optOrderSort = ref<[number, string] | []>(_initOrderSort);\nconst optAllValue = ref<boolean>(false);\n\n// 取 selectValue 的 id 数组:String|Number 混合类型 + 显式传 undefined 时守卫,防止 .toString() 崩溃\nconst _getSelectValueIds = () => {\n const selectValue = props.selectValue;\n if (CommonBase.isNonEmptyString(selectValue)) {\n return CommonBase.split(selectValue);\n }\n if (CommonBase.isNumber(selectValue)) {\n return CommonBase.split(selectValue.toString());\n }\n return [];\n};\nconst optCurrentPageSelectIds = ref<string[]>(_getSelectValueIds());\n\nconst optElastic = reactive({\n open: [] as string[],\n loading: [] as string[],\n});\n\nconst optScrollX = reactive({\n isShow: false,\n minWidth: 'auto',\n posType: 'left',\n});\n\nconst optScrollYIsShow = ref<boolean>(false);\n\nconst optFixedColumn = reactive({\n totalWidth: '0',\n centerWidth: '0',\n leftColumnLength: 0,\n leftWidth: '0',\n rightColumnLength: 0,\n rightWidth: '0',\n});\n\nconst optFixedHead = reactive({\n isShow: false,\n width: 'auto',\n height: 'auto',\n});\n\nconst optLoadInfo = reactive({\n headHeight: 0,\n});\n\nlet _rafIdScrollX: number | null = null;\nlet _rafIdWinScroll: number | null = null;\nlet _scrollLeftCache = 0;\n\n// 动态插槽转发键集合:实时取自 slots 代理(父组件运行期增删插槽时响应式更新;原 setup 快照不感知增删,动态插槽静默不渲染)\nconst optSlotsKeyTh = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('th_') === 0);\n});\nconst optSlotsKeyTd = computed(() => {\n const names = Object.keys(slots).filter(\n (n: string) => n.indexOf('td_') === 0 && n.indexOf('td_elastic_') !== 0,\n );\n if (props.isElastic) {\n names.push('tr_elastic_children');\n }\n return names;\n});\nconst optSlotsKeyTotal = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('total_') === 0);\n});\nconst optSlotsKeyTdElastic = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('td_elastic_') === 0);\n});\n\nconst optIsShowCheckboxAll = computed(() => {\n return props.isShowCheckboxAll && optNewList.value.length > 0;\n});\n\nconst optIsShowTotal = computed(() => {\n return !CommonBase.isEmpty(props.totalData) && optNewList.value.length > 0;\n});\n\nconst optTotalCount = computed(() => {\n if (props.isServer) {\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : 0;\n }\n // 本地模式:未显式传 totalLength 时自动取 list 长度兜底,避免分页总数显示 0\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : props.list?.length || 0;\n});\n\nconst optScrollXIsUse = computed(() => {\n return props.isScrollX || props.isScrollXBottom;\n});\n\nconst optScrollYIsUse = computed(() => {\n return props.scrollY > 0;\n});\n\n// isHead=false 时无表头测量基准(headWrapper 不渲染,elTds 恒空),固定列宽度恒 0 渲染空白竖条,禁用固定列\nconst optFixedLeftIsUse = computed(() => {\n return props.isHead && props.fixedColumnLeftIndex > -1 && optScrollXIsUse.value;\n});\n\nconst optFixedRightIsUse = computed(() => {\n return (\n props.isHead &&\n props.fixedColumnRightIndex > -1 &&\n optScrollXIsUse.value &&\n props.fixedColumnRightIndex > props.fixedColumnLeftIndex + 1\n );\n});\n\nconst clsParent = computed(() => {\n const cls: any = {\n 'panel-table': true,\n 'table-disabled': props.disabled,\n };\n if (optBase.isRunLoading) {\n cls['table-loading'] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['table-mob'] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsHeadWrapper = computed(() => {\n const cls: any = {\n 'table-head-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scroll-occupy-y': optScrollYIsShow.value,\n };\n if (optFixedHead.isShow) {\n cls['table-fixed-head'] = true;\n }\n return cls;\n});\n\nconst clsHeadContainer = computed(() => {\n const cls: any = {\n 'table-head-container': true,\n };\n if (props.isScrollX) {\n cls['table-scrollX'] = true;\n }\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst clsBodyWrapper = computed(() => {\n const cls: any = {\n 'table-body-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scrollX': props.isScrollX,\n 'table-scrollX-bottom': optScrollX.isShow,\n };\n cls['table-scroll-borderT0'] = optScrollX.isShow && props.isScrollX;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst styBodyContainer = computed(() => {\n const sty: any = {};\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (optScrollYIsUse.value) {\n const maxH = optScrollX.isShow\n ? Math.max(0, props.scrollY - SCROLLBAR_HEIGHT)\n : props.scrollY;\n sty.maxHeight = `${maxH}px`;\n }\n }\n return sty;\n});\n\nconst styBodyMain = computed(() => {\n const sty: any = {};\n if (!(optFixedLeftIsUse.value || optFixedRightIsUse.value)) {\n if (optScrollYIsUse.value) {\n sty.maxHeight = `${props.scrollY}px`;\n }\n }\n return sty;\n});\n\nconst styLoadHead = computed(() => {\n const sty: any = {};\n if (optBase.isRunLoading) {\n sty.height = `${optLoadInfo.headHeight}px`;\n }\n return sty;\n});\n\nconst _emitGetData = (param: any) => {\n emit('onGetData', param);\n};\n\nconst _emitClickElastic = (id: string, info: any, trIndex: number, isOpen: boolean, el: any) => {\n emit('onClickElastic', id, info, trIndex, isOpen, el);\n};\n\n// isRc 第三参向后兼容:true 表示点击落在 .th-rc 单元格(直接操作复选框/单选框),false 表示行联动选中\nconst _emitClickRow = (info: any, inx: number, isRc = false) => {\n emit('onClickRow', info, inx, isRc);\n};\n\nconst _emitChangeChecked = (ids: string, list: any[], ext: any) => {\n emit('onChangeChecked', ids, list, ext);\n};\n\nconst _emitChangeParams = () => {\n const param = _getPaginateSort();\n emit('onChangeParams', param);\n};\n\nconst _runLoadStart = () => {\n nextTick(() => {\n if (refElHeadMain.value) {\n const elThead = refElHeadMain.value.querySelector('thead');\n if (elThead) {\n optLoadInfo.headHeight = elThead.offsetHeight;\n }\n }\n });\n optBase.isRunLoading = true;\n};\n\nconst _runLoadStop = () => {\n optBase.isRunLoading = false;\n};\n\nconst _analysisColumns = () => {\n let colspanCount = 0;\n let minWidth = 0;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n colspanCount = 1;\n if (refElHeadTable.value) {\n minWidth = refElHeadTable.value.getRcWidth();\n }\n }\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any) => {\n // 计数口径对齐渲染链:columns 含 null 项(配置错误输入)时 Body/Head 仍渲染空单元格占一列,\n // 此处同样 +1,避免展开行/空数据行 colspan 少覆盖一列(null 项无 width,宽度贡献为 0)\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n colspanCount += 1;\n if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.width)) {\n minWidth += Number(info.width) || 0;\n } else if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.widthMin)) {\n minWidth += Number(info.widthMin) || 0;\n }\n }\n });\n const totalPadding = refElHeadTable.value ? refElHeadTable.value.getPaddingLr() : 0;\n minWidth += totalPadding;\n\n optBase.colspanCount = colspanCount;\n if (optScrollXIsUse.value) {\n optScrollX.minWidth = minWidth > 0 ? `${minWidth}px` : 'auto';\n }\n};\n\nconst _analysisFixedColumns = () => {\n return new Promise<void>((resolve, reject) => {\n nextTick(() => {\n try {\n // 卸载竞态兜底:已排队的 nextTick 无法取消,ref 被置 null 时直接 resolve\n if (!refElBodyTable.value) {\n resolve();\n return;\n }\n const totalWidth = refElBodyTable.value.getWidth();\n optFixedColumn.totalWidth = `${totalWidth}px`;\n\n let centerWidth = totalWidth;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n const leftColumn: any = [];\n const rightColumn: any = [];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any, i: number) => {\n // 口径对齐渲染链:null 项同样计入固定列(渲染链对 null 项渲染空 th/td 占位),\n // 保证 leftColumn.length 与 elTds(真实 DOM 全量 th)索引对齐,固定列宽度测量不错位\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n if (optFixedLeftIsUse.value) {\n if (i <= props.fixedColumnLeftIndex) {\n leftColumn.push(info);\n }\n }\n if (optFixedRightIsUse.value) {\n if (i >= props.fixedColumnRightIndex) {\n rightColumn.push(info);\n }\n }\n }\n });\n\n const isRc = optBase.isCheckedRadio || optBase.isCheckedCheckbox;\n const elTds = refElHeadTable.value ? refElHeadTable.value.getElTh() : [];\n const totalLen = elTds.length;\n\n let leftColspanCount = leftColumn.length;\n const rightColspanCount = rightColumn.length;\n let leftIndexMax = leftColspanCount - 1;\n const rightIndexMin = totalLen - rightColspanCount;\n if (isRc) {\n leftColspanCount += 1;\n leftIndexMax += 1;\n }\n let leftWidth = 0;\n let rightWidth = 0;\n for (let fi = 0; fi < totalLen; fi++) {\n const elTd = elTds[fi];\n if (!elTd) {\n continue;\n }\n const tempW = elTd.clientWidth;\n if (fi <= leftIndexMax) {\n leftWidth += tempW;\n }\n if (fi >= rightIndexMin) {\n rightWidth += tempW;\n }\n }\n\n if (optFixedLeftIsUse.value) {\n optFixedColumn.leftColumnLength = leftColumn.length;\n optFixedColumn.leftWidth = `${leftWidth}px`;\n centerWidth -= leftWidth;\n }\n if (optFixedRightIsUse.value) {\n optFixedColumn.rightColumnLength = rightColumn.length;\n optFixedColumn.rightWidth = `${rightWidth}px`;\n centerWidth -= rightWidth;\n }\n }\n centerWidth = Math.max(0, centerWidth);\n optFixedColumn.centerWidth = `${centerWidth}px`;\n nextTick(() => {\n resolve();\n });\n } catch (err) {\n reject(err);\n }\n });\n });\n};\n\nconst _setElasticWidth = () => {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticWidth();\n }\n });\n};\n\nconst _setElasticHeight = (id: string) => {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticHeight(id);\n }\n }\n};\n\nconst _runElasticLoadStart = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n if (arr.indexOf(id) === -1) {\n arr.push(id);\n optElastic.loading = arr;\n }\n }\n};\n\nconst _runElasticLoadStop = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n const inx = arr.indexOf(id);\n if (inx > -1) {\n arr.splice(inx, 1);\n optElastic.loading = arr;\n nextTick(() => {\n _setElasticHeight(id);\n });\n }\n }\n};\n\nconst _setSelectElasticIds = (info: any, trIndex: number, elElastic?: any, isEmit?: boolean) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中/展开链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n const arr = CommonBase.getArrClone(optElastic.open);\n const inx = arr.indexOf(id);\n const isOpen = inx === -1;\n if (isOpen) {\n arr.push(id);\n _runElasticLoadStart(id);\n } else {\n arr.splice(inx, 1);\n _runElasticLoadStop(id);\n // 收起时同步清理 Body 侧 absolute 标记:Set 只增不减会在同 id 重开时残留 absolute 类导致塌陷\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.removeElasticAbsolute(id);\n }\n }\n _initElasticOneClass(elElastic, isOpen);\n const isEmitUse = CommonBase.isBoolean(isEmit) ? isEmit : true;\n optElastic.open = arr;\n if (isEmitUse) {\n _emitClickElastic(id, info, trIndex, isOpen, elElastic);\n }\n _setElasticWidth();\n};\n\nconst _initElasticAllData = () => {\n const newList: any[] = [];\n // 外部显式传 null 时 prop default 不生效,先判空兜底(null.length 会崩溃且阻断数据更新链)\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n const list: any[] = optNewList.value;\n const arrOpenId: any[] = optElastic.open;\n list.forEach((info: any) => {\n // null 行守卫:list 可含 null 项(渲染层已承认),getJsonClone(null) 返回 null 后解引用崩溃\n if (!info) {\n newList.push(info);\n return;\n }\n const newInfo = CommonBase.getJsonClone(info);\n if (!CommonBase.isEmpty(newInfo.id)) {\n const id = newInfo.id.toString();\n newInfo._elasticIconCls =\n arrOpenId.indexOf(id) > -1 ? elasticIconCls[1] : elasticIconCls[0];\n }\n newList.push(newInfo);\n });\n }\n if (newList.length > 0) {\n optNewList.value = newList;\n }\n};\n\nconst _initElasticOneClass = (elElastic?: any, isOpen = false) => {\n if (elElastic) {\n const addCls = [];\n const removeCls = ['elastic-expand', 'elastic-retract'];\n isOpen ? addCls.push('elastic-expand') : addCls.push('elastic-retract');\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n removeCls.push(elasticIconCls[0]);\n removeCls.push(elasticIconCls[1]);\n isOpen ? addCls.push(elasticIconCls[1]) : addCls.push(elasticIconCls[0]);\n }\n let newCls = CommonElement.getRemoveClass(elElastic.className, removeCls.join(' '));\n newCls = CommonElement.getAddClass(newCls, addCls);\n elElastic.className = newCls;\n }\n};\n\nconst _getCurrentPageAllUse = () => {\n const allIds: string[] = [];\n optNewList.value.forEach((info: any) => {\n // null 行守卫:getListClone 原样保留 null 行(渲染层已防崩溃),全选 id 收集同样跳过 null 行\n if (CommonBase.isEmpty(info)) {\n return;\n }\n const b = CommonBase.isBoolean(info.isDisabled) ? info.isDisabled : false;\n if (!b && !CommonBase.isEmpty(info.id)) {\n allIds.push(info.id.toString());\n }\n });\n return allIds;\n};\n\nconst _getCurrentSelectUse = (selectIds: any = null) => {\n // isUndefined 不挡 null(签名默认 null):null 视为未传参;空数组是合法输入(表示清空)不可用 isEmpty 拦截\n const sIds =\n CommonBase.isUndefined(selectIds) || selectIds === null\n ? optCurrentPageSelectIds.value\n : (selectIds as string[]);\n const useIds: string[] = [];\n if (!Array.isArray(sIds)) {\n return [];\n }\n if (sIds.length > 0) {\n const allIds = _getCurrentPageAllUse();\n sIds.forEach((sId: string) => {\n if (CommonBase.isExistValue(allIds, sId)) {\n useIds.push(sId);\n }\n });\n }\n // 单选模式收敛为首个有效 id:radio 语义下多值无意义,selectValue 传入多 id 时丢弃首个之外的\n if (optBase.isCheckedRadio && useIds.length > 1) {\n return [useIds[0]];\n }\n return useIds;\n};\n\nconst _setCheckboxAll = () => {\n if (optBase.isCheckedCheckbox) {\n const allIds = _getCurrentPageAllUse();\n const checkedIds: string[] = _getCurrentSelectUse();\n optAllValue.value = checkedIds.length > 0 && checkedIds.length === allIds.length;\n }\n};\n\nconst _getSelectDataItem = () => {\n const list: any[] = [];\n const checkedIds: string[] = _getCurrentSelectUse();\n const unCheckedIds: string[] = [];\n const allIds = _getCurrentPageAllUse();\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(checkedIds, aId)) {\n unCheckedIds.push(aId);\n }\n });\n\n if (optBase.isCheckedCheckbox) {\n checkedIds.forEach((id: any) => {\n const data = _pageData.dataJson[id.toString()];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n });\n } else if (optBase.isCheckedRadio) {\n if (checkedIds.length > 0) {\n const data = _pageData.dataJson[checkedIds[0]];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n }\n }\n return { checkedIds, unCheckedIds, checkedData: list };\n};\n\nconst _emitChangeCheckedBefore = () => {\n const selectDataItem = _getSelectDataItem();\n _emitChangeChecked(selectDataItem.checkedIds.join(','), selectDataItem.checkedData, {\n checkedIds: selectDataItem.checkedIds,\n unCheckedIds: selectDataItem.unCheckedIds,\n });\n};\n\nconst _setSelectRc = (info: any) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const newId = info.id.toString();\n const oldSelectValue = optCurrentPageSelectIds.value;\n let newSelectValue: string[] = [];\n if (optBase.isCheckedCheckbox) {\n const isExist = CommonBase.isExistValue(oldSelectValue, newId);\n oldSelectValue.forEach((id: string) => {\n if (id !== newId) {\n newSelectValue.push(id);\n }\n });\n if (!isExist) {\n newSelectValue.push(newId);\n }\n optCurrentPageSelectIds.value = newSelectValue;\n _setCheckboxAll();\n _emitChangeCheckedBefore();\n } else {\n if (!(oldSelectValue.length > 0 && oldSelectValue[0] === newId)) {\n newSelectValue = [newId];\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n }\n }\n};\n\nconst _calculationScrollX = () => {\n if (optScrollXIsUse.value && refElBodyMain.value && refElBodyTable.value) {\n const pW = refElBodyMain.value.clientWidth;\n const tW = refElBodyTable.value.getWidth();\n optScrollX.isShow = tW > pW;\n }\n};\n\nconst _calculationScrollY = () => {\n if (optScrollYIsUse.value && refElBodyTable.value) {\n const bodyHeight = refElBodyTable.value.getHeight();\n let isY = bodyHeight > props.scrollY;\n if (!isY) {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyContainer.value) {\n isY = bodyHeight > refElBodyContainer.value.clientHeight;\n }\n } else {\n if (refElBodyMain.value && refElBodyMain.value.offsetHeight >= props.scrollY) {\n isY = bodyHeight > refElBodyMain.value.clientHeight;\n }\n }\n }\n if (isY && optIsShowTotal.value) {\n if (refElHeadTable.value) {\n const h = refElHeadTable.value.getTotalHeight() - (CommonBase.osType().isMobile ? 2 : 0);\n optBase.totalHeight = `${h}px`;\n }\n }\n optScrollYIsShow.value = isY;\n }\n};\n\nconst _calculationScrollFixedColumn = () => {\n if (\n (optFixedLeftIsUse.value || optFixedRightIsUse.value) &&\n refElBodyMain.value &&\n refElBodyTable.value\n ) {\n let scrollLeft = refElBodyMain.value.scrollLeft;\n const pWidth = refElBodyMain.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n let posType = 'left';\n if (scrollLeft > 0) {\n const tempSum = pWidth + scrollLeft;\n if (tempSum >= cWidth) {\n posType = 'right';\n } else {\n posType = 'center';\n }\n }\n optScrollX.posType = posType;\n }\n};\n\nconst _calculationScrollRelation = () => {\n if (!refElBodyWrapper.value || !refElBodyTable.value) {\n return;\n }\n let scrollLeft = refElHeadMain.value ? refElHeadMain.value.scrollLeft : 0;\n const pWidth = refElBodyWrapper.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n if (pWidth + scrollLeft > cWidth) {\n scrollLeft = 0;\n }\n if (optElastic.loading.length > 0) {\n refElBodyTable.value.setElasticLoadLeft(scrollLeft);\n }\n if (optNewList.value.length === 0) {\n refElBodyTable.value.setEmptyLeft(scrollLeft);\n }\n};\n\n// rAF 节流:滚动事件高频触发,同步 head/固定列与两轮布局计算合并到下一帧执行一次。\n// 每次调用先更新 cache(最后触发源胜),回调不再依赖首个事件对象——同帧多滚动源(head 滚动条 + body 惯性)时不会用旧源值覆盖回跳\nconst _onScrollX = (e: Event) => {\n _scrollLeftCache = (e.target as HTMLElement).scrollLeft;\n if (_rafIdScrollX !== null) {\n return;\n }\n _rafIdScrollX = requestAnimationFrame(() => {\n _rafIdScrollX = null;\n const scrollLeft = _scrollLeftCache;\n\n if (refElHeadMain.value) {\n refElHeadMain.value.scrollLeft = scrollLeft;\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.scrollLeft = scrollLeft;\n }\n\n if (refElHeadFixedScrollX.value) {\n refElHeadFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n if (refElBodyFixedScrollX.value) {\n refElBodyFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n\n _calculationScrollFixedColumn();\n _calculationScrollRelation();\n });\n};\n\n// head 滚动监听(与 body 侧 _onScrollBody 对称的变化过滤 + clamp 回跳防护):\n// head 滚动范围随滚动条占位(occupy 类)切换,程序赋值被浏览器 clamp 到上限时下一帧派发 scroll 事件,\n// 不加过滤时该 clamp 值覆盖 cache 把 body 拉回 head 上限(用户无法把 body 滚过 head 的滚动范围)\nconst _onScrollHead = (e: Event) => {\n const el = e.target as HTMLElement;\n const left = el.scrollLeft;\n const maxLeft = el.scrollWidth - el.clientWidth;\n if (maxLeft - left < 1 && refElBodyMain.value && refElBodyMain.value.scrollLeft > left) {\n return;\n }\n if (left !== _pageData.scrollHead.left) {\n _onScrollX(e);\n }\n _pageData.scrollHead.left = left;\n};\n\nconst _onScrollBody = (e: Event) => {\n const left = (e.target as HTMLElement).scrollLeft;\n if (left !== _pageData.scrollBody.left) {\n _onScrollX(e);\n }\n _pageData.scrollBody.left = left;\n};\n\nconst _calculationFixedHeadInfo = () => {\n if (props.isFixedHead && refElHeadWrapper.value && !optBase.isRunLoading) {\n let isShowFixed = false;\n let width = 'auto';\n let height = 'auto';\n const pos =\n refElHeadWrapper.value && refElHeadWrapper.value.parentNode\n ? CommonElement.getPositionView(refElHeadWrapper.value.parentNode)\n : null;\n if (pos && pos.top < 0 && refElBodyWrapper.value && refElHeadContainer.value && refElHeadTable.value) {\n const bodyH = refElBodyWrapper.value.clientHeight;\n if (pos.top > (bodyH - FIXED_HEAD_THRESHOLD) * -1) {\n isShowFixed = true;\n const w = refElBodyWrapper.value.offsetWidth;\n const h =\n optScrollX.isShow && props.isScrollX\n ? refElHeadContainer.value.offsetHeight\n : refElHeadTable.value.getOffsetHeight();\n width = `${w}px`;\n height = `${h}px`;\n }\n }\n optFixedHead.isShow = isShowFixed;\n optFixedHead.width = width;\n optFixedHead.height = height;\n }\n};\n\nconst _setEmptyWidth = () => {\n if (optNewList.value.length === 0) {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setEmptyWidth();\n }\n });\n }\n};\n\nconst _getPaginateSort = (): TableEmitParam => {\n const param: TableEmitParam = {};\n if (props.isPaginate) {\n const { pages, limit } = _pageData.changeNewPaginate;\n param.pages = pages;\n param.limit = limit;\n // isPaginate 开启时 pages/limit 必有初值(1/limit),as 收窄消除 undefined 分支\n param.offset = ((param.pages as number) - 1) * (param.limit as number);\n }\n if (props.isOrder) {\n const { orderIndex, orderBy } = _pageData.changeNewSort;\n param.orderIndex = orderIndex;\n param.orderBy = orderBy;\n const orderColumn = (props.columns as any[])[orderIndex as number];\n if (!CommonBase.isUndefined(orderColumn)) {\n param.orderColumns = orderColumn.data;\n }\n }\n return param;\n};\n\nconst _initScrollSelect = () => {\n if (props.scrollY > 0) {\n nextTick(() => {\n if (!refElBodyMain.value) {\n return;\n }\n const elSelected = refElBodyMain.value.querySelectorAll('.tr-selected');\n refElBodyMain.value.scrollTop =\n elSelected && elSelected.length > 0\n ? (elSelected[0] as HTMLElement).offsetTop > SELECT_SCROLL_THRESHOLD\n ? (elSelected[0] as HTMLElement).offsetTop - SELECT_SCROLL_OFFSET\n : 0\n : 0;\n });\n }\n};\n\nconst _setNewDataAfter = (opt: any = {}) => {\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n _initScrollSelect();\n }\n\n if (props.isElastic) {\n const isElasticCloseAll = CommonBase.isBoolean(opt.isElasticCloseAll)\n ? opt.isElasticCloseAll\n : true;\n if (isElasticCloseAll) {\n optElastic.open = [];\n // 全关时清空 Body 侧 absolute 标记(旧行 id 作废,残留标记在 id 复用场景会命中)\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.clearElasticAbsolute();\n }\n }\n optElastic.loading = [];\n _initElasticAllData();\n }\n // 数据替换后重置悬停高亮:hover 跟随行索引,新数据同索引行会残留旧高亮\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n nextTick(() => {\n if (props.isPaginate) {\n optPageInfo.pages = _pageData.changeNewPaginate.pages;\n optPageInfo.limit = _pageData.changeNewPaginate.limit;\n }\n if (props.isOrder) {\n optOrderSort.value = _initOrderData([\n _pageData.changeNewSort.orderIndex,\n _pageData.changeNewSort.orderBy,\n ]);\n }\n _runLoadStop();\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setEmptyWidth();\n _calculationFixedHeadInfo();\n });\n });\n};\n\nconst _getNewDataByLocal = (param: any, isInitSort: boolean) => {\n const list = CommonBase.isEmpty(props.list) ? [] : props.list;\n let newSortData: any[] = [];\n if (isInitSort) {\n if (props.isOrder) {\n const jsonData: any = {};\n const sortKey: any[] = [];\n let sortFormat = 'string';\n if (!CommonBase.isUndefined(param.orderIndex)) {\n const orderColumns = param.orderColumns;\n const columnsInfo = (props.columns as any[])[param.orderIndex];\n if (!CommonBase.isUndefined(columnsInfo)) {\n if (CommonBase.isEmpty(columnsInfo.sortType)) {\n switch (columnsInfo.format) {\n case 'int':\n case 'float2':\n case 'float3':\n sortFormat = 'number';\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n sortFormat = 'date';\n break;\n default:\n sortFormat = 'string';\n }\n } else {\n sortFormat = columnsInfo.sortType;\n }\n }\n list.forEach((info: any) => {\n if (!info) {\n return;\n }\n let temp = info[orderColumns];\n temp = CommonBase.isUndefined(temp) || temp === null ? '' : temp;\n const tempStr = temp.toString();\n if (!CommonBase.isExistJsonKey(jsonData, tempStr)) {\n jsonData[tempStr] = [];\n sortKey.push(temp);\n }\n jsonData[tempStr].push(CommonBase.getJsonClone(info));\n });\n }\n if (sortKey.length > 0) {\n const newSortKey: any[] =\n param.orderBy === 'desc'\n ? CommonBase.getArrDesc(sortKey, sortFormat)\n : CommonBase.getArrAsc(sortKey, sortFormat);\n newSortKey.forEach((k: any) => {\n newSortData.push(...jsonData[k.toString()]);\n });\n }\n } else {\n newSortData = CommonBase.getListClone(props.list);\n }\n _pageData.sortLocalData = newSortData;\n } else {\n newSortData = _pageData.sortLocalData;\n }\n if (props.isPaginate) {\n const newData = [];\n const len = newSortData.length;\n const s = param.offset;\n let e = param.offset + param.limit;\n e = len < e ? len : e;\n if (len) {\n if (len >= s && len > 0) {\n for (let i = s; i < e; i += 1) {\n newData.push(CommonBase.getJsonClone(newSortData[i]));\n }\n }\n }\n return newData;\n } else {\n return newSortData;\n }\n};\n\nconst _getNewDataBefore = (opt: any = {}) => {\n const param = _getPaginateSort();\n optCurrentPageSelectIds.value = [];\n optAllValue.value = false;\n _runLoadStart();\n if (props.isServer) {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n _emitGetData(param);\n }, LOCAL_LOAD_DELAY);\n } else {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n const isInitSortData = CommonBase.isBoolean(opt.isChangePage) ? !opt.isChangePage : true;\n optNewList.value = _getNewDataByLocal(param, isInitSortData);\n _setNewDataAfter();\n }, LOCAL_LOAD_DELAY);\n }\n};\n\nconst _listenerTableScrollX = () => {\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.addEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.addEventListener('scroll', _onScrollBody);\n }\n }\n};\n\nconst _listenerTableScrollY = () => {\n if (optScrollYIsUse.value) {\n const win: any = window;\n const MutationObserver: any =\n win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver;\n if (!MutationObserver) {\n return;\n }\n _pageObject.observerBodyScrollY = new MutationObserver(() => {\n _calculationScrollY();\n });\n const observer = _pageObject.observerBodyScrollY;\n if (refElBodyTable.value && refElBodyTable.value.$el && observer) {\n observer.observe(refElBodyTable.value.$el, {\n childList: true,\n subtree: true,\n });\n }\n }\n};\n\nconst _onWinResize = () => {\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setElasticWidth();\n _setEmptyWidth();\n _calculationScrollRelation();\n nextTick(() => {\n _calculationFixedHeadInfo();\n });\n};\n\nconst _onWinScroll = () => {\n if (_rafIdWinScroll !== null) {\n return;\n }\n _rafIdWinScroll = requestAnimationFrame(() => {\n _rafIdWinScroll = null;\n _calculationFixedHeadInfo();\n });\n};\n\nconst _initMain = () => {\n _analysisColumns();\n nextTick(() => {\n if (props.isServer) {\n _getNewDataBefore();\n } else {\n if (!CommonBase.isEmpty(props.list)) {\n _getNewDataBefore();\n if (!props.isShowInitLoadIng) {\n optBase.isRunLoading = false;\n }\n } else {\n if (props.isShowInitLoadIng) {\n _runLoadStart();\n } else {\n nextTick(() => {\n _setEmptyWidth();\n });\n }\n }\n }\n });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n _listenerTableScrollX();\n _listenerTableScrollY();\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true, // 拖拽窗口高频触发 resize,DelayFun 默认 200ms 节流(isDelay 默认即 true,显式标注语义)\n callback: () => {\n _onWinResize();\n },\n });\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n });\n});\n\nonActivated(() => {\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n // 与 scroll 同源处理:deactivated 时已销毁,激活后重建 resize 监听,防止缓存期间持续执行布局计算\n if (!_pageData.resizeEvent) {\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true,\n callback: () => {\n _onWinResize();\n },\n });\n }\n // 缓存期间窗口尺寸变化已丢失监听,激活后立即补一次布局重算(固定列宽/滚动量判定停留在缓存前状态,否则持续错误到下次 resize)\n _onWinResize();\n // deactivated 时取消了未决加载请求 → 激活后补发数据(keep-alive 切走切回场景,数据不停滞)\n if (_pageData.pendingCanceled) {\n _pageData.pendingCanceled = false;\n _getNewDataBefore();\n }\n});\n\nonDeactivated(() => {\n window.removeEventListener('scroll', _onWinScroll);\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n // 取消未决加载后同步复位 loading:否则 isRunLoading 残留 true,\n // 遮罩常驻 + onChangePaginate/refresh/onClickOrderBy 的守卫把交互全部吞掉(keep-alive 缓存期)\n optBase.isRunLoading = false;\n // 标记未决请求被取消:onActivated 时补发数据(否则 keep-alive 切回后数据停留旧状态,\n // 与 onBeforeUnmount→onMounted 经 _initMain 重拉的路径不对称——Index R4 回归发现)\n _pageData.pendingCanceled = true;\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n _pageData.resizeEvent = null;\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n});\n\nonBeforeUnmount(() => {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n if (_pageObject.observerBodyScrollY) {\n _pageObject.observerBodyScrollY.disconnect();\n _pageObject.observerBodyScrollY.takeRecords();\n _pageObject.observerBodyScrollY = null;\n }\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.removeEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.removeEventListener('scroll', _onScrollBody);\n }\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n window.removeEventListener('scroll', _onWinScroll);\n});\n\nwatch(\n () => props.list,\n (newValue: any[], oldValue: any[]) => {\n // 外部传 null 兜底空数组(Array prop 校验放行 null,getJsonByList/遍历会崩溃)\n const safeList: any[] = CommonBase.isEmpty(newValue) ? [] : newValue;\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n _pageData.dataJson = CommonBase.getJsonByList(safeList);\n\n if (props.isServer) {\n // 克隆后赋值:与本地模式一致,防止子组件原地修改行对象污染外部传入的 props.list\n optNewList.value = CommonBase.getListClone(safeList) as ListInfo[];\n } else {\n if (props.isParamTriggerServer) {\n optNewList.value = CommonBase.getListClone(safeList, true);\n } else {\n _pageData.changeNewPaginate.pages = 1;\n const paramLocal = _getPaginateSort();\n optNewList.value = _getNewDataByLocal(paramLocal, true) as ListInfo[];\n }\n }\n const opt: any = {};\n if (props.isElastic) {\n // 原地 mutation 时 newValue 与 oldValue 为同一批对象引用,逐项比较 id 恒相等;\n // 改为 id 集合 diff:以「内容是否变化」判断是否为数据更新(引用变化时 isUpd 为 true,不走关闭逻辑)\n let isUpd = false;\n if (oldValue) {\n if (safeList.length === oldValue.length) {\n // list 中含 null 行时 null.id 会中断回调,用可选链兜底(null 行无 id 可比较,不视为更新)\n const oldIdSet = new Set(oldValue.map((item: any) => item?.id));\n isUpd = safeList.some((info: any) => info && !oldIdSet.has(info.id));\n } else {\n // 长度变化(新增/删除行)也视为数据更新,被删行的展开 id 不再残留\n isUpd = true;\n }\n }\n if (!isUpd) {\n opt.isElasticCloseAll = false;\n }\n }\n _setNewDataAfter(opt);\n },\n { deep: true },\n);\n\nwatch(\n () => props.columns,\n () => {\n nextTick(() => {\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n });\n });\n },\n { deep: true },\n);\n\nwatch(\n () => props.selectValue,\n () => {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n },\n);\n\nwatch(\n () => props.orderSort,\n (newValue: unknown[], _oldValue: unknown[]) => {\n if (newValue && newValue.length >= 2) {\n if (\n !(\n newValue[0] === _pageData.changeNewSort.orderIndex &&\n newValue[1] === _pageData.changeNewSort.orderBy\n )\n ) {\n const newOrderSort = _initOrderData(props.orderSort);\n // 与 onClickOrderBy 一致:排序变更从第 1 页开始,避免停留在旧页码切片\n _pageData.changeNewPaginate.pages = 1;\n // 页码 UI 立即同步:服务端模式下 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移\n optPageInfo.pages = 1;\n _pageData.changeNewSort = {\n orderIndex: newOrderSort[0],\n orderBy: newOrderSort[1],\n };\n optOrderSort.value = newOrderSort;\n // 非 isParamTriggerServer 模式:外部改 props 排序需本地重算数据(与 onClickOrderBy 分支一致)\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n }\n },\n { deep: true },\n);\n\nwatch(\n [() => props.pageOffset, () => props.paginateLimit],\n ([_newOffset, newLimit], [_oldOffset, _oldLimit]) => {\n const pages = _initPaginatePages();\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = newLimit;\n optPageInfo.pages = pages;\n optPageInfo.limit = newLimit;\n // 外部改 props 分页需本地重算数据(与 onChangePaginate 分支一致);isParamTriggerServer 由外部拉数,不重算\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n },\n);\n\nconst onSelectAll = () => {\n // 组件禁用时全选一并拦截:表头 checkbox 已随 disabled 置灰,此处为逻辑层兜底,防任何路径绕过 UI 触发全选\n if (props.disabled) {\n return;\n }\n const newAllValue = !optAllValue.value;\n let newSelectValue: string[] = [];\n if (newAllValue) {\n const allIds = _getCurrentPageAllUse();\n const sIds = optCurrentPageSelectIds.value;\n const temp: string[] = [];\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(sIds, aId)) {\n temp.push(aId);\n }\n });\n newSelectValue = sIds.concat(temp);\n }\n optAllValue.value = newAllValue;\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n};\n\nconst onClickOrderBy = (_info: any, inx: number, sortType: string) => {\n // 组件禁用时排序一并拦截:表头排序图标已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发排序\n if (props.disabled) {\n return;\n }\n if (!optBase.isRunLoading) {\n _pageData.changeNewPaginate.pages = 1;\n // 与 watch orderSort 一致:页码 UI 立即同步(服务端模式 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移)\n optPageInfo.pages = 1;\n _pageData.changeNewSort.orderIndex = inx;\n _pageData.changeNewSort.orderBy = sortType;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n};\n\n// info 允许 null:Body emit 声明 ListInfo | null(list 含 null 行时点击行携带 null),isEmpty 守卫已拦截\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n // null 行守卫:list 含 null 项时 info.isDisabled 解引用崩溃(null 行无行为,直接返回);!info 同时提供 TS 收窄\n if (!info || CommonBase.isEmpty(info)) {\n return;\n }\n // 禁用行统一拦截:行禁用或组件禁用时,选中、弹性展开、onClickRow 事件全部不触发\n if ((CommonBase.isBoolean(info.isDisabled) && info.isDisabled) || props.disabled) {\n return;\n }\n // 空串语义 = 不启用拦截:getParent 空串分支返回 parentNode 会误拦截全部点击,先守卫\n const elInvalid = CommonBase.isNonEmptyString(props.rowClickKeyInvalid)\n ? CommonElement.getParent(e.target, props.rowClickKeyInvalid, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elInvalid)) {\n if (props.isElastic) {\n const elElastic = CommonBase.isNonEmptyString(props.rowClickKeyElastic)\n ? CommonElement.getParent(e.target, props.rowClickKeyElastic, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elElastic)) {\n if (props.isClickRowLinkage) {\n _setSelectElasticIds(info, inx);\n }\n } else {\n _setSelectElasticIds(info, inx, elElastic);\n return;\n }\n }\n let isRc = false;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n let elRc = CommonElement.getParent(e.target, '.th-rc', e.currentTarget, false);\n if (elRc === e.currentTarget) {\n elRc = null;\n }\n if (CommonBase.isUndefined(elRc)) {\n if (props.isClickRowLinkage) {\n _setSelectRc(info);\n }\n } else {\n isRc = true;\n _setSelectRc(info);\n }\n }\n _emitClickRow(info, inx, isRc);\n }\n};\n\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n optBase.hoverTrIndex = inx;\n optBase.hoverTrElasticIndex = elasticInx;\n};\n\nconst onHoverOutTr = () => {\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n};\n\nconst onChangePaginate = (pages: number, limit: number) => {\n // 组件禁用时分页一并拦截:分页条已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发翻页\n if (props.disabled) {\n return;\n }\n if (optBase.isRunLoading) {\n return;\n }\n if (props.isPaginate) {\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = limit;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n }\n};\n\nconst onFixedScrollX = (e: Event) => {\n _onScrollX(e);\n};\n\nconst getParamInfo = () => {\n return _getPaginateSort();\n};\n\nconst refresh = (isInit = true) => {\n if (optBase.isRunLoading) {\n return;\n }\n if (isInit) {\n _pageData.changeNewPaginate.pages = 1;\n }\n _getNewDataBefore();\n};\n\nconst getData = (): ListInfo[] => {\n // 浅拷贝契约:行对象一层克隆,嵌套对象与内部状态共享引用(外部拿到后不会改到内部状态,但嵌套引用仍共享)\n const list = toRaw(optNewList.value);\n return CommonBase.getListClone(list) as ListInfo[];\n};\n\nconst getSelectData = () => {\n const selectDataItem = _getSelectDataItem();\n const checkedIds = selectDataItem?.checkedIds || [];\n return { ids: checkedIds.join(','), list: selectDataItem?.checkedData || [] };\n};\n\nconst loadStart = () => {\n _runLoadStart();\n};\n\nconst loadStop = () => {\n _runLoadStop();\n};\n\n// 与 closeElastic 一致:外部可能传数字 id(ListInfo.id 为 string | number),入口归一为字符串防 indexOf 失配\nconst loadElasticStart = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStart(id.toString());\n};\n\nconst loadElasticStop = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStop(id.toString());\n};\n\n// 幂等关闭:未展开的行直接返回,避免调用方按「关闭」语义误触「展开 + 触发加载」\nconst closeElastic = (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => {\n // null 行守卫:运行时兜底(list 含 null 项场景调用方可能传入空 info),info.id 解引用前先判空\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (optElastic.open.indexOf(id) === -1) {\n return;\n }\n // elElastic 缺省时按 data-elastic-id 定位(Body 模板挂载点),供关闭后弹性容器类名/高度复位\n const el =\n elElastic ||\n (refElBodyMain.value\n ? (refElBodyMain.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null)\n : null);\n _setSelectElasticIds(info, trIndex, el, false);\n};\n\nconst refreshResize = () => {\n _onWinResize();\n};\n\nexport interface ClTableExpose {\n getParamInfo: () => TableEmitParam;\n refresh: (isInit?: boolean) => void;\n getData: () => ListInfo[];\n getSelectData: () => { ids: string; list: ListInfo[] };\n loadStart: () => void;\n loadStop: () => void;\n loadElasticStart: (id: string | number) => void;\n loadElasticStop: (id: string | number) => void;\n closeElastic: (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => void;\n refreshResize: () => void;\n}\n\ndefineExpose({\n getParamInfo,\n refresh,\n getData,\n getSelectData,\n loadStart,\n loadStop,\n loadElasticStart,\n loadElasticStop,\n closeElastic,\n refreshResize,\n});\n</script>\n"],"names":["getTipIconInfo","tipIcon","CommonBase","name","props","__props","emit","__emit","optTipIcon","computed","optThInfo","optSortable","optSortInteractive","optTipMsgText","tipMsg","text","optSortType","orderSort","optAriaSort","clsTh","cls","thInfo","_isWidthValid","activeSort","clsFinal","CommonElement","styTh","sty","_emitClickOrderBy","sortType","w","onClickOrderBy","newSortType","_unref","_createElementBlock","_createElementVNode","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_Fragment","optTdInfo","clsTd","tdInfo","styTd","NO_HOVER_TOTAL_INDEX","refElTable","ref","clsParent","styTable","optFunGetThValue","info","optFunGetTdValue","value","opt","optFunGetTotalValue","watch","nv","onSelectAll","inx","onHoverInTotal","onHoverOutTotal","__expose","elRc","totalPadding","elThs","ti","thStyle","plRaw","prRaw","pl","pr","h","elTotal","ClCheckboxOne","_openBlock","_renderList","thIndex","ClTableTh","_toDisplayString","_hoisted_2","_normalizeClass","_hoisted_3","tdIndex","ClTableTd","elId","optForIdCb","_getForId","optForIdRd","optIsChecked","optIsDisabled","suffix","ClRadioOne","optPageLanguage","getPageLanguage","useLanguage","optElasticAbsoluteIds","optSelectedSet","v","optElasticLoadingSet","optElasticOpenSet","optColspanCount","n","clsTable","onClickTr","e","onHoverInTr","elasticInx","onHoverOutTr","optGetElasticDataList","id","elasticData","optIsTrSelected","optIsElasticLoading","parentEl","el","li","elElastic","cur","next","scrollLeft","safeLeft","trInfo","trIndex","$event","ClTableTdChecked","_createTextVNode","_hoisted_4","_hoisted_5","_createVNode","ClLoad","_hoisted_9","_hoisted_10","trElasticInfo","trElasticInx","tdElasticInfo","tdElasticIndex","_hoisted_12","_hoisted_14","SCROLLBAR_HEIGHT","FIXED_HEAD_THRESHOLD","SELECT_SCROLL_THRESHOLD","SELECT_SCROLL_OFFSET","LOCAL_LOAD_DELAY","slots","useSlots","_initOrderData","data","orderSortInfo","initFirstSort","columns","i","columnInfo","sort","visible","columnOrderInfo","orderIndex","orderBy","_initPaginatePages","pages","_initOrderSort","_pageData","_pageObject","_keyIndex","refElHeadWrapper","refElHeadContainer","refElHeadMain","refElHeadTable","refElHeadFixedScrollX","refElBodyWrapper","refElBodyContainer","refElBodyMain","refElBodyTable","refElBodyFixedScrollX","optBase","reactive","optNewList","optPageInfo","optOrderSort","optAllValue","_getSelectValueIds","selectValue","optCurrentPageSelectIds","optElastic","optScrollX","optScrollYIsShow","optFixedColumn","optFixedHead","optLoadInfo","_rafIdScrollX","_rafIdWinScroll","_scrollLeftCache","optSlotsKeyTh","optSlotsKeyTd","names","optSlotsKeyTotal","optSlotsKeyTdElastic","optIsShowCheckboxAll","optIsShowTotal","optTotalCount","optScrollXIsUse","optScrollYIsUse","optFixedLeftIsUse","optFixedRightIsUse","clsHeadWrapper","clsHeadContainer","clsBodyWrapper","styBodyContainer","maxH","styBodyMain","styLoadHead","_emitGetData","param","_emitClickElastic","isOpen","_emitClickRow","isRc","_emitChangeChecked","ids","list","ext","_emitChangeParams","_getPaginateSort","_runLoadStart","nextTick","elThead","_runLoadStop","_analysisColumns","colspanCount","minWidth","_analysisFixedColumns","resolve","reject","totalWidth","centerWidth","leftColumn","rightColumn","elTds","totalLen","leftColspanCount","rightColspanCount","leftIndexMax","rightIndexMin","leftWidth","rightWidth","fi","elTd","tempW","err","_setElasticWidth","_setElasticHeight","_runElasticLoadStart","arr","_runElasticLoadStop","_setSelectElasticIds","isEmit","_initElasticOneClass","isEmitUse","_initElasticAllData","newList","elasticIconCls","arrOpenId","newInfo","addCls","removeCls","newCls","_getCurrentPageAllUse","allIds","_getCurrentSelectUse","selectIds","sIds","useIds","sId","_setCheckboxAll","checkedIds","_getSelectDataItem","unCheckedIds","aId","_emitChangeCheckedBefore","selectDataItem","_setSelectRc","newId","oldSelectValue","newSelectValue","isExist","_calculationScrollX","pW","tW","_calculationScrollY","bodyHeight","isY","_calculationScrollFixedColumn","pWidth","cWidth","posType","_calculationScrollRelation","_onScrollX","_onScrollHead","left","_onScrollBody","_calculationFixedHeadInfo","isShowFixed","width","height","pos","bodyH","_setEmptyWidth","limit","orderColumn","_initScrollSelect","elSelected","_setNewDataAfter","arrSelectIds","_getNewDataByLocal","isInitSort","newSortData","jsonData","sortKey","sortFormat","orderColumns","columnsInfo","temp","tempStr","k","newData","len","s","_getNewDataBefore","isInitSortData","_listenerTableScrollX","_listenerTableScrollY","win","MutationObserver","observer","_onWinResize","_onWinScroll","_initMain","onMounted","ResizeEvent","onActivated","onDeactivated","onBeforeUnmount","newValue","oldValue","safeList","paramLocal","isUpd","oldIdSet","item","_oldValue","newOrderSort","_newOffset","newLimit","_oldOffset","_oldLimit","newAllValue","_info","elInvalid","onChangePaginate","onFixedScrollX","isInit","toRaw","_normalizeStyle","ClTableHead","skTh","_withCtx","slotProps","skTotal","_withDirectives","_hoisted_6","ClScrollXFence","_vShow","_hoisted_7","ClTableBody","skTd","skTdElastic","_hoisted_8","_hoisted_11","ClPaginate","_hoisted_13","ClLoadIng"],"mappings":"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"}
|