vue+element?DatePicker實(shí)現(xiàn)日期選擇器封裝
前言
今天封裝了一個(gè)DatePicker日期選擇器,發(fā)現(xiàn)帶快捷選擇的不太好封裝,我需要在不同的地方快捷選擇不同的時(shí)間,并且快捷顯示的時(shí)間是從昨天開始,在網(wǎng)上找了一圈都沒找到便自己寫了一個(gè)記錄一下。
效果


今天是2022年1月3日,最近一周便是從昨天開始往前推一周

我這里只有兩種顯示快捷選擇時(shí)間的樣式,可以根據(jù)具體需求無限加,達(dá)到我想要在不同的選擇器中顯示不同的快捷時(shí)間選擇的需求。
一、封裝組件
創(chuàng)建linechart

linechart:
直接上代碼:
<!--
時(shí)間選擇器(帶快捷選擇)
time:時(shí)間(必傳)
time:{
1:近七天,近三十天,近九十天
2:近一天,近三天,近五天,近三十天
}
<template>
<div class="line_charts">
<el-date-picker
v-model="timedata"
type="daterange"
unlink-panels
:range-separator="$t('to')"
:start-placeholder="$t('start_date')"
:end-placeholder="$t('end_date')"
:picker-options="pickerOptions"
>
</el-date-picker>
</div>
</template>
<script>
export default {
props:{
time:{
default(){
return [];
}
}
},
data(){
return{
timedata:'', //選擇時(shí)間數(shù)據(jù)
pickerOptions:{ //快捷選擇時(shí)間數(shù)據(jù)
shortcuts: []
},
shortcuts:'',
}
},
methods:{
getshortcuts(){ //快捷選擇時(shí)間事件
if (this.time == 1) {
this.pickerOptions.shortcuts = [
{
text: '最近七天',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
console.log(picker);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一個(gè)月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三個(gè)月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
picker.$emit('pick', [start, end]);
}
}
]
}else{
this.pickerOptions.shortcuts = [
{
text: '最近一天',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 1 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
console.log(picker);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三天',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 3 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近五天',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 5 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一個(gè)月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 - 3600 * 1000 * 24 * 1);
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
picker.$emit('pick', [start, end]);
}
}
]
}
}
},
mounted(){
this.getshortcuts()
}
}
</script>二、頁面中使用
workBench:
<template>
<div class="workbench">
<linechart
:time=1
></linechart>
</div>
</template>
<script>
import linechart from './visualization/linechart.vue'
export default {
components:{
linechart
},
}
</script>總結(jié)
我這里是通過父組件傳入的time去區(qū)分我想要哪種快捷選擇的時(shí)間
:time=1
子組件也就是封裝的組件(linechart),進(jìn)行接收父組件傳入的time并進(jìn)行渲染 主要邏輯是:
- 接收time,
- 通過mounted周期函數(shù)去執(zhí)行g(shù)etshortcuts()函數(shù)
- 判斷需要哪種類型的快捷選擇時(shí)間進(jìn)行對(duì)應(yīng)渲染
我這里的話起止時(shí)間都是減了一天的(因?yàn)槲沂切枰獜淖蛱扉_始計(jì)算)
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 - 3600 * 1000 * 24 * 1); end.setTime(end.getTime() - 3600 * 1000 * 24 * 1);
需要從今天開始計(jì)算的話直接(三十天為例)
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
其他的話在Element的官方文檔上都有介紹就不過多說明了。
到此這篇關(guān)于vue+element DatePicker實(shí)現(xiàn)日期選擇器封裝的文章就介紹到這了,更多相關(guān)vue+element DatePicker日期選擇器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3獲取元素并且修改元素樣式的實(shí)戰(zhàn)操作
ref作為在vue里面我們獲取元素最常用的一個(gè)api,在vue3迎來改造,下面這篇文章主要給大家介紹了關(guān)于vue3獲取元素并且修改元素樣式的相關(guān)資料,需要的朋友可以參考下2023-04-04
Vue input輸入框回車以后自動(dòng)刷新頁面(直播程序)
這篇文章主要介紹了直播程序,Vue input輸入框回車以后自動(dòng)刷新頁面,適用場(chǎng)景是在輸入框輸入字符并按下回車鍵搜索時(shí),刷新頁面,需要的朋友參考下實(shí)現(xiàn)代碼2023-01-01
Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn)
本文主要介紹了Avue和Element-UI動(dòng)態(tài)三級(jí)表頭的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Vue3中ref和reactive的基本使用及區(qū)別詳析
這篇文章主要給大家介紹了關(guān)于Vue3中ref和reactive的基本使用及區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-07-07
淺談webpack編譯vue項(xiàng)目生成的代碼探索
本篇文章主要介紹了淺談webpack編譯vue項(xiàng)目生成的代碼探索,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
詳解Nuxt內(nèi)導(dǎo)航欄的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了詳解Nuxt內(nèi)導(dǎo)航欄的兩種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

