共享电单车

This commit is contained in:
吴鹏 2025-11-08 09:37:13 +08:00
parent 81c5835879
commit af955639ef
24 changed files with 1849 additions and 184 deletions

31
App.vue
View File

@ -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 () {

View File

@ -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 小兔骑骑appidwx38f96c87621a87ab
// baseUrl: 'https://cc.ccttiot.com/prod-api', //叉车线上
// baseUrl:'https://ysd.chuantewulian.cn/prod-api', //嵛山岛线上api 嵛山岛appidwx4d178f8c80348214
loadingText: '努力加载中~',

View File

@ -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 => {

View File

@ -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]

View File

@ -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 => {

View File

@ -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>

View 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>

View 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>

View File

@ -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">
车型简介

View File

@ -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">

View File

@ -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); // rpxpx
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); // rpxpx
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; //

View File

@ -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'
})
},
//

View File

@ -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({

View File

@ -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) {

View 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>

View 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>

View File

@ -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){

View File

@ -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){

View File

@ -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()

View File

@ -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": {

View File

@ -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&center=${this.jingweidu}&areaId=${this.orderobj.orderAreaId == undefined ? null : this.orderobj.orderAreaId}`).then((res) => {
this.$u.get(
`/app/device/listNearBy?radius=10000&center=${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 = {
// 123
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]

View File

@ -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)">

View File

@ -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)) {
//

View File

@ -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', //底部导航栏图标