login.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <template>
  2. <view class="container">
  3. <!-- #ifdef MP-WEIXIN -->
  4. <image class="bg" src="https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/image/bg_login.png" mode="widthFix"></image>
  5. <view class="force-login-wrap">
  6. <view :style="{height:menuButtonInfo.height,marginTop:menuButtonInfo.top}" class="backImg">
  7. <image @tap="goBack()" src="/static/images/back.png"></image>
  8. </view>
  9. <view class="top-title">
  10. <view class="title-text">欢迎登录<text class="blue">小蜜蜂</text></view>
  11. <view class="login-notice">新用户首次登录即视为注册</view>
  12. </view>
  13. <view class="force-login__content">
  14. <view class="logintype">
  15. <view :class="current==0 ? 'logintype-item active':'logintype-item'" @click="changeType(0)">验证码登录
  16. </view>
  17. <view class="line"></view>
  18. <view :class="current==1 ? 'logintype-item active':'logintype-item'" @click="changeType(1)">密码登录
  19. </view>
  20. </view>
  21. <view class="input-form">
  22. <view class="input-item">
  23. <input v-if="current == 0" class="input-field" type="number" v-model="phone" placeholder="请输入手机号" maxlength="11" />
  24. <input v-else class="input-field" v-model="account" placeholder="请输入账号" />
  25. </view>
  26. <view class="input-item code-input-item">
  27. <input v-if="current == 0" class="input-field code-input" type="number" v-model="verifyCode"
  28. placeholder="请输入验证码" maxlength="6" />
  29. <view v-else class="mima">
  30. <input class="input-field code-input" type="text" :password="showPassword"
  31. v-model="password" placeholder="请输入密码" />
  32. <image @click="closePwd"
  33. :src="showPassword?'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/image/icon_invisible.png':'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/image/icon_visible.png'"
  34. mode="aspectFill"></image>
  35. </view>
  36. <view v-if="current == 0" class="get-code-btn" @click="getVerifyCode">
  37. {{ codeText }}
  38. </view>
  39. </view>
  40. </view>
  41. <view class="forgot" v-if="current==1" @click="toForgetPassword">忘记密码?</view>
  42. <view class="encoding">企业编码:-</view>
  43. <view class="login-btn-wrap">
  44. <!-- <button class="login-btn" @click="handleLogin">{{ current == 0 ? '登录/注册用户' : '登录' }}</button> -->
  45. <button class="login-btn" @click="handleLogin">登录</button>
  46. </view>
  47. <view class="tips">
  48. <checkbox :checked="isAgreement" @click="handleAgreement()" />
  49. <view class="tips-text" @click="handleAgreement()">已阅读并接受</view>
  50. <view class="btn" @click="openH5('/web/userAgreement')">《用户注册协议》</view>
  51. <view class="btn" @click="openH5('/web/privacyPolicy')">《隐私保护政策》</view>
  52. </view>
  53. </view>
  54. </view>
  55. <!-- #endif -->
  56. </view>
  57. </template>
  58. <script>
  59. import {
  60. sendSmsCode,//发送短信验证码
  61. smsLogin, // 校验短信验证码
  62. login, // 密码登录
  63. } from '@/api/user'
  64. // import {
  65. // loginByMiniApp,
  66. // getUserInfo,
  67. // loginByMp
  68. // } from '@/api/user'
  69. export default {
  70. data() {
  71. return {
  72. account:null,
  73. code: null, // 微信登录code
  74. isAgreement: false,
  75. current: 0, // 0-验证码登录 1-密码登录
  76. menuButtonInfo: {},
  77. phone: '', // 手机号
  78. verifyCode: '', // 验证码
  79. password: '', // 密码
  80. codeText: '获取验证码', // 验证码按钮文字
  81. countdown: 0, // 倒计时
  82. countdownTimer: null, // 倒计时定时器
  83. showPassword: true // 是否显示密码
  84. }
  85. },
  86. computed: {},
  87. onLoad(option) {
  88. this.getMenuButtonInfo()
  89. // #ifdef MP-WEIXIN
  90. uni.$on('refreshLogin', () => {
  91. uni.navigateBack({
  92. delta: 1
  93. })
  94. })
  95. //选获取CODE,防止后请求的时候腾讯服务端未同步报错
  96. this.getCode();
  97. // #endif
  98. // #ifdef H5
  99. if (this.checkWeixin()) {
  100. this.getWxCode()
  101. } else {
  102. uni.showToast({
  103. icon: 'none',
  104. title: "请在微信中打开",
  105. });
  106. //跳转到手机号密码登录
  107. }
  108. // #endif
  109. },
  110. onUnload() {
  111. // 清除倒计时
  112. if (this.countdownTimer) {
  113. clearInterval(this.countdownTimer);
  114. this.countdownTimer = null;
  115. }
  116. },
  117. mounted() {
  118. },
  119. methods: {
  120. closePwd() {
  121. this.showPassword = !this.showPassword
  122. },
  123. // 获取胶囊按钮布局参数
  124. getMenuButtonInfo() {
  125. // 微信小程序API(Uniapp可直接用uni.getMenuButtonBoundingClientRect)
  126. const menuBtn = uni.getMenuButtonBoundingClientRect();
  127. if (menuBtn) {
  128. this.menuButtonInfo = {
  129. top: menuBtn.top + 'px', // 胶囊顶部距离
  130. height: menuBtn.height + 'px', // 胶囊高度
  131. centerY: (menuBtn.top + menuBtn.height / 2) + 'px', // 胶囊垂直居中Y坐标
  132. right: menuBtn.right + 'px' // 胶囊右侧距离
  133. };
  134. }
  135. },
  136. changeType(index) {
  137. this.current = index;
  138. // 切换时清空输入
  139. if (index == 0) {
  140. this.password = '';
  141. } else {
  142. this.verifyCode = '';
  143. }
  144. },
  145. // 返回主页
  146. goBack() {
  147. uni.navigateBack({
  148. delta: 1
  149. })
  150. },
  151. // 获取验证码
  152. getVerifyCode() {
  153. if (this.countdown > 0) {
  154. return;
  155. }
  156. if (!this.phone) {
  157. uni.showToast({
  158. icon: 'none',
  159. title: "请输入手机号",
  160. });
  161. return;
  162. }
  163. if (!/^1[3-9]\d{9}$/.test(this.phone)) {
  164. uni.showToast({
  165. icon: 'none',
  166. title: "请输入正确的手机号",
  167. });
  168. return;
  169. }
  170. // 调用发送验证码API
  171. uni.showLoading({
  172. title: "发送中..."
  173. });
  174. let params = {
  175. phone: this.phone,
  176. type: '0',
  177. }
  178. sendSmsCode(params)
  179. .then(res => {
  180. uni.hideLoading();
  181. if (res.code == 200) {
  182. uni.showToast({
  183. icon: 'success',
  184. title: "验证码已发送",
  185. });
  186. // 开始倒计时
  187. this.countdown = 60;
  188. this.countdownTimer = setInterval(() => {
  189. this.countdown--;
  190. this.codeText = this.countdown + '秒重新获取';
  191. if (this.countdown <= 0) {
  192. clearInterval(this.countdownTimer);
  193. this.countdownTimer = null;
  194. this.codeText = '获取验证码';
  195. }
  196. }, 1000);
  197. } else {
  198. uni.showToast({
  199. icon: 'none',
  200. title: res.message || "发送验证码失败",
  201. });
  202. }
  203. })
  204. .catch(err => {
  205. uni.hideLoading();
  206. });
  207. },
  208. // 登录
  209. handleLogin() {
  210. if (!this.isAgreement) {
  211. uni.showToast({
  212. icon: 'none',
  213. title: "请先同意协议后再登录",
  214. });
  215. return;
  216. }
  217. if (this.current == 0) {
  218. // 验证码登录
  219. if (!this.phone) {
  220. uni.showToast({
  221. icon: 'none',
  222. title: "请输入手机号",
  223. });
  224. return;
  225. }
  226. if (!/^1[3-9]\d{9}$/.test(this.phone)) {
  227. uni.showToast({
  228. icon: 'none',
  229. title: "请输入正确的手机号",
  230. });
  231. return;
  232. }
  233. if (!this.verifyCode) {
  234. uni.showToast({
  235. icon: 'none',
  236. title: "请输入验证码",
  237. });
  238. return;
  239. }
  240. this.loginByCode();
  241. } else {
  242. // 密码登录
  243. if (!this.account) {
  244. uni.showToast({
  245. icon: 'none',
  246. title: "请输入账号",
  247. });
  248. return;
  249. }
  250. if (!this.password) {
  251. uni.showToast({
  252. icon: 'none',
  253. title: "请输入密码",
  254. });
  255. return;
  256. }
  257. this.loginByPassword();
  258. }
  259. },
  260. // 验证码登录
  261. loginByCode() {
  262. uni.showLoading({
  263. title: "登录中..."
  264. });
  265. // 调用验证码登录接口
  266. const data = {
  267. phone: this.phone,
  268. code: this.verifyCode
  269. };
  270. smsLogin(data)
  271. .then(res => {
  272. uni.hideLoading();
  273. if (res.code == 200) {
  274. uni.showToast({
  275. icon: 'success',
  276. title: "登录成功",
  277. });
  278. uni.setStorageSync('AppToken', res.data.token);
  279. uni.setStorageSync('userInfo', res.data.user);
  280. uni.$emit('refreshLogin');
  281. uni.navigateBack({
  282. delta: 1
  283. });
  284. } else {
  285. uni.showToast({
  286. icon: 'none',
  287. title: res.message || "登录失败",
  288. });
  289. }
  290. })
  291. .catch(err => {
  292. uni.hideLoading();
  293. });
  294. },
  295. // 密码登录
  296. loginByPassword() {
  297. uni.showLoading({
  298. title: "登录中..."
  299. });
  300. const data={
  301. account: this.account,
  302. password: this.password
  303. }
  304. // 调用密码登录接口
  305. login(data)
  306. .then(res => {
  307. uni.hideLoading();
  308. if (res.code == 200) {
  309. uni.showToast({
  310. icon: 'success',
  311. title: "登录成功",
  312. });
  313. uni.setStorageSync('AppToken', res.data.token);
  314. uni.setStorageSync('userInfo', res.data.user);
  315. uni.$emit('refreshLogin');
  316. uni.navigateBack({
  317. delta: 1
  318. });
  319. } else {
  320. uni.showToast({
  321. icon: 'none',
  322. title: res.message || "登录失败",
  323. });
  324. }
  325. })
  326. .catch(err => {
  327. console.log(err)
  328. uni.hideLoading();
  329. });
  330. },
  331. checkWeixin() {
  332. var ua = window.navigator.userAgent.toLowerCase();
  333. if (ua.match(/micromessenger/i) == 'micromessenger') {
  334. return true;
  335. } else {
  336. return false;
  337. }
  338. },
  339. //URL地址是否存在CODE
  340. getUrlCode(name) {
  341. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||
  342. [, ''
  343. ])[1]
  344. .replace(/\+/g, '%20')) || null
  345. },
  346. //获取微信CODE
  347. getWxCode() {
  348. //在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;
  349. //http://shequ.natapp1.cc/#/pages/index/index?deviceId=8
  350. var appId = "wx40593595e62f61ad";
  351. var url = "http://h5.yjf.runtzh.com";
  352. window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId +
  353. '&redirect_uri=' + encodeURIComponent(url + "/#/pages/auth/wxLogin") +
  354. '&response_type=code&scope=snsapi_userinfo&state=JeffreySu-954&connect_redirect=1#wechat_redirect';
  355. //console.log('https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent("http://shequ.natapp1.cc/#/pages/index/index?deviceId="+this.deviceId) +'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect')
  356. // redirect_uri是授权成功后,跳转的url地址,微信会帮我们跳转到该链接,并且通过?的形式拼接code
  357. },
  358. handleAgreement() {
  359. this.isAgreement = !this.isAgreement;
  360. },
  361. openH5(url) {
  362. var requestPath = uni.getStorageSync('requestPath');
  363. uni.setStorageSync('url', requestPath + url);
  364. uni.navigateTo({
  365. url: '../home/web'
  366. })
  367. },
  368. toForgetPassword(){
  369. uni.navigateTo({
  370. url: '/pages/auth/forgetPassword'
  371. })
  372. },
  373. getCode() {
  374. var that = this;
  375. this.utils.getProvider()
  376. .then(provider => {
  377. console.log('当前的环境商', provider)
  378. if (!provider) {
  379. reject()
  380. }
  381. // uni登录
  382. uni.login({
  383. provider: provider,
  384. success: async loginRes => {
  385. that.code = loginRes.code
  386. }
  387. })
  388. })
  389. .catch(err => {
  390. })
  391. },
  392. // 微信用户手机号登录
  393. phoneLogin(e) {
  394. var that = this;
  395. if (!this.isAgreement) {
  396. uni.showToast({
  397. icon: 'none',
  398. title: "请先同意协议后再登录",
  399. });
  400. return false;
  401. }
  402. uni.showLoading({
  403. title: "处理中..."
  404. })
  405. console.log(e, "e")
  406. if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
  407. this.utils.getProvider()
  408. .then(provider => {
  409. console.log('当前的环境商', provider)
  410. if (!provider) {
  411. reject()
  412. }
  413. // uni登录
  414. uni.login({
  415. provider: provider,
  416. success: async loginRes => {
  417. console.log(loginRes)
  418. let code = loginRes.code // 获取开发code
  419. var userCode = uni.getStorageSync('userCode');
  420. loginByMiniApp({
  421. encryptedData: e.mp.detail.encryptedData,
  422. iv: e.mp.detail.iv,
  423. code: code,
  424. userCode: userCode
  425. })
  426. .then(res => {
  427. if (res.code == 200) {
  428. uni.hideLoading();
  429. uni.showToast({
  430. icon: 'none',
  431. title: "登录成功",
  432. });
  433. uni.setStorageSync('AppToken', res.token);
  434. uni.setStorageSync('userInfo', res.user);
  435. uni.hideLoading()
  436. //that.getUserInfo()
  437. uni.$emit('refreshLogin');
  438. uni.navigateBack({
  439. delta: 1
  440. })
  441. } else {
  442. uni.hideLoading();
  443. uni.showToast({
  444. icon: 'none',
  445. title: "授权登录失败,请重新登录",
  446. });
  447. }
  448. })
  449. .catch(error => {
  450. console.log(error)
  451. uni.hideLoading();
  452. })
  453. }
  454. })
  455. })
  456. .catch(err => {
  457. uni.showToast({
  458. icon: 'none',
  459. title: err,
  460. });
  461. })
  462. } else {
  463. uni.showToast({
  464. title: '已拒绝授权',
  465. icon: 'none',
  466. duration: 2000,
  467. })
  468. }
  469. },
  470. back() {
  471. uni.switchTab({
  472. url: '/pages/home/index'
  473. });
  474. // uni.navigateBack()
  475. }
  476. }
  477. }
  478. </script>
  479. <style lang="scss">
  480. .container {
  481. flex: 1;
  482. padding: 0 24rpx;
  483. display: flex;
  484. flex-direction: column;
  485. justify-content: flex-start;
  486. position: relative;
  487. .bg {
  488. width: 100%;
  489. position: absolute;
  490. top: 0;
  491. left: 0;
  492. }
  493. .backImg {
  494. display: flex;
  495. align-items: center;
  496. image {
  497. width: 40rpx;
  498. height: 40rpx;
  499. }
  500. margin-left: 32rpx;
  501. // position: absolute;
  502. // left: 30rpx;
  503. // z-index: 100;
  504. }
  505. }
  506. .force-login-wrap {
  507. width: 100%;
  508. height: 100vh;
  509. position: relative;
  510. .top-title {
  511. padding: 0 32rpx;
  512. text-align: left;
  513. margin-top: 20rpx;
  514. .title-text {
  515. font-weight: 600;
  516. font-size: 48rpx;
  517. color: #333333;
  518. margin-bottom: 20rpx;
  519. .blue {
  520. color: #157CF8;
  521. }
  522. }
  523. .login-notice {
  524. font-weight: 400;
  525. font-size: 32rpx;
  526. color: #666666;
  527. line-height: 40rpx;
  528. }
  529. }
  530. .force-login__content {
  531. margin-top: 54rpx;
  532. padding: 0 32rpx;
  533. position: relative;
  534. .bg-type {
  535. width: 100%;
  536. position: absolute;
  537. top: 0;
  538. left: 0;
  539. }
  540. .logintype {
  541. display: flex;
  542. align-items: center;
  543. margin-bottom: 66rpx;
  544. border-bottom: 2rpx solid #f0f0f0;
  545. .line {
  546. margin: 0 32rpx;
  547. width: 2rpx;
  548. height: 32rpx;
  549. background: #D7E1F0;
  550. border-radius: 0rpx 0rpx 0rpx 0rpx;
  551. }
  552. .logintype-item {
  553. // flex: 1;
  554. text-align: center;
  555. padding-top: 36rpx;
  556. padding-bottom: 48rpx;
  557. font-family: PingFang SC, PingFang SC;
  558. font-weight: 400;
  559. font-size: 32rpx;
  560. color: #666666;
  561. position: relative;
  562. &.active {
  563. font-size: 36rpx;
  564. color: #333333;
  565. font-weight: 600;
  566. &::after {
  567. content: '';
  568. position: absolute;
  569. bottom: 30rpx;
  570. left: 50%;
  571. transform: translateX(-50%);
  572. width: 52rpx;
  573. height: 6rpx;
  574. background: #157CF8;
  575. border-radius: 42rpx;
  576. }
  577. }
  578. }
  579. }
  580. .input-form {
  581. margin-bottom: 60rpx;
  582. .input-item {
  583. background: #FFFFFF;
  584. border-radius: 16rpx;
  585. padding: 30rpx 40rpx;
  586. margin-bottom: 48rpx;
  587. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
  588. &::last-child {
  589. margin-bottom: 0
  590. }
  591. .input-field {
  592. width: 100%;
  593. font-size: 30rpx;
  594. font-family: PingFang SC;
  595. color: #333333;
  596. &::placeholder {
  597. color: #CCCCCC;
  598. }
  599. }
  600. .mima {
  601. width: 100%;
  602. display: flex;
  603. align-items: center;
  604. justify-content: space-between;
  605. image {
  606. width: 32rpx;
  607. height: 32rpx;
  608. }
  609. }
  610. &.code-input-item {
  611. display: flex;
  612. align-items: center;
  613. .code-input {
  614. flex: 1;
  615. }
  616. .get-code-btn {
  617. font-size: 28rpx;
  618. font-family: PingFang SC;
  619. font-weight: 500;
  620. color: #157CF8;
  621. padding-left: 20rpx;
  622. white-space: nowrap;
  623. }
  624. }
  625. }
  626. }
  627. .forgot {
  628. font-weight: 400;
  629. font-size: 24rpx;
  630. color: #388BFF;
  631. line-height: 40rpx;
  632. display: flex;
  633. justify-content: flex-end;
  634. margin: -40rpx 0 24rpx;
  635. }
  636. .encoding {
  637. width: 100%;
  638. height: 104rpx;
  639. line-height: 104rpx;
  640. text-align: center;
  641. background: #EDEFF2;
  642. border-radius: 16rpx 16rpx 16rpx 16rpx;
  643. font-size: 32rpx;
  644. color: #999999;
  645. }
  646. .login-btn-wrap {
  647. margin-bottom: 40rpx;
  648. margin-top: 140rpx;
  649. .login-btn {
  650. width: 100%;
  651. height: 88rpx;
  652. background: rgba(56, 139, 255, 1);
  653. border-radius: 44rpx;
  654. font-size: 32rpx;
  655. font-family: PingFang SC;
  656. font-weight: 500;
  657. color: #FFFFFF;
  658. border: none;
  659. display: flex;
  660. align-items: center;
  661. justify-content: center;
  662. &::after {
  663. border: none;
  664. }
  665. }
  666. }
  667. }
  668. }
  669. .tips {
  670. display: flex;
  671. justify-content: center;
  672. align-items: center;
  673. font-size: 24rpx;
  674. color: #666666;
  675. flex-wrap: nowrap;
  676. padding: 0 60rpx;
  677. checkbox {
  678. margin-right: 10rpx;
  679. flex-shrink: 0;
  680. transform: scale(0.8);
  681. }
  682. .tips-text {
  683. margin-right: 4rpx;
  684. white-space: nowrap;
  685. }
  686. .btn {
  687. color: #157CF8;
  688. margin: 0 2rpx;
  689. white-space: nowrap;
  690. }
  691. }
  692. .wx-login {
  693. background: rgba(0, 0, 0, 0.7);
  694. z-index: 99999;
  695. position: fixed;
  696. top: 0;
  697. left: 0;
  698. height: 100%;
  699. width: 100%;
  700. display: flex;
  701. align-items: center;
  702. justify-content: center;
  703. .form {
  704. border-radius: 20rpx;
  705. padding: 60rpx 30rpx;
  706. width: 500upx;
  707. height: 300upx;
  708. background-color: #fff;
  709. .title {
  710. font-size: 32upx;
  711. font-family: PingFang SC;
  712. font-weight: bold;
  713. }
  714. .desc {
  715. font-size: 28upx;
  716. margin: 60upx 0upx 60upx 0upx;
  717. font-family: PingFang SC;
  718. font-weight: 500;
  719. }
  720. .btn-box {
  721. margin-top: 30rpx;
  722. width: 100%;
  723. display: flex;
  724. align-items: center;
  725. justify-content: center;
  726. .btn {
  727. display: flex;
  728. align-items: center;
  729. justify-content: center;
  730. margin-left: 10upx;
  731. width: 50%;
  732. height: 80rpx;
  733. border-radius: 5rpx;
  734. background-color: #0bb3f2;
  735. font-size: 30rpx;
  736. font-family: PingFang SC;
  737. font-weight: 500;
  738. color: #fff;
  739. position: relative;
  740. }
  741. .btn-close {
  742. margin-right: 10upx;
  743. width: 50%;
  744. height: 80rpx;
  745. border-radius: 5rpx;
  746. border: 2rpx solid #0bb3f2;
  747. background: none;
  748. font-size: 30rpx;
  749. font-family: PingFang SC;
  750. font-weight: 500;
  751. color: #0bb3f2;
  752. }
  753. }
  754. }
  755. }
  756. .auth_btn {
  757. width: 100%;
  758. height: 100%;
  759. top: 0upx;
  760. position: absolute;
  761. opacity: 0.0;
  762. }
  763. </style>