vue-calendar-by-week
Version:
为用户提供周日历日程表设计,用户可通过自由拖动选区建立日程事件
2 lines • 16.9 kB
JavaScript
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("vue-calendar-week",[],e):"object"==typeof exports?exports["vue-calendar-week"]=e():t["vue-calendar-week"]=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(a[r])return a[r].exports;var n=a[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,e),n.l=!0,n.exports}var a={};return e.m=t,e.c=a,e.d=function(t,a,r){e.o(t,a)||Object.defineProperty(t,a,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(a,"a",a),a},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/dist/",e(e.s=1)}([function(t,e,a){"use strict";var r=a(9),n=a(10);e.a={name:"CalendarByWeek",props:{granularity:{type:[String,Number],default:30},startDate:{type:String,required:!0},startTime:{type:[String,Number],default:0,validator:function(t){return t%1==0}},endTime:{type:[String,Number],default:24,validator:function(t){return t%1==0}},unitTime:{type:[String,Number],default:1},data:{type:Array,default:[]},readonly:{type:Boolean,default:!1},disabledTime:{type:Function,default:function(t){return(new Date).getTime()>=new Date(t).getTime()}},needBottomTime:{type:Boolean,default:!1},toastMessage:{type:Object,default:function(){return{disabledTime:"该时间段不可安排日程",timeConflict:"存在时间冲突,请重新安排"}}},hasHeader:{type:Boolean,default:!0},spaceLine:{type:Number,default:0}},components:{CalendarSlot:n.a},provide:function(){return{calendarRoot:this}},data:function(){return{is_mousedown:!1,is_mouseup:!1,select_cells:{col:-1,start_row:-1,over_rows:0,end_row:-1},is_rowspan:!1,data_list:null,week_day:["周日","周一","周二","周三","周四","周五","周六"],click_start:null,click_end:null}},filters:{formatHourWithInt:function(t){return t>=10?t+":00":"0"+t+":00"}},computed:{columns:function(){return r.a.getDatesArray(this.startDate,7)},unitNum:function(){try{if(60%this.granularity!=0)throw"Bad 'granularuty', check whether the parameters 'granularity' meet the parameter requirements.";return Math.floor(60*this.unitTime/this.granularity)}catch(t){console.error(t)}},rows:function(){var t=parseInt(this.startTime),e=parseInt(this.endTime);try{if((e-t)%this.unitTime!=0)throw"Bad 'unit time";for(var a=(e-t)/this.unitTime*this.unitNum,n=new Array(a),s=0;s<(e-t)/this.unitTime;s++){var i=s*parseInt(this.unitTime)+t;n[s*this.unitNum]=""+r.a.formatHourWithInt(i)}return n}catch(t){console.error(t)}},select_period:function(){var t=this.select_cells,e=t.start_row,a=t.over_rows;if(e<0)return"";var n=parseInt(this.startTime),s=n+Math.floor(e/this.unitNum),i=60*s+e%this.unitNum*this.granularity,o=i+(a+1)*this.granularity;return r.a.formatTimeWithMinutes(i)+"-"+r.a.formatTimeWithMinutes(o)}},mounted:function(){this.initTableArray(),this.initRecordList(this.data)},methods:{resetSelection:function(){this.select_cells={col:-1,start_row:-1,over_rows:0,end_row:-1},this.is_mousedown=!1},onTableMouseDown:function(t,e,a){if(!this.readonly)return this.data_list[a][e]&&(this.data_list[a][e].has_record||this.data_list[a][e].is_disabled)?this.$emit("on-error",this.toastMessage.disabledTime):void(a===this.select_cells.col&&e>=this.select_cells.start_row&&e<=this.select_cells.end_row||0===t.button&&(this.is_rowspan=!1,this.is_mousedown||(this.click_start=(new Date).getTime(),this.is_mousedown=!0,this.select_cells={col:a,start_row:e,over_rows:0})))},onTableMouseOver:function(t,e,a){if(this.is_mousedown){if(this.data_list[a][e]&&this.data_list[a][e].has_record)return this.$emit("on-error",this.toastMessage.timeConflict),this.resetSelection();if(this.data_list[a][e]&&this.data_list[a][e].is_disabled)return this.$emit("on-error",this.toastMessage.disabledTime),this.resetSelection();if(this.is_mousedown&&this.select_cells.col===a){var r=e-this.select_cells.start_row;this.select_cells.over_rows=r}}},onTableMouseUp:function(t,e,a){if(this.is_mousedown){var r=e-this.select_cells.start_row;if(0===r&&(this.click_end=(new Date).getTime(),this.click_end-this.click_start<300)){var n=Math.floor(e/this.unitNum)*this.unitNum;r=this.unitNum-1,this.select_cells.start_row=n}r<0&&(this.select_cells.start_row=e,r=-r);for(var s=!1,i=this.select_cells.start_row,o=i;o<=i+r;o++){if(this.data_list[a][o]&&this.data_list[a][o].has_record){s=!0,this.$emit("on-error",this.toastMessage.timeConflict),this.resetSelection();break}if(this.data_list[a][o]&&this.data_list[a][o].is_disabled){s=!0,this.$emit("on-error",this.toastMessage.disabledTime),this.resetSelection();break}}if(s)return;this.select_cells.end_row=this.select_cells.start_row+r,this.select_cells.over_rows=r,this.is_mousedown=!1,this.is_rowspan=!0,this.onSelected()}},onContextMenu:function(t,e,a){this.data_list[a][e]&&this.data_list[a][e].has_record&&this.$emit("on-contextmenu",e,this.data_list[a][e],t)},initTableArray:function(){var t=this,e=new Array;for(var a in t.columns){e[a]=new Array;for(var n=0;n<t.rows.length;n++){var s=t.columns[a].date,i=r.a.formatTimeWithMinutes(60*parseInt(t.startTime)+n*t.granularity),o=t.passedTime(s+" "+i),l=t.disabledTime(s+" "+i);e[a][n]={is_passed:o,is_disabled:l}}}t.data_list=e},passedTime:function(t){return(new Date).getTime()>=new Date(t).getTime()},initRecordList:function(t){var e=this;e.cancelSelect();var a=[];this.initTableArray();var r=JSON.parse(JSON.stringify(e.data_list));t&&t.forEach(function(t){var n=t.date.replace(new RegExp("-","gm"),"/"),s=e.columns.findIndex(function(t){return new Date(t.date).getTime()===new Date(n).getTime()});if(!(s<0)){var i=60*parseInt(t.start_time.split(":")[0])+parseInt(t.start_time.split(":")[1]),o=60*parseInt(t.end_time.split(":")[0])+parseInt(t.end_time.split(":")[1]),l=(i-60*parseInt(e.startTime))/e.granularity,c=(o-i)/e.granularity,d={has_record:!0,is_before_created:!0,date_col:s,start_row:l,over_rows:c,content:t.content,time:t.start_time+"-"+t.end_time};a.push(d),r[s][l]=Object.assign(r[s][l],d,t);for(var u=l+1;u<l+c;u++)r[s][u].has_record=!0}}),e.data_list=r},cancelSelect:function(){this.resetSelection()},onSelected:function(){if(!this.readonly){var t=this.columns[this.select_cells.col].date,e=this.select_period.split("-")[0],a=this.select_period.split("-")[1];this.$emit("on-selected",{date:t,start_time:e,end_time:a,start_row:this.select_cells.start_row,over_rows:this.select_cells.over_rows})}}},watch:{data:{handler:function(t,e){this.initRecordList(t)},deep:!0}}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(2),n={install:function(t){t.component("CalendarByWeek",r.a)}};"undefined"!=typeof window&&window.Vue&&window.Vue.use(n),e.default=n},function(t,e,a){"use strict";function r(t){a(3)}var n=a(0),s=a(11),i=a(8),o=r,l=i(n.a,s.a,!1,o,"data-v-1f5c3439",null);e.a=l.exports},function(t,e,a){var r=a(4);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);a(6)("0c991349",r,!0,{})},function(t,e,a){e=t.exports=a(5)(!1),e.push([t.i,".component-calendar[data-v-1f5c3439]{width:100%}.calendar-table__td[data-v-1f5c3439]{width:calc(1 / 8);height:20px;text-align:center;cursor:pointer;line-height:1}.disNone[data-v-1f5c3439]{display:none}.calendar-table[data-v-1f5c3439]{width:100%;border-right:1px solid #eee}.calendar-table__tr[data-v-1f5c3439]{width:100%}.calendar-table__th-d[data-v-1f5c3439]{border:none;border-top:1px solid #eee;height:50px;background:rgba(102,153,204,.8);color:#fff}.calendar-table__td[data-v-1f5c3439]{border-left:1px solid #eee;font-size:12px}.calendar-table__td.disabled[data-v-1f5c3439]{background:#fafafa}.calendar-table__td-top[data-v-1f5c3439]{border-top:1px solid #eee}.calendar-table__td-bottom[data-v-1f5c3439]{border-bottom:1px solid #eee}.calendar-table__td-time[data-v-1f5c3439]{border:none}.calendar-table__td-span[data-v-1f5c3439]{border-top:none;border-left:none;vertical-align:top;position:relative}.calendar-table__td-span .time[data-v-1f5c3439]{display:block;margin-top:-8px}.calendar-table__td-span .time-bottom[data-v-1f5c3439]{position:absolute;bottom:-8px;width:100%;text-align:center}.calendar-table__td-null[data-v-1f5c3439]{border-left:none;border-top:none;background:unset}.calendar-table__td.selected-cell-span[data-v-1f5c3439]{background:rgba(153,204,255,.3);padding-top:5px;box-sizing:border-box}.calendar-table__td-record[data-v-1f5c3439]{background:rgba(153,204,255,.1)}.calendar-table .slot-item[data-v-1f5c3439]{padding-top:5px}.calendar-table .item-default[data-v-1f5c3439],.calendar-table .slot-item[data-v-1f5c3439]{width:100%;height:100%;box-sizing:border-box}",""])},function(t,e){function a(t,e){var a=t[1]||"",n=t[3];if(!n)return a;if(e&&"function"==typeof btoa){var s=r(n);return[a].concat(n.sources.map(function(t){return"/*# sourceURL="+n.sourceRoot+t+" */"})).concat([s]).join("\n")}return[a].join("\n")}function r(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=a(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r}).join("")},e.i=function(t,a){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},n=0;n<this.length;n++){var s=this[n][0];"number"==typeof s&&(r[s]=!0)}for(n=0;n<t.length;n++){var i=t[n];"number"==typeof i[0]&&r[i[0]]||(a&&!i[2]?i[2]=a:a&&(i[2]="("+i[2]+") and ("+a+")"),e.push(i))}},e}},function(t,e,a){function r(t){for(var e=0;e<t.length;e++){var a=t[e],r=d[a.id];if(r){r.refs++;for(var n=0;n<r.parts.length;n++)r.parts[n](a.parts[n]);for(;n<a.parts.length;n++)r.parts.push(s(a.parts[n]));r.parts.length>a.parts.length&&(r.parts.length=a.parts.length)}else{for(var i=[],n=0;n<a.parts.length;n++)i.push(s(a.parts[n]));d[a.id]={id:a.id,refs:1,parts:i}}}}function n(){var t=document.createElement("style");return t.type="text/css",u.appendChild(t),t}function s(t){var e,a,r=document.querySelector("style["+v+'~="'+t.id+'"]');if(r){if(p)return h;r.parentNode.removeChild(r)}if(b){var s=f++;r=_||(_=n()),e=i.bind(null,r,s,!1),a=i.bind(null,r,s,!0)}else r=n(),e=o.bind(null,r),a=function(){r.parentNode.removeChild(r)};return e(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;e(t=r)}else a()}}function i(t,e,a,r){var n=a?"":r.css;if(t.styleSheet)t.styleSheet.cssText=w(e,n);else{var s=document.createTextNode(n),i=t.childNodes;i[e]&&t.removeChild(i[e]),i.length?t.insertBefore(s,i[e]):t.appendChild(s)}}function o(t,e){var a=e.css,r=e.media,n=e.sourceMap;if(r&&t.setAttribute("media",r),m.ssrId&&t.setAttribute(v,e.id),n&&(a+="\n/*# sourceURL="+n.sources[0]+" */",a+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */"),t.styleSheet)t.styleSheet.cssText=a;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(a))}}var l="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!l)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var c=a(7),d={},u=l&&(document.head||document.getElementsByTagName("head")[0]),_=null,f=0,p=!1,h=function(){},m=null,v="data-vue-ssr-id",b="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());t.exports=function(t,e,a,n){p=a,m=n||{};var s=c(t,e);return r(s),function(e){for(var a=[],n=0;n<s.length;n++){var i=s[n],o=d[i.id];o.refs--,a.push(o)}e?(s=c(t,e),r(s)):s=[];for(var n=0;n<a.length;n++){var o=a[n];if(0===o.refs){for(var l=0;l<o.parts.length;l++)o.parts[l]();delete d[o.id]}}}};var w=function(){var t=[];return function(e,a){return t[e]=a,t.filter(Boolean).join("\n")}}()},function(t,e){t.exports=function(t,e){for(var a=[],r={},n=0;n<e.length;n++){var s=e[n],i=s[0],o=s[1],l=s[2],c=s[3],d={id:t+":"+n,css:o,media:l,sourceMap:c};r[i]?r[i].parts.push(d):a.push(r[i]={id:i,parts:[d]})}return a}},function(t,e){t.exports=function(t,e,a,r,n,s){var i,o=t=t||{},l=typeof t.default;"object"!==l&&"function"!==l||(i=t,o=t.default);var c="function"==typeof o?o.options:o;e&&(c.render=e.render,c.staticRenderFns=e.staticRenderFns,c._compiled=!0),a&&(c.functional=!0),n&&(c._scopeId=n);var d;if(s?(d=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},c._ssrRegister=d):r&&(d=r),d){var u=c.functional,_=u?c.render:c.beforeCreate;u?(c._injectStyles=d,c.render=function(t,e){return d.call(e),_(t,e)}):c.beforeCreate=_?[].concat(_,d):[d]}return{esModule:i,exports:o,options:c}}},function(t,e,a){"use strict";var r=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!t)return null;if(t=t.replace(new RegExp("-","gm"),"/"),!e)return[t];for(var a=new Array(e),r=new Date(t),s=0;s<e;s++){var i=r.getTime()+864e5*s,o=new Date(i).getDay();i=n(i),a[s]={date:i,day:o}}return a},n=function(t){return t=t instanceof Date?t:new Date(t),t.getFullYear()+"/"+(t.getMonth()+1)+"/"+t.getDate()},s=function(t){return t>=10?t+":00":"0"+t+":00"},i=function(t){var e=Math.floor(t/60),a=Math.floor(t%60);return e=e>=10?e:"0"+e,a=a>=10?a:"0"+a,e+":"+a};e.a={getDatesArray:r,formatDateOnlyDate:n,formatHourWithInt:s,formatTimeWithMinutes:i}},function(t,e,a){"use strict";e.a={name:"CalendarSlot",functional:!0,inject:["calendarRoot"],props:{item:Object},render:function(t,e){return t("div",{class:"slot-item"},e.injections.calendarRoot.$scopedSlots.default({item:e.props.item}))}}},function(t,e,a){"use strict";var r=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"component-box component-calendar",attrs:{onselectstart:"return false"}},[a("table",{staticClass:"calendar-table",attrs:{cellspacing:"0",cellpadding:"0"}},[t.hasHeader?a("tr",{staticClass:"calendar-table__tr calendar-table__th"},[a("td",{staticClass:"calendar-table__td calendar-table__th-d calendar-table__td-null"}),t._v(" "),t._l(t.columns,function(e){return a("td",{key:e.week,staticClass:"calendar-table__td calendar-table__th-d"},[t._t("thead",[t._v("\n "+t._s(t.week_day[e.day])),a("br"),t._v(t._s(e.date)+"\n ")],{item:e})],2)})],2):t._e(),t._v(" "),t._l(t.rows,function(e,r){return a("tr",{key:r,staticClass:"calendar-table__tr"},[r%t.unitNum==0?[a("td",{staticClass:"calendar-table__td calendar-table__td-span calendar-table__td-time",attrs:{rowspan:t.unitNum}},[a("span",{staticClass:"time"},[t._v(t._s(t.rows[r]))]),t._v(" "),t.needBottomTime&&r===t.rows.length-t.unitNum?a("span",{staticClass:"time time-bottom"},[t._v(t._s(t._f("formatHourWithInt")(t.endTime)))]):t._e()])]:t._e(),t._v(" "),t._l(t.columns,function(e,n){return a("td",{key:n,class:["calendar-table__td",r%t.unitNum!=0||t.spaceLine?"":"calendar-table__td-top",r===t.rows.length-1?"calendar-table__td-bottom":"",t.data_list&&t.data_list[n][r]&&t.data_list[n][r].is_disabled?"disabled":"",t.data_list&&t.data_list[n][r]&&t.data_list[n][r].has_record&&t.data_list[n][r].start_row===r?"calendar-table__td-record calendar-table__td-record-"+t.data_list[n][r].over_rows:"",t.is_rowspan&&t.select_cells.col===n&&t.select_cells.start_row<r&&t.select_cells.start_row+t.select_cells.over_rows>=r?"disNone":t.data_list&&t.data_list[n][r]&&t.data_list[n][r].has_record&&t.data_list[n][r].start_row!==r?"disNone":"",t.select_cells.col===n&&(t.select_cells.over_rows>=0?t.select_cells.start_row<=r&&t.select_cells.start_row+t.select_cells.over_rows>=r:t.select_cells.start_row>=r&&t.select_cells.start_row+t.select_cells.over_rows<=r)?"selected-cell-span":""],style:{"border-bottom":t.spaceLine?t.spaceLine+"px solid #eeeeee":"unset"},attrs:{rowspan:t.is_rowspan&&t.select_cells.col===n&&t.select_cells.start_row===r?t.select_cells.over_rows+1:!!(t.data_list&&t.data_list[n][r]&&t.data_list[n][r].has_record&&t.data_list[n][r].start_row===r)&&t.data_list[n][r].over_rows},on:{mousedown:function(e){return t.onTableMouseDown(e,r,n)},mouseover:function(e){return t.onTableMouseOver(e,r,n)},mouseup:function(e){return t.onTableMouseUp(e,r,n)},contextmenu:function(e){return e.preventDefault(),t.onContextMenu(e,r,n)}}},[t.select_cells.col===n&&t.select_cells.start_row===r?a("div",{staticClass:"item-default"},[t._v("\n "+t._s(t.select_period)+"\n ")]):t._e(),t._v(" "),t.data_list&&t.data_list[n][r]&&t.data_list[n][r].has_record&&t.data_list[n][r].start_row===r?[a("calendar-slot",{attrs:{item:t.data_list[n][r]}},[t._v("\n "+t._s(t.data_list[n][r].time)),a("br"),t._v(t._s(t.data_list[n][r].content)+"\n ")])]:t._e()],2)})],2)})],2)])},n=[],s={render:r,staticRenderFns:n};e.a=s}])});
//# sourceMappingURL=week-calendar.min.js.map