小鹿骑行
|
|
@ -193,6 +193,21 @@
|
|||
}
|
||||
})
|
||||
}
|
||||
}else if(res.code == 401){
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '您当前未登录,是否前去登录?',
|
||||
showCancel: true,
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
uni.reLaunch({
|
||||
url:'/pages/login/login'
|
||||
})
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -153,7 +153,9 @@
|
|||
</view>
|
||||
<view v-if="taocanlist.length != 0" style="margin-top: 24rpx;color: #828282;font-size: 26rpx;">
|
||||
<view class="">
|
||||
免费骑行<text style="color: #F17F37;">{{actiobj.freeRideTime == null ? '0' : actiobj.freeRideTime}}</text>分钟<text v-if="bikeobj.areaParkingReturn == true">,需在还车点还车,地图可查看还车点</text>
|
||||
免费骑行<text style="color: #F17F37;">{{actiobj.freeRideTime == null ? '0' : actiobj.freeRideTime}}</text>分钟,
|
||||
<text v-if="bikeobj.areaParkingReturn == true" style="color: #4C97E7;" @click="btntcd"> 需在还车点还车,查看还车点</text>
|
||||
<text v-else style="color: #4C97E7;" @click="btntcd"> 查看还车点</text>
|
||||
</view>
|
||||
<view class="" style="color: #828282;display: flex;align-items: center;" v-if="taocanlist[fanganindex].ridingRule == 1">
|
||||
<text style="display: block;margin-top: 10rpx;margin-bottom: 10rpx;font-size: 24rpx;color: #3D3D3D;">超出计费</text><text style="color: #F17F37;">{{taocanlist[fanganindex].startRule.timeoutPrice}}</text>元
|
||||
|
|
@ -437,7 +439,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="btn" @click="btnzhifu">
|
||||
同意并继续({{yucun == 0 ? '免押金' : '预支付'}} <text style="display: inline-block;font-size: 32rpx;margin-left:2rpx;">¥{{yucun}}</text>)
|
||||
同意并继续({{yucun == 0 ? '免押金' : '押金'}} <text style="display: inline-block;font-size: 32rpx;margin-left:2rpx;">¥{{yucun}}</text>)
|
||||
</view>
|
||||
<view class="cha" @click="mxflag = true">×</view>
|
||||
</view>
|
||||
|
|
@ -769,6 +771,7 @@
|
|||
this.modelId = res.data.modelId
|
||||
this.areaNeedCheckVideo = res.data.areaNeedCheckVideo
|
||||
this.mac = res.data.mac
|
||||
this.getzaixian() //判断是否在线
|
||||
this.gettaocan()
|
||||
this.getcheliang()
|
||||
this.getQiniuToken()
|
||||
|
|
@ -846,6 +849,8 @@
|
|||
this.$u.put(`/app/device/iot/uploadData?sn=${this.sn}`).then(res =>{
|
||||
if(res.code == 200){
|
||||
this.zaixianflag = true
|
||||
}else if(res.code == 20003){
|
||||
this.zaixianflag = true
|
||||
}
|
||||
})
|
||||
let that = this
|
||||
|
|
@ -1024,19 +1029,37 @@
|
|||
},
|
||||
recordVideo() {
|
||||
// 调用录像API
|
||||
const minVideoDuration = 10;
|
||||
const maxVideoDuration = 60;
|
||||
uni.chooseVideo({
|
||||
sourceType: ['camera'], // 指定使用相机录像
|
||||
camera: 'back', // 指定使用后置摄像头,可选值有front、back
|
||||
maxDuration: 15, // 最大录制时长(秒)
|
||||
success: (res) => {
|
||||
// 获取视频录制文件的临时路径
|
||||
this.videoPath = res.tempFilePath;
|
||||
console.log(res.tempFilePath);
|
||||
this.upload()
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log('录像失败:', err);
|
||||
}
|
||||
sourceType: ['camera'], // 指定使用相机录像
|
||||
camera: 'back', // 后置摄像头
|
||||
maxDuration: maxVideoDuration, // 最大录制时长15秒
|
||||
success: (res) => {
|
||||
// 1. 获取视频实际录制时长(res.duration 单位:秒)
|
||||
const actualDuration = res.duration;
|
||||
console.log('视频实际录制时长:', actualDuration, '秒');
|
||||
// 2. 判断是否满足最小录制时长要求
|
||||
if (actualDuration < minVideoDuration) {
|
||||
uni.showToast({
|
||||
title: `视频时长不能少于${minVideoDuration}秒,请重新录制`,
|
||||
icon: 'none',
|
||||
duration: 5000
|
||||
});
|
||||
return; // 不执行后续上传操作
|
||||
}
|
||||
// 3. 满足要求,继续后续流程
|
||||
this.videoPath = res.tempFilePath;
|
||||
console.log('视频临时路径:', res.tempFilePath);
|
||||
this.upload(); // 执行上传
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log('录像失败:', err);
|
||||
uni.showToast({
|
||||
title: '录像失败,请重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
upload(){
|
||||
|
|
@ -1294,7 +1317,7 @@
|
|||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '当前车辆不可用',
|
||||
showCancel: true,
|
||||
showCancel: false,
|
||||
success: function(res) {
|
||||
if (res.confirm) {
|
||||
|
||||
|
|
|
|||
|
|
@ -16,456 +16,458 @@
|
|||
<text></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="" v-if="tabindex == 0">
|
||||
<view class="card">
|
||||
<view class="card_li">
|
||||
<view class="tops" style="display: block;">
|
||||
<view class="card_left">
|
||||
运营区名称
|
||||
</view>
|
||||
<view class=""
|
||||
style="width: 100%;background: #F4F5F7;border-radius: 14rpx 14rpx 14rpx 14rpx;margin-top: 18rpx;height: 80rpx;line-height: 80rpx;padding-left: 24rpx;">
|
||||
<input type="text" v-model="form.name" placeholder="运营区名称" class="input"
|
||||
placeholder-style="color:#C7CDD3" style="height: 80rpx;line-height: 80rpx;">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 三级联动选择器 -->
|
||||
<view class="xingzheng">
|
||||
<view class="district-container">
|
||||
<!-- 点击区域 -->
|
||||
<view class="district-trigger" @tap="btnshowDistrict">
|
||||
<view class="district-label">行政区</view>
|
||||
<view class="district-placeholder">
|
||||
{{selectedText || '请选择'}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- 选择器弹窗 -->
|
||||
<view class="district-picker" v-if="showDistrict">
|
||||
<!-- 标题和操作按钮 -->
|
||||
<view class="picker-header">
|
||||
<view class="header-title">请点击选择</view>
|
||||
<view class="header-actions">
|
||||
<view class="header-btn cancel" @tap="handleCancel">取消</view>
|
||||
<view class="header-btn confirm" @tap="handleConfirm">确认</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 三级选择列 -->
|
||||
<view class="picker-columns">
|
||||
<!-- 省份列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in provinceList" :key="item.id"
|
||||
:class="['column-item', (tempProvince && tempProvince.id === item.id) ? 'active' : '']"
|
||||
@tap="handleProvinceSelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 城市列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in cityList" :key="item.id"
|
||||
:class="['column-item', (tempCity && tempCity.id === item.id) ? 'active' : '']"
|
||||
@tap="handleCitySelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 区县列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in districtList" :key="item.id"
|
||||
:class="['column-item', (tempDistrict && tempDistrict.id === item.id) ? 'active' : '']"
|
||||
@tap="handleDistrictSelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card" style="padding-bottom: 50rpx;">
|
||||
<view class="biaoti">
|
||||
基础信息
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
状态
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="timeflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
关闭后用户将不能使用运营区及车辆
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营时间
|
||||
</view>
|
||||
<view class="card_right">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips"
|
||||
style="display: flex;justify-content: space-between;margin-top: 20rpx;align-items: center;background-color: #F4F5F7;padding: 28rpx;border-radius: 20rpx;text-align: center;">
|
||||
<u-input :disabled="true" style="margin-right: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="startTime"
|
||||
placeholder="如: 09:00:00" border="none" @click="showTimePicker('work')"></u-input> —
|
||||
<u-input :disabled="true" style="margin-left: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="endTime"
|
||||
placeholder="如: 18:00:00" border="none" @click="showTimePicker('off')"></u-input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
实名认证
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="shimflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先进行实名认证才可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;" v-if="shimflag == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
最低用车年龄
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.minAge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
用户年龄不满足最低年龄不可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;margin-top: 30rpx;" v-if="shimflag == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
最高用车年龄
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.maxAge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
设置用户最高用车年龄,需配合实名认证使用;若无需校验,可设置为1000
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
换车校验位置
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.changeCheck"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户换车是否需要校验位置
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
是否允许多订单
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.multipleOrder"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户可以进行多个订单
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
手机校验附近设备
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.mobileCheckMac"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后,用户还车时会校验手机附近设备,若不匹配则视为无效定位,可以降低异地还车的风险
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
是否开启使用前上传视频
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="scspflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先拍摄全车视频才能下单
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
驾驶证认证
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="jiasflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先通过驾驶证认证才可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
短信通知服务
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.msgSwitch"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启短信通知,短信费用0.1元/条,从余额中扣除
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.requiredRingRadius"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="tops" style="margin-top: 20rpx;" v-if="form.requiredRingRadius == true">
|
||||
<view class="card_left">
|
||||
允许寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="margin-top: 10rpx;">
|
||||
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;margin-top: 30rpx;" v-if="form.requiredRingRadius == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
允许寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="" v-if="tabindex === 1">
|
||||
<scroll-view scroll-y="true" style="height: 72vh;overflow: scroll;">
|
||||
<view class="" v-if="tabindex == 0">
|
||||
<view class="card">
|
||||
<view class="biaoti">
|
||||
骑行设置
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="tops" style="display: block;">
|
||||
<view class="card_left">
|
||||
靠近边界播报距离
|
||||
运营区名称
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.boundaryDistance" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
<view class=""
|
||||
style="width: 100%;background: #F4F5F7;border-radius: 14rpx 14rpx 14rpx 14rpx;margin-top: 18rpx;height: 80rpx;line-height: 80rpx;padding-left: 24rpx;">
|
||||
<input type="text" v-model="form.name" placeholder="运营区名称" class="input"
|
||||
placeholder-style="color:#C7CDD3" style="height: 80rpx;line-height: 80rpx;">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
靠近边界播报距离(米)
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外断电距离
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.outageDistance" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
运营区外断电距离(米)
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
禁行区内断电
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.noRidingOutage"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后当进入禁行区内将进行断电
|
||||
</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>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.areaOutOutage"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后当进入运营区域外内将进行断电
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
低于电量(%)不得骑行
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.undercharge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">%
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
当车辆电量低于多少时无法解锁用车
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="" v-if="tabindex == 2">
|
||||
<view class="card">
|
||||
<view class="biaoti">
|
||||
还车设置
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
还车是否拍照审核
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.returnVerify"></u-switch>
|
||||
<!-- 三级联动选择器 -->
|
||||
<view class="xingzheng">
|
||||
<view class="district-container">
|
||||
<!-- 点击区域 -->
|
||||
<view class="district-trigger" @tap="btnshowDistrict">
|
||||
<view class="district-label">行政区</view>
|
||||
<view class="district-placeholder">
|
||||
{{selectedText || '请选择'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后则需用户拍摄视频后审核订单方可退还押金
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
强制停车点还车
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.parkingReturn"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启则必须在停车点才可还车,停车点存在误差
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" v-if="form.parkingReturn == false">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外还车
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.areaOutReturn"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后可以在运营区范围外还车
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外管理费
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.vehicleManagementFee" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆超出运营区外产生的管理费用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
停车点外调度费
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.dispatchFee" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆超出停车点外产生的调度费用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
还车误差
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.error" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
允许用户在规划的停车点外多少米还车
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="card_li" @click="toMap()">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
电子围栏设置
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<view class="iconfont icon-xiangyou1">
|
||||
<!-- 选择器弹窗 -->
|
||||
<view class="district-picker" v-if="showDistrict">
|
||||
<!-- 标题和操作按钮 -->
|
||||
<view class="picker-header">
|
||||
<view class="header-title">请点击选择</view>
|
||||
<view class="header-actions">
|
||||
<view class="header-btn cancel" @tap="handleCancel">取消</view>
|
||||
<view class="header-btn confirm" @tap="handleConfirm">确认</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 三级选择列 -->
|
||||
<view class="picker-columns">
|
||||
<!-- 省份列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in provinceList" :key="item.id"
|
||||
:class="['column-item', (tempProvince && tempProvince.id === item.id) ? 'active' : '']"
|
||||
@tap="handleProvinceSelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 城市列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in cityList" :key="item.id"
|
||||
:class="['column-item', (tempCity && tempCity.id === item.id) ? 'active' : '']"
|
||||
@tap="handleCitySelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 区县列 -->
|
||||
<scroll-view class="picker-column" scroll-y>
|
||||
<view v-for="item in districtList" :key="item.id"
|
||||
:class="['column-item', (tempDistrict && tempDistrict.id === item.id) ? 'active' : '']"
|
||||
@tap="handleDistrictSelect(item)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆可以正常行驶的区域
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card" style="padding-bottom: 50rpx;">
|
||||
<view class="biaoti">
|
||||
基础信息
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
状态
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="timeflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
关闭后用户将不能使用运营区及车辆
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营时间
|
||||
</view>
|
||||
<view class="card_right">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips"
|
||||
style="display: flex;justify-content: space-between;margin-top: 20rpx;align-items: center;background-color: #F4F5F7;padding: 28rpx;border-radius: 20rpx;text-align: center;">
|
||||
<u-input :disabled="true" style="margin-right: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="startTime"
|
||||
placeholder="如: 09:00:00" border="none" @click="showTimePicker('work')"></u-input> —
|
||||
<u-input :disabled="true" style="margin-left: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="endTime"
|
||||
placeholder="如: 18:00:00" border="none" @click="showTimePicker('off')"></u-input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
实名认证
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="shimflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先进行实名认证才可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;" v-if="shimflag == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
最低用车年龄
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.minAge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
用户年龄不满足最低年龄不可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;margin-top: 30rpx;" v-if="shimflag == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
最高用车年龄
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.maxAge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
设置用户最高用车年龄,需配合实名认证使用;若无需校验,可设置为1000
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
换车校验位置
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.changeCheck"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户换车是否需要校验位置
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
是否允许多订单
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.multipleOrder"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户可以进行多个订单
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
手机校验附近设备
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.mobileCheckMac"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后,用户还车时会校验手机附近设备,若不匹配则视为无效定位,可以降低异地还车的风险
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
是否开启使用前上传视频
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="scspflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先拍摄全车视频才能下单
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
驾驶证认证
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="jiasflag"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后用户必须先通过驾驶证认证才可使用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
短信通知服务
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.msgSwitch"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启短信通知,短信费用0.1元/条,从余额中扣除
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.requiredRingRadius"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="tops" style="margin-top: 20rpx;" v-if="form.requiredRingRadius == true">
|
||||
<view class="card_left">
|
||||
允许寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="margin-top: 10rpx;">
|
||||
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="card_li" style="background-color: #F4F5F7;border-radius: 20rpx;padding: 20rpx 32rpx;margin-top: 30rpx;" v-if="form.requiredRingRadius == true">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
允许寻车范围
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="" v-if="tabindex == 1 || tabindex == 0">
|
||||
<view class="card">
|
||||
<view class="biaoti">
|
||||
骑行设置
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
靠近边界播报距离
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.boundaryDistance" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
靠近边界播报距离(米)
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外断电距离
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.outageDistance" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
运营区外断电距离(米)
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
禁行区内断电
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.noRidingOutage"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后当进入禁行区内将进行断电
|
||||
</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>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.areaOutOutage"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后当进入运营区域外内将进行断电
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
低于电量(%)不得骑行
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.undercharge" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">%
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
当车辆电量低于多少时无法解锁用车
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="" v-if="tabindex == 2 || tabindex == 0">
|
||||
<view class="card">
|
||||
<view class="biaoti">
|
||||
还车设置
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
还车是否拍照审核
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.returnVerify"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后则需用户拍摄视频后审核订单方可退还押金
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
强制停车点还车
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.parkingReturn"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启则必须在停车点才可还车,停车点存在误差
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li" v-if="form.parkingReturn == false">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外还车
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<u-switch v-model="form.areaOutReturn"></u-switch>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
开启后可以在运营区范围外还车
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
运营区外管理费
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.vehicleManagementFee" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆超出运营区外产生的管理费用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
停车点外调度费
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.dispatchFee" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆超出停车点外产生的调度费用
|
||||
</view>
|
||||
</view>
|
||||
<view class="card_li">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
还车误差
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<input type="number" v-model="form.error" placeholder=" " class="input"
|
||||
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
允许用户在规划的停车点外多少米还车
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="card_li" @click="toMap()">
|
||||
<view class="tops">
|
||||
<view class="card_left">
|
||||
电子围栏设置
|
||||
</view>
|
||||
<view class="card_right">
|
||||
<view class="iconfont icon-xiangyou1">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips" style="text-align: left;">
|
||||
设置车辆可以正常行驶的区域
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
|
||||
<!-- 时间选择器 -->
|
||||
|
|
@ -835,11 +837,11 @@
|
|||
align-items: center;
|
||||
gap: 82rpx;
|
||||
padding-left: 42rpx;
|
||||
|
||||
font-size: 36rpx;
|
||||
view {
|
||||
text-align: center;
|
||||
color: #808080;
|
||||
|
||||
|
||||
text {
|
||||
display: block;
|
||||
width: 56rpx;
|
||||
|
|
@ -1091,8 +1093,6 @@
|
|||
}
|
||||
|
||||
.page {
|
||||
padding-bottom: 300rpx;
|
||||
|
||||
.choose_part {
|
||||
position: fixed;
|
||||
top: 530rpx;
|
||||
|
|
|
|||
|
|
@ -158,12 +158,12 @@
|
|||
},
|
||||
search(){
|
||||
if (this.sn && this.sn.length === 7 && /^\d+$/.test(this.sn)) {
|
||||
// 当 this.sn 满足条件时调用 deviceInfo
|
||||
this.deviceInfo()
|
||||
} else {
|
||||
console.log('SN 不是 7 位数字')
|
||||
// 你可以在这里处理不符合条件的情况,比如提示用户输入正确的 SN
|
||||
}
|
||||
// 当 this.sn 满足条件时调用 deviceInfo
|
||||
this.deviceInfo()
|
||||
} else {
|
||||
console.log('SN 不是 7 位数字')
|
||||
// 你可以在这里处理不符合条件的情况,比如提示用户输入正确的 SN
|
||||
}
|
||||
},
|
||||
qrcode() {
|
||||
uni.scanCode({
|
||||
|
|
|
|||
|
|
@ -161,7 +161,6 @@
|
|||
// 允许不输入或者是0? 原逻辑没校验,这里保持宽容,或者给默认0
|
||||
this.price = 0;
|
||||
}
|
||||
|
||||
uni.showLoading({
|
||||
title:'提交中...'
|
||||
})
|
||||
|
|
@ -173,10 +172,17 @@
|
|||
this.$u.put('/bst/order/verify', data).then((res) => {
|
||||
uni.hideLoading()
|
||||
if (res.code === 200) {
|
||||
uni.showToast({
|
||||
title: '审核成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '审核成功',
|
||||
showCancel: false,
|
||||
success: function(res) {
|
||||
if (res.confirm) {
|
||||
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
this.pageNum = 1
|
||||
this.list = []
|
||||
|
|
@ -188,7 +194,7 @@
|
|||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
duration: 5000
|
||||
})
|
||||
}
|
||||
}).catch(() => {
|
||||
|
|
@ -197,9 +203,9 @@
|
|||
},
|
||||
handleScrollToLower() {
|
||||
console.log(this.total,this.list.length);
|
||||
if(this.total > this.list.length){
|
||||
this.getlist()
|
||||
}
|
||||
if(this.total > this.list.length){
|
||||
this.getlist()
|
||||
}
|
||||
},
|
||||
parsePictures(pictureString) {
|
||||
if (pictureString) {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.http = 'https://ele.ccttiot.com/ext?url=' + encodeURIComponent('https://player.bilibili.com/player.html?isOutside=true&aid=114369123849636&bvid=BV1CuLczFEe2&cid=29515777844&p=1')
|
||||
this.http = 'https://weixin.qq.com/sph/AV48NNirw'
|
||||
// this.http = 'https://weixin.qq.com/sph/AclK6wcxT'
|
||||
console.log(this.http);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -4,6 +4,25 @@
|
|||
title-size='34' height='36' id="navbar"></u-navbar>
|
||||
|
||||
<view class="container">
|
||||
<!-- 实名信息展示 -->
|
||||
<view class="section-card real-info-card">
|
||||
<view class="section-title">实名信息</view>
|
||||
<view class="real-info-content">
|
||||
<view class="info-item">
|
||||
<text class="info-label">姓名:</text>
|
||||
<text class="info-value">{{realName || '--'}}</text>
|
||||
</view>
|
||||
<view class="info-item">
|
||||
<text class="info-label">身份证号:</text>
|
||||
<text class="info-value">{{realIdCard || '--'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="info-tip">
|
||||
<u-icon name="info-circle" size="28" color="#909399" style="margin-right: 8rpx;"></u-icon>
|
||||
<text class="tip-text">收款账户信息需与实名信息一致,请仔细核对</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 账户类型选择 -->
|
||||
<!-- <view class="section-card">
|
||||
<view class="section-title">选择收款方式</view>
|
||||
|
|
@ -28,7 +47,7 @@
|
|||
<!-- 开户行输入(仅对公银行卡显示) -->
|
||||
<view class="form-item" v-if="activeType == 'PUBLIC_BANK'">
|
||||
<view class="form-label">开户行名称</view>
|
||||
<u-input v-model="bankForm.bankName" placeholder="请输入开户行名称" border="none" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.bankName" placeholder="请输入开户行名称" border="none" class="custom-input" @input="handleInput('bankName', $event)"></u-input>
|
||||
</view>
|
||||
|
||||
<!-- <view class="form-item">
|
||||
|
|
@ -38,7 +57,7 @@
|
|||
|
||||
<view class="form-item">
|
||||
<view class="form-label">银行卡号</view>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input" @input="handleInput('no', $event)"></u-input>
|
||||
</view>
|
||||
|
||||
<!-- <view class="form-item">
|
||||
|
|
@ -48,7 +67,10 @@
|
|||
|
||||
<view class="form-item" v-if="activeType != 'PUBLIC_BANK'" style="border-bottom: none;">
|
||||
<view class="form-label">手机号</view>
|
||||
<u-input v-model="bankForm.mobile" placeholder="请输入手机号" border="none" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.mobile" placeholder="请输入手机号" border="none" class="custom-input" @input="handleInput('mobile', $event)"></u-input>
|
||||
<view class="" style="color: #E6A23C;margin-top: 30rpx;">
|
||||
注:该手机号必须是该银行卡预留的手机号
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -57,15 +79,15 @@
|
|||
<view class="section-title">绑定银行卡信息</view>
|
||||
<view class="form-item">
|
||||
<view class="form-label">银行卡号</view>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input" @input="handleInput('no', $event)"></u-input>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="form-label">开户行名称</view>
|
||||
<u-input v-model="bankForm.bankName" placeholder="请输入开户行名称" border="none" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.bankName" placeholder="请输入开户行名称" border="none" class="custom-input" @input="handleInput('bankName', $event)"></u-input>
|
||||
</view>
|
||||
<view class="form-item" style="border-bottom: none;">
|
||||
<view class="form-label">联行号</view>
|
||||
<u-input v-model="bankForm.contactLine" placeholder="请输入联行号" border="none" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.contactLine" placeholder="请输入联行号" border="none" class="custom-input" @input="handleInput('contactLine', $event)"></u-input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -101,7 +123,7 @@
|
|||
</view> -->
|
||||
<view class="form-item">
|
||||
<view class="form-label">银行卡号</view>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.no" placeholder="请输入银行卡号" border="none" type="number" class="custom-input" @input="handleInput('no', $event)"></u-input>
|
||||
</view>
|
||||
<!-- <view class="form-item">
|
||||
<view class="form-label">身份证号</view>
|
||||
|
|
@ -109,7 +131,10 @@
|
|||
</view> -->
|
||||
<view class="form-item" style="border-bottom: none;">
|
||||
<view class="form-label">手机号</view>
|
||||
<u-input v-model="bankForm.mobile" placeholder="请输入手机号" border="none" class="custom-input"></u-input>
|
||||
<u-input v-model="bankForm.mobile" placeholder="请输入手机号" border="none" class="custom-input" @input="handleInput('mobile', $event)"></u-input>
|
||||
<view class="" style="color: #E6A23C;margin-top: 30rpx;">
|
||||
注:该手机号必须是该银行卡预留的手机号
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -149,19 +174,53 @@ export default {
|
|||
token: '', // 添加七牛云token
|
||||
upurl: 'https://api.ccttiot.com', // 添加上传域名
|
||||
zhanghulist:[],
|
||||
activeTypeid:''
|
||||
activeTypeid:'',
|
||||
realName: '', // 实名姓名
|
||||
realIdCard: '' // 实名身份证号
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
|
||||
this.getUserInfo()
|
||||
},
|
||||
onLoad(e) {
|
||||
this.activeType = e.activeType
|
||||
this.activeTypeid = e.id
|
||||
// this.getqudao()
|
||||
this.getQiniuToken()
|
||||
this.getUserInfo()
|
||||
},
|
||||
methods: {
|
||||
// 获取用户实名信息
|
||||
getUserInfo() {
|
||||
this.$u.get("/getInfo").then(res => {
|
||||
if (res.code == 200 && res.user) {
|
||||
this.realName = res.user.realName || ''
|
||||
this.realIdCard = res.user.realIdCard || ''
|
||||
}
|
||||
})
|
||||
},
|
||||
// 处理输入,去除空格
|
||||
handleInput(field, value) {
|
||||
// 去除所有空格(包括粘贴时的空格)
|
||||
let inputValue = ''
|
||||
if (typeof value === 'string') {
|
||||
inputValue = value
|
||||
} else if (value && value.detail && typeof value.detail.value === 'string') {
|
||||
// uView u-input 组件可能通过 detail.value 传递
|
||||
inputValue = value.detail.value
|
||||
} else if (value && value.target) {
|
||||
// 处理原生事件对象
|
||||
inputValue = value.target.value || ''
|
||||
} else {
|
||||
return
|
||||
}
|
||||
// 去除所有空格
|
||||
const trimmedValue = inputValue.replace(/\s/g, '')
|
||||
// 使用 $nextTick 确保更新
|
||||
this.$nextTick(() => {
|
||||
this.bankForm[field] = trimmedValue
|
||||
})
|
||||
},
|
||||
btnxz(item){
|
||||
this.activeType = item.apiType
|
||||
this.activeTypeid = item.id
|
||||
|
|
@ -490,4 +549,54 @@ page {
|
|||
box-shadow: none;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* 实名信息卡片样式 */
|
||||
.real-info-card {
|
||||
background: linear-gradient(135deg, #EEF5FF 0%, #F7F9FC 100%);
|
||||
border: 1rpx solid #E1F0FF;
|
||||
}
|
||||
|
||||
.real-info-content {
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 16rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.info-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
min-width: 140rpx;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #303133;
|
||||
font-weight: 600;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.info-tip {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
padding: 16rpx 20rpx;
|
||||
background: #FFF7E6;
|
||||
border-radius: 12rpx;
|
||||
border-left: 4rpx solid #FFA940;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.tip-text {
|
||||
font-size: 24rpx;
|
||||
color: #8C6A00;
|
||||
line-height: 1.6;
|
||||
flex: 1;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
</map>
|
||||
<view class="jiaoyi">
|
||||
<view class="pic">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uiXte3LpSV30jyvTUR2R" mode=""></image>
|
||||
<image src="/static/image/icon18.png" mode=""></image>
|
||||
<text v-if="info.status == 'PROCESSING'">进行中</text>
|
||||
<text v-if="info.status == 'WAIT_PAY'">待支付</text>
|
||||
<text v-if="info.status == 'CANCELED'">已取消</text>
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
订单编号
|
||||
</view>
|
||||
<view class="shen">
|
||||
{{info.no == null ? '--' : info.no}} <image src="https://api.ccttiot.com/smartmeter/img/static/uimYURcxkn9ItLquwPpM" mode=""></image>
|
||||
{{info.no == null ? '--' : info.no}} <image src="/static/image/icon19.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="one">
|
||||
|
|
@ -298,7 +298,7 @@
|
|||
</view>
|
||||
<view class="mask" v-if="kefuflag"></view>
|
||||
<view class="kfrens">
|
||||
<image class="kfren" @click="btntel" src="https://api.ccttiot.com/smartmeter/img/static/uJd9ccJt76zc7r2Nlpb8" mode=""></image>
|
||||
<image class="kfren" @click="btntel" src="/static/image/20.png"></image>
|
||||
联系客服
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -369,7 +369,6 @@
|
|||
else if (row.type == 2) type2Data.push(row);
|
||||
else if (row.type == 3) type3Data.push(row);
|
||||
});
|
||||
|
||||
// 处理 type1 数据
|
||||
const validBoundaries = type1Data.map(row => row.boundaryStr).filter(boundary =>
|
||||
typeof boundary === 'string' && boundary.trim() !== '');
|
||||
|
|
@ -377,7 +376,6 @@
|
|||
if (polygons && polygons.length > 0) {
|
||||
this.polygon = this.polygon.concat(polygons);
|
||||
}
|
||||
|
||||
// 处理 type2 数据
|
||||
const validBoundaries1 = type2Data.map(row => row.boundaryStr).filter(boundary =>
|
||||
typeof boundary === 'string' && boundary.trim() !== '');
|
||||
|
|
@ -385,7 +383,6 @@
|
|||
if (polygons1 && polygons1.length > 0) {
|
||||
this.polygon = this.polygon.concat(polygons1);
|
||||
}
|
||||
|
||||
// 处理 type3 数据
|
||||
const validBoundaries2 = type3Data.map(row => row.boundaryStr).filter(boundary =>
|
||||
typeof boundary === 'string' && boundary.trim() !== '');
|
||||
|
|
@ -393,7 +390,6 @@
|
|||
if (polygons2 && polygons2.length > 0) {
|
||||
this.polygon = this.polygon.concat(polygons2);
|
||||
}
|
||||
|
||||
this.parkingList = filteredData
|
||||
this.$forceUpdate()
|
||||
this.toggleIconAndCallout()
|
||||
|
|
|
|||
|
|
@ -92,10 +92,10 @@
|
|||
|
||||
<!-- 平台客服弹窗 -->
|
||||
<view class="kefutc" v-if="kefuflag">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/umtjJg2CJLiOS6hfAEzo" mode=""
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/umtjJg2CJLiOS6hfAEzo" mode="aspectFill"
|
||||
@click="kefuflag = false"></image>
|
||||
<view class="box">
|
||||
<view class="" style="max-height: 170rpx;overflow: scroll;">
|
||||
<view class="box" >
|
||||
<view class="" style="max-height: 268rpx;overflow: scroll;">
|
||||
<view class="top" v-for="(item,index) in kefulist" :key="index">
|
||||
<view class="dianhua">
|
||||
{{item.name == null ? '--' : item.name}}:{{item.contact == null ? '--' : item.contact}}
|
||||
|
|
@ -107,12 +107,12 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="bot">
|
||||
<view class="wz">
|
||||
<!-- <view class="wz">
|
||||
在线客服
|
||||
</view>
|
||||
<view class="wz">
|
||||
温馨提示
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="wzs">
|
||||
客服电话高峰期可能遇忙,请耐心等待
|
||||
</view>
|
||||
|
|
@ -1281,13 +1281,7 @@
|
|||
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',
|
||||
|
|
@ -2219,8 +2213,7 @@
|
|||
latitude: that.lslat,
|
||||
result: '成功'
|
||||
}
|
||||
that.$u.post(`/app/commandLog/bluetooth`, data).then(
|
||||
res => {
|
||||
that.$u.post(`/app/commandLog/bluetooth`, data).then(res => {
|
||||
console.log(res, '蓝牙')
|
||||
})
|
||||
let datas = {
|
||||
|
|
@ -2275,8 +2268,7 @@
|
|||
} 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', // 国内地图更兼容
|
||||
|
|
|
|||
55
pages/my.vue
|
|
@ -30,25 +30,25 @@
|
|||
<view class="lt">
|
||||
<image :src="appimg.mineVip" mode=""></image> 我的会员
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
<view class="li" @click="btnpage(5)">
|
||||
<view class="lt">
|
||||
<image :src="appimg.mineFaultReport" mode=""></image> 故障上报
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
<view class="li" @click="btnpage(7)">
|
||||
<view class="lt">
|
||||
<image :src="appimg.mineOrderComplaint" mode=""></image> 订单投诉
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
<view class="li" @click="btnpage(9)">
|
||||
<view class="lt">
|
||||
<image :src="appimg.mineHelp" mode=""></image> 帮助中心
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ul" v-if="guanliflag || adminflag">
|
||||
|
|
@ -56,13 +56,13 @@
|
|||
<view class="lt">
|
||||
<image :src="appimg.mineAdmin" mode=""></image> 管理后台
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
<view class="li" @click="btnpage(13)" v-if="adminflag">
|
||||
<view class="lt">
|
||||
<image :src="appimg.mineDeviceInput" mode=""></image> 设备录入
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ul" style="padding: 0 56rpx;">
|
||||
|
|
@ -70,13 +70,13 @@
|
|||
<view class="lt">
|
||||
<image :src="appimg.mineLogout" mode=""></image> 退出登录
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
<view class="li" @click="btnpage(15)" v-else>
|
||||
<view class="lt">
|
||||
<image :src="appimg.mineLogout" mode=""></image> 立即登录
|
||||
</view>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/ugxCHoezYra6gtrZPJ4F" mode=""></image>
|
||||
<image src="/static/image/jt.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="" style="width: 100%;text-align: center;margin-top: 20rpx;color: #ccc;">
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
</view>
|
||||
<!-- 平台客服弹窗 -->
|
||||
<view class="kefutc" v-if="kefuflag">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/umtjJg2CJLiOS6hfAEzo" mode="" @click="btmnyc">
|
||||
<image src="/static/image/icon16.png" mode="" @click="btmnyc">
|
||||
</image>
|
||||
<view class="box">
|
||||
<view class="" style="max-height: 170rpx;overflow: scroll;">
|
||||
|
|
@ -383,22 +383,27 @@
|
|||
this.show = true
|
||||
}
|
||||
} else if (num == 11) { //管理人员
|
||||
if(uni.getStorageSync('wzid')){
|
||||
if (this.list.length < 2) {
|
||||
uni.setStorageSync('adminAreaid', this.list[0].value);
|
||||
uni.setStorageSync('adminname', this.list[0].label)
|
||||
uni.navigateTo({
|
||||
url: `/page_shanghu/guanli/admin_worke?id=${this.list[0].value}`
|
||||
})
|
||||
} else {
|
||||
this.show = true
|
||||
}
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:'/pages/xiqian'
|
||||
})
|
||||
}
|
||||
|
||||
if(uni.getStorageSync('user').authTypes.includes('1')){
|
||||
if(uni.getStorageSync('wzid')){
|
||||
if (this.list.length < 2) {
|
||||
uni.setStorageSync('adminAreaid', this.list[0].value);
|
||||
uni.setStorageSync('adminname', this.list[0].label)
|
||||
uni.navigateTo({
|
||||
url: `/page_shanghu/guanli/admin_worke?id=${this.list[0].value}`
|
||||
})
|
||||
} else {
|
||||
this.show = true
|
||||
}
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:'/pages/xiqian'
|
||||
})
|
||||
}
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:'/page_user/shiming'
|
||||
})
|
||||
}
|
||||
// this.$u.get(`/app/contract/checkSigned?type=1`).then(res => {
|
||||
// if (res.code == 200) {
|
||||
// if (res.data == false) {
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
<view class="qixinglist_item" v-for="(item,index) in qixinglist" :key="index" @click="btnxqqx(item.id)">
|
||||
<view class="top">
|
||||
<view class="lt">
|
||||
<image :src="iconobj.orderlistimg" mode=""></image> {{item.deviceVehicleNum == null ? '--' : item.deviceVehicleNum}}
|
||||
<image src="/static/image/icon17.png" mode=""></image> {{item.deviceVehicleNum == null ? '--' : item.deviceVehicleNum}}
|
||||
</view>
|
||||
<view class="rt" v-if="item.status == 'WAIT_PAY'">
|
||||
待支付 <u-icon name="arrow-right" color="#808080" size="28"></u-icon>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<u-navbar title=" " :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||||
title-size='36' height='36' id="navbar">
|
||||
</u-navbar>
|
||||
<map class='map' id="map" :latitude="latitude" :longitude="longitude" :markers="covers" @markertap="handleMarkerClick" :polyline="mappolyline" :show-location="true"/>
|
||||
<map class='map' id="map" :latitude="latitude" :longitude="longitude" :markers="covers" @markertap="handleMarkerClick" :polyline="mappolyline" :polygons="areaPolylines" :show-location="true"/>
|
||||
|
||||
<view class="daohang" v-if="daohangflag">
|
||||
<view class="name">
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
import QQMapWX from '@/common/qqmap-wx-jssdk.min.js'
|
||||
var qqmapsdk
|
||||
export default {
|
||||
data() {
|
||||
data() {
|
||||
return {
|
||||
bgc: {
|
||||
backgroundColor: "",
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
latitude:'',
|
||||
longitude:'',
|
||||
mappolyline:[],
|
||||
areaPolylines:[], // 保存区域边界数据
|
||||
qqmapsdk: null,
|
||||
validBoundaries:{},
|
||||
daohangflag:false,
|
||||
|
|
@ -52,7 +53,6 @@
|
|||
},
|
||||
onShow() {
|
||||
this.getMyLocation()
|
||||
this.convertBoundaryToPolylines(this.validBoundaries, 1)
|
||||
},
|
||||
methods: {
|
||||
// 点击跳转导航
|
||||
|
|
@ -74,15 +74,29 @@
|
|||
},
|
||||
|
||||
handleMarkerClick(e){
|
||||
// 规划路线
|
||||
// 规划路线(只针对停车区)
|
||||
console.log(e);
|
||||
this.getcha(e.markerId)
|
||||
const clickedMarker = this.covers.find(marker => marker.id == e.markerId);
|
||||
if (clickedMarker) {
|
||||
const { latitude, longitude } = clickedMarker;
|
||||
this.routePlanning(latitude, longitude);
|
||||
// 提取原始ID(去掉后缀)
|
||||
let originalId = e.markerId.toString()
|
||||
if (originalId.endsWith('4')) {
|
||||
originalId = originalId.slice(0, -1) // 停车区
|
||||
} else if (originalId.endsWith('5')) {
|
||||
originalId = originalId.slice(0, -1) // 禁停区
|
||||
} else if (originalId.endsWith('6')) {
|
||||
originalId = originalId.slice(0, -1) // 禁行区
|
||||
} else if (originalId.endsWith('7')) {
|
||||
originalId = originalId.slice(0, -1) // 景区
|
||||
}
|
||||
this.getcha(originalId)
|
||||
// 只对停车区进行路线规划
|
||||
if (clickedMarker.isParkingArea && clickedMarker.id.toString().endsWith('4')) {
|
||||
const { latitude, longitude } = clickedMarker;
|
||||
this.routePlanning(latitude, longitude);
|
||||
this.daohangflag = true
|
||||
}
|
||||
}
|
||||
this.daohangflag = true
|
||||
},
|
||||
routePlanning(end_lat, end_long) {
|
||||
let that = this
|
||||
|
|
@ -115,22 +129,19 @@
|
|||
})
|
||||
}
|
||||
// console.log('点串数组', pl)
|
||||
// 设置polyline属性,将路线显示出来,将解压坐标第一个数据作为起点
|
||||
that.mappolyline = [{
|
||||
// 创建路线polyline
|
||||
const routePolyline = {
|
||||
points: pl,
|
||||
color: '#367EEF', // 线的填充色
|
||||
width: 3, // 折现宽度
|
||||
width: 8, // 折现宽度
|
||||
borderWidth: 2, // 边线宽度
|
||||
borderColor: '#5B98FD', // 边线颜色
|
||||
lineCap: 'square', // 线端头
|
||||
showArrow: true, // 沿线路方向显示箭头
|
||||
width: 8,
|
||||
arrowLine: true,
|
||||
// color: '#00AF99',
|
||||
// strokeWidth: 2,
|
||||
// strokeColor: '#00AF99',
|
||||
// fillColor: '#00AF99'
|
||||
}]
|
||||
}
|
||||
// 路线数据(区域边界通过:polygons属性单独显示)
|
||||
that.mappolyline = [routePolyline]
|
||||
},
|
||||
fail(res) {
|
||||
console.log('resresresresresresres', res)
|
||||
|
|
@ -145,56 +156,265 @@
|
|||
this.latitude = res.latitude
|
||||
this.longitude = res.longitude
|
||||
this.setMapScale()
|
||||
this.$u.get(`/app/areaSub/listByArea?areaId=${this.areaId}`).then((res) => {
|
||||
if (res.code == 200) {
|
||||
res.data.forEach(item =>{
|
||||
if(item.type == 1){
|
||||
const shopCover = {
|
||||
id: parseInt(item.id),
|
||||
latitude: item.latitude,
|
||||
longitude:item.longitude,
|
||||
width: 25,
|
||||
height: 40,
|
||||
iconPath:'https://api.ccttiot.com/bike/img/static/uUgkSmtcyyM7hQc5Dtmf',
|
||||
label: {
|
||||
content: item.name,
|
||||
anchorX: this.calculateAnchorX(item.name),
|
||||
fontWeight: 700,
|
||||
color: '#0D75E5',
|
||||
borderColor: '#fff',
|
||||
borderRadius: 5,
|
||||
bgColor: '#fff',
|
||||
padding:1,
|
||||
}
|
||||
}
|
||||
this.covers.push(shopCover)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
this.getArea()
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取位置失败:', err)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 停车点填充颜色
|
||||
convertBoundaryToPolylines(boundaries, num) {
|
||||
let boundary = [27.324194, 120.216742, 25, 162, 0, 0, 79, 515, 0, 0, -277, 139, -34, 28, 0, 0, -104, 119, 0, 0, -133]
|
||||
if (!boundary) return null;
|
||||
const points = boundary.map(coord => ({
|
||||
// 请求运营区停车点,禁行区
|
||||
getArea() {
|
||||
this.areaPolylines = []
|
||||
this.$u.get(`/app/area/detail?id=${this.areaId}`).then((res) => {
|
||||
if (res.code == 200) {
|
||||
// 获取运营区边界
|
||||
if (res.data && res.data.boundaryStr) {
|
||||
const operationPolyline = this.convertBoundaryToPolyline(res.data.boundaryStr)
|
||||
if (operationPolyline) {
|
||||
this.areaPolylines.push(operationPolyline)
|
||||
}
|
||||
}
|
||||
// 获取子区域数据
|
||||
this.getParking()
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取停车点的所有数据
|
||||
getParking() {
|
||||
this.$u.get(`/app/areaSub/listByArea?areaId=${this.areaId}`).then((res) => {
|
||||
if (res.code === 200 && Array.isArray(res.data)) {
|
||||
// 过滤掉状态为1的数据
|
||||
const filteredData = res.data.filter(item => item.status != 1)
|
||||
// 分类数据
|
||||
const type1Data = [] // 停车区
|
||||
const type2Data = [] // 禁停区(电子围栏)
|
||||
const type3Data = [] // 禁行区
|
||||
const type4Data = [] // 景区
|
||||
filteredData.forEach(row => {
|
||||
if (row.type == 1) type1Data.push(row)
|
||||
else if (row.type == 2) type2Data.push(row)
|
||||
else if (row.type == 3) type3Data.push(row)
|
||||
else if (row.type == 4) type4Data.push(row)
|
||||
})
|
||||
// 处理标记点(所有类型)
|
||||
// 停车区标记点
|
||||
type1Data.forEach(item => {
|
||||
const marker = {
|
||||
id: parseInt(item.id + "4"),
|
||||
latitude: parseFloat(item.latitude),
|
||||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3',
|
||||
callout: {
|
||||
content: item.name,
|
||||
color: '#ffffff',
|
||||
fontSize: 12,
|
||||
borderRadius: 8,
|
||||
bgColor: '#3A7EDB',
|
||||
padding: 4,
|
||||
display: 'ALWAYS'
|
||||
},
|
||||
isParkingArea: true
|
||||
}
|
||||
this.covers.push(marker)
|
||||
})
|
||||
// 禁停区标记点
|
||||
type2Data.forEach(item => {
|
||||
const marker = {
|
||||
id: parseInt(item.id + "5"),
|
||||
latitude: parseFloat(item.latitude),
|
||||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq',
|
||||
callout: {
|
||||
content: item.name,
|
||||
color: '#ffffff',
|
||||
fontSize: 12,
|
||||
borderRadius: 8,
|
||||
bgColor: '#FF473E',
|
||||
padding: 4,
|
||||
display: 'ALWAYS'
|
||||
},
|
||||
isParkingArea: true
|
||||
}
|
||||
this.covers.push(marker)
|
||||
})
|
||||
// 禁行区标记点
|
||||
type3Data.forEach(item => {
|
||||
const marker = {
|
||||
id: parseInt(item.id + "6"),
|
||||
latitude: parseFloat(item.latitude),
|
||||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t',
|
||||
callout: {
|
||||
content: item.name,
|
||||
color: '#ffffff',
|
||||
fontSize: 12,
|
||||
borderRadius: 8,
|
||||
bgColor: '#FFC107',
|
||||
padding: 4,
|
||||
display: 'ALWAYS'
|
||||
},
|
||||
isParkingArea: true
|
||||
}
|
||||
this.covers.push(marker)
|
||||
})
|
||||
// 景区标记点
|
||||
type4Data.forEach(item => {
|
||||
const marker = {
|
||||
id: parseInt(item.id + "7"),
|
||||
latitude: parseFloat(item.latitude),
|
||||
longitude: parseFloat(item.longitude),
|
||||
width: 18,
|
||||
height: 26,
|
||||
iconPath: '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: '#3bbd55',
|
||||
padding: 4,
|
||||
display: 'ALWAYS'
|
||||
},
|
||||
isParkingArea: true
|
||||
}
|
||||
this.covers.push(marker)
|
||||
})
|
||||
// 处理边界数据
|
||||
const processBoundaries = (data, type) => {
|
||||
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) {
|
||||
return polylines
|
||||
}
|
||||
}
|
||||
return []
|
||||
}
|
||||
// 处理所有类型的边界数据
|
||||
const type1Polylines = processBoundaries(type1Data, 1)
|
||||
const type2Polylines = processBoundaries(type2Data, 2)
|
||||
const type3Polylines = processBoundaries(type3Data, 3)
|
||||
const type4Polylines = processBoundaries(type4Data, 4)
|
||||
// 保留现有的运营区边界
|
||||
const operationAreaPolylines = this.areaPolylines.filter(p => p.isOperationArea)
|
||||
// 合并所有边界数据
|
||||
const allPolylines = [
|
||||
...operationAreaPolylines,
|
||||
...type1Polylines,
|
||||
...type2Polylines,
|
||||
...type3Polylines,
|
||||
...type4Polylines
|
||||
]
|
||||
// 更新显示
|
||||
this.areaPolylines = allPolylines
|
||||
}
|
||||
})
|
||||
},
|
||||
// 将运营区边界转换为polyline(单个边界)
|
||||
convertBoundaryToPolyline(boundary) {
|
||||
if (!boundary) return null
|
||||
const points = JSON.parse(boundary).map(coord => ({
|
||||
latitude: coord[1],
|
||||
longitude: coord[0]
|
||||
}))
|
||||
const polyline = {
|
||||
points: points,
|
||||
fillColor: "#55888840", //填充颜色
|
||||
strokeColor: "red", //描边颜色
|
||||
strokeWidth: 2, //描边宽度
|
||||
zIndex: 1, //层级
|
||||
fillColor: "#55888820",
|
||||
strokeColor: "#22FF00",
|
||||
strokeWidth: 1,
|
||||
zIndex: 1,
|
||||
isOperationArea: true
|
||||
}
|
||||
return polyline
|
||||
},
|
||||
// 将边界数据转换为polyline数组
|
||||
convertBoundaryToPolylines(boundaries, num) {
|
||||
if (!Array.isArray(boundaries)) {
|
||||
console.error('边界数据不是数组:', boundaries)
|
||||
return []
|
||||
}
|
||||
const polylines = boundaries.map(boundary => {
|
||||
if (!boundary) {
|
||||
console.warn('边界数据为空')
|
||||
return null
|
||||
}
|
||||
let coords
|
||||
try {
|
||||
coords = JSON.parse(boundary)
|
||||
} catch (error) {
|
||||
console.error('解析边界JSON失败:', error)
|
||||
return null
|
||||
}
|
||||
if (!Array.isArray(coords)) {
|
||||
console.error('解析后的边界数据不是数组:', coords)
|
||||
return null
|
||||
}
|
||||
const points = coords.map(coord => {
|
||||
if (!Array.isArray(coord) || coord.length < 2) {
|
||||
console.warn('坐标数据格式错误:', coord)
|
||||
return null
|
||||
}
|
||||
return {
|
||||
latitude: parseFloat(coord[1]),
|
||||
longitude: parseFloat(coord[0])
|
||||
}
|
||||
}).filter(point => point !== null)
|
||||
|
||||
if (points.length < 3) {
|
||||
console.warn('有效坐标点不足3个,无法构成多边形')
|
||||
return null
|
||||
}
|
||||
// 根据类型设置不同的样式
|
||||
let style = {}
|
||||
if (num == 1) { // 停车区
|
||||
style = {
|
||||
fillColor: "#88888850",
|
||||
strokeColor: "#88888850",
|
||||
strokeWidth: 1,
|
||||
zIndex: 1,
|
||||
isOperationArea: false
|
||||
}
|
||||
} else if (num == 2) { // 禁停区(电子围栏)
|
||||
style = {
|
||||
fillColor: "#FF473E40",
|
||||
strokeColor: "#FF473E",
|
||||
strokeWidth: 2,
|
||||
zIndex: 1,
|
||||
isOperationArea: false
|
||||
}
|
||||
} else if (num == 3) { // 禁行区
|
||||
style = {
|
||||
fillColor: "#FFC10740",
|
||||
strokeColor: "#FFC107",
|
||||
strokeWidth: 2,
|
||||
zIndex: 1,
|
||||
isOperationArea: false
|
||||
}
|
||||
} else if (num == 4) { // 景区
|
||||
style = {
|
||||
fillColor: "#4abd2040",
|
||||
strokeColor: "#4abd20",
|
||||
strokeWidth: 2,
|
||||
zIndex: 1,
|
||||
isOperationArea: false
|
||||
}
|
||||
}
|
||||
return {
|
||||
points: points,
|
||||
...style
|
||||
}
|
||||
}).filter(polyline => polyline !== null)
|
||||
return polylines
|
||||
},
|
||||
// 回到地图中心点
|
||||
async setMapScale(e, val) {
|
||||
let mapContext = uni.createMapContext('map', this);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<view class="page">
|
||||
<image class="topimg" @click="btnmy" src="https://api.ccttiot.com/smartmeter/img/static/uFaWRkPQOMH42IkfFyFM" mode=""></image>
|
||||
<image class="topimg" @click="btnmy" src="/static/image/icon11.png" mode=""></image>
|
||||
<!-- 地图 -->
|
||||
<view class="">
|
||||
<image class="picimg" v-if="iconflag" src="https://api.ccttiot.com/smartmeter/img/static/uU4DEpKYqBND0oXDiqod"
|
||||
|
|
@ -27,13 +27,13 @@
|
|||
<image v-if="rtindex == 3" src="https://api.ccttiot.com/smartmeter/img/static/uEWVQFGBf10XJn8aTlaZ"
|
||||
@click="btntap(3)" mode=""></image> -->
|
||||
<image style="width: 80rpx;height: 80rpx;" @click="toggleIconAndCallout(2)"
|
||||
src="https://api.ccttiot.com/smartmeter/img/static/u6r5tQVe2VO6bvxTLeFT" mode=""></image>
|
||||
<image style="width: 80rpx;height: 80rpx;" src="https://api.ccttiot.com/smartmeter/img/static/ug1ExhYsZmdWWjVvjjuk" @click="btnhuiz" mode=""></image>
|
||||
<image style="width: 80rpx;height: 90rpx;" src="https://api.ccttiot.com/smartmeter/img/static/unaFMV8lmyqWVyY2uOhR"
|
||||
src="/static/image/icon7.png" mode=""></image>
|
||||
<image style="width: 80rpx;height: 80rpx;" src="/static/image/icon8.png" @click="btnhuiz" mode=""></image>
|
||||
<image style="width: 80rpx;height: 90rpx;" src="/static/image/icon9.png"
|
||||
@click="btntap(3)" mode=""></image>
|
||||
</view>
|
||||
<!-- 点击地图门店弹窗 -->
|
||||
<view class="shoptc" v-if="shoptcflag" @click="btnmendain">
|
||||
<!-- <view class="shoptc" v-if="shoptcflag" @click="btnmendain">
|
||||
<view class="top">
|
||||
<view class="name">
|
||||
云行租车(汇丰公寓)
|
||||
|
|
@ -62,12 +62,12 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 车辆弹窗 -->
|
||||
<view class="biketc" v-if="taocanflag">
|
||||
<view class="topfor">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uc5JSRyb7S6TUCbOiWb3" v-if="huiyuanlist.length > 0" class="qixing" mode="" @click="btnhuiyuan"></image>
|
||||
<image src="/static/image/icon12.png" v-if="huiyuanlist.length > 0" class="qixing" mode="" @click="btnhuiyuan"></image>
|
||||
<view class="bikesy">
|
||||
<view class="bikert">
|
||||
<view class="bikegongli" style="color: #16BC32;">
|
||||
|
|
@ -91,7 +91,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="anniuks">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uYk2NdudtWdF6lvJCbSW" @click="btnxlxc" mode=""></image> <text @click="btndetaxq">解锁骑行</text>
|
||||
<image src="/static/image/icon13.png" @click="btnxlxc" mode=""></image> <text @click="btndetaxq">解锁骑行</text>
|
||||
</view>
|
||||
<view class="" style="color: #7C7C7C;font-size: 24rpx;margin-top: 30rpx;width: 100%;text-align: center;">
|
||||
车牌:{{cheobj.vehicleNum == null ? '--' : cheobj.vehicleNum}} <text style="margin-left: 40rpx;">SN:{{cheobj.sn == null ? '--' : cheobj.sn}}</text>
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
<u-icon name="arrow-right" color="#333" style="position: absolute;right: 10rpx;" size="32"></u-icon>
|
||||
</view>
|
||||
<!-- 商户中心入口 -->
|
||||
<image v-if="guanliflag || adminflag" @click="btngl" class="rukou" src="https://api.ccttiot.com/smartmeter/img/static/utNYsXfdVWHsJBFV6eMV" mode=""></image>
|
||||
<image v-if="guanliflag || adminflag" @click="btngl" class="rukou" src="/static/image/icon10.png" mode=""></image>
|
||||
<!-- 公告弹窗 -->
|
||||
<view class="noticetc" v-if="gonggaoflag">
|
||||
<view class="name">
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
您有正在进行中订单 <u-icon name="arrow-right" color="#fff" style="margin-left: 20rpx;" size="32"></u-icon>
|
||||
</view>
|
||||
<view class="saoma" @click="btnsaoma" v-else>
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/u9WDcr9fAKNdZtew3NMZ" mode=""></image> 扫码开锁
|
||||
<image src="/static/image/icon6.png" mode=""></image> 扫码开锁
|
||||
</view>
|
||||
</view>
|
||||
<view class="kuaijie">
|
||||
|
|
@ -163,11 +163,11 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="xuanfu" v-if="orderflag == true" @click="btnorder">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/u9WDcr9fAKNdZtew3NMZ" mode=""></image>
|
||||
<image src="/static/image/icon6.png" mode=""></image>
|
||||
</view>
|
||||
<!-- 平台客服弹窗 -->
|
||||
<view class="kefutc" v-if="kefuflag">
|
||||
<image class="bj" src="https://api.ccttiot.com/smartmeter/img/static/uTSMnIgvw7eS13LxZjvt" mode="" @click="kefuflag = false"></image>
|
||||
<image class="bj" src="/static/image/icon14.png" mode="" @click="kefuflag = false"></image>
|
||||
<view class="box">
|
||||
<view class="" style="max-height: 640rpx;overflow: scroll;">
|
||||
<view class="" style="font-weight: 600;color: #3D3D3D;">
|
||||
|
|
@ -181,7 +181,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="boda" @click.stop="btnptkf(item.contact)">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uwTYS0nZBsoaiY8EFlQA" mode=""></image>
|
||||
<image src="/static/image/icon15.png" mode=""></image>
|
||||
<text>拨打</text>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -196,7 +196,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="boda" @click.stop="btnptkf(item.contact)">
|
||||
<image src="https://api.ccttiot.com/smartmeter/img/static/uwTYS0nZBsoaiY8EFlQA" mode=""></image>
|
||||
<image src="/static/image/icon15.png" mode=""></image>
|
||||
<text>拨打</text>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -973,22 +973,27 @@
|
|||
|
||||
// 点击进入商户中心
|
||||
btngl(){
|
||||
if(uni.getStorageSync('wzid')){
|
||||
if (this.list.length < 2) {
|
||||
uni.setStorageSync('adminAreaid', this.list[0].value);
|
||||
uni.setStorageSync('adminname', this.list[0].label)
|
||||
if(this.user.authTypes.includes('1')){
|
||||
if(uni.getStorageSync('wzid')){
|
||||
if (this.list.length < 2) {
|
||||
uni.setStorageSync('adminAreaid', this.list[0].value);
|
||||
uni.setStorageSync('adminname', this.list[0].label)
|
||||
uni.navigateTo({
|
||||
url: `/page_shanghu/guanli/admin_worke?id=${this.list[0].value}`
|
||||
})
|
||||
} else {
|
||||
this.show = true
|
||||
}
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url: `/page_shanghu/guanli/admin_worke?id=${this.list[0].value}`
|
||||
url:'/pages/xiqian'
|
||||
})
|
||||
} else {
|
||||
this.show = true
|
||||
}
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:'/pages/xiqian'
|
||||
url:'/page_user/shiming'
|
||||
})
|
||||
}
|
||||
|
||||
// this.$u.get(`/app/contract/checkSigned?type=1`).then(res =>{
|
||||
// if(res.code == 200){
|
||||
// if(res.data == false){
|
||||
|
|
|
|||
BIN
static/image/20.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
static/image/21.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
static/image/icon1.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
static/image/icon10.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
static/image/icon11.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
static/image/icon12.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
static/image/icon13.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
static/image/icon14.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
static/image/icon15.png
Normal file
|
After Width: | Height: | Size: 769 B |
BIN
static/image/icon16.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
static/image/icon17.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
static/image/icon18.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
static/image/icon19.png
Normal file
|
After Width: | Height: | Size: 349 B |
BIN
static/image/icon2.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
static/image/icon3.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
static/image/icon4.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
static/image/icon5.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
static/image/icon6.png
Normal file
|
After Width: | Height: | Size: 812 B |
BIN
static/image/icon7.png
Normal file
|
After Width: | Height: | Size: 1004 B |
BIN
static/image/icon8.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
static/image/icon9.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
static/image/jt.png
Normal file
|
After Width: | Height: | Size: 454 B |