mall-uniapp/components/wPicker/w-picker.js

681 lines
17 KiB
JavaScript

const forMatNum=(num)=>{
return num<10?'0'+num:num+'';
}
const initPicker={
//日期
date:{
init(start,end,mode="date",step,value,flag,disabled,hasSecond){
let aToday=new Date();
let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
let initstartDate=new Date(start.toString());
let endDate=new Date(end.toString());
if(start>end){
initstartDate=new Date(end.toString());
endDate=new Date(start.toString());
};
let startYear=initstartDate.getFullYear();
let startMonth=initstartDate.getMonth()+1;
let endYear=endDate.getFullYear();
let years=[],months=[],days=[],hours=[],minutes=[],seconds=[],areas=[],returnArr=[],dvalDate=[];
switch(mode){
case "half":
dvalDate=flag?[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")]:[...value.split(" ")[0].split("-"),value.split(" ")[1]];
break;
case "date":
case "yearMonth":
dvalDate=value.split("-");
break;
case "dateTime":
dvalDate=[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")];
break;
case "time":
dvalDate=value.split(":");
break;
}
let curMonth=flag?dvalDate[1]*1:(dvalDate[1]+1);
let dYear=aToday.getFullYear();
let dMonth=aToday.getMonth()+1;
let dDate=aToday.getDate();
let totalDays=new Date(startYear,curMonth,0).getDate();
let dvalObj={};
switch(mode){
case "half":
case "date":
case "yearMonth":
let curYear=dvalDate[0];
let curMonth=dvalDate[1];
if(disabled){
for(let s=startYear;s<=dYear;s++){
years.push(s+'');
};
if(curYear==dYear){
for(let m=1;m<=dMonth;m++){
months.push(forMatNum(m));
};
}else{
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
}
if(curMonth==dMonth){
for(let d=1;d<=dDate;d++){
days.push(forMatNum(d));
}
}else{
for(let d=1;d<=totalDays;d++){
days.push(forMatNum(d));
}
}
}else{
for(let s=startYear;s<=endYear;s++){
years.push(s+'');
};
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
for(let d=1;d<=totalDays;d++){
days.push(forMatNum(d));
}
};
break;
default:
for(let s=startYear;s<=endYear;s++){
years.push(s+'');
};
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
for(let d=1;d<=totalDays;d++){
days.push(forMatNum(d));
}
break;
}
for(let h=0;h<24;h++){
hours.push(forMatNum(h));
}
for(let m=0;m<60;m+=step*1){
minutes.push(forMatNum(m));
}
for(let s=0;s<60;s++){
seconds.push(forMatNum(s));
}
if(flag){
returnArr=[
years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1]),
days.indexOf(dvalDate[2]),
hours.indexOf(dvalDate[3]),
minutes.indexOf(dvalDate[4])==-1?0:minutes.indexOf(dvalDate[4]),
seconds.indexOf(dvalDate[5])
]
}
switch(mode){
case "date":
if(flag){
defaultVal=[returnArr[0],returnArr[1],returnArr[2]];
return {years,months,days,defaultVal}
}else{
defaultVal=[
years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2])
];
return {years,months,days,defaultVal}
}
break;
case "half":
areas=[{
label:"上午",
value:0
},{
label:"下午",
value:1
}];
if(flag){
defaultVal=[returnArr[0],returnArr[1],returnArr[2],returnArr[3]];
return {years,months,days,areas,defaultVal}
}else{
let idx=0;
areas.map((v,k)=>{
if(v.label==dvalDate[3]){
idx=v.value;
}
})
defaultVal=[
years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2]),
idx
];
return {years,months,days,areas,defaultVal}
}
break;
case "yearMonth":
if(flag){
defaultVal=[returnArr[0],returnArr[1]];
return {years,months,defaultVal}
}else{
defaultVal=[
years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1])
];
return {years,months,defaultVal}
}
break;
case "dateTime":
if(flag){
defaultVal=returnArr;
}else{
if(hasSecond){
defaultVal=[
years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2]),
hours.indexOf(dvalDate[3])==-1?0:hours.indexOf(dvalDate[3]),
minutes.indexOf(dvalDate[4])==-1?0:minutes.indexOf(dvalDate[4]),
seconds.indexOf(dvalDate[5])==-1?0:seconds.indexOf(dvalDate[5])
];
}else{
defaultVal=[
years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2]),
hours.indexOf(dvalDate[3])==-1?0:hours.indexOf(dvalDate[3]),
minutes.indexOf(dvalDate[4])==-1?0:minutes.indexOf(dvalDate[4])
];
}
}
if(hasSecond){
return {years,months,days,hours,minutes,seconds,defaultVal}
}else{
return {years,months,days,hours,minutes,defaultVal}
}
break;
case "time":
if(flag){
defaultVal=[returnArr[3],returnArr[4],returnArr[5]];
}else{
if(hasSecond){
defaultVal=[
hours.indexOf(dvalDate[0])==-1?0:hours.indexOf(dvalDate[0]),
minutes.indexOf(dvalDate[1])==-1?0:minutes.indexOf(dvalDate[1]),
seconds.indexOf(dvalDate[2])==-1?0:seconds.indexOf(dvalDate[2])
];
}else{
defaultVal=[
hours.indexOf(dvalDate[0])==-1?0:hours.indexOf(dvalDate[0]),
minutes.indexOf(dvalDate[1])==-1?0:minutes.indexOf(dvalDate[1])
];
}
}
return {hours,minutes,seconds,defaultVal}
break;
}
},
initMonths:(year,disabled)=>{
let aDate=new Date();
let dYear=aDate.getFullYear();
let dMonth=aDate.getMonth()+1;
let dDate=aDate.getDate();
let flag=dYear==year?true:false;
let months=[];
if(disabled){
if(flag){
for(let m=1;m<=dMonth;m++){
months.push(forMatNum(m));
};
}else{
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
}
}else{
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
};
return months;
},
initDays:(year,month,disabled)=>{
let aDate=new Date();
let dYear=aDate.getFullYear();
let dMonth=aDate.getMonth()+1;
let dDate=aDate.getDate();
let flag=(dYear==year&&dMonth==month)?true:false;
let totalDays=new Date(year,month,0).getDate();
let dates=[];
if(flag&&disabled){
for(let d=1;d<=dDate;d++){
dates.push(forMatNum(d));
};
}else{
for(let d=1;d<=totalDays;d++){
dates.push(forMatNum(d));
};
};
return dates;
},
},
//短期日期上下午
limitHour:{
init(dayStep=7,dVal){
let startDate=new Date();
let date=[],areas=[],hours=[];
let hour=new Date().getHours();
let weeks=["周日","周一","周二","周三","周四","周五","周六"];
let arrs=[];
let defaultVal=[];
let d=0,a=0,h=0;
for(let i=0;i<dayStep;i++){
let year,month,day,weekday;
year=startDate.getFullYear();
month=forMatNum(startDate.getMonth()+1);
day=forMatNum(startDate.getDate());
weekday=weeks[startDate.getDay()];
let label="";
switch(i){
case 0:
label="今天";
break;
case 1:
label="明天"
break;
case 2:
label="后天"
break;
default:
label=month+"月"+day+"日"+" "+weekday;
break;
}
date.push({
label:label,
value:year+"-"+month+"-"+day,
today:i==0?true:false
})
startDate.setDate(startDate.getDate()+1);
}
if(hour>12){
areas=[{
label:"下午",
value:1
}]
}else{
areas=[{
label:"上午",
value:0
},{
label:"下午",
value:1
}]
};
for(let k=hour>12?hour-12:hour;k<=12;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(hour>12?k+12:k)
})
};
date.map((v,k)=>{
if(v.label==dVal[0]){
d=k
}
})
if(d!=0){
areas=this.initAreas(date[d]);
hours=this.initHours(date[d],areas[a]);
}
areas.map((v,k)=>{
if(v.label==dVal[1]){
a=k
}
})
hours.map((v,k)=>{
if(v.label==dVal[2]){
h=k
}
});
defaultVal=[d,a,h]
return {date,areas,hours,defaultVal};
},
initAreas(date){
let areas=[];
let hour=new Date().getHours();
if(date.today){
if(hour>12){
areas=[{
label:"下午",
value:1
}]
}else{
areas=[{
label:"上午",
value:0
},{
label:"下午",
value:1
}]
};
}else{
areas=[{
label:"上午",
value:0
},{
label:"下午",
value:1
}]
}
return areas;
},
initHours(dateCol,hourCol){
let hours=[];
let hour=new Date().getHours();
if(dateCol.today){
if(hourCol.value==1&&hour<=12){
for(let k=1;k<=12;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(hourCol.value==1?k+12:k)
})
};
}else{
for(let k=hour>12?hour-12:hour;k<=12;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(hourCol.value==1?k+12:k)
})
};
}
}else{
for(let k=1;k<=12;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(hourCol.value==1?k+12:k)
})
};
};
return hours
}
},
//短期日期时间初始化
limit:{
init(dayStep=7,startHour=8,endHour=20,minuteStep=1,afterStep=30,dVal){
let startDate=new Date();
let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
let date=[],hours=[],minutes=[];
let hour=bsDate.getHours();
let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
let weeks=["周日","周一","周二","周三","周四","周五","周六"];
let d=0,h=0,m=0;
let defaultVal=[];
for(let i=0;i<dayStep;i++){
let year,month,day,weekday;
year=startDate.getFullYear();
month=forMatNum(startDate.getMonth()+1);
day=forMatNum(startDate.getDate());
weekday=weeks[startDate.getDay()];
let label="";
switch(i){
case 0:
label="今天";
break;
case 1:
label="明天"
break;
case 2:
label="后天"
break;
default:
label=month+"月"+day+"日"+" "+weekday;
break;
}
date.push({
label:label,
value:year+"-"+month+"-"+day,
flag:i==0?true:false
})
startDate.setDate(startDate.getDate()+1);
}
if(hour<startHour){
hour=startHour;
};
if(hour>endHour){
hour=endHour;
};
for(let k=hour*1;k<=endHour*1;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(k),
flag:k==hour?true:false
})
};
for(let j=minute;j<60;j+=minuteStep*1){
minutes.push({
label:forMatNum(j),
value:forMatNum(j)
});
}
date.map((v,k)=>{
if(v.label==dVal[0]){
d=k
}
})
if(d!=0){
hours=this.initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date[d].value);
}
hours.map((v,k)=>{
if(v.label==dVal[1]){
h=k
}
})
minutes.map((v,k)=>{
if(v.label==dVal[2]){
m=k
}
})
defaultVal=[d,h,m];
return {date,hours,minutes,defaultVal};
},
initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date){
let hours=[];
let arr=date.split("-");
let aDate=new Date();
let dYear=aDate.getFullYear();
let dMonth=aDate.getMonth()+1;
let dDate=aDate.getDate();
let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
let hour=bsDate.getHours();
let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
if(hour>endHour){
hour=endHour;
};
if(flag){
for(let k=hour*1;k<=endHour*1;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(k),
flag:k==hour?true:false
})
};
}else{
for(let k=startHour*1;k<=endHour*1;k++){
hours.push({
label:forMatNum(k),
value:forMatNum(k),
flag:false
})
}
};
return hours;
},
initMinutes(startHour=8,endHour=20,minuteStep=1,afterStep=30,date,hour){
let minutes=[];
let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
let arr=date.split("-");
let aDate=new Date();
let dYear=aDate.getFullYear();
let dMonth=aDate.getMonth()+1;
let dDate=aDate.getDate();
let dHour=bsDate.getHours();;
let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
if(flag){
if(hour==dHour){
for(let j=minute;j<60;j+=minuteStep*1){
minutes.push({
label:forMatNum(j),
value:forMatNum(j)
});
}
}else{
for(let j=0;j<60;j+=minuteStep*1){
minutes.push({
label:forMatNum(j),
value:forMatNum(j)
})
}
}
}else{
for(let j=0;j<60;j+=minuteStep*1){
minutes.push({
label:forMatNum(j),
value:forMatNum(j)
})
}
}
return minutes;
}
},
//选择区间初始化
range:{
init(start,end,value,flag){
let aToday=new Date();
let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
let initstartDate=new Date(start.toString());
let endDate=new Date(end.toString());
if(start>end){
initstartDate=new Date(end.toString());
endDate=new Date(start.toString());
};
let startYear=initstartDate.getFullYear();
let startMonth=initstartDate.getMonth()+1;
let endYear=endDate.getFullYear();
let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[],returnArr=[],startDVal=[],endDVal=[];
startDVal=value[0].split("-");
endDVal=value[1].split("-");
let curMonth=flag?startDVal[1]*1:(startDVal[1]+1);
let totalDays=new Date(startYear,curMonth,0).getDate();
for(let s=startYear;s<=endYear;s++){
fyears.push(s+'');
};
for(let m=1;m<=12;m++){
fmonths.push(forMatNum(m));
};
for(let d=1;d<=totalDays;d++){
fdays.push(forMatNum(d));
};
for(let s=startDVal[0];s<=endYear;s++){
tyears.push(s+'');
};
if(endDVal[0]>startDVal[0]){
for(let m=1;m<=12;m++){
tmonths.push(forMatNum(m));
};
for(let d=1;d<=totalDays;d++){
tdays.push(forMatNum(d));
};
}else{
for(let m=startDVal[1];m<=12;m++){
tmonths.push(forMatNum(m));
};
for(let d=startDVal[2];d<=totalDays;d++){
tdays.push(forMatNum(d));
};
};
defaultVal=[
fyears.indexOf(startDVal[0])==-1?0:fyears.indexOf(startDVal[0]),
fmonths.indexOf(startDVal[1])==-1?0:fmonths.indexOf(startDVal[1]),
fdays.indexOf(startDVal[2])==-1?0:fdays.indexOf(startDVal[2]),
0,
tyears.indexOf(endDVal[0])==-1?0:tyears.indexOf(endDVal[0]),
tmonths.indexOf(endDVal[1])==-1?0:tmonths.indexOf(endDVal[1]),
tdays.indexOf(endDVal[2])==-1?0:tdays.indexOf(endDVal[2])
];
return {
fyears,
fmonths,
fdays,
tyears,
tmonths,
tdays,
defaultVal
}
},
initStartDays(year,month){
let totalDays=new Date(year,month,0).getDate();
let dates=[];
for(let d=1;d<=totalDays;d++){
dates.push(forMatNum(d));
};
return dates;
},
initEndYears(curYear,startYear,endYear){
let years=[];
for(let y=curYear;y<=endYear;y++){
years.push(forMatNum(y));
};
return years;
},
initEndMonths(curMonth){
let months=[];
for(let m=curMonth*1;m<=12;m++){
months.push(forMatNum(m));
};
return months;
},
initEndDays(curYear,curMonth,curDate,tYear,tMonth){
let totalDays=new Date(curYear,curMonth,0).getDate();
let days=[];
for(let d=curDate*1;d<=totalDays;d++){
days.push(forMatNum(d));
};
return days;
},
initToMonths(curYear,curMonth,curDate,tYear){
let aDate=new Date(curYear,curMonth,curDate).getTime();
let bDate=new Date(tYear,curMonth,curDate).getTime();
let months=[];
if(bDate-aDate>0){
console.log(1)
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};
}else{
for(let m=curMonth*1;m<=12;m++){
months.push(forMatNum(m));
};
}
return months;
},
initToDays(curYear,curMonth,curDate,tYear,tMonth){
let aDate=new Date(curYear,curMonth,curDate).getTime();
let bDate=new Date(tYear,tMonth,curDate).getTime();
let totalDays=new Date(tYear,tMonth,0).getDate();
let days=[];
if(bDate-aDate>0){
for(let d=1;d<=totalDays;d++){
days.push(forMatNum(d));
};
}else{
for(let d=curDate*1;d<=totalDays;d++){
days.push(forMatNum(d));
};
}
return days;
}
}
}
export default initPicker