index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <view class="binding">
  3. <!-- header -->
  4. <cu-custom bgColor="bg-gradual-blue" isBack>
  5. <view slot="content">{{ id ? '设备换绑' : '设备绑定' }}</view>
  6. </cu-custom>
  7. <!-- section -->
  8. <van-cell-group>
  9. <van-field label="姓名" :error-message="err.name" @change="onChange($event, 'name')" :value="value.name" required placeholder="请输入用户名" />
  10. <van-field label="电话" :error-message="err.tel" @change="onChange($event, 'tel')" :value="value.tel" required placeholder="请输入电话" />
  11. <van-field
  12. v-if="yan"
  13. :value="value.yan"
  14. :error-message="err.yan"
  15. @change="onChange($event, 'yan')"
  16. center
  17. clearable
  18. required
  19. label="短信验证码"
  20. placeholder="请输入短信验证码"
  21. use-button-slot
  22. >
  23. <van-button @click="sendfunc" :disabled="time" slot="button" size="small" type="primary">{{ time ? time + 's' : '获取验证码' }}</van-button>
  24. </van-field>
  25. <van-field :error-message="err.car" @change="onChange($event, 'car')" label="车型" :value="value.car" required placeholder="请输入车型" />
  26. <van-field label="车牌号码" @change="onChange($event, 'code')" :value="value.code" :error-message="err.code" required placeholder="请输入车牌号码" />
  27. </van-cell-group>
  28. <button @click="onClick" style="height: 80rpx;" class="cu-btn margin bg-green block ">申请绑定</button>
  29. <!-- footer -->
  30. <!-- 功能工具 -->
  31. <van-dialog id="van-dialog" />
  32. </view>
  33. </template>
  34. <script>
  35. import Dialog from '@/wxcomponents/vant/dist/dialog/dialog';
  36. export default {
  37. data() {
  38. return {
  39. id: 0,
  40. value: {
  41. name: '',
  42. tel: '',
  43. yan: '',
  44. car: '',
  45. code: ''
  46. },
  47. err: {
  48. name: '',
  49. tel: '',
  50. yan: '',
  51. car: '',
  52. code: ''
  53. },
  54. yan: false,
  55. timer: null,
  56. time: 0
  57. };
  58. },
  59. onLoad(options) {
  60. if (options.hasOwnProperty('value')) {
  61. options.value = JSON.parse(options.value);
  62. this.id = options.value.id;
  63. // name, tel, number: code, model: car,vcode:yan
  64. this.value = {
  65. name: options.value.name,
  66. tel: options.value.tel,
  67. code: options.value.number,
  68. car: options.value.model
  69. };
  70. var telReg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
  71. this.yan = this.$store.state.userInfo.tel !== options.value.tel && telReg.test(options.value.tel) ? true : false;
  72. }
  73. if (this.id == 0) this.value.tel = this.$store.state.userInfo.tel;
  74. },
  75. beforeDestroy() {
  76. clearInterval(this.timer);
  77. },
  78. methods: {
  79. // 请求验证码
  80. async sendfunc() {
  81. var res = await this.$global.request({
  82. method: 'get',
  83. header: {
  84. 'Content-Type': 'application/x-www-form-urlencoded',
  85. Authorization: uni.getStorageSync('token')
  86. },
  87. url: '/customer/vehicle/vcode/send/',
  88. data: { tel: this.value.tel, appid: this.$store.state.userInfo.appid }
  89. });
  90. this.time = 60;
  91. clearInterval(this.timer);
  92. this.timer = setInterval(() => {
  93. this.time = this.time - 1;
  94. if (this.time <= 0) clearInterval(this.timer);
  95. }, 1000);
  96. },
  97. // 双向绑定
  98. onChange(e, name) {
  99. var value = JSON.parse(JSON.stringify(this.value));
  100. value[name] = e.detail;
  101. var telReg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
  102. if (name == 'tel') {
  103. this.yan = this.$store.state.userInfo.tel !== e.detail && telReg.test(value.tel) ? true : false;
  104. }
  105. this.value = value;
  106. },
  107. // 验证
  108. yanfunc() {
  109. var value = JSON.parse(JSON.stringify(this.value));
  110. var err = JSON.parse(JSON.stringify(this.err));
  111. // 去空格 并且 清空错误集
  112. Object.keys(value).forEach(item => {
  113. value[item] = value[item].trim();
  114. err[item] = '';
  115. });
  116. // 判断
  117. if (!value.name) err.name = '姓名不能为空';
  118. var telreg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
  119. if (!value.tel) {
  120. err.tel = '电话不能为空';
  121. } else {
  122. if (!telreg.test(value.tel)) err.tel = '电话格式不正确';
  123. }
  124. if (!value.yan && this.yan) err.yan = '验证码不能为空';
  125. if (!value.car) err.car = '车型不能为空';
  126. if (!value.code) err.code = '车牌号码不能为空';
  127. this.value = value;
  128. this.err = err;
  129. return Object.keys(err).some(item => err[item]);
  130. },
  131. // 提交
  132. async onClick() {
  133. try {
  134. if (this.yanfunc()) {
  135. Dialog.alert({ message: '请检查所填数据!' }).then(() => {});
  136. return false;
  137. }
  138. var { name, tel, car, code, yan } = this.value;
  139. var res = await this.$global.request({
  140. method: this.id ? 'put' : 'post',
  141. header: {
  142. 'Content-Type': 'application/x-www-form-urlencoded',
  143. Authorization: uni.getStorageSync('token')
  144. },
  145. url: this.id ? `/customer/vehicle/${this.id}/` : '/customer/vehicle/',
  146. data: { name, tel, number: code, model: car, vcode: yan }
  147. });
  148. uni.showToast({
  149. icon: 'none',
  150. title: '成功绑定',
  151. success() {
  152. uni.navigateBack({
  153. delta: 1
  154. });
  155. }
  156. });
  157. } catch (err) {
  158. wx.showToast({
  159. icon: 'none',
  160. title: err
  161. });
  162. }
  163. }
  164. }
  165. };
  166. </script>
  167. <style lang="scss" scoped></style>