This commit is contained in:
管理员 2025-09-03 14:52:02 +08:00
parent f6c8141d88
commit 0c5d6bb6bc
78 changed files with 1576 additions and 3748 deletions

62
App.vue
View File

@ -1,15 +1,36 @@
<script>
import soket from "/utils/soket.js"
export default {
onLaunch: function() {
// #ifdef APP-PLUS
setTimeout(()=>{
plus.navigator.setFullscreen(true)
},500)
// #endif
//
let _Android =uni.getStorageSync('cid') || new Date().getTime()
// #ifdef APP
//
function getAndroidId() {
plus.android.importClass("android.provider.Settings");
const context = plus.android.runtimeMainActivity().getApplicationContext();
const androidId = plus.android.invoke("android.provider.Settings$Secure", "getString",
context.getContentResolver(), "android_id");
return androidId;
}
_Android = getAndroidId() || plus.device.getOAID() || uni.getSystemInfoSync().deviceId;
// #endif
uni.setStorageSync('cid', _Android)
if (uni.getStorageSync('token')) {
soket()
uni.reLaunch({
url: "/pages/index"
})
} else {
uni.reLaunch({
url: "/pages/signIn"
})
}
// #ifdef APP-PLUS
setTimeout(() => {
plus.navigator.setFullscreen(true)
}, 500)
// #endif
},
onShow: function() {
console.log('App Show')
@ -21,14 +42,31 @@
</script>
<style>
view{
view {
box-sizing: border-box;
color: #667085;
font-size: 14rpx;
}
.numcolor1{
background: #3336E0;
color: #fff;
}
.numcolor2{
background: #07C688;
color: #fff;
}
.numcolor3{
background: #FF9521;
color: #fff;
}
.numcolor4{
background: #333333;
color: #fff;
}
/* :root{
font-size: calc(100vw / 960px * 32px) !important;
} */
</style>
</style>

View File

@ -19,7 +19,7 @@
<view></view>
</view>
<view class="form">
<view v-for="item in daydata.monthGroups[dayindex].days" @click.stop="settime(`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`)" :class="{del:!daydata.day.includes(`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`),on:chooseday==`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`}">{{item}}</view>
<view v-for="item in daydata.monthGroups[dayindex].days" @click.stop="settime(`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`,!daydata.day.includes(`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`))" :class="{del:!daydata.day.includes(`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`),on:chooseday==`${daydata.monthGroups[dayindex].year}-${daydata.monthGroups[dayindex].month}-${item}`}">{{item}}</view>
</view>
</view>
</view>
@ -84,11 +84,14 @@
Props.modelValue=false;
adssEmits("update:modelValue",false)
}
function settime(time){
chooseday.value=time;
adssEmits("change",time)
Props.modelValue=false;
adssEmits("update:modelValue",false)
function settime(time,type){
if(!type){
chooseday.value=time;
adssEmits("change",time)
Props.modelValue=false;
adssEmits("update:modelValue",false)
}
}
function reset(){
// chooseday.value=daydata.value.day[0];

View File

@ -60,6 +60,8 @@
left: 100%;
background: #E7E7ED;
transition:0.3s;
box-sizing: border-box;
padding-bottom: 1rpx;
&.showon{
left: 0%;
}

View File

@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="page">
<div>设备001</div>
</div>
</body>
</html>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,31 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
}
#imgs{
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,38 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,46 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 5px;
background: #4D7BFF;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 5px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
text-align: center;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,48 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
text-align: center;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
<img src="/map.png"/>
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,48 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
text-align: center;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
<img src="/map.png" crossorigin="anonymous" />
</div>
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,50 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
text-align: center;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
<img src="/map.png" crossorigin="anonymous" />
</div>
<img src="" id="img" />
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
document.getElementById('img').src=dataUrl
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

View File

@ -1,50 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./dom-to-image.min.js"></script>
<style>
*{
margin: 0px;
padding: 0px;
font-size: 0px;
}
#imgs{
display: inline-block;
text-align: center;
}
#imgs div{
background: #4D7BFF;
color: #fff;
font-size: 16px;
padding: 15px;
border-radius: 5px;
}
#imgs span{
width: 2px;
height: 50px;
background: #4D7BFF;
display: inline-block;
}
</style>
</head>
<body>
<div class="page" id="imgs">
<div >设备001</div>
<span></span>
<img src="./map.png" crossorigin="anonymous" />
</div>
<img src="" id="img" />
<script>
domtoimage.toPng(document.getElementById('imgs'))
.then(dataUrl => {
console.log(dataUrl)
document.getElementById('img').src=dataUrl
})
.catch(error => console.error('转换失败', error));
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -71,6 +71,54 @@
}
},
"statics" : {}
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
},
"nativePlugins" : {
"hk-preview" : {
"__plugin_info__" : {
"name" : "海康视频实时预览插件",
"description" : "海康摄像头录像机直连插件,实现设备视频预览和云台控制",
"platforms" : "Android",
"url" : "https://ext.dcloud.net.cn/plugin?id=1981",
"android_package_name" : "blyc.qjcs.com",
"ios_bundle_id" : "",
"isCloud" : true,
"bought" : 1,
"pid" : "1981",
"parameters" : {}
}
}
}
},
@ -98,6 +146,16 @@
},
"vueVersion" : "3",
"h5" : {
"devServer" : {
//
"proxy" : {
"/api" : {
"target" : "http://192.168.1.7:8566",
"changeOrigin" : true,
"secure" : false
}
}
},
"sdkConfigs" : {
"maps" : {}
}

View File

@ -1,9 +1,14 @@
<template>
<navigator url="/pages/index">进入</navigator>
<view class="page">
<image src="/static/signIn/go.jpg" mode="aspectFit"></image>
</view>
</template>
<script setup>
import {onShow,onLoad} from "@dcloudio/uni-app"
// const hk = uni.requireNativePlugin('hk-preview');
onShow(()=>{
// setTimeout(()=>{
// uni.reLaunch({
@ -15,5 +20,18 @@
</script>
<style>
<style scoped lang="scss">
image{
position: absolute;
width: 700rpx;
}
.page{
background: #f1f5fe;
width: 100vw;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
</style>

View File

@ -1,10 +1,14 @@
<template>
<view class="page">
<view class="page" @click.stop="showsignOut=false">
<view class="left">
<view class="top">
<view class="logo">
<view class="logo" @click.stop="showsignOut=true">
<image src="/static/logo.png"></image>
区间测速
<view class="signOut" @click.stop="logOut" v-if="showsignOut">
<view class="icon"><uni-icons type="upload" size="20rpx" color="#fff"></uni-icons></view>
退出登录
</view>
</view>
<view class="tabnav">
<view class="li" :class="{on:selectindex==0}" @click="settab(0)">
@ -42,17 +46,19 @@
</view>
<view class="bottom">
<view class="title">设备</view>
<view class="item on" :class="{on1:selectindex==5}" @click="settab(5)">
<!-- <view class="item on" :class="{on1:selectindex==5}" @click="settab(5)">
<view class="l">
<image src="/static/equipmenton.png"></image>
<view class="name">设备001</view>
</view>
<view class="r"></view>
</view>
<view class="item">
</view> -->
<view class="item" v-for="item in allDevices"
:class="{on1:(selectindex==5 && Devicesid==item.id),on:item.status==2}"
@click="setshowDevices(item)">
<view class="l">
<image src="/static/equipmentno.png"></image>
<view class="name">设备001</view>
<view class="name">设备{{item.encoding}}</view>
</view>
<view class="r"></view>
</view>
@ -81,22 +87,34 @@
</view>
</view>
<view class="popUpNotificationout" v-if="showout">
<view class="box">
<view class="title">提示</view>
<view class="desc">账号已在其他设备登录</view>
<view class="yes" @click="outsignOut">确定</view>
</view>
</view>
</template>
<script setup>
import setmapidimg from "/utils/base64ToFile.js"
import history from "./pages/history.vue"
import setUp from "./pages/setUp.vue"
import statistics from "./pages/statistics.vue"
import passingTheCar from "./pages/passingTheCar.vue"
import warningInformation from "./pages/warningInformation.vue"
import qjcamera from "./pages/camera.vue"
import {
nextTick,
ref,
watch
} from "vue"
import {
getequipment
} from "/appapi/index.js"
import {
onShow
} from "@dcloudio/uni-app"
const refhistory = ref()
const refsetUp = ref()
const refcamera = ref()
@ -104,20 +122,67 @@
const refpassingTheCar = ref()
const refwarningInformation = ref()
const selectindex = ref("")
const showout = ref(false);
const showsignOut = ref(false);
const allDevices = ref([])
const Devicesid = ref('')
//
const state = ref([0, 0, 0, 0, 0, 0]) //0 1 2
nextTick(() => {
settab(0)
})
function settab(index) {
uni.$on('LOGOUT', () => {
showout.value = true;
})
onShow(() => {
//
getequipment().then(r => {
allDevices.value =r.data?r.data.allDevices:[]
})
})
// 退
function outsignOut() {
showout.value = false;
// token
uni.removeStorageSync("token");
// WebSocket
uni.$emit('Socketclose')
//
uni.reLaunch({
url: "/pages/signIn"
})
}
//
function setshowDevices(item) {
if (item.status == 2) {
Devicesid.value = item.id;
settab(5, {
id: Devicesid.value
})
}
}
//
uni.getNetworkType({
success: function(res) {
console.log(res.networkType);
}
});
//
uni.onNetworkStatusChange(function(res) {
console.log(res.isConnected);
console.log(res.networkType);
});
//
function settab(index, data = {}) {
if (index === selectindex.value) {
return
}
selectindex.value = index;
state.value = state.value.map((r, subindex) => {
if (r == 1) {
r = 2;
@ -128,45 +193,95 @@
r = 1;
// load
switchfn(subindex, 'load')
switchfn(subindex, 'show')
switchfn(subindex, 'show', data)
}
if (r == 2 && subindex == index) {
r = 1;
// show
switchfn(subindex, 'show')
switchfn(subindex, 'show', data)
}
return r;
})
}
function switchfn(index, fn) {
function switchfn(index, fn, data = {}) {
switch (index) {
case 0:
refwarningInformation.value[fn]()
refwarningInformation.value[fn](data)
break;
case 1:
refpassingTheCar.value[fn]()
refpassingTheCar.value[fn](data)
break;
case 2:
refhistory.value[fn]()
refhistory.value[fn](data)
break;
case 3:
refstatistics.value[fn]()
refstatistics.value[fn](data)
break;
case 4:
refsetUp.value[fn]()
refsetUp.value[fn](data)
break;
case 5:
refcamera.value[fn]()
refcamera.value[fn](data)
break;
}
}
function logOut() {
uni.showModal({
title: '提示',
content: '确认退出登录?',
success: function(res) {
showsignOut.value = false;
if (res.confirm) {
outsignOut()
}
}
});
}
</script>
<style scoped lang="scss">
.popUpNotificationout {
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background: rgba(0, 0, 0, 0.7);
z-index: 999999;
.box {
position: absolute;
width: 300rpx;
background: #fff;
border-radius: 5rpx;
text-align: center;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 25rpx;
font-size: 11rpx;
.desc {
margin: 15rpx 0;
}
.yes {
background: #4B5EFF;
color: #fff;
line-height: 35rpx;
border-radius: 50rpx;
width: 150rpx;
margin: auto;
margin-top: 30rpx;
}
}
}
.subpage {
width: 100%;
min-height: 100vh;
@ -187,6 +302,7 @@
flex-direction: column;
justify-content: space-between;
padding: 15rpx;
z-index: 9999;
.tabnav {
margin-top: 35rpx;
@ -207,7 +323,7 @@
font-size: 11rpx;
}
}
.text {
font-size: 11rpx;
@ -239,10 +355,47 @@
margin-right: 8rpx;
}
position: relative;
display: flex;
align-items: camera;
color: #fff;
font-size: 16rpx;
.signOut {
position: absolute;
left: 100%;
top: 50%;
transform: translate(0, -50%);
display: flex;
align-items: center;
background: rgba(0, 0, 0, 0.4);
border-radius: 3rpx;
font-size: 11rpx;
flex-wrap: nowrap;
width: 100rpx;
color: #fff;
padding: 3rpx 10rpx;
justify-content: center;
.icon {
transform: rotate(-90deg);
margin-right: 8rpx;
}
&::after {
content: "";
width: 0rpx;
height: 0rpx;
position: absolute;
left: -6rpx;
border-left: 0rpx solid transparent;
border-right: 7rpx solid rgba(0, 0, 0, 0.4);
border-top: 7rpx solid transparent;
border-bottom: 7rpx solid transparent;
}
}
}
.bottom {
@ -295,8 +448,9 @@
background: #37FFAC;
}
}
&.on1{
background: linear-gradient( 45deg, #4F8AFF 0%, #4B5EFF 100%);
&.on1 {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
}
}
}

View File

@ -2,30 +2,34 @@
<view class="camerapage">
<view class="title">摄像头设置</view>
<view class="box">
<video class="video"></video>
<video class="video" object-fit='contain' src="https://media.w3.org/2010/05/sintel/trailer.mp4"></video>
<!-- <sjy-vidbr :option="hp1option" bColor="#ffffff"></sjy-vidbr> -->
<view class="workbench">
<view class="direction">
<view class="item" v-for="(item,index) in 4" :class="{on:keyindex==index+1}" @touchstart="press(index+1)" @touchend="release()">
<view class="item" v-for="(item,index) in 4" :class="{on:keyindex==index+1}"
@touchstart="press(index+1)" @touchend="release()">
<view class="icon">
<uv-icon name="arrow-up-fill" :color="keyindex==index+1?'#fff':'#4D7BFF'" size="20rpx"></uv-icon>
<uv-icon name="arrow-up-fill" :color="keyindex==index+1?'#fff':'#4D7BFF'"
size="20rpx"></uv-icon>
</view>
</view>
</view>
<view class="key">
<view class="item" :class="{on:keyindex==5}" @touchstart="press(5)" @touchend="release()">
<image :src="`/static/camera/${keyindex==5?11:1}.png`"></image>
调焦 -
</view>
<view class="item" :class="{on:keyindex==6}" @touchstart="press(6)" @touchend="release()">
<view class="item" :class="{on:keyindex==6}" @touchstart="press(6)" @touchend="release()">
<image :src="`/static/camera/${keyindex==6?22:2}.png`"></image>
调焦 +
</view>
<view class="item" :class="{on:keyindex==7}" @touchstart="press(7)" @touchend="release()">
<view class="item" :class="{on:keyindex==7}" @touchstart="press(7)" @touchend="release()">
<image :src="`/static/camera/${keyindex==7?33:3}.png`"></image>
聚焦 -
</view>
<view class="item" :class="{on:keyindex==8}" @touchstart="press(8)" @touchend="release()">
<view class="item" :class="{on:keyindex==8}" @touchstart="press(8)" @touchend="release()">
<image :src="`/static/camera/${keyindex==8?44:4}.png`"></image>
聚焦 +
</view>
@ -38,9 +42,16 @@
</template>
<script setup>
import { ref } from 'vue'
import {
ref
} from 'vue'
const keyindex = ref("")
const hp1option = ref({
width: 426 * 1.5,
height: 240 * 1.5,
})
const keyindex=ref("")
function load() {
console.log('预警信息load')
}
@ -52,12 +63,13 @@ import { ref } from 'vue'
function show() {
console.log('预警信息show')
}
function press(index){
keyindex.value=index;
function press(index) {
keyindex.value = index;
}
function release(){
keyindex.value="";
function release() {
keyindex.value = "";
}
defineExpose({
@ -84,46 +96,50 @@ import { ref } from 'vue'
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
.key{
.key {
display: flex;
gap:20rpx 15rpx;
gap: 20rpx 15rpx;
width: 265rpx;
flex-wrap: wrap;
.item{
background: linear-gradient( 180deg, #F4F4F4 0%, #E3E7EE 78%, #DCE0EA 100%);
box-shadow: 0rpx 0rpx 2rpx 0rpx rgba(0,0,0,0.21), inset 0rpx 1rpx 1rpx 0rpx #FFFFFF;
.item {
background: linear-gradient(180deg, #F4F4F4 0%, #E3E7EE 78%, #DCE0EA 100%);
box-shadow: 0rpx 0rpx 2rpx 0rpx rgba(0, 0, 0, 0.21), inset 0rpx 1rpx 1rpx 0rpx #FFFFFF;
display: flex;
align-items: center;
width: 125rpx;
padding:10rpx 15rpx;
padding: 10rpx 15rpx;
justify-content: center;
border-radius: 100rpx;
font-weight: 500;
font-size: 11rpx;
color: #223457;
&.on{
background: linear-gradient( 45deg, #4F8AFF 0%, #4B5EFF 100%);
box-shadow: inset 0rpx 0rpx 4rpx 0rpx rgba(0,0,0,0.33);
&.on {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
box-shadow: inset 0rpx 0rpx 4rpx 0rpx rgba(0, 0, 0, 0.33);
color: #fff;
}
image{
image {
width: 16rpx;
height: 16rpx;
margin-right: 15rpx;
}
}
}
.direction {
width: 130rpx;
height: 130rpx;
background: linear-gradient(180deg, #F4F4F4 0%, #E3E7EE 78%, #DCE0EA 100%);
border: 1rpx solid #d2d2d2;
border-radius: 139rpx;
@ -131,38 +147,42 @@ import { ref } from 'vue'
overflow: hidden;
transform: rotate(45deg);
position: relative;
&::after{
&::after {
content: "";
position: absolute;
width: 54rpx;
height: 54rpx;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
transform: translate(-50%, -50%);
border-radius: 54rpx;
z-index: 2;
background: #fff;
box-shadow: 0rpx 0rpx 2rpx 0rpx rgba(0,0,0,0.21), inset 0rpx 1rpx 15rpx 0rpx rgba(0,0,0,0.21);
box-shadow: 0rpx 0rpx 2rpx 0rpx rgba(0, 0, 0, 0.21), inset 0rpx 1rpx 15rpx 0rpx rgba(0, 0, 0, 0.21);
}
.item {
width: 50%;
height: 50%;
position: absolute;
transform-origin: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
&.on{
background: linear-gradient( 45deg, #4F8AFF 0%, #4B5EFF 100%);
box-shadow: inset 0rpx 0rpx 4rpx 0rpx rgba(0,0,0,0.33);
&.on {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
box-shadow: inset 0rpx 0rpx 4rpx 0rpx rgba(0, 0, 0, 0.33);
}
.icon{
.icon {
transform: rotate(-45deg);
// margin-left: 10rpx;
// margin-top: 10rpx;
}
&:nth-of-type(2) {
transform: rotate(90deg);
}
@ -185,10 +205,15 @@ import { ref } from 'vue'
border-radius: 8rpx;
overflow: hidden;
margin-top: 15rpx;
position: relative;
._video_r1 {}
.video {
width: 100%;
height: 240rpx;
border-radius: 8rpx 8rpx 0 0;
}
}

View File

@ -1,5 +1,5 @@
<template>
<view class="detailstop">
<view class="detailstop" @click="tips=false">
<view class="back" @click="back()">
<image src="/static/back.png"></image>
返回
@ -7,10 +7,28 @@
<view class="title">
超速车辆详情
</view>
<view class="fn" @click="showupimg=true">暂扣</view>
<view class="rbox">
<block v-if="type==1">
<view class="fn" v-if="!yesok" @click="showupimg=true">暂扣</view>
<view class="fn red " :class="{aft:tips}" v-if="yesok" @click="showupimg=true">
确认暂扣
<view class="tc" v-if="tips">
是否确定暂时扣行该车辆请点击此按钮
</view>
</view>
</block>
<block v-if="type==2">
<view class="fn fx" v-if="!yesok" @click="showupimg=true">放行</view>
<view class="fn yfx" :class="{aft:tips}" v-if="yesok" @click="showupimg=true">
确认放行
<view class="tc" v-if="tips">
是否确定放行该车辆请点击此按钮
</view>
</view>
</block>
</view>
</view>
<view class="detailspage">
<view class="detailspage" @click="tips=false">
<view class="time">
<view class="l">超速信息</view>
<view class="r">放行时间2025-08-13 18:0</view>
@ -130,121 +148,177 @@
</view>
<view class="ul">
<view class="title">暂扣照片</view>
<view class="txt img" >
<view class="txt img">
<image src="/static/tjbj.png"></image>
</view>
<view class="title">放行照片</view>
<view class="txt img">
</view>
</view>
</view>
</view>
</view>
<view style="height: 20rpx;"></view>
<view class="okfication" v-if="showupimg" @click.stop="showupimg=false">
<view class="box" @click.stop="showupimg=true">
<view class="close" @click.stop="showupimg=false"> <uni-icons type="closeempty" color="#585757" size="20rpx"></uni-icons>
<view class="box" @click.stop="showupimg=true">
<view class="close" @click.stop="showupimg=false"> <uni-icons type="closeempty" color="#585757"
size="20rpx"></uni-icons>
</view>
<view class="title">
<image src="/static/f.png" mode=""></image>
<view class="txt">
<view class="typename">车辆放行</view>
<view class="time">放行时间2025-08-13 15:0</view>
</view>
</view>
<view class="upimg" @click="getimg">
<view class="icon">
<uni-icons color="#4D7BFF" type="plusempty" size="30rpx"></uni-icons>
<view class="h3">上传照片</view>
<view class="desc">请上传车辆的行驶证或现场车辆照片</view>
</view>
</view>
<view class="fn">
<view @click.stop="showupimg=false">取消</view>
<view>确定</view>
</view>
</view>
<view class="title">
<image src="/static/f.png" v-if="type==2" mode=""></image>
<image src="/static/k.png" v-if="type==1" mode=""></image>
<view class="txt">
<view class="typename">{{type==1?"车辆暂扣":'车辆放行'}}</view>
<view class="time" v-if="type==2">放行时间2025-08-13 15:0</view>
</view>
</view>
<view class="upimg" @click="upimg">
<image :src="imgs" v-if="imgs"></image>
<view class="icon" v-else>
<uni-icons color="#4D7BFF" type="plusempty" size="30rpx"></uni-icons>
<view class="h3">上传照片</view>
<view class="desc">请上传车辆的行驶证或现场车辆照片</view>
</view>
</view>
<view class="fn">
<view @click.stop="showupimg=false">取消</view>
<view @click.stop="yesupimg">确定</view>
</view>
</view>
</view>
</template>
<script setup>
import evn from "/evn.js";
import {
ref
} from "vue";
const showupimg=ref(false)
const type = ref("");
const showupimg = ref(false)
const yesok = ref(false);
const tips = ref(false)
const Emits = defineEmits(["opneinfo"])
const imgs = ref("")
function load() {
console.log('预警信息load')
}
function hide() {
showupimg.value=false;
reset()
}
function show() {
console.log('预警信息show')
function reset() {
type.value = "";
showupimg.value = false;
yesok.value = false;
tips.value = false;
}
function show(id, indextype) {
reset()
type.value = indextype;
}
function yesupimg() {
if(!imgs.value){
uni.showToast({
title:"请上传图片",
icon:"none"
})
return
}
Emits("opneinfo")
showupimg.value = false;
yesok.value = true;
tips.value = true;
}
function back() {
uni.navigateBack()
}
function getimg(){
function upimg() {
uni.chooseImage({
count: 1,
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
count: 1,
success: function(res) {
uni.uploadFile({
url: evn.SERVERUL + '/file/upload', //
filePath: res.tempFilePaths[0],
name: 'file',
success: (uploadFileRes) => {
imgs.value=JSON.parse(uploadFileRes.data).url
}
});
}
});
}
function opneshowupimg(id, indextype) {
reset()
type.value = indextype
showupimg.value = true;
}
defineExpose({
load,
hide,
show
show,
opneshowupimg
})
</script>
<style scoped lang="scss">
.okfication{
<style scoped lang="scss">
.okfication {
position: fixed;
width: 100vw;
height: 100vh;
left: 0px;
top: 0px;
background: rgba(0,0,0,0.3);
.box{
background: rgba(0, 0, 0, 0.3);
.box {
position: absolute;
width:340rpx;
width: 340rpx;
background: #fff;
border-radius: 3rpx;
padding: 15rpx 30rpx;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
.close{
transform: translate(-50%, -50%);
.close {
position: absolute;
top: 15rpx;
right: 15rpx;
}
.title{
.title {
display: flex;
align-items: center;
image{
image {
width: 46rpx;
height: 46rpx;
margin-right: 15rpx;
}
.typename{
.typename {
font-weight: 800;
font-size: 13rpx;
color: #333333;
}
.time{
.time {
font-size: 11rpx;
margin-top: 5rpx;
}
}
.upimg{
border: 1px dashed #4D7BFF;
.upimg {
border: 1px dashed #4D7BFF;
border-radius: 5rpx;
display: flex;
align-items: center;
@ -252,24 +326,32 @@
margin: 15rpx 0;
text-align: center;
height: 140rpx;
.icon{
.h3{
image{
width: 100%;
height: 100%;
}
.icon {
.h3 {
font-weight: 800;
color: #4D7BFF;
font-size: 11rpx;
margin-top: 10rpx;
margin-bottom: 7rpx;
}
.desc{
.desc {
font-size: 11rpx;
}
}
}
.fn{
.fn {
display: flex;
gap:15rpx;
view{
gap: 15rpx;
view {
flex: 1;
text-align: center;
border-radius: 100rpx;
@ -277,16 +359,18 @@
font-size: 11rpx;
font-weight: 800;
background: #E8EEF5;
&:nth-of-type(2){
background: linear-gradient( 45deg, #4F8AFF 0%, #4B5EFF 100%);
&:nth-of-type(2) {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
color: #fff;
}
}
}
}
}
.detailstop{
.detailstop {
display: flex;
align-items: center;
justify-content: space-between;
@ -294,80 +378,142 @@
background: #E7E7ED;
position: sticky;
top: 0rpx;
.back{
.back {
display: flex;
align-items: center;
image{
image {
width: 14rpx;
height: 10rpx;
margin-right: 7rpx;
}
font-weight: 800;
font-size: 11rpx;
color: #4D7BFF;
}
.title{
.title {
font-weight: 800;
font-size: 11rpx;
color: #333333;
}
.fn{
.fn {
font-weight: 800;
background: #FE5F13;
color: #fff;
padding: 7rpx 30rpx;
border-radius: 50rpx;
font-size: 11rpx;
position: relative;
.tc {
position: absolute;
white-space: nowrap;
right: 0px;
font-size: 11rpx;
color: #fff;
background: rgba(0, 0, 0, 0.7);
border-radius: 5rpx;
padding: 10rpx 10rpx;
top: 100%;
margin-top: 14rpx;
box-shadow: 0px 2px 18px 0px rgba(0, 0, 0, 0.22);
}
&.aft {
&::after {
content: "";
position: absolute;
left: 50%;
transform: translate(-50%, 0);
top: 100%;
width: 0rpx;
height: 0rpx;
margin-top: 5rpx;
border-bottom: 10rpx solid rgba(0, 0, 0, 0.7);
border-top: 0rpx solid transparent;
border-left: 8rpx solid transparent;
border-right: 8rpx solid transparent;
}
}
&.red {
background: #D10B0B;
}
&.fx {
background: #08A05F;
}
&.yfx {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
}
}
}
.detailspage{
.detailspage {
background: #fff;
border-radius: 8rpx;
margin:0 15rpx;
margin: 1rpx 15rpx;
padding: 15rpx;
.time{
.time {
display: flex;
align-items: center;
justify-content: space-between;
.l{
.l {
font-weight: 800;
font-size: 11rpx;
color: #333333;
}
.r{
.r {
font-weight: 800;
font-size: 11rpx;
color: #4D7BFF;
}
}
.form{
.form {
margin: 15rpx 0;
border-radius: 3rpx;
overflow: hidden;
border: 1px solid #979797;
.item{
.item {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #979797;
&>view{
&:nth-last-of-type(1){
&>view {
&:nth-last-of-type(1) {
border: none;
}
border-right: 1px solid #979797;
}
&:nth-last-of-type(1){
&:nth-last-of-type(1) {
border: none;
}
.title{
background:#F3F5F8;
.title {
background: #F3F5F8;
font-size: 9rpx;
padding:7rpx;
padding: 7rpx;
width: 90rpx;
text-align: right;
}
.txt{
.txt {
flex: 1;
font-size: 9rpx;
text-align: left;
@ -375,35 +521,42 @@
display: flex;
justify-content: space-between;
align-items: center;
view{
view {
font-size: 9rpx;
}
}
}
}
.imgs{
.imgs {
display: flex;
gap: 15rpx;
.item{
.item {
flex: 1;
.title{
.title {
margin: 7rpx 0;
font-size: 11rpx;
font-weight: 800;
}
.img{
.img {
width: 100%;
height: 135rpx;
position: relative;
border-radius: 6rpx;
overflow: hidden;
image{
image {
width: 100%;
height: 100%;
}
.time{
.time {
position: absolute;
padding: 10rpx;
color: #fff;
@ -414,24 +567,30 @@
}
}
}
.info{
&>.title{
.info {
&>.title {
margin: 7rpx 0;
font-size: 11rpx;
font-weight: 800;
}
.tbody{
.tbody {
border: 1px solid #979797;
border-radius: 3rpx;
overflow: hidden;
.ul{
.ul {
display: flex;
flex-wrap: wrap;
&:nth-last-of-type(1){
&:nth-last-of-type(1) {
border: none;
}
border-bottom: 1px solid #979797;
.title{
.title {
font-size: 9rpx;
width: 55rpx;
text-align: center;
@ -439,15 +598,18 @@
padding: 7rpx;
border-left: 1px solid #979797;
border-right: 1px solid #979797;
&:nth-of-type(1){
border-left:none;
&:nth-of-type(1) {
border-left: none;
}
}
.txt{
.txt {
font-size: 9rpx;
padding: 7rpx;
width: calc((100% - 110rpx) / 2);
image{
image {
width: 100%;
height: 94rpx;
margin: 0rpx;

View File

@ -5,23 +5,23 @@
<view class="tabs">
<view class="left" @click="showdate=true">
<view class="time" >{{chooseday || '选择日期'}}</view>
<view class="time" >{{queryDate || '选择日期'}}</view>
<image src="/static/time.png"></image>
</view>
<view class="right">
<input placeholder="搜索超速车辆" />
<input placeholder="搜索超速车辆" v-model="vehicleNumber" @confirm='confirm(e)' />
<uni-icons type="search" size="16rpx"></uni-icons>
</view>
<view class="reset" @click="reset()">重置</view>
<view class="reset" @click="emptydata">重置</view>
</view>
<scroll-view :scroll-y="true" class="scroll-view">
<view v-for="item in 10" class="item">
<scroll-view :scroll-y="true" class="scroll-view" @scrolltolower='bottomingOut'>
<view v-for="item in list" class="item">
<view class="left">
<view class="t">
<image src="/static/err.png"></image>
<!-- <image src="/static/err.png"></image> -->
车牌号码
</view>
<view class="num">晋MP6400</view>
<view class="num" :class="`numcolor${item.vehicleNumberColor}`">{{item.vehicleNumber}}</view>
</view>
<view class="center">
<view class="thead">
@ -31,14 +31,15 @@
<view>待休息时长</view>
</view>
<view class="tbody">
<view>100km/h</view>
<view>10%-20%</view>
<view>4小时02分钟</view>
<view>15分钟</view>
<view>{{item.averageSpeedText}}</view>
<view>{{item.overspeedLevelInformation}}</view>
<view>{{item.exerciseDurationText}}</view>
<view>{{item.restDurationText}}</view>
</view>
</view>
<view class="right ">已放行</view>
<view class="right " :class="{red:item.status==2}">{{item.statusText}}</view>
</view>
<nynull txt="暂无历史数据" v-if="!list.length"></nynull>
</scroll-view>
</template>
@ -46,11 +47,19 @@
import {
ref
} from 'vue';
import {
gethistory
} from "/appapi/index.js"
const showdate=ref(false)
const chooseday=ref("")
const queryDate=ref("")
const Selectiondate=ref()
const vehicleNumber=ref("")
const list=ref([])
//
const pageSize=ref(40);
const pageNum=ref(1);
const hasNextPage=ref(true)
function load() {
console.log('预警信息load')
}
@ -60,15 +69,54 @@
}
function show() {
console.log('预警信息show')
reset()
getlist()
}
function change(e){
chooseday.value=e;
hasNextPage.value=true;
pageNum.value=1;
list.value=[];
queryDate.value=e;
getlist()
}
function confirm(e){
hasNextPage.value=true;
pageNum.value=1;
list.value=[];
getlist()
}
function emptydata(){
reset()
getlist()
}
function getlist(){
gethistory({
pageNum:pageNum.value,
pageSize:pageSize.value,
queryDate:queryDate.value,
vehicleNumber:vehicleNumber.value
}).then(r=>{
list.value=list.value.concat(r.data.data);
hasNextPage.value=r.data.hasNextPage;
})
}
//
function reset(){
Selectiondate.value.reset();
chooseday.value="";
queryDate.value="";
vehicleNumber.value=""
showdate.value=false;
hasNextPage.value=true;
pageNum.value=1;
list.value=[];
}
//
function bottomingOut(){
if(hasNextPage.value){
pageNum.value=pageNum.value+1;
getlist()
}
}
defineExpose({
load,
@ -115,10 +163,10 @@
line-height: 20rpx;
margin-top: 8rpx;
text-align: center;
background: #FF9521;
font-weight: 800;
font-size: 11rpx;
color: #FFFFFF;
}
}
@ -173,11 +221,14 @@
}
.right {
color: #D10B0B;
font-size: 11rpx;
width: 60rpx;
text-align: center;
padding: 5rpx 0;
&.red{
color: #D10B0B;
}
}
}

View File

@ -1,50 +1,107 @@
<template>
<view class="subpage">
<view class="top">
<view class="left">
<view class="on">设备001</view>
<view>设备002</view>
<view class="left" >
<view v-for="item in devices" :class="{on:deviceId==item.encoding}" @click="setdeviceid(item.encoding)">设备{{item.encoding}}</view>
</view>
<view class="r">
2025年08月13日 14:34:00
{{infodata.queryTime}}
<view>区间测速实时监测中</view>
</view>
</view>
<view class="center">
<view class="item">
<view class="num">333421</view>
<view class="num">{{infodata.todayCount}}</view>
<view class="title">当天过车数量</view>
</view>
<view class="item">
<view class="num">5分17秒</view>
<view class="num">{{infodata.lastMonitoringTime}}</view>
<view class="title">距离最后一次监测已过去</view>
</view>
</view>
<scroll-view :scroll-y="true">
<view class="li" v-for="item in 10">
<scroll-view :scroll-y="true" @scrolltolower='bottomingOut'>
<view class="li" v-for="item in list">
<view class="l">
车牌号码
<view class="color1">
晋MP6400
<view class="color1" :class="`numcolor${item.vehicleNumberColor}`">
{{item.vehicleNumber}}
</view>
</view>
<view class="r">2025-08-13 15:56:00</view>
<view class="r">{{item.queryTime}}</view>
</view>
<nynull txt='暂无过车数据' v-if="!list.length"></nynull>
</scroll-view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
getequipment,
getpassingTheCar
} from "/appapi/index.js"
const deviceId = ref("")
const devices=ref([]);
const infodata=ref({})
const list=ref([])
function load(){
//
const pageSize=ref(40);
const pageNum=ref(1);
const hasNextPage=ref(true)
function load() {
console.log('过车信息load')
}
function hide(){
function hide() {
console.log('过车信息hide')
}
function show(){
function show() {
getequipmentinfo()
console.log('过车信息show')
}
// ID
function setdeviceid(id){
deviceId.value=id;
reset()
getinfo()
}
//
function getequipmentinfo(){
reset()
getequipment().then(r=>{
devices.value=r.data.allDevices;
deviceId.value=devices.value[0].encoding
getinfo()
})
}
//
function getinfo() {
getpassingTheCar({deviceId:deviceId.value,pageNum:pageNum.value,pageSize:pageSize.value}).then(r=>{
infodata.value=r.data;
list.value=list.value.concat(r.data.vehicleList)
hasNextPage.value=r.data.hasNextPage
})
}
//
function bottomingOut(){
if(hasNextPage.value){
pageNum.value=pageNum.value+1;
getinfo()
}
}
//
function reset(){
hasNextPage.value=true;
pageNum.value=1;
list.value=[];
}
defineExpose({
load,
hide,
@ -53,77 +110,91 @@
</script>
<style scoped lang="scss">
.subpage{
.subpage {
padding: 15rpx;
.top{
.top {
display: flex;
align-items: center;
justify-content: space-between;
.left{
border-radius:3rpx;
.left {
border-radius: 3rpx;
background: #fff;
display: flex;
align-items: center;
overflow: hidden;
view{
view {
width: 90rpx;
text-align: center;
line-height: 33rpx;
color: #4D7BFF;
font-size: 11rpx;
&.on{
background: linear-gradient( 45deg, #4F8AFF 0%, #4B5EFF 100%);
&.on {
background: linear-gradient(45deg, #4F8AFF 0%, #4B5EFF 100%);
color: #fff;
}
}
}
.r{
.r {
display: flex;
align-items: center;
font-weight: 800;
font-size: 11rpx;
view{
view {
font-size: 11rpx;
color: #06765A;
background: linear-gradient( 173deg, #FFFFFF 0%, #C6FDDE 100%);
background: linear-gradient(173deg, #FFFFFF 0%, #C6FDDE 100%);
border-radius: 50rpx;
padding: 3rpx 10rpx;
margin-left: 15rpx;
}
}
}
.center{
.center {
display: flex;
gap: 15rpx;
justify-content: space-between;
.item{
.item {
border-radius: 3rpx;
text-align: center;
margin: 15rpx 0;
flex: 1;
padding: 18rpx 0;
.num{
.num {
font-size: 22rpx;
color: #4D7BFF;
font-weight: 800;
}
.title{
.title {
margin-top: 5rpx;
font-size: 11rpx;
}
&:nth-of-type(1){
background: linear-gradient( 177deg, #D6E4FA 0%, #FFFFFF 100%);
&:nth-of-type(1) {
background: linear-gradient(177deg, #D6E4FA 0%, #FFFFFF 100%);
}
&:nth-of-type(2){
background: linear-gradient( 178deg, #D6FAE4 0%, #FFFFFF 100%);
&:nth-of-type(2) {
background: linear-gradient(178deg, #D6FAE4 0%, #FFFFFF 100%);
}
}
}
scroll-view{
scroll-view {
box-sizing: border-box;
height: calc(100vh - 175rpx);
.li{
height: calc(100vh - 175rpx);
.li {
display: flex;
padding: 15rpx;
background: #fff;
@ -131,23 +202,26 @@
align-items: center;
border-radius: 3rpx;
margin-bottom: 15rpx;
.l{
.l {
display: flex;
align-items: center;
color: #000;
font-size: 11rpx;
view{
background:#FF9521 ;
view {
text-align: center;
padding: 3rpx 10rpx;
border-radius: 3rpx;
margin-left: 15rpx;
color: #fff;
font-weight: 800;
font-size: 11rpx;
}
}
.r{
.r {
font-size: 11rpx;
}
}

File diff suppressed because one or more lines are too long

View File

@ -4,96 +4,194 @@
<view class="tabs">
<view class="left" @click="showdate=true">
<view class="time" :class="{on:chooseday}">
<view class="time" :class="{on:queryDate}">
<block v-if="chooseday">{{chooseday}}{{getDateDescription(chooseday)}}</block>
<block v-if="!chooseday">选择日期</block>
<block v-if="queryDate">{{queryDate}}{{getDateDescription(queryDate)}}</block>
<block v-if="!queryDate">选择日期</block>
</view>
<image src="/static/time.png"></image>
</view>
<view class="reset" @click="reset()">重置</view>
</view>
<view class="totalTime">
<view class="name">281 - 内蒙古锡盟交管支队二连浩特市</view>
<view class="time">16小时19分35秒</view>
<view class="name">{{info.unitName}}</view>
<view class="time">{{info.monitoringDuration}}</view>
</view>
<view class="ul">
<view class="li">
<view class="num">295</view>
<view class="num">{{info.totalVehicles}}</view>
<view class="title">过车数量</view>
</view>
<view class="li">
<view class="num">295</view>
<view class="num">{{info.warningCount}}</view>
<view class="title">预警数量</view>
</view>
<view class="li">
<view class="num">295</view>
<view class="num">{{info.warningRatio}}</view>
<view class="title">预警比例</view>
</view>
<view class="li">
<view class="num">295</view>
<view class="num">{{info.seizureRatio}}</view>
<view class="title">查扣比例</view>
</view>
</view>
<view class="statistics">
<view class="title">各超速类型数量对比</view>
<view class="charts-box">
<qiun-data-charts type="bar" :opts="opts" :chartData="chartData" />
<view class="charts-box" id="echart" :info='info' :change:info='echart.updata' :init="charts"
:change:init="echart.init">
<!-- <qiun-data-charts type="bar" :opts="opts" :chartData="chartData" /> -->
</view>
</view>
</template>
<script module="mapbaidu" lang="renderjs">
<script module="echart" lang="renderjs">
let myChart
export default {
mounted() {
// echart
if (typeof window.echarts === 'function') {
this.init()
} else {
//
const script = document.createElement('script')
// view www www
script.src = 'static/echarts.min.js'
document.head.appendChild(script)
}
},
methods: {
init(e) {
if (!window.echarts) {
return
}
},
updata(r) {
if (window.echarts) {
let allnum=r.overspeedStatistics.overspeed50Plus+r.overspeedStatistics.overspeed20To50+r.overspeedStatistics.overspeed10To20+r.overspeedStatistics.overspeedUnder10
myChart = echarts.init(document.getElementById("echart"))
myChart.setOption({
grid: {
top: 20,
right: 0,
bottom: 15,
left: 0,
},
xAxis: {
type: 'value',
},
yAxis: {
type: 'category',
data: ["超速50%以上", "超速20%-50%", "超速10%-20%", "超速10%以下"]
},
series: [{
barWidth: 20,
type: 'bar',
color: "#4D7BFF",
label: {
show: true,
position: 'right',
width:100,
formatter:function(a){
return Number(a.value/allnum*100).toFixed(2)+'%';
}
},
emphasis:{
disabled:true
},
data: [
r.overspeedStatistics.overspeed50Plus,
r.overspeedStatistics.overspeed20To50,
r.overspeedStatistics.overspeed10To20,
r.overspeedStatistics.overspeedUnder10,
],
},
{
barGap: "-100%",
silent: true,
barWidth: 20,
type: 'bar',
color: "#4D7BFF",
label: {
show: true,
position: 'insideTopRight',
color: "#fff"
},
emphasis:{
disabled:true
},
data: [
r.overspeedStatistics.overspeed50Plus,
r.overspeedStatistics.overspeed20To50,
r.overspeedStatistics.overspeed10To20,
r.overspeedStatistics.overspeedUnder10,
],
},
{
barGap: "-100%",
silent: true,
barWidth: 20,
type: 'bar',
itemStyle:{
color: "rgba(255,255,255,0)",
},
emphasis:{
disabled:true
},
label: {
show: true,
position: 'insideTopRight',
color: "#fff"
},
data: [
r.overspeedStatistics.overspeed50Plus+10,
r.overspeedStatistics.overspeed20To50+10,
r.overspeedStatistics.overspeed10To20+10,
r.overspeedStatistics.overspeedUnder10+10,
],
}
]
})
}
}
}
}
</script>
<script setup>
import {
ref
} from 'vue'
import {
getmonitorStatistics
} from "/appapi/index.js"
const showdate = ref(false)
const Selectiondate = ref();
const chooseday = ref("")
const opts = {
color: ["#4D7BFF"],
padding: [15, 30, 0, 5],
enableScroll: false,
legend: {
show: false,
},
showBox: false,
xAxis: {
boundaryGap: "justify",
disableGrid: false,
min: 0,
axisLine: false,
max: 40
},
yAxis: {},
extra: {
bar: {
type: "group",
width: 20,
meterBorde: 1,
meterFillColor: "#FFFFFF",
activeBgColor: "#000000",
activeBgOpacity: 0.08,
barBorderRadius: [6, 6, 0, 0],
seriesGap: 2,
categoryGap: 2,
labelPosition: "center"
},
const queryDate = ref("")
const info = ref({})
}
}
const chartData =ref({})
const chartData = ref({})
const charts = ref(false);
function change(e) {
chooseday.value = e;
queryDate.value = e;
getinfo()
}
function reset() {
Selectiondate.value.reset();
chooseday.value = "";
queryDate.value = "";
getinfo()
}
function getDateDescription(dateString) {
@ -119,7 +217,7 @@
// 使
function load() {
console.log('统计load')
@ -127,18 +225,22 @@
function hide() {
console.log('统计hide')
charts.value = false;
}
function show() {
chartData.value={
categories: ["超速50%以上", "超速20%-50%", "超速10%-20%", "超速10%以下"],
series: [{
name: "",
data: [35, 36, 31, 33]
},
]
};
getinfo()
}
function getinfo() {
getmonitorStatistics({
queryDate: queryDate.value
}).then(r => {
info.value = r.data;
})
}
defineExpose({
load,
@ -151,54 +253,64 @@
.charts-box {
height: 150rpx;
}
.totalTime{
background:url("/static/tjbj.png");
.totalTime {
background: url("/static/tjbj.png");
background-size: 100% 100%;
margin:0 15rpx;
margin: 0 15rpx;
padding: 15rpx;
.name{
.name {
font-weight: 500;
font-size: 13rpx;
color: #333333;
}
.time{
.time {
font-weight: 700;
font-size: 17rpx;
color: #4D7BFF;
margin-top: 11rpx;
}
}
.ul{
.ul {
display: flex;
gap: 15rpx;
margin: 15rpx;
.li{
.li {
flex: 1;
text-align: center;
background: #fff;
border-radius: 3rpx;
padding: 17rpx 0;
.num{
.num {
font-weight: 500;
font-size: 16rpx;
color: #4D7BFF;
}
.title{
.title {
font-size: 11rpx;
margin-top: 9rpx;
}
}
}
.statistics{
.statistics {
background: #fff;
margin: 15rpx;
border-radius: 3rpx;
padding: 15rpx;
.title{
.title {
font-size: 11rpx;
}
}
.tabs {
display: flex;
align-items: center;

View File

@ -1,49 +1,51 @@
<template>
<view class="topstatistics">
<view class="li">
<view class="num">超速20%以上</view>
<view class="num">{{info.statistics?.warningLevel || '暂无'}}</view>
<view class="title">预警级别</view>
</view>
<view class="li">
<view class="num">438公里</view>
<view class="num">{{info.statistics?.regionalNetworkDistance || '暂无'}}</view>
<view class="title">区间距离</view>
</view>
<view class="li">
<view class="num">80km/h</view>
<view class="num">{{info.statistics?.intervalSpeedLimit || '暂无'}}</view>
<view class="title">区间限速</view>
</view>
<view class="li">
<view class="num">4小时38分钟</view>
<view class="num">{{info.statistics?.longestDrivingDuration || '暂无'}}</view>
<view class="title">最短行驶时长</view>
</view>
</view>
<view class="tabs">
<view class="left">
<view class="nav on">
<view class="nav" :class="{on:status==2}" @click="setstatus(2)">
超速车辆
</view>
<view class="nav">
<view class="nav" :class="{on:status==3}" @click="setstatus(3)">
暂扣车辆
</view>
<view class="nav">
<view class="nav" :class="{on:status==4}" @click="setstatus(4)">
放行车辆
</view>
</view>
<view class="right">
<input placeholder="搜索超速车辆" />
<uni-icons type="search" size="16rpx"></uni-icons>
<input placeholder="搜索超速车辆" @confirm="getinfo" v-model="keyword" />
<uni-icons type="search" size="16rpx" @click="getinfo"></uni-icons>
</view>
</view>
<scroll-view :scroll-y="true" class="scroll-view">
<view v-for="item in 10" class="item">
<view v-for="item in info.data" class="item" @click.stop="listwithhold(item.id,status==2?1:2)">
<view class="left">
<view class="t">
<image src="/static/err.png"></image>
<image v-if="status==2" src="/static/err.png"></image>
车牌号码
</view>
<view class="num">晋MP6400</view>
<view class="num" :class="`numcolor${item.vehicleNumberColor}`">
{{item.vehicleNumber}}
</view>
</view>
<view class="center">
<view class="center" v-if="status==2">
<view class="thead">
<view>平均车速</view>
<view>超速比例</view>
@ -51,17 +53,45 @@
<view>待休息时长</view>
</view>
<view class="tbody">
<view>100km/h</view>
<view>10%-20%</view>
<view>4小时02分钟</view>
<view>15分钟</view>
<view>{{item.averageSpeed}}</view>
<view>{{item.overspeedRatio}}</view>
<view>{{item.actualDrivingDuration}}</view>
<view>{{item.restDuration}}</view>
</view>
</view>
<view class="right" @click="showdetails=true">暂扣</view>
<view class="center center2" v-if="status==3">
<view class="thead">
<view>待休息时长</view>
<view>待放行时间</view>
</view>
<view class="tbody">
<view>{{item.restDuration}}</view>
<view>{{item.overspeedRatio}}</view>
</view>
</view>
<view class="center center3" v-if="status==4">
<view class="thead">
<view>平均车速</view>
<view>超速比例</view>
<view>休息时长</view>
<view>放行时间</view>
</view>
<view class="tbody">
<view>{{item.averageSpeed}}</view>
<view>{{item.overspeedRatio}}</view>
<view>{{item.restDuration}}</view>
<view>{{item.restDuration}}</view>
</view>
</view>
<view class="right red" v-if="status==2" @click.stop="withhold(item.id,1)">暂扣</view>
<view class="right green" v-if="status==3" @click.stop="withhold(item.id,2)">放行</view>
</view>
<nynull v-if="!info.data?.length"></nynull>
</scroll-view>
<pageanimation v-model="showdetails" @close="refdetails.hide()">
<pagedetails ref="refdetails" />
<pagedetails ref="refdetails" @opneinfo='opneshowdetails' />
</pageanimation>
</template>
@ -70,22 +100,57 @@
import {
ref
} from "vue";
import {
getwarningList
} from "/appapi/index.js"
import pagedetails from "./details.vue";
const refdetails = ref()
const showdetails=ref(false)
const showdetails=ref(false)
const status =ref(2)
const pageSize=ref(999)
const info=ref({
data:[]
});
const keyword=ref("")
function load() {
console.log('预警信息load')
}
function opneshowdetails(){
showdetails.value=true;
}
function hide() {
console.log('预警信息hide')
showdetails.value=false;
refdetails.value.hide()
}
function getinfo(){
info.value.data=[];
getwarningList({status:status.value,keyword:keyword.value,pageSize:pageSize.value}).then(r=>{
info.value=r.data;
})
}
function setstatus(type){
status.value=type;
getinfo()
}
function show() {
console.log('预警信息show')
getinfo()
}
//
//
function listwithhold(id,type){
showdetails.value=true;
refdetails.value.show(id,type)
}
function withhold(id,type){
//
refdetails.value.opneshowupimg(id,type)
}
defineExpose({
load,
hide,
@ -129,10 +194,10 @@
line-height: 20rpx;
margin-top: 8rpx;
text-align: center;
background: #FF9521;
font-weight: 800;
font-size: 11rpx;
color: #FFFFFF;
}
}
@ -184,18 +249,42 @@
color: #333333;
}
}
&.center2{
.thead {
view{
width: 180rpx;
}
}
}
&.center3{
.thead {
view{
width: 110rpx;
}
}
}
}
.right {
border-radius: 15rpx;
border: 1rpx solid #D10B0B;
color: #D10B0B;
font-weight: 600;
font-size: 11rpx;
width: 60rpx;
text-align: center;
padding: 5rpx 0;
&.green{
border: 1rpx solid #4D7BFF;
color: #4D7BFF;
}
&.red{
border: 1rpx solid #D10B0B;
color: #D10B0B;
}
&.grey{
border: 1rpx solid #666666;
color: #666666;
}
}
}

View File

@ -7,96 +7,159 @@
<view class="from">
<view class="input" :class="{on:isname}">
<image src="/static/signIn/2.png"></image>
<input cursor-spacing='15' @focus="isname=true" @blur="isname=false" placeholder="请填写账号"/>
<input cursor-spacing='15' v-model="name" @focus="isname=true" @blur="isname=false" placeholder="请填写账号" />
</view>
<view class="input" :class="{on:ispassword}">
<image src="/static/signIn/1.png"></image>
<input cursor-spacing='15' v-model="password" @focus="ispassword=true" @blur="ispassword=false" :type="!showpassword?'password':'text'" placeholder="请填密码"/>
<input cursor-spacing='15' v-model="password" @focus="ispassword=true" @blur="ispassword=false"
:type="!showpassword?'password':'text'" placeholder="请填密码" />
<view @click="showpassword=!showpassword" v-if="password.length">
<uni-icons type="eye-slash-filled" v-if="!showpassword" size="16rpx"></uni-icons>
<uni-icons type="eye-filled" v-else size="16rpx"></uni-icons>
</view>
</view>
<view class="checkbox">
<checkbox value="cb" activeBackgroundColor='#4D7BFF' :checked="true" color="#ffffff" style="transform:scale(0.7)" />
<view class="checkbox" @click.stop="memory=!memory">
<checkbox @click.stop="memory=!memory" activeBackgroundColor='#4D7BFF' :checked="memory" color="#ffffff"
style="transform:scale(0.7)" />
记住密码
</view>
<view class="submit">登录</view>
<view class="submit" @click="submit">登录</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import {
applogin
} from "/appapi/index.js"
import soket from "/utils/soket.js"
import {onShow} from "@dcloudio/uni-app"
import {
ref
} from 'vue';
const isname = ref(false);
const ispassword = ref(false);
const showpassword = ref(false)
const name = ref(uni.getStorageSync('name'));
const password = ref(uni.getStorageSync('password'))
const memory=ref(true)
onShow(()=>{
// Socket
uni.closeSocket()
})
function submit(){
if(!name.value){
uni.showToast({
title:"请填写账号",
icon:"none"
})
return
}
if(!password.value){
uni.showToast({
title:"请填写密码",
icon:"none"
})
return
}
const isname=ref(false);
const ispassword=ref(false);
const showpassword=ref(false)
const name=ref("");
const password=ref("")
applogin({
username:name.value,
password:password.value,
deviceType:" android"
}).then(r=>{
// soket
uni.setStorageSync('USERID',r.data.user.userId)
soket()
uni.reLaunch({
url:"/pages/index"
})
if(memory.value){
uni.setStorageSync('name',name.value);
uni.setStorageSync('password',password.value);
}else{
uni.removeStorageSync('name')
uni.removeStorageSync('password')
}
})
}
function ccc(e){
console.log(e)
}
</script>
<style scoped lang="scss">
.page{
.page {
width: 100vw;
height: 100vh;
position: relative;
.bj{
.bj {
position: absolute;
width: 100%;
height: 100%;
}
.box{
.box {
position: fixed;
top: 50%;
right: 110rpx;
transform: translate(0%,-50%);
.title{
transform: translate(0%, -50%);
.title {
height: 40rpx;
width: 230rpx;
}
.desc{
.desc {
text-align: center;
color: #667085;
font-size: 15rpx;
margin: 0rpx 0 20rpx 0;
margin: 0rpx 0 20rpx 0;
}
.from{
.from {
margin-top: 34rpx;
.input{
.input {
display: flex;
align-items: center;
border: 1px solid #D0D5DD;
padding:7rpx 10rpx;
padding: 7rpx 10rpx;
border-radius: 5rpx;
margin-bottom: 9rpx;
background: #fff;
&.on{
&.on {
border: 1px solid #4D7BFF;
}
input{
input {
font-size: 12rpx;
margin-right: 7rpx;
}
image{
image {
width: 10rpx;
height: 13rpx;
margin-right: 10rpx;
}
}
}
.checkbox{
.checkbox {
display: flex;
align-items: center;
color: #667085;
margin: 15rpx 0;
font-size: 11rpx;
}
.submit{
.submit {
text-align: center;
background: #4D7BFF;
color: #fff;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -57,6 +57,9 @@ const cfe = {
yAxisFormatDemo:function (value, index) {
return value + '元';
},
"percentage":function(val, index, series, opts){
return val+'%'
},
seriesFormatDemo:function(res){
return res.name + '年' + res.value + '元';
}

View File

@ -59,6 +59,10 @@ const cfu = {
"xAxisDemo1":function(val, index, opts){return val+'年';},
"xAxisDemo2":function(val, index, opts){return formatDateTime(val,'h:m')},
"seriesDemo1":function(val, index, series, opts){return val+'元'},
"percentage":function(val, index, series, opts){
return val+'%'
},
"tooltipDemo1":function(item, category, index, opts){
if(index==0){
return '随便用'+item.data+'年'

View File

@ -1,50 +0,0 @@
export default function lzFileWriter(id, fn) {
plus.io.resolveLocalFileSystemURL('/static/html/index.html', function(entry) {
let _we = plus.webview.create(entry.toLocalURL());
_we.evalJS(`settitle("${id}");`)
plus.globalEvent.addEventListener('plusMessage', (e) => {
if(e.data.id==id){
geturl(e.data.img, e.data.id + ".png",e.data.id)
_we.close()
}
})
})
function geturl(base64, fileName,imgid) {
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getFile(fileName, {
create: true
}, function(fileEntry) {
// 获得平台绝对路径
var fullPath = fileEntry.fullPath;
// 引入安卓原生类
var Base64 = plus.android.importClass("android.util.Base64");
var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
//如果文件不存在则创建文件,如果文件存在则删除文件后重新创建文件
var out = new FileOutputStream(fullPath);
/**
* 此处需要把base64前缀去除在写入字节流数组
* 去除头部data:image/jpg;base64,留下base64编码后的字符串
**/
let index = base64.indexOf(',')
let base64Str = base64.slice(index + 1, base64.length)
//base64解密得到字节流bytes
var bytes = Base64.decode(base64Str, 0);
try {
out.write(bytes); // byte 数组写入此文件输出流中。
out.flush(); //刷新写入文件中去。
out.close(); //关闭此文件输出流并释放与此流有关的所有系统资源。
uni.setStorageSync(imgid,fullPath)
fn(fullPath)
} catch (e) {
console.log(e.message);
}
});
});
}
}

View File

@ -1,20 +0,0 @@
export default function(url,data,method="get"){
return new Promise((resolve, reject)=>{
uni.request({
url: 'https://api.map.baidu.com/direction/v2/'+url, //仅为示例,并非真实接口地址。
data: {
ak:"23rLBU4tBLeNEMsxCCnXXw6aYyuOJCwY",
...data
},
method:method,
success: (res) => {
console.log(res.data)
if(res.data.status==0){
resolve(res.data.result)
}
}
});
})
}