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

805 lines
16 KiB

9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
8 months ago
8 months ago
8 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
8 months ago
6 months ago
7 months ago
8 months ago
6 months ago
7 months ago
8 months ago
7 months ago
8 months ago
7 months ago
8 months ago
7 months ago
8 months ago
7 months ago
7 months ago
8 months ago
7 months ago
6 months ago
7 months ago
6 months ago
8 months ago
7 months ago
8 months ago
6 months ago
8 months ago
9 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
7 months ago
8 months ago
9 months ago
7 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
7 months ago
9 months ago
8 months ago
7 months ago
8 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
9 months ago
8 months ago
9 months ago
7 months ago
9 months ago
8 months ago
7 months ago
7 months ago
7 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
6 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
7 months ago
7 months ago
7 months ago
7 months ago
8 months ago
8 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
6 months ago
9 months ago
8 months ago
9 months ago
7 months ago
6 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
7 months ago
6 months ago
7 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
6 months ago
9 months ago
6 months ago
9 months ago
6 months ago
7 months ago
6 months ago
9 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
9 months ago
8 months ago
9 months ago
7 months ago
7 months ago
7 months ago
9 months ago
8 months ago
7 months ago
8 months ago
8 months ago
7 months ago
7 months ago
9 months ago
8 months ago
7 months ago
8 months ago
8 months ago
8 months ago
9 months ago
6 months ago
9 months ago
8 months ago
8 months ago
8 months ago
9 months ago
8 months ago
8 months ago
9 months ago
8 months ago
8 months ago
7 months ago
7 months ago
7 months ago
8 months ago
8 months ago
7 months ago
8 months ago
9 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
9 months ago
8 months ago
9 months ago
9 months ago
8 months ago
9 months ago
9 months ago
8 months ago
9 months ago
9 months ago
8 months ago
9 months ago
9 months ago
9 months ago
8 months ago
9 months ago
9 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
7 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
8 months ago
9 months ago
7 months ago
9 months ago
8 months 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="[4, 6].includes(order.status)">
  21. <view @click.stop="orderConfirmAccept(order, {logisticsFlag : 0}, 1)" class="b2">
  22. {{ order.status == 4 ? '快递取货' : '快递寄回' }}
  23. </view>
  24. <view @click.stop="orderConfirmAccept(order, {logisticsFlag : 1}, 1)" class="b1">
  25. 自行配送
  26. </view>
  27. </template>
  28. <view
  29. v-if="[18, 19].includes(order.status)"
  30. @click.stop="orderConfirmAccept(order)">
  31. 确认接单
  32. </view>
  33. <!-- 待收货 -->
  34. <template v-if="[2, 21].includes(order.status)">
  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, 22].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 && !userShop">
  103. 水洗费用{{ p.washPay }}
  104. </view>
  105. <view
  106. class="current-price"
  107. v-if="p.rentPay && !userShop">
  108. 租赁费用{{ p.rentPay }}
  109. </view>
  110. <view
  111. class="current-price"
  112. v-if="p.deposit && !userShop">
  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. v-if="!userShop">
  162. <view class="address-top">
  163. <view class="">
  164. 收货地址
  165. </view>
  166. <view class="copy">
  167. <image
  168. @click="$utils.copyText(order.userName + ' ' + order.userPhone + ' ' + order.userAddress)"
  169. src="../static/order/copy.png"></image>
  170. </view>
  171. </view>
  172. <view class="addressDetail">
  173. <view class="">{{order.userName}} {{order.userPhone}}</view>
  174. <view class="">{{order.userAddress}}</view>
  175. </view>
  176. </view>
  177. <view class="line">
  178. <view class="t min_tips" v-if="!userShop && order.originalPrice">
  179. <view class="">
  180. 应付款
  181. </view>
  182. <view class="current-price">
  183. {{ order.originalPrice }}
  184. </view>
  185. </view>
  186. <!-- 水洗店不展示 -->
  187. <view class="t min_tips" v-if="!userShop && order.orderPay">
  188. <view class="">
  189. 实付款
  190. </view>
  191. <view class="current-price">
  192. {{ order.orderPay }}
  193. </view>
  194. </view>
  195. <!-- 水洗店不展示 -->
  196. <view class="min_tips" v-if="!userShop && order.rentPay">
  197. <view class="">
  198. 租赁费用
  199. </view>
  200. <view class="">
  201. {{ order.rentPay }}
  202. </view>
  203. </view>
  204. <view class="min_tips" v-if="!userShop && order.washPay">
  205. <view class="">
  206. 水洗费用
  207. </view>
  208. <view class="">
  209. {{ order.washPay}}
  210. </view>
  211. </view>
  212. <!-- 水洗店佣金 -->
  213. <view class="min_tips" v-if="userShop && order.shopCoin">
  214. <view class="">
  215. 佣金
  216. </view>
  217. <view class="">
  218. {{ order.shopCoin }}
  219. </view>
  220. </view>
  221. <!-- <view class="min_tips">
  222. <view class="">
  223. 押金
  224. </view>
  225. <view class="">
  226. {{ order.price }}
  227. </view>
  228. </view> -->
  229. <view class="min_tips" v-if="!userShop && order.discountPrice">
  230. <view class="">
  231. 已优惠
  232. </view>
  233. <view class="">
  234. {{ order.discountPrice}}
  235. </view>
  236. </view>
  237. </view>
  238. <!-- 订单信息 -->
  239. <view class="line">
  240. <view class="t min_tips">
  241. <view class="">
  242. 订单信息
  243. </view>
  244. </view>
  245. <view class="min_tips">
  246. <view class="">
  247. 订单编号
  248. </view>
  249. <view class="">
  250. {{order.id}}
  251. </view>
  252. </view>
  253. <view class="min_tips">
  254. <view class="">
  255. 下单时间
  256. </view>
  257. <view class="">
  258. {{order.createTime}}
  259. </view>
  260. </view>
  261. </view>
  262. <!-- 下单须知 -->
  263. <view class="line">
  264. <view class="t min_tips">
  265. <view class="">
  266. 下单须知
  267. </view>
  268. </view>
  269. <view class="min_tips" style="line-height: 40rpx;">
  270. <view class="">
  271. <view class="">
  272. 租金从物品确认收货开始计算{{ configList.depositPrice }}/
  273. </view>
  274. <view class="">
  275. 押金将按照面积计算每平方厘米1
  276. </view>
  277. </view>
  278. <!-- {{msgShop.projectExplain}} -->
  279. </view>
  280. <!-- <view class="btns">
  281. <view
  282. v-if="!userShop"
  283. @click="$utils.navigateTo('/pages_order/order/createWash')"
  284. class="btnS">
  285. 我要水洗
  286. </view>
  287. </view> -->
  288. <view class="btns">
  289. <view @click="$refs.customerServicePopup.open()" class="btn">
  290. 联系平台客服
  291. </view>
  292. <!-- <view
  293. v-if="userShop"
  294. @click="$refs.customerServicePopup.open(order.userPhone, '客户')" class="btn">
  295. 联系客户
  296. </view>
  297. <view
  298. v-else
  299. @click="$refs.customerServicePopup.open(bindShop.phone, '水洗店')" class="btn">
  300. 联系水洗店
  301. </view> -->
  302. </view>
  303. </view>
  304. </view>
  305. <deliverGoods
  306. ref="deliverGoods"
  307. :orderId="orderId"
  308. @getData="getData"/>
  309. <!-- 联系客服弹框 -->
  310. <customerServicePopup ref="customerServicePopup" />
  311. </view>
  312. </template>
  313. <script>
  314. import {
  315. mapGetters,
  316. mapState
  317. } from 'vuex'
  318. import mixinOrder from '@/mixins/order.js'
  319. import customerServicePopup from '@/components/config/customerServicePopup.vue'
  320. import deliverGoods from '@/components/userShop/deliverGoods.vue'
  321. export default {
  322. components: {
  323. customerServicePopup,
  324. deliverGoods,
  325. },
  326. mixins : [mixinOrder],
  327. computed: {
  328. ...mapGetters(['userShop']),
  329. ...mapState(['bindShop', 'configList']),
  330. },
  331. data() {
  332. return {
  333. stepsCurrent: 0,
  334. steps: [//水洗店看到的步骤条
  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. ],
  361. order: {},
  362. orderId: 0,
  363. typeText: [{
  364. name: '租赁押金'
  365. },
  366. {
  367. name: '水洗租赁'
  368. },
  369. {
  370. name: '破损换货'
  371. },
  372. {
  373. name: '退货退款'
  374. }
  375. ],
  376. }
  377. },
  378. onLoad(agrs) {
  379. this.orderId = agrs.id
  380. },
  381. onShow() {
  382. this.getData()
  383. if(this.userShop){
  384. this.typeText[0].name = '租赁订单'
  385. this.$forceUpdate()
  386. }else{
  387. this.$store.commit('getBindShop')
  388. }
  389. },
  390. onPullDownRefresh() {
  391. this.getData()
  392. if(this.userShop){
  393. }else{
  394. this.$store.commit('getBindShop')
  395. }
  396. },
  397. methods: {
  398. // 查询订单详情
  399. getData() {
  400. this.$api('orderOne', {
  401. id: this.orderId
  402. }, res => {
  403. uni.stopPullDownRefresh()
  404. if (res.code == 200) {
  405. this.order = res.result
  406. res.result.hotelOrderFlows.forEach((n, i) => {
  407. if(this.order.status == n.value){
  408. this.stepsCurrent = i
  409. }
  410. })
  411. this.steps = res.result.hotelOrderFlows
  412. }
  413. })
  414. },
  415. }
  416. }
  417. </script>
  418. <style scoped lang="scss">
  419. .order {
  420. padding-bottom: 10px;
  421. }
  422. .controls {
  423. margin: 20rpx;
  424. background-color: #fff;
  425. height: 400rpx;
  426. display: flex;
  427. flex-direction: column;
  428. width: 710rpx;
  429. border-radius: 20rpx;
  430. justify-content: center;
  431. align-items: center;
  432. .title {
  433. display: flex;
  434. justify-content: center;
  435. align-items: center;
  436. font-size: 40rpx;
  437. image {
  438. width: 100rpx;
  439. height: 100rpx;
  440. margin-right: 20rpx;
  441. }
  442. }
  443. .tips {
  444. font-size: 26rpx;
  445. color: #FD5100;
  446. margin-top: 10rpx;
  447. }
  448. .btns {
  449. margin-top: 50rpx;
  450. display: flex;
  451. view {
  452. margin: 0 20rpx;
  453. display: flex;
  454. justify-content: center;
  455. align-items: center;
  456. color: #fff;
  457. background-color: $uni-color;
  458. padding: 15rpx 40rpx;
  459. border-radius: 40rpx;
  460. }
  461. .btn2 {
  462. background-color: #FFFFFF;
  463. border: 1px solid #A7A7A7;
  464. color: #A7A7A7;
  465. }
  466. }
  467. }
  468. .steps {
  469. margin: 20rpx;
  470. background-color: #fff;
  471. display: flex;
  472. flex-direction: column;
  473. width: 710rpx;
  474. border-radius: 20rpx;
  475. padding: 70rpx 0;
  476. /deep/ .uv-text__value {
  477. font-size: 22rpx !important;
  478. }
  479. }
  480. // .box {
  481. // padding: 20px;
  482. // .btns {
  483. // display: flex;
  484. // justify-content: center;
  485. // align-items: center;
  486. // margin-top: 10px;
  487. // .btn {
  488. // color: #fff;
  489. // padding: 10rpx 50rpx;
  490. // background-color: #ffb300;
  491. // border-radius: 30rpx;
  492. // font-size: 25rpx;
  493. // margin-right: 10rpx;
  494. // }
  495. // .btc {
  496. // background: #ccc;
  497. // }
  498. // }
  499. // }
  500. .info {
  501. margin: 10px;
  502. padding: 20rpx;
  503. background-color: #fff;
  504. width: calc(100% - 40px);
  505. border-radius: 10px;
  506. .head-title {
  507. font-family: PingFang SC, PingFang SC-Bold;
  508. color: #2f2e2e;
  509. line-height: 30rpx;
  510. margin-left: 10rpx;
  511. }
  512. .server-item {
  513. display: flex;
  514. flex-wrap: wrap;
  515. align-items: center;
  516. justify-content: space-between;
  517. background: white;
  518. border-radius: 15rpx;
  519. box-sizing: border-box;
  520. margin: 20rpx 0rpx;
  521. width: 100%;
  522. .img-box {
  523. width: 180rpx;
  524. height: 180rpx;
  525. border-radius: 10rpx;
  526. overflow: hidden;
  527. image {
  528. width: 100%;
  529. height: 100%;
  530. }
  531. }
  532. .server-info {
  533. display: flex;
  534. flex-direction: column;
  535. justify-content: space-around;
  536. width: calc(100% - 180rpx);
  537. box-sizing: border-box;
  538. padding: 10rpx 15rpx;
  539. .server-title {
  540. display: flex;
  541. margin-bottom: 10rpx;
  542. }
  543. .coupon {
  544. display: flex;
  545. justify-content: center;
  546. align-items: center;
  547. background: #F29E45;
  548. color: white;
  549. width: 120rpx;
  550. height: 40rpx;
  551. border-radius: 10rpx;
  552. margin-left: 10rpx;
  553. font-size: 22rpx;
  554. }
  555. .time-coupon,
  556. .price {
  557. display: flex;
  558. flex-wrap: wrap;
  559. align-items: center;
  560. }
  561. .time-coupon {
  562. margin: 10rpx 0rpx;
  563. font-size: 26rpx;
  564. justify-content: space-between;
  565. width: 100%;
  566. .flex {
  567. justify-content: center;
  568. align-items: center;
  569. }
  570. image {
  571. width: 25rpx;
  572. height: 25rpx;
  573. }
  574. .time {
  575. color: #B8B8B8;
  576. margin-left: 6rpx;
  577. }
  578. }
  579. .sales-volume {
  580. display: flex;
  581. align-items: center;
  582. color: #B8B8B8;
  583. font-size: 24rpx;
  584. image {
  585. width: 25rpx;
  586. height: 25rpx;
  587. }
  588. }
  589. }
  590. }
  591. .address {
  592. .address-top {
  593. display: flex;
  594. justify-content: space-between;
  595. align-items: center;
  596. image {
  597. width: 30rpx;
  598. height: 30rpx;
  599. }
  600. }
  601. .addressDetail {
  602. color: #777;
  603. font-size: 22rpx;
  604. padding: 5px 0;
  605. }
  606. text {
  607. background-color: #F29E45;
  608. padding: 8rpx 10rpx;
  609. color: #fff;
  610. font-size: 20rpx;
  611. margin-left: 10px;
  612. border-radius: 5px;
  613. }
  614. }
  615. .min_tips {
  616. font-size: 22rpx;
  617. color: #777;
  618. display: flex;
  619. justify-content: space-between;
  620. padding: 5px 0;
  621. align-items: center;
  622. }
  623. .current-price {
  624. font-size: 22rpx;
  625. color: $uni-color;
  626. }
  627. .line {
  628. border-top: 2px dotted #00000011;
  629. padding: 20rpx 0;
  630. .t {
  631. padding: 5px 0;
  632. color: #000;
  633. font-size: 26rpx;
  634. }
  635. }
  636. .head-div {
  637. .nickname {
  638. font-size: 30rpx;
  639. font-weight: 600;
  640. text-align: left;
  641. line-height: 42rpx;
  642. display: flex;
  643. align-items: center;
  644. .tag {
  645. position: relative;
  646. display: flex;
  647. align-items: center;
  648. image {
  649. height: 45rpx;
  650. width: 90rpx;
  651. vertical-align: middle;
  652. }
  653. .auth {
  654. position: absolute;
  655. white-space: nowrap;
  656. color: $uni-color;
  657. left: 23rpx;
  658. font-size: 17rpx;
  659. }
  660. }
  661. }
  662. .days {
  663. font-size: 20rpx;
  664. font-weight: 400;
  665. text-align: left;
  666. line-height: 56rpx;
  667. display: flex;
  668. align-items: center;
  669. view {
  670. padding-left: 5px;
  671. }
  672. }
  673. }
  674. .btn-x {
  675. color: $uni-color;
  676. border: 1px solid $uni-color;
  677. padding: 10rpx 20rpx;
  678. border-radius: 30rpx;
  679. }
  680. .btns {
  681. display: flex;
  682. justify-content: space-around;
  683. margin: 20rpx 0;
  684. .btnS{
  685. background-color: $uni-color;
  686. color: #fff;
  687. box-shadow: 0 0 5rpx 5rpx #FFAC6E;
  688. padding: 20rpx 0;
  689. flex-shrink: 0;
  690. border-radius: 35rpx;
  691. flex: 1;
  692. text-align: center;
  693. }
  694. .btn {
  695. color: $uni-color;
  696. border: 1px solid $uni-color;
  697. padding: 10rpx 20rpx;
  698. border-radius: 30rpx;
  699. flex: 1;
  700. margin: 10rpx;
  701. text-align: center;
  702. }
  703. }
  704. }
  705. </style>