vxe-pc-ui
Version:
A vue based PC component library
1 lines • 11.3 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom"),_utils=require("../../ui/src/utils"),_vn=require("../../ui/src/vn"),_log=require("../../ui/src/log"),_tooltip=_interopRequireDefault(require("../../tooltip"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const VxeButtonComponent=(0,_comp.defineVxeComponent)({name:"VxeButton",props:{type:String,mode:String,className:[String,Function],popupClassName:[String,Function],size:{type:String,default:()=>(0,_ui.getConfig)().button.size||(0,_ui.getConfig)().size},zIndex:Number,name:[String,Number],routerLink:Object,permissionCode:[String,Number],content:String,placement:String,status:String,title:String,shadow:Boolean,icon:String,iconRender:Object,prefixIcon:String,prefixRender:Object,suffixIcon:String,suffixRender:Object,round:Boolean,circle:Boolean,disabled:Boolean,loading:Boolean,trigger:{type:String,default:()=>(0,_ui.getConfig)().button.trigger},align:String,prefixTooltip:Object,suffixTooltip:Object,options:Array,showDropdownIcon:{type:Boolean,default:()=>(0,_ui.getConfig)().button.showDropdownIcon},destroyOnClose:{type:Boolean,default:()=>(0,_ui.getConfig)().button.destroyOnClose},popupConfig:Object,transfer:{type:Boolean,default:null}},emits:["click","mouseenter","mouseleave","dropdown-click","dropdownClick","contextmenu"],setup(N,e){const{slots:I,emit:i}=e,n=(0,_vue.inject)("$xeModal",null),o=(0,_vue.inject)("$xeDrawer",null),u=(0,_vue.inject)("$xeTable",null),s=(0,_vue.inject)("$xeTree",null),a=(0,_vue.inject)("$xeForm",null),l=(0,_vue.inject)("$xeButtonGroup",null);var t=_xeUtils.default.uniqueId();const P=(0,_ui.useSize)(N)["computeSize"],S=(0,_ui.usePermission)(N)["computePermissionInfo"],B=(0,_vue.reactive)({initialized:!1,visiblePanel:!1,isAniVisible:!1,isActivated:!1,panelIndex:0,panelStyle:{},panelPlacement:""}),r={showTime:void 0,tooltipTimeout:void 0},j=(0,_vue.ref)(),z=(0,_vue.ref)(),U=(0,_vue.ref)(),c={refElem:j},$={xID:t,props:N,context:e,reactData:B,internalData:r,getRefMaps:()=>c};const V=(0,_vue.computed)(()=>{var e=N["transfer"],t=D.value;if(_xeUtils.default.isBoolean(t.transfer))return t.transfer;if(null===e){t=(0,_ui.getConfig)().button.transfer;if(_xeUtils.default.isBoolean(t))return t;if(u||s||n||o||a)return!0}return e}),E=(0,_vue.computed)(()=>{var e=N["disabled"],t=S.value;return e||t.disabled}),M=(0,_vue.computed)(()=>{var e=N["type"];return!!e&&-1<["submit","reset","button"].indexOf(e)}),Z=(0,_vue.computed)(()=>{var{type:e,mode:t}=N;return"text"===t||"text"===e||l&&"text"===l.props.mode?"text":"button"}),J=(0,_vue.computed)(()=>{var e=N["status"];return e||(l?l.props.status:"")}),K=(0,_vue.computed)(()=>{var e=N["align"];return e||!!l&&l.props.align}),Q=(0,_vue.computed)(()=>{var e=N["round"];return e||!!l&&l.props.round}),X=(0,_vue.computed)(()=>{var e=N["circle"];return e||!!l&&l.props.circle}),ee=(0,_vue.computed)(()=>{var e=N["options"];return e?e.filter(e=>{e=e.permissionCode;return!e||_ui.permission.checkVisible(e)}):[]}),D=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().button.popupConfig,N.popupConfig)),_=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().button.prefixTooltip,N.prefixTooltip)),b=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().button.suffixTooltip,N.suffixTooltip)),p=()=>{var e=D.value.zIndex||N.zIndex;e?B.panelIndex=_xeUtils.default.toNumber(e):B.panelIndex<(0,_utils.getLastZIndex)()&&(B.panelIndex=(0,_utils.nextZIndex)())},v=()=>{const n=N["placement"],i=B["panelIndex"],o=z.value,u=U.value,s=V.value,a=D.value;var e=()=>{var e=(0,_dom.updatePanelPlacement)(o,u,{placement:a.placement||n,teleportTo:s}),t=Object.assign(e.style,{zIndex:i});B.panelStyle=t,B.panelPlacement=e.placement};return e(),(0,_vue.nextTick)().then(e)},q=e=>{l&&l.handleClick({name:N.name},e),W("click",{$event:e},e)},te=e=>{0===e.button&&e.stopPropagation()},ne=e=>{var t=e.currentTarget;const n=U.value;var{flag:t,targetElem:i}=(0,_dom.getEventTargetNode)(e,t,"vxe-button");t&&(n&&(n.dataset.active="N"),B.visiblePanel=!1,setTimeout(()=>{n&&"Y"===n.dataset.active||(B.isAniVisible=!1)},350),W("dropdown-click",{name:i.getAttribute("name"),option:null},e))},A=()=>{const e=U.value;e&&(e.dataset.active="Y",B.isAniVisible=!0,setTimeout(()=>{"Y"===e.dataset.active&&(B.visiblePanel=!0,p(),v(),setTimeout(()=>{B.visiblePanel&&v()},50))},20))},ie=e=>{var t=N["loading"];E.value||t||(d(),R(e))},oe=e=>{G(),F(e)},R=e=>{W("mouseenter",{},e)},F=e=>{W("mouseleave",{},e)},L=e=>{W("contextmenu",{},e)},Y=e=>{var{loading:t,trigger:n}=N;E.value||t||("click"===n&&(B.visiblePanel?G:d)(),q(e))},d=()=>{var e=N["trigger"];const t=U.value;return t&&(t.dataset.active="Y",B.initialized||(B.initialized=!0),r.showTime=setTimeout(()=>{"Y"===t.dataset.active?A():B.isAniVisible=!1},"click"===e?50:250)),(0,_vue.nextTick)()},G=()=>{const e=U.value;return clearTimeout(r.showTime),e?(e.dataset.active="N",setTimeout(()=>{"Y"!==e.dataset.active&&(B.visiblePanel=!1,setTimeout(()=>{"Y"!==e.dataset.active&&(B.isAniVisible=!1)},350))},100)):(B.isAniVisible=!1,B.visiblePanel=!1),(0,_vue.nextTick)()},ue=()=>{G()},m=(e,t)=>(0,_vue.h)(_tooltip.default,{useHTML:e.useHTML,content:e.content,enterable:e.enterable,theme:e.theme},{default(){return(0,_vue.h)("span",{class:`vxe-button--item vxe-button--tooltip-${t}-icon`},[(0,_vue.h)("i",{class:e.icon||(0,_ui.getIcon)().BUTTON_TOOLTIP_ICON})])}}),H=()=>{var{content:e,suffixIcon:t,loading:n,prefixTooltip:i,suffixTooltip:o,suffixRender:u}=N,s=N.prefixIcon||N.icon,a=N.prefixRender||N.iconRender,l=_.value,r=b.value,c=I.prefix||I.icon,v=I.suffix,d=I.default,p=[];return i&&p.push(m(l,"prefix")),n?p.push((0,_vue.h)("i",{class:["vxe-button--item vxe-button--loading-icon",(0,_ui.getIcon)().BUTTON_LOADING]})):c?p.push((0,_vue.h)("span",{class:"vxe-button--item vxe-button--custom-prefix-icon"},c({}))):a?(l=(i=_ui.renderer.get(a.name))?i.renderButtonPrefix:null,p.push((0,_vue.h)("span",{class:["vxe-button--item vxe-button--custom-prefix-icon"]},l?(0,_vn.getSlotVNs)(l(a,{$button:$})):[]))):s&&p.push((0,_vue.h)("i",{class:["vxe-button--item vxe-button--prefix-icon",s]})),d?p.push((0,_vue.h)("span",{class:"vxe-button--item vxe-button--content"},d({}))):e&&p.push((0,_vue.h)("span",{class:"vxe-button--item vxe-button--content"},(0,_utils.getFuncText)(e))),v?p.push((0,_vue.h)("span",{class:"vxe-button--item vxe-button--custom-suffix-icon"},v({}))):u?(c=(n=_ui.renderer.get(u.name))?n.renderButtonSuffix:null,p.push((0,_vue.h)("span",{class:["vxe-button--item vxe-button--custom-suffix-icon"]},c?(0,_vn.getSlotVNs)(c(u,{$button:$})):[]))):t&&p.push((0,_vue.h)("i",{class:["vxe-button--item vxe-button--suffix-icon",t]})),o&&p.push(m(r,"suffix")),p},W=(e,t,n)=>{i(e,(0,_ui.createEvent)(n,{$button:$},t))},x=(t={dispatchEvent:W,openPanel:d,closePanel:G,focus(){var e=z.value;return e&&e.focus(),(0,_vue.nextTick)()},blur(){var e=z.value;return e&&e.blur(),(0,_vue.nextTick)()}},e=>{var t=U.value;B.visiblePanel&&!(0,_dom.getEventTargetNode)(e,t).flag&&G()}),f=e=>{var t,n=E.value,i=B["visiblePanel"];n||(n=j.value,t=U.value,B.isActivated=(0,_dom.getEventTargetNode)(e,n).flag||(0,_dom.getEventTargetNode)(e,t).flag,i&&!B.isActivated&&G())},g=()=>{var e=B["visiblePanel"];e&&v()};Object.assign($,t);return $.renderVN=()=>{const{className:e,trigger:t,title:n,routerLink:i,type:o,destroyOnClose:u,name:s,loading:a,shadow:l,showDropdownIcon:r}=N;var{initialized:c,isAniVisible:v,visiblePanel:d}=B,p=M.value;const m=Z.value;var _=J.value;const b=Q.value;var x=K.value;const f=X.value;var g,h=V.value,T=E.value,C=S.value,w=ee.value,y=D.value,O=P.value,k=I.dropdowns,y=y.className||N.popupClassName;return C.visible?k||w.length?(C={onContextmenu:L},g={},"hover"===t&&(C.onMouseenter=ie,C.onMouseleave=oe,g.onMouseenter=A,g.onMouseleave=ue),(0,_vue.h)("div",{ref:j,class:["vxe-button--dropdown",e?_xeUtils.default.isFunction(e)?e({$button:$}):e:"",{["size--"+O]:O,"is--active":d}]},[i?(0,_vue.h)((0,_vue.resolveComponent)("router-link"),Object.assign({ref:z,class:["vxe-button","vxe-button--link","type--"+m,x?"align--"+x:"",e?_xeUtils.default.isFunction(e)?e({$button:$}):e:"",{["size--"+O]:O,["theme--"+_]:_,"is--round":b,"is--circle":f,"is--shadow":l,"is--disabled":T||a,"is--loading":a}],title:n,name:s,type:p?o:"button",disabled:T||a,to:i,onClick:Y},C),{default(){return H().concat(r?[(0,_vue.h)("i",{class:"vxe-button--dropdown-arrow "+(0,_ui.getIcon)().BUTTON_DROPDOWN})]:[])}}):(0,_vue.h)("button",Object.assign({ref:z,class:["vxe-button","type--"+m,x?"align--"+x:"",e?_xeUtils.default.isFunction(e)?e({$button:$}):e:"",{["size--"+O]:O,["theme--"+_]:_,"is--round":b,"is--circle":f,"is--shadow":l,"is--disabled":T||a,"is--loading":a}],title:n,name:s,type:p?o:"button",disabled:T||a,onClick:Y},C),H().concat(r?[(0,_vue.h)("i",{class:"vxe-button--dropdown-arrow "+(0,_ui.getIcon)().BUTTON_DROPDOWN})]:[])),(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!h||!c},[(0,_vue.h)("div",Object.assign({ref:U,class:["vxe-button--dropdown-panel",y?_xeUtils.default.isFunction(y)?y({$button:$}):y:"",{["size--"+O]:O,"is--transfer":h,"ani--leave":v,"ani--enter":d}],placement:B.panelPlacement,style:B.panelStyle},g),c&&(d||v)?[k?(0,_vue.h)("div",{class:"vxe-button--dropdown-wrapper",onMousedown:te,onClick:ne},c&&(!u||d||v)?k({}):[]):(0,_vue.h)("div",{class:"vxe-button--dropdown-wrapper"},c&&(!u||d||v)?w.map((i,e)=>(0,_vue.h)(VxeButtonComponent,{key:e,type:i.type,mode:i.mode||m,className:i.className,name:i.name,routerLink:i.routerLink,permissionCode:i.permissionCode,title:i.title,content:i.content,status:i.status,icon:i.icon,round:_xeUtils.default.isBoolean(i.round)?i.round:"text"!==m&&b,circle:_xeUtils.default.isBoolean(i.circle)?i.circle:"text"!==m&&f,disabled:i.disabled,loading:i.loading,align:i.align,onClick(e){var t=e,n=i;t=e.$event,G(),W("dropdown-click",{name:n.name,option:n},t)}})):[])]:[])])])):i?(0,_vue.h)((0,_vue.resolveComponent)("router-link"),{ref:z,class:["vxe-button","vxe-button--link","type--"+m,x?"align--"+x:"",e?_xeUtils.default.isFunction(e)?e({$button:$}):e:"",{["size--"+O]:O,["theme--"+_]:_,"is--round":b,"is--circle":f,"is--shadow":l,"is--disabled":T||a,"is--loading":a}],title:n,name:s,type:p?o:"button",disabled:T||a,to:i,onClick:q,onMouseenter:R,onMouseleave:F,onContextmenu:L},{default(){return H()}}):(0,_vue.h)("button",{ref:z,class:["vxe-button","type--"+m,x?"align--"+x:"",e?_xeUtils.default.isFunction(e)?e({$button:$}):e:"",{["size--"+O]:O,["theme--"+_]:_,"is--round":b,"is--circle":f,"is--shadow":l,"is--disabled":T||a,"is--loading":a}],title:n,name:s,type:p?o:"button",disabled:T||a,onClick:q,onMouseenter:R,onMouseleave:F,onContextmenu:L},H()):(0,_ui.renderEmptyElement)($)},(0,_vue.onMounted)(()=>{"text"===N.type&&(0,_log.warnLog)("vxe.error.delProp",["[button] type=text","mode=text"]),_ui.globalEvents.on($,"mousewheel",x),_ui.globalEvents.on($,"mousedown",f),_ui.globalEvents.on($,"resize",g)}),(0,_vue.onUnmounted)(()=>{_ui.globalEvents.off($,"mousewheel"),_ui.globalEvents.off($,"mousedown"),_ui.globalEvents.off($,"resize")}),$},render(){return this.renderVN()}});var _default=exports.default=VxeButtonComponent;