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

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