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

773 lines
15 KiB

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