index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785
  1. <template>
  2. <view class="page" v-if="payPriceShow">
  3. <view class="pay-price">
  4. <view class="price">
  5. <text class="unit">{{$t(`¥`)}}</text>
  6. <numberScroll :num='payPriceShow' color="#E93323" width='30' height='50' fontSize='50'></numberScroll>
  7. </view>
  8. <view class="count-down">
  9. {{$t(`支付剩余时间`)}}:
  10. <countDown :is-day="false" :tip-text="' '" :day-text="' '" :hour-text="' : '" :minute-text="' : '"
  11. :second-text="' '" :datatime="invalidTime"></countDown>
  12. </view>
  13. </view>
  14. <view class="payment">
  15. <view class="title">
  16. {{$t(`支付方式`)}}
  17. </view>
  18. <view class="item acea-row row-between-wrapper" v-for="(item,index) in cartArr" :key="index"
  19. v-show='item.payStatus' @click="payType(item.number || 0, item.value, index)">
  20. <view class="left acea-row row-between-wrapper">
  21. <view class="iconfont" :class="item.icon"></view>
  22. <view class="text">
  23. <view class="name">{{$t(item.name)}}</view>
  24. <view class="info" v-if="item.value == 'yue'">
  25. {{$t(item.title)}} <span class="money">{{$t(`¥`)}}{{ item.number }}</span>
  26. </view>
  27. <view class="info" v-else>{{$t(item.title)}}</view>
  28. </view>
  29. </view>
  30. <view class="iconfont" :class="active==index?'icon-xuanzhong11 font-num':'icon-weixuan'"></view>
  31. </view>
  32. </view>
  33. <view class="btn">
  34. <view class="button acea-row row-center-wrapper" @click='goPay(number, paytype)'>{{$t(`确认支付`)}}</view>
  35. <view class="wait-pay" @click="waitPay">{{$t(`暂不支付`)}}</view>
  36. </view>
  37. <view v-show="false" v-html="formContent"></view>
  38. </view>
  39. </view>
  40. </template>
  41. <script>
  42. import countDown from '@/components/countDown';
  43. import numberScroll from '@/components/numberScroll.vue'
  44. import {
  45. getCashierOrder,
  46. orderPay
  47. } from '@/api/order.js';
  48. import {
  49. basicConfig
  50. } from '@/api/public.js'
  51. export default {
  52. components: {
  53. countDown,
  54. numberScroll
  55. },
  56. data() {
  57. return {
  58. checked: false,
  59. datatime: 1676344056,
  60. //支付方式
  61. cartArr: [{
  62. "name": this.$t(`微信支付`),
  63. "icon": "icon-weixin2",
  64. value: 'weixin',
  65. title: this.$t(`使用微信快捷支付`),
  66. payStatus: 1,
  67. },
  68. {
  69. "name": this.$t(`支付宝支付`),
  70. "icon": "icon-zhifubao",
  71. value: 'alipay',
  72. title: this.$t(`使用支付宝支付`),
  73. payStatus: 1,
  74. },
  75. {
  76. "name": this.$t(`余额支付`),
  77. "icon": "icon-yuezhifu",
  78. value: 'yue',
  79. title: this.$t(`可用余额`),
  80. payStatus: 1,
  81. },
  82. {
  83. "name": this.$t(`线下支付`),
  84. "icon": "icon-yuezhifu1",
  85. value: 'offline',
  86. title: this.$t(`使用线下付款`),
  87. payStatus: 2,
  88. }, {
  89. "name": this.$t(`好友代付`),
  90. "icon": "icon-haoyoudaizhifu",
  91. value: 'friend',
  92. title: this.$t(`找微信好友支付`),
  93. payStatus: 1,
  94. }
  95. ],
  96. orderId: 0,
  97. fromType: '',
  98. active: 0,
  99. payPrice: 0,
  100. payPriceShow: 0,
  101. payPostage: 0,
  102. offlinePostage: false,
  103. invalidTime: 0,
  104. initIn: false,
  105. jumpData: {
  106. orderId: '',
  107. msg: ''
  108. },
  109. formContent: ''
  110. }
  111. },
  112. watch: {
  113. cartArr: {
  114. handler(newV, oldValue) {
  115. let newPayList = [];
  116. newV.forEach((item, index) => {
  117. if (item.payStatus) {
  118. item.index = index;
  119. newPayList.push(item)
  120. }
  121. });
  122. this.$nextTick(e => {
  123. this.active = newPayList[0].index;
  124. this.paytype = newPayList[0].value;
  125. })
  126. },
  127. immediate: true,
  128. deep: true
  129. }
  130. },
  131. onLoad(options) {
  132. if (options.order_id) this.orderId = options.order_id
  133. if (options.from_type) this.fromType = options.from_type
  134. this.getBasicConfig()
  135. },
  136. onShow() {
  137. let options = wx.getEnterOptionsSync();
  138. if (options.scene == '1038' && options.referrerInfo.appId == 'wxef277996acc166c3' && this.initIn) {
  139. // 代表从收银台小程序返回
  140. let extraData = options.referrerInfo.extraData;
  141. this.initIn = false
  142. if (!extraData) {
  143. // "当前通过物理按键返回,未接收到返参,建议自行查询交易结果";
  144. this.$util.Tips({
  145. title: this.$t(`取消支付`)
  146. }, {
  147. tab: 5,
  148. url: `/pages/goods/order_pay_status/index?order_id=${this.orderId}&msg=${this.$t(`取消支付`)}&type=3&totalPrice=${this.payPriceShow}&status=2`
  149. });
  150. } else {
  151. if (extraData.code == 'success') {
  152. this.$util.Tips({
  153. title: this.$t(`支付成功`),
  154. icon: 'success'
  155. }, {
  156. tab: 5,
  157. url: `/pages/goods/order_pay_status/index?order_id=${this.orderId}&msg=${this.jumpData.msg}&type=3&totalPrice=${this.payPriceShow}`
  158. });
  159. } else if (extraData.code == 'cancel') {
  160. // "支付已取消";
  161. this.$util.Tips({
  162. title: this.$t(`取消支付`)
  163. }, {
  164. tab: 5,
  165. url: `/pages/goods/order_pay_status/index?order_id=${this.orderId}&msg=${this.$t(`取消支付`)}&type=3&totalPrice=${this.payPriceShow}&status=2`
  166. });
  167. } else {
  168. // "支付失败:" + extraData.errmsg;
  169. uni.reLaunch({
  170. url: `/pages/goods/order_pay_status/index?order_id=${this.orderId}&msg=${this.$t(`支付失败`)}&totalPrice=${this.payPriceShow}`
  171. })
  172. }
  173. }
  174. }
  175. },
  176. methods: {
  177. getBasicConfig() {
  178. basicConfig().then(res => {
  179. //微信支付是否开启
  180. this.cartArr[0].payStatus = res.data.pay_weixin_open || 0
  181. //支付宝是否开启
  182. this.cartArr[1].payStatus = res.data.ali_pay_status || 0;
  183. //#ifdef MP
  184. this.cartArr[1].payStatus = 0;
  185. //#endif
  186. //余额支付是否开启
  187. this.cartArr[2].payStatus = res.data.yue_pay_status
  188. if (res.data.offline_pay_status) {
  189. this.cartArr[3].payStatus = 1
  190. } else {
  191. this.cartArr[3].payStatus = 0
  192. }
  193. //好友代付是否开启
  194. this.cartArr[4].payStatus = res.data.friend_pay_status || 0;
  195. this.getCashierOrder()
  196. }).catch(err => {
  197. uni.hideLoading();
  198. return this.$util.Tips({
  199. title: err
  200. })
  201. })
  202. },
  203. getCashierOrder() {
  204. uni.showLoading({
  205. title: this.$t(`创建订单中`)
  206. });
  207. getCashierOrder(this.orderId, this.fromType).then(res => {
  208. this.payPrice = this.payPriceShow = res.data.pay_price
  209. this.payPostage = res.data.pay_postage
  210. this.offlinePostage = res.data.offline_postage
  211. this.invalidTime = res.data.invalid_time
  212. this.cartArr[2].number = res.data.now_money;
  213. this.number = Number(res.data.now_money) || 0;
  214. uni.hideLoading();
  215. }).catch(err => {
  216. uni.hideLoading();
  217. return this.$util.Tips({
  218. title: err
  219. })
  220. })
  221. },
  222. payType(number, paytype, index) {
  223. this.active = index;
  224. this.paytype = paytype;
  225. this.number = number;
  226. if (this.offlinePostage) {
  227. if (paytype == 'offline') {
  228. this.payPriceShow = this.$util.$h.Sub(this.payPrice, this.payPostage);
  229. } else {
  230. this.payPriceShow = this.payPrice;
  231. }
  232. }
  233. },
  234. formpost(url, postData) {
  235. let tempform = document.createElement("form");
  236. tempform.action = url;
  237. tempform.method = "post";
  238. tempform.target = "_self";
  239. tempform.style.display = "none";
  240. for (let x in postData) {
  241. let opt = document.createElement("input");
  242. opt.name = x;
  243. opt.value = postData[x];
  244. tempform.appendChild(opt);
  245. }
  246. document.body.appendChild(tempform);
  247. this.$nextTick(e => {
  248. tempform.submit();
  249. })
  250. },
  251. waitPay() {
  252. uni.reLaunch({
  253. url: '/pages/goods/order_pay_status/index?order_id=' + this.orderId + '&msg=取消支付&type=3' +
  254. '&status=2&totalPrice=' + this.payPriceShow
  255. })
  256. },
  257. goPay(number, paytype) {
  258. let that = this;
  259. if (!that.orderId) return that.$util.Tips({
  260. title: that.$t(`请选择要支付的订单`)
  261. });
  262. if (paytype == 'yue' && parseFloat(number) < parseFloat(that.payPriceShow)) return that.$util.Tips({
  263. title: that.$t(`余额不足`)
  264. });
  265. uni.showLoading({
  266. title: that.$t(`支付中`)
  267. });
  268. if (paytype == 'friend' && that.orderId) {
  269. uni.hideLoading();
  270. return uni.navigateTo({
  271. url: '/pages/users/payment_on_behalf/index?order_id=' + that.orderId + '&spread=' +
  272. this.$store.state.app.uid,
  273. success: res => {},
  274. fail: () => {},
  275. complete: () => {}
  276. });
  277. }
  278. orderPay({
  279. uni: that.orderId,
  280. paytype: paytype,
  281. type: that.friendPay ? 1 : 0,
  282. // #ifdef H5
  283. quitUrl: location.port ? location.protocol + '//' + location.hostname + ':' + location
  284. .port +
  285. '/pages/goods/order_details/index?order_id=' + this.orderId : location.protocol +
  286. '//' + location.hostname +
  287. '/pages/goods/order_details/index?order_id=' + this.orderId
  288. // #endif
  289. // #ifdef APP-PLUS
  290. quitUrl: '/pages/goods/order_details/index?order_id=' + this.orderId
  291. // #endif
  292. }).then(res => {
  293. let status = res.data.status,
  294. orderId = res.data.result.order_id,
  295. jsConfig = res.data.result.jsConfig,
  296. goPages = '/pages/goods/order_pay_status/index?order_id=' + this.orderId + '&msg=' +
  297. res
  298. .msg +
  299. '&type=3' + '&totalPrice=' + this.payPriceShow,
  300. friendPay = '/pages/users/payment_on_behalf/index?order_id=' + this.orderId +
  301. '&spread=' +
  302. this
  303. .$store.state.app.uid
  304. switch (status) {
  305. case 'ORDER_EXIST':
  306. case 'EXTEND_ORDER':
  307. uni.hideLoading();
  308. return that.$util.Tips({
  309. title: res.msg
  310. }, {
  311. tab: 5,
  312. url: goPages
  313. });
  314. case 'ALLINPAY_PAY':
  315. uni.hideLoading();
  316. // #ifdef MP
  317. this.initIn = true
  318. wx.openEmbeddedMiniProgram({
  319. appId: 'wxef277996acc166c3',
  320. extraData: {
  321. cusid: jsConfig.cusid,
  322. appid: jsConfig.appid,
  323. version: jsConfig.version,
  324. trxamt: jsConfig.trxamt,
  325. reqsn: jsConfig.reqsn,
  326. notify_url: jsConfig.notify_url,
  327. body: jsConfig.body,
  328. remark: jsConfig.remark,
  329. validtime: jsConfig.validtime,
  330. randomstr: jsConfig.randomstr,
  331. paytype: jsConfig.paytype,
  332. sign: jsConfig.sign,
  333. signtype: jsConfig.signtype
  334. }
  335. })
  336. this.jumpData = {
  337. orderId: res.data.result.order_id,
  338. msg: res.msg,
  339. }
  340. // #endif
  341. // #ifdef APP-PLUS
  342. plus.runtime.openURL(jsConfig.payinfo);
  343. setTimeout(e => {
  344. uni.reLaunch({
  345. url: goPages
  346. })
  347. }, 1000)
  348. // #endif
  349. // #ifdef H5
  350. this.formpost(res.data.result.pay_url, jsConfig)
  351. // #endif
  352. break;
  353. case 'PAY_ERROR':
  354. uni.hideLoading();
  355. return that.$util.Tips({
  356. title: res.msg
  357. }, {
  358. tab: 5,
  359. url: goPages
  360. });
  361. break;
  362. case 'SUCCESS':
  363. uni.hideLoading();
  364. if (paytype !== 'friend') {
  365. return that.$util.Tips({
  366. title: res.msg,
  367. icon: 'success'
  368. }, {
  369. tab: 4,
  370. url: goPages
  371. });
  372. } else {
  373. return that.$util.Tips({
  374. title: res.msg,
  375. icon: 'success'
  376. }, {
  377. tab: 4,
  378. url: friendPay
  379. });
  380. }
  381. break;
  382. case 'WECHAT_PAY':
  383. that.toPay = true;
  384. // #ifdef MP
  385. /* that.toPay = true; */
  386. let mp_pay_name = ''
  387. if (uni.requestOrderPayment) {
  388. mp_pay_name = 'requestOrderPayment'
  389. } else {
  390. mp_pay_name = 'requestPayment'
  391. }
  392. uni[mp_pay_name]({
  393. timeStamp: jsConfig.timestamp,
  394. nonceStr: jsConfig.nonceStr,
  395. package: jsConfig.package,
  396. signType: jsConfig.signType,
  397. paySign: jsConfig.paySign,
  398. success: function(res) {
  399. uni.hideLoading();
  400. if (that.BargainId || that.combinationId || that.pinkId ||
  401. that
  402. .seckillId || that.discountId)
  403. return that.$util.Tips({
  404. title: that.$t(`支付成功`),
  405. icon: 'success'
  406. }, {
  407. tab: 4,
  408. url: goPages
  409. });
  410. return that.$util.Tips({
  411. title: that.$t(`支付成功`),
  412. icon: 'success'
  413. }, {
  414. tab: 5,
  415. url: goPages
  416. });
  417. },
  418. fail: function(e) {
  419. uni.hideLoading();
  420. return that.$util.Tips({
  421. title: that.$t(`取消支付`)
  422. }, {
  423. tab: 5,
  424. url: goPages + '&status=2'
  425. });
  426. },
  427. complete: function(e) {
  428. uni.hideLoading();
  429. //关闭当前页面跳转至订单状态
  430. if (res.errMsg == 'requestPayment:cancel' || e.errMsg ==
  431. 'requestOrderPayment:cancel') return that.$util
  432. .Tips({
  433. title: that.$t(`取消支付`)
  434. }, {
  435. tab: 5,
  436. url: goPages + '&status=2'
  437. });
  438. },
  439. })
  440. // #endif
  441. // #ifdef H5
  442. this.$wechat.pay(res.data.result.jsConfig).then(res => {
  443. return that.$util.Tips({
  444. title: that.$t(`支付成功`),
  445. icon: 'success'
  446. }, {
  447. tab: 5,
  448. url: goPages
  449. });
  450. }).catch(res => {
  451. if (!this.$wechat.isWeixin()) {
  452. uni.redirectTo({
  453. url: goPages + '&msg=' + that.$t(`支付失败`) +
  454. '&status=2'
  455. // '&msg=支付失败&status=2'
  456. })
  457. }
  458. if (res.errMsg == 'chooseWXPay:cancel') return that.$util.Tips({
  459. title: that.$t(`取消支付`)
  460. }, {
  461. tab: 5,
  462. url: goPages + '&status=2'
  463. });
  464. })
  465. // #endif
  466. // #ifdef APP-PLUS
  467. uni.requestPayment({
  468. provider: 'wxpay',
  469. orderInfo: jsConfig,
  470. success: (e) => {
  471. let url = goPages;
  472. uni.showToast({
  473. title: that.$t(`支付成功`)
  474. })
  475. setTimeout(res => {
  476. uni.redirectTo({
  477. url: url
  478. })
  479. }, 2000)
  480. },
  481. fail: (e) => {
  482. let url = '/pages/goods/order_pay_status/index?order_id=' +
  483. orderId +
  484. '&msg=' + that.$t(`支付失败`);
  485. uni.showModal({
  486. content: that.$t(`支付失败`),
  487. showCancel: false,
  488. success: function(res) {
  489. if (res.confirm) {
  490. uni.redirectTo({
  491. url: url
  492. })
  493. } else if (res.cancel) {}
  494. }
  495. })
  496. },
  497. complete: () => {
  498. uni.hideLoading();
  499. },
  500. });
  501. // #endif
  502. break;
  503. case 'PAY_DEFICIENCY':
  504. uni.hideLoading();
  505. //余额不足
  506. return that.$util.Tips({
  507. title: res.msg
  508. }, {
  509. tab: 5,
  510. url: goPages + '&status=1'
  511. });
  512. break;
  513. case "WECHAT_H5_PAY":
  514. uni.hideLoading();
  515. that.$util.Tips({
  516. title: that.$t(`等待支付中`)
  517. }, {
  518. tab: 4,
  519. url: goPages + '&status=0'
  520. });
  521. setTimeout(() => {
  522. location.href = res.data.result.jsConfig.h5_url;
  523. }, 1500);
  524. break;
  525. case 'ALIPAY_PAY':
  526. //#ifdef H5
  527. uni.hideLoading();
  528. that.$util.Tips({
  529. title: that.$t(`等待支付中`)
  530. }, {
  531. tab: 4,
  532. url: goPages + '&status=0'
  533. });
  534. that.formContent = res.data.result.jsConfig;
  535. setTimeout(() => {
  536. document.getElementById('alipaysubmit').submit();
  537. }, 1500);
  538. //#endif
  539. // #ifdef MP
  540. uni.navigateTo({
  541. url: `/pages/users/alipay_invoke/index?id=${orderId}&link=${jsConfig.qrCode}`
  542. });
  543. // #endif
  544. // #ifdef APP-PLUS
  545. uni.requestPayment({
  546. provider: 'alipay',
  547. orderInfo: jsConfig,
  548. success: (e) => {
  549. uni.showToast({
  550. title: that.$t(`支付成功`)
  551. })
  552. let url = '/pages/goods/order_pay_status/index?order_id=' +
  553. orderId +
  554. '&msg=' + that.$t(`支付成功`);
  555. setTimeout(res => {
  556. uni.redirectTo({
  557. url: url
  558. })
  559. }, 2000)
  560. },
  561. fail: (e) => {
  562. let url = '/pages/goods/order_pay_status/index?order_id=' +
  563. orderId +
  564. '&msg=' + that.$t(`支付失败`);
  565. uni.showModal({
  566. content: that.$t(`支付失败`),
  567. showCancel: false,
  568. success: function(res) {
  569. if (res.confirm) {
  570. uni.redirectTo({
  571. url: url
  572. })
  573. } else if (res.cancel) {}
  574. }
  575. })
  576. },
  577. complete: () => {
  578. uni.hideLoading();
  579. },
  580. });
  581. // #endif
  582. break;
  583. }
  584. }).catch(err => {
  585. uni.hideLoading();
  586. return that.$util.Tips({
  587. title: err
  588. }, () => {
  589. that.$emit('onChangeFun', {
  590. action: 'pay_fail'
  591. });
  592. });
  593. })
  594. }
  595. }
  596. }
  597. </script>
  598. <style lang="scss" scoped>
  599. .page {
  600. .pay-price {
  601. display: flex;
  602. justify-content: center;
  603. flex-direction: column;
  604. align-items: center;
  605. padding: 50rpx 0 40rpx 0;
  606. .price {
  607. color: #E93323;
  608. margin-bottom: 20rpx;
  609. display: flex;
  610. align-items: flex-end;
  611. .unit {
  612. font-size: 34rpx;
  613. font-weight: 500;
  614. line-height: 41rpx;
  615. }
  616. .num {
  617. font-size: 50rpx;
  618. font-weight: 600;
  619. }
  620. }
  621. .count-down {
  622. display: flex;
  623. align-items: center;
  624. background-color: #fff;
  625. padding: 8rpx 28rpx;
  626. border-radius: 40rpx;
  627. font-size: 24rpx;
  628. color: #E93323;
  629. .time {
  630. margin-top: 0 !important;
  631. }
  632. /deep/.red {
  633. margin: 0 !important;
  634. }
  635. }
  636. }
  637. .payment {
  638. width: 690rpx;
  639. border-radius: 14rpx 14rpx;
  640. background-color: #fff;
  641. z-index: 999;
  642. margin: 0 30rpx;
  643. .title {
  644. color: #666666;
  645. font-size: 26rpx;
  646. padding: 30rpx 0 0 30rpx;
  647. }
  648. .payMoney {
  649. font-size: 28rpx;
  650. color: #333333;
  651. text-align: center;
  652. margin-top: 50rpx;
  653. .font-color {
  654. margin-left: 10rpx;
  655. .money {
  656. font-size: 40rpx;
  657. }
  658. }
  659. }
  660. }
  661. .payment.on {
  662. transform: translate3d(0, 0, 0);
  663. }
  664. .icon-xuanzhong11 {
  665. color: #E93323 !important;
  666. }
  667. .payment .item {
  668. border-bottom: 1rpx solid #eee;
  669. height: 130rpx;
  670. margin-left: 30rpx;
  671. padding-right: 30rpx;
  672. }
  673. .payment .item:last-child {
  674. border-bottom: none;
  675. }
  676. .payment .item .left {
  677. flex: 1;
  678. }
  679. .payment .item .left .text {
  680. flex: 1;
  681. }
  682. .payment .item .left .text .name {
  683. font-size: 30rpx;
  684. color: #333;
  685. }
  686. .payment .item .left .text .info {
  687. font-size: 22rpx;
  688. color: #999;
  689. }
  690. .payment .item .left .text .info .money {
  691. color: #ff9900;
  692. }
  693. .payment .item .left .iconfont {
  694. font-size: 50rpx;
  695. color: #09bb07;
  696. margin-right: 28rpx;
  697. }
  698. .payment .item .left .iconfont.icon-zhifubao {
  699. color: #00aaea;
  700. }
  701. .payment .item .left .iconfont.icon-yuezhifu {
  702. color: #ff9900;
  703. }
  704. .payment .item .left .iconfont.icon-yuezhifu1 {
  705. color: #eb6623;
  706. }
  707. .payment .item .left .iconfont.icon-tonglianzhifu1 {
  708. color: #305fd8;
  709. }
  710. .payment .item .iconfont {
  711. font-size: 40rpx;
  712. color: #ccc;
  713. }
  714. .icon-haoyoudaizhifu {
  715. color: #F34C3E !important;
  716. }
  717. .btn {
  718. position: fixed;
  719. left: 30rpx;
  720. display: flex;
  721. flex-direction: column;
  722. align-items: center;
  723. bottom: 30rpx;
  724. bottom: calc(30rpx + constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  725. bottom: calc(30rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  726. }
  727. .wait-pay {
  728. color: #aaa;
  729. font-size: 24rpx;
  730. padding-top: 20rpx;
  731. }
  732. .button {
  733. width: 690rpx;
  734. height: 90rpx;
  735. border-radius: 45rpx;
  736. color: #FFFFFF;
  737. background-color: #E93323;
  738. }
  739. }
  740. </style>