regWx.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <template>
  2. <div class="login-box-parent" style="background:#fff;">
  3. <van-nav-bar left-text="返回" @click-left="$router.push('/login')" left-arrow title="手机号验证">
  4. <div slot="right" @click="$router.push({ name: 'login' })" style="display:none;">登录</div>
  5. </van-nav-bar>
  6. <div class="login-box" :class="{ input_focus: input_focus }">
  7. <scroller>
  8. <div class="login-form-box" style="background-color: #fff;">
  9. <!-- App背景 -->
  10. <div class="login-form-box-bg"><icon name="login_logo_bg" class="login_logo_bg"></icon></div>
  11. <div style="height:0.2rem;"></div>
  12. <div class="login_logo"><icon name="logo" class="app_logn"></icon></div>
  13. <div style="padding-right: 0.32rem;text-align: right;height: 0.4rem;position: relative;" class="blue" v-if="setp == 2">
  14. <span @click="openActive" style="position: absolute;width: 1.6rem;z-index: 999;right: 0.32rem;">上一步</span>
  15. </div>
  16. <div class="login-form-box" style="background-color: #fff;">
  17. <div v-if="setp == 1" class="setp1">
  18. <van-cell-group>
  19. <van-field class="mobile" clearable v-model="formData.tel" placeholder="请输入手机号" :error-message="mobile_error" :icon="mobile_success" type="Number">
  20. <template slot="left-icon"><icon name="tel" class="login_mobile"></icon></template>
  21. </van-field>
  22. <van-field class="message" clearable v-model="formData.verify" center type="Number" placeholder="请输入短信验证码" :error-message="verify_error">
  23. <template slot="left-icon"><icon name="message" class="login_message"></icon></template>
  24. <van-button class="message_code" :loading="sendMsgLoading" slot="button" size="small" type="info" @click="sendMsg" :disabled="sended">{{sendMsgText}}</van-button>
  25. </van-field>
  26. </van-cell-group>
  27. </div>
  28. <div v-else>
  29. <van-cell-group>
  30. <van-field class="set_pwd" maxlength="15" type="text" v-model="formData.name" clearable placeholder="您的姓名">
  31. <template slot="left-icon">
  32. <icon name="user" class="login_user"></icon>
  33. </template>
  34. </van-field>
  35. <van-field class="comfim_pwd" type="password" v-model="formData.password" clearable placeholder="设置密码(6-16位数字和字母结合)">
  36. <template slot="left-icon">
  37. <icon name="pwd" class="login_pwd"></icon>
  38. </template>
  39. </van-field>
  40. </van-cell-group>
  41. </div>
  42. <div style="padding:0 0.32rem;" v-if="setp == 1">
  43. <van-button class="login_button" :loading="reg_loading" size="large" :disabled="!complite_btn_enable1" @click="nextReg" type="info">下一步</van-button>
  44. </div>
  45. <div style="padding:0 0.32rem;margin-top:0.5rem" v-else>
  46. <van-button class="login_button" :loading="reg_loading" size="large" :disabled="!complite_btn_enable" @click="sendReg" type="info">完成注册</van-button>
  47. </div>
  48. </div>
  49. </div>
  50. </scroller>
  51. </div>
  52. </div>
  53. </template>
  54. <script>
  55. import { returnJSEncrypt } from '@/utils/auth';
  56. export default {
  57. name: 'reg',
  58. data () {
  59. return {
  60. complite_btn_enable1: false,
  61. input_focus: false,
  62. next_loading: false,
  63. reg_loading: false,
  64. tel_error: '',
  65. verify_error: '',
  66. mobile_error: '',
  67. mobile_success: '',
  68. complite_btn_enable: false,
  69. login_error: false,
  70. login_error_msg: '',
  71. next_btn_enable: false,
  72. setp: 1,
  73. countdown: 90,
  74. sended: false,
  75. sendMsgText: '获取验证码',
  76. sendMsgLoading: false,
  77. formData: {
  78. tel: '',
  79. name: '',
  80. password: '',
  81. password_confirmation: '',
  82. verify: '',
  83. },
  84. exist:false,
  85. }
  86. },
  87. created () {
  88. },
  89. watch: {
  90. formData: {
  91. handler (val, oldVal) {
  92. let self = this
  93. if (val.tel != '' && val.verify != '') {
  94. self.complite_btn_enable1 = true
  95. self.next_btn_enable = true
  96. } else {
  97. self.complite_btn_enable1 = false
  98. self.next_btn_enable = false
  99. }
  100. if (val.password != '') {
  101. self.complite_btn_enable = true
  102. } else {
  103. self.complite_btn_enable = false
  104. }
  105. },
  106. deep: true
  107. }
  108. },
  109. methods: {
  110. openActive(){
  111. this.setp=1;
  112. },
  113. nextReg () {
  114. if (!this.checkMobile(this.formData.tel)) {
  115. this.$toast('请输入正确的手机号');
  116. return false;
  117. }
  118. if (this.formData.verify == '') {
  119. this.$toast('请输入验证码!');
  120. return false;
  121. }
  122. this.reg_loading = true
  123. if(this.exist){ //已有绑定
  124. let obj = {tel:this.formData.tel,verify:this.formData.verify};
  125. this.$axios('post','/api/pro/login/sms',{data: returnJSEncrypt(obj)},'v2',this.$route.query.wo_token).then(res => {
  126. let data=res.data.data;
  127. this.$toast("已绑定")
  128. localStorage.setItem('a-token-temp', data.token); // 保存平台账号登录的token
  129. localStorage.setItem('a-token-tel', data.account.tel);
  130. this.openUrl(data.account_site,data.invitation_wait_count);
  131. }).finally(() => {this.reg_loading = false})
  132. }else{ //未绑定
  133. this.setp=2;
  134. this.reg_loading = false
  135. }
  136. },
  137. openUrl(account_site, invitation_wait_count) {
  138. // 公司数量
  139. if (account_site.length > 0) {
  140. if (invitation_wait_count > 0) {
  141. this.$router.replace({ name: 'registration_experience', query: { invite: 1, iscompany: 1 } }); // 选择行业
  142. } else {
  143. this.$router.replace({ name: 'login_company_list' }); // 选择企业
  144. }
  145. } else {
  146. if (invitation_wait_count > 0) {
  147. // 待邀请数量
  148. this.$router.replace({ name: 'registration_experience', query: { invite: 1 } }); // 选择行业
  149. } else {
  150. this.$router.replace({name:'create_company'}) //进入体验账号
  151. }
  152. }
  153. },
  154. // 点击完成
  155. sendReg () {
  156. if (this.formData.name == '') {
  157. this.$toast('请输入姓名');
  158. return false;
  159. }
  160. if (!this.Pass_Word(this.formData.password)) {
  161. this.$notify({
  162. message: '密码格式要为6-16位数字和字母结合',
  163. duration: 1000,
  164. background: '#f44'
  165. })
  166. return false
  167. }
  168. this.reg_loading = true
  169. let data={
  170. tel:this.formData.tel,
  171. name:this.formData.name,
  172. password:this.formData.password,
  173. password_confirmation:this.formData.password,
  174. verify:this.formData.verify,
  175. }
  176. this.$axios('post','/api/pro/register',{data: returnJSEncrypt(data)},'v2',this.$route.query.wo_token).then(res => {
  177. this.$toast("已注册")
  178. let data=res.data.data;
  179. localStorage.setItem('a-token-temp', data.token); // 保存平台账号登录的token
  180. localStorage.setItem('a-token-tel', data.account.tel); // 保存平台账号登录的手机号
  181. this.openUrl(data.account_site,data.invitation_wait_count);
  182. }).finally(() => {this.reg_loading = false})
  183. },
  184. // 获取验证码
  185. sendMsg () {
  186. if (!this.checkMobile(this.formData.tel)) {
  187. this.$notify({
  188. message: '手机号码错误',
  189. duration: 1000,
  190. background: '#f44'
  191. })
  192. return false
  193. }
  194. let data = {tel: this.formData.tel,code:'accountCheck'};
  195. this.$axios('post', '/api/pro/ac', { data: returnJSEncrypt(data) }).then(res => {
  196. this.exist=res.data.data.exist //是否已注册 true-已注册 false-未注册
  197. this.login_reg();
  198. })
  199. },
  200. login_reg(){
  201. this.sendMsgLoading = true
  202. this.sended = true
  203. let data = { mobile:this.formData.tel,type:this.exist? 4:1};
  204. this.$axios('post', '/api/pro/send-sms', { data: returnJSEncrypt(data) }, 'v2').then(res => {
  205. this.countDownInit()
  206. this.$toast('已经发送,请注意查收!')
  207. }).finally(() => {
  208. this.sended = false
  209. this.sendMsgLoading = false
  210. })
  211. },
  212. // 密码正则 6-16位数字和字母
  213. Pass_Word (My_PassWord) {
  214. if (!/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/.test(My_PassWord)) {
  215. return false
  216. } else {
  217. return true
  218. }
  219. },
  220. // 手机号正则
  221. checkMobile (sMobile) {
  222. if (!/^1\d{10}$/.test(sMobile)) {
  223. return false
  224. } else {
  225. return true
  226. }
  227. },
  228. countDownInit () {
  229. let self = this
  230. self.sendMsgText = '已发送(' + self.countdown + ')'
  231. if (self.countdown == 0) {
  232. self.countdown = 90
  233. self.sendMsgText = '重新发送'
  234. self.sended = false
  235. return false
  236. } else {
  237. setTimeout(function () {
  238. self.countdown--
  239. self.countDownInit()
  240. }, 1000)
  241. }
  242. },
  243. }
  244. }
  245. </script>
  246. <style rel="stylesheet/scss" lang="scss" scoped>
  247. .popup-all{
  248. border-radius: 0.15rem;
  249. background: #fff;
  250. width: 80%;
  251. text-align: center;
  252. font-size: 0.32rem;
  253. .title{
  254. padding: 0.2rem 0;
  255. }
  256. .content{
  257. font-size: 0.28rem;
  258. padding: 0 0.2rem;
  259. padding-bottom: 0.2rem;
  260. height: 3rem;
  261. overflow-y: scroll;
  262. }
  263. .footer2 div:nth-child(1){
  264. background-color: #ccc;
  265. color: #333333;
  266. padding: 0.24rem 0;
  267. font-size: 0.28rem;
  268. }
  269. .footer2 div:nth-child(2){
  270. background-color: #1989FA;
  271. color: #fff;
  272. padding: 0.24rem 0;
  273. font-size: 0.28rem;
  274. }
  275. }
  276. .login-form-box-bg {
  277. position: absolute;
  278. top: -1rem;
  279. left: 0;
  280. width: 100%;
  281. height: 3.4rem;
  282. color: #26a2ff;
  283. }
  284. .input_focus.login-box {
  285. height: calc(100% - 0rem);
  286. }
  287. .login-box {
  288. height: calc(100% - 2rem);
  289. position: relative;
  290. }
  291. .login-box-parent .van-field__icon .van-icon {
  292. color: #4b0;
  293. }
  294. .login_logo {
  295. position: relative;
  296. display: block;
  297. margin: -1.05rem auto;
  298. width: 3.6rem;
  299. color: #fff;
  300. margin-bottom: 0rem;
  301. z-index: 1;
  302. }
  303. .setp1,
  304. .setp2 {
  305. padding-bottom: 0.5rem;
  306. }
  307. .login-box .login-form-box .mobile {
  308. font-size: 0.32rem;
  309. margin-bottom: 0.16rem;
  310. padding: 0.2rem 0.32rem;
  311. line-height: 0.5rem;
  312. }
  313. .login-box .login-form-box .mobile .login_mobile {
  314. width: 0.37rem;
  315. height: 0.37rem;
  316. color: #b8b8b8;
  317. margin-top: -0.06rem;
  318. margin-left: -0.06rem;
  319. padding-right: 0rem;
  320. border-right: none;
  321. }
  322. // .login-box .field-focus .login_mobile {
  323. // color: #238cf9 !important;
  324. // }
  325. .login-box .login-form-box .message {
  326. font-size: 0.32rem;
  327. margin-bottom: 0.16rem;
  328. padding: 0.2rem 0.32rem;
  329. line-height: 0.5rem;
  330. }
  331. .login-box .login-form-box .message .message_code {
  332. font-size: 0.28rem;
  333. letter-spacing: 0.005rem;
  334. color: #1989fa;
  335. border: none;
  336. background: none;
  337. }
  338. .login-box .login-form-box .message .login_message {
  339. width: 0.37rem;
  340. height: 0.37rem;
  341. color: #b8b8b8;
  342. margin-top: -0.06rem;
  343. margin-left: -0.06rem;
  344. padding-right: 0rem;
  345. border-right: none;
  346. }
  347. // .login-box .field-focus .login_message {
  348. // color: #238cf9 !important;
  349. // }
  350. .login-box .login-form-box .set_pwd {
  351. font-size: 0.32rem;
  352. margin-bottom: 0.16rem;
  353. padding: 0.2rem 0.32rem;
  354. line-height: 0.5rem;
  355. }
  356. .login-box .login-form-box .set_pwd .login_user {
  357. width: 0.37rem;
  358. height: 0.37rem;
  359. color: #b8b8b8;
  360. margin-top: -0.06rem;
  361. margin-left: -0.06rem;
  362. padding-right: 0rem;
  363. border-right: none;
  364. }
  365. // .login-box .field-focus .login_user {
  366. // color: #238cf9 !important;
  367. // }
  368. .login-box .login-form-box .comfim_pwd {
  369. font-size: 0.32rem;
  370. margin-bottom: 0.16rem;
  371. padding: 0.2rem 0.32rem;
  372. line-height: 0.5rem;
  373. }
  374. .login-box .login-form-box .comfim_pwd .login_pwd {
  375. width: 0.37rem;
  376. height: 0.37rem;
  377. color: #b8b8b8;
  378. margin-top: -0.06rem;
  379. margin-left: -0.06rem;
  380. padding-right: 0rem;
  381. border-right: none;
  382. }
  383. // .login-box .field-focus .login_pwd {
  384. // color: #238cf9 !important;
  385. // }
  386. /deep/ .login-box input {
  387. font-size: 0.4rem !important;
  388. color: #1c1c1c;
  389. letter-spacing: 0.005rem;
  390. }
  391. .login-box ::-webkit-input-placeholder {
  392. font-size: 0.32rem;
  393. color: #b8b8b8 !important;
  394. letter-spacing: 0.005rem;
  395. }
  396. .login-box input:-ms-input-placeholder {
  397. font-size: 0.32rem;
  398. color: #b8b8b8 !important;
  399. letter-spacing: 0.005rem;
  400. }
  401. .login-box ::-moz-input-placeholder {
  402. font-size: 0.32rem;
  403. color: #b8b8b8 !important;
  404. letter-spacing: 0.005rem;
  405. }
  406. // .login-box .field-focus ::-webkit-input-placeholder {
  407. // color: #238cf9 !important;
  408. // }
  409. .login-box input:-ms-input-placeholder {
  410. color: #26a2ff !important;
  411. }
  412. // .login-box .field-focus ::-moz-input-placeholder {
  413. // color: #238cf9 !important;
  414. // }
  415. .login-box .van-hairline--top-bottom:after {
  416. border: none;
  417. border-bottom: 0.02rem #efefef solid;
  418. transform: scaleY(0.5);
  419. left: 0.32rem;
  420. right: 0.32rem;
  421. }
  422. .login-box .van-hairline-unset--top-bottom:after {
  423. border: none;
  424. border-bottom: 0.02rem #efefef solid;
  425. transform: scaleY(0.5);
  426. left: 0.32rem;
  427. right: 0.32rem;
  428. }
  429. .login-box .van-cell:not(:last-child):after {
  430. border: none;
  431. border-bottom: 0.02rem #efefef solid;
  432. transform: scaleY(0.5);
  433. left: 0.32rem;
  434. right: 0.32rem;
  435. }
  436. // /deep/ .login-box .field-focus:after {
  437. // border-bottom: 0.02rem #238cf9 solid !important;
  438. // transform: scaleY(.5);
  439. // left: 0.32rem;
  440. // right: 0.32rem;
  441. // }
  442. .login-box .login_button {
  443. height: 1rem;
  444. line-height: 0.8rem;
  445. border-radius: 0.04rem;
  446. }
  447. .login-box-parent .mint-cell.cell-last:before {
  448. bottom: 0;
  449. }
  450. .footer {
  451. font-size: 0.24rem;
  452. line-height: 1rem;
  453. text-align: center;
  454. color: #999;
  455. letter-spacing: 0.005rem;
  456. }
  457. .footer a {
  458. color: #1989fa;
  459. }
  460. </style>