<template> <view class="page"> <u-navbar :is-back="false" title="订单管理" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36' height='45'></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 " v-if="loading"> <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" > 租赁时长:{{computedList(item)}} </view> </view> <view class="info_li"> <view class="half_info_li"> 订单费用:{{item.totalFee}}元 </view> <view class="half_info_li" v-if="item.status==4" > 有无退款:<span v-if="item.etRefund==null">无</span> <span v-else style="color: red;">有</span> </view> </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(item)"> 改价 </view> <view class="btn" v-if="item.status==4" @click="showtks(item)"> 退款 </view> <view class="btn_line"> </view> <!-- <view class="btn" v-if="item.status==4" style="width: 100%;"> 查看详情 </view> --> <view class="btn" @click="toOrderDetail(item.orderNo)"> 查看详情 </view> </view> </view> </view> </swiper-item> <swiper-item> <view class="swiper-item " v-if="loading"> <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" > 租赁时长:{{computedList(item)}} </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" v-if="item.status==4" @click="showtks(item)"> 退款 </view> <view class="btn_line"> </view> <view class="btn" @click="toOrderDetail(item.orderNo)"> 查看详情 </view> </view> </view> </view> </swiper-item> <swiper-item> <view class="swiper-item " v-if="loading"> <view class="card" 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" > 租赁时长:{{computedList(item)}} </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(item)"> 改价 </view> <view class="btn" v-if="item.status==4" @click="showtks(item)"> 退款 </view> <view class="btn_line"> </view> <view class="btn" @click="toOrderDetail(item.orderNo)"> 查看详情 </view> </view> </view> </view> </swiper-item> <swiper-item> <view class="swiper-item " v-if="loading"> <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" > 租赁时长:{{computedList(item)}} </view> </view> <view class="info_li"> <view class="half_info_li"> 订单费用:{{item.totalFee}}元 </view> <view class="half_info_li" v-if="item.status==4" > 有无退款:<span v-if="item.etRefund==null">无</span> <span v-else style="color: red;">有</span> </view> </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==4" @click="showtks(item)"> 退款 </view> <view class="btn_line"> </view> <view class="btn" @click="toOrderDetail(item.orderNo)"> 查看详情 </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="orderInfo.dispatchFee" 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="orderInfo.manageFee" 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="orderInfo.ridingFee" 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="orderInfo.appointmentFee" placeholder="0.00" class="input" placeholder-style="color:#C7CDD3"> 元 </view> </view> </view> <view class="bot"> <view class="bot_left" @click="closegj()"> 取消 </view> <view class="bot_right" @click="changeMoney()"> 确定 </view> </view> </view> <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="orderInfo.dispatchFee" placeholder="0.00" class="input" placeholder-style="color:#C7CDD3" @input="checkAndUpdate('dispatchFee')"> 元 </view> </view> <view class="ipt_box"> <view class="text"> 管理费 </view> <view class="ipt"> <input type="text" v-model="orderInfo.manageFee" placeholder="0.00" class="input" placeholder-style="color:#C7CDD3" @input="checkAndUpdate('manageFee')"> 元 </view> </view> <view class="ipt_box"> <view class="text"> 骑行费 </view> <view class="ipt"> <input type="text" v-model="orderInfo.ridingFee" placeholder="0.00" class="input" placeholder-style="color:#C7CDD3" @input="checkAndUpdate('ridingFee')"> 元 </view> </view> <view class="ipt_box"> <view class="text"> 预约费 </view> <view class="ipt"> <input type="text" v-model="orderInfo.appointmentFee" placeholder="0.00" class="input" placeholder-style="color:#C7CDD3" @input="checkAndUpdate('appointmentFee')"> 元 </view> </view> <view class="ipt_box"> <view class="text"> 原因 </view> <view class="ipt"> <input type="text" v-model="orderInfo.reason" placeholder="选填" class="input" placeholder-style="color:#C7CDD3" @input="checkAndUpdate('reason')"> </view> </view> </view> <view class="bot"> <view class="bot_left" @click="closetk()"> 取消 </view> <view class="bot_right" @click="backMoney()"> 确定 </view> </view> </view> <tab-bar :indexs='2' style=""></tab-bar> </view> </template> <script> let timerId; let timerId1; 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: '', firsTime: '', searchKeyword: '', curtitidx: 0, swiperHeight: 400, allList: [], ingList: [], reprement: [], alreadyList: [], show: false, showfz: false, showgj: false, showtk: false, orderInfo: {}, loading: false, initialValues: { }, areaId:false } }, onShow() { this.$store.dispatch('userInfo', this.$u).then(() => { // 执行其他操作... }); if(uni.getStorageSync('adminAreaid')){ this.areaId = uni.getStorageSync('adminAreaid') this.orderList() } }, 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; }, }, computed: { }, methods: { computedList(item) { if(item.status==0||item.status==2){ const createTime = new Date(item.createTime); const payTime = Date.now(); const timeDifference = Math.abs(createTime - payTime); const hours = Math.floor(timeDifference / (1000 * 60 * 60)); const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000); let result = ''; if (hours > 0) { result += `${hours}小时`; } if (minutes > 0 || hours > 0) { // 显示分钟条件:有小时或者有分钟 result += `${minutes}分`; } // result += `${seconds}秒`; // 始终显示秒 return result; }else{ const createTime = new Date(item.createTime); const payTime = new Date(item.returnTime); const timeDifference = Math.abs(createTime - payTime); const hours = Math.floor(timeDifference / (1000 * 60 * 60)); const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000); let result = ''; if (hours > 0) { result += `${hours}小时`; } if (minutes > 0 || hours > 0) { // 显示分钟条件:有小时或者有分钟 result += `${minutes}分`; } // result += `${seconds}秒`; // 始终显示秒 return result; } }, toOrderDetail(id) { uni.navigateTo({ url: '/pages_admin/order/order_detail?id=' + id }) }, checkAndUpdate(key) { clearTimeout(timerId); timerId = setTimeout(() => { let inputValue = parseFloat(this.orderInfo[key]); // Get the initial value corresponding to the key let initialValue = parseFloat(this.initialValues[key]); // If input value exceeds the initial value, revert back to initial value if (inputValue > initialValue) { this.orderInfo[key] = initialValue; } }, 500); // Convert input value to number }, // 退款 backMoney() { let data = { orderNo: this.orderInfo.orderNo, dispatchFee: this.orderInfo.dispatchFee, manageFee: this.orderInfo.manageFee, ridingFee: this.orderInfo.ridingFee, appointmentFee: this.orderInfo.appointmentFee, reason: this.orderInfo.reason } this.$u.put('/appVerify/order/refund', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.show = false this.showgj = false this.showtk = false this.orderInfo = {} if (this.curtitidx == 0) { this.orderList() } else if (this.curtitidx == 3) { this.orderList3() } } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }).catch(error => { console.error("Error fetching area data:", error); }); }, showtks(item) { this.orderInfo = item this.show = true this.showtk = true this.initialValues.dispatchFee = this.orderInfo.dispatchFee this.initialValues.manageFee = this.orderInfo.manageFee this.initialValues.ridingFee = this.orderInfo.ridingFee this.initialValues.appointmentFee = this.orderInfo.appointmentFee }, closetk() { this.show = false this.showtk = false this.orderInfo = {} }, // 改价 changeMoney() { let data = { orderNo: this.orderInfo.orderNo, dispatchFee: this.orderInfo.dispatchFee, manageFee: this.orderInfo.manageFee, ridingFee: this.orderInfo.ridingFee, appointmentFee: this.orderInfo.appointmentFee, } this.$u.put('/appVerify/order/editPrice', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.show = false this.showgj = false this.orderInfo = {} if (this.curtitidx == 0) { this.orderList() } else if (this.curtitidx == 2) { this.orderList2() } } else { uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); } }).catch(error => { console.error("Error fetching area data:", error); }); }, showgjs(item) { this.orderInfo = item this.show = true this.showgj = true }, closegj() { this.show = false this.showgj = false this.orderInfo = {} }, // 还车 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: '', startTime: this.firsTime, endTime: this.lasTime, areaId:this.areaId } this.loading = false this.$u.get('/appVerify/order/list?', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.allList = res.rows this.loading = true this.swiperHeight = (this.allList.length * 440) this.curtitidx = 0 // console.log(this.polyline); } }).catch(error => { console.error("Error fetching area data:", error); }); }, orderList1() { let data = { phonenumber: this.searchKeyword, type: '1', statusList: '0,2', startTime: this.firsTime, endTime: this.lasTime, areaId:this.areaId } this.loading = false this.$u.get('/appVerify/order/list?', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.ingList = res.rows this.loading = true this.curtitidx = 1 // console.log(this.polyline); } }).catch(error => { console.error("Error fetching area data:", error); }); }, orderList2() { let data = { phonenumber: this.searchKeyword, type: '1', statusList: '1,3', startTime: this.firsTime, endTime: this.lasTime, areaId:this.areaId } this.loading = false this.$u.get('/appVerify/order/list?', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.reprement = res.rows this.loading = true this.curtitidx = 2 // console.log(this.polyline); } }).catch(error => { console.error("Error fetching area data:", error); }); }, orderList3() { let data = { phonenumber: this.searchKeyword, type: '1', status: '4', startTime: this.firsTime, endTime: this.lasTime, areaId:this.areaId } this.loading = false this.$u.get('/appVerify/order/list?', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.alreadyList = res.rows console.log(this.alreadyList); this.loading = true this.curtitidx = 3 } }).catch(error => { console.error("Error fetching area data:", error); }); }, async changeidx(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 if (this.curtitidx == 0) { this.orderList() } else if (this.curtitidx == 1) { this.orderList1() } else if (this.curtitidx == 2) { this.orderList2() } else if (this.curtitidx == 3) { this.orderList3() } }, confirm2(e) { this.lasTime = e.year + '-' + e.month + '-' + e.day if (this.curtitidx == 0) { this.orderList() } else if (this.curtitidx == 1) { this.orderList1() } else if (this.curtitidx == 2) { this.orderList2() } else if (this.curtitidx == 3) { this.orderList3() } }, search() { clearTimeout(timerId1); timerId1 = setTimeout(() => { if (this.curtitidx == 0) { this.orderList() } else if (this.curtitidx == 1) { this.orderList1() } else if (this.curtitidx == 2) { this.orderList2() } else if (this.curtitidx == 3) { this.orderList3() } }, 500); // 根据关键字过滤 this.classlist }, } } </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>