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.

1172 lines
36 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="w-picker-view">
<view
style="
display: flex;
justify-content: space-around;
font-size: 18px;
font-weight: 700;
padding: 30upx 0;
border-bottom: 1rpx solid rgb(134 134 134);
border-top: 1rpx solid rgb(134 134 134);
color:#1936C9
"
>
<template v-if="fields == 'minute'">
<view>年份</view>
<view>月</view>
<view>日</view>
<view>时</view>
<view>分</view>
</template>
<template v-if="fields == 'day'">
<view>年份</view>
<view>月</view>
<view>日</view>
</template>
</view>
<picker-view
v-if="fields == 'year'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
</picker-view>
<picker-view
v-if="fields == 'month'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view>
</picker-view-column>
</picker-view>
<picker-view
v-if="fields == 'day'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view>
</picker-view-column>
</picker-view>
<picker-view
v-if="fields == 'hour'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view>
</picker-view-column>
</picker-view>
<picker-view
v-if="fields == 'minute'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.minutes" :key="index">{{ item }}分</view>
</picker-view-column>
</picker-view>
<picker-view
v-if="fields == 'second'"
class="d-picker-view"
:indicator-style="itemHeight"
:value="pickVal"
@change="handlerChange"
>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.minutes" :key="index">{{ item }}分</view>
</picker-view-column>
<picker-view-column>
<view class="w-picker-item" v-for="(item, index) in range.seconds" :key="index">{{ item }}</view>
</picker-view-column>
</picker-view>
</view>
</template>
<script>
export default {
data() {
return {
pickVal: [],
range: {
years: [],
months: [],
days: [],
hours: [],
minutes: [],
seconds: []
},
checkObj: {}
};
},
props: {
itemHeight: {
type: String,
default: "44px"
},
startYear: {
type: [String, Number],
default: ""
},
endYear: {
type: [String, Number],
default: ""
},
value: {
type: [String, Array, Number],
default: ""
},
current: {
//是否默认选中当前日期
type: Boolean,
default: false
},
disabledAfter: {
//是否禁用当前之后的日期
type: Boolean,
default: false
},
fields: {
type: String,
default: "day"
},
// disabledMonth: {
// type: Number,
// default: 0,
// },
// disabledRange: {
// type: Array,
// default: ''
// },
disabledBefore: {
//是否禁用当前之前的日期
type: Boolean,
default: false
}
},
watch: {
fields(val) {
this.initData();
},
value(val) {
this.initData();
}
},
created() {
this.initData();
},
methods: {
formatNum(n) {
return Number(n) < 10 ? "0" + Number(n) : Number(n) + "";
},
checkValue(value) {
let strReg, example;
switch (this.fields) {
case "year":
strReg = /^\d{4}$/;
example = "2019";
break;
case "month":
strReg = /^\d{4}-\d{2}$/;
example = "2019-02";
break;
case "day":
strReg = /^\d{4}-\d{2}-\d{2}$/;
example = "2019-02-01";
break;
case "hour":
strReg = /^\d{4}-\d{2}-\d{2} \d{2}(:\d{2}){1,2}?$/;
example = "2019-02-01 18:00:00或2019-02-01 18";
break;
case "minute":
strReg = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2}){0,1}?$/;
example = "2019-02-01 18:06:00或2019-02-01 18:06";
break;
case "second":
strReg = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
example = "2019-02-01 18:06:01";
break;
}
if (!strReg.test(value)) {
console.log(
new Error(
"请传入与mode、fields匹配的value值例value=" + example + ""
)
);
}
return strReg.test(value);
},
resetData(year, month, day, hour, minute) {
// let disabledRange = this.disabledRange
let curDate = this.getCurrenDate();
let curFlag = this.current;
let curYear = curDate.curYear;
let curMonth = curDate.curMonth;
let curDay = curDate.curDay;
let curHour = curDate.curHour;
let curMinute = curDate.curMinute;
let curSecond = curDate.curSecond;
let months = [],
days = [],
hours = [],
minutes = [],
seconds = [];
let disabledAfter = this.disabledAfter;
let disabledBefore = this.disabledBefore;
let monthsLen = disabledAfter ? (year * 1 < curYear ? 12 : curMonth) : 12;
let totalDays = new Date(year, month, 0).getDate(); //计算当月有几天;
let daysLen = disabledAfter
? year * 1 < curYear || month * 1 < curMonth
? totalDays
: curDay
: totalDays;
let hoursLen = disabledAfter
? year * 1 < curYear || month * 1 < curMonth || day * 1 < curDay
? 24
: curHour + 1
: 24;
let minutesLen = disabledAfter
? year * 1 < curYear ||
month * 1 < curMonth ||
day * 1 < curDay ||
hour * 1 < curHour
? 60
: curMinute + 1
: 60;
let secondsLen = disabledAfter
? year * 1 < curYear ||
month * 1 < curMonth ||
day * 1 < curDay ||
hour * 1 < curHour ||
minute * 1 < curMinute
? 60
: curSecond + 1
: 60;
for (let month = 1; month <= monthsLen; month++) {
months.push(this.formatNum(month));
}
for (let day = 1; day <= daysLen; day++) {
days.push(this.formatNum(day));
}
for (let hour = 0; hour < hoursLen; hour++) {
hours.push(this.formatNum(hour));
}
for (let minute = 0; minute < minutesLen; minute++) {
minutes.push(this.formatNum(minute));
}
for (let second = 0; second < secondsLen; second++) {
seconds.push(this.formatNum(second));
}
const index2 = days.findIndex(item => item === this.formatNum(curDay));
const electiveDays = days.slice(index2);
const index = months.findIndex(item => item === this.formatNum(curMonth));
const electiveMonths = months.slice(index);
// let electiveDays = days.filter(item => !disabledRange.includes(item))
days = this.disabledBefore
? year * 1 === curYear && month * 1 === curMonth
? electiveDays
: days
: days;
months = this.disabledBefore
? year * 1 === curYear
? electiveMonths
: months
: months;
return {
months,
days,
hours,
minutes,
seconds
};
},
isLeapYear(Year) {
if ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0) {
return true;
} else {
return false;
}
},
getData(dVal) {
//用来处理初始化数据
let curFlag = this.current;
let disabledAfter = this.disabledAfter;
let fields = this.fields;
let curDate = this.getCurrenDate();
let curYear = curDate.curYear;
let curMonthdays = curDate.curMonthdays;
let curMonth = curDate.curMonth;
let curDay = curDate.curDay;
let curHour = curDate.curHour;
let curMinute = curDate.curMinute;
let curSecond = curDate.curSecond;
let defaultDate = this.getDefaultDate();
let startYear = this.getStartDate().getFullYear();
let endYear = this.getEndDate().getFullYear();
//颗粒度禁用当前之后日期仅对year,month,day,hour生效;分钟秒禁用没有意义,
let years = [],
months = [],
days = [],
hours = [],
minutes = [],
seconds = [];
let year = dVal[0] * 1;
let month = dVal[1] * 1;
let day = dVal[2] * 1;
let hour = dVal[3] * 1;
let minute = dVal[4] * 1;
let monthsLen = disabledAfter
? year < curYear
? 12
: curDate.curMonth
: 12;
let daysLen = disabledAfter
? year < curYear || month < curMonth
? defaultDate.defaultDays
: curDay
: curFlag
? curMonthdays
: defaultDate.defaultDays;
let hoursLen = disabledAfter
? year < curYear || month < curMonth || day < curDay
? 24
: curHour + 1
: 24;
let minutesLen = disabledAfter
? year < curYear || month < curMonth || day < curDay || hour < curHour
? 60
: curMinute + 1
: 60;
let secondsLen = disabledAfter
? year < curYear ||
month < curMonth ||
day < curDay ||
hour < curHour ||
minute < curMinute
? 60
: curSecond + 1
: 60;
for (
let year = startYear;
year <= (disabledAfter ? curYear : endYear);
year++
) {
years.push(year.toString());
}
for (let month = 1; month <= monthsLen; month++) {
months.push(this.formatNum(month));
}
for (let day = 1; day <= daysLen; day++) {
days.push(this.formatNum(day));
}
for (let hour = 0; hour < hoursLen; hour++) {
hours.push(this.formatNum(hour));
}
for (let minute = 0; minute < minutesLen; minute++) {
minutes.push(this.formatNum(minute));
}
// for(let second=0;second<(disabledAfter?curDate.curSecond+1:60);second++){
// seconds.push(this.formatNum(second));
// }
for (let second = 0; second < 60; second++) {
seconds.push(this.formatNum(second));
}
const index2 = days.findIndex(item => item === this.formatNum(curDay));
const electiveDays = days.slice(index2);
const index = months.findIndex(item => item === this.formatNum(curMonth));
const electiveMonths = months.slice(index);
days = this.disabledBefore
? year * 1 === curYear && month * 1 === curMonth
? electiveDays
: days
: days;
months = this.disabledBefore
? year * 1 === curYear
? electiveMonths
: months
: months;
return {
years,
months,
days,
hours,
minutes,
seconds
};
},
getCurrenDate() {
let curDate = new Date();
let curYear = curDate.getFullYear();
let curMonth = curDate.getMonth() + 1;
let curMonthdays = new Date(curYear, curMonth, 0).getDate();
let curDay = curDate.getDate();
let curHour = curDate.getHours();
let curMinute = curDate.getMinutes();
let curSecond = curDate.getSeconds();
return {
curDate,
curYear,
curMonth,
curMonthdays,
curDay,
curHour,
curMinute,
curSecond
};
},
getDefaultDate() {
let value = this.value;
let reg = /-/g;
let defaultDate = value ? new Date(value.replace(reg, "/")) : new Date();
let defaultYear = defaultDate.getFullYear();
let defaultMonth = defaultDate.getMonth() + 1;
let defaultDay = defaultDate.getDate();
let defaultDays = new Date(defaultYear, defaultMonth, 0).getDate() * 1;
return {
defaultDate,
defaultYear,
defaultMonth,
defaultDay,
defaultDays
};
},
getStartDate() {
let start = this.startYear;
let startDate = "";
let reg = /-/g;
if (start) {
startDate = new Date(start + "/01/01");
} else {
startDate = new Date("1970/01/01");
}
return startDate;
},
getEndDate() {
let end = this.endYear;
let reg = /-/g;
let endDate = "";
if (end) {
endDate = new Date(end + "/12/01");
} else {
endDate = new Date();
}
return endDate;
},
getDval() {
let value = this.value;
let fields = this.fields;
let dVal = null;
let aDate = new Date();
let year = this.formatNum(aDate.getFullYear());
let month = this.formatNum(aDate.getMonth() + 1);
let day = this.formatNum(aDate.getDate());
let hour = this.formatNum(aDate.getHours());
let minute = this.formatNum(aDate.getMinutes());
let second = this.formatNum(aDate.getSeconds());
if (value) {
let flag = this.checkValue(value);
if (!flag) {
dVal = [year, month, day, hour, minute, second];
} else {
switch (this.fields) {
case "year":
dVal = value ? [value] : [];
break;
case "month":
dVal = value ? value.split("-") : [];
break;
case "day":
dVal = value ? value.split("-") : [];
break;
case "hour":
dVal = [
...value.split(" ")[0].split("-"),
...value.split(" ")[1].split(":")
];
break;
case "minute":
dVal = value
? [
...value.split(" ")[0].split("-"),
...value.split(" ")[1].split(":")
]
: [];
break;
case "second":
dVal = [
...value.split(" ")[0].split("-"),
...value.split(" ")[1].split(":")
];
break;
}
}
} else {
dVal = [year, month, day, hour, minute, second];
}
return dVal;
},
initData() {
let startDate,
endDate,
startYear,
endYear,
startMonth,
endMonth,
startDay,
endDay;
let years = [],
months = [],
days = [],
hours = [],
minutes = [],
seconds = [];
let dVal = [],
pickVal = [];
let value = this.value;
let reg = /-/g;
let range = {};
let result = "",
full = "",
year,
month,
day,
hour,
minute,
second,
obj = {};
let defaultDate = this.getDefaultDate();
let defaultYear = defaultDate.defaultYear;
let defaultMonth = defaultDate.defaultMonth;
let defaultDay = defaultDate.defaultDay;
let defaultDays = defaultDate.defaultDays;
let curFlag = this.current;
let disabledAfter = this.disabledAfter;
let curDate = this.getCurrenDate();
let curYear = curDate.curYear;
let curMonth = curDate.curMonth;
let curMonthdays = curDate.curMonthdays;
let curDay = curDate.curDay;
let curHour = curDate.curHour;
let curMinute = curDate.curMinute;
let curSecond = curDate.curSecond;
let dateData = [];
dVal = this.getDval();
startDate = this.getStartDate();
endDate = this.getEndDate();
startYear = startDate.getFullYear();
startMonth = startDate.getMonth();
startDay = startDate.getDate();
endYear = endDate.getFullYear();
endMonth = endDate.getMonth();
endDay = endDate.getDate();
dateData = this.getData(dVal);
years = dateData.years;
months = dateData.months;
days = dateData.days;
hours = dateData.hours;
minutes = dateData.minutes;
seconds = dateData.seconds;
switch (this.fields) {
case "year":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0
]
: curFlag
? [years.indexOf(curYear + "")]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0
];
range = { years };
year = dVal[0] ? dVal[0] : years[0];
result = full = `${year}`;
obj = {
year
};
break;
case "month":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0
]
: curFlag
? [
years.indexOf(curYear + ""),
months.indexOf(this.formatNum(curMonth))
]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0
];
range = { years, months };
year = dVal[0] ? dVal[0] : years[0];
month = dVal[1] ? dVal[1] : months[0];
result = full = `${year + "-" + month}`;
obj = {
year,
month
};
break;
case "day":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0
]
: curFlag
? [
years.indexOf(curYear + ""),
months.indexOf(this.formatNum(curMonth)),
days.indexOf(this.formatNum(curDay))
]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0
];
range = { years, months, days };
year = dVal[0] ? dVal[0] : years[0];
month = dVal[1] ? dVal[1] : months[0];
day = dVal[2] ? dVal[2] : days[0];
result = full = `${year + "-" + month + "-" + day}`;
obj = {
year,
month,
day
};
break;
case "hour":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0
]
: curFlag
? [
years.indexOf(curYear + ""),
months.indexOf(this.formatNum(curMonth)),
days.indexOf(this.formatNum(curDay)),
hours.indexOf(this.formatNum(curHour))
]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0
];
range = { years, months, days, hours };
year = dVal[0] ? dVal[0] : years[0];
month = dVal[1] ? dVal[1] : months[0];
day = dVal[2] ? dVal[2] : days[0];
hour = dVal[3] ? dVal[3] : hours[0];
result = `${year + "-" + month + "-" + day + " " + hour}`;
full = `${year + "-" + month + "-" + day + " " + hour + ":00:00"}`;
obj = {
year,
month,
day,
hour
};
break;
case "minute":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0,
dVal[4] && minutes.indexOf(dVal[4]) != -1
? minutes.indexOf(dVal[4])
: 0
]
: curFlag
? [
years.indexOf(curYear + ""),
months.indexOf(this.formatNum(curMonth)),
days.indexOf(this.formatNum(curDay)),
hours.indexOf(this.formatNum(curHour)),
minutes.indexOf(this.formatNum(curMinute))
]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0,
dVal[4] && minutes.indexOf(dVal[4]) != -1
? minutes.indexOf(dVal[4])
: 0
];
range = { years, months, days, hours, minutes };
year = dVal[0] ? dVal[0] : years[0];
month = dVal[1] ? dVal[1] : months[0];
day = dVal[2] ? dVal[2] : days[0];
hour = dVal[3] ? dVal[3] : hours[0];
minute = dVal[4] ? dVal[4] : minutes[0];
full = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":00"}`;
result = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute}`;
obj = {
year,
month,
day,
hour,
minute
};
break;
case "second":
pickVal = disabledAfter
? [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0,
dVal[4] && minutes.indexOf(dVal[4]) != -1
? minutes.indexOf(dVal[4])
: 0,
dVal[5] && seconds.indexOf(dVal[5]) != -1
? seconds.indexOf(dVal[5])
: 0
]
: curFlag
? [
years.indexOf(curYear + ""),
months.indexOf(this.formatNum(curMonth)),
days.indexOf(this.formatNum(curDay)),
hours.indexOf(this.formatNum(curHour)),
minutes.indexOf(this.formatNum(curMinute)),
seconds.indexOf(this.formatNum(curSecond))
]
: [
dVal[0] && years.indexOf(dVal[0]) != -1
? years.indexOf(dVal[0])
: 0,
dVal[1] && months.indexOf(dVal[1]) != -1
? months.indexOf(dVal[1])
: 0,
dVal[2] && days.indexOf(dVal[2]) != -1
? days.indexOf(dVal[2])
: 0,
dVal[3] && hours.indexOf(dVal[3]) != -1
? hours.indexOf(dVal[3])
: 0,
dVal[4] && minutes.indexOf(dVal[4]) != -1
? minutes.indexOf(dVal[4])
: 0,
dVal[5] && seconds.indexOf(dVal[5]) != -1
? seconds.indexOf(dVal[5])
: 0
];
range = { years, months, days, hours, minutes, seconds };
year = dVal[0] ? dVal[0] : years[0];
month = dVal[1] ? dVal[1] : months[0];
day = dVal[2] ? dVal[2] : days[0];
hour = dVal[3] ? dVal[3] : hours[0];
minute = dVal[4] ? dVal[4] : minutes[0];
second = dVal[5] ? dVal[5] : seconds[0];
result = full = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":" +
second}`;
obj = {
year,
month,
day,
hour,
minute,
second
};
break;
default:
range = { years, months, days };
break;
}
this.range = range;
this.checkObj = obj;
this.$emit("change", {
result: result,
value: full,
obj: obj
});
this.$nextTick(() => {
this.pickVal = pickVal;
});
},
handlerChange(e) {
let arr = [...e.detail.value];
let data = this.range;
let year = "",
month = "",
day = "",
hour = "",
minute = "",
second = "";
let result = "",
full = "",
obj = {};
let months = null,
days = null,
hours = null,
minutes = null,
seconds = null;
let disabledAfter = this.disabledAfter;
let leapYear = false,
resetData = {};
year =
arr[0] || arr[0] == 0
? data.years[arr[0]] || data.years[data.years.length - 1]
: "";
month =
arr[1] || arr[1] == 0
? data.months[arr[1]] || data.months[data.months.length - 1]
: "";
day =
arr[2] || arr[2] == 0
? data.days[arr[2]] || data.days[data.days.length - 1]
: "";
hour =
arr[3] || arr[3] == 0
? data.hours[arr[3]] || data.hours[data.hours.length - 1]
: "";
minute =
arr[4] || arr[4] == 0
? data.minutes[arr[4]] || data.minutes[data.minutes.length - 1]
: "";
second =
arr[5] || arr[5] == 0
? data.seconds[arr[5]] || data.seconds[data.seconds.length - 1]
: "";
resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据;
month =
arr[1] || arr[1] == 0
? resetData.months[arr[1]] ||
resetData.months[resetData.months.length - 1]
: "";
day =
arr[2] || arr[2] == 0
? resetData.days[arr[2]] || resetData.days[resetData.days.length - 1]
: "";
resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据;
month =
arr[1] || arr[1] == 0
? resetData.months[arr[1]] ||
resetData.months[resetData.months.length - 1]
: "";
day =
arr[2] || arr[2] == 0
? resetData.days[arr[2]] || resetData.days[resetData.days.length - 1]
: "";
resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据;
leapYear = this.isLeapYear(year); //判断是否为闰年;
switch (this.fields) {
case "year":
result = full = `${year}`;
obj = {
year
};
break;
case "month":
result = full = `${year + "-" + month}`;
if (this.disabledAfter) months = resetData.months;
if (this.disabledBefore) months = resetData.months;
if (months) this.range.months = months;
obj = {
year,
month
};
break;
case "day":
result = full = `${year + "-" + month + "-" + day}`;
if (this.disabledAfter) {
months = resetData.months;
days = resetData.days;
} else if (this.disabledBefore) {
months = resetData.months;
days = resetData.days;
} else {
if (leapYear || month != this.checkObj.month || month == 2) {
days = resetData.days;
}
}
if (months) this.range.months = months;
if (days) this.range.days = days;
obj = {
year,
month,
day
};
break;
case "hour":
result = `${year + "-" + month + "-" + day + " " + hour}`;
full = `${year + "-" + month + "-" + day + " " + hour + ":00:00"}`;
if (this.disabledAfter) {
months = resetData.months;
days = resetData.days;
hours = resetData.hours;
} else if (this.disabledBefore) {
months = resetData.months;
days = resetData.days;
hours = resetData.hours;
} else {
if (leapYear || month != this.checkObj.month || month == 2) {
days = resetData.days;
}
}
if (months) this.range.months = months;
if (days) this.range.days = days;
if (hours) this.range.hours = hours;
obj = {
year,
month,
day,
hour
};
break;
case "minute":
full = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":00"}`;
result = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute}`;
if (this.disabledAfter) {
months = resetData.months;
days = resetData.days;
hours = resetData.hours;
minutes = resetData.minutes;
} else if (this.disabledBefore) {
months = resetData.months;
days = resetData.days;
hours = resetData.hours;
minutes = resetData.minutes;
} else {
if (leapYear || month != this.checkObj.month || month == 2) {
days = resetData.days;
}
}
if (months) this.range.months = months;
if (days) this.range.days = days;
if (hours) this.range.hours = hours;
if (minutes) this.range.minutes = minutes;
obj = {
year,
month,
day,
hour,
minute
};
break;
case "second":
result = full = `${year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":" +
second}`;
if (this.disabledAfter) {
months = resetData.months;
days = resetData.days;
hours = resetData.hours;
minutes = resetData.minutes;
//seconds=resetData.seconds;
} else {
if (leapYear || month != this.checkObj.month || month == 2) {
days = resetData.days;
}
}
if (months) this.range.months = months;
if (days) this.range.days = days;
if (hours) this.range.hours = hours;
if (minutes) this.range.minutes = minutes;
//if(seconds)this.range.seconds=seconds;
obj = {
year,
month,
day,
hour,
minute,
second
};
break;
}
this.checkObj = obj;
this.$emit("change", {
result: result,
value: full,
obj: obj
});
}
}
};
</script>
<style lang="scss">
@import "./w-picker.css";
</style>