<template> <view class="page"> <u-navbar :is-back="false" title="设备管理" :border-bottom="false" :background="bgc" title-color='#2E4975' 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' /> <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> <view class="tip_box" v-if="showfz"> <view class="top"> <view class="tip"> 提示 </view> <view class="txt"> 确定要辅助还车吗? </view> </view> <view class="bot"> <view class="bot_left" @click="closefz()"> 取消 </view> <view class="bot_right" @click="backDevice()"> 确定 </view> </view> </view> <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"> <view class="bot_left" @click="closefz()"> 取消 </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> <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, allList:[], ingList:[], reprement:[], alreadyList:[], show:false, showfz:false, showgj:false, showtk:false, orderInfo:{} } }, onShow() { this.$store.dispatch('userInfo', this.$u).then(() => { // 执行其他操作... }); this.orderList() this.orderList1() this.orderList2() this.orderList3() }, watch: { curtitidx(newValue, oldValue) { // 处理userId变化的逻辑 console.log('userId 发生变化', newValue, oldValue); if(newValue==0){ this.swiperHeight=(this.allList.length*440) }else if(newValue==1){ 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 } } }, computed: { userId() { return this.$store.getters.userId; }, }, methods: { 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); }); }, changeidx(idx){ this.curtitidx=idx if(idx==0){ // this.orderList() }else if(idx==1){ // this.orderList1() }else if(idx==2){ // this.orderList2() }else if(idx==3){ // this.orderList3() } }, 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; .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%; } } } .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; .top_info_left { width: 70%; font-weight: 400; font-size: 28rpx; color: #3D3D3D; white-space: nowrap; /* 禁止换行 */ overflow: hidden; /* 超出部分隐藏 */ text-overflow: ellipsis; /* 显示省略号 */ } .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>