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

730 lines
14 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
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
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
9 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
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
8 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
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
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
  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="b1">
  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 @click="$refs.customerServicePopup.open()" class="btn">
  255. 联系客服
  256. </view>
  257. </view>
  258. </view>
  259. </view>
  260. <deliverGoods
  261. ref="deliverGoods"
  262. :orderId="orderId"
  263. @getData="getData"/>
  264. <!-- 联系客服弹框 -->
  265. <customerServicePopup ref="customerServicePopup" />
  266. </view>
  267. </template>
  268. <script>
  269. import {
  270. mapGetters
  271. } from 'vuex'
  272. import mixinOrder from '@/mixins/order.js'
  273. import customerServicePopup from '@/components/config/customerServicePopup.vue'
  274. import deliverGoods from '@/components/userShop/deliverGoods.vue'
  275. export default {
  276. components: {
  277. customerServicePopup,
  278. deliverGoods,
  279. },
  280. mixins : [mixinOrder],
  281. computed: {
  282. ...mapGetters(['userShop']),
  283. },
  284. data() {
  285. return {
  286. stepsCurrent: 0,
  287. steps: [//水洗店看到的步骤条
  288. // [//租赁订单
  289. // '客户待支付',
  290. // '平台待发货',
  291. // '待收货',//确认收货接口
  292. // '服务完成',
  293. // ],
  294. // [//水洗订单
  295. // '客户待支付',
  296. // '检查破损',//确认破损状态接口
  297. // '开始清洗',//开始清洗接口
  298. // '服务完成',
  299. // ],
  300. // [//换货
  301. // '下单',
  302. // '寄回商品',//快递接口
  303. // '平台待收货',
  304. // '客户待支付',
  305. // '服务完成',
  306. // ],
  307. // [//退货
  308. // '下单',
  309. // '寄回商品',//快递接口
  310. // '平台待收货',
  311. // '服务完成',
  312. // ],
  313. ],
  314. order: {},
  315. orderId: 0,
  316. typeText: [{
  317. name: '租赁押金'
  318. },
  319. {
  320. name: '水洗租赁'
  321. },
  322. {
  323. name: '破损换货'
  324. },
  325. {
  326. name: '退货退款'
  327. }
  328. ],
  329. }
  330. },
  331. onLoad(agrs) {
  332. this.orderId = agrs.id
  333. },
  334. onShow() {
  335. this.getData()
  336. if(this.userShop){
  337. this.typeText[0].name = '租赁订单'
  338. this.$forceUpdate()
  339. }
  340. },
  341. onPullDownRefresh() {
  342. this.getData()
  343. },
  344. methods: {
  345. // 查询订单详情
  346. getData() {
  347. this.$api('orderOne', {
  348. id: this.orderId
  349. }, res => {
  350. uni.stopPullDownRefresh()
  351. if (res.code == 200) {
  352. this.order = res.result
  353. res.result.hotelOrderFlows.forEach((n, i) => {
  354. if(this.order.status == n.value){
  355. this.stepsCurrent = i
  356. }
  357. })
  358. this.steps = res.result.hotelOrderFlows
  359. }
  360. })
  361. },
  362. }
  363. }
  364. </script>
  365. <style scoped lang="scss">
  366. .order {
  367. padding-bottom: 10px;
  368. }
  369. .controls {
  370. margin: 20rpx;
  371. background-color: #fff;
  372. height: 400rpx;
  373. display: flex;
  374. flex-direction: column;
  375. width: 710rpx;
  376. border-radius: 20rpx;
  377. justify-content: center;
  378. align-items: center;
  379. .title {
  380. display: flex;
  381. justify-content: center;
  382. align-items: center;
  383. font-size: 40rpx;
  384. image {
  385. width: 100rpx;
  386. height: 100rpx;
  387. margin-right: 20rpx;
  388. }
  389. }
  390. .tips {
  391. font-size: 26rpx;
  392. color: #FD5100;
  393. margin-top: 10rpx;
  394. }
  395. .btns {
  396. margin-top: 50rpx;
  397. display: flex;
  398. view {
  399. margin: 0 20rpx;
  400. display: flex;
  401. justify-content: center;
  402. align-items: center;
  403. color: #fff;
  404. background-color: $uni-color;
  405. padding: 15rpx 40rpx;
  406. border-radius: 40rpx;
  407. }
  408. .btn2 {
  409. background-color: #FFFFFF;
  410. border: 1px solid #A7A7A7;
  411. color: #A7A7A7;
  412. }
  413. }
  414. }
  415. .steps {
  416. margin: 20rpx;
  417. background-color: #fff;
  418. display: flex;
  419. flex-direction: column;
  420. width: 710rpx;
  421. border-radius: 20rpx;
  422. padding: 70rpx 0;
  423. /deep/ .uv-text__value {
  424. font-size: 22rpx !important;
  425. }
  426. }
  427. .box {
  428. padding: 20px;
  429. .btns {
  430. display: flex;
  431. justify-content: center;
  432. align-items: center;
  433. margin-top: 10px;
  434. .btn {
  435. color: #fff;
  436. padding: 10rpx 50rpx;
  437. background-color: #ffb300;
  438. border-radius: 30rpx;
  439. font-size: 25rpx;
  440. margin-right: 10rpx;
  441. }
  442. .btc {
  443. background: #ccc;
  444. }
  445. }
  446. }
  447. .info {
  448. margin: 10px;
  449. padding: 20rpx;
  450. background-color: #fff;
  451. width: calc(100% - 40px);
  452. border-radius: 10px;
  453. .head-title {
  454. font-family: PingFang SC, PingFang SC-Bold;
  455. color: #2f2e2e;
  456. line-height: 30rpx;
  457. margin-left: 10rpx;
  458. }
  459. .server-item {
  460. display: flex;
  461. flex-wrap: wrap;
  462. align-items: center;
  463. justify-content: space-between;
  464. background: white;
  465. border-radius: 15rpx;
  466. box-sizing: border-box;
  467. margin: 20rpx 0rpx;
  468. width: 100%;
  469. .img-box {
  470. width: 180rpx;
  471. height: 180rpx;
  472. border-radius: 10rpx;
  473. overflow: hidden;
  474. image {
  475. width: 100%;
  476. height: 100%;
  477. }
  478. }
  479. .server-info {
  480. display: flex;
  481. flex-direction: column;
  482. justify-content: space-around;
  483. width: calc(100% - 180rpx);
  484. box-sizing: border-box;
  485. padding: 10rpx 15rpx;
  486. .server-title {
  487. display: flex;
  488. margin-bottom: 10rpx;
  489. }
  490. .coupon {
  491. display: flex;
  492. justify-content: center;
  493. align-items: center;
  494. background: #F29E45;
  495. color: white;
  496. width: 120rpx;
  497. height: 40rpx;
  498. border-radius: 10rpx;
  499. margin-left: 10rpx;
  500. font-size: 22rpx;
  501. }
  502. .time-coupon,
  503. .price {
  504. display: flex;
  505. flex-wrap: wrap;
  506. align-items: center;
  507. }
  508. .time-coupon {
  509. margin: 10rpx 0rpx;
  510. font-size: 26rpx;
  511. justify-content: space-between;
  512. width: 100%;
  513. .flex {
  514. justify-content: center;
  515. align-items: center;
  516. }
  517. image {
  518. width: 25rpx;
  519. height: 25rpx;
  520. }
  521. .time {
  522. color: #B8B8B8;
  523. margin-left: 6rpx;
  524. }
  525. }
  526. .sales-volume {
  527. display: flex;
  528. align-items: center;
  529. color: #B8B8B8;
  530. font-size: 24rpx;
  531. image {
  532. width: 25rpx;
  533. height: 25rpx;
  534. }
  535. }
  536. }
  537. }
  538. .address {
  539. .address-top {
  540. display: flex;
  541. justify-content: space-between;
  542. align-items: center;
  543. image {
  544. width: 30rpx;
  545. height: 30rpx;
  546. }
  547. }
  548. .addressDetail {
  549. color: #777;
  550. font-size: 22rpx;
  551. padding: 5px 0;
  552. }
  553. text {
  554. background-color: #F29E45;
  555. padding: 8rpx 10rpx;
  556. color: #fff;
  557. font-size: 20rpx;
  558. margin-left: 10px;
  559. border-radius: 5px;
  560. }
  561. }
  562. .min_tips {
  563. font-size: 22rpx;
  564. color: #777;
  565. display: flex;
  566. justify-content: space-between;
  567. padding: 5px 0;
  568. align-items: center;
  569. }
  570. .current-price {
  571. font-size: 22rpx;
  572. color: $uni-color;
  573. }
  574. .line {
  575. border-top: 2px dotted #00000011;
  576. padding: 20rpx 0;
  577. .t {
  578. padding: 5px 0;
  579. color: #000;
  580. font-size: 26rpx;
  581. }
  582. }
  583. .head-div {
  584. .nickname {
  585. font-size: 30rpx;
  586. font-weight: 600;
  587. text-align: left;
  588. line-height: 42rpx;
  589. display: flex;
  590. align-items: center;
  591. .tag {
  592. position: relative;
  593. display: flex;
  594. align-items: center;
  595. image {
  596. height: 45rpx;
  597. width: 90rpx;
  598. vertical-align: middle;
  599. }
  600. .auth {
  601. position: absolute;
  602. white-space: nowrap;
  603. color: $uni-color;
  604. left: 23rpx;
  605. font-size: 17rpx;
  606. }
  607. }
  608. }
  609. .days {
  610. font-size: 20rpx;
  611. font-weight: 400;
  612. text-align: left;
  613. line-height: 56rpx;
  614. display: flex;
  615. align-items: center;
  616. view {
  617. padding-left: 5px;
  618. }
  619. }
  620. }
  621. .btn-x {
  622. color: $uni-color;
  623. border: 1px solid $uni-color;
  624. padding: 10rpx 20rpx;
  625. border-radius: 30rpx;
  626. }
  627. .btns {
  628. display: flex;
  629. justify-content: center;
  630. .btn {
  631. color: $uni-color;
  632. border: 1px solid $uni-color;
  633. padding: 10rpx 20rpx;
  634. border-radius: 30rpx;
  635. }
  636. }
  637. }
  638. </style>