|
|
@@ -16,24 +16,55 @@
|
|
|
<van-tab title="已完成" name="FINISH,REFUNDED"> </van-tab>
|
|
|
</van-tabs>
|
|
|
</van-sticky>
|
|
|
- <div class="order-item" v-for="item in list" :key="item.id">
|
|
|
- <div slot="header" class="order-header">
|
|
|
+ <div class="order-item" v-for="(item, i) in list" :key="item.id" :class="{ detail: item.showDetail }">
|
|
|
+ <div slot="header" class="order-header" @click="showDetail(i)">
|
|
|
<div class="content">订单编号:{{ item.id }}</div>
|
|
|
<div class="status" :class="{ paid: item.isPaid }">{{ item.isPaid ? '已支付' : '未支付' }}</div>
|
|
|
<van-icon name="arrow" />
|
|
|
</div>
|
|
|
<view class="order-info">
|
|
|
- <div class="row">
|
|
|
- <div class="label">{{ item.scenicName }}</div>
|
|
|
- <div class="value">{{ item.deviceNum }}台</div>
|
|
|
- </div>
|
|
|
- <div class="row">
|
|
|
- <div class="label">总租金</div>
|
|
|
- <div class="value">¥{{ item.totalPrice }}</div>
|
|
|
+ <div class="wrapper" v-if="item.showDetail">
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">景区</div>
|
|
|
+ <div class="value">{{ item.scenicName }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">数量</div>
|
|
|
+ <div class="value">{{ item.deviceNum }}副</div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">租金单价</div>
|
|
|
+ <div class="value">
|
|
|
+ {{ item.price }}元/次/副<span
|
|
|
+ class="link"
|
|
|
+ @click="navigateTo('/pages/article?name=计费细则')"
|
|
|
+ >
|
|
|
+ 计费细则
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">总押金</div>
|
|
|
+ <div class="value">已实名免押</div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">创建时间</div>
|
|
|
+ <div class="value">{{ item.createdAt }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">总租金</div>
|
|
|
+ <div class="value">¥{{ item.totalPrice }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="label">状态</div>
|
|
|
+ <div class="value">{{ item.statusDesc }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="row">
|
|
|
- <div class="label">状态</div>
|
|
|
- <div class="value">{{ item.statusDesc }}</div>
|
|
|
+ <div class="row" v-else>
|
|
|
+ <div class="label">{{ item.scenicName }}</div>
|
|
|
+ <div class="value" style="text-align:right;padding-right:10px">
|
|
|
+ <span style="font-size:18px">{{ item.deviceNum }} </span>副
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<view class="order-btns">
|
|
|
<div class="btn cancel" @click="cancel(item)" v-if="item.status === 'NOT_PAID'">
|
|
|
@@ -51,9 +82,16 @@
|
|
|
<div class="btn" @click="showCode(item)" v-if="item.status === 'USING'">
|
|
|
设备归还码
|
|
|
</div>
|
|
|
- <div class="btn" @click="refundDetail(item)" v-if="item.status === 'REFUNDED'">
|
|
|
+ <div class="btn cancel" @click="refundDetail(item)" v-if="item.status === 'REFUNDED'">
|
|
|
已退款
|
|
|
</div>
|
|
|
+ <div class="btn cancel" @click="rate(item)" v-if="item.status === 'FINISH'">
|
|
|
+ 评价
|
|
|
+ </div>
|
|
|
+ <div class="divider"></div>
|
|
|
+ <button class="btn cancel disable" v-if="item.status === 'FINISH'">
|
|
|
+ 分享
|
|
|
+ </button>
|
|
|
</view>
|
|
|
</view>
|
|
|
</div>
|
|
|
@@ -140,6 +178,7 @@ export default {
|
|
|
.then(res => {
|
|
|
this.list = res.map(item => {
|
|
|
item.isPaid = item.status === 'CREATED' || item.status === 'USING' || item.status === 'FINISH';
|
|
|
+ item.showDetail = false;
|
|
|
return item;
|
|
|
});
|
|
|
wx.stopPullDownRefresh();
|
|
|
@@ -300,9 +339,7 @@ export default {
|
|
|
mask: true,
|
|
|
title: '加载中'
|
|
|
});
|
|
|
- return this.$http.post('/order/refund', {
|
|
|
- orderId: item.id
|
|
|
- });
|
|
|
+ return this.$http.post(`/order/refund/${item.id}`);
|
|
|
})
|
|
|
.then(res => {
|
|
|
wx.hideLoading();
|
|
|
@@ -330,6 +367,27 @@ export default {
|
|
|
res.eventChannel.emit('order', item);
|
|
|
}
|
|
|
});
|
|
|
+ },
|
|
|
+ navigateTo(url) {
|
|
|
+ wx.navigateTo({
|
|
|
+ url: url
|
|
|
+ });
|
|
|
+ },
|
|
|
+ showDetail(i) {
|
|
|
+ let show = !this.list[i].showDetail;
|
|
|
+ this.$set(this.list, i, { ...this.list[i], showDetail: show });
|
|
|
+ for (let n = 0; n < this.list.length; n++) {
|
|
|
+ if (n !== i && this.list[n].showDetail) {
|
|
|
+ this.$set(this.list, n, { ...this.list[n], showDetail: false });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ rate(item) {
|
|
|
+ if (!item.rated) {
|
|
|
+ wx.navigateTo({
|
|
|
+ url: `/pages/rate?id=${item.id}`
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
@@ -337,6 +395,9 @@ export default {
|
|
|
this.list = [];
|
|
|
this.getData();
|
|
|
}
|
|
|
+ },
|
|
|
+ onShareAppMessage(res) {
|
|
|
+ return this.share();
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
@@ -354,7 +415,7 @@ export default {
|
|
|
font-size: 14px;
|
|
|
color: @text2;
|
|
|
margin: 0 15px;
|
|
|
- border-bottom: 1rpx solid @border2;
|
|
|
+ border-bottom: 1rpx solid @border3;
|
|
|
.content {
|
|
|
flex-basis: 0;
|
|
|
flex-grow: 1;
|
|
|
@@ -380,7 +441,7 @@ export default {
|
|
|
}
|
|
|
.value {
|
|
|
flex-grow: 1;
|
|
|
- text-align: right;
|
|
|
+ text-align: left;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -405,13 +466,30 @@ export default {
|
|
|
&.cancel {
|
|
|
background: white;
|
|
|
color: @text2;
|
|
|
- border-top: 1rpx solid @border2;
|
|
|
+ border-top: 1rpx solid @border3;
|
|
|
&:active {
|
|
|
background: shade(#ffffff, 10%);
|
|
|
}
|
|
|
}
|
|
|
+ &.disable {
|
|
|
+ background: white;
|
|
|
+ color: @text4;
|
|
|
+ border-top: 1rpx solid @border3;
|
|
|
+ &:active {
|
|
|
+ background: white;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .divider {
|
|
|
+ width: 1px;
|
|
|
+ height: 36px;
|
|
|
+ background: @border3;
|
|
|
}
|
|
|
}
|
|
|
+.link {
|
|
|
+ color: @prim;
|
|
|
+ text-decoration: underline;
|
|
|
+}
|
|
|
</style>
|
|
|
<style lang="less">
|
|
|
page {
|
|
|
@@ -452,4 +530,14 @@ page {
|
|
|
.overlay-index--van-overlay {
|
|
|
z-index: 100 !important;
|
|
|
}
|
|
|
+.order-item {
|
|
|
+ .van-icon-arrow {
|
|
|
+ transition: all 0.3s;
|
|
|
+ }
|
|
|
+ &.detail {
|
|
|
+ .van-icon-arrow {
|
|
|
+ transform: rotate(90deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|