signup.vue 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <template>
  2. <div>
  3. <img class="bgi" src="../../public/images/signup/bgi.jpg" width="100%" />
  4. <div class="form">
  5. <div class="formItem">
  6. <label>身&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;份</label>
  7. <div style="float: right;" @click="handleDesigner">
  8. <img class="checkedImg" :src="ischecked ? Unchecked : checked" />
  9. <label for="dewey">设计师</label>
  10. </div>
  11. <div style="float: right;margin-right: 7vw;" @click="handleUser">
  12. <img class="checkedImg" :src="ischecked ? checked : Unchecked" />
  13. <label for="huey">用户</label>
  14. </div>
  15. </div>
  16. <div class="formItem name">
  17. <label>姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名</label>
  18. <input class="userName" type="text" placeholder="请输入姓名" v-model="formData.userName" />
  19. </div>
  20. <div class="formItem phonediv">
  21. <label>手&nbsp;机&nbsp;号</label>
  22. <input class="phone" type="text" placeholder="请输入手机号" v-model="formData.phone" />
  23. </div>
  24. <div class="formItem intendedProductdiv" @click="showPicker = true">
  25. <label>意向产品</label>
  26. <div class="intendedProduct" :class="{grey: !address}">{{formData.intendedProduct || "请选择"}}</div>
  27. </div>
  28. <div class="formItem addressdiv" @click="showArea = true">
  29. <label>所在地区</label>
  30. <div class="address" :class="{grey: !address}">{{address || "请选择"}}</div>
  31. </div>
  32. <img @click="sumbit" class="submit" src="../../public/images/signup/submit.png" width="45%" />
  33. </div>
  34. <van-popup
  35. v-model="showPicker"
  36. position="bottom"
  37. >
  38. <van-picker
  39. title="意向产品"
  40. show-toolbar
  41. :columns="productList"
  42. @confirm="onConfirm"
  43. @cancel="onCancel"
  44. />
  45. </van-popup>
  46. <area-picker :show.sync="showArea" @change="handleArea" @cancel='showArea=false'></area-picker>
  47. </div>
  48. </template>
  49. <script>
  50. import { setRegister, getCity } from '../utils/api'
  51. export default {
  52. components: {
  53. AreaPicker: () => import('@/components/AreaPicker')
  54. },
  55. data() {
  56. return {
  57. showArea: false,
  58. checked: `./images/signup/checked.png`,
  59. Unchecked: `./images/signup/Unchecked.png`,
  60. ischecked: true,
  61. showPicker: false,
  62. formData: {
  63. role: 'user',
  64. userName: undefined,
  65. phone: undefined,
  66. intendedProduct: undefined,
  67. address: undefined
  68. },
  69. productList: ['COLMO子母太空舱', 'COLMO星图干洗护理套装', 'COLMO星辰干洗护理套装', 'COLMO星际干洗护理套装', 'COLMO TURING套系智慧干洗护理空间站'],
  70. pickerVisibleProduct: false,
  71. address: undefined
  72. }
  73. },
  74. mounted() {
  75. this.getCity()
  76. },
  77. methods: {
  78. onConfirm(value, index) {
  79. this.formData.intendedProduct = value
  80. this.onCancel()
  81. },
  82. onCancel() {
  83. this.showPicker = false
  84. },
  85. getCity() {
  86. getCity().then((e) => {
  87. console.log(e)
  88. })
  89. },
  90. handleUser() {
  91. this.ischecked = true
  92. this.formData.role = '用户'
  93. },
  94. handleDesigner() {
  95. this.ischecked = false
  96. this.formData.role = '设计师'
  97. },
  98. handleArea(val) {
  99. this.showArea = false
  100. this.formData.address = val
  101. this.address =
  102. this.formData.address[0].name +
  103. this.formData.address[1].name +
  104. this.formData.address[2].name
  105. },
  106. verification() {
  107. if (!this.formData.userName) {
  108. alert('请输入您的姓名')
  109. return false
  110. } else if (!this.formData.phone) {
  111. alert('请输入您的手机号')
  112. return false
  113. } else if (!this.formData.intendedProduct) {
  114. alert('请选择您的意向产品')
  115. return false
  116. } else if (!this.formData.address) {
  117. alert('请选择您所在的地区')
  118. return false
  119. } else if (!this.formData.phone.match(/^1[0-9]{10}/)) {
  120. alert('请输入正确的手机号哦')
  121. return false
  122. } else return true
  123. },
  124. sumbit() {
  125. if (this.verification()) {
  126. const { userName, phone, intendedProduct, address, role } =
  127. this.formData
  128. let arrNew = address.map((item) => {
  129. return {
  130. areaCode: item.code,
  131. areaName: item.name
  132. }
  133. })
  134. setRegister({
  135. areaCode: arrNew[2].areaCode,
  136. areaName: arrNew[2].areaName,
  137. name: userName,
  138. personType: role,
  139. phone: phone,
  140. interestTo: intendedProduct
  141. }).then((e) => {
  142. this.$router.replace('/resultPage')
  143. console.log(e)
  144. }).catch(e => {
  145. alert(e.message)
  146. })
  147. }
  148. }
  149. }
  150. }
  151. </script>
  152. <style scoped>
  153. * {
  154. margin: 0;
  155. padding: 0;
  156. }
  157. .bgi {
  158. z-index: 1;
  159. position: absolute;
  160. }
  161. .form {
  162. width: 100%;
  163. color: #a6b1ab;
  164. position: absolute;
  165. margin-top: 18%;
  166. z-index: 2;
  167. }
  168. .formItem {
  169. position: absolute;
  170. width: 82vw;
  171. margin: 6vw;
  172. padding: 3vw;
  173. text-align: left;
  174. border: 1px solid #4f5054;
  175. background-color: #212226;
  176. }
  177. .checkedImg {
  178. width: 16px;
  179. top: 2px;
  180. right: 8px;
  181. position: relative;
  182. }
  183. .name {
  184. margin-top: 23%;
  185. }
  186. .userName {
  187. width: 74%;
  188. background-color: #212226;
  189. outline: none;
  190. border: none;
  191. color: white;
  192. text-align: right;
  193. height: 100%;
  194. font-size: 16px;
  195. color: #a6b1ab;
  196. float: right;
  197. }
  198. .phonediv {
  199. margin-top: 40%;
  200. }
  201. .phone {
  202. width: 74%;
  203. background-color: #212226;
  204. outline: none;
  205. border: none;
  206. color: white;
  207. text-align: right;
  208. height: 100%;
  209. font-size: 16px;
  210. color: #a6b1ab;
  211. float: right;
  212. }
  213. .intendedProductdiv {
  214. margin-top: 57%;
  215. }
  216. .intendedProduct {
  217. width: 73%;
  218. background-color: #212226;
  219. outline: none;
  220. border: none;
  221. color: white;
  222. text-align: right;
  223. height: 100%;
  224. font-size: 16px;
  225. color: #a6b1ab;
  226. float: right;
  227. overflow: hidden;
  228. text-overflow: ellipsis;
  229. white-space:nowrap;
  230. }
  231. .addressdiv {
  232. margin-top: 74%;
  233. }
  234. .address {
  235. width: 72%;
  236. background-color: #212226;
  237. outline: none;
  238. border: none;
  239. color: white;
  240. text-align: right;
  241. height: 100%;
  242. font-size: 16px;
  243. color: #a6b1ab;
  244. float: right;
  245. overflow: hidden;
  246. text-overflow: ellipsis;
  247. white-space:nowrap;
  248. }
  249. .grey {
  250. color: #696f69;
  251. }
  252. .submit {
  253. margin: 93% 0 0 27.5vw;
  254. }
  255. </style>