detail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. <template>
  2. <view v-if="!isLoading" class="container">
  3. <view class="header">
  4. <!-- 订单状态 -->
  5. <view class="order-status">
  6. <view class="status-icon">
  7. <!-- 进行中的订单 -->
  8. <block v-if="order.order_status == OrderStatusEnum.NORMAL.value">
  9. <!-- 待支付 -->
  10. <block v-if="order.pay_status == PayStatusEnum.PENDING.value">
  11. <image class="image" src="/static/order/status/wait_pay.png" mode="aspectFit"></image>
  12. </block>
  13. <!-- 待发货 -->
  14. <block v-else-if="order.delivery_status == DeliveryStatusEnum.NOT_DELIVERED.value">
  15. <image class="image" src="/static/order/status/wait_deliver.png" mode="aspectFit"></image>
  16. </block>
  17. <!-- 待收货 -->
  18. <block v-else-if="order.receipt_status == ReceiptStatusEnum.NOT_RECEIVED.value">
  19. <image class="image" src="/static/order/status/wait_receipt.png" mode="aspectFit"></image>
  20. </block>
  21. </block>
  22. <!-- 已完成 -->
  23. <block v-if="order.order_status == OrderStatusEnum.COMPLETED.value">
  24. <image class="image" src="/static/order/status/received.png" mode="aspectFit"></image>
  25. </block>
  26. <!-- 已取消/待取消 -->
  27. <block v-if="order.order_status == OrderStatusEnum.CANCELLED.value || order.order_status == OrderStatusEnum.APPLY_CANCEL.value">
  28. <image class="image" src="/static/order/status/close.png" mode="aspectFit"></image>
  29. </block>
  30. </view>
  31. <view class="status-text">
  32. <text>{{ order.state_text }}</text>
  33. </view>
  34. </view>
  35. <!-- 下一步操作 -->
  36. <view class="next-action" v-if="order.order_status == OrderStatusEnum.NORMAL.value">
  37. <view v-if="order.pay_status == PayStatusEnum.PENDING.value" class="action-btn" @click="onPay()">去支付</view>
  38. <view v-if="order.delivery_status == DeliveryStatusEnum.DELIVERED.value && order.receipt_status == ReceiptStatusEnum.NOT_RECEIVED.value" class="action-btn" @click="onReceipt(order.order_id)">确认收货</view>
  39. </view>
  40. </view>
  41. <!-- 快递配送:配送地址 -->
  42. <view class="delivery-address i-card">
  43. <view class="link-man">
  44. <text class="name">{{ order.address.name }}</text>
  45. <text class="phone">{{ order.address.phone }}</text>
  46. </view>
  47. <view class="address">
  48. <text class="region" v-for="(region, idx) in order.address.region" :key="idx">{{ region }}</text>
  49. <text class="detail">{{ order.address.detail }}</text>
  50. </view>
  51. </view>
  52. <!-- 物流信息 -->
  53. <view v-if="order.delivery_type == DeliveryTypeEnum.EXPRESS.value && order.delivery_status == DeliveryStatusEnum.DELIVERED.value && order.express" class="express i-card" @click="handleTargetExpress()">
  54. <view class="main">
  55. <view class="info-item">
  56. <view class="item-lable">物流公司</view>
  57. <view class="item-content">
  58. <text>{{ order.express.express_name }}</text>
  59. </view>
  60. </view>
  61. <view class="info-item">
  62. <view class="item-lable">物流单号</view>
  63. <view class="item-content">
  64. <text>{{ order.express_no }}</text>
  65. <view class="act-copy" @click.stop="handleCopy(order.express_no)">
  66. <text>复制</text>
  67. </view>
  68. </view>
  69. </view>
  70. </view>
  71. <view class="right-arrow">
  72. <text class="iconfont icon-arrow-right"></text>
  73. </view>
  74. </view>
  75. <!-- 商品列表 -->
  76. <view class="goods-list i-card">
  77. <view class="goods-item" v-for="(goods, idx) in order.goods" :key="idx">
  78. <view class="goods-main" @click="handleTargetGoods(goods.goods_id)">
  79. <!-- 商品图片 -->
  80. <view class="goods-image">
  81. <image class="image" :src="goods.goods_image" mode="scaleToFill"></image>
  82. </view>
  83. <!-- 商品信息 -->
  84. <view class="goods-content">
  85. <view class="goods-title"><text class="twoline-hide">{{ goods.goods_name }}</text></view>
  86. <view class="goods-props clearfix">
  87. <view class="goods-props-item" v-for="(props, idx) in goods.goods_props" :key="idx">
  88. <text>{{ props.value.name }}</text>
  89. </view>
  90. </view>
  91. </view>
  92. <!-- 交易信息 -->
  93. <view class="goods-trade">
  94. <view class="goods-price">
  95. <text class="unit">¥</text>
  96. <text class="value">{{ goods.is_user_grade ? goods.grade_goods_price : goods.goods_price }}</text>
  97. </view>
  98. <view class="goods-num">
  99. <text>×{{ goods.total_num }}</text>
  100. </view>
  101. </view>
  102. </view>
  103. <!-- 商品售后 -->
  104. <view class="goods-refund">
  105. <text v-if="goods.refund" class="stata-text">已申请售后</text>
  106. <view v-else-if="order.isAllowRefund" class="action-btn" @click.stop="handleApplyRefund(goods.order_goods_id)">申请售后</view>
  107. </view>
  108. </view>
  109. </view>
  110. <!-- 订单信息 -->
  111. <view class="order-info i-card">
  112. <view class="info-item">
  113. <view class="item-lable">订单编号</view>
  114. <view class="item-content">
  115. <text>{{ order.order_no }}</text>
  116. <view class="act-copy" @click="handleCopy(order.order_no)">
  117. <text>复制</text>
  118. </view>
  119. </view>
  120. </view>
  121. <view class="info-item">
  122. <view class="item-lable">下单时间</view>
  123. <view class="item-content">
  124. <text>{{ order.create_time }}</text>
  125. </view>
  126. </view>
  127. <view class="info-item">
  128. <view class="item-lable">买家留言</view>
  129. <view class="item-content">
  130. <text>{{ order.buyer_remark ? order.buyer_remark : '--' }}</text>
  131. </view>
  132. </view>
  133. </view>
  134. <!-- 结算信息 -->
  135. <view class="trade-info i-card">
  136. <view class="info-item">
  137. <view class="item-lable">订单金额</view>
  138. <view class="item-content">
  139. <text>¥{{ order.total_price }}</text>
  140. </view>
  141. </view>
  142. <view v-if="order.coupon_money > 0" class="info-item">
  143. <view class="item-lable">优惠券抵扣</view>
  144. <view class="item-content">
  145. <text>-¥{{ order.coupon_money }}</text>
  146. </view>
  147. </view>
  148. <view v-if="order.points_money > 0" class="info-item">
  149. <view class="item-lable">{{ setting.points_name }}抵扣</view>
  150. <view class="item-content">
  151. <text>-¥{{ order.points_money }}</text>
  152. </view>
  153. </view>
  154. <view class="info-item">
  155. <view class="item-lable">运费</view>
  156. <view class="item-content">
  157. <text>+¥{{ order.express_price }}</text>
  158. </view>
  159. </view>
  160. <view v-if="order.update_price.value != '0.00'" class="info-item">
  161. <view class="item-lable">后台改价</view>
  162. <view class="item-content">
  163. <text>{{ order.update_price.symbol }}</text>
  164. <text>¥{{ order.update_price.value }}</text>
  165. </view>
  166. </view>
  167. <view class="divider"></view>
  168. <view class="trade-total">
  169. <text class="lable">实付款</text>
  170. <view class="goods-price">
  171. <text class="unit">¥</text>
  172. <text class="value">{{ order.pay_price }}</text>
  173. </view>
  174. </view>
  175. </view>
  176. <!-- 底部操作按钮 -->
  177. <view v-if="order.order_status != OrderStatusEnum.CANCELLED.value" class="footer-fixed">
  178. <view class="btn-wrapper">
  179. <!-- 未支付取消订单 -->
  180. <block v-if="order.pay_status == PayStatusEnum.PENDING.value">
  181. <view class="btn-item" @click="onCancel(order.order_id)">取消</view>
  182. </block>
  183. <!-- 已支付进行中的订单 -->
  184. <block v-if="order.order_status != OrderStatusEnum.APPLY_CANCEL.value">
  185. <block v-if="order.pay_status == PayStatusEnum.SUCCESS.value && order.delivery_status == DeliveryStatusEnum.NOT_DELIVERED.value">
  186. <view class="btn-item" @click="onCancel(order.order_id)">申请取消</view>
  187. </block>
  188. </block>
  189. <!-- 已申请取消 -->
  190. <view v-else class="f-28 col-8">取消申请中</view>
  191. <!-- 未支付的订单 -->
  192. <block v-if="order.pay_status == PayStatusEnum.PENDING.value">
  193. <view class="btn-item active" @click="onPay()">去支付</view>
  194. </block>
  195. <!-- 确认收货 -->
  196. <block v-if="order.delivery_status == DeliveryStatusEnum.DELIVERED.value && order.receipt_status == ReceiptStatusEnum.NOT_RECEIVED.value">
  197. <view class="btn-item active" @click="onReceipt(order.order_id)">确认收货</view>
  198. </block>
  199. <!-- 订单评价 -->
  200. <block v-if="order.order_status == OrderStatusEnum.COMPLETED.value && order.is_comment == 0">
  201. <view class="btn-item" @click="handleTargetComment(order.order_id)">评价</view>
  202. </block>
  203. </view>
  204. </view>
  205. <!-- 支付方式弹窗 -->
  206. <u-popup v-model="showPayPopup" mode="bottom" border-radius="26" :closeable="true">
  207. <view class="pay-popup">
  208. <view class="title">请选择支付方式</view>
  209. <view class="pop-content">
  210. <!-- 微信支付 -->
  211. <!-- #ifdef MP-WEIXIN -->
  212. <view class="pay-item dis-flex flex-x-between" @click="onSelectPayType(PayTypeEnum.WECHAT.value)">
  213. <view class="item-left dis-flex flex-y-center">
  214. <view class="item-left_icon wechat">
  215. <text class="iconfont icon-wechat-pay"></text>
  216. </view>
  217. <view class="item-left_text">
  218. <text>{{ PayTypeEnum.WECHAT.name }}</text>
  219. </view>
  220. </view>
  221. </view>
  222. <!-- #endif -->
  223. <!-- 余额支付 -->
  224. <view class="pay-item dis-flex flex-x-between" @click="onSelectPayType(PayTypeEnum.BALANCE.value)">
  225. <view class="item-left dis-flex flex-y-center">
  226. <view class="item-left_icon balance">
  227. <text class="iconfont icon-balance-pay"></text>
  228. </view>
  229. <view class="item-left_text">
  230. <text>{{ PayTypeEnum.BALANCE.name }}</text>
  231. </view>
  232. </view>
  233. </view>
  234. </view>
  235. </view>
  236. </u-popup>
  237. </view>
  238. </template>
  239. <script>
  240. import {
  241. DeliveryStatusEnum,
  242. DeliveryTypeEnum,
  243. OrderStatusEnum,
  244. PayStatusEnum,
  245. PayTypeEnum,
  246. ReceiptStatusEnum
  247. } from '@/common/enum/order'
  248. import * as OrderApi from '@/api/order'
  249. import { wxPayment } from '@/core/app'
  250. export default {
  251. data() {
  252. return {
  253. // 枚举类
  254. DeliveryStatusEnum,
  255. DeliveryTypeEnum,
  256. OrderStatusEnum,
  257. PayStatusEnum,
  258. PayTypeEnum,
  259. ReceiptStatusEnum,
  260. // 当前订单ID
  261. orderId: null,
  262. // 加载中
  263. isLoading: true,
  264. // 当前订单详情
  265. order: {},
  266. // 当前设置
  267. setting: {},
  268. // 支付方式弹窗
  269. showPayPopup: false,
  270. // 控制onShow事件是否刷新订单信息
  271. canReset: false,
  272. }
  273. },
  274. /**
  275. * 生命周期函数--监听页面加载
  276. */
  277. onLoad({ orderId }) {
  278. // 当前订单ID
  279. this.orderId = orderId
  280. // 获取当前订单信息
  281. this.getOrderDetail()
  282. // 注册全局事件订阅: 是否刷新当前订单数据
  283. uni.$on('syncRefresh', (val, isCur) => {
  284. if (!isCur) {
  285. this.canReset = val
  286. }
  287. })
  288. },
  289. /**
  290. * 生命周期函数--监听页面显示
  291. */
  292. onShow() {
  293. this.canReset && this.getOrderDetail()
  294. this.canReset = false
  295. },
  296. methods: {
  297. // 获取当前订单信息
  298. getOrderDetail(canReset = false) {
  299. const app = this
  300. app.isLoading = true
  301. OrderApi.detail(app.orderId)
  302. .then(result => {
  303. app.order = result.data.order
  304. app.setting = result.data.setting
  305. app.isLoading = false
  306. })
  307. // 相应全局事件订阅: 刷新上级页面数据
  308. canReset && uni.$emit('syncRefresh', true, true)
  309. },
  310. // 复制指定内容
  311. handleCopy(value) {
  312. const app = this
  313. uni.setClipboardData({
  314. data: value,
  315. success() {
  316. app.$toast('复制成功')
  317. }
  318. })
  319. },
  320. // 跳转到物流跟踪页面
  321. handleTargetExpress() {
  322. this.$navTo('pages/order/express/index', { orderId: this.orderId })
  323. },
  324. // 跳转到商品详情页面
  325. handleTargetGoods(goodsId) {
  326. this.$navTo('pages/goods/detail', { goodsId })
  327. },
  328. // 跳转到申请售后页面
  329. handleApplyRefund(orderGoodsId) {
  330. this.$navTo('pages/refund/apply', { orderGoodsId })
  331. },
  332. // 取消订单
  333. onCancel(orderId) {
  334. const app = this
  335. uni.showModal({
  336. title: '友情提示',
  337. content: '确认要取消该订单吗?',
  338. success(o) {
  339. if (o.confirm) {
  340. OrderApi.cancel(orderId)
  341. .then(result => {
  342. // 显示成功信息
  343. app.$toast(result.message)
  344. // 刷新当前订单数据
  345. app.getOrderDetail(true)
  346. })
  347. }
  348. }
  349. });
  350. },
  351. // 确认收货
  352. onReceipt(orderId) {
  353. const app = this
  354. uni.showModal({
  355. title: '友情提示',
  356. content: '确认收到商品了吗?',
  357. success(o) {
  358. if (o.confirm) {
  359. OrderApi.receipt(orderId)
  360. .then(result => {
  361. // 显示成功信息
  362. app.$success(result.message)
  363. // 刷新当前订单数据
  364. app.getOrderDetail(true)
  365. })
  366. }
  367. }
  368. });
  369. },
  370. // 点击去支付
  371. onPay() {
  372. // 显示支付方式弹窗
  373. this.showPayPopup = true
  374. },
  375. // 选择支付方式
  376. onSelectPayType(payType) {
  377. const app = this
  378. // 隐藏支付方式弹窗
  379. this.showPayPopup = false
  380. // 发起支付请求
  381. OrderApi.pay(app.orderId, payType)
  382. .then(result => app.onSubmitCallback(result))
  383. .catch(err => err)
  384. },
  385. // 订单提交成功后回调
  386. onSubmitCallback(result) {
  387. const app = this
  388. // 发起微信支付
  389. if (result.data.pay_type == PayTypeEnum.WECHAT.value) {
  390. wxPayment(result.data.payment)
  391. .then(() => {
  392. app.$success('支付成功')
  393. setTimeout(() => app.getOrderDetail(true), 1500)
  394. })
  395. .catch(err => app.$error('订单未支付'))
  396. .finally(() => app.disabled = false)
  397. }
  398. // 余额支付
  399. if (result.data.pay_type == PayTypeEnum.BALANCE.value) {
  400. app.$success('支付成功')
  401. app.disabled = false
  402. // 刷新当前订单数据
  403. setTimeout(() => app.getOrderDetail(true), 1500)
  404. }
  405. },
  406. // 跳转到订单评价页
  407. handleTargetComment(orderId) {
  408. this.$navTo('pages/order/comment/index', { orderId })
  409. },
  410. },
  411. }
  412. </script>
  413. <style>
  414. page {
  415. background: #f4f4f4;
  416. }
  417. </style>
  418. <style lang="scss" scoped>
  419. .container {
  420. // 设置ios刘海屏底部横线安全区域
  421. padding-bottom: constant(env(safe-area-inset-bottom) + 106rpx + 6rpx);
  422. padding-bottom: calc(env(safe-area-inset-bottom) + 106rpx + 6rpx);
  423. }
  424. // 页面顶部
  425. .header {
  426. display: flex;
  427. justify-content: space-between;
  428. background-color: #e8c269;
  429. height: 280rpx;
  430. padding: 56rpx 30rpx 0 30rpx;
  431. .order-status {
  432. display: flex;
  433. align-items: center;
  434. height: 128rpx;
  435. .status-icon {
  436. width: 128rpx;
  437. height: 128rpx;
  438. .image {
  439. display: block;
  440. width: 100%;
  441. height: 100%;
  442. }
  443. }
  444. .status-text {
  445. padding-left: 20rpx;
  446. color: #fff;
  447. font-size: 38rpx;
  448. font-weight: bold;
  449. }
  450. }
  451. .next-action {
  452. display: flex;
  453. align-items: center;
  454. height: 128rpx;
  455. .action-btn {
  456. min-width: 152rpx;
  457. height: 56rpx;
  458. padding: 0 30rpx;
  459. line-height: 56rpx;
  460. background-color: #fff;
  461. text-align: center;
  462. border-radius: 28rpx;
  463. border-color: rgb(102, 102, 102);
  464. cursor: pointer;
  465. user-select: none;
  466. color: #c7a157;
  467. }
  468. }
  469. }
  470. // 通栏卡片
  471. .i-card {
  472. background: #fff;
  473. padding: 24rpx 24rpx;
  474. width: 94%;
  475. box-shadow: 0 1rpx 5rpx 0px rgba(0, 0, 0, 0.05);
  476. margin: 0 auto 20rpx auto;
  477. border-radius: 20rpx;
  478. }
  479. // 收货地址
  480. .delivery-address {
  481. margin-top: -50rpx;
  482. .link-man {
  483. line-height: 46rpx;
  484. color: #333;
  485. .name {
  486. margin-right: 10rpx;
  487. }
  488. }
  489. .address {
  490. margin-top: 12rpx;
  491. color: #999;
  492. font-size: 24rpx;
  493. .detail {
  494. margin-left: 6rpx;
  495. }
  496. }
  497. }
  498. // 物流公司
  499. .express {
  500. display: flex;
  501. align-items: center;
  502. .main {
  503. flex: 1;
  504. }
  505. .info-item {
  506. display: flex;
  507. margin-bottom: 24rpx;
  508. &:last-child {
  509. margin-bottom: 0;
  510. }
  511. .item-lable {
  512. display: flex;
  513. align-items: center;
  514. font-size: 24rpx;
  515. color: #999;
  516. margin-right: 30rpx;
  517. }
  518. .item-content {
  519. flex: 1;
  520. display: flex;
  521. align-items: center;
  522. font-size: 26rpx;
  523. color: #333;
  524. .act-copy {
  525. margin-left: 20rpx;
  526. padding: 2rpx 20rpx;
  527. font-size: 22rpx;
  528. color: #666;
  529. border: 1rpx solid #c1c1c1;
  530. border-radius: 16rpx;
  531. }
  532. }
  533. }
  534. // 右侧箭头
  535. .right-arrow {
  536. margin-left: 16rpx;
  537. // color: #777;
  538. font-size: 26rpx;
  539. }
  540. }
  541. // 商品列表
  542. .goods-list {
  543. // 商品项
  544. .goods-item {
  545. margin-bottom: 40rpx;
  546. &:last-child {
  547. margin-bottom: 0;
  548. }
  549. // 商品信息
  550. .goods-main {
  551. display: flex;
  552. }
  553. // 商品图片
  554. .goods-image {
  555. width: 180rpx;
  556. height: 180rpx;
  557. .image {
  558. display: block;
  559. width: 100%;
  560. height: 100%;
  561. border-radius: 8rpx;
  562. }
  563. }
  564. // 商品内容
  565. .goods-content {
  566. flex: 1;
  567. padding-left: 16rpx;
  568. padding-top: 16rpx;
  569. .goods-title {
  570. font-size: 26rpx;
  571. max-height: 76rpx;
  572. }
  573. .goods-props {
  574. margin-top: 14rpx;
  575. height: 40rpx;
  576. color: #ababab;
  577. font-size: 24rpx;
  578. overflow: hidden;
  579. .goods-props-item {
  580. display: inline-block;
  581. margin-right: 14rpx;
  582. padding: 4rpx 16rpx;
  583. border-radius: 12rpx;
  584. background-color: #F5F5F5;
  585. width: auto;
  586. }
  587. }
  588. }
  589. // 交易信息
  590. .goods-trade {
  591. padding-top: 16rpx;
  592. width: 150rpx;
  593. text-align: right;
  594. color: $uni-text-color-grey;
  595. font-size: 26rpx;
  596. .goods-price {
  597. vertical-align: bottom;
  598. margin-bottom: 16rpx;
  599. .unit {
  600. margin-right: -2rpx;
  601. font-size: 24rpx;
  602. }
  603. }
  604. }
  605. // 商品售后
  606. .goods-refund {
  607. display: flex;
  608. justify-content: flex-end;
  609. .stata-text {
  610. font-size: 24rpx;
  611. color: #999;
  612. }
  613. .action-btn {
  614. border-radius: 28rpx;
  615. padding: 8rpx 26rpx;
  616. font-size: 24rpx;
  617. color: #383838;
  618. border: 1rpx solid #a8a8a8;
  619. }
  620. }
  621. }
  622. }
  623. // 订单信息
  624. .order-info {
  625. .info-item {
  626. display: flex;
  627. margin-bottom: 24rpx;
  628. &:last-child {
  629. margin-bottom: 0;
  630. }
  631. .item-lable {
  632. display: flex;
  633. align-items: center;
  634. font-size: 24rpx;
  635. color: #999;
  636. margin-right: 30rpx;
  637. }
  638. .item-content {
  639. flex: 1;
  640. display: flex;
  641. align-items: center;
  642. font-size: 26rpx;
  643. color: #333;
  644. .act-copy {
  645. margin-left: 20rpx;
  646. padding: 2rpx 20rpx;
  647. font-size: 22rpx;
  648. color: #666;
  649. border: 1rpx solid #c1c1c1;
  650. border-radius: 16rpx;
  651. }
  652. }
  653. }
  654. }
  655. // 交易信息
  656. .trade-info {
  657. .info-item {
  658. display: flex;
  659. margin-bottom: 24rpx;
  660. .item-lable {
  661. font-size: 24rpx;
  662. color: #999;
  663. margin-right: 24rpx;
  664. }
  665. .item-content {
  666. flex: 1;
  667. font-size: 26rpx;
  668. color: #333;
  669. text-align: right;
  670. }
  671. }
  672. .divider {
  673. height: 1rpx;
  674. background: #f1f1f1;
  675. margin-bottom: 24rpx;
  676. }
  677. .trade-total {
  678. display: flex;
  679. justify-content: flex-end;
  680. .goods-price {
  681. margin-left: 12rpx;
  682. vertical-align: bottom;
  683. color: $uni-text-color-active;
  684. .unit {
  685. margin-right: -2rpx;
  686. font-size: 24rpx;
  687. }
  688. }
  689. }
  690. }
  691. /* 底部操作栏 */
  692. .footer-fixed {
  693. position: fixed;
  694. bottom: var(--window-bottom);
  695. left: 0;
  696. right: 0;
  697. z-index: 11;
  698. box-shadow: 0 -4rpx 40rpx 0 rgba(151, 151, 151, 0.24);
  699. background: #fff;
  700. // 设置ios刘海屏底部横线安全区域
  701. padding-bottom: constant(safe-area-inset-bottom);
  702. padding-bottom: env(safe-area-inset-bottom);
  703. .btn-wrapper {
  704. height: 106rpx;
  705. display: flex;
  706. align-items: center;
  707. justify-content: flex-end;
  708. padding: 0 30rpx;
  709. }
  710. .btn-item {
  711. min-width: 164rpx;
  712. border-radius: 28rpx;
  713. padding: 10rpx 24rpx;
  714. font-size: 28rpx;
  715. color: #383838;
  716. text-align: center;
  717. border: 1rpx solid #a8a8a8;
  718. margin-left: 24rpx;
  719. &.active {
  720. color: #fff;
  721. border: none;
  722. background: linear-gradient(to right, #f9211c, #ff6335);
  723. }
  724. }
  725. }
  726. // 弹出层-支付方式
  727. .pay-popup {
  728. padding: 24rpx;
  729. .title {
  730. font-size: 30rpx;
  731. margin-bottom: 50rpx;
  732. font-weight: bold;
  733. text-align: center;
  734. }
  735. .pop-content {
  736. min-height: 260rpx;
  737. padding: 0 10rpx;
  738. .pay-item {
  739. padding: 20rpx 35rpx;
  740. font-size: 28rpx;
  741. border-bottom: 1rpx solid #f1f1f1;
  742. &:last-child {
  743. border-bottom: none;
  744. }
  745. .item-left_icon {
  746. margin-right: 20rpx;
  747. font-size: 32rpx;
  748. &.wechat {
  749. color: #00c800;
  750. }
  751. &.balance {
  752. color: #ff9700;
  753. }
  754. }
  755. }
  756. }
  757. }
  758. //
  759. </style>