共享电单车
This commit is contained in:
parent
81c5835879
commit
af955639ef
31
App.vue
31
App.vue
|
|
@ -41,6 +41,37 @@ export default {
|
|||
uni.setInnerAudioOption({
|
||||
obeyMuteSwitch: false
|
||||
})
|
||||
if (wx.canIUse('getUpdateManager')) {
|
||||
const updateManager = wx.getUpdateManager()
|
||||
updateManager.onCheckForUpdate(function (res) {
|
||||
console.log('onCheckForUpdate====', res)
|
||||
// 请求完新版本信息的回调
|
||||
if (res.hasUpdate) {
|
||||
console.log('res.hasUpdate====')
|
||||
updateManager.onUpdateReady(function () {
|
||||
wx.showModal({
|
||||
title: '更新提示',
|
||||
content: '新版本已经准备好,是否重启应用?',
|
||||
success: function (res) {
|
||||
console.log('success====', res)
|
||||
// res: {errMsg: "showModal: ok", cancel: false, confirm: true}
|
||||
if (res.confirm) {
|
||||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||||
updateManager.applyUpdate()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
updateManager.onUpdateFailed(function () {
|
||||
// 新的版本下载失败
|
||||
wx.showModal({
|
||||
title: '已经有新版本了哟~',
|
||||
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~'
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
onShow: function () {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
const install = (Vue, vm) => {
|
||||
uni.setStorageSync('deptId', 100);
|
||||
Vue.prototype.$u.http.setConfig({
|
||||
// baseUrl: 'http://192.168.1.2:4101', //键辉本地
|
||||
baseUrl: 'http://192.168.1.10:4101', //键辉本地
|
||||
// baseUrl: 'http://192.168.2.221:4101', //景森本地
|
||||
baseUrl: 'https://ele.ccttiot.com/prod-api', //线上 小鹿appid: wx8a05cf95418a6859
|
||||
// baseUrl: 'https://ele.ccttiot.com/prod-api', //线上 小鹿appid: wx8a05cf95418a6859 小兔骑骑appid:wx38f96c87621a87ab
|
||||
// baseUrl: 'https://cc.ccttiot.com/prod-api', //叉车线上
|
||||
// baseUrl:'https://ysd.chuantewulian.cn/prod-api', //嵛山岛线上api 嵛山岛appid:wx4d178f8c80348214
|
||||
loadingText: '努力加载中~',
|
||||
|
|
|
|||
|
|
@ -87,8 +87,8 @@
|
|||
permissionConfig: {
|
||||
'查看运营区': 'area:view',
|
||||
'操作运营区': 'area:edit',
|
||||
'查看子区域': 'areaSub:view',
|
||||
'操作子区域': 'areaSub:edit',
|
||||
'查看停车区': 'areaSub:view',
|
||||
'操作停车区': 'areaSub:edit',
|
||||
'查看故障': 'fault:view',
|
||||
'故障审核': 'fault:edit',
|
||||
'查看订单': 'order:view',
|
||||
|
|
@ -113,7 +113,9 @@
|
|||
'查看投诉': 'complaint:view',
|
||||
'操作投诉': 'complaint:edit',
|
||||
'查看协议': 'agreement:view',
|
||||
'操作协议': 'agreement:edit'
|
||||
'操作协议': 'agreement:edit',
|
||||
'查看换电工单': 'powerWork:view',
|
||||
'操作换电工单': 'powerWork:edit'
|
||||
},
|
||||
list: [{
|
||||
name: '查看运营区',
|
||||
|
|
@ -128,13 +130,13 @@
|
|||
txt: 2
|
||||
},
|
||||
{
|
||||
name: '查看子区域',
|
||||
name: '查看停车区',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 3
|
||||
},
|
||||
{
|
||||
name: '操作子区域',
|
||||
name: '操作停车区',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 4
|
||||
|
|
@ -282,6 +284,16 @@
|
|||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 28
|
||||
}, {
|
||||
name: '查看换电工单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 29
|
||||
},{
|
||||
name: '操作换电工单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 30
|
||||
},
|
||||
],
|
||||
}
|
||||
|
|
@ -344,7 +356,9 @@
|
|||
'complaint:view': 24,
|
||||
'complaint:edit': 25,
|
||||
'agreement:view': 26,
|
||||
'agreement:edit': 27
|
||||
'agreement:edit': 27,
|
||||
'powerWork:view':28,
|
||||
'powerWork:edit':29
|
||||
}
|
||||
|
||||
permissions.forEach(permission => {
|
||||
|
|
|
|||
|
|
@ -874,6 +874,10 @@
|
|||
},
|
||||
// 点击重试
|
||||
btnchongshi(){
|
||||
let arr = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
this.ljsbflag = false
|
||||
this.wenbentxtflag = true
|
||||
this.wenbentxt = '开锁中...'
|
||||
|
|
@ -889,7 +893,14 @@
|
|||
console.error('获取位置失败:', err)
|
||||
}
|
||||
})
|
||||
this.$u.put(`/app/order/openDevice?orderId=${this.bstId}&requiredIot=true&lon=${xllng}&lat=${xllat}`).then(res =>{
|
||||
let data = {
|
||||
orderId:this.bstId,
|
||||
requiredIot:true,
|
||||
lon:xllng,
|
||||
lat:xllat,
|
||||
macList:arr
|
||||
}
|
||||
this.$u.put(`/app/order/openDevice`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index?orderid=' + this.bstId
|
||||
|
|
@ -923,7 +934,18 @@
|
|||
that.wenbentxtflag = false
|
||||
let flag = false
|
||||
that.zhezhaoflag = true
|
||||
that.$u.put(`/app/order/openDevice?orderId=${that.bstId}&requiredIot=false&lon=${xllng}&lat=${xllat}`).then((res) =>{})
|
||||
let arr = that.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
orderId:that.bstId,
|
||||
requiredIot:true,
|
||||
lon:xllng,
|
||||
lat:xllat,
|
||||
macList:arr
|
||||
}
|
||||
that.$u.put(`/app/order/openDevice`,datas).then((res) =>{})
|
||||
setTimeout(()=>{
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index?orderid=' + that.bstId
|
||||
|
|
@ -1365,7 +1387,18 @@
|
|||
console.error('获取位置失败:', err)
|
||||
}
|
||||
})
|
||||
this.$u.put(`/app/order/openDevice?orderId=${this.bstId}&requiredIot=true&lon=${xllng}&lat=${xllat}`).then(res =>{
|
||||
let arr = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let data = {
|
||||
orderId:this.bstId,
|
||||
requiredIot:true,
|
||||
lon:xllng,
|
||||
lat:xllat,
|
||||
macList:arr
|
||||
}
|
||||
this.$u.put(`/app/order/openDevice`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.$u.put(`/app/pay/refreshPayResult?no=${this.respData.pay.no}`).then((res) => {
|
||||
setTimeout(() => {
|
||||
|
|
@ -1403,7 +1436,18 @@
|
|||
that.wenbentxtflag = false
|
||||
let flag = false
|
||||
that.zhezhaoflag = true
|
||||
that.$u.put(`/app/order/openDevice?orderId=${that.bstId}&requiredIot=false&lon=${xllng}&lat=${xllat}`).then(res =>{})
|
||||
let arr = that.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
orderId:that.bstId,
|
||||
requiredIot:false,
|
||||
lon:xllng,
|
||||
lat:xllat,
|
||||
macList:arr
|
||||
}
|
||||
that.$u.put(`/app/order/openDevice`,datas).then(res =>{})
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index?orderid=' + that.respData.pay.bstId
|
||||
|
|
@ -1493,13 +1537,18 @@
|
|||
}
|
||||
})
|
||||
}else{
|
||||
this.zhezhaoflag = true
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index?orderid=' + resp.data.pay.bstId
|
||||
})
|
||||
uni.hideLoading()
|
||||
}, 2000)
|
||||
this.bstId = resp.data.pay.bstId
|
||||
this.respData = resp.data // 保存响应数据供开锁方法使用
|
||||
this.wenbentxtflag = true
|
||||
this.wenbentxt = '开锁中...'
|
||||
this.openDevice()
|
||||
// this.zhezhaoflag = true
|
||||
// setTimeout(() => {
|
||||
// uni.switchTab({
|
||||
// url: '/pages/index/index?orderid=' + resp.data.pay.bstId
|
||||
// })
|
||||
// uni.hideLoading()
|
||||
// }, 2000)
|
||||
}
|
||||
}else if(resp.code == 401){
|
||||
// this.logoflag = true
|
||||
|
|
@ -1622,6 +1671,7 @@
|
|||
this.$u.get(`/app/suit/listByModel?modelId=${this.modelId}`).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.taocanlist = res.data
|
||||
this.instructions = res.data[0].instructions
|
||||
if(this.suitId == ''){
|
||||
this.suitId = res.data[0].id
|
||||
this.actiobj = res.data[0]
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@
|
|||
permissionConfig: {
|
||||
'查看运营区': 'area:view',
|
||||
'操作运营区': 'area:edit',
|
||||
'查看子区域': 'areaSub:view',
|
||||
'操作子区域': 'areaSub:edit',
|
||||
'查看停车区': 'areaSub:view',
|
||||
'操作停车区': 'areaSub:edit',
|
||||
'查看故障': 'fault:view',
|
||||
'故障审核': 'fault:edit',
|
||||
'查看订单': 'order:view',
|
||||
|
|
@ -111,7 +111,9 @@
|
|||
'查看投诉': 'complaint:view',
|
||||
'操作投诉': 'complaint:edit',
|
||||
'查看协议': 'agreement:view',
|
||||
'操作协议': 'agreement:edit'
|
||||
'操作协议': 'agreement:edit',
|
||||
'查看换电工单': 'powerWork:view',
|
||||
'操作换电工单': 'powerWork:edit'
|
||||
},
|
||||
list: [{
|
||||
name: '查看运营区',
|
||||
|
|
@ -126,13 +128,13 @@
|
|||
txt: 2
|
||||
},
|
||||
{
|
||||
name: '查看子区域',
|
||||
name: '查看停车区',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 3
|
||||
},
|
||||
{
|
||||
name: '操作子区域',
|
||||
name: '操作停车区',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 4
|
||||
|
|
@ -219,73 +221,83 @@
|
|||
name: '查看客服',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 18
|
||||
txt: 17
|
||||
},
|
||||
{
|
||||
name: '操作客服',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 19
|
||||
txt: 18
|
||||
},
|
||||
{
|
||||
name: '查看卡券',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 20
|
||||
txt: 19
|
||||
},
|
||||
{
|
||||
name: '操作卡券',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 21
|
||||
txt: 20
|
||||
},
|
||||
{
|
||||
name: '查看卡券订单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 22
|
||||
txt: 21
|
||||
},
|
||||
{
|
||||
name: '操作卡券订单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 23
|
||||
txt: 22
|
||||
},
|
||||
{
|
||||
name: '查看用户卡券',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 24
|
||||
txt: 23
|
||||
},
|
||||
{
|
||||
name: '操作用户卡券',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 25
|
||||
txt: 24
|
||||
},
|
||||
{
|
||||
name: '查看投诉',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 26
|
||||
txt: 25
|
||||
},
|
||||
{
|
||||
name: '操作投诉',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 27
|
||||
txt: 26
|
||||
},
|
||||
{
|
||||
name: '查看协议',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 28
|
||||
txt: 27
|
||||
},
|
||||
{
|
||||
name: '操作协议',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 28
|
||||
}, {
|
||||
name: '查看换电工单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 29
|
||||
},{
|
||||
name: '操作换电工单',
|
||||
tit: '是否允许',
|
||||
checked: false,
|
||||
txt: 30
|
||||
},
|
||||
],
|
||||
}
|
||||
|
|
@ -348,7 +360,9 @@
|
|||
'complaint:view': 24,
|
||||
'complaint:edit': 25,
|
||||
'agreement:view': 26,
|
||||
'agreement:edit': 27
|
||||
'agreement:edit': 27,
|
||||
'powerWork:view':28,
|
||||
'powerWork:edit':29
|
||||
}
|
||||
|
||||
permissions.forEach(permission => {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
免费骑行
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="text" v-model="data.freeRideTime" placeholder="可以免费骑行的时间" class="input"
|
||||
<input type="number" v-model="data.freeRideTime" placeholder="可以免费骑行的时间" class="input"
|
||||
placeholder-style="color:#C7CDD3">
|
||||
</view>
|
||||
|
||||
|
|
@ -114,18 +114,18 @@
|
|||
<view class="card_li">
|
||||
<view class="rule">
|
||||
起步价
|
||||
<input type="text" v-model="startingPrice" placeholder=" " class="input"
|
||||
<input type="number" v-model="startingPrice" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3">
|
||||
元 含( <input type="text" v-model="startingTime" placeholder=" " class="input"
|
||||
元 含( <input type="number" v-model="startingTime" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3"> {{timevalue}})
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="rule">
|
||||
超出价
|
||||
<input type="text" v-model="timeoutPrice" placeholder=" " class="input"
|
||||
<input type="number" v-model="timeoutPrice" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3">
|
||||
元 /( <input type="text" v-model="timeoutTime" placeholder=" " class="input"
|
||||
元 /( <input type="number" v-model="timeoutTime" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3">{{timevalue}})
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
|
|
@ -204,7 +204,7 @@
|
|||
预存
|
||||
</view>
|
||||
<view class="card_right" style="display: flex;align-items: center;">
|
||||
<input type="text" v-model="data.depositAmount" placeholder="多少小时后自动退押金" class="input"
|
||||
<input type="number" v-model="data.depositAmount" placeholder="多少小时后自动退押金" class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;margin-right: 10rpx;"> 元
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
|||
259
page_shanghu/gongzuotai/diaodujl.vue
Normal file
259
page_shanghu/gongzuotai/diaodujl.vue
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
<template>
|
||||
<view class="page">
|
||||
<u-navbar title="调度记录" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||||
title-size='36' height='36' id="navbar">
|
||||
</u-navbar>
|
||||
<view class="date-search-container">
|
||||
<view class="" style="display: flex;align-items: center;">
|
||||
<!-- 日期选择区间 -->
|
||||
<view class="date-range">
|
||||
<view class="time" @click="btnonetime">
|
||||
{{startDate}}
|
||||
</view>
|
||||
<text class="range-text">至</text>
|
||||
<view class="time" @click="btnonetimes">
|
||||
{{endDate}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- 搜索按钮 -->
|
||||
<view class="search-btn" @click="getlist">
|
||||
<u-icon name="search" color="#3D3D3D" size="28"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_box">
|
||||
<view class="top">
|
||||
<view class="">
|
||||
姓名
|
||||
</view>
|
||||
<view class="">
|
||||
手机号
|
||||
</view>
|
||||
<view class="">
|
||||
有效次数
|
||||
</view>
|
||||
<view class="">
|
||||
无效次数
|
||||
</view>
|
||||
</view>
|
||||
<view class="list" v-for="(item,index) in dhlist" :key="index" @click="btnitem(item)">
|
||||
<view class="">
|
||||
{{item.userName}}
|
||||
</view>
|
||||
<view class="">
|
||||
{{item.userPhone}}
|
||||
</view>
|
||||
<view class="">
|
||||
{{item.validCount}}
|
||||
</view>
|
||||
<view class="">
|
||||
{{item.invalidCount}} <u-icon name="arrow-right" color="#3D3D3D" size="28"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="margin-top: 30rpx;color: #ccc;width: 100%;text-align: center;">
|
||||
当前没有更多调度记录咯...
|
||||
</view>
|
||||
</view>
|
||||
<u-picker mode="time" v-model="show" :params="params" @confirm="confirmone"></u-picker>
|
||||
<u-picker mode="time" v-model="shows" :params="paramss" @confirm="confirmones"></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
bgc: {
|
||||
backgroundColor: "#fff",
|
||||
},
|
||||
areaId: '',
|
||||
startDate: '', // 初始开始日期
|
||||
endDate: '' ,// 初始结束日期
|
||||
dhlist:[],
|
||||
userId:'',
|
||||
params: {
|
||||
year: true,
|
||||
month: true,
|
||||
day: true,
|
||||
hour: false,
|
||||
minute: false,
|
||||
second: false
|
||||
},
|
||||
show: false,
|
||||
paramss: {
|
||||
year: true,
|
||||
month: true,
|
||||
day: true,
|
||||
hour: false,
|
||||
minute: false,
|
||||
second: false
|
||||
},
|
||||
shows: false
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
this.startDate = this.getCurrentDate().formatted
|
||||
this.endDate = this.getCurrentDate().formatted
|
||||
this.areaId = option.areaId
|
||||
this.getlist()
|
||||
},
|
||||
methods: {
|
||||
btnonetime(){
|
||||
this.show = true
|
||||
},
|
||||
confirmone(e){
|
||||
console.log(e);
|
||||
this.startDate = e.year + '-' + e.month + '-' + e.day
|
||||
},
|
||||
btnonetimes(){
|
||||
this.shows = true
|
||||
},
|
||||
confirmones(e){
|
||||
console.log(e);
|
||||
this.endDate = e.year + '-' + e.month + '-' + e.day
|
||||
},
|
||||
// 请求调度记录
|
||||
getlist(){
|
||||
this.$u.get(`/dashboard/dispatchLog/userFinishRank?areaId=${this.areaId}&endDateRange=${this.startDate + ',' + this.endDate}`).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.dhlist = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击跳转到调度列表
|
||||
btnitem(item){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/gongzuotai/diaodulist?tit=' + item.userName + '&userId=' + item.userId + '&areaId=' + this.areaId
|
||||
})
|
||||
},
|
||||
getCurrentDate() {
|
||||
const date = new Date(); // 获取当前时间对象
|
||||
|
||||
// 获取年份(4位数字)
|
||||
const year = date.getFullYear();
|
||||
|
||||
// 获取月份(注意:月份从 0 开始,需 +1 转换为实际月份)
|
||||
const month = date.getMonth() + 1;
|
||||
|
||||
// 获取日期(当月的第几天)
|
||||
const day = date.getDate();
|
||||
|
||||
// 格式化:补零(可选,例如将 3 月转为 "03")
|
||||
const formattedMonth = month.toString().padStart(2, '0');
|
||||
const formattedDay = day.toString().padStart(2, '0');
|
||||
|
||||
// 组合结果
|
||||
const currentDate = {
|
||||
year, // 年(如:2025)
|
||||
month, // 月(如:11,未补零)
|
||||
day, // 日(如:6,未补零)
|
||||
formatted: `${year}-${formattedMonth}-${formattedDay}` // 格式化字符串(如:2025-11-06)
|
||||
};
|
||||
|
||||
console.log('当天年月日:', currentDate);
|
||||
return currentDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background: #fff;
|
||||
}
|
||||
.list_box{
|
||||
margin-top: 120rpx;
|
||||
.top{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 82rpx;
|
||||
line-height: 82rpx;
|
||||
background-color: #F6F6F6;
|
||||
box-sizing: border-box;
|
||||
view{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
.list{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #D8D8D8;
|
||||
view{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
height: 110rpx;
|
||||
line-height: 110rpx;
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
}
|
||||
.tab {
|
||||
margin-top: 30rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-left: 40rpx;
|
||||
box-sizing: border-box;
|
||||
view{
|
||||
text{
|
||||
margin-right: 10rpx;
|
||||
font-size: 32rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.date-search-container {
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||
margin-top: 16rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
top: 150rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.date-range {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
padding-left: 82rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.time {
|
||||
width: 190rpx;
|
||||
height: 52rpx;
|
||||
border-radius: 38rpx 38rpx 38rpx 38rpx;
|
||||
border: 1rpx solid #AFAFAF;
|
||||
text-align: center;
|
||||
line-height: 52rpx;
|
||||
color: #817F7F;
|
||||
}
|
||||
}
|
||||
|
||||
.uni-datepicker {
|
||||
width: auto !important;
|
||||
/* 覆盖组件默认宽度,自适应内容 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.range-text {
|
||||
margin: 0 40rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-right: 64rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
294
page_shanghu/gongzuotai/diaodulist.vue
Normal file
294
page_shanghu/gongzuotai/diaodulist.vue
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
<template>
|
||||
<view class="page">
|
||||
<u-navbar :title="tit" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||||
title-size='36' height='36' id="navbar">
|
||||
</u-navbar>
|
||||
<view class="date-search-container">
|
||||
<view class="" style="display: flex;align-items: center;">
|
||||
<!-- 日期选择区间 -->
|
||||
<view class="date-range">
|
||||
<view class="time" @click="btnonetime">
|
||||
{{startDate}}
|
||||
</view>
|
||||
<text class="range-text">至</text>
|
||||
<view class="time" @click="btnonetimes">
|
||||
{{endDate}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- 搜索按钮 -->
|
||||
<view class="search-btn" @click="getlist">
|
||||
<u-icon name="search" color="#3D3D3D" size="28"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<scroll-view class="list_box" @scrolltolower="handqixing" scroll-y refresher-enabled @refresherrefresh="onRefresh" :refresher-triggered="isRefreshing" refresher-default-style="black">
|
||||
<view class="top">
|
||||
<view class="" style="width: 2100rpx;">
|
||||
调度时间
|
||||
</view>
|
||||
<view class="">
|
||||
车牌号
|
||||
</view>
|
||||
<view class="">
|
||||
状态
|
||||
</view>
|
||||
<view class="">
|
||||
是否有效
|
||||
</view>
|
||||
</view>
|
||||
<view class="list" v-for="(item,index) in dhlist" :key="index" @click="btnitem">
|
||||
<view class="" style="width: 2100rpx;">
|
||||
{{item.startTime}}
|
||||
</view>
|
||||
<view class="">
|
||||
{{item.deviceVehicleNum}}
|
||||
</view>
|
||||
<view class="" v-if="item.status == 1">
|
||||
调度中
|
||||
</view>
|
||||
<view class="" v-if="item.status == 2">
|
||||
已完成
|
||||
</view>
|
||||
<view class="" style="color: red;" v-if="item.isValid == false">
|
||||
无效
|
||||
</view>
|
||||
<view class="" style="color: forestgreen;" v-if="item.isValid == true">
|
||||
有效
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="margin-top: 30rpx;color: #ccc;width: 100%;text-align: center;">
|
||||
当前没有更多调度记录咯...
|
||||
</view>
|
||||
</scroll-view>
|
||||
<u-picker mode="time" v-model="show" :params="params" @confirm="confirmone"></u-picker>
|
||||
<u-picker mode="time" v-model="shows" :params="paramss" @confirm="confirmones"></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
bgc: {
|
||||
backgroundColor: "#fff",
|
||||
},
|
||||
areaId: '',
|
||||
startDate: '', // 初始开始日期
|
||||
endDate: '' ,// 初始结束日期
|
||||
dhlist:[],
|
||||
userId:'',
|
||||
params: {
|
||||
year: true,
|
||||
month: true,
|
||||
day: true,
|
||||
hour: false,
|
||||
minute: false,
|
||||
second: false
|
||||
},
|
||||
show: false,
|
||||
paramss: {
|
||||
year: true,
|
||||
month: true,
|
||||
day: true,
|
||||
hour: false,
|
||||
minute: false,
|
||||
second: false
|
||||
},
|
||||
shows: false,
|
||||
tit:'',
|
||||
pageNum:1,
|
||||
total:0,
|
||||
isRefreshing:false,
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
this.tit = option.tit
|
||||
this.startDate = this.getCurrentDate().formatted
|
||||
this.endDate = this.getCurrentDate().formatted
|
||||
this.areaId = option.areaId
|
||||
this.userId = option.userId
|
||||
this.getlist()
|
||||
},
|
||||
methods: {
|
||||
// 上拉加载更多
|
||||
handqixing() {
|
||||
if(this.dhlist.length < this.total){
|
||||
this.getlist()
|
||||
}
|
||||
console.log(11)
|
||||
},
|
||||
// 下拉刷新列表
|
||||
onRefresh() {
|
||||
this.isRefreshing = true
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
setTimeout(() => {
|
||||
this.isRefreshing = false
|
||||
}, 1000)
|
||||
},
|
||||
btnonetime(){
|
||||
this.show = true
|
||||
},
|
||||
confirmone(e){
|
||||
console.log(e);
|
||||
this.startDate = e.year + '-' + e.month + '-' + e.day
|
||||
},
|
||||
btnonetimes(){
|
||||
this.shows = true
|
||||
},
|
||||
confirmones(e){
|
||||
console.log(e);
|
||||
this.endDate = e.year + '-' + e.month + '-' + e.day
|
||||
},
|
||||
// 请求调度记录
|
||||
getlist(){
|
||||
this.$u.get(`/bst/dispatchLog/list?areaId=${this.areaId}&endDateRange=${this.startDate + ',' + this.endDate}&userId=${this.userId}&pageNum=${this.pageNum}&pageSize=20`).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.total = res.total
|
||||
if(this.pageNum == 1){
|
||||
this.dhlist = res.rows
|
||||
}else{
|
||||
this.dhlist = this.dhlist.concat(res.rows)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击跳转到调度列表
|
||||
btnitem(){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/gongzuotai/diaodulist'
|
||||
})
|
||||
},
|
||||
getCurrentDate() {
|
||||
const date = new Date(); // 获取当前时间对象
|
||||
|
||||
// 获取年份(4位数字)
|
||||
const year = date.getFullYear();
|
||||
|
||||
// 获取月份(注意:月份从 0 开始,需 +1 转换为实际月份)
|
||||
const month = date.getMonth() + 1;
|
||||
|
||||
// 获取日期(当月的第几天)
|
||||
const day = date.getDate();
|
||||
|
||||
// 格式化:补零(可选,例如将 3 月转为 "03")
|
||||
const formattedMonth = month.toString().padStart(2, '0');
|
||||
const formattedDay = day.toString().padStart(2, '0');
|
||||
|
||||
// 组合结果
|
||||
const currentDate = {
|
||||
year, // 年(如:2025)
|
||||
month, // 月(如:11,未补零)
|
||||
day, // 日(如:6,未补零)
|
||||
formatted: `${year}-${formattedMonth}-${formattedDay}` // 格式化字符串(如:2025-11-06)
|
||||
};
|
||||
|
||||
console.log('当天年月日:', currentDate);
|
||||
return currentDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background: #fff;
|
||||
}
|
||||
.list_box{
|
||||
margin-top: 120rpx;
|
||||
height: 80vh;
|
||||
.top{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 82rpx;
|
||||
line-height: 82rpx;
|
||||
background-color: #F6F6F6;
|
||||
box-sizing: border-box;
|
||||
view{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
.list{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #D8D8D8;
|
||||
view{
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
height: 110rpx;
|
||||
line-height: 110rpx;
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
}
|
||||
.tab {
|
||||
margin-top: 30rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-left: 40rpx;
|
||||
box-sizing: border-box;
|
||||
view{
|
||||
text{
|
||||
margin-right: 10rpx;
|
||||
font-size: 32rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.date-search-container {
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||
margin-top: 16rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
top: 150rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
.date-range {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
padding-left: 82rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.time {
|
||||
width: 190rpx;
|
||||
height: 52rpx;
|
||||
border-radius: 38rpx 38rpx 38rpx 38rpx;
|
||||
border: 1rpx solid #AFAFAF;
|
||||
text-align: center;
|
||||
line-height: 52rpx;
|
||||
color: #817F7F;
|
||||
}
|
||||
}
|
||||
|
||||
.uni-datepicker {
|
||||
width: auto !important;
|
||||
/* 覆盖组件默认宽度,自适应内容 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.range-text {
|
||||
margin: 0 40rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-right: 64rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -88,6 +88,25 @@
|
|||
<span> %</span>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="card_li">
|
||||
<view class="card_left">
|
||||
是否自动生成换电工单
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="data.powerWorkEnable"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" v-if="data.powerWorkEnable">
|
||||
<view class="card_left" style="width: 500rpx;">
|
||||
生成换电工单阈值(%)
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="text" v-model="data.powerWorkRate" placeholder="请输入提醒电量" class="input"
|
||||
placeholder-style="color:#C7CDD3">
|
||||
<span> %</span>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="card_li">
|
||||
<view class="card_left">
|
||||
车型简介
|
||||
|
|
|
|||
|
|
@ -192,6 +192,19 @@
|
|||
开启后当进入禁行区内将进行断电
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
是否允许换车
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.enableChange"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后当进入禁行区内将进行断电
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<view class="page">
|
||||
<u-navbar title="二维码生成" :border-bottom="false" :background="bgc" title-color='#000'
|
||||
title-size='36' height='45'></u-navbar>
|
||||
<view class="" style="width: 100%;text-align: center;margin-top: 50rpx;">
|
||||
<view class="" style="width: 100%;text-align: center;margin-top: 50rpx;" v-if="type == 1">
|
||||
此二维码为运营区二维码,用户扫码可输入车牌开锁
|
||||
</view>
|
||||
<view class="ewm" style="margin-top: 200rpx;width: 750rpx;display: flex;justify-content: center;">
|
||||
|
|
@ -22,15 +22,19 @@
|
|||
sn:'',
|
||||
deptId:null,
|
||||
areaId:'',
|
||||
areaIdname:''
|
||||
areaIdname:'',
|
||||
type:'',
|
||||
http:this.$store.state.app.urlConfig
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
if(e.sn){
|
||||
this.type = 2
|
||||
this.sn = e.sn;
|
||||
this.deptId = uni.getStorageSync('deptId');
|
||||
this.generateQrcode();
|
||||
}else if(e.areaId){
|
||||
this.type = 1
|
||||
this.areaId = e.areaId;
|
||||
this.deptId = uni.getStorageSync('deptId');
|
||||
this.generateQrcodes();
|
||||
|
|
@ -42,7 +46,7 @@
|
|||
const qr = new UQRCode();
|
||||
const qrSizeRpx = 600; // 二维码大小为600rpx
|
||||
const qrSizePx = uni.upx2px(qrSizeRpx); // 将rpx转换为px
|
||||
qr.data = 'https://wx.ccttiot.com/x/a?i=' + this.areaId
|
||||
qr.data = this.http.areaPrefix + '?i=' + this.areaId
|
||||
qr.size = qrSizePx; // 设置二维码大小为像素值
|
||||
|
||||
// 创建 canvas 上下文
|
||||
|
|
@ -79,9 +83,9 @@
|
|||
const qrSizePx = uni.upx2px(qrSizeRpx); // 将rpx转换为px
|
||||
|
||||
if (this.deptId == 100) {
|
||||
qr.data = 'https://wx.ccttiot.com/x/d?s=' + this.sn;
|
||||
qr.data = this.http.deviceSnPrefix + '?s=' + this.sn;
|
||||
} else if (this.deptId == 101) {
|
||||
qr.data = 'https://wx.ccttiot.com/x/d?s=' + this.sn;
|
||||
qr.data = this.http.deviceSnPrefix + '?s=' + this.sn;
|
||||
}
|
||||
qr.size = qrSizePx; // 设置二维码大小为像素值
|
||||
|
||||
|
|
|
|||
|
|
@ -90,7 +90,8 @@
|
|||
<view class="text">
|
||||
用户投诉
|
||||
</view>
|
||||
<text style="position: absolute;top: 0;right: 0;display: inline-block;width: 30rpx;height: 30rpx;border-radius: 50%;color: #fff;text-align: center;line-height: 30rpx;background-color: red;font-size: 24rpx;">{{weinum}}</text>
|
||||
<text v-if="weinum == 0" style="position: absolute;top: 0;right: 0;display: inline-block;width: 30rpx;height: 30rpx;border-radius: 50%;color: #fff;text-align: center;line-height: 30rpx;background-color: #999;font-size: 24rpx;">{{weinum}}</text>
|
||||
<text v-else style="position: absolute;top: 0;right: 0;display: inline-block;width: 30rpx;height: 30rpx;border-radius: 50%;color: #fff;text-align: center;line-height: 30rpx;background-color: red;font-size: 24rpx;">{{weinum}}</text>
|
||||
</view>
|
||||
<view class="cont" @click="btnewm">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/umuP2xRE3AgzWymlxU10" mode=""></image>
|
||||
|
|
@ -98,6 +99,18 @@
|
|||
二维码
|
||||
</view>
|
||||
</view>
|
||||
<view class="cont" @click="btnyunwei">
|
||||
<image src="https://api.ccttiot.com/AX3ncMGo6Qm661a41e6c4c1efb91368a7c721477b254.png" mode=""></image>
|
||||
<view class="text">
|
||||
换电工单
|
||||
</view>
|
||||
</view>
|
||||
<view class="cont" @click="btndiaodujl">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uYVXAzWIrLYSHC2kbd2W" mode=""></image>
|
||||
<view class="text">
|
||||
调度记录
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="top">
|
||||
车辆管理
|
||||
|
|
@ -276,10 +289,22 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
// 点击跳转到调度记录
|
||||
btndiaodujl(){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/gongzuotai/diaodujl?areaId=' + this.areaId
|
||||
})
|
||||
},
|
||||
// 点击跳转到换电工单
|
||||
btnyunwei(){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/yunwei/index?areaId=' + this.areaId
|
||||
})
|
||||
},
|
||||
// 点击生成二维码
|
||||
btnewm(){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/guanli/Qrcode?areaId=' + this.areaId
|
||||
url:'/page_shanghu/guanli/Qrcode?areaId=' + this.areaId + '&type=1'
|
||||
})
|
||||
},
|
||||
// 查询商户未处理订单
|
||||
|
|
|
|||
|
|
@ -649,7 +649,19 @@
|
|||
title: '加载中...',
|
||||
mask: true
|
||||
})
|
||||
this.$u.put(`/bst/device/iot/music?id=${this.sn}&music=${e.value}`).then(res => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:true,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs,
|
||||
music:e.value
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/music`,datas).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.jytxt = e.label
|
||||
this.deviceInfos.music = e.value
|
||||
|
|
@ -754,7 +766,7 @@
|
|||
findDevice() {
|
||||
// 使用 find 方法查找匹配的设备
|
||||
const matchedDevice = this.devicesarr.find(device => {
|
||||
console.log(device.name, this.mac, '111')
|
||||
// console.log(device.name, this.mac, '111')
|
||||
return device.name.slice(-12) == this.mac.slice(-12)
|
||||
})
|
||||
if (matchedDevice) {
|
||||
|
|
@ -769,9 +781,9 @@
|
|||
})
|
||||
this.deviceid = matchedDevice.deviceId
|
||||
this.devicename = matchedDevice.name
|
||||
console.log(this.deviceid, '11221')
|
||||
// console.log(this.deviceid, '11221')
|
||||
} else {
|
||||
console.log("未找到匹配的设备,继续查找...")
|
||||
// console.log("未找到匹配的设备,继续查找...")
|
||||
this.findDeviceTimer = setTimeout(this.findDevice.bind(this), 1000) // 使用 bind 保持 this 上下文
|
||||
}
|
||||
},
|
||||
|
|
@ -786,7 +798,7 @@
|
|||
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
|
||||
if (options.result) {
|
||||
this.devicesarr = options.data
|
||||
console.log(this.devicesarr, 'this.devicesarrthis.devicesarr');
|
||||
// console.log(this.devicesarr, 'this.devicesarrthis.devicesarr');
|
||||
}
|
||||
break;
|
||||
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
|
||||
|
|
@ -910,6 +922,10 @@
|
|||
|
||||
// 3. 单独封装数据提交
|
||||
submitData(data) {
|
||||
let arr = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
const payload = {
|
||||
mac: this.mac,
|
||||
sys: {
|
||||
|
|
@ -920,7 +936,8 @@
|
|||
status: String(data.status || '0'),
|
||||
lon: data.lon !== undefined && data.lon !== null ? Number(data.lon) : 0,
|
||||
lat: data.lat !== undefined && data.lat !== null ? Number(data.lat) : 0
|
||||
}
|
||||
},
|
||||
maclist:arr
|
||||
}
|
||||
this.bluetoothData = payload
|
||||
this.throttledUpload()
|
||||
|
|
@ -1160,7 +1177,18 @@
|
|||
xBlufi.notifySendCustomData({
|
||||
customData: "11opensub5@"
|
||||
})
|
||||
this.$u.put(`/bst/device/iot/unlock?id=${this.sn}&requiredIot=false`).then((res) => {
|
||||
let arr = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let data = {
|
||||
id: this.sn,
|
||||
requiredIot:false,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arr
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/unlock`,data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1189,7 +1217,18 @@
|
|||
}
|
||||
})
|
||||
} else {
|
||||
this.$u.put(`/bst/device/iot/unlock?id=${this.sn}&requiredIot=true`).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:false,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/unlock`,datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
if(res.data.db == 1 && res.data.iot == false){
|
||||
uni.hideLoading()
|
||||
|
|
@ -1219,7 +1258,18 @@
|
|||
xBlufi.notifySendCustomData({
|
||||
customData: "11opensub5@"
|
||||
})
|
||||
this.$u.put(`/bst/device/iot/unlock?id=${this.sn}&requiredIot=false`).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:false,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/unlock`,datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1330,7 +1380,18 @@
|
|||
customData: "11reboot@"
|
||||
})
|
||||
},2000)
|
||||
this.$u.put(`/bst/device/iot/lock?id=${this.sn}&requiredIot=false`).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:false,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/lock`,datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1353,13 +1414,22 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.$u.put(`/bst/device/iot/lock?id=${this.sn}&requiredIot=true`).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:true,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/lock`,datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1367,9 +1437,7 @@
|
|||
icon: 'success',
|
||||
duration: 3000
|
||||
})
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
}else if(res.code == 20001){
|
||||
uni.showLoading({
|
||||
title: '蓝牙关锁中...',
|
||||
|
|
@ -1381,6 +1449,7 @@
|
|||
return device.name.slice(-12) == this.mac.slice(-12)
|
||||
})
|
||||
if (matchedDevice) {
|
||||
console.log('找到');
|
||||
xBlufi.notifyStartDiscoverBle({
|
||||
'isStart': false
|
||||
})
|
||||
|
|
@ -1397,7 +1466,18 @@
|
|||
xBlufi.notifySendCustomData({
|
||||
customData: "11closesub200@"
|
||||
})
|
||||
this.$u.put(`/bst/device/iot/lock?id=${this.sn}&requiredIot=false`).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:false,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/lock`,datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1414,9 +1494,7 @@
|
|||
result:'成功'
|
||||
}
|
||||
this.$u.post(`/app/commandLog/bluetooth`,data).then(res => {})
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
} else {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
|
|
@ -1424,9 +1502,7 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
}else{
|
||||
|
|
@ -1449,6 +1525,7 @@
|
|||
}
|
||||
},4000)
|
||||
} else {
|
||||
console.log('没找到',this.shibainum);
|
||||
if(this.shibainum < 3){
|
||||
this.shibainum++
|
||||
this.findDeviceTimer = setTimeout(findDevice.bind(this), 1000) // 使用 bind 保持 this 上下文
|
||||
|
|
@ -1480,9 +1557,7 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -1499,16 +1574,14 @@
|
|||
});
|
||||
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
||||
this.deviceInfo()
|
||||
|
||||
this.jieliuflag = true
|
||||
|
||||
this.jieliuflag = true
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
this.jieliuflag = true
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
} else if (num == 3) {
|
||||
|
|
@ -1524,22 +1597,32 @@
|
|||
duration: 2000
|
||||
})
|
||||
this.deviceInfo()
|
||||
this.jieliuflag = true
|
||||
this.jieliuflag = true
|
||||
} else {
|
||||
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
this.jieliuflag = true
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
} else if (num == 4) {
|
||||
uni.showLoading({
|
||||
title: '响铃中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/ring?id=' + this.sn).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:true,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put('/bst/device/iot/ring',datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
|
|
@ -1547,7 +1630,7 @@
|
|||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
this.jieliuflag = true
|
||||
this.jieliuflag = true
|
||||
} else if (res.code == 20001) {
|
||||
uni.showLoading({
|
||||
title: '响铃中...',
|
||||
|
|
@ -1627,7 +1710,7 @@
|
|||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
this.jieliuflag = true
|
||||
this.jieliuflag = true
|
||||
}
|
||||
})
|
||||
} else if (num == 5) {
|
||||
|
|
@ -1680,7 +1763,18 @@
|
|||
uni.showLoading({
|
||||
title: '重启中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/reboot?id=' + this.sn).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:true,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put('/bst/device/iot/reboot',datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
@ -1776,7 +1870,18 @@
|
|||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/unlockSeat?id=' + this.sn).then((res) => {
|
||||
let arrs = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let datas = {
|
||||
id: this.sn,
|
||||
requiredIot:true,
|
||||
lat: this.lon,
|
||||
lon: this.lat,
|
||||
macList:arrs
|
||||
}
|
||||
this.$u.put('/bst/device/iot/unlockSeat',datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.showToast({
|
||||
|
|
|
|||
|
|
@ -1187,9 +1187,14 @@
|
|||
},
|
||||
// 点击辅助还车
|
||||
btnfuzhu() {
|
||||
let arr = this.devicesList.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let data = {
|
||||
orderId: this.orid,
|
||||
checkLocation: false
|
||||
checkLocation: false,
|
||||
macList:arr
|
||||
}
|
||||
this.$u.post(`/app/order/calcFee`, data).then(res => {
|
||||
if (res.code == 200) {
|
||||
|
|
|
|||
248
page_shanghu/yunwei/gongdanxq.vue
Normal file
248
page_shanghu/yunwei/gongdanxq.vue
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
<template>
|
||||
<view class="page">
|
||||
<u-navbar title="换电详情" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||||
title-size='36' height='36' id="navbar">
|
||||
</u-navbar>
|
||||
<view class="box">
|
||||
<view class="name" @click="btnxq">
|
||||
车牌:{{xqobj.deviceVehicleNum == null ? '--' : xqobj.deviceVehicleNum}} <text>查看详情</text>
|
||||
</view>
|
||||
<view class="xx">
|
||||
<view class="">
|
||||
SN:{{xqobj.deviceSn == null ? '--' : xqobj.deviceSn }}
|
||||
</view>
|
||||
<view class="">
|
||||
MAC:{{xqobj.deviceMac == null ? '--' : xqobj.deviceMac}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="xx">
|
||||
<view class="">
|
||||
车型:{{xqobj.modelName == null ? '--' : xqobj.modelName}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
换电工单:<text>{{xqobj.no == null ? '--' : xqobj.no}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
工单生成时间:<text>{{xqobj.createTime == null ? '--' : xqobj.createTime}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
开始时间:<text>{{xqobj.receiveTime == null ? '--' : xqobj.receiveTime}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
结束时间:<text>{{xqobj.finishTime == null ? '--' : xqobj.finishTime}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
换电前电量:<text>{{xqobj.createPower == null ? '--' : xqobj.createPower}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
换电人员:<text>{{xqobj.receiveUserName == null ? '--' : xqobj.receiveUserName}}</text>
|
||||
</view>
|
||||
<view class="gongdan">
|
||||
备注:<text>{{xqobj.finishRemark == null ? '--' : xqobj.finishRemark}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="anniu" @click="btnwc" v-if="xqobj.status == 2">
|
||||
换电
|
||||
</view>
|
||||
<!-- 完成输入备注 -->
|
||||
<view class="wctc" v-if="beizhuflag">
|
||||
<view class="name">
|
||||
请输入备注
|
||||
</view>
|
||||
<textarea name="" v-model="finishRemark" id="" cols="30" rows="10"></textarea>
|
||||
<view class="anniu" style="background-color: transparent;">
|
||||
<view class="" @click="btnqx">
|
||||
取消
|
||||
</view>
|
||||
<view class="" @click="btnqdwc">
|
||||
完成
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mask" v-if="beizhuflag"></view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
bgc: {
|
||||
backgroundColor: "#fff",
|
||||
},
|
||||
hdid:'',
|
||||
xqobj:{},
|
||||
finishRemark:'',
|
||||
beizhuflag:false,
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
this.hdid = e.id
|
||||
this.getxq()
|
||||
},
|
||||
methods: {
|
||||
// 点击跳转到车辆详情
|
||||
btnxq(){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/guanli/device_detail?id=' + this.xqobj.deviceId
|
||||
})
|
||||
},
|
||||
// 请求换电详情
|
||||
getxq() {
|
||||
this.$u.get(`/bst/powerWork/${this.hdid}`).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.xqobj = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击换电弹出弹窗
|
||||
btnwc(){
|
||||
this.beizhuflag = true
|
||||
},
|
||||
// 点击取消换电
|
||||
btnqx(){
|
||||
this.beizhuflag = false
|
||||
},
|
||||
//点击确定完成
|
||||
btnqdwc(){
|
||||
let data = {
|
||||
id:this.hdid,
|
||||
finishRemark:this.finishRemark
|
||||
}
|
||||
this.$u.put(`/bst/powerWork/complete`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showToast({
|
||||
title: '操作完成',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
this.xqobj.status = 3
|
||||
this.beizhuflag = false
|
||||
}else{
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.anniu{
|
||||
width: 680rpx;
|
||||
height: 92rpx;
|
||||
background: #4297F3;
|
||||
border-radius: 12rpx 12rpx 12rpx 12rpx;
|
||||
margin: auto;
|
||||
margin-top: 32rpx;
|
||||
font-size: 32rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 92rpx;
|
||||
border-radius: 20rpx;
|
||||
}
|
||||
.mask{
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, .5);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.wctc{
|
||||
width: 610rpx;
|
||||
height: 720rpx;
|
||||
background: #FFFFFF;
|
||||
padding: 36rpx 42rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
top: 30%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 99;
|
||||
border-radius: 10rpx;
|
||||
.name{
|
||||
font-weight: 600;
|
||||
font-size: 36rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
textarea{
|
||||
width: 526rpx;
|
||||
height: 396rpx;
|
||||
background: #F7F7F7;
|
||||
border-radius: 16rpx 16rpx 16rpx 16rpx;
|
||||
margin-top: 34rpx;
|
||||
padding: 16rpx 36rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.anniu{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 60rpx;
|
||||
view{
|
||||
width: 45%;
|
||||
height: 78rpx;
|
||||
line-height: 78rpx;
|
||||
text-align: center;
|
||||
background-color: #4C97E7;
|
||||
color: #fff;
|
||||
font-size: 36rpx;
|
||||
border-radius: 50rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.box{
|
||||
width: 680rpx;
|
||||
max-height: 1610rpx;
|
||||
background-color: #fff;
|
||||
box-shadow: 0rpx 0rpx 10rpx -6rpx #000;
|
||||
margin: auto;
|
||||
margin-top: 50rpx;
|
||||
border-radius: 20rpx;
|
||||
padding: 32rpx;
|
||||
box-sizing: border-box;
|
||||
.gongdan{
|
||||
font-size: 32rpx;
|
||||
color: #808080;
|
||||
margin-top: 20rpx;
|
||||
text{
|
||||
color: #3D3D3D;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
.xx{
|
||||
margin-top: 28rpx;
|
||||
display: flex;
|
||||
view{
|
||||
font-size: 24rpx;
|
||||
color: #7C7C7C;
|
||||
margin-right: 50rpx;
|
||||
}
|
||||
}
|
||||
.name{
|
||||
font-weight: 600;
|
||||
font-size: 36rpx;
|
||||
color: #3D3D3D;
|
||||
text{
|
||||
font-size: 26rpx;
|
||||
margin-left: 10rpx;
|
||||
color: #4297F3;
|
||||
}
|
||||
}
|
||||
}
|
||||
page {
|
||||
background: #fff;
|
||||
}
|
||||
.map {
|
||||
position: relative;
|
||||
width: 750rpx;
|
||||
height: 752rpx;
|
||||
}
|
||||
</style>
|
||||
484
page_shanghu/yunwei/index.vue
Normal file
484
page_shanghu/yunwei/index.vue
Normal file
|
|
@ -0,0 +1,484 @@
|
|||
<template>
|
||||
<view class="page">
|
||||
<u-navbar title="换电工单" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||||
title-size='36' height='36' id="navbar">
|
||||
</u-navbar>
|
||||
<view class="topsousuo">
|
||||
<view class="search">
|
||||
<view class="lt">
|
||||
<image src="https://api.ccttiot.com/w6hycpRmyZSUd2e78c2747e73fb8f6bda929ebdc886e.png" mode="" @click="btnsaoma"></image>
|
||||
<view class="xian"></view>
|
||||
<input type="text" v-model="sn" placeholder="车辆编号/换电工单"/>
|
||||
</view>
|
||||
<view class="rt" @click="btnsousuo">
|
||||
搜索
|
||||
</view>
|
||||
</view>
|
||||
<view class="tab">
|
||||
<view v-for="(item,index) in tablist" :key="index" :class="tabindex == index ? 'active' : ''" @click="btntab(item,index)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<label>
|
||||
<checkbox :value="chenchex" @click="btndj" /><text>仅看我的</text>
|
||||
</label>
|
||||
</view>
|
||||
</view>
|
||||
<scroll-view @scrolltolower="handqixing" scroll-y refresher-enabled @refresherrefresh="onRefresh" :refresher-triggered="isRefreshing" refresher-default-style="black" class="list">
|
||||
<view class="list_item" v-for="(item,index) in hdlist" @click="btnitem(item)">
|
||||
<view class="top">
|
||||
<view class="lt">
|
||||
{{item.no}}
|
||||
</view>
|
||||
<view class="rt">
|
||||
{{item.createTime}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="gd">
|
||||
<text style="width: 120rpx;">电量</text> <text style="color: #3D3D3D;">{{item.createPower}}%</text>
|
||||
</view>
|
||||
<view class="gd">
|
||||
<text style="width: 120rpx;">车牌号</text> <text style="color: #3D3D3D;">{{item.deviceVehicleNum}}</text>
|
||||
</view>
|
||||
<view class="gd">
|
||||
<text style="width: 120rpx;">设备编号</text> <text style="color: #3D3D3D;">{{item.deviceSn}}</text>
|
||||
</view>
|
||||
<view class="bot">
|
||||
<view class=""></view>
|
||||
<view class="hd" v-if="item.status == 1" @click.stop="btnjd(item,index)">
|
||||
点击接单
|
||||
</view>
|
||||
<view class="hd" style="background-color: #4C97E7;" v-if="item.status == 2" @click.stop="btnwc(item,index)">
|
||||
点击完成
|
||||
</view>
|
||||
<view class="hd" style="background-color: #979797;" v-if="item.status == 3">
|
||||
已完成
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="width: 100%;text-align: center;margin-top: 30rpx;color: #ccc;padding-bottom: 30rpx;">
|
||||
当前没有更多工单咯...
|
||||
</view>
|
||||
</scroll-view>
|
||||
<!-- 完成输入备注 -->
|
||||
<view class="wctc" v-if="beizhuflag">
|
||||
<view class="name">
|
||||
请输入备注
|
||||
</view>
|
||||
<textarea name="" v-model="finishRemark" id="" cols="30" rows="10"></textarea>
|
||||
<view class="anniu">
|
||||
<view class="" @click="btnqx">
|
||||
取消
|
||||
</view>
|
||||
<view class="" @click="btnqdwc">
|
||||
完成
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mask" v-if="beizhuflag"></view>
|
||||
|
||||
<!-- 添加add -->
|
||||
<!-- <view class="tianjia">
|
||||
+
|
||||
</view> -->
|
||||
<!-- 新增工单弹窗 -->
|
||||
<!-- <view class="addgongdan">
|
||||
<view class="gdtitle">
|
||||
添加换电工单
|
||||
</view>
|
||||
|
||||
</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
tablist:[{name:'待换电',type:'1'},{name:'换电中',type:'2'},{name:'已完成',type:'3'},{name:'全部',type:'4'}],
|
||||
bgc: {
|
||||
backgroundColor: "#fff",
|
||||
},
|
||||
areaId:'',
|
||||
chenchex:true,
|
||||
tabindex:0,
|
||||
pageNum:1,
|
||||
hdlist:[],
|
||||
total:0,
|
||||
isRefreshing:false,
|
||||
status:1,
|
||||
userId:'',
|
||||
beizhuflag:false,
|
||||
wcid:'',
|
||||
wcindex:'',
|
||||
finishRemark:'',
|
||||
sn:''
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
this.areaId = option.areaId
|
||||
this.getlist()
|
||||
},
|
||||
methods: {
|
||||
btnqx(){
|
||||
this.beizhuflag = false
|
||||
},
|
||||
// 点击跳转详情
|
||||
btnitem(item){
|
||||
uni.navigateTo({
|
||||
url:'/page_shanghu/yunwei/gongdanxq?id=' + item.id
|
||||
})
|
||||
},
|
||||
|
||||
// 点击进行搜索
|
||||
btnsousuo(){
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
},
|
||||
// 点击扫码
|
||||
btnsaoma(){
|
||||
uni.scanCode({
|
||||
onlyFromCamera: true,
|
||||
scanType: ['qrCode'],
|
||||
success: res => {
|
||||
console.log(res)
|
||||
function getQueryParam(url, paramName) {
|
||||
let regex = new RegExp(`[?&]${paramName}=([^&]*)`)
|
||||
let results = regex.exec(url)
|
||||
return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null
|
||||
}
|
||||
let sceneValue = res.result
|
||||
let decodedValue = decodeURIComponent(sceneValue)
|
||||
this.sn = getQueryParam(decodedValue, 's')
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
},
|
||||
fail: err => {
|
||||
console.error('扫描失败:', err)
|
||||
uni.showToast({
|
||||
title: '扫描失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击完成
|
||||
btnwc(item,index){
|
||||
this.beizhuflag = true
|
||||
this.wcid = item.id
|
||||
this.wcindex = index
|
||||
},
|
||||
//点击确定完成
|
||||
btnqdwc(){
|
||||
let data = {
|
||||
id:this.wcid,
|
||||
finishRemark:this.finishRemark
|
||||
}
|
||||
this.$u.put(`/bst/powerWork/complete`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showToast({
|
||||
title: '操作完成',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
this.hdlist[this.wcindex].status = 3
|
||||
this.beizhuflag = false
|
||||
}else{
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击接单
|
||||
btnjd(item,index){
|
||||
let that = this
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '您是否要进行接单?',
|
||||
showCancel: true,
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
let data = {
|
||||
id:item.id
|
||||
}
|
||||
that.$u.put(`/bst/powerWork/receive`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
uni.showToast({
|
||||
title: '接单成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
that.hdlist[index].status = 2
|
||||
}else{
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
})
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击是否只查看自己的
|
||||
btndj(){
|
||||
this.chenchex = !this.chenchex
|
||||
if(this.chenchex == false){
|
||||
this.userId = uni.getStorageSync('user').userId
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
}else{
|
||||
this.userId = ''
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
}
|
||||
console.log(this.chenchex);
|
||||
},
|
||||
// 点击切换tab
|
||||
btntab(item,index){
|
||||
this.tabindex = index
|
||||
this.status = item.type
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
},
|
||||
// 获取换电工单列表
|
||||
getlist(){
|
||||
this.$u.get(`/bst/powerWork/list?pageNum=${this.pageNum}&pageSize=20&areaId=${this.areaId}&status=${this.status == 4 ? '' : this.status}&receiveUserId=${this.userId}&keyword=${this.sn}`).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.total = res.total
|
||||
if(this.pageNum == 1){
|
||||
this.hdlist = res.rows
|
||||
}else{
|
||||
this.hdlist = this.hdlist.concat(res.rows)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
handqixing() {
|
||||
console.log(1);
|
||||
if(this.hdlist.length < this.total){
|
||||
this.getlist()
|
||||
}
|
||||
},
|
||||
// 下拉刷新
|
||||
onRefresh() {
|
||||
this.isRefreshing = true
|
||||
setTimeout(() => {
|
||||
this.isRefreshing = false
|
||||
this.pageNum = 1
|
||||
this.getlist()
|
||||
}, 1000)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.tianjia{
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 50%;
|
||||
font-size: 50rpx;
|
||||
text-align: center;
|
||||
line-height: 100rpx;
|
||||
position: fixed;
|
||||
right: 30rpx;
|
||||
top: 70%;
|
||||
background-color: #4C97E7;
|
||||
color: #fff;
|
||||
z-index: 97;
|
||||
}
|
||||
.mask{
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, .5);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 98;
|
||||
}
|
||||
.wctc{
|
||||
width: 610rpx;
|
||||
height: 720rpx;
|
||||
background: #FFFFFF;
|
||||
padding: 36rpx 42rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
top: 30%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 99;
|
||||
border-radius: 10rpx;
|
||||
.name{
|
||||
font-weight: 600;
|
||||
font-size: 36rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
textarea{
|
||||
width: 526rpx;
|
||||
height: 396rpx;
|
||||
background: #F7F7F7;
|
||||
border-radius: 16rpx 16rpx 16rpx 16rpx;
|
||||
margin-top: 34rpx;
|
||||
padding: 16rpx 36rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.anniu{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 60rpx;
|
||||
view{
|
||||
width: 45%;
|
||||
height: 78rpx;
|
||||
line-height: 78rpx;
|
||||
text-align: center;
|
||||
background-color: #4C97E7;
|
||||
color: #fff;
|
||||
font-size: 36rpx;
|
||||
border-radius: 50rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.active{
|
||||
border-bottom: 3px solid #4C97E7 !important;
|
||||
color: #4C97E7 !important;
|
||||
}
|
||||
.list{
|
||||
padding-top: 190rpx;
|
||||
box-sizing: border-box;
|
||||
overflow: scroll;
|
||||
height: 89vh;
|
||||
.list_item{
|
||||
width: 752rpx;
|
||||
height: 350rpx;
|
||||
background: #FFFFFF;
|
||||
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
||||
margin-top: 16rpx;
|
||||
.bot{
|
||||
border-top: 1px dashed #D8D8D8;
|
||||
margin-top: 32rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 22rpx 34rpx;
|
||||
box-sizing: border-box;
|
||||
.hd{
|
||||
width: 132rpx;
|
||||
height: 54rpx;
|
||||
background: #F76D6D;
|
||||
border-radius: 10rpx 10rpx 10rpx 10rpx;
|
||||
font-size: 28rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 54rpx;
|
||||
}
|
||||
}
|
||||
.top{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 32rpx 42rpx;
|
||||
padding-bottom: 0;
|
||||
box-sizing: border-box;
|
||||
.lt{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
image{
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
margin-right: 18rpx;
|
||||
}
|
||||
font-size: 28rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
.rt{
|
||||
font-size: 28rpx;
|
||||
color: #808080;
|
||||
}
|
||||
}
|
||||
.gd{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 40rpx;
|
||||
margin-top: 10rpx;
|
||||
text{
|
||||
font-size: 28rpx;
|
||||
color: #808080;
|
||||
margin-right: 44rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.topsousuo{
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
padding-top: 26rpx;
|
||||
padding-bottom: 6rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
top: 160rpx;
|
||||
left: 0;
|
||||
z-index: 9;
|
||||
.tab{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 44rpx;
|
||||
box-sizing: border-box;
|
||||
margin-top: 24rpx;
|
||||
view{
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
color: #3D3D3D;
|
||||
padding-bottom: 10rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
.search{
|
||||
width: 680rpx;
|
||||
height: 68rpx;
|
||||
border: 2rpx solid #4C97E7;
|
||||
border-radius: 50rpx;
|
||||
margin: auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.rt{
|
||||
width: 112rpx;
|
||||
height: 68rpx;
|
||||
background: #4C97E7;
|
||||
text-align: center;
|
||||
line-height: 68rpx;
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
border-radius: 0 50rpx 50rpx 0;
|
||||
}
|
||||
.lt{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 20rpx;
|
||||
.xian{
|
||||
width: 2rpx;
|
||||
height: 38rpx;
|
||||
background: #979797;
|
||||
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
||||
margin-right: 14rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
image{
|
||||
width: 56rpx;
|
||||
height: 56rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
page {
|
||||
background: #F2F2F2;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
@ -125,6 +125,7 @@
|
|||
lon:this.lon,
|
||||
lat:this.lat,
|
||||
checkLocation:true,
|
||||
macList:this.scdevlist
|
||||
}
|
||||
this.$u.post(`/app/order/calcFee`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
|
|
|
|||
|
|
@ -290,7 +290,10 @@ export default {
|
|||
getfeiyong(){
|
||||
let data = {
|
||||
orderId:this.orderid,
|
||||
checkLocation:true
|
||||
checkLocation:true,
|
||||
lat:this.latitude,
|
||||
lon:this.longitude,
|
||||
macList:this.scdevlist
|
||||
}
|
||||
this.$u.post(`/app/order/calcFee`,data).then(res =>{
|
||||
if(res.code == 200){
|
||||
|
|
|
|||
|
|
@ -125,7 +125,10 @@
|
|||
title: '加载中...',
|
||||
mask: true
|
||||
})
|
||||
this.$u.put(`/bst/device/iot/update?sn=${this.sn}`).then((res) => {
|
||||
let data = {
|
||||
sn:this.sn
|
||||
}
|
||||
this.$u.put(`/bst/device/iot/update`,data).then((res) => {
|
||||
if (res.code === 200) {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
|
|
@ -208,7 +211,10 @@
|
|||
title: '加载中...'
|
||||
})
|
||||
console.log('点击了....1');
|
||||
this.$u.put('/bst/device/iot/unlock?sn=' + this.sn).then((res) => {
|
||||
let data = {
|
||||
sn:this.sn
|
||||
}
|
||||
this.$u.put('/bst/device/iot/unlock',data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
||||
this.deviceInfo()
|
||||
|
|
@ -233,7 +239,10 @@
|
|||
title: '加载中...'
|
||||
})
|
||||
console.log('点击了....2')
|
||||
this.$u.put('/bst/device/iot/lock?sn=' + this.sn).then((res) => {
|
||||
let datas = {
|
||||
sn: this.sn,
|
||||
}
|
||||
this.$u.put('/bst/device/iot/lock',datas).then((res) => {
|
||||
if (res.code == 200) {
|
||||
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
||||
this.deviceInfo()
|
||||
|
|
@ -257,7 +266,10 @@
|
|||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/ring?sn=' + this.sn).then((res) => {
|
||||
let data = {
|
||||
sn:this.sn
|
||||
}
|
||||
this.$u.put('/bst/device/iot/ring',data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.hideLoading()
|
||||
|
|
@ -321,7 +333,10 @@
|
|||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/reboot?sn=' + this.sn).then((res) => {
|
||||
let data = {
|
||||
sn:this.sn
|
||||
}
|
||||
this.$u.put('/bst/device/iot/reboot',data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.hideLoading()
|
||||
|
|
@ -342,7 +357,10 @@
|
|||
uni.showLoading({
|
||||
title: '加载中...'
|
||||
})
|
||||
this.$u.put('/bst/device/iot/unlockSeat?sn=' + this.sn).then((res) => {
|
||||
let data = {
|
||||
sn:this.sn
|
||||
}
|
||||
this.$u.put('/bst/device/iot/unlockSeat', data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.deviceInfo()
|
||||
uni.hideLoading()
|
||||
|
|
|
|||
28
pages.json
28
pages.json
|
|
@ -460,6 +460,20 @@
|
|||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "yunwei/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "yunwei/gongdanxq",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "gonggao",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
|
|
@ -557,6 +571,20 @@
|
|||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "gongzuotai/diaodujl",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "gongzuotai/diaodulist",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "gongzuotai/ChargingTemplate",
|
||||
"style": {
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@
|
|||
</image>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uNqmroyWtaYIW9yLn8lw" @click="btnxunche"
|
||||
mode=""></image>
|
||||
<image v-if="enableChange" src="https://api.ccttiot.com/smartmeter/img/static/ubg3Go1JkwJmzHxUqBdT" @click="btnghbikes"
|
||||
<image v-if="enableChange" src="https://api.ccttiot.com/smartmeter/img/static/ubg3Go1JkwJmzHxUqBdT" @click="btnghbike"
|
||||
mode=""></image>
|
||||
<image v-if="orderobj.deviceModelEnableSeat == true"
|
||||
src="https://api.ccttiot.com/smartmeter/img/static/uqAFkcZMSlfUl7b7mY7m" @click="btnkzds" mode="">
|
||||
|
|
@ -647,26 +647,27 @@
|
|||
},
|
||||
// 点击请求客服列表进行咨询
|
||||
btnkefu() {
|
||||
this.$u.get(`/app/customerService/list?pageNum=1&pageSize=999&areaId=${this.orderobj.orderAreaId}`).then(res => {
|
||||
if (res.code == 200) {
|
||||
if (res.rows.length > 0) {
|
||||
this.kefulist = res.rows
|
||||
this.kefuflag = true
|
||||
this.$u.get(`/app/customerService/list?pageNum=1&pageSize=999&areaId=${this.orderobj.orderAreaId}`).then(
|
||||
res => {
|
||||
if (res.code == 200) {
|
||||
if (res.rows.length > 0) {
|
||||
this.kefulist = res.rows
|
||||
this.kefuflag = true
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '当前运营区暂无客服',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '当前运营区暂无客服',
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 点击跳转导航寻车
|
||||
btnxunche() {
|
||||
|
|
@ -676,6 +677,7 @@
|
|||
uni.openLocation({
|
||||
latitude: res.data.latitude, //纬度-目的地/坐标点
|
||||
longitude: res.data.longitude, //经度-目的地/坐标点
|
||||
// name: res.data.deviceVehicleNum, //地点名称
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
|
|
@ -809,6 +811,11 @@
|
|||
case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS: //获取附近蓝牙设备列表
|
||||
if (options.result) {
|
||||
this.devicesarr = options.data
|
||||
// 另外存一份
|
||||
// this.scdevlist = options.data.map(item => {
|
||||
// const name = item.name || ''
|
||||
// return name.slice(-12)
|
||||
// })
|
||||
}
|
||||
break;
|
||||
case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED: //连接回调是否连接上蓝牙
|
||||
|
|
@ -914,13 +921,6 @@
|
|||
}
|
||||
})
|
||||
},
|
||||
// 处理所有蓝牙前缀 上传
|
||||
getmaclist(){
|
||||
this.scdevlist = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
},
|
||||
// 3. 单独封装数据提交
|
||||
submitData(data) {
|
||||
const payload = {
|
||||
|
|
@ -1223,7 +1223,13 @@
|
|||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: item.type == 1 ? 'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3' : item.type == 2 ? 'https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq' : item.type == 3 ? 'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t' : 'https://api.ccttiot.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250829161752_210_17-1756455764351.png',
|
||||
iconPath: item.type == 1 ?
|
||||
'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3' :
|
||||
item.type == 2 ?
|
||||
'https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq' :
|
||||
item.type == 3 ?
|
||||
'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t' :
|
||||
'https://api.ccttiot.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250829161752_210_17-1756455764351.png',
|
||||
callout: {
|
||||
content: item.name,
|
||||
color: '#ffffff',
|
||||
|
|
@ -1302,7 +1308,6 @@
|
|||
},
|
||||
// 点击结束订单
|
||||
btnjsdd() {
|
||||
this.getmaclist()
|
||||
if (this.jiance == true) {
|
||||
xBlufi.initXBlufi(1)
|
||||
xBlufi.notifyStartDiscoverBle({
|
||||
|
|
@ -1414,7 +1419,8 @@
|
|||
} else {
|
||||
if (that.shibainum < 3) {
|
||||
that.shibainum++
|
||||
that.findDeviceTimer = setTimeout(findDevice.bind(that),1000) // 使用 bind 保持 this 上下文
|
||||
that.findDeviceTimer = setTimeout(findDevice.bind(that),
|
||||
1000) // 使用 bind 保持 this 上下文
|
||||
} else {
|
||||
console.log('不在旁边2');
|
||||
that.ver_dataflag = 1
|
||||
|
|
@ -1738,28 +1744,7 @@
|
|||
})
|
||||
},
|
||||
// 点击去进行换车
|
||||
btnghbikes(){
|
||||
uni.getLocation({
|
||||
type: 'gcj02', // 国内地图更兼容
|
||||
isHighAccuracy: true,
|
||||
accuracy: 'best',
|
||||
success: (res) => {
|
||||
console.log('精确坐标:', res)
|
||||
this.lslat = res.latitude
|
||||
this.lslon = res.longitude
|
||||
this.btnghbike()
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取位置失败:', err)
|
||||
this.lslat = null
|
||||
this.lslon = null
|
||||
this.btnghbike()
|
||||
}
|
||||
})
|
||||
},
|
||||
// 点击去进行换车
|
||||
btnghbike() {
|
||||
this.getmaclist()
|
||||
this.caozuotext = '换车前请将车辆停放于运营区和停车区内'
|
||||
if (this.jiance == true) {
|
||||
xBlufi.initXBlufi(1)
|
||||
|
|
@ -1777,6 +1762,21 @@
|
|||
xBlufi.notifyStartDiscoverBle({
|
||||
'isStart': false
|
||||
})
|
||||
uni.getLocation({
|
||||
type: 'gcj02', // 国内地图更兼容
|
||||
isHighAccuracy: true,
|
||||
accuracy: 'best',
|
||||
success: (res) => {
|
||||
console.log('精确坐标:', res)
|
||||
this.lslat = res.latitude
|
||||
this.lslon = res.longitude
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取位置失败:', err)
|
||||
this.lslat = null
|
||||
this.lslon = null
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (this.shibainum < 3) {
|
||||
this.shibainum++
|
||||
|
|
@ -1799,7 +1799,6 @@
|
|||
requiredIot: true,
|
||||
macList:that.scdevlist
|
||||
}
|
||||
console.log(data,'datadata');
|
||||
that.$u.put(`/app/order/closeDevice`,data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
that.wenbentxt = ''
|
||||
|
|
@ -1955,7 +1954,8 @@
|
|||
} else {
|
||||
if (that.shibainum < 3) {
|
||||
that.shibainum++
|
||||
that.findDeviceTimer = setTimeout(findDevice.bind(that),1000) // 使用 bind 保持 this 上下文
|
||||
that.findDeviceTimer = setTimeout(findDevice.bind(that),
|
||||
1000) // 使用 bind 保持 this 上下文
|
||||
} else {
|
||||
uni.getLocation({
|
||||
type: 'gcj02', // 国内地图更兼容
|
||||
|
|
@ -2029,7 +2029,6 @@
|
|||
},
|
||||
// 点击启动and关闭
|
||||
btnqd() {
|
||||
this.getmaclist()
|
||||
this.caozuotext = '骑行前请检查车轿刹车是否灵敏,安全骑行'
|
||||
if (this.jiance == true) {
|
||||
xBlufi.initXBlufi(1)
|
||||
|
|
@ -2078,15 +2077,13 @@
|
|||
if (res.confirm) {
|
||||
that.wenbentxt = '车辆解锁中...'
|
||||
that.wenbentxtflag = true
|
||||
let query = {
|
||||
let dataks = {
|
||||
orderId: that.orderobj.orderId,
|
||||
lat: that.lslat,
|
||||
lon: that.lslon,
|
||||
requiredIot: true
|
||||
}
|
||||
let url = '/app/order/openDevice?' + that.$tansParams(
|
||||
query)
|
||||
that.$u.put(url).then((res) => {
|
||||
that.$u.put('/app/order/openDevice',dataks).then((res) => {
|
||||
if (res.code == 200) {
|
||||
that.wenbentxt = ''
|
||||
that.wenbentxtflag = false
|
||||
|
|
@ -2122,14 +2119,13 @@
|
|||
that.wenbentxt =''
|
||||
that.wenbentxtflag =false
|
||||
that.orderobj.deviceLockStatus =1
|
||||
let query = {
|
||||
let datakss = {
|
||||
orderId: that.orderobj.orderId,
|
||||
lat: that.lslat,
|
||||
lon: that.lslon,
|
||||
requiredIot: false
|
||||
requiredIot: false
|
||||
}
|
||||
let url ='/app/order/openDevice?' +that.$tansParams(query)
|
||||
that.$u.put(url).then((res) => {})
|
||||
that.$u.put('/app/order/openDevice',datakss).then((res) => {})
|
||||
} else {
|
||||
that.ver_dataflag =1
|
||||
that.shibainum =0
|
||||
|
|
@ -2461,6 +2457,14 @@
|
|||
console.log('订单设备定时器已停止')
|
||||
}
|
||||
},
|
||||
// // 请求客服
|
||||
// getkefu() {
|
||||
// this.$u.get(`/app/customerService/list?pageNum=1&pageSize=999`).then(res => {
|
||||
// if (res.code == 200) {
|
||||
// this.kefulist = res.rows
|
||||
// }
|
||||
// })
|
||||
// },
|
||||
// 点击去下单
|
||||
btndetaxq() {
|
||||
this.$u.get(`/getInfo`).then(res => {
|
||||
|
|
@ -2527,6 +2531,7 @@
|
|||
this.taocanflag = false
|
||||
this.newMarkers = ''
|
||||
},
|
||||
|
||||
// 点击选择骑行套餐
|
||||
btntcxz(index) {
|
||||
this.tcindex = index
|
||||
|
|
@ -2602,7 +2607,9 @@
|
|||
this.iconPath = 'https://api.ccttiot.com/smartmeter/img/static/upX2lLilhrRi4tttdHlo'
|
||||
} else if (this.rtindex == 2) {
|
||||
this.iconPath = this.iconobj.mappic
|
||||
this.$u.get(`/app/device/listNearBy?radius=10000¢er=${this.jingweidu}&areaId=${this.orderobj.orderAreaId == undefined ? null : this.orderobj.orderAreaId}`).then((res) => {
|
||||
this.$u.get(
|
||||
`/app/device/listNearBy?radius=10000¢er=${this.jingweidu}&areaId=${this.orderobj.orderAreaId == undefined ? null : this.orderobj.orderAreaId}`
|
||||
).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.covers = []
|
||||
this.listData = []
|
||||
|
|
@ -2620,7 +2627,8 @@
|
|||
res.data.forEach(item => {
|
||||
const shopCover = {
|
||||
// 门店后面拼接1,车辆拼接2,3是导览
|
||||
id: this.rtindex == 1 ? parseInt(item.id + "1") : this.rtindex == 2 ? parseInt(item.id + "2") : parseInt(item.id + "3"),
|
||||
id: this.rtindex == 1 ? parseInt(item.id + "1") : this.rtindex ==
|
||||
2 ? parseInt(item.id + "2") : parseInt(item.id + "3"),
|
||||
latitude: item.latitude,
|
||||
longitude: item.longitude,
|
||||
width: 35,
|
||||
|
|
@ -2815,7 +2823,6 @@
|
|||
// 缓存数据
|
||||
const filteredData = res.data.filter(item => item.status != 1);
|
||||
this.cachedParkingData[this.areaId] = filteredData
|
||||
|
||||
const type1Data = []
|
||||
const type2Data = []
|
||||
const type3Data = []
|
||||
|
|
@ -2826,13 +2833,8 @@
|
|||
else if (row.type == 3) type3Data.push(row)
|
||||
else if (row.type == 4) type4Data.push(row)
|
||||
})
|
||||
|
||||
const processBoundaries = (data, type) => {
|
||||
const validBoundaries = data
|
||||
.map(row => row.boundaryStr)
|
||||
.filter(boundary => boundary && typeof boundary === 'string' && boundary
|
||||
.trim() !== '')
|
||||
|
||||
const validBoundaries = data.map(row => row.boundaryStr).filter(boundary => boundary && typeof boundary === 'string' && boundary.trim() !== '')
|
||||
if (validBoundaries.length > 0) {
|
||||
const polylines = this.convertBoundaryToPolylines(validBoundaries, type)
|
||||
if (polylines && polylines.length > 0) {
|
||||
|
|
@ -2841,7 +2843,6 @@
|
|||
}
|
||||
return []
|
||||
}
|
||||
|
||||
// 先处理所有边界数据
|
||||
const type1Polylines = processBoundaries(type1Data, 1)
|
||||
const type2Polylines = processBoundaries(type2Data, 2)
|
||||
|
|
@ -2849,7 +2850,6 @@
|
|||
const type4Polylines = processBoundaries(type4Data, 4)
|
||||
// 保留现有的运营区边界
|
||||
const operationAreaPolylines = this.polyline.filter(p => p.isOperationArea)
|
||||
|
||||
// 合并所有边界数据
|
||||
const allPolylines = [
|
||||
...operationAreaPolylines,
|
||||
|
|
@ -2858,10 +2858,8 @@
|
|||
...type3Polylines,
|
||||
...type4Polylines
|
||||
]
|
||||
|
||||
// 缓存多边形数据
|
||||
this.cachedPolyline = allPolylines
|
||||
|
||||
// 更新显示
|
||||
this.polyline = allPolylines
|
||||
this.parkingList = filteredData
|
||||
|
|
@ -2872,13 +2870,10 @@
|
|||
updatePolylineFromCache() {
|
||||
// 保留现有的运营区边界
|
||||
const operationAreaPolylines = this.polyline.filter(p => p.isOperationArea)
|
||||
|
||||
// 从缓存中获取其他边界数据
|
||||
const otherPolylines = this.cachedPolyline.filter(p => !p.isOperationArea)
|
||||
|
||||
// 合并数据
|
||||
const allPolylines = [...operationAreaPolylines, ...otherPolylines]
|
||||
|
||||
// 更新显示
|
||||
this.polyline = allPolylines
|
||||
},
|
||||
|
|
@ -2958,7 +2953,6 @@
|
|||
this.tempCovers = newMarkers
|
||||
this.covers = this.tempCovers
|
||||
},
|
||||
|
||||
getIconPath() {
|
||||
if (this.rtindex == 1) {
|
||||
return 'https://api.ccttiot.com/smartmeter/img/static/upX2lLilhrRi4tttdHlo'
|
||||
|
|
@ -2969,13 +2963,11 @@
|
|||
}
|
||||
return null
|
||||
},
|
||||
|
||||
updatePolyline(newPolylines) {
|
||||
// 使用Vue的响应式更新
|
||||
this.tempPolyline = [...newPolylines]
|
||||
this.polyline = this.tempPolyline
|
||||
},
|
||||
|
||||
updateCovers(newCovers) {
|
||||
// 使用Vue的响应式更新
|
||||
this.tempCovers = [...newCovers]
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<image :src="appimg.mineUserBg" class="imgbj" mode=""></image>
|
||||
<view class="toptx">
|
||||
<view class="tx">
|
||||
<image :src="appimg.mineDefaultAvatar" mode="aspectFill"></image>
|
||||
<image :src="appimg.mineDefaultAvatar" mode="aspectFill" style="border-radius: 50%;"></image>
|
||||
</view>
|
||||
<view class="rt">
|
||||
<view class="name" @click="btnpage(1)">
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
fajinobj: {},
|
||||
fjflag: false,
|
||||
showIconAndCallout: false,
|
||||
xianshinum:1,
|
||||
orderflag: false,
|
||||
hei: {
|
||||
height: '64vh'
|
||||
|
|
@ -383,6 +384,22 @@
|
|||
onHide() {
|
||||
this.clearTimer()
|
||||
},
|
||||
// 分享到好友(会话)
|
||||
onShareAppMessage: function () {
|
||||
return {
|
||||
title: '小鹿骑行',
|
||||
path: '/pages/nearbystores/index'
|
||||
}
|
||||
},
|
||||
|
||||
// 分享到朋友圈
|
||||
onShareTimeline: function () {
|
||||
return {
|
||||
title: '小鹿骑行',
|
||||
query: '',
|
||||
path: '/pages/nearbystores/index'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 获取动态图片
|
||||
getimg(){
|
||||
|
|
@ -434,7 +451,7 @@
|
|||
deptName: item.userName
|
||||
}))
|
||||
this.displayList = this.list; // 重置显示列表
|
||||
console.log(this.displayList,'0000');
|
||||
console.log(this.displayList,'0000')
|
||||
}else{
|
||||
this.guanliflag = false
|
||||
}
|
||||
|
|
@ -712,6 +729,7 @@
|
|||
this.iconflag = true
|
||||
if (e.type == 'end') {
|
||||
if (this.rtindex == 2) {
|
||||
// this.parkingList = []
|
||||
this.jingweidu = e.detail.centerLocation.longitude + ',' + e.detail.centerLocation.latitude
|
||||
this.getAone()
|
||||
this.iconflag = false
|
||||
|
|
@ -949,7 +967,18 @@
|
|||
console.error('获取位置失败:', err)
|
||||
}
|
||||
})
|
||||
this.$u.put(`/app/device/iot/ring?id=${this.cheobj.id}&lat=${this.xllat}&lon=${this.xllng}`).then((res) => {
|
||||
let arr = this.devicesarr.map(item => {
|
||||
const name = item.name || ''
|
||||
return name.slice(-12)
|
||||
})
|
||||
let data = {
|
||||
id: this.cheobj.id,
|
||||
requiredIot:true,
|
||||
lat: this.xllat,
|
||||
lon: this.xllng,
|
||||
macList:arr
|
||||
}
|
||||
this.$u.put(`/app/device/iot/ring`,data).then((res) => {
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: '操作成功',
|
||||
|
|
@ -1212,12 +1241,17 @@
|
|||
duration: 2000
|
||||
})
|
||||
} else {
|
||||
console.log(this.showIconAndCallout,'this.showIconAndCallout1111',num);
|
||||
if(num == 2){
|
||||
this.showIconAndCallout = !this.showIconAndCallout
|
||||
if(this.xianshinum == 1){
|
||||
this.xianshinum = 2
|
||||
}else if(this.xianshinum == 2){
|
||||
this.xianshinum = 3
|
||||
}else if(this.xianshinum == 3){
|
||||
this.xianshinum = 1
|
||||
}
|
||||
}
|
||||
console.log(this.showIconAndCallout,'this.showIconAndCallout2222',num);
|
||||
if (this.showIconAndCallout) {
|
||||
if (this.xianshinum == 1) {
|
||||
const newMarkers = []
|
||||
this.parkingList.forEach(item => {
|
||||
newMarkers.push({
|
||||
|
|
@ -1241,9 +1275,33 @@
|
|||
})
|
||||
this.newMarkers = newMarkers
|
||||
this.$set(this, 'covers', [...this.covers, ...newMarkers])
|
||||
} else {
|
||||
} else if(this.xianshinum == 2) {
|
||||
// 过滤掉所有气泡显示的标记
|
||||
this.$set(this, 'covers', this.covers.filter(marker => !marker.isCalloutVisible))
|
||||
}else if(this.xianshinum == 3){
|
||||
const newMarkers = []
|
||||
this.parkingList.forEach(item => {
|
||||
newMarkers.push({
|
||||
id: item.type == 1 ? parseInt(item.id + "4") : item.type == 2 ? parseInt(item.id + "5") : item.type == 3 ? parseInt(item.id + "6") : parseInt(item.id + "7"),
|
||||
latitude: parseFloat(item.latitude),
|
||||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: item.type == 1 ? 'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3' : item.type == 2 ? 'https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq' : item.type == 3 ? 'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t' : 'https://api.ccttiot.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250829161752_210_17-1756455764351.png',
|
||||
// callout: {
|
||||
// content: item.name,
|
||||
// color: '#ffffff',
|
||||
// fontSize: 12,
|
||||
// borderRadius: 8,
|
||||
// bgColor: item.type == 1 ? '#3A7EDB' : item.type == 2 ? '#FF473E' : item.type == 3 ? '#FFC107' : '#3bbd55',
|
||||
// padding: 4,
|
||||
// display: 'ALWAYS'
|
||||
// },
|
||||
isCalloutVisible: true // 添加标记
|
||||
})
|
||||
})
|
||||
this.newMarkers = newMarkers
|
||||
this.$set(this, 'covers', [...this.covers, ...newMarkers])
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1254,10 +1312,10 @@
|
|||
return
|
||||
}
|
||||
// 检查缓存
|
||||
if(this.cachedParkingData[this.yyid] && !this.isFirstLoad) {
|
||||
this.updatePolylineFromCache()
|
||||
return
|
||||
}
|
||||
// if(this.cachedParkingData[this.yyid] && !this.isFirstLoad) {
|
||||
// this.updatePolylineFromCache()
|
||||
// return
|
||||
// }
|
||||
this.$u.get(`/app/areaSub/listByArea?areaId=${this.yyid}`).then((res) => {
|
||||
if (res.code === 200 && Array.isArray(res.data)) {
|
||||
// 缓存数据
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const store = new Vuex.Store({
|
|||
isLogin: false,
|
||||
userInfo: null,
|
||||
token:"",
|
||||
appid:'1',//1小鹿 6创享 2嵛山岛
|
||||
appid:'1',//1小鹿 6创享 2嵛山岛 7小兔
|
||||
// 电动车图标
|
||||
iconobj:{
|
||||
tabcion:'https://api.ccttiot.com/smartmeter/img/static/uIiSizdNVb65ATEXvxfT', //底部导航栏图标
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user