index.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. // components/l-form/index.js
  2. import { areaList } from "../../utils/util";
  3. Component({
  4. attached () { this._init(); },
  5. pageLifetimes: { show () { this._init() } },
  6. properties: {
  7. formData: { type: Array, value: [] },
  8. },
  9. /**
  10. * 组件的初始数据
  11. */
  12. data: {
  13. areaList,//地址列表
  14. show: true,//控制地址
  15. columns: [],//选择器配置
  16. pickershow: true,//控制选择器
  17. areaindex: 0,//区分地址所在数据位置
  18. pickerindex: 0,//区分选择器所在数据位置
  19. arealist: [],//储存不同地址选项
  20. // 默认提交
  21. Success (data) {
  22. console.log(data)
  23. }
  24. },
  25. /**
  26. * 组件的方法列表
  27. */
  28. methods: {
  29. // 定义调用组件的js方法
  30. _init () {
  31. wx.lxd = wx.lxd || {}, wx.lxd.Form = e => {
  32. this.setData({
  33. // 页面传参
  34. ...e,
  35. })
  36. }
  37. },
  38. // 数据双向绑定
  39. input (e) {
  40. let { detail } = e, { item, index } = e.currentTarget.dataset, { formData } = this.data;
  41. item["value"] = detail;
  42. item["err"] = false;
  43. formData[index] = item;
  44. this.setData({ formData })
  45. },
  46. // 选择器
  47. pickerchoose (e) {
  48. let { index } = e.currentTarget.dataset, { formData } = this.data;
  49. this.setData({ pickershow: false, columns: formData[index]['columns'], pickerindex: index })
  50. },
  51. pickercancel () { this.setData({ pickershow: true }) },
  52. // 选择器
  53. pickerfunc (e, boolen) {
  54. let { value, index: indexd } = e.detail, { formData } = this.data, { index } = e.currentTarget.dataset;
  55. indexd = boolen ? '' : indexd;
  56. if (indexd == 0) {
  57. let { data, columns } = formData[index];
  58. columns[1]["values"] = Object.keys(data[value[0]]);
  59. columns[2]["values"] = data[value[0]][value[1]];
  60. }
  61. if (indexd == 1) {
  62. let { data, columns } = formData[index];
  63. columns[2]["values"] = data[value[0]][value[1]];
  64. formData[index]["columns"] = columns;
  65. }
  66. formData[index]["values"] = value;
  67. formData[index]["err"] = false;
  68. formData[index]["value"] = value.join(" ");
  69. this.setData({ formData, columns: formData[index]["columns"], pickershow: boolen ? true : false })
  70. },
  71. pickerconfirm (e) {
  72. this.pickerfunc(e, true)
  73. },
  74. // 挑选地址
  75. choose (e) {
  76. let { index } = e.currentTarget.dataset;
  77. this.setData({ show: false, areaindex: index })
  78. },
  79. // area完成
  80. areaconfirm (e) {
  81. this.areafunc(e);
  82. },
  83. cancel () {
  84. this.setData({ show: true })
  85. },
  86. // area改变
  87. areachange (e) { this.areafunc(e, true); },
  88. // area 共同执行
  89. areafunc (e, boolean) {
  90. let { values } = e.detail, addresss = '', { formData } = this.data, { index } = e.currentTarget.dataset;
  91. values.forEach(item => {
  92. !!item ? addresss += item.name + " " : ''
  93. })
  94. formData[index]["value"] = addresss;
  95. formData[index]["values"] = values;
  96. formData[index]["err"] = false;
  97. this.setData({
  98. formData,
  99. show: boolean ? false : true
  100. })
  101. },
  102. // 单选框
  103. onChangeradio (e) {
  104. let { detail } = e, { index } = e.currentTarget.dataset, { formData } = this.data;
  105. formData[index]["value"] = detail;
  106. this.setData({
  107. formData
  108. })
  109. },
  110. // 复选框
  111. onChange (e) {
  112. let { item, index } = e.currentTarget.dataset, { formData } = this.data, { detail } = e;
  113. item["value"] = detail;
  114. formData[index] = item;
  115. this.setData({
  116. formData
  117. })
  118. },
  119. // 保存
  120. submit () {
  121. if (!!this.data.submitlock) return false;
  122. let { formData } = this.data,
  123. lock = [], i = 0 //提交锁
  124. ;
  125. formData.forEach((item, index) => {
  126. if (item.require) {
  127. i++;
  128. let reg = /\S/;
  129. item.err = false;
  130. switch (item.rule) {
  131. case 'tel':
  132. reg = /^1[34578]\d{9}$/;
  133. reg.test(item.value) ? lock.push(true) : item.err = true;
  134. break;
  135. case 'picker':
  136. if (!item.value) {
  137. item.err = true;
  138. break;
  139. }
  140. lock.push(true);
  141. break;
  142. case 'address':
  143. if (!item.values || !item.values[2] || item.values[2].code == '') {
  144. item.err = true;
  145. item.errmsg = "请正确选择地址"
  146. break;
  147. }
  148. lock.push(true);
  149. break
  150. default:
  151. reg.test(item.value) ? lock.push(true) : item.err = true;
  152. break;
  153. }
  154. }
  155. })
  156. if (lock.length < i) {
  157. this.setData({
  158. formData
  159. })
  160. return false;
  161. }
  162. this.setData({
  163. submitlock: true
  164. })
  165. this.data.Success(formData);
  166. },
  167. }
  168. })