znyg-frontend-common 1.1.14 → 1.1.16
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/components/ColSetting.vue2.mjs +1 -1
- package/es/components/znTable/src/components/ColSetting.vue2.mjs.map +1 -1
- package/es/hooks/useDrawerV2/src/index.mjs +1 -1
- package/es/hooks/useDrawerV2/src/index.mjs.map +1 -1
- package/es/index.mjs +1 -1
- package/es/index.mjs.map +1 -1
- package/lib/components/znTable/src/components/ColSetting.vue2.js +1 -1
- package/lib/components/znTable/src/components/ColSetting.vue2.js.map +1 -1
- package/lib/hooks/useDrawerV2/src/index.js +1 -1
- package/lib/hooks/useDrawerV2/src/index.js.map +1 -1
- 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,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(
|
|
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
2
|
// 禁用原生HTML5拖拽
|
|
3
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
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColSetting.vue2.mjs","sources":["../../../../../../../packages/components/znTable/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 let filterData=newVal.filter(item=>item.isShow)\n try {\n localColSetting.value = JSON.parse(JSON.stringify(filterData))\n } catch (error) {\n console.warn('更新本地列设置时出错:', error)\n localColSetting.value = [...filterData]\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","filterData","filter","item","isShow","nextTick","immediate","deep","initSortable","tbody","$el","querySelector","destroy","Sortable","create","handle","animation","ghostClass","chosenClass","dragClass","forceFallback","fallbackTolerance","dragoverBubble","removeCloneOnHide","onStart","evt","from","onEnd","oldIndex","newIndex","length","newData","movedItem","splice","openColSetting","closeColSetting","handleSwitchChange","onUnmounted","__expose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColSetting.vue2.mjs","sources":["../../../../../../../packages/components/znTable/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":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ref as e,nextTick as o,render as r,markRaw as n,reactive as t,unref as l,createVNode as c,mergeProps as s,Fragment as a,h as d,getCurrentInstance as i}from"vue";import{ElConfigProvider as p,ElDrawer as f,ElButton as u}from"element-plus";var w=Object.defineProperty,h=(e,o)=>w(e,"name",{value:o,configurable:!0});const m="zn-drawer-v2";let v,y,g=0;const C=new Map,L=new Map,I=[],D=new Map,k=[],x=e([]),b=new Set,R=h((()=>{const e=document.querySelector(":not(:root):fullscreen");return e||document.querySelector("body")}),"getFather"),O=h((e=>{o((()=>{const o=document.querySelector(`#${m}-${e} .el-drawer__body`);o&&(o.scrollTop=0);const r=document.querySelectorAll(`#${m}-${e} .el-scrollbar__wrap`);if(r&&r.length)for(let e=0;e<r.length;e++){const o=r[e];o&&(o.scrollTop=0)}}))}),"resetDrawerScroll"),$=h((e=>{if(D.has(e)){const o=D.get(e);if(void 0!==o)return o}if(I.length>0){const o=I.shift();if(void 0!==o)return D.set(e,o),o}const o=x.value.length;return x.value.push(!1),D.set(e,o),o}),"getDrawerIndex"),z=h((e=>{if(D.has(e)){const o=D.get(e);void 0!==o&&(I.push(o),D.delete(e))}}),"releaseDrawerIndex"),M=h((()=>{if(0!==k.length)return k[k.length-1]}),"getTopDrawerId"),E=h((()=>{[...k].forEach((e=>{_(e)})),k.length=0}),"closeAllDrawers"),_=h((e=>{const o=void 0!==e?e:M();if(void 0===o)return;if(b.has(o))return;b.add(o);const n=D.get(o);void 0!==n&&(x.value[n]=!1);const t=document.querySelector(`#${m}-${o}`);if(!t){const e=k.indexOf(o);return e>-1&&k.splice(e,1),void b.delete(o)}const l=C.get(o),c=k.indexOf(o);if(c>-1&&k.splice(c,1),l&&l.props&&"function"==typeof l.props.onDrawerClose)try{l.props.onDrawerClose()}catch(e){console.error("Error in onDrawerClose callback:",e)}const s=!l||!1!==l.destoryWhenClosed;if(!s&&l&&l.componentInstance&&l.props.beforeDrawerClose&&"function"==typeof l.props.beforeDrawerClose)try{l.props.beforeDrawerClose(l.componentInstance)}catch(e){console.error("Error in beforeDrawerClose callback:",e)}setTimeout((()=>{if(!s&&l&&l.props.afterDrawerClose&&"function"==typeof l.props.afterDrawerClose)try{l.props.afterDrawerClose(l.componentInstance)}catch(e){console.error("Error in afterDrawerClose callback:",e)}s?(z(o),t&&t.parentNode&&(r(null,t),R().removeChild(t),C.delete(o),L.delete(o),document.body.classList.remove("el-popup-parent--hidden"),document.body.style.width="")):void 0!==n&&(x.value[n]=!1),b.delete(o)}),500)}),"closeDrawer"),S=h((async(e,o)=>{_(o)}),"handleClose"),W=h((async(o,r,n)=>{if(o?.onConfirm&&void 0!==r){const t=n||e(!1),l=C.get(r),c=l?.componentInstance;o.onConfirm((()=>_(r)),t,c)}else void 0!==r&&_(r)}),"handleConfirm"),q=h((o=>({componentRef:e(null),close:h((()=>_(o)),"close"),drawerId:o,getInstance:h((()=>new Promise((e=>{const r=h((()=>{const n=C.get(o);n&&n.componentInstance?e(n.componentInstance):setTimeout(r,50)}),"checkInstance");r()}))),"getInstance")})),"createDrawerRef"),T=h(((i,w,I)=>{const z={...i,destoryWhenClosed:!1!==i.destoryWhenClosed};if(!1===z.destoryWhenClosed&&!z.drawerId)throw console.error("当destoryWhenClosed为false时,drawerId必传"),new Error("当destoryWhenClosed为false时,drawerId必传");if(z.drawerId)for(const[e,r]of C.entries())if(r.drawerId===z.drawerId){b.has(e)&&b.delete(e);const l=D.get(e);void 0!==l&&(x.value[l]=!0);const c=k.indexOf(e);c>-1&&k.splice(c,1),k.push(e);const s=document.querySelector(`#${m}-${e} .el-drawer__header .el-drawer__title`);s&&(s.textContent=z.title||"抽屉"),O(e);let a=L.get(e);if(a&&r.component===w){const e=I||{};Object.keys(a).forEach((e=>{a[e]=void 0})),Object.keys(e).forEach((o=>{a[o]=e[o]})),r.renderKey=(r.renderKey||0)+1}else{r.component=w;const o=n(w);r.component=o,a=t({...I||{}}),L.set(e,a),r.propsRef=a}return r.props=z,o((()=>{if(z.afterDrawerOpen&&"function"==typeof z.afterDrawerOpen){setTimeout(h((()=>{const o=C.get(e);if(o&&o.componentRef.value)try{z.afterDrawerOpen(o.componentRef.value)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),100)}O(e)})),{componentRef:r.componentRef,close:r.close||(()=>_(e)),drawerId:e,getInstance:r.getInstance}}const M=++g,E=e(!1);let T=null;const A=$(M);k.push(M);const j=t({...I||{}});L.set(M,j);const F=e(0),K=q(M),B=e(!1),P=h((()=>{const e=document.querySelector(`#${m}-${M} .${m}.el-drawer`);e&&e.classList.toggle("is-fullscreen"),E.value=!l(E)}),"toggleFull"),V=c(p,{namespace:"el",size:l(y)},{default:h((()=>[c(f,s({modelValue:x.value[A],title:"抽屉",size:"30%",onClose:h((()=>S(i,M)),"onClose")},z,{render:!0,headerRender:!0,footerRender:!0,class:m}),{default:h((()=>z.render?z.render():w?d(w,{...j,key:F.value,ref:h((e=>{e&&(T=e,K.componentRef.value=e)}),"ref")}):null),"default"),header:h((()=>z.headerRender?z.headerRender():c(a,null,[c("span",{class:".el-drawer__title"},[z.title]),!1!==z.fullscreenIcon&&(l(E)?c("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:h((()=>P()),"onClick")},[c("svg",{t:"1676740839036",class:"icon",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"2895","xmlns:xlink":"http://www.w3.org/1999/xlink",fill:"var(--el-color-info)"},[c("path",{d:"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z","p-id":"2896"},null)])]):c("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:h((()=>P()),"onClick")},[c("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",fill:"var(--el-color-info)"},[c("path",{d:"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"},null)])]))])),"header"),footer:h((()=>z.footerRender?z.footerRender((()=>_(M))):!1!==z.showFooter?c(a,null,[c(u,{onClick:h((()=>x.value[A]=!1),"onClick")},{default:h((()=>[z.closeLabel||"取 消"]),"default")}),c(u,{type:"primary",loading:B.value,onClick:h((()=>W(z,M,B)),"onClick")},{default:h((()=>[z.confirmLabel||"确 定"]),"default")})]):void 0),"footer")})]),"default")});V.appContext=v,V.children?.length&&(V.children[0].appContext=v);const N=document.createElement("div");return N.id=`${m}-${M}`,R().appendChild(N),r(V,N),o((()=>{x.value[A]=!0})),C.set(M,{props:z,propsRef:j,destoryWhenClosed:z.destoryWhenClosed,container:N,componentInstance:T,drawerId:z.drawerId,component:w,renderKey:F.value,componentRef:K.componentRef,getInstance:K.getInstance}),o((()=>{if(T){const e=C.get(M);e&&(e.componentInstance=T,K.componentRef.value=T)}if(z.afterDrawerOpen&&"function"==typeof z.afterDrawerOpen){setTimeout(h((()=>{if(T)try{z.afterDrawerOpen(T)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),50)}z.fullscreen&&P(),O(M)})),K}),"showDrawer"),A=h((e=>{const{appContext:o}=e||i()||{};return v=o,y="default",{open:T}}),"initDrawerV2");export{E as closeAllDrawers,_ as closeDrawer,A as initDrawerV2,T as showDrawer};
|
|
1
|
+
import{ref as e,nextTick as o,render as r,markRaw as n,reactive as t,unref as l,createVNode as c,mergeProps as s,Fragment as a,h as d,getCurrentInstance as i}from"vue";import{ElConfigProvider as p,ElDrawer as f,ElButton as u}from"element-plus";var w=Object.defineProperty,h=(e,o)=>w(e,"name",{value:o,configurable:!0});const m="zn-drawer-v2";let v,y,g=0;const C=new Map,L=new Map,I=[],D=new Map,k=[],x=e([]),b=new Set,R=h((()=>{const e=document.querySelector(":not(:root):fullscreen");return e||document.querySelector("body")}),"getFather"),O=h((e=>{o((()=>{const o=document.querySelector(`#${m}-${e} .el-drawer__body`);o&&(o.scrollTop=0);const r=document.querySelectorAll(`#${m}-${e} .el-scrollbar__wrap`);if(r&&r.length)for(let e=0;e<r.length;e++){const o=r[e];o&&(o.scrollTop=0)}}))}),"resetDrawerScroll"),$=h((e=>{if(D.has(e)){const o=D.get(e);if(void 0!==o)return o}if(I.length>0){const o=I.shift();if(void 0!==o)return D.set(e,o),o}const o=x.value.length;return x.value.push(!1),D.set(e,o),o}),"getDrawerIndex"),z=h((e=>{if(D.has(e)){const o=D.get(e);void 0!==o&&(I.push(o),D.delete(e))}}),"releaseDrawerIndex"),M=h((()=>{if(0!==k.length)return k[k.length-1]}),"getTopDrawerId"),E=h((()=>{[...k].forEach((e=>{_(e)})),k.length=0}),"closeAllDrawers"),_=h((e=>{const o=void 0!==e?e:M();if(void 0===o)return;if(b.has(o))return;b.add(o);const n=D.get(o);void 0!==n&&(x.value[n]=!1);const t=document.querySelector(`#${m}-${o}`);if(!t){const e=k.indexOf(o);return e>-1&&k.splice(e,1),void b.delete(o)}const l=C.get(o),c=k.indexOf(o);if(c>-1&&k.splice(c,1),l&&l.props&&"function"==typeof l.props.onDrawerClose)try{l.props.onDrawerClose()}catch(e){console.error("Error in onDrawerClose callback:",e)}const s=!l||!1!==l.destoryWhenClosed;if(!s&&l&&l.componentInstance&&l.props.beforeDrawerClose&&"function"==typeof l.props.beforeDrawerClose)try{l.props.beforeDrawerClose(l.componentInstance)}catch(e){console.error("Error in beforeDrawerClose callback:",e)}setTimeout((()=>{if(!s&&l&&l.props.afterDrawerClose&&"function"==typeof l.props.afterDrawerClose)try{l.props.afterDrawerClose(l.componentInstance)}catch(e){console.error("Error in afterDrawerClose callback:",e)}s?(z(o),t&&t.parentNode&&(r(null,t),R().removeChild(t),C.delete(o),L.delete(o),document.body.classList.remove("el-popup-parent--hidden"),document.body.style.width="")):void 0!==n&&(x.value[n]=!1),b.delete(o)}),500)}),"closeDrawer"),S=h((async(e,o)=>{_(o)}),"handleClose"),W=h((async(o,r,n)=>{if(o?.onConfirm&&void 0!==r){const t=n||e(!1),l=C.get(r),c=l?.componentRef?.value||l?.componentInstance;o.onConfirm((()=>_(r)),t,c)}else void 0!==r&&_(r)}),"handleConfirm"),q=h((o=>({componentRef:e(null),close:h((()=>_(o)),"close"),drawerId:o,getInstance:h((()=>new Promise((e=>{const r=h((()=>{const n=C.get(o);n&&n.componentInstance?e(n.componentInstance):setTimeout(r,50)}),"checkInstance");r()}))),"getInstance")})),"createDrawerRef"),T=h(((i,w,I)=>{const z={...i,destoryWhenClosed:!1!==i.destoryWhenClosed};if(!1===z.destoryWhenClosed&&!z.drawerId)throw console.error("当destoryWhenClosed为false时,drawerId必传"),new Error("当destoryWhenClosed为false时,drawerId必传");if(z.drawerId)for(const[e,r]of C.entries())if(r.drawerId===z.drawerId){b.has(e)&&b.delete(e);const l=D.get(e);void 0!==l&&(x.value[l]=!0);const c=k.indexOf(e);c>-1&&k.splice(c,1),k.push(e);const s=document.querySelector(`#${m}-${e} .el-drawer__header .el-drawer__title`);s&&(s.textContent=z.title||"抽屉"),O(e);let a=L.get(e);if(a&&r.component===w){const e=I||{};Object.keys(a).forEach((e=>{a[e]=void 0})),Object.keys(e).forEach((o=>{a[o]=e[o]})),r.renderKey=(r.renderKey||0)+1}else{r.component=w;const o=n(w);r.component=o,a=t({...I||{}}),L.set(e,a),r.propsRef=a}return r.props=z,o((()=>{if(z.afterDrawerOpen&&"function"==typeof z.afterDrawerOpen){setTimeout(h((()=>{const o=C.get(e);if(o&&o.componentRef.value)try{z.afterDrawerOpen(o.componentRef.value)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),100)}O(e)})),{componentRef:r.componentRef,close:r.close||(()=>_(e)),drawerId:e,getInstance:r.getInstance}}const M=++g,E=e(!1);let T=null;const A=$(M);k.push(M);const j=t({...I||{}});L.set(M,j);const F=e(0),K=q(M),B=e(!1),P=h((()=>{const e=document.querySelector(`#${m}-${M} .${m}.el-drawer`);e&&e.classList.toggle("is-fullscreen"),E.value=!l(E)}),"toggleFull"),V=c(p,{namespace:"el",size:l(y)},{default:h((()=>[c(f,s({modelValue:x.value[A],title:"抽屉",size:"30%",onClose:h((()=>S(i,M)),"onClose")},z,{render:!0,headerRender:!0,footerRender:!0,class:m}),{default:h((()=>z.render?z.render():w?d(w,{...j,key:F.value,ref:h((e=>{e&&(T=e,K.componentRef.value=e)}),"ref")}):null),"default"),header:h((()=>z.headerRender?z.headerRender():c(a,null,[c("span",{class:".el-drawer__title"},[z.title]),!1!==z.fullscreenIcon&&(l(E)?c("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:h((()=>P()),"onClick")},[c("svg",{t:"1676740839036",class:"icon",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"2895","xmlns:xlink":"http://www.w3.org/1999/xlink",fill:"var(--el-color-info)"},[c("path",{d:"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z","p-id":"2896"},null)])]):c("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:h((()=>P()),"onClick")},[c("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",fill:"var(--el-color-info)"},[c("path",{d:"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"},null)])]))])),"header"),footer:h((()=>z.footerRender?z.footerRender((()=>_(M))):!1!==z.showFooter?c(a,null,[c(u,{onClick:h((()=>x.value[A]=!1),"onClick")},{default:h((()=>[z.closeLabel||"取 消"]),"default")}),c(u,{type:"primary",loading:B.value,onClick:h((()=>W(z,M,B)),"onClick")},{default:h((()=>[z.confirmLabel||"确 定"]),"default")})]):void 0),"footer")})]),"default")});V.appContext=v,V.children?.length&&(V.children[0].appContext=v);const N=document.createElement("div");return N.id=`${m}-${M}`,R().appendChild(N),r(V,N),o((()=>{x.value[A]=!0})),C.set(M,{props:z,propsRef:j,destoryWhenClosed:z.destoryWhenClosed,container:N,componentInstance:T,drawerId:z.drawerId,component:w,renderKey:F.value,componentRef:K.componentRef,getInstance:K.getInstance}),o((()=>{if(T){const e=C.get(M);e&&(e.componentInstance=T,K.componentRef.value=T)}if(z.afterDrawerOpen&&"function"==typeof z.afterDrawerOpen){setTimeout(h((()=>{if(T)try{z.afterDrawerOpen(T)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),50)}z.fullscreen&&P(),O(M)})),K}),"showDrawer"),A=h((e=>{const{appContext:o}=e||i()||{};return v=o,y="default",{open:T}}),"initDrawerV2");export{E as closeAllDrawers,_ as closeDrawer,A as initDrawerV2,T as showDrawer};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/useDrawerV2/src/index.tsx"],"sourcesContent":["import {\n render,\n getCurrentInstance,\n unref,\n type Component,\n type ComponentInternalInstance,\n type VNode,\n type AppContext,\n nextTick,\n ref,\n Fragment,\n markRaw,\n reactive,\n h,\n type Ref\n} from 'vue'\nimport { ElDrawer, ElButton, type DrawerProps, ElConfigProvider } from 'element-plus'\n\nconst prefixClass = 'zn-drawer-v2'\n\nlet id = 0\n\nlet appContextConst: AppContext | undefined\nlet layoutSize: 'default' | 'small' | 'large' | undefined\n\n// 用于存储不销毁的抽屉实例\nconst drawerInstances = new Map<number, DrawerInstance>()\n\n// 用于管理组件的props更新\nconst propsStore = new Map<number, any>()\n\n// 存储可用的索引,用于复用已关闭的抽屉位置\nconst availableIndices: number[] = []\n\n// 存储抽屉索引与ID的映射关系\nconst drawerIndexMap = new Map<number, number>()\n\n// 抽屉栈:存储已打开的抽屉ID,按打开顺序(LIFO)\nconst drawerStack: number[] = []\n\n// 动态的抽屉显示列表,初始为10个,可根据需要扩展\nconst isShowList = ref<boolean[]>([])\n\n// 用于跟踪抽屉正在关闭的状态\nconst closingDrawers = new Set<number>()\n\nconst getFather = (): Element => {\n const fullScreen = document.querySelector(':not(:root):fullscreen')\n if (fullScreen) return fullScreen\n return document.querySelector('body') as HTMLBodyElement\n}\n\n/**\n * 重置抽屉的滚动条位置到顶部\n */\nconst resetDrawerScroll = (id: number) => {\n nextTick(() => {\n const drawerEl = document.querySelector(`#${prefixClass}-${id} .el-drawer__body`)\n if (drawerEl) {\n drawerEl.scrollTop = 0\n }\n\n // 同时处理可能存在的el-scrollbar元素\n const scrollbars = document.querySelectorAll(`#${prefixClass}-${id} .el-scrollbar__wrap`)\n if (scrollbars && scrollbars.length) {\n for (let i = 0; i < scrollbars.length; i++) {\n const scrollbar = scrollbars[i] as HTMLElement\n if (scrollbar) {\n scrollbar.scrollTop = 0\n }\n }\n }\n })\n}\n\nexport interface ZnDrawerProps extends Partial<DrawerProps> {\n /** 内容区渲染 TSX */\n render?: () => VNode\n /** 顶部渲染 TSX */\n headerRender?: () => VNode\n /** 底部渲染 TSX */\n footerRender?: (closeDrawer: () => void) => VNode\n /** 是否渲染顶部 */\n showFooter?: boolean\n /** 确认按钮点击事件 */\n onConfirm?: (closeDrawer: () => void, loading: Ref<boolean>, instance?: any) => any\n /** 关闭按钮点击事件 */\n onDrawerClose?: () => void\n /** 确认按钮文字,默认 确认 */\n confirmLabel?: string\n /** 关闭按钮文字,默认 关闭 */\n closeLabel?: string\n /** 是否默认全屏,默认 false */\n fullscreen?: boolean\n /** 是否渲染全屏图标,默认 true */\n fullscreenIcon?: boolean\n /** 是否在关闭时销毁组件,默认 true */\n destoryWhenClosed?: boolean\n /** 抽屉唯一标识,当destoryWhenClosed为false时必传 */\n drawerId?: string | number\n /** 组件卸载前调用的方法,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n beforeDrawerClose?: (instance: any) => void\n /** 关闭动画结束后调用的方法,500ms后执行,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n afterDrawerClose?: (instance: any) => void\n /** 抽屉打开后调用的方法,接收组件实例作为参数 */\n afterDrawerOpen?: (instance: any) => void\n}\n\n/**\n * 抽屉引用对象\n */\nexport interface DrawerRef {\n /** 组件实例的响应式引用 */\n componentRef: Ref<any>\n /** 关闭抽屉的方法 */\n close: () => void\n /** 抽屉的唯一ID */\n drawerId: number\n /** 异步获取组件实例的方法 */\n getInstance: () => Promise<any>\n}\n\n/**\n * 获取用于显示抽屉的索引\n * @param drawerId 抽屉ID\n * @returns 分配的索引\n */\nconst getDrawerIndex = (drawerId: number): number => {\n // 如果已经有映射关系,直接返回\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n return index\n }\n }\n\n // 如果有可用索引,使用第一个\n if (availableIndices.length > 0) {\n const index = availableIndices.shift()\n if (index !== undefined) {\n drawerIndexMap.set(drawerId, index)\n return index\n }\n }\n\n // 如果没有可用索引,扩展isShowList数组并使用新增的索引\n const newIndex = isShowList.value.length\n isShowList.value.push(false) // 初始为false,由showDrawer控制显示\n drawerIndexMap.set(drawerId, newIndex)\n return newIndex\n}\n\n/**\n * 释放抽屉索引,使其可供后续抽屉复用\n * @param drawerId 抽屉ID\n */\nconst releaseDrawerIndex = (drawerId: number): void => {\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n // 将该索引标记为可用\n availableIndices.push(index)\n // 清除映射关系\n drawerIndexMap.delete(drawerId)\n }\n }\n}\n\n/**\n * 获取栈顶抽屉ID(最后打开的)\n * @returns 栈顶抽屉ID,如果没有则返回undefined\n */\nconst getTopDrawerId = (): number | undefined => {\n if (drawerStack.length === 0) {\n return undefined\n }\n return drawerStack[drawerStack.length - 1]\n}\n\n/**\n * 关闭所有打开的抽屉\n */\nexport const closeAllDrawers = () => {\n // 复制当前栈,避免在遍历过程中修改\n const drawersToClose = [...drawerStack]\n\n drawersToClose.forEach((drawerId) => {\n closeDrawer(drawerId)\n })\n\n // 清空栈\n drawerStack.length = 0\n}\n\n/**\n * 关闭抽屉(支持栈管理)\n * 如果指定了ID,则关闭对应ID的抽屉\n * 如果未指定ID,则关闭栈顶的抽屉(最后打开的)\n * @param targetId 指定要关闭的抽屉ID,如不传则关闭栈顶抽屉\n */\nexport const closeDrawer = (targetId?: number) => {\n // 确定要关闭的抽屉ID\n const currentId = targetId !== undefined ? targetId : getTopDrawerId()\n\n // 如果没有可关闭的抽屉,直接返回\n if (currentId === undefined) return\n\n // 防止重复关闭\n if (closingDrawers.has(currentId)) return\n\n closingDrawers.add(currentId)\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(currentId)\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n\n const vm = document.querySelector(`#${prefixClass}-${currentId}`) as HTMLElement\n if (!vm) {\n // 如果DOM元素不存在,立即清理状态\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n closingDrawers.delete(currentId)\n return\n }\n\n // 获取该抽屉是否需要在关闭时销毁\n const instance = drawerInstances.get(currentId)\n\n // 立即从抽屉栈中移除,避免快速关闭时的状态混乱\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n\n // 调用onDrawerClose回调\n if (instance && instance.props && typeof instance.props.onDrawerClose === 'function') {\n try {\n instance.props.onDrawerClose()\n } catch (err) {\n console.error('Error in onDrawerClose callback:', err)\n }\n }\n\n // 判断是否需要销毁组件\n const shouldDestroy = instance ? instance.destoryWhenClosed !== false : true\n\n // 只在不销毁的情况下调用关闭前的回调\n if (!shouldDestroy && instance && instance.componentInstance) {\n if (instance.props.beforeDrawerClose && typeof instance.props.beforeDrawerClose === 'function') {\n try {\n instance.props.beforeDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in beforeDrawerClose callback:', err)\n }\n }\n }\n\n // 关闭动画结束后执行的逻辑\n setTimeout(() => {\n // 只在不销毁的情况下执行afterDrawerClose回调\n if (!shouldDestroy && instance && instance.props.afterDrawerClose && typeof instance.props.afterDrawerClose === 'function') {\n try {\n instance.props.afterDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerClose callback:', err)\n }\n }\n\n if (shouldDestroy) {\n // 释放抽屉索引\n releaseDrawerIndex(currentId)\n\n if (vm && vm.parentNode) {\n render(null, vm)\n getFather().removeChild(vm)\n // 清除实例记录\n drawerInstances.delete(currentId)\n // 清除props存储\n propsStore.delete(currentId)\n document.body.classList.remove('el-popup-parent--hidden')\n document.body.style.width = ''\n }\n } else {\n // 不销毁的情况下,确保抽屉完全隐藏\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n }\n\n // 从关闭集合中移除\n closingDrawers.delete(currentId)\n }, 500)\n}\n\nconst handleClose = async (_: any, currentId?: number) => {\n closeDrawer(currentId)\n}\n\nconst handleConfirm = async (drawerProps?: ZnDrawerProps, currentId?: number, loading?: Ref<boolean>) => {\n if (drawerProps?.onConfirm && currentId !== undefined) {\n const loadingRef = loading || ref(false)\n // 获取组件实例\n const instance = drawerInstances.get(currentId)\n const componentInstance = instance?.componentInstance\n drawerProps.onConfirm(() => closeDrawer(currentId), loadingRef, componentInstance)\n return\n }\n\n if (currentId !== undefined) {\n closeDrawer(currentId)\n }\n}\n\n// 修改存储的类型定义\ninterface DrawerInstance {\n props: ZnDrawerProps\n propsRef: Record<string, any>\n destoryWhenClosed: boolean | undefined\n container: HTMLDivElement\n componentInstance: any\n drawerId?: string | number\n component?: Component\n renderKey: number\n // 组件引用相关\n componentRef: Ref<any>\n getInstance: () => Promise<any>\n close?: () => void\n}\n\n/**\n * 创建抽屉引用对象\n */\nconst createDrawerRef = (drawerId: number): DrawerRef => {\n const componentRef = ref<any>(null)\n\n return {\n componentRef,\n close: () => closeDrawer(drawerId),\n drawerId,\n getInstance: () => {\n return new Promise((resolve) => {\n const checkInstance = () => {\n const instance = drawerInstances.get(drawerId)\n if (instance && instance.componentInstance) {\n resolve(instance.componentInstance)\n } else {\n // 如果实例还没准备好,继续等待\n setTimeout(checkInstance, 50)\n }\n }\n checkInstance()\n })\n }\n }\n}\n\n/**\n * 内容渲染方式有两种\n * 方式 1:在第一个参数里写 render,即可实现 el-drawer 的内容渲染\n * 方式 2:第二个参数为组件,第三个参数为组件的 props\n *\n * 在第一个参数里写 headerRender 和 footerRender,可以自定义 el-drawer 的 header 和 footer\n */\nexport const showDrawer = (drawerProps: ZnDrawerProps, component?: Component, componentsProps?: any): DrawerRef => {\n // 设置destoryWhenClosed的默认值为true\n const props = { ...drawerProps, destoryWhenClosed: drawerProps.destoryWhenClosed !== false }\n\n // 验证参数\n if (props.destoryWhenClosed === false && !props.drawerId) {\n console.error('当destoryWhenClosed为false时,drawerId必传')\n throw new Error('当destoryWhenClosed为false时,drawerId必传')\n }\n\n // 如果有drawerId,先检查是否已存在该抽屉\n if (props.drawerId) {\n // 查找是否有对应drawerId的抽屉实例\n for (const [existingId, instance] of drawerInstances.entries()) {\n if (instance.drawerId === props.drawerId) {\n // 如果抽屉正在关闭中,先从关闭集合中移除\n if (closingDrawers.has(existingId)) {\n closingDrawers.delete(existingId)\n }\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(existingId)\n if (drawerIndex !== undefined) {\n // 将抽屉显示出来\n isShowList.value[drawerIndex] = true\n }\n\n // 更新栈顺序,移到栈顶(表示最新打开)\n const index = drawerStack.indexOf(existingId)\n if (index > -1) {\n drawerStack.splice(index, 1)\n }\n drawerStack.push(existingId)\n\n // 更新抽屉标题和配置\n const drawerEl = document.querySelector(`#${prefixClass}-${existingId} .el-drawer__header .el-drawer__title`)\n if (drawerEl) {\n drawerEl.textContent = props.title || '抽屉'\n }\n\n // 重置滚动条位置到顶部\n resetDrawerScroll(existingId)\n\n // 获取对应的props响应式对象\n let propsRef = propsStore.get(existingId)\n // 如果没有或组件已变化,则创建新的\n if (!propsRef || instance.component !== component) {\n instance.component = component\n\n // 标记组件为非响应式,避免不必要的深层响应式转换\n const rawComponent = markRaw(component)\n instance.component = rawComponent\n\n // 创建一个深度响应式的props容器\n propsRef = reactive({ ...(componentsProps || {}) })\n propsStore.set(existingId, propsRef)\n\n // 设置到实例中,以便后续引用\n instance.propsRef = propsRef\n } else {\n // 更新现有的props引用\n const newProps = componentsProps || {}\n // 先清空对象\n Object.keys(propsRef).forEach((key) => {\n propsRef[key] = undefined\n })\n // 然后添加新属性\n Object.keys(newProps).forEach((key) => {\n propsRef[key] = newProps[key]\n })\n\n // 增加renderKey强制组件重新渲染\n instance.renderKey = (instance.renderKey || 0) + 1\n }\n\n // 更新实例中的props属性\n instance.props = props\n\n // 执行afterDrawerOpen回调\n nextTick(() => {\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n // 重新获取最新的组件实例\n const updatedInstance = drawerInstances.get(existingId)\n if (updatedInstance && updatedInstance.componentRef.value) {\n try {\n props.afterDrawerOpen(updatedInstance.componentRef.value)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n // 延迟执行,确保组件已经挂载\n setTimeout(checkAndCallAfterOpen, 100)\n }\n\n // 确保滚动条重置\n resetDrawerScroll(existingId)\n })\n\n // 返回现有的 DrawerRef\n return {\n componentRef: instance.componentRef,\n close: instance.close || (() => closeDrawer(existingId)),\n drawerId: existingId,\n getInstance: instance.getInstance\n }\n }\n }\n }\n\n const currentId = ++id\n const isFullscreen = ref(false)\n let componentInstance: any = null\n // 为新抽屉分配索引\n const drawerIndex = getDrawerIndex(currentId)\n\n // 添加到抽屉栈中\n drawerStack.push(currentId)\n\n // 创建一个响应式引用\n const propsRef = reactive({ ...(componentsProps || {}) })\n // 存储到全局Map中\n propsStore.set(currentId, propsRef)\n\n // 创建一个渲染key\n const renderKey = ref(0)\n\n // 创建 DrawerRef 对象\n const drawerRef = createDrawerRef(currentId)\n\n // 创建确认按钮的loading状态\n const confirmLoading = ref(false)\n\n const toggleFull = () => {\n const elDrawerEl = document.querySelector(`${`#${prefixClass}-${currentId}`} .${prefixClass}.el-drawer`) as HTMLElement\n if (elDrawerEl) elDrawerEl.classList.toggle('is-fullscreen')\n isFullscreen.value = !unref(isFullscreen)\n }\n\n const vm = (\n <ElConfigProvider namespace=\"el\" size={unref(layoutSize)}>\n <ElDrawer\n modelValue={isShowList.value[drawerIndex]}\n title=\"抽屉\"\n size=\"30%\"\n onClose={() => handleClose(drawerProps, currentId)}\n {...props}\n render\n headerRender\n footerRender\n class={prefixClass}>\n {{\n default: () => {\n if (props.render) return props.render()\n\n // 使用h函数创建组件,确保props传递的响应式\n if (component) {\n return h(component, {\n ...propsRef,\n key: renderKey.value,\n ref: (el: any) => {\n if (el) {\n componentInstance = el\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = el\n }\n }\n })\n }\n return null\n },\n header: () => {\n if (props.headerRender) return props.headerRender()\n return (\n <Fragment>\n <span class={`.el-drawer__title`}>{props.title}</span>\n {props.fullscreenIcon !== false &&\n (unref(isFullscreen) ? (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg\n t=\"1676740839036\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2895\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n fill=\"var(--el-color-info)\">\n <path\n d=\"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z\"\n p-id=\"2896\"></path>\n </svg>\n </div>\n ) : (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg class=\"icon\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"var(--el-color-info)\">\n <path d=\"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z\" />\n </svg>\n </div>\n ))}\n </Fragment>\n )\n },\n footer: () => {\n if (props.footerRender) return props.footerRender(() => closeDrawer(currentId))\n if (props.showFooter === false) return\n return (\n <Fragment>\n <ElButton onClick={() => (isShowList.value[drawerIndex] = false)}>{props.closeLabel || '取 消'}</ElButton>\n <ElButton type=\"primary\" loading={confirmLoading.value} onClick={() => handleConfirm(props, currentId, confirmLoading)}>\n {props.confirmLabel || '确 定'}\n </ElButton>\n </Fragment>\n )\n }\n }}\n </ElDrawer>\n </ElConfigProvider>\n )\n\n vm.appContext = appContextConst\n vm.children?.length && (vm.children[0].appContext = appContextConst)\n\n const container = document.createElement('div')\n container.id = `${prefixClass}-${currentId}`\n getFather().appendChild(container)\n render(vm, container)\n\n // 立即显示抽屉\n nextTick(() => {\n isShowList.value[drawerIndex] = true\n })\n\n // 存储抽屉实例\n drawerInstances.set(currentId, {\n props,\n propsRef,\n destoryWhenClosed: props.destoryWhenClosed,\n container,\n componentInstance,\n drawerId: props.drawerId,\n component,\n renderKey: renderKey.value,\n componentRef: drawerRef.componentRef,\n getInstance: drawerRef.getInstance\n } as DrawerInstance)\n\n // 延迟更新componentInstance,确保组件已经挂载\n nextTick(() => {\n if (componentInstance) {\n const instance = drawerInstances.get(currentId)\n if (instance) {\n instance.componentInstance = componentInstance\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = componentInstance\n }\n }\n\n // 执行afterDrawerOpen回调\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n if (componentInstance) {\n try {\n props.afterDrawerOpen(componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n setTimeout(checkAndCallAfterOpen, 50)\n }\n\n if (props.fullscreen) toggleFull()\n\n // 确保滚动条重置\n resetDrawerScroll(currentId)\n })\n\n // 始终返回 DrawerRef,提供一致的API\n return drawerRef\n}\n\nexport const initDrawerV2 = (ctx?: ComponentInternalInstance) => {\n const { appContext } = ctx || getCurrentInstance() || {}\n appContextConst = appContext\n layoutSize = 'default'\n\n return { open: showDrawer }\n}\n"],"names":["prefixClass","appContextConst","layoutSize","id","drawerInstances","Map","propsStore","availableIndices","drawerIndexMap","drawerStack","isShowList","ref","closingDrawers","Set","getFather","__name","fullScreen","document","querySelector","resetDrawerScroll","nextTick","drawerEl","scrollTop","scrollbars","querySelectorAll","length","i","scrollbar","getDrawerIndex","drawerId","has","index","get","undefined","shift","set","newIndex","value","push","releaseDrawerIndex","delete","getTopDrawerId","closeAllDrawers","forEach","closeDrawer","targetId","currentId","add","drawerIndex","vm","stackIndex","indexOf","splice","instance","props","onDrawerClose","err","error","shouldDestroy","destoryWhenClosed","componentInstance","beforeDrawerClose","setTimeout","afterDrawerClose","parentNode","render","removeChild","body","classList","remove","style","width","handleClose","_","handleConfirm","async","drawerProps","loading","onConfirm","loadingRef","createDrawerRef","componentRef","close","getInstance","Promise","resolve","checkInstance","showDrawer","component","componentsProps","console","Error","existingId","entries","textContent","title","propsRef","newProps","Object","keys","key","renderKey","rawComponent","markRaw","reactive","afterDrawerOpen","updatedInstance","checkAndCallAfterOpen","isFullscreen","drawerRef","confirmLoading","toggleFull","elDrawerEl","toggle","unref","_createVNode","ElConfigProvider","namespace","size","default","ElDrawer","_mergeProps","modelValue","onClose","headerRender","footerRender","class","h","el","header","_Fragment","fullscreenIcon","onClick","t","viewBox","version","xmlns","fill","d","footer","showFooter","ElButton","closeLabel","type","confirmLabel","appContext","children","container","createElement","appendChild","fullscreen","initDrawerV2","ctx","getCurrentInstance","open"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/useDrawerV2/src/index.tsx"],"sourcesContent":["import {\n render,\n getCurrentInstance,\n unref,\n type Component,\n type ComponentInternalInstance,\n type VNode,\n type AppContext,\n nextTick,\n ref,\n Fragment,\n markRaw,\n reactive,\n h,\n type Ref\n} from 'vue'\nimport { ElDrawer, ElButton, type DrawerProps, ElConfigProvider } from 'element-plus'\n\nconst prefixClass = 'zn-drawer-v2'\n\nlet id = 0\n\nlet appContextConst: AppContext | undefined\nlet layoutSize: 'default' | 'small' | 'large' | undefined\n\n// 用于存储不销毁的抽屉实例\nconst drawerInstances = new Map<number, DrawerInstance>()\n\n// 用于管理组件的props更新\nconst propsStore = new Map<number, any>()\n\n// 存储可用的索引,用于复用已关闭的抽屉位置\nconst availableIndices: number[] = []\n\n// 存储抽屉索引与ID的映射关系\nconst drawerIndexMap = new Map<number, number>()\n\n// 抽屉栈:存储已打开的抽屉ID,按打开顺序(LIFO)\nconst drawerStack: number[] = []\n\n// 动态的抽屉显示列表,初始为10个,可根据需要扩展\nconst isShowList = ref<boolean[]>([])\n\n// 用于跟踪抽屉正在关闭的状态\nconst closingDrawers = new Set<number>()\n\nconst getFather = (): Element => {\n const fullScreen = document.querySelector(':not(:root):fullscreen')\n if (fullScreen) return fullScreen\n return document.querySelector('body') as HTMLBodyElement\n}\n\n/**\n * 重置抽屉的滚动条位置到顶部\n */\nconst resetDrawerScroll = (id: number) => {\n nextTick(() => {\n const drawerEl = document.querySelector(`#${prefixClass}-${id} .el-drawer__body`)\n if (drawerEl) {\n drawerEl.scrollTop = 0\n }\n\n // 同时处理可能存在的el-scrollbar元素\n const scrollbars = document.querySelectorAll(`#${prefixClass}-${id} .el-scrollbar__wrap`)\n if (scrollbars && scrollbars.length) {\n for (let i = 0; i < scrollbars.length; i++) {\n const scrollbar = scrollbars[i] as HTMLElement\n if (scrollbar) {\n scrollbar.scrollTop = 0\n }\n }\n }\n })\n}\n\nexport interface ZnDrawerProps extends Partial<DrawerProps> {\n /** 内容区渲染 TSX */\n render?: () => VNode\n /** 顶部渲染 TSX */\n headerRender?: () => VNode\n /** 底部渲染 TSX */\n footerRender?: (closeDrawer: () => void) => VNode\n /** 是否渲染顶部 */\n showFooter?: boolean\n /** 确认按钮点击事件 */\n onConfirm?: (closeDrawer: () => void, loading: Ref<boolean>, instance?: any) => any\n /** 关闭按钮点击事件 */\n onDrawerClose?: () => void\n /** 确认按钮文字,默认 确认 */\n confirmLabel?: string\n /** 关闭按钮文字,默认 关闭 */\n closeLabel?: string\n /** 是否默认全屏,默认 false */\n fullscreen?: boolean\n /** 是否渲染全屏图标,默认 true */\n fullscreenIcon?: boolean\n /** 是否在关闭时销毁组件,默认 true */\n destoryWhenClosed?: boolean\n /** 抽屉唯一标识,当destoryWhenClosed为false时必传 */\n drawerId?: string | number\n /** 组件卸载前调用的方法,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n beforeDrawerClose?: (instance: any) => void\n /** 关闭动画结束后调用的方法,500ms后执行,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n afterDrawerClose?: (instance: any) => void\n /** 抽屉打开后调用的方法,接收组件实例作为参数 */\n afterDrawerOpen?: (instance: any) => void\n}\n\n/**\n * 抽屉引用对象\n */\nexport interface DrawerRef {\n /** 组件实例的响应式引用 */\n componentRef: Ref<any>\n /** 关闭抽屉的方法 */\n close: () => void\n /** 抽屉的唯一ID */\n drawerId: number\n /** 异步获取组件实例的方法 */\n getInstance: () => Promise<any>\n}\n\n/**\n * 获取用于显示抽屉的索引\n * @param drawerId 抽屉ID\n * @returns 分配的索引\n */\nconst getDrawerIndex = (drawerId: number): number => {\n // 如果已经有映射关系,直接返回\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n return index\n }\n }\n\n // 如果有可用索引,使用第一个\n if (availableIndices.length > 0) {\n const index = availableIndices.shift()\n if (index !== undefined) {\n drawerIndexMap.set(drawerId, index)\n return index\n }\n }\n\n // 如果没有可用索引,扩展isShowList数组并使用新增的索引\n const newIndex = isShowList.value.length\n isShowList.value.push(false) // 初始为false,由showDrawer控制显示\n drawerIndexMap.set(drawerId, newIndex)\n return newIndex\n}\n\n/**\n * 释放抽屉索引,使其可供后续抽屉复用\n * @param drawerId 抽屉ID\n */\nconst releaseDrawerIndex = (drawerId: number): void => {\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n // 将该索引标记为可用\n availableIndices.push(index)\n // 清除映射关系\n drawerIndexMap.delete(drawerId)\n }\n }\n}\n\n/**\n * 获取栈顶抽屉ID(最后打开的)\n * @returns 栈顶抽屉ID,如果没有则返回undefined\n */\nconst getTopDrawerId = (): number | undefined => {\n if (drawerStack.length === 0) {\n return undefined\n }\n return drawerStack[drawerStack.length - 1]\n}\n\n/**\n * 关闭所有打开的抽屉\n */\nexport const closeAllDrawers = () => {\n // 复制当前栈,避免在遍历过程中修改\n const drawersToClose = [...drawerStack]\n\n drawersToClose.forEach((drawerId) => {\n closeDrawer(drawerId)\n })\n\n // 清空栈\n drawerStack.length = 0\n}\n\n/**\n * 关闭抽屉(支持栈管理)\n * 如果指定了ID,则关闭对应ID的抽屉\n * 如果未指定ID,则关闭栈顶的抽屉(最后打开的)\n * @param targetId 指定要关闭的抽屉ID,如不传则关闭栈顶抽屉\n */\nexport const closeDrawer = (targetId?: number) => {\n // 确定要关闭的抽屉ID\n const currentId = targetId !== undefined ? targetId : getTopDrawerId()\n\n // 如果没有可关闭的抽屉,直接返回\n if (currentId === undefined) return\n\n // 防止重复关闭\n if (closingDrawers.has(currentId)) return\n\n closingDrawers.add(currentId)\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(currentId)\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n\n const vm = document.querySelector(`#${prefixClass}-${currentId}`) as HTMLElement\n if (!vm) {\n // 如果DOM元素不存在,立即清理状态\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n closingDrawers.delete(currentId)\n return\n }\n\n // 获取该抽屉是否需要在关闭时销毁\n const instance = drawerInstances.get(currentId)\n\n // 立即从抽屉栈中移除,避免快速关闭时的状态混乱\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n\n // 调用onDrawerClose回调\n if (instance && instance.props && typeof instance.props.onDrawerClose === 'function') {\n try {\n instance.props.onDrawerClose()\n } catch (err) {\n console.error('Error in onDrawerClose callback:', err)\n }\n }\n\n // 判断是否需要销毁组件\n const shouldDestroy = instance ? instance.destoryWhenClosed !== false : true\n\n // 只在不销毁的情况下调用关闭前的回调\n if (!shouldDestroy && instance && instance.componentInstance) {\n if (instance.props.beforeDrawerClose && typeof instance.props.beforeDrawerClose === 'function') {\n try {\n instance.props.beforeDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in beforeDrawerClose callback:', err)\n }\n }\n }\n\n // 关闭动画结束后执行的逻辑\n setTimeout(() => {\n // 只在不销毁的情况下执行afterDrawerClose回调\n if (!shouldDestroy && instance && instance.props.afterDrawerClose && typeof instance.props.afterDrawerClose === 'function') {\n try {\n instance.props.afterDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerClose callback:', err)\n }\n }\n\n if (shouldDestroy) {\n // 释放抽屉索引\n releaseDrawerIndex(currentId)\n\n if (vm && vm.parentNode) {\n render(null, vm)\n getFather().removeChild(vm)\n // 清除实例记录\n drawerInstances.delete(currentId)\n // 清除props存储\n propsStore.delete(currentId)\n document.body.classList.remove('el-popup-parent--hidden')\n document.body.style.width = ''\n }\n } else {\n // 不销毁的情况下,确保抽屉完全隐藏\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n }\n\n // 从关闭集合中移除\n closingDrawers.delete(currentId)\n }, 500)\n}\n\nconst handleClose = async (_: any, currentId?: number) => {\n closeDrawer(currentId)\n}\n\nconst handleConfirm = async (drawerProps?: ZnDrawerProps, currentId?: number, loading?: Ref<boolean>) => {\n if (drawerProps?.onConfirm && currentId !== undefined) {\n const loadingRef = loading || ref(false)\n // 获取组件实例\n const instance = drawerInstances.get(currentId)\n // 优先使用 componentRef.value,因为它在 ref 回调中会立即更新\n // 如果 componentRef.value 为空,再尝试使用 componentInstance\n const componentInstance = instance?.componentRef?.value || instance?.componentInstance\n drawerProps.onConfirm(() => closeDrawer(currentId), loadingRef, componentInstance)\n return\n }\n\n if (currentId !== undefined) {\n closeDrawer(currentId)\n }\n}\n\n// 修改存储的类型定义\ninterface DrawerInstance {\n props: ZnDrawerProps\n propsRef: Record<string, any>\n destoryWhenClosed: boolean | undefined\n container: HTMLDivElement\n componentInstance: any\n drawerId?: string | number\n component?: Component\n renderKey: number\n // 组件引用相关\n componentRef: Ref<any>\n getInstance: () => Promise<any>\n close?: () => void\n}\n\n/**\n * 创建抽屉引用对象\n */\nconst createDrawerRef = (drawerId: number): DrawerRef => {\n const componentRef = ref<any>(null)\n\n return {\n componentRef,\n close: () => closeDrawer(drawerId),\n drawerId,\n getInstance: () => {\n return new Promise((resolve) => {\n const checkInstance = () => {\n const instance = drawerInstances.get(drawerId)\n if (instance && instance.componentInstance) {\n resolve(instance.componentInstance)\n } else {\n // 如果实例还没准备好,继续等待\n setTimeout(checkInstance, 50)\n }\n }\n checkInstance()\n })\n }\n }\n}\n\n/**\n * 内容渲染方式有两种\n * 方式 1:在第一个参数里写 render,即可实现 el-drawer 的内容渲染\n * 方式 2:第二个参数为组件,第三个参数为组件的 props\n *\n * 在第一个参数里写 headerRender 和 footerRender,可以自定义 el-drawer 的 header 和 footer\n */\nexport const showDrawer = (drawerProps: ZnDrawerProps, component?: Component, componentsProps?: any): DrawerRef => {\n // 设置destoryWhenClosed的默认值为true\n const props = { ...drawerProps, destoryWhenClosed: drawerProps.destoryWhenClosed !== false }\n\n // 验证参数\n if (props.destoryWhenClosed === false && !props.drawerId) {\n console.error('当destoryWhenClosed为false时,drawerId必传')\n throw new Error('当destoryWhenClosed为false时,drawerId必传')\n }\n\n // 如果有drawerId,先检查是否已存在该抽屉\n if (props.drawerId) {\n // 查找是否有对应drawerId的抽屉实例\n for (const [existingId, instance] of drawerInstances.entries()) {\n if (instance.drawerId === props.drawerId) {\n // 如果抽屉正在关闭中,先从关闭集合中移除\n if (closingDrawers.has(existingId)) {\n closingDrawers.delete(existingId)\n }\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(existingId)\n if (drawerIndex !== undefined) {\n // 将抽屉显示出来\n isShowList.value[drawerIndex] = true\n }\n\n // 更新栈顺序,移到栈顶(表示最新打开)\n const index = drawerStack.indexOf(existingId)\n if (index > -1) {\n drawerStack.splice(index, 1)\n }\n drawerStack.push(existingId)\n\n // 更新抽屉标题和配置\n const drawerEl = document.querySelector(`#${prefixClass}-${existingId} .el-drawer__header .el-drawer__title`)\n if (drawerEl) {\n drawerEl.textContent = props.title || '抽屉'\n }\n\n // 重置滚动条位置到顶部\n resetDrawerScroll(existingId)\n\n // 获取对应的props响应式对象\n let propsRef = propsStore.get(existingId)\n // 如果没有或组件已变化,则创建新的\n if (!propsRef || instance.component !== component) {\n instance.component = component\n\n // 标记组件为非响应式,避免不必要的深层响应式转换\n const rawComponent = markRaw(component)\n instance.component = rawComponent\n\n // 创建一个深度响应式的props容器\n propsRef = reactive({ ...(componentsProps || {}) })\n propsStore.set(existingId, propsRef)\n\n // 设置到实例中,以便后续引用\n instance.propsRef = propsRef\n } else {\n // 更新现有的props引用\n const newProps = componentsProps || {}\n // 先清空对象\n Object.keys(propsRef).forEach((key) => {\n propsRef[key] = undefined\n })\n // 然后添加新属性\n Object.keys(newProps).forEach((key) => {\n propsRef[key] = newProps[key]\n })\n\n // 增加renderKey强制组件重新渲染\n instance.renderKey = (instance.renderKey || 0) + 1\n }\n\n // 更新实例中的props属性\n instance.props = props\n\n // 执行afterDrawerOpen回调\n nextTick(() => {\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n // 重新获取最新的组件实例\n const updatedInstance = drawerInstances.get(existingId)\n if (updatedInstance && updatedInstance.componentRef.value) {\n try {\n props.afterDrawerOpen(updatedInstance.componentRef.value)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n // 延迟执行,确保组件已经挂载\n setTimeout(checkAndCallAfterOpen, 100)\n }\n\n // 确保滚动条重置\n resetDrawerScroll(existingId)\n })\n\n // 返回现有的 DrawerRef\n return {\n componentRef: instance.componentRef,\n close: instance.close || (() => closeDrawer(existingId)),\n drawerId: existingId,\n getInstance: instance.getInstance\n }\n }\n }\n }\n\n const currentId = ++id\n const isFullscreen = ref(false)\n let componentInstance: any = null\n // 为新抽屉分配索引\n const drawerIndex = getDrawerIndex(currentId)\n\n // 添加到抽屉栈中\n drawerStack.push(currentId)\n\n // 创建一个响应式引用\n const propsRef = reactive({ ...(componentsProps || {}) })\n // 存储到全局Map中\n propsStore.set(currentId, propsRef)\n\n // 创建一个渲染key\n const renderKey = ref(0)\n\n // 创建 DrawerRef 对象\n const drawerRef = createDrawerRef(currentId)\n\n // 创建确认按钮的loading状态\n const confirmLoading = ref(false)\n\n const toggleFull = () => {\n const elDrawerEl = document.querySelector(`${`#${prefixClass}-${currentId}`} .${prefixClass}.el-drawer`) as HTMLElement\n if (elDrawerEl) elDrawerEl.classList.toggle('is-fullscreen')\n isFullscreen.value = !unref(isFullscreen)\n }\n\n const vm = (\n <ElConfigProvider namespace=\"el\" size={unref(layoutSize)}>\n <ElDrawer\n modelValue={isShowList.value[drawerIndex]}\n title=\"抽屉\"\n size=\"30%\"\n onClose={() => handleClose(drawerProps, currentId)}\n {...props}\n render\n headerRender\n footerRender\n class={prefixClass}>\n {{\n default: () => {\n if (props.render) return props.render()\n\n // 使用h函数创建组件,确保props传递的响应式\n if (component) {\n return h(component, {\n ...propsRef,\n key: renderKey.value,\n ref: (el: any) => {\n if (el) {\n componentInstance = el\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = el\n }\n }\n })\n }\n return null\n },\n header: () => {\n if (props.headerRender) return props.headerRender()\n return (\n <Fragment>\n <span class={`.el-drawer__title`}>{props.title}</span>\n {props.fullscreenIcon !== false &&\n (unref(isFullscreen) ? (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg\n t=\"1676740839036\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2895\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n fill=\"var(--el-color-info)\">\n <path\n d=\"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z\"\n p-id=\"2896\"></path>\n </svg>\n </div>\n ) : (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg class=\"icon\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"var(--el-color-info)\">\n <path d=\"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z\" />\n </svg>\n </div>\n ))}\n </Fragment>\n )\n },\n footer: () => {\n if (props.footerRender) return props.footerRender(() => closeDrawer(currentId))\n if (props.showFooter === false) return\n return (\n <Fragment>\n <ElButton onClick={() => (isShowList.value[drawerIndex] = false)}>{props.closeLabel || '取 消'}</ElButton>\n <ElButton type=\"primary\" loading={confirmLoading.value} onClick={() => handleConfirm(props, currentId, confirmLoading)}>\n {props.confirmLabel || '确 定'}\n </ElButton>\n </Fragment>\n )\n }\n }}\n </ElDrawer>\n </ElConfigProvider>\n )\n\n vm.appContext = appContextConst\n vm.children?.length && (vm.children[0].appContext = appContextConst)\n\n const container = document.createElement('div')\n container.id = `${prefixClass}-${currentId}`\n getFather().appendChild(container)\n render(vm, container)\n\n // 立即显示抽屉\n nextTick(() => {\n isShowList.value[drawerIndex] = true\n })\n\n // 存储抽屉实例\n drawerInstances.set(currentId, {\n props,\n propsRef,\n destoryWhenClosed: props.destoryWhenClosed,\n container,\n componentInstance,\n drawerId: props.drawerId,\n component,\n renderKey: renderKey.value,\n componentRef: drawerRef.componentRef,\n getInstance: drawerRef.getInstance\n } as DrawerInstance)\n\n // 延迟更新componentInstance,确保组件已经挂载\n nextTick(() => {\n if (componentInstance) {\n const instance = drawerInstances.get(currentId)\n if (instance) {\n instance.componentInstance = componentInstance\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = componentInstance\n }\n }\n\n // 执行afterDrawerOpen回调\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n if (componentInstance) {\n try {\n props.afterDrawerOpen(componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n setTimeout(checkAndCallAfterOpen, 50)\n }\n\n if (props.fullscreen) toggleFull()\n\n // 确保滚动条重置\n resetDrawerScroll(currentId)\n })\n\n // 始终返回 DrawerRef,提供一致的API\n return drawerRef\n}\n\nexport const initDrawerV2 = (ctx?: ComponentInternalInstance) => {\n const { appContext } = ctx || getCurrentInstance() || {}\n appContextConst = appContext\n layoutSize = 'default'\n\n return { open: showDrawer }\n}\n"],"names":["prefixClass","appContextConst","layoutSize","id","drawerInstances","Map","propsStore","availableIndices","drawerIndexMap","drawerStack","isShowList","ref","closingDrawers","Set","getFather","__name","fullScreen","document","querySelector","resetDrawerScroll","nextTick","drawerEl","scrollTop","scrollbars","querySelectorAll","length","i","scrollbar","getDrawerIndex","drawerId","has","index","get","undefined","shift","set","newIndex","value","push","releaseDrawerIndex","delete","getTopDrawerId","closeAllDrawers","forEach","closeDrawer","targetId","currentId","add","drawerIndex","vm","stackIndex","indexOf","splice","instance","props","onDrawerClose","err","error","shouldDestroy","destoryWhenClosed","componentInstance","beforeDrawerClose","setTimeout","afterDrawerClose","parentNode","render","removeChild","body","classList","remove","style","width","handleClose","_","handleConfirm","async","drawerProps","loading","onConfirm","loadingRef","componentRef","createDrawerRef","close","getInstance","Promise","resolve","checkInstance","showDrawer","component","componentsProps","console","Error","existingId","entries","textContent","title","propsRef","newProps","Object","keys","key","renderKey","rawComponent","markRaw","reactive","afterDrawerOpen","updatedInstance","checkAndCallAfterOpen","isFullscreen","drawerRef","confirmLoading","toggleFull","elDrawerEl","toggle","unref","_createVNode","ElConfigProvider","namespace","size","default","ElDrawer","_mergeProps","modelValue","onClose","headerRender","footerRender","class","h","el","header","_Fragment","fullscreenIcon","onClick","t","viewBox","version","xmlns","fill","d","footer","showFooter","ElButton","closeLabel","type","confirmLabel","appContext","children","container","createElement","appendChild","fullscreen","initDrawerV2","ctx","getCurrentInstance","open"],"mappings":"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"}
|
package/es/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"./installer.mjs";export{install}from"./installer.mjs";import"./functions/index.mjs";import"./hooks/index.mjs";export{copyText,formatValue,treeListUtil,treeToList}from"./utils/index.mjs";import"./directives/index.mjs";import"./components/index.mjs";import e from"./functions/modules/log.mjs";export{useDialogV2}from"./hooks/useDialogV2/index.mjs";export{useDrawerV2}from"./hooks/useDrawerV2/index.mjs";export{closeAllDrawers}from"./hooks/useDrawerV2/src/index.mjs";export{closePopWindowById,closePopWindowByTag,getAllPopWindows,showPopWindow}from"./hooks/usePopWindow/src/index.mjs";export{usePopWindow}from"./hooks/usePopWindow/index.mjs";export{closePopWindowByIdV2,closePopWindowByTagV2,getAllPopWindowsV2,showPopWindowV2}from"./hooks/usePopWindowV2/src/index.mjs";export{usePopWindowV2}from"./hooks/usePopWindowV2/index.mjs";export{useDialog}from"./hooks/useDialog/index.mjs";export{default as ImageViewer}from"./hooks/useImageViewer/src/index.vue2.mjs";export{useImageViewer}from"./hooks/useImageViewer/index.mjs";export{useDrawer}from"./hooks/useDrawer/index.mjs";export{withInstall,withInstallDirectives}from"./utils/install.mjs";export{default as vCopy}from"./directives/modules/copy.mjs";export{default as vDrag}from"./directives/modules/drag.mjs";export{default as vAutoScroll}from"./directives/modules/autoScroll.mjs";export{default as vTooltip}from"./directives/modules/tooltip.mjs";export{default as vConfirm}from"./directives/modules/confirm.mjs";export{default as vCountTo}from"./directives/modules/countTo.mjs";export{default as utils}from"./functions/modules/uitls.mjs";import*as s from"./functions/modules/is.mjs";export{s as is};export{useZnForm}from"./components/znForm/src/hooks/useZnForm.mjs";export{useZnFormV2}from"./components/znFormV2/src/hooks/useZnFormV2.mjs";export{useZnSearch}from"./components/znSearch/src/hooks/useProSearch.mjs";export{ZnChart}from"./components/znChart/index.mjs";export{ZnCountTo}from"./components/znCountTo/index.mjs";export{default as ZnFormItem}from"./components/znForm/src/components/ZnFormItem.vue2.mjs";export{ZnForm}from"./components/znForm/index.mjs";export{batchExecute,camelCaseToHyphen,checkFeatureSupport,createUniqueId,debounce,delay,executeInIdle,getElementOffsetTop,getMemoryUsage,getObjectHash,isDeepEqual,isElementInViewport,isShallowEqual,throttle}from"./components/znFormV2/src/helper/index.mjs";export{default as ZnFormV2Item}from"./components/znFormV2/src/components/ZnFormV2Item.vue2.mjs";export{ZnFormV2}from"./components/znFormV2/index.mjs";export{ZnGrid,ZnGridItem}from"./components/znGrid/index.mjs";export{ZnNumberScroll}from"./components/znNumberScroll/index.mjs";export{ZnSearch}from"./components/znSearch/index.mjs";export{ZnTable}from"./components/znTable/index.mjs";export{ZnTest}from"./components/znTest/index.mjs";export{ZnTimeline}from"./components/znTimeLine/index.mjs";export{ZnTreeFilter}from"./components/znTreeFilter/index.mjs";export{ZnTreeSelect}from"./components/znTreeSelect/index.mjs";export{initVXETable,isVXETableInitialized}from"./components/znVirtualTable/src/utils/vxe-setup.mjs";export{ZnWorkGrid}from"./components/znWorkGrid/index.mjs";export{default as ZnVirtualTable}from"./components/znVirtualTable/src/index.vue2.mjs";globalThis.log=e;"function"==typeof globalThis?.log?.success&&globalThis.log.primary("1.1.
|
|
1
|
+
import o from"./installer.mjs";export{install}from"./installer.mjs";import"./functions/index.mjs";import"./hooks/index.mjs";export{copyText,formatValue,treeListUtil,treeToList}from"./utils/index.mjs";import"./directives/index.mjs";import"./components/index.mjs";import e from"./functions/modules/log.mjs";export{useDialogV2}from"./hooks/useDialogV2/index.mjs";export{useDrawerV2}from"./hooks/useDrawerV2/index.mjs";export{closeAllDrawers}from"./hooks/useDrawerV2/src/index.mjs";export{closePopWindowById,closePopWindowByTag,getAllPopWindows,showPopWindow}from"./hooks/usePopWindow/src/index.mjs";export{usePopWindow}from"./hooks/usePopWindow/index.mjs";export{closePopWindowByIdV2,closePopWindowByTagV2,getAllPopWindowsV2,showPopWindowV2}from"./hooks/usePopWindowV2/src/index.mjs";export{usePopWindowV2}from"./hooks/usePopWindowV2/index.mjs";export{useDialog}from"./hooks/useDialog/index.mjs";export{default as ImageViewer}from"./hooks/useImageViewer/src/index.vue2.mjs";export{useImageViewer}from"./hooks/useImageViewer/index.mjs";export{useDrawer}from"./hooks/useDrawer/index.mjs";export{withInstall,withInstallDirectives}from"./utils/install.mjs";export{default as vCopy}from"./directives/modules/copy.mjs";export{default as vDrag}from"./directives/modules/drag.mjs";export{default as vAutoScroll}from"./directives/modules/autoScroll.mjs";export{default as vTooltip}from"./directives/modules/tooltip.mjs";export{default as vConfirm}from"./directives/modules/confirm.mjs";export{default as vCountTo}from"./directives/modules/countTo.mjs";export{default as utils}from"./functions/modules/uitls.mjs";import*as s from"./functions/modules/is.mjs";export{s as is};export{useZnForm}from"./components/znForm/src/hooks/useZnForm.mjs";export{useZnFormV2}from"./components/znFormV2/src/hooks/useZnFormV2.mjs";export{useZnSearch}from"./components/znSearch/src/hooks/useProSearch.mjs";export{ZnChart}from"./components/znChart/index.mjs";export{ZnCountTo}from"./components/znCountTo/index.mjs";export{default as ZnFormItem}from"./components/znForm/src/components/ZnFormItem.vue2.mjs";export{ZnForm}from"./components/znForm/index.mjs";export{batchExecute,camelCaseToHyphen,checkFeatureSupport,createUniqueId,debounce,delay,executeInIdle,getElementOffsetTop,getMemoryUsage,getObjectHash,isDeepEqual,isElementInViewport,isShallowEqual,throttle}from"./components/znFormV2/src/helper/index.mjs";export{default as ZnFormV2Item}from"./components/znFormV2/src/components/ZnFormV2Item.vue2.mjs";export{ZnFormV2}from"./components/znFormV2/index.mjs";export{ZnGrid,ZnGridItem}from"./components/znGrid/index.mjs";export{ZnNumberScroll}from"./components/znNumberScroll/index.mjs";export{ZnSearch}from"./components/znSearch/index.mjs";export{ZnTable}from"./components/znTable/index.mjs";export{ZnTest}from"./components/znTest/index.mjs";export{ZnTimeline}from"./components/znTimeLine/index.mjs";export{ZnTreeFilter}from"./components/znTreeFilter/index.mjs";export{ZnTreeSelect}from"./components/znTreeSelect/index.mjs";export{initVXETable,isVXETableInitialized}from"./components/znVirtualTable/src/utils/vxe-setup.mjs";export{ZnWorkGrid}from"./components/znWorkGrid/index.mjs";export{default as ZnVirtualTable}from"./components/znVirtualTable/src/index.vue2.mjs";globalThis.log=e;"function"==typeof globalThis?.log?.success&&globalThis.log.primary("1.1.16","欢迎使用znyg-frontend-common,在线文档:http://192.168.99.34:10000/znyg-frontend-common-docs/");export{o as default,e as log};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/es/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../packages/index.ts"],"sourcesContent":["import installer from './installer'\nimport { log } from './functions'\nexport * from './hooks'\nexport * from './utils'\nexport * from './installer'\nexport * from './directives'\nexport * from './functions'\nexport * from './components'\n\nexport default installer\nglobalThis.log = log\nconst version = '1.1.
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../packages/index.ts"],"sourcesContent":["import installer from './installer'\nimport { log } from './functions'\nexport * from './hooks'\nexport * from './utils'\nexport * from './installer'\nexport * from './directives'\nexport * from './functions'\nexport * from './components'\n\nexport default installer\nglobalThis.log = log\nconst version = '1.1.16'\nif (typeof globalThis?.log?.success === 'function') {\n globalThis.log.primary(version, '欢迎使用znyg-frontend-common,在线文档:http://192.168.99.34:10000/znyg-frontend-common-docs/')\n}\n"],"names":["globalThis","log","success","primary"],"mappings":"sqGAUAA,WAAWC,IAAMA,EAEuB,mBAA7BD,YAAYC,KAAKC,SACfF,WAAAC,IAAIE,QAFD,SAEkB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("../assets/notData.png.js"),l=require("sortablejs"),o=require("@element-plus/icons-vue"),a=Object.defineProperty,n=(e,t)=>a(e,"name",{value:t,configurable:!0});const r={class:"col-setting-header",style:{display:"flex","align-items":"center"}},s=["id"],d={style:{display:"flex","align-items":"center"}},i={class:"table-main"};var c=e.defineComponent({__name:"ColSetting",props:{colSetting:{type:Array,required:!0}},emits:["update:colSetting","updateColumns"],setup(a,{expose:c,emit:u}){const m=a,p=u,f=e.ref(!1),h=e.ref();let v=null;const w=e.getCurrentInstance(),g=e.ref([]),C=e.ref(!1);let b=null;const y=n(((e,t)=>{if(w&&!w.isUnmounted)try{p(e,t)}catch(t){console.warn(`发送事件 ${e} 时出错:`,t)}else console.warn("组件已销毁,跳过事件发送",{hasInstance:!!w,isUnmounted:w?.isUnmounted})}),"safeEmit"),V=n((e=>{b&&clearTimeout(b),b=window.setTimeout((()=>{if(w&&!w.isUnmounted)try{const t=JSON.parse(JSON.stringify(e));y("updateColumns",t)}catch(e){console.warn("更新数据时出错:",e)}}),100)}),"debouncedUpdate");e.watch((()=>m.colSetting),(t=>{if(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),t=require("../assets/notData.png.js"),l=require("sortablejs"),o=require("@element-plus/icons-vue"),a=Object.defineProperty,n=(e,t)=>a(e,"name",{value:t,configurable:!0});const r={class:"col-setting-header",style:{display:"flex","align-items":"center"}},s=["id"],d={style:{display:"flex","align-items":"center"}},i={class:"table-main"};var c=e.defineComponent({__name:"ColSetting",props:{colSetting:{type:Array,required:!0}},emits:["update:colSetting","updateColumns"],setup(a,{expose:c,emit:u}){const m=a,p=u,f=e.ref(!1),h=e.ref();let v=null;const w=e.getCurrentInstance(),g=e.ref([]),C=e.ref(!1);let b=null;const y=n(((e,t)=>{if(w&&!w.isUnmounted)try{p(e,t)}catch(t){console.warn(`发送事件 ${e} 时出错:`,t)}else console.warn("组件已销毁,跳过事件发送",{hasInstance:!!w,isUnmounted:w?.isUnmounted})}),"safeEmit"),V=n((e=>{b&&clearTimeout(b),b=window.setTimeout((()=>{if(w&&!w.isUnmounted)try{const t=JSON.parse(JSON.stringify(e));y("updateColumns",t)}catch(e){console.warn("更新数据时出错:",e)}}),100)}),"debouncedUpdate");e.watch((()=>m.colSetting),(t=>{if(t&&Array.isArray(t)){C.value=!0;try{g.value=JSON.parse(JSON.stringify(t))}catch(e){console.warn("更新本地列设置时出错:",e),g.value=[...t]}e.nextTick((()=>{setTimeout((()=>{C.value=!1}),50)}))}}),{immediate:!0,deep:!0});const N=n((()=>{w&&!w.isUnmounted&&e.nextTick((()=>{if(w&&!w.isUnmounted&&h.value)try{const e=h.value.$el?.querySelector("tbody");if(!e)return void console.warn("未找到tbody元素");if(v){try{v.destroy()}catch(e){console.warn("销毁sortable实例时出错:",e)}v=null}v=l.create(e,{handle:".drag-handle",animation:300,ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",forceFallback:!0,fallbackTolerance:3,
|
|
2
2
|
// 禁用原生HTML5拖拽
|
|
3
3
|
dragoverBubble:!1,removeCloneOnHide:!0,onStart:n((e=>{if(!e.item||!e.from||!w||w.isUnmounted)return!1}),"onStart"),onEnd:n((e=>{if(!w||w.isUnmounted)return;if(C.value)return;const{oldIndex:t,newIndex:l}=e;if(void 0!==t&&void 0!==l&&t!==l&&!(t<0||l<0||t>=g.value.length||l>=g.value.length))try{const e=[...g.value],o=e.splice(t,1)[0];o&&(e.splice(l,0,o),g.value=e,V(e))}catch(e){console.warn("拖拽排序时出错:",e)}}),"onEnd")})}catch(e){console.warn("初始化sortable时出错:",e)}}))}),"initSortable"),S=n((()=>{w&&!w.isUnmounted&&(f.value=!0,setTimeout((()=>{w&&!w.isUnmounted&&N()}),200))}),"openColSetting"),U=n((()=>{w&&!w.isUnmounted&&(f.value=!1)}),"closeColSetting"),x=n((()=>{if(w&&!w.isUnmounted&&!C.value)try{V(g.value)}catch(e){console.warn("开关切换时出错:",e)}}),"handleSwitchChange");return e.watch(f,(e=>{if(!e&&v)try{v.destroy(),v=null}catch(e){console.warn("关闭抽屉时销毁sortable实例出错:",e)}})),e.onUnmounted((()=>{if(b&&(clearTimeout(b),b=null),v)try{v.destroy(),v=null}catch(e){console.warn("组件销毁时清理sortable实例出错:",e)}})),c({openColSetting:S,closeColSetting:U}),(l,a)=>{const c=e.resolveComponent("el-icon"),u=e.resolveComponent("el-table-column"),m=e.resolveComponent("el-switch"),p=e.resolveComponent("el-table"),v=e.resolveComponent("el-drawer");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createCommentVNode(" 列设置 "),e.createVNode(v,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=e=>f.value=e),title:"列设置",size:"450px"},{header:e.withCtx((({close:t,titleId:o,titleClass:a})=>[e.createElementVNode("div",r,[e.createElementVNode("h4",{id:o,class:e.normalizeClass(a)},"列设置",10,s),e.createElementVNode("div",d,[e.createCommentVNode(" 列设置头部插槽 "),e.renderSlot(l.$slots,"colSettingHeader")])])])),default:e.withCtx((()=>[e.createElementVNode("div",i,[e.createVNode(p,{ref_key:"tableRef",ref:h,data:g.value,border:!0,"row-key":"prop","default-expand-all":"","tree-props":{children:"_children"}},{empty:e.withCtx((()=>a[1]||(a[1]=[e.createElementVNode("div",{class:"table-empty"},[e.createElementVNode("img",{src:t.default,alt:"notData"}),e.createElementVNode("div",null,"暂无可配置列")],-1
|
|
4
4
|
/* HOISTED */)]))),default:e.withCtx((()=>[e.createVNode(u,{align:"center",label:"拖拽",width:"60"},{default:e.withCtx((()=>[e.createVNode(c,{class:"drag-handle",style:{color:"#409eff",cursor:"move"}},{default:e.withCtx((()=>[e.createVNode(e.unref(o.DCaret))])),_:1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColSetting.vue2.js","sources":["../../../../../../../packages/components/znTable/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 let filterData=newVal.filter(item=>item.isShow)\n try {\n localColSetting.value = JSON.parse(JSON.stringify(filterData))\n } catch (error) {\n console.warn('更新本地列设置时出错:', error)\n localColSetting.value = [...filterData]\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","filterData","filter","item","isShow","nextTick","immediate","deep","initSortable","tbody","$el","querySelector","destroy","Sortable","create","handle","animation","ghostClass","chosenClass","dragClass","forceFallback","fallbackTolerance","dragoverBubble","removeCloneOnHide","onStart","evt","from","onEnd","oldIndex","newIndex","length","newData","movedItem","splice","openColSetting","closeColSetting","handleSwitchChange","onUnmounted","__expose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColSetting.vue2.js","sources":["../../../../../../../packages/components/znTable/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":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("vue"),r=require("element-plus"),o=Object.defineProperty,t=(e,r)=>o(e,"name",{value:r,configurable:!0});const n="zn-drawer-v2";let c,l,a=0;const s=new Map,d=new Map,i=[],f=new Map,p=[],u=e.ref([]),w=new Set,h=t((()=>{const e=document.querySelector(":not(:root):fullscreen");return e||document.querySelector("body")}),"getFather"),m=t((r=>{e.nextTick((()=>{const e=document.querySelector(`#${n}-${r} .el-drawer__body`);e&&(e.scrollTop=0);const o=document.querySelectorAll(`#${n}-${r} .el-scrollbar__wrap`);if(o&&o.length)for(let e=0;e<o.length;e++){const r=o[e];r&&(r.scrollTop=0)}}))}),"resetDrawerScroll"),v=t((e=>{if(f.has(e)){const r=f.get(e);if(void 0!==r)return r}if(i.length>0){const r=i.shift();if(void 0!==r)return f.set(e,r),r}const r=u.value.length;return u.value.push(!1),f.set(e,r),r}),"getDrawerIndex"),g=t((e=>{if(f.has(e)){const r=f.get(e);void 0!==r&&(i.push(r),f.delete(e))}}),"releaseDrawerIndex"),y=t((()=>{if(0!==p.length)return p[p.length-1]}),"getTopDrawerId"),C=t((()=>{[...p].forEach((e=>{L(e)})),p.length=0}),"closeAllDrawers"),L=t((r=>{const o=void 0!==r?r:y();if(void 0===o)return;if(w.has(o))return;w.add(o);const t=f.get(o);void 0!==t&&(u.value[t]=!1);const c=document.querySelector(`#${n}-${o}`);if(!c){const e=p.indexOf(o);return e>-1&&p.splice(e,1),void w.delete(o)}const l=s.get(o),a=p.indexOf(o);if(a>-1&&p.splice(a,1),l&&l.props&&"function"==typeof l.props.onDrawerClose)try{l.props.onDrawerClose()}catch(e){console.error("Error in onDrawerClose callback:",e)}const i=!l||!1!==l.destoryWhenClosed;if(!i&&l&&l.componentInstance&&l.props.beforeDrawerClose&&"function"==typeof l.props.beforeDrawerClose)try{l.props.beforeDrawerClose(l.componentInstance)}catch(e){console.error("Error in beforeDrawerClose callback:",e)}setTimeout((()=>{if(!i&&l&&l.props.afterDrawerClose&&"function"==typeof l.props.afterDrawerClose)try{l.props.afterDrawerClose(l.componentInstance)}catch(e){console.error("Error in afterDrawerClose callback:",e)}i?(g(o),c&&c.parentNode&&(e.render(null,c),h().removeChild(c),s.delete(o),d.delete(o),document.body.classList.remove("el-popup-parent--hidden"),document.body.style.width="")):void 0!==t&&(u.value[t]=!1),w.delete(o)}),500)}),"closeDrawer"),D=t((async(e,r)=>{L(r)}),"handleClose"),I=t((async(r,o,t)=>{if(r?.onConfirm&&void 0!==o){const n=t||e.ref(!1),c=s.get(o),l=c?.componentInstance;r.onConfirm((()=>L(o)),n,l)}else void 0!==o&&L(o)}),"handleConfirm"),x=t((r=>({componentRef:e.ref(null),close:t((()=>L(r)),"close"),drawerId:r,getInstance:t((()=>new Promise((e=>{const o=t((()=>{const t=s.get(r);t&&t.componentInstance?e(t.componentInstance):setTimeout(o,50)}),"checkInstance");o()}))),"getInstance")})),"createDrawerRef"),k=t(((o,i,g)=>{const y={...o,destoryWhenClosed:!1!==o.destoryWhenClosed};if(!1===y.destoryWhenClosed&&!y.drawerId)throw console.error("当destoryWhenClosed为false时,drawerId必传"),new Error("当destoryWhenClosed为false时,drawerId必传");if(y.drawerId)for(const[r,o]of s.entries())if(o.drawerId===y.drawerId){w.has(r)&&w.delete(r);const c=f.get(r);void 0!==c&&(u.value[c]=!0);const l=p.indexOf(r);l>-1&&p.splice(l,1),p.push(r);const a=document.querySelector(`#${n}-${r} .el-drawer__header .el-drawer__title`);a&&(a.textContent=y.title||"抽屉"),m(r);let h=d.get(r);if(h&&o.component===i){const e=g||{};Object.keys(h).forEach((e=>{h[e]=void 0})),Object.keys(e).forEach((r=>{h[r]=e[r]})),o.renderKey=(o.renderKey||0)+1}else{o.component=i;const t=e.markRaw(i);o.component=t,h=e.reactive({...g||{}}),d.set(r,h),o.propsRef=h}return o.props=y,e.nextTick((()=>{if(y.afterDrawerOpen&&"function"==typeof y.afterDrawerOpen){setTimeout(t((()=>{const e=s.get(r);if(e&&e.componentRef.value)try{y.afterDrawerOpen(e.componentRef.value)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),100)}m(r)})),{componentRef:o.componentRef,close:o.close||(()=>L(r)),drawerId:r,getInstance:o.getInstance}}const C=++a,k=e.ref(!1);let b=null;const R=v(C);p.push(C);const O=e.reactive({...g||{}});d.set(C,O);const V=e.ref(0),E=x(C),N=e.ref(!1),$=t((()=>{const r=document.querySelector(`#${n}-${C} .${n}.el-drawer`);r&&r.classList.toggle("is-fullscreen"),k.value=!e.unref(k)}),"toggleFull"),z=e.createVNode(r.ElConfigProvider,{namespace:"el",size:e.unref(l)},{default:t((()=>[e.createVNode(r.ElDrawer,e.mergeProps({modelValue:u.value[R],title:"抽屉",size:"30%",onClose:t((()=>D(o,C)),"onClose")},y,{render:!0,headerRender:!0,footerRender:!0,class:n}),{default:t((()=>y.render?y.render():i?e.h(i,{...O,key:V.value,ref:t((e=>{e&&(b=e,E.componentRef.value=e)}),"ref")}):null),"default"),header:t((()=>y.headerRender?y.headerRender():e.createVNode(e.Fragment,null,[e.createVNode("span",{class:".el-drawer__title"},[y.title]),!1!==y.fullscreenIcon&&(e.unref(k)?e.createVNode("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:t((()=>$()),"onClick")},[e.createVNode("svg",{t:"1676740839036",class:"icon",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"2895","xmlns:xlink":"http://www.w3.org/1999/xlink",fill:"var(--el-color-info)"},[e.createVNode("path",{d:"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z","p-id":"2896"},null)])]):e.createVNode("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:t((()=>$()),"onClick")},[e.createVNode("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",fill:"var(--el-color-info)"},[e.createVNode("path",{d:"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"},null)])]))])),"header"),footer:t((()=>y.footerRender?y.footerRender((()=>L(C))):!1!==y.showFooter?e.createVNode(e.Fragment,null,[e.createVNode(r.ElButton,{onClick:t((()=>u.value[R]=!1),"onClick")},{default:t((()=>[y.closeLabel||"取 消"]),"default")}),e.createVNode(r.ElButton,{type:"primary",loading:N.value,onClick:t((()=>I(y,C,N)),"onClick")},{default:t((()=>[y.confirmLabel||"确 定"]),"default")})]):void 0),"footer")})]),"default")});z.appContext=c,z.children?.length&&(z.children[0].appContext=c);const M=document.createElement("div");return M.id=`${n}-${C}`,h().appendChild(M),e.render(z,M),e.nextTick((()=>{u.value[R]=!0})),s.set(C,{props:y,propsRef:O,destoryWhenClosed:y.destoryWhenClosed,container:M,componentInstance:b,drawerId:y.drawerId,component:i,renderKey:V.value,componentRef:E.componentRef,getInstance:E.getInstance}),e.nextTick((()=>{if(b){const e=s.get(C);e&&(e.componentInstance=b,E.componentRef.value=b)}if(y.afterDrawerOpen&&"function"==typeof y.afterDrawerOpen){setTimeout(t((()=>{if(b)try{y.afterDrawerOpen(b)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),50)}y.fullscreen&&$(),m(C)})),E}),"showDrawer"),b=t((r=>{const{appContext:o}=r||e.getCurrentInstance()||{};return c=o,l="default",{open:k}}),"initDrawerV2");exports.closeAllDrawers=C,exports.closeDrawer=L,exports.initDrawerV2=b,exports.showDrawer=k;
|
|
1
|
+
"use strict";var e=require("vue"),r=require("element-plus"),o=Object.defineProperty,t=(e,r)=>o(e,"name",{value:r,configurable:!0});const n="zn-drawer-v2";let c,l,a=0;const s=new Map,d=new Map,i=[],f=new Map,p=[],u=e.ref([]),w=new Set,h=t((()=>{const e=document.querySelector(":not(:root):fullscreen");return e||document.querySelector("body")}),"getFather"),m=t((r=>{e.nextTick((()=>{const e=document.querySelector(`#${n}-${r} .el-drawer__body`);e&&(e.scrollTop=0);const o=document.querySelectorAll(`#${n}-${r} .el-scrollbar__wrap`);if(o&&o.length)for(let e=0;e<o.length;e++){const r=o[e];r&&(r.scrollTop=0)}}))}),"resetDrawerScroll"),v=t((e=>{if(f.has(e)){const r=f.get(e);if(void 0!==r)return r}if(i.length>0){const r=i.shift();if(void 0!==r)return f.set(e,r),r}const r=u.value.length;return u.value.push(!1),f.set(e,r),r}),"getDrawerIndex"),g=t((e=>{if(f.has(e)){const r=f.get(e);void 0!==r&&(i.push(r),f.delete(e))}}),"releaseDrawerIndex"),y=t((()=>{if(0!==p.length)return p[p.length-1]}),"getTopDrawerId"),C=t((()=>{[...p].forEach((e=>{L(e)})),p.length=0}),"closeAllDrawers"),L=t((r=>{const o=void 0!==r?r:y();if(void 0===o)return;if(w.has(o))return;w.add(o);const t=f.get(o);void 0!==t&&(u.value[t]=!1);const c=document.querySelector(`#${n}-${o}`);if(!c){const e=p.indexOf(o);return e>-1&&p.splice(e,1),void w.delete(o)}const l=s.get(o),a=p.indexOf(o);if(a>-1&&p.splice(a,1),l&&l.props&&"function"==typeof l.props.onDrawerClose)try{l.props.onDrawerClose()}catch(e){console.error("Error in onDrawerClose callback:",e)}const i=!l||!1!==l.destoryWhenClosed;if(!i&&l&&l.componentInstance&&l.props.beforeDrawerClose&&"function"==typeof l.props.beforeDrawerClose)try{l.props.beforeDrawerClose(l.componentInstance)}catch(e){console.error("Error in beforeDrawerClose callback:",e)}setTimeout((()=>{if(!i&&l&&l.props.afterDrawerClose&&"function"==typeof l.props.afterDrawerClose)try{l.props.afterDrawerClose(l.componentInstance)}catch(e){console.error("Error in afterDrawerClose callback:",e)}i?(g(o),c&&c.parentNode&&(e.render(null,c),h().removeChild(c),s.delete(o),d.delete(o),document.body.classList.remove("el-popup-parent--hidden"),document.body.style.width="")):void 0!==t&&(u.value[t]=!1),w.delete(o)}),500)}),"closeDrawer"),D=t((async(e,r)=>{L(r)}),"handleClose"),I=t((async(r,o,t)=>{if(r?.onConfirm&&void 0!==o){const n=t||e.ref(!1),c=s.get(o),l=c?.componentRef?.value||c?.componentInstance;r.onConfirm((()=>L(o)),n,l)}else void 0!==o&&L(o)}),"handleConfirm"),x=t((r=>({componentRef:e.ref(null),close:t((()=>L(r)),"close"),drawerId:r,getInstance:t((()=>new Promise((e=>{const o=t((()=>{const t=s.get(r);t&&t.componentInstance?e(t.componentInstance):setTimeout(o,50)}),"checkInstance");o()}))),"getInstance")})),"createDrawerRef"),k=t(((o,i,g)=>{const y={...o,destoryWhenClosed:!1!==o.destoryWhenClosed};if(!1===y.destoryWhenClosed&&!y.drawerId)throw console.error("当destoryWhenClosed为false时,drawerId必传"),new Error("当destoryWhenClosed为false时,drawerId必传");if(y.drawerId)for(const[r,o]of s.entries())if(o.drawerId===y.drawerId){w.has(r)&&w.delete(r);const c=f.get(r);void 0!==c&&(u.value[c]=!0);const l=p.indexOf(r);l>-1&&p.splice(l,1),p.push(r);const a=document.querySelector(`#${n}-${r} .el-drawer__header .el-drawer__title`);a&&(a.textContent=y.title||"抽屉"),m(r);let h=d.get(r);if(h&&o.component===i){const e=g||{};Object.keys(h).forEach((e=>{h[e]=void 0})),Object.keys(e).forEach((r=>{h[r]=e[r]})),o.renderKey=(o.renderKey||0)+1}else{o.component=i;const t=e.markRaw(i);o.component=t,h=e.reactive({...g||{}}),d.set(r,h),o.propsRef=h}return o.props=y,e.nextTick((()=>{if(y.afterDrawerOpen&&"function"==typeof y.afterDrawerOpen){setTimeout(t((()=>{const e=s.get(r);if(e&&e.componentRef.value)try{y.afterDrawerOpen(e.componentRef.value)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),100)}m(r)})),{componentRef:o.componentRef,close:o.close||(()=>L(r)),drawerId:r,getInstance:o.getInstance}}const C=++a,k=e.ref(!1);let b=null;const R=v(C);p.push(C);const O=e.reactive({...g||{}});d.set(C,O);const V=e.ref(0),E=x(C),N=e.ref(!1),$=t((()=>{const r=document.querySelector(`#${n}-${C} .${n}.el-drawer`);r&&r.classList.toggle("is-fullscreen"),k.value=!e.unref(k)}),"toggleFull"),z=e.createVNode(r.ElConfigProvider,{namespace:"el",size:e.unref(l)},{default:t((()=>[e.createVNode(r.ElDrawer,e.mergeProps({modelValue:u.value[R],title:"抽屉",size:"30%",onClose:t((()=>D(o,C)),"onClose")},y,{render:!0,headerRender:!0,footerRender:!0,class:n}),{default:t((()=>y.render?y.render():i?e.h(i,{...O,key:V.value,ref:t((e=>{e&&(b=e,E.componentRef.value=e)}),"ref")}):null),"default"),header:t((()=>y.headerRender?y.headerRender():e.createVNode(e.Fragment,null,[e.createVNode("span",{class:".el-drawer__title"},[y.title]),!1!==y.fullscreenIcon&&(e.unref(k)?e.createVNode("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:t((()=>$()),"onClick")},[e.createVNode("svg",{t:"1676740839036",class:"icon",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"2895","xmlns:xlink":"http://www.w3.org/1999/xlink",fill:"var(--el-color-info)"},[e.createVNode("path",{d:"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z","p-id":"2896"},null)])]):e.createVNode("div",{style:"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;",onClick:t((()=>$()),"onClick")},[e.createVNode("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",fill:"var(--el-color-info)"},[e.createVNode("path",{d:"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"},null)])]))])),"header"),footer:t((()=>y.footerRender?y.footerRender((()=>L(C))):!1!==y.showFooter?e.createVNode(e.Fragment,null,[e.createVNode(r.ElButton,{onClick:t((()=>u.value[R]=!1),"onClick")},{default:t((()=>[y.closeLabel||"取 消"]),"default")}),e.createVNode(r.ElButton,{type:"primary",loading:N.value,onClick:t((()=>I(y,C,N)),"onClick")},{default:t((()=>[y.confirmLabel||"确 定"]),"default")})]):void 0),"footer")})]),"default")});z.appContext=c,z.children?.length&&(z.children[0].appContext=c);const M=document.createElement("div");return M.id=`${n}-${C}`,h().appendChild(M),e.render(z,M),e.nextTick((()=>{u.value[R]=!0})),s.set(C,{props:y,propsRef:O,destoryWhenClosed:y.destoryWhenClosed,container:M,componentInstance:b,drawerId:y.drawerId,component:i,renderKey:V.value,componentRef:E.componentRef,getInstance:E.getInstance}),e.nextTick((()=>{if(b){const e=s.get(C);e&&(e.componentInstance=b,E.componentRef.value=b)}if(y.afterDrawerOpen&&"function"==typeof y.afterDrawerOpen){setTimeout(t((()=>{if(b)try{y.afterDrawerOpen(b)}catch(e){console.error("Error in afterDrawerOpen callback:",e)}}),"checkAndCallAfterOpen"),50)}y.fullscreen&&$(),m(C)})),E}),"showDrawer"),b=t((r=>{const{appContext:o}=r||e.getCurrentInstance()||{};return c=o,l="default",{open:k}}),"initDrawerV2");exports.closeAllDrawers=C,exports.closeDrawer=L,exports.initDrawerV2=b,exports.showDrawer=k;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/useDrawerV2/src/index.tsx"],"sourcesContent":["import {\n render,\n getCurrentInstance,\n unref,\n type Component,\n type ComponentInternalInstance,\n type VNode,\n type AppContext,\n nextTick,\n ref,\n Fragment,\n markRaw,\n reactive,\n h,\n type Ref\n} from 'vue'\nimport { ElDrawer, ElButton, type DrawerProps, ElConfigProvider } from 'element-plus'\n\nconst prefixClass = 'zn-drawer-v2'\n\nlet id = 0\n\nlet appContextConst: AppContext | undefined\nlet layoutSize: 'default' | 'small' | 'large' | undefined\n\n// 用于存储不销毁的抽屉实例\nconst drawerInstances = new Map<number, DrawerInstance>()\n\n// 用于管理组件的props更新\nconst propsStore = new Map<number, any>()\n\n// 存储可用的索引,用于复用已关闭的抽屉位置\nconst availableIndices: number[] = []\n\n// 存储抽屉索引与ID的映射关系\nconst drawerIndexMap = new Map<number, number>()\n\n// 抽屉栈:存储已打开的抽屉ID,按打开顺序(LIFO)\nconst drawerStack: number[] = []\n\n// 动态的抽屉显示列表,初始为10个,可根据需要扩展\nconst isShowList = ref<boolean[]>([])\n\n// 用于跟踪抽屉正在关闭的状态\nconst closingDrawers = new Set<number>()\n\nconst getFather = (): Element => {\n const fullScreen = document.querySelector(':not(:root):fullscreen')\n if (fullScreen) return fullScreen\n return document.querySelector('body') as HTMLBodyElement\n}\n\n/**\n * 重置抽屉的滚动条位置到顶部\n */\nconst resetDrawerScroll = (id: number) => {\n nextTick(() => {\n const drawerEl = document.querySelector(`#${prefixClass}-${id} .el-drawer__body`)\n if (drawerEl) {\n drawerEl.scrollTop = 0\n }\n\n // 同时处理可能存在的el-scrollbar元素\n const scrollbars = document.querySelectorAll(`#${prefixClass}-${id} .el-scrollbar__wrap`)\n if (scrollbars && scrollbars.length) {\n for (let i = 0; i < scrollbars.length; i++) {\n const scrollbar = scrollbars[i] as HTMLElement\n if (scrollbar) {\n scrollbar.scrollTop = 0\n }\n }\n }\n })\n}\n\nexport interface ZnDrawerProps extends Partial<DrawerProps> {\n /** 内容区渲染 TSX */\n render?: () => VNode\n /** 顶部渲染 TSX */\n headerRender?: () => VNode\n /** 底部渲染 TSX */\n footerRender?: (closeDrawer: () => void) => VNode\n /** 是否渲染顶部 */\n showFooter?: boolean\n /** 确认按钮点击事件 */\n onConfirm?: (closeDrawer: () => void, loading: Ref<boolean>, instance?: any) => any\n /** 关闭按钮点击事件 */\n onDrawerClose?: () => void\n /** 确认按钮文字,默认 确认 */\n confirmLabel?: string\n /** 关闭按钮文字,默认 关闭 */\n closeLabel?: string\n /** 是否默认全屏,默认 false */\n fullscreen?: boolean\n /** 是否渲染全屏图标,默认 true */\n fullscreenIcon?: boolean\n /** 是否在关闭时销毁组件,默认 true */\n destoryWhenClosed?: boolean\n /** 抽屉唯一标识,当destoryWhenClosed为false时必传 */\n drawerId?: string | number\n /** 组件卸载前调用的方法,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n beforeDrawerClose?: (instance: any) => void\n /** 关闭动画结束后调用的方法,500ms后执行,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n afterDrawerClose?: (instance: any) => void\n /** 抽屉打开后调用的方法,接收组件实例作为参数 */\n afterDrawerOpen?: (instance: any) => void\n}\n\n/**\n * 抽屉引用对象\n */\nexport interface DrawerRef {\n /** 组件实例的响应式引用 */\n componentRef: Ref<any>\n /** 关闭抽屉的方法 */\n close: () => void\n /** 抽屉的唯一ID */\n drawerId: number\n /** 异步获取组件实例的方法 */\n getInstance: () => Promise<any>\n}\n\n/**\n * 获取用于显示抽屉的索引\n * @param drawerId 抽屉ID\n * @returns 分配的索引\n */\nconst getDrawerIndex = (drawerId: number): number => {\n // 如果已经有映射关系,直接返回\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n return index\n }\n }\n\n // 如果有可用索引,使用第一个\n if (availableIndices.length > 0) {\n const index = availableIndices.shift()\n if (index !== undefined) {\n drawerIndexMap.set(drawerId, index)\n return index\n }\n }\n\n // 如果没有可用索引,扩展isShowList数组并使用新增的索引\n const newIndex = isShowList.value.length\n isShowList.value.push(false) // 初始为false,由showDrawer控制显示\n drawerIndexMap.set(drawerId, newIndex)\n return newIndex\n}\n\n/**\n * 释放抽屉索引,使其可供后续抽屉复用\n * @param drawerId 抽屉ID\n */\nconst releaseDrawerIndex = (drawerId: number): void => {\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n // 将该索引标记为可用\n availableIndices.push(index)\n // 清除映射关系\n drawerIndexMap.delete(drawerId)\n }\n }\n}\n\n/**\n * 获取栈顶抽屉ID(最后打开的)\n * @returns 栈顶抽屉ID,如果没有则返回undefined\n */\nconst getTopDrawerId = (): number | undefined => {\n if (drawerStack.length === 0) {\n return undefined\n }\n return drawerStack[drawerStack.length - 1]\n}\n\n/**\n * 关闭所有打开的抽屉\n */\nexport const closeAllDrawers = () => {\n // 复制当前栈,避免在遍历过程中修改\n const drawersToClose = [...drawerStack]\n\n drawersToClose.forEach((drawerId) => {\n closeDrawer(drawerId)\n })\n\n // 清空栈\n drawerStack.length = 0\n}\n\n/**\n * 关闭抽屉(支持栈管理)\n * 如果指定了ID,则关闭对应ID的抽屉\n * 如果未指定ID,则关闭栈顶的抽屉(最后打开的)\n * @param targetId 指定要关闭的抽屉ID,如不传则关闭栈顶抽屉\n */\nexport const closeDrawer = (targetId?: number) => {\n // 确定要关闭的抽屉ID\n const currentId = targetId !== undefined ? targetId : getTopDrawerId()\n\n // 如果没有可关闭的抽屉,直接返回\n if (currentId === undefined) return\n\n // 防止重复关闭\n if (closingDrawers.has(currentId)) return\n\n closingDrawers.add(currentId)\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(currentId)\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n\n const vm = document.querySelector(`#${prefixClass}-${currentId}`) as HTMLElement\n if (!vm) {\n // 如果DOM元素不存在,立即清理状态\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n closingDrawers.delete(currentId)\n return\n }\n\n // 获取该抽屉是否需要在关闭时销毁\n const instance = drawerInstances.get(currentId)\n\n // 立即从抽屉栈中移除,避免快速关闭时的状态混乱\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n\n // 调用onDrawerClose回调\n if (instance && instance.props && typeof instance.props.onDrawerClose === 'function') {\n try {\n instance.props.onDrawerClose()\n } catch (err) {\n console.error('Error in onDrawerClose callback:', err)\n }\n }\n\n // 判断是否需要销毁组件\n const shouldDestroy = instance ? instance.destoryWhenClosed !== false : true\n\n // 只在不销毁的情况下调用关闭前的回调\n if (!shouldDestroy && instance && instance.componentInstance) {\n if (instance.props.beforeDrawerClose && typeof instance.props.beforeDrawerClose === 'function') {\n try {\n instance.props.beforeDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in beforeDrawerClose callback:', err)\n }\n }\n }\n\n // 关闭动画结束后执行的逻辑\n setTimeout(() => {\n // 只在不销毁的情况下执行afterDrawerClose回调\n if (!shouldDestroy && instance && instance.props.afterDrawerClose && typeof instance.props.afterDrawerClose === 'function') {\n try {\n instance.props.afterDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerClose callback:', err)\n }\n }\n\n if (shouldDestroy) {\n // 释放抽屉索引\n releaseDrawerIndex(currentId)\n\n if (vm && vm.parentNode) {\n render(null, vm)\n getFather().removeChild(vm)\n // 清除实例记录\n drawerInstances.delete(currentId)\n // 清除props存储\n propsStore.delete(currentId)\n document.body.classList.remove('el-popup-parent--hidden')\n document.body.style.width = ''\n }\n } else {\n // 不销毁的情况下,确保抽屉完全隐藏\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n }\n\n // 从关闭集合中移除\n closingDrawers.delete(currentId)\n }, 500)\n}\n\nconst handleClose = async (_: any, currentId?: number) => {\n closeDrawer(currentId)\n}\n\nconst handleConfirm = async (drawerProps?: ZnDrawerProps, currentId?: number, loading?: Ref<boolean>) => {\n if (drawerProps?.onConfirm && currentId !== undefined) {\n const loadingRef = loading || ref(false)\n // 获取组件实例\n const instance = drawerInstances.get(currentId)\n const componentInstance = instance?.componentInstance\n drawerProps.onConfirm(() => closeDrawer(currentId), loadingRef, componentInstance)\n return\n }\n\n if (currentId !== undefined) {\n closeDrawer(currentId)\n }\n}\n\n// 修改存储的类型定义\ninterface DrawerInstance {\n props: ZnDrawerProps\n propsRef: Record<string, any>\n destoryWhenClosed: boolean | undefined\n container: HTMLDivElement\n componentInstance: any\n drawerId?: string | number\n component?: Component\n renderKey: number\n // 组件引用相关\n componentRef: Ref<any>\n getInstance: () => Promise<any>\n close?: () => void\n}\n\n/**\n * 创建抽屉引用对象\n */\nconst createDrawerRef = (drawerId: number): DrawerRef => {\n const componentRef = ref<any>(null)\n\n return {\n componentRef,\n close: () => closeDrawer(drawerId),\n drawerId,\n getInstance: () => {\n return new Promise((resolve) => {\n const checkInstance = () => {\n const instance = drawerInstances.get(drawerId)\n if (instance && instance.componentInstance) {\n resolve(instance.componentInstance)\n } else {\n // 如果实例还没准备好,继续等待\n setTimeout(checkInstance, 50)\n }\n }\n checkInstance()\n })\n }\n }\n}\n\n/**\n * 内容渲染方式有两种\n * 方式 1:在第一个参数里写 render,即可实现 el-drawer 的内容渲染\n * 方式 2:第二个参数为组件,第三个参数为组件的 props\n *\n * 在第一个参数里写 headerRender 和 footerRender,可以自定义 el-drawer 的 header 和 footer\n */\nexport const showDrawer = (drawerProps: ZnDrawerProps, component?: Component, componentsProps?: any): DrawerRef => {\n // 设置destoryWhenClosed的默认值为true\n const props = { ...drawerProps, destoryWhenClosed: drawerProps.destoryWhenClosed !== false }\n\n // 验证参数\n if (props.destoryWhenClosed === false && !props.drawerId) {\n console.error('当destoryWhenClosed为false时,drawerId必传')\n throw new Error('当destoryWhenClosed为false时,drawerId必传')\n }\n\n // 如果有drawerId,先检查是否已存在该抽屉\n if (props.drawerId) {\n // 查找是否有对应drawerId的抽屉实例\n for (const [existingId, instance] of drawerInstances.entries()) {\n if (instance.drawerId === props.drawerId) {\n // 如果抽屉正在关闭中,先从关闭集合中移除\n if (closingDrawers.has(existingId)) {\n closingDrawers.delete(existingId)\n }\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(existingId)\n if (drawerIndex !== undefined) {\n // 将抽屉显示出来\n isShowList.value[drawerIndex] = true\n }\n\n // 更新栈顺序,移到栈顶(表示最新打开)\n const index = drawerStack.indexOf(existingId)\n if (index > -1) {\n drawerStack.splice(index, 1)\n }\n drawerStack.push(existingId)\n\n // 更新抽屉标题和配置\n const drawerEl = document.querySelector(`#${prefixClass}-${existingId} .el-drawer__header .el-drawer__title`)\n if (drawerEl) {\n drawerEl.textContent = props.title || '抽屉'\n }\n\n // 重置滚动条位置到顶部\n resetDrawerScroll(existingId)\n\n // 获取对应的props响应式对象\n let propsRef = propsStore.get(existingId)\n // 如果没有或组件已变化,则创建新的\n if (!propsRef || instance.component !== component) {\n instance.component = component\n\n // 标记组件为非响应式,避免不必要的深层响应式转换\n const rawComponent = markRaw(component)\n instance.component = rawComponent\n\n // 创建一个深度响应式的props容器\n propsRef = reactive({ ...(componentsProps || {}) })\n propsStore.set(existingId, propsRef)\n\n // 设置到实例中,以便后续引用\n instance.propsRef = propsRef\n } else {\n // 更新现有的props引用\n const newProps = componentsProps || {}\n // 先清空对象\n Object.keys(propsRef).forEach((key) => {\n propsRef[key] = undefined\n })\n // 然后添加新属性\n Object.keys(newProps).forEach((key) => {\n propsRef[key] = newProps[key]\n })\n\n // 增加renderKey强制组件重新渲染\n instance.renderKey = (instance.renderKey || 0) + 1\n }\n\n // 更新实例中的props属性\n instance.props = props\n\n // 执行afterDrawerOpen回调\n nextTick(() => {\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n // 重新获取最新的组件实例\n const updatedInstance = drawerInstances.get(existingId)\n if (updatedInstance && updatedInstance.componentRef.value) {\n try {\n props.afterDrawerOpen(updatedInstance.componentRef.value)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n // 延迟执行,确保组件已经挂载\n setTimeout(checkAndCallAfterOpen, 100)\n }\n\n // 确保滚动条重置\n resetDrawerScroll(existingId)\n })\n\n // 返回现有的 DrawerRef\n return {\n componentRef: instance.componentRef,\n close: instance.close || (() => closeDrawer(existingId)),\n drawerId: existingId,\n getInstance: instance.getInstance\n }\n }\n }\n }\n\n const currentId = ++id\n const isFullscreen = ref(false)\n let componentInstance: any = null\n // 为新抽屉分配索引\n const drawerIndex = getDrawerIndex(currentId)\n\n // 添加到抽屉栈中\n drawerStack.push(currentId)\n\n // 创建一个响应式引用\n const propsRef = reactive({ ...(componentsProps || {}) })\n // 存储到全局Map中\n propsStore.set(currentId, propsRef)\n\n // 创建一个渲染key\n const renderKey = ref(0)\n\n // 创建 DrawerRef 对象\n const drawerRef = createDrawerRef(currentId)\n\n // 创建确认按钮的loading状态\n const confirmLoading = ref(false)\n\n const toggleFull = () => {\n const elDrawerEl = document.querySelector(`${`#${prefixClass}-${currentId}`} .${prefixClass}.el-drawer`) as HTMLElement\n if (elDrawerEl) elDrawerEl.classList.toggle('is-fullscreen')\n isFullscreen.value = !unref(isFullscreen)\n }\n\n const vm = (\n <ElConfigProvider namespace=\"el\" size={unref(layoutSize)}>\n <ElDrawer\n modelValue={isShowList.value[drawerIndex]}\n title=\"抽屉\"\n size=\"30%\"\n onClose={() => handleClose(drawerProps, currentId)}\n {...props}\n render\n headerRender\n footerRender\n class={prefixClass}>\n {{\n default: () => {\n if (props.render) return props.render()\n\n // 使用h函数创建组件,确保props传递的响应式\n if (component) {\n return h(component, {\n ...propsRef,\n key: renderKey.value,\n ref: (el: any) => {\n if (el) {\n componentInstance = el\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = el\n }\n }\n })\n }\n return null\n },\n header: () => {\n if (props.headerRender) return props.headerRender()\n return (\n <Fragment>\n <span class={`.el-drawer__title`}>{props.title}</span>\n {props.fullscreenIcon !== false &&\n (unref(isFullscreen) ? (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg\n t=\"1676740839036\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2895\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n fill=\"var(--el-color-info)\">\n <path\n d=\"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z\"\n p-id=\"2896\"></path>\n </svg>\n </div>\n ) : (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg class=\"icon\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"var(--el-color-info)\">\n <path d=\"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z\" />\n </svg>\n </div>\n ))}\n </Fragment>\n )\n },\n footer: () => {\n if (props.footerRender) return props.footerRender(() => closeDrawer(currentId))\n if (props.showFooter === false) return\n return (\n <Fragment>\n <ElButton onClick={() => (isShowList.value[drawerIndex] = false)}>{props.closeLabel || '取 消'}</ElButton>\n <ElButton type=\"primary\" loading={confirmLoading.value} onClick={() => handleConfirm(props, currentId, confirmLoading)}>\n {props.confirmLabel || '确 定'}\n </ElButton>\n </Fragment>\n )\n }\n }}\n </ElDrawer>\n </ElConfigProvider>\n )\n\n vm.appContext = appContextConst\n vm.children?.length && (vm.children[0].appContext = appContextConst)\n\n const container = document.createElement('div')\n container.id = `${prefixClass}-${currentId}`\n getFather().appendChild(container)\n render(vm, container)\n\n // 立即显示抽屉\n nextTick(() => {\n isShowList.value[drawerIndex] = true\n })\n\n // 存储抽屉实例\n drawerInstances.set(currentId, {\n props,\n propsRef,\n destoryWhenClosed: props.destoryWhenClosed,\n container,\n componentInstance,\n drawerId: props.drawerId,\n component,\n renderKey: renderKey.value,\n componentRef: drawerRef.componentRef,\n getInstance: drawerRef.getInstance\n } as DrawerInstance)\n\n // 延迟更新componentInstance,确保组件已经挂载\n nextTick(() => {\n if (componentInstance) {\n const instance = drawerInstances.get(currentId)\n if (instance) {\n instance.componentInstance = componentInstance\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = componentInstance\n }\n }\n\n // 执行afterDrawerOpen回调\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n if (componentInstance) {\n try {\n props.afterDrawerOpen(componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n setTimeout(checkAndCallAfterOpen, 50)\n }\n\n if (props.fullscreen) toggleFull()\n\n // 确保滚动条重置\n resetDrawerScroll(currentId)\n })\n\n // 始终返回 DrawerRef,提供一致的API\n return drawerRef\n}\n\nexport const initDrawerV2 = (ctx?: ComponentInternalInstance) => {\n const { appContext } = ctx || getCurrentInstance() || {}\n appContextConst = appContext\n layoutSize = 'default'\n\n return { open: showDrawer }\n}\n"],"names":["prefixClass","appContextConst","layoutSize","id","drawerInstances","Map","propsStore","availableIndices","drawerIndexMap","drawerStack","isShowList","ref","closingDrawers","Set","getFather","__name","fullScreen","document","querySelector","resetDrawerScroll","nextTick","drawerEl","scrollTop","scrollbars","querySelectorAll","length","i","scrollbar","getDrawerIndex","drawerId","has","index","get","undefined","shift","set","newIndex","value","push","releaseDrawerIndex","delete","getTopDrawerId","closeAllDrawers","forEach","closeDrawer","targetId","currentId","add","drawerIndex","vm","stackIndex","indexOf","splice","instance","props","onDrawerClose","err","error","shouldDestroy","destoryWhenClosed","componentInstance","beforeDrawerClose","setTimeout","afterDrawerClose","parentNode","render","removeChild","body","classList","remove","style","width","handleClose","_","handleConfirm","async","drawerProps","loading","onConfirm","loadingRef","createDrawerRef","componentRef","close","getInstance","Promise","resolve","checkInstance","showDrawer","component","componentsProps","console","Error","existingId","entries","textContent","title","propsRef","newProps","Object","keys","key","renderKey","rawComponent","markRaw","reactive","afterDrawerOpen","updatedInstance","checkAndCallAfterOpen","isFullscreen","drawerRef","confirmLoading","toggleFull","elDrawerEl","toggle","unref","_createVNode","ElConfigProvider","namespace","size","default","ElDrawer","_mergeProps","modelValue","onClose","headerRender","footerRender","class","h","el","header","_Fragment","fullscreenIcon","onClick","t","viewBox","version","xmlns","fill","d","footer","showFooter","ElButton","closeLabel","type","confirmLabel","appContext","children","container","createElement","appendChild","fullscreen","initDrawerV2","ctx","getCurrentInstance","open"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/useDrawerV2/src/index.tsx"],"sourcesContent":["import {\n render,\n getCurrentInstance,\n unref,\n type Component,\n type ComponentInternalInstance,\n type VNode,\n type AppContext,\n nextTick,\n ref,\n Fragment,\n markRaw,\n reactive,\n h,\n type Ref\n} from 'vue'\nimport { ElDrawer, ElButton, type DrawerProps, ElConfigProvider } from 'element-plus'\n\nconst prefixClass = 'zn-drawer-v2'\n\nlet id = 0\n\nlet appContextConst: AppContext | undefined\nlet layoutSize: 'default' | 'small' | 'large' | undefined\n\n// 用于存储不销毁的抽屉实例\nconst drawerInstances = new Map<number, DrawerInstance>()\n\n// 用于管理组件的props更新\nconst propsStore = new Map<number, any>()\n\n// 存储可用的索引,用于复用已关闭的抽屉位置\nconst availableIndices: number[] = []\n\n// 存储抽屉索引与ID的映射关系\nconst drawerIndexMap = new Map<number, number>()\n\n// 抽屉栈:存储已打开的抽屉ID,按打开顺序(LIFO)\nconst drawerStack: number[] = []\n\n// 动态的抽屉显示列表,初始为10个,可根据需要扩展\nconst isShowList = ref<boolean[]>([])\n\n// 用于跟踪抽屉正在关闭的状态\nconst closingDrawers = new Set<number>()\n\nconst getFather = (): Element => {\n const fullScreen = document.querySelector(':not(:root):fullscreen')\n if (fullScreen) return fullScreen\n return document.querySelector('body') as HTMLBodyElement\n}\n\n/**\n * 重置抽屉的滚动条位置到顶部\n */\nconst resetDrawerScroll = (id: number) => {\n nextTick(() => {\n const drawerEl = document.querySelector(`#${prefixClass}-${id} .el-drawer__body`)\n if (drawerEl) {\n drawerEl.scrollTop = 0\n }\n\n // 同时处理可能存在的el-scrollbar元素\n const scrollbars = document.querySelectorAll(`#${prefixClass}-${id} .el-scrollbar__wrap`)\n if (scrollbars && scrollbars.length) {\n for (let i = 0; i < scrollbars.length; i++) {\n const scrollbar = scrollbars[i] as HTMLElement\n if (scrollbar) {\n scrollbar.scrollTop = 0\n }\n }\n }\n })\n}\n\nexport interface ZnDrawerProps extends Partial<DrawerProps> {\n /** 内容区渲染 TSX */\n render?: () => VNode\n /** 顶部渲染 TSX */\n headerRender?: () => VNode\n /** 底部渲染 TSX */\n footerRender?: (closeDrawer: () => void) => VNode\n /** 是否渲染顶部 */\n showFooter?: boolean\n /** 确认按钮点击事件 */\n onConfirm?: (closeDrawer: () => void, loading: Ref<boolean>, instance?: any) => any\n /** 关闭按钮点击事件 */\n onDrawerClose?: () => void\n /** 确认按钮文字,默认 确认 */\n confirmLabel?: string\n /** 关闭按钮文字,默认 关闭 */\n closeLabel?: string\n /** 是否默认全屏,默认 false */\n fullscreen?: boolean\n /** 是否渲染全屏图标,默认 true */\n fullscreenIcon?: boolean\n /** 是否在关闭时销毁组件,默认 true */\n destoryWhenClosed?: boolean\n /** 抽屉唯一标识,当destoryWhenClosed为false时必传 */\n drawerId?: string | number\n /** 组件卸载前调用的方法,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n beforeDrawerClose?: (instance: any) => void\n /** 关闭动画结束后调用的方法,500ms后执行,接收组件实例作为参数,仅在destoryWhenClosed为false时执行 */\n afterDrawerClose?: (instance: any) => void\n /** 抽屉打开后调用的方法,接收组件实例作为参数 */\n afterDrawerOpen?: (instance: any) => void\n}\n\n/**\n * 抽屉引用对象\n */\nexport interface DrawerRef {\n /** 组件实例的响应式引用 */\n componentRef: Ref<any>\n /** 关闭抽屉的方法 */\n close: () => void\n /** 抽屉的唯一ID */\n drawerId: number\n /** 异步获取组件实例的方法 */\n getInstance: () => Promise<any>\n}\n\n/**\n * 获取用于显示抽屉的索引\n * @param drawerId 抽屉ID\n * @returns 分配的索引\n */\nconst getDrawerIndex = (drawerId: number): number => {\n // 如果已经有映射关系,直接返回\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n return index\n }\n }\n\n // 如果有可用索引,使用第一个\n if (availableIndices.length > 0) {\n const index = availableIndices.shift()\n if (index !== undefined) {\n drawerIndexMap.set(drawerId, index)\n return index\n }\n }\n\n // 如果没有可用索引,扩展isShowList数组并使用新增的索引\n const newIndex = isShowList.value.length\n isShowList.value.push(false) // 初始为false,由showDrawer控制显示\n drawerIndexMap.set(drawerId, newIndex)\n return newIndex\n}\n\n/**\n * 释放抽屉索引,使其可供后续抽屉复用\n * @param drawerId 抽屉ID\n */\nconst releaseDrawerIndex = (drawerId: number): void => {\n if (drawerIndexMap.has(drawerId)) {\n const index = drawerIndexMap.get(drawerId)\n if (index !== undefined) {\n // 将该索引标记为可用\n availableIndices.push(index)\n // 清除映射关系\n drawerIndexMap.delete(drawerId)\n }\n }\n}\n\n/**\n * 获取栈顶抽屉ID(最后打开的)\n * @returns 栈顶抽屉ID,如果没有则返回undefined\n */\nconst getTopDrawerId = (): number | undefined => {\n if (drawerStack.length === 0) {\n return undefined\n }\n return drawerStack[drawerStack.length - 1]\n}\n\n/**\n * 关闭所有打开的抽屉\n */\nexport const closeAllDrawers = () => {\n // 复制当前栈,避免在遍历过程中修改\n const drawersToClose = [...drawerStack]\n\n drawersToClose.forEach((drawerId) => {\n closeDrawer(drawerId)\n })\n\n // 清空栈\n drawerStack.length = 0\n}\n\n/**\n * 关闭抽屉(支持栈管理)\n * 如果指定了ID,则关闭对应ID的抽屉\n * 如果未指定ID,则关闭栈顶的抽屉(最后打开的)\n * @param targetId 指定要关闭的抽屉ID,如不传则关闭栈顶抽屉\n */\nexport const closeDrawer = (targetId?: number) => {\n // 确定要关闭的抽屉ID\n const currentId = targetId !== undefined ? targetId : getTopDrawerId()\n\n // 如果没有可关闭的抽屉,直接返回\n if (currentId === undefined) return\n\n // 防止重复关闭\n if (closingDrawers.has(currentId)) return\n\n closingDrawers.add(currentId)\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(currentId)\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n\n const vm = document.querySelector(`#${prefixClass}-${currentId}`) as HTMLElement\n if (!vm) {\n // 如果DOM元素不存在,立即清理状态\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n closingDrawers.delete(currentId)\n return\n }\n\n // 获取该抽屉是否需要在关闭时销毁\n const instance = drawerInstances.get(currentId)\n\n // 立即从抽屉栈中移除,避免快速关闭时的状态混乱\n const stackIndex = drawerStack.indexOf(currentId)\n if (stackIndex > -1) {\n drawerStack.splice(stackIndex, 1)\n }\n\n // 调用onDrawerClose回调\n if (instance && instance.props && typeof instance.props.onDrawerClose === 'function') {\n try {\n instance.props.onDrawerClose()\n } catch (err) {\n console.error('Error in onDrawerClose callback:', err)\n }\n }\n\n // 判断是否需要销毁组件\n const shouldDestroy = instance ? instance.destoryWhenClosed !== false : true\n\n // 只在不销毁的情况下调用关闭前的回调\n if (!shouldDestroy && instance && instance.componentInstance) {\n if (instance.props.beforeDrawerClose && typeof instance.props.beforeDrawerClose === 'function') {\n try {\n instance.props.beforeDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in beforeDrawerClose callback:', err)\n }\n }\n }\n\n // 关闭动画结束后执行的逻辑\n setTimeout(() => {\n // 只在不销毁的情况下执行afterDrawerClose回调\n if (!shouldDestroy && instance && instance.props.afterDrawerClose && typeof instance.props.afterDrawerClose === 'function') {\n try {\n instance.props.afterDrawerClose(instance.componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerClose callback:', err)\n }\n }\n\n if (shouldDestroy) {\n // 释放抽屉索引\n releaseDrawerIndex(currentId)\n\n if (vm && vm.parentNode) {\n render(null, vm)\n getFather().removeChild(vm)\n // 清除实例记录\n drawerInstances.delete(currentId)\n // 清除props存储\n propsStore.delete(currentId)\n document.body.classList.remove('el-popup-parent--hidden')\n document.body.style.width = ''\n }\n } else {\n // 不销毁的情况下,确保抽屉完全隐藏\n if (drawerIndex !== undefined) {\n isShowList.value[drawerIndex] = false\n }\n }\n\n // 从关闭集合中移除\n closingDrawers.delete(currentId)\n }, 500)\n}\n\nconst handleClose = async (_: any, currentId?: number) => {\n closeDrawer(currentId)\n}\n\nconst handleConfirm = async (drawerProps?: ZnDrawerProps, currentId?: number, loading?: Ref<boolean>) => {\n if (drawerProps?.onConfirm && currentId !== undefined) {\n const loadingRef = loading || ref(false)\n // 获取组件实例\n const instance = drawerInstances.get(currentId)\n // 优先使用 componentRef.value,因为它在 ref 回调中会立即更新\n // 如果 componentRef.value 为空,再尝试使用 componentInstance\n const componentInstance = instance?.componentRef?.value || instance?.componentInstance\n drawerProps.onConfirm(() => closeDrawer(currentId), loadingRef, componentInstance)\n return\n }\n\n if (currentId !== undefined) {\n closeDrawer(currentId)\n }\n}\n\n// 修改存储的类型定义\ninterface DrawerInstance {\n props: ZnDrawerProps\n propsRef: Record<string, any>\n destoryWhenClosed: boolean | undefined\n container: HTMLDivElement\n componentInstance: any\n drawerId?: string | number\n component?: Component\n renderKey: number\n // 组件引用相关\n componentRef: Ref<any>\n getInstance: () => Promise<any>\n close?: () => void\n}\n\n/**\n * 创建抽屉引用对象\n */\nconst createDrawerRef = (drawerId: number): DrawerRef => {\n const componentRef = ref<any>(null)\n\n return {\n componentRef,\n close: () => closeDrawer(drawerId),\n drawerId,\n getInstance: () => {\n return new Promise((resolve) => {\n const checkInstance = () => {\n const instance = drawerInstances.get(drawerId)\n if (instance && instance.componentInstance) {\n resolve(instance.componentInstance)\n } else {\n // 如果实例还没准备好,继续等待\n setTimeout(checkInstance, 50)\n }\n }\n checkInstance()\n })\n }\n }\n}\n\n/**\n * 内容渲染方式有两种\n * 方式 1:在第一个参数里写 render,即可实现 el-drawer 的内容渲染\n * 方式 2:第二个参数为组件,第三个参数为组件的 props\n *\n * 在第一个参数里写 headerRender 和 footerRender,可以自定义 el-drawer 的 header 和 footer\n */\nexport const showDrawer = (drawerProps: ZnDrawerProps, component?: Component, componentsProps?: any): DrawerRef => {\n // 设置destoryWhenClosed的默认值为true\n const props = { ...drawerProps, destoryWhenClosed: drawerProps.destoryWhenClosed !== false }\n\n // 验证参数\n if (props.destoryWhenClosed === false && !props.drawerId) {\n console.error('当destoryWhenClosed为false时,drawerId必传')\n throw new Error('当destoryWhenClosed为false时,drawerId必传')\n }\n\n // 如果有drawerId,先检查是否已存在该抽屉\n if (props.drawerId) {\n // 查找是否有对应drawerId的抽屉实例\n for (const [existingId, instance] of drawerInstances.entries()) {\n if (instance.drawerId === props.drawerId) {\n // 如果抽屉正在关闭中,先从关闭集合中移除\n if (closingDrawers.has(existingId)) {\n closingDrawers.delete(existingId)\n }\n\n // 获取抽屉索引\n const drawerIndex = drawerIndexMap.get(existingId)\n if (drawerIndex !== undefined) {\n // 将抽屉显示出来\n isShowList.value[drawerIndex] = true\n }\n\n // 更新栈顺序,移到栈顶(表示最新打开)\n const index = drawerStack.indexOf(existingId)\n if (index > -1) {\n drawerStack.splice(index, 1)\n }\n drawerStack.push(existingId)\n\n // 更新抽屉标题和配置\n const drawerEl = document.querySelector(`#${prefixClass}-${existingId} .el-drawer__header .el-drawer__title`)\n if (drawerEl) {\n drawerEl.textContent = props.title || '抽屉'\n }\n\n // 重置滚动条位置到顶部\n resetDrawerScroll(existingId)\n\n // 获取对应的props响应式对象\n let propsRef = propsStore.get(existingId)\n // 如果没有或组件已变化,则创建新的\n if (!propsRef || instance.component !== component) {\n instance.component = component\n\n // 标记组件为非响应式,避免不必要的深层响应式转换\n const rawComponent = markRaw(component)\n instance.component = rawComponent\n\n // 创建一个深度响应式的props容器\n propsRef = reactive({ ...(componentsProps || {}) })\n propsStore.set(existingId, propsRef)\n\n // 设置到实例中,以便后续引用\n instance.propsRef = propsRef\n } else {\n // 更新现有的props引用\n const newProps = componentsProps || {}\n // 先清空对象\n Object.keys(propsRef).forEach((key) => {\n propsRef[key] = undefined\n })\n // 然后添加新属性\n Object.keys(newProps).forEach((key) => {\n propsRef[key] = newProps[key]\n })\n\n // 增加renderKey强制组件重新渲染\n instance.renderKey = (instance.renderKey || 0) + 1\n }\n\n // 更新实例中的props属性\n instance.props = props\n\n // 执行afterDrawerOpen回调\n nextTick(() => {\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n // 重新获取最新的组件实例\n const updatedInstance = drawerInstances.get(existingId)\n if (updatedInstance && updatedInstance.componentRef.value) {\n try {\n props.afterDrawerOpen(updatedInstance.componentRef.value)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n // 延迟执行,确保组件已经挂载\n setTimeout(checkAndCallAfterOpen, 100)\n }\n\n // 确保滚动条重置\n resetDrawerScroll(existingId)\n })\n\n // 返回现有的 DrawerRef\n return {\n componentRef: instance.componentRef,\n close: instance.close || (() => closeDrawer(existingId)),\n drawerId: existingId,\n getInstance: instance.getInstance\n }\n }\n }\n }\n\n const currentId = ++id\n const isFullscreen = ref(false)\n let componentInstance: any = null\n // 为新抽屉分配索引\n const drawerIndex = getDrawerIndex(currentId)\n\n // 添加到抽屉栈中\n drawerStack.push(currentId)\n\n // 创建一个响应式引用\n const propsRef = reactive({ ...(componentsProps || {}) })\n // 存储到全局Map中\n propsStore.set(currentId, propsRef)\n\n // 创建一个渲染key\n const renderKey = ref(0)\n\n // 创建 DrawerRef 对象\n const drawerRef = createDrawerRef(currentId)\n\n // 创建确认按钮的loading状态\n const confirmLoading = ref(false)\n\n const toggleFull = () => {\n const elDrawerEl = document.querySelector(`${`#${prefixClass}-${currentId}`} .${prefixClass}.el-drawer`) as HTMLElement\n if (elDrawerEl) elDrawerEl.classList.toggle('is-fullscreen')\n isFullscreen.value = !unref(isFullscreen)\n }\n\n const vm = (\n <ElConfigProvider namespace=\"el\" size={unref(layoutSize)}>\n <ElDrawer\n modelValue={isShowList.value[drawerIndex]}\n title=\"抽屉\"\n size=\"30%\"\n onClose={() => handleClose(drawerProps, currentId)}\n {...props}\n render\n headerRender\n footerRender\n class={prefixClass}>\n {{\n default: () => {\n if (props.render) return props.render()\n\n // 使用h函数创建组件,确保props传递的响应式\n if (component) {\n return h(component, {\n ...propsRef,\n key: renderKey.value,\n ref: (el: any) => {\n if (el) {\n componentInstance = el\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = el\n }\n }\n })\n }\n return null\n },\n header: () => {\n if (props.headerRender) return props.headerRender()\n return (\n <Fragment>\n <span class={`.el-drawer__title`}>{props.title}</span>\n {props.fullscreenIcon !== false &&\n (unref(isFullscreen) ? (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg\n t=\"1676740839036\"\n class=\"icon\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2895\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n fill=\"var(--el-color-info)\">\n <path\n d=\"M391 240.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L280 333.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L401 410c5.1 0.6 9.5-3.7 8.9-8.9L391 240.9zM401.1 614.1L240.8 633c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7l18.9-160.1c0.6-5.1-3.7-9.4-8.8-8.8zM622.9 409.9L783.2 391c6.6-0.8 9.4-8.9 4.7-13.6l43.9-43.9L654 200c-3.1-3.1-3.1-8.2 0-11.3l-42.4-42.3c-3.1-3.1-8.2-3.1-11.3 0L614.1 279.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L614.1 401c-0.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L623 614c-5.1-0.6-9.5 3.7-8.9 8.9L633 783.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z\"\n p-id=\"2896\"></path>\n </svg>\n </div>\n ) : (\n <div style=\"width:18px;height:18px; color:var(--el-color-info);cursor:pointer;\" onClick={() => toggleFull()}>\n <svg class=\"icon\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"var(--el-color-info)\">\n <path d=\"M290 236.4l43.9-43.9c4.7-4.7 1.9-12.8-4.7-13.6L169 160c-5.1-0.6-9.5 3.7-8.9 8.9L179 329.1c0.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zM642.7 423.7c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7c4.7 4.7 12.8 1.9 13.6-4.7L863.9 169c0.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6 0.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370c-3.1 3.1-3.1 8.2 0 11.3l42.4 42.4zM845 694.9c-0.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3c-3.1-3.1-8.2-3.1-11.3 0l-42.4 42.3c-3.1 3.1-3.1 8.2 0 11.3L734 787.6l-43.9 43.9c-4.7 4.7-1.9 12.8 4.7 13.6L855 864c5.1 0.6 9.5-3.7 8.9-8.9L845 694.9zM381.3 600.3c-3.1-3.1-8.2-3.1-11.3 0L236.3 733.9l-43.7-43.7c-4.7-4.7-12.8-1.9-13.6 4.7L160.1 855c-0.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-0.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z\" />\n </svg>\n </div>\n ))}\n </Fragment>\n )\n },\n footer: () => {\n if (props.footerRender) return props.footerRender(() => closeDrawer(currentId))\n if (props.showFooter === false) return\n return (\n <Fragment>\n <ElButton onClick={() => (isShowList.value[drawerIndex] = false)}>{props.closeLabel || '取 消'}</ElButton>\n <ElButton type=\"primary\" loading={confirmLoading.value} onClick={() => handleConfirm(props, currentId, confirmLoading)}>\n {props.confirmLabel || '确 定'}\n </ElButton>\n </Fragment>\n )\n }\n }}\n </ElDrawer>\n </ElConfigProvider>\n )\n\n vm.appContext = appContextConst\n vm.children?.length && (vm.children[0].appContext = appContextConst)\n\n const container = document.createElement('div')\n container.id = `${prefixClass}-${currentId}`\n getFather().appendChild(container)\n render(vm, container)\n\n // 立即显示抽屉\n nextTick(() => {\n isShowList.value[drawerIndex] = true\n })\n\n // 存储抽屉实例\n drawerInstances.set(currentId, {\n props,\n propsRef,\n destoryWhenClosed: props.destoryWhenClosed,\n container,\n componentInstance,\n drawerId: props.drawerId,\n component,\n renderKey: renderKey.value,\n componentRef: drawerRef.componentRef,\n getInstance: drawerRef.getInstance\n } as DrawerInstance)\n\n // 延迟更新componentInstance,确保组件已经挂载\n nextTick(() => {\n if (componentInstance) {\n const instance = drawerInstances.get(currentId)\n if (instance) {\n instance.componentInstance = componentInstance\n // 更新 DrawerRef 的 componentRef\n drawerRef.componentRef.value = componentInstance\n }\n }\n\n // 执行afterDrawerOpen回调\n if (props.afterDrawerOpen && typeof props.afterDrawerOpen === 'function') {\n // 等待组件实例准备好\n const checkAndCallAfterOpen = () => {\n if (componentInstance) {\n try {\n props.afterDrawerOpen(componentInstance)\n } catch (err) {\n console.error('Error in afterDrawerOpen callback:', err)\n }\n }\n }\n setTimeout(checkAndCallAfterOpen, 50)\n }\n\n if (props.fullscreen) toggleFull()\n\n // 确保滚动条重置\n resetDrawerScroll(currentId)\n })\n\n // 始终返回 DrawerRef,提供一致的API\n return drawerRef\n}\n\nexport const initDrawerV2 = (ctx?: ComponentInternalInstance) => {\n const { appContext } = ctx || getCurrentInstance() || {}\n appContextConst = appContext\n layoutSize = 'default'\n\n return { open: showDrawer }\n}\n"],"names":["prefixClass","appContextConst","layoutSize","id","drawerInstances","Map","propsStore","availableIndices","drawerIndexMap","drawerStack","isShowList","ref","closingDrawers","Set","getFather","__name","fullScreen","document","querySelector","resetDrawerScroll","nextTick","drawerEl","scrollTop","scrollbars","querySelectorAll","length","i","scrollbar","getDrawerIndex","drawerId","has","index","get","undefined","shift","set","newIndex","value","push","releaseDrawerIndex","delete","getTopDrawerId","closeAllDrawers","forEach","closeDrawer","targetId","currentId","add","drawerIndex","vm","stackIndex","indexOf","splice","instance","props","onDrawerClose","err","error","shouldDestroy","destoryWhenClosed","componentInstance","beforeDrawerClose","setTimeout","afterDrawerClose","parentNode","render","removeChild","body","classList","remove","style","width","handleClose","_","handleConfirm","async","drawerProps","loading","onConfirm","loadingRef","componentRef","createDrawerRef","close","getInstance","Promise","resolve","checkInstance","showDrawer","component","componentsProps","console","Error","existingId","entries","textContent","title","propsRef","newProps","Object","keys","key","renderKey","rawComponent","markRaw","reactive","afterDrawerOpen","updatedInstance","checkAndCallAfterOpen","isFullscreen","drawerRef","confirmLoading","toggleFull","elDrawerEl","toggle","unref","_createVNode","ElConfigProvider","namespace","size","default","ElDrawer","_mergeProps","modelValue","onClose","headerRender","footerRender","class","h","el","header","_Fragment","fullscreenIcon","onClick","t","viewBox","version","xmlns","fill","d","footer","showFooter","ElButton","closeLabel","type","confirmLabel","appContext","children","container","createElement","appendChild","fullscreen","initDrawerV2","ctx","getCurrentInstance","open"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./installer.js");require("./functions/index.js"),require("./hooks/index.js");var o=require("./utils/index.js");require("./directives/index.js"),require("./components/index.js");var r=require("./functions/modules/log.js"),s=require("./hooks/useDialogV2/index.js"),t=require("./hooks/useDrawerV2/index.js"),n=require("./hooks/useDrawerV2/src/index.js"),i=require("./hooks/usePopWindow/src/index.js"),u=require("./hooks/usePopWindow/index.js"),l=require("./hooks/usePopWindowV2/src/index.js"),p=require("./hooks/usePopWindowV2/index.js"),d=require("./hooks/useDialog/index.js"),a=require("./hooks/useImageViewer/src/index.vue2.js"),x=require("./hooks/useImageViewer/index.js"),c=require("./hooks/useDrawer/index.js"),m=require("./utils/install.js"),q=require("./directives/modules/copy.js"),j=require("./directives/modules/drag.js"),h=require("./directives/modules/autoScroll.js"),w=require("./directives/modules/tooltip.js"),V=require("./directives/modules/confirm.js"),T=require("./directives/modules/countTo.js"),Z=require("./functions/modules/uitls.js"),g=require("./functions/modules/is.js"),f=require("./components/znForm/src/hooks/useZnForm.js"),I=require("./components/znFormV2/src/hooks/useZnFormV2.js"),W=require("./components/znSearch/src/hooks/useProSearch.js"),F=require("./components/znChart/index.js"),P=require("./components/znCountTo/index.js"),z=require("./components/znForm/src/components/ZnFormItem.vue2.js"),v=require("./components/znForm/index.js"),b=require("./components/znFormV2/src/helper/index.js"),y=require("./components/znFormV2/src/components/ZnFormV2Item.vue2.js"),k=require("./components/znFormV2/index.js"),D=require("./components/znGrid/index.js"),S=require("./components/znNumberScroll/index.js"),E=require("./components/znSearch/index.js"),C=require("./components/znTable/index.js"),B=require("./components/znTest/index.js"),G=require("./components/znTimeLine/index.js"),A=require("./components/znTreeFilter/index.js"),U=require("./components/znTreeSelect/index.js"),L=require("./components/znVirtualTable/src/utils/vxe-setup.js"),O=require("./components/znWorkGrid/index.js"),H=require("./components/znVirtualTable/src/index.vue2.js");globalThis.log=r.default;"function"==typeof globalThis?.log?.success&&globalThis.log.primary("1.1.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./installer.js");require("./functions/index.js"),require("./hooks/index.js");var o=require("./utils/index.js");require("./directives/index.js"),require("./components/index.js");var r=require("./functions/modules/log.js"),s=require("./hooks/useDialogV2/index.js"),t=require("./hooks/useDrawerV2/index.js"),n=require("./hooks/useDrawerV2/src/index.js"),i=require("./hooks/usePopWindow/src/index.js"),u=require("./hooks/usePopWindow/index.js"),l=require("./hooks/usePopWindowV2/src/index.js"),p=require("./hooks/usePopWindowV2/index.js"),d=require("./hooks/useDialog/index.js"),a=require("./hooks/useImageViewer/src/index.vue2.js"),x=require("./hooks/useImageViewer/index.js"),c=require("./hooks/useDrawer/index.js"),m=require("./utils/install.js"),q=require("./directives/modules/copy.js"),j=require("./directives/modules/drag.js"),h=require("./directives/modules/autoScroll.js"),w=require("./directives/modules/tooltip.js"),V=require("./directives/modules/confirm.js"),T=require("./directives/modules/countTo.js"),Z=require("./functions/modules/uitls.js"),g=require("./functions/modules/is.js"),f=require("./components/znForm/src/hooks/useZnForm.js"),I=require("./components/znFormV2/src/hooks/useZnFormV2.js"),W=require("./components/znSearch/src/hooks/useProSearch.js"),F=require("./components/znChart/index.js"),P=require("./components/znCountTo/index.js"),z=require("./components/znForm/src/components/ZnFormItem.vue2.js"),v=require("./components/znForm/index.js"),b=require("./components/znFormV2/src/helper/index.js"),y=require("./components/znFormV2/src/components/ZnFormV2Item.vue2.js"),k=require("./components/znFormV2/index.js"),D=require("./components/znGrid/index.js"),S=require("./components/znNumberScroll/index.js"),E=require("./components/znSearch/index.js"),C=require("./components/znTable/index.js"),B=require("./components/znTest/index.js"),G=require("./components/znTimeLine/index.js"),A=require("./components/znTreeFilter/index.js"),U=require("./components/znTreeSelect/index.js"),L=require("./components/znVirtualTable/src/utils/vxe-setup.js"),O=require("./components/znWorkGrid/index.js"),H=require("./components/znVirtualTable/src/index.vue2.js");globalThis.log=r.default;"function"==typeof globalThis?.log?.success&&globalThis.log.primary("1.1.16","欢迎使用znyg-frontend-common,在线文档:http://192.168.99.34:10000/znyg-frontend-common-docs/"),exports.default=e.default,exports.install=e.install,exports.copyText=o.copyText,exports.formatValue=o.formatValue,exports.treeListUtil=o.treeListUtil,exports.treeToList=o.treeToList,exports.log=r.default,exports.useDialogV2=s.useDialogV2,exports.useDrawerV2=t.useDrawerV2,exports.closeAllDrawers=n.closeAllDrawers,exports.closePopWindowById=i.closePopWindowById,exports.closePopWindowByTag=i.closePopWindowByTag,exports.getAllPopWindows=i.getAllPopWindows,exports.showPopWindow=i.showPopWindow,exports.usePopWindow=u.usePopWindow,exports.closePopWindowByIdV2=l.closePopWindowByIdV2,exports.closePopWindowByTagV2=l.closePopWindowByTagV2,exports.getAllPopWindowsV2=l.getAllPopWindowsV2,exports.showPopWindowV2=l.showPopWindowV2,exports.usePopWindowV2=p.usePopWindowV2,exports.useDialog=d.useDialog,exports.ImageViewer=a.default,exports.useImageViewer=x.useImageViewer,exports.useDrawer=c.useDrawer,exports.withInstall=m.withInstall,exports.withInstallDirectives=m.withInstallDirectives,exports.vCopy=q.default,exports.vDrag=j.default,exports.vAutoScroll=h.default,exports.vTooltip=w.default,exports.vConfirm=V.default,exports.vCountTo=T.default,exports.utils=Z.default,exports.is=g,exports.useZnForm=f.useZnForm,exports.useZnFormV2=I.useZnFormV2,exports.useZnSearch=W.useZnSearch,exports.ZnChart=F.ZnChart,exports.ZnCountTo=P.ZnCountTo,exports.ZnFormItem=z.default,exports.ZnForm=v.ZnForm,exports.batchExecute=b.batchExecute,exports.camelCaseToHyphen=b.camelCaseToHyphen,exports.checkFeatureSupport=b.checkFeatureSupport,exports.createUniqueId=b.createUniqueId,exports.debounce=b.debounce,exports.delay=b.delay,exports.executeInIdle=b.executeInIdle,exports.getElementOffsetTop=b.getElementOffsetTop,exports.getMemoryUsage=b.getMemoryUsage,exports.getObjectHash=b.getObjectHash,exports.isDeepEqual=b.isDeepEqual,exports.isElementInViewport=b.isElementInViewport,exports.isShallowEqual=b.isShallowEqual,exports.throttle=b.throttle,exports.ZnFormV2Item=y.default,exports.ZnFormV2=k.ZnFormV2,exports.ZnGrid=D.ZnGrid,exports.ZnGridItem=D.ZnGridItem,exports.ZnNumberScroll=S.ZnNumberScroll,exports.ZnSearch=E.ZnSearch,exports.ZnTable=C.ZnTable,exports.ZnTest=B.ZnTest,exports.ZnTimeline=G.ZnTimeline,exports.ZnTreeFilter=A.ZnTreeFilter,exports.ZnTreeSelect=U.ZnTreeSelect,exports.initVXETable=L.initVXETable,exports.isVXETableInitialized=L.isVXETableInitialized,exports.ZnWorkGrid=O.ZnWorkGrid,exports.ZnVirtualTable=H.default;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../packages/index.ts"],"sourcesContent":["import installer from './installer'\nimport { log } from './functions'\nexport * from './hooks'\nexport * from './utils'\nexport * from './installer'\nexport * from './directives'\nexport * from './functions'\nexport * from './components'\n\nexport default installer\nglobalThis.log = log\nconst version = '1.1.
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../packages/index.ts"],"sourcesContent":["import installer from './installer'\nimport { log } from './functions'\nexport * from './hooks'\nexport * from './utils'\nexport * from './installer'\nexport * from './directives'\nexport * from './functions'\nexport * from './components'\n\nexport default installer\nglobalThis.log = log\nconst version = '1.1.16'\nif (typeof globalThis?.log?.success === 'function') {\n globalThis.log.primary(version, '欢迎使用znyg-frontend-common,在线文档:http://192.168.99.34:10000/znyg-frontend-common-docs/')\n}\n"],"names":["globalThis","log","default","success","primary"],"mappings":"6sEAUAA,WAAWC,IAAMA,EAAAC,QAEuB,mBAA7BF,YAAYC,KAAKE,SACfH,WAAAC,IAAIG,QAFD,SAEkB"}
|