CarRental/pages_admin/admin_order.vue

933 lines
23 KiB
Vue
Raw Normal View History

2024-05-08 23:18:30 +08:00
<template>
<view class="page">
2024-05-10 18:00:23 +08:00
<u-navbar :is-back="false" title="设备管理" :border-bottom="false" :background="bgc" title-color='#2E4975'
2024-05-08 23:18:30 +08:00
title-size='36' height='36'></u-navbar>
<view class="top_box">
<view class="left_text">
时间范围
</view>
<view class="timebox">
<view class="left_time" @click="time1=true">
{{firsTime}}
</view>
-
<view class="right_time" @click="time2=true">
{{lasTime}}
</view>
</view>
</view>
<view class="top_box">
<view class="left_text">
手机号
</view>
<view class="sear_ipt">
<input type="text"
v-model="searchKeyword"
placeholder="请输入内容"
class="input"
placeholder-style="color:#C7CDD3"
@input="search()">
</view>
</view>
<view class="tap">
<view class="tap_cont " :class="curtitidx==0?'act1':''" @click="changeidx(0)">
全部
</view>
<view class="tap_cont" :class="curtitidx==1?'act1':''" @click="changeidx(1)">
进行中
</view>
<view class="tap_cont" :class="curtitidx==2?'act1':''" @click="changeidx(2)">
待支付
</view>
<view class="tap_cont" :class="curtitidx==3?'act1':''" @click="changeidx(3)">
已完成
</view>
</view>
<u-mask :show="show" @click="show = false" :z-index='100' />
2024-05-11 18:01:20 +08:00
<u-picker mode="time" v-model="time1" :params="params" @confirm="confirm1" :default-time='pickertime'></u-picker>
<u-picker mode="time" v-model="time2" :params="params" @confirm="confirm2" :default-time='pickertime'></u-picker>
<view class="warp_box">
<swiper class="swiper" :style="{ height: swiperHeight + 'rpx' }" :current='curtitidx' @change="swiperchange" next-margin='-20rpx'>
<swiper-item>
<view class="swiper-item ">
<view class="card" v-for="(item,index) in allList" :key="index">
<view class="line"></view>
<view class="top_info">
<view class="top_info_left">
订单编号{{item.orderNo}}
</view>
<view class="top_info_right" v-if="item.status==0||item.status==2">
<view class="yuan"></view>
进行中
</view>
<view class="top_info_right" v-if="item.status==1||item.status==3" style="color: orangered;">
<view class="yuan" style="background: orangered;"></view>
待支付
</view>
<view class="top_info_right" v-if="item.status==4" style="color: green;">
<view class="yuan" style="background: green;"></view>
已完成
</view>
</view>
<view class="lines"></view>
<view class="order_info">
<view class="info_li">
租赁用户{{item.phonenumber}}
</view>
<view class="info_li">
<view class="half_info_li">
车辆编号{{item.sn}}
</view>
<view class="half_info_li">
租赁时长{{item.duration/60}}分钟
</view>
</view>
<view class="info_li">
订单费用{{item.totalFee}}
</view>
<view class="info_li" v-if="item.unlock_time">
开关时间{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }}
</view>
</view>
<view class="lines"></view>
<view class="btn_box">
<view class="btn" v-if="item.status==0||item.status==2" @click="showfzs(item)">
辅助还车
</view>
<view class="btn" v-if="item.status==1||item.status==3" @click="showgjs()">
改价
</view>
<view class="btn_line" v-if="item.status!=4">
</view>
<view class="btn" v-if="item.status==4" style="width: 100%;">
查看详情
</view>
<view class="btn" v-if="item.status!=4&&item.status!=2" >
查看详情
</view>
</view>
</view>
</view>
</swiper-item>
<swiper-item>
<view class="swiper-item ">
<view class="card" v-for="(item,index) in ingList" :key="index">
<view class="line"></view>
<view class="top_info">
<view class="top_info_left">
订单编号{{item.orderNo}}
</view>
<view class="top_info_right" v-if="item.status==0||item.status==2">
<view class="yuan"></view>
进行中
</view>
<view class="top_info_right" v-if="item.status==1||item.status==3" style="color: orangered;">
<view class="yuan" style="background: orangered;"></view>
待支付
</view>
<view class="top_info_right" v-if="item.status==4" style="color: green;">
<view class="yuan" style="background: green;"></view>
已完成
</view>
</view>
<view class="lines"></view>
<view class="order_info">
<view class="info_li">
租赁用户{{item.phonenumber}}
</view>
<view class="info_li">
<view class="half_info_li">
车辆编号{{item.sn}}
</view>
<view class="half_info_li">
租赁时长{{item.duration/60}}分钟
</view>
</view>
<view class="info_li">
订单费用{{item.totalFee}}
</view>
<view class="info_li" v-if="item.unlock_time">
开关时间{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }}
</view>
</view>
<view class="lines"></view>
<view class="btn_box">
<view class="btn" v-if="item.status==0||item.status==2" @click="showfzs(item)">
辅助还车
</view>
<view class="btn" v-if="item.status==1||item.status==3" @click="showgjs()">
改价
</view>
<view class="btn_line" v-if="item.status!=4">
</view>
<view class="btn" v-if="item.status==4" style="width: 100%;">
查看详情
</view>
<view class="btn" v-if="item.status!=4" >
查看详情
</view>
</view>
</view>
</view>
</swiper-item>
<swiper-item>
<view class="swiper-item ">
<view class="card" @click="todetail(item.id)" v-for="(item,index) in reprement" :key="index">
<view class="line"></view>
<view class="top_info">
<view class="top_info_left">
订单编号{{item.orderNo}}
</view>
<view class="top_info_right" v-if="item.status==0||item.status==2">
<view class="yuan"></view>
进行中
</view>
<view class="top_info_right" v-if="item.status==1||item.status==3" style="color: orangered;">
<view class="yuan" style="background: orangered;"></view>
待支付
</view>
<view class="top_info_right" v-if="item.status==4" style="color: green;">
<view class="yuan" style="background: green;"></view>
已完成
</view>
</view>
<view class="lines"></view>
<view class="order_info">
<view class="info_li">
租赁用户{{item.phonenumber}}
</view>
<view class="info_li">
<view class="half_info_li">
车辆编号{{item.sn}}
</view>
<view class="half_info_li">
租赁时长{{item.duration/60}}分钟
</view>
</view>
<view class="info_li">
订单费用{{item.totalFee}}
</view>
<view class="info_li" v-if="item.unlock_time">
开关时间{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }}
</view>
</view>
<view class="lines"></view>
<view class="btn_box">
<view class="btn" v-if="item.status==0||item.status==2" @click="showfzs(item)">
辅助还车
</view>
<view class="btn" v-if="item.status==1||item.status==3" @click="showgjs()">
改价
</view>
<view class="btn_line" v-if="item.status!=4">
</view>
<view class="btn" v-if="item.status==4" style="width: 100%;">
查看详情
</view>
<view class="btn" v-if="item.status!=4" >
查看详情
</view>
</view>
</view>
</view>
</swiper-item>
<swiper-item>
<view class="swiper-item ">
<view class="card" v-for="(item,index) in alreadyList" :key="index">
<view class="line"></view>
<view class="top_info">
<view class="top_info_left">
订单编号{{item.orderNo}}
</view>
<view class="top_info_right" v-if="item.status==0||item.status==2">
<view class="yuan"></view>
进行中
</view>
<view class="top_info_right" v-if="item.status==1||item.status==3" style="color: orangered;">
<view class="yuan" style="background: orangered;"></view>
待支付
</view>
<view class="top_info_right" v-if="item.status==4" style="color: green;">
<view class="yuan" style="background: green;"></view>
已完成
</view>
</view>
<view class="lines"></view>
<view class="order_info">
<view class="info_li">
租赁用户{{item.phonenumber}}
</view>
<view class="info_li">
<view class="half_info_li">
车辆编号{{item.sn}}
</view>
<view class="half_info_li">
租赁时长{{item.duration/60}}分钟
</view>
</view>
<view class="info_li">
订单费用{{item.totalFee}}
</view>
<view class="info_li" v-if="item.unlock_time">
开关时间{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }}
</view>
</view>
<view class="lines"></view>
<view class="btn_box">
<view class="btn" v-if="item.status==0||item.status==2" @click="showfzs(item)">
辅助还车
</view>
<view class="btn_line">
</view>
<view class="btn">
查看详情
</view>
</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
2024-05-09 17:05:51 +08:00
<view class="tip_box" v-if="showfz">
2024-05-08 23:18:30 +08:00
<view class="top">
<view class="tip">
提示
</view>
<view class="txt">
确定要辅助还车吗
</view>
</view>
<view class="bot">
2024-05-11 18:01:20 +08:00
<view class="bot_left" @click="closefz()">
2024-05-08 23:18:30 +08:00
取消
</view>
2024-05-11 18:01:20 +08:00
<view class="bot_right" @click="backDevice()">
2024-05-08 23:18:30 +08:00
确定
</view>
</view>
</view>
2024-05-09 17:05:51 +08:00
<view class="tip_box" v-if="showgj">
<view class="top">
<view class="tip">
改价
</view>
<view class="ipt_box">
<view class="text">
租赁费
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="0.00"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
<view class="ipt_box">
<view class="text">
租赁费
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="0.00"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
</view>
<view class="bot">
2024-05-11 18:01:20 +08:00
<view class="bot_left" @click="closefz()">
2024-05-09 17:05:51 +08:00
取消
</view>
<view class="bot_right">
确定
</view>
</view>
</view>
<view class="tip_box" v-if="showtk">
<view class="top">
<view class="tip">
退款
</view>
<view class="ipt_box">
<view class="text">
租赁费
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="0.00"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
<view class="ipt_box">
<view class="text">
调度费
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="0.00"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
<view class="ipt_box">
<view class="text">
管理费
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="0.00"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
<view class="ipt_box">
<view class="text">
原因
</view>
<view class="ipt">
<input type="text"
v-model="searchKeyword"
placeholder="选填"
class="input"
placeholder-style="color:#C7CDD3"
>
</view>
</view>
</view>
<view class="bot">
<view class="bot_left" @click="show=false">
取消
</view>
<view class="bot_right">
确定
</view>
</view>
</view>
2024-05-08 23:18:30 +08:00
<tab-bar :indexs='2' style=""></tab-bar>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#F7FAFE",
},
params: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false
},
pickertime: '',
time1:false,
time2:false,
lasTime:'00-00',
firsTime:'00-00',
searchKeyword:'',
curtitidx:0,
swiperHeight:414*3,
2024-05-11 18:01:20 +08:00
allList:[],
ingList:[],
reprement:[],
2024-05-08 23:18:30 +08:00
alreadyList:[],
2024-05-11 18:01:20 +08:00
show:false,
2024-05-09 17:05:51 +08:00
showfz:false,
showgj:false,
2024-05-11 18:01:20 +08:00
showtk:false,
orderInfo:{}
2024-05-08 23:18:30 +08:00
}
},
onShow() {
this.$store.dispatch('userInfo', this.$u).then(() => {
// 执行其他操作...
});
2024-05-11 18:01:20 +08:00
this.orderList()
this.orderList1()
this.orderList2()
this.orderList3()
2024-05-08 23:18:30 +08:00
},
watch: {
curtitidx(newValue, oldValue) {
// 处理userId变化的逻辑
console.log('userId 发生变化', newValue, oldValue);
if(newValue==0){
2024-05-11 18:01:20 +08:00
this.swiperHeight=(this.allList.length*440)
2024-05-08 23:18:30 +08:00
}else if(newValue==1){
2024-05-11 18:01:20 +08:00
this.swiperHeight=this.ingList.length*440
}else if(newValue==2){
this.swiperHeight=this.reprement.length*440
}else if(newValue==3){
this.swiperHeight=this.alreadyList.length*440
2024-05-08 23:18:30 +08:00
}
}
},
computed: {
userId() {
return this.$store.getters.userId;
},
},
methods: {
2024-05-11 18:01:20 +08:00
backDevice(){
this.$u.post('/appVerify/device/return?orderNo='+this.orderInfo.orderNo+'&returnType=2').then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.show=false
this.showfz=false
this.orderInfo={}
if(this.curtitidx==0){
this.orderList()
}else if(this.curtitidx==1){
this.orderList1()
}
}else{
uni.showToast({
title:res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
closefz(){
this.show=false
this.showfz=false
this.orderInfo={}
},
showfzs(item){
this.orderInfo=item
this.show=true
this.showfz=true
},
orderList() {
let data ={
phonenumber:this.searchKeyword,
type:'1',
status:'',
beginTime:'',
endTime:'',
}
this.$u.get('/appVerify/order/list?',data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.allList = res.rows
this.swiperHeight=(this.allList.length*440)
// console.log(this.polyline);
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
orderList1() {
let data ={
phonenumber:this.searchKeyword,
type:'1',
statusList:'0,2',
beginTime:'',
endTime:'',
}
this.$u.get('/appVerify/order/list?',data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.ingList = res.rows
// console.log(this.polyline);
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
orderList2() {
let data ={
phonenumber:this.searchKeyword,
type:'1',
statusList:'1,3',
beginTime:'',
endTime:'',
}
this.$u.get('/appVerify/order/list?',data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.reprement = res.rows
// console.log(this.polyline);
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
orderList3() {
let data ={
phonenumber:this.searchKeyword,
type:'1',
status:'4',
beginTime:'',
endTime:'',
}
this.$u.get('/appVerify/order/list?',data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.alreadyList = res.rows
console.log(this.alreadyList);
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
2024-05-08 23:18:30 +08:00
changeidx(idx){
this.curtitidx=idx
2024-05-11 18:01:20 +08:00
if(idx==0){
// this.orderList()
}else if(idx==1){
// this.orderList1()
}else if(idx==2){
// this.orderList2()
}else if(idx==3){
// this.orderList3()
}
2024-05-08 23:18:30 +08:00
},
swiperchange(e){
this.curtitidx=e.detail.current
console.log(e,'eeeeeeeee');
},
confirm1(e) {
console.log(e,'eeeeeeee');
this.firsTime = e.year+'-'+e.month+'-'+e.day
},
confirm2(e) {
this.lasTime = e.year+'-'+e.month+'-'+e.day
},
search() {
// 根据关键字过滤 this.classlist
if (this.searchKeyword !== '') {
const filteredList = JSON.parse(JSON.stringify(this.orgstulist)).filter(item => {
// 匹配 nickName 或者 id
return item.nickName.includes(this.searchKeyword) || item.id.toString().includes(this.searchKeyword);
});
// 更新 this.classlist 为过滤后的列表
this.stulist = filteredList;
} else {
this.fuwei();
}
},
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.page {
width: 750rpx;
.tip_box {
position: fixed;
left: 72rpx;
top: 628rpx;
width: 610rpx;
// height: 282rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
z-index: 110;
padding-bottom: 100rpx;
.top {
padding: 52rpx 38rpx 42rpx 36rpx;
2024-05-09 17:05:51 +08:00
.ipt_box{
margin-top: 22rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.text{
width: 96rpx;
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%;
}
}
}
2024-05-08 23:18:30 +08:00
.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;
}
}
.bot {
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;
}
}
}
.warp_box{
.swiper{
.swiper-item{
.card{
margin: 16rpx auto;
width: 750rpx;
background: #fff;
.btn_box{
display: flex;
flex-wrap: nowrap;
align-items: center;
width: 100%;
height: 96rpx;
.btn{
display: flex;
align-items: center;
justify-content: center;
font-weight: 400;
font-size: 36rpx;
color: #3D3D3D;
width: 49%;
}
.btn_line{
width: 0rpx;
height: 51rpx;
border: 2rpx solid #4C97E7;
}
}
.order_info{
padding: 26rpx 30rpx ;
display: flex;
flex-wrap: wrap;
.info_li{
display: flex;
flex-wrap: nowrap;
width: 100%;
font-weight: 400;
font-size: 28rpx;
color: #808080;
.half_info_li{
width: 50%;
font-weight: 400;
font-size: 28rpx;
color: #808080;
}
}
}
.line{
width: 750rpx;
height: 22rpx;
background: #F6F6F6;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.lines{
width: 750rpx;
height: 2rpx;
background: #D8D8D8;
// border: 2rpx solid #D8D8D8;
}
.top_info{
padding: 24rpx 32rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
2024-05-11 18:01:20 +08:00
.top_info_left {
width: 70%;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
white-space: nowrap; /* 禁止换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
2024-05-08 23:18:30 +08:00
}
.top_info_right{
display: flex;
flex-wrap: nowrap;
align-items: center;
margin-left: auto;
.yuan{
margin-right: 12rpx;
border-radius: 50%;
width: 14rpx;
height: 14rpx;
background: #4C97E7;
}
font-weight: 400;
font-size: 28rpx;
color: #4C97E7;
}
}
}
}
}
}
.tap{
margin-top: 24rpx;
width: 750rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-around;
.tap_cont{
text-align: center;
padding-bottom: 15rpx;
width: 100rpx;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
border-bottom: 6rpx solid #fff ;
}
.act1{
border-bottom: 6rpx solid #4C97E7 ;
color: #4C97E7;
}
}
.top_box {
display: flex;
flex-wrap: nowrap;
align-items: center;
padding: 28rpx 30rpx;
margin: 20rpx auto;
width: 672rpx;
height: 100rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 10rpx 10rpx 10rpx 10rpx;
.left_text {
width: 25%;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.timebox {
width: 75%;
display: flex;
flex-wrap: nowrap;
align-items: center;
margin-left: 34rpx;
.left_time {
text-align: center;
margin-right: 6rpx;
height: 50rpx;
width: 45%;
border: 2rpx solid #ccc;
border-radius: 12rpx;
font-weight: 400;
font-size: 32rpx;
color: #979797;
}
.right_time {
text-align: center;
margin-left: 6rpx;
height: 50rpx;
width: 45%;
border: 2rpx solid #ccc;
border-radius: 12rpx;
font-weight: 400;
font-size: 32rpx;
color: #979797;
}
}
}
}
</style>