123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <template>
  2. <div class="signup-box">
  3. <img class="bgi" src="../../public/images/signup/bgi.jpg" />
  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="duiqi" type="text" :placeholder="placeHolderName" v-model="formData.userName" @focus="nameFocus" @blur="nameBlur"/>
  19. </div>
  20. <div class="formItem phonediv">
  21. <label>手&nbsp;机&nbsp;号</label>
  22. <input class="duiqi" type="text" :placeholder="placeHolderPhone" v-model="formData.phone" @focus="phoneFocus" @blur="phoneBlur"/>
  23. </div>
  24. <div class="formItem intendedProductdiv" @click="showPicker = true">
  25. <label>意向产品</label>
  26. <div class="duiqi" :class="{grey: !intendedProduct}">{{formData.intendedProduct || "请选择"}}</div>
  27. </div>
  28. <div class="formItem addressdiv" @click="showArea = true">
  29. <label>所在地区</label>
  30. <div class="duiqi" :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. placeHolderPhone:'请输入手机号',
  63. placeHolderName:'请输入姓名',
  64. formData: {
  65. role: '用户',
  66. userName: undefined,
  67. phone: undefined,
  68. intendedProduct: undefined,
  69. address: undefined
  70. },
  71. productList: ['COLMO子母太空舱', 'COLMO星图干洗护理套装', 'COLMO星辰干洗护理套装', 'COLMO星际干洗护理套装', 'COLMO TURING套系智慧干洗护理空间站'],
  72. pickerVisibleProduct: false,
  73. intendedProduct: undefined,
  74. address: undefined
  75. }
  76. },
  77. mounted() {
  78. this.getCity()
  79. },
  80. methods: {
  81. onConfirm(value, index) {
  82. this.intendedProduct = value
  83. this.formData.intendedProduct = value
  84. this.onCancel()
  85. },
  86. onCancel() {
  87. this.showPicker = false
  88. },
  89. getCity() {
  90. getCity().then((e) => {
  91. console.log(e)
  92. })
  93. },
  94. handleUser() {
  95. this.ischecked = true
  96. this.formData.role = '用户'
  97. },
  98. handleDesigner() {
  99. this.ischecked = false
  100. this.formData.role = '设计师'
  101. },
  102. handleArea(val) {
  103. this.showArea = false
  104. this.formData.address = val
  105. this.address =
  106. this.formData.address[0].name +
  107. this.formData.address[1].name +
  108. this.formData.address[2].name
  109. },
  110. verification() {
  111. if (!this.formData.userName) {
  112. alert('请输入您的姓名')
  113. return false
  114. } else if (!this.formData.phone) {
  115. alert('请输入您的手机号')
  116. return false
  117. } else if (!this.formData.intendedProduct) {
  118. alert('请选择您的意向产品')
  119. return false
  120. } else if (!this.formData.address) {
  121. alert('请选择您所在的地区')
  122. return false
  123. } else if (!/^1[0-9]{10}$/.test(this.formData.phone)) {
  124. alert('请输入正确的手机号哦')
  125. return false
  126. } else return true
  127. },
  128. nameFocus() {
  129. this.placeHolderName=''
  130. },
  131. phoneFocus() {
  132. this.placeHolderPhone=''
  133. },
  134. nameBlur() {
  135. this.placeHolderName='请输入姓名'
  136. },
  137. phoneBlur() {
  138. this.placeHolderPhone='请输入手机号'
  139. },
  140. sumbit() {
  141. if (this.verification()) {
  142. const { userName, phone, intendedProduct, address, role } =
  143. this.formData
  144. let arrNew = address.map((item) => {
  145. return {
  146. areaCode: item.code,
  147. areaName: item.name
  148. }
  149. })
  150. setRegister({
  151. areaCode: arrNew[2].areaCode,
  152. areaName: arrNew[2].areaName,
  153. name: userName,
  154. personType: role,
  155. phone: phone,
  156. interestTo: intendedProduct
  157. }).then((e) => {
  158. this.$router.replace('/resultPage')
  159. console.log(e)
  160. }).catch(e => {
  161. alert(e.message)
  162. })
  163. }
  164. }
  165. }
  166. }
  167. </script>
  168. <style lang="scss" scoped>
  169. // * {
  170. // margin: 0;
  171. // padding: 0;
  172. // }
  173. .signup-box {
  174. overflow: hidden;
  175. height: 100%;
  176. }
  177. .bgi {
  178. width: 100%;
  179. position: absolute;
  180. }
  181. .form {
  182. position: relative;
  183. color: #a6b1ab;
  184. margin-top: 80px;
  185. padding: 0 8vw;
  186. box-sizing: border-box;
  187. .formItem {
  188. width: 100%;
  189. font-size: 16px;
  190. line-height: 2.6em;
  191. padding: 0 1em;
  192. border: 1px solid #4f5054;
  193. background-color: #212226;
  194. box-sizing: border-box;
  195. & + .formItem {
  196. margin-top: 1.2em;
  197. }
  198. & > label {
  199. display: inline-block;
  200. width: 4.5em;
  201. }
  202. .duiqi {
  203. display: inline-block;
  204. background-color: transparent;
  205. border: none;
  206. text-align: right;
  207. width: calc(100% - 4.5em);
  208. height: 2.6em;
  209. line-height: 2.6em;
  210. overflow: hidden;
  211. text-overflow: ellipsis;
  212. white-space: nowrap;
  213. vertical-align: middle;
  214. padding: 0;
  215. margin: 0;
  216. outline: none;
  217. }
  218. .checkedImg {
  219. width: 16px;
  220. top: 2px;
  221. right: 8px;
  222. position: relative;
  223. }
  224. }
  225. .grey {
  226. color: #696969;
  227. }
  228. .submit {
  229. display: block;
  230. margin-top: 2em;
  231. margin-left: auto;
  232. margin-right: auto;
  233. }
  234. }
  235. </style>