diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/electron-4.iml b/.idea/electron-4.iml new file mode 100644 index 0000000..0c8867d --- /dev/null +++ b/.idea/electron-4.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5e314af --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/electron.vite.config.1760428378950.mjs b/electron.vite.config.1760428378950.mjs new file mode 100644 index 0000000..0d8db36 --- /dev/null +++ b/electron.vite.config.1760428378950.mjs @@ -0,0 +1,60 @@ +// electron.vite.config.ts +import { resolve } from "path"; +import { defineConfig, externalizeDepsPlugin } from "electron-vite"; +import vue from "@vitejs/plugin-vue"; +import AutoImport from "unplugin-auto-import/vite"; +import Components from "unplugin-vue-components/vite"; +import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; +import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; +import path from "path"; +var electron_vite_config_default = defineConfig({ + main: { + plugins: [externalizeDepsPlugin()] + }, + preload: { + plugins: [externalizeDepsPlugin()] + }, + renderer: { + resolve: { + alias: { + "@renderer": resolve("src/renderer/src"), + "@": resolve("src/renderer/src") + } + }, + plugins: [ + vue(), + AutoImport({ + imports: ["vue"], + dts: "src/auto-imports.d.ts", + // 自动生成类型声明文件 + resolvers: [ElementPlusResolver()] + }), + Components({ + resolvers: [ElementPlusResolver()] + }), + // SVG图标插件配置 + // 配置SVG图标插件 + createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), "src/renderer/src/icons/svg")], + symbolId: "icon-[name]", + // 自动清除 SVG 中的 fill 和 stroke 属性 + svgoOptions: { + plugins: [{ name: "removeAttrs", params: { attrs: ["fill", "stroke", "stroke-width"] } }] + } + }) + ] + // server: { + // port: 8808, + // proxy: { + // '/api': { + // target: localStorage.getItem('ip') || 'http://127.0.0.1:8808', + // changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api/, '') + // } + // } + // } + } +}); +export { + electron_vite_config_default as default +}; diff --git a/package-lock.json b/package-lock.json index defaba5..c18ada6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.4.1", "scss": "^0.2.4", + "three": "^0.180.0", "verror": "^1.10.1", "vue-clipboard3": "^2.0.0", "vue-i18n": "^9.14.5", @@ -12775,6 +12776,12 @@ "node": ">= 10.0.0" } }, + "node_modules/three": { + "version": "0.180.0", + "resolved": "https://registry.npmmirror.com/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", + "license": "MIT" + }, "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", diff --git a/src/main/index.ts b/src/main/index.ts index dd86d0a..a4813a2 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,8 +1,8 @@ -import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog } from 'electron' -import path, { join } from 'path' -import { electronApp, optimizer, is } from '@electron-toolkit/utils' +import {app, shell, BrowserWindow, ipcMain, globalShortcut, dialog} from 'electron' +import path, {join} from 'path' +import {electronApp, optimizer, is} from '@electron-toolkit/utils' import icon from '../../resources/earth.png?asset' -import { Recorder } from "../preload/recorder"; +import {Recorder} from "../preload/recorder"; import fs from 'fs' import { exec, spawn } from 'child_process' import dayjs from 'dayjs' @@ -69,6 +69,7 @@ stopBatPath = process.platform === 'win32' ? stopBatPath.replace(/^(\w:)/, '/$1' // ? `${join(app.getAppPath(), 'src/renderer/public/startUp/startUp.html')}` // : `file://${join(app.getAppPath(), 'resources/app.asar/out/renderer/startUp/startUp.html')}` let isRestart = false + function createWindow(): void { // Create the browser window. @@ -104,7 +105,7 @@ function createWindow(): void { useContentSize: true, // 窗口尺寸包含内容区域而非边框 simpleFullscreen: true, // 使用简单全屏模式(仅macOS有效) backgroundColor: '#00000000', // 添加这行设置透明背景 - ...(process.platform === 'linux' ? { icon } : {}), + ...(process.platform === 'linux' ? {icon} : {}), webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false, @@ -133,7 +134,7 @@ function createWindow(): void { ipcMain.on("restart", () => { // app.relaunch(); // app.quit(); - // cleanupProcess.kill(); + // cleanupProcess.kill(); // app.relaunch(); isRestart = true closeAllWindows() @@ -179,7 +180,7 @@ function createWindow(): void { event.sender.send("selectedItem", arr); }); }); - ipcMain.on("saveFile", (event, { title, filename, filters }) => { + ipcMain.on("saveFile", (event, {title, filename, filters}) => { dialog .showSaveDialog({ title, @@ -197,9 +198,13 @@ function createWindow(): void { ipcMain.handle('getIsFullScreen', () => { return mainWindow.isFullScreen() }); - ipcMain.on('toggle-fullscreen', (event) => { + ipcMain.on('toggle-fullscreen', (event, flag = null) => { const win = BrowserWindow.fromWebContents(event.sender); - win!.setFullScreen(!win!.isFullScreen()); + let full = !win!.isFullScreen() + if (flag != null) { + full = flag + } + win!.setFullScreen(full); }); mainWindow.on('enter-full-screen', () => { mainWindow.webContents.send('fullscreen-status-changed', true) @@ -226,7 +231,7 @@ function createWindow(): void { let path = dialog.showSaveDialogSync({ title: "保存视频文件", defaultPath: dayjs().format("YYYYMMDDHHmmss") + "视频录制.mp4", - filters: [{ name: "文件类型", extensions: ["mp4"] }], + filters: [{name: "文件类型", extensions: ["mp4"]}], }); if (path != undefined) { recorder.move(path, () => { @@ -343,7 +348,7 @@ function createWindow(): void { // 设置窗口标题和图标 mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) - return { action: 'deny' } + return {action: 'deny'} }) // 注册 F5 快捷键刷新 globalShortcut.register('CommandOrControl+F5', () => { diff --git a/src/preload/index.ts b/src/preload/index.ts index 5c41ea8..036db61 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,5 +1,5 @@ -import { contextBridge } from 'electron' -import { electronAPI } from '@electron-toolkit/preload' +import {contextBridge} from 'electron' +import {electronAPI} from '@electron-toolkit/preload' // Custom APIs for renderer const api = {} diff --git a/src/renderer/components.d.ts b/src/renderer/components.d.ts index c3225ad..ef24618 100644 --- a/src/renderer/components.d.ts +++ b/src/renderer/components.d.ts @@ -11,6 +11,7 @@ declare module 'vue' { BaseDialog: typeof import('./src/components/dialog/baseDialog.vue')['default'] Directory: typeof import('./src/components/dialog/directory.vue')['default'] DirectoryEdit: typeof import('./src/components/dialog/directoryEdit.vue')['default'] + ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] @@ -20,6 +21,7 @@ declare module 'vue' { ElDialog: typeof import('element-plus/es')['ElDialog'] ElForm: typeof import('element-plus/es')['ElForm'] ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] ElOption: typeof import('element-plus/es')['ElOption'] @@ -30,6 +32,7 @@ declare module 'vue' { ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTableV2: typeof import('element-plus/es')['ElTableV2'] ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabs: typeof import('element-plus/es')['ElTabs'] ElTree: typeof import('element-plus/es')['ElTree'] diff --git a/src/renderer/src/api/deviceManage/index.ts b/src/renderer/src/api/deviceManage/index.ts new file mode 100644 index 0000000..4e6e2b0 --- /dev/null +++ b/src/renderer/src/api/deviceManage/index.ts @@ -0,0 +1,34 @@ +//设备管理 +import request from '@/axios/request' +import { param } from 'jquery' +export const deviceApi = { + updateDevice: async (data: any) => { + return await request.post({ + url: `/device/update`, + data + }) + }, + addDevice: async (data: any) => { + return await request.post({ + url: `/device/add`, + data + }) + }, + deviceList: async (data) => { + return await request.get({ + url: `/device/list`, + params: data, + }) + }, + deviceById: async () => { + return await request.get({ + url: `/device/getById` + }) + }, + delDevice: async (data) => { + return await request.get({ + url: `/device/delete`, + params: data, + }) + }, +} diff --git a/src/renderer/src/auto-imports.d.ts b/src/renderer/src/auto-imports.d.ts index f06b3ba..72bc97c 100644 --- a/src/renderer/src/auto-imports.d.ts +++ b/src/renderer/src/auto-imports.d.ts @@ -8,7 +8,6 @@ export {} declare global { const EffectScope: typeof import('vue')['EffectScope'] const ElMessage: typeof import('element-plus/es')['ElMessage'] - const ElMessageBox: typeof import('element-plus/es')['ElMessageBox'] const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] const customRef: typeof import('vue')['customRef'] diff --git a/src/renderer/src/icons/svg/arrow1.svg b/src/renderer/src/icons/svg/arrow1.svg new file mode 100644 index 0000000..7dbef7c --- /dev/null +++ b/src/renderer/src/icons/svg/arrow1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/icons/svg/arrow2.svg b/src/renderer/src/icons/svg/arrow2.svg new file mode 100644 index 0000000..2ab00d3 --- /dev/null +++ b/src/renderer/src/icons/svg/arrow2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/icons/svg/loadTemp.svg b/src/renderer/src/icons/svg/loadTemp.svg new file mode 100644 index 0000000..51cbd5d --- /dev/null +++ b/src/renderer/src/icons/svg/loadTemp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/icons/svg/pitchImport.svg b/src/renderer/src/icons/svg/pitchImport.svg new file mode 100644 index 0000000..eebca00 --- /dev/null +++ b/src/renderer/src/icons/svg/pitchImport.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/main.ts b/src/renderer/src/main.ts index 570a92e..efb5072 100644 --- a/src/renderer/src/main.ts +++ b/src/renderer/src/main.ts @@ -1,17 +1,19 @@ import './assets/main.css' -import { createApp } from 'vue' +import {createApp} from 'vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' +// 引入中文语言包 +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' import App from './App.vue' import router from './router' -import { createI18n } from 'vue-i18n' -import { setupStore } from './store' +import {createI18n} from 'vue-i18n' +import {setupStore} from './store' import zhCN from './I18n/zh-CN' import zhTW from './I18n/zh-TW' import zhEN from './I18n/zh-EN' import 'virtual:svg-icons-register' -import { setupSvgIcon } from './icons' -import { EventBusPlugin } from './utils/bus' +import {setupSvgIcon} from './icons' +import {EventBusPlugin} from './utils/bus' import './assets/styles/font.css' import './assets/iconfont/font_4587902_y4fhjyq8fxn' // import './assets/styles/dhtmlxgantt.css' @@ -54,7 +56,8 @@ if (!localStorage.getItem("AMapKey")) { sheetIndexStatusSwitch: false, //标准图幅 skinInfo: 'yingguangse', //主题色 language: 'zh-CN', //语言 - coordinate: 'EPSG:4326' //坐标系 + coordinate: 'EPSG:4326', //坐标系 + positionType: '度' }) ) : console.log("没有设置系统设置"); @@ -83,6 +86,8 @@ setupStore(setApp) setupSvgIcon(setApp) setApp.use(EventBusPlugin) setApp.use(router) -setApp.use(ElementPlus) +setApp.use(ElementPlus, { + locale: zhCn +}) setApp.use(i18n) setApp.mount('#app') diff --git a/src/renderer/src/router/index.ts b/src/renderer/src/router/index.ts index bf7a99e..d754f55 100644 --- a/src/renderer/src/router/index.ts +++ b/src/renderer/src/router/index.ts @@ -1,4 +1,4 @@ -import { createRouter, createWebHashHistory } from 'vue-router' +import {createRouter, createWebHashHistory} from 'vue-router' import homeIndex from '@/views/home/index.vue' const routes = [ @@ -7,7 +7,9 @@ const routes = [ component: () => import('@/views/login/index.vue'), hidden: true }, - { path: '/404', component: () => import('@/views/404.vue'), hidden: true }, + {path: '/ts', component: () => import('@/views/TS/index.vue'), hidden: true}, + {path: '/tsEdit', component: () => import('@/views/TS/edit.vue'), hidden: true}, + {path: '/404', component: () => import('@/views/404.vue'), hidden: true}, { path: '/home', @@ -16,7 +18,7 @@ const routes = [ hidden: true }, - { path: '/:pathMatch(.*)*', redirect: '/404', hidden: true } + {path: '/:pathMatch(.*)*', redirect: '/404', hidden: true} ] const router = createRouter({ @@ -28,10 +30,10 @@ router.beforeEach((to, from, next) => { if (to.path === '/') { next() } else { - if(localStorage.getItem('Authorization')) { + if (localStorage.getItem('Authorization')) { next() - }else - next("/") + } else + next("/") } }) diff --git a/src/renderer/src/views/TS/cabin.vue b/src/renderer/src/views/TS/cabin.vue new file mode 100644 index 0000000..9c45a5b --- /dev/null +++ b/src/renderer/src/views/TS/cabin.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/renderer/src/views/TS/edit.vue b/src/renderer/src/views/TS/edit.vue new file mode 100644 index 0000000..90014fe --- /dev/null +++ b/src/renderer/src/views/TS/edit.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/renderer/src/views/TS/element.vue b/src/renderer/src/views/TS/element.vue new file mode 100644 index 0000000..ee73bc5 --- /dev/null +++ b/src/renderer/src/views/TS/element.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/src/renderer/src/views/TS/index.vue b/src/renderer/src/views/TS/index.vue new file mode 100644 index 0000000..02d1e84 --- /dev/null +++ b/src/renderer/src/views/TS/index.vue @@ -0,0 +1,367 @@ + + + + + diff --git a/src/renderer/src/views/components/headers/components/setPup/components/equipment.vue b/src/renderer/src/views/components/headers/components/setPup/components/equipment.vue index 6d3efe3..87fd17d 100644 --- a/src/renderer/src/views/components/headers/components/setPup/components/equipment.vue +++ b/src/renderer/src/views/components/headers/components/setPup/components/equipment.vue @@ -1,7 +1,11 @@ diff --git a/src/renderer/src/views/components/propertyBox/CoorLocation.vue b/src/renderer/src/views/components/propertyBox/CoorLocation.vue index 5da8a26..551b6a0 100644 --- a/src/renderer/src/views/components/propertyBox/CoorLocation.vue +++ b/src/renderer/src/views/components/propertyBox/CoorLocation.vue @@ -124,7 +124,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/FlyRoam.vue b/src/renderer/src/views/components/propertyBox/FlyRoam.vue index 9560000..6c41951 100644 --- a/src/renderer/src/views/components/propertyBox/FlyRoam.vue +++ b/src/renderer/src/views/components/propertyBox/FlyRoam.vue @@ -172,7 +172,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue b/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue index 4403267..573a6a3 100644 --- a/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue +++ b/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue @@ -17,7 +17,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/Graffiti.vue b/src/renderer/src/views/components/propertyBox/Graffiti.vue index 744cdeb..39b1e4f 100644 --- a/src/renderer/src/views/components/propertyBox/Graffiti.vue +++ b/src/renderer/src/views/components/propertyBox/Graffiti.vue @@ -44,7 +44,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/Profile.vue b/src/renderer/src/views/components/propertyBox/Profile.vue index 9b23c37..59fc204 100644 --- a/src/renderer/src/views/components/propertyBox/Profile.vue +++ b/src/renderer/src/views/components/propertyBox/Profile.vue @@ -21,7 +21,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/ProjConvert.vue b/src/renderer/src/views/components/propertyBox/ProjConvert.vue index edfc050..c550371 100644 --- a/src/renderer/src/views/components/propertyBox/ProjConvert.vue +++ b/src/renderer/src/views/components/propertyBox/ProjConvert.vue @@ -228,7 +228,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/ViewShed.vue b/src/renderer/src/views/components/propertyBox/ViewShed.vue index fe26da4..1142131 100644 --- a/src/renderer/src/views/components/propertyBox/ViewShed.vue +++ b/src/renderer/src/views/components/propertyBox/ViewShed.vue @@ -83,7 +83,7 @@ diff --git a/src/renderer/src/views/components/propertyBox/Visibility.vue b/src/renderer/src/views/components/propertyBox/Visibility.vue index 4bb8fbb..731ec8e 100644 --- a/src/renderer/src/views/components/propertyBox/Visibility.vue +++ b/src/renderer/src/views/components/propertyBox/Visibility.vue @@ -51,6 +51,10 @@ eventBus.on('analysisDialog', () => { baseDialog.value?.open() }) +const open = () => { + baseDialog.value?.open() +} + const clangeViewPointHeight = () => {} const viewPointHeightInput = () => { let dom: any = document.getElementById('viewPointHeight') @@ -61,18 +65,24 @@ const viewPointHeightInput = () => { } } const closeCallBack = (e) => { - viewPointHeight.value = 1.8; - (window as any).YJ.Measure.SetMeasureStatus(false) + viewPointHeight.value = 1.8 + ;(window as any).YJ.Measure.SetMeasureStatus(false) // visibility && visibility.end() } +onBeforeUnmount(() => { + closeCallBack('') +}) const draw = (e) => { visibility && visibility.end && visibility.end() visibility = new YJ.Analysis.Visibility(window.earth, { viewPointHeight: viewPointHeight.value }) // visibility.create(this) - !(window as any).analysisArr && ((window as any).analysisArr = []); - (window as any).analysisArr.push(visibility); + !(window as any).analysisArr && ((window as any).analysisArr = []) + ;(window as any).analysisArr.push(visibility) baseDialog.value?.close() } +defineExpose({ + open +}) diff --git a/src/renderer/src/views/components/propertyBox/addDevice.vue b/src/renderer/src/views/components/propertyBox/addDevice.vue new file mode 100644 index 0000000..afca06e --- /dev/null +++ b/src/renderer/src/views/components/propertyBox/addDevice.vue @@ -0,0 +1,196 @@ + + + + + + diff --git a/src/renderer/src/views/components/propertyBox/addGroundText.vue b/src/renderer/src/views/components/propertyBox/addGroundText.vue index 0e97c27..a20952b 100644 --- a/src/renderer/src/views/components/propertyBox/addGroundText.vue +++ b/src/renderer/src/views/components/propertyBox/addGroundText.vue @@ -31,6 +31,7 @@ const open = () => { baseDialog.value?.open() } const confirm = () => { + console.log('121212121', baseDialog.value) baseDialog.value?.close() let name = text.value text.value = '' @@ -40,11 +41,15 @@ const confirm = () => { return } let id = new YJ.Tools().randomString() - let options: any = await initMapData('groundText', { - id: id, - text: name, - positions: positions - }, null) + let options: any = await initMapData( + 'groundText', + { + id: id, + text: name, + positions: positions + }, + null + ) delete options.host delete options.positions let selectedNodes = window.treeObj.getSelectedNodes() @@ -53,8 +58,7 @@ const confirm = () => { if (node) { if (node.sourceType === 'directory') { parentId = node.id - } - else { + } else { parentId = node.parentId } } diff --git a/src/renderer/src/views/home/index.vue b/src/renderer/src/views/home/index.vue index 216f277..ead28f2 100644 --- a/src/renderer/src/views/home/index.vue +++ b/src/renderer/src/views/home/index.vue @@ -21,23 +21,23 @@ /> - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + @@ -50,6 +50,7 @@ +