diff --git a/src/sku/components/SkuDateTimeFiled.js b/src/sku/components/SkuDateTimeFiled.js
new file mode 100644
index 000000000..c105b7edd
--- /dev/null
+++ b/src/sku/components/SkuDateTimeFiled.js
@@ -0,0 +1,90 @@
+// Utils
+import { createNamespace } from '../../utils';
+import { string2Date, date2String } from '../utils/time-helper';
+
+// Components
+import Popup from '../../popup';
+import DateTimePicker from '../../datetime-picker';
+import Field from '../../field';
+
+const [createComponent, bem, t] = createNamespace('sku-datetime-filed');
+
+export default createComponent({
+ props: {
+ value: String,
+ label: String,
+ required: Boolean,
+ placeholder: String,
+ type: {
+ type: String,
+ default: 'date',
+ },
+ },
+
+ data() {
+ return {
+ showDatePicker: false,
+ currentDate: this.type === 'time' ? '' : new Date(),
+ };
+ },
+
+ watch: {
+ value(val) {
+ switch (this.type) {
+ case 'time':
+ this.currentDate = val;
+ break;
+ case 'date':
+ case 'datetime':
+ this.currentDate = string2Date(val) || new Date();
+ break;
+ }
+ },
+ },
+
+ methods: {
+ onClick() {
+ this.showDatePicker = true;
+ },
+ onConfirm(val) {
+ let data = val;
+ if (this.type !== 'time') {
+ data = date2String(val, this.type);
+ }
+ this.$emit('input', data);
+ this.showDatePicker = false;
+ },
+ onCancel() {
+ this.showDatePicker = false;
+ },
+ },
+
+ render() {
+ return (
+
+
+
+
+
+ );
+ },
+});
diff --git a/src/sku/components/SkuMessages.js b/src/sku/components/SkuMessages.js
index 854e046a3..d24293e0f 100644
--- a/src/sku/components/SkuMessages.js
+++ b/src/sku/components/SkuMessages.js
@@ -7,6 +7,7 @@ import { isNumeric } from '../../utils/validate/number';
import Cell from '../../cell';
import Field from '../../field';
import SkuImgUploader from './SkuImgUploader';
+import SkuDateTimeFiled from './SkuDateTimeFiled';
const [createComponent, bem, t] = createNamespace('sku-messages');
@@ -48,7 +49,7 @@ export default createComponent({
if (message.type === 'id_no') {
return 'text';
}
- return message.datetime > 0 ? 'datetime-local' : message.type;
+ return message.datetime > 0 ? 'datetime' : message.type;
},
getMessages() {
@@ -125,7 +126,6 @@ export default createComponent({
|
+
{t('imageLabel')}
);
}
+ // 时间和日期使用的vant选择器
+ const isDateOrTime = ['date', 'time'].indexOf(message.type) > -1;
+ if (isDateOrTime) {
+ return (
+
+ );
+ }
+
return (
{
wrapper.find('.van-button--danger').trigger('click');
expect(wrapper.emitted('buy-clicked').length).toEqual(1);
});
+
+test('string2Date', () => {
+ expect(date2String(string2Date(''))).toEqual('');
+ expect(date2String(string2Date('2020-07-01'))).toEqual('2020-07-01');
+ expect(date2String(string2Date('2020-07-01 22:44'), 'datetime')).toEqual(
+ '2020-07-01 22:44'
+ );
+ expect(date2String(string2Date('2020-12-31 23:59'), 'datetime')).toEqual(
+ '2020-12-31 23:59'
+ );
+});
diff --git a/src/sku/utils/time-helper.js b/src/sku/utils/time-helper.js
new file mode 100644
index 000000000..0dc1d0fee
--- /dev/null
+++ b/src/sku/utils/time-helper.js
@@ -0,0 +1,30 @@
+function length2(int) {
+ return int > 9 ? `${int}` : `0${int}`;
+}
+
+// 字符串转 Date
+// 只处理 YYYY-MM-DD 或者 YYYY-MM-DD HH:MM 格式
+export function string2Date(timeString) {
+ if (!timeString) {
+ return null;
+ }
+ return new Date(timeString.replace(/-/g, '/'));
+}
+
+// Date 转字符串
+// type: date or datetime
+export function date2String(date, type = 'date') {
+ if (!date) {
+ return '';
+ }
+ const year = date.getFullYear();
+ const month = date.getMonth() + 1;
+ const day = date.getDate();
+ let timeString = `${year}-${length2(month)}-${length2(day)}`;
+ if (type === 'datetime') {
+ const hours = date.getHours();
+ const minute = date.getMinutes();
+ timeString += ` ${length2(hours)}:${length2(minute)}`;
+ }
+ return timeString;
+}