UNPKG

vxe-table

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

1 lines 4.53 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-x-e-table/src/conf")),_size=require("../../hooks/size"),_dom=require("../../tools/dom"),_utils=require("../../tools/utils"),_event=require("../../tools/event");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=(0,_vue.defineComponent)({name:"VxePulldown",props:{modelValue:Boolean,disabled:Boolean,placement:String,size:{type:String,default:function(){return _conf.default.size}},className:[String,Function],popupClassName:[String,Function],destroyOnClose:Boolean,transfer:Boolean},emits:["update:modelValue","hide-panel"],setup:function(v,e){function t(){return _.inited||(_.inited=!0),new Promise(function(e){v.disabled?(0,_vue.nextTick)(function(){e()}):(clearTimeout(a),_.isActivated=!0,_.animatVisible=!0,setTimeout(function(){_.visiblePanel=!0,u("update:modelValue",!0),c(),setTimeout(function(){e(c())},40)},10),r())})}function o(){return _.visiblePanel=!1,u("update:modelValue",!1),new Promise(function(e){_.animatVisible?a=window.setTimeout(function(){(_.animatVisible=!1,_vue.nextTick)(function(){e()})},350):(0,_vue.nextTick)(function(){e()})})}function n(e){var t=v.disabled,n=_.visiblePanel,i=x.value;t||n&&((0,_dom.getEventTargetNode)(e,i).flag?c():(o(),g.dispatchEvent("hide-panel",{},e)))}function i(e){var t=v.disabled,n=_.visiblePanel,i=m.value,l=x.value;t||(_.isActivated=(0,_dom.getEventTargetNode)(e,i).flag||(0,_dom.getEventTargetNode)(e,l).flag,n&&!_.isActivated&&(o(),g.dispatchEvent("hide-panel",{},e)))}function l(e){_.visiblePanel&&(_.isActivated=!1,o(),g.dispatchEvent("hide-panel",{},e))}var a,f=e.slots,u=e.emit,s=_xeUtils.default.uniqueId(),p=(0,_size.useSize)(v),_=(0,_vue.reactive)({inited:!1,panelIndex:0,panelStyle:null,panelPlacement:null,visiblePanel:!1,animatVisible:!1,isActivated:!1}),m=(0,_vue.ref)(),b=(0,_vue.ref)(),x=(0,_vue.ref)(),d={refElem:m},h={xID:s,props:v,context:e,reactData:_,getRefMaps:function(){return d}},r=function(){_.panelIndex<(0,_utils.getLastZIndex)()&&(_.panelIndex=(0,_utils.nextZIndex)())},c=function(){return(0,_vue.nextTick)().then(function(){var e,t,n,i,l,o,a,u,s,d=v.transfer,r=v.placement,c=_.panelIndex;return _.visiblePanel&&(a=b.value,i=x.value)&&a&&(e=a.offsetHeight,t=a.offsetWidth,n=i.offsetHeight,i=i.offsetWidth,c={zIndex:c},l=(a=(0,_dom.getAbsolutePos)(a)).boundingTop,s=a.boundingLeft,o=a.visibleHeight,a=a.visibleWidth,u="bottom",d?(d=l+e,"top"===r?(u="top",d=l-n):r||(o<d+n+5&&(u="top",d=l-n),d<5&&(u="bottom",d=l+e)),a<(s=s)+i+5&&(s-=s+i+5-a),s<5&&(s=5),Object.assign(c,{left:"".concat(s,"px"),top:"".concat(d,"px"),minWidth:"".concat(t,"px")})):"top"===r?(u="top",c.bottom="".concat(e,"px")):r||o<l+e+n&&5<l-e-n&&(u="top",c.bottom="".concat(e,"px")),_.panelStyle=c,_.panelPlacement=u),(0,_vue.nextTick)()})},g={dispatchEvent:function(e,t,n){u(e,Object.assign({$pulldown:h,$event:n},t))},isPanelVisible:function(){return _.visiblePanel},togglePanel:function(){return(_.visiblePanel?o:t)()},showPanel:t,hidePanel:o};Object.assign(h,g),(0,_vue.watch)(function(){return v.modelValue},function(e){(e?t:o)()}),(0,_vue.nextTick)(function(){_event.GlobalEvent.on(h,"mousewheel",n),_event.GlobalEvent.on(h,"mousedown",i),_event.GlobalEvent.on(h,"blur",l)}),(0,_vue.onUnmounted)(function(){_event.GlobalEvent.off(h,"mousewheel"),_event.GlobalEvent.off(h,"mousedown"),_event.GlobalEvent.off(h,"blur")});return h.renderVN=function(){var e=v.className,t=v.popupClassName,n=v.destroyOnClose,i=v.transfer,l=v.disabled,o=_.inited,a=_.isActivated,u=_.animatVisible,s=_.visiblePanel,d=_.panelStyle,r=_.panelPlacement,c=p.value;return(0,_vue.h)("div",{ref:m,class:["vxe-pulldown",e?_xeUtils.default.isFunction(e)?e({$pulldown:h}):e:"",((e={})["size--".concat(c)]=c,e["is--visivle"]=s,e["is--disabled"]=l,e["is--active"]=a,e)]},[(0,_vue.h)("div",{ref:b,class:"vxe-pulldown--content"},f.default?f.default({$pulldown:h}):[]),(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!i||!o},[(0,_vue.h)("div",{ref:x,class:["vxe-table--ignore-clear vxe-pulldown--panel",t?_xeUtils.default.isFunction(t)?t({$pulldown:h}):t:"",((l={})["size--".concat(c)]=c,l["is--transfer"]=i,l["animat--leave"]=u,l["animat--enter"]=s,l)],placement:r,style:d},f.dropdown?[(0,_vue.h)("div",{class:"vxe-pulldown--wrapper"},!o||n&&!s&&!u?[]:f.dropdown({$pulldown:h}))]:[])])])},h},render:function(){return this.renderVN()}});exports.default=_default;