index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <view>
  3. <nav-bar title="我的订单"></nav-bar>
  4. <view style="
  5. width: 100%;
  6. text-align: center;
  7. position: fixed;
  8. height: 96rpx;
  9. z-index: 999;
  10. ">
  11. <u-tabs :list="list" sticky :current="current" @change="change" active-color="#007AFF"
  12. :offset="[-1, 0]"></u-tabs>
  13. </view>
  14. <view style="padding: 96rpx 8rpx 130rpx">
  15. <view v-if="!order.length" class="noData">您暂无相关订单哦~</view>
  16. <template v-else>
  17. <view v-for="(item, index) in order" :key="index" class="lisChild">
  18. <view class="item">
  19. <view class="header" @click="openPopup(index)">
  20. <view>订单编号:{{ item.orderSn }}</view>
  21. <view>{{ $method.timestampToTime(item.createTime) }}</view>
  22. </view>
  23. <u-line color="#D6D6DB" />
  24. <view v-if="current == 3">
  25. <view class="body">
  26. <view class="body__content">
  27. <image class="goods-img" :src="$method.splitImgHost(item.coverUrl)"></image>
  28. <view class="goods-text">
  29. <view class="goods-name">{{ item.goodsName }}</view>
  30. <!-- <view class="goods-price">¥ {{ items.goodsRealPrice }}</view> -->
  31. </view>
  32. </view>
  33. </view>
  34. </view>
  35. <view v-else>
  36. <view class="body" v-for="(items, indexs) in item.orderGoodsList" :key="indexs"
  37. @click="goCourse(items, item.orderStatus)">
  38. <view class="body__content">
  39. <image class="goods-img" :src="$method.splitImgHost(items.coverUrl)"></image>
  40. <view class="goods-text">
  41. <view class="goods-name">{{ items.goodsName }}</view>
  42. <view class="goods-name" v-if="items.sevenYear">{{
  43. items.sevenYear
  44. }}</view>
  45. <view v-if="item.orderFrom !== 6" class="goods-price">¥
  46. {{ items.goodsRealPrice }}
  47. </view>
  48. </view>
  49. </view>
  50. <view style="
  51. display: flex;
  52. flex-direction: row-reverse;
  53. padding: 10rpx 0;
  54. ">
  55. <view v-if="
  56. items.refundStatus === 0 &&
  57. (item.orderFrom === 2 || item.orderFrom === 3) &&
  58. (item.orderStatus === 1 ||
  59. item.orderStatus === 2 ||
  60. item.orderStatus === 3) &&
  61. (items.goodsType == '1' ||
  62. items.goodsType == '2' ||
  63. items.goodsType == '3' ||
  64. items.goodsType == '6') &&
  65. items.goodsPrice > 0
  66. " class="btn2" @click.stop="handelRefund(item.orderSn, items)">申请退款</view>
  67. <!-- <view v-if="items.refundStatus == 2"> 已退款</view> -->
  68. <view v-if="items.periodStatus !== null">{{
  69. [
  70. "复审不通过",
  71. "初审不通过",
  72. "待审核",
  73. "初审通过",
  74. "复审通过待退款",
  75. "已退款",
  76. ][items.periodStatus + 2]
  77. }}</view>
  78. </view>
  79. </view>
  80. </view>
  81. <u-line color="#D6D6DB" />
  82. <view class="footer" v-if="current == 3">
  83. <view>
  84. <text style="color: #999; font-size: 24rpx; margin-right: 8rpx">退款金额</text>
  85. <text
  86. style="color: #ff2d55; font-size: 30rpx; font-weight: bold">¥{{ item.refundFee }}</text>
  87. </view>
  88. </view>
  89. <view class="footer" v-else>
  90. <view>
  91. <text
  92. style="color: #999; font-size: 24rpx; margin-right: 8rpx">共{{ item.orderGoodsList.length }}项</text>
  93. <!-- 业务系统下单的需要隐藏价格 -->
  94. <!-- 订单来源:1业务员普通单,2祥粤云学堂小程序,3祥粤云学堂网站,4祥粤e管证小程序,5业务员录单,6业务系统下单 -->
  95. <text v-if="item.orderFrom !== 6">
  96. <text style="color: #333; font-size: 30rpx; font-weight: bold">合计</text>
  97. <text
  98. style="color: #ff2d55; font-size: 30rpx; font-weight: bold">¥{{ item.payPrice }}</text>
  99. </text>
  100. </view>
  101. <view style="display: flex; align-items: center">
  102. <view class="btn2" v-if="
  103. item.orderStatus === 0 &&
  104. (item.orderFrom === 2 || item.orderFrom === 3)
  105. " @click="resumeOrder(item)">继续支付</view>
  106. <!-- <view class="btn2" v-if="item.orderStatus === -1 || item.orderStatus === -2" @click="againBuy(item)">重新购买</view> -->
  107. <view class="btn1" v-if="
  108. (item.orderStatus === -1 || item.orderStatus === -2) &&
  109. (item.orderFrom === 2 || item.orderFrom === 3)
  110. " @click="delOrder(item)">删除订单</view>
  111. <view class="btn1" @click="closeOrder(item)" v-if="
  112. item.orderStatus === 0 &&
  113. (item.orderFrom === 2 || item.orderFrom === 3)
  114. ">取消订单</view>
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. </template>
  120. <template v-if="current == 1 && order.length">
  121. <view class="apply_btn">
  122. <view class="apply-invoice" @click="goInvoice">发票申请</view>
  123. </view>
  124. </template>
  125. </view>
  126. <!-- 退款弹窗 -->
  127. <u-popup v-model="show" :mask-close-able="false" closeable mode="center" width="80%" border-radius="24">
  128. <view class="rf-popup-main">
  129. <view class="title">确认要退款吗</view>
  130. <u-select v-model="showConfirm" mode="single-column" :list="refundList"
  131. :default-value="[refundForm.applyReasonIndex-1]" @confirm="confirm"></u-select>
  132. <view @click="showConfirm = true" class="btn_refund">
  133. {{refundForm.applyReasonIndex?refundList[refundForm.applyReasonIndex-1].label:'选择退款原因'}}
  134. </view>
  135. <u-input v-if="refundForm.applyReasonIndex == 5" v-model.trim="refundForm.applyReason"
  136. placeholder-style="color:#999999" placeholder="输入退款原因" class="applyInput" />
  137. <u-button type="primary" style="border-radius: 60rpx;" @click="refund">确定</u-button>
  138. </view>
  139. </u-popup>
  140. </view>
  141. </template>
  142. <script>
  143. import {
  144. mapGetters
  145. } from "vuex";
  146. export default {
  147. components: {},
  148. data() {
  149. return {
  150. showConfirm: false,
  151. refundList: [{
  152. label: "已学过,重复报名",
  153. value: 1
  154. },
  155. {
  156. label: "报错专业/课程",
  157. value: 2
  158. },
  159. {
  160. label: "班级未开班",
  161. value: 3
  162. },
  163. {
  164. label: "培训/继教周期未到",
  165. value: 4
  166. },
  167. {
  168. label: "其他",
  169. value: 5
  170. }
  171. ],
  172. list: [{
  173. name: "待支付",
  174. count: 0,
  175. },
  176. {
  177. name: "已支付",
  178. count: 0,
  179. },
  180. {
  181. name: "已取消",
  182. count: 0,
  183. },
  184. {
  185. name: "已退款",
  186. count: 0,
  187. },
  188. ],
  189. current: 0,
  190. order: [],
  191. formData: {
  192. status: "0,1",
  193. pageNum: 1,
  194. pageSize: 10,
  195. },
  196. pageNum1: 0,
  197. pageNum2: 0,
  198. pageNum3: 0,
  199. pageNum4: 0,
  200. refundForm: {},
  201. show: false,
  202. value: "",
  203. };
  204. },
  205. // onPullDownRefresh() {},
  206. onLoad(option) {
  207. this.current = +option.current || 0;
  208. this.getOrderList();
  209. this.getOrderNum();
  210. },
  211. onShow() {
  212. /* if(this.current === 2 && this.$method.isLogin()){
  213. this.$refs.refMy.init();
  214. } */
  215. },
  216. //分享功能
  217. onShareAppMessage(res) {
  218. var self = this;
  219. return {
  220. title: "中正",
  221. path: `/pages/index/index?inviteCode=` + userInfo == null ?
  222. "" : userInfo.userAccount,
  223. };
  224. },
  225. onReachBottom() {
  226. this.formData.pageNum++;
  227. this.getFY();
  228. },
  229. methods: {
  230. confirm(e) {
  231. this.refundForm.applyReasonIndex = e[0].value
  232. this.refundForm.applyReason = ''
  233. },
  234. getOrderNum() {
  235. this.$api
  236. .getorderlists({
  237. status: "0,1",
  238. pageNum: 1,
  239. pageSize: 1,
  240. orderStatus: "0",
  241. })
  242. .then((res) => {
  243. if (res.data.code === 200) {
  244. this.list[0].count = res.data.total;
  245. }
  246. });
  247. this.$api
  248. .getorderlists({
  249. status: "0,1",
  250. pageNum: 1,
  251. pageSize: 1,
  252. orderStatus: "1,2,3,4",
  253. })
  254. .then((res) => {
  255. if (res.data.code === 200) {
  256. this.list[1].count = res.data.total;
  257. }
  258. });
  259. this.$api
  260. .getorderlists({
  261. status: "0,1",
  262. pageNum: 1,
  263. pageSize: 1,
  264. orderStatus: "-1,-2",
  265. })
  266. .then((res) => {
  267. if (res.data.code === 200) {
  268. this.list[2].count = res.data.total;
  269. }
  270. });
  271. },
  272. /**
  273. * 跳转发票申请页面
  274. */
  275. goInvoice() {
  276. uni.navigateTo({
  277. url: `/pages2/invoice/index`,
  278. });
  279. },
  280. handelRefund(orderSn, item) {
  281. this.refundForm = {
  282. orderSn: orderSn,
  283. goodsId: item.goodsId,
  284. orderGoodsId: item.orderGoodsId,
  285. applyReasonIndex: "",
  286. applyReason: "",
  287. };
  288. this.show = true;
  289. },
  290. refund() {
  291. if (!this.refundForm.applyReasonIndex) {
  292. uni.showToast({
  293. title: "请选择退款原因"
  294. })
  295. return
  296. } else if (this.refundForm.applyReasonIndex == 5 && !this.refundForm.applyReason) {
  297. uni.showToast({
  298. title: "请输入退款原因"
  299. })
  300. return
  301. }
  302. this.refundForm.applyReason = this.refundForm.applyReasonIndex == 5 ? this.refundForm.applyReason : this
  303. .refundList[this.refundForm.applyReasonIndex - 1].label
  304. delete this.refundForm.applyReasonIndex
  305. this.$api.refundSmallOrder(this.refundForm).then((res) => {
  306. this.show = false;
  307. if (res.data.code == 200) {
  308. this.$method.showToast(res.data.msg);
  309. this.getOrderList();
  310. } else {
  311. uni.showToast({
  312. icon: "none",
  313. title: res.data.msg,
  314. });
  315. }
  316. });
  317. },
  318. /**
  319. * 跳转课程
  320. */
  321. goCourse(item, orderStatus) {
  322. // if(orderStatus == 1 || orderStatus == 2) {
  323. // console.log(item)
  324. // if(item.goodsType == 1) { //网课
  325. // uni.navigateTo({
  326. // url:'/pages2/wd/course?gid='+item.gradeId+'&id='+item.goodsId
  327. // })
  328. // } else if(item.goodsType == 2) { //题库
  329. // uni.navigateTo({
  330. // url:'/pages2/bank/question_detail?id='+item.goodsId
  331. // })
  332. // }
  333. // }
  334. },
  335. resumeOrder(item) {
  336. let self = this;
  337. // #ifdef MP-WEIXIN
  338. uni.login({
  339. provider: "weixin",
  340. success: function(loginRes) {
  341. console.log(loginRes, 69);
  342. self.getOpenid(loginRes.code, item);
  343. },
  344. });
  345. // #endif
  346. // #ifdef H5
  347. // 在首页已经请求过接口/gzh_login 提交code了
  348. this.resumeOrderPay(item);
  349. // #endif
  350. },
  351. getOpenid(code, item) {
  352. let self = this;
  353. this.$api.wxOpenid({
  354. code: code
  355. }).then((res) => {
  356. if (res.data.code == 200) {
  357. self.resumeOrderPay(item);
  358. }
  359. });
  360. },
  361. resumeOrderPay(item) {
  362. let data = {
  363. orderSn: item.orderSn
  364. };
  365. // #ifdef MP-WEIXIN
  366. this.$api.resumeSmallOrder(data).then((res) => {
  367. if (res.data.code == 200) {
  368. let data = res.data.data;
  369. uni.requestPayment({
  370. provider: data.provider,
  371. nonceStr: data.nonceStr,
  372. package: data.package,
  373. signType: data.signType,
  374. paySign: data.sign,
  375. timeStamp: String(data.timeStamp),
  376. success: function(res) {
  377. uni.redirectTo({
  378. url: "/pages2/order/confirm_success?sn=" + data.orderSn,
  379. });
  380. console.log("success:" + JSON.stringify(res));
  381. },
  382. fail: function(err) {
  383. console.log("fail:" + JSON.stringify(err));
  384. },
  385. });
  386. } else {
  387. uni.showModal({
  388. title: "提示",
  389. content: res.data.msg,
  390. showCancel: false,
  391. });
  392. }
  393. });
  394. // #endif
  395. // #ifdef H5
  396. data["url"] = location.href;
  397. this.$api.resumePlaceGzhOrder(data).then((res) => {
  398. console.log(res, "继续支付res");
  399. if (res.data.code == 200) {
  400. this.h5_wxpay(res.data.data);
  401. } else {
  402. uni.showModal({
  403. title: "提示",
  404. content: res.data.msg,
  405. showCancel: false,
  406. });
  407. }
  408. });
  409. // #endif
  410. },
  411. h5_wxpay(data) {
  412. console.log("调起支付状态1", data);
  413. let self = this;
  414. function onBridgeReady() {
  415. // 加载框
  416. WeixinJSBridge.invoke(
  417. "getBrandWCPayRequest", {
  418. appId: data.appId, // 公众号名称,由商户传入
  419. timeStamp: data.timeStamp, // 时间戳,自1970年以来的秒数
  420. nonceStr: data.nonceStr, // 随机串
  421. package: data.package,
  422. signType: data.signType, // 微信签名方式:
  423. paySign: data.paySign, // 微信签名
  424. },
  425. function(res) {
  426. // 判断支付状态
  427. console.log("支付状态", res, "this:", this, self);
  428. if (res.err_msg === "get_brand_wcpay_request:ok") {
  429. self.$u.toast("支付成功");
  430. uni.redirectTo({
  431. url: "/pages2/order/confirm_success?sn=" + data.orderSn,
  432. });
  433. } else if (res.err_msg === "get_brand_wcpay_request:cancel") {
  434. self.$u.toast("取消支付");
  435. } else {
  436. self.$u.toast("支付失败");
  437. }
  438. }
  439. );
  440. }
  441. if (typeof WeixinJSBridge === "undefined") {
  442. if (document.addEventListener) {
  443. document.addEventListener(
  444. "WeixinJSBridgeReady",
  445. onBridgeReady,
  446. false
  447. );
  448. } else if (document.attachEvent) {
  449. document.attachEvent("WeixinJSBridgeReady", onBridgeReady);
  450. document.attachEvent("onWeixinJSBridgeReady", onBridgeReady);
  451. }
  452. } else {
  453. onBridgeReady();
  454. }
  455. },
  456. openPopup() {},
  457. //删除订单
  458. delOrder(item) {
  459. var self = this;
  460. uni.showModal({
  461. content: "确定要删除该订单吗",
  462. success: function(res) {
  463. if (res.confirm) {
  464. self.$api
  465. .eddOrder({
  466. orderId: item.orderId,
  467. status: -1,
  468. })
  469. .then((res) => {
  470. if (res.data.code === 200) {
  471. self.$method.showToast("订单删除成功");
  472. self.getOrderList();
  473. }
  474. });
  475. }
  476. },
  477. });
  478. },
  479. //取消订单
  480. closeOrder(item) {
  481. var self = this;
  482. uni.showModal({
  483. content: "确定要取消该订单吗",
  484. success: function(res) {
  485. if (res.confirm) {
  486. self.$api
  487. .eddOrder({
  488. orderId: item.orderId,
  489. orderStatus: -1,
  490. })
  491. .then((res) => {
  492. if (res.data.code === 200) {
  493. self.$method.showToast("订单取消成功", "success");
  494. self.getOrderList();
  495. }
  496. });
  497. }
  498. },
  499. });
  500. },
  501. getFY() {
  502. if (this.current === 0) {
  503. this.formData.orderStatus = "0";
  504. if (this.order.length >= this.pageNum1) {
  505. return;
  506. }
  507. }
  508. if (this.current === 1) {
  509. this.formData.orderStatus = "1,2,3,4";
  510. if (this.order.length >= this.pageNum2) {
  511. return;
  512. }
  513. }
  514. if (this.current === 2) {
  515. this.formData.orderStatus = "-1,-2";
  516. if (this.order.length >= this.pageNum3) {
  517. return;
  518. }
  519. }
  520. if (this.current == 3) {
  521. if (this.order.length >= this.pageNum4) {
  522. return;
  523. }
  524. this.formData.orderStatus = "";
  525. this.$api.orderRefundList(this.formData).then((res) => {
  526. if (res.data.code == 200) {
  527. this.order = this.order.concat(res.data.rows);
  528. }
  529. });
  530. return;
  531. }
  532. this.$api.getorderlists(this.formData).then((res) => {
  533. if (res.data.code === 200) {
  534. if (res.data.rows.length) {
  535. this.order = this.order.concat(res.data.rows);
  536. }
  537. }
  538. });
  539. },
  540. //获取订单
  541. getOrderList() {
  542. this.formData.pageNum = 1;
  543. if (this.current === 0) {
  544. this.formData.orderStatus = "0";
  545. }
  546. if (this.current === 1) {
  547. this.formData.orderStatus = "1,2,3,4";
  548. }
  549. if (this.current === 2) {
  550. this.formData.orderStatus = "-1,-2";
  551. }
  552. this.order = [];
  553. this.$api.getorderlists(this.formData).then((res) => {
  554. if (res.data.code === 200) {
  555. if (this.current === 0) {
  556. this.list[0].count = res.data.total;
  557. this.pageNum1 = res.data.total;
  558. }
  559. if (this.current === 1) {
  560. this.list[1].count = res.data.total;
  561. this.pageNum2 = res.data.total;
  562. }
  563. if (this.current === 2) {
  564. this.list[2].count = res.data.total;
  565. this.pageNum3 = res.data.total;
  566. }
  567. this.order = res.data.rows;
  568. console.log("订单列表this.order", this.order);
  569. }
  570. });
  571. },
  572. orderRefundList() {
  573. this.order = [];
  574. this.formData.pageNum = 1;
  575. this.formData.orderStatus = "";
  576. this.$api.orderRefundList(this.formData).then((res) => {
  577. if (res.data.code == 200) {
  578. this.order = res.data.rows;
  579. }
  580. });
  581. },
  582. change(index) {
  583. if (this.current === index) {
  584. return;
  585. }
  586. this.current = index;
  587. console.log("this.current", this.current);
  588. if (this.current == 3) {
  589. //退款订单
  590. this.formData.status = "";
  591. this.orderRefundList();
  592. } else {
  593. //其他订单
  594. this.formData.status = "0,1";
  595. this.getOrderList();
  596. }
  597. uni.pageScrollTo({
  598. scrollTop: 0,
  599. });
  600. },
  601. },
  602. computed: {
  603. ...mapGetters(["userInfo"])
  604. },
  605. };
  606. </script>
  607. <style>
  608. page {
  609. background: #eaeef1;
  610. }
  611. </style>
  612. <style scoped lang="scss">
  613. .lisChild {
  614. border-radius: 16rpx;
  615. margin-bottom: 16rpx;
  616. background: #fff;
  617. .header {
  618. display: flex;
  619. justify-content: space-between;
  620. align-items: center;
  621. height: 80rpx;
  622. padding: 0 15rpx;
  623. color: #666666;
  624. font-size: 24rpx;
  625. }
  626. .body {
  627. padding: 16rpx;
  628. &__content {
  629. display: flex;
  630. justify-content: space-between;
  631. .goods-img {
  632. height: 156rpx;
  633. width: 278rpx;
  634. border-radius: 16rpx;
  635. flex-shrink: 0;
  636. }
  637. .goods-text {
  638. margin-left: 20rpx;
  639. flex: 1;
  640. display: flex;
  641. flex-direction: column;
  642. .goods-name {
  643. color: #333333;
  644. font-size: 30rpx;
  645. font-weight: bold;
  646. flex: 1;
  647. }
  648. .goods-price {
  649. font-size: 30rpx;
  650. font-family: PingFang SC;
  651. font-weight: bold;
  652. color: #ff2d55;
  653. display: flex;
  654. flex-direction: row-reverse;
  655. }
  656. }
  657. }
  658. .btn2 {
  659. width: 144rpx;
  660. height: 46rpx;
  661. background: #ffffff;
  662. border: 2rpx solid #007aff;
  663. border-radius: 16rpx;
  664. text-align: center;
  665. line-height: 48rpx;
  666. color: #007aff;
  667. margin: 0 8rpx;
  668. }
  669. }
  670. .footer {
  671. padding: 0 24rpx;
  672. height: 80rpx;
  673. display: flex;
  674. justify-content: space-between;
  675. align-items: center;
  676. .btn2 {
  677. width: 144rpx;
  678. height: 46rpx;
  679. background: #ffffff;
  680. border: 2rpx solid #007aff;
  681. border-radius: 16rpx;
  682. text-align: center;
  683. line-height: 48rpx;
  684. color: #007aff;
  685. margin: 0 8rpx;
  686. }
  687. .btn1 {
  688. width: 144rpx;
  689. height: 48rpx;
  690. background: #ffffff;
  691. border: 2rpx solid #999999;
  692. border-radius: 16rpx;
  693. text-align: center;
  694. line-height: 48rpx;
  695. color: #999999;
  696. margin: 0 8rpx;
  697. }
  698. }
  699. }
  700. .lisChild:last-child {
  701. margin-bottom: 34rpx;
  702. }
  703. .noData {
  704. text-align: center;
  705. font-size: 32rpx;
  706. font-family: PingFang SC;
  707. font-weight: 500;
  708. color: #999999;
  709. margin: 160rpx 0;
  710. }
  711. .apply_btn {
  712. width: 100%;
  713. height: 124rpx;
  714. background: #ffffff;
  715. box-shadow: 0rpx -2rpx 6rpx 0rpx rgba(0, 0, 0, 0.1);
  716. z-index: 100;
  717. position: fixed;
  718. left: 0;
  719. right: 0;
  720. bottom: 0rpx;
  721. }
  722. .apply-invoice {
  723. margin: 0 auto;
  724. width: 686rpx;
  725. height: 84rpx;
  726. line-height: 84rpx;
  727. text-align: center;
  728. font-size: 32rpx;
  729. color: #fff;
  730. background: #0080ff;
  731. margin-top: 20rpx;
  732. border-radius: 120rpx;
  733. }
  734. .bottomBox {
  735. position: fixed;
  736. bottom: 0;
  737. width: 100%;
  738. left: 0;
  739. height: 98rpx;
  740. background-color: #ffffff;
  741. display: flex;
  742. justify-content: space-between;
  743. align-items: center;
  744. padding: 0 30rpx;
  745. }
  746. .rf-popup-main {
  747. text-align: center;
  748. padding: 40rpx;
  749. .title {
  750. font-size: 40rpx;
  751. font-weight: 600;
  752. }
  753. .tip {
  754. margin: 30rpx 0 40rpx;
  755. font-size: 32rpx;
  756. }
  757. .u-input {
  758. border-radius: 20rpx;
  759. background: #eee;
  760. padding-left: 20rpx !important;
  761. margin-bottom: 40rpx;
  762. }
  763. .u-button {
  764. border-radius: 60rpx !important;
  765. }
  766. }
  767. .btn_refund {
  768. border: 1rpx solid #999;
  769. border-radius: 8rpx;
  770. padding: 20rpx;
  771. margin: 20rpx 0rpx;
  772. }
  773. .applyInput {
  774. display: flex;
  775. padding: 0rpx 10rpx;
  776. margin-bottom: 10rpx;
  777. border: 1rpx solid #999;
  778. border-radius: 8rpx;
  779. }
  780. </style>