第一次提交
This commit is contained in:
172
component/picker/picker.js
Normal file
172
component/picker/picker.js
Normal file
@@ -0,0 +1,172 @@
|
||||
const GetDate = require('./GetDate.js');
|
||||
|
||||
const error = (msg) => {
|
||||
console.error(msg);
|
||||
};
|
||||
|
||||
Component({
|
||||
externalClasses: ['rui-class'],
|
||||
|
||||
options: {
|
||||
multipleSlots: true
|
||||
},
|
||||
lifetimes: {
|
||||
attached() {
|
||||
switch (this.data.fields){
|
||||
case 'year':
|
||||
if (this.data.value.length !== 4) {error('时间粒度和时间格式不一致');this.setData({ disabled: true });return false;}
|
||||
if (this.data.start.length !== 4) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 4) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
case 'month':
|
||||
if (this.data.value.length !== 7) { error('时间粒度和时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.start.length !== 7) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 7) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
case 'day':
|
||||
if (this.data.value.length !== 10) { error('时间粒度和时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.start.length !== 10) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 10) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
case 'hour':
|
||||
if (this.data.value.length !== 13) { error('时间粒度和时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.start.length !== 13) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 13) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
case 'minute':
|
||||
if (this.data.value.length !== 16) { error('时间粒度和时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.start.length !== 16) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 16) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
case 'second':
|
||||
if (this.data.value.length !== 19) { error('时间粒度和时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.start.length !== 19) { error('时间粒度和开始时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
if (this.data.end.length !== 19) { error('时间粒度和结束时间格式不一致'); this.setData({ disabled: true }); return false;}
|
||||
break;
|
||||
default:
|
||||
error('时间粒度不存在')
|
||||
break;
|
||||
}
|
||||
let values = this.data.value.split(' ');
|
||||
let targets = this.data.fields === 'year' || this.data.fields === 'month' || this.data.fields === 'day' ? [...(values[0].split('-'))] : [...(values[0].split('-')), ...(values[1].split(':'))];
|
||||
|
||||
if (GetDate.getTimes(this.data.value) < GetDate.getTimes(this.data.start)){
|
||||
error('默认时间不能小于开始时间')
|
||||
this.setData({ disabled: true })
|
||||
return false;
|
||||
}
|
||||
if (GetDate.getTimes(this.data.value) > GetDate.getTimes(this.data.end)) {
|
||||
error('默认时间不能大于开始时间')
|
||||
this.setData({ disabled: true })
|
||||
return false;
|
||||
}
|
||||
let times = GetDate.getDateTimes({
|
||||
start: this.data.start.substring(0, 4),
|
||||
end: this.data.end.substring(0, 4),
|
||||
curyear: this.data.value.substring(0, 4),
|
||||
curmonth: this.data.value.substring(5, 7),
|
||||
fields: this.data.fields,
|
||||
})
|
||||
let timesIndex = GetDate.getTimeIndex(times, targets);
|
||||
let timesString = [];
|
||||
timesIndex.forEach(o => timesString.push(o));
|
||||
|
||||
this.setData({
|
||||
times: times,
|
||||
timesIndex: timesIndex,
|
||||
timesString: timesString
|
||||
})
|
||||
}
|
||||
},
|
||||
properties: {
|
||||
start: {
|
||||
type: String,
|
||||
value: '1900-00-00 00:00:00'
|
||||
},
|
||||
end: {
|
||||
type: String,
|
||||
value: '2500-12-30 23:59:59'
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
value: '2019-03-15 10:45:00'
|
||||
},
|
||||
fields: {
|
||||
type: String,
|
||||
value: 'second'
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
value: false
|
||||
}
|
||||
},
|
||||
|
||||
data: {
|
||||
times:[['2019','2020'],['01','02']],
|
||||
timesIndex: [1,1],
|
||||
timesString: null
|
||||
},
|
||||
|
||||
methods: {
|
||||
changeDate(e){
|
||||
let values = e.detail.value;
|
||||
let times = this.data.times;
|
||||
let curarr = [];
|
||||
for (let i = 0, len = values.length; i < len; i++) {
|
||||
curarr.push(times[i][values[i]])
|
||||
}
|
||||
let str = GetDate.format(curarr);
|
||||
this.setData({ value: str});
|
||||
this.triggerEvent('changedatepicker', { value: str }, {});
|
||||
},
|
||||
columnchangeDate(e){
|
||||
if ((this.data.fields === 'year' || this.data.fields === 'month')){
|
||||
let timesIndex = this.data.timesIndex;
|
||||
timesIndex[e.detail.column] = e.detail.value;
|
||||
this.setData({ timesIndex: timesIndex });
|
||||
return false;
|
||||
}
|
||||
// 先对timesIndex做出改变
|
||||
if ((e.detail.column === 0 || e.detail.column === 1 || e.detail.column === 2) && (this.data.fields !== 'year' || this.data.fields !== 'month')) {
|
||||
let times = this.data.times;
|
||||
let timesIndex = this.data.timesIndex;
|
||||
timesIndex[e.detail.column] = e.detail.value;
|
||||
let days = GetDate.getMonthDay(times[0][timesIndex[0]], times[1][timesIndex[1]]);
|
||||
if (timesIndex[2] >= days.length) {
|
||||
timesIndex[2] = days.length - 1;
|
||||
} else {
|
||||
timesIndex[e.detail.column] = e.detail.value;
|
||||
}
|
||||
this.setData({ timesIndex: timesIndex });
|
||||
} else {
|
||||
let timesIndex = this.data.timesIndex;
|
||||
timesIndex[e.detail.column] = e.detail.value;
|
||||
this.setData({ timesIndex: timesIndex });
|
||||
}
|
||||
// 判断当前选择是否小于开始时间或者大于结束时间
|
||||
let values = this.data.timesIndex;
|
||||
let times = this.data.times;
|
||||
let curarr = [];
|
||||
for (let i = 0, len = values.length; i < len; i++) {
|
||||
curarr.push(times[i][values[i]])
|
||||
}
|
||||
let str = GetDate.format(curarr);
|
||||
|
||||
if (GetDate.getTimes(str) < GetDate.getTimes(this.data.start)) {
|
||||
let timesString = this.data.timesString;
|
||||
let timesIndex = [];
|
||||
timesString.forEach(o => timesIndex.push(o));
|
||||
this.setData({ timesIndex: timesIndex})
|
||||
}
|
||||
if (GetDate.getTimes(str) > GetDate.getTimes(this.data.end)) {
|
||||
let timesString = this.data.timesString;
|
||||
let timesIndex = [];
|
||||
timesString.forEach(o => timesIndex.push(o));
|
||||
this.setData({ timesIndex: timesIndex })
|
||||
}
|
||||
},
|
||||
cancelDate(e){
|
||||
this.triggerEvent('canceldatepicker', { value: e }, {});
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user