ipad.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861
  1. <template>
  2. <view class="content" :class="{ blueBg: actionInd != 1, greenBg: actionInd == 1 }">
  3. <view class="coupon_transfer">
  4. <view class="erwema">
  5. <view class="qrbox">
  6. <view class="payMoney" v-if="actionInd == 1">收款码</view>
  7. <tki-qrcodes :cid="cid" ref="qrcode" :val="val" :size="size" :unit="unit" :background="background"
  8. :foreground="foreground" :pdground="pdground" :icon="icon" :iconSize="iconSize" :lv="lv"
  9. :onval="onval" :loadMake="loadMake" :usingComponents="usingComponents"
  10. @result="qrR"></tki-qrcodes>
  11. <!-- <view class="setMoney" @click="openApp">
  12. 设置金额
  13. </view> -->
  14. <view class="setType flex" v-if="actionInd == 0" @click="showChooseType">
  15. <image :src="showType[showPayType].img" mode="" class="type-logo"></image>
  16. <view class="type-wrapper">
  17. <view class="type-tit">{{ showType[showPayType].tit }}</view>
  18. <view class="type-info">使用{{ showType[showPayType].tit }}支付</view>
  19. </view>
  20. <view class="sele-wrap">
  21. <image src="../../static/img/back.png" mode="" class="selecte-ic"></image>
  22. </view>
  23. </view>
  24. </view>
  25. </view>
  26. </view>
  27. </view>
  28. </template>
  29. <script>
  30. import tkiQrcodes from '@/components/tki-qrcode/tki-qrcode.vue';
  31. import uniPopup from '@/components/uni-popup/uni-popup.vue';
  32. import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue';
  33. import uniPopupMessage from '@/components/uni-popup/uni-popup-message.vue';
  34. import {
  35. m_spread
  36. } from '@/api/user.js';
  37. import {
  38. getUserInfo
  39. } from '@/api/login.js';
  40. import {
  41. receivedCollectionCode,
  42. receivedPaymentCode,
  43. receivedCodeState,
  44. receivedPaymentCreate,
  45. receivedLst,
  46. collectionLst,
  47. collectionSetTip
  48. } from '@/api/received.js';
  49. // #ifdef H5
  50. import {
  51. mapState,
  52. mapMutations
  53. } from 'vuex';
  54. import {
  55. weixindata
  56. } from '@/utils/wxAuthorized';
  57. // #endif
  58. import Voice from '@/utils/QS-baiduyy.js';
  59. export default {
  60. components: {
  61. tkiQrcodes,
  62. uniPopup,
  63. uniPopupDialog,
  64. uniPopupMessage
  65. },
  66. // #ifdef H5
  67. computed: {
  68. ...mapState(['weichatObj'])
  69. },
  70. // #endif
  71. data() {
  72. return {
  73. spread_uid: '',
  74. isSkm: false,
  75. showPayType: 0,
  76. payType: 0, //付款码type 0-余额 1-消费券 2-积分
  77. payTypeShow: 0, //付款码type 0-余额 1-消费券 2-积分
  78. url: '',
  79. uid: '',
  80. qrsize: 80, // 二维码大小
  81. cid: 'tki-qrcode-canvas', //canvasId,页面存在多个二维码组件时需设置不同的ID
  82. size: 500, //生成的二维码大小
  83. unit: 'upx', //大小单位尺寸
  84. // show: true,//默认使用组件中的image标签显示二维码
  85. val: '', //要生成的内容
  86. background: '#ffffff', //二维码背景色
  87. foreground: '#333333', //二维码前景色
  88. pdground: '#333333', //二维码角标色
  89. icon: '', //二维码图标URL(必须是本地图片,网络图需要先下载至本地)
  90. iconSize: 40, //二维码图标大小
  91. lv: 3, //容错级别
  92. onval: true, //监听val值变化自动重新生成二维码
  93. loadMake: false, //组件初始化完成后自动生成二维码,val需要有值
  94. usingComponents: false, //是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题)
  95. showLoading: false, //是否显示loading
  96. loadingText: '二维码生成中', //loading文字
  97. src: '', // 二维码生成后的图片地址或base64
  98. ratio: 1, //页面比例用于计算
  99. ctxSrc: '', //要显示的图片
  100. loading: true, //是否载入图片中
  101. canHeight: '',
  102. canWeidth: '',
  103. userinfo: {}, //用户信息
  104. actionInd: 1, //默认展示收款码
  105. setTimeOutPay: null, //付款倒计时
  106. getMoneyList: null, //收款记录倒计时倒计时
  107. showSqr: true,
  108. code: '', //保存扫码code
  109. indexNum: 0, //默认没有商品
  110. showType: [{
  111. type: 0,
  112. tit: '余额',
  113. img: '../../static/img/yue.png'
  114. },
  115. {
  116. type: 1,
  117. tit: '消费券',
  118. img: '../../static/icon/xfq.png'
  119. },
  120. {
  121. type: 2,
  122. tit: '积分',
  123. img: '../../static/icon/jf.png'
  124. }
  125. ]
  126. };
  127. },
  128. onLoad(option) {
  129. this.loadlist;
  130. if (option.token) {
  131. uni.setStorageSync('token', option.token);
  132. }
  133. console.log(option.token);
  134. // this.userinfo = uni.getStorageSync('userInfo');
  135. // 加载用户数据
  136. this.getUserInfo();
  137. // #ifdef H5
  138. // 获取是否为微信内核浏览器
  139. this.showSqr = uni.getStorageSync('weichatBrowser') || false;
  140. weixindata();
  141. // #endif
  142. },
  143. onReady() {
  144. // Voice('成功收款100000000元')
  145. },
  146. onShow() {
  147. // 开启倒计时
  148. this.setTimePay();
  149. uni.showModal({
  150. title: '提示',
  151. content: '是否开启语音播报',
  152. success: function(res) {
  153. if (res.confirm) {
  154. Voice({
  155. voiceSet: {
  156. tex: '开启语音播报'
  157. },
  158. audioSet: {
  159. volume: 1
  160. },
  161. lineUp: true // 加入语音队列
  162. });
  163. } else if (res.cancel) {
  164. console.log('用户点击取消');
  165. }
  166. }
  167. });
  168. },
  169. onHide() {
  170. this.outInterval();
  171. },
  172. // 监听页面卸载
  173. onUnload() {
  174. // 关闭倒计时
  175. this.outInterval();
  176. },
  177. // 监听页面后退
  178. onBackPress() {
  179. // 关闭倒计时
  180. this.outInterval();
  181. },
  182. methods: {
  183. // 关闭倒计时
  184. outInterval() {
  185. clearInterval(this.setTimeOutPay);
  186. clearInterval(this.getMoneyList);
  187. },
  188. // 获取收款记录
  189. collectionLst() {
  190. collectionLst()
  191. .then(e => {
  192. console.log(e);
  193. // 循环处理播报语音
  194. e.data.data.forEach((d, ind) => {
  195. Voice({
  196. voiceSet: {
  197. tex: '满园春收款' + (+d.amount - d.service_charge) + '元',
  198. },
  199. audioSet: {
  200. volume: 1
  201. },
  202. lineUp: true // 加入语音队列
  203. });
  204. //清除记录
  205. collectionSetTip({
  206. id: d.id
  207. });
  208. });
  209. })
  210. .catch(e => {});
  211. },
  212. // 获取用户信息
  213. getUserInfo() {
  214. let obj = this;
  215. getUserInfo({})
  216. .then(({
  217. data
  218. }) => {
  219. obj.userinfo = data;
  220. // 加载收款码
  221. obj.receivedCollectionCode();
  222. // 调用循环
  223. // obj.setTimePay();
  224. // #ifdef H5
  225. // uni.showModal({
  226. // title: '提示',
  227. // content: '打开支付提示成功!',
  228. // showCancel: false
  229. // });
  230. // #endif
  231. })
  232. .catch(e => {
  233. console.log(e);
  234. });
  235. },
  236. /**
  237. * 点击取消按钮触发
  238. * @param {Object} done
  239. */
  240. close(done) {
  241. // TODO 做一些其他的事情,before-close 为true的情况下,手动执行 done 才会关闭对话框
  242. // ...
  243. done();
  244. },
  245. /**
  246. * 点击确认按钮触发
  247. * @param {Object} done
  248. * @param {Object} value
  249. */
  250. confirm(done, value) {
  251. // 输入框的值
  252. console.log(this.code, value, this.payTypeShow, '+++++++++++++++++++');
  253. receivedPaymentCreate({
  254. code: this.code,
  255. amount: value,
  256. type: this.payTypeShow
  257. })
  258. .then(e => {
  259. console.log(e, '123456');
  260. uni.showModal({
  261. title: '提示',
  262. content: '成功',
  263. showCancel: false
  264. });
  265. })
  266. .catch(e => {
  267. uni.showModal({
  268. title: '提示',
  269. content: e.message,
  270. showCancel: false
  271. });
  272. console.log(e);
  273. });
  274. // TODO 做一些其他的事情,手动执行 done 才会关闭对话框
  275. // ...
  276. done();
  277. },
  278. // payVdeo(){
  279. // var mess = document.getElementById('ttsText').value;
  280. // var msg = new SpeechSynthesisUtterance(mess);
  281. // msg.volume = 100;
  282. // msg.rate = 1;
  283. // msg.pitch = 1.5;
  284. // console.log(msg);
  285. // window.speechSynthesis.speak(msg);
  286. // },
  287. // 开启循环倒计时
  288. setTimePay() {
  289. // 判断当前是否为付款码
  290. if (this.actionInd == 0) {
  291. this.setTimeOutPay = setInterval(() => {
  292. this.receivedCodeState();
  293. }, 5000);
  294. }
  295. // 获取首付款信息
  296. this.getMoneyList = setInterval(e => {
  297. this.collectionLst();
  298. }, 5000);
  299. },
  300. bang() {
  301. this.$refs.bang.open();
  302. },
  303. cancelpass() {
  304. this.$refs.bang.close();
  305. this.spread_uid = '';
  306. },
  307. // 绑定上级
  308. cast() {
  309. m_spread({
  310. spread_uid: this.spread_uid
  311. }).then(e => {
  312. this.getUserInfo();
  313. this.$api.msg('绑定成功');
  314. });
  315. },
  316. // 判断付款码是否可以使用
  317. receivedCodeState() {
  318. let obj = this;
  319. // 查询是否过期
  320. receivedCodeState({
  321. code: obj.val
  322. })
  323. .then(e => {
  324. // 无效
  325. if (e.msg == 'overdue') {
  326. obj.receivedPaymentCode();
  327. }
  328. // 已使用
  329. else if (e.msg == 'use') {
  330. uni.showModal({
  331. title: '提示',
  332. content: '已支付成功',
  333. showCancel: false
  334. });
  335. obj.receivedPaymentCode();
  336. }
  337. })
  338. .catch(e => {
  339. console.log(e);
  340. });
  341. },
  342. // 开启验证是否已经过期或使用付款成功
  343. // receivedCodeState(){
  344. // },
  345. // 跳转到记录页面
  346. openList() {
  347. clearInterval(this.setTimeOutPay);
  348. clearInterval(this.getMoneyList);
  349. // this.$refs.popup1.open();
  350. // uni.navigateTo({
  351. // url: '/pages/wallet/wallet'
  352. // });
  353. uni.navigateTo({
  354. url: './list'
  355. });
  356. },
  357. //点击首付款事件
  358. clickItem(item) {
  359. // 更新付款码
  360. if (item === 0) {
  361. this.receivedPaymentCode();
  362. this.outInterval();
  363. this.setTimePay();
  364. uni.setNavigationBarColor({
  365. backgroundColor: '#4b8fdb',
  366. frontColor: '#ffffff',
  367. success: e => {
  368. console.log(e);
  369. },
  370. fail: function(e) {
  371. console.log(e);
  372. }
  373. });
  374. }
  375. // 更新收款码
  376. if (item === 1) {
  377. clearInterval(this.setTimeOutPay);
  378. uni.setNavigationBarColor({
  379. backgroundColor: '#5DBC7C',
  380. frontColor: '#ffffff',
  381. success: e => {
  382. console.log(e);
  383. },
  384. fail: function(e) {
  385. console.log(e);
  386. }
  387. });
  388. this.receivedCollectionCode();
  389. }
  390. // 扫码收付款
  391. if (item === 2) {
  392. clearInterval(this.setTimeOutPay);
  393. this.ToChangeInto();
  394. return;
  395. }
  396. // 赋值
  397. this.actionInd = item;
  398. },
  399. // 扫码
  400. ToChangeInto() {
  401. let obj = this;
  402. // #ifdef H5
  403. this.weichatObj.scanQRCode({
  404. needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
  405. scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
  406. success: function(res) {
  407. let i = res.resultStr.split(',');
  408. obj.code = i[0];
  409. obj.payTypeShow = i[1] * 1;
  410. obj.isSkm = /^\d+$/.test(obj.code);
  411. obj.$refs.popup1.open();
  412. }
  413. });
  414. // #endif
  415. // #ifndef H5
  416. uni.scanCode({
  417. onlyFromCamera: true,
  418. success: function(e) {
  419. let i = e.result.split(',');
  420. obj.code = i[0];
  421. obj.isSkm = /^\d+$/.test(obj.code);
  422. console.log(obj.isSkm);
  423. obj.payTypeShow = i[1] * 1;
  424. obj.$refs.popup1.open();
  425. }
  426. });
  427. // #endif
  428. },
  429. // 扫码成功数据处理
  430. scanQR(e) {},
  431. // 获取付款码
  432. receivedPaymentCode() {
  433. receivedPaymentCode({
  434. type: this.payType
  435. })
  436. .then(e => {
  437. this.val = e.data.code;
  438. let code = ',' + this.payType;
  439. this.val += code;
  440. console.log(e);
  441. })
  442. .catch(e => {
  443. console.log(e);
  444. });
  445. },
  446. // 获取收款码
  447. receivedCollectionCode() {
  448. receivedCollectionCode()
  449. .then(e => {
  450. this.val = e.msg;
  451. console.log(e);
  452. })
  453. .catch(e => {
  454. console.log(e);
  455. });
  456. },
  457. // 創建二维码
  458. creatQrcode() {
  459. console.log(this.$refs.qrcode._makeCode);
  460. this.$refs.qrcode._makeCode();
  461. },
  462. // 保存二维码到图库
  463. saveQrcode() {
  464. this.$refs.qrcode._saveCode();
  465. },
  466. // 生成二维码后返回base64
  467. qrR(res) {
  468. this.src = res;
  469. },
  470. //清空二维码(清空二维码会触发result回调 返回值为空)
  471. clearQrcode(e) {
  472. this.$refs.qrcode._clearCode();
  473. this.val = '';
  474. },
  475. // 保存二维码
  476. upload() {
  477. this.$refs.qrcode._saveCode();
  478. },
  479. openApp() {
  480. let weixinObj = require('jweixin-module');
  481. },
  482. showChooseType() {
  483. this.$refs.popupPay.open();
  484. },
  485. changePayType(index) {
  486. this.payType = index;
  487. },
  488. qrchange() {
  489. this.showPayType = this.payType;
  490. this.$refs.popupPay.close();
  491. console.log(this.payType);
  492. this.clickItem(0);
  493. },
  494. changeShowPayType(e) {
  495. this.payTypeShow = e;
  496. }
  497. }
  498. };
  499. </script>
  500. <style lang="scss">
  501. .content,
  502. page {
  503. // border-top: 2rpx solid #f2f3f5;
  504. background-color: $base-color;
  505. height: 100%;
  506. }
  507. // 共有底部高度
  508. $btHeight: 100rpx;
  509. .btHeight {
  510. height: $btHeight;
  511. }
  512. .greenBg {
  513. background-color: $base-color;
  514. }
  515. .blueBg {
  516. background-color: #4b8fdb;
  517. }
  518. .coupon_transfer {
  519. // background-color: #ffffff;
  520. padding: 20rpx 25rpx;
  521. padding-top: 50rpx;
  522. // padding-bottom: 130rpx;
  523. width: 100%;
  524. // margin-top: 25rpx;
  525. .user {
  526. margin-bottom: -125rpx;
  527. height: 200rpx;
  528. line-height: 1;
  529. .imgbox {
  530. margin: 0 auto;
  531. text-align: center;
  532. .img {
  533. width: 150rpx;
  534. height: 150rpx;
  535. border-radius: 999rpx;
  536. }
  537. }
  538. .niceName {
  539. text-align: center;
  540. font-size: $font-lg;
  541. margin-top: 15rpx;
  542. font-weight: bold;
  543. color: $font-color-dark;
  544. }
  545. }
  546. }
  547. .erwema {
  548. width: 686rpx;
  549. // height: 817rpx;
  550. height: 900rpx;
  551. background-color: #ffffff;
  552. padding-top: 100rpx;
  553. display: flex;
  554. justify-content: center;
  555. align-items: center;
  556. margin: 0rpx auto;
  557. .setType {
  558. height: 130rpx;
  559. justify-content: flex-start;
  560. .type-wrapper {
  561. text-align: left;
  562. flex-grow: 1;
  563. }
  564. .type-logo {
  565. width: 56rpx;
  566. height: 54rpx;
  567. flex-shrink: 0;
  568. margin-right: 10rpx;
  569. }
  570. .sele-wrap {
  571. width: 50rpx;
  572. height: 100%;
  573. flex-shrink: 0;
  574. display: flex;
  575. align-items: center;
  576. .selecte-ic {
  577. justify-items: flex-end;
  578. width: 13rpx;
  579. height: 36rpx;
  580. transform: rotate(-90deg);
  581. }
  582. }
  583. }
  584. .qrbox {
  585. width: 500rpx;
  586. text-align: center;
  587. font-weight: bold;
  588. .payMoney {
  589. font-size: 50rpx;
  590. // margin-top: 80rpx;
  591. color: $font-color-dark;
  592. font-weight: bold;
  593. }
  594. .setMoney {
  595. font-size: $font-base;
  596. color: $base-color;
  597. margin-top: 20rpx;
  598. }
  599. }
  600. }
  601. /deep/ .qrbox .img {
  602. margin-top: -500rpx !important;
  603. }
  604. /deep/ .tki-qrcode {
  605. // height: 500rpx;
  606. line-height: 0;
  607. margin-top: 10rpx;
  608. }
  609. .bottomTab {
  610. padding: 50rpx;
  611. padding-top: 20rpx;
  612. // position: fixed;
  613. // padding-bottom: 50rpx;
  614. // left: 0;
  615. // bottom: 0;
  616. width: 100%;
  617. .item1 {
  618. text-align: center;
  619. color: #ffffff;
  620. opacity: 0.7;
  621. flex-grow: 1;
  622. line-height: 1;
  623. .img {
  624. width: 80rpx;
  625. height: 80rpx;
  626. }
  627. .text {
  628. font-size: $font-lg;
  629. }
  630. &.action {
  631. opacity: 1;
  632. }
  633. }
  634. }
  635. .popup-box {
  636. position: relative;
  637. z-index: 100;
  638. width: 100%;
  639. height: auto;
  640. background: #ffffff;
  641. .popup-pay {
  642. position: relative;
  643. justify-content: space-between;
  644. // padding: 0rpx 25rpx 32rpx 25rpx;
  645. .paybox-top {
  646. padding-top: 38rpx;
  647. padding-left: 32rpx;
  648. width: 100%;
  649. .type {
  650. font-size: 28rpx;
  651. font-family: PingFang SC;
  652. font-weight: bold;
  653. color: #333333;
  654. }
  655. .image {
  656. padding-right: 24rpx;
  657. padding-bottom: 10rpx;
  658. image {
  659. width: 16rpx;
  660. height: 16rpx;
  661. }
  662. }
  663. }
  664. .paybox-main {
  665. padding-left: 40rpx;
  666. width: 100%;
  667. margin-top: 54rpx;
  668. margin-bottom: 54rpx;
  669. .zftype {
  670. padding-left: 5rpx;
  671. image {
  672. width: 38rpx;
  673. height: 40rpx;
  674. }
  675. .zf {
  676. padding-left: 18rpx;
  677. font-size: 28rpx;
  678. font-family: PingFang SC;
  679. font-weight: 400;
  680. color: #3f454b;
  681. }
  682. }
  683. }
  684. .paybtn {
  685. width: 750rpx;
  686. line-height: 93rpx;
  687. background: #75ba82;
  688. font-size: 32rpx;
  689. font-family: PingFang SC;
  690. font-weight: bold;
  691. color: #ffffff;
  692. text-align: center;
  693. }
  694. }
  695. .buttom {
  696. position: relative;
  697. z-index: 100;
  698. width: 100%;
  699. height: 113rpx;
  700. padding-top: 20rpx;
  701. align-items: center;
  702. .heji {
  703. height: 100%;
  704. width: 50%;
  705. padding-left: 23rpx;
  706. padding-top: 20rpx;
  707. font-size: 28rpx;
  708. font-family: PingFang SC;
  709. font-weight: 400;
  710. color: #3f454b;
  711. text {
  712. font-size: 24rpx;
  713. font-family: PingFang SC;
  714. font-weight: bold;
  715. color: #ff0000;
  716. .money {
  717. font-size: 36rpx;
  718. }
  719. }
  720. }
  721. .zhifu {
  722. width: 50%;
  723. height: 92rpx;
  724. background: #5dbc7c;
  725. text-align: center;
  726. line-height: 92rpx;
  727. font-size: 32rpx;
  728. font-family: PingFang SC;
  729. font-weight: bold;
  730. color: #ffffff;
  731. }
  732. }
  733. }
  734. .add-btn {
  735. position: fixed;
  736. left: 30rpx;
  737. right: 30rpx;
  738. bottom: 16rpx;
  739. z-index: 95;
  740. display: flex;
  741. align-items: center;
  742. justify-content: center;
  743. width: 690rpx;
  744. height: 80rpx;
  745. font-size: $font-lg;
  746. color: #fff;
  747. border-radius: 10rpx;
  748. }
  749. .psw-wrapper {
  750. width: 634rpx;
  751. .tc-bg {
  752. width: 634rpx;
  753. height: 275rpx;
  754. vertical-align: top;
  755. }
  756. .psw-wrapper-main {
  757. position: relative;
  758. z-index: 3;
  759. margin-top: -10rpx;
  760. padding: 26rpx 62rpx 45rpx;
  761. width: 634rpx;
  762. background: #ffffff;
  763. }
  764. .psw-title {
  765. width: 100%;
  766. font-size: 34rpx;
  767. font-family: Source Han Sans CN;
  768. font-weight: bold;
  769. color: #161222;
  770. padding: 10rpx 0 40rpx;
  771. text-align: center;
  772. }
  773. .psw-ipt {
  774. padding: 0 20rpx;
  775. width: 510rpx;
  776. height: 80rpx;
  777. background: #e4eef7;
  778. border-radius: 10rpx;
  779. }
  780. .psw-btn {
  781. width: 510rpx;
  782. height: 80rpx;
  783. background: linear-gradient(270deg, #558dff, #aa6bff);
  784. border-radius: 10rpx;
  785. font-size: 34rpx;
  786. font-family: PingFang SC;
  787. font-weight: 500;
  788. color: #ffffff;
  789. line-height: 80rpx;
  790. text-align: center;
  791. margin-top: 30rpx;
  792. }
  793. .x {
  794. width: 80rpx;
  795. height: 80rpx;
  796. margin: 32rpx auto 0;
  797. image {
  798. width: 100%;
  799. height: 100%;
  800. }
  801. }
  802. }
  803. </style>