znyg-frontend-common 1.1.18 → 1.1.20
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/es/components/znTable/src/index.vue2.mjs +12 -12
- package/es/components/znTable/src/index.vue2.mjs.map +1 -1
- package/es/components/znTableV2/index.mjs +2 -0
- package/es/components/znTableV2/index.mjs.map +1 -0
- package/es/components/znTableV2/src/assets/notData.png.mjs +2 -0
- package/es/components/znTableV2/src/assets/notData.png.mjs.map +1 -0
- package/es/components/znTableV2/src/components/ColSetting.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/ColSetting.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/ColSetting.vue2.mjs +12 -0
- package/es/components/znTableV2/src/components/ColSetting.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Grid/components/GridItem.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/Grid/components/GridItem.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Grid/components/GridItem.vue2.mjs +3 -0
- package/es/components/znTableV2/src/components/Grid/components/GridItem.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Grid/index.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/Grid/index.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Grid/index.vue2.mjs +3 -0
- package/es/components/znTableV2/src/components/Grid/index.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Grid/interface/index.mjs +2 -0
- package/es/components/znTableV2/src/components/Grid/interface/index.mjs.map +1 -0
- package/es/components/znTableV2/src/components/OperationBtns/index.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/OperationBtns/index.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/OperationBtns/index.vue2.mjs +16 -0
- package/es/components/znTableV2/src/components/OperationBtns/index.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Pagination.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/Pagination.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/Pagination.vue2.mjs +3 -0
- package/es/components/znTableV2/src/components/Pagination.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue2.mjs +5 -0
- package/es/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/SearchForm/index.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/SearchForm/index.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/SearchForm/index.vue2.mjs +20 -0
- package/es/components/znTableV2/src/components/SearchForm/index.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/components/TableColumn.vue.mjs +2 -0
- package/es/components/znTableV2/src/components/TableColumn.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/components/TableColumn.vue2.mjs +3 -0
- package/es/components/znTableV2/src/components/TableColumn.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/hooks/interface/index.mjs +2 -0
- package/es/components/znTableV2/src/hooks/interface/index.mjs.map +1 -0
- package/es/components/znTableV2/src/hooks/useSelection.mjs +2 -0
- package/es/components/znTableV2/src/hooks/useSelection.mjs.map +1 -0
- package/es/components/znTableV2/src/hooks/useTable.mjs +20 -0
- package/es/components/znTableV2/src/hooks/useTable.mjs.map +1 -0
- package/es/components/znTableV2/src/index.vue.mjs +2 -0
- package/es/components/znTableV2/src/index.vue.mjs.map +1 -0
- package/es/components/znTableV2/src/index.vue2.mjs +34 -0
- package/es/components/znTableV2/src/index.vue2.mjs.map +1 -0
- package/es/components/znTableV2/src/interface/index.mjs +2 -0
- package/es/components/znTableV2/src/interface/index.mjs.map +1 -0
- package/es/components/znTableV2/src/utils.mjs +2 -0
- package/es/components/znTableV2/src/utils.mjs.map +1 -0
- package/es/index.mjs +1 -1
- package/es/index.mjs.map +1 -1
- package/global.d.ts +1 -0
- package/lib/components/znTable/src/index.vue2.js +8 -8
- package/lib/components/znTable/src/index.vue2.js.map +1 -1
- package/lib/components/znTableV2/index.js +2 -0
- package/lib/components/znTableV2/index.js.map +1 -0
- package/lib/components/znTableV2/src/assets/notData.png.js +2 -0
- package/lib/components/znTableV2/src/assets/notData.png.js.map +1 -0
- package/lib/components/znTableV2/src/components/ColSetting.vue.js +2 -0
- package/lib/components/znTableV2/src/components/ColSetting.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/ColSetting.vue2.js +12 -0
- package/lib/components/znTableV2/src/components/ColSetting.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/Grid/components/GridItem.vue.js +2 -0
- package/lib/components/znTableV2/src/components/Grid/components/GridItem.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/Grid/components/GridItem.vue2.js +3 -0
- package/lib/components/znTableV2/src/components/Grid/components/GridItem.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/Grid/index.vue.js +2 -0
- package/lib/components/znTableV2/src/components/Grid/index.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/Grid/index.vue2.js +3 -0
- package/lib/components/znTableV2/src/components/Grid/index.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/Grid/interface/index.js +2 -0
- package/lib/components/znTableV2/src/components/Grid/interface/index.js.map +1 -0
- package/lib/components/znTableV2/src/components/OperationBtns/index.vue.js +2 -0
- package/lib/components/znTableV2/src/components/OperationBtns/index.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/OperationBtns/index.vue2.js +16 -0
- package/lib/components/znTableV2/src/components/OperationBtns/index.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/Pagination.vue.js +2 -0
- package/lib/components/znTableV2/src/components/Pagination.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/Pagination.vue2.js +3 -0
- package/lib/components/znTableV2/src/components/Pagination.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue.js +2 -0
- package/lib/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue2.js +5 -0
- package/lib/components/znTableV2/src/components/SearchForm/components/SearchFormItem.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/SearchForm/index.vue.js +2 -0
- package/lib/components/znTableV2/src/components/SearchForm/index.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/SearchForm/index.vue2.js +20 -0
- package/lib/components/znTableV2/src/components/SearchForm/index.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/components/TableColumn.vue.js +2 -0
- package/lib/components/znTableV2/src/components/TableColumn.vue.js.map +1 -0
- package/lib/components/znTableV2/src/components/TableColumn.vue2.js +3 -0
- package/lib/components/znTableV2/src/components/TableColumn.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/hooks/interface/index.js +2 -0
- package/lib/components/znTableV2/src/hooks/interface/index.js.map +1 -0
- package/lib/components/znTableV2/src/hooks/useSelection.js +2 -0
- package/lib/components/znTableV2/src/hooks/useSelection.js.map +1 -0
- package/lib/components/znTableV2/src/hooks/useTable.js +20 -0
- package/lib/components/znTableV2/src/hooks/useTable.js.map +1 -0
- package/lib/components/znTableV2/src/index.vue.js +2 -0
- package/lib/components/znTableV2/src/index.vue.js.map +1 -0
- package/lib/components/znTableV2/src/index.vue2.js +34 -0
- package/lib/components/znTableV2/src/index.vue2.js.map +1 -0
- package/lib/components/znTableV2/src/interface/index.js +2 -0
- package/lib/components/znTableV2/src/interface/index.js.map +1 -0
- package/lib/components/znTableV2/src/utils.js +2 -0
- package/lib/components/znTableV2/src/utils.js.map +1 -0
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{defineComponent as e,getCurrentInstance as t,ref as a,computed as l,onMounted as r,onUnmounted as o,toRaw as n,reactive as i,watch as s,nextTick as u,unref as c,provide as p,resolveComponent as d,resolveDirective as
|
|
1
|
+
import{defineComponent as e,getCurrentInstance as t,ref as a,computed as l,onMounted as r,onUnmounted as o,toRaw as n,reactive as i,watch as s,nextTick as u,unref as c,provide as p,resolveComponent as d,resolveDirective as h,createElementBlock as m,openBlock as g,createCommentVNode as f,withDirectives as v,createElementVNode as y,createBlock as S,createVNode as b,vShow as C,normalizeClass as w,renderSlot as _,mergeProps as k,withCtx as q,Fragment as x,renderList as T,toDisplayString as A,resolveDynamicComponent as B,createSlots as E}from"vue";import P from"./assets/notData.png.mjs";import"./components/ColSetting.vue.mjs";import"./components/Pagination.vue.mjs";import"./components/TableColumn.vue.mjs";import"./components/SearchForm/index.vue.mjs";import"./components/OperationBtns/index.vue.mjs";import{useSelection as N}from"./hooks/useSelection.mjs";import{useTable as O}from"./hooks/useTable.mjs";import{generateUUID as F,handleProp as L}from"./utils.mjs";import{Refresh as M,Operation as z,Search as $,DCaret as j,Loading as I}from"@element-plus/icons-vue";import{ElTable as U}from"element-plus";import{useLocalStorage as H,useResizeObserver as V}from"@vueuse/core";import R from"./components/SearchForm/index.vue2.mjs";import D from"./components/OperationBtns/index.vue2.mjs";import K from"./components/TableColumn.vue2.mjs";import G from"./components/Pagination.vue2.mjs";import X from"./components/ColSetting.vue2.mjs";var J=Object.defineProperty,Z=(e,t)=>J(e,"name",{value:t,configurable:!0});const Q={class:"table-box"},W={class:"table-header"},Y={class:"header-button-lf"},ee={key:0,class:"header-button-ri"},te={key:0},ae={key:0,style:{display:"flex","align-items":"center","justify-content":"center",padding:"20px 0",color:"#909399","font-size":"14px"}},le={key:0,style:{display:"flex","align-items":"center",gap:"8px"}},re={key:1,style:{color:"#909399"}},oe={class:"table-empty"};var ne=e({name:"ZnTable",__name:"index",props:{columns:{type:Array,required:!0,default:Z((()=>[]),"default")},data:{type:Array,required:!1},requestApi:{type:Function,required:!1},requestAuto:{type:Boolean,required:!1,default:!0},requestError:{type:Function,required:!1},dataCallback:{type:Function,required:!1},title:{type:String,required:!1},pagination:{type:Boolean,required:!1,default:!0},pageSizeOptions:{type:Array,required:!1,default:Z((()=>[10,25,50,100]),"default")},pageSize:{type:Number,required:!1,default:15},initParam:{required:!1,default:{}},border:{type:Boolean,required:!1,default:!0},toolButton:{type:[Array,Boolean],required:!1,default:!0},rowKey:{type:String,required:!1,default:"id"},searchCol:{type:[Number,Object],required:!1,default:Z((()=>({xs:1,sm:2,md:2,lg:3,xl:4})),"default")},height:{type:[String,Number],required:!1},heightOffset:{type:Number,required:!1,default:0},minHeight:{type:[String,Number],required:!1,default:200},onlyTable:{type:Boolean,required:!1,default:!1},isView:{type:Boolean,required:!1,default:!1},searchFormShow:{type:Boolean,required:!1,default:!0},enableScrollPagination:{type:Boolean,required:!1,default:!1},scrollPaginationThreshold:{type:Number,required:!1,default:100}},emits:["search","reset","dragSort","handleOperateBtnsClick"],setup(e,{expose:J,emit:ne}){const ie=e,se=t(),ue=H("znyg",{dictMap:{}}),ce=a(0);V(document.body,(e=>{const t=e[0],{height:a}=t.contentRect;ce.value=a}));const pe=l((()=>{if(ie.height){if("auto"===ie.height){if(!(De.value&&De.value.length>0)){const e="number"==typeof ie.minHeight?ie.minHeight:parseInt(ie.minHeight.toString());return Math.max(e,200)}}return ie.height}const e=ce.value-100-(Se.value?120:40)-(ie.pagination?150:0)-ie.heightOffset,t="number"==typeof ie.minHeight?ie.minHeight:parseInt(ie.minHeight.toString());return e>t?e:t})),de=a(),he=a("id-"+F()),me={
|
|
2
2
|
// 前置特殊列(显示在表格最前面)
|
|
3
3
|
FRONT_COLUMNS:["selection","radio","index","expand","sort"],
|
|
4
4
|
// 后置特殊列(显示在表格最后面)
|
|
@@ -8,27 +8,27 @@ EXCLUDE_FROM_SETTING:{props:["operation"],
|
|
|
8
8
|
// 按 prop 排除
|
|
9
9
|
types:[],
|
|
10
10
|
// 按 type 排除(会自动包含所有特殊列类型)
|
|
11
|
-
fixed:!0}},ge=[...
|
|
11
|
+
fixed:!0}},ge=[...me.FRONT_COLUMNS,...me.BACK_COLUMNS],fe=Z((e=>e&&me.FRONT_COLUMNS.includes(e)),"isFrontSpecialColumn"),ve=Z((e=>e&&me.BACK_COLUMNS.includes(e)),"isBackSpecialColumn"),ye=Z((e=>{const{type:t,prop:a,fixed:l}=e;return!(!a||!Ge.has(a))||(!(!t||!ge.includes(t))||(!(!a||!me.EXCLUDE_FROM_SETTING.props.includes(a))||!(!me.EXCLUDE_FROM_SETTING.fixed||!l)))}),"shouldExcludeFromSetting"),Se=a(ie.searchFormShow),be=Z((e=>Array.isArray(ie.toolButton)?ie.toolButton.includes(e):ie.toolButton),"showToolButton"),Ce=a(""),{selectionChange:we,selectedList:_e,selectedListIds:ke,isSelected:qe}=N(ie.rowKey),xe=Z((()=>{const e=de.value?.$el;if(e){const t=e.querySelector(".el-scrollbar__wrap");t&&(t.scrollTop=0)}}),"scrollToTop"),Te=Z((()=>{Ie.value=!0,je.value=!1,Ue.value=!1}),"resetScrollPagination"),{tableData:Ae,pageable:Be,searchParam:Ee,searchInitParam:Pe,getTableList:Ne,search:Oe,reset:Fe,handleSizeChange:Le,handleCurrentChange:Me,loading:ze}=O(ie.requestApi,ie.initParam,ie.pagination||ie.enableScrollPagination,ie.dataCallback,ie.requestError,ie.pageSize,xe,Te,ie.enableScrollPagination),$e=Z((async()=>{ie.enableScrollPagination&&Te(),await Ne()}),"getTableList"),je=a(!1),Ie=a(!0),Ue=a(!1),He=Z((async()=>{if(je.value||!Ie.value||Ue.value||!ie.enableScrollPagination)return;if(0===Be.value.total)return;const e=Math.ceil(Be.value.total/Be.value.pageSize);if(Be.value.pageNum>=e)Ie.value=!1;else try{je.value=!0,Ue.value=!0;const e=Be.value.pageNum+1,t={...Pe.value,...Ee.value,currPage:e,pageSize:Be.value.pageSize,params:{...Pe.value,...Ee.value}};if(ie.requestApi){const{result:e}=await ie.requestApi(t),a=ie.dataCallback?ie.dataCallback(e):e;if(a&&a.list&&Array.isArray(a.list)&&a.list.length>0){Array.isArray(Ae.value)||(Ae.value=[]),Ae.value.push(...a.list);const{currPage:e,limit:t,total:l}=a;Be.value.pageNum=e,Be.value.pageSize=t,Be.value.total=l;const r=Math.ceil(l/t);Ie.value=e<r}else Ie.value=!1,console.log("❌ 滚动翻页没有更多数据")}}catch(e){ie.requestError&&ie.requestError(e)}finally{je.value=!1,setTimeout((()=>{Ue.value=!1}),1e3)}}),"handleScrollPagination"),Ve=Z((e=>{if(!ie.enableScrollPagination||!ie.requestApi)return;if(je.value||!Ie.value)return;const t=de.value?.$el;if(!t)return;const a=t.querySelector(".el-scrollbar__wrap");if(!a)return;const l=a.scrollTop;a.scrollHeight-l-a.clientHeight<=ie.scrollPaginationThreshold&&He()}),"handleScroll"),Re=Z((()=>{de.value&&de.value.clearSelection()}),"clearSelection");r((()=>{ie.requestAuto&&$e(),ie.data&&(Be.value.total=ie.data.length),ie.enableScrollPagination&&setTimeout((()=>{const e=de.value?.$el;if(e){const t=e.querySelector(".el-scrollbar__wrap");t&&(t.removeEventListener("scroll",Ve),t.addEventListener("scroll",Ve,{passive:!0}))}}),500)})),o((()=>{if(ie.enableScrollPagination){const e=de.value?.$el;if(e){const t=e.querySelector(".el-scrollbar__wrap");t&&t.removeEventListener("scroll",Ve)}}}));const De=l((()=>{if(Array.isArray(Ae.value)||(Ae.value=[]),ie.data){if(!Array.isArray(ie.data))return console.warn("props.data 不是数组:",ie.data),[];if(!ie.pagination)return ie.data;const e=n(ie.data).slice((Be.value.pageNum-1)*Be.value.pageSize,Be.value.pageSize*Be.value.pageNum);return i(e)}return Ae.value}));s((()=>ie.initParam),(()=>{$e()}),{deep:!0}),s((()=>Ae.value),(()=>{ie.enableScrollPagination&&Ie.value&&u((()=>{setTimeout((()=>{const e=de.value?.$el;if(e){e.querySelector(".el-scrollbar__wrap")&&Ve({})}}),100)}))}),{deep:!0});let Ke=i(ie.columns);const Ge=new Set,Xe=Z((e=>{e.forEach((e=>{!1===e.isShow&&(e.search?.el||e.search?.render)&&e.prop&&Ge.add(e.prop),e._children?.length&&Xe(e._children)}))}),"recordInitialFilterOnlyColumns");Xe(ie.columns);const Je=l((()=>We(Ke))),Ze=a(new Map),Qe=Z((async({prop:e,enum:t,dictCode:a})=>{if(a&&ue&&ue.value?.dictMap)return void Ze.value.set(e,ue.value.dictMap[a?.toString()]??[]);if(!t)return;if(Ze.value.has(e)&&("function"==typeof t||Ze.value.get(e)===t))return;if("function"!=typeof t)return Ze.value.set(e,c(t));Ze.value.set(e,[]);let l=await t();l=l?.result||l,Ze.value.set(e,l)}),"setEnumMap");p("enumMap",Ze);const We=Z(((e,t=[])=>(e.forEach((async e=>{e._children?.length&&t.push(...We(e._children)),t.push(e),e.isShow=e.isShow??!0,e.isShowInView=e.isShowInView??!0,e.isFilterEnum=e.isFilterEnum??!0,await Qe(e)})),t.filter((e=>!e._children?.length)))),"flatColumnsFunc"),Ye=l((()=>Je.value?.filter((e=>e.search?.el||e.search?.render)).sort(((e,t)=>e.search.order-t.search.order))));Ye.value?.forEach(((e,t)=>{e.search.order=e.search?.order??t+2;const a=e.search?.key??L(e.prop),l=e.search?.defaultValue;null!=l&&(Pe.value[a]=l,Ee.value[a]=l)}));const et=a(),tt=a([]),at=a(!1),lt=Z((()=>{tt.value=Ke.filter((e=>!ye(e)))}),"initColSetting");lt(),s((()=>Ke),(()=>{at.value||(console.log("检测到 tableColumns 变化,同步更新 colSetting"),lt())}),{deep:!0});const rt=Z((e=>{if(!at.value)if(se&&!se.isUnmounted)try{if(at.value=!0,!e||!Array.isArray(e)||0===e.length)return void console.warn("updateTableColumns: 无效的列设置数据",{hasNewColSetting:!!e,isArray:Array.isArray(e),length:e?.length});let t;try{t=JSON.parse(JSON.stringify(e))}catch(a){console.warn("深拷贝列设置数据失败,使用浅拷贝"),t=[...e]}const a=new Map,l=[...Ke];l.forEach((e=>{e&&e.prop&&a.set(e.prop,e)}));const r=[],o=new Set;l.forEach((e=>{e&&(fe(e.type)||"left"===e.fixed)&&(r.push(e),e.prop&&o.add(e.prop))})),t.forEach((e=>{if(e&&e.prop&&a.has(e.prop)&&!o.has(e.prop)){const t=a.get(e.prop);if(t)try{const a={...t};a.isShow=e.isShow,a.sortable=e.sortable,r.push(a),o.add(e.prop)}catch(a){console.warn("更新列配置时出错:",a),r.push(t),o.add(e.prop)}}})),l.forEach((e=>{!e||e.prop&&o.has(e.prop)||!ve(e.type)&&(ge.includes(e.type)||"left"===e.fixed)||r.push(e)})),setTimeout((()=>{if(se&&!se.isUnmounted)try{Ke.length=0,r.forEach((e=>{e&&Ke.push(e)})),tt.value=t}catch(e){console.warn("更新表格列时出错:",e)}finally{at.value=!1}else console.warn("延迟更新时组件已销毁")}),50)}catch(e){console.warn("updateTableColumns执行时出错:",e),at.value=!1}else console.warn("组件已销毁,跳过列更新")}),"updateTableColumns"),ot=Z((()=>{et.value.openColSetting()}),"openColSetting"),nt=Z((()=>{et.value.closeColSetting()}),"closeColSetting"),it=ne,st=Z((()=>{Oe(),it("search")}),"_search"),ut=Z((()=>{Fe(),it("reset")}),"_reset"),ct=Z(((e,t,a,l)=>{it("handleOperateBtnsClick",e,t,a,l)}),"handleOperateBtnsClick"),pt=Z((()=>{$e()}),"refreshTable");return J({element:de,tableData:De,radio:Ce,pageable:Be,searchParam:Ee,searchInitParam:Pe,getTableList:$e,search:Oe,reset:Fe,handleSizeChange:Le,handleCurrentChange:Me,clearSelection:Re,enumMap:Ze,isSelected:qe,selectedList:_e,selectedListIds:ke,refreshTable:pt,setSearchFormShow:Z((e=>{Se.value=e}),"setSearchFormShow"),getColumns:Z((()=>Ke),"getColumns"),getColSetting:Z((()=>tt.value),"getColSetting"),openColSetting:ot,closeColSetting:nt}),(t,a)=>{const l=d("el-button"),r=d("el-radio"),o=d("el-icon"),n=d("el-tag"),i=d("el-table-column"),s=h("loading");return g(),m("div",Q,[f(" 查询表单 "),v(b(R,{search:st,reset:ut,columns:Ye.value,"search-param":c(Ee),"search-col":e.searchCol},null,8,["columns","search-param","search-col"]),[[C,Se.value]]),f(" 表格主体 "),y("div",{class:w([e.onlyTable?"only-table":"card table-main"])},[f(" 表格头部 操作按钮 "),y("div",W,[y("div",Y,[_(t.$slots,"tableHeader",{selectedList:c(_e),selectedListIds:c(ke),isSelected:c(qe)})]),e.toolButton?(g(),m("div",ee,[_(t.$slots,"toolButton",{},(()=>[be("refresh")?(g(),S(l,{key:0,icon:c(M),circle:"",onClick:$e},null,8,["icon"])):f("v-if",!0),be("setting")&&e.columns.length?(g(),S(l,{key:1,icon:c(z),circle:"",onClick:ot},null,8,["icon"])):f("v-if",!0),be("search")&&Ye.value?.length?(g(),S(l,{key:2,icon:c($),circle:"",onClick:a[0]||(a[0]=e=>Se.value=!Se.value)},null,8,["icon"])):f("v-if",!0)]))])):f("v-if",!0)]),f(" 表格主体 "),v((g(),S(c(U),k({ref_key:"tableRef",ref:de},t.$attrs,{data:De.value,border:e.border,id:he.value,"row-key":e.rowKey,height:pe.value,onSelectionChange:c(we),onScroll:Ve}),{append:q((()=>[_(t.$slots,"append"),f(" 滚动翻页加载状态 "),!ie.enableScrollPagination||!je.value&&Ie.value?f("v-if",!0):(g(),m("div",ae,[je.value?(g(),m("div",le,[b(o,{class:"is-loading"},{default:q((()=>[b(c(I))])),_:1
|
|
12
12
|
/* STABLE */}),a[3]||(a[3]=y("span",null,"正在加载更多数据...",-1
|
|
13
|
-
/* HOISTED */))])):Ie.value?f("v-if",!0):(g(),
|
|
14
|
-
/* HOISTED */)])))]))])),empty:q((()=>[y("div",oe,[_(t.$slots,"empty",{},(()=>[a[5]||(a[5]=y("img",{src:
|
|
13
|
+
/* HOISTED */))])):Ie.value?f("v-if",!0):(g(),m("div",re,a[4]||(a[4]=[y("span",null,"没有更多数据了",-1
|
|
14
|
+
/* HOISTED */)])))]))])),empty:q((()=>[y("div",oe,[_(t.$slots,"empty",{},(()=>[a[5]||(a[5]=y("img",{src:P,alt:"notData"},null,-1
|
|
15
15
|
/* HOISTED */)),a[6]||(a[6]=y("div",null,"暂无数据",-1
|
|
16
|
-
/* HOISTED */))]))])])),default:q((()=>[_(t.$slots,"default"),(g(!0),
|
|
17
|
-
/* TEXT */)):"expand"==l.type?(g(),
|
|
16
|
+
/* HOISTED */))]))])])),default:q((()=>[_(t.$slots,"default"),(g(!0),m(x,null,T(c(Ke),(l=>(g(),m(x,{key:l},[f(" selection || radio || index || expand || sort "),l.type&&ge.includes(l.type)?(g(),S(i,k({key:0,ref_for:!0},l,{selectable:Z((e=>null==e.selectable||null==e.selectable||e.selectable),"selectable"),align:l.align??"center","reserve-selection":"selection"==l.type}),{default:q((i=>[f(" index "),"index"==l.type?(g(),m("span",te,A(e.pagination&&!e.enableScrollPagination?(c(Be).pageNum-1)*c(Be).pageSize+i.$index+1:i.$index+1),1
|
|
17
|
+
/* TEXT */)):"expand"==l.type?(g(),m(x,{key:1},[f(" expand "),l.render?(g(),S(B(l.render),k({key:0,ref_for:!0},i),null,16
|
|
18
18
|
/* FULL_PROPS */)):_(t.$slots,l.type,k({key:1,ref_for:!0},i))],64
|
|
19
|
-
/* STABLE_FRAGMENT */)):"radio"==l.type?(g(),
|
|
19
|
+
/* STABLE_FRAGMENT */)):"radio"==l.type?(g(),m(x,{key:2},[f(" radio "),b(r,{modelValue:Ce.value,"onUpdate:modelValue":a[1]||(a[1]=e=>Ce.value=e),label:i.row[e.rowKey]},{default:q((()=>a[2]||(a[2]=[y("i",null,null,-1
|
|
20
20
|
/* HOISTED */)]))),_:2
|
|
21
21
|
/* DYNAMIC */},1032,["modelValue","label"])],2112
|
|
22
|
-
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)):"sort"==l.type?(g(),
|
|
22
|
+
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)):"sort"==l.type?(g(),m(x,{key:3},[f(" sort "),b(n,{class:"move"},{default:q((()=>[b(o,null,{default:q((()=>[b(c(j))])),_:1
|
|
23
23
|
/* STABLE */})])),_:1
|
|
24
24
|
/* STABLE */})],2112
|
|
25
|
-
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)):"operationBtns"==l.type?(g(),
|
|
25
|
+
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)):"operationBtns"==l.type?(g(),m(x,{key:4},[f(" operationBtns "),b(D,k({ref_for:!0},l.props,{row:i.row,index:i.$index,onBtnClick:ct}),null,16,["row","index"])],2112
|
|
26
26
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)):f("v-if",!0)])),_:2
|
|
27
|
-
/* DYNAMIC */},1040,["selectable","align","reserve-selection"])):f("v-if",!0),f(" other "),!l.type&&l.prop&&l.isShow&&(!c(e.isView)||c(e.isView)&&l.isShowInView)?(g(),S(K,{key:1,column:l,"is-view":e.isView},
|
|
27
|
+
/* DYNAMIC */},1040,["selectable","align","reserve-selection"])):f("v-if",!0),f(" other "),!l.type&&l.prop&&l.isShow&&(!c(e.isView)||c(e.isView)&&l.isShowInView)?(g(),S(K,{key:1,column:l,"is-view":e.isView},E({_:2
|
|
28
28
|
/* DYNAMIC */},[T(Object.keys(t.$slots),(e=>({name:e,fn:q((a=>[_(t.$slots,e,k({ref_for:!0},a))]))})))]),1032,["column","is-view"])):f("v-if",!0)],64
|
|
29
29
|
/* STABLE_FRAGMENT */)))),128
|
|
30
30
|
/* KEYED_FRAGMENT */))])),_:3
|
|
31
|
-
/* FORWARDED */},16,["data","border","id","row-key","height","onSelectionChange"])),[[s,c(ze)]]),f(" 分页组件 "),_(t.$slots,"pagination",{},(()=>[e.pagination&&!e.enableScrollPagination?(g(),S(G,{key:0,pageable:c(Be),"handle-size-change":c(
|
|
32
|
-
/* CLASS */),f(" 列设置 "),e.toolButton?(g(),S(X,{key:0,ref_key:"colRef",ref:
|
|
31
|
+
/* FORWARDED */},16,["data","border","id","row-key","height","onSelectionChange"])),[[s,c(ze)]]),f(" 分页组件 "),_(t.$slots,"pagination",{},(()=>[e.pagination&&!e.enableScrollPagination?(g(),S(G,{key:0,pageable:c(Be),"handle-size-change":c(Le),"handle-current-change":c(Me),"page-size-options":e.pageSizeOptions},null,8,["pageable","handle-size-change","handle-current-change","page-size-options"])):f("v-if",!0)]))],2
|
|
32
|
+
/* CLASS */),f(" 列设置 "),e.toolButton?(g(),S(X,{key:0,ref_key:"colRef",ref:et,"col-setting":tt.value,onUpdateColumns:rt},{colSettingHeader:q((()=>[_(t.$slots,"colSettingHeader")])),_:3
|
|
33
33
|
/* FORWARDED */},8,["col-setting"])):f("v-if",!0)])}}});export{ne as default};
|
|
34
34
|
//# sourceMappingURL=index.vue2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znTable/src/index.vue"],"sourcesContent":["<!-- 📚📚📚 Pro-Table 文档: https://juejin.cn/post/7166068828202336263 -->\n\n<template>\n <div class=\"table-box\">\n <!-- 查询表单 -->\n <SearchForm v-show=\"isShowSearch\" :search=\"_search\" :reset=\"_reset\" :columns=\"searchColumns\" :search-param=\"searchParam\" :search-col=\"searchCol\" />\n\n <!-- 表格主体 -->\n <div :class=\"[onlyTable ? 'only-table' : 'card table-main']\">\n <!-- 表格头部 操作按钮 -->\n <div class=\"table-header\">\n <div class=\"header-button-lf\">\n <slot name=\"tableHeader\" :selected-list=\"selectedList\" :selected-list-ids=\"selectedListIds\" :is-selected=\"isSelected\"></slot>\n </div>\n <div v-if=\"toolButton\" class=\"header-button-ri\">\n <slot name=\"toolButton\">\n <el-button v-if=\"showToolButton('refresh')\" :icon=\"Refresh\" circle @click=\"getTableList\" />\n <el-button v-if=\"showToolButton('setting') && columns.length\" :icon=\"Operation\" circle @click=\"openColSetting\" />\n <el-button v-if=\"showToolButton('search') && searchColumns?.length\" :icon=\"Search\" circle @click=\"isShowSearch = !isShowSearch\" />\n </slot>\n </div>\n </div>\n <!-- 表格主体 -->\n <el-table\n ref=\"tableRef\"\n v-bind=\"$attrs\"\n :data=\"processTableData\"\n :border=\"border\"\n :id=\"uuid\"\n :row-key=\"rowKey\"\n :height=\"tableHeight\"\n v-loading=\"loading\"\n @selection-change=\"selectionChange\"\n @scroll.enter=\"handleScroll\">\n <!-- 默认插槽 -->\n <slot></slot>\n <template v-for=\"item in tableColumns\" :key=\"item\">\n <!-- selection || radio || index || expand || sort -->\n <el-table-column\n v-if=\"item.type && columnTypes.includes(item.type)\"\n v-bind=\"item\"\n :selectable=\"(row: any) => (row.selectable != null && row.selectable != undefined ? row.selectable : true)\"\n :align=\"item.align ?? 'center'\"\n :reserve-selection=\"item.type == 'selection'\">\n <template #default=\"scope\">\n <!-- index -->\n <template v-if=\"item.type == 'index'\">\n <span>{{ pagination && !enableScrollPagination ? (pageable.pageNum - 1) * pageable.pageSize + scope.$index + 1 : scope.$index + 1 }}</span>\n </template>\n <!-- expand -->\n <template v-else-if=\"item.type == 'expand'\">\n <component :is=\"item.render\" v-bind=\"scope\" v-if=\"item.render\" />\n <slot v-else :name=\"item.type\" v-bind=\"scope\"></slot>\n </template>\n <!-- radio -->\n <el-radio v-else-if=\"item.type == 'radio'\" v-model=\"radio\" :label=\"scope.row[rowKey]\">\n <i></i>\n </el-radio>\n <!-- sort -->\n <el-tag v-else-if=\"item.type == 'sort'\" class=\"move\">\n <el-icon><DCaret /></el-icon>\n </el-tag>\n <!-- operationBtns -->\n <OperationBtns v-else-if=\"item.type == 'operationBtns'\" v-bind=\"item.props\" :row=\"scope.row\" :index=\"scope.$index\" @btn-click=\"handleOperateBtnsClick\" />\n </template>\n </el-table-column>\n <!-- other -->\n <TableColumn\n v-if=\"!item.type && item.prop && item.isShow && (!unref(isView) || (unref(isView) && item.isShowInView))\"\n :column=\"item\"\n :is-view=\"isView\">\n <template v-for=\"slot in Object.keys($slots)\" #[slot]=\"scope\">\n <slot :name=\"slot\" v-bind=\"scope\"></slot>\n </template>\n </TableColumn>\n </template>\n <!-- 插入表格最后一行之后的插槽 -->\n <template #append>\n <slot name=\"append\"></slot>\n <!-- 滚动翻页加载状态 -->\n <div\n v-if=\"props.enableScrollPagination && (isScrollLoading || !hasMoreData)\"\n style=\"display: flex; align-items: center; justify-content: center; padding: 20px 0; color: #909399; font-size: 14px\">\n <div v-if=\"isScrollLoading\" style=\"display: flex; align-items: center; gap: 8px\">\n <el-icon class=\"is-loading\"><Loading /></el-icon>\n <span>正在加载更多数据...</span>\n </div>\n <div v-else-if=\"!hasMoreData\" style=\"color: #909399\">\n <span>没有更多数据了</span>\n </div>\n </div>\n </template>\n <!-- 无数据 -->\n <template #empty>\n <div class=\"table-empty\">\n <slot name=\"empty\">\n <img src=\"./assets/notData.png\" alt=\"notData\" />\n <div>暂无数据</div>\n </slot>\n </div>\n </template>\n </el-table>\n <!-- 分页组件 -->\n <slot name=\"pagination\">\n <Pagination\n v-if=\"pagination && !enableScrollPagination\"\n :pageable=\"pageable\"\n :handle-size-change=\"handleSizeChange\"\n :handle-current-change=\"handleCurrentChange\"\n :page-size-options=\"pageSizeOptions\" />\n </slot>\n </div>\n <!-- 列设置 -->\n <ColSetting v-if=\"toolButton\" ref=\"colRef\" :col-setting=\"colSetting\" @update-columns=\"updateTableColumns\">\n <!-- 列设置头部插槽 -->\n <template #colSettingHeader>\n <slot name=\"colSettingHeader\"></slot>\n </template>\n </ColSetting>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"ZnTable\">\n import { computed, onMounted, provide, reactive, ref, toRaw, unref, watch, nextTick, getCurrentInstance, onUnmounted } from 'vue'\n\n import ColSetting from './components/ColSetting.vue'\n import Pagination from './components/Pagination.vue'\n import TableColumn from './components/TableColumn.vue'\n import SearchForm from './components/SearchForm/index.vue'\n import OperationBtns from './components/OperationBtns/index.vue'\n\n import { BreakPoint } from './components/Grid/interface'\n import { ColumnProps, TypeProps, OperationBtnProps } from './interface'\n import { useSelection } from './hooks/useSelection'\n import { useTable } from './hooks/useTable'\n import { generateUUID, handleProp } from './utils'\n import { Operation, Refresh, Search, DCaret, Loading } from '@element-plus/icons-vue'\n import { ElTable } from 'element-plus'\n // import Sortable from 'sortablejs'\n import { useResizeObserver, useLocalStorage } from '@vueuse/core'\n defineOptions({\n name: 'ZnTable'\n })\n\n export interface ZnTableProps {\n columns: ColumnProps[] // 列配置项 ==> 必传\n data?: any[] // 静态 table data 数据,若存在则不会使用 requestApi 返回的 data ==> 非必传\n requestApi?: (params: any) => Promise<any> // 请求表格数据的 api ==> 非必传\n requestAuto?: boolean // 是否自动执行请求 api ==> 非必传(默认为true)\n requestError?: (params: any) => void // 表格 api 请求错误监听 ==> 非必传\n dataCallback?: (data: any) => any // 返回数据的回调函数,可以对数据进行处理 ==> 非必传\n title?: string // 表格标题 ==> 非必传\n pagination?: boolean // 是否需要分页组件 ==> 非必传(默认为true)\n pageSizeOptions?: number[] // 分页每页条数选项 ==> 非必传(默认为[10, 25, 50, 100])\n pageSize?: number // 默认每页显示条数 ==> 非必传(默认为15)\n initParam?: any // 初始化请求参数 ==> 非必传(默认为{})\n border?: boolean // 是否带有纵向边框 ==> 非必传(默认为true)\n toolButton?: ('refresh' | 'setting' | 'search')[] | boolean // 是否显示表格功能按钮 ==> 非必传(默认为true)\n rowKey?: string // 行数据的 Key,用来优化 Table 的渲染,当表格数据多选时,所指定的 id ==> 非必传(默认为 id)\n searchCol?: number | Record<BreakPoint, number> // 表格搜索项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }\n height?: string | number // 表格高度,如果传了,则直接使用这个高度 未传则自动计算\n heightOffset?: number // 如果没传height,自动计算时,去除的高度\n minHeight?: string | number // 表格最小高度 ==> 非必传(默认为200)\n // hiddenTableHeader?: boolean // 隐藏表格头部\n onlyTable?: boolean // 只展示el-table部分\n isView?: boolean // 是否查看,默认为否\n searchFormShow?: boolean // 是否显示筛选行,默认为true\n enableScrollPagination?: boolean // 是否启用滚动翻页(无限滚动)==> 非必传(默认为false)\n scrollPaginationThreshold?: number // 滚动翻页触发阈值(距离底部多少像素时触发)==> 非必传(默认为100)\n }\n\n // 接受父组件参数,配置默认值\n const props = defineProps({\n columns: { type: Array, required: true, default: () => [] },\n data: { type: Array, required: false },\n requestApi: { type: Function, required: false },\n requestAuto: { type: Boolean, required: false, default: true },\n requestError: { type: Function, required: false },\n dataCallback: { type: Function, required: false },\n title: { type: String, required: false },\n pagination: { type: Boolean, required: false, default: true },\n pageSizeOptions: { type: Array, required: false, default: () => [10, 25, 50, 100] },\n pageSize: { type: Number, required: false, default: 15 },\n initParam: { required: false, default: {} },\n border: { type: Boolean, required: false, default: true },\n toolButton: { type: [Array, Boolean], required: false, default: true },\n rowKey: { type: String, required: false, default: 'id' },\n searchCol: { type: [Number, Object], required: false, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n height: { type: [String, Number], required: false },\n heightOffset: { type: Number, required: false, default: 0 },\n minHeight: { type: [String, Number], required: false, default: 200 },\n onlyTable: { type: Boolean, required: false, default: false },\n isView: { type: Boolean, required: false, default: false },\n searchFormShow: { type: Boolean, required: false, default: true },\n enableScrollPagination: { type: Boolean, required: false, default: false },\n scrollPaginationThreshold: { type: Number, required: false, default: 100 }\n})\n\n // 在 setup 顶层获取组件实例,确保能正确获取\n const componentInstance = getCurrentInstance()\n\n const znygStore = useLocalStorage('znyg', { dictMap: {} })\n\n const bodyHeight = ref(0)\n useResizeObserver(document.body, (entries) => {\n const entry = entries[0]\n const { height } = entry.contentRect\n bodyHeight.value = height\n })\n // 计算表格高度\n const tableHeight = computed(() => {\n if (props.height) {\n // 如果 height 设置为 'auto',需要特殊处理空数据状态\n if (props.height === 'auto') {\n // 当没有数据时,确保有足够的高度显示空数据提示\n const hasData = processTableData.value && processTableData.value.length > 0\n if (!hasData) {\n // 没有数据时,使用最小高度确保空数据提示能正常显示\n const minHeightValue = typeof props.minHeight === 'number' ? props.minHeight : parseInt(props.minHeight.toString())\n return Math.max(minHeightValue, 200) // 至少200px高度\n }\n }\n return props.height\n }\n const ret = bodyHeight.value - 100 - (isShowSearch.value ? 120 : 40) - (props.pagination ? 150 : 0) - props.heightOffset\n // console.log(bodyHeight.value + '-' + 100 + '-' + (isShowSearch.value ? 120 : 0) + '-' + (props.pagination ? 70 : 0))\n // console.log('bodyHeight:' + bodyHeight.value, 'isShowSearch:' + (isShowSearch.value ? 80 : 0), 'ret:' + ret)\n\n // 确保返回的高度不小于最小高度\n const minHeightValue = typeof props.minHeight === 'number' ? props.minHeight : parseInt(props.minHeight.toString())\n return ret > minHeightValue ? ret : minHeightValue\n })\n\n // table 实例\n const tableRef = ref<InstanceType<typeof ElTable>>()\n\n // 生成组件唯一id\n const uuid = ref('id-' + generateUUID())\n\n /**\n * 特殊列配置管理\n *\n * 如何添加新的特殊列类型:\n * 1. 在 interface/index.ts 中的 TypeProps 类型中添加新的列类型\n * 2. 根据列的显示位置,将新类型添加到 FRONT_COLUMNS 或 BACK_COLUMNS 数组中\n * 3. 如果需要从列设置中排除特定的 prop,添加到 EXCLUDE_FROM_SETTING.props 中\n * 4. 在模板中添加对应的渲染逻辑\n *\n * 就这样!不需要在其他地方修改代码了。\n */\n const SPECIAL_COLUMN_CONFIG = {\n // 前置特殊列(显示在表格最前面)\n FRONT_COLUMNS: ['selection', 'radio', 'index', 'expand', 'sort'] as TypeProps[],\n // 后置特殊列(显示在表格最后面)\n BACK_COLUMNS: ['operationBtns'] as TypeProps[],\n // 需要从列设置中排除的列(除了特殊列类型,还可以包括特定的 prop)\n EXCLUDE_FROM_SETTING: {\n props: ['operation'], // 按 prop 排除\n types: [] as TypeProps[], // 按 type 排除(会自动包含所有特殊列类型)\n fixed: true // 排除固定列\n }\n }\n\n // 所有特殊列类型(合并前置和后置)\n const columnTypes: TypeProps[] = [...SPECIAL_COLUMN_CONFIG.FRONT_COLUMNS, ...SPECIAL_COLUMN_CONFIG.BACK_COLUMNS]\n\n // 判断是否为前置特殊列\n const isFrontSpecialColumn = (type?: TypeProps) => {\n return type && SPECIAL_COLUMN_CONFIG.FRONT_COLUMNS.includes(type)\n }\n\n // 判断是否为后置特殊列\n const isBackSpecialColumn = (type?: TypeProps) => {\n return type && SPECIAL_COLUMN_CONFIG.BACK_COLUMNS.includes(type)\n }\n\n // 判断是否应该从列设置中排除\n const shouldExcludeFromSetting = (column: ColumnProps) => {\n const { type, prop, fixed } = column\n\n // 排除所有特殊列类型\n if (type && columnTypes.includes(type)) return true\n\n // 排除指定的 prop\n if (prop && SPECIAL_COLUMN_CONFIG.EXCLUDE_FROM_SETTING.props.includes(prop)) return true\n\n // 排除固定列\n if (SPECIAL_COLUMN_CONFIG.EXCLUDE_FROM_SETTING.fixed && fixed) return true\n\n return false\n }\n\n // 是否显示搜索模块\n const isShowSearch = ref(props.searchFormShow)\n\n // 控制 ToolButton 显示\n const showToolButton = (key: 'refresh' | 'setting' | 'search') => {\n return Array.isArray(props.toolButton) ? props.toolButton.includes(key) : props.toolButton\n }\n\n // 单选值\n const radio = ref('')\n\n // 表格多选 Hooks\n const { selectionChange, selectedList, selectedListIds, isSelected } = useSelection(props.rowKey)\n // 滚动到顶部\n const scrollToTop = () => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n scrollWrap.scrollTop = 0\n }\n }\n }\n // 重置滚动翻页状态\n const resetScrollPagination = () => {\n hasMoreData.value = true\n isScrollLoading.value = false\n scrollPaginationDisabled.value = false\n }\n // 表格操作 Hooks\n const {\n tableData,\n pageable,\n searchParam,\n searchInitParam,\n getTableList: originalGetTableList,\n search,\n reset,\n handleSizeChange,\n handleCurrentChange,\n loading\n } = useTable(\n props.requestApi,\n props.initParam,\n props.pagination || props.enableScrollPagination,\n props.dataCallback,\n props.requestError,\n props.pageSize,\n scrollToTop,\n resetScrollPagination,\n props.enableScrollPagination\n )\n\n // 包装 getTableList,确保重置滚动翻页状态\n const getTableList = async () => {\n // 重置滚动翻页状态\n if (props.enableScrollPagination) {\n resetScrollPagination()\n }\n await originalGetTableList()\n }\n\n // 滚动翻页相关状态\n const isScrollLoading = ref(false) // 滚动翻页加载状态\n const hasMoreData = ref(true) // 是否还有更多数据\n const scrollPaginationDisabled = ref(false) // 是否禁用滚动翻页\n\n // 滚动翻页处理函数\n const handleScrollPagination = async () => {\n // 如果正在加载、没有更多数据、或已禁用滚动翻页,则直接返回\n if (isScrollLoading.value || !hasMoreData.value || scrollPaginationDisabled.value || !props.enableScrollPagination) {\n return\n }\n\n // 如果总数为0,说明还没有初始数据,不应该触发滚动翻页\n if (pageable.value.total === 0) {\n return\n }\n\n // 检查是否还有下一页数据\n const totalPages = Math.ceil(pageable.value.total / pageable.value.pageSize)\n if (pageable.value.pageNum >= totalPages) {\n hasMoreData.value = false\n return\n }\n\n try {\n isScrollLoading.value = true\n scrollPaginationDisabled.value = true // 防止重复触发\n\n // 获取下一页数据\n const nextPage = pageable.value.pageNum + 1\n const nextPageParams = {\n ...searchInitParam.value,\n ...searchParam.value,\n currPage: nextPage,\n pageSize: pageable.value.pageSize,\n params: {\n ...searchInitParam.value,\n ...searchParam.value\n }\n }\n if (props.requestApi) {\n const { result } = await props.requestApi(nextPageParams)\n const processedResult = props.dataCallback ? props.dataCallback(result) : result\n if (processedResult && processedResult.list && Array.isArray(processedResult.list) && processedResult.list.length > 0) {\n // 确保 tableData.value 是数组\n if (!Array.isArray(tableData.value)) {\n tableData.value = []\n }\n // 将新数据追加到现有数据中\n tableData.value.push(...processedResult.list)\n\n // 更新分页信息\n const { currPage, limit, total } = processedResult\n pageable.value.pageNum = currPage\n pageable.value.pageSize = limit\n pageable.value.total = total\n\n // 检查是否还有更多数据\n const totalPages = Math.ceil(total / limit)\n hasMoreData.value = currPage < totalPages\n } else {\n hasMoreData.value = false\n console.log('❌ 滚动翻页没有更多数据')\n }\n }\n } catch (error) {\n props.requestError && props.requestError(error)\n } finally {\n isScrollLoading.value = false\n // 延迟重新启用滚动翻页,防止频繁触发\n setTimeout(() => {\n scrollPaginationDisabled.value = false\n }, 1000)\n }\n }\n\n // 滚动事件处理函数\n const handleScroll = (event: any) => {\n if (!props.enableScrollPagination || !props.requestApi) return\n\n // 如果正在加载或没有更多数据,直接返回\n if (isScrollLoading.value || !hasMoreData.value) return\n\n // 直接从表格元素获取滚动容器\n const tableEl = tableRef.value?.$el\n if (!tableEl) return\n\n // Element Plus 使用自定义滚动条,实际的滚动容器是 .el-scrollbar__wrap\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (!scrollWrap) return\n\n // 从滚动容器获取滚动信息\n const scrollTop = scrollWrap.scrollTop\n const scrollHeight = scrollWrap.scrollHeight\n const clientHeight = scrollWrap.clientHeight\n const threshold = props.scrollPaginationThreshold\n\n // 计算距离底部的距离\n const distanceToBottom = scrollHeight - scrollTop - clientHeight\n if (distanceToBottom <= threshold) {\n handleScrollPagination()\n }\n }\n\n // 清空选中数据列表\n const clearSelection = () => {\n if (!tableRef.value) return\n tableRef.value!.clearSelection()\n }\n // 初始化表格数据 && 拖拽排序\n onMounted(() => {\n // dragSort()\n props.requestAuto && getTableList()\n props.data && (pageable.value.total = props.data.length)\n\n // 如果启用滚动翻页,设置滚动监听\n if (props.enableScrollPagination) {\n // 延迟设置滚动监听,确保表格完全渲染\n setTimeout(() => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n // 移除可能存在的旧监听器\n scrollWrap.removeEventListener('scroll', handleScroll)\n // 添加新的滚动监听器\n scrollWrap.addEventListener('scroll', handleScroll, { passive: true })\n }\n }\n }, 500)\n }\n })\n\n // 组件卸载时清理事件监听\n onUnmounted(() => {\n if (props.enableScrollPagination) {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n scrollWrap.removeEventListener('scroll', handleScroll)\n }\n }\n }\n })\n\n // 处理表格数据\n const processTableData = computed(() => {\n // 确保 tableData.value 是数组\n if (!Array.isArray(tableData.value)) {\n tableData.value = []\n }\n\n // 如果使用静态数据\n if (props.data) {\n // 确保 props.data 是数组\n if (!Array.isArray(props.data)) {\n console.warn('props.data 不是数组:', props.data)\n return []\n }\n\n if (!props.pagination) {\n return props.data\n }\n\n // 分页处理\n const rawData = toRaw(props.data)\n const slicedData = rawData.slice((pageable.value.pageNum - 1) * pageable.value.pageSize, pageable.value.pageSize * pageable.value.pageNum)\n return reactive(slicedData)\n }\n return tableData.value\n })\n\n // 监听页面 initParam 改化,重新获取表格数据\n watch(\n () => props.initParam,\n () => {\n getTableList()\n },\n { deep: true }\n )\n\n // 监听表格数据变化,检查是否需要重新启用滚动翻页\n watch(\n () => tableData.value,\n () => {\n if (props.enableScrollPagination && hasMoreData.value) {\n // 数据更新后,延迟检查滚动状态\n nextTick(() => {\n setTimeout(() => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n // 手动触发一次滚动检查\n handleScroll({})\n }\n }\n }, 100)\n })\n }\n },\n { deep: true }\n )\n\n // 接收 columns 并设置为响应式\n let tableColumns = reactive<ColumnProps[]>(props.columns)\n\n // 扁平化 columns\n const flatColumns = computed(() => flatColumnsFunc(tableColumns))\n\n // 定义 enumMap 存储 enum 值(避免异步请求无法格式化单元格内容 || 无法填充搜索下拉选择)\n const enumMap = ref(new Map<string, { [key: string]: any }[]>())\n const setEnumMap = async ({ prop, enum: enumValue, dictCode }: ColumnProps) => {\n if (dictCode) {\n // let znygStore = globalThis.localStorage.getItem('znyg')\n // if (znygStore) znygStore = JSON.parse(znygStore)\n if (znygStore && znygStore.value?.dictMap) {\n enumMap.value.set(prop!, znygStore.value.dictMap[dictCode?.toString()] ?? [])\n return\n }\n }\n if (!enumValue) return\n\n // 如果当前 enumMap 存在相同的值 return\n if (enumMap.value.has(prop!) && (typeof enumValue === 'function' || enumMap.value.get(prop!) === enumValue)) return\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') return enumMap.value.set(prop!, unref(enumValue!))\n\n // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储\n enumMap.value.set(prop!, [])\n\n // 当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n // const { data } = await enumValue()\n // 如果当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n let data = await enumValue()\n // 适配 enum 接口返回 data 以及自定义函数返回数组\n data = data?.result || data\n enumMap.value.set(prop!, data)\n }\n // 注入 enumMap\n provide('enumMap', enumMap)\n\n // 扁平化 columns 的方法\n const flatColumnsFunc = (columns: ColumnProps[], flatArr: ColumnProps[] = []) => {\n columns.forEach(async (col) => {\n if (col._children?.length) flatArr.push(...flatColumnsFunc(col._children))\n flatArr.push(col)\n\n // column 添加默认 isShow && isFilterEnum 属性值\n col.isShow = col.isShow ?? true\n col.isShowInView = col.isShowInView ?? true\n col.isFilterEnum = col.isFilterEnum ?? true\n\n // 设置 enumMap\n await setEnumMap(col)\n })\n return flatArr.filter((item) => !item._children?.length)\n }\n\n // 过滤需要搜索的配置项 && 排序\n const searchColumns = computed(() => {\n return flatColumns.value?.filter((item) => item.search?.el || item.search?.render).sort((a, b) => a.search!.order! - b.search!.order!)\n })\n\n // 设置 搜索表单默认排序 && 搜索表单项的默认值\n searchColumns.value?.forEach((column, index) => {\n column.search!.order = column.search?.order ?? index + 2\n const key = column.search?.key ?? handleProp(column.prop!)\n const defaultValue = column.search?.defaultValue\n if (defaultValue !== undefined && defaultValue !== null) {\n searchInitParam.value[key] = defaultValue\n searchParam.value[key] = defaultValue\n }\n })\n\n // 列设置\n const colRef = ref()\n const colSetting = ref<ColumnProps[]>([])\n // 添加更新标志,避免循环更新\n const isUpdatingColumns = ref(false)\n\n // const colSetting = computed(() => {\n // return tableColumns.filter((item) => !shouldExcludeFromSetting(item))\n // })\n\n // 初始化列设置数据\n const initColSetting = () => {\n colSetting.value = tableColumns.filter((item) => !shouldExcludeFromSetting(item))\n }\n\n // 初始化时设置列配置\n initColSetting()\n\n // 监听 tableColumns 变化,同步更新 colSetting\n watch(\n () => tableColumns,\n () => {\n // 如果正在更新中,跳过同步\n if (isUpdatingColumns.value) {\n return\n }\n\n console.log('检测到 tableColumns 变化,同步更新 colSetting')\n initColSetting()\n },\n { deep: true }\n )\n\n // 手动更新表格列顺序的函数\n const updateTableColumns = (newColSetting: ColumnProps[]) => {\n // 如果正在更新中,避免循环调用\n if (isUpdatingColumns.value) {\n return\n }\n\n // console.log('updateTableColumns调用:', {\n // hasNewColSetting: !!newColSetting,\n // newColSettingLength: Array.isArray(newColSetting) ? newColSetting.length : 'not array',\n // currentTableColumnsLength: tableColumns.length\n // })\n\n // console.log('组件实例状态:', {\n // hasInstance: !!componentInstance,\n // isUnmounted: componentInstance?.isUnmounted\n // })\n\n if (!componentInstance || componentInstance.isUnmounted) {\n console.warn('组件已销毁,跳过列更新')\n return\n }\n\n try {\n // 设置更新标志\n isUpdatingColumns.value = true\n\n // 安全检查\n if (!newColSetting || !Array.isArray(newColSetting) || newColSetting.length === 0) {\n console.warn('updateTableColumns: 无效的列设置数据', {\n hasNewColSetting: !!newColSetting,\n isArray: Array.isArray(newColSetting),\n length: newColSetting?.length\n })\n return\n }\n\n // console.log('开始处理列设置数据')\n\n // 深拷贝输入数据,避免响应式问题\n let clonedColSetting: ColumnProps[]\n try {\n clonedColSetting = JSON.parse(JSON.stringify(newColSetting))\n // console.log('深拷贝成功')\n } catch (error) {\n console.warn('深拷贝列设置数据失败,使用浅拷贝')\n clonedColSetting = [...newColSetting]\n }\n\n // 创建一个映射,用于快速查找列配置\n const colMap = new Map()\n const currentColumns = [...tableColumns] // 创建当前列的副本\n\n currentColumns.forEach((col) => {\n if (col && col.prop) {\n colMap.set(col.prop, col)\n }\n })\n\n // console.log('创建列映射完成:', {\n // colMapSize: colMap.size,\n // currentColumnsLength: currentColumns.length\n // })\n\n // 根据新的列设置顺序重新排列列\n const reorderedColumns: ColumnProps[] = []\n const processedProps = new Set()\n\n // 首先添加前置特殊列(selection, radio, index 等)\n currentColumns.forEach((col) => {\n if (col && (isFrontSpecialColumn(col.type) || col.fixed === 'left')) {\n // console.log('添加前置特殊列:', { type: col.type, prop: col.prop, label: col.label })\n reorderedColumns.push(col)\n if (col.prop) {\n processedProps.add(col.prop)\n }\n }\n })\n\n // console.log('前置特殊列添加完成,当前列数:', reorderedColumns.length)\n\n // 然后添加按新顺序排列的普通列\n clonedColSetting.forEach((colSetting) => {\n if (colSetting && colSetting.prop && colMap.has(colSetting.prop) && !processedProps.has(colSetting.prop)) {\n const originalCol = colMap.get(colSetting.prop)\n if (originalCol) {\n // console.log('添加普通列:', { prop: colSetting.prop, label: colSetting.label, isShow: colSetting.isShow })\n try {\n // 创建列的副本并更新属性\n const updatedCol = { ...originalCol }\n updatedCol.isShow = colSetting.isShow\n updatedCol.sortable = colSetting.sortable\n reorderedColumns.push(updatedCol)\n processedProps.add(colSetting.prop)\n } catch (error) {\n console.warn('更新列配置时出错:', error)\n // 如果更新失败,使用原始列\n reorderedColumns.push(originalCol)\n processedProps.add(colSetting.prop)\n }\n }\n }\n })\n\n // console.log('普通列添加完成,当前列数:', reorderedColumns.length)\n\n // 最后添加后置特殊列(如操作列、operationBtns、右侧固定列等)\n currentColumns.forEach((col) => {\n if (\n col &&\n (!col.prop || !processedProps.has(col.prop)) &&\n (isBackSpecialColumn(col.type) || (!columnTypes.includes(col.type!) && col.fixed !== 'left'))\n ) {\n // console.log('添加后置特殊列:', { type: col.type, prop: col.prop, label: col.label })\n reorderedColumns.push(col)\n }\n })\n\n // console.log('列重排完成:', {\n // reorderedColumnsLength: reorderedColumns.length,\n // processedPropsSize: processedProps.size\n // })\n\n // 使用setTimeout而不是nextTick,确保在下一个事件循环中更新\n setTimeout(() => {\n // console.log('开始更新表格列,检查组件状态:', {\n // hasInstance: !!componentInstance,\n // isUnmounted: componentInstance?.isUnmounted\n // })\n\n if (!componentInstance || componentInstance.isUnmounted) {\n console.warn('延迟更新时组件已销毁')\n return\n }\n\n try {\n // console.log('执行表格列更新')\n // 简单直接的数组替换方法\n tableColumns.length = 0\n reorderedColumns.forEach((col) => {\n if (col) {\n tableColumns.push(col as any)\n }\n })\n\n // 同步更新 colSetting,但不触发新的更新\n colSetting.value = clonedColSetting\n\n // console.log('表格列更新完成:', {\n // newLength: tableColumns.length\n // })\n } catch (error) {\n console.warn('更新表格列时出错:', error)\n } finally {\n // 重置更新标志\n isUpdatingColumns.value = false\n }\n }, 50) // 50ms延迟\n } catch (error) {\n console.warn('updateTableColumns执行时出错:', error)\n // 确保在出错时也重置标志\n isUpdatingColumns.value = false\n }\n }\n\n const openColSetting = () => {\n // 直接打开列设置,不重新初始化以避免递归更新\n colRef.value.openColSetting()\n }\n\n const closeColSetting = () => {\n // 关闭列设置\n colRef.value.closeColSetting()\n }\n\n // 定义 emit 事件\n const emit = defineEmits([\"search\", \"reset\", \"dragSort\", \"handleOperateBtnsClick\"])\n\n const _search = () => {\n search()\n emit('search')\n }\n\n const _reset = () => {\n reset()\n emit('reset')\n }\n\n // 处理操作按钮点击事件\n const handleOperateBtnsClick = (btnName: string, row: any, btn: OperationBtnProps, index: number) => {\n emit('handleOperateBtnsClick', btnName, row, btn, index)\n }\n\n // 拖拽排序 // ! 列表数据需要有id\n const dragSort = () => {\n // const tbody = document.querySelector(`#${uuid.value} tbody`) as HTMLElement\n // Sortable.create(tbody, {\n // handle: '.move',\n // animation: 300,\n // onEnd({ newIndex, oldIndex }) {\n // const [removedItem] = processTableData.value.splice(oldIndex!, 1)\n // processTableData.value.splice(newIndex!, 0, removedItem)\n // console.log('newIndex', newIndex, 'oldIndex', oldIndex)\n // emit('dragSort', { newIndex, oldIndex })\n // }\n // })\n }\n\n const refreshTable = () => {\n getTableList()\n }\n\n const setSearchFormShow = (show: boolean) => {\n isShowSearch.value = show\n }\n\n // 获取当前列配置\n const getColumns = () => {\n return tableColumns\n }\n\n // 获取当前列设置配置\n const getColSetting = () => {\n return colSetting.value\n }\n\n // 暴露给父组件的参数和方法 (外部需要什么,都可以从这里暴露出去)\n defineExpose({\n element: tableRef,\n tableData: processTableData,\n radio,\n pageable,\n searchParam,\n searchInitParam,\n getTableList,\n search,\n reset,\n handleSizeChange,\n handleCurrentChange,\n clearSelection,\n enumMap,\n isSelected,\n selectedList,\n selectedListIds,\n refreshTable,\n setSearchFormShow,\n getColumns,\n getColSetting,\n openColSetting,\n closeColSetting\n })\n</script>\n"],"names":["props","__props","componentInstance","getCurrentInstance","znygStore","useLocalStorage","dictMap","bodyHeight","ref","useResizeObserver","document","body","entries","entry","height","contentRect","value","tableHeight","computed","processTableData","length","minHeightValue","minHeight","parseInt","toString","Math","max","ret","isShowSearch","pagination","heightOffset","tableRef","uuid","generateUUID","SPECIAL_COLUMN_CONFIG","FRONT_COLUMNS","BACK_COLUMNS","EXCLUDE_FROM_SETTING","types","fixed","columnTypes","isFrontSpecialColumn","type","includes","isBackSpecialColumn","shouldExcludeFromSetting","column","prop","searchFormShow","showToolButton","key","Array","isArray","toolButton","radio","selectionChange","selectedList","selectedListIds","isSelected","useSelection","rowKey","scrollToTop","__name","tableEl","$el","scrollWrap","querySelector","scrollTop","resetScrollPagination","hasMoreData","isScrollLoading","scrollPaginationDisabled","tableData","pageable","searchParam","searchInitParam","getTableList","originalGetTableList","search","reset","handleSizeChange","handleCurrentChange","loading","useTable","requestApi","initParam","enableScrollPagination","dataCallback","requestError","pageSize","async","handleScrollPagination","total","totalPages","ceil","pageNum","nextPage","nextPageParams","currPage","params","result","processedResult","list","push","limit","console","log","error","setTimeout","handleScroll","event","scrollHeight","clientHeight","scrollPaginationThreshold","clearSelection","onMounted","requestAuto","data","removeEventListener","addEventListener","passive","onUnmounted","warn","slicedData","toRaw","slice","reactive","watch","deep","nextTick","tableColumns","columns","flatColumns","flatColumnsFunc","enumMap","Map","setEnumMap","enum","enumValue","dictCode","set","has","get","unref","provide","flatArr","forEach","col","_children","isShow","isShowInView","isFilterEnum","filter","item","searchColumns","el","render","sort","a","b","order","index","handleProp","defaultValue","colRef","colSetting","isUpdatingColumns","initColSetting","updateTableColumns","newColSetting","isUnmounted","hasNewColSetting","clonedColSetting","JSON","parse","stringify","colMap","currentColumns","reorderedColumns","processedProps","Set","add","originalCol","updatedCol","sortable","openColSetting","closeColSetting","emit","__emit","_search","_reset","handleOperateBtnsClick","btnName","row","btn","refreshTable","__expose","element","setSearchFormShow","show","getColumns","getColSetting"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znTable/src/index.vue"],"sourcesContent":["<!-- 📚📚📚 Pro-Table 文档: https://juejin.cn/post/7166068828202336263 -->\n\n<template>\n <div class=\"table-box\">\n <!-- 查询表单 -->\n <SearchForm v-show=\"isShowSearch\" :search=\"_search\" :reset=\"_reset\" :columns=\"searchColumns\" :search-param=\"searchParam\" :search-col=\"searchCol\" />\n\n <!-- 表格主体 -->\n <div :class=\"[onlyTable ? 'only-table' : 'card table-main']\">\n <!-- 表格头部 操作按钮 -->\n <div class=\"table-header\">\n <div class=\"header-button-lf\">\n <slot name=\"tableHeader\" :selected-list=\"selectedList\" :selected-list-ids=\"selectedListIds\" :is-selected=\"isSelected\"></slot>\n </div>\n <div v-if=\"toolButton\" class=\"header-button-ri\">\n <slot name=\"toolButton\">\n <el-button v-if=\"showToolButton('refresh')\" :icon=\"Refresh\" circle @click=\"getTableList\" />\n <el-button v-if=\"showToolButton('setting') && columns.length\" :icon=\"Operation\" circle @click=\"openColSetting\" />\n <el-button v-if=\"showToolButton('search') && searchColumns?.length\" :icon=\"Search\" circle @click=\"isShowSearch = !isShowSearch\" />\n </slot>\n </div>\n </div>\n <!-- 表格主体 -->\n <el-table\n ref=\"tableRef\"\n v-bind=\"$attrs\"\n :data=\"processTableData\"\n :border=\"border\"\n :id=\"uuid\"\n :row-key=\"rowKey\"\n :height=\"tableHeight\"\n v-loading=\"loading\"\n @selection-change=\"selectionChange\"\n @scroll.enter=\"handleScroll\">\n <!-- 默认插槽 -->\n <slot></slot>\n <template v-for=\"item in tableColumns\" :key=\"item\">\n <!-- selection || radio || index || expand || sort -->\n <el-table-column\n v-if=\"item.type && columnTypes.includes(item.type)\"\n v-bind=\"item\"\n :selectable=\"(row: any) => (row.selectable != null && row.selectable != undefined ? row.selectable : true)\"\n :align=\"item.align ?? 'center'\"\n :reserve-selection=\"item.type == 'selection'\">\n <template #default=\"scope\">\n <!-- index -->\n <template v-if=\"item.type == 'index'\">\n <span>{{ pagination && !enableScrollPagination ? (pageable.pageNum - 1) * pageable.pageSize + scope.$index + 1 : scope.$index + 1 }}</span>\n </template>\n <!-- expand -->\n <template v-else-if=\"item.type == 'expand'\">\n <component :is=\"item.render\" v-bind=\"scope\" v-if=\"item.render\" />\n <slot v-else :name=\"item.type\" v-bind=\"scope\"></slot>\n </template>\n <!-- radio -->\n <el-radio v-else-if=\"item.type == 'radio'\" v-model=\"radio\" :label=\"scope.row[rowKey]\">\n <i></i>\n </el-radio>\n <!-- sort -->\n <el-tag v-else-if=\"item.type == 'sort'\" class=\"move\">\n <el-icon><DCaret /></el-icon>\n </el-tag>\n <!-- operationBtns -->\n <OperationBtns v-else-if=\"item.type == 'operationBtns'\" v-bind=\"item.props\" :row=\"scope.row\" :index=\"scope.$index\" @btn-click=\"handleOperateBtnsClick\" />\n </template>\n </el-table-column>\n <!-- other -->\n <TableColumn\n v-if=\"!item.type && item.prop && item.isShow && (!unref(isView) || (unref(isView) && item.isShowInView))\"\n :column=\"item\"\n :is-view=\"isView\">\n <template v-for=\"slot in Object.keys($slots)\" #[slot]=\"scope\">\n <slot :name=\"slot\" v-bind=\"scope\"></slot>\n </template>\n </TableColumn>\n </template>\n <!-- 插入表格最后一行之后的插槽 -->\n <template #append>\n <slot name=\"append\"></slot>\n <!-- 滚动翻页加载状态 -->\n <div\n v-if=\"props.enableScrollPagination && (isScrollLoading || !hasMoreData)\"\n style=\"display: flex; align-items: center; justify-content: center; padding: 20px 0; color: #909399; font-size: 14px\">\n <div v-if=\"isScrollLoading\" style=\"display: flex; align-items: center; gap: 8px\">\n <el-icon class=\"is-loading\"><Loading /></el-icon>\n <span>正在加载更多数据...</span>\n </div>\n <div v-else-if=\"!hasMoreData\" style=\"color: #909399\">\n <span>没有更多数据了</span>\n </div>\n </div>\n </template>\n <!-- 无数据 -->\n <template #empty>\n <div class=\"table-empty\">\n <slot name=\"empty\">\n <img src=\"./assets/notData.png\" alt=\"notData\" />\n <div>暂无数据</div>\n </slot>\n </div>\n </template>\n </el-table>\n <!-- 分页组件 -->\n <slot name=\"pagination\">\n <Pagination\n v-if=\"pagination && !enableScrollPagination\"\n :pageable=\"pageable\"\n :handle-size-change=\"handleSizeChange\"\n :handle-current-change=\"handleCurrentChange\"\n :page-size-options=\"pageSizeOptions\" />\n </slot>\n </div>\n <!-- 列设置 -->\n <ColSetting v-if=\"toolButton\" ref=\"colRef\" :col-setting=\"colSetting\" @update-columns=\"updateTableColumns\">\n <!-- 列设置头部插槽 -->\n <template #colSettingHeader>\n <slot name=\"colSettingHeader\"></slot>\n </template>\n </ColSetting>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"ZnTable\">\n import { computed, onMounted, provide, reactive, ref, toRaw, unref, watch, nextTick, getCurrentInstance, onUnmounted } from 'vue'\n\n import ColSetting from './components/ColSetting.vue'\n import Pagination from './components/Pagination.vue'\n import TableColumn from './components/TableColumn.vue'\n import SearchForm from './components/SearchForm/index.vue'\n import OperationBtns from './components/OperationBtns/index.vue'\n\n import { BreakPoint } from './components/Grid/interface'\n import { ColumnProps, TypeProps, OperationBtnProps } from './interface'\n import { useSelection } from './hooks/useSelection'\n import { useTable } from './hooks/useTable'\n import { generateUUID, handleProp } from './utils'\n import { Operation, Refresh, Search, DCaret, Loading } from '@element-plus/icons-vue'\n import { ElTable } from 'element-plus'\n // import Sortable from 'sortablejs'\n import { useResizeObserver, useLocalStorage } from '@vueuse/core'\n defineOptions({\n name: 'ZnTable'\n })\n\n export interface ZnTableProps {\n columns: ColumnProps[] // 列配置项 ==> 必传\n data?: any[] // 静态 table data 数据,若存在则不会使用 requestApi 返回的 data ==> 非必传\n requestApi?: (params: any) => Promise<any> // 请求表格数据的 api ==> 非必传\n requestAuto?: boolean // 是否自动执行请求 api ==> 非必传(默认为true)\n requestError?: (params: any) => void // 表格 api 请求错误监听 ==> 非必传\n dataCallback?: (data: any) => any // 返回数据的回调函数,可以对数据进行处理 ==> 非必传\n title?: string // 表格标题 ==> 非必传\n pagination?: boolean // 是否需要分页组件 ==> 非必传(默认为true)\n pageSizeOptions?: number[] // 分页每页条数选项 ==> 非必传(默认为[10, 25, 50, 100])\n pageSize?: number // 默认每页显示条数 ==> 非必传(默认为15)\n initParam?: any // 初始化请求参数 ==> 非必传(默认为{})\n border?: boolean // 是否带有纵向边框 ==> 非必传(默认为true)\n toolButton?: ('refresh' | 'setting' | 'search')[] | boolean // 是否显示表格功能按钮 ==> 非必传(默认为true)\n rowKey?: string // 行数据的 Key,用来优化 Table 的渲染,当表格数据多选时,所指定的 id ==> 非必传(默认为 id)\n searchCol?: number | Record<BreakPoint, number> // 表格搜索项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }\n height?: string | number // 表格高度,如果传了,则直接使用这个高度 未传则自动计算\n heightOffset?: number // 如果没传height,自动计算时,去除的高度\n minHeight?: string | number // 表格最小高度 ==> 非必传(默认为200)\n // hiddenTableHeader?: boolean // 隐藏表格头部\n onlyTable?: boolean // 只展示el-table部分\n isView?: boolean // 是否查看,默认为否\n searchFormShow?: boolean // 是否显示筛选行,默认为true\n enableScrollPagination?: boolean // 是否启用滚动翻页(无限滚动)==> 非必传(默认为false)\n scrollPaginationThreshold?: number // 滚动翻页触发阈值(距离底部多少像素时触发)==> 非必传(默认为100)\n }\n\n // 接受父组件参数,配置默认值\n const props = defineProps({\n columns: { type: Array, required: true, default: () => [] },\n data: { type: Array, required: false },\n requestApi: { type: Function, required: false },\n requestAuto: { type: Boolean, required: false, default: true },\n requestError: { type: Function, required: false },\n dataCallback: { type: Function, required: false },\n title: { type: String, required: false },\n pagination: { type: Boolean, required: false, default: true },\n pageSizeOptions: { type: Array, required: false, default: () => [10, 25, 50, 100] },\n pageSize: { type: Number, required: false, default: 15 },\n initParam: { required: false, default: {} },\n border: { type: Boolean, required: false, default: true },\n toolButton: { type: [Array, Boolean], required: false, default: true },\n rowKey: { type: String, required: false, default: 'id' },\n searchCol: { type: [Number, Object], required: false, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n height: { type: [String, Number], required: false },\n heightOffset: { type: Number, required: false, default: 0 },\n minHeight: { type: [String, Number], required: false, default: 200 },\n onlyTable: { type: Boolean, required: false, default: false },\n isView: { type: Boolean, required: false, default: false },\n searchFormShow: { type: Boolean, required: false, default: true },\n enableScrollPagination: { type: Boolean, required: false, default: false },\n scrollPaginationThreshold: { type: Number, required: false, default: 100 }\n})\n\n // 在 setup 顶层获取组件实例,确保能正确获取\n const componentInstance = getCurrentInstance()\n\n const znygStore = useLocalStorage('znyg', { dictMap: {} })\n\n const bodyHeight = ref(0)\n useResizeObserver(document.body, (entries) => {\n const entry = entries[0]\n const { height } = entry.contentRect\n bodyHeight.value = height\n })\n // 计算表格高度\n const tableHeight = computed(() => {\n if (props.height) {\n // 如果 height 设置为 'auto',需要特殊处理空数据状态\n if (props.height === 'auto') {\n // 当没有数据时,确保有足够的高度显示空数据提示\n const hasData = processTableData.value && processTableData.value.length > 0\n if (!hasData) {\n // 没有数据时,使用最小高度确保空数据提示能正常显示\n const minHeightValue = typeof props.minHeight === 'number' ? props.minHeight : parseInt(props.minHeight.toString())\n return Math.max(minHeightValue, 200) // 至少200px高度\n }\n }\n return props.height\n }\n const ret = bodyHeight.value - 100 - (isShowSearch.value ? 120 : 40) - (props.pagination ? 150 : 0) - props.heightOffset\n // console.log(bodyHeight.value + '-' + 100 + '-' + (isShowSearch.value ? 120 : 0) + '-' + (props.pagination ? 70 : 0))\n // console.log('bodyHeight:' + bodyHeight.value, 'isShowSearch:' + (isShowSearch.value ? 80 : 0), 'ret:' + ret)\n\n // 确保返回的高度不小于最小高度\n const minHeightValue = typeof props.minHeight === 'number' ? props.minHeight : parseInt(props.minHeight.toString())\n return ret > minHeightValue ? ret : minHeightValue\n })\n\n // table 实例\n const tableRef = ref<InstanceType<typeof ElTable>>()\n\n // 生成组件唯一id\n const uuid = ref('id-' + generateUUID())\n\n /**\n * 特殊列配置管理\n *\n * 如何添加新的特殊列类型:\n * 1. 在 interface/index.ts 中的 TypeProps 类型中添加新的列类型\n * 2. 根据列的显示位置,将新类型添加到 FRONT_COLUMNS 或 BACK_COLUMNS 数组中\n * 3. 如果需要从列设置中排除特定的 prop,添加到 EXCLUDE_FROM_SETTING.props 中\n * 4. 在模板中添加对应的渲染逻辑\n *\n * 就这样!不需要在其他地方修改代码了。\n */\n const SPECIAL_COLUMN_CONFIG = {\n // 前置特殊列(显示在表格最前面)\n FRONT_COLUMNS: ['selection', 'radio', 'index', 'expand', 'sort'] as TypeProps[],\n // 后置特殊列(显示在表格最后面)\n BACK_COLUMNS: ['operationBtns'] as TypeProps[],\n // 需要从列设置中排除的列(除了特殊列类型,还可以包括特定的 prop)\n EXCLUDE_FROM_SETTING: {\n props: ['operation'], // 按 prop 排除\n types: [] as TypeProps[], // 按 type 排除(会自动包含所有特殊列类型)\n fixed: true // 排除固定列\n }\n }\n\n // 所有特殊列类型(合并前置和后置)\n const columnTypes: TypeProps[] = [...SPECIAL_COLUMN_CONFIG.FRONT_COLUMNS, ...SPECIAL_COLUMN_CONFIG.BACK_COLUMNS]\n\n // 判断是否为前置特殊列\n const isFrontSpecialColumn = (type?: TypeProps) => {\n return type && SPECIAL_COLUMN_CONFIG.FRONT_COLUMNS.includes(type)\n }\n\n // 判断是否为后置特殊列\n const isBackSpecialColumn = (type?: TypeProps) => {\n return type && SPECIAL_COLUMN_CONFIG.BACK_COLUMNS.includes(type)\n }\n\n // 判断是否应该从列设置中排除\n // 只排除那些在初始状态就是\"纯筛选列\"的列(isShow === false 且有 search)\n // 这样可以区分\"原本就是筛选列\"和\"用户手动隐藏的列\"\n const shouldExcludeFromSetting = (column: ColumnProps) => {\n const { type, prop, fixed } = column\n \n // 只排除初始状态就是纯筛选列的列(通过 prop 判断)\n // 这样即使用户手动将其他列的 isShow 改为 false,也不会被排除\n if (prop && initialFilterOnlyColumns.has(prop)) return true\n \n // 排除所有特殊列类型\n if (type && columnTypes.includes(type)) return true\n\n // 排除指定的 prop\n if (prop && SPECIAL_COLUMN_CONFIG.EXCLUDE_FROM_SETTING.props.includes(prop)) return true\n\n // 排除固定列\n if (SPECIAL_COLUMN_CONFIG.EXCLUDE_FROM_SETTING.fixed && fixed) return true\n\n return false\n }\n\n // 是否显示搜索模块\n const isShowSearch = ref(props.searchFormShow)\n\n // 控制 ToolButton 显示\n const showToolButton = (key: 'refresh' | 'setting' | 'search') => {\n return Array.isArray(props.toolButton) ? props.toolButton.includes(key) : props.toolButton\n }\n\n // 单选值\n const radio = ref('')\n\n // 表格多选 Hooks\n const { selectionChange, selectedList, selectedListIds, isSelected } = useSelection(props.rowKey)\n // 滚动到顶部\n const scrollToTop = () => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n scrollWrap.scrollTop = 0\n }\n }\n }\n // 重置滚动翻页状态\n const resetScrollPagination = () => {\n hasMoreData.value = true\n isScrollLoading.value = false\n scrollPaginationDisabled.value = false\n }\n // 表格操作 Hooks\n const {\n tableData,\n pageable,\n searchParam,\n searchInitParam,\n getTableList: originalGetTableList,\n search,\n reset,\n handleSizeChange,\n handleCurrentChange,\n loading\n } = useTable(\n props.requestApi,\n props.initParam,\n props.pagination || props.enableScrollPagination,\n props.dataCallback,\n props.requestError,\n props.pageSize,\n scrollToTop,\n resetScrollPagination,\n props.enableScrollPagination\n )\n\n // 包装 getTableList,确保重置滚动翻页状态\n const getTableList = async () => {\n // 重置滚动翻页状态\n if (props.enableScrollPagination) {\n resetScrollPagination()\n }\n await originalGetTableList()\n }\n\n // 滚动翻页相关状态\n const isScrollLoading = ref(false) // 滚动翻页加载状态\n const hasMoreData = ref(true) // 是否还有更多数据\n const scrollPaginationDisabled = ref(false) // 是否禁用滚动翻页\n\n // 滚动翻页处理函数\n const handleScrollPagination = async () => {\n // 如果正在加载、没有更多数据、或已禁用滚动翻页,则直接返回\n if (isScrollLoading.value || !hasMoreData.value || scrollPaginationDisabled.value || !props.enableScrollPagination) {\n return\n }\n\n // 如果总数为0,说明还没有初始数据,不应该触发滚动翻页\n if (pageable.value.total === 0) {\n return\n }\n\n // 检查是否还有下一页数据\n const totalPages = Math.ceil(pageable.value.total / pageable.value.pageSize)\n if (pageable.value.pageNum >= totalPages) {\n hasMoreData.value = false\n return\n }\n\n try {\n isScrollLoading.value = true\n scrollPaginationDisabled.value = true // 防止重复触发\n\n // 获取下一页数据\n const nextPage = pageable.value.pageNum + 1\n const nextPageParams = {\n ...searchInitParam.value,\n ...searchParam.value,\n currPage: nextPage,\n pageSize: pageable.value.pageSize,\n params: {\n ...searchInitParam.value,\n ...searchParam.value\n }\n }\n if (props.requestApi) {\n const { result } = await props.requestApi(nextPageParams)\n const processedResult = props.dataCallback ? props.dataCallback(result) : result\n if (processedResult && processedResult.list && Array.isArray(processedResult.list) && processedResult.list.length > 0) {\n // 确保 tableData.value 是数组\n if (!Array.isArray(tableData.value)) {\n tableData.value = []\n }\n // 将新数据追加到现有数据中\n tableData.value.push(...processedResult.list)\n\n // 更新分页信息\n const { currPage, limit, total } = processedResult\n pageable.value.pageNum = currPage\n pageable.value.pageSize = limit\n pageable.value.total = total\n\n // 检查是否还有更多数据\n const totalPages = Math.ceil(total / limit)\n hasMoreData.value = currPage < totalPages\n } else {\n hasMoreData.value = false\n console.log('❌ 滚动翻页没有更多数据')\n }\n }\n } catch (error) {\n props.requestError && props.requestError(error)\n } finally {\n isScrollLoading.value = false\n // 延迟重新启用滚动翻页,防止频繁触发\n setTimeout(() => {\n scrollPaginationDisabled.value = false\n }, 1000)\n }\n }\n\n // 滚动事件处理函数\n const handleScroll = (event: any) => {\n if (!props.enableScrollPagination || !props.requestApi) return\n\n // 如果正在加载或没有更多数据,直接返回\n if (isScrollLoading.value || !hasMoreData.value) return\n\n // 直接从表格元素获取滚动容器\n const tableEl = tableRef.value?.$el\n if (!tableEl) return\n\n // Element Plus 使用自定义滚动条,实际的滚动容器是 .el-scrollbar__wrap\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (!scrollWrap) return\n\n // 从滚动容器获取滚动信息\n const scrollTop = scrollWrap.scrollTop\n const scrollHeight = scrollWrap.scrollHeight\n const clientHeight = scrollWrap.clientHeight\n const threshold = props.scrollPaginationThreshold\n\n // 计算距离底部的距离\n const distanceToBottom = scrollHeight - scrollTop - clientHeight\n if (distanceToBottom <= threshold) {\n handleScrollPagination()\n }\n }\n\n // 清空选中数据列表\n const clearSelection = () => {\n if (!tableRef.value) return\n tableRef.value!.clearSelection()\n }\n // 初始化表格数据 && 拖拽排序\n onMounted(() => {\n // dragSort()\n props.requestAuto && getTableList()\n props.data && (pageable.value.total = props.data.length)\n\n // 如果启用滚动翻页,设置滚动监听\n if (props.enableScrollPagination) {\n // 延迟设置滚动监听,确保表格完全渲染\n setTimeout(() => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n // 移除可能存在的旧监听器\n scrollWrap.removeEventListener('scroll', handleScroll)\n // 添加新的滚动监听器\n scrollWrap.addEventListener('scroll', handleScroll, { passive: true })\n }\n }\n }, 500)\n }\n })\n\n // 组件卸载时清理事件监听\n onUnmounted(() => {\n if (props.enableScrollPagination) {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n scrollWrap.removeEventListener('scroll', handleScroll)\n }\n }\n }\n })\n\n // 处理表格数据\n const processTableData = computed(() => {\n // 确保 tableData.value 是数组\n if (!Array.isArray(tableData.value)) {\n tableData.value = []\n }\n\n // 如果使用静态数据\n if (props.data) {\n // 确保 props.data 是数组\n if (!Array.isArray(props.data)) {\n console.warn('props.data 不是数组:', props.data)\n return []\n }\n\n if (!props.pagination) {\n return props.data\n }\n\n // 分页处理\n const rawData = toRaw(props.data)\n const slicedData = rawData.slice((pageable.value.pageNum - 1) * pageable.value.pageSize, pageable.value.pageSize * pageable.value.pageNum)\n return reactive(slicedData)\n }\n return tableData.value\n })\n\n // 监听页面 initParam 改化,重新获取表格数据\n watch(\n () => props.initParam,\n () => {\n getTableList()\n },\n { deep: true }\n )\n\n // 监听表格数据变化,检查是否需要重新启用滚动翻页\n watch(\n () => tableData.value,\n () => {\n if (props.enableScrollPagination && hasMoreData.value) {\n // 数据更新后,延迟检查滚动状态\n nextTick(() => {\n setTimeout(() => {\n const tableEl = tableRef.value?.$el\n if (tableEl) {\n const scrollWrap = tableEl.querySelector('.el-scrollbar__wrap')\n if (scrollWrap) {\n // 手动触发一次滚动检查\n handleScroll({})\n }\n }\n }, 100)\n })\n }\n },\n { deep: true }\n )\n\n // 接收 columns 并设置为响应式\n let tableColumns = reactive<ColumnProps[]>(props.columns)\n\n // 记录初始状态为\"纯筛选列\"的列(isShow === false 且有 search)\n // 这些列只用于筛选,不在列表展示,也不应该在列设置中显示\n const initialFilterOnlyColumns = new Set<string>()\n \n // 初始化时记录纯筛选列\n const recordInitialFilterOnlyColumns = (columns: ColumnProps[]) => {\n columns.forEach((col) => {\n // 检查初始状态:isShow 明确为 false(不包括 undefined)且有 search\n if (col.isShow === false && (col.search?.el || col.search?.render) && col.prop) {\n initialFilterOnlyColumns.add(col.prop)\n }\n // 递归处理子列\n if (col._children?.length) {\n recordInitialFilterOnlyColumns(col._children)\n }\n })\n }\n \n // 在初始化时记录纯筛选列(在 flatColumnsFunc 修改 isShow 之前)\n recordInitialFilterOnlyColumns(props.columns)\n\n // 扁平化 columns\n const flatColumns = computed(() => flatColumnsFunc(tableColumns))\n\n // 定义 enumMap 存储 enum 值(避免异步请求无法格式化单元格内容 || 无法填充搜索下拉选择)\n const enumMap = ref(new Map<string, { [key: string]: any }[]>())\n const setEnumMap = async ({ prop, enum: enumValue, dictCode }: ColumnProps) => {\n if (dictCode) {\n // let znygStore = globalThis.localStorage.getItem('znyg')\n // if (znygStore) znygStore = JSON.parse(znygStore)\n if (znygStore && znygStore.value?.dictMap) {\n enumMap.value.set(prop!, znygStore.value.dictMap[dictCode?.toString()] ?? [])\n return\n }\n }\n if (!enumValue) return\n\n // 如果当前 enumMap 存在相同的值 return\n if (enumMap.value.has(prop!) && (typeof enumValue === 'function' || enumMap.value.get(prop!) === enumValue)) return\n\n // 当前 enum 为静态数据,则直接存储到 enumMap\n if (typeof enumValue !== 'function') return enumMap.value.set(prop!, unref(enumValue!))\n\n // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储\n enumMap.value.set(prop!, [])\n\n // 当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n // const { data } = await enumValue()\n // 如果当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap\n let data = await enumValue()\n // 适配 enum 接口返回 data 以及自定义函数返回数组\n data = data?.result || data\n enumMap.value.set(prop!, data)\n }\n // 注入 enumMap\n provide('enumMap', enumMap)\n\n // 扁平化 columns 的方法\n const flatColumnsFunc = (columns: ColumnProps[], flatArr: ColumnProps[] = []) => {\n columns.forEach(async (col) => {\n if (col._children?.length) flatArr.push(...flatColumnsFunc(col._children))\n flatArr.push(col)\n\n // column 添加默认 isShow && isFilterEnum 属性值\n col.isShow = col.isShow ?? true\n col.isShowInView = col.isShowInView ?? true\n col.isFilterEnum = col.isFilterEnum ?? true\n\n // 设置 enumMap\n await setEnumMap(col)\n })\n return flatArr.filter((item) => !item._children?.length)\n }\n\n // 过滤需要搜索的配置项 && 排序\n const searchColumns = computed(() => {\n return flatColumns.value?.filter((item) => item.search?.el || item.search?.render).sort((a, b) => a.search!.order! - b.search!.order!)\n })\n\n // 设置 搜索表单默认排序 && 搜索表单项的默认值\n searchColumns.value?.forEach((column, index) => {\n column.search!.order = column.search?.order ?? index + 2\n const key = column.search?.key ?? handleProp(column.prop!)\n const defaultValue = column.search?.defaultValue\n if (defaultValue !== undefined && defaultValue !== null) {\n searchInitParam.value[key] = defaultValue\n searchParam.value[key] = defaultValue\n }\n })\n\n // 列设置\n const colRef = ref()\n const colSetting = ref<ColumnProps[]>([])\n // 添加更新标志,避免循环更新\n const isUpdatingColumns = ref(false)\n\n // const colSetting = computed(() => {\n // return tableColumns.filter((item) => !shouldExcludeFromSetting(item))\n // })\n\n // 初始化列设置数据\n const initColSetting = () => {\n colSetting.value = tableColumns.filter((item) => !shouldExcludeFromSetting(item))\n }\n\n // 初始化时设置列配置\n initColSetting()\n\n // 监听 tableColumns 变化,同步更新 colSetting\n watch(\n () => tableColumns,\n () => {\n // 如果正在更新中,跳过同步\n if (isUpdatingColumns.value) {\n return\n }\n\n console.log('检测到 tableColumns 变化,同步更新 colSetting')\n initColSetting()\n },\n { deep: true }\n )\n\n // 手动更新表格列顺序的函数\n const updateTableColumns = (newColSetting: ColumnProps[]) => {\n // 如果正在更新中,避免循环调用\n if (isUpdatingColumns.value) {\n return\n }\n\n // console.log('updateTableColumns调用:', {\n // hasNewColSetting: !!newColSetting,\n // newColSettingLength: Array.isArray(newColSetting) ? newColSetting.length : 'not array',\n // currentTableColumnsLength: tableColumns.length\n // })\n\n // console.log('组件实例状态:', {\n // hasInstance: !!componentInstance,\n // isUnmounted: componentInstance?.isUnmounted\n // })\n\n if (!componentInstance || componentInstance.isUnmounted) {\n console.warn('组件已销毁,跳过列更新')\n return\n }\n\n try {\n // 设置更新标志\n isUpdatingColumns.value = true\n\n // 安全检查\n if (!newColSetting || !Array.isArray(newColSetting) || newColSetting.length === 0) {\n console.warn('updateTableColumns: 无效的列设置数据', {\n hasNewColSetting: !!newColSetting,\n isArray: Array.isArray(newColSetting),\n length: newColSetting?.length\n })\n return\n }\n\n // console.log('开始处理列设置数据')\n\n // 深拷贝输入数据,避免响应式问题\n let clonedColSetting: ColumnProps[]\n try {\n clonedColSetting = JSON.parse(JSON.stringify(newColSetting))\n // console.log('深拷贝成功')\n } catch (error) {\n console.warn('深拷贝列设置数据失败,使用浅拷贝')\n clonedColSetting = [...newColSetting]\n }\n\n // 创建一个映射,用于快速查找列配置\n const colMap = new Map()\n const currentColumns = [...tableColumns] // 创建当前列的副本\n\n currentColumns.forEach((col) => {\n if (col && col.prop) {\n colMap.set(col.prop, col)\n }\n })\n\n // console.log('创建列映射完成:', {\n // colMapSize: colMap.size,\n // currentColumnsLength: currentColumns.length\n // })\n\n // 根据新的列设置顺序重新排列列\n const reorderedColumns: ColumnProps[] = []\n const processedProps = new Set()\n\n // 首先添加前置特殊列(selection, radio, index 等)\n currentColumns.forEach((col) => {\n if (col && (isFrontSpecialColumn(col.type) || col.fixed === 'left')) {\n // console.log('添加前置特殊列:', { type: col.type, prop: col.prop, label: col.label })\n reorderedColumns.push(col)\n if (col.prop) {\n processedProps.add(col.prop)\n }\n }\n })\n\n // console.log('前置特殊列添加完成,当前列数:', reorderedColumns.length)\n\n // 然后添加按新顺序排列的普通列\n clonedColSetting.forEach((colSetting) => {\n if (colSetting && colSetting.prop && colMap.has(colSetting.prop) && !processedProps.has(colSetting.prop)) {\n const originalCol = colMap.get(colSetting.prop)\n if (originalCol) {\n // console.log('添加普通列:', { prop: colSetting.prop, label: colSetting.label, isShow: colSetting.isShow })\n try {\n // 创建列的副本并更新属性\n const updatedCol = { ...originalCol }\n updatedCol.isShow = colSetting.isShow\n updatedCol.sortable = colSetting.sortable\n reorderedColumns.push(updatedCol)\n processedProps.add(colSetting.prop)\n } catch (error) {\n console.warn('更新列配置时出错:', error)\n // 如果更新失败,使用原始列\n reorderedColumns.push(originalCol)\n processedProps.add(colSetting.prop)\n }\n }\n }\n })\n\n // console.log('普通列添加完成,当前列数:', reorderedColumns.length)\n\n // 最后添加后置特殊列(如操作列、operationBtns、右侧固定列等)\n currentColumns.forEach((col) => {\n if (\n col &&\n (!col.prop || !processedProps.has(col.prop)) &&\n (isBackSpecialColumn(col.type) || (!columnTypes.includes(col.type!) && col.fixed !== 'left'))\n ) {\n // console.log('添加后置特殊列:', { type: col.type, prop: col.prop, label: col.label })\n reorderedColumns.push(col)\n }\n })\n\n // console.log('列重排完成:', {\n // reorderedColumnsLength: reorderedColumns.length,\n // processedPropsSize: processedProps.size\n // })\n\n // 使用setTimeout而不是nextTick,确保在下一个事件循环中更新\n setTimeout(() => {\n // console.log('开始更新表格列,检查组件状态:', {\n // hasInstance: !!componentInstance,\n // isUnmounted: componentInstance?.isUnmounted\n // })\n\n if (!componentInstance || componentInstance.isUnmounted) {\n console.warn('延迟更新时组件已销毁')\n return\n }\n\n try {\n // console.log('执行表格列更新')\n // 简单直接的数组替换方法\n tableColumns.length = 0\n reorderedColumns.forEach((col) => {\n if (col) {\n tableColumns.push(col as any)\n }\n })\n\n // 同步更新 colSetting,但不触发新的更新\n colSetting.value = clonedColSetting\n\n // console.log('表格列更新完成:', {\n // newLength: tableColumns.length\n // })\n } catch (error) {\n console.warn('更新表格列时出错:', error)\n } finally {\n // 重置更新标志\n isUpdatingColumns.value = false\n }\n }, 50) // 50ms延迟\n } catch (error) {\n console.warn('updateTableColumns执行时出错:', error)\n // 确保在出错时也重置标志\n isUpdatingColumns.value = false\n }\n }\n\n const openColSetting = () => {\n // 直接打开列设置,不重新初始化以避免递归更新\n colRef.value.openColSetting()\n }\n\n const closeColSetting = () => {\n // 关闭列设置\n colRef.value.closeColSetting()\n }\n\n // 定义 emit 事件\n const emit = defineEmits([\"search\", \"reset\", \"dragSort\", \"handleOperateBtnsClick\"])\n\n const _search = () => {\n search()\n emit('search')\n }\n\n const _reset = () => {\n reset()\n emit('reset')\n }\n\n // 处理操作按钮点击事件\n const handleOperateBtnsClick = (btnName: string, row: any, btn: OperationBtnProps, index: number) => {\n emit('handleOperateBtnsClick', btnName, row, btn, index)\n }\n\n // 拖拽排序 // ! 列表数据需要有id\n const dragSort = () => {\n // const tbody = document.querySelector(`#${uuid.value} tbody`) as HTMLElement\n // Sortable.create(tbody, {\n // handle: '.move',\n // animation: 300,\n // onEnd({ newIndex, oldIndex }) {\n // const [removedItem] = processTableData.value.splice(oldIndex!, 1)\n // processTableData.value.splice(newIndex!, 0, removedItem)\n // console.log('newIndex', newIndex, 'oldIndex', oldIndex)\n // emit('dragSort', { newIndex, oldIndex })\n // }\n // })\n }\n\n const refreshTable = () => {\n getTableList()\n }\n\n const setSearchFormShow = (show: boolean) => {\n isShowSearch.value = show\n }\n\n // 获取当前列配置\n const getColumns = () => {\n return tableColumns\n }\n\n // 获取当前列设置配置\n const getColSetting = () => {\n return colSetting.value\n }\n\n // 暴露给父组件的参数和方法 (外部需要什么,都可以从这里暴露出去)\n defineExpose({\n element: tableRef,\n tableData: processTableData,\n radio,\n pageable,\n searchParam,\n searchInitParam,\n getTableList,\n search,\n reset,\n handleSizeChange,\n handleCurrentChange,\n clearSelection,\n enumMap,\n isSelected,\n selectedList,\n selectedListIds,\n refreshTable,\n setSearchFormShow,\n getColumns,\n getColSetting,\n openColSetting,\n closeColSetting\n })\n</script>\n"],"names":["props","__props","componentInstance","getCurrentInstance","znygStore","useLocalStorage","dictMap","bodyHeight","ref","useResizeObserver","document","body","entries","entry","height","contentRect","value","tableHeight","computed","processTableData","length","minHeightValue","minHeight","parseInt","toString","Math","max","ret","isShowSearch","pagination","heightOffset","tableRef","uuid","generateUUID","SPECIAL_COLUMN_CONFIG","FRONT_COLUMNS","BACK_COLUMNS","EXCLUDE_FROM_SETTING","types","fixed","columnTypes","isFrontSpecialColumn","type","includes","isBackSpecialColumn","shouldExcludeFromSetting","column","prop","initialFilterOnlyColumns","has","searchFormShow","showToolButton","key","Array","isArray","toolButton","radio","selectionChange","selectedList","selectedListIds","isSelected","useSelection","rowKey","scrollToTop","__name","tableEl","$el","scrollWrap","querySelector","scrollTop","resetScrollPagination","hasMoreData","isScrollLoading","scrollPaginationDisabled","tableData","pageable","searchParam","searchInitParam","getTableList","originalGetTableList","search","reset","handleSizeChange","handleCurrentChange","loading","useTable","requestApi","initParam","enableScrollPagination","dataCallback","requestError","pageSize","async","handleScrollPagination","total","totalPages","ceil","pageNum","nextPage","nextPageParams","currPage","params","result","processedResult","list","push","limit","console","log","error","setTimeout","handleScroll","event","scrollHeight","clientHeight","scrollPaginationThreshold","clearSelection","onMounted","requestAuto","data","removeEventListener","addEventListener","passive","onUnmounted","warn","slicedData","toRaw","slice","reactive","watch","deep","nextTick","tableColumns","columns","Set","recordInitialFilterOnlyColumns","forEach","col","isShow","el","render","add","_children","flatColumns","flatColumnsFunc","enumMap","Map","setEnumMap","enum","enumValue","dictCode","set","get","unref","provide","flatArr","isShowInView","isFilterEnum","filter","item","searchColumns","sort","a","b","order","index","handleProp","defaultValue","colRef","colSetting","isUpdatingColumns","initColSetting","updateTableColumns","newColSetting","isUnmounted","hasNewColSetting","clonedColSetting","JSON","parse","stringify","colMap","currentColumns","reorderedColumns","processedProps","originalCol","updatedCol","sortable","openColSetting","closeColSetting","emit","__emit","_search","_reset","handleOperateBtnsClick","btnName","row","btn","refreshTable","__expose","element","setSearchFormShow","show","getColumns","getColSetting"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znTableV2/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport { default as index, type ZnTableProps } from './src/index.vue'\nimport type { SearchProps, ColumnProps, OperationBtnProps, OperationBtnsProps } from './src/interface/index'\n\nexport const ZnTableV2 = withInstall(index) // 增加类型\n\nexport { type ZnTableProps, SearchProps, ColumnProps, OperationBtnProps, OperationBtnsProps }\nexport default ZnTableV2\n"],"names":["ZnTableV2","withInstall","index"],"mappings":"sHAIa,MAAAA,EAAYC,EAAYC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var f="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAzCAMAAAA3r39rAAABEVBMVEUAAADb29va2trY2Njj4+PX19fZ2dng4ODf39/X19fj4+Py8vLk5OTt7e3V1dX09PT29vbZ2dn39/fY2Nj29vbb29v29vb29vb19fX29vbV1dX39/f29vb29vb19fXc3NzZ2dnd3d3e3t7h4eH19fX19fXZ2dn19fX39/fb29vb29vW1tb19fXT09P29vbf39/29vb19fXU1NTn5+fc3NzR0dH29vb19fX19fX29vbT09P39/f19fX39/ff39/39/fX19f19fXr6+vo6OjZ2dnn5+fb29vj4+Pd3d319fXm5ubm5ubj4+PY2Nja2tr39/fk5OT6+vr09PTm5ub39/f8/Pzx8fHi4uLp6enr6+vt7e37h5dsAAAAUXRSTlMAQpJ0ChanzshV+g7jBMAS47ONcNMd++jew4heMx7LwJ5HI/j387y3rKx3XFNPSeSabWswKyjt2b2ikYWBc108mZZsaT339evZsKycgX5QGL+U+rOeAAAC3UlEQVRYw+WV13qiQBiGiaIbJaAgFgTsvZds7DG9l3UEBnP/F7IIDyYmgDB7uO8R4Mc7/8z8I5gdhabfgfMC5pHfvnrOZ0uu7vvt0TfN9vNHtuSvqLQnYzxNneNOAfy8ko679xEv2QHpHCGvqRfCrQ8fZF/xg6FGZYC79DUpN9MJvFJNd8a3is9VUxR8lZCb3BGdc7mBhRydP5waBulTzCWn9frw4KhB+ghzzQ0dLBxowAs6hHngjc7FERraHtK5IyKx7BWBeYK4zjYitg14TW9/9Gj001e4XfkVXwDzTGBKN0nL+kIU5W+3Qyb5uMNa53exdjtGUSHcaqSLu+7xr0+Og7Zdmw/uBbt3FwErYbD4AZQdQIH1U7t+hspXPopBa2EYyKsdsqx0G9bCxokif02CsLPQzEnw2Vr4vNYD7oUm8Im07IYndbWHa6FasVzEYXYjowmV7rR9c/SNm/a0CxAqNIzFh+MfPBSVFYLQVP5EKw9ZaDaH81NnIQK2wlwRrNCExZyVkEjfowrv04SFEI+doApPYriNUP7PhAN04cBKGPGjCy2+bYTQz4ZRdzn8py8Qe7bOrMaNbteowvXtiKvNOqZT5BmuDCSwRheq2utljuHF7V4se1Gg8Q9CRRdqRHtLHGtx2pUhhIqMJoSa0JBwLWycMHQS+EAUyhuo6AKNxBjT52s4obqSNfSUcfU5gH4jf8N4Iq0hkCRgEMUuk6ZQ2kBVAZ5RVLjRfEaNyUtsyET1SW9vVQjXnoFwY7oTUWaonRC+miztRvMuVLcLuKWUrPL6icHFDsMm9EkDFCT9vQTLdETzSJPikp/X2JKESImtzfmlSO7/NwitBTOpZlJl4IFyKlOdMIuWEMGsIN+FVn/Wq1W5DJuKJs/KpcRnU5kkSuWzZDTFZrhqrTfrt4R3EnOAxAkiIgodfjFnepPHcSbDjlJb+VaSGrFsZvw4uWTmC74jiBGCwL/b/gIpvWL/TS00iAAAAABJRU5ErkJggg==";export{f as default};
|
|
2
|
+
//# sourceMappingURL=notData.png.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notData.png.mjs","sources":["../../../../../../../packages/components/znTableV2/src/assets/notData.png"],"sourcesContent":["var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAzCAMAAAA3r39rAAABEVBMVEUAAADb29va2trY2Njj4+PX19fZ2dng4ODf39/X19fj4+Py8vLk5OTt7e3V1dX09PT29vbZ2dn39/fY2Nj29vbb29v29vb29vb19fX29vbV1dX39/f29vb29vb19fXc3NzZ2dnd3d3e3t7h4eH19fX19fXZ2dn19fX39/fb29vb29vW1tb19fXT09P29vbf39/29vb19fXU1NTn5+fc3NzR0dH29vb19fX19fX29vbT09P39/f19fX39/ff39/39/fX19f19fXr6+vo6OjZ2dnn5+fb29vj4+Pd3d319fXm5ubm5ubj4+PY2Nja2tr39/fk5OT6+vr09PTm5ub39/f8/Pzx8fHi4uLp6enr6+vt7e37h5dsAAAAUXRSTlMAQpJ0ChanzshV+g7jBMAS47ONcNMd++jew4heMx7LwJ5HI/j387y3rKx3XFNPSeSabWswKyjt2b2ikYWBc108mZZsaT339evZsKycgX5QGL+U+rOeAAAC3UlEQVRYw+WV13qiQBiGiaIbJaAgFgTsvZds7DG9l3UEBnP/F7IIDyYmgDB7uO8R4Mc7/8z8I5gdhabfgfMC5pHfvnrOZ0uu7vvt0TfN9vNHtuSvqLQnYzxNneNOAfy8ko679xEv2QHpHCGvqRfCrQ8fZF/xg6FGZYC79DUpN9MJvFJNd8a3is9VUxR8lZCb3BGdc7mBhRydP5waBulTzCWn9frw4KhB+ghzzQ0dLBxowAs6hHngjc7FERraHtK5IyKx7BWBeYK4zjYitg14TW9/9Gj001e4XfkVXwDzTGBKN0nL+kIU5W+3Qyb5uMNa53exdjtGUSHcaqSLu+7xr0+Og7Zdmw/uBbt3FwErYbD4AZQdQIH1U7t+hspXPopBa2EYyKsdsqx0G9bCxokif02CsLPQzEnw2Vr4vNYD7oUm8Im07IYndbWHa6FasVzEYXYjowmV7rR9c/SNm/a0CxAqNIzFh+MfPBSVFYLQVP5EKw9ZaDaH81NnIQK2wlwRrNCExZyVkEjfowrv04SFEI+doApPYriNUP7PhAN04cBKGPGjCy2+bYTQz4ZRdzn8py8Qe7bOrMaNbteowvXtiKvNOqZT5BmuDCSwRheq2utljuHF7V4se1Gg8Q9CRRdqRHtLHGtx2pUhhIqMJoSa0JBwLWycMHQS+EAUyhuo6AKNxBjT52s4obqSNfSUcfU5gH4jf8N4Iq0hkCRgEMUuk6ZQ2kBVAZ5RVLjRfEaNyUtsyET1SW9vVQjXnoFwY7oTUWaonRC+miztRvMuVLcLuKWUrPL6icHFDsMm9EkDFCT9vQTLdETzSJPikp/X2JKESImtzfmlSO7/NwitBTOpZlJl4IFyKlOdMIuWEMGsIN+FVn/Wq1W5DJuKJs/KpcRnU5kkSuWzZDTFZrhqrTfrt4R3EnOAxAkiIgodfjFnepPHcSbDjlJb+VaSGrFsZvw4uWTmC74jiBGCwL/b/gIpvWL/TS00iAAAAABJRU5ErkJggg==\";\n export default img;"],"names":["img"],"mappings":"AAAG,IAACA,EAAM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColSetting.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{defineComponent as e,ref as l,getCurrentInstance as t,watch as a,nextTick as o,onUnmounted as n,resolveComponent as r,createElementBlock as s,openBlock as i,Fragment as d,createCommentVNode as u,createVNode as c,withCtx as m,createElementVNode as p,unref as f,normalizeClass as h,renderSlot as v}from"vue";import g from"../assets/notData.png.mjs";import b from"sortablejs";import{DCaret as y}from"@element-plus/icons-vue";var w=Object.defineProperty,S=(e,l)=>w(e,"name",{value:l,configurable:!0});const U={class:"col-setting-header",style:{display:"flex","align-items":"center"}},C=["id"],V={style:{display:"flex","align-items":"center"}},_={class:"table-main"};var x=e({__name:"ColSetting",props:{colSetting:{type:Array,required:!0}},emits:["update:colSetting","updateColumns"],setup(e,{expose:w,emit:x}){const O=e,T=x,k=l(!1),I=l();let J=null;const N=t(),j=l([]),A=l(!1);let E=null;const $=S(((e,l)=>{if(N&&!N.isUnmounted)try{T(e,l)}catch(l){console.warn(`发送事件 ${e} 时出错:`,l)}else console.warn("组件已销毁,跳过事件发送",{hasInstance:!!N,isUnmounted:N?.isUnmounted})}),"safeEmit"),q=S((e=>{E&&clearTimeout(E),E=window.setTimeout((()=>{if(N&&!N.isUnmounted)try{const l=JSON.parse(JSON.stringify(e));$("updateColumns",l)}catch(e){console.warn("更新数据时出错:",e)}}),100)}),"debouncedUpdate");a((()=>O.colSetting),(e=>{if(e&&Array.isArray(e)){A.value=!0;try{j.value=JSON.parse(JSON.stringify(e))}catch(l){console.warn("更新本地列设置时出错:",l),j.value=[...e]}o((()=>{setTimeout((()=>{A.value=!1}),50)}))}}),{immediate:!0,deep:!0});const D=S((()=>{N&&!N.isUnmounted&&o((()=>{if(N&&!N.isUnmounted&&I.value)try{const e=I.value.$el?.querySelector("tbody");if(!e)return void console.warn("未找到tbody元素");if(J){try{J.destroy()}catch(e){console.warn("销毁sortable实例时出错:",e)}J=null}J=b.create(e,{handle:".drag-handle",animation:300,ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",forceFallback:!0,fallbackTolerance:3,
|
|
2
|
+
// 禁用原生HTML5拖拽
|
|
3
|
+
dragoverBubble:!1,removeCloneOnHide:!0,onStart:S((e=>{if(!e.item||!e.from||!N||N.isUnmounted)return!1}),"onStart"),onEnd:S((e=>{if(!N||N.isUnmounted)return;if(A.value)return;const{oldIndex:l,newIndex:t}=e;if(void 0!==l&&void 0!==t&&l!==t&&!(l<0||t<0||l>=j.value.length||t>=j.value.length))try{const e=[...j.value],a=e.splice(l,1)[0];a&&(e.splice(t,0,a),j.value=e,q(e))}catch(e){console.warn("拖拽排序时出错:",e)}}),"onEnd")})}catch(e){console.warn("初始化sortable时出错:",e)}}))}),"initSortable"),H=S((()=>{N&&!N.isUnmounted&&(k.value=!0,setTimeout((()=>{N&&!N.isUnmounted&&D()}),200))}),"openColSetting"),z=S((()=>{N&&!N.isUnmounted&&(k.value=!1)}),"closeColSetting"),B=S((()=>{if(N&&!N.isUnmounted&&!A.value)try{q(j.value)}catch(e){console.warn("开关切换时出错:",e)}}),"handleSwitchChange");return a(k,(e=>{if(!e&&J)try{J.destroy(),J=null}catch(e){console.warn("关闭抽屉时销毁sortable实例出错:",e)}})),n((()=>{if(E&&(clearTimeout(E),E=null),J)try{J.destroy(),J=null}catch(e){console.warn("组件销毁时清理sortable实例出错:",e)}})),w({openColSetting:H,closeColSetting:z}),(e,l)=>{const t=r("el-icon"),a=r("el-table-column"),o=r("el-switch"),n=r("el-table"),b=r("el-drawer");return i(),s(d,null,[u(" 列设置 "),c(b,{modelValue:k.value,"onUpdate:modelValue":l[0]||(l[0]=e=>k.value=e),title:"列设置",size:"450px"},{header:m((({close:l,titleId:t,titleClass:a})=>[p("div",U,[p("h4",{id:t,class:h(a)},"列设置",10,C),p("div",V,[u(" 列设置头部插槽 "),v(e.$slots,"colSettingHeader")])])])),default:m((()=>[p("div",_,[c(n,{ref_key:"tableRef",ref:I,data:j.value,border:!0,"row-key":"prop","default-expand-all":"","tree-props":{children:"_children"}},{empty:m((()=>l[1]||(l[1]=[p("div",{class:"table-empty"},[p("img",{src:g,alt:"notData"}),p("div",null,"暂无可配置列")],-1
|
|
4
|
+
/* HOISTED */)]))),default:m((()=>[c(a,{align:"center",label:"拖拽",width:"60"},{default:m((()=>[c(t,{class:"drag-handle",style:{color:"#409eff",cursor:"move"}},{default:m((()=>[c(f(y))])),_:1
|
|
5
|
+
/* STABLE */})])),_:1
|
|
6
|
+
/* STABLE */}),c(a,{prop:"label",align:"center",label:"列名"}),c(a,{prop:"isShow",align:"center",label:"显示"},{default:m((e=>[c(o,{modelValue:e.row.isShow,"onUpdate:modelValue":S((l=>e.row.isShow=l),"onUpdate:modelValue"),onChange:B},null,8,["modelValue","onUpdate:modelValue"])])),_:1
|
|
7
|
+
/* STABLE */}),c(a,{prop:"sortable",align:"center",label:"排序"},{default:m((e=>[c(o,{modelValue:e.row.sortable,"onUpdate:modelValue":S((l=>e.row.sortable=l),"onUpdate:modelValue"),onChange:B},null,8,["modelValue","onUpdate:modelValue"])])),_:1
|
|
8
|
+
/* STABLE */})])),_:1
|
|
9
|
+
/* STABLE */},8,["data"])])])),_:3
|
|
10
|
+
/* FORWARDED */},8,["modelValue"])],2112
|
|
11
|
+
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)}}});export{x as default};
|
|
12
|
+
//# sourceMappingURL=ColSetting.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColSetting.vue2.mjs","sources":["../../../../../../../packages/components/znTableV2/src/components/ColSetting.vue"],"sourcesContent":["<template>\n <!-- 列设置 -->\n <el-drawer v-model=\"drawerVisible\" title=\"列设置\" size=\"450px\">\n <!-- 自定义头部 -->\n <template #header=\"{ close, titleId, titleClass }\">\n <div class=\"col-setting-header\" style=\"display: flex; align-items: center;\">\n <h4 :id=\"titleId\" :class=\"titleClass\">列设置</h4>\n <div style=\"display: flex; align-items: center;\">\n <!-- 列设置头部插槽 -->\n <slot name=\"colSettingHeader\"></slot>\n </div>\n </div>\n </template>\n\n <div class=\"table-main\">\n <el-table ref=\"tableRef\" :data=\"localColSetting\" :border=\"true\" row-key=\"prop\" default-expand-all :tree-props=\"{ children: '_children' }\">\n <el-table-column align=\"center\" label=\"拖拽\" width=\"60\">\n <template #default>\n <el-icon class=\"drag-handle\" style=\" color: #409eff;cursor: move\">\n <DCaret />\n </el-icon>\n </template>\n </el-table-column>\n <el-table-column prop=\"label\" align=\"center\" label=\"列名\" />\n <el-table-column v-slot=\"scope\" prop=\"isShow\" align=\"center\" label=\"显示\">\n <el-switch v-model=\"scope.row.isShow\" @change=\"handleSwitchChange\"></el-switch>\n </el-table-column>\n <el-table-column v-slot=\"scope\" prop=\"sortable\" align=\"center\" label=\"排序\">\n <el-switch v-model=\"scope.row.sortable\" @change=\"handleSwitchChange\"></el-switch>\n </el-table-column>\n <template #empty>\n <div class=\"table-empty\">\n <img src=\"../assets/notData.png\" alt=\"notData\" />\n <div>暂无可配置列</div>\n </div>\n </template>\n </el-table>\n </div>\n </el-drawer>\n</template>\n\n<script setup lang=\"ts\" name=\"ColSetting\">\n import { nextTick, onMounted, onUnmounted, ref, watch, getCurrentInstance } from 'vue'\n import Sortable from 'sortablejs'\n\n import { ColumnProps } from '../interface'\n import { DCaret } from '@element-plus/icons-vue'\n\n const props = defineProps({\n colSetting: { type: Array, required: true }\n})\n const emit = defineEmits(['update:colSetting', 'updateColumns'])\n\n const drawerVisible = ref<boolean>(false)\n const tableRef = ref()\n let sortableInstance: Sortable | null = null\n\n // 获取当前组件实例,用于检查组件是否已销毁\n const instance = getCurrentInstance()\n\n // 添加本地状态\n const localColSetting = ref<ColumnProps[]>([])\n\n // 添加更新标志,防止循环更新\n const isUpdatingFromParent = ref(false)\n\n // 防抖标志\n let updateTimer: number | null = null\n\n // 安全的emit函数\n const safeEmit = (eventName: string, data: any) => {\n // console.log('safeEmit调用:', {\n // eventName,\n // hasInstance: !!instance,\n // isUnmounted: instance?.isUnmounted,\n // dataLength: Array.isArray(data) ? data.length : 'not array'\n // })\n\n // 检查组件实例是否还存在\n if (!instance || instance.isUnmounted) {\n console.warn('组件已销毁,跳过事件发送', {\n hasInstance: !!instance,\n isUnmounted: instance?.isUnmounted\n })\n return\n }\n\n try {\n // console.log('正在发送事件:', eventName)\n emit(eventName as any, data)\n // console.log('事件发送成功:', eventName)\n } catch (error) {\n console.warn(`发送事件 ${eventName} 时出错:`, error)\n }\n }\n\n // 防抖的更新函数\n const debouncedUpdate = (data: ColumnProps[]) => {\n // console.log('debouncedUpdate调用:', {\n // hasData: !!data,\n // dataLength: Array.isArray(data) ? data.length : 'not array',\n // hasTimer: !!updateTimer\n // })\n\n if (updateTimer) {\n // console.log('清除之前的定时器')\n clearTimeout(updateTimer)\n }\n\n updateTimer = window.setTimeout(() => {\n // console.log('防抖定时器执行:', {\n // hasInstance: !!instance,\n // isUnmounted: instance?.isUnmounted\n // })\n\n if (!instance || instance.isUnmounted) {\n // console.warn('防抖更新时组件已销毁')\n return\n }\n\n try {\n // 深拷贝数据避免响应式问题\n const clonedData = JSON.parse(JSON.stringify(data))\n // console.log('开始发送防抖更新事件')\n // safeEmit('update:colSetting', clonedData) // 移除这个事件,避免双重更新\n safeEmit('updateColumns', clonedData)\n } catch (error) {\n console.warn('更新数据时出错:', error)\n }\n }, 100) // 100ms防抖\n }\n\n // 监听 props 变化,更新本地状态\n watch(\n () => props.colSetting,\n (newVal) => {\n if (!newVal || !Array.isArray(newVal)) return\n\n // 设置标志,表示正在从父组件更新\n isUpdatingFromParent.value = true\n // 不要过滤 isShow 为 false 的列,否则用户无法再将其设置为显示\n try {\n localColSetting.value = JSON.parse(JSON.stringify(newVal))\n } catch (error) {\n console.warn('更新本地列设置时出错:', error)\n localColSetting.value = [...newVal]\n }\n\n // 延迟重置标志,确保本次更新完成\n nextTick(() => {\n setTimeout(() => {\n isUpdatingFromParent.value = false\n }, 50)\n })\n },\n { immediate: true, deep: true }\n )\n\n // 初始化拖拽排序\n const initSortable = () => {\n if (!instance || instance.isUnmounted) {\n return\n }\n\n nextTick(() => {\n if (!instance || instance.isUnmounted || !tableRef.value) {\n return\n }\n\n try {\n const tbody = tableRef.value.$el?.querySelector('tbody')\n if (!tbody) {\n console.warn('未找到tbody元素')\n return\n }\n\n // 销毁之前的实例\n if (sortableInstance) {\n try {\n sortableInstance.destroy()\n } catch (error) {\n console.warn('销毁sortable实例时出错:', error)\n }\n sortableInstance = null\n }\n\n sortableInstance = Sortable.create(tbody, {\n handle: '.drag-handle',\n animation: 300,\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n forceFallback: true,\n fallbackTolerance: 3,\n // 禁用原生HTML5拖拽\n dragoverBubble: false,\n removeCloneOnHide: true,\n onStart: (evt) => {\n if (!evt.item || !evt.from || !instance || instance.isUnmounted) {\n return false\n }\n },\n onEnd: (evt) => {\n // 检查组件状态\n if (!instance || instance.isUnmounted) {\n return\n }\n\n // 如果正在从父组件更新,跳过事件发送\n if (isUpdatingFromParent.value) {\n return\n }\n\n const { oldIndex, newIndex } = evt\n\n if (oldIndex === undefined || newIndex === undefined || oldIndex === newIndex) {\n return\n }\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex >= localColSetting.value.length || newIndex >= localColSetting.value.length) {\n return\n }\n\n try {\n const newData = [...localColSetting.value]\n const movedItem = newData.splice(oldIndex, 1)[0]\n\n if (movedItem) {\n newData.splice(newIndex, 0, movedItem)\n localColSetting.value = newData\n\n // 使用防抖更新\n debouncedUpdate(newData)\n }\n } catch (error) {\n console.warn('拖拽排序时出错:', error)\n }\n }\n })\n } catch (error) {\n console.warn('初始化sortable时出错:', error)\n }\n })\n }\n\n const openColSetting = () => {\n if (!instance || instance.isUnmounted) {\n return\n }\n\n drawerVisible.value = true\n\n // 延迟初始化拖拽\n setTimeout(() => {\n if (!instance || instance.isUnmounted) {\n return\n }\n initSortable()\n }, 200)\n }\n\n const closeColSetting = () => {\n if (!instance || instance.isUnmounted) {\n return\n }\n\n drawerVisible.value = false\n }\n\n const handleSwitchChange = () => {\n // console.log('handleSwitchChange调用:', {\n // hasInstance: !!instance,\n // isUnmounted: instance?.isUnmounted,\n // localColSettingLength: localColSetting.value.length\n // })\n\n if (!instance || instance.isUnmounted) {\n // console.warn('开关切换时组件已销毁')\n return\n }\n\n // 如果正在从父组件更新,跳过事件发送\n if (isUpdatingFromParent.value) {\n return\n }\n\n try {\n // console.log('开关切换,准备防抖更新')\n // 使用防抖更新\n debouncedUpdate(localColSetting.value)\n } catch (error) {\n console.warn('开关切换时出错:', error)\n }\n }\n\n // 监听抽屉关闭,清理拖拽实例\n watch(drawerVisible, (newVal) => {\n if (!newVal && sortableInstance) {\n try {\n sortableInstance.destroy()\n sortableInstance = null\n } catch (error) {\n console.warn('关闭抽屉时销毁sortable实例出错:', error)\n }\n }\n })\n\n // 组件销毁时清理\n onUnmounted(() => {\n if (updateTimer) {\n clearTimeout(updateTimer)\n updateTimer = null\n }\n\n if (sortableInstance) {\n try {\n sortableInstance.destroy()\n sortableInstance = null\n } catch (error) {\n console.warn('组件销毁时清理sortable实例出错:', error)\n }\n }\n })\n\n defineExpose({\n openColSetting,\n closeColSetting\n })\n</script>\n"],"names":["props","__props","emit","__emit","drawerVisible","ref","tableRef","sortableInstance","instance","getCurrentInstance","localColSetting","isUpdatingFromParent","updateTimer","safeEmit","__name","eventName","data","isUnmounted","error","console","warn","hasInstance","debouncedUpdate","clearTimeout","window","setTimeout","clonedData","JSON","parse","stringify","watch","colSetting","newVal","Array","isArray","value","nextTick","immediate","deep","initSortable","tbody","$el","querySelector","destroy","Sortable","create","handle","animation","ghostClass","chosenClass","dragClass","forceFallback","fallbackTolerance","dragoverBubble","removeCloneOnHide","onStart","evt","item","from","onEnd","oldIndex","newIndex","length","newData","movedItem","splice","openColSetting","closeColSetting","handleSwitchChange","onUnmounted","__expose"],"mappings":"6yBAgDE,MAAMA,EAAQC,EAGRC,EAAOC,EAEPC,EAAgBC,GAAa,GAC7BC,EAAWD,IACjB,IAAIE,EAAoC,KAGxC,MAAMC,EAAWC,IAGXC,EAAkBL,EAAmB,IAGrCM,EAAuBN,GAAI,GAGjC,IAAIO,EAA6B,KAG3B,MAAAC,EAAYC,GAAA,CAAAC,EAAmBC,KAS/B,GAACR,IAAYA,EAASS,YAQtB,IAEFf,EAAKa,EAAkBC,SAEhBE,GACPC,QAAQC,KAAK,QAAQL,SAAkBG,EAAK,MAZ5CC,QAAQC,KAAK,eAAgB,CAC3BC,cAAeb,EACfS,YAAaT,GAAUS,aAUmB,GAtB/B,YA2BXK,KAAmBN,IAOnBJ,GAEFW,aAAaX,GAGDA,EAAAY,OAAOC,YAAW,KAM1B,GAACjB,IAAYA,EAASS,YAKtB,IAEF,MAAMS,EAAaC,KAAKC,MAAMD,KAAKE,UAAUb,IAG7CH,EAAS,gBAAiBa,SACnBR,GACCC,QAAAC,KAAK,WAAYF,EAAK,IAE/B,IAAG,GAhCgB,mBAoCxBY,GACE,IAAM9B,EAAM+B,aACXC,IACC,GAAKA,GAAWC,MAAMC,QAAQF,GAA9B,CAGArB,EAAqBwB,OAAQ,EAEzB,IACFzB,EAAgByB,MAAQR,KAAKC,MAAMD,KAAKE,UAAUG,UAC3Cd,GACCC,QAAAC,KAAK,cAAeF,GACZR,EAAAyB,MAAQ,IAAIH,EAAM,CAIpCI,GAAS,KACPX,YAAW,KACTd,EAAqBwB,OAAQ,CAAA,GAC5B,GAAE,GAhBgC,CAiBtC,GAEH,CAAEE,WAAW,EAAMC,MAAM,IAI3B,MAAMC,EAAqBzB,GAAA,KACpBN,IAAYA,EAASS,aAI1BmB,GAAS,KACP,GAAK5B,IAAYA,EAASS,aAAgBX,EAAS6B,MAI/C,IACF,MAAMK,EAAQlC,EAAS6B,MAAMM,KAAKC,cAAc,SAChD,IAAKF,EAEH,YADArB,QAAQC,KAAK,cAKf,GAAIb,EAAkB,CAChB,IACFA,EAAiBoC,gBACVzB,GACCC,QAAAC,KAAK,mBAAoBF,EAAK,CAErBX,EAAA,IAAA,CAGFA,EAAAqC,EAASC,OAAOL,EAAO,CACxCM,OAAQ,eACRC,UAAW,IACXC,WAAY,iBACZC,YAAa,kBACbC,UAAW,gBACXC,eAAe,EACfC,kBAAmB;;AAEnBC,gBAAgB,EAChBC,mBAAmB,EACnBC,WAAUC,IACJ,IAACA,EAAIC,OAASD,EAAIE,OAASlD,GAAYA,EAASS,YAC3C,OAAA,CAAA,GAFF,WAKT0C,SAAQH,IAEF,IAAChD,GAAYA,EAASS,YACxB,OAIF,GAAIN,EAAqBwB,MACvB,OAGI,MAAAyB,SAAEA,EAAUC,SAAAA,GAAaL,EAE/B,QAAiB,IAAbI,QAAuC,IAAbC,GAA0BD,IAAaC,KAIjED,EAAW,GAAKC,EAAW,GAAKD,GAAYlD,EAAgByB,MAAM2B,QAAUD,GAAYnD,EAAgByB,MAAM2B,QAI9G,IACF,MAAMC,EAAU,IAAIrD,EAAgByB,OAC9B6B,EAAYD,EAAQE,OAAOL,EAAU,GAAG,GAE1CI,IACMD,EAAAE,OAAOJ,EAAU,EAAGG,GAC5BtD,EAAgByB,MAAQ4B,EAGxBzC,EAAgByC,UAEX7C,GACCC,QAAAC,KAAK,WAAYF,EAAK,IAjC3B,iBAqCFA,GACCC,QAAAC,KAAK,kBAAmBF,EAAK,IAExC,GAnFkB,gBAsFfgD,EAAuBpD,GAAA,KACtBN,IAAYA,EAASS,cAI1Bb,EAAc+B,OAAQ,EAGtBV,YAAW,KACJjB,IAAYA,EAASS,aAGbsB,GAAA,GACZ,KAAG,GAbe,kBAgBjB4B,EAAwBrD,GAAA,KACvBN,IAAYA,EAASS,cAI1Bb,EAAc+B,OAAQ,EAAA,GALA,mBAQlBiC,EAA2BtD,GAAA,KAO3B,GAACN,IAAYA,EAASS,cAMtBN,EAAqBwB,MAIrB,IAGFb,EAAgBZ,EAAgByB,aACzBjB,GACCC,QAAAC,KAAK,WAAYF,EAAK,IAtBP,6BA2BrBY,EAAA1B,GAAgB4B,IAChB,IAACA,GAAUzB,EACT,IACFA,EAAiBoC,UACEpC,EAAA,WACZW,GACCC,QAAAC,KAAK,uBAAwBF,EAAK,CAC5C,IAKJmD,GAAY,KAMV,GALIzD,IACFW,aAAaX,GACCA,EAAA,MAGZL,EACE,IACFA,EAAiBoC,UACEpC,EAAA,WACZW,GACCC,QAAAC,KAAK,uBAAwBF,EAAK,CAC5C,IAISoD,EAAA,CACXJ,iBACAC;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridItem.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{defineComponent as e,useAttrs as t,ref as u,inject as a,watch as d,computed as r,withDirectives as l,openBlock as i,createElementBlock as n,normalizeStyle as s,renderSlot as f,vShow as o}from"vue";var p=e({__name:"GridItem",props:{offset:{type:Number,required:!1,default:0},span:{type:Number,required:!1,default:1},suffix:{type:Boolean,required:!1,default:!1},xs:{type:Object,required:!1,default:void 0},sm:{type:Object,required:!1,default:void 0},md:{type:Object,required:!1,default:void 0},lg:{type:Object,required:!1,default:void 0},xl:{type:Object,required:!1,default:void 0}},setup(e){const p=e,v=t(),m=u(!0),c=a("breakPoint",u("xl")),x=a("shouldHiddenIndex",u(-1));d((()=>[x.value,c.value]),(e=>{v.index&&(m.value=!(-1!==e[0]&&parseInt(v.index)>=Number(e[0])))}),{immediate:!0});const $=a("gap",0),b=a("cols",u(4)),y=r((()=>{let e=p[c.value]?.span??p.span,t=p[c.value]?.offset??p.offset;return p.suffix?{gridColumnStart:b.value-e-t+1,gridColumnEnd:`span ${e+t}`,marginLeft:0!==t?`calc(((100% + ${$}px) / ${e+t}) * ${t})`:"unset"}:{gridColumn:`span ${e+t>b.value?b.value:e+t}/span ${e+t>b.value?b.value:e+t}`,marginLeft:0!==t?`calc(((100% + ${$}px) / ${e+t}) * ${t})`:"unset"}}));return(e,t)=>l((i(),n("div",{style:s(y.value)},[f(e.$slots,"default")],4
|
|
2
|
+
/* STYLE */)),[[o,m.value]])}});export{p as default};
|
|
3
|
+
//# sourceMappingURL=GridItem.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridItem.vue2.mjs","sources":["../../../../../../../../../packages/components/znTableV2/src/components/Grid/components/GridItem.vue"],"sourcesContent":["<template>\n <div v-show=\"isShow\" :style=\"style\">\n <slot></slot>\n </div>\n</template>\n<script setup lang=\"ts\" name=\"GridItem\">\nimport { computed, inject, Ref, ref, useAttrs, watch } from 'vue'\n\nimport { BreakPoint, Responsive } from '../interface/index'\n\ntype Props = {\n offset?: number;\n span?: number;\n suffix?: boolean;\n xs?: Responsive;\n sm?: Responsive;\n md?: Responsive;\n lg?: Responsive;\n xl?: Responsive;\n};\n\nconst props = defineProps({\n offset: { type: Number, required: false, default: 0 },\n span: { type: Number, required: false, default: 1 },\n suffix: { type: Boolean, required: false, default: false },\n xs: { type: Object, required: false, default: undefined },\n sm: { type: Object, required: false, default: undefined },\n md: { type: Object, required: false, default: undefined },\n lg: { type: Object, required: false, default: undefined },\n xl: { type: Object, required: false, default: undefined }\n})\n\nconst attrs = useAttrs() as { index: string }\nconst isShow = ref(true)\n\n// 注入断点\nconst breakPoint = inject<Ref<BreakPoint>>('breakPoint', ref('xl'))\nconst shouldHiddenIndex = inject<Ref<number>>('shouldHiddenIndex', ref(-1))\nwatch(\n () => [shouldHiddenIndex.value, breakPoint.value],\n n => {\n if (attrs.index) {\n isShow.value = !(n[0] !== -1 && parseInt(attrs.index) >= Number(n[0]))\n }\n },\n { immediate: true }\n)\n\nconst gap = inject('gap', 0)\nconst cols = inject('cols', ref(4))\nconst style = computed(() => {\n let span = props[breakPoint.value]?.span ?? props.span\n let offset = props[breakPoint.value]?.offset ?? props.offset\n if (props.suffix) {\n return {\n gridColumnStart: cols.value - span - offset + 1,\n gridColumnEnd: `span ${span + offset}`,\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : 'unset'\n }\n } else {\n return {\n gridColumn: `span ${span + offset > cols.value ? cols.value : span + offset}/span ${\n span + offset > cols.value ? cols.value : span + offset\n }`,\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : 'unset'\n }\n }\n})\n</script>\n"],"names":["props","__props","attrs","useAttrs","isShow","ref","breakPoint","inject","shouldHiddenIndex","watch","value","n","index","parseInt","Number","immediate","gap","cols","style","computed","span","offset","suffix","gridColumnStart","gridColumnEnd","marginLeft","gridColumn"],"mappings":"qlBAqBA,MAAMA,EAAQC,EAWRC,EAAQC,IACRC,EAASC,GAAI,GAGbC,EAAaC,EAAwB,aAAcF,EAAI,OACvDG,EAAoBD,EAAoB,oBAAqBF,OACnEI,GACE,IAAM,CAACD,EAAkBE,MAAOJ,EAAWI,SACtCC,IACCT,EAAMU,QACRR,EAAOM,SAAmB,IAATC,EAAE,IAAaE,SAASX,EAAMU,QAAUE,OAAOH,EAAE,KAAE,GAGxE,CAAEI,WAAW,IAGT,MAAAC,EAAMT,EAAO,MAAO,GACpBU,EAAOV,EAAO,OAAQF,EAAI,IAC1Ba,EAAQC,GAAS,KACrB,IAAIC,EAAOpB,EAAMM,EAAWI,QAAQU,MAAQpB,EAAMoB,KAC9CC,EAASrB,EAAMM,EAAWI,QAAQW,QAAUrB,EAAMqB,OACtD,OAAIrB,EAAMsB,OACD,CACLC,gBAAiBN,EAAKP,MAAQU,EAAOC,EAAS,EAC9CG,cAAe,QAAQJ,EAAOC,IAC9BI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,SAGnF,CACLK,WAAY,QAAQN,EAAOC,EAASJ,EAAKP,MAAQO,EAAKP,MAAQU,EAAOC,UACnED,EAAOC,EAASJ,EAAKP,MAAQO,EAAKP,MAAQU,EAAOC,IAEnDI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,QAC1F;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{defineComponent as e,onBeforeMount as a,onMounted as r,onActivated as l,onUnmounted as s,onDeactivated as t,ref as o,provide as p,computed as i,useSlots as n,watch as u,createElementBlock as d,openBlock as c,normalizeStyle as f,renderSlot as v}from"vue";var g=Object.defineProperty,b=(e,a)=>g(e,"name",{value:a,configurable:!0}),y=e({__name:"index",props:{cols:{type:[Number,Object],required:!1,default:b((()=>({xs:1,sm:2,md:2,lg:3,xl:4})),"default")},collapsed:{type:Boolean,required:!1,default:!1},collapsedRows:{type:Number,required:!1,default:1},gap:{type:[Array,Number],required:!1,default:0}},setup(e,{expose:g}){const y=e;a((()=>y.collapsed&&k())),r((()=>{m({target:{innerWidth:globalThis.innerWidth}}),globalThis.addEventListener("resize",m)})),l((()=>{m({target:{innerWidth:globalThis.innerWidth}}),globalThis.addEventListener("resize",m)})),s((()=>{globalThis.removeEventListener("resize",m)})),t((()=>{globalThis.removeEventListener("resize",m)}));const m=b((e=>{let a=e.target.innerWidth;switch(!!a){case a<768:h.value="xs";break;case a>=768&&a<992:h.value="sm";break;case a>=992&&a<1200:h.value="md";break;case a>=1200&&a<1920:h.value="lg";break;case a>=1920:h.value="xl"}}),"resize");p("gap",Array.isArray(y.gap)?y.gap[0]:y.gap);let h=o("xl");p("breakPoint",h);const x=o(-1);p("shouldHiddenIndex",x);const A=i((()=>"object"==typeof y.cols?y.cols[h.value]??y.cols:y.cols));p("cols",A);const T=n().default(),k=b((()=>{let e=[],a=null;T.forEach((r=>{"object"==typeof r.type&&"GridItem"===r.type.name&&void 0!==r.props?.suffix&&(a=r),"symbol"==typeof r.type&&Array.isArray(r.children)&&e.push(...r.children)}));let r=0;a&&(r=(a.props[h.value]?.span??a.props?.span??1)+(a.props[h.value]?.offset??a.props?.offset??0));try{let a=!1;e.reduce(((e=0,l,s)=>{if(e+=(l.props[h.value]?.span??l.props?.span??1)+(l.props[h.value]?.offset??l.props?.offset??0),Number(e)>y.collapsedRows*A.value-r)throw x.value=s,a=!0,"find it";return e}),0),a||(x.value=-1)}catch(e){}}),"findIndex");u((()=>h.value),(()=>{y.collapsed&&k()})),u((()=>y.collapsed),(e=>{if(e)return k();x.value=-1}));const z=i((()=>"number"==typeof y.gap?`${y.gap}px`:Array.isArray(y.gap)?`${y.gap[1]}px ${y.gap[0]}px`:"unset")),E=i((()=>({display:"grid",gridGap:z.value,gridTemplateColumns:`repeat(${A.value}, minmax(0, 1fr))`})));return g({breakPoint:h}),(e,a)=>(c(),d("div",{style:f(E.value)},[v(e.$slots,"default")],4
|
|
2
|
+
/* STYLE */))}});export{y as default};
|
|
3
|
+
//# sourceMappingURL=index.vue2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../../../packages/components/znTableV2/src/components/Grid/index.vue"],"sourcesContent":["<template>\n <div :style=\"style\">\n <slot></slot>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"Grid\">\n import { computed, onActivated, onBeforeMount, onDeactivated, onMounted, onUnmounted, provide, ref, useSlots, VNode, VNodeArrayChildren, watch } from 'vue'\n\n import type { BreakPoint } from './interface/index'\n\n type Props = {\n cols?: number | Record<BreakPoint, number>\n collapsed?: boolean\n collapsedRows?: number\n gap?: [number, number] | number\n }\n\n const props = defineProps({\n cols: { type: [Number, Object], required: false, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n collapsed: { type: Boolean, required: false, default: false },\n collapsedRows: { type: Number, required: false, default: 1 },\n gap: { type: [Array, Number], required: false, default: 0 }\n})\n\n onBeforeMount(() => props.collapsed && findIndex())\n onMounted(() => {\n resize({ target: { innerWidth: globalThis.innerWidth } } as unknown as UIEvent)\n globalThis.addEventListener('resize', resize)\n })\n onActivated(() => {\n resize({ target: { innerWidth: globalThis.innerWidth } } as unknown as UIEvent)\n globalThis.addEventListener('resize', resize)\n })\n onUnmounted(() => {\n globalThis.removeEventListener('resize', resize)\n })\n onDeactivated(() => {\n globalThis.removeEventListener('resize', resize)\n })\n\n // 监听屏幕变化\n const resize = (e: UIEvent) => {\n let width = (e.target as Window).innerWidth\n switch (!!width) {\n case width < 768:\n breakPoint.value = 'xs'\n break\n case width >= 768 && width < 992:\n breakPoint.value = 'sm'\n break\n case width >= 992 && width < 1200:\n breakPoint.value = 'md'\n break\n case width >= 1200 && width < 1920:\n breakPoint.value = 'lg'\n break\n case width >= 1920:\n breakPoint.value = 'xl'\n break\n }\n }\n\n // 注入 gap 间距\n provide('gap', Array.isArray(props.gap) ? props.gap[0] : props.gap)\n\n // 注入响应式断点\n let breakPoint = ref<BreakPoint>('xl')\n provide('breakPoint', breakPoint)\n\n // 注入要开始折叠的 index\n const hiddenIndex = ref(-1)\n provide('shouldHiddenIndex', hiddenIndex)\n\n // 注入 cols\n const gridCols = computed(() => {\n if (typeof props.cols === 'object') return props.cols[breakPoint.value] ?? props.cols\n return props.cols\n })\n provide('cols', gridCols)\n\n // 寻找需要开始折叠的字段 index\n const slots = useSlots().default!()\n\n const findIndex = () => {\n let fields: VNodeArrayChildren = []\n let suffix: VNode | null = null\n slots.forEach((slot: any) => {\n // suffix\n if (typeof slot.type === 'object' && slot.type.name === 'GridItem' && slot.props?.suffix !== undefined) suffix = slot\n // slot children\n if (typeof slot.type === 'symbol' && Array.isArray(slot.children)) fields.push(...slot.children)\n })\n\n // 计算 suffix 所占用的列\n let suffixCols = 0\n if (suffix) {\n suffixCols =\n ((suffix as VNode).props![breakPoint.value]?.span ?? (suffix as VNode).props?.span ?? 1) +\n ((suffix as VNode).props![breakPoint.value]?.offset ?? (suffix as VNode).props?.offset ?? 0)\n }\n try {\n let find = false\n fields.reduce((prev = 0, current, index) => {\n prev +=\n ((current as VNode)!.props![breakPoint.value]?.span ?? (current as VNode)!.props?.span ?? 1) +\n ((current as VNode)!.props![breakPoint.value]?.offset ?? (current as VNode)!.props?.offset ?? 0)\n if (Number(prev) > props.collapsedRows * gridCols.value - suffixCols) {\n hiddenIndex.value = index\n find = true\n throw 'find it'\n }\n return prev\n }, 0)\n if (!find) hiddenIndex.value = -1\n } catch (e) {\n // console.warn(e);\n }\n }\n\n // 断点变化时执行 findIndex\n watch(\n () => breakPoint.value,\n () => {\n if (props.collapsed) findIndex()\n }\n )\n\n // 监听 collapsed\n watch(\n () => props.collapsed,\n (value) => {\n if (value) return findIndex()\n hiddenIndex.value = -1\n }\n )\n\n // 设置间距\n const gridGap = computed(() => {\n if (typeof props.gap === 'number') return `${props.gap}px`\n if (Array.isArray(props.gap)) return `${props.gap[1]}px ${props.gap[0]}px`\n return 'unset'\n })\n\n // 设置 style\n const style = computed(() => {\n return {\n display: 'grid',\n gridGap: gridGap.value,\n gridTemplateColumns: `repeat(${gridCols.value}, minmax(0, 1fr))`\n }\n })\n\n defineExpose({ breakPoint })\n</script>\n"],"names":["props","__props","onBeforeMount","collapsed","findIndex","onMounted","resize","target","innerWidth","globalThis","addEventListener","onActivated","onUnmounted","removeEventListener","onDeactivated","e","width","breakPoint","value","provide","Array","isArray","gap","ref","hiddenIndex","gridCols","computed","cols","slots","useSlots","default","__name","fields","suffix","forEach","slot","type","name","children","push","suffixCols","span","offset","find","reduce","prev","current","index","Number","collapsedRows","watch","gridGap","style","display","gridTemplateColumns","__expose"],"mappings":"knBAkBE,MAAMA,EAAQC,EAOdC,GAAc,IAAMF,EAAMG,WAAaC,MACvCC,GAAU,KACRC,EAAO,CAAEC,OAAQ,CAAEC,WAAYC,WAAWD,cAC/BC,WAAAC,iBAAiB,SAAUJ,EAAM,IAE9CK,GAAY,KACVL,EAAO,CAAEC,OAAQ,CAAEC,WAAYC,WAAWD,cAC/BC,WAAAC,iBAAiB,SAAUJ,EAAM,IAE9CM,GAAY,KACCH,WAAAI,oBAAoB,SAAUP,EAAM,IAEjDQ,GAAc,KACDL,WAAAI,oBAAoB,SAAUP,EAAM,IAI3C,MAAAA,KAAUS,IACV,IAAAC,EAASD,EAAER,OAAkBC,WACzB,SAAEQ,GACR,KAAKA,EAAQ,IACXC,EAAWC,MAAQ,KACnB,MACF,KAAKF,GAAS,KAAOA,EAAQ,IAC3BC,EAAWC,MAAQ,KACnB,MACF,KAAKF,GAAS,KAAOA,EAAQ,KAC3BC,EAAWC,MAAQ,KACnB,MACF,KAAKF,GAAS,MAAQA,EAAQ,KAC5BC,EAAWC,MAAQ,KACnB,MACF,KAAKF,GAAS,KACZC,EAAWC,MAAQ,KACnB,GAjBS,UAsBPC,EAAA,MAAOC,MAAMC,QAAQrB,EAAMsB,KAAOtB,EAAMsB,IAAI,GAAKtB,EAAMsB,KAG3D,IAAAL,EAAaM,EAAgB,MACjCJ,EAAQ,aAAcF,GAGhB,MAAAO,EAAcD,GAAM,GAC1BJ,EAAQ,oBAAqBK,GAGvB,MAAAC,EAAWC,GAAS,IACE,iBAAf1B,EAAM2B,KAA0B3B,EAAM2B,KAAKV,EAAWC,QAAUlB,EAAM2B,KAC1E3B,EAAM2B,OAEfR,EAAQ,OAAQM,GAGV,MAAAG,EAAQC,IAAWC,UAEnB1B,EAAkB2B,GAAA,KACtB,IAAIC,EAA6B,GAC7BC,EAAuB,KACrBL,EAAAM,SAASC,IAEY,iBAAdA,EAAKC,MAAwC,aAAnBD,EAAKC,KAAKC,WAA8C,IAAvBF,EAAKnC,OAAOiC,SAA+BA,EAAAE,GAExF,iBAAdA,EAAKC,MAAqBhB,MAAMC,QAAQc,EAAKG,WAAWN,EAAOO,QAAQJ,EAAKG,SAAQ,IAIjG,IAAIE,EAAa,EACbP,IACFO,GACIP,EAAiBjC,MAAOiB,EAAWC,QAAQuB,MAASR,EAAiBjC,OAAOyC,MAAQ,IACpFR,EAAiBjC,MAAOiB,EAAWC,QAAQwB,QAAWT,EAAiBjC,OAAO0C,QAAU,IAE1F,IACF,IAAIC,GAAO,EACXX,EAAOY,QAAO,CAACC,EAAO,EAAGC,EAASC,KAIhC,GAHAF,IACIC,EAAmB9C,MAAOiB,EAAWC,QAAQuB,MAASK,EAAmB9C,OAAOyC,MAAQ,IACxFK,EAAmB9C,MAAOiB,EAAWC,QAAQwB,QAAWI,EAAmB9C,OAAO0C,QAAU,GAC5FM,OAAOH,GAAQ7C,EAAMiD,cAAgBxB,EAASP,MAAQsB,EAGlD,MAFNhB,EAAYN,MAAQ6B,EACbJ,GAAA,EACD,UAED,OAAAE,CAAA,GACN,GACEF,IAAMnB,EAAYN,OAAQ,SACxBH,GAAG,IA/BI,aAqClBmC,GACE,IAAMjC,EAAWC,QACjB,KACMlB,EAAMG,WAAqBC,GAAA,IAKnC8C,GACE,IAAMlD,EAAMG,YACXe,IACK,GAAAA,SAAcd,IAClBoB,EAAYN,OAAQ,CAAA,IAKlB,MAAAiC,EAAUzB,GAAS,IACE,iBAAd1B,EAAMsB,IAAyB,GAAGtB,EAAMsB,QAC/CF,MAAMC,QAAQrB,EAAMsB,KAAa,GAAGtB,EAAMsB,IAAI,QAAQtB,EAAMsB,IAAI,OAC7D,UAIH8B,EAAQ1B,GAAS,KACd,CACL2B,QAAS,OACTF,QAASA,EAAQjC,MACjBoC,oBAAqB,UAAU7B,EAASP,oCAI/BqC,EAAA,CAAEtC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import{defineComponent as e,computed as l,resolveComponent as i,createElementBlock as n,openBlock as t,createCommentVNode as o,createBlock as a,Fragment as r,renderList as u,withCtx as d,createTextVNode as s,toDisplayString as m,createVNode as c,unref as p,withDirectives as f,resolveDynamicComponent as v,vShow as y}from"vue";import{ArrowDown as b}from"@element-plus/icons-vue";import{useLocalStorage as k}from"@vueuse/core";var h=Object.defineProperty,C=(e,l)=>h(e,"name",{value:l,configurable:!0});const g={class:"operation-btns",style:{display:"flex","align-items":"center","justify-content":"center"}};var w=e({__name:"index",props:{btns:{type:Array,required:!1},maxCount:{type:Number,required:!1,default:3},moreText:{type:String,required:!1,default:"更多"},minWidth:{type:String,required:!1,default:"120px"},row:{required:!1},index:{type:Number,required:!1}},emits:["btnClick"],setup(e,{emit:h}){const w=e,x=h,_=k("znyg",{dictMap:{},privileges:[]}),z=l((()=>w.row||{})),q=l((()=>w.index)),B=l((()=>(w.btns||[]).filter((e=>T(e))))),S=l((()=>B.value.slice(0,w.maxCount))),j=l((()=>B.value.slice(w.maxCount))),N=l((()=>j.value.length>0)),T=C((e=>{let l=!0;if(void 0!==e.show&&null!==e.show&&("boolean"==typeof e.show?l=e.show:"function"==typeof e.show&&(l=e.show(z.value))),!l)return!1;if(e.privilege){if(!(_.value?.privileges||[]).some((l=>l.code===e.privilege)))return!1}return!0}),"shouldShowBtn"),W=C((e=>"function"==typeof e.label?e.label(z.value):e.label),"getBtnLabel"),A=C((e=>{e.onClick&&"function"==typeof e.onClick&&e.onClick(z.value,e,q.value),x("btnClick",e.name,z.value,e,q.value)}),"handleBtnClick"),D=C((e=>{e.onClick&&"function"==typeof e.onClick&&e.onClick(z.value,e,q.value),x("btnClick",e.name,z.value,e,q.value)}),"handleDropdownCommand");return(e,l)=>{const k=i("el-button"),h=i("el-icon"),x=i("el-dropdown-item"),_=i("el-dropdown-menu"),z=i("el-dropdown");return t(),n("div",g,[o(" 直接显示的按钮 "),(t(!0),n(r,null,u(S.value,((e,l)=>(t(),n(r,{key:e.name},[T(e)?(t(),a(k,{key:0,type:e.type||"primary",size:e.size||"small",disabled:e.disabled,icon:e.icon,link:"",onClick:C((l=>A(e)),"onClick")},{default:d((()=>[s(m(W(e)),1
|
|
2
|
+
/* TEXT */)])),_:2
|
|
3
|
+
/* DYNAMIC */},1032,["type","size","disabled","icon","onClick"])):o("v-if",!0)],64
|
|
4
|
+
/* STABLE_FRAGMENT */)))),128
|
|
5
|
+
/* KEYED_FRAGMENT */)),o(" 更多按钮下拉菜单 "),N.value?(t(),a(z,{key:0,style:{"margin-left":"8px"},trigger:"hover","min-width":w.minWidth||"120px",onCommand:D},{dropdown:d((()=>[c(_,null,{default:d((()=>[(t(!0),n(r,null,u(j.value,(e=>f((t(),a(x,{key:e.name,command:e,disabled:e.disabled},{default:d((()=>[e.icon?(t(),a(h,{key:0,style:{"margin-right":"5px"}},{default:d((()=>[(t(),a(v(e.icon)))])),_:2
|
|
6
|
+
/* DYNAMIC */},1024
|
|
7
|
+
/* DYNAMIC_SLOTS */)):o("v-if",!0),s(" "+m(W(e)),1
|
|
8
|
+
/* TEXT */)])),_:2
|
|
9
|
+
/* DYNAMIC */},1032,["command","disabled"])),[[y,T(e)]]))),128
|
|
10
|
+
/* KEYED_FRAGMENT */))])),_:1
|
|
11
|
+
/* STABLE */})])),default:d((()=>[c(k,{type:"primary",size:w.size||"small",link:""},{default:d((()=>[s(m(w.moreText||"更多")+" ",1
|
|
12
|
+
/* TEXT */),c(h,{class:"el-icon--right"},{default:d((()=>[c(p(b))])),_:1
|
|
13
|
+
/* STABLE */})])),_:1
|
|
14
|
+
/* STABLE */},8,["size"])])),_:1
|
|
15
|
+
/* STABLE */},8,["min-width"])):o("v-if",!0)])}}});export{w as default};
|
|
16
|
+
//# sourceMappingURL=index.vue2.mjs.map
|