vue-amazing-ui
Version:
An Amazing Vue3 UI Components Library, Using TypeScript.
6 lines (5 loc) • 9.15 kB
JavaScript
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),l=require("date-fns"),S=require("../select/index.cjs"),Z=require("../radio/index.cjs"),B=require("../utils/index.cjs"),x={class:"calendar-header-wrap"},I={key:0,class:"calendar-header-content"},ee={class:"calendar-header-actions"},te={tabindex:"0",class:"calendar-display-wrap"},ae={key:0,class:"calendar-date-panel"},le={class:"calendar-body"},ne={class:"calendar-table"},oe=["title","onClick"],re={class:"date-cell-inner"},se={class:"date-value"},de={class:"date-content"},ue={key:1,class:"calendar-month-panel"},ce={class:"calendar-body"},ie={class:"calendar-table"},me=["title","onClick"],pe={class:"date-cell-inner"},ve={class:"date-value"},fe={class:"date-content"},he=e.defineComponent({__name:"Calendar",props:e.mergeModels({display:{default:"panel"},mode:{default:"month"},header:{default:void 0},yearSelectProps:{default:()=>({})},monthSelectProps:{default:()=>({})},modeRadioProps:{default:()=>({})},startDayOfWeek:{default:0},dateStrip:{type:Boolean,default:!0},dateFormat:{type:Function,default:void 0},weekFormat:{type:Function,default:void 0},monthFormat:{type:Function,default:void 0},disabledDate:{type:Function,default:void 0},valueFormat:{default:void 0}},{value:{},valueModifiers:{}}),emits:e.mergeModels(["change","panelChange","select"],["update:value"]),setup(M,{emit:F}){const s=M,d=e.useModel(M,"value"),V=e.ref(Date.now()),b=e.ref([]),N=e.ref(z()),_=e.ref([{label:"月",value:"month"},{label:"年",value:"year"}]),i=e.ref(l.getYear(V.value)),v=e.ref(l.getMonth(V.value)+1),m=e.ref(s.mode),y=e.ref([]),O=e.ref([]),{colorPalettes:g}=B.useInject("Calendar"),f=F,T=B.useSlotsExist(["header"]),$=e.computed(()=>{const t=["一","二","三","四","五","六","日"],a=[];a.push(t[s.startDayOfWeek]);let o=(s.startDayOfWeek+1)%7;for(;o!==s.startDayOfWeek;)a.push(t[o]),o=(o+1)%7;return a}),c=e.computed(()=>{if(d.value)return typeof d.value=="string"?l.parse(d.value,s.valueFormat,new Date).getTime():d.value}),w=e.computed(()=>new Date(i.value,v.value-1,1).getTime()),P=e.computed(()=>T.header||s.header);e.watch(c,t=>{t&&(i.value=l.getYear(t),v.value=l.getMonth(t)+1)},{immediate:!0}),e.watch(()=>s.mode,t=>{m.value=t}),e.watch(()=>[s.startDayOfWeek,s.dateStrip,v.value,i.value],()=>{y.value=L()},{immediate:!0,deep:!0}),e.watch(i,()=>{b.value=j(),O.value=U()},{immediate:!0}),e.watch(()=>s.valueFormat,t=>{d.value&&(t===void 0||t==="T"?typeof d.value=="string"&&(d.value=Number(l.format(l.startOfDay(d.value).getTime(),"T"))):d.value=l.format(l.startOfDay(d.value).getTime(),t))},{immediate:!0});function j(){const t=[],a=i.value-10,o=i.value+10;for(let r=a;r<o;r++)t.push({label:`${r}年`,value:r});return t}function z(){const t=[];for(let a=1;a<=12;a++)t.push({label:`${a}月`,value:a});return t}function k(t,a,o){return{type:"date",dateObject:{date:l.getDate(t),month:l.getMonth(t),year:l.getYear(t)},timestamp:l.getTime(t),inCurrentMonth:l.isSameMonth(t,a),isCurrentDate:l.isSameDay(o,t)}}function Y(t,a,o,r=!1){const n=l.getMonth(t);let u=l.getTime(l.startOfMonth(t)),h=l.getTime(l.addDays(u,-1));const p=[];let E=!r;for(;l.getDay(h)!==o||E;)p.unshift(k(h,t,a)),h=l.getTime(l.addDays(h,-1)),E=!1;for(;l.getMonth(u)===n;)p.push(k(u,t,a)),u=l.getTime(l.addDays(u,1));const X=r?p.length<=28?28:p.length<=35?35:42:42;for(;p.length<X;)p.push(k(u,t,a)),u=l.getTime(l.addDays(u,1));return p}function L(){const t=Y(w.value,Date.now(),s.startDayOfWeek,s.dateStrip),a=7,o=t.length/a,r=[];for(let n=0;n<o;n++)r.push(t.slice(n*a,(n+1)*a));return r}function W(t,a){return{type:"month",monthObject:{month:l.getMonth(t),year:l.getYear(t)},timestamp:l.getTime(t),isCurrent:l.isSameMonth(a,t)}}function q(t,a){const o=[],r=l.startOfYear(t);for(let n=0;n<12;n++)o.push(W(l.getTime(l.addMonths(r,n)),a));return o}function U(){const t=q(w.value,Date.now()),a=3,o=t.length/a,r=[];for(let n=0;n<o;n++)r.push(t.slice(n*a,(n+1)*a));return r}function R(t){return l.format(t.timestamp,"yyyy-MM-dd")}function H(t){return l.format(t.timestamp,"yyyy-MM")}function A(t,a){return s.dateFormat===void 0?`${t}`:s.dateFormat(t,a)}function G(t,a,o){return s.weekFormat===void 0?t:s.weekFormat(t,a,o)}function J(t,a){return s.monthFormat===void 0?`${t}月`:s.monthFormat(t,a)}function C(t){return s.valueFormat===void 0||s.valueFormat==="T"?Number(l.format(t,"T")):l.format(t,s.valueFormat)}function K(t){let a;c.value?l.startOfDay(new Date(c.value)).getTime()!==t.timestamp&&(a=l.set(new Date(c.value),{year:t.dateObject.year,month:t.dateObject.month,date:t.dateObject.date}).getTime()):a=t.timestamp,a&&(a=C(a),d.value=a,f("select",a,"date"),f("change",a,t.dateObject))}function Q(t){let a;c.value?l.startOfMonth(new Date(c.value)).getTime()!==t.timestamp&&(a=l.set(new Date(c.value),{year:t.monthObject.year,month:t.monthObject.month}).getTime()):a=t.timestamp,a&&(a=C(a),d.value=a,f("select",a,"month"),f("change",a,t.monthObject))}function D(){m.value==="month"?f("panelChange",d.value,{year:i.value,month:v.value},m.value):f("panelChange",d.value,{year:i.value},m.value)}return(t,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["calendar-wrap",`calendar-${t.display}`]),style:e.normalizeStyle(`
--calendar-primary-color: ${e.unref(g)[5]};
--calendar-panel-primary-bg-color: ${e.unref(g)[0]};
--calendar-card-primary-bg-color: ${e.unref(g)[5]};
`)},[e.createElementVNode("div",x,[P.value?(e.openBlock(),e.createElementBlock("div",I,[e.renderSlot(t.$slots,"header",{},()=>[e.createTextVNode(e.toDisplayString(t.header),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ee,[e.createVNode(e.unref(S.default),e.mergeProps({class:"calendar-year-select",size:t.display==="card"?"small":"middle",options:b.value,"max-display":8,modelValue:i.value,"onUpdate:modelValue":a[0]||(a[0]=o=>i.value=o),onChange:D},t.yearSelectProps),null,16,["size","options","modelValue"]),m.value==="month"?(e.openBlock(),e.createBlock(e.unref(S.default),e.mergeProps({key:0,class:"calendar-month-select",size:t.display==="card"?"small":"middle",options:N.value,"max-display":8,modelValue:v.value,"onUpdate:modelValue":a[1]||(a[1]=o=>v.value=o),onChange:D},t.monthSelectProps),null,16,["size","options","modelValue"])):e.createCommentVNode("",!0),e.createVNode(e.unref(Z.default),e.mergeProps({class:"calendar-mode-radio","button-size":t.display==="card"?"small":"middle",options:_.value,value:m.value,"onUpdate:value":a[2]||(a[2]=o=>m.value=o),button:"",onChange:D},t.modeRadioProps),null,16,["button-size","options","value"])])]),e.createElementVNode("div",te,[m.value==="month"?(e.openBlock(),e.createElementBlock("div",ae,[e.createElementVNode("div",le,[e.createElementVNode("table",ne,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(o,r)=>(e.openBlock(),e.createElementBlock("th",{key:r},[e.renderSlot(t.$slots,"week",{defaultWeek:o,week:r,timestamp:y.value[0][r].timestamp},()=>[e.createTextVNode(e.toDisplayString(G(o,r,y.value[0][r].timestamp)),1)],!0)]))),128))])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(o,r)=>(e.openBlock(),e.createElementBlock("tr",{key:r},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o,(n,u)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["calendar-date-cell",{"date-cell-disabled":t.disabledDate&&t.disabledDate(n.timestamp),"date-cell-in-view":n.inCurrentMonth,"date-cell-today":n.isCurrentDate,"date-cell-selected":c.value&&e.unref(l.startOfDay)(c.value).getTime()===n.timestamp}]),key:u,title:R(n),onClick:h=>K(n)},[e.createElementVNode("div",re,[e.createElementVNode("div",se,[e.renderSlot(t.$slots,"dateValue",e.mergeProps({ref_for:!0},n),()=>[e.createTextVNode(e.toDisplayString(A(n.dateObject.date,n.timestamp)),1)],!0)]),e.createElementVNode("div",de,[e.renderSlot(t.$slots,"dateContent",e.mergeProps({ref_for:!0},n),void 0,!0)])])],10,oe))),128))]))),128))])])])])):e.createCommentVNode("",!0),m.value==="year"?(e.openBlock(),e.createElementBlock("div",ue,[e.createElementVNode("div",ce,[e.createElementVNode("table",ie,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,(o,r)=>(e.openBlock(),e.createElementBlock("tr",{key:r},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o,(n,u)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["calendar-date-cell date-cell-in-view",{"date-cell-today":n.isCurrent,"date-cell-selected":c.value&&e.unref(l.startOfMonth)(c.value).getTime()===n.timestamp}]),key:u,title:H(n),onClick:h=>Q(n)},[e.createElementVNode("div",pe,[e.createElementVNode("div",ve,[e.renderSlot(t.$slots,"monthValue",e.mergeProps({ref_for:!0},n),()=>[e.createTextVNode(e.toDisplayString(J(n.monthObject.month+1,n.timestamp)),1)],!0)]),e.createElementVNode("div",fe,[e.renderSlot(t.$slots,"monthContent",e.mergeProps({ref_for:!0},n),void 0,!0)])])],10,me))),128))]))),128))])])])])):e.createCommentVNode("",!0)])],6))}});exports.default=he;
;