SkuMessages.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { use } from '../../utils';
  2. import Cell from '../../cell';
  3. import CellGroup from '../../cell-group';
  4. import Field from '../../field';
  5. import { isEmail } from '../../utils/validate/email';
  6. import { isNumber } from '../../utils/validate/number';
  7. import SkuImgUploader from './SkuImgUploader';
  8. var _use = use('sku-messages'),
  9. sfc = _use[0],
  10. bem = _use[1];
  11. var PLACEHOLDER = {
  12. id_no: '输入身份证号码',
  13. text: '输入文本',
  14. tel: '输入数字',
  15. email: '输入邮箱',
  16. date: '点击选择日期',
  17. time: '点击选择时间',
  18. textarea: '点击填写段落文本',
  19. mobile: '输入手机号码'
  20. };
  21. export default sfc({
  22. props: {
  23. messages: Array,
  24. messageConfig: Object,
  25. goodsId: [Number, String]
  26. },
  27. data: function data() {
  28. return {
  29. messageValues: this.resetMessageValues(this.messages)
  30. };
  31. },
  32. watch: {
  33. messages: function messages(val) {
  34. this.messageValues = this.resetMessageValues(val);
  35. }
  36. },
  37. methods: {
  38. resetMessageValues: function resetMessageValues(messages) {
  39. return (messages || []).map(function () {
  40. return {
  41. value: ''
  42. };
  43. });
  44. },
  45. getType: function getType(message) {
  46. if (+message.multiple === 1) {
  47. return 'textarea';
  48. }
  49. if (message.type === 'id_no') {
  50. return 'text';
  51. }
  52. return message.datetime > 0 ? 'datetime-local' : message.type;
  53. },
  54. getMessages: function getMessages() {
  55. var _this = this;
  56. var messages = {};
  57. this.messageValues.forEach(function (item, index) {
  58. var value = item.value;
  59. if (_this.messages[index].datetime > 0) {
  60. value = value.replace(/T/g, ' ');
  61. }
  62. messages["message_" + index] = value;
  63. });
  64. return messages;
  65. },
  66. getCartMessages: function getCartMessages() {
  67. var _this2 = this;
  68. var messages = {};
  69. this.messageValues.forEach(function (item, index) {
  70. var value = item.value;
  71. var message = _this2.messages[index];
  72. if (message.datetime > 0) {
  73. value = value.replace(/T/g, ' ');
  74. }
  75. messages[message.name] = value;
  76. });
  77. return messages;
  78. },
  79. getPlaceholder: function getPlaceholder(message) {
  80. var type = +message.multiple === 1 ? 'textarea' : message.type;
  81. var map = this.messageConfig.placeholderMap || {};
  82. return map[type] || PLACEHOLDER[type];
  83. },
  84. validateMessages: function validateMessages() {
  85. var values = this.messageValues;
  86. for (var i = 0; i < values.length; i++) {
  87. var value = values[i].value;
  88. var message = this.messages[i];
  89. if (value === '') {
  90. // 必填字段的校验
  91. if (String(message.required) === '1') {
  92. // eslint-disable-line
  93. var textType = message.type === 'image' ? '请上传' : '请填写';
  94. return textType + message.name;
  95. }
  96. } else {
  97. if (message.type === 'tel' && !isNumber(value)) {
  98. return '请填写正确的数字格式留言';
  99. }
  100. if (message.type === 'mobile' && !/^\d{6,20}$/.test(value)) {
  101. return '手机号长度为6-20位数字';
  102. }
  103. if (message.type === 'email' && !isEmail(value)) {
  104. return '请填写正确的邮箱';
  105. }
  106. if (message.type === 'id_no' && (value.length < 15 || value.length > 18)) {
  107. return '请填写正确的身份证号码';
  108. }
  109. }
  110. }
  111. }
  112. },
  113. render: function render(h) {
  114. var _this3 = this;
  115. return h(CellGroup, {
  116. "class": bem()
  117. }, [this.messages.map(function (message, index) {
  118. return message.type === 'image' ? h(Cell, {
  119. "class": bem('image-cell'),
  120. "attrs": {
  121. "label": "仅限一张",
  122. "title": message.name,
  123. "required": String(message.required) === '1'
  124. },
  125. "key": _this3.goodsId + "-" + index
  126. }, [h(SkuImgUploader, {
  127. "attrs": {
  128. "uploadImg": _this3.messageConfig.uploadImg,
  129. "maxSize": _this3.messageConfig.uploadMaxSize
  130. },
  131. "model": {
  132. value: _this3.messageValues[index].value,
  133. callback: function callback($$v) {
  134. _this3.messageValues[index].value = $$v;
  135. }
  136. }
  137. })]) : h(Field, {
  138. "attrs": {
  139. "maxlength": "200",
  140. "label": message.name,
  141. "required": String(message.required) === '1',
  142. "placeholder": _this3.getPlaceholder(message),
  143. "type": _this3.getType(message)
  144. },
  145. "key": _this3.goodsId + "-" + index,
  146. "model": {
  147. value: _this3.messageValues[index].value,
  148. callback: function callback($$v) {
  149. _this3.messageValues[index].value = $$v;
  150. }
  151. }
  152. });
  153. })]);
  154. }
  155. });