UNPKG

vxe-table

Version:

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

1 lines 5.87 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:"VxeButton",props:{type:String,className:[String,Function],popupClassName:[String,Function],size:{type:String,default:function(){return _conf.default.button.size||_conf.default.size}},name:[String,Number],content:String,placement:String,status:String,icon:String,round:Boolean,circle:Boolean,disabled:Boolean,loading:Boolean,destroyOnClose:Boolean,transfer:{type:Boolean,default:function(){return _conf.default.button.transfer}}},emits:["click","dropdown-click"],setup:function(_,e){function b(e){i.dispatchEvent("click",{$event:e},e)}function h(e){0===e.button&&e.stopPropagation()}function x(e){var t=e.currentTarget,n=z.value,o=(t=(0,_dom.getEventTargetNode)(e,t,"vxe-button")).flag,t=t.targetElem;o&&(n&&(n.dataset.active="N"),P.showPanel=!1,setTimeout(function(){n&&"Y"===n.dataset.active||(P.animatVisible=!1)},350),i.dispatchEvent("dropdown-click",{name:t.getAttribute("name"),$event:e},e))}function g(){var e=z.value;e&&(e.dataset.active="Y",P.inited||(P.inited=!0),n.showTime=setTimeout(function(){"Y"===e.dataset.active?V():P.animatVisible=!1},250))}function w(){c()}function T(){var e=_.content,t=_.icon,n=[];return _.loading?n.push((0,_vue.h)("i",{class:["vxe-button--loading-icon",_conf.default.icon.BUTTON_LOADING]})):y.icon?n.push((0,_vue.h)("span",{class:"vxe-button--custom-icon"},y.icon({}))):t&&n.push((0,_vue.h)("i",{class:["vxe-button--icon",t]})),y.default?n.push((0,_vue.h)("span",{class:"vxe-button--content"},y.default({}))):e&&n.push((0,_vue.h)("span",{class:"vxe-button--content"},(0,_utils.getFuncText)(e))),n}var y=e.slots,o=e.emit,t=_xeUtils.default.uniqueId(),N=(0,_size.useSize)(_),P=(0,_vue.reactive)({inited:!1,showPanel:!1,animatVisible:!1,panelIndex:0,panelStyle:{},panelPlacement:""}),n={showTime:null},S=(0,_vue.ref)(),k=(0,_vue.ref)(),z=(0,_vue.ref)(),a={refElem:S},O={xID:t,props:_,context:e,reactData:P,internalData:n,getRefMaps:function(){return a}},i={},q=(0,_vue.computed)(function(){var e=_.type;return!!e&&-1<["submit","reset","button"].indexOf(e)}),I=(0,_vue.computed)(function(){var e=_.type;return e&&"text"===e?e:"button"}),u=function(){P.panelIndex<(0,_utils.getLastZIndex)()&&(P.panelIndex=(0,_utils.nextZIndex)())},s=function(){return(0,_vue.nextTick)().then(function(){var e,t,n,o,a,i,u,s,c=_.transfer,l=_.placement,r=P.panelIndex,d=k.value,v=z.value;if(v&&d)return e=d.offsetHeight,t=d.offsetWidth,n=v.offsetHeight,v=v.offsetWidth,r={zIndex:r},s=(d=(0,_dom.getAbsolutePos)(d)).top,o=d.left,a=d.boundingTop,i=d.visibleHeight,d=d.visibleWidth,u="bottom",c?(c=s+e,"top"===l?(u="top",c=s-n):l||(i<a+e+n+5&&(u="top",c=s-n),c<5&&(u="bottom",c=s+e)),d<(s=o+t-v)+v+5&&(s-=s+v+5-d),s<5&&(s=5),Object.assign(r,{left:"".concat(s,"px"),right:"auto",top:"".concat(c,"px"),minWidth:"".concat(t,"px")})):"top"===l?(u="top",r.bottom="".concat(e,"px")):l||i<a+e+n&&5<a-e-n&&(u="top",r.bottom="".concat(e,"px")),P.panelStyle=r,P.panelPlacement=u,(0,_vue.nextTick)()})},V=function(){var e=z.value;e&&(e.dataset.active="Y",P.animatVisible=!0,setTimeout(function(){"Y"===e.dataset.active&&(P.showPanel=!0,u(),s(),setTimeout(function(){P.showPanel&&s()},50))},20))},c=function(){var e=z.value;clearTimeout(n.showTime),e?(e.dataset.active="N",setTimeout(function(){"Y"!==e.dataset.active&&(P.showPanel=!1,setTimeout(function(){"Y"!==e.dataset.active&&(P.animatVisible=!1)},350))},100)):(P.animatVisible=!1,P.showPanel=!1)},i={dispatchEvent:function(e,t,n){o(e,Object.assign({$button:O,$event:n},t))},focus:function(){return k.value.focus(),(0,_vue.nextTick)()},blur:function(){return k.value.blur(),(0,_vue.nextTick)()}};Object.assign(O,i),(0,_vue.onMounted)(function(){_event.GlobalEvent.on(O,"mousewheel",function(e){var t=z.value;P.showPanel&&!(0,_dom.getEventTargetNode)(e,t).flag&&c()})}),(0,_vue.onUnmounted)(function(){_event.GlobalEvent.off(O,"mousewheel")});return O.renderVN=function(){var e=_.className,t=_.popupClassName,n=_.transfer,o=_.type,a=_.round,i=_.circle,u=_.destroyOnClose,s=_.status,c=_.name,l=_.disabled,r=_.loading,d=P.inited,v=P.showPanel,f=q.value,p=I.value,m=N.value;return y.dropdowns?(0,_vue.h)("div",{ref:S,class:["vxe-button--dropdown",e?_xeUtils.default.isFunction(e)?e({$button:O}):e:"",((e={})["size--".concat(m)]=m,e["is--active"]=v,e)]},[(0,_vue.h)("button",{ref:k,class:["vxe-button","type--".concat(p),((e={})["size--".concat(m)]=m,e["theme--".concat(s)]=s,e["is--round"]=a,e["is--circle"]=i,e["is--disabled"]=l||r,e["is--loading"]=r,e)],name:c,type:f?o:"button",disabled:l||r,onMouseenter:g,onMouseleave:w,onClick:b},T().concat([(0,_vue.h)("i",{class:"vxe-button--dropdown-arrow ".concat(_conf.default.icon.BUTTON_DROPDOWN)})])),(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!n||!d},[(0,_vue.h)("div",{ref:z,class:["vxe-button--dropdown-panel",t?_xeUtils.default.isFunction(t)?t({$button:O}):t:"",((e={})["size--".concat(m)]=m,e["animat--leave"]=P.animatVisible,e["animat--enter"]=v,e)],placement:P.panelPlacement,style:P.panelStyle},d?[(0,_vue.h)("div",{class:"vxe-button--dropdown-wrapper",onMousedown:h,onClick:x,onMouseenter:V,onMouseleave:w},u&&!v?[]:y.dropdowns({}))]:[])])]):(0,_vue.h)("button",{ref:k,class:["vxe-button","type--".concat(p),((n={})["size--".concat(m)]=m,n["theme--".concat(s)]=s,n["is--round"]=a,n["is--circle"]=i,n["is--disabled"]=l||r,n["is--loading"]=r,n)],name:c,type:f?o:"button",disabled:l||r,onClick:b},T())},O},render:function(){return this.renderVN()}});exports.default=_default;