index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. const verify = require('../../utils/deleteMark');
  2. Component({
  3. externalClasses: [],
  4. properties: {
  5. form: Array,
  6. showAll: {
  7. type: Boolean,
  8. value: true
  9. }, //不显示必填项
  10. onConfirm: Function
  11. },
  12. options: {
  13. multipleSlots: true //允许使用多个slot
  14. },
  15. methods: {
  16. /* 改变值 */
  17. inputChange(e) {
  18. let item = e.target.dataset.item,
  19. index = this.data.form.findIndex(v => v.valueName === item.valueName),
  20. value = e.detail;
  21. //开始校验 //校验规则 不填:不校验 "base":默认校验 "phone":手机号 "mail":邮箱 "正则表达式":以自定义内容为校验标准
  22. if (item.checking) {
  23. let reg = item.checking;
  24. switch (item.checking) {
  25. case 'base':
  26. value = verify.queryStr(value);
  27. break;
  28. case 'phone':
  29. reg = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/;
  30. this.setData({
  31. [`form[${index}].errMsg`]: !reg.test(value) ? '请输入正确11位手机号码' : ''
  32. });
  33. break;
  34. case 'mail':
  35. reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
  36. this.setData({
  37. [`form[${index}].errMsg`]: !reg.test(value) ? '请输入正确的邮箱格式' : ''
  38. });
  39. break;
  40. default:
  41. reg = new RegExp(reg);
  42. this.setData({
  43. [`form[${index}].errMsg`]: !reg.test(value) ? '输入文本不符合条件!' : ''
  44. });
  45. break;
  46. };
  47. };
  48. this.setData({
  49. [`form[${index}].value`]: value,
  50. [`form[${index}].error`]: false,
  51. });
  52. if (!item.required && value == '') this.setData({
  53. [`form[${index}].errMsg`]: "",
  54. });
  55. this.confirm();
  56. },
  57. /* 日期,时间 选择器 */
  58. bindDateChange(e) {
  59. let item = e.target.dataset.item,
  60. index = this.data.form.findIndex(v => v.valueName === item.valueName),
  61. value = e.detail.value;
  62. this.setData({
  63. [`form[${index}].value`]: value,
  64. [`form[${index}].error`]: false,
  65. });
  66. this.confirm();
  67. },
  68. /* 省市县 */
  69. bindRegionChange(e) {
  70. let item = e.currentTarget.dataset.item,
  71. index = this.data.form.findIndex(v => v.valueName === item.valueName),
  72. value = e.detail.value;
  73. this.setData({
  74. [`form[${index}].value`]: value,
  75. [`form[${index}].error`]: false,
  76. });
  77. this.confirm();
  78. },
  79. /* 是否完成必填项 */
  80. confirm() {
  81. this.triggerEvent("onConfirm", this.data.form.some(v => v.required && v.value == ''))
  82. },
  83. /* 性别 */
  84. sexChange(e){
  85. let item = e.currentTarget.dataset.item,
  86. index = this.data.form.findIndex(v => v.valueName === item.valueName);
  87. this.setData({
  88. [`form[${index}].value`]: e.detail,
  89. [`form[${index}].error`]: false,
  90. });
  91. this.confirm();
  92. },
  93. /* 提交 */
  94. submit() {
  95. let obj = {},
  96. isPass = false;
  97. this.data.form.forEach((v, i) => {
  98. obj[v.valueName] = v.value;
  99. if (v.errMsg != '') {
  100. this.setData({
  101. [`form[${i}].error`]: true
  102. });
  103. isPass = true;
  104. }
  105. });
  106. if (isPass) {
  107. wx.showToast({
  108. title: '请检查表单内容',
  109. icon: "none"
  110. })
  111. } else {
  112. return obj;
  113. }
  114. },
  115. }
  116. })