signup.vue 6.6KB

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