Files
xiuhuwangqiu/pages/order/cg-order-detail.vue
wangxiaowei 331d6facdb 完善页面
2025-10-28 16:28:17 +08:00

770 lines
21 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view :data-theme="theme()" :class="'order-datail pb100' + theme()" v-if="!loadding" style="padding-bottom: 200rpx;">
<navbar bg="#F2F2F2" :title="title"></navbar>
<!--详情状态-->
<view class="d-s-c" style="margin-top: 10rpx;">
<!-- 待付款 -->
<!-- <view class="state-cont icon-box" style="width: 100%;" v-if="detail.pay_end_time">
<image style="width: 36rpx;height: 36rpx;margin-top: 16rpx;" src="@/static/icon/time2.png" mode=""></image>
<view class="countdown-datetime" v-if="detail.pay_end_time">
<text>还剩<text style="color: #FF5951">{{ detail.pay_end_time }}</text>订单自动取消</text>
</view>
</view> -->
<!-- 已预约 -->
<!-- <view class="status-text" style="width: 100%;" v-if="detail.pay_end_time">
使用过程中有任何问题,请联系商家
</view> -->
<!-- 交易完成 -->
<!-- <view class="status-text" style="width: 100%;" v-if="detail.pay_end_time">
感谢预定场馆,期待下次再见!
</view> -->
<!-- 订单取消 -->
<!-- <view class="status-text" style="width: 100%;" v-if="detail.pay_end_time">
您的订单已取消。期待下次有机会再为您服务!
</view> -->
<!-- 退款 -->
<view class="status-text" style="width: 100%;" v-if="detail.pay_end_time">
<view class="d-c-c" style="margin-bottom: 18rpx;" @tap="billPopup = true">
<view class="refund-txt">实际退款¥175.00</view>
<image style="width: 48rpx;height: 48rpx;margin-left: 6rpx;margin-top: 10rpx;" src="@/static/icon/right.png" mode=""></image>
</view>
<view class="">您的订单已取消。期待下次有机会再为您服务!</view>
</view>
<view class="dot-bg"></view>
</view>
<view class="shop">
<view class="one-product" v-for="(item, index) in detail.product" :key="index">
<view class="d-s-s">
<view class="cover" style="width: 190rpx;height: 190rpx;border-radius: 16rpx;margin-right: 30rpx;"><image :src="item.image.file_path" mode="aspectFit" style="width: 190rpx;height: 190rpx;border-radius: 16rpx;"></image></view>
<view class="flex-1">
<view class="d-b-c">
<view class="gray3 f30 d-f a-i-c">
<view class="cg-name">这个是场馆的名字</view>
<image style="width: 48rpx;height: 48rpx;" src="@/static/icon/right.png" mode=""></image>
</view>
<view class="cg-price">
¥
<text class="f40">{{ item.product_price }}</text>
</view>
</view>
<view class="d-b-c" style="margin-top:18rpx;">
<view class="cg-hour">100/小时</view>
<view class="cg-num">x{{ item.total_num }}</view>
</view>
</view>
</view>
<!-- 预约信息 -->
<view class="cg-reserve">
<view class="cg-title">预约信息</view>
<!-- todo 这里的状态如果是交易完成订单取消退款成功则将下面的预约改为使用 -->
<view class="cg-desc1">预约时间2025-03-18 09:00-12:00</view>
<view class="cg-desc2">预约时长3小时</view>
</view>
</view>
</view>
<!-- 适用门店 -->
<view class="cg-store">
<view class="cg-store-title">适用门店</view>
<view class="d-s-c">
<view class="cover" style="width: 190rpx;height: 190rpx;border-radius: 16rpx;margin-right: 30rpx;"><image :src="'https://6548.cn/uploads/20241020/3eb4aa0c96d9cfb361cddd2fa727b6a6.jpg'" mode="aspectFit" style="width: 190rpx;height: 190rpx;border-radius: 16rpx;"></image></view>
<view class="flex-1 d-f pr">
<view class="">
<view class="gray3 f30 d-f a-i-c">
<view class="cg-name">这个是场馆的名字</view>
<image style="width: 48rpx;height: 48rpx;" src="@/static/icon/right.png" mode=""></image>
</view>
<view class="cg-store-jl">距您9km</view>
<view class="d-f a-i-c cg-address-block">
<view class="">
<image style="width: 36rpx;height: 36rpx;" src="@/static/icon/address.png" mode=""></image>
</view>
<view class="cg-address">
嘉兴市秀洲区秀园路秀湖公园西南角
</view>
</view>
</view>
<view class="pa cg-icon-box d-f a-i-c">
<image style="width: 64rpx;height: 64rpx;margin-right: 20rpx;" src="@/static/icon/share.png" mode=""></image>
<image style="width: 64rpx;height: 64rpx;" src="@/static/icon/mobile.png" mode=""></image>
</view>
</view>
</view>
</view>
<!-- 订单信息 -->
<view class="cg-order">
<view class="cg-order-title">订单信息</view>
<view class="cg-order-info d-b-c">
<view class="">订单编号</view>
<view class="">
<text>{{ detail.order_no }}</text>
<text style="margin: 0 12rpx;color: #BFC2C2;">|</text>
<text class="cg-copy">复制</text>
</view>
</view>
<view class="cg-order-info d-b-c mt14">
<view class="">交易方式</view>
<view class="">
<text>{{ detail.pay_type.text }}</text>
</view>
</view>
<view class="cg-order-info d-b-c mt14">
<view class="">创建时间</view>
<view class="">
<text>{{ detail.create_time }}</text>
</view>
</view>
<view class="cg-order-info d-b-c mt14">
<view class="">付款时间</view>
<view class="">
<!-- todo 需要字段 -->
<text>1111</text>
</view>
</view>
</view>
<template v-if="detail.order_source != 80">
<view v-if="detail.order_status.value != 20 && detail.order_status.value != 30" class="foot-btns">
<!-- 待支付 -->
<templte class="ww100" v-if="detail.pay_status.value == 10">
<view class="d-b-c ww100">
<view class="cancle-btn">取消订单</view>
<view class="pay-btn">立即支付{{ detail.order_price }}</view>
</view>
</templte>
<!-- 已预约 -->
<!-- <templte class="ww100" v-if="detail.pay_status.value == 10">
<view class="d-b-c ww100">
<view class="cancle-reserve-btn">取消预约</view>
<view class="contact-btn">联系商家</view>
</view>
</templte> -->
<!-- 订单取消退款成功 -->
<!-- <templte class="ww100" v-if="detail.pay_status.value == 10">
<view class="ww100 again-btn">再次预定</view>
</templte> -->
</view>
</template>
<!-- 退款账单 -->
<Popup :show="billPopup" :width='750' :padding="0" type="bottom" backgroundColor="#FBFBFB" radius="32rpx 32rpx 0 0">
<view class="ww100 box-s-b pop-improt typeof pr time-popup">
<image style="width: 64rpx;height: 64rpx;position: absolute; top: 26rpx;right: 30rpx;" src="@/static/icon/close2.png" mode="" @tap="handleShowTime"></image>
<view class="d-c-c pt42">
<text class="f34 fb">费用明细</text>
</view>
<view class="bg-white bill-info">
<view class="">
<view class="title1 d-b-c">
<view>场地费</view>
<view>
<price-format color="#303133" :subscript-size="30" :first-size="30" :second-size="30" price="100"></price-format>
</view>
</view>
<view class="title2 d-b-c">
<view>场地费100/小时</view>
<view>x3</view>
</view>
</view>
<view style="margin-top: 52rpx;">
<view class="title1 d-b-c">
<view>灯光费</view>
<view>
<price-format color="#303133" :subscript-size="30" :first-size="30" :second-size="30" price="100"></price-format>
</view>
</view>
<view class="title2 d-b-c">
<view>灯光费50/小时</view>
<view>x3</view>
</view>
</view>
<view class="line"></view>
<view class="title3 d-b-c">
<view>实付退款金额</view>
<view>
<price-format color="#303133" :subscript-size="30" :first-size="30" :second-size="30" price="100"></price-format>
</view>
</view>
</view>
</view>
</Popup>
</view>
</template>
<script>
import navbar from '@/components/navbar.vue';
import Popup from '@/components/uni-popup.vue';
export default {
components: {
Popup,
navbar
},
data() {
return {
title: '订单详情',
/*是否加载完成*/
loadding: true,
indicatorDots: true,
autoplay: true,
interval: 2000,
duration: 500,
/*是否显示支付类别弹窗*/
isPayPopup: false,
/*订单id*/
order_id: 0,
/*订单详情*/
detail: {
order_status: [],
address: {
region: []
},
product: [],
pay_type: [],
delivery_type: [],
pay_status: []
},
extractStore: {},
billPopup: false
};
},
onLoad(e) {
this.order_id = e.order_id;
},
onShow() {
/*获取订单详情*/
this.getData();
},
methods: {
/*获取数据*/
getData() {
let self = this;
let order_id = self.order_id;
uni.showLoading({
title: '加载中'
});
self._get(
'user.order/detail',
{
order_id: order_id
},
function(res) {
self.detail = res.data.order;
self.extractStore = res.data.order.extractStore;
self.title = self.detail.state_text;
if (self.detail.state_text == '待付款') {
self.title = '等待付款';
}
self.loadding = false;
uni.hideLoading();
}
);
},
/*取消订单*/
cancelOrder(e) {
let self = this;
let order_id = e;
uni.showModal({
title: '提示',
content: '您确定要取消当前订单吗?',
success: function(o) {
if (o.confirm) {
uni.showLoading({
title: '正在处理'
});
self._get(
'user.order/cancel',
{
order_id: order_id
},
function(res) {
uni.hideLoading();
uni.showToast({
title: '操作成功',
duration: 2000,
icon: 'success'
});
self.getData();
}
);
}
}
});
},
/*确认收货*/
orderReceipt(order_id) {
let self = this;
uni.showModal({
title: '提示',
content: '您确定要收货吗?',
success: function(o) {
if (o.confirm) {
uni.showLoading({
title: '正在处理'
});
self._post(
'user.order/receipt',
{
order_id: order_id
},
function(res) {
uni.hideLoading();
uni.showToast({
title: res.msg,
duration: 2000,
icon: 'success'
});
self.getData();
}
);
}
}
});
},
/*查看物流*/
gotoExpress(order_id) {
this.gotoPage('/pages/order/express/express?order_id=' + order_id);
},
/*申请售后*/
onApplyRefund(e) {
this.gotoPage('/pages/order/refund/apply/apply?order_product_id=' + e);
},
onSaveTable(table_id, order_product_id) {
this.gotoPage('/pages/plus/table/table?table_id=' + table_id + '&order_product_id=' + order_product_id);
},
/*支付方式选择*/
onPayOrder(orderId) {
let self = this;
self.gotoPage('/pages/order/cashier?order_id=' + orderId);
}
}
};
</script>
<style scoped lang="scss">
page {
background: #F6F7F8 !important;
}
.order-express {
background: #ffffff;
margin: 0 20rpx;
border-radius: 12rpx;
margin-top: 20rpx;
}
.order-express .icon-box .iconfont {
font-size: 50rpx;
}
.order-datail {
padding-bottom: 90rpx;
background-color: #f2f2f2;
}
.state-cont .countdown-datetime {
margin-top: 16rpx;
}
.state-cont .countdown-datetime text {
padding: 4rpx 8rpx;
border-radius: 4rpx;
}
.group {
margin: 0 20rpx;
margin-top: 20rpx;
border-radius: 12rpx;
}
.foot-btns {
height: 146rpx;
line-height: 146rpx;
padding: 8rpx 60rpx;
}
.supplement-box {
margin-top: 20rpx;
@include background_color('bg-tips');
@include border_color('border_color');
border: 1rpx solid;
border-radius: 12rpx;
line-height: 1.5;
}
.shop{
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArIAAAHqCAMAAADPkl21AAABvFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////l5eX///8dYfCxAAAAknRSTlMAAQIDBAYHCAkKCwwNDg8TFBUXGBobHR4fICEiIycoKSssLzAyMzQ1OEFCQ0VLTlBSU1ZXWVtdYWNkZWZnamtub3BxdHV3eXqDhYeJjI2Oj5KUlpiZm56go6Smp6qsrrCzuru8vb/GyMrLzs/S09TV1tfa29zd3t/g4eLj5ebn6Orr7/Dx8vP09fb3+Pn6+/z9/jTqU2QAAAWpSURBVHja7dznc1RlGMbhB0g2IUZRQzFgTFAUFFA6iIpIsWEJIFIVRKWXqAQUpFggbOjyDwMBISHZ3W/M8w7X9fGd/XTPb2bPnLN7Ih5qe+ern/6o3oZUqr//+MXbLTHaa9vUSlqXvp35WLAtX980C5ld/7x5eLHdx01CdodmPCq254I9yO/My/8XO/2cNShBf8f9YtuP2YIy7K8MJbvZEpTis6EL2RuGoBSDU+4mu9MOlKM3YtI1M1COvyvxrhUoyXzXBZTly+gzAiXZG4NGoCT9ccsIlGQgbEBZJItkQbIgWSQLkgXJIlmQLEgWyYJkQbJIFiQLkkWyIFmQLJIFyYJkkSxIFiSLZEGyIFkkC5IFyYJkkSxIFiSLZEGyIFkkC5IFySJZkCxIFsmCZEGySBYkC5JFsiBZkCySBcmCZJEsSBYkC5JFsiBZkCySBcmCZJEsSBYki2RBsiBZJAuSBckiWZAsSBbJgmRBskgWJAuSRbIgWZAsSBbJgmRBskgWJAuSRbIgWZAskgXJgmSRLEgWJItkQbIgWSQLkgXJIlmQLEgWyYJkQbIgWSQLkgXJIlmQLEgWyYJkQbJIFiQLkkWyIFmQLJIFyYJkkSxIFiSLZEGyIFkkC5IFySJZEyBZkCxIFsmCZEGySBYkC5JFsiBZkCySBcmCZJEsSBYki2RBsiBZJAuSBckiWZAsSBbJgmRBsiBZJAuSBckiWZAsSBbJgmRBskgWJAuSRbIgWZAskgXJgmSRLEgWJItkQbIgWSQLkgXJgmSRLEgWJItkQbIgWSQLkgXJIlmQLEgWyYJkQbJIFiQLkkWyIFmQLJIFyYJkeZqTbZ02d83uqiHIb+D7j96aVokhbcuPGoTcDi9tjeEmrL9qFPKqrh4fj3v1hF3I6nh3jGHKb5YhpyPPx5imn7UNGZ14MWqYPWgd8vm3O2r62Dzks7J2sVE5Yx/SXciOr5NsrDIQ2SyqV2w852qWZP5qqpts7DERuXxTv9hYYyJyWdwg2bkmIpeuBsl2mohcmhskO3HEp/8bxpmzJ312z60GxUazZJ2lSvZ2gxsG8YIvInKZ1CDZOSYilzcaJPu+ichlRYNkd5mIXLbXL7ZtwETk8k+lbrLvWYhsltW9xXXKQGTzy4Q6ya6zD/l8ULvY172Cg4Qu9tT8fcGf1iGjkx1jFzv5V9uQ07Ex/xQ+q98yZNX3yqhgmz7xgiMSu/zhuBHBtq/oMwq5HVrScr/W1s55a/f4kyIl3Dn4bvWbUyteiUxhJItkQbIgWSQLkgXJIlmQLEgWyYJkQbJIFiQLkkWyIFmQLJIFyYJkkSxIFiSLZEGyIFkkC5IFyYJkkSxIFiSLZEGyIFkkC5IFySJZkCxIFsmCZEGySBYkC5JFsiBZkCySBcmCZJEsSBYkC5JFsiBZkCySBcmCZJEsSBYki2RBsiBZJAuSBckiWZAsSBbJgmRBskgWJAuSRbIgWZAsSBbJgmRBskgWJAuSRbIgWZAskgXJgmSRLEgWJItkQbIgWSQLkgXJIlmQLEgWyYJkQbIgWSQLkgXJIlmQLEgWyYJkQbJIFiQLkkWyIFmQLJIFyYJkkSxIFiSLZEGyIFkkC5IFySJZEyBZkCxIFsmCZEGySBYkC5JFsiBZkCySBcmCZJEsSBYki2RBsiBZJAuSBckiWZAsSBbJgmRBsiBZJAuSBckiWZAsSBbJgmRBskgWJAuSRbIgWZAskgXJgmSRLEgWJItkIX+yV21ASa7EBSNQkvNxwAiUZF9sMQIl2RRLjEBJFsazg1agHJcmRmw1A+XYHBFdN+xAKa68dDfZ2GgISrHhXrHxzFFLUIb9LUPJRudZW1CC/o54oMcjMApwekY81N1nD7I72BnDtPbeNAmZXfu0KUaatcMzBdK6uKUrRmtf0Pvz6ap1yOXyqR82zK886vQOlHY6pWI0r3sAAAAASUVORK5CYII=");
background-repeat: no-repeat;
background-size: 100% auto;
height: 490rpx;
margin: 30rpx 30rpx 0;
padding: 30rpx 30rpx 0;
}
.cg-name {
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
width: 256rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.cg-name2 {
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
}
.cg-price {
font-size: 26rpx;
color: #909399;
line-height: 36rpx;
}
.cg-hour {
font-size: 26rpx;
color: #909399;
line-height: 36rpx;
}
.cg-num {
font-size: 26rpx;
color: #909399;
line-height: 36rpx;
}
.cg-reserve {
margin-top: 68rpx;
}
.cg-title {
font-size: 30rpx;
color: #303133;
line-height: 42rpx;
}
.cg-desc1,
.cg-desc2 {
font-weight: 500;
font-size: 26rpx;
color: #606266;
line-height: 48rpx;
margin-top: 20rpx;
}
.cg-store {
margin-top: 20rpx;
background-color: #fff;
border-radius: 16rpx;
margin: 0 30rpx 30rpx;
padding: 30rpx 30rpx;
}
.cg-store-title {
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
margin-bottom: 26rpx;
}
.cg-store-jl {
font-size: 24rpx;
color: #909399;
line-height: 34rpx;
margin-top: 16rpx;
}
.cg-address-block {
margin-top: 20rpx;
}
.cg-address {
font-weight: 400;
font-size: 24rpx;
color: #606266;
line-height: 34rpx;
margin-left: 8rpx;
width: 230rpx;
}
.cg-icon-box {
top: 50%;
right: 0;
transform: translateY(-50%);
}
.cg-order {
margin-top: 20rpx;
background-color: #fff;
border-radius: 16rpx;
margin: 0 30rpx ;
padding: 30rpx 30rpx;
}
.cg-order-title {
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
margin-bottom: 26rpx;
}
.cg-order-info {
font-size: 28rpx;
color: #606266;
line-height: 40rpx;
}
.cg-copy {
font-weight: 500;
font-size: 28rpx;
color: #365A9A;
line-height: 48rpx;
}
.mt14 {
margin-top: 14rpx;
}
.status-text {
width: 100%;
font-size: 26rpx;
color: #909399;
line-height: 36rpx;
text-align: center;
margin-top: 14rpx;
}
.refund-txt {
font-size: 36rpx;
color: #303133;
line-height: 50rpx;
margin-top: 18rpx;
}
.cancel-btn {
font-size: 28rpx;
color: #606266;
line-height: 40rpx;
}
.pay-btn {
width: 360rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
background: #365A9A;
border-radius: 8rpx;
color: #fff;
font-size: 32rpx;
}
.cancle-reserve-btn {
width: 330rpx;
height: 90rpx;
text-align: center;
line-height: 90rpx;
background: #F6F7F8;
border-radius: 8rpx;
margin-right: 30rpx;
font-size: 32rpx;
color: #303133;
}
.contact-btn {
width: 330rpx;
height: 90rpx;
text-align: center;
line-height: 90rpx;
background: #365A9A;
border-radius: 8rpx;
font-size: 32rpx;
color: #FFFFFF;
}
.again-btn {
width: 630rpx;
height: 90rpx;
text-align: center;
line-height: 90rpx;
background: #365A9A;
border-radius: 8rpx;
font-size: 32rpx;
color: #FFFFFF;
}
.time-popup {
position: relative;
.title {
font-size: 36rpx;
color: #121212;
line-height: 50rpx;
}
.pt42 {
padding-top: 42rpx;
}
.notice {
margin-top: 30rpx;
width: 100%;
height: 56rpx;
background: #FFFBE5;
padding: 10rpx 30rpx;
font-weight: 500;
font-size: 26rpx;
color: #E2950F;
line-height: 48rpx;
text-align: left;
}
.time-item {
margin-right: 32rpx;
font-weight: 400;
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
height: 62rpx;
}
.time-item-line {
width: 60rpx;
height: 10px;
background-color: #365A9A;
border-radius: 6rpx;
}
.active {
color: #365A9A;
font-size: 32rpx;
line-height: 44rpx;
}
.active:after {
content: '';
display: block;
width: 60rpx;
height: 10rpx;
background-color: #365A9A;
border-radius: 6rpx;
margin: 8rpx auto 0 auto;
}
/* 日期网格:一行四个,间距 20rpx */
.date-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 20rpx 20rpx; /* 行间距和列间距均为 20rpx */
padding: 0 30rpx; /* 保持与上方时间切换区域一致的左右内边距 */
}
.date-item {
background-color: #F7F7F7;
border-radius: 10rpx;
height: 72rpx; /* 可按需调整高度 */
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: #303133;
box-sizing: border-box;
}
/* 可选:选中样式 */
.date-item.active {
border-color: #365A9A;
color: #365A9A;
box-shadow: 0 4rpx 10rpx rgba(54,90,154,0.08);
}
.price {
margin-top: 100rpx;
.line {
height: 2rpx;
background: #E5E5E5;
width: 100%;
}
.price-block {
margin: 42rpx 22rpx;
}
.price-detail {
color: #365A9A;
font-size: 24rpx;
line-height: 34rpx;
}
.price-btn {
width: 368rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
background: #365A9A;
border-radius: 8rpx;
font-size: 32rpx;
color: #FFF;
}
}
}
.bill-info {
border-radius: 16rpx;
margin: 32rpx 30rpx 22rpx;
padding: 48rpx 30rpx 30rpx;
.title1 {
font-size: 30rpx;
color: #303133;
line-height: 42rpx;
}
.title2 {
margin-top: 12rpx;
font-weight: 400;
font-size: 24rpx;
color: #909399;
line-height: 34rpx;
}
.line {
border: 2rpx solid #F6F7F9;
margin: 34rpx 0 30rpx;
}
.title3 {
font-size: 30rpx;
color: #303133;
line-height: 42rpx;
}
}
</style>