Compare commits

..

2 Commits

Author SHA1 Message Date
qubiaobiao 9325ec4bbe 修复关闭软件时的bug 2024-04-07 17:17:15 +08:00
qubiaobiao 9a3ccef9a0 沙河客户定制版本 2024-02-22 11:37:51 +08:00
13 changed files with 3574 additions and 3725 deletions

View File

@ -2,47 +2,41 @@
"name": "beidou-satellite-data-monitor", "name": "beidou-satellite-data-monitor",
"description": "beidou-satellite-data-monitor", "description": "beidou-satellite-data-monitor",
"author": "hwasmart", "author": "hwasmart",
"version": "5.6.0", "version": "5.5.9",
"main": "dist/main/app.js", "main": "dist/main/app.js",
"scripts": { "scripts": {
"dev": "vite --port=3000", "install": "electron-rebuild",
"dev": "vite",
"build": "vite build", "build": "vite build",
"serve": "vite preview", "serve": "vite preview",
"electron:dev": "cross-env NODE_ENV=development electron index.js", "electron:dev": "cross-env NODE_ENV=development electron index.js",
"electron:build": "rimraf dist && vite build && tsc -p tsconfig.electron.json && electron-builder" "electron:build": "rimraf dist && vite build && tsc -p tsconfig.electron.json && electron-builder"
}, },
"dependencies": { "dependencies": {
"@serialport/bindings": "^9.2.9",
"@serialport/parser-inter-byte-timeout": "^12.0.0",
"cesium": "^1.88.0", "cesium": "^1.88.0",
"conf": "^13.0.1",
"echarts": "^5.1.0", "echarts": "^5.1.0",
"electron-store": "^8.0.0", "electron-store": "^8.0.0",
"nmea": "http://git.hwasmart.com/bd_group/node-nmea.git", "nmea": "http://git.hwasmart.com/bd_group/node-nmea.git",
"serialport": "^12.0.0", "postcss": "^8.4.38",
"through": "^2.3.8", "serialport": "10.0.0",
"vue": "^3.2.26", "vue": "^3.2.26",
"vue-cesium": "^v3.2.8", "vue-cesium": "3.0.2-beta.13",
"vue-echarts": "^6.0.0-rc.4" "vue-echarts": "^6.0.0-rc.4"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.5.4",
"@vitejs/plugin-vue": "^1.1.5", "@vitejs/plugin-vue": "^1.1.5",
"@vue/compiler-sfc": "^3.2.26", "@vue/compiler-sfc": "^3.2.26",
"autoprefixer": "^10.2.5", "autoprefixer": "^10.2.5",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"electron": "^19.0.3", "electron": "^13.6.3",
"electron-builder": "^25.0.5", "electron-builder": "^22.10.5",
"electron-rebuild": "2.3.5", "electron-rebuild": "2.3.5",
"postcss": "^8.2.10",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rollup-plugin-copy": "^3.4.0", "rollup-plugin-copy": "^3.4.0",
"tailwindcss": "^2.1.1", "tailwindcss": "^2.1.1",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"typescript": "^5.5.4", "typescript": "^4.2.3",
"vite": "^2.0.5", "vite": "^2.0.5"
"vite-plugin-electron": "^0.28.7",
"vite-plugin-electron-renderer": "^0.14.5"
}, },
"build": { "build": {
"appId": "hwasmart.id", "appId": "hwasmart.id",

View File

@ -1,16 +1,16 @@
import { app, screen, globalShortcut, BrowserWindow, ipcMain, dialog } from 'electron' import { app, screen, globalShortcut, BrowserWindow, ipcMain, dialog } from 'electron'
import { join } from "path" import { join } from "path"
import config from './config.js' import config from './config'
import './load-serialport' import './load-serialport'
import { keyword } from './KeyWord' import { keyword } from './KeyWord'
import child_process from 'child_process' const child_process = require('child_process')
import crypto from 'crypto' const crypto = require('crypto')
function queryPass(passPath: string, passValue: string) { function queryPass(passPath: string, passValue: string) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
child_process.exec(`reg query ${passPath} /v ${passValue}`, (error: Error | null, stdout: string, stderr: string) => { child_process.exec(`reg query ${passPath} /v ${passValue}`, (error: Error, stdout: string, stderr: string) => {
if (error) { if (error) {
reject(error) reject(error)
return return
@ -26,7 +26,7 @@ function queryPass(passPath: string, passValue: string) {
function queryKey(keyPath: string, keyValue: string) { function queryKey(keyPath: string, keyValue: string) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
child_process.exec(`reg query ${keyPath} /v ${keyValue}`, (error: Error | null, stdout: string, stderr: string) => { child_process.exec(`reg query ${keyPath} /v ${keyValue}`, (error: Error, stdout: string, stderr: string) => {
if (error) { if (error) {
reject(error) reject(error)
return return

View File

@ -1,10 +1,8 @@
// import Store from 'electron-store' import Store from 'electron-store'
const Store = require('electron-store')
const store = new Store() const store = new Store()
const set = (key, val) => store.set(key, val) const set = (key, val) => store.set(key, val)
const get = (key) => store.get(key) const get = (key) => store.get(key)
// export default {set, get} export default {set, get}
module.exports = { set, get }

View File

@ -1,6 +1,6 @@
import { SerialPort } from 'serialport' import SerialPort from 'serialport'
import { InterByteTimeoutParser } from '@serialport/parser-inter-byte-timeout' import InterByteTimeout from '@serialport/parser-inter-byte-timeout'
import config from './config.js' import config from './config'
import sendMsg from './ipcRendererManager' import sendMsg from './ipcRendererManager'
import NMEAHandler from './api/NMEAHandler' import NMEAHandler from './api/NMEAHandler'
@ -10,6 +10,7 @@ const getSerialPortConstructorArguments = (ports) => {
ports = ports.filter((port) => port.path != 'COM1') ports = ports.filter((port) => port.path != 'COM1')
if (ports.length == 0) return if (ports.length == 0) return
// console.log(ports, '=====================')
const serialport = config.get('serialport') const serialport = config.get('serialport')
const path = ( serialport && serialport.path ) ? serialport.path : ports[0].path const path = ( serialport && serialport.path ) ? serialport.path : ports[0].path
const baudRate = ( serialport && serialport.baudRate ) ? serialport.baudRate : DEFAULT_BAUDRATE const baudRate = ( serialport && serialport.baudRate ) ? serialport.baudRate : DEFAULT_BAUDRATE
@ -26,8 +27,9 @@ const openSerialport = (ports) => {
const { path, baudRate } = constructorArguments const { path, baudRate } = constructorArguments
const serialPort = new SerialPort({ path, baudRate }) // console.log(path, baudRate, '++++++++++++++===');
const parser = serialPort.pipe(new InterByteTimeoutParser({interval: 300})) const serialPort = new SerialPort(path, { baudRate })
const parser = serialPort.pipe(new InterByteTimeout({interval: 300}))
NMEAHandler.on('received' , (nmeaStr) => { NMEAHandler.on('received' , (nmeaStr) => {
sendMsg('NMEA_RECEIVED', nmeaStr) sendMsg('NMEA_RECEIVED', nmeaStr)

View File

@ -15,9 +15,6 @@
<div class="text-center w-1/2 ml-auto"> <div class="text-center w-1/2 ml-auto">
<BaseInfoView ref="baseInfoViewInstance" /> <BaseInfoView ref="baseInfoViewInstance" />
</div> </div>
<div class="text-white fixed bottom-0 right-0">
北斗卫星数据监测展示互动系统V1.0
</div>
</div> </div>
</template> </template>

View File

@ -6,10 +6,26 @@
<div class="label">  </div> <div class="label">  </div>
<div class="content">{{ baseInfo.longitude ? baseInfo.longitude : '' }}</div> <div class="content">{{ baseInfo.longitude ? baseInfo.longitude : '' }}</div>
</div> </div>
<div>
<div class="label">经度度分</div>
<div class="content">{{ baseInfo.longitude ? longitudeD + ' ' + longitudeM : '' }}</div>
</div>
<div>
<div class="label">经度分秒</div>
<div class="content">{{ baseInfo.longitude ? longitudeD + ' ' + longitudeM + ' ' + longitudeS : '' }}</div>
</div>
<div> <div>
<div class="label">  </div> <div class="label">  </div>
<div class="content">{{ baseInfo.latitude ? baseInfo.latitude : '' }}</div> <div class="content">{{ baseInfo.latitude ? baseInfo.latitude : '' }}</div>
</div> </div>
<div>
<div class="label">纬度度分</div>
<div class="content">{{ baseInfo.latitude ? latitudeD + ' ' + latitudeM : '' }}</div>
</div>
<div>
<div class="label">纬度分秒</div>
<div class="content">{{ baseInfo.latitude ? latitudeD + ' ' + latitudeM + ' ' + latitudeS : '' }}</div>
</div>
<div> <div>
<div class="label">  </div> <div class="label">  </div>
<div class="content">{{ baseInfo.altitude }}</div> <div class="content">{{ baseInfo.altitude }}</div>

View File

@ -1,56 +1,58 @@
<template> <template>
<vc-config-provider :cesiumPath="cesiumPath"> <vc-viewer :shouldAnimate="true" :showCredit="false" :infoBox="false" @ready="onViewerReady">
<vc-viewer :shouldAnimate="true" :showCredit="false" :infoBox="false" @ready="onViewerReady"> <vc-layer-imagery>
<vc-layer-imagery> <vc-provider-imagery-singletile :url="earth" />
<vc-imagery-provider-singletile :url="earth" /> </vc-layer-imagery>
</vc-layer-imagery>
<vc-entity :show="show" :position="position"> <vc-entity :show="show" :position="position">
<vc-graphics-billboard :image="pin" :verticalOrigin="1" /> <vc-graphics-billboard :image="pin" :verticalOrigin="1" />
</vc-entity> </vc-entity>
</vc-viewer> </vc-viewer>
</vc-config-provider>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, computed } from "vue"; import { reactive, computed } from 'vue'
import { getPosition } from "../api/util"; import { getPosition } from '../api/util'
import pin from "../assets/pin.png"; import pin from '../assets/pin.png'
import earth from "../assets/earth.jpg"; import earth from '../assets/earth.jpg'
const cesiumPath = (process.env.NODE_ENV === 'development' ? './node_modules/cesium/Build/Cesium/Cesium.js': './Cesium/Cesium.js') const position = reactive({ lng: NaN, lat: NaN })
const position = reactive({ lng: NaN, lat: NaN }); const show = computed(() => {
const show = computed(() => { const { lng, lat } = position
const { lng, lat } = position;
if (isNaN(lng) || lng > 180 || lng < -180) return false; if (isNaN(lng) || lng > 180 || lng < -180) return false
if (isNaN(lat) || lat > 90 || lat < -90) return false; if (isNaN(lat) || lat > 90 || lat < -90 ) return false
return true; return true
}); })
// //
const onViewerReady = ({ Cesium, viewer }) => { const onViewerReady = ({ Cesium, viewer }) => {
const { JulianDate, Cartesian3 } = Cesium; const { JulianDate, Cartesian3 } = Cesium
const { clock, scene } = viewer; const { clock, scene } = viewer
let prev = clock.currentTime; let prev = clock.currentTime
clock.onTick.addEventListener(() => { clock.onTick.addEventListener(() => {
const current = clock.currentTime; const current = clock.currentTime
const interval = JulianDate.toDate(current) - JulianDate.toDate(prev); const interval = JulianDate.toDate(current) - JulianDate.toDate(prev)
prev = current; prev = current
scene.camera.rotate(
Cartesian3.UNIT_Z,
(Math.PI / (24 * 60 * 60)) * interval * 1,
);
})
}
scene.camera.rotate(Cartesian3.UNIT_Z, (Math.PI / (24 * 60 * 60)) * interval * 1);
});
};
const update = (nmea) => { const update = (nmea) => {
const newPosition = getPosition(nmea); const newPosition = getPosition(nmea)
if (!newPosition) return; if (!newPosition) return
Object.assign(position, newPosition)
}
Object.assign(position, newPosition); defineExpose({ update })
}; </script>
defineExpose({ update });
</script>

View File

@ -47,7 +47,7 @@ const option = reactive({
inverse: true, inverse: true,
axisLine: {show: false}, axisLine: {show: false},
axisTick: {show: false}, axisTick: {show: false},
axisLabel: {color: 'white', fontSize: '12'}, axisLabel: {color: 'white'}
}, },
series: [{ series: [{
type: 'bar', type: 'bar',

View File

@ -2,10 +2,14 @@ import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import 'vue-cesium/dist/index.css' import 'vue-cesium/dist/index.css'
import { VcConfigProvider, VcViewer, VcEntity, VcLayerImagery, VcImageryProviderSingletile, VcGraphicsBillboard } from 'vue-cesium' import { VcViewer, VcEntity, VcLayerImagery, VcProviderImagerySingletile, VcGraphicsBillboard } from 'vue-cesium'
import './main.css' import './main.css'
const cesiumPath = (process.env.NODE_ENV === 'development' ? './node_modules/cesium/Build/Cesium/Cesium.js': './Cesium/Cesium.js')
const app = createApp(App) const app = createApp(App)
app.use(VcConfigProvider).use(VcViewer).use(VcEntity).use(VcLayerImagery).use(VcImageryProviderSingletile).use(VcGraphicsBillboard) // 局部引入VueCesium
app.use(VcViewer).use(VcEntity).use(VcLayerImagery).use(VcProviderImagerySingletile).use(VcGraphicsBillboard)
app.config.globalProperties.$VueCesium = { cesiumPath }
app.mount('#app') app.mount('#app')

View File

@ -7,12 +7,10 @@
"resolveJsonModule": true, "resolveJsonModule": true,
"esModuleInterop": true, "esModuleInterop": true,
"allowJs": true, "allowJs": true,
"outDir": "dist/main", "outDir": "dist/main"
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true
}, },
"include": [ "include": [
"src/main/app.ts", "src/main/app.ts",
"src/main/preload.js", "src/main/preload.js",
] ]
} }

View File

@ -10,12 +10,8 @@
"esModuleInterop": true, "esModuleInterop": true,
"lib": ["esnext", "dom"], "lib": ["esnext", "dom"],
"types": ["vite/client"], "types": ["vite/client"],
"noImplicitAny": false, // ---------------------- //
"useDefineForClassFields": true, "noImplicitAny": false
"noEmit": true,
"isolatedModules": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true
}, },
"include": ["src/render/**/*.ts", "src/render/**/*.d.ts", "src/render/**/*.tsx", "src/render/**/*.vue"], "include": ["src/render/**/*.ts", "src/render/**/*.d.ts", "src/render/**/*.tsx", "src/render/**/*.vue"],
"exclude": ["src/app.ts"] "exclude": ["src/app.ts"]

View File

@ -11,14 +11,11 @@ const publicDir = join(__dirname, 'public')
export default defineConfig({ export default defineConfig({
publicDir, publicDir,
base: './', base: './',
plugins: [ plugins: [vue(),copy({
vue(), targets: [
copy({ { src: './node_modules/cesium/Build/Cesium', dest: publicDir }, //编译时执行Cesium库的拷贝
targets: [ ]
{ src: './node_modules/cesium/Build/Cesium', dest: publicDir }, //编译时执行Cesium库的拷贝 })],
]
})
],
build: { build: {
outDir, outDir,
emptyOutDir: true, emptyOutDir: true,

7111
yarn.lock

File diff suppressed because it is too large Load Diff