login.vue 18 KB

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