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

11 months ago
<template>
11 months ago
<view class="w-picker-view">
<view
11 months ago
style="
11 months ago
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
"
11 months ago
>
11 months ago
<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>
11 months ago
</view>
11 months ago
<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>
11 months ago
</template>
<script>
11 months ago
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
});
}
}
};
11 months ago
</script>
<style lang="scss">
11 months ago
@import "./w-picker.css";
11 months ago
</style>