酒店桌布为微信小程序
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.

804 lines
16 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <template>
  2. <view>
  3. <navbar title="订单详情" leftClick @leftClick="$utils.navigateBack" />
  4. <!-- 水洗店 -->
  5. <view class="" v-if="userShop">
  6. <view class="controls">
  7. <view class="title">
  8. <image src="../static/order/icon.png" mode=""></image>
  9. {{ order.statusDictText }}
  10. </view>
  11. <!-- <view class="tips">
  12. 待送回
  13. </view> -->
  14. <!-- <orderTypeBtn
  15. :type="order.type"
  16. :status="order.status"
  17. :detail="order"></orderTypeBtn> -->
  18. <view class="btns">
  19. <!-- 水洗订单水洗店选择收货方式 -->
  20. <template v-if="item.status == 4">
  21. <view @click.stop="orderConfirmAccept(item, {logisticsFlag : 0})" class="b2">
  22. 快递取货
  23. </view>
  24. <view @click.stop="orderConfirmAccept(item, {logisticsFlag : 1})" class="b1">
  25. 自行配送
  26. </view>
  27. </template>
  28. <view
  29. v-if="[4, 18, 19].includes(order.status)"
  30. @click.stop="orderConfirmAccept(order)">
  31. 确认接单
  32. </view>
  33. <!-- 待收货 -->
  34. <template v-if="order.status == 2">
  35. <view @click.stop="confirmReceiveGoods(order)">
  36. 确认收货
  37. </view>
  38. <view @click.stop="" class="btn2">
  39. 查看物流
  40. </view>
  41. </template>
  42. <!-- 待检查 -->
  43. <template v-if="order.status == 5">
  44. <view @click.stop="orderConfirmedDamage(order, 1)"
  45. >
  46. 确认下一步
  47. </view>
  48. <view @click.stop="$utils.navigateTo
  49. (`/pages_order/order/damageReport?id=${order.id}`)"
  50. class="btn2"
  51. >
  52. 破损上报
  53. </view>
  54. </template>
  55. <view
  56. v-if="[8, 12].includes(order.status)"
  57. @click.stop="$refs.deliverGoods.open()" class="b2">
  58. 发货填写单号
  59. </view>
  60. <view
  61. v-if="[6].includes(order.status)"
  62. @click.stop="orderFinishedWashing(order)">
  63. 水洗完成
  64. </view>
  65. </view>
  66. </view>
  67. <view class="steps" v-if="steps.length > 0">
  68. <uv-steps activeColor="#FD5100"
  69. :current="stepsCurrent" dot>
  70. <uv-steps-item
  71. :title="item.name"
  72. :key="index"
  73. v-for="(item, index) in steps">
  74. </uv-steps-item>
  75. </uv-steps>
  76. </view>
  77. </view>
  78. <!-- 酒店和水洗店 -->
  79. <view class="info">
  80. <view class="flex" style="display: flex;">
  81. <view style="width: 8rpx;height: 30rpx;
  82. background: #FD5100;border-radius: 6rpx;" />
  83. <view class="head-title">{{ typeText[order.type].name }}</view>
  84. </view>
  85. <view class="flex">
  86. <view class="server-item"
  87. v-for="(p, i) in order.orderDetails"
  88. :key="i">
  89. <view class="img-box">
  90. <image :src="p.pic" mode="aspectFill"></image>
  91. </view>
  92. <view class="server-info">
  93. <view class="server-title">
  94. {{p.goodsName}}
  95. <!-- <view class="coupon">领券立减</view> -->
  96. </view>
  97. <!-- <view class="current-price" v-if="order.orderPay">
  98. <text class="unit"></text>{{order.orderPay}}
  99. </view> -->
  100. <view
  101. class="current-price"
  102. v-if="p.washPay">
  103. 水洗费用{{ p.washPay }}
  104. </view>
  105. <view
  106. class="current-price"
  107. v-if="p.rentPay">
  108. 租赁费用{{ p.rentPay }}
  109. </view>
  110. <view
  111. class="current-price"
  112. v-if="p.deposit">
  113. 押金{{ p.deposit }}
  114. </view>
  115. <view class="sales-volume" style="margin-top: 5px;">
  116. <view class="desc">规格{{p.sku}}</view>
  117. </view>
  118. <view class="sales-volume" style="margin-top: 5px;">
  119. <view class="desc">数量{{p.num}}</view>
  120. </view>
  121. <view class="time-coupon">
  122. <!-- <view class="flex">
  123. <image src="@/static/home/time-icon.png"></image>
  124. <view class="time">{{msgOrder.useTime}}分钟</view>
  125. </view> -->
  126. <!-- <view class="sales-volume">
  127. <image src="@/static/icons/icon1.png"></image>
  128. <view class="desc">已售出{{msgShop.payNum}}+</view>
  129. </view> -->
  130. </view>
  131. </view>
  132. </view>
  133. </view>
  134. <!-- <view class="line min_tips">
  135. <view class="head-div flex">
  136. <view style="width: 118rpx;height: 118rpx;border-radius: 50%;overflow: hidden;">
  137. <image style="width: 118rpx;" :src="msgTechnician.image" mode="widthFix"></image>
  138. </view>
  139. <view style="padding: 10rpx 34rpx;display: flex;flex-direction: column;justify-content: space-around;">
  140. <view class="nickname">
  141. {{msgTechnician.title}}
  142. <view v-if="msgTechnician.isVip" class="tag">
  143. <image src="@/static/order/s.png" mode="aspectFit"></image>
  144. <view class="auth">官方认证</view>
  145. </view>
  146. </view>
  147. <view class="days">
  148. <van-rate v-model="msgTechnician.score" :size="10" readonly color="#ffb54c" void-icon="star"
  149. void-color="#eee" />
  150. <view class="">
  151. 好评{{msgTechnician.pinNum}}
  152. </view>
  153. </view>
  154. </view>
  155. </view>
  156. <view @click="gototechnicianDetail(msgTechnician)" class="btn-x">
  157. 服务技师
  158. </view>
  159. </view> -->
  160. <view class="line address">
  161. <view class="address-top">
  162. <view class="">
  163. 收货地址
  164. </view>
  165. <view class="copy">
  166. <image
  167. @click="$utils.copyText(order.userName + ' ' + order.userPhone + ' ' + order.userAddress)"
  168. src="../static/order/copy.png"></image>
  169. </view>
  170. </view>
  171. <view class="addressDetail">
  172. <view class="">{{order.userName}} {{order.userPhone}}</view>
  173. <view class="">{{order.userAddress}}</view>
  174. </view>
  175. </view>
  176. <view class="line">
  177. <view class="t min_tips" v-if="!userShop && order.originalPrice">
  178. <view class="">
  179. 应付款
  180. </view>
  181. <view class="current-price">
  182. {{ order.originalPrice }}
  183. </view>
  184. </view>
  185. <!-- 水洗店不展示 -->
  186. <view class="t min_tips" v-if="!userShop && order.orderPay">
  187. <view class="">
  188. 实付款
  189. </view>
  190. <view class="current-price">
  191. {{ order.orderPay }}
  192. </view>
  193. </view>
  194. <!-- 水洗店不展示 -->
  195. <view class="min_tips" v-if="!userShop && order.rentPay">
  196. <view class="">
  197. 租赁费用
  198. </view>
  199. <view class="">
  200. {{ order.rentPay }}
  201. </view>
  202. </view>
  203. <view class="min_tips" v-if="!userShop && order.washPay">
  204. <view class="">
  205. 水洗费用
  206. </view>
  207. <view class="">
  208. {{ order.washPay}}
  209. </view>
  210. </view>
  211. <!-- 水洗店佣金 -->
  212. <view class="min_tips" v-if="userShop && order.shopCoin">
  213. <view class="">
  214. 佣金
  215. </view>
  216. <view class="">
  217. {{ order.shopCoin }}
  218. </view>
  219. </view>
  220. <!-- <view class="min_tips">
  221. <view class="">
  222. 押金
  223. </view>
  224. <view class="">
  225. {{ order.price }}
  226. </view>
  227. </view> -->
  228. <view class="min_tips" v-if="!userShop && order.discountPrice">
  229. <view class="">
  230. 已优惠
  231. </view>
  232. <view class="">
  233. {{ order.discountPrice}}
  234. </view>
  235. </view>
  236. </view>
  237. <!-- 订单信息 -->
  238. <view class="line">
  239. <view class="t min_tips">
  240. <view class="">
  241. 订单信息
  242. </view>
  243. </view>
  244. <view class="min_tips">
  245. <view class="">
  246. 订单编号
  247. </view>
  248. <view class="">
  249. {{order.id}}
  250. </view>
  251. </view>
  252. <view class="min_tips">
  253. <view class="">
  254. 下单时间
  255. </view>
  256. <view class="">
  257. {{order.createTime}}
  258. </view>
  259. </view>
  260. </view>
  261. <!-- 下单须知 -->
  262. <view class="line">
  263. <view class="t min_tips">
  264. <view class="">
  265. 下单须知
  266. </view>
  267. </view>
  268. <view class="min_tips" style="line-height: 40rpx;">
  269. <view class="">
  270. <view class="">
  271. 租金从物品确认收货开始计算{{ configList.depositPrice }}/
  272. </view>
  273. <view class="">
  274. 押金将按照面积计算每平方厘米1
  275. </view>
  276. </view>
  277. <!-- {{msgShop.projectExplain}} -->
  278. </view>
  279. <!-- <view class="btns">
  280. <view
  281. v-if="!userShop"
  282. @click="$utils.navigateTo('/pages_order/order/createWash')"
  283. class="btnS">
  284. 我要水洗
  285. </view>
  286. </view> -->
  287. <view class="btns">
  288. <view @click="$refs.customerServicePopup.open()" class="btn">
  289. 联系平台客服
  290. </view>
  291. <!-- <view
  292. v-if="userShop"
  293. @click="$refs.customerServicePopup.open(order.userPhone, '客户')" class="btn">
  294. 联系客户
  295. </view>
  296. <view
  297. v-else
  298. @click="$refs.customerServicePopup.open(bindShop.phone, '水洗店')" class="btn">
  299. 联系水洗店
  300. </view> -->
  301. </view>
  302. </view>
  303. </view>
  304. <deliverGoods
  305. ref="deliverGoods"
  306. :orderId="orderId"
  307. @getData="getData"/>
  308. <!-- 联系客服弹框 -->
  309. <customerServicePopup ref="customerServicePopup" />
  310. </view>
  311. </template>
  312. <script>
  313. import {
  314. mapGetters,
  315. mapState
  316. } from 'vuex'
  317. import mixinOrder from '@/mixins/order.js'
  318. import customerServicePopup from '@/components/config/customerServicePopup.vue'
  319. import deliverGoods from '@/components/userShop/deliverGoods.vue'
  320. export default {
  321. components: {
  322. customerServicePopup,
  323. deliverGoods,
  324. },
  325. mixins : [mixinOrder],
  326. computed: {
  327. ...mapGetters(['userShop']),
  328. ...mapState(['bindShop', 'configList']),
  329. },
  330. data() {
  331. return {
  332. stepsCurrent: 0,
  333. steps: [//水洗店看到的步骤条
  334. // [//租赁订单
  335. // '客户待支付',
  336. // '平台待发货',
  337. // '待收货',//确认收货接口
  338. // '服务完成',
  339. // ],
  340. // [//水洗订单
  341. // '客户待支付',
  342. // '检查破损',//确认破损状态接口
  343. // '开始清洗',//开始清洗接口
  344. // '服务完成',
  345. // ],
  346. // [//换货
  347. // '下单',
  348. // '寄回商品',//快递接口
  349. // '平台待收货',
  350. // '客户待支付',
  351. // '服务完成',
  352. // ],
  353. // [//退货
  354. // '下单',
  355. // '寄回商品',//快递接口
  356. // '平台待收货',
  357. // '服务完成',
  358. // ],
  359. ],
  360. order: {},
  361. orderId: 0,
  362. typeText: [{
  363. name: '租赁押金'
  364. },
  365. {
  366. name: '水洗租赁'
  367. },
  368. {
  369. name: '破损换货'
  370. },
  371. {
  372. name: '退货退款'
  373. }
  374. ],
  375. }
  376. },
  377. onLoad(agrs) {
  378. this.orderId = agrs.id
  379. },
  380. onShow() {
  381. this.getData()
  382. if(this.userShop){
  383. this.typeText[0].name = '租赁订单'
  384. this.$forceUpdate()
  385. }else{
  386. this.$store.commit('getBindShop')
  387. }
  388. },
  389. onPullDownRefresh() {
  390. this.getData()
  391. if(this.userShop){
  392. }else{
  393. this.$store.commit('getBindShop')
  394. }
  395. },
  396. methods: {
  397. // 查询订单详情
  398. getData() {
  399. this.$api('orderOne', {
  400. id: this.orderId
  401. }, res => {
  402. uni.stopPullDownRefresh()
  403. if (res.code == 200) {
  404. this.order = res.result
  405. res.result.hotelOrderFlows.forEach((n, i) => {
  406. if(this.order.status == n.value){
  407. this.stepsCurrent = i
  408. }
  409. })
  410. this.steps = res.result.hotelOrderFlows
  411. }
  412. })
  413. },
  414. }
  415. }
  416. </script>
  417. <style scoped lang="scss">
  418. .order {
  419. padding-bottom: 10px;
  420. }
  421. .controls {
  422. margin: 20rpx;
  423. background-color: #fff;
  424. height: 400rpx;
  425. display: flex;
  426. flex-direction: column;
  427. width: 710rpx;
  428. border-radius: 20rpx;
  429. justify-content: center;
  430. align-items: center;
  431. .title {
  432. display: flex;
  433. justify-content: center;
  434. align-items: center;
  435. font-size: 40rpx;
  436. image {
  437. width: 100rpx;
  438. height: 100rpx;
  439. margin-right: 20rpx;
  440. }
  441. }
  442. .tips {
  443. font-size: 26rpx;
  444. color: #FD5100;
  445. margin-top: 10rpx;
  446. }
  447. .btns {
  448. margin-top: 50rpx;
  449. display: flex;
  450. view {
  451. margin: 0 20rpx;
  452. display: flex;
  453. justify-content: center;
  454. align-items: center;
  455. color: #fff;
  456. background-color: $uni-color;
  457. padding: 15rpx 40rpx;
  458. border-radius: 40rpx;
  459. }
  460. .btn2 {
  461. background-color: #FFFFFF;
  462. border: 1px solid #A7A7A7;
  463. color: #A7A7A7;
  464. }
  465. }
  466. }
  467. .steps {
  468. margin: 20rpx;
  469. background-color: #fff;
  470. display: flex;
  471. flex-direction: column;
  472. width: 710rpx;
  473. border-radius: 20rpx;
  474. padding: 70rpx 0;
  475. /deep/ .uv-text__value {
  476. font-size: 22rpx !important;
  477. }
  478. }
  479. // .box {
  480. // padding: 20px;
  481. // .btns {
  482. // display: flex;
  483. // justify-content: center;
  484. // align-items: center;
  485. // margin-top: 10px;
  486. // .btn {
  487. // color: #fff;
  488. // padding: 10rpx 50rpx;
  489. // background-color: #ffb300;
  490. // border-radius: 30rpx;
  491. // font-size: 25rpx;
  492. // margin-right: 10rpx;
  493. // }
  494. // .btc {
  495. // background: #ccc;
  496. // }
  497. // }
  498. // }
  499. .info {
  500. margin: 10px;
  501. padding: 20rpx;
  502. background-color: #fff;
  503. width: calc(100% - 40px);
  504. border-radius: 10px;
  505. .head-title {
  506. font-family: PingFang SC, PingFang SC-Bold;
  507. color: #2f2e2e;
  508. line-height: 30rpx;
  509. margin-left: 10rpx;
  510. }
  511. .server-item {
  512. display: flex;
  513. flex-wrap: wrap;
  514. align-items: center;
  515. justify-content: space-between;
  516. background: white;
  517. border-radius: 15rpx;
  518. box-sizing: border-box;
  519. margin: 20rpx 0rpx;
  520. width: 100%;
  521. .img-box {
  522. width: 180rpx;
  523. height: 180rpx;
  524. border-radius: 10rpx;
  525. overflow: hidden;
  526. image {
  527. width: 100%;
  528. height: 100%;
  529. }
  530. }
  531. .server-info {
  532. display: flex;
  533. flex-direction: column;
  534. justify-content: space-around;
  535. width: calc(100% - 180rpx);
  536. box-sizing: border-box;
  537. padding: 10rpx 15rpx;
  538. .server-title {
  539. display: flex;
  540. margin-bottom: 10rpx;
  541. }
  542. .coupon {
  543. display: flex;
  544. justify-content: center;
  545. align-items: center;
  546. background: #F29E45;
  547. color: white;
  548. width: 120rpx;
  549. height: 40rpx;
  550. border-radius: 10rpx;
  551. margin-left: 10rpx;
  552. font-size: 22rpx;
  553. }
  554. .time-coupon,
  555. .price {
  556. display: flex;
  557. flex-wrap: wrap;
  558. align-items: center;
  559. }
  560. .time-coupon {
  561. margin: 10rpx 0rpx;
  562. font-size: 26rpx;
  563. justify-content: space-between;
  564. width: 100%;
  565. .flex {
  566. justify-content: center;
  567. align-items: center;
  568. }
  569. image {
  570. width: 25rpx;
  571. height: 25rpx;
  572. }
  573. .time {
  574. color: #B8B8B8;
  575. margin-left: 6rpx;
  576. }
  577. }
  578. .sales-volume {
  579. display: flex;
  580. align-items: center;
  581. color: #B8B8B8;
  582. font-size: 24rpx;
  583. image {
  584. width: 25rpx;
  585. height: 25rpx;
  586. }
  587. }
  588. }
  589. }
  590. .address {
  591. .address-top {
  592. display: flex;
  593. justify-content: space-between;
  594. align-items: center;
  595. image {
  596. width: 30rpx;
  597. height: 30rpx;
  598. }
  599. }
  600. .addressDetail {
  601. color: #777;
  602. font-size: 22rpx;
  603. padding: 5px 0;
  604. }
  605. text {
  606. background-color: #F29E45;
  607. padding: 8rpx 10rpx;
  608. color: #fff;
  609. font-size: 20rpx;
  610. margin-left: 10px;
  611. border-radius: 5px;
  612. }
  613. }
  614. .min_tips {
  615. font-size: 22rpx;
  616. color: #777;
  617. display: flex;
  618. justify-content: space-between;
  619. padding: 5px 0;
  620. align-items: center;
  621. }
  622. .current-price {
  623. font-size: 22rpx;
  624. color: $uni-color;
  625. }
  626. .line {
  627. border-top: 2px dotted #00000011;
  628. padding: 20rpx 0;
  629. .t {
  630. padding: 5px 0;
  631. color: #000;
  632. font-size: 26rpx;
  633. }
  634. }
  635. .head-div {
  636. .nickname {
  637. font-size: 30rpx;
  638. font-weight: 600;
  639. text-align: left;
  640. line-height: 42rpx;
  641. display: flex;
  642. align-items: center;
  643. .tag {
  644. position: relative;
  645. display: flex;
  646. align-items: center;
  647. image {
  648. height: 45rpx;
  649. width: 90rpx;
  650. vertical-align: middle;
  651. }
  652. .auth {
  653. position: absolute;
  654. white-space: nowrap;
  655. color: $uni-color;
  656. left: 23rpx;
  657. font-size: 17rpx;
  658. }
  659. }
  660. }
  661. .days {
  662. font-size: 20rpx;
  663. font-weight: 400;
  664. text-align: left;
  665. line-height: 56rpx;
  666. display: flex;
  667. align-items: center;
  668. view {
  669. padding-left: 5px;
  670. }
  671. }
  672. }
  673. .btn-x {
  674. color: $uni-color;
  675. border: 1px solid $uni-color;
  676. padding: 10rpx 20rpx;
  677. border-radius: 30rpx;
  678. }
  679. .btns {
  680. display: flex;
  681. justify-content: space-around;
  682. margin: 20rpx 0;
  683. .btnS{
  684. background-color: $uni-color;
  685. color: #fff;
  686. box-shadow: 0 0 5rpx 5rpx #FFAC6E;
  687. padding: 20rpx 0;
  688. flex-shrink: 0;
  689. border-radius: 35rpx;
  690. flex: 1;
  691. text-align: center;
  692. }
  693. .btn {
  694. color: $uni-color;
  695. border: 1px solid $uni-color;
  696. padding: 10rpx 20rpx;
  697. border-radius: 30rpx;
  698. flex: 1;
  699. margin: 10rpx;
  700. text-align: center;
  701. }
  702. }
  703. }
  704. </style>