多租户商城-商户小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1018 lines
24 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <!-- 订单中心 -->
  2. <template>
  3. <view class="container">
  4. <global-loading />
  5. <view style="padding-bottom:68upx;">
  6. <u-sticky
  7. bg-color="#fff"
  8. >
  9. <u-tabs
  10. class="tabs"
  11. :list="tabList"
  12. disabled
  13. :is-scroll="false"
  14. active-color="#C5AA7B !important"
  15. :current="tabCurrentType"
  16. @change="handleTabChange"
  17. />
  18. </u-sticky>
  19. <view class="order-list-box u-skeleton">
  20. <Skeleton
  21. el-color="#efefef"
  22. bg-color="#fff"
  23. :loading="loading"
  24. :animation="true"
  25. />
  26. <view
  27. class="item ske-loading u-skeleton-fillet"
  28. v-for="(orderItem, orderIndex) in list"
  29. :key="orderIndex"
  30. >
  31. <view class="order-list-top">
  32. <view
  33. class="top-l"
  34. @click.stop="goShop(orderItem.shopId)"
  35. >
  36. <image
  37. :src="orderItem.shopLogo"
  38. class="shop-img"
  39. />
  40. <text class="shop-name">{{ orderItem.shopName }}</text>
  41. <image
  42. src="https://ceres.zkthink.com/static/images/arrowRight.png"
  43. class="arrow-img"
  44. />
  45. </view>
  46. <view class="order-status">
  47. {{ getOrderStatusLabel(orderItem.state, orderItem.returnType) }}
  48. </view>
  49. </view>
  50. <view
  51. class="order-info-box"
  52. @click="goOrderDesc(orderItem)"
  53. >
  54. <view class="order-info">
  55. <view
  56. class="order-info-item"
  57. v-for="(skuItem, skuIndex) in orderItem.skus"
  58. :key="skuIndex"
  59. >
  60. <image
  61. :src="skuItem.image"
  62. class="product-img default-img"
  63. onerror="this.src='url(https://ceres.zkthink.com/static/root/default.png) no-repeat center';this.οnerrοr=null"
  64. />
  65. <view class="info-box">
  66. <text class="product-name">{{ skuItem.productName&&skuItem.productName }}</text>
  67. <view class="product-sku">{{ skuItem.value&&skuItem.value }}</view>
  68. <view class="price-sku-box">
  69. <view class="box-h flex-items-plus">
  70. <text class="product-price">
  71. <text
  72. class="fuhao"
  73. >
  74. </text>
  75. {{ skuItem.price && skuItem.price }}
  76. </text>
  77. <text class="product-num">x {{ skuItem.number&&skuItem.number }}</text>
  78. </view>
  79. <view
  80. v-if="skuItem.commentId === 0 && orderItem.state === 4"
  81. class="evaluate"
  82. @click.stop="goEvaluate(skuItem,orderItem.orderId)"
  83. >立即评价
  84. </view>
  85. <view
  86. v-if="skuItem.commentId !== 0 && orderItem.state === 4 && orderItem.skus[0].ifAdd !== 1"
  87. class="evaluate2"
  88. @click.stop="goAdditionalEvaluation(orderIndex,skuItem.commentId)"
  89. >追加评价
  90. </view>
  91. </view>
  92. </view>
  93. </view>
  94. <view class="total-price-box" >
  95. <template v-if="orderItem.orderPrice!==undefined || orderItem.discountPrice!==undefined">
  96. 总价¥{{
  97. (orderItem.orderPrice + orderItem.logisticsPrice).toFixed(2)
  98. }},优惠¥{{ orderItem.discountPrice }}
  99. <span v-if="orderItem.price > 0">
  100. {{ orderItem.state === 1 ? '应付¥' : '实付¥' }}{{ orderItem.price }}
  101. </span>
  102. </template>
  103. </view>
  104. </view>
  105. <view
  106. class="btnBox flex-items"
  107. :class="{flexSpBetween: orderItem.state===5 || orderItem.state === 9}"
  108. >
  109. <view
  110. class="delIcon"
  111. v-if="orderItem.state===5 || orderItem.state === 9"
  112. @click.stop="handleDeleteOrder(orderItem)"
  113. ></view>
  114. <view class="order-btn-box">
  115. <text
  116. :class="['btn',buttonItem.className] "
  117. v-for="buttonItem in getOrderOptionButtonObj(orderItem)"
  118. :key="buttonItem.name"
  119. @click.stop="handleOrderOptionButtonEvent(buttonItem)"
  120. >
  121. {{ buttonItem.name }}
  122. </text>
  123. </view>
  124. </view>
  125. </view>
  126. </view>
  127. <NoMore :show="!isEmpty && list.length >=listTotal" />
  128. <Empty
  129. :show="isEmpty"
  130. icon-url="https://ceres.zkthink.com/static/images/emptyOrderImg.png"
  131. >您还没有订单哦~
  132. </Empty>
  133. </view>
  134. </view>
  135. <!-- 支付 -->
  136. <u-popup
  137. v-model="payObj.showPayPopup"
  138. border-radius="15"
  139. closeable
  140. mode="bottom"
  141. >
  142. <view class="pay-list-content">
  143. <CashierList
  144. :total-price="payObj.totalPrice"
  145. @change="handleChangePayItem"
  146. />
  147. <view
  148. class="pay-confirm-btn"
  149. @click="handleGoPay"
  150. >确认
  151. </view>
  152. </view>
  153. </u-popup>
  154. </view>
  155. </template>
  156. <script>
  157. import CashierList from "../../components/CashierList";
  158. import AliHbPay from "../../components/AliHbPay";
  159. import NoMore from "../../components/NoMore";
  160. import Empty from "../../components/Empty";
  161. import { orderTabList, orderTypeEnum } from "./config/orderConfig";
  162. import { handleDoPay } from "../../utils/payUtil";
  163. import Skeleton from "../../components/Skeleton";
  164. const NET = require('../../utils/request')
  165. const API = require('../../config/api')
  166. export default {
  167. components: {
  168. AliHbPay,
  169. NoMore,
  170. Empty,
  171. CashierList,
  172. Skeleton
  173. },
  174. data() {
  175. return {
  176. loading: true,
  177. orderState: '',// 订单类型(params参数)
  178. page: 1,
  179. pageSize: 20,
  180. list: [{}, {}, {}, {}, {}, {}],
  181. listTotal: 0, // 用户订单总数
  182. isEmpty: false, // 列表是否为空
  183. tabList: orderTabList, // 顶部tabs
  184. tabCurrentType: 0,// 选中tab的索引
  185. // 支付相关
  186. payObj: {
  187. showPayPopup: false,
  188. totalPrice: 0,
  189. payInfo: {}
  190. },
  191. }
  192. },
  193. onLoad(options) {
  194. if (options.type) {
  195. this.tabCurrentType = options.type
  196. this.orderState = options.type
  197. }else{
  198. this.orderState = ''
  199. }
  200. },
  201. onShow() {
  202. const pageList = getCurrentPages();//获取应用页面栈
  203. const {options} = pageList[pageList.length - 1];//获取当前页面信息
  204. if (options.type) {
  205. this.tabCurrentType = options.type
  206. this.orderState = options.type
  207. }else{
  208. this.orderState = ''
  209. }
  210. if(Number(options.isJumpBack)===1){
  211. setTimeout(()=>{
  212. this.handleRefreshList()
  213. },2000)
  214. }else{
  215. this.handleRefreshList()
  216. }
  217. },
  218. onReachBottom() {
  219. ++this.page
  220. this.handleGetOrderList()
  221. },
  222. onBackPress(e) {
  223. if (e && e.from === 'navigateBack') {
  224. return false;
  225. }
  226. this.goUserIndex();
  227. return true;
  228. },
  229. methods: {
  230. /**
  231. * 重新加载列表
  232. */
  233. async handleRefreshList() {
  234. this.loading = true
  235. this.page = 1
  236. this.list = [{}, {}, {}, {}, {}, {}]
  237. this.isEmpty = false
  238. await this.handleGetOrderList()
  239. },
  240. /**
  241. * 切换tab
  242. * @param tabIndex
  243. */
  244. async handleTabChange(tabIndex) {
  245. if (this.loading) return
  246. this.tabCurrentType = tabIndex;
  247. this.orderState = this.tabList[tabIndex].number
  248. await this.handleRefreshList()
  249. },
  250. /**
  251. * 获取列表数据
  252. * @return {Promise<void>}
  253. */
  254. async handleGetOrderList() {
  255. this.$showLoading()
  256. this.orderState === 0 ? this.orderState = '' : undefined
  257. try {
  258. const params = {
  259. state: this.orderState,
  260. page: this.page,
  261. pageSize: this.pageSize
  262. }
  263. const {data: {list, total}} = await NET.request(API.FindOrderList, params, 'GET')
  264. this.listTotal = total
  265. this.list = this.list.concat(list)
  266. this.list = this.list.filter(item => JSON.stringify(item) !== '{}')
  267. if (this.list.length === 0) {
  268. this.isEmpty = true
  269. }
  270. } finally {
  271. this.loading = false
  272. this.$hideLoading()
  273. }
  274. },
  275. /**
  276. * 根据订单状态获取状态label
  277. * @param state
  278. * @param returnType 是否退款1是
  279. * @return {string}
  280. */
  281. getOrderStatusLabel(state, returnType = 0) {
  282. if (returnType) return '退款中'
  283. return orderTypeEnum[state] || ''
  284. },
  285. /**
  286. * 根据订单Item获取按钮信息
  287. * @param orderItem
  288. * @return *[]
  289. */
  290. getOrderOptionButtonObj(orderItem) {
  291. const {state, returnType, afterState, skus, collageId} = orderItem
  292. const orderNeedBtnList = [] // 订单应有的btn
  293. // 取消订单
  294. if ([1, 6].includes(state)) {
  295. orderNeedBtnList.push({
  296. name: '取消订单',
  297. className: 'l',
  298. functionName: 'handleCancelOrder',
  299. functionParams: [orderItem]
  300. })
  301. }
  302. // 立即付款
  303. if (state === 1) {
  304. orderNeedBtnList.push({
  305. name: '立即付款',
  306. className: 'r',
  307. functionName: 'handlePayOrder',
  308. functionParams: [orderItem]
  309. })
  310. }
  311. // 申请售后
  312. if ([2, 3, 4].includes(state) && [0, 6].includes(Number(afterState)) && skus[0].ifAdd !== 1) {
  313. orderNeedBtnList.push({
  314. name: '申请售后',
  315. className: 'l',
  316. functionName: 'goAfterSalesService',
  317. functionParams: [orderItem]
  318. })
  319. }
  320. // 查看物流
  321. if ([3, 4].includes(state)) {
  322. orderNeedBtnList.push({
  323. name: '查看物流',
  324. className: 'l',
  325. functionName: 'goLogisticsInformation',
  326. functionParams: [orderItem]
  327. })
  328. }
  329. // 确认收货
  330. if ([3].includes(state)) {
  331. orderNeedBtnList.push({
  332. name: '确认收货',
  333. className: 'r',
  334. functionName: 'handleConfirmReceipt',
  335. functionParams: [orderItem]
  336. })
  337. }
  338. // 退款详情
  339. if ([1].includes(returnType)) {
  340. orderNeedBtnList.push({
  341. name: '退款详情',
  342. className: 'l',
  343. functionName: 'goRefundDetail',
  344. functionParams: [orderItem]
  345. })
  346. }
  347. // 邀请拼单
  348. if ([6].includes(state)) {
  349. orderNeedBtnList.push({
  350. name: '邀请拼单',
  351. className: 'r',
  352. functionName: 'goSpellGroup',
  353. functionParams: [orderItem]
  354. })
  355. }
  356. // 再次开团 | 再次购买
  357. if ([5].includes(state)) {
  358. orderNeedBtnList.push({
  359. name: collageId !== 0 ? '再次开团' : '再次购买',
  360. className: 'r',
  361. functionName: 'handleBuyAgainEvent',
  362. functionParams: [orderItem]
  363. })
  364. }
  365. return orderNeedBtnList
  366. },
  367. /**
  368. * 处理订单btn事件
  369. * @param buttonItem 由getOrderOptionButtonObj生成的item项
  370. */
  371. handleOrderOptionButtonEvent(buttonItem) {
  372. const {functionName, functionParams} = buttonItem
  373. if (this[functionName]) {
  374. this[functionName](...functionParams)
  375. } else {
  376. throw new Error(`${ buttonItem.name }的function在本VM中不存在`)
  377. }
  378. },
  379. /**
  380. * 取消订单
  381. * @param orderItem
  382. */
  383. handleCancelOrder(orderItem) {
  384. const modalOptions = {
  385. title: '温馨提示',
  386. content: '您确定要取消该订单吗?',
  387. confirmText: '确定取消',
  388. cancelText: '点错了',
  389. success: ({confirm}) => {
  390. confirm ? this.handleDoCancel(orderItem) : undefined
  391. }
  392. }
  393. uni.showModal(modalOptions)
  394. },
  395. /**
  396. * 确定取消订单
  397. * @param orderItem
  398. * @return {Promise<void>}
  399. */
  400. async handleDoCancel(orderItem) {
  401. this.$showLoading()
  402. try {
  403. await NET.request(API.CancelOrder, {
  404. orderId: orderItem.orderId
  405. }, 'POST')
  406. await this.handleRefreshList()
  407. uni.showToast({
  408. icon: 'none',
  409. title: '取消成功'
  410. })
  411. } finally {
  412. this.$hideLoading()
  413. }
  414. },
  415. /**
  416. * 确认收货
  417. * @param orderItem
  418. */
  419. handleConfirmReceipt(orderItem) {
  420. const modalOptions = {
  421. title: '温馨提示',
  422. content: '确定您已经收到货物,否则会造成财产损失',
  423. confirmText: '确定收到',
  424. cancelText: '点错了',
  425. success: ({confirm}) => {
  426. confirm ? this.handleDoConfirmReceipt(orderItem) : undefined
  427. }
  428. }
  429. uni.showModal(modalOptions)
  430. },
  431. /**
  432. * 确定确认收货
  433. * @param orderItem
  434. * @return {Promise<void>}
  435. */
  436. async handleDoConfirmReceipt(orderItem) {
  437. this.$showLoading()
  438. const {orderId} = orderItem
  439. try {
  440. await NET.request(API.ConfirmReceive, {
  441. orderId: orderId
  442. }, 'POST')
  443. this.tabCurrentType = 4;
  444. this.orderState = 4
  445. await this.handleRefreshList()
  446. uni.showToast({
  447. icon: 'none',
  448. title: '收货成功'
  449. })
  450. } finally {
  451. this.$hideLoading()
  452. }
  453. },
  454. /**
  455. * 删除订单
  456. * @param orderItem
  457. */
  458. handleDeleteOrder(orderItem) {
  459. const modalOptions = {
  460. title: '温馨提示',
  461. content: '您确定要删除该订单吗?',
  462. confirmText: '确定删除',
  463. cancelText: '点错了',
  464. success: ({confirm}) => {
  465. confirm ? this.handleDoDeleteOrder(orderItem) : undefined
  466. }
  467. }
  468. uni.showModal(modalOptions)
  469. },
  470. /**
  471. * 确定删除订单
  472. * @param orderItem
  473. */
  474. async handleDoDeleteOrder(orderItem) {
  475. this.$showLoading()
  476. const {orderId} = orderItem
  477. try {
  478. await NET.request(API.DelOrder, {orderId}, 'POST')
  479. await this.handleRefreshList()
  480. uni.showToast({
  481. icon: 'none',
  482. title: '删除成功'
  483. })
  484. } finally {
  485. this.$hideLoading()
  486. }
  487. },
  488. /**
  489. * 再次购买 || 再次拼团
  490. * @param orderItem
  491. */
  492. handleBuyAgainEvent(orderItem) {
  493. const {skus, shopId, collageId} = orderItem
  494. // 判断拼团ID是否为0
  495. if (collageId !== 0) {
  496. // 拼团直接跳回商品详情
  497. const path = `../goodsModule/goodsDetails`
  498. const params = {
  499. productId: skus[0].productId,
  500. shopId,
  501. skuId: skus[0].skuId
  502. }
  503. this.$jump(path, params)
  504. } else {
  505. // 跳转详情
  506. this.goBuyAgain(orderItem)
  507. }
  508. },
  509. /**
  510. * 处理选择支付方式
  511. * @param params
  512. */
  513. handleChangePayItem(params) {
  514. const {payInfo} = this.payObj
  515. payInfo.paymentMode = params.paymentMode
  516. payInfo.huabeiPeriod = params.huabeiPeriod
  517. },
  518. /**
  519. * 处理下单支付
  520. * @param orderItem
  521. * @return {Promise<void>}
  522. */
  523. async handlePayOrder(orderItem) {
  524. const {orderPrice, collageId, orderId} = orderItem
  525. const {payObj} = this,payInfo = payObj.payInfo
  526. payObj.totalPrice = orderPrice
  527. payInfo.collageId =collageId
  528. payInfo.money =orderPrice
  529. payInfo.orderId =orderId
  530. payInfo.type =2
  531. payObj.showPayPopup = true
  532. },
  533. /**
  534. * 处理支付选择支付方式以后
  535. */
  536. async handleGoPay() {
  537. const {payObj} = this
  538. await handleDoPay(this.payObj.payInfo)
  539. payObj.showPayPopup = false
  540. payObj.totalPrice = 0
  541. payObj.payInfo = {}
  542. },
  543. /**
  544. * 去物流信息
  545. * @param orderItem
  546. */
  547. goLogisticsInformation(orderItem) {
  548. const {express, deliverFormid} = orderItem
  549. const url = `logisticsInfo?express=${ express }&deliverFormid=${ deliverFormid }`
  550. this.$jump(url)
  551. },
  552. /**
  553. * 跳转再次购买
  554. * @param orderItem
  555. * @return {Promise<void>}
  556. */
  557. async goBuyAgain(orderItem) {
  558. // 循环sku,获取商品详情,并且判断库存
  559. const postAjax = []
  560. orderItem.skus.forEach(skuItem => {
  561. postAjax.push(this.queryProductDetail(skuItem))
  562. })
  563. // 并发执行
  564. const skuDetailList = await Promise.all(postAjax);
  565. let canNotBuyNameList = []
  566. // 判断库存
  567. skuDetailList.forEach(skuDetail => {
  568. for (const skuDetailSkuMapKey in skuDetail.map) {
  569. // 判断此SKU是否存在于传进来的item
  570. const orderItemSku = orderItem.skus.find(skuItem => skuItem.skuId === skuDetail.map[skuDetailSkuMapKey].skuId);
  571. if (!orderItemSku) continue
  572. const dbSku = skuDetail.map[skuDetailSkuMapKey]
  573. if (orderItemSku.number > dbSku.stockNumber) {
  574. canNotBuyNameList.push(orderItemSku.productName)
  575. }
  576. }
  577. })
  578. // 如果有库存不足
  579. if (canNotBuyNameList.length > 0) {
  580. return uni.showToast({
  581. icon: 'none',
  582. title: canNotBuyNameList.join(",") + " 库存不足"
  583. })
  584. }
  585. // 制造数据
  586. const buyInfo = [{
  587. ifWork: orderItem.ifWork,
  588. shopId: orderItem.shopId,
  589. shopName: orderItem.shopName,
  590. shopDiscountId: orderItem.shopDiscountId,
  591. shopSeckillId: orderItem.shopSeckillId,
  592. skus: orderItem.skus
  593. }]
  594. uni.setStorageSync('skuItemDTOList', buyInfo)
  595. uni.navigateTo({
  596. url: '../orderModule/orderConfirm?type=1',
  597. })
  598. },
  599. /**
  600. * 获取商品详情
  601. * @param orderItem
  602. * @return {Promise<*>}
  603. */
  604. async queryProductDetail(orderItem) {
  605. const {shopId, productId, skuId} = orderItem
  606. this.$showLoading()
  607. let postData = {
  608. shopId,
  609. productId,
  610. skuId,
  611. terminal: 1
  612. }
  613. try {
  614. const res = await NET.request(API.QueryProductDetail, postData, "GET")
  615. return res.data
  616. } catch (e) {
  617. throw new Error(e)
  618. } finally {
  619. this.$hideLoading()
  620. }
  621. },
  622. /**
  623. * 邀请拼单
  624. * @param orderItem
  625. */
  626. goSpellGroup(orderItem) {
  627. const {collageId, orderId, skus, shopGroupWorkId} = orderItem
  628. const url = `../goodsModule/inviteSpell?collageId=${ collageId }&orderId=${ orderId }&type=1&productId=${ skus[0].productId }&skuId=${ skus[0].skuId }&shopGroupWorkId=${ shopGroupWorkId }`
  629. this.$jump(url)
  630. },
  631. /**
  632. * 去用户中心
  633. */
  634. goUserIndex() {
  635. this.$jumpToTabbar('../../pages/tabbar/user/index')
  636. },
  637. /**
  638. * 去退款详情
  639. * @param orderItem
  640. */
  641. goRefundDetail(orderItem) {
  642. this.$jump(`/pages_category_page2/orderModule/refundDetails?item=${ JSON.stringify(orderItem) }`)
  643. },
  644. /**
  645. * 跳转订单详情
  646. * @param orderItem
  647. */
  648. goOrderDesc(orderItem) {
  649. this.$jump(`orderDetails`, orderItem)
  650. },
  651. /**
  652. * 跳转店铺
  653. * @param id
  654. */
  655. goShop(id) {
  656. this.$jump(`../store/index?storeId=${ id }`)
  657. },
  658. /**
  659. * 申请售后
  660. * @param orderItem
  661. */
  662. goAfterSalesService(orderItem) {
  663. this.$jump(`afterSaleApply?item=${ JSON.stringify(orderItem) }`)
  664. },
  665. /**
  666. * 立即评价
  667. * @param skuItem
  668. * @param orderId
  669. */
  670. goEvaluate( skuItem, orderId) {
  671. const params = {
  672. commentData: skuItem,
  673. orderId
  674. }
  675. console.log(params)
  676. this.$jump('../goodsModule/evaluate', params)
  677. },
  678. /**
  679. * 追加评价
  680. * @param orderIndex
  681. * @param commentId
  682. */
  683. goAdditionalEvaluation(orderIndex, commentId) {
  684. const params = {
  685. addCommentVOList: this.list[orderIndex],
  686. commentId,
  687. type: 1
  688. }
  689. this.$jump('../goodsModule/addEvaluate', params)
  690. }
  691. }
  692. }
  693. </script>
  694. <style lang="scss">
  695. .tabs {
  696. position: relative;
  697. z-index: 999999;
  698. }
  699. page {
  700. width: 100%;
  701. height: 100%;
  702. background: #f6f6f6;
  703. }
  704. .nav-box-box {
  705. height: 88rpx;
  706. background: #f6f6f6;
  707. white-space: nowrap;
  708. position: fixed;
  709. top: 0;
  710. left: 0;
  711. width: 100%;
  712. z-index: 10;
  713. }
  714. .nav-box-box .item {
  715. display: inline-view;
  716. padding: 0 30rpx;
  717. box-sizing: border-box;
  718. height: 88rpx;
  719. text-align: center;
  720. line-height: 88rpx;
  721. font-size: 30rpx;
  722. color: #666;
  723. font-weight: 500;
  724. }
  725. .nav-box-box .item.active text {
  726. display: inline-view;
  727. color: #ff7911;
  728. box-sizing: border-box;
  729. height: 88rpx;
  730. border-bottom: 2px solid #ff7911;
  731. }
  732. .order-list-box {
  733. padding: 20rpx 30rpx 0;
  734. box-sizing: border-box;
  735. }
  736. .order-list-box .item {
  737. margin-bottom: 20rpx;
  738. background: #fff;
  739. border-radius: 10rpx;
  740. }
  741. .order-list-top {
  742. height: 96rpx;
  743. padding: 0 30rpx;
  744. box-sizing: border-box;
  745. display: flex;
  746. flex-direction: row;
  747. align-items: center;
  748. justify-content: space-between;
  749. border-bottom: 1px solid #eee;
  750. }
  751. .top-l {
  752. display: flex;
  753. flex-direction: row;
  754. align-items: center;
  755. }
  756. .shop-img {
  757. width: 36rpx;
  758. height: 36rpx;
  759. margin-right: 10rpx;
  760. }
  761. .shop-name {
  762. font-size: 30rpx;
  763. color: #333;
  764. font-weight: bold;
  765. }
  766. .arrow-img {
  767. margin-left: 15rpx;
  768. width: 25rpx;
  769. height: 25rpx;
  770. }
  771. .order-status {
  772. font-size: 32upx;
  773. color: #C5AA7B;
  774. font-weight: 400;
  775. }
  776. .order-info-box {
  777. padding: 0 30upx;
  778. box-sizing: border-box;
  779. .btnBox {
  780. width: 100%;
  781. justify-content: flex-end;
  782. .delIcon {
  783. width: 40rpx;
  784. height: 40rpx;
  785. background: url("https://ceres.zkthink.com/static/images/delListOrder.png") no-repeat center center;
  786. background-size: contain;
  787. }
  788. }
  789. .flexSpBetween {
  790. justify-content: space-between;
  791. }
  792. }
  793. .order-info {
  794. border-bottom: 1px solid #eee;
  795. }
  796. .order-info-item {
  797. display: flex;
  798. flex-direction: row;
  799. padding: 20upx 0;
  800. }
  801. .product-img {
  802. width: 180upx;
  803. height: 180upx;
  804. margin-right: 30upx;
  805. }
  806. .info-box {
  807. flex: 1;
  808. display: flex;
  809. flex-direction: column;
  810. justify-content: space-between;
  811. }
  812. .product-name {
  813. font-size: 26upx;
  814. color: #333;
  815. height: 68upx;
  816. line-height: 34upx;
  817. display: -webkit-box;
  818. overflow: hidden;
  819. text-overflow: ellipsis;
  820. word-break: break-all;
  821. -webkit-box-orient: vertical;
  822. -webkit-line-clamp: 2;
  823. }
  824. .price-sku-box {
  825. display: flex;
  826. flex-direction: row;
  827. justify-content: space-between;
  828. }
  829. .product-sku {
  830. font-size: 24upx;
  831. color: #999;
  832. }
  833. .product-price {
  834. font-size: 28upx;
  835. color: #333;
  836. font-weight: 400;
  837. }
  838. .product-price .fuhao {
  839. font-size: 28upx;
  840. }
  841. .product-num {
  842. display: inline-view;
  843. font-size: 28upx;
  844. margin-left: 20upx;
  845. color: #999;
  846. }
  847. .total-price-box {
  848. font-size: 26upx;
  849. color: #333;
  850. text-align: right;
  851. padding: 30upx 0;
  852. }
  853. .order-btn-box {
  854. padding: 20upx 0;
  855. display: flex;
  856. flex-direction: row;
  857. justify-content: flex-end;
  858. }
  859. .order-btn-box .btn {
  860. display: inline-view;
  861. width: 150upx;
  862. height: 56upx;
  863. text-align: center;
  864. line-height: 56upx;
  865. font-size: 26upx;
  866. color: #333;
  867. margin-left: 20upx;
  868. }
  869. .evaluate {
  870. height: 56upx;
  871. text-align: center;
  872. line-height: 56upx;
  873. font-size: 26upx;
  874. padding: 0 30upx;
  875. color: #C5AA7B;
  876. background: #333333;
  877. }
  878. .evaluate2 {
  879. height: 56upx;
  880. text-align: center;
  881. line-height: 56upx;
  882. font-size: 26upx;
  883. padding: 0 30upx;
  884. background: #333333;
  885. color: #C5AA7B;
  886. }
  887. .order-btn-box .btn.l {
  888. border: 2rpx solid #333333;
  889. color: #333;
  890. }
  891. .order-btn-box .btn.r {
  892. border: 2rpx solid #C5AA7B;
  893. color: #C5AA7B;
  894. }
  895. .emptyOrder-box {
  896. margin-top: 70upx;
  897. .emptyOrder-img {
  898. margin-top: 30%;
  899. width: 216upx;
  900. height: 152upx;
  901. }
  902. }
  903. .Put-box1 {
  904. .btn {
  905. text-align: center;
  906. margin-top: 40rpx;
  907. border: 2rpx solid #333333;
  908. height: 80rpx;
  909. line-height: 80rpx;
  910. width: 240rpx;
  911. color: #333333;
  912. }
  913. .submit {
  914. background-color: #333333;
  915. color: #FFEBC4;
  916. }
  917. }
  918. .pay-list-content {
  919. width: 100%;
  920. padding: 60rpx 30rpx 20rpx 30rpx;
  921. box-sizing: border-box;
  922. display: flex;
  923. flex-direction: column;
  924. align-items: center;
  925. .pay-confirm-btn {
  926. width: 80%;
  927. height: 88rpx;
  928. margin-top: 15rpx;
  929. border-radius: 15rpx;
  930. color: #fff;
  931. background-color: #c5aa7b;
  932. display: flex;
  933. align-items: center;
  934. justify-content: center;
  935. }
  936. }
  937. </style>
  938. <style scoped>
  939. .container /deep/ .u-tab-item {
  940. color: #999999 !important;
  941. }
  942. </style>