You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
5.9 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="tm-weekbar">
<tm-sheet :color="color" :black="black_tmeme" :round="8" :shadow="0" :margin="[0,0]" :padding="[0,0]">
<view class="flex-between ">
<tm-button :fllowTheme="false" @click="timeNextPre(false)" :black="black_tmeme" :theme="btnColor" :font-color="fontColor" icon="icon-angle-left" block width="44" :round="10" :shadow="0"></tm-button>
<view class="flex-shrink flex-start" style="width: calc(100% - 88rpx);">
<view @click="weekClick(index,item.dateFull)" v-for="(item,index) in timeList" :key="index" class="flex-center flex-col px-5" style="width:14.28%">
<view :class="[fontColor?(d_time==item.dateFull?`text-${activeColor_tmeme}`:(black_tmeme?'text-grey':`text-${fontColor}`)):color,d_time==item.dateFull?'text-weight-b':'',black_tmeme?'bk':'']" class=" text-size-s text-weight-b">{{item.weekCN}}</view>
<view :class="[dateColor?(d_time==item.dateFull?`text-${activeColor_tmeme}`:(black_tmeme?'text-grey':`text-${dateColor}`)):color,d_time==item.dateFull?'text-weight-b':'',black_tmeme?'bk':'']" class=" text-size-xs">{{item.date}}</view>
</view>
</view>
<tm-button :fllowTheme="false" :black="black_tmeme" @click="timeNextPre(true)" :theme="btnColor" :font-color="fontColor" icon="icon-angle-right" block width="44" :round="10" :shadow="0"></tm-button>
</view>
</tm-sheet>
</view>
</template>
<script>
/**
* 时间周切换组件
* @property {String} default-value = [] ,默认:'',建议使用.sync双向绑定默认显示的日期格式为"2021-9-21"。
* @property {String} color = [] ,默认:'white',背景色
* @property {String} font-color = [] ,默认:'black',默认的标题字体颜色
* @property {String} date-color = [] ,默认:'grey',默认的日期字体颜色
* @property {String} active-color = [] ,默认:'primary',激活后的文字颜色
* @property {String} btn-color = [] ,默认:'grey-lighten-4',两按钮的背景主题色
* @property {Function} change 点击时间时触发,返回当前选中的日期。
*/
import tmSheet from "@/tm-vuetify/components/tm-sheet/tm-sheet.vue"
import tmButton from "@/tm-vuetify/components/tm-button/tm-button.vue"
import tmIcons from "@/tm-vuetify/components/tm-icons/tm-icons.vue"
export default {
components:{tmSheet,tmButton,tmIcons},
name:"tm-weekbar",
props:{
defaultValue:{
type:String,
default:''
},
color:{
type:String,
default:'white'
},
fontColor:{
type:String,
default:'black'
},
dateColor:{
type:String,
default:'grey'
},
activeColor:{
type:String,
default:'primary'
},
btnColor:{
type:String,
default:'grey-lighten-4'
},
black:{
type:Boolean,
default:null
},
// 跟随主题色的改变而改变。
fllowTheme:{
type:Boolean|String,
default:true
}
},
data() {
return {
nowDate:"",
timeList:[],
};
},
watch:{
defaultValue:function(nval,oval){
if(nval!=oval){
let p = nval;
if(typeof p==='string'){
p = p.replace(/-/g,'/')
}
this.d_time = new Date(p).toLocaleDateString()
}
}
},
computed:{
black_tmeme: function() {
if (this.black !== null) return this.black;
return this.$tm.vx.state().tmVuetify.black;
},
activeColor_tmeme:function(){
if(this.$tm.vx.state().tmVuetify.color!==null&&this.$tm.vx.state().tmVuetify.color && this.fllowTheme){
return this.$tm.vx.state().tmVuetify.color;
}
return this.activeColor;
},
d_time:{
get:function(){
return this.nowDate;
},
set:function(val){
this.nowDate = val;
this.$emit("update:defaultValue",val)
this.$emit("change",val)
},
}
},
mounted() {
let nDate = new Date();
const dte = nDate.getFullYear()+"/"+ (nDate.getMonth()+1) + "/" + nDate.getDate();
let p = this.defaultValue;
if(typeof p==='string'){
p = p.replace(/-/g,'/')
}
this.nowDate = new Date(p||dte).toLocaleDateString();
this.getTimeList(this.d_time)
},
methods: {
weekClick(eindex,nowdefault){
this.d_time = nowdefault
},
getTimeList(nwd){
if(!nwd){
nwd = this.nowDate;
}
let nwod = new Date(nwd);
let year = nwod.getFullYear();
let month = nwod.getMonth();
let day = nwod.getDate();
let week = nwod.getDay();
let new_weekDay = [nwod];
let timcha = Math.abs(week-7);
let zcha = Math.abs(7-timcha);
let weekCn=["周日","周一","周二","周三","周四","周五","周六"];
for(let i=1;i<zcha;i++){
let d = new Date(year,month,day-i);
new_weekDay.push(d);
}
for(let i=1;i<=timcha;i++){
let d = new Date(year,month,day+i);
new_weekDay.push(d);
}
let weekDay = [];
for(let i=0;i<new_weekDay.length;i++){
let ide = new_weekDay[i];
let sc = {
week:ide.getDay(),
dateFull:ide.getFullYear()+"/"+ (ide.getMonth()+1) + "/" + ide.getDate(),
date:(ide.getMonth()+1) + "-" + ide.getDate(),
index:i,
weekCN:weekCn[ide.getDay()]
}
weekDay.push(sc);
}
weekDay.sort(function(a, b){return a.week - b.week});
weekDay.push(weekDay[0])
weekDay.splice(0,1)
if(weekDay.length==8){
weekDay.splice(0,1)
weekDay.unshift(weekDay[weekDay.length-1])
weekDay.splice(weekDay.length-1,1)
}
let t= this;
this.timeList = [];
this.$nextTick(function(){
this.timeList = weekDay;
})
},
timeNextPre(typeV){
if(typeV){
let nd = this.timeList[this.timeList.length-1];
let enx = new Date(nd.dateFull.replace(/-/g,'/'));
enx.setDate(enx.getDate()+1)
this.getTimeList(enx.getFullYear()+"/"+ (enx.getMonth()+1) + "/" + enx.getDate())
}else{
let nd = this.timeList[0];
let enx = new Date(nd.dateFull.replace(/-/g,'/'));
enx.setDate(enx.getDate()-7)
this.getTimeList(enx.getFullYear()+"/"+ (enx.getMonth()+1) + "/" + enx.getDate())
}
},
},
}
</script>
<style lang="scss">
</style>