activity-order-detail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. <template>
  2. <div class="wrap">
  3. <div class="wrap-content">
  4. <div class="back" @click="$router.back()">
  5. <img src="@/assets/icon/back.png" /><span>返回</span>
  6. </div>
  7. <div class="header card" v-if="order_type.value">
  8. <div class="left">
  9. <div class="type">
  10. <img
  11. class="icon"
  12. :src="require(`@/assets/icon/activity_${order_type.icon}.png`)"
  13. alt=""
  14. />
  15. <span>{{ order_type.value }}</span>
  16. </div>
  17. <div class="time" v-if="order_type.value == '待付款'">
  18. 剩余付款时间:{{ leave_time }}
  19. </div>
  20. </div>
  21. <div class="btn-list">
  22. <div
  23. class="btn"
  24. v-for="btn in order_type.btn_list"
  25. :class="[btn_list_all.find((item) => item.label == btn).type]"
  26. @click.stop="btn_list_all.find((item) => item.label == btn).click()"
  27. >
  28. {{ btn }}
  29. </div>
  30. </div>
  31. </div>
  32. <div class="ticket-info card">
  33. <div class="ticket-title">门票信息</div>
  34. <div class="ticket-list">
  35. <div class="ticket-item" v-for="item in info.item_list">
  36. <div class="title">
  37. {{ item.ladder_title }} 第{{ item.code }}张参会信息
  38. </div>
  39. <div class="line"></div>
  40. <div class="name">
  41. <span>{{ item.name }}</span>
  42. <span
  43. class="mark"
  44. v-if="order_type.value == '已支付'"
  45. :style="{
  46. background: mark_list.find((i) => i.value == item.sh_status)
  47. .color,
  48. }"
  49. >{{
  50. mark_list.find((i) => i.value == item.sh_status).label
  51. }}</span
  52. >
  53. </div>
  54. <div class="phone">
  55. 手机号:+{{ item.phone_pre }} {{ item.phone }}
  56. </div>
  57. <div class="email">邮箱:{{ item.email }}</div>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="position-right">
  62. <div class="activity-info card" @click="jumpActivityDetail">
  63. <div class="card-title">活动信息</div>
  64. <div class="activity-title">{{ info.title }}</div>
  65. <div class="activity-time">
  66. 时间:{{ info.start_time }}-{{ info.end_time }}
  67. </div>
  68. <div class="activity-place">
  69. 地址:{{ info.province }}{{ info.city }}{{ info.county
  70. }}{{ info.address }}
  71. </div>
  72. <div class="activity-price">
  73. <div class="label">订单总额</div>
  74. <div class="price">¥{{ info.money }}</div>
  75. </div>
  76. </div>
  77. <div class="order-info card">
  78. <div class="card-title">订单信息</div>
  79. <div class="order-item">
  80. <div class="label">订单编号</div>
  81. <div class="value">
  82. <span>{{ info.order_no }}</span>
  83. <img
  84. class="icon"
  85. src="@/assets/icon/copy.png"
  86. @click="handleCopy(info.order_no)"
  87. />
  88. </div>
  89. </div>
  90. <div class="order-item">
  91. <div class="label">下单时间</div>
  92. <div class="value">{{ info.create_at }}</div>
  93. </div>
  94. </div>
  95. </div>
  96. <PaymentWindowWX
  97. ref="PaymentWindowWX"
  98. :default_time="300"
  99. :price="info.money"
  100. :wx_code_url="wx_code_url"
  101. @close="wxClose"
  102. />
  103. <div class="select-pay-type">
  104. <el-dialog
  105. width="450px"
  106. top="35vh"
  107. v-if="pay_select_visible"
  108. :visible.sync="pay_select_visible"
  109. >
  110. <div class="pay-method">
  111. <div class="pay-title">选择支付方式</div>
  112. <div class="check">
  113. <div
  114. class="item"
  115. :class="{ select: pay_params.pay_type == 7 }"
  116. @click="pay_params.pay_type = 7"
  117. >
  118. <img src="@/assets/icon/pay-ZFB.png" alt="" />
  119. <span>支付宝</span>
  120. <div class="mark">
  121. <i class="el-icon-check"></i>
  122. </div>
  123. </div>
  124. <div
  125. class="item"
  126. :class="{ select: pay_params.pay_type == 6 }"
  127. @click="pay_params.pay_type = 6"
  128. >
  129. <img src="@/assets/icon/pay-WX.png" alt="" />
  130. <span>微信支付</span>
  131. <div class="mark">
  132. <i class="el-icon-check"></i>
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="pay-btn" @click="payOrder">去付款</div>
  138. </el-dialog>
  139. </div>
  140. <div class="pay-info">
  141. <el-dialog
  142. width="450px"
  143. top="35vh"
  144. v-if="pay_info_visible"
  145. :visible.sync="pay_info_visible"
  146. >
  147. <div class="info-item">
  148. <div class="label">支付户名</div>
  149. <div class="value" @click="handleCopy(info.offline_user)">
  150. {{ info.offline_user }}
  151. </div>
  152. </div>
  153. <div class="info-item">
  154. <div class="label">支付开户行</div>
  155. <div class="value" @click="handleCopy(info.offline_bank)">
  156. {{ info.offline_bank }}
  157. </div>
  158. </div>
  159. <div class="info-item">
  160. <div class="label">支付账号</div>
  161. <div class="value" @click="handleCopy(info.offline_card)">
  162. {{ info.offline_card }}
  163. </div>
  164. </div>
  165. </el-dialog>
  166. </div>
  167. </div>
  168. </div>
  169. </template>
  170. <script>
  171. import PaymentWindowWX from "@/components/module/payment-window-wx.vue";
  172. import { ActivityService } from "@/common/service";
  173. import { copy } from "@/common/util";
  174. export default {
  175. components: { PaymentWindowWX },
  176. data() {
  177. return {
  178. info: {},
  179. time: 0,
  180. mark_list: [
  181. {
  182. value: 0,
  183. label: "待审核",
  184. color: "#FFAE18",
  185. },
  186. {
  187. value: 1,
  188. label: "审核成功",
  189. color: "#34C759",
  190. },
  191. {
  192. value: 2,
  193. label: "审核失败",
  194. color: "#FF5143",
  195. },
  196. ],
  197. wx_code_url: "", // 微信支付二维码
  198. orderWatch: () => {}, // 订单监听
  199. pay_select_visible: false, // 支付弹窗
  200. pay_params: {
  201. // 支付参数
  202. pay_type: 7, // 6 微信pc 7 pc支付宝
  203. order_id: 0,
  204. },
  205. pay_info_visible: false, // 查看支付信息
  206. };
  207. },
  208. computed: {
  209. order_type() {
  210. const label = {
  211. value: "",
  212. icon: "",
  213. btn_list: [],
  214. };
  215. let type = 0;
  216. if (this.info.money && !Number(this.info.money)) {
  217. type = 3; // 免费订单
  218. } else {
  219. if (this.info.pay_type < 8 && this.info.pay_type > 0) {
  220. type = 1; // 线上订单
  221. } else if (this.info.pay_type == 9) {
  222. type = 2; // 线下订单
  223. }
  224. }
  225. if (type == 1) {
  226. if (this.info.pay_state == 0 && this.info.cancel_state == 0) {
  227. label.value = "待支付";
  228. label.icon = "time";
  229. label.btn_list = [
  230. this.info.bill_info ? "查看发票" : "",
  231. "取消订单",
  232. "立即支付",
  233. ].filter((item) => item);
  234. } else if (
  235. this.info.pay_state == 1 &&
  236. this.info.cancel_state == 0 &&
  237. this.info.refund_state == 0
  238. ) {
  239. label.value = "已支付";
  240. label.icon = "success";
  241. label.btn_list = [
  242. this.info.bill_info ? "查看发票" : "申请开票",
  243. "申请退款",
  244. ];
  245. } else if (
  246. /* this.info.pay_type == 1 && */ this.info.refund_state > 0 &&
  247. this.info.cancel_state == 0
  248. ) {
  249. switch (this.info.refund_state) {
  250. case 0:
  251. break;
  252. case 1:
  253. case 2:
  254. label.value = "退款中";
  255. label.icon = "more";
  256. label.btn_list = [];
  257. break;
  258. case 3:
  259. break;
  260. case 4:
  261. break;
  262. case 5:
  263. label.value = "已退款";
  264. label.icon = "success";
  265. label.btn_list = ["删除订单"];
  266. break;
  267. default:
  268. break;
  269. }
  270. } else if (this.info.cancel_state == 1) {
  271. label.value = "已取消";
  272. label.icon = "info";
  273. label.btn_list = ["删除订单"];
  274. }
  275. } else if (type == 2) {
  276. if (this.info.pay_state == 0 && this.info.cancel_state == 0) {
  277. label.value = "等待付款";
  278. label.icon = "time";
  279. label.btn_list = [
  280. this.info.bill_info ? "查看发票" : "",
  281. "取消订单",
  282. "查看支付信息",
  283. ].filter((item) => item);
  284. } else if (
  285. this.info.pay_state == 1 &&
  286. this.info.cancel_state == 0 &&
  287. this.info.refund_state == 0
  288. ) {
  289. label.value = "已支付";
  290. label.icon = "success";
  291. label.btn_list = [
  292. this.info.bill_info ? "查看发票" : "申请开票",
  293. "申请退款",
  294. ];
  295. } else if (
  296. /*this.info.pay_type == 1 &&*/ this.info.refund_state > 0 &&
  297. this.info.cancel_state == 0
  298. ) {
  299. switch (this.info.refund_state) {
  300. case 0:
  301. break;
  302. case 1:
  303. case 2:
  304. label.value = "退款中";
  305. label.icon = "more";
  306. label.btn_list = [];
  307. break;
  308. case 3:
  309. break;
  310. case 4:
  311. break;
  312. case 5:
  313. label.value = "已退款";
  314. label.icon = "success";
  315. label.btn_list = ["删除订单"];
  316. break;
  317. default:
  318. break;
  319. }
  320. } else if (this.info.cancel_state == 1) {
  321. label.value = "已取消";
  322. label.icon = "info";
  323. label.btn_list = ["删除订单"];
  324. }
  325. } else if (type == 3) {
  326. label.value = "已报名";
  327. label.icon = "success";
  328. label.btn_list = [];
  329. }
  330. return label;
  331. },
  332. btn_list_all() {
  333. const that = this;
  334. return [
  335. {
  336. label: "立即支付",
  337. type: "confirm_fill",
  338. click() {
  339. that.handlePay();
  340. },
  341. },
  342. {
  343. label: "查看支付信息",
  344. type: "confirm_fill",
  345. click() {
  346. that.handleViewPayInfo();
  347. },
  348. },
  349. {
  350. label: "申请退款",
  351. type: "confirm",
  352. click() {
  353. that.handleRefund();
  354. },
  355. },
  356. {
  357. label: "申请开票",
  358. type: "cancel",
  359. click() {
  360. that.handleApplyInvoice();
  361. },
  362. },
  363. {
  364. label: "查看发票",
  365. type: "cancel",
  366. click() {
  367. that.handleInvoiceDetail();
  368. },
  369. },
  370. {
  371. label: "删除订单",
  372. type: "cancel",
  373. click() {
  374. that.handleDelete();
  375. },
  376. },
  377. {
  378. label: "取消订单",
  379. type: "cancel",
  380. click() {
  381. that.handleCancel();
  382. },
  383. },
  384. ];
  385. },
  386. leave_time() {
  387. return this.time > 1000
  388. ? `${((Math.floor(this.time / 1000 / 60 / 60) % 24) + "").padStart(
  389. 2,
  390. "0"
  391. )}:${(Math.floor((this.time / 1000 / 60) % 60) + "").padStart(
  392. 2,
  393. "0"
  394. )}:${(Math.floor((this.time / 1000) % 60) + "").padStart(2, "0")}`
  395. : "00:00:00";
  396. },
  397. },
  398. mounted() {
  399. const query = this.$route.query;
  400. this.info.id = query.id;
  401. query.id ? this.getOrderDetail() : "";
  402. },
  403. methods: {
  404. // 获取订单详情
  405. getOrderDetail() {
  406. ActivityService.getApplyInfo({ id: this.info.id }).then(({ data }) => {
  407. this.info = data.detail;
  408. this.time =
  409. new Date(this.info.create_at).getTime() +
  410. 60000 * 5 /* 五分钟 */ -
  411. new Date().getTime();
  412. this.setTime();
  413. });
  414. },
  415. //跳转活动详情
  416. jumpActivityDetail() {
  417. this.$router.push({
  418. path: "/activity-detail",
  419. query: { id: this.info.act_id },
  420. });
  421. },
  422. // 设置剩余时间
  423. setTime() {
  424. setTimeout(() => {
  425. if (this.time > 1000) {
  426. this.time -= 1000;
  427. this.setTime();
  428. } else {
  429. this.time = 0;
  430. }
  431. }, 1000);
  432. },
  433. // 复制订单号
  434. handleCopy(value) {
  435. copy(value);
  436. this.$message.success("复制成功");
  437. },
  438. // 监听订单状态
  439. watchOrderState(order_id) {
  440. this.getOrderState(order_id).then(({ data }) => {
  441. if (!data.detail.pay_state) {
  442. this.orderWatch = setTimeout(
  443. (_) => this.watchOrderState(order_id),
  444. 3000
  445. );
  446. } else {
  447. this.$message.success("支付成功!");
  448. setTimeout((_) => {
  449. this.$refs.PaymentWindowWX.hide();
  450. }, 1000);
  451. }
  452. });
  453. },
  454. // 关闭微信弹窗
  455. wxClose() {
  456. clearTimeout(this.orderWatch);
  457. },
  458. // 获取订单状态
  459. async getOrderState(id) {
  460. return await ActivityService.getApplyInfo({ id });
  461. },
  462. // 支付
  463. payOrder() {
  464. ActivityService.payApplyOrder(this.pay_params).then(({ data }) => {
  465. this.pay_select_visible = false;
  466. if (this.pay_params.pay_type == 7) {
  467. const div = document.createElement("div"); // 创建div
  468. div.innerHTML = data.ali_url; // 将返回的form 放入div
  469. document.body.appendChild(div);
  470. div.children.alipaysubmit.submit();
  471. }
  472. if (this.pay_params.pay_type == 6) {
  473. this.wx_code_url = data.code_url;
  474. this.watchOrderState(this.pay_params.order_id);
  475. this.$refs.PaymentWindowWX.show();
  476. }
  477. });
  478. },
  479. // 立即支付
  480. handlePay() {
  481. this.pay_params.order_id = this.info.id;
  482. this.pay_select_visible = true;
  483. },
  484. // 查看支付信息
  485. handleViewPayInfo() {
  486. this.pay_info_visible = true;
  487. },
  488. // 申请开票
  489. handleApplyInvoice() {
  490. this.$router.push({
  491. path: "/activity-invoice-apply",
  492. query: {
  493. order_id: this.info.id,
  494. },
  495. });
  496. },
  497. // 发票详情
  498. handleInvoiceDetail() {
  499. this.$router.push({
  500. path: "/activity-invoice-detail",
  501. query: {
  502. order_id: this.info.bill_info.id,
  503. },
  504. });
  505. },
  506. // 取消订单
  507. handleCancel() {
  508. this.showConfirmPopup("该订单下所有门票将要被取消", {
  509. confirmText: "确定取消",
  510. })
  511. .then(() => {
  512. ActivityService.cancelApplyOrder({ order_id: this.info.id }).then(
  513. ({ msg }) => {
  514. that.$message.success(msg);
  515. this.info.cancel_state = 1;
  516. }
  517. );
  518. })
  519. .catch((_) => {});
  520. },
  521. // 申请退款
  522. handleRefund() {
  523. let that = this;
  524. this.showConfirmPopup("该订单下所有门票将要退款", {
  525. confirmText: "确定退款",
  526. })
  527. .then(() => {
  528. ActivityService.delApplyOrder({ order_id: this.info.id }).then(
  529. ({ msg }) => {
  530. that.$message.success(msg);
  531. that.info.refund_state = 1;
  532. }
  533. );
  534. })
  535. .catch((_) => {});
  536. },
  537. // 删除订单
  538. handleDelete() {
  539. let that = this;
  540. this.showConfirmPopup("确定要删除该信息?")
  541. .then(() => {
  542. ActivityService.delApplyOrder({ order_id: this.info.id }).then(
  543. ({ msg }) => {
  544. that.$message.success(msg);
  545. this.$router.back();
  546. }
  547. );
  548. })
  549. .catch((_) => {});
  550. },
  551. },
  552. };
  553. </script>
  554. <style lang="scss" scoped>
  555. .wrap {
  556. width: calc((100% - 240px));
  557. // min-width: 1130px;
  558. .wrap-content {
  559. width: 70%;
  560. margin: 0 auto;
  561. // min-width: 800px;
  562. .card {
  563. background-color: white;
  564. padding: 20px;
  565. box-sizing: border-box;
  566. .card-title {
  567. font-size: 22px;
  568. font-weight: 500;
  569. color: #131415;
  570. padding-bottom: 20px;
  571. border-bottom: 1px solid #e4e4e4;
  572. }
  573. }
  574. .back {
  575. width: 90px;
  576. height: 40px;
  577. line-height: 50px;
  578. font-size: 16px;
  579. font-weight: 400;
  580. color: #222222;
  581. display: flex;
  582. align-items: center;
  583. justify-content: center;
  584. background-color: white;
  585. border-radius: 4px;
  586. cursor: pointer;
  587. img {
  588. width: 10px;
  589. height: 16px;
  590. margin-right: 5px;
  591. }
  592. }
  593. .header {
  594. display: flex;
  595. align-items: center;
  596. justify-content: space-between;
  597. margin-top: 20px;
  598. .left {
  599. .type {
  600. font-size: 30px;
  601. font-weight: 500;
  602. color: #2a63f3;
  603. display: flex;
  604. align-items: center;
  605. .icon {
  606. width: 34px;
  607. height: 34px;
  608. margin-right: 5px;
  609. }
  610. }
  611. .time {
  612. font-size: 18px;
  613. font-weight: 500;
  614. color: #2a63f3;
  615. }
  616. }
  617. .btn-list {
  618. display: flex;
  619. align-items: center;
  620. justify-content: flex-end;
  621. .btn {
  622. padding: 0 30px;
  623. height: 54px;
  624. border-radius: 7px;
  625. text-align: center;
  626. line-height: 54px;
  627. margin-left: 10px;
  628. font-size: 17px;
  629. font-weight: 400;
  630. box-sizing: border-box;
  631. cursor: pointer;
  632. }
  633. .cancel {
  634. border: 1px solid #979797;
  635. color: #131415;
  636. }
  637. .confirm {
  638. border: 1px solid #2a63f3;
  639. color: #2a63f3;
  640. }
  641. .confirm_fill {
  642. background: #2a63f3;
  643. color: #ffffff;
  644. }
  645. }
  646. }
  647. .ticket-info {
  648. margin-top: 20px;
  649. .ticket-title {
  650. font-size: 24px;
  651. font-weight: 500;
  652. color: #131415;
  653. }
  654. .ticket-list {
  655. padding: 0 15px;
  656. .ticket-item {
  657. margin-top: 30px;
  658. user-select: none;
  659. .title {
  660. font-size: 20px;
  661. font-weight: 500;
  662. color: #222222;
  663. }
  664. .line {
  665. width: 100%;
  666. height: 1px;
  667. background: #cccccc;
  668. margin: 20px 0 15px;
  669. }
  670. .name {
  671. font-size: 16px;
  672. font-weight: 500;
  673. color: #222222;
  674. display: flex;
  675. align-items: center;
  676. justify-content: space-between;
  677. .mark {
  678. border-radius: 2px;
  679. padding: 7px 10px;
  680. font-size: 10px;
  681. font-weight: 500;
  682. color: #ffffff;
  683. }
  684. }
  685. .phone {
  686. font-size: 13px;
  687. font-weight: 400;
  688. color: #222222;
  689. margin-top: 5px;
  690. }
  691. .email {
  692. font-size: 13px;
  693. font-weight: 400;
  694. color: #222222;
  695. margin-top: 5px;
  696. }
  697. }
  698. }
  699. }
  700. }
  701. .position-right {
  702. position: fixed;
  703. top: 150px;
  704. right: calc((100% - #{$navbarWidth} - 240px) * 0.15 + 240px - 20px - 350px);
  705. width: 18%;
  706. .activity-info {
  707. width: 100%;
  708. .activity-title {
  709. font-size: 16px;
  710. font-weight: 500;
  711. color: #222222;
  712. margin-top: 10px;
  713. }
  714. .activity-time {
  715. font-size: 14px;
  716. font-weight: 400;
  717. color: #777777;
  718. margin-top: 5px;
  719. }
  720. .activity-place {
  721. font-size: 14px;
  722. font-weight: 400;
  723. color: #777777;
  724. margin-top: 5px;
  725. }
  726. .activity-price {
  727. display: flex;
  728. align-items: center;
  729. justify-content: space-between;
  730. margin-top: 20px;
  731. .label {
  732. font-size: 16px;
  733. font-weight: 500;
  734. color: #333333;
  735. }
  736. .price {
  737. font-size: 20px;
  738. font-weight: 400;
  739. color: #ff3535;
  740. }
  741. }
  742. }
  743. .order-info {
  744. width: 100%;
  745. margin-top: 20px;
  746. .order-item {
  747. display: flex;
  748. align-items: center;
  749. justify-content: space-between;
  750. margin-top: 10px;
  751. .label {
  752. font-size: 14px;
  753. font-weight: 400;
  754. color: #666666;
  755. }
  756. .value {
  757. display: flex;
  758. align-items: center;
  759. font-size: 14px;
  760. color: #222222;
  761. .icon {
  762. width: 15px;
  763. height: 15px;
  764. margin-left: 5px;
  765. cursor: pointer;
  766. }
  767. }
  768. }
  769. }
  770. }
  771. @media (max-width: 100rem) {
  772. .position-right {
  773. position: absolute;
  774. top: calc(var(--scrollTop) + 150px);
  775. left: 1210px;
  776. }
  777. }
  778. .select-pay-type {
  779. /deep/ .el-dialog__header {
  780. display: none;
  781. }
  782. /deep/ .el-dialog__body {
  783. padding: 20px 30px;
  784. }
  785. .pay-method {
  786. width: 100%;
  787. box-sizing: border-box;
  788. background-color: white;
  789. .pay-title {
  790. font-size: 20px;
  791. font-weight: 500;
  792. color: #030303;
  793. }
  794. .check {
  795. display: flex;
  796. align-items: center;
  797. margin-top: 20px;
  798. .item {
  799. width: 150px;
  800. height: 50px;
  801. display: flex;
  802. align-items: center;
  803. justify-content: center;
  804. border: 1px solid #e9e9e9;
  805. margin-right: 20px;
  806. cursor: pointer;
  807. img {
  808. width: 28px;
  809. height: 28px;
  810. }
  811. span {
  812. font-size: 18px;
  813. font-weight: 500;
  814. color: #333333;
  815. }
  816. .mark {
  817. position: absolute;
  818. opacity: 0;
  819. }
  820. }
  821. .select {
  822. border: 1px solid #ff7938;
  823. position: relative;
  824. .mark {
  825. transition: all 0.1s;
  826. opacity: 1;
  827. position: absolute;
  828. bottom: 0;
  829. right: 0;
  830. border-top: 12px solid transparent;
  831. border-left: 12px solid transparent;
  832. border-right: 12px solid #2a63f3;
  833. border-bottom: 12px solid #2a63f3;
  834. i {
  835. position: absolute;
  836. color: white;
  837. font-size: 12px;
  838. right: -11px;
  839. bottom: -11px;
  840. }
  841. }
  842. }
  843. }
  844. }
  845. .pay-btn {
  846. width: 100px;
  847. height: 40px;
  848. text-align: center;
  849. line-height: 40px;
  850. background: #2a63f3;
  851. border-radius: 6px;
  852. font-size: 16px;
  853. font-weight: 400;
  854. color: #ffffff;
  855. margin-top: 20px;
  856. margin-left: calc(100% - 100px);
  857. user-select: none;
  858. cursor: pointer;
  859. }
  860. }
  861. .pay-info {
  862. /deep/ .el-dialog__header {
  863. display: none;
  864. }
  865. /deep/ .el-dialog__body {
  866. padding: 20px 30px;
  867. }
  868. .info-item {
  869. display: flex;
  870. align-items: center;
  871. justify-content: space-between;
  872. margin: 10px 0;
  873. .label {
  874. font-size: 16px;
  875. color: black;
  876. font-weight: 500;
  877. }
  878. .value {
  879. font-size: 16px;
  880. color: #999999;
  881. font-weight: 500;
  882. cursor: pointer;
  883. }
  884. }
  885. }
  886. }
  887. </style>