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

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
8 months ago
8 months ago
8 months ago
8 months ago
7 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
8 months ago
8 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
8 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
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
8 months ago
8 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
9 months ago
8 months ago
9 months ago
8 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
8 months ago
9 months ago
8 months ago
9 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
9 months ago
9 months ago
8 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
9 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
9 months ago
9 months ago
9 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
8 months ago
7 months ago
9 months ago
8 months ago
9 months ago
8 months ago
8 months ago
8 months ago
9 months ago
8 months ago
7 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
9 months ago
7 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
9 months ago
8 months ago
8 months ago
7 months ago
8 months ago
8 months ago
9 months ago
7 months ago
9 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
8 months ago
8 months ago
9 months ago
8 months ago
9 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
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
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. <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>