天波h5前端应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

799 lines
33KB

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