| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 | 
							- // Utils
 
- import { createNamespace } from '../../utils';
 
- import { isEmail } from '../../utils/validate/email';
 
- import { isNumeric } from '../../utils/validate/number'; // Components
 
- import Cell from '../../cell';
 
- import Field from '../../field';
 
- import SkuImgUploader from './SkuImgUploader';
 
- import SkuDateTimeField from './SkuDateTimeField';
 
- var _createNamespace = createNamespace('sku-messages'),
 
-     createComponent = _createNamespace[0],
 
-     bem = _createNamespace[1],
 
-     t = _createNamespace[2];
 
- export default createComponent({
 
-   props: {
 
-     messageConfig: Object,
 
-     goodsId: [Number, String],
 
-     messages: {
 
-       type: Array,
 
-       default: function _default() {
 
-         return [];
 
-       }
 
-     }
 
-   },
 
-   data: function data() {
 
-     return {
 
-       messageValues: this.resetMessageValues(this.messages)
 
-     };
 
-   },
 
-   watch: {
 
-     messages: function messages(val) {
 
-       this.messageValues = this.resetMessageValues(val);
 
-     }
 
-   },
 
-   methods: {
 
-     resetMessageValues: function resetMessageValues(messages) {
 
-       var messageConfig = this.messageConfig;
 
-       var _messageConfig$initia = messageConfig.initialMessages,
 
-           initialMessages = _messageConfig$initia === void 0 ? {} : _messageConfig$initia;
 
-       return (messages || []).map(function (message) {
 
-         return {
 
-           value: initialMessages[message.name] || ''
 
-         };
 
-       });
 
-     },
 
-     getType: function getType(message) {
 
-       if (+message.multiple === 1) {
 
-         return 'textarea';
 
-       }
 
-       if (message.type === 'id_no') {
 
-         return 'text';
 
-       }
 
-       return message.datetime > 0 ? 'datetime' : message.type;
 
-     },
 
-     getMessages: function getMessages() {
 
-       var messages = {};
 
-       this.messageValues.forEach(function (item, index) {
 
-         messages["message_" + index] = item.value;
 
-       });
 
-       return messages;
 
-     },
 
-     getCartMessages: function getCartMessages() {
 
-       var _this = this;
 
-       var messages = {};
 
-       this.messageValues.forEach(function (item, index) {
 
-         var message = _this.messages[index];
 
-         messages[message.name] = item.value;
 
-       });
 
-       return messages;
 
-     },
 
-     getPlaceholder: function getPlaceholder(message) {
 
-       var type = +message.multiple === 1 ? 'textarea' : message.type;
 
-       var map = this.messageConfig.placeholderMap || {};
 
-       return message.placeholder || map[type] || t("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 (String(message.required) === '1') {
 
-             var textType = t(message.type === 'image' ? 'upload' : 'fill');
 
-             return textType + message.name;
 
-           }
 
-         } else {
 
-           if (message.type === 'tel' && !isNumeric(value)) {
 
-             return t('invalid.tel');
 
-           }
 
-           if (message.type === 'mobile' && !/^\d{6,20}$/.test(value)) {
 
-             return t('invalid.mobile');
 
-           }
 
-           if (message.type === 'email' && !isEmail(value)) {
 
-             return t('invalid.email');
 
-           }
 
-           if (message.type === 'id_no' && (value.length < 15 || value.length > 18)) {
 
-             return t('invalid.id_no');
 
-           }
 
-         }
 
-       }
 
-     },
 
-     /**
 
-      * The phone number copied from IOS mobile phone address book
 
-      * will add spaces and invisible Unicode characters
 
-      * which cannot pass the /^\d+$/ verification
 
-      * so keep numbers and dots
 
-      */
 
-     getFormatter: function getFormatter(message) {
 
-       return function formatter(value) {
 
-         if (message.type === 'mobile' || message.type === 'tel') {
 
-           return value.replace(/[^\d.]/g, '');
 
-         }
 
-         return value;
 
-       };
 
-     },
 
-     getExtraDesc: function getExtraDesc(message) {
 
-       var h = this.$createElement;
 
-       var extraDesc = message.extraDesc;
 
-       if (extraDesc) {
 
-         return h("div", {
 
-           "class": bem('extra-message')
 
-         }, [extraDesc]);
 
-       }
 
-     },
 
-     genMessage: function genMessage(message, index) {
 
-       var _this2 = this;
 
-       var h = this.$createElement;
 
-       if (message.type === 'image') {
 
-         return h(Cell, {
 
-           "key": this.goodsId + "-" + index,
 
-           "attrs": {
 
-             "title": message.name,
 
-             "required": String(message.required) === '1',
 
-             "valueClass": bem('image-cell-value')
 
-           },
 
-           "class": bem('image-cell')
 
-         }, [h(SkuImgUploader, {
 
-           "attrs": {
 
-             "maxSize": this.messageConfig.uploadMaxSize,
 
-             "uploadImg": this.messageConfig.uploadImg,
 
-             "customUpload": this.messageConfig.customUpload
 
-           },
 
-           "model": {
 
-             value: _this2.messageValues[index].value,
 
-             callback: function callback($$v) {
 
-               _this2.$set(_this2.messageValues[index], "value", $$v);
 
-             }
 
-           }
 
-         }), h("div", {
 
-           "class": bem('image-cell-label')
 
-         }, [t('imageLabel')])]);
 
-       } // 时间和日期使用的vant选择器
 
-       var isDateOrTime = ['date', 'time'].indexOf(message.type) > -1;
 
-       if (isDateOrTime) {
 
-         return h(SkuDateTimeField, {
 
-           "attrs": {
 
-             "label": message.name,
 
-             "required": String(message.required) === '1',
 
-             "placeholder": this.getPlaceholder(message),
 
-             "type": this.getType(message)
 
-           },
 
-           "key": this.goodsId + "-" + index,
 
-           "model": {
 
-             value: _this2.messageValues[index].value,
 
-             callback: function callback($$v) {
 
-               _this2.$set(_this2.messageValues[index], "value", $$v);
 
-             }
 
-           }
 
-         });
 
-       }
 
-       return h("div", {
 
-         "class": bem('cell-block')
 
-       }, [h(Field, {
 
-         "attrs": {
 
-           "maxlength": "200",
 
-           "center": !message.multiple,
 
-           "label": message.name,
 
-           "required": String(message.required) === '1',
 
-           "placeholder": this.getPlaceholder(message),
 
-           "type": this.getType(message),
 
-           "formatter": this.getFormatter(message),
 
-           "border": false
 
-         },
 
-         "key": this.goodsId + "-" + index,
 
-         "model": {
 
-           value: _this2.messageValues[index].value,
 
-           callback: function callback($$v) {
 
-             _this2.$set(_this2.messageValues[index], "value", $$v);
 
-           }
 
-         }
 
-       }), this.getExtraDesc(message)]);
 
-     }
 
-   },
 
-   render: function render() {
 
-     var h = arguments[0];
 
-     return h("div", {
 
-       "class": bem()
 
-     }, [this.messages.map(this.genMessage)]);
 
-   }
 
- });
 
 
  |