图示
须要应用到快捷键的vue页面
html
<el-form-item label="建单工夫"> <BaseTime @picked="(val) => timeRange = val" v-model="timeRange" ref="timeRange" /> </el-form-item> <span @click="shortcuts('today')">今日</span> <span @click="shortcuts('this-week')">本周</span> <span @click="shortcuts('this-month')">本月</span> <span @click="shortcuts('last-month')">上月</span> <el-form-item label="领取工夫"> <BaseTime @picked="(val) => timeRange2 = val" v-model="timeRange2" ref="timeRange2" /> </el-form-item> <span @click="shortcuts('this-quarter', 'timeRange2')">本季</span> <span @click="shortcuts('this-year', 'timeRange2')">本年</span> <!-- 阐明 1. BaseTime 是对 el-date-picker type="datetimerange" 以及其余雷同属性的封装,代码略 2. timeRange是数组,每个工夫区间后端应用2个字段接管。所以前端的命名就比拟随便,如果页面有多少个工夫区间,命名就是timeRange、timeRange1、timeRange2、timeRange3.... 3. 应用BaseTime,ref是必要的,须要调用组件的 @change 办法 4. 款式略 -->
script
/** * 快捷键逻辑原本放在@/mixins/standard-list里的为了演示不便放在这里 * 其余代码省略**/export default { data() { timeRange: [], // 工夫区间---建单工夫 timeRange1: [], // 工夫区间---领取工夫 }, watch: { timeRange: { handler (newV) { if (newV instanceof Array) { this.searchData.createTimeBegin = newV[0]; this.searchData.createTimeEnd = newV[1]; } else { this.searchData.createTimeBegin = null; this.searchData.createTimeEnd = null; } } }, timeRange2: { handler (newV) { if (newV instanceof Array) { this.searchData.payTimeBegin = newV[0]; this.searchData.payTimeEnd = newV[1]; } else { this.searchData.payTimeBegin = null; this.searchData.payTimeEnd = null; } } }, }, methods: { // 日期快捷键(默认绑定timeRange) shortcuts(text, ref='timeRange'){ const start = new Date(); const end = new Date(); start.setHours(0);start.setMinutes(0);start.setSeconds(0); end.setHours(23); end.setMinutes(59); end.setSeconds(59); const month = start.getMonth()+1; // 0-11, 月份加1,不便和大月、小月口诀对应 switch (text) { case 'today': this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; case 'this-week': const today = start.getDate(); // 1-31 const weekday = start.getDay() || 7; // 0-6, 若为0则改为7 start.setDate(today+(1-weekday)); end.setDate(today+(7-weekday)); this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; case 'this-month': start.setDate(1); if (month===1 || month===3 || month===5 || month===7 || month===8 || month===10 ||month===12) { end.setDate(31); } if (month===4 || month===6 || month===9 || month===11) { end.setDate(30); } if (month===2) { const year = start.getFullYear(); if ((year % 4 == 0 && !(year % 100 == 0)) || year % 400 == 0) { end.setDate(29); } else { end.setDate(28); } } this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; case 'last-month': const lastMonth = start.getMonth() - 1;// 0-11, 月份减1,失去上月,-1-10 if (lastMonth === -1) { const year = start.getFullYear(); start.setFullYear(year - 1); start.setMonth(11); end.setFullYear(year - 1); end.setMonth(11); end.setDate(31); // -1月份单写 } else { start.setMonth(lastMonth); end.setMonth(lastMonth); } start.setDate(1); const tem = lastMonth+1 if (tem ===1 || tem===3 || tem===5 || tem===7 || tem===8 || tem===10) { end.setDate(31); } if (tem===4 || tem===6 || tem===9 || tem===11) { end.setDate(30); } if (tem===2) { const year = start.getFullYear(); if ((year % 4 == 0 && !(year % 100 == 0)) || year % 400 == 0) { end.setDate(29); } else { end.setDate(28); } } this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; case 'this-quarter': const quarter = Math.floor((month%3 === 0 ? ( month/3 ) : ( month/3 + 1 ))) start.setDate(1); if (quarter === 1) { start.setMonth(0); end.setMonth(2); end.setDate(31); } if (quarter === 2) { start.setMonth(3); end.setMonth(5); end.setDate(30); } if (quarter === 3) { start.setMonth(6); end.setMonth(8); end.setDate(30); } if (quarter === 4) { start.setMonth(9); end.setMonth(11); end.setDate(31); } this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; case 'this-year': start.setMonth(0); start.setDate(1); end.setMonth(11); end.setDate(31); this.$refs[ref].val = [start, end]; this.$refs[ref].changeVal(); break; } }, }}