lulouis-vant
Version:
Lightweight Mobile UI Components built on Vue
179 lines (163 loc) • 5.11 kB
JavaScript
import create from '../../utils/create';
import Field from '../../field';
import validateEmail from '../../utils/validate/email';
import validateNumber from '../../utils/validate/number';
import SkuImgUploader from './SkuImgUploader';
var PLACEHOLDER = {
id_no: '输入身份证号码',
text: '输入文本',
tel: '输入数字',
email: '输入邮箱',
date: '点击选择日期',
time: '点击选择时间',
textarea: '点击填写段落文本',
mobile: '输入手机号码'
};
export default create({
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('cell-group', {
class: _vm.b()
}, [_vm._l(_vm.messages, function (message, index) {
return [message.type === 'image' ? _c('cell', {
key: _vm.goodsId + "-" + index,
class: _vm.b('image-cell'),
attrs: {
"label": "仅限一张",
"required": message.required == '1',
"title": message.name
}
}, [_c('sku-img-uploader', {
attrs: {
"upload-img": _vm.messageConfig.uploadImg,
"max-size": _vm.messageConfig.uploadMaxSize
},
model: {
value: _vm.messageValues[index].value,
callback: function callback($$v) {
_vm.$set(_vm.messageValues[index], "value", $$v);
},
expression: "messageValues[index].value"
}
})], 1) : _c('field', {
key: _vm.goodsId + "-" + index,
attrs: {
"maxlength": "200",
"required": message.required == '1',
"label": message.name,
"placeholder": _vm.getPlaceholder(message),
"type": _vm.getType(message)
},
model: {
value: _vm.messageValues[index].value,
callback: function callback($$v) {
_vm.$set(_vm.messageValues[index], "value", $$v);
},
expression: "messageValues[index].value"
}
})];
})], 2);
},
name: 'sku-messages',
components: {
SkuImgUploader: SkuImgUploader,
Field: Field
},
props: {
messages: Array,
messageConfig: Object,
goodsId: [Number, String]
},
data: function data() {
return {
messageValues: this.resetMessageValues(this.messages)
};
},
watch: {
messages: function messages(val) {
this.messageValues = this.resetMessageValues(val);
}
},
computed: {
messagePlaceholderMap: function messagePlaceholderMap() {
return this.messageConfig.placeholderMap || {};
}
},
methods: {
resetMessageValues: function resetMessageValues(messages) {
return (messages || []).map(function () {
return {
value: ''
};
});
},
getType: function getType(message) {
if (+message.multiple === 1) {
return 'textarea';
}
if (message.type === 'id_no') {
return 'text';
}
return message.datetime > 0 ? 'datetime-local' : message.type;
},
getMessages: function getMessages() {
var _this = this;
var messages = {};
this.messageValues.forEach(function (item, index) {
var value = item.value;
if (_this.messages[index].datetime > 0) {
value = value.replace(/T/g, ' ');
}
messages["message_" + index] = value;
});
return messages;
},
getCartMessages: function getCartMessages() {
var _this2 = this;
var messages = {};
this.messageValues.forEach(function (item, index) {
var value = item.value;
var message = _this2.messages[index];
if (message.datetime > 0) {
value = value.replace(/T/g, ' ');
}
messages[message.name] = value;
});
return messages;
},
getPlaceholder: function getPlaceholder(message) {
var type = +message.multiple === 1 ? 'textarea' : message.type;
return this.messagePlaceholderMap[type] || PLACEHOLDER[type];
},
validateMessages: function validateMessages() {
var values = this.messageValues;
for (var i = 0; i < values.length; i++) {
var value = values[i].value;
var message = this.messages[i];
if (value === '') {
// 必填字段的校验
if (message.required == '1') {
// eslint-disable-line
var textType = message.type === 'image' ? '请上传' : '请填写';
return textType + message.name;
}
} else {
if (message.type === 'tel' && !validateNumber(value)) {
return '请填写正确的数字格式留言';
}
if (message.type === 'mobile' && !/^\d{6,20}$/.test(value)) {
return '手机号长度为6-20位数字';
}
if (message.type === 'email' && !validateEmail(value)) {
return '请填写正确的邮箱';
}
if (message.type === 'id_no' && (value.length < 15 || value.length > 18)) {
return '请填写正确的身份证号码';
}
}
}
}
}
});