天波h5前端应用
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

790 lines
33KB

  1. <!--
  2. * @Date: 2022-03-29 16:57:58
  3. * @LastEditors: JinxChen
  4. * @LastEditTime: 2023-04-08 14:57:19
  5. * @FilePath: \TelpoH5FrontendWeb\src\views\package-list\index.vue
  6. * @description: TODO 小台风充值h5
  7. -->
  8. <template>
  9. <div class="package-list-container">
  10. <van-nav-bar :left-arrow="false" :border="true">
  11. <template #title>
  12. <h5 style="font-size: 16px">{{topupTitle}}</h5>
  13. </template>
  14. </van-nav-bar>
  15. <!-- 灰色线条 -->
  16. <div class="gray-line"></div>
  17. <!-- 套餐列表 -->
  18. <div class="topup-container">
  19. <div class="main">
  20. <!-- 无套餐时显示 -->
  21. <div class="noData_container" v-show="packageOrderList.length === 0 && !isShowNoData">
  22. <p>暂无相关套餐数据,请您联系管理员~</p>
  23. </div>
  24. <!-- 套餐订购 -->
  25. <div
  26. class="package-order-container"
  27. v-for="(item, index) in packageOrderList"
  28. :key="index"
  29. >
  30. <!-- 推荐 -->
  31. <div class="recom" v-show="false">
  32. <div class="shape"></div>
  33. <div class="square">
  34. <p>推荐</p>
  35. </div>
  36. </div>
  37. <!-- 套餐内容 -->
  38. <div class="order-content">
  39. <div class="title">
  40. <p>{{item.packageName}}<!-- :{{(item.packagesPrice/item.packageIssue).toFixed(0)}}元/月 --></p>
  41. </div>
  42. <div class="remark">
  43. <p>每月200分钟通话时长,1G流量</p>
  44. </div>
  45. <div class="details">
  46. <p>
  47. <span class="orange large">¥{{(item.packagesPrice/(item.packageIssue === 0 ? 1: item.packageIssue)).toFixed(0)}}</span>元/月,
  48. </p>
  49. <p class="total">
  50. <span>合计</span><span class="orange price">{{item.packagesPrice}}元</span>
  51. </p>
  52. </div>
  53. <!-- <div class="package-buy">
  54. <div class="buy-btn" @click="onBuy(item)">
  55. <p>第一步:充值话费</p>
  56. </div>
  57. </div> -->
  58. <div class="radios-con">
  59. <div class="pay-type">
  60. <p>支付方式:</p>
  61. </div>
  62. <van-radio-group v-model="radio" direction="horizontal" @change="onRaidoChange">
  63. <van-radio name="1">
  64. <template #default>
  65. <div class="radio-con">
  66. <span>微信</span>
  67. <img src="../../assets/wx-pay.png"/>
  68. </div>
  69. </template>
  70. </van-radio>
  71. <van-radio name="2">
  72. <template #default>
  73. <div class="radio-con">
  74. <span>支付宝</span>
  75. <img src="../../assets/alipay.png"/>
  76. </div>
  77. </template>
  78. </van-radio>
  79. <van-radio name="3">
  80. <template #default>
  81. <div class="radio-con">
  82. <span>12期花呗</span>
  83. <img src="../../assets/antpay.png"/>
  84. </div>
  85. </template>
  86. </van-radio>
  87. </van-radio-group>
  88. </div>
  89. <div class="package-buy">
  90. <div class="buy-btn" @click="onBuy(item)">
  91. <p>第一步:充值话费</p>
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </template>
  100. <script>
  101. import APIWx from "@/api/wx";
  102. import AppId from "@/config/appId";
  103. import { APIPay } from "@/api/pay";
  104. import APICore from "@/api/core";
  105. let wx = require("weixin-js-sdk"); // TODO 再封装,可拦截错误提示等操作
  106. import { isNotNull } from "@/utils/index";
  107. import { VERSION_MODEL } from '@/config/models';
  108. export default {
  109. name: "packageList",
  110. data() {
  111. return {
  112. topupTitle: "请选择套餐充值电话卡", //充值页面标题
  113. // 套餐列表, todo 需要从接口获取
  114. packageOrderList: [
  115. /* {
  116. packageName: '语音卡套餐(1年)',
  117. packagePayType: 1,
  118. packagesPrice: 240,
  119. packageIssue: 12,
  120. payWxPayProductId: process.env.NODE_ENV === "production" ? '1635123463911587840' : '1635122887959592960', //微信支付
  121. payAliPayProductId: process.env.NODE_ENV === "production" ? '1629407413618294784' : '1629405716684029952', //支付宝全额支付
  122. payAntPayProductId: process.env.NODE_ENV === "production" ? '1629407705558630400': '1629405558344859648', //支付宝花呗支付
  123. } */
  124. ],
  125. outTradeNo: "", //订单号
  126. price: "", //价格,
  127. isShowNoData: false, //是否显示无套餐内容, 默认false
  128. // 获取从路由的参数,import 调取激活接口需要用到
  129. params: {
  130. imei: '',
  131. iccid: '',
  132. manufactorId: '', //厂商id,一般用来获取core接口token
  133. appId: '', //公众号appId,需要对接多个不同公众号时动态从页面路由获取,
  134. },
  135. radio: '1', //支付方式单选按钮默认值
  136. payProductId: null, //套餐id
  137. packageIssue: null, //套餐分期
  138. payType: '1', //支付方式 1 微信, 2 支付宝,支付宝又分为花呗和全额支付,全额支付分期数传0 或者1 ,花呗则传 3 6 12
  139. openId: ''
  140. };
  141. },
  142. created() {
  143. this.getAuth();
  144. this.getParams();
  145. //this.getWxAutograph();
  146. // 套餐列表
  147. this.getDevicePayPackage();
  148. console.log("当前版本", VERSION_MODEL);
  149. },
  150. methods: {
  151. // 根据code获取openId
  152. getOpenId() {
  153. let code = this.$store.getters.wxAuthCode ? this.$store.getters.wxAuthCode : this.params.code;
  154. APIPay.getOpenId(code).then(res => {
  155. let data= res.data;
  156. if(data.code === 20000) {
  157. this.openId = data.data.openId;
  158. this.$store.commit("openId", data.data.openId);
  159. }
  160. })
  161. },
  162. // 获取b端接口的token
  163. getAuth() {
  164. let manufactorId = "5bf13062-a41e-4d00-ba14-1101aad12650";
  165. APICore.getAuth({ manufactorId: manufactorId }).then(res => {
  166. this.$store.commit("gatewayToken", res.data.data);
  167. });
  168. },
  169. // 获取url传过来的参数
  170. getParams() {
  171. let params = this.$route.query;
  172. if (params) {
  173. this.getOpenId();
  174. this.params = {...params};
  175. }
  176. },
  177. // 获取基本套餐信息
  178. getDevicePayPackage() {
  179. this.$toast.loading({
  180. message: "加载中",
  181. duration: 1500
  182. });
  183. APICore.devicePayPackage(this.params.imei)
  184. .then(res => {
  185. console.log("data", res.data);
  186. if (res.data.code === 106 || res.data.code === 104) {
  187. // token过期
  188. this.getAuth();
  189. setTimeout(() => {
  190. this.getDevicePayPackage();
  191. }, 1500);
  192. } else if (res.data.code === 0 && res.data.data === null) {
  193. this.isShowNoData = true;
  194. } else {
  195. if(res.data.data === null) {
  196. this.isShowNoData = false;
  197. } else {
  198. let data = res.data.data.packagesList;
  199. // 处理获取套餐的逻辑
  200. // 筛选 基础套餐,producModelId 1 是基础套餐;2 是加油包
  201. let packageList = data.filter(item => {
  202. return item.producModelId === 1
  203. });
  204. this.packageOrderList = packageList;
  205. console.log("套餐数据::", packageList);
  206. }
  207. this.$toast.success({
  208. message: "加载完成",
  209. duration: 1500
  210. });
  211. }
  212. })
  213. .catch(error => {
  214. this.$dialog.confirm({
  215. title: "获取套餐数据失败",
  216. message: error.message,
  217. showCancelButton: false,
  218. });
  219. })
  220. .finally(() => {
  221. setTimeout(() => {
  222. this.$toast.clear();
  223. }, 1500);
  224. });
  225. },
  226. // 返回
  227. onNavBack() {
  228. },
  229. // 获取微信jssdk
  230. getWxAutograph() {
  231. let that = this;
  232. return new Promise((resolve, reject) => {
  233. APIWx.createJSSDK({
  234. sUrl: window.location.href.split("#")[0],
  235. userId: '',
  236. appId: this.params.appId || AppId
  237. })
  238. .then(res => {
  239. let item = res.data.data;
  240. wx.config({
  241. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  242. appId: item.appId, // 必填,公众号的唯一标识
  243. timestamp: item.timeStamp, // 必填,生成签名的时间戳
  244. nonceStr: item.nonceStr, // 必填,生成签名的随机串
  245. signature: item.signature, // 必填,签名
  246. jsApiList: ["chooseWXPay"] // 必填,需要使用的JS接口列表
  247. });
  248. wx.ready(() => {
  249. resolve(true);
  250. });
  251. })
  252. .catch(err => {
  253. reject(false);
  254. console.log(err);
  255. });
  256. });
  257. },
  258. // 话费充值
  259. onBuy(data) {
  260. this.price = data.packagesPrice;
  261. // 遍历数据找到属于三种支付方式对应的套餐id, 1 微信 2 支付宝全额 3 支付宝分期
  262. let payTypeToPackAgeId = data.payTypeList;
  263. console.log("购买的套餐数据data", payTypeToPackAgeId);
  264. // 需要区分是要用微信支付还是支付宝花呗支付
  265. if (this.payType === '2') {
  266. // 全额
  267. this.payProductId = payTypeToPackAgeId.filter(item => {
  268. return item.payType === '2' || item.payType === 2
  269. })[0].productId;
  270. this.packageIssue = 0;
  271. console.log("this.payProductId", this.payProductId);
  272. this.aliPay(data);
  273. } else if (this.payType === '3') {
  274. // 分期
  275. this.payProductId = payTypeToPackAgeId.filter(item => {
  276. return item.payType === '3' || item.payType === 3
  277. })[0].productId;
  278. this.packageIssue = 12;
  279. this.payType = '2';
  280. console.log("this.payProductId2", this.payProductId);
  281. this.aliPay(data);
  282. } else {
  283. // 微信
  284. let openId = this.$store.getters.openId;
  285. this.payProductId = payTypeToPackAgeId.filter(item => {
  286. return item.payType === '1' || item.payType === 1
  287. })[0].productId;
  288. this.packageIssue = 0;
  289. console.log("this.payProductId3", this.payProductId);
  290. if(openId === null || openId === 'null') {
  291. this.$dialog.confirm({
  292. message: '获取OpenId失败,请您重新进入',
  293. showCancelButton: false,
  294. })
  295. } else {
  296. this.wxPay(data);
  297. }
  298. }
  299. },
  300. // 微信支付
  301. wxPay(data) {
  302. this.$toast.loading({
  303. message: "加载中"
  304. });
  305. console.log("微信支付", data);
  306. let orderData = data;
  307. let reqBody = {
  308. openId: this.$store.getters.openId || this.openId, //openId
  309. imei: this.params.imei, //imei
  310. iccid: this.params.iccid,
  311. productId: this.payProductId, //套餐id
  312. packageName: /* data.productModel */ data.packagesName, //套餐名字
  313. packagePayType: Number(this.payType), //支付类型
  314. packageIssue: 0, //分期
  315. packagePrice: process.env.NODE_ENV === "production" ? data.packagesPrice * 100 : 1 //总金额单位为分,测试环境写死
  316. };
  317. this.$toast.clear();
  318. APICore.payLiveBaseDevice(reqBody)
  319. .then(res => {
  320. if (res.data.code === 104 || res.data.code === 106) {
  321. this.getAuth();
  322. setTimeout(() => {
  323. this.wxPay(orderData);
  324. }, 1000);
  325. } else if (res.data.code === 104) {
  326. this.$dialog.confirm({
  327. message: `${res.data.message}`
  328. })
  329. }
  330. let that = this;
  331. let wxData = res.data.data;
  332. that.outTradeNo = wxData.out_trade_no;
  333. console.log("wxData", wxData);
  334. // 本地测试
  335. /* that.$router.push({
  336. name: "payResult",
  337. query: {
  338. outTradeNo: that.outTradeNo,
  339. price: that.price,
  340. rechargeUrl: data.rechargeUrl || '',
  341. iccid: this.params.iccid,
  342. isAdmin: this.$route.query.isAdmin,
  343. serialNo: this.params.imei,
  344. routerName: this.params.routerName,
  345. issue: data.packageIssue
  346. }
  347. }); */
  348. /* wx.chooseWXPay({
  349. timestamp: wxData.timeStamp, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
  350. nonceStr: wxData.nonceStr, // 支付签名随机串,不长于 32 位
  351. package: wxData.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  352. signType: wxData.signType, // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致
  353. paySign: wxData.paySign, // 支付签名
  354. success: function(res) {
  355. // 支付成功后的回调函数
  356. that.$router.replace({
  357. name: "payResult",
  358. query: {
  359. outTradeNo: that.outTradeNo,
  360. price: that.price,
  361. rechargeUrl: data.rechargeUrl,
  362. iccid: that.params.iccid,
  363. isAdmin: that.$route.query.isAdmin || false,
  364. serialNo: that.params.imei,
  365. issue: that.packageIssue
  366. }
  367. });
  368. console.log("微信支付成功::", res);
  369. },
  370. fail: err => {
  371. console.log("支付出错了::", err);
  372. that.$dialog.confirm({
  373. title: "温馨提示",
  374. message: "出错了,请您重新进入",
  375. showCancelButton: false
  376. });
  377. },
  378. cancel: function(err) {
  379. // 用户取消支付
  380. that.$dialog.confirm({
  381. title: "温馨提示",
  382. message: "您取消了支付",
  383. showCancelButton: false
  384. });
  385. console.log("用户取消了支付::", err);
  386. }
  387. }); */
  388. this.onWxPay(wxData);
  389. })
  390. .catch(error => {
  391. console.log("error", error);
  392. })
  393. .finally(() => {
  394. this.$toast.clear();
  395. });
  396. },
  397. onWxPay(data) {
  398. let that = this;
  399. function onBridgeReady() {
  400. WeixinJSBridge.invoke(
  401. "getBrandWCPayRequest",
  402. {
  403. appId: AppId, //公众号ID,由商户传入
  404. timeStamp: data.timeStamp, //时间戳,自1970年以来的秒数
  405. nonceStr: data.nonceStr, //随机串
  406. package: data.package,
  407. signType: data.signType, //微信签名方式:
  408. paySign: data.paySign //微信签名
  409. },
  410. function(res) {
  411. if (res.err_msg == "get_brand_wcpay_request:ok") {
  412. // 使用以上方式判断前端返回,微信团队郑重提示:
  413. //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
  414. that.$router.replace({
  415. name: "payResult",
  416. query: {
  417. outTradeNo: that.outTradeNo,
  418. price: that.price,
  419. rechargeUrl: data.rechargeUrl,
  420. iccid: that.params.iccid,
  421. isAdmin: that.$route.query.isAdmin || false,
  422. serialNo: that.params.imei,
  423. issue: that.packageIssue
  424. }
  425. });
  426. } else {
  427. that.$dialog.confirm({
  428. message: "您取消了支付",
  429. showCancelButton: false
  430. });
  431. }
  432. }
  433. );
  434. }
  435. if (typeof WeixinJSBridge == "undefined") {
  436. if (document.addEventListener) {
  437. document.addEventListener(
  438. "WeixinJSBridgeReady",
  439. onBridgeReady,
  440. false
  441. );
  442. } else if (document.attachEvent) {
  443. document.attachEvent("WeixinJSBridgeReady", onBridgeReady);
  444. document.attachEvent(
  445. "onWeixinJSBridgeReady",
  446. onBridgeReady
  447. );
  448. }
  449. } else {
  450. onBridgeReady();
  451. }
  452. },
  453. // 跳转到支付宝花呗外部链接
  454. aliPay(data) {
  455. console.log("选择了支付宝::", data);
  456. this.$toast.loading({
  457. message: "加载中"
  458. });
  459. let orderData = data;
  460. let reqBody = {
  461. openId: this.$store.getters.openId, //openId
  462. imei: this.params.imei, //imei
  463. iccid: this.params.iccid,
  464. productId: this.payProductId, //套餐id
  465. packageName: /* data.productModel + ',' + */data.packagesName, //套餐名字
  466. packagePayType: Number(this.payType), //支付类型
  467. packageIssue: this.packageIssue, //分期
  468. packagePrice: process.env.NODE_ENV === "production" ? data.packagesPrice * 100 : 1 //总金额单位为分,测试环境写死
  469. };
  470. this.$toast.clear();
  471. APICore.payLiveBaseDevice(reqBody)
  472. .then(res => {
  473. if (res.data.code === 104 || res.data.code === 106) {
  474. this.getAuth();
  475. setTimeout(() => {
  476. this.aliPay(orderData);
  477. }, 1000);
  478. }
  479. let that = this;
  480. let alipayData = res.data.data.xmlStrMap;
  481. that.outTradeNo = alipayData.outTradeNo;
  482. let alipayForm = decodeURI(alipayData.payXmlStr);
  483. that.$store.commit("isFromWx", true);
  484. let alipayUserId = process.env.NODE_ENV === "production" ? 69 : 18;
  485. this.$router.replace({
  486. name: "payResult",
  487. query: {
  488. rechargeUrl:
  489. data.rechargeUrl ||
  490. `https://id.ssjlai.com/frontend/#/alipay`,
  491. outTradeNo: that.outTradeNo,
  492. price: that.price,
  493. alipayForm: alipayForm,
  494. iccid: that.params.iccid,
  495. isAdmin: that.$route.query.isAdmin || false,
  496. serialNo: that.params.imei,
  497. alipayUserId: alipayUserId,
  498. productId: this.payProductId
  499. }
  500. });
  501. })
  502. .catch(error => {
  503. console.log("error", error);
  504. this.$dialog.confirm({
  505. message: `${error.message}`,
  506. showCancelButton: false
  507. })
  508. })
  509. .finally(() => {
  510. this.$toast.clear();
  511. });
  512. },
  513. // 支付类型切换
  514. onRaidoChange(value) {
  515. console.log("选择的支付类型是", value);
  516. this.payType = value;
  517. }
  518. }
  519. };
  520. </script>
  521. <style lang="scss">
  522. .van-nav-bar__title {
  523. max-width: 80% !important;
  524. font-size: 16px;
  525. }
  526. </style>
  527. <style lang="scss" scoped>
  528. .package-list-container {
  529. background-color: white;
  530. height: 100vh;
  531. .topup-container {
  532. position: relative;
  533. /* margin: 20px; */
  534. display: flex;
  535. justify-content: space-between;
  536. align-items: center;
  537. flex-direction: column;
  538. background-color: white;
  539. overflow: scroll;
  540. height: calc(100vh - 88px);
  541. .main {
  542. display: flex;
  543. justify-content: center;
  544. align-items: center;
  545. flex-direction: column;
  546. .tips {
  547. padding: 10px;
  548. }
  549. .noData_container {
  550. margin: 100px auto 0;
  551. height: 120px;
  552. /* background: url(../../../assets/img/news-noData.png) center no-repeat; */
  553. background-size: 165px 120px;
  554. display: flex;
  555. justify-content: center;
  556. align-items: flex-end;
  557. font-size: 16px;
  558. color: #999;
  559. p {
  560. font-size: 16px;
  561. }
  562. /* @include colorAndFont(#999, 28); */
  563. }
  564. p {
  565. padding: 10px;
  566. font-size: 16px;
  567. }
  568. .cancel-button {
  569. width: 30vw;
  570. border-radius: 5px;
  571. background-color: #2599ff;
  572. color: #fff;
  573. min-height: 40px;
  574. display: flex;
  575. justify-content: center;
  576. align-items: center;
  577. font-size: 16px;
  578. }
  579. .package-order-container {
  580. position: relative;
  581. margin: 10px 0;
  582. /* padding: 0 20px; */
  583. z-index: 999;
  584. box-shadow: rgba(14, 30, 37, 0.12) 0 3px 5px 0,
  585. rgba(14, 30, 37, 0.32) 0 2px 16px 0;
  586. .recom {
  587. position: absolute;
  588. top: -7px;
  589. left: -26px;
  590. border-style: solid;
  591. border-width: 0 40px 40px;
  592. border-color: transparent transparent red;
  593. transform: rotate(-45deg);
  594. text-align: center;
  595. z-index: 9999;
  596. p {
  597. padding: 0;
  598. color: white;
  599. font-size: 14px;
  600. }
  601. .shape {
  602. position: absolute;
  603. top: -1px;
  604. left: -21px;
  605. border-style: solid;
  606. border-width: 0 21px 21px;
  607. border-color: transparent transparent white;
  608. }
  609. .square {
  610. height: 15px;
  611. width: 35px;
  612. position: absolute;
  613. top: 21px;
  614. left: -20px;
  615. background: red;
  616. font-size: 14px;
  617. }
  618. }
  619. .order-content {
  620. padding: 15px 10px;
  621. .title {
  622. display: flex;
  623. justify-content: flex-start;
  624. p {
  625. font-size: 16px;
  626. font-weight: bold;
  627. }
  628. }
  629. .details {
  630. display: flex;
  631. justify-content: flex-start;
  632. align-items: center;
  633. p {
  634. height: 40px;
  635. @include center();
  636. font-size: 14px;
  637. padding: 5px 0 5px 10px;
  638. }
  639. .total {
  640. font-size: 16px;
  641. padding: 0;
  642. }
  643. .orange {
  644. color: orange;
  645. }
  646. .large {
  647. font-size: 26px;
  648. margin: 0 2px;
  649. }
  650. .price {
  651. font-size: 16px;
  652. }
  653. /* .buy-btn {
  654. height: 30px;
  655. width: 100px;
  656. display: flex;
  657. justify-content: center;
  658. align-items: center;
  659. background: orange;
  660. border-radius: 45px;
  661. p {
  662. font-size: 16px;
  663. padding: 0;
  664. color: red;
  665. }
  666. } */
  667. }
  668. .remark {
  669. display: flex;
  670. justify-content: flex-start;
  671. p {
  672. font-size: 14px;
  673. padding: 5px 10px;
  674. /* font-weight: bold; */
  675. }
  676. }
  677. .package-buy {
  678. @include center();
  679. padding: 5px 8px;
  680. @include center();
  681. .buy-btn {
  682. height: 40px;
  683. width: 200px;
  684. padding: 0 5px;
  685. display: flex;
  686. justify-content: center;
  687. align-items: center;
  688. background: orange;
  689. border-radius: 20px;
  690. p {
  691. font-size: 16px;
  692. padding: 0;
  693. color: white;
  694. }
  695. }
  696. }
  697. .radios-con {
  698. /* padding: 20px 10px; */
  699. /* @include center(); */
  700. /* align-items: center; */
  701. padding: 10px 0 10px 10px;
  702. font-size: 14px;
  703. /* box-shadow: rgba(14, 30, 37, 0.12) 0 3px 5px 0,
  704. rgba(14, 30, 37, 0.32) 0 2px 16px 0; */
  705. img {
  706. height: 20px;
  707. width: 20px;
  708. margin: 2px;
  709. }
  710. .pay-type {
  711. text-align: left;
  712. p {
  713. font-size: 14px;
  714. padding: 0 0 10px 0;
  715. }
  716. }
  717. .radio-con {
  718. @include center();
  719. }
  720. .van-cell-text {
  721. display: flex;
  722. justify-content: flex-start;
  723. align-items: center;
  724. span {
  725. font-size: 14px;
  726. padding: 0 5px;
  727. }
  728. }
  729. }
  730. }
  731. .content {
  732. font-size: 14px;
  733. }
  734. }
  735. }
  736. }
  737. .gray-line {
  738. height: 10px;
  739. width: 100%;
  740. background: #f2f4f5;
  741. }
  742. .order-description {
  743. height: 60px;
  744. display: flex;
  745. justify-content: flex-start;
  746. align-items: flex-start;
  747. flex-direction: column;
  748. padding: 5px 0 10px 10px;
  749. h5 {
  750. font-size: 14px;
  751. padding: 10px 0 0 0;
  752. }
  753. }
  754. .pay-radios {
  755. position: relative;
  756. top: 0;
  757. width: 100%;
  758. /* background-color: red; */
  759. /* padding: 0 15px; */
  760. .radios-con {
  761. padding: 20px 10px;
  762. /* @include center(); */
  763. align-items: center;
  764. font-size: 18px;
  765. box-shadow: rgba(14, 30, 37, 0.12) 0 3px 5px 0,
  766. rgba(14, 30, 37, 0.32) 0 2px 16px 0;
  767. img {
  768. height: 35px;
  769. width: auto;
  770. }
  771. .van-cell-text {
  772. display: flex;
  773. justify-content: flex-start;
  774. align-items: center;
  775. span {
  776. padding: 0 5px;
  777. }
  778. }
  779. }
  780. }
  781. }
  782. </style>