UNPKG

vxe-pc-ui

Version:
1 lines • 14.1 kB
"use strict";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"),_vn=require("../../ui/src/vn"),_util=require("../../date-panel/src/util"),_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:"VxeDatePicker",props:{modelValue:[String,Number,Date],immediate:{type:Boolean,default:!0},name:String,type:{type:String,default:"date"},clearable:{type:Boolean,default:()=>(0,_ui.getConfig)().datePicker.clearable},readonly:{type:Boolean,default:null},disabled:{type:Boolean,default:null},placeholder:String,autoComplete:{type:String,default:"off"},form:String,className:String,size:{type:String,default:()=>(0,_ui.getConfig)().datePicker.size||(0,_ui.getConfig)().size},multiple:Boolean,limitCount:{type:[String,Number],default:()=>(0,_ui.getConfig)().datePicker.limitCount},startDate:{type:[String,Number,Date],default:()=>(0,_ui.getConfig)().datePicker.startDate},endDate:{type:[String,Number,Date],default:()=>(0,_ui.getConfig)().datePicker.endDate},defaultDate:[String,Number,Date],minDate:[String,Number,Date],maxDate:[String,Number,Date],startDay:{type:[String,Number],default:()=>(0,_ui.getConfig)().datePicker.startDay},labelFormat:String,valueFormat:String,timeFormat:String,editable:{type:Boolean,default:!0},festivalMethod:{type:Function,default:()=>(0,_ui.getConfig)().datePicker.festivalMethod},disabledMethod:{type:Function,default:()=>(0,_ui.getConfig)().datePicker.disabledMethod},selectDay:{type:[String,Number],default:()=>(0,_ui.getConfig)().datePicker.selectDay},showClearButton:{type:Boolean,default:()=>(0,_ui.getConfig)().datePicker.showClearButton},showConfirmButton:{type:Boolean,default:()=>(0,_ui.getConfig)().datePicker.showConfirmButton},autoClose:{type:Boolean,default:()=>(0,_ui.getConfig)().datePicker.autoClose},prefixIcon:String,suffixIcon:String,placement:String,transfer:{type:Boolean,default:null},shortcutConfig:Object,startWeek:Number},emits:["update:modelValue","input","change","keydown","keyup","click","focus","blur","clear","prefix-click","suffix-click","date-prev","date-today","date-next","shortcut-click"],setup(k,e){const{slots:C,emit:n}=e,d=(0,_vue.inject)("$xeModal",null),g=(0,_vue.inject)("$xeDrawer",null),b=(0,_vue.inject)("$xeTable",null),o=(0,_vue.inject)("$xeForm",null),v=(0,_vue.inject)("xeFormItemInfo",null);var t=_xeUtils.default.uniqueId();const D=(0,_ui.useSize)(k)["computeSize"],E=(0,_vue.reactive)({initialized:!1,panelIndex:0,visiblePanel:!1,isAniVisible:!1,panelStyle:{},panelPlacement:"",isActivated:!1,inputValue:"",inputLabel:""}),a={hpTimeout:void 0},h=(0,_vue.ref)(),y=(0,_vue.ref)(),P=(0,_vue.ref)(),V=(0,_vue.ref)(),w=(0,_vue.ref)(),L={refElem:h,refInput:y},S={xID:t,props:k,context:e,reactData:E,internalData:a,getRefMaps:()=>L},T=(0,_vue.computed)(()=>{var e=k["transfer"];if(null===e){var t=(0,_ui.getConfig)().datePicker.transfer;if(_xeUtils.default.isBoolean(t))return t;if(b||d||g||o)return!0}return e}),x=(0,_vue.computed)(()=>{var e=k["readonly"];return null===e?!!o&&o.props.readonly:e}),I=(0,_vue.computed)(()=>{var e=k["disabled"];return null===e?!!o&&o.props.disabled:e}),N=(0,_vue.computed)(()=>{var e=k["type"];return"time"===e||"datetime"===e}),l=(0,_vue.computed)(()=>{return N.value||-1<["date","week","month","quarter","year"].indexOf(k.type)}),A=(0,_vue.computed)(()=>k.clearable),j=(0,_vue.computed)(()=>{var{type:e,editable:t,multiple:a}=k;return x.value||a||!t||"week"===e||"quarter"===e}),U=(0,_vue.computed)(()=>{var e=k["placeholder"];return(e=e||(0,_ui.getConfig)().datePicker.placeholder)?(0,_utils.getFuncText)(e):(0,_ui.getI18n)("vxe.base.pleaseSelect")}),i=(0,_vue.computed)(()=>{var e=k["immediate"];return e}),F=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().datePicker.shortcutConfig,k.shortcutConfig)),B=(0,_vue.computed)(()=>{var e=F.value["options"];return e?e.map((e,t)=>Object.assign({name:""+(e.name||e.code||t)},e)):[]}),$=(0,_vue.computed)(()=>{var e=k["labelFormat"];return e||(0,_ui.getI18n)("vxe.input.date.labelFormat."+k.type)}),c=(0,_vue.computed)(()=>{var{type:e,valueFormat:t}=k;return(0,_util.handleValueFormat)(e,t)}),p=(0,_vue.computed)(()=>{var e=k["startDay"];return _xeUtils.default.toNumber(e)}),q=(0,_vue.computed)(()=>{const{type:t,multiple:e}=k;var a=E["inputValue"];const l=$.value,i=c.value,u=p.value;return(a?e?a.split(","):[a]:[]).map(e=>{return(0,_util.parseDateObj)(e,t,{valueFormat:i,labelFormat:l,firstDay:u}).label}).join(", ")}),u=()=>{var e=k["modelValue"];let t="";e&&(t=_xeUtils.default.isNumber(e)&&/^[0-9]{11,15}$/.test(""+e)?new Date(e):e),E.inputValue=t},r=e=>{var t=E["inputValue"];f(e.type,{value:t},e)},m=(e,t)=>{var a,{type:l,modelValue:i,valueFormat:u}=k,r=c.value;E.inputValue=e,(0,_util.hasTimestampValueType)(u)?(a=(a=(0,_util.parseDateValue)(e,l,{valueFormat:r}))?a.getTime():null,n("update:modelValue",a),i!==a&&(f("change",{value:a},t),o)&&v&&o.triggerItemEvent(t,v.itemConfig.field,a)):(0,_util.hasDateValueType)(u)?(a=(0,_util.parseDateValue)(e,l,{valueFormat:r}),n("update:modelValue",a),(i&&a?_xeUtils.default.toStringDate(i).getTime()!==a.getTime():i!==a)&&(f("change",{value:a},t),o)&&v&&o.triggerItemEvent(t,v.itemConfig.field,a)):(n("update:modelValue",e),_xeUtils.default.toValueString(i)!==e&&(f("change",{value:e},t),o)&&v&&o.triggerItemEvent(t,v.itemConfig.field,e))},O=e=>{var t=e.target.value;E.inputLabel=t,f("input",{value:t},e)},R=e=>{i.value||r(e)},K=e=>{E.isActivated=!0,l.value&&ue(e),r(e)},G=e=>{var t;I.value||(t=E["inputValue"],f("prefix-click",{value:t},e))},_=()=>new Promise(e=>{E.visiblePanel=!1,a.hpTimeout=setTimeout(()=>{E.isAniVisible=!1,e()},350)}),z=(e,t)=>{l.value&&_(),m("",e),f("clear",{value:t},e)},Y=e=>{var t;I.value||(t=E["inputValue"],f("suffix-click",{value:t},e))},Z=e=>{var t=w.value,a=E["inputValue"];i.value||m(a,e),E.visiblePanel||(E.isActivated=!1,t&&t.checkValue(E.inputLabel)),f("blur",{value:a},e),o&&v&&o.triggerItemEvent(e,v.itemConfig.field,a)},W=e=>{r(e)},H=e=>{r(e)},J=e=>{var t=w.value;t&&t.confirmByEvent(e),_()},Q=e=>{var{multiple:t,autoClose:a}=k,{value:e,$event:l}=e,i=N.value;m(e,l),t||i||a&&_()},X=e=>{var t=w.value,{visiblePanel:a,isActivated:l}=E,i=h.value,u=V.value;!I.value&&l&&(E.isActivated=(0,_dom.getEventTargetNode)(e,i).flag||(0,_dom.getEventTargetNode)(e,u).flag,E.isActivated||a&&(_(),t)&&t.checkValue(E.inputLabel))},ee=e=>{var t,a=E["visiblePanel"];I.value||(t=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.TAB),e=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ESCAPE),t&&(E.isActivated=!1),a&&(e||t)&&_())},te=e=>{var t=E["visiblePanel"];I.value||t&&(t=V.value,((0,_dom.getEventTargetNode)(e,t).flag?s:_)())},ae=()=>{var e=w.value,{isActivated:t,visiblePanel:a}=E;a&&_(),t&&(E.isActivated=!1),(a||t)&&(e&&e.checkValue(E.inputLabel),a=y.value)&&a.blur()},le=()=>{var e=E["visiblePanel"];e&&s()},s=()=>{const a=k["placement"],l=E["panelIndex"],i=y.value,u=P.value,r=T.value;var e=()=>{var e=(0,_dom.updatePanelPlacement)(i,u,{placement:a,teleportTo:r}),t=Object.assign(e.style,{zIndex:l});E.panelStyle=t,E.panelPlacement=e.placement};return e(),(0,_vue.nextTick)().then(e)},ie=()=>{var e=E["visiblePanel"];return(I.value||e?(0,_vue.nextTick):(E.initialized||(E.initialized=!0),a.hpTimeout&&(clearTimeout(a.hpTimeout),a.hpTimeout=void 0),E.isActivated=!0,E.isAniVisible=!0,setTimeout(()=>{E.visiblePanel=!0},10),E.panelIndex<(0,_utils.getLastZIndex)()&&(E.panelIndex=(0,_utils.nextZIndex)()),s))()},ue=e=>{x.value||(e.preventDefault(),ie())},re=e=>{r(e)},ne=({option:e,$event:t})=>{var a=k["type"],l=E["inputValue"],i=F.value,u=i["autoClose"],{code:r,clickMethod:n}=e,o=l,v={$datePicker:S,option:e,value:o,code:r};if(!n&&r){l=_ui.commands.get(r),e=l?l.datePickerCommandMethod:null;if(e)e(v);else{var s=c.value,d=p.value;switch(r){case"now":case"prev":case"next":case"minus":case"plus":o=(0,_util.getDateByCode)(r,o,a,{valueFormat:s,firstDay:d}).value;v.value=o,m(o,t);break;default:(0,_log.errLog)("vxe.error.notCommands",[r])}}}else{l=n||i.clickMethod;l&&l(v)}u&&_(),f("shortcut-click",v,t)},f=(e,t,a)=>{n(e,(0,_ui.createEvent)(a,{$datePicker:S},t))};t={dispatchEvent:f,setModelValue(e){E.inputValue=e,n("update:modelValue",e)},setModelValueByEvent(e,t){m(t||"",e)},focus(){var e=y.value;return E.isActivated=!0,e.focus(),(0,_vue.nextTick)()},blur(){return y.value.blur(),(E.isActivated=!1,_vue.nextTick)()},select(){return y.value.select(),(E.isActivated=!1,_vue.nextTick)()},showPanel:ie,hidePanel:_,updatePlacement:s};Object.assign(S,t);const M=(e,t)=>{var a=F.value,{position:l,align:i,mode:u}=a,r=B.value;return(0,_utils.isEnableConf)(a)&&r.length&&(l||"left")===e?(0,_vue.h)("div",{class:`vxe-date-picker--layout-${e}-wrapper`},[(0,_vue.h)(_buttonGroup.default,{options:r,mode:u,align:i,vertical:t,onClick:ne})]):(0,_ui.renderEmptyElement)(S)},oe=()=>(0,_vue.h)("div",{class:"vxe-date-picker--control-icon",onClick:ue},[(0,_vue.h)("i",{class:["vxe-date-picker--date-picker-icon",(0,_ui.getIcon)().DATE_PICKER_DATE]})]);return(0,_vue.watch)(q,e=>{E.inputLabel=e}),(0,_vue.watch)(()=>k.modelValue,()=>{u()}),(0,_vue.nextTick)(()=>{_ui.globalEvents.on(S,"mousewheel",te),_ui.globalEvents.on(S,"mousedown",X),_ui.globalEvents.on(S,"keydown",ee),_ui.globalEvents.on(S,"blur",ae),_ui.globalEvents.on(S,"resize",le)}),(0,_vue.onUnmounted)(()=>{_ui.globalEvents.off(S,"mousewheel"),_ui.globalEvents.off(S,"mousedown"),_ui.globalEvents.off(S,"blur"),_ui.globalEvents.off(S,"resize")}),u(),(0,_vue.provide)("$xeDatePicker",S),S.renderVN=()=>{var e,t,a,l,i,u,r,{className:n,type:o,name:v,autoComplete:s}=k,{inputValue:d,inputLabel:c,visiblePanel:p,isActivated:m}=E,_=D.value,f=I.value,g=x.value,b=q.value;return g?(0,_vue.h)("div",{ref:h,class:["vxe-date-picker--readonly","type--"+o,n]},b):(g=j.value,b=U.value,e=A.value,a=k.prefixIcon,t=(t=C.prefix)||a?(0,_vue.h)("div",{class:"vxe-date-picker--prefix",onClick:G},[(0,_vue.h)("div",{class:"vxe-date-picker--prefix-icon"},t?(0,_vn.getSlotVNs)(t({})):[(0,_vue.h)("i",{class:a})])]):null,a=k.suffixIcon,l=E.inputValue,i=C.suffix,u=I.value,r=A.value,u=(0,_vue.h)("div",{class:["vxe-date-picker--suffix",{"is--clear":r&&!u&&!(""===l||_xeUtils.default.eqNull(l))}]},[r?(0,_vue.h)("div",{class:"vxe-date-picker--clear-icon",onClick:z},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().INPUT_CLEAR})]):(0,_ui.renderEmptyElement)(S),oe(),i||a?(0,_vue.h)("div",{class:"vxe-date-picker--suffix-icon",onClick:Y},i?(0,_vn.getSlotVNs)(i({})):[(0,_vue.h)("i",{class:a})]):(0,_ui.renderEmptyElement)(S)]),(0,_vue.h)("div",{ref:h,class:["vxe-date-picker","type--"+o,n,{["size--"+_]:_,"is--prefix":!!t,"is--suffix":!!u,"is--visible":p,"is--disabled":f,"is--active":m,"show--clear":e&&!f&&!(""===d||_xeUtils.default.eqNull(d))}],spellcheck:!1},[t||(0,_ui.renderEmptyElement)(S),(0,_vue.h)("div",{class:"vxe-date-picker--wrapper"},[(0,_vue.h)("input",{ref:y,class:"vxe-date-picker--inner",value:c,name:v,type:"text",placeholder:b,readonly:g,disabled:f,autocomplete:s,onKeydown:W,onKeyup:H,onClick:re,onInput:O,onChange:R,onFocus:K,onBlur:Z})]),u||(0,_ui.renderEmptyElement)(S),(()=>{var{type:e,multiple:t,showClearButton:a,showConfirmButton:l}=k,{initialized:i,isAniVisible:u,visiblePanel:r,panelPlacement:n,panelStyle:o,inputValue:v}=E,s=D.value,d=T.value,c=F.value,p=A.value,m=N.value,_=B.value,c=c["position"],f=C.header,g=C.footer,b=C.top,h=C.bottom,y=C.left,x=C.right,_=0<_.length,m=null===l?m||t:l,t=null===a?p&&m&&"time"!==e:a;return(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!d||!i},[(0,_vue.h)("div",{ref:P,class:["vxe-table--ignore-clear vxe-date-picker--panel","type--"+e,{["size--"+s]:s,"is--transfer":d,"ani--leave":u,"ani--enter":r,"show--top":!!(b||f||_&&("top"===c||"header"===c)),"show--bottom":!!(h||g||_&&("bottom"===c||"footer"===c)),"show--left":!!(y||_&&"left"===c),"show--right":!!(x||_&&"right"===c)}],placement:n,style:o},i&&(r||u)?[(0,_vue.h)("div",{ref:V,class:["vxe-date-picker--layout-all-wrapper","type--"+e,{["size--"+s]:s}]},[b?(0,_vue.h)("div",{class:"vxe-date-picker--layout-top-wrapper"},b({})):M("top"),(0,_vue.h)("div",{class:"vxe-date-picker--layout-body-layout-wrapper"},[y?(0,_vue.h)("div",{class:"vxe-date-picker--layout-left-wrapper"},y({})):M("left",!0),(0,_vue.h)("div",{class:"vxe-date-picker--layout-body-content-wrapper"},[f?(0,_vue.h)("div",{class:"vxe-date-picker--layout-header-wrapper"},f({})):M("header"),(0,_vue.h)("div",{class:"vxe-date-picker--layout-body-wrapper"},[(0,_vue.h)(_datePanel.default,{ref:w,modelValue:E.inputValue,type:k.type,className:k.className,multiple:k.multiple,limitCount:k.limitCount,startDate:k.startDate,endDate:k.endDate,defaultDate:k.defaultDate,minDate:k.minDate,maxDate:k.maxDate,startDay:k.startDay,labelFormat:k.labelFormat,valueFormat:k.valueFormat,timeFormat:k.timeFormat,festivalMethod:k.festivalMethod,disabledMethod:k.disabledMethod,selectDay:k.selectDay,onChange:Q})]),(0,_vue.h)("div",{class:"vxe-date-picker--layout-footer-wrapper"},[(0,_vue.h)("div",{class:"vxe-date-picker--layout-footer-custom"},g?g({}):[M("footer")]),t||m?(0,_vue.h)("div",{class:"vxe-date-picker--layout-footer-btns"},[t?(0,_vue.h)(_button.default,{size:"mini",disabled:""===v||_xeUtils.default.eqNull(v),content:(0,_ui.getI18n)("vxe.button.clear"),onClick:z}):(0,_ui.renderEmptyElement)(S),m?(0,_vue.h)(_button.default,{size:"mini",status:"primary",content:(0,_ui.getI18n)("vxe.button.confirm"),onClick:J}):(0,_ui.renderEmptyElement)(S)]):(0,_ui.renderEmptyElement)(S)])]),x?(0,_vue.h)("div",{class:"vxe-date-picker--layout-right-wrapper"},x({})):M("right",!0)]),h?(0,_vue.h)("div",{class:"vxe-date-picker--layout-bottom-wrapper"},h({})):M("bottom")])]:[])])})()]))},S},render(){return this.renderVN()}});