detail.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. <template>
  2. <view class="scenic-order-detail">
  3. <zs-skeleton type="orderDetail" :loading="pageLoading"></zs-skeleton>
  4. <view class="status-box">
  5. <view class="text-box">
  6. <view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
  7. 等待支付,剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
  8. </view>
  9. <view class="status" v-else>
  10. {{info.goodsList[0].goodsState | filterType}}
  11. </view>
  12. </view>
  13. </view>
  14. <view class="content progress" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'" @click="refundDetail">
  15. <view class="progress-title">
  16. 退款进度
  17. </view>
  18. <view class="progress-desc">
  19. 查看退款详情
  20. </view>
  21. </view>
  22. <view class="content ticket-info">
  23. <view class="title">
  24. {{ticketInfo.productName}}
  25. </view>
  26. <view class="notice" @click="handleNotice">
  27. <view class="text">
  28. 预定须知
  29. </view>
  30. <image class="jiantou" src="../static/right.png" mode=""></image>
  31. </view>
  32. <view class="item">
  33. <view class="value">
  34. 出游日期
  35. </view>
  36. <view class="value">
  37. {{info.goodsList[0].goodsInfo.startTime}}
  38. </view>
  39. </view>
  40. <view class="item">
  41. <view class="value">
  42. 预订数量
  43. </view>
  44. <view class="value">
  45. {{info.goodsList[0].goodsInfo.bookNumber}}
  46. </view>
  47. </view>
  48. </view>
  49. <view class="content">
  50. <view class="title">
  51. 门票信息
  52. </view>
  53. <view class="item" v-if="info.goodsList[0].goodsState == 'USED'">
  54. <view class="label">
  55. 使用时间
  56. </view>
  57. <view class="value">
  58. {{ticketInfo.indate}}
  59. </view>
  60. </view>
  61. <view class="item" v-if="ticketInfo.indate">
  62. <view class="label">
  63. 有效时间
  64. </view>
  65. <view class="value">
  66. {{ticketInfo.indate}}
  67. </view>
  68. </view>
  69. <view class="item">
  70. <view class="label">
  71. 入园方式
  72. </view>
  73. <view class="value">
  74. {{ticketInfo.admissionVoucher.smsMessage}}
  75. </view>
  76. </view>
  77. <view class="item" v-if="info.goodsList[0].goodsState == 'USED'||info.goodsList[0].goodsState == 'WAIT_USE'">
  78. <view class="label">
  79. 出票时间
  80. </view>
  81. <view class="value">
  82. {{ $u.timeFormat(info.payment.payTime,'yyyy-mm-dd hh:MM:ss')}}
  83. </view>
  84. </view>
  85. </view>
  86. <view class="content">
  87. <view class="title">
  88. 取票人信息
  89. </view>
  90. <view class="item" v-if="info.goodsList[0].goodsInfo.contact.contactName">
  91. <view class="label">
  92. 姓名
  93. </view>
  94. <view class="value">
  95. {{info.goodsList[0].goodsInfo.contact.contactName}}
  96. </view>
  97. </view>
  98. <view class="item" v-if="info.goodsList[0].goodsInfo.contact.contactTel">
  99. <view class="label">
  100. 手机号
  101. </view>
  102. <view class="value">
  103. {{info.goodsList[0].goodsInfo.contact.contactTel}}
  104. </view>
  105. </view>
  106. <view class="item" v-if="info.goodsList[0].goodsInfo.contact.psptId">
  107. <view class="label">
  108. 证件类型
  109. </view>
  110. <view class="value">
  111. {{info.goodsList[0].goodsInfo.contact.psptType |filterPsptType}}
  112. </view>
  113. </view>
  114. <view class="item" v-if="info.goodsList[0].goodsInfo.contact.psptId">
  115. <view class="label">
  116. 证件号
  117. </view>
  118. <view class="value">
  119. {{info.goodsList[0].goodsInfo.contact.psptId}}
  120. </view>
  121. </view>
  122. </view>
  123. <view class="content" v-if="info.goodsList[0].goodsInfo.touristList.length">
  124. <view class="title">
  125. 出游人信息
  126. </view>
  127. <view class="box" v-for="(item,index) in info.goodsList[0].goodsInfo.touristList" :key="index">
  128. <view class="item">
  129. <view class="label">
  130. 姓名
  131. </view>
  132. <view class="value">
  133. {{item.name}}
  134. </view>
  135. </view>
  136. <view class="item">
  137. <view class="label">
  138. 手机号
  139. </view>
  140. <view class="value">
  141. {{item.tel}}
  142. </view>
  143. </view>
  144. <view class="item">
  145. <view class="label">
  146. 证件类型
  147. </view>
  148. <view class="value">
  149. {{item.psptType |filterPsptType }}
  150. </view>
  151. </view>
  152. <view class="item">
  153. <view class="label">
  154. 证件号
  155. </view>
  156. <view class="value">
  157. {{item.psptId}}
  158. </view>
  159. </view>
  160. </view>
  161. </view>
  162. <view class="content">
  163. <view class="title">
  164. 订单信息
  165. </view>
  166. <view class="item">
  167. <view class="label">
  168. 订单编号
  169. </view>
  170. <view class="value">
  171. {{info.orderNo}}
  172. </view>
  173. </view>
  174. <view class="item">
  175. <view class="label">
  176. 下单时间
  177. </view>
  178. <view class="value">
  179. {{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
  180. </view>
  181. </view>
  182. <view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
  183. <view class="label">
  184. 支付时间
  185. </view>
  186. <view class="value" >
  187. {{payTime}}
  188. </view>
  189. </view>
  190. </view>
  191. <view class="content" >
  192. <view class="title">
  193. 交易信息
  194. </view>
  195. <view class="item">
  196. <view class="label">
  197. 金额
  198. </view>
  199. <view class="value black">
  200. ¥{{info.totalAmount}}
  201. </view>
  202. </view>
  203. <view class="item" >
  204. <view class="label">
  205. 优惠券
  206. </view>
  207. <view class="value red">
  208. -¥{{info.discountAmount}}
  209. </view>
  210. </view>
  211. <view class="item">
  212. <view class="label">
  213. 合计
  214. </view>
  215. <view class="value">
  216. <text class="red fs28">¥{{info.payAmount}}</text>
  217. </view>
  218. </view>
  219. </view>
  220. <template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
  221. <view class="content refund-box">
  222. <view class="title">
  223. 退款原因
  224. </view>
  225. <view class="refund-msg">
  226. {{info.goodsList[0].refundLog.remark}}
  227. </view>
  228. </view>
  229. <button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
  230. </template>
  231. <view class="btn-box" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'">
  232. <button class="cancel-btn" @click="cancel" :loading="btnLoading">
  233. 取消订单
  234. </button>
  235. <button class="btn" @click="pay" :loading="btnLoading">
  236. 立即支付
  237. </button>
  238. </view>
  239. <!-- <view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
  240. <view class="label">
  241. 退款申请
  242. </view>
  243. <view class="value">
  244. 如引发商品争议,可申请平台介入处理
  245. </view>
  246. <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
  247. </view> -->
  248. <u-popup :show="show" round="16rpx" mode="bottom" @close="show = false">
  249. <view class="popup-title">
  250. {{info.shopInfo.shopName}}
  251. </view>
  252. <view class="box">
  253. <template v-if="ticketInfo.drawAddress">
  254. <view class="sub-title">
  255. 取票地点
  256. </view>
  257. <view class="intro">
  258. {{ticketInfo.drawAddress}}
  259. </view>
  260. </template>
  261. <view class="sub-title">
  262. 入园方式
  263. </view>
  264. <view class="intro">
  265. {{ticketInfo.admissionVoucher.admissionVoucherCode | filterVoucherType}}
  266. </view>
  267. <view class="sub-title">
  268. 有效期
  269. </view>
  270. <view class="intro">
  271. {{ticketInfo.indate || '-'}}
  272. </view>
  273. <view class="sub-title">
  274. 预定截止
  275. </view>
  276. <view class="intro">
  277. {{ticketInfo.advanceDay}}天 {{ticketInfo.advanceHour}}小时
  278. </view>
  279. <view class="sub-title">
  280. 退改规则
  281. </view>
  282. <rich-text class="intro" :nodes="ticketInfo.mpLossInfo"></rich-text>
  283. <view class="sub-title">
  284. 预定须知
  285. </view>
  286. <rich-text class="intro" :nodes="ticketInfo.bookNotice"></rich-text>
  287. <view class="sub-title">
  288. 其他说明
  289. </view>
  290. <rich-text class="intro" :nodes="ticketInfo.info"></rich-text>
  291. </view>
  292. </u-popup>
  293. </view>
  294. </template>
  295. <script>
  296. import {qrCode} from '@/api/order.js'
  297. import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js';
  298. import {getTicketDetail,cancelOrder} from '@/api/scenic.js'
  299. export default {
  300. data() {
  301. return {
  302. show:false,
  303. isVisual:false,//是否是虚拟商品
  304. codeData:'123',
  305. loading:false,
  306. btnLoading:false,
  307. oldBright:0,
  308. info:{
  309. goodsList:[{goodsState:'CLOSE'}]
  310. },
  311. isNotTime:false,
  312. ticketInfo:null
  313. }
  314. },
  315. watch: {
  316. // isNotTime(val) {
  317. // if(this.isNotTime){
  318. // this.payDetails(this.info.orderNo)
  319. // }
  320. // }
  321. },
  322. filters: {
  323. filterType: function(val) {
  324. if(val == 'APPLY_REFUND'){
  325. return '退款审核中'
  326. }else if(val == 'CLOSE'){
  327. return '关闭订单'
  328. }else if(val == 'REFUNDED'){
  329. return '已退款'
  330. }else if(val == 'REFUSAL_REFUND'){
  331. return '拒绝退款'
  332. }else if(val == 'USED'){
  333. return '订单已完成'
  334. }else if(val == 'WAIT_PAYMENT'){
  335. return '待付款'
  336. }else if(val == 'WAIT_USE'){
  337. return '待使用'
  338. }
  339. },
  340. filterPay(val){
  341. if(val == 'wx.unifiedOrder'){
  342. return '微信支付'
  343. }else if(val == 'trade.create'){
  344. return '支付宝支付'
  345. }else if(val == 'uac.miniOrder'){
  346. return '云闪付支付'
  347. }else{
  348. return '-'
  349. }
  350. },
  351. filterPsptType(val){
  352. if(val == 1){
  353. return '身份证'
  354. }else if(val == 2){
  355. return '护照'
  356. }else if(val == 3){
  357. return '军官证'
  358. }else if(val == 4){
  359. return '港澳通行证'
  360. }else if(val == 7){
  361. return '台胞证'
  362. }
  363. },
  364. filterVoucherType: function(val) {
  365. if(val == 1){
  366. return '实体票入园'
  367. }else if(val == 201){
  368. return '换票入园短信'
  369. }else if(val == 202){
  370. return '换票入园二维码'
  371. }else if(val == 203){
  372. return '换票入园数字码'
  373. }else if(val == 204){
  374. return '换票入园换票证'
  375. }else if(val == 205){
  376. return '换票入园邮件'
  377. }else if(val == 206){
  378. return '换票入园身份证'
  379. }else if(val == 207){
  380. return '换票入园护照'
  381. }else if(val == 208){
  382. return '换票入园港澳通行证'
  383. }else if(val == 209){
  384. return '换票入园军官证'
  385. }else if(val == 210){
  386. return '换票入园台胞证'
  387. }else if(val == 301){
  388. return '直接验证入园二维码'
  389. }else if(val == 302){
  390. return '直接验证入园邮件'
  391. }else if(val == 303){
  392. return '直接验证入园身份证'
  393. }else if(val == 304){
  394. return '直接验证入园护照'
  395. }else if(val == 305){
  396. return '直接验证入园港澳通行证'
  397. }else if(val == 306){
  398. return '直接验证入园军官证'
  399. }else if(val == 307){
  400. return '直接验证入园台胞证'
  401. }
  402. }
  403. },
  404. computed: {
  405. closeTime() {
  406. return (this.info.createTime + 1000*60*30) - new Date().getTime()
  407. },
  408. payTime(){
  409. if(this.info.goodsList[0].extend&&!JSON.parse(this.info.goodsList[0].extend).hasOwnProperty('account')){
  410. if(JSON.parse(this.info.goodsList[0].extend).hasOwnProperty('notifyOrderInfo')){
  411. console.log(11,JSON.parse(this.info.goodsList[0].extend).notifyOrderInfo.payTime);
  412. return JSON.parse(this.info.goodsList[0].extend).notifyOrderInfo.payTime
  413. }else{
  414. console.log(22);
  415. return '-'
  416. }
  417. }else{
  418. if(this.info.payment && this.info.payment.paymentTime){
  419. console.log(3);
  420. return uni.$u.timeFormat(this.info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss')
  421. }else{
  422. console.log(4);
  423. return '-'
  424. }
  425. }
  426. }
  427. },
  428. methods: {
  429. handleNotice(){
  430. this.show = true
  431. },
  432. isRefund(){
  433. if(!this.info.goodsList[0].verifyModel){//没核销
  434. return true
  435. }else if(this.info.goodsList[0].verifyModel && (new Date().getTime() < (this.info.goodsList[0].verifyModel.checkTime + 1000*60*60*48))){// 已核销 并且没超过48小时
  436. return true
  437. }else{
  438. return false
  439. }
  440. },
  441. finish(){
  442. this.isNotTime = true
  443. this.payDetails(this.info.orderNo)
  444. },
  445. refundDetail(){
  446. uni.navigateTo({
  447. url:`/my/order/refundDetail?id=${this.info.orderNo}`
  448. })
  449. },
  450. handleCall(){
  451. uni.makePhoneCall({
  452. phoneNumber: '4000016553'//仅为示例
  453. });
  454. },
  455. apply(){
  456. let that = this
  457. uni.navigateTo({
  458. url:'./refund',
  459. success: function(res) {
  460. // 通过eventChannel向被打开页面传送数据
  461. res.eventChannel.emit('orderInfo', that.info)
  462. }
  463. })
  464. },
  465. // 获取订单详情
  466. payDetails(orderNo){
  467. payDetails(orderNo).then(res=>{
  468. this.pageLoading = false
  469. this.info = res.content
  470. this.getTicketDetail(res.content.goodsList[0].goodsInfo.productId)
  471. })
  472. },
  473. // 取消支付
  474. cancel(){
  475. uni.showLoading({
  476. title: '取消中'
  477. })
  478. let obj = {
  479. orderId:this.info.orderNo,
  480. remark:'退款',
  481. }
  482. cancelOrder(obj).then(res=>{
  483. if(res.state == 'Success'){
  484. uni.showToast({
  485. title: '取消成功',
  486. icon: 'success'
  487. })
  488. this.payDetails(this.info.orderNo)
  489. }
  490. })
  491. },
  492. // 支付
  493. pay(){
  494. let that = this
  495. if (this.btnLoading) return
  496. this.btnLoading = true
  497. uni.showLoading({
  498. title: '支付中'
  499. })
  500. let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
  501. uni.requestPayment({
  502. "provider": "wxpay",
  503. "orderInfo": miniPayRequest,
  504. "appid": miniPayRequest.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
  505. "paySign": miniPayRequest.paySign,
  506. "nonceStr": miniPayRequest.nonceStr, // 随机字符串
  507. "package": miniPayRequest.package, // 固定值
  508. // "prepayid": miniPayRequest.package, // 统一下单订单号
  509. "timeStamp": miniPayRequest.timeStamp, // 时间戳(单位:秒)
  510. "signType": miniPayRequest.signType, //签名算法
  511. success(msg) {
  512. console.log('msg', msg);
  513. queryPayOrder(that.info.orderNo).then(res1 => {
  514. if (res1.state == 'Success') {
  515. uni.hideLoading()
  516. uni.showToast({
  517. title: '支付成功',
  518. icon: 'success'
  519. })
  520. that.btnLoading = false
  521. that.payDetails(that.info.orderNo)
  522. }
  523. })
  524. },
  525. fail(e) {
  526. that.btnLoading = false
  527. uni.hideLoading()
  528. uni.showToast({
  529. title: '取消支付',
  530. icon: 'fail'
  531. })
  532. // 取消支付后,获取支付信息以备再次支付
  533. that.payDetails(that.info.orderNo)
  534. console.log('err', e,this);
  535. }
  536. })
  537. },
  538. // 取消退款申请
  539. cancelReply(){
  540. if (this.btnLoading) return
  541. this.btnLoading = true
  542. uni.showLoading({
  543. title: '取消中'
  544. })
  545. unRefund({id:this.info.goodsList[0].id}).then(res=>{
  546. this.btnLoading = false
  547. uni.hideLoading()
  548. if (res.state == 'Success') {
  549. this.payDetails(this.info.orderNo)
  550. uni.showToast({
  551. title:'取消成功',
  552. icon:'success'
  553. })
  554. }
  555. })
  556. },
  557. getTicketDetail(productId){
  558. getTicketDetail({productId}).then(res=>{
  559. if(res.state == 'Success'){
  560. this.ticketInfo = res.content.data
  561. this.ticketInfo.mpLossInfo = this.ticketInfo.mpLossInfo.replace(/\n/g, "<br>")
  562. this.ticketInfo.info = this.ticketInfo.info.replace(/\n/g, "<br>")
  563. this.ticketInfo.bookNotice = this.ticketInfo.bookNotice.replace(/\n/g, "<br>")
  564. }
  565. })
  566. },
  567. },
  568. onReady() {
  569. },
  570. onLoad(options) {
  571. this.info.orderNo = options.id
  572. },
  573. onShow() {
  574. this.pageLoading = true
  575. this.payDetails(this.info.orderNo)
  576. },
  577. created() {
  578. // this.info = JSON.parse(uni.getStorageSync('order'))
  579. }
  580. }
  581. </script>
  582. <style lang="scss">
  583. .scenic-order-detail{
  584. background: #F9F9F9;
  585. min-height: 100vh;
  586. padding-bottom: 150rpx;
  587. .status-box{
  588. padding: 24rpx 24rpx 4rpx;
  589. display: flex;
  590. justify-content: space-between;
  591. .text-box{
  592. color: #181818;
  593. .status{
  594. font-weight: bold;
  595. font-size: 32rpx;
  596. display: flex;
  597. .u-count-down__text{
  598. color: $uni-color-primary!important;
  599. }
  600. }
  601. .notice{
  602. font-size: 24rpx;
  603. margin-top: 20rpx;
  604. }
  605. }
  606. }
  607. .ticket-info{
  608. .title{
  609. font-weight: 600;
  610. font-size: 36rpx;
  611. color: #222222;
  612. width: 100%;
  613. white-space: nowrap;
  614. overflow: hidden;
  615. text-overflow: ellipsis;
  616. margin-top: 10rpx;
  617. }
  618. .notice{
  619. display: flex;
  620. align-items: center;
  621. font-size: 24rpx;
  622. color: #AAAAAA;
  623. margin-top: 20rpx;
  624. .jiantou{
  625. width: 48rpx;
  626. height: 48rpx;
  627. }
  628. }
  629. }
  630. .progress{
  631. .progress-title{
  632. font-weight: 600;
  633. font-size: 32rpx;
  634. color: #181818;
  635. }
  636. .progress-desc{
  637. font-weight: 300;
  638. font-size: 24rpx;
  639. color: #AAAAAA;
  640. margin-top: 15rpx;
  641. }
  642. }
  643. .black{
  644. color: #222222!important;
  645. }
  646. .red{
  647. color: red!important;
  648. }
  649. .fs28{
  650. font-size: 28rpx!important;
  651. font-weight: bold;
  652. }
  653. .code-box{
  654. display: flex;
  655. align-items: center;
  656. justify-content: space-between;
  657. .left{
  658. .title{
  659. font-weight: 500;
  660. font-size: 28rpx;
  661. color: #222222;
  662. }
  663. .codeNum{
  664. font-weight: 300;
  665. font-size: 24rpx;
  666. color: #AAAAAA;
  667. margin-top: 15rpx;
  668. }
  669. }
  670. .code-btn{
  671. display: flex;
  672. align-items: center;
  673. font-weight: 300;
  674. font-size: 24rpx;
  675. color: #AAAAAA;
  676. .jiantou{
  677. width: 24rpx;
  678. height: 24rpx;
  679. }
  680. }
  681. }
  682. .input-box{
  683. margin: 20rpx 30rpx;
  684. padding: 28rpx 24rpx;
  685. background: #FFFFFF;
  686. border-radius: 16rpx 16rpx 16rpx 16rpx;
  687. display: flex;
  688. align-items: center;
  689. justify-content: space-between;
  690. .label {
  691. color: #222;
  692. font-size: 28rpx;
  693. }
  694. .value {
  695. font-size: 28rpx;
  696. color: #AAAAAA;
  697. }
  698. }
  699. .content{
  700. margin: 20rpx 30rpx;
  701. padding: 28rpx 24rpx;
  702. border-radius: 16rpx;
  703. background: #fff;
  704. .title{
  705. font-weight: 600;
  706. font-size: 28rpx;
  707. color: #222222;
  708. }
  709. .item{
  710. display: flex;
  711. align-items: center;
  712. justify-content: space-between;
  713. margin-top: 28rpx;
  714. .label{
  715. font-size: 28rpx;
  716. color: #AAAAAA;
  717. }
  718. .value{
  719. font-size: 28rpx;
  720. color: #222222;
  721. }
  722. }
  723. }
  724. .pay-btn{
  725. background: $uni-color-primary;
  726. width: 688rpx;
  727. height: 80rpx;
  728. line-height: 80rpx;
  729. border-radius: 46rpx;
  730. color: #fff;
  731. margin-top: 50rpx;
  732. }
  733. .refund-box{
  734. .refund-msg{
  735. font-weight: 300;
  736. font-size: 24rpx;
  737. color: #222222;
  738. margin-top: 15rpx;
  739. line-height: 40rpx;
  740. }
  741. }
  742. .apply-box{
  743. position: relative;
  744. .label{
  745. font-weight: 600;
  746. font-size: 28rpx;
  747. color: #222222;
  748. }
  749. .value{
  750. color: #999999;
  751. font-size: 24rpx;
  752. margin-top: 15rpx;
  753. }
  754. .jiantou{
  755. position: absolute;
  756. top: 50%;
  757. right: 24rpx;
  758. transform: translateY(-50%);
  759. width: 24rpx;
  760. height: 24rpx;
  761. }
  762. }
  763. .btn-box {
  764. position: fixed;
  765. bottom: 0%;
  766. left: 0%;
  767. width: 100%;
  768. display: flex;
  769. align-items: center;
  770. justify-content: flex-end;
  771. box-sizing: border-box;
  772. padding: 10rpx 24rpx env(safe-area-inset-bottom);
  773. background: #fff;
  774. border-top: 1rpx solid #EEEEEE;
  775. .cancel-btn{
  776. width: 240rpx;
  777. height: 80rpx;
  778. line-height: 80rpx;
  779. text-align: center;
  780. border-radius: 40rpx;
  781. border: 2rpx solid #EE4320;
  782. font-weight: 600;
  783. font-size: 28rpx;
  784. color: #EE4320;
  785. margin: 0;
  786. }
  787. .btn {
  788. width: 240rpx;
  789. height: 80rpx;
  790. line-height: 80rpx;
  791. text-align: center;
  792. background: $uni-color-primary;
  793. border-radius: 40rpx;
  794. font-weight: 600;
  795. font-size: 28rpx;
  796. color: #FFFFFF;
  797. margin: 0;
  798. margin-left: 20rpx;
  799. }
  800. }
  801. .info{
  802. .order-info{
  803. display: flex;
  804. .icon{
  805. width: 164rpx;
  806. height: 164rpx;
  807. border-radius: 16rpx;
  808. flex-shrink: 0;
  809. }
  810. .shop-info{
  811. display: flex;
  812. flex-direction: column;
  813. justify-content: space-between;
  814. padding-left: 24rpx;
  815. flex: 1;
  816. box-sizing: border-box;
  817. .title{
  818. color: #181818;
  819. font-size: 28rpx;
  820. width: 450rpx;
  821. white-space: nowrap;
  822. overflow: hidden;
  823. text-overflow: ellipsis;
  824. }
  825. .price-box{
  826. display: flex;
  827. align-items: center;
  828. justify-content: space-between;
  829. .price{
  830. color: #181818;
  831. font-size: 32rpx;
  832. font-weight: bold;
  833. }
  834. }
  835. .start-time,.goods-desc{
  836. font-size: 24rpx;
  837. color: #AAAAAA;
  838. width: 450rpx;
  839. white-space: nowrap;
  840. overflow: hidden;
  841. text-overflow: ellipsis;
  842. }
  843. }
  844. }
  845. }
  846. .wrap{
  847. display: flex;
  848. justify-content: center;
  849. align-items: center;
  850. height: 100vh;
  851. overflow: hidden;
  852. }
  853. .u-popup__content{
  854. padding: 0 24rpx 28rpx;
  855. position: relative;
  856. .popup-title{
  857. font-weight: 600;
  858. font-size: 32rpx;
  859. color: #222222;
  860. padding: 28rpx 0;
  861. border-bottom: 1rpx solid #F0F0F0;
  862. }
  863. .box{
  864. max-height: 70vh;
  865. overflow: auto;
  866. .sub-title{
  867. font-weight: 600;
  868. font-size: 28rpx;
  869. color: #222222;
  870. margin: 20rpx 0;
  871. }
  872. .intro{
  873. font-weight: 300;
  874. font-size: 24rpx;
  875. color: #AAAAAA;
  876. line-height: 40rpx;
  877. padding-bottom: 24rpx;
  878. }
  879. .border-bottom{
  880. border-bottom: 1rpx solid #F0F0F0!important;
  881. }
  882. }
  883. }
  884. }
  885. </style>