diff --git a/pages.json b/pages.json index d58c1b7..f162c1c 100644 --- a/pages.json +++ b/pages.json @@ -122,6 +122,15 @@ "navigationStyle": "custom", "enablePullDownRefresh" : false } + }, + { + "path" : "order/search_device", + "style" : + { + "navigationBarTitleText" : "", + "navigationStyle": "custom", + "enablePullDownRefresh" : false + } } // ... 分包A的其他页面 diff --git a/pages_admin/admin_index.vue b/pages_admin/admin_index.vue index 918d64f..92f81cd 100644 --- a/pages_admin/admin_index.vue +++ b/pages_admin/admin_index.vue @@ -19,7 +19,7 @@ <view class="btn1"> 车辆扫码 </view> - <view class="btn2"> + <view class="btn2" @click="topage()"> 车辆搜索 </view> </view> @@ -163,6 +163,11 @@ }, }, methods: { + topage(){ + uni.navigateTo({ + url:'/pages_admin/order/search_device' + }) + }, allVehicleNum() { let data = { powerStart: this.rangeValue[0], @@ -306,7 +311,7 @@ } }) }) - setTimeout(() => { + this.status9.forEach(item => { this.markers.push({ id: parseFloat(item.mac), @@ -327,7 +332,7 @@ } }) }) - }, 200) + }, getmarks() { @@ -464,7 +469,15 @@ // 阻止事件冒泡 this.sn = e.markerId - this.todetail() + for (let i = 0; i < this.listData.length; i++) { + + if (this.listData[i].sn == this.sn) { + uni.navigateTo({ + url:'/pages_admin/order/device_detail?id='+this.sn + }) + } + } + // this.listData } @@ -489,11 +502,11 @@ }, - topage() { - uni.navigateTo({ - url: '/page_fix/repair/repair_index' - }) - }, + // topage() { + // uni.navigateTo({ + // url: '/page_fix/repair/repair_index' + // }) + // }, getordernum() { // 发送请求获取数据 this.$u.get('/appVerify/adminOrder/num?adminId=' + 2).then((res) => { diff --git a/pages_admin/admin_order.vue b/pages_admin/admin_order.vue index 63b0b55..debbdd3 100644 --- a/pages_admin/admin_order.vue +++ b/pages_admin/admin_order.vue @@ -1,6 +1,6 @@ <template> <view class="page"> - <u-navbar :is-back="false" title="设备管理" :border-bottom="false" :background="bgc" title-color='#2E4975' + <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"> @@ -21,37 +21,36 @@ 手机号 </view> <view class="sear_ipt"> - <input type="text" - v-model="searchKeyword" - placeholder="请输入内容" - class="input" - placeholder-style="color:#C7CDD3" - @input="search()"> + <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 class="tap_cont" :class="curtitidx==1?'act1':''" @click="changeidx(1)"> 进行中 </view> - <view class="tap_cont" :class="curtitidx==2?'act1':''" @click="changeidx(2)"> + <view class="tap_cont" :class="curtitidx==2?'act1':''" @click="changeidx(2)"> 待支付 </view> - <view class="tap_cont" :class="curtitidx==3?'act1':''" @click="changeidx(3)"> + <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> + + <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 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="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"> @@ -61,7 +60,8 @@ <view class="yuan"></view> 进行中 </view> - <view class="top_info_right" v-if="item.status==1||item.status==3" style="color: orangered;"> + <view class="top_info_right" v-if="item.status==1||item.status==3" + style="color: orangered;"> <view class="yuan" style="background: orangered;"></view> 待支付 </view> @@ -70,7 +70,7 @@ 已完成 </view> </view> - + <view class="lines"></view> <view class="order_info"> <view class="info_li"> @@ -88,7 +88,7 @@ 订单费用:{{item.totalFee}}元 </view> <view class="info_li" v-if="item.unlock_time"> - 开关时间:{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }} + 开关时间:{{item.unlock_time}} {{ item.return_time ? item.return_time : '--' }} </view> </view> <view class="lines"></view> @@ -96,207 +96,218 @@ <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 class="btn" v-if="item.status==1||item.status==3" @click="showgjs(item)"> 改价 </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 class="btn" v-if="item.status==4" @click="showtks(item)"> + 退款 </view> <view class="btn_line"> - + </view> - <view class="btn"> + <!-- <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"> + 租赁时长:{{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" 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"> + 租赁时长:{{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(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"> + 租赁时长:{{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==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"> @@ -304,7 +315,7 @@ <view class="tip"> 提示 </view> - + <view class="txt"> 确定要辅助还车吗? </view> @@ -323,77 +334,15 @@ <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" - > - 元 + <input type="text" v-model="orderInfo.dispatchFee" placeholder="0.00" class="input" + placeholder-style="color:#C7CDD3"> + 元 </view> </view> <view class="ipt_box"> @@ -401,35 +350,102 @@ 管理费 </view> <view class="ipt"> - <input type="text" - v-model="searchKeyword" - placeholder="0.00" - class="input" - placeholder-style="color:#C7CDD3" - > - 元 + <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="searchKeyword" - placeholder="选填" - class="input" - placeholder-style="color:#C7CDD3" - > - 元 + <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="show=false"> + <view class="bot_left" @click="closegj()"> 取消 </view> - <view class="bot_right"> + <view class="bot_right" @click="changeMoney()"> + 确定 + </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="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> @@ -439,6 +455,8 @@ </template> <script> + let timerId; + let timerId1; export default { data() { return { @@ -454,23 +472,26 @@ 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:{} - + 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: { + + } } }, @@ -480,22 +501,22 @@ // 执行其他操作... }); this.orderList() - this.orderList1() - this.orderList2() - this.orderList3() + // 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 + 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 } } }, @@ -505,21 +526,50 @@ }, }, methods: { - backDevice(){ - this.$u.post('/appVerify/device/return?orderNo='+this.orderInfo.orderNo+'&returnType=2').then((res) => { + 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.showfz=false - this.orderInfo={} - if(this.curtitidx==0){ + this.show = false + this.showgj = false + this.orderInfo = {} + if (this.curtitidx == 0) { this.orderList() - }else if(this.curtitidx==1){ - this.orderList1() + } else if (this.curtitidx == 3) { + this.orderList3() } - }else{ + } else { uni.showToast({ - title:res.msg, + title: res.msg, icon: 'none', duration: 2000 }); @@ -528,32 +578,116 @@ console.error("Error fetching area data:", error); }); }, - closefz(){ - this.show=false - this.showfz=false - this.orderInfo={} + 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 }, - showfzs(item){ - this.orderInfo=item - this.show=true - this.showfz=true + 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:'', - beginTime:'', - endTime:'', + let data = { + phonenumber: this.searchKeyword, + type: '1', + status: '', + startTime: this.firsTime, + endTime: this.lasTime, + } - - - this.$u.get('/appVerify/order/list?',data).then((res) => { + + this.loading = false + this.$u.get('/appVerify/order/list?', data).then((res) => { if (res.code === 200) { // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 this.allList = res.rows - this.swiperHeight=(this.allList.length*440) + this.loading = true + this.swiperHeight = (this.allList.length * 440) + this.curtitidx = 0 // console.log(this.polyline); } }).catch(error => { @@ -561,18 +695,21 @@ }); }, orderList1() { - let data ={ - phonenumber:this.searchKeyword, - type:'1', - statusList:'0,2', - beginTime:'', - endTime:'', - + let data = { + phonenumber: this.searchKeyword, + type: '1', + statusList: '0,2', + startTime: this.firsTime, + endTime: this.lasTime, + } - this.$u.get('/appVerify/order/list?',data).then((res) => { + 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 => { @@ -580,18 +717,22 @@ }); }, orderList2() { - let data ={ - phonenumber:this.searchKeyword, - type:'1', - statusList:'1,3', - beginTime:'', - endTime:'', + let data = { + phonenumber: this.searchKeyword, + type: '1', + statusList: '1,3', + startTime: this.firsTime, + endTime: this.lasTime, + } - this.$u.get('/appVerify/order/list?',data).then((res) => { + 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 => { @@ -599,61 +740,89 @@ }); }, orderList3() { - let data ={ - phonenumber:this.searchKeyword, - type:'1', - status:'4', - beginTime:'', - endTime:'', + let data = { + phonenumber: this.searchKeyword, + type: '1', + status: '4', + startTime: this.firsTime, + endTime: this.lasTime, + + + } - this.$u.get('/appVerify/order/list?',data).then((res) => { + 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); }); }, - 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() + 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'); + 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 - + 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 - + 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() { - // 根据关键字过滤 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(); - } + 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 + }, } } @@ -666,6 +835,7 @@ .page { width: 750rpx; + .tip_box { position: fixed; left: 72rpx; @@ -676,20 +846,24 @@ border-radius: 30rpx 30rpx 30rpx 30rpx; z-index: 110; padding-bottom: 100rpx; + .top { padding: 52rpx 38rpx 42rpx 36rpx; - .ipt_box{ + + .ipt_box { margin-top: 22rpx; display: flex; flex-wrap: nowrap; align-items: center; - .text{ + + .text { width: 96rpx; font-weight: 400; font-size: 32rpx; color: #3D3D3D; } - .ipt{ + + .ipt { padding: 10rpx 18rpx; display: flex; align-items: center; @@ -699,18 +873,21 @@ height: 64rpx; border-radius: 0rpx 0rpx 0rpx 0rpx; border: 2rpx solid #979797; - .input{ + + .input { width: 80%; } } } - .tip{ + + .tip { width: 100%; text-align: center; font-weight: 700; font-size: 32rpx; color: #3D3D3D; } + .txt { margin-top: 32rpx; width: 100%; @@ -720,16 +897,17 @@ 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%; @@ -742,9 +920,9 @@ color: #3D3D3D; background: #EEEEEE; } - + .bot_right { - border-radius: 0rpx 0rpx 30rpx 0rpx; + border-radius: 0rpx 0rpx 30rpx 0rpx; width: 50%; height: 86rpx; background: #4C97E7; @@ -756,25 +934,28 @@ font-weight: 500; font-size: 32rpx; // color: #4C97E7; - + } - + } } - .warp_box{ - .swiper{ - .swiper-item{ - .card{ + + .warp_box { + .swiper { + .swiper-item { + .card { margin: 16rpx auto; width: 750rpx; background: #fff; - .btn_box{ + + .btn_box { display: flex; flex-wrap: nowrap; align-items: center; width: 100%; height: 96rpx; - .btn{ + + .btn { display: flex; align-items: center; justify-content: center; @@ -783,24 +964,28 @@ color: #3D3D3D; width: 49%; } - .btn_line{ + + .btn_line { width: 0rpx; height: 51rpx; border: 2rpx solid #4C97E7; } } - .order_info{ - padding: 26rpx 30rpx ; + + .order_info { + padding: 26rpx 30rpx; display: flex; flex-wrap: wrap; - .info_li{ + + .info_li { display: flex; flex-wrap: nowrap; width: 100%; font-weight: 400; font-size: 28rpx; color: #808080; - .half_info_li{ + + .half_info_li { width: 50%; font-weight: 400; font-size: 28rpx; @@ -808,44 +993,54 @@ } } } - .line{ + + .line { width: 750rpx; height: 22rpx; background: #F6F6F6; border-radius: 0rpx 0rpx 0rpx 0rpx; } - .lines{ + + .lines { width: 750rpx; height: 2rpx; background: #D8D8D8; // border: 2rpx solid #D8D8D8; } - .top_info{ + + .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; /* 显示省略号 */ + width: 70%; + font-weight: 400; + font-size: 28rpx; + color: #3D3D3D; + white-space: nowrap; + /* 禁止换行 */ + overflow: hidden; + /* 超出部分隐藏 */ + text-overflow: ellipsis; + /* 显示省略号 */ } - .top_info_right{ + + .top_info_right { display: flex; flex-wrap: nowrap; align-items: center; margin-left: auto; - .yuan{ + + .yuan { margin-right: 12rpx; border-radius: 50%; width: 14rpx; height: 14rpx; background: #4C97E7; } + font-weight: 400; font-size: 28rpx; color: #4C97E7; @@ -855,28 +1050,31 @@ } } } - .tap{ + + .tap { margin-top: 24rpx; width: 750rpx; display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-around; - - .tap_cont{ + + .tap_cont { text-align: center; padding-bottom: 15rpx; width: 100rpx; font-weight: 500; font-size: 32rpx; color: #3D3D3D; - border-bottom: 6rpx solid #fff ; + border-bottom: 6rpx solid #fff; } - .act1{ - border-bottom: 6rpx solid #4C97E7 ; + + .act1 { + border-bottom: 6rpx solid #4C97E7; color: #4C97E7; } } + .top_box { display: flex; flex-wrap: nowrap; diff --git a/pages_admin/order/device_detail.vue b/pages_admin/order/device_detail.vue index e794f70..46b47de 100644 --- a/pages_admin/order/device_detail.vue +++ b/pages_admin/order/device_detail.vue @@ -3,7 +3,7 @@ <u-navbar title="设备详情" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36' height='36'></u-navbar> <map class="map" id="map" ref="map" :scale="zoomSize" :latitude="latitude" :longitude="longitude" - :show-location='true' :polygons='polygons' :markers="markers" :polyline="polyline"></map> + :show-location="true" :markers="markers" :polygons="polyline" ></map> <view class="info_card"> <view class="info_tit"> 设备信息 @@ -14,23 +14,22 @@ <view class="info_li"> <view class="half_infoli"> - 车牌号:<input type="text" v-model="searchKeyword" placeholder="" class="input" - placeholder-style="color:#C7CDD3"> + 车牌号:<span>{{deviceInfos.vehicleNum}}</span> </view> <view class="half_infoli"> - MAC:<span>1Km</span> + MAC:<span>{{deviceInfos.mac}}</span> </view> </view> <view class="info_li"> <view class="half_infoli"> - SN:<span>6分钟</span> + SN:<span>{{deviceInfos.sn}}</span> </view> <view class="half_infoli"> - 车辆型号:<span>1Km</span> + 车辆型号:<span>{{deviceInfos.model}}</span> </view> </view> <view class="info_li"> - 运营区域:<span>已完成</span> + 运营区域:<span>{{deviceInfos.areaName}}</span> </view> </view> @@ -39,31 +38,33 @@ <view class="info_li"> <view class="half_infoli"> - 车辆状态:<span>6分钟</span> + 车辆状态:<span>{{status()}}</span> </view> <view class="half_infoli"> - 续航里程:<span>1Km</span> + 续航里程:<span>{{deviceInfos.remainingMileage}}Km</span> </view> </view> <view class="info_li"> - 异常原因:<span>已完成</span> + <view class="half_infoli"> + 电池电量:<span>{{deviceInfos.remainingPower}}%</span> + </view> </view> + + <!-- <view class="info_li"> + 异常原因:<span>已完成</span> + </view> --> </view> - <view class="lines"></view> + <!-- <view class="lines"></view> <view class="cont"> <view class="info_li"> - <view class="half_infoli"> - 电池编号:<span>6分钟</span> - </view> + <view class="half_infoli"> GPRS信号:<span>1Km</span> </view> </view> - <view class="info_li"> - 电池电量:<span>已完成</span> - </view> - </view> + + </view> --> <view class="lines"></view> <view class="cont"> @@ -79,7 +80,7 @@ </view> </view> </view> - <view class="info_card" style="margin-top: 20rpx;"> + <view class="info_card" style="margin-top: 20rpx;" v-if="deviceInfos.etOrders.length>0"> <view class="info_tit"> 订单信息 </view> @@ -88,30 +89,30 @@ <view class="info_li"> - 当前用户:<span>13365492512</span> + 当前用户:<span>{{deviceInfos.etOrders[0].phonenumber}}</span> </view> <view class="info_li" style="flex-wrap: wrap;display: inline-block;"> - 当前订单编号:<span>2169987651526787</span> + 当前订单编号:<span>{{deviceInfos.etOrders[0].orderNo}}</span> </view> <view class="info_li"> - 最后定位时间:<span>2024-04-25 15:22:36</span> + 订单开始时间:<span>{{deviceInfos.etOrders[0].createTime}}</span> </view> </view> </view> <view class="bot_btn"> - <view class="btn"> + <view class="btn" @click="btn(0)"> 开锁 </view> - <view class="btn"> + <view class="btn" @click="btn(1)"> 关锁 </view> - <view class="btn"> + <view class="btn" @click="btn(2)"> 车辆禁用 </view> - <view class="btn"> + <view class="btn" @click="btn(3)"> 车辆解禁 </view> - <view class="btn"> + <view class="btn" @click="btn(4)"> 响铃寻车 </view> <view class="btn" @click="tipshow=true" v-if="info.type==1"> @@ -121,8 +122,8 @@ 换电处理 </view> </view> - <u-mask :show="show" @click="show = false" :z-index='100' /> - <view class="tip_box" v-if="showgj"> + <u-mask :show="false" @click="show = false" :z-index='100' /> + <view class="tip_box" v-if="false"> <view class="top"> <view class="tip"> 修改车牌号 @@ -175,72 +176,341 @@ longitude: 116.397128, isMap: false, zoomSize: 15, - markers: [{ - id: 1, - latitude: 39.90469, - longitude: 116.40717, - title: 'Marker1' - }, { - id: 2, - latitude: 39.90969, - longitude: 116.41217, - title: 'Marker2' - }], - polyline: [{ - points: [{ - latitude: 39.916527, - longitude: 116.397128 - }, { - latitude: 39.926527, - longitude: 116.397128 - }, { - latitude: 39.926527, - longitude: 116.407128 - }, { - latitude: 39.916527, - longitude: 116.407128 - }], - width: 8, - arrowLine: true, - color: '#00AF99' - // strokeWidth: 2, - // strokeColor: '#00AF99', - // fillColor: '#00AF99' - }, ], - polygons: [{ - points: [{ - latitude: 39.918527, - longitude: 116.400128 - }, - { - latitude: 39.922527, - longitude: 116.400128 - }, - { - latitude: 39.924527, - longitude: 116.405128 - }, - { - latitude: 39.912527, - longitude: 116.402128 - } - ], - strokeColor: '#00FF00DD', // 使用不同的颜色来区分第二个区域 - strokeWidth: 2, - fillColor: '#00FF00DD' - }], - cardId: '001区域' + markers: [], + polyline: [], + polygons: [], + cardId: '001区域', + sn:'', + deviceInfos:{} } }, + onLoad(e) { + this.sn=e.id + this.deviceInfo() + this.getArea() + this.getParking() + }, methods: { - + btn(num){ + if(num==0){ + this.$u.post('/appVerify/admin/unlocking?sn='+this.sn).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.deviceInfo() + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }else if(num==1){ + this.$u.post('/appVerify/admin/lock?sn='+this.sn).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.deviceInfo() + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }else if(num==2){ + this.$u.post('/appVerify/device/offline?sn='+this.sn).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.deviceInfo() + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }else if(num==3){ + this.$u.post('/appVerify/device/online?sn='+this.sn).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.deviceInfo() + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }else if(num==4){ + this.$u.post('/appVerify/device/ring?sn='+this.sn).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.deviceInfo() + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + } + }, + status(){ + if(this.deviceInfos.onlineStatus==0){ + return '离线' + }else{ + if(this.deviceInfos.status==0){ + return '未上架' + }else if(this.deviceInfos.status==1){ + return '待租' + }else if(this.deviceInfos.status==2){ + return '预约中' + }else if(this.deviceInfos.status==3){ + return '骑行中' + }else if(this.deviceInfos.status==4){ + return '临时锁车中' + }else if(this.deviceInfos.status==8){ + return '下线' + } + } + + }, + deviceInfo() { + this.$u.get('/app/device/info?sn=' + this.sn).then((res) => { + if (res.code === 200) { + this.deviceInfos = res.data + this.latitude= parseFloat(this.deviceInfos.latitude) + this.longitude= parseFloat(this.deviceInfos.longitude ) + if (this.deviceInfos.status == 0) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u76wT0QiWdAGJdF4v6AR', + callout: { + content: '未上架', // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } else if (this.deviceInfos.status == 1) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u1UD93BU1vfshWFoDwgX', + callout: { + content: '待租' + this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容 + color: '#2679D1', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#D4ECFF', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } else if (this.deviceInfos.status == 2) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u1UD93BU1vfshWFoDwgX', + callout: { + content: '预约' + this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容 + color: '#2679D1', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#D4ECFF', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } else if (this.deviceInfos.status == 3) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u1UD93BU1vfshWFoDwgX', + callout: { + content: '骑行' + this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容 + color: '#2679D1', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#D4ECFF', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } else if (this.deviceInfos.status == 4) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u1UD93BU1vfshWFoDwgX', + callout: { + content: '锁车' + this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容 + color: '#2679D1', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#D4ECFF', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } else if (this.deviceInfos.status == 8) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u76wT0QiWdAGJdF4v6AR', + callout: { + content: '下线', // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } + if (this.deviceInfos.onlineStatus == 0) { + this.markers.push({ + id: parseFloat(this.deviceInfos.sn), + latitude: parseFloat(this.deviceInfos.latitude), + longitude: parseFloat(this.deviceInfos.longitude), + // title: item.deviceName, + width: 40, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u4UKmB47AxOj3YKIaajM', + callout: { + content: '离线', // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + } + + } + }) + }, + convertBoundaryToPolyline(boundary) { + if (!boundary) return null; + + const points = JSON.parse(boundary).map(coord => ({ + latitude: coord[1], + longitude: coord[0] + })); + + const polyline = { + points: points, + fillColor: "#55888840", //填充颜色 + strokeColor: "#22FF00", //描边颜色 + strokeWidth: 2, //描边宽度 + zIndex: 1, //层级 + }; + + return polyline; + }, + convertBoundaryToPolylines(boundaries) { + return boundaries.map(boundary => { + if (!boundary) return null; + let coords; + try { + coords = JSON.parse(boundary); + } catch (error) { + console.error("Error parsing boundary JSON:", error); + return null; + } + if (!Array.isArray(coords)) { + console.error("Parsed boundary is not an array:", coords); + return null; + } + const points = coords.map(coord => ({ + latitude: coord[1], + longitude: coord[0] + })); + return { + points: points, + fillColor: "#55888840", //填充颜色 + strokeColor: "#558888", //描边颜色 + strokeWidth: 2, //描边宽度 + zIndex: 1, //层级 + }; + }).filter(polyline => polyline !== null); // 过滤掉无效的折线数据 + }, + getParking() { + // 发送请求获取数据 + this.$u.get('/app/parking/list').then((res) => { + if (res.code === 200) { + // 处理接口返回的数据 + const validBoundaries = res.rows.map(row => row.boundaryStr).filter(boundary => + typeof boundary === 'string' && boundary.trim() !== ''); + const polylines = this.convertBoundaryToPolylines(validBoundaries); + + // 将处理后的数据添加到 this.polyline 中 + this.polyline = this.polyline.concat(polylines); + // console.log(this.polyline); + res.rows.forEach(item => { + this.markers.push({ + id: parseFloat(item.parkingId), + latitude: parseFloat(item.latitude), + longitude: parseFloat(item.longitude), + // title: item.deviceName, + width: 20, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u9yz0bKCWKyev0JYpTne', + callout: { + content: item.parkingName, // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + }) + + } + }).catch(error => { + console.error("Error fetching parking data:", error); + }); + }, + getArea() { + // 发送请求获取数据 + this.$u.get('/app/area/list').then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + const polylines = res.rows + .filter(area => area.boundaryStr) // 过滤掉boundary为空的数据 + .map(area => this.convertBoundaryToPolyline(area.boundaryStr)); + // 更新折线数据 + this.polyline = polylines; + // console.log(this.polyline); + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }, } } </script> <style lang="scss"> page { + overflow-x: hidden; background-color: #F3F3F3; } @@ -406,6 +676,7 @@ padding: 26rpx 28rpx; .info_li { + width: 98%; display: flex; flex-wrap: nowrap; font-weight: 400; @@ -415,7 +686,12 @@ span { color: #3D3D3D; } - + white-space: nowrap; + /* 禁止换行 */ + overflow: hidden; + /* 超出部分隐藏 */ + text-overflow: ellipsis; + /* 显示省略号 */ line-height: 48rpx; .half_infoli { diff --git a/pages_admin/order/order_detail.vue b/pages_admin/order/order_detail.vue index 0da6243..47b7b08 100644 --- a/pages_admin/order/order_detail.vue +++ b/pages_admin/order/order_detail.vue @@ -1,9 +1,9 @@ <template> - <view class="page"> + <view class="page" v-if="loading"> <u-navbar title="订单详情" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36' height='36'></u-navbar> <map class="map" id="map" ref="map" :scale="zoomSize" :latitude="latitude" :longitude="longitude" - :show-location='true' :polygons='polygons' :markers="markers" :polyline="polyline"></map> + :show-location='true' :markers="markers" :polygons="polyline"> </map> <view class="info_card"> <view class="info_tit"> 基本信息 @@ -11,21 +11,21 @@ <view class="lines"></view> <view class="cont"> <view class="info_li"> - 订单编号:<span>2169987651526787</span> + 订单编号:<span>{{orderInfo.orderNo}}</span> </view> <view class="info_li"> - 租赁用户:<span style="color:#4C97E7 ;">13056449832</span> + 租赁用户:<span style="color:#4C97E7 ;">{{orderInfo.phonenumber}}</span> </view> <view class="info_li"> <view class="half_infoli"> - 租赁时长:<span>6分钟</span> + 租赁时长:<span>{{orderInfo.duration/60}}分钟</span> </view> <view class="half_infoli"> - 行驶距离:<span>1Km</span> + 行驶距离:<span>{{orderInfo.distance/1000}}Km</span> </view> </view> <view class="info_li"> - 订单状态:<span>已完成</span> + 订单状态:<span>{{status()}}</span> </view> </view> </view> @@ -38,18 +38,18 @@ <view class="info_li"> <view class="half_infoli"> - 车牌号:<span>6分钟</span> + 车牌号:<span>{{orderInfo.device.vehicleNum}}</span> </view> <view class="half_infoli"> - IMIE:<span>1Km</span> + SN:<span>{{orderInfo.device.sn}}</span> </view> </view> <view class="info_li"> + <!-- <view class="half_infoli"> + 车辆编号:<span>{{orderInfo.device.areaName}}</span> + </view> --> <view class="half_infoli"> - 车辆编号:<span>6分钟</span> - </view> - <view class="half_infoli"> - 运营区域:<span>1Km</span> + 运营区域:<span>{{orderInfo.device.areaName}}</span> </view> </view> </view> @@ -63,22 +63,22 @@ <view class="cont"> <view class="info_li"> - 开锁时间:<span>2024-04-29 15:22:56</span> + 开锁时间:<span>{{orderInfo.unlock_time}}</span> </view> <view class="info_li"> - 开锁地点:<span>120.56189,27.12379</span> + 开锁地点:<span>{{orderInfo.unlock_time}}</span> </view> - <view class="info_li"> + <!-- <view class="info_li"> 锁车时间:<span>120.56189,27.12379</span> </view> <view class="info_li"> 锁车地点:<span>120.56189,27.12379</span> - </view> - <view class="info_li"> + </view> --> + <!-- <view class="info_li"> 解除时间:<span>120.56189,27.12379</span> - </view> + </view> --> <view class="info_li"> - 关锁时间:<span>120.56189,27.12379</span> + 关锁时间:<span>{{}}</span> </view> <view class="info_li"> 关锁地点:<span>120.56189,27.12379</span> @@ -88,8 +88,8 @@ <view class="info_card" style="margin-top: 20rpx;"> <view class="info_tit"> 费用明细 - <view class="money"> - 结算总费用:¥0.00 + <view class="money" v-if="orderInfo.totalFee"> + 结算总费用:¥{{orderInfo.totalFee}} </view> </view> <view class="lines"></view> @@ -97,28 +97,31 @@ <view class="info_li"> <view class="half_infoli"> - 租赁费用:<span>6分钟</span> + 预约费用:<span>{{orderInfo.appointmentFee}}</span> </view> <view class="half_infoli"> - 调度费:<span>1Km</span> + 调度费用:<span>{{orderInfo.dispatchFee}}</span> </view> </view> <view class="info_li"> <view class="half_infoli"> - 管理费:<span>6分钟</span> + 管理费用:<span>{{orderInfo.manageFee}}</span> </view> <view class="half_infoli"> - 实收:<span>1Km</span> + 骑行费用:<span>{{orderInfo.ridingFee}}</span> </view> </view> <view class="info_li"> - 支付方式:<span>120.56189,27.12379</span> + 实收:<span>{{orderInfo.totalFee}}</span> </view> <view class="info_li"> - 计费模板:<span>120.56189,27.12379</span> + 支付方式:<span>微信支付</span> </view> - <view class="info_li"> - 支付时间:<span>120.56189,27.12379</span> + <view class="info_li" v-if="orderInfo.rule"> + 计费模板:<span>{{orderInfo.rule.name}}</span> + </view> + <view class="info_li" v-if="orderInfo.payTime"> + 支付时间:<span>{{orderInfo.payTime}}</span> </view> </view> @@ -165,66 +168,155 @@ longitude: 116.397128, isMap: false, zoomSize: 15, - markers: [{ - id: 1, - latitude: 39.90469, - longitude: 116.40717, - title: 'Marker1' - }, { - id: 2, - latitude: 39.90969, - longitude: 116.41217, - title: 'Marker2' - }], - polyline: [{ - points: [{ - latitude: 39.916527, - longitude: 116.397128 - }, { - latitude: 39.926527, - longitude: 116.397128 - }, { - latitude: 39.926527, - longitude: 116.407128 - }, { - latitude: 39.916527, - longitude: 116.407128 - }], - width: 8, - arrowLine: true, - color: '#00AF99' - // strokeWidth: 2, - // strokeColor: '#00AF99', - // fillColor: '#00AF99' - }, ], - polygons: [{ - points: [{ - latitude: 39.918527, - longitude: 116.400128 - }, - { - latitude: 39.922527, - longitude: 116.400128 - }, - { - latitude: 39.924527, - longitude: 116.405128 - }, - { - latitude: 39.912527, - longitude: 116.402128 - } - ], - strokeColor: '#00FF00DD', // 使用不同的颜色来区分第二个区域 - strokeWidth: 2, - fillColor: '#00FF00DD' - }], - cardId: '001区域' + markers: [], + polyline: [], + polygons: [], + + cardId: '001区域', + orderId:'', + orderInfo:{}, + loading:false, + } + }, + onLoad(e) { + this.orderId=e.id + this.getOrderDetail() + this.getArea() + this.getParking() + }, + components:{ + }, methods: { - + convertBoundaryToPolyline(boundary) { + if (!boundary) return null; + + const points = JSON.parse(boundary).map(coord => ({ + latitude: coord[1], + longitude: coord[0] + })); + + const polyline = { + points: points, + fillColor: "#55888840", //填充颜色 + strokeColor: "#22FF00", //描边颜色 + strokeWidth: 2, //描边宽度 + zIndex: 1, //层级 + }; + + return polyline; + }, + convertBoundaryToPolylines(boundaries) { + return boundaries.map(boundary => { + if (!boundary) return null; + let coords; + try { + coords = JSON.parse(boundary); + } catch (error) { + console.error("Error parsing boundary JSON:", error); + return null; + } + if (!Array.isArray(coords)) { + console.error("Parsed boundary is not an array:", coords); + return null; + } + const points = coords.map(coord => ({ + latitude: coord[1], + longitude: coord[0] + })); + return { + points: points, + fillColor: "#55888840", //填充颜色 + strokeColor: "#558888", //描边颜色 + strokeWidth: 2, //描边宽度 + zIndex: 1, //层级 + }; + }).filter(polyline => polyline !== null); // 过滤掉无效的折线数据 + }, + getParking() { + // 发送请求获取数据 + this.$u.get('/app/parking/list').then((res) => { + if (res.code === 200) { + // 处理接口返回的数据 + const validBoundaries = res.rows.map(row => row.boundaryStr).filter(boundary => + typeof boundary === 'string' && boundary.trim() !== ''); + const polylines = this.convertBoundaryToPolylines(validBoundaries); + + // 将处理后的数据添加到 this.polyline 中 + this.polyline = this.polyline.concat(polylines); + // console.log(this.polyline); + res.rows.forEach(item => { + this.markers.push({ + id: parseFloat(item.parkingId), + latitude: parseFloat(item.latitude), + longitude: parseFloat(item.longitude), + // title: item.deviceName, + width: 20, + height: 40, + iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u9yz0bKCWKyev0JYpTne', + callout: { + content: item.parkingName, // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 14, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 6, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + }) + } + }).catch(error => { + console.error("Error fetching parking data:", error); + }); + }, + getArea() { + // 发送请求获取数据 + this.$u.get('/app/area/list').then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + const polylines = res.rows + .filter(area => area.boundaryStr) // 过滤掉boundary为空的数据 + .map(area => this.convertBoundaryToPolyline(area.boundaryStr)); + // 更新折线数据 + this.polyline = polylines; + // console.log(this.polyline); + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + }, + status(){ + if(this.orderInfo!=''){ + if(this.orderInfo.status==0){ + return '预约中' + }else if(this.orderInfo.status==1){ + return '取消预约' + }else if(this.orderInfo.status==2){ + return '开始骑行' + }else if(this.orderInfo.status==3){ + return '骑行结束' + }else if(this.orderInfo.status==4){ + return '订单完成' + } + } + + }, + getOrderDetail(){ + this.$u.get('/appVerify/order/'+this.orderId).then((res) => { + if (res.code === 200) { + // 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构 + this.orderInfo=res.data + this.loading=true + this.latitude= parseFloat(this.orderInfo.device.latitude) + this.longitude= parseFloat(this.orderInfo.device.longitude ) + } + }).catch(error => { + console.error("Error fetching area data:", error); + }); + } } } </script> diff --git a/pages_admin/order/search_device.vue b/pages_admin/order/search_device.vue new file mode 100644 index 0000000..9424547 --- /dev/null +++ b/pages_admin/order/search_device.vue @@ -0,0 +1,291 @@ +<template> + <view class="page"> + <u-navbar title="车辆搜索" :border-bottom="false" :background="bgc" title-color='#000' title-size='36' + height='36'></u-navbar> + <view class="" style="background: #FFFFFF;width: 750rpx;padding-bottom: 36rpx;"> + + <view class="top_box" style="margin-top: 20rpx;"> + <view class="left_text"> + 车辆编号 <view class="iconfont icon-xiangxia1"></view> + </view> + <view class="sear_ipt"> + <input type="text" + v-model="searchKeyword" + placeholder="请输入内容" + class="input" + placeholder-style="color:#C7CDD3" + @input="search()"> + </view> + </view> + <view class="data_box"> + <view class="data_cont " :class="typeindex==0?'act1':''" @click="changeType(0)"> + 按日期 + </view> + <view class="data_cont" :class="typeindex==1?'act1':''" @click="changeType(1)"> + 按车辆 + </view> + + </view> + </view> + + + + <view class="info_card" style="margin-top: 20rpx;"> + <view class="info_tit"> + 2024-04-28 + </view> + <view class="lines"></view> + <view class="cont"> + + + <view class="info_li"> + <view class="half_infoli"> + 支付金额:<span>¥0.00</span> + </view> + <view class="half_infoli"> + 已退款:<span>¥0.00</span> + </view> + </view> + <view class="info_li"> + <view class="half_infoli"> + 手续费:<span>¥0.00</span> + </view> + <view class="half_infoli"> + 收入:<span style="color:#4C97E7 ;">¥0.00</span> + </view> + </view> + </view> + </view> + + <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> +</template> + +<script> + export default { + data() { + return { + bgc: { + backgroundColor: "#fff", + }, + time1: false, + time2: false, + lasTime: '00-00', + firsTime: '00-00', + params: { + year: true, + month: true, + day: true, + hour: false, + minute: false, + second: false + }, + typeindex:0, + } + }, + methods: { + confirm1(e) { + console.log(e, 'eeeeeeee'); + this.firsTime = e.year + '-' + e.month + '-' + e.day + + }, + confirm2(e) { + this.lasTime = e.year + '-' + e.month + '-' + e.day + + }, + changeType(num){ + this.typeindex=num + } + } + } +</script> + +<style lang="scss"> + page { + background-color: #F6F6F6; + } + + .page { + width: 750rpx; + .lines{ + width: 748rpx; + height: 22rpx; + background: #F6F6F6; + border-radius: 0rpx 0rpx 0rpx 0rpx; + } + .info_card { + background: #FFFFFF; + + .info_tit { + display: flex; + flex-wrap: nowrap; + padding: 22rpx 28rpx; + font-weight: 600; + font-size: 32rpx; + color: #3D3D3D; + + .money { + margin-left: auto; + font-weight: 500; + font-size: 32rpx; + color: #4C97E7; + } + } + + .lines { + width: 750rpx; + height: 2rpx; + border: 2rpx solid #ccc; + } + + .cont { + padding: 26rpx 28rpx; + + .info_li { + display: flex; + flex-wrap: nowrap; + font-weight: 400; + font-size: 28rpx; + color: #808080; + + span { + color: #3D3D3D; + } + + line-height: 48rpx; + + .half_infoli { + display: flex; + flex-wrap: nowrap; + width: 50%; + font-weight: 400; + font-size: 28rpx; + color: #808080; + + span { + color: #3D3D3D; + } + .input{ + width: 30%; + } + } + } + } + } + .cont_box { + padding: 14rpx 30rpx; + width: 750rpx; + background: #E2F2FF; + border-radius: 0rpx 0rpx 0rpx 0rpx; + + .cont_info { + margin-top: 8rpx; + display: flex; + flex-wrap: nowrap; + + .info_li { + width: 50%; + font-weight: 400; + font-size: 28rpx; + color: #3D3D3D; + } + } + } + + .data_box { + width: 672rpx; + margin: 36rpx auto; + display: flex; + flex-wrap: nowrap; + align-items: center; + // justify-content: space-between; + + .data_cont { + margin-right: 40rpx; + display: flex; + align-items: center; + justify-content: center; + width: 150rpx; + height: 60rpx; + background: #FFFFFF; + box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07); + border-radius: 10rpx 10rpx 10rpx 10rpx; + font-weight: 400; + font-size: 32rpx; + color: #3D3D3D; + border: 2rpx solid #fff; + } + + .act1 { + background: #E2F2FF; + box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07); + color: #4C97E7; + border: 2rpx solid #4C97E7; + } + } + + .top_box { + + display: flex; + flex-wrap: nowrap; + align-items: center; + padding: 28rpx 30rpx; + // padding: 20rpx 0; + + margin: 0 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 { + display: flex; + flex-wrap: nowrap; + align-items: center; + width: 25%; + font-weight: 400; + font-size: 32rpx; + color: #3D3D3D; + .icon-xiangxia1{ + font-size: 26rpx; + } + } + + .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> \ No newline at end of file diff --git a/pages_admin/worke/worke_user_detail.vue b/pages_admin/worke/worke_user_detail.vue index 66afaea..e0ff0bf 100644 --- a/pages_admin/worke/worke_user_detail.vue +++ b/pages_admin/worke/worke_user_detail.vue @@ -1,6 +1,6 @@ <template> <view class="page"> - <u-navbar title="用户管理" :border-bottom="false" :background="bgc" title-color='#000' title-size='36' + <u-navbar title="用户详情" :border-bottom="false" :background="bgc" title-color='#000' title-size='36' height='36'></u-navbar> <view class="userinfo" style="background: #FFFFFF;width: 750rpx;padding-bottom: 36rpx;">