vxe-pc-ui
Version:
A vue based PC component library
1 lines • 17.2 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"),_utils=require("../../ui/src/utils"),_dom=require("../../ui/src/dom"),_util=require("../../date-panel/src/util"),_vn=require("../../ui/src/vn"),_log=require("../../ui/src/log"),_datePanel=_interopRequireDefault(require("../../date-panel/src/date-panel")),_button=_interopRequireDefault(require("../../button/src/button")),_buttonGroup=_interopRequireDefault(require("../../button/src/button-group"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeDateRangePicker",props:{modelValue:[String,Number,Date,Array],startValue:[String,Number,Date],endValue:[String,Number,Date],immediate:{type:Boolean,default:!0},name:String,type:{type:String,default:"date"},clearable:{type:Boolean,default:()=>(0,_ui.getConfig)().dateRangePicker.clearable},readonly:{type:Boolean,default:null},disabled:{type:Boolean,default:null},placeholder:String,autoComplete:{type:String,default:"off"},form:String,className:String,zIndex:Number,size:{type:String,default:()=>(0,_ui.getConfig)().dateRangePicker.size||(0,_ui.getConfig)().size},minDate:[String,Number,Date],maxDate:[String,Number,Date],defaultDate:[String,Number,Date,Array],defaultTime:[String,Number,Date,Array],startDay:{type:[String,Number],default:()=>(0,_ui.getConfig)().dateRangePicker.startDay},labelFormat:String,valueFormat:String,timeFormat:String,valueType:String,editable:{type:Boolean,default:!0},festivalMethod:{type:Function,default:()=>(0,_ui.getConfig)().dateRangePicker.festivalMethod},disabledMethod:{type:Function,default:()=>(0,_ui.getConfig)().dateRangePicker.disabledMethod},separator:{type:[String,Number],default:()=>(0,_ui.getConfig)().dateRangePicker.separator},selectDay:{type:[String,Number],default:()=>(0,_ui.getConfig)().dateRangePicker.selectDay},showClearButton:{type:Boolean,default:()=>(0,_ui.getConfig)().dateRangePicker.showClearButton},showConfirmButton:{type:Boolean,default:()=>(0,_ui.getConfig)().dateRangePicker.showConfirmButton},autoClose:{type:Boolean,default:()=>(0,_ui.getConfig)().dateRangePicker.autoClose},prefixIcon:String,suffixIcon:String,placement:String,transfer:{type:Boolean,default:null},timeConfig:Object,popupConfig:Object,shortcutConfig:Object},emits:["update:modelValue","update:startValue","update:endValue","input","change","keydown","keyup","click","focus","blur","clear","confirm","prefix-click","suffix-click","date-prev","date-today","date-next","shortcut-click"],setup(A,e){const{slots:R,emit:i}=e,c=(0,_vue.inject)("$xeModal",null),p=(0,_vue.inject)("$xeDrawer",null),k=(0,_vue.inject)("$xeTable",null),n=(0,_vue.inject)("$xeForm",null),o=(0,_vue.inject)("xeFormItemInfo",null);var t=_xeUtils.default.uniqueId();const I=(0,_ui.useSize)(A)["computeSize"],N=(0,_vue.reactive)({initialized:!1,panelIndex:0,visiblePanel:!1,isAniVisible:!1,panelStyle:{},panelPlacement:"",isActivated:!1,startValue:"",endValue:""}),r={},g=(0,_vue.ref)(),_=(0,_vue.ref)(),M=(0,_vue.ref)(),B=(0,_vue.ref)(),z=(0,_vue.ref)(),j=(0,_vue.ref)(),D={refElem:g,refInput:_},q={xID:t,props:A,context:e,reactData:N,internalData:r,getRefMaps:()=>D};const U=(0,_vue.computed)(()=>{var e=A["transfer"],t=$.value;if(_xeUtils.default.isBoolean(t.transfer))return t.transfer;if(null===e){t=(0,_ui.getConfig)().dateRangePicker.transfer;if(_xeUtils.default.isBoolean(t))return t;if(k||c||p||n)return!0}return e}),f=(0,_vue.computed)(()=>{var e=A["readonly"];return null===e?!!n&&n.props.readonly:e}),b=(0,_vue.computed)(()=>{var e=A["disabled"];return null===e?!!n&&n.props.disabled:e}),Y=(0,_vue.computed)(()=>{var e=A["defaultDate"];return e?_xeUtils.default.isArray(e)?e:-1<(""+e).indexOf(",")?(""+e).split(","):[e,e]:[]}),Z=(0,_vue.computed)(()=>{var e=A["defaultTime"];return e?_xeUtils.default.isArray(e)?e:-1<(""+e).indexOf(",")?(""+e).split(","):[e,e]:[]});t=(0,_vue.computed)(()=>{var{startValue:e,endValue:t}=A;return""+(e||"")+(t||"")});const H=(0,_vue.computed)(()=>{var e=A["type"];return"time"===e||"datetime"===e}),s=(0,_vue.computed)(()=>-1<["date","week","month","quarter","year"].indexOf(A.type)),O=(0,_vue.computed)(()=>A.clearable),C=(0,_vue.computed)(()=>{var e=A["placeholder"];return(e=e||(0,_ui.getConfig)().dateRangePicker.placeholder)?(0,_utils.getFuncText)(e):(0,_ui.getI18n)("vxe.dateRangePicker.pleaseRange")}),l=(0,_vue.computed)(()=>{var e=A["immediate"];return e}),J=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().dateRangePicker.timeConfig,A.timeConfig)),$=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().dateRangePicker.popupConfig,A.popupConfig)),L=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().dateRangePicker.shortcutConfig,A.shortcutConfig)),K=(0,_vue.computed)(()=>{var e=L.value["options"];return e?e.map((e,t)=>Object.assign({name:""+(e.name||e.code||t)},e)):[]}),P=(0,_vue.computed)(()=>{var e=A["labelFormat"];return e||(0,_ui.getI18n)("vxe.input.date.labelFormat."+A.type)}),m=(0,_vue.computed)(()=>{var{type:e,valueFormat:t}=A;return(0,_util.handleValueFormat)(e,t)}),E=(0,_vue.computed)(()=>{var e=A["startDay"];return _xeUtils.default.toNumber(e)}),Q=(0,_vue.computed)(()=>{var{startValue:e,endValue:t}=N,e=e||t?[e||"",t||""]:[];return w(e)}),S=(0,_vue.computed)(()=>{return Q.value.label}),w=e=>{var{type:t,separator:a}=A,l=P.value,u=m.value,r=E.value,i=e[0]?(0,_util.parseDateObj)(e[0],t,{valueFormat:u,labelFormat:l,firstDay:r}):null,e=e[1]?(0,_util.parseDateObj)(e[1],t,{valueFormat:u,labelFormat:l,firstDay:r}):null,t=i?i.label:"",u=e?e.label:"";return{label:(t||u?[t,u]:[]).join(""+(a||" ~ ")),startLabel:t,endLabel:u}},y=(e,t)=>{var{modelValue:a,valueType:l}=A;let u=_xeUtils.default.isArray(a);if(l)switch(l){case"array":u=!0;break;case"string":u=!1}return e||t?(a=[e||"",t||""],u?a:a.join(",")):u?[]:""},F=()=>{var e,{type:t,modelValue:a}=A,l=m.value;let u="",r="";return _xeUtils.default.isArray(a)?(e=(0,_util.parseDateString)(a[0],t,{valueFormat:l}),t=(0,_util.parseDateString)(a[1],t,{valueFormat:l}),(e||t)&&(u=e||"",r=t||"")):_xeUtils.default.isString(a)&&((l=a.split(","))[0]||l[1])&&(u=l[0]||"",r=l[1]||""),{sValue:u,eValue:r}},T=()=>{var{type:e,startValue:t,endValue:a}=A,l=m.value;return{sValue:(0,_util.parseDateString)(t,e,{valueFormat:l}),eValue:(0,_util.parseDateString)(a,e,{valueFormat:l})}},a=e=>{var{modelValue:t,startValue:a,endValue:l}=A;let u={sValue:"",eValue:""};u=(e?t?F:T:a||l?T:F)(),N.startValue=u.sValue,N.endValue=u.eValue},u=e=>{var{startValue:t,endValue:a}=N,l=y(t,a);V(e.type,{value:l,startValue:t,endValue:a},e)},h=(e,t,a)=>{var l=A["modelValue"],u=(N.startValue=e,N.endValue=t,y(e,t)),r=e&&t||!e&&!t;i("update:modelValue",u),i("update:startValue",e||""),i("update:endValue",t||""),_xeUtils.default.toValueString(l)!==u&&(V("change",{value:u,startValue:e,endValue:t,isFinish:r},a),n)&&o&&n.triggerItemEvent(a,o.itemConfig.field,u)},W=e=>{l.value||u(e)},X=e=>{N.isActivated=!0,_e(e),u(e)},ee=e=>{var t,a,l;b.value||({startValue:t,endValue:a}=N,l=y(t,a),V("prefix-click",{value:l,startValue:t,endValue:a},e))},x=()=>new Promise(e=>{N.visiblePanel=!1,r.hpTimeout=setTimeout(()=>{N.isAniVisible=!1,e()},350)}),te=(e,t)=>{s.value&&x();h("","",e),V("clear",{value:t,startValue:"",endValue:""},e)},d=()=>{var e=z.value,t=j.value;e&&t&&(e=e.getModelValue(),t=t.getModelValue(),e&&t||h("","",{type:"check"}))},ae=()=>{var e=A["autoClose"],{startValue:t,endValue:a}=N,l=r["selectStatus"],u=s.value;e?l&&u&&t&&a&&x():t&&a&&(r.selectStatus=!1)},le=e=>{var t,a,l;b.value||({startValue:t,endValue:a}=N,l=y(t,a),V("suffix-click",{value:l,startValue:t,endValue:a},e))},ue=e=>{var{startValue:t,endValue:a}=N;l.value||h(t,a,e),N.visiblePanel||(N.isActivated=!1),V("blur",{value:"",startValue:t,endValue:a},e),n&&o&&n.triggerItemEvent(e,o.itemConfig.field,"")},re=e=>{u(e)},ie=e=>{u(e)},ne=e=>{var t,a,l=z.value,u=j.value;l&&u&&(t=l.getModelValue(),a=u.getModelValue(),t&&!a||!t&&a?h("","",e):(l.confirmByEvent(e),u.confirmByEvent(e)),l=y(t,a),V("confirm",{value:l,startValue:t,endValue:a},e)),x()},oe=e=>{var t=r["selectStatus"],{value:e,$event:a}=e;const l=t?N.endValue:"";h(e,l,a),ae(),t||(r.selectStatus=!0),(0,_vue.nextTick)(()=>{var e=z.value,t=j.value;e&&t&&(e=e.getModelValue(),!l)&&e&&t.setPanelDate(_xeUtils.default.toStringDate(e))})},se=e=>{var t=r["selectStatus"],{value:e,$event:a}=e;const l=t?N.startValue:"";h(l,e,a),ae(),t||(r.selectStatus=!0),(0,_vue.nextTick)(()=>{var e=z.value,t=j.value;e&&t&&(t=t.getModelValue(),!l)&&t&&e.setPanelDate(_xeUtils.default.toStringDate(t))})},de=e=>{var{visiblePanel:t,isActivated:a}=N,l=g.value,u=B.value;!b.value&&a&&(N.isActivated=(0,_dom.getEventTargetNode)(e,l).flag||(0,_dom.getEventTargetNode)(e,u).flag,N.isActivated||t&&(d(),x()))},ve=e=>{var t,a=N["visiblePanel"];b.value||(t=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.TAB),e=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ESCAPE),t&&(N.isActivated=!1),a&&(e||t)&&(d(),x()))},ce=e=>{var t=N["visiblePanel"];b.value||t&&(t=B.value,((0,_dom.getEventTargetNode)(e,t).flag?v:(d(),x))())},pe=()=>{var{visiblePanel:e,isActivated:t}=N;e&&(d(),x()),t&&(N.isActivated=!1),(e||t)&&(e=_.value)&&e.blur()},me=()=>{var e=N["visiblePanel"];e&&v()},v=()=>{const a=A["placement"],l=N["panelIndex"],u=_.value,r=M.value,i=U.value,n=$.value;var e=()=>{var e=(0,_dom.updatePanelPlacement)(u,r,{placement:n.placement||a,teleportTo:i}),t=Object.assign(e.style,{zIndex:l});N.panelStyle=t,N.panelPlacement=e.placement};return e(),(0,_vue.nextTick)().then(e)},ge=()=>{var e=N["visiblePanel"];return(b.value||e?(0,_vue.nextTick):(N.initialized||(N.initialized=!0),r.hpTimeout&&(clearTimeout(r.hpTimeout),r.hpTimeout=void 0),r.selectStatus=!1,N.isActivated=!0,N.isAniVisible=!0,setTimeout(()=>{N.visiblePanel=!0,v()},10),(e=$.value.zIndex||A.zIndex)?N.panelIndex=_xeUtils.default.toNumber(e):N.panelIndex<(0,_utils.getLastZIndex)()&&(N.panelIndex=(0,_utils.nextZIndex)()),v))()},_e=e=>{f.value||(e.preventDefault(),ge())},fe=e=>{u(e)},be=({option:e,$event:t})=>{var a=A["type"],l=L.value,u=l["autoClose"],{code:r,clickMethod:i}=e,n=N.startValue,o=N.endValue,s=y(n,o),d={$dateRangePicker:q,option:e,value:s,startValue:n,endValue:o,code:r};if(!i&&r){e=_ui.commands.get(r),e=e?e.dateRangePickerCommandMethod:null;if(e)e(d);else{var v=m.value,c=E.value;switch(r){case"last1":case"last3":case"last7":case"last30":case"last60":case"last90":case"last180":var p=(0,_util.getRangeDateByCode)(r,s,a,{valueFormat:v,firstDay:c}),n=p.startValue,o=p.endValue,s=y(n,o);d.value=s,d.startValue=n,d.endValue=o,h(n,o,t);break;default:(0,_log.errLog)("vxe.error.notCommands",["[date-range-picker] "+r])}}}else{e=i||l.clickMethod;e&&e(d)}u&&x(),V("shortcut-click",d,t)},V=(e,t,a)=>{i(e,(0,_ui.createEvent)(a,{$dateRangePicker:q},t))},G=(e={dispatchEvent:V,setModelValue(e,t){N.startValue=e||"",N.endValue=t||"";e=y(e,t);i("update:modelValue",e)},setModelValueByEvent(e,t,a){h(t||"",a||"",e)},focus(){var e=_.value;return N.isActivated=!0,e.focus(),(0,_vue.nextTick)()},blur(){return _.value.blur(),(N.isActivated=!1,_vue.nextTick)()},select(){return _.value.select(),(N.isActivated=!1,_vue.nextTick)()},showPanel:ge,hidePanel:x,updatePlacement:v},Object.assign(q,e),(e,t)=>{var a=L.value,{position:l,align:u,mode:r}=a,i=K.value;return(0,_utils.isEnableConf)(a)&&i.length&&(l||"left")===e?(0,_vue.h)("div",{class:`vxe-date-range-picker--layout-${e}-wrapper`},[(0,_vue.h)(_buttonGroup.default,{options:i,mode:r,align:u,vertical:t,onClick:be})]):(0,_ui.renderEmptyElement)(q)}),ye=()=>(0,_vue.h)("div",{class:"vxe-date-range-picker--control-icon",onClick:_e},[(0,_vue.h)("i",{class:["vxe-date-range-picker--date-picker-icon",(0,_ui.getIcon)().DATE_PICKER_DATE]})]);return(0,_vue.watch)(()=>A.modelValue,()=>{a(!0)}),(0,_vue.watch)(t,()=>{a(!1)}),a(!0),(0,_vue.nextTick)(()=>{_ui.globalEvents.on(q,"mousewheel",ce),_ui.globalEvents.on(q,"mousedown",de),_ui.globalEvents.on(q,"keydown",ve),_ui.globalEvents.on(q,"blur",pe),_ui.globalEvents.on(q,"resize",me)}),(0,_vue.onDeactivated)(()=>{d()}),(0,_vue.onUnmounted)(()=>{_ui.globalEvents.off(q,"mousewheel"),_ui.globalEvents.off(q,"mousedown"),_ui.globalEvents.off(q,"blur"),_ui.globalEvents.off(q,"resize")}),(0,_vue.onBeforeUnmount)(()=>{d()}),(0,_vue.provide)("$xeDateRangePicker",q),q.renderVN=()=>{var e,t,a,{className:l,type:u,name:r,autoComplete:i}=A,{startValue:n,endValue:o,visiblePanel:s,isActivated:d}=N,v=I.value,c=b.value,p=f.value,m=S.value;return p?(0,_vue.h)("div",{ref:g,class:["vxe-date-range-picker--readonly","type--"+u,l]},m):(p=C.value,e=O.value,a=A.prefixIcon,t=(t=R.prefix)||a?(0,_vue.h)("div",{class:"vxe-date-range-picker--prefix",onClick:ee},[(0,_vue.h)("div",{class:"vxe-date-range-picker--prefix-icon"},t?(0,_vn.getSlotVNs)(t({})):[(0,_vue.h)("i",{class:a})])]):null,a=(()=>{var e=A["suffixIcon"],{startValue:t,endValue:a}=N,l=R.suffix,u=b.value,r=O.value;return(0,_vue.h)("div",{class:["vxe-date-range-picker--suffix",{"is--clear":r&&!u&&(t||a)}]},[r?(0,_vue.h)("div",{class:"vxe-date-range-picker--clear-icon",onClick:te},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().INPUT_CLEAR})]):(0,_ui.renderEmptyElement)(q),ye(),l||e?(0,_vue.h)("div",{class:"vxe-date-range-picker--suffix-icon",onClick:le},l?(0,_vn.getSlotVNs)(l({})):[(0,_vue.h)("i",{class:e})]):(0,_ui.renderEmptyElement)(q)])})(),(0,_vue.h)("div",{ref:g,class:["vxe-date-range-picker","type--"+u,l,{["size--"+v]:v,"is--prefix":!!t,"is--suffix":!!a,"is--visible":s,"is--disabled":c,"is--active":d,"show--clear":e&&!c&&(n||o)}],spellcheck:!1},[t||(0,_ui.renderEmptyElement)(q),(0,_vue.h)("div",{class:"vxe-date-range-picker--wrapper"},[(0,_vue.h)("input",{ref:_,class:"vxe-date-range-picker--inner",value:m,name:r,type:"text",placeholder:p,editable:!1,disabled:c,autocomplete:i,onKeydown:re,onKeyup:ie,onClick:fe,onChange:W,onFocus:X,onBlur:ue})]),a||(0,_ui.renderEmptyElement)(q),(()=>{var{type:e,separator:t,autoClose:a,showConfirmButton:l,showClearButton:u}=A,{initialized:r,isAniVisible:i,visiblePanel:n,panelPlacement:o,panelStyle:s,startValue:d,endValue:v}=N,c=I.value,p=U.value,m=L.value,g=O.value,_=Q.value,f=K.value,b=H.value,y=Y.value,h=Z.value,x=J.value,V=$.value,{startLabel:_,endLabel:k}=_,m=m["position"],D=R.header,C=R.footer,P=R.top,E=R.bottom,S=R.left,w=R.right,V=V.className,[y,F]=y,[h,T]=h,f=0<f.length,b=null===l?b||!a:l,a=null===u?g:u;return(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!p||!r},[(0,_vue.h)("div",{ref:M,class:["vxe-table--ignore-clear vxe-date-range-picker--panel","type--"+e,V?_xeUtils.default.isFunction(V)?V({$dateRangePicker:q}):V:"",{["size--"+c]:c,"is--transfer":p,"ani--leave":i,"ani--enter":n,"show--top":!!(P||D||f&&("top"===m||"header"===m)),"show--bottom":!!(E||C||f&&("bottom"===m||"footer"===m)),"show--left":!!(S||f&&"left"===m),"show--right":!!(w||f&&"right"===m)}],placement:o,style:s},r&&(n||i)?[(0,_vue.h)("div",{ref:B,class:["vxe-date-range-picker--layout-all-wrapper","type--"+e,{["size--"+c]:c}]},[P?(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-top-wrapper"},P({})):G("top"),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-body-layout-wrapper"},[S?(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-left-wrapper"},S({})):G("left",!0),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-body-content-wrapper"},[D?(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-header-wrapper"},D({})):G("header"),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-body-wrapper"},[(0,_vue.h)(_datePanel.default,{ref:z,modelValue:d,type:A.type,className:A.className,minDate:A.minDate,maxDate:A.maxDate,endDate:v,startDay:A.startDay,labelFormat:A.labelFormat,valueFormat:A.valueFormat,timeFormat:A.timeFormat,defaultDate:y,defaultTime:h,timeConfig:x,festivalMethod:A.festivalMethod,disabledMethod:A.disabledMethod,selectDay:A.selectDay,onChange:oe}),(0,_vue.h)(_datePanel.default,{ref:j,modelValue:v,type:A.type,className:A.className,minDate:A.minDate,maxDate:A.maxDate,startDate:d,startDay:A.startDay,labelFormat:A.labelFormat,valueFormat:A.valueFormat,timeFormat:A.timeFormat,defaultDate:F,defaultTime:T,timeConfig:x,festivalMethod:A.festivalMethod,disabledMethod:A.disabledMethod,selectDay:A.selectDay,onChange:se})]),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-footer-wrapper"},[(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-footer-label"},_||k?[(0,_vue.h)("span",_),(0,_vue.h)("span",""+(t||"")),(0,_vue.h)("span",k)]:""+(t||"")),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-footer-custom"},C?C({}):[G("footer")]),(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-footer-btns"},[a?(0,_vue.h)(_button.default,{size:"mini",disabled:!(d||v),content:(0,_ui.getI18n)("vxe.button.clear"),onClick:te}):(0,_ui.renderEmptyElement)(q),b?(0,_vue.h)(_button.default,{size:"mini",status:"primary",content:(0,_ui.getI18n)("vxe.button.confirm"),onClick:ne}):(0,_ui.renderEmptyElement)(q)])])]),w?(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-right-wrapper"},w({})):G("right",!0)]),E?(0,_vue.h)("div",{class:"vxe-date-range-picker--layout-bottom-wrapper"},E({})):G("bottom")])]:[])])})()]))},q},render(){return this.renderVN()}});