index.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import {
  2. stateConfig,
  3. stateFormData
  4. } from "../../../utils/orderAddOptions";
  5. import { httpAdd } from "../../../api/serverOrder";
  6. import { valMobile } from "../../../utils/validate"
  7. import {
  8. createStoreBindings
  9. } from 'mobx-miniprogram-bindings'
  10. import {
  11. store
  12. } from "../../../store/index";
  13. Page({
  14. data: {
  15. loading: false,
  16. popupOptions: [],
  17. popupType: "",
  18. popupKey: "",
  19. popupTitle: "",
  20. popupApi: "",
  21. show: false,
  22. config: stateConfig,
  23. formData: {
  24. ...stateFormData
  25. },
  26. popupValue: '',
  27. date: '',
  28. },
  29. onLoad() {
  30. this.storeBindings = createStoreBindings(this, {
  31. store,
  32. fields: ["token", "phone"],
  33. actions: ["setPhone"],
  34. });
  35. },
  36. onUnload() {
  37. this.storeBindings.destroyStoreBindings();
  38. },
  39. onClickLeft() {
  40. wx.navigateBack({
  41. data: 1
  42. })
  43. },
  44. async submitTap() {
  45. const token = this.data.token || ""
  46. if (token === '') {
  47. wx.navigateTo({
  48. url: "../login/index"
  49. })
  50. return
  51. }
  52. const {
  53. loading,
  54. formData,
  55. phone
  56. } = this.data
  57. if (loading) return
  58. this.setData({
  59. loading: true
  60. })
  61. const {
  62. city,
  63. act_time_start,
  64. act_day_count,
  65. item_id,
  66. name,
  67. // budget,
  68. participant,
  69. require_item,
  70. req_demand,
  71. } = formData
  72. const keyMsg = this.valKey()
  73. if (keyMsg) {
  74. this.showToastMsg(keyMsg)
  75. this.setData({
  76. loading: false
  77. })
  78. return
  79. }
  80. const msg = valMobile(phone)
  81. if (msg) {
  82. this.showToastMsg(msg)
  83. this.setData({
  84. loading: false
  85. })
  86. return
  87. }
  88. const {
  89. code,
  90. data,
  91. msg: ss
  92. } = await httpAdd({
  93. city,
  94. act_time: act_time_start,
  95. act_day_count,
  96. item_id,
  97. name,
  98. // budget,
  99. participant,
  100. require_item,
  101. req_demand: req_demand.toString(),
  102. phone
  103. })
  104. if (code === 1) {
  105. this.showToastMsg('会务订单创建成功!')
  106. wx.redirectTo({
  107. url: '../order-details/index?id=' + data.reqCode
  108. })
  109. this.setData({
  110. formData: {
  111. ...formData
  112. }
  113. })
  114. } else if (code === 0) {
  115. this.showToastMsg(ss)
  116. } else {
  117. }
  118. this.setData({
  119. loading: false
  120. })
  121. },
  122. valKey() {
  123. let msg = ""
  124. const {
  125. formData,
  126. config
  127. } = this.data
  128. const list = [
  129. "city",
  130. "act_time",
  131. "name",
  132. // "budget",
  133. "item_id",
  134. "participant",
  135. "require_item",
  136. "req_demand"
  137. ]
  138. list.forEach((key) => {
  139. if (config[key] === 'checkbox') {
  140. if (formData[key].length === 0) {
  141. msg = `至少选择一个${config[key].title}!`
  142. }
  143. } else {
  144. console.log(key);
  145. if (!formData[key]) {
  146. msg = `${config[key].title}不能为空!`
  147. }
  148. }
  149. })
  150. return msg
  151. },
  152. onPhoneChange(event: any) {
  153. this.setData({
  154. phone: event.detail.value
  155. })
  156. },
  157. onNameChange(event: any) {
  158. const {
  159. formData
  160. } = this.data
  161. let model = {
  162. ...formData,
  163. name: event.detail.value
  164. }
  165. this.setData({
  166. formData: model
  167. })
  168. },
  169. //输入组件 只读点击选择数据
  170. onFormChange(event: any) {
  171. const token = this.data.token || ""
  172. const key = event.currentTarget.dataset.type
  173. const type = this.data.config[key].type
  174. if (token === '' && (type === "city" || type === "radio" || type === 'checkbox')) {
  175. wx.navigateTo({
  176. url: "../login/index"
  177. })
  178. return
  179. }
  180. const {
  181. act_time_start,
  182. act_time_end
  183. } = this.data.formData
  184. this.setData({
  185. popupValue: type !== 'time' ? this.data.formData[key] : act_time_start ? [act_time_start, act_time_end] : [],
  186. popupType: type,
  187. popupTitle: this.data.config[key].title,
  188. popupApi: this.data.config[key].api,
  189. popupKey: key,
  190. show: true,
  191. popupOptions: []
  192. });
  193. },
  194. tapItemClick(e: any) {
  195. const {
  196. label,
  197. popupKey,
  198. popupType,
  199. value,
  200. count,
  201. end
  202. } = e.detail
  203. let form = {
  204. ...this.data.formData
  205. }
  206. form[popupKey] = value
  207. form[popupKey + '_name'] = label
  208. if (popupType === 'time') {
  209. form.act_day_count = count;
  210. form.act_time_start = value;
  211. form.act_time_end = end
  212. }
  213. this.setData({
  214. show: false,
  215. formData: form
  216. });
  217. },
  218. popupLeft() {
  219. this.setData({
  220. show: false,
  221. });
  222. },
  223. showToastMsg(msg: string) {
  224. wx.showToast({
  225. title: msg,
  226. icon: 'none',
  227. duration: 2000
  228. })
  229. }
  230. })