天波h5前端应用
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

830 行
34KB

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