UNPKG

vxe-pc-ui

Version:
1 lines • 17.2 kB
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){let{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 a=_xeUtils.default.uniqueId();let 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:a,props:A,context:e,reactData:N,internalData:r,getRefMaps:()=>D};let U=(0,_vue.computed)(()=>{var e=A.transfer,a=$.value;if(_xeUtils.default.isBoolean(a.transfer))return a.transfer;if(null===e){a=(0,_ui.getConfig)().dateRangePicker.transfer;if(_xeUtils.default.isBoolean(a))return a;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]:[]});a=(0,_vue.computed)(()=>{var{startValue:e,endValue:a}=A;return""+(e||"")+(a||"")});let 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,a)=>Object.assign({name:""+(e.name||e.code||a)},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:a}=A;return(0,_util.handleValueFormat)(e,a)}),E=(0,_vue.computed)(()=>{var e=A.startDay;return _xeUtils.default.toNumber(e)}),Q=(0,_vue.computed)(()=>{var{startValue:e,endValue:a}=N,e=e||a?[e||"",a||""]:[];return w(e)}),S=(0,_vue.computed)(()=>Q.value.label),w=e=>{var{type:a,separator:t}=A,l=P.value,u=m.value,r=E.value,i=e[0]?(0,_util.parseDateObj)(e[0],a,{valueFormat:u,labelFormat:l,firstDay:r}):null,e=e[1]?(0,_util.parseDateObj)(e[1],a,{valueFormat:u,labelFormat:l,firstDay:r}):null,a=i?i.label:"",u=e?e.label:"";return{label:(a||u?[a,u]:[]).join(""+(t||" ~ ")),startLabel:a,endLabel:u}},y=(e,a)=>{var{modelValue:t,valueType:l}=A;let u=_xeUtils.default.isArray(t);if(l)switch(l){case"array":u=!0;break;case"string":u=!1}return e||a?(t=[e||"",a||""],u?t:t.join(",")):u?[]:""},F=()=>{var e,{type:a,modelValue:t}=A,l=m.value;let u="",r="";return _xeUtils.default.isArray(t)?(e=(0,_util.parseDateString)(t[0],a,{valueFormat:l}),a=(0,_util.parseDateString)(t[1],a,{valueFormat:l}),(e||a)&&(u=e||"",r=a||"")):_xeUtils.default.isString(t)&&((l=t.split(","))[0]||l[1])&&(u=l[0]||"",r=l[1]||""),{sValue:u,eValue:r}},T=()=>{var{type:e,startValue:a,endValue:t}=A,l=m.value;return{sValue:(0,_util.parseDateString)(a,e,{valueFormat:l}),eValue:(0,_util.parseDateString)(t,e,{valueFormat:l})}},t=e=>{var{modelValue:a,startValue:t,endValue:l}=A;let u={sValue:"",eValue:""};u=(e?a?F:T:t||l?T:F)(),N.startValue=u.sValue,N.endValue=u.eValue},u=e=>{var{startValue:a,endValue:t}=N,l=y(a,t);V(e.type,{value:l,startValue:a,endValue:t},e)},h=(e,a,t)=>{var l=A.modelValue,u=(N.startValue=e,N.endValue=a,y(e,a)),r=e&&a||!e&&!a;i("update:modelValue",u),i("update:startValue",e||""),i("update:endValue",a||""),_xeUtils.default.toValueString(l)!==u&&(V("change",{value:u,startValue:e,endValue:a,isFinish:r},t),n)&&o&&n.triggerItemEvent(t,o.itemConfig.field,u)},W=e=>{l.value||u(e)},X=e=>{N.isActivated=!0,fe(e),u(e)},ee=e=>{var a,t,l;b.value||({startValue:a,endValue:t}=N,l=y(a,t),V("prefix-click",{value:l,startValue:a,endValue:t},e))},x=()=>new Promise(e=>{N.visiblePanel=!1,r.hpTimeout=setTimeout(()=>{N.isAniVisible=!1,e()},350)}),ae=(e,a)=>{s.value&&x();h("","",e),V("clear",{value:a,startValue:"",endValue:""},e)},d=()=>{var e=z.value,a=j.value;e&&a&&(e=e.getModelValue(),a=a.getModelValue(),e&&a||h("","",{type:"check"}))},te=()=>{var e=A.autoClose,{startValue:a,endValue:t}=N,l=r.selectStatus,u=s.value;e?l&&u&&a&&t&&x():a&&t&&(r.selectStatus=!1)},le=e=>{var a,t,l;b.value||({startValue:a,endValue:t}=N,l=y(a,t),V("suffix-click",{value:l,startValue:a,endValue:t},e))},ue=e=>{var{startValue:a,endValue:t}=N;l.value||h(a,t,e),N.visiblePanel||(N.isActivated=!1),V("blur",{value:"",startValue:a,endValue:t},e),n&&o&&n.triggerItemEvent(e,o.itemConfig.field,"")},re=e=>{u(e)},ie=e=>{u(e)},ne=e=>{var a,t,l=z.value,u=j.value;l&&u&&(a=l.getModelValue(),t=u.getModelValue(),a&&!t||!a&&t?h("","",e):(l.confirmByEvent(e),u.confirmByEvent(e)),l=y(a,t),V("confirm",{value:l,startValue:a,endValue:t},e)),x()},oe=e=>{var a=r.selectStatus,{value:e,$event:t}=e;let l=a?N.endValue:"";h(e,l,t),te(),a||(r.selectStatus=!0),(0,_vue.nextTick)(()=>{var e=z.value,a=j.value;e&&a&&(e=e.getModelValue(),!l)&&e&&a.setPanelDate(_xeUtils.default.toStringDate(e))})},se=e=>{var a=r.selectStatus,{value:e,$event:t}=e;let l=a?N.startValue:"";h(l,e,t),te(),a||(r.selectStatus=!0),(0,_vue.nextTick)(()=>{var e=z.value,a=j.value;e&&a&&(a=a.getModelValue(),!l)&&a&&e.setPanelDate(_xeUtils.default.toStringDate(a))})},de=e=>{var{visiblePanel:a,isActivated:t}=N,l=g.value,u=B.value;!b.value&&t&&(N.isActivated=(0,_dom.getEventTargetNode)(e,l).flag||(0,_dom.getEventTargetNode)(e,u).flag,N.isActivated||a&&(d(),x()))},ve=e=>{var a,t=N.visiblePanel;b.value||(a=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.TAB),e=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ESCAPE),a&&(N.isActivated=!1),t&&(e||a)&&(d(),x()))},ce=e=>{var a=N.visiblePanel;b.value||a&&(a=B.value,((0,_dom.getEventTargetNode)(e,a).flag?v:(d(),x))())},pe=()=>{var{visiblePanel:e,isActivated:a}=N;e&&(d(),x()),a&&(N.isActivated=!1),(e||a)&&(e=_.value)&&e.blur()},me=()=>{var e=N.visiblePanel;e&&v()},ge=()=>{var e=$.value.zIndex||A.zIndex;e?N.panelIndex=_xeUtils.default.toNumber(e):N.panelIndex<(0,_utils.getLastZIndex)()&&(N.panelIndex=(0,_utils.nextZIndex)())},v=()=>{let t=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||t,defaultPlacement:n.defaultPlacement,teleportTo:i}),a=Object.assign(e.style,{zIndex:l});N.panelStyle=a,N.panelPlacement=e.placement};return e(),(0,_vue.nextTick)().then(e)},_e=()=>{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),ge(),v))()},fe=e=>{f.value||(e.preventDefault(),_e())},be=e=>{u(e)},ye=({option:e,$event:a})=>{var t=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,t,{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,a);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,a)},V=(e,a,t)=>{i(e,(0,_ui.createEvent)(t,{$dateRangePicker:q},a))},G=(e={dispatchEvent:V,setModelValue(e,a){N.startValue=e||"",N.endValue=a||"";e=y(e,a);i("update:modelValue",e)},setModelValueByEvent(e,a,t){h(a||"",t||"",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:_e,hidePanel:x,updatePlacement:v},Object.assign(q,e),(e,a)=>{var t=L.value,{position:l,align:u,mode:r}=t,i=K.value;return(0,_utils.isEnableConf)(t)&&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:a,onClick:ye})]):(0,_ui.renderEmptyElement)(q)}),he=()=>(0,_vue.h)("div",{class:"vxe-date-range-picker--control-icon",onClick:fe},[(0,_vue.h)("i",{class:["vxe-date-range-picker--date-picker-icon",(0,_ui.getIcon)().DATE_PICKER_DATE]})]);return(0,_vue.watch)(()=>A.modelValue,()=>{t(!0)}),(0,_vue.watch)(a,()=>{t(!1)}),t(!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,a,t,{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,t=A.prefixIcon,a=(a=R.prefix)||t?(0,_vue.h)("div",{class:"vxe-date-range-picker--prefix",onClick:ee},[(0,_vue.h)("div",{class:"vxe-date-range-picker--prefix-icon"},a?(0,_vn.getSlotVNs)(a({})):[(0,_vue.h)("i",{class:t})])]):null,t=(()=>{var e=A.suffixIcon,{startValue:a,endValue:t}=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&&(a||t)}]},[r?(0,_vue.h)("div",{class:"vxe-date-range-picker--clear-icon",onClick:ae},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().INPUT_CLEAR})]):(0,_ui.renderEmptyElement)(q),he(),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":!!a,"is--suffix":!!t,"is--visible":s,"is--disabled":c,"is--active":d,"show--clear":e&&!c&&(n||o)}],spellcheck:!1},[a||(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:be,onChange:W,onFocus:X,onBlur:ue})]),t||(0,_ui.renderEmptyElement)(q),(()=>{var{type:e,separator:a,autoClose:t,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||!t:l,t=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",""+(a||"")),(0,_vue.h)("span",k)]:""+(a||"")),(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"},[t?(0,_vue.h)(_button.default,{size:"mini",disabled:!(d||v),content:(0,_ui.getI18n)("vxe.button.clear"),onClick:ae}):(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()}});