mirror of
https://gitee.com/vant-contrib/vant-weapp.git
synced 2025-04-06 03:58:05 +08:00
216 lines
5.2 KiB
JavaScript
216 lines
5.2 KiB
JavaScript
'use strict';
|
|
|
|
var DatePicker = require('./date-picker');
|
|
|
|
var _require = require('./utils'),
|
|
genNumber = _require.genNumber,
|
|
moment = _require.moment;
|
|
|
|
Component({
|
|
properties: {
|
|
placeholder: {
|
|
type: String,
|
|
value: '请选择时间'
|
|
},
|
|
format: {
|
|
type: String,
|
|
value: 'YYYY-MM-DD HH:mm:ss'
|
|
},
|
|
pickerView: {
|
|
type: Boolean
|
|
},
|
|
date: {
|
|
type: String,
|
|
observer: function observer(value) {
|
|
if (value === {}.toString()) {
|
|
throw new Error('参数必须是一个字符串');
|
|
}
|
|
if (/^[0-9]+$/.test(value)) {
|
|
value = +value;
|
|
}
|
|
!this._inited && this._init();
|
|
this.updateDate(value);
|
|
}
|
|
},
|
|
notUse: {
|
|
type: Array
|
|
}
|
|
},
|
|
externalClasses: ['placeholder-class'],
|
|
data: {
|
|
transPos: [0, 0, 0, 0, 0, 0]
|
|
},
|
|
attached: function attached() {
|
|
!this._inited && this._init();
|
|
},
|
|
|
|
|
|
methods: {
|
|
_init: function _init() {
|
|
var _this = this;
|
|
|
|
this._inited = true;
|
|
this.use = {};
|
|
|
|
['years', 'months', 'days', 'hours', 'minutes', 'seconds'].forEach(function (item) {
|
|
if ((_this.data.notUse || []).indexOf(item) === -1) {
|
|
_this.use[item] = true;
|
|
}
|
|
});
|
|
|
|
this.picker = new DatePicker(this.data.date);
|
|
|
|
var _picker$getData = this.picker.getData(this.data.date),
|
|
dataList = _picker$getData.dataList,
|
|
selected = _picker$getData.selected;
|
|
|
|
// 鬼他么知道为什么 dataList, selected 不能一起 setData
|
|
|
|
|
|
this.setData({
|
|
use: this.use,
|
|
dataList: dataList
|
|
}, function () {
|
|
_this.setData({
|
|
selected: selected
|
|
});
|
|
});
|
|
|
|
this._indexs = selected;
|
|
},
|
|
updatePicker: function updatePicker() {
|
|
var updateData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
|
|
var _updateData = {};
|
|
|
|
for (var _iterator = updateData, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
var _ref2;
|
|
|
|
if (_isArray) {
|
|
if (_i >= _iterator.length) break;
|
|
_ref2 = _iterator[_i++];
|
|
} else {
|
|
_i = _iterator.next();
|
|
if (_i.done) break;
|
|
_ref2 = _i.value;
|
|
}
|
|
|
|
var _ref = _ref2;
|
|
var col = _ref.col,
|
|
index = _ref.index,
|
|
data = _ref.data;
|
|
|
|
if (~index && this._indexs[col] !== index || col === 0) {
|
|
_updateData['selected[' + col + ']'] = index; // 更新索引
|
|
this._indexs[col] = index;
|
|
}
|
|
|
|
if (data) {
|
|
_updateData['dataList[' + col + ']'] = data;
|
|
}
|
|
}
|
|
|
|
this.setData(_updateData);
|
|
},
|
|
updateDate: function updateDate(date) {
|
|
var _this2 = this;
|
|
|
|
var _picker$getData2 = this.picker.getData(date),
|
|
dataList = _picker$getData2.dataList,
|
|
selected = _picker$getData2.selected;
|
|
|
|
this._indexs = selected;
|
|
|
|
// 好像必须要等到 datalist 完成
|
|
this.setData({ dataList: dataList }, function () {
|
|
_this2.setData({
|
|
selected: selected,
|
|
text: _this2.getFormatStr()
|
|
});
|
|
});
|
|
},
|
|
getFormatStr: function getFormatStr() {
|
|
var _this3 = this;
|
|
|
|
var date = new Date();
|
|
['FullYear', 'Month', 'Date', 'Hours', 'Minutes', 'Seconds'].forEach(function (key, index) {
|
|
var value = _this3.data.dataList[index][_this3._indexs[index]];
|
|
if (key === 'Month') {
|
|
value = +_this3.data.dataList[index][_this3._indexs[index]] - 1;
|
|
}
|
|
date['set' + key](+value);
|
|
});
|
|
|
|
return moment(date, this.data.format);
|
|
},
|
|
showPicker: function showPicker() {
|
|
this.setData({
|
|
show: true
|
|
});
|
|
},
|
|
hidePicker: function hidePicker(e) {
|
|
var action = e.currentTarget.dataset.action;
|
|
|
|
|
|
this.setData({
|
|
show: false
|
|
});
|
|
|
|
if (action === 'cancel') {
|
|
this.cancel({
|
|
detail: {}
|
|
});
|
|
} else {
|
|
this.change({
|
|
detail: {
|
|
value: this._indexs
|
|
}
|
|
});
|
|
}
|
|
},
|
|
columnchange: function columnchange(e) {
|
|
var _e$detail = e.detail,
|
|
column = _e$detail.column,
|
|
value = _e$detail.value;
|
|
|
|
var updateData = this.picker.update(column, value);
|
|
this.updatePicker(updateData);
|
|
},
|
|
change: function change(e) {
|
|
var value = e.detail.value;
|
|
|
|
|
|
var data = this.data.dataList.map(function (item, index) {
|
|
return +item[value[index]];
|
|
});
|
|
|
|
var day = data.slice(0, 3);
|
|
var time = data.slice(3, 6);
|
|
var date = new Date(day.join('/') + ' ' + time.join(':'));
|
|
|
|
this.triggerEvent('change', {
|
|
value: data,
|
|
date: date
|
|
});
|
|
|
|
// 手动触发 columnchange
|
|
for (var index = 0; index < value.length; index++) {
|
|
if (this._indexs[index] !== value[index]) {
|
|
this.columnchange({
|
|
detail: {
|
|
column: index,
|
|
value: value[index]
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
this.setData({
|
|
text: this.getFormatStr()
|
|
});
|
|
},
|
|
cancel: function cancel(e) {
|
|
this.triggerEvent('cancel', e.detail);
|
|
}
|
|
}
|
|
}); |