From 81f10ae2be1cace9a598baa0ba53b5da8a31881f Mon Sep 17 00:00:00 2001 From: 1 <1> Date: Wed, 18 Jun 2025 10:19:38 +0800 Subject: [PATCH] =?UTF-8?q?new=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 86 +++++++++++++++---- public/.eslintrc.js | 1 + public/jweixin-1.3.2.js | 1 + public/uni.webview.1.5.6.js | 1 + src/views/home/1home.vue | 161 ++++++++++++++++++++++++++++++++++++ 5 files changed, 236 insertions(+), 14 deletions(-) create mode 100644 public/.eslintrc.js create mode 100644 public/jweixin-1.3.2.js create mode 100644 public/uni.webview.1.5.6.js create mode 100644 src/views/home/1home.vue diff --git a/README.md b/README.md index d6c7325..8db63ea 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,86 @@ -# set-vue +# 网关控制系统 -## Project setup +## 项目概述 +基于Vue 3开发的网关控制系统,提供车辆控制、LED屏幕管理、音频处理等功能,支持移动端适配。项目使用Capacitor框架支持Android平台。 + +## 主要功能 +- 🚗 车辆远程控制 - 通过MQTT协议控制车辆运动 +- 🚧 锥桶设备管理 - 控制锥桶设备的部署与回收 +- 🔊 音频播放与处理 - 支持音频播放和音频处理功能 +- ⚠️ 预警系统 - 提供安全预警功能 +- 🌐 网关设置 - 系统网关配置管理 +- 🖥️ LED屏幕控制 - 远程控制LED屏幕显示内容 +- 🚘 车牌识别 - 车辆识别功能 + +## 技术栈 +- **核心框架**: Vue 3 + Vue Router 4 + Vuex 4 +- **UI组件库**: Element Plus + Vant +- **通信协议**: MQTT (mqtt.js) +- **HTTP请求**: axios +- **移动端适配**: amfe-flexible + postcss-pxtorem +- **音频处理**: lamejs +- **摇杆控制**: nipplejs +- **调试工具**: vconsole +- **移动端支持**: Capacitor + +## 项目结构 ``` +├── android/ # Android平台代码 +├── public/ # 静态资源 +│ ├── audio-processor.js # 音频处理器 +│ └── web/ # Web相关资源 +├── src/ +│ ├── api/ # API接口 +│ │ ├── ledScreen.js # LED屏幕控制 +│ │ └── ledScreenJsonFormat.js +│ ├── assets/ # 静态资源 +│ ├── components/ # 公共组件 +│ │ ├── MQTT/ # MQTT通信组件 +│ │ └── rocker.vue # 摇杆控制组件 +│ ├── router/ # 路由配置 +│ ├── store/ # Vuex状态管理 +│ └── views/ # 页面视图 +│ ├── CarControl.vue # 车辆控制 +│ ├── ConeControl.vue # 锥桶控制 +│ ├── AudioPlay.vue # 音频播放 +│ └── gateway/ # 网关设置 +├── package.json # 项目依赖 +└── vue.config.js # Vue配置 +``` + +## 安装与运行 +### 开发环境 +```bash +# 安装依赖 npm install -``` -### Compiles and hot-reloads for development -``` +# 启动开发服务器 npm run serve ``` -### Compiles and minifies for production -``` +### 生产构建 +```bash +# 构建生产版本 npm run build + +# 构建Android应用 +npx cap add android +npx cap copy android +npx cap open android ``` -### Lints and fixes files -``` +### 代码检查 +```bash npm run lint ``` +## 注意事项 +1. 使用MQTT协议需要配置正确的broker地址 +2. 移动端适配基于rem布局,设计稿宽度为750px +3. Android平台开发需要配置好Java和Android开发环境 +4. 音频处理功能依赖Web Audio API - - - - -See [Configuration Reference](https://cli.vuejs.org/config/). +## 相关文档 +- [Vue 3文档](https://v3.vuejs.org/) +- [Capacitor文档](https://capacitorjs.com/) +- [MQTT.js文档](https://github.com/mqttjs/MQTT.js) \ No newline at end of file diff --git a/public/.eslintrc.js b/public/.eslintrc.js new file mode 100644 index 0000000..3ca2974 --- /dev/null +++ b/public/.eslintrc.js @@ -0,0 +1 @@ +((e,n)=>{"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)})(this,function(r,e){var a,c,n,i,t,s,d,o,l,u,p,f,m,g,h,I,S,y,v,_,w,T;if(!r.jWeixin)return a={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},c=(()=>{var e,n={};for(e in a)n[a[e]]=e;return n})(),i=(n=r.document).title,t=navigator.userAgent.toLowerCase(),f=navigator.platform.toLowerCase(),s=!(!f.match("mac")&&!f.match("win")),d=-1!=t.indexOf("wxdebugger"),o=-1!=t.indexOf("micromessenger"),l=-1!=t.indexOf("android"),u=-1!=t.indexOf("iphone")||-1!=t.indexOf("ipad"),p=(f=t.match(/micromessenger\/(\d+\.\d+\.\d+)/)||t.match(/micromessenger\/(\d+\.\d+)/))?f[1]:"",m={initStartTime:L(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},g={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:u?1:l?2:-1,clientVersion:p,url:encodeURIComponent(location.href)},h={},I={_completes:[]},S={state:0,data:{}},B(function(){m.initEndTime=L()}),y=!1,v=[],_={config:function(e){C("config",h=e);var o=!1!==h.check;B(function(){if(o)k(a.config,{verifyJsApiList:V(h.jsApiList)},(I._complete=function(e){m.preVerifyEndTime=L(),S.state=1,S.data=e},I.success=function(e){g.isPreVerifyOk=0},I.fail=function(e){I._fail?I._fail(e):S.state=-1},(t=I._completes).push(function(){var n;s||d||h.debug||p<"6.0.2"||g.systemType<0||(n=new Image,g.appId=h.appId,g.initTime=m.initEndTime-m.initStartTime,g.preVerifyTime=m.preVerifyEndTime-m.preVerifyStartTime,_.getNetworkType({isInnerInvoke:!0,success:function(e){g.networkType=e.networkType,n.src="https://open.weixin.qq.com/sdk/report?v="+g.version+"&o="+g.isPreVerifyOk+"&s="+g.systemType+"&c="+g.clientVersion+"&a="+g.appId+"&n="+g.networkType+"&i="+g.initTime+"&p="+g.preVerifyTime+"&u="+g.url}}))}),I.complete=function(e){for(var n=0,i=t.length;n{var n;if("string"==typeof e&&0{var i,t=c[e];return t&&(e=t),t="ok",n&&(i=n.indexOf(":"),"access denied"!=(t=(t=(t=-1!=(t=-1!=(t="failed"==(t="confirm"==(t=n.substring(i+1))?"ok":t)?"fail":t).indexOf("failed_")?t.substring(7):t).indexOf("fail_")?t.substring(5):t).replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=t||(t="permission denied"),""==(t="config"==e&&"function not exist"==t?"ok":t))&&(t="fail"),n=e+":"+t})(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",h.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n)),t.indexOf(":"));switch(t.substring(e+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function V(e){if(e){for(var n=0,i=e.length;n{"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)})(this,function(r,e){var a,c,n,i,t,s,d,o,l,u,p,f,m,g,h,I,S,y,v,_,w,T;if(!r.jWeixin)return a={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},c=(()=>{var e,n={};for(e in a)n[a[e]]=e;return n})(),i=(n=r.document).title,t=navigator.userAgent.toLowerCase(),f=navigator.platform.toLowerCase(),s=!(!f.match("mac")&&!f.match("win")),d=-1!=t.indexOf("wxdebugger"),o=-1!=t.indexOf("micromessenger"),l=-1!=t.indexOf("android"),u=-1!=t.indexOf("iphone")||-1!=t.indexOf("ipad"),p=(f=t.match(/micromessenger\/(\d+\.\d+\.\d+)/)||t.match(/micromessenger\/(\d+\.\d+)/))?f[1]:"",m={initStartTime:L(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},g={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:u?1:l?2:-1,clientVersion:p,url:encodeURIComponent(location.href)},h={},I={_completes:[]},S={state:0,data:{}},B(function(){m.initEndTime=L()}),y=!1,v=[],_={config:function(e){C("config",h=e);var o=!1!==h.check;B(function(){if(o)k(a.config,{verifyJsApiList:V(h.jsApiList)},(I._complete=function(e){m.preVerifyEndTime=L(),S.state=1,S.data=e},I.success=function(e){g.isPreVerifyOk=0},I.fail=function(e){I._fail?I._fail(e):S.state=-1},(t=I._completes).push(function(){var n;s||d||h.debug||p<"6.0.2"||g.systemType<0||(n=new Image,g.appId=h.appId,g.initTime=m.initEndTime-m.initStartTime,g.preVerifyTime=m.preVerifyEndTime-m.preVerifyStartTime,_.getNetworkType({isInnerInvoke:!0,success:function(e){g.networkType=e.networkType,n.src="https://open.weixin.qq.com/sdk/report?v="+g.version+"&o="+g.isPreVerifyOk+"&s="+g.systemType+"&c="+g.clientVersion+"&a="+g.appId+"&n="+g.networkType+"&i="+g.initTime+"&p="+g.preVerifyTime+"&u="+g.url}}))}),I.complete=function(e){for(var n=0,i=t.length;n{var n;if("string"==typeof e&&0{var i,t=c[e];return t&&(e=t),t="ok",n&&(i=n.indexOf(":"),"access denied"!=(t=(t=(t=-1!=(t=-1!=(t="failed"==(t="confirm"==(t=n.substring(i+1))?"ok":t)?"fail":t).indexOf("failed_")?t.substring(7):t).indexOf("fail_")?t.substring(5):t).replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=t||(t="permission denied"),""==(t="config"==e&&"function not exist"==t?"ok":t))&&(t="fail"),n=e+":"+t})(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",h.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n)),t.indexOf(":"));switch(t.substring(e+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function V(e){if(e){for(var n=0,i=e.length;n0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;r("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("redirectTo",{url:encodeURI(n)})},getEnv:function(e){a()?e({uvue:!0}):o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r("postMessage",e.data||{})}},s=/uni-app/i.test(navigator.userAgent),w=/Html5Plus/i.test(navigator.userAgent),u=/complete|loaded|interactive/;var g=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var v=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var _=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var m=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var E=window.jd&&window.jd.miniProgram&&/jdmp/i.test(navigator.userAgent);var x=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var S,h=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},y=[function(e){if(s||w)return window.__uniapp_x_postMessage||window.__uniapp_x_||window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&u.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),d},function(e){if(_)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(g){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(v)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(p)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(m){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(E)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(x)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),d}],M=0;M +
+
+ +
+ + + 信安智能 + + + +
+ + + + + + + + + + + + + +
+
+
+
+
+ + + + +