CarRental/pages_store/ordder/ordder_Detail.vue

1179 lines
24 KiB
Vue
Raw Normal View History

2025-01-06 11:51:31 +08:00
<template>
<view class="page">
<view class="fixed">
<u-navbar title="订单详情" :border-bottom="false" :background="background" title-color='#000' title-size='36'
height='45' back-icon-color='#000'></u-navbar>
</view>
<view class="backimg">
</view>
<!-- <image class="backimg" src="https://lxnapi.ccttiot.com/bike/img/static/usCZzuQpGCBUpvzCfqyE" mode=""></image> -->
<view class="car_info" >
<view class="info_tit">
{{typeReturn(orderInfo.status) }}
</view>
<view class="box1">
<view class="left">
<view class="name">
{{orderInfo.model}}
</view>
<view class="car_type_li">
<view class="type" v-for="(items,indexs) in modelInfo.accessorys" :key="indexs">
{{items.name}}
</view>
</view>
</view>
<image src="https://lxnapi.ccttiot.com/bike/img/static/uAIbCubNk8w9JI4DlDuX" mode=""></image>
</view>
<view class="txt4" v-if="orderInfo.createTime">
{{returnTime(orderInfo.createTime)}} {{returnTime(orderInfo.expiryTime)}}{{orderInfo.num}} {{timetype(orderInfo.rentalUnit)}}
</view>
<view class="info_li2">
<view class="txt4">
车辆编号
</view>
<view class="txt5">
{{orderInfo.sn}}
</view>
</view>
</view>
<view class="price_box">
<view class="tit">
支付费用
</view>
<view class="price_li">
<view class="txt6">
车辆押金
</view>
<view class="txt7">
{{orderInfo.deposit}}
</view>
</view>
<view class="price_li">
<view class="txt6">
车辆租金
</view>
<view class="txt7">
{{orderInfo.leaseFee}}
</view>
</view>
<view class="price_li">
<view class="txt6">
实付
</view>
<view class="txt7">
{{orderInfo.payFee}}
</view>
</view>
<view class="price_li">
<view class="txt6">
骑行享权服务
</view>
<view class="txt7">
微信支付
</view>
</view>
<view class="price_li">
<view class="txt6">
支付时间
</view>
<view class="txt7">
{{orderInfo.payTime}}
</view>
</view>
<view class="btn_box">
<view class="btn1" @click="showcs=true">
车损扣款
</view>
<!-- <view class="btn1" @click="showtk=true">
服务费退款
</view> -->
<!-- <view class="btn2" @click="backyj()">
押金退还
</view> -->
</view>
<view class="handle_box">
<view class="handle_tit">
操作记录
</view>
<view class="handel_li" v-for="(item,index) in orderInfo.orderOpers" :key="index">
<view class="yuan">
</view>
<view class="info">
<view class="info_top">
{{item.details}}
</view>
<view class="info_bot">
2024-09-11 13:56:03
</view>
</view>
</view>
</view>
</view>
<view class="price_box" >
<view class="tit">
收益明细
</view>
<view class="price_li" v-for="(item,index) in orderInfo.rlDividendDetails" :key="index">
<view class="txt6">
{{item.partnerName}} {{userRrturn(item.partnerType)}} {{item.dividendProportion}}%
</view>
<view class="txt7">
{{item.dividendAmount}}
</view>
</view>
</view>
<view class="user_info">
<view class="info_li2">
<view class="txt4">
租车用户
</view>
<view class="txt5">
{{orderInfo.realName}}
</view>
</view>
<view class="info_li2">
<view class="txt4">
联系方式
</view>
<view class="txt5">
{{orderInfo.phone}}
</view>
<view class="btn" @click="callPhone(orderInfo.phone)">
联系用户
</view>
</view>
</view>
<view class="user_info">
<view class="info_li2">
<view class="txt4">
订单编号
</view>
</view>
<view class="info_li2">
<view class="txt6">
{{orderInfo.orderNo}}
</view>
<view class="txt7" @click="copy(orderInfo.orderNo)">
复制
</view>
</view>
</view>
<u-mask :show="showcs" @click="showcs = false" :z-index='100' />
<view class="tip_box" v-if="showcs">
<view class="top" v-if="showcs">
<view class="tip">
车损扣款退款
</view>
<view class="ipt_box">
<view class="text">
车损扣款
</view>
<view class="ipt">
<input type="text" v-model="csmoney" placeholder="输入退款金额" class="input"
placeholder-style="color:#C7CDD3" >
</view>
</view>
<view class="ipt_box" style="width:100%;margin-top: 6rpx;">
<view class="width:10% ;">
</view>
<view style="color: #ccc;margin-left: auto; font-size: 24rpx;">
最大可退款金额:{{orderInfo.deposit}}
</view>
</view>
</view>
<view class="bots">
<view class="bot_left" @click="closeCs()">
取消
</view>
<view class="bot_right" @click="backcs()">
确定
</view>
</view>
</view>
<u-mask :show="showtk" @click="showtk = false" :z-index='100' />
<view class="tip_box" v-if="showtk">
<view class="top" v-if="showtk">
<view class="tip">
服务费退款
</view>
<view class="ipt_box">
<view class="text">
送车上门
</view>
<view class="ipt">
<input type="text" v-model="deliveryFee" placeholder="输入退款金额" class="input"
placeholder-style="color:#C7CDD3" >
</view>
</view>
<view class="ipt_box" style="width:100%;margin-top: 6rpx;">
<view class="width:10% ;">
</view>
<view style="color: #ccc;margin-left: auto; font-size: 24rpx;">
最大可退款金额:{{orderInfo.deliveryFee}}
</view>
</view>
<view class="ipt_box">
<view class="text">
商家取车
</view>
<view class="ipt">
<input type="text" v-model="dispatchFee" placeholder="输入退款金额" class="input"
placeholder-style="color:#C7CDD3" >
</view>
</view>
<view class="ipt_box" style="width:100%;margin-top: 6rpx;">
<view class="width:10% ;">
</view>
<view style="color: #ccc;margin-left: auto; font-size: 24rpx;">
最大可退款金额:{{orderInfo.dispatchFee}}
</view>
</view>
<view class="ipt_box">
<view class="text">
租金
</view>
<view class="ipt">
<input type="text" v-model="leaseFee" placeholder="输入退款金额" class="input"
placeholder-style="color:#C7CDD3">
</view>
</view>
<view class="ipt_box" style="width:100%;margin-top: 6rpx;">
<view class="width:10% ;">
</view>
<view style="color: #ccc;margin-left: auto; font-size: 24rpx;">
最大可退款金额:{{orderInfo.leaseFee}}
</view>
</view>
</view>
<view class="bots">
<view class="bot_left" @click="closetk()">
取消
</view>
<view class="bot_right" @click="backMoney()">
确定
</view>
</view>
</view>
<view class="" v-if="orderInfo.status==1||orderInfo.status==2||orderInfo.status==3">
<view class="bot_btn" v-if="orderInfo.deliveryOrder.status!=3&&orderInfo.deliveryOrder">
<view class="btn" @click="getOrder()" v-if="orderInfo.deliveryOrder.status==0">
立即接单
</view>
<view class="btn" @click.stop="goDeli(orderInfo)" v-if="orderInfo.deliveryOrder.status==1&&orderInfo.deliveryOrder.deliverymanPhone==AccountInfo.phonenumber">
立即配送
</view>
<view class="btn" v-if="orderInfo.deliveryOrder.status==2&&orderInfo.deliveryOrder.deliverymanPhone==AccountInfo.phonenumber" @click.stop="overDeli(orderInfo)">
配送完成
</view>
</view>
</view>
<view class="bot_btn" v-if="orderInfo.status==7||orderInfo.status==4">
<view class="btn" @click="backcar()">
确认还车
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
typeidx: 1,
height: 0,
showtips: false,
orderNo:"",
orderInfo:{},
modelInfo:{},
showtk:false,
deliveryFee:0,
dispatchFee:0,
leaseFee:0,
showcs:false,
csmoney:0.,
AccountInfo:{}
}
},
onShow() {
},
onLoad(e) {
if(e.orderNo){
this.orderNo=e.orderNo
this.getOrderInfo()
this.getAccountInfo()
}
},
methods: {
backcar(){
this.$u.post(`appVerify/merchantReturn?orderNo=` + this.orderInfo.orderNo).then((res) => {
if (res.code === 200) {
this.getOrderInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
typeReturns(num) {
console.log(num,'aaaaaaaaaaaa');
let result = {
text: '',
color: '#4297F3' // 默认颜色
};
if (num == 0) {
result.text = '待接单';
result.color = '#F14C4C'; // 待支付颜色
} else if (num == 1) {
result.text = '待配送';
result.color = '#F38C42'; // 超时取消颜色
} else if (num == 2) {
result.text = '配送中';
result.color = '#4297F3'; // 超时取消颜色
} else if (num == 3) {
result.text = '已完成';
result.color = '#000000'; // 超时取消颜色
} else if (num == 8) {
result.text = '已取消';
result.color = '#ccc'; // 超时取消颜色
}
return result;
},
getAccountInfo(){
this.$u.get(`/appVerify/myAccountInfo`).then((res) => {
if (res.code === 200) {
this.AccountInfo=res.data
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
goDeli(item) {
this.$u.post(`appAdmin/inDelivery?orderNo=` + this.orderInfo.orderNo).then((res) => {
if (res.code == 200) {
this.getOrderInfo()
uni.showToast({
title: '开始配送',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
overDeli(item) {
this.$u.post(`appAdmin/endDelivery?orderNo=` + this.orderInfo.orderNo).then((res) => {
if (res.code == 200) {
this.getOrderInfo()
uni.showToast({
title: '配送完成',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
getOrder(item) {
this.$u.post(`appAdmin/orderTaking?orderNo=` + this.orderInfo.orderNo).then((res) => {
if (res.code == 200) {
this.getOrderInfo()
uni.showToast({
title: '接单成功',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
backyj(){
this.$u.post(`appVerify/depositRefund?orderNo=`+this.orderInfo.orderNo).then((res) => {
if (res.code == 200) {
this.getOrderInfo()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
closeCs(){
this.showcs=false
this.csmoney=0
},
backcs(){
this.$u.post(`appVerify/deductMoney?money=`+this.csmoney+'&orderNo='+this.orderInfo.orderNo).then((res) => {
if (res.code == 200) {
this.showcs=false
this.csmoney=0
this.getOrderInfo()
} else {
this.showcs=false
this.csmoney=0
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
backMoney(){
let data ={
orderNo:this.orderInfo.orderNo,
dispatchFee:this.dispatchFee,
deliveryFee:this.deliveryFee,
leaseFee:this.leaseFee,
reason:'退款'
}
this.$u.put(`appAdmin/order/refund`, data).then((res) => {
if (res.code == 200) {
this.showtk=false
this.deliveryFee=0
this.dispatchFee=0
this.leaseFee=0
this.getOrderInfo()
} else {
this.showtk=false
this.deliveryFee=0
this.dispatchFee=0
this.leaseFee=0
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
closetk(){
this.showtk=false
this.deliveryFee=0
this.dispatchFee=0
this.leaseFee=0
},
callPhone(phone){
uni.makePhoneCall({
phoneNumber:phone
})
// setTimeout(()=>{
// this.showkf=false
// },500)
},
copy(orderNo) {
uni.setClipboardData({
data: orderNo,
success: () => {
uni.showToast({
title: '复制成功',
icon: 'success',
duration: 2000
});
},
fail: () => {
uni.showToast({
title: '复制失败',
icon: 'none',
duration: 2000
});
}
});
},
returnTime(time) {
// 将时间字符串转换为 Date 对象
let date = new Date(time.replace(/-/g, "/"));
// 获取月份(注意:月份从 0 开始,需要加 1
let month = (date.getMonth() + 1).toString().padStart(2, "0");
// 获取日期
let day = date.getDate().toString().padStart(2, "0");
// 获取小时
let hours = date.getHours().toString().padStart(2, "0");
// 获取分钟
let minutes = date.getMinutes().toString().padStart(2, "0");
// 返回指定格式
return `${month}/${day} ${hours}:${minutes}`;
},
userRrturn(num){
if(num=='00'){
return '系统用户'
}else if(num=='01'){
return '普通用户'
}else if(num=='02'){
return '代理商'
}else if(num=='03'){
return '商户'
}else if(num=='04'){
return '调度员'
}
},
timetype(time) {
if (time == 'hours') {
return '小时'
} else if (time == 'day') {
return '天'
} else if (time == 'week') {
return '周'
} else if (time == 'month') {
return '月'
} else if (time == 'quarter') {
return '季度'
} else if (time == 'year') {
return '年'
}
},
staReturn(num){
if (num == 0) {
return '待支付'
} else if (num == 1) {
return '下单'
} else if (num == 2) {
return '改价'
} else if (num == 3) {
return '支付'
} else if (num == 4) {
return '还车结束订单'
} else if (num == 5) {
return '押金审核'
} else if (num == 6) {
return '退款'
} else if (num == 7) {
return '用户取消'
}else if (num == 7) {
return '系统自动取消'
}
},
typeReturn(num) {
if (num == 0) {
return '待支付'
} else if (num == 1) {
return '待取车'
} else if (num == 2) {
return '待送车'
} else if (num == 3) {
return '送车中'
} else if (num == 4) {
return '车辆使用中'
} else if (num == 5) {
return '超时取消'
} else if (num == 6) {
return '已取消'
}else if (num == 7) {
return '待审核'
} else if (num == 8) {
return '订单已结束'
}
},
getmodelInfo() {
let data = {
modelId: this.orderInfo.modelId
}
this.$u.get(`appVerify/getModelById?`, data).then((res) => {
if (res.code == 200) {
this.modelInfo = res.data
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
getOrderInfo() {
let data = {
orderNo: this.orderNo
};
this.$u.get(`appVerify/orderInfo?`, data).then((res) => {
if (res.code === 200) {
this.orderInfo = res.data;
// this.getstoreInfo()
this.getmodelInfo()
// this.getAgent()
// 调用倒计时方法
// if (this.orderInfo.status == 0) {
// this.startCountdown(this.orderInfo.autoCancelTime);
// }
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7F7F7;
}
.page {
width: 750rpx;
padding-bottom: 220rpx;
.order_code {
width: 696rpx;
margin: 0 auto;
margin-top: 16rpx;
padding: 20rpx 28rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
.tits {
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.code_li {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
.code {
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.btn {
font-weight: 400;
font-size: 28rpx;
color: #4297F3;
}
}
}
.tip_box {
position: fixed;
left: 72rpx;
top: 428rpx;
width: 610rpx;
// height: 282rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
z-index: 110;
padding-bottom: 100rpx;
.top {
padding: 52rpx 38rpx 42rpx 36rpx;
.ipt_box {
margin-top: 22rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.text {
width: 350rpx;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.ipt {
padding: 10rpx 18rpx;
display: flex;
align-items: center;
justify-content: space-between;
margin-left: 26rpx;
width: 420rpx;
height: 64rpx;
border-radius: 0rpx 0rpx 0rpx 0rpx;
border: 2rpx solid #979797;
.input {
width: 80%;
}
}
}
.tip {
width: 100%;
text-align: center;
font-weight: 700;
font-size: 32rpx;
color: #3D3D3D;
}
.txt {
margin-top: 32rpx;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
}
}
.bots {
position: absolute;
width: 610rpx;
// border-top: 2rpx solid #D8D8D8;
display: flex;
flex-wrap: nowrap;
// height: 100%;
bottom: -20rpx;
.bot_left {
border-radius: 0rpx 0rpx 0rpx 30rpx;
width: 50%;
height: 86rpx;
display: flex;
align-items: center;
justify-content: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
background: #EEEEEE;
}
.bot_right {
border-radius: 0rpx 0rpx 30rpx 0rpx;
width: 50%;
height: 86rpx;
background: #4C97E7;
display: flex;
align-items: center;
justify-content: center;
color: #FFFFFF;
// border-left: 2rpx solid #D8D8D8;
font-weight: 500;
font-size: 32rpx;
// color: #4C97E7;
}
}
}
.bot_btn{
display: flex;
align-items: center;
justify-content: center;
position: fixed;
bottom: 0;
width: 750rpx;
height: 160rpx;
background: #FFFFFF;
box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,0,0,0.3);
border-radius: 0rpx 0rpx 0rpx 0rpx;
.btn{
display: flex;
align-items: center;
justify-content: center;
border-radius: 20rpx;
width: 682rpx;
height: 84rpx;
background: #4297F3;
font-weight: 600;
font-size: 36rpx;
color: #FFFFFF;
}
}
.user_info{
margin: 0 auto;
margin-top: 16rpx;
width: 698rpx;
padding:20rpx 28rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
.info_li2 {
margin-top: 14rpx;
// width: 750rpx;
display: flex;
flex-wrap: nowrap;
align-items: flex-start;
// border-bottom: 1rpx solid #D8D8D8;
.txt4{
width: 112rpx;
white-space: nowrap;
margin-right: 48rpx;
font-weight: 600;
font-size: 28rpx;
color: #6F6F6F;
}
.txt5{
flex-wrap: wrap;
font-weight: 600;
font-size: 28rpx;
color: #3D3D3D;
}
.btn{
padding: 6rpx 12rpx;
margin-left: auto;
font-weight: 400;
font-size: 24rpx;
color: #4297F3;
border-radius: 6rpx 6rpx 6rpx 6rpx;
border: 1rpx solid #4297F3;
}
.txt6{
font-weight: 400;
font-size: 28rpx;
color: #6F6F6F;
}
.txt7{
margin-left: auto;
font-weight: 400;
font-size: 28rpx;
color: #4297F3;
}
}
}
.price_box{
margin: 0 auto;
margin-top: 16rpx;
width: 698rpx;
padding:20rpx 28rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
.handle_box{
margin-top: 26rpx;
padding: 22rpx 20rpx;
width: 650rpx;
background: #F4FBFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.handle_tit{
font-weight:600;
font-size: 28rpx;
color: #3D3D3D;
}
.handel_li{
margin-top: 16rpx;
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
.yuan{
margin-left: 46rpx;
width: 22rpx;
height: 22rpx;
background: #4297F3;
border-radius: 50%;
}
.info{
margin-left: 30rpx;
display: flex;
flex-wrap: wrap;
.info_top{
width: 100%;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.info_bot{
margin-top: 8rpx;
font-weight: 400;
font-size: 24rpx;
color: #6F6F6F;
}
}
}
}
.btn_box{
margin-top: 60rpx;
display: flex;
.btn1{
margin-right: 22rpx;
padding: 8rpx 22rpx;
background: #4297F3;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
.btn2{
padding: 8rpx 22rpx;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #4297F3;
font-weight: 500;
font-size: 32rpx;
color: #4297F3;
}
}
.tit{
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
.price_li{
margin-top: 18rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
.txt6{
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.txt7{
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
}
}
.car_info {
margin: 0 auto;
margin-top: -200rpx;
width: 698rpx;
// height: 196rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
display: flex;
flex-wrap: wrap;
padding: 0 24rpx;
padding-bottom: 28rpx;
.info_li2 {
margin-top: 14rpx;
width: 750rpx;
display: flex;
flex-wrap: nowrap;
align-items: flex-start;
// border-bottom: 1rpx solid #D8D8D8;
.txt4{
width: 112rpx;
white-space: nowrap;
margin-right: 48rpx;
font-weight: 600;
font-size: 28rpx;
color: #6F6F6F;
}
.txt5{
flex-wrap: wrap;
font-weight: 600;
font-size: 28rpx;
color: #3D3D3D;
}
}
.txt4{
font-weight: 600;
font-size: 28rpx;
color: #3D3D3D;
}
.info_li{
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
.txt2{
font-weight: 600;
font-size: 28rpx;
color: #6F6F6F;
}
.txt3{
font-weight: 600;
font-size: 24rpx;
color: #3D3D3D;
}
}
.info_tit{
margin-top: 22rpx;
font-weight: 600;
font-size: 36rpx;
color: #FF8C1E;
}
.box1{
width: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
.left {
.name {
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
.car_type_li {
margin-top: 16rpx;
display: flex;
.type {
margin-right: 8rpx;
padding: 4rpx 10rpx;
background: #DCEDFF;
border-radius: 6rpx 6rpx 6rpx 6rpx;
font-weight: 400;
font-size: 24rpx;
color: #4297F3;
}
}
}
image {
width: 156rpx;
height: 150rpx;
}
}
}
.tab-container {
display: flex;
border-bottom: 2px solid #ddd;
/* 底部边框 */
}
.tab-item {
position: relative;
padding: 10px 20px;
cursor: pointer;
color: #666;
font-size: 16px;
}
.tab-item.active {
color: #333;
font-weight: bold;
}
.tab-item.active::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 4px;
background-color: #2e9afe;
/* 下划线颜色 */
border-radius: 50px;
/* 圆角效果,模拟弧线 */
}
.fixed {
z-index: 999;
position: fixed;
top: 0;
}
.backimg {
// position: fixed;
z-index: -10;
width: 750rpx;
height: 428rpx;
background: linear-gradient(180deg, #CCE5FF 0%, rgba(204, 229, 255, 0) 100%);
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
}
</style>