From ac0693df9c0d74f3755e8eadbc54d3102f7ca443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A4=A7=E8=83=86?= <1101282782@qq.com> Date: Fri, 17 Oct 2025 15:13:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + resources/java/app/yjearth.jar | Bin 93475317 -> 93460286 bytes resources/java/stop.bat | 2 +- src/main/index.ts | 105 +++- src/renderer/src/I18n/zh-CN.ts | 34 +- src/renderer/src/I18n/zh-EN.ts | 535 +++++++----------- src/renderer/src/I18n/zh-TW.ts | 6 +- src/renderer/src/api/gisApi.ts | 1 + src/renderer/src/api/systemApi.ts | 19 + src/renderer/src/assets/i18n/index.js | 19 - src/renderer/src/assets/i18n/lang/local_en.js | 348 ------------ src/renderer/src/assets/i18n/lang/local_tw.js | 320 ----------- src/renderer/src/assets/i18n/lang/local_zh.js | 330 ----------- .../src/components/Pagination/index.vue | 16 +- .../src/components/dialog/baseDialog.vue | 30 +- .../src/components/upload/uploadFiles.vue | 4 +- src/renderer/src/main.ts | 22 +- .../components/bottomSide/bottomSide.vue | 40 +- .../setPup/components/graphLabelManage.vue | 4 +- .../setPup/components/modelManage.vue | 4 +- .../setPup/components/photoManage.vue | 6 +- .../components/setPup/components/setting.vue | 28 +- .../headers/components/weather/index.vue | 1 + .../headers/components/weather/timeLIne.ts | 1 + .../src/views/components/headers/index.vue | 2 +- .../components/propertyBox/CircleObject.vue | 6 +- .../components/propertyBox/addGroundText.vue | 6 +- .../components/propertyBox/addStandText.vue | 6 +- .../components/propertyBox/attackArrow.vue | 29 +- .../components/propertyBox/attribute.vue | 284 +++++++++- .../propertyBox/billboardObject.vue | 5 +- .../components/propertyBox/circleDiffuse.vue | 47 +- .../propertyBox/curvelineObject.vue | 6 +- .../components/propertyBox/explosion.vue | 31 +- .../views/components/propertyBox/flyLine.vue | 29 +- .../components/propertyBox/graphObject.vue | 32 +- .../components/propertyBox/groundText.vue | 7 +- .../views/components/propertyBox/layer.vue | 29 +- .../components/propertyBox/modelObject.vue | 32 +- .../propertyBox/particleEffects.vue | 47 +- .../components/propertyBox/polygonObject.vue | 5 +- .../propertyBox/polyhedronObject.vue | 47 +- .../components/propertyBox/polylineObject.vue | 5 +- .../components/propertyBox/radarScan.vue | 7 +- .../propertyBox/radarScanStereoscopic.vue | 47 +- .../components/propertyBox/standText.vue | 5 +- .../views/components/propertyBox/terrain.vue | 5 +- .../views/components/propertyBox/tileset.vue | 5 +- .../propertyBox/trajectoryMotion.vue | 47 +- .../views/components/propertyBox/vector.vue | 2 +- .../propertyBox/wallRealStereoscopic.vue | 7 +- .../propertyBox/wallStereoscopic.vue | 47 +- .../components/propertyBox/waterSurface.vue | 47 +- .../views/components/propertyBox/weather.vue | 110 ---- .../tree/components/hooks/rightOperate.ts | 6 +- .../src/views/components/tree/entityClick.ts | 129 +++-- .../src/views/components/tree/hooks/tree.ts | 104 ++-- .../src/views/components/tree/index.vue | 28 +- src/renderer/src/views/home/index.vue | 2 +- src/renderer/src/views/login/useSetUp.ts | 54 +- 60 files changed, 1242 insertions(+), 1942 deletions(-) create mode 100644 src/renderer/src/api/systemApi.ts delete mode 100644 src/renderer/src/assets/i18n/index.js delete mode 100644 src/renderer/src/assets/i18n/lang/local_en.js delete mode 100644 src/renderer/src/assets/i18n/lang/local_tw.js delete mode 100644 src/renderer/src/assets/i18n/lang/local_zh.js delete mode 100644 src/renderer/src/views/components/propertyBox/weather.vue diff --git a/package.json b/package.json index 527bb42..2827909 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "element-plus": "^2.10.4", "express": "^5.1.0", "file-saver": "^2.0.5", + "ini": "^5.0.0", + "js-yaml": "^4.1.0", "mitt": "^3.0.1", "moment": "^2.30.1", "pinia": "^3.0.3", diff --git a/resources/java/app/yjearth.jar b/resources/java/app/yjearth.jar index 2f0d9c561f6c1aa9d58b6b3c0b786559c1819809..76fe8ea3e8a003e13d6142c2ff58d10f0ad6030a 100644 GIT binary patch delta 61711 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 VXprv?WruR2i-)Q8#u>Qf`9B6L!k+*D delta 83679 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 aEa6}h`x6Dvp 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 I2(Q!q4`1x4y#N3J diff --git a/resources/java/stop.bat b/resources/java/stop.bat index 9cb7db5..c123d7e 100644 --- a/resources/java/stop.bat +++ b/resources/java/stop.bat @@ -36,4 +36,4 @@ for %%J in (!TARGET_JARS!) do ( :: 清理临时文件 del "!TEMP_FILE!" >nul 2>&1 echo. && echo 操作完成 -endlocal && pause \ No newline at end of file +endlocal \ No newline at end of file diff --git a/src/main/index.ts b/src/main/index.ts index ac2e0a8..a4813a2 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -4,10 +4,12 @@ import {electronApp, optimizer, is} from '@electron-toolkit/utils' import icon from '../../resources/earth.png?asset' import {Recorder} from "../preload/recorder"; import fs from 'fs' -import {exec} from 'child_process' +import { exec, spawn } from 'child_process' import dayjs from 'dayjs' -import {GetHomeDir} from './config' -import {start, getServer} from "./app"; +import os from "os"; +import { GetHomeDir } from './config' +import { start, getServer } from "./app"; +const yaml = require("js-yaml"); // 开发环境路径处理 - 确保添加正确的file协议 @@ -114,13 +116,28 @@ function createWindow(): void { allowRunningInsecureContent: true } }) + let ymlBatPath = process.env.NODE_ENV === 'development' ? path.resolve(app.getAppPath(), 'resources', 'java', 'app', 'application.yml') : path.join(process.resourcesPath, 'app.asar.unpacked', 'resources', 'java', 'app', 'application.yml') + ymlBatPath = process.platform === 'win32' ? ymlBatPath.replace(/^(\w:)/, '/$1') : ymlBatPath + ipcMain.on("getIniConfig", (event, option) => { + let ymlPath = ymlBatPath.substring(1, 200) + console.log("iniPath", ymlPath); + + const ymlContent = yaml.load(fs.readFileSync(ymlPath, 'utf8')); + + if(option) { + ymlContent.server.port = option.port + fs.writeFileSync(ymlPath, yaml.dump(ymlContent)); + } + + event.sender.send("YmlConfig", ymlContent); + }); ipcMain.on("restart", () => { // app.relaunch(); // app.quit(); // cleanupProcess.kill(); // app.relaunch(); isRestart = true - windowAllClosed() + closeAllWindows() }); // 监听启动页完成的消息 ipcMain.on('splash-completed', () => { @@ -259,11 +276,6 @@ function createWindow(): void { event.sender.send("dirFiles", data); }); - ipcMain.on("restart", (e) => { - closeChild(); - app.relaunch(); - app.exit(); - }); let _winMap = new Map(); // 监听渲染进程创建新窗口的请求 @@ -294,6 +306,45 @@ function createWindow(): void { ipcMain.handle('get-_winMap', () => { return _winMap }) + ipcMain.on("openFFPlay", (e, obj) => { + let cmd = ""; + let platform = os.platform(); + if (platform === "win32") { + cmd = "ffplay.exe"; + } else { + cmd = "ffplay"; + } + let title = obj.name; + let child = spawn( + path.join(GetHomeDir(), `/ffplay/${cmd}`), + [ + "-window_title", + title, + "-x", + "1300", + "-y", + "730", + "-rtsp_transport", + "tcp", + obj.url, + ], + { + cwd: path.join(GetHomeDir(), "/ffplay/"), + stdio: "ignore", + // shell: true, + } + ).on("exit", (err) => { + console.log("out"); + console.log(err); + e.sender.send("openFFPlayOut", err); + }); + + /* .on("stdout", function(err, m) { + console.log(m); + });*/ + console.log("child", child.pid); + child.unref(); + }); // 设置窗口标题和图标 mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) @@ -404,7 +455,7 @@ function windowAllClosed() { console.log('所有窗口已关闭,执行清理脚本...'); getServer().close(() => { // 执行批处理文件 - const cleanupProcess = exec(stopBatPath.substring(1, 200), (error, stdout, stderr) => { + const cleanupProcess = exec('D:/project/electron-4.0/electron-4/resources/java/stop.bat', (error, stdout, stderr) => { if (error) { console.error(`清理脚本执行失败: ${error.message}`); } @@ -414,17 +465,14 @@ function windowAllClosed() { if (stdout) { console.log(`清理脚本输出: ${stdout}`); } - - // 脚本执行完成后强制退出 - forceQuit(); + if (isQuitting) { + forceQuit(); + } }); // 监听子进程退出事件(确保即使脚本出错也能退出) cleanupProcess.on('exit', (code) => { console.log(`清理脚本退出,代码: ${code}`); - if (isQuitting) { - forceQuit(); - } }); // 超时保护:防止脚本卡住导致应用无法退出 @@ -434,7 +482,7 @@ function windowAllClosed() { cleanupProcess.kill(); // 终止卡住的脚本 forceQuit(); } - }, 2000); // 2秒超时 + }, 3000); // 3秒超时 }) } @@ -447,19 +495,34 @@ function forceQuit() { // isRestart = false // app.relaunch(); // } - let child = exec('taskkill /F /T /PID ' + process.pid, (error) => { - if (error) console.error('强制终止失败:', error); - child.kill(); - }); + // let child = exec('taskkill /F /T /PID ' + process.pid, (error) => { + // if (error) console.error('强制终止失败:', error); + // child.kill(); + // }); if (isRestart) { app.relaunch(); } + console.log('------退出-------'); + app.exit(); + app.quit(); } else { // 其他系统 process.exit(0); } } +function closeAllWindows() { + // 1. 获取所有已打开的窗口 + const allWindows = BrowserWindow.getAllWindows(); + + // 2. 遍历关闭每个窗口 + allWindows.forEach(window => { + if (!window.isDestroyed()) { // 避免操作已销毁的窗口(防止报错) + window.close(); + } + }); +} + console.log('=================================================') global.sharedObject = { hasService: false, diff --git a/src/renderer/src/I18n/zh-CN.ts b/src/renderer/src/I18n/zh-CN.ts index c285a7f..538b8a0 100644 --- a/src/renderer/src/I18n/zh-CN.ts +++ b/src/renderer/src/I18n/zh-CN.ts @@ -1,15 +1,6 @@ -import { title } from "process"; - export default { - week: { - 0: '星期日', - 1: '星期一', - 2: '星期二', - 3: '星期三', - 4: '星期四', - 5: '星期五', - 6: '星期六' - }, + title: '实景三维电子沙盘系统', + week: ['星期日', '星期一', '星期二','星期三', '星期四','星期五', '星期六'], tree: { title: '图层指挥舱', // title: "综合信息", @@ -20,7 +11,8 @@ export default { search: '搜索', treePlaceholder: '关键词搜索', selectPlaceholder: '请选择', - selectNoText: '无数据' + selectNoText: '无数据', + confirm: '确定' }, rightMenu: { addDirectory: '添加文件夹', @@ -73,7 +65,7 @@ export default { diffuseScan: "扩散光波", radarScan: "雷达光波", scanStereoscopic: "立体雷达", - polyhedronObject: "多边体", + polyhedronObject: "多面体", water: "水面", fountain: '喷泉', waterL: '喷射水柱', @@ -107,7 +99,6 @@ export default { lopeDistanceMeasures: '坡度', coorMeasure: "坐标", clear: "清除测量", - }, tool: { routePlan: "路径规划", @@ -132,7 +123,6 @@ export default { gdbImport: "gdb导入", circleStatistics: "圆形统计", polygonStatistics: "多边形统计", - }, bottomMenu: { groundText: '贴地文字', @@ -148,11 +138,11 @@ export default { pincerArrow: '双箭头', rendezvous: '集结地', rectangle: '矩形', - unLock: '锁定', - Lock: '解锁' + unLock: '解锁', + Lock: '锁定' }, system: { - systemTitle: '系统设置', + systemTitle: '系统面板', authorize: '授权信息', setting: '系统设置', project: '工程信息', @@ -172,10 +162,16 @@ export default { noAuthexpire: '暂未授权', }, systemSetting: { + setStyle: '风格设置', + setCoordinates: '坐标设置', + setUnit: '单位设置', + setFunction: '功能设置', setLanguage: '语言设置', theme: '主题换肤', defaultView: '设置', + defaultViewLabel: '默认视角', defaultData: '添加', + defaultDataLabel: '在线数据', intoBack: '进入', management: '后台管理', showCompass: '导航器', @@ -226,4 +222,4 @@ export default { title: '图标选择', setting: '默认图标参数设置' } -} +} as const diff --git a/src/renderer/src/I18n/zh-EN.ts b/src/renderer/src/I18n/zh-EN.ts index 61e3f0c..472af95 100644 --- a/src/renderer/src/I18n/zh-EN.ts +++ b/src/renderer/src/I18n/zh-EN.ts @@ -1,326 +1,6 @@ export default { - login: { - signIn: 'Sign In' - }, - dashboard: { - langLable: 'English' - }, - leftMenu: { - firstMenu: { - measure: 'measure', - tool: 'tool', - effect: 'effect', - bigData: 'bigData', - modelLibrary: 'modelLibrary', - situation: 'situationLibrary', - onlinePictureSource: 'onlinePictureSource', - analysis: 'analysis', - militaryMark: 'militaryMark', - ersanwei: 'two and three-dimensional', - junbiao3d: '3D military logo' - }, - secondMenu: { - //模型库 - imports: 'import', - // 测量二级菜单 - projectionArea: 'projectionArea', - areaMeasure: 'areaMeasure', - distanceMeasure: 'Ground contact', - heightMeasure: 'height', - triangleMeasure: 'triangle', - lopeDistanceMeasures: 'slope', - projectionDistanceMeasure: 'Projection distance', - MeasureAzimuth: 'Azimuth measurement', - - MeasureAngle: 'MeasureAngle', - coorMeasure: 'coordinate', - clearMeasure: 'clear', - clear: 'clear', - // projectionArea: "projectionArea", - // distanceMeasure: "distanceMeasure", - // heightMeasure: "heightMeasure", - // triangleMeasure: "triangleMeasure", - // coorMeasure: "coordinateMeasure", - // clearMeasure: "clearMeasure", - clearPlanning: 'clearPlanning', - // 工具二级菜单 - BIMEdit: 'BIMEdit', - goodsSearch: 'goodsSearch', - goodsSearchPolygon: 'goodsSearchPolygon', - goodsSearchCircle: 'goodsSearchCircle', - rangeQuery: 'rangeQuery', - // floodSimulation: "floodSimulation", - destoryRecord: 'destoryRecord', - floodSimulation: 'flood', - clearQuery: 'clearQuery', - graffiti: 'graffiti', - clearGraffiti: 'clearGraffiti', - HDScreen: 'HDScreen', - HDScreenHD: 'HDScreenHD', - areaScreen: 'areaScreen', - coorLocation: 'coorLocation', - perspective: 'perspective', - Intervisibility: 'View Analysis', - tilesetClipping: 'tilesetClipping', - transform: 'transform model', - videoRecording: 'videoRecording', - clearTilesetClipping: 'clearTileset', - pressModel: 'press Model', - terrainDig: 'terrainDig', - pictureLocation: 'pictureLocation', - roam: 'roam', - annotationAggregation: 'MarkPoint', - mouseLocation: 'mouseLocation', - mouseOver: 'mouseOver', - importImg: 'Panoramic association', - gdbImport: 'GDB import', - projConvert: 'Degrees, minutes, and seconds', - projectionConvert: 'Projection conversion', - peopleRoomLink: 'Human house association', - splitScreen: 'Roller blind comparison', - - // 特效库二级菜单 - fire: 'fire', - smoke: 'smoke', - explosion: 'explosion', - water: 'waterSurface', - diffuseScan: 'radar', - radarScan: 'diffused', - scanStereoscopic: 'scanStereoscopic', - wallStereoscopic: 'elecFence', - entityWall: 'entityWall', - polyhedronObject: 'multilateral', - clearTrajectoryMotion: 'clearTrajectoryMotion', - cube: 'cube', - trajectoryMotion: 'trackMotion', - roadDraw: 'roadDraw', - lineDraw: 'lineDraw', - rain: 'rain', - snow: 'snow', - fog: 'fog', - nightVision: 'night Vision', - skystarry: 'Starry sky', - illumination: 'Illumination', - light: 'light', - heatMap: 'heatMap', - importPanorama: 'panorama', - fountain: 'fountain', - flyLine: 'flyLine', - - waterL: 'water column', - groundText: 'GroundText', - standText: 'StandText', - - // fire: "fire", - // water: "waterSurface", - // annotationAggregation: "annotationAggregation", - // diffuseScan: "radarLightWave", - // radarScan: "diffusedLightWave", - // wallStereoscopic: "electronicFence", - // polyhedronObject: "multilateralBody", - // cube: "cube", - // trajectoryMotion: "trajectoryMotion", - // roadDraw: "roadDraw", - // lineDraw: "lineDraw", - // rain: "rain", - // snow: "snow", - - // 分析二级菜单 - inundationAnalysis: 'inundation', - visualFieldAnalysis: 'viewshed analysis', - visualFieldAnalysis2: 'round analysis', - profileAnalysis: 'profile', - cutFill: 'cutFill', - slopeDirection: 'slopeDirection', - contour: 'contour', - qcontour: 'Global contour' - // inundationAnalysis: "inundationAnalysis", - // visualFieldAnalysis: "visualFieldAnalysis", - // profileAnalysis: "profileAnalysis", - } - }, - bottomMenu: { - groundText: 'Ground text', - standText: '3D text', - point: 'point', - line: 'line', - curve: 'curve', - panel: 'panel', - ellipse: 'ellipse', - sector: 'sector', - circle: 'circle', - attackArrow: 'attackArrow', - pincerArrow: 'pincerArrow', - rect: 'rect', - assemble: 'assemble', - unLock: 'unLock' - }, - headerTitles: { - systemTitle: 'System setting', - udp: 'Physical sandbox', - ConcurrencyControl: 'Concurrency Control', - localIP: 'Local IP', - localPort: 'Local Port', - weather: 'Weather', - week: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - equipment: { - title: 'equipment', - addEquipment: 'add Equipment', - downloadEquipment: 'download Equipment', - bulkImport: 'bulk Import' - }, - // 0827 - isc: { - title: 'ISCPlatform', - url: 'url', - setInfo: 'setInfo', - updateEquipment: 'updateEquipment' - }, - iconTitle: { - reset: 'default view', - fullScreen: 'full screen', - set: 'setting', - shrink: 'shrink', - logout: 'logout', - locate: 'Satellite positioning', - air: 'UAV', - excel: 'Excel' - }, - - auth: 'Authorization', - Engineering: 'Engineering', - Hikang: 'Hikang platform', - Version: 'Version', - Theme: 'System Setting', - Service: 'Service access', - Satellite: 'Satellite', - searchWay: { - title: 'search mode', - searchWayList: { - poi: 'Offline search', - net: 'Online search' - } - }, - confirm: 'confirm', - auths: { - authTime: 'Auth time', - authType: 'Auth status', - authCode: 'Auth code', - upload: 'import', - authexpire: 'auth expire' - }, - service: { - offline: 'Offline', - official: 'Official', - customize: 'customize', - agreements: { - Agreement: 'Agreement', - setAgreement: 'Protocol setting', - port: 'port', - location: 'location' - } - }, - Engineerings: { - import: 'Road import', - importProject: 'Project import', - cover: 'cover', - increase: 'increase', - derive: 'Project derive', - importPOI: 'importPOI' - }, - Hikangs: { - enable: 'enable' - }, - versions: { - version_code: 'Version number', - version_update: 'Check for updates' - }, - systemSetting: { - setLanguage: 'Language', - theme: 'Thematic', - defaultView: 'defaultView', - defaultData: 'Add online data', - management: 'management', - showCompass: 'show compass', - showLatitudeLongitudeNetwork: 'show Latitude And Longitude Network', - showFangliNet: 'Fangli Net', - showDistanceLegend: 'show distanceLegend', - showToolBar: 'show infoBar', - showFPS: 'show fps', - showMapX: 'show mapX', - occlusion: 'Point occlusion', - coordinateSystem: 'System Coordinate system', - switch: 'switch', - battery: 'Battery Info', - sheetIndexStatusSwitch: 'Standard map sheet', - skinList: { - yingguangse: 'Fluorescent', - gonganlan: 'Tech Blue', - hong: 'Sun Red' - } - }, - model: { - title: 'model', - createModelLibrary: 'create Model Library', - selectModelLibrary: 'select Model Library', - addModelType: 'add Model Type', - importModel: 'import Model', - updatePoster: 'update Poster', - preview: 'preview', - updateModel: 'update Model', - deleteModel: 'delete Model', - editModel: 'editModel' - }, - graphLabel: { - title: 'graph Label', - edit: 'edit', - delete: 'delete', - importGraph: 'import graph', - addLine: 'add line', - addPanel: 'add panel', - addCircle: 'add circle', - createGraphLabelLibrary: 'create GraphLabel Library', - selectGraphLabelLibrary: 'select GraphLabel Library', - addGraphLabelType: 'add GraphLabel Type', - importGraphLabel: 'import GraphLabel' - }, - user: { - title: 'title', - deleteUser: 'delete user', - createUser: 'create user', - importUser: 'import user', - role: 'Permissions management', - deleteRole: 'delete role', - createRole: 'create role', - depart: 'depart', - createDepart: 'create depart', - deleteDepart: 'delete depart', - editDepart: 'edit depart' - }, - terrain: { - terrainSetting: 'Terrain setting' - } - }, - - rightMenu: { - addResource: 'add map data', - addDirectory: 'add Directory', - pictureLocation: 'add photo data', - importPanorama: 'add panoramic data', - edit: 'edit Node', - del: 'delete Node', - setView: 'set View', - resetView: 'reset View', - layerRaise: 'layer Raise', - layerLower: 'layer Lower', - layerToTop: 'layer ToTop', - layerToBottom: 'layer ToBottom', - addTrajectory: 'addTra jectory', - addXlsx: 'add Xlsx', - resetPerspective: 'reset Perspective', - showAttr: 'show Attribute', - importHeader: 'import Header' - }, + title: 'Realistic 3D electronic sand table system', + week: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], tree: { // title: "Information", title: 'Layer Control', @@ -331,6 +11,215 @@ export default { search: 'search', treePlaceholder: 'Please enter a keyword to search', selectPlaceholder: 'select', - selectNoText: 'no select' + selectNoText: 'no select', + confirm: 'confirm' + }, + rightMenu: { + addResource: 'add map data', + addDirectory: 'add Directory', + pictureLocation: 'add photo data', + importPanorama: 'add panoramic data', + addBIM: 'add BIM', + edit: 'edit Node', + del: 'delete Node', + setView: 'set View', + resetView: 'reset View', + layerRaise: 'layer Raise', + layerLower: 'layer Lower', + layerToTop: 'layer ToTop', + layerToBottom: 'layer ToBottom', + tilesetClipping: 'tileset Clipping', + addTrajectory: 'addTra jectory', + addXlsx: 'add Xlsx', + showAttr: 'show Attribute', + importHeader: 'import Header', + resetPerspective: 'reset Perspective', + }, + iconTitle: { + reset: 'default view', + fullScreen: 'full screen', + set: 'setting', + shrink: 'shrink', + logout: 'logout', + locate: 'Satellite positioning', + air: 'UAV', + excel: 'Excel' + }, + firstMenu: { + measure: 'measure', + tool: 'tool', + effect: 'effect', + bigData: 'bigData', + modelLibrary: 'modelLibrary', + situation: 'situationLibrary', + onlinePictureSource: 'onlinePictureSource', + analysis: 'analysis', + militaryMark: 'militaryMark', + ersanwei: 'two and three-dimensional', + junbiao3d: '3D military logo' + }, + effect: { + trajectoryMotion: "trackMotion", + wallStereoscopic: "elecFence", + entityWall: 'entityWall', + diffuseScan: "diffused", + radarScan: "radar", + scanStereoscopic: "scanStereoscopic", + polyhedronObject: "polyhedron", + water: "water surface", + fountain: 'fountain', + waterL: 'water column', + fire: "fire", + explosion: "explosion", + smoke: "smoke", + nightVision: 'night vision', + flyLine: 'flyLine', + }, + analysis: { + inundationAnalysis: "inundation", + profileAnalysis: "profile", + sightAnalysis: "intervisibility analysis", + kenAnalysis: "Visual field analysis", + circleKen: "round analysis", + slopeDirection: "slopeDirection", + cutFill: "cutFill", + globalContour: "global contour line", + contour: "contour line", + clearAnalysis: "clear", + }, + measure: { + projectionArea: "projectionArea", + projectionDistanceMeasure: 'Projection distance', + areaMeasure: "areaMeasure", + distanceMeasure: "ground contact", + heightMeasure: "height", + triangleMeasure: "triangle", + MeasureAzimuth: 'azimuth measurement', + MeasureAngle: "MeasureAngle", + lopeDistanceMeasures: 'slope', + coorMeasure: "coordinate", + clear: "clear", + }, + tool: { + routePlan: "routePlan", + clearRoute: 'clear route', + graffiti: "graffiti", + // stopGraffiti: "结束涂鸦", + clearGraffiti: "clear graffiti", + roam: "roam", + coorLocation: "coorLocation", + mouseLocation: "mouseLocation", + annotationAggregation: "MarkPoint", + splitScreen: 'Roller blind comparison', + screenShot: 'screenShot', + highQuality: 'HDRendering', + videoRecord: 'videoRecording', + pressModel: "press Model", + terrainDig: "terrainDig", + tilesetClipping: "tilesetClipping", + clearTilesetClipping: "clearTilesetClipping", + projConvert: 'Degrees, minutes, and seconds', + projectionConvert: 'Projection conversion', + gdbImport: "GDB import", + circleStatistics: "goodsSearchCircle", + polygonStatistics: "goodsSearch Polygon", + }, + bottomMenu: { + groundText: 'Ground Text', + standText: '3D Text', + point: 'Point', + line: 'Line', + curve: 'Curve', + panel: 'Panel', + ellipse: 'Ellipse', + sector: 'Sector', + circle: 'Circle', + attackArrow: 'AttackArrow', + pincerArrow: 'PincerArrow', + rendezvous: 'Assemble', + rectangle: 'Rectangle', + unLock: 'UnLock', + Lock: 'Lock' + }, + system: { + systemTitle: 'Settings', + authorize: 'Authorization Information', + setting: 'System settings', + project: 'Engineering Information', + device: 'device management', + modelManage: 'Model management', + graphLabelManage: 'Military Icon Management', + photoManage: 'Icon Management', + version: 'Version information' + }, + auths: { + authType: 'Authorization status', + authTime: 'Authorization time', + authCode: 'Authorization code', + upload: 'import', + authexpire: 'expired', + authTempExpire: 'normal', + noAuthexpire: 'unauthorized', + }, + systemSetting: { + setStyle: 'Style setting', + setCoordinates: 'Coordinates setting', + setUnit: 'Unit setting', + setFunction: 'Function setting', + setLanguage: 'Language setting', + theme: 'Thematic peel', + defaultView: 'setting', + defaultViewLabel: 'default view', + defaultData: 'add', + defaultDataLabel: 'online data', + intoBack: 'into', + management: 'management', + showCompass: 'compass', + showLatitudeLongitudeNetwork: 'grid of latitude and longitude', + showFangliNet: 'Fangli Net', + showDistanceLegend: 'distanceLegend', + showToolBar: 'infoBar', + showFPS: 'FPS', + showMapX: 'mapX', + occlusion: 'point occlusion', + coordinateSystem: 'System Coordinate system', + sheetIndexStatusSwitch: 'Standard map sheet', + switch: 'switch', + battery: 'Battery Info', + latitude: 'geographic coordinate format', + lengthUnit: 'length', + areaUnit: 'area', + heightUnit: 'height', + speedUnit: 'speed', + administrativeArea: 'administrativeArea', + skinList: { + yingguangse: 'Fluorescent', + gonganlan: 'Tech Blue', + hong: 'Sun Red' + } + }, + searchWay: { + title: 'search mode', + searchWayList: { + poi: "Offline search", + net: "Online search", + }, + }, + ConcurrencyControl: 'Concurrency Control', + versions: { + version_code: "Version number", + version_update: "Check for updates", + }, + model: { + title: "Model", + setting: 'default settings' + }, + graph: { + title: 'Military Icon', + setting: 'default settings' + }, + photo: { + title: 'Icon', + setting: 'default settings' } } as const diff --git a/src/renderer/src/I18n/zh-TW.ts b/src/renderer/src/I18n/zh-TW.ts index e2e85d0..16122dc 100644 --- a/src/renderer/src/I18n/zh-TW.ts +++ b/src/renderer/src/I18n/zh-TW.ts @@ -1,4 +1,5 @@ export default { + title: '實景三維電子沙盤系統', login: { signIn: '登錄' }, @@ -127,10 +128,11 @@ export default { pincerArrow: '雙箭頭', rect: '矩形', assemble: '集結地', - unLock: '鎖定' + unLock: '解鎖', + Lock: '鎖定' }, headerTitles: { - systemTitle: '係統設置', + systemTitle: '係統面板', udp: '物理沙盘', ConcurrencyControl: '並發量控制', localIP: '本地IP', diff --git a/src/renderer/src/api/gisApi.ts b/src/renderer/src/api/gisApi.ts index bf4e5ce..1e6929f 100644 --- a/src/renderer/src/api/gisApi.ts +++ b/src/renderer/src/api/gisApi.ts @@ -9,6 +9,7 @@ export const GisApi = { }) }, + // 图片定位 uploadLocationImage: async (data: any) => { return await request.post({ url: `/source/uploadLocationImage`, diff --git a/src/renderer/src/api/systemApi.ts b/src/renderer/src/api/systemApi.ts new file mode 100644 index 0000000..354bfdb --- /dev/null +++ b/src/renderer/src/api/systemApi.ts @@ -0,0 +1,19 @@ +import request from '@/axios/request' + +export const SystemApi = { + // 读取系统服务端口配置 + getSystemService: async (data: any) => { + return await request.post({ + url: `/systemService/info`, + data + }) + }, + + // 修改系统服务端口配置 + updateSystemService: async (data: any) => { + return await request.post({ + url: `/systemService/updatePort`, + data + }) + } +} diff --git a/src/renderer/src/assets/i18n/index.js b/src/renderer/src/assets/i18n/index.js deleted file mode 100644 index 3de5d32..0000000 --- a/src/renderer/src/assets/i18n/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import Vue from "vue"; -// 使用插件 -import VueI18n from "vue-i18n"; -import * as vx from "vuex"; -import systemSetting from "@/store/modules/systemSetting"; - -Vue.use(VueI18n); -const i18n = { - locale: systemSetting.state.lang || "zh", // 语言标识,第一次登录默认是中文 - messages: { - zh: require("./lang/local_zh"), // 中文 - en: require("./lang/local_en"), // 英语 - tw: require("./lang/local_tw"), // 台湾 - // ... //要多少语言就自己添加多少 - }, -}; - -export default i18n; -// module.exports = messages diff --git a/src/renderer/src/assets/i18n/lang/local_en.js b/src/renderer/src/assets/i18n/lang/local_en.js deleted file mode 100644 index 5e6b950..0000000 --- a/src/renderer/src/assets/i18n/lang/local_en.js +++ /dev/null @@ -1,348 +0,0 @@ -let obj = require("../../../../../config/app_config"); -module.exports = { - title: { - name: obj.productName_en, //"实景三维数字孪生系统" - }, - login: { - signIn: "Sign In", - }, - dashboard: { - langLable: "English", - }, - leftMenu: { - firstMenu: { - measure: "measure", - tool: "tool", - effect: "effect", - bigData: "bigData", - modelLibrary: "modelLibrary", - situation: "situationLibrary", - onlinePictureSource: "onlinePictureSource", - analysis: "analysis", - militaryMark: "militaryMark", - ersanwei: "two and three-dimensional", - junbiao3d: "3D military logo", - }, - secondMenu: { - //模型库 - imports: "import", - // 测量二级菜单 - projectionArea: "projectionArea", - areaMeasure: "areaMeasure", - distanceMeasure: "Ground contact", - heightMeasure: "height", - triangleMeasure: "triangle", - lopeDistanceMeasures: "slope", - projectionDistanceMeasure: "Projection distance", - MeasureAzimuth: "Azimuth measurement", - - MeasureAngle: "MeasureAngle", - coorMeasure: "coordinate", - clearMeasure: "clear", - clear: "clear", - // projectionArea: "projectionArea", - // distanceMeasure: "distanceMeasure", - // heightMeasure: "heightMeasure", - // triangleMeasure: "triangleMeasure", - // coorMeasure: "coordinateMeasure", - // clearMeasure: "clearMeasure", - clearPlanning: "clearPlanning", - // 工具二级菜单 - BIMEdit: "BIMEdit", - goodsSearch: "goodsSearch", - goodsSearchPolygon: "goodsSearchPolygon", - goodsSearchCircle: "goodsSearchCircle", - rangeQuery: "rangeQuery", - // floodSimulation: "floodSimulation", - destoryRecord: "destoryRecord", - floodSimulation: "flood", - clearQuery: "clearQuery", - graffiti: "graffiti", - clearGraffiti: "clearGraffiti", - HDScreen: "HDScreen", - HDScreenHD: "HDScreenHD", - areaScreen: "areaScreen", - coorLocation: "coorLocation", - perspective: "perspective", - Intervisibility: "View Analysis", - tilesetClipping: "tilesetClipping", - transform: "transform model", - videoRecording: "videoRecording", - clearTilesetClipping: "clearTileset", - pressModel: "press Model", - terrainDig: "terrainDig", - pictureLocation: "pictureLocation", - roam: "roam", - annotationAggregation: "MarkPoint", - mouseLocation: "mouseLocation", - mouseOver: "mouseOver", - importImg: "Panoramic association", - gdbImport: "GDB import", - projConvert: "Degrees, minutes, and seconds", - projectionConvert: "Projection conversion", - peopleRoomLink: "Human house association", - splitScreen: "Roller blind comparison", - - // 特效库二级菜单 - fire: "fire", - smoke: "smoke", - explosion: "explosion", - water: "waterSurface", - diffuseScan: "radar", - radarScan: "diffused", - scanStereoscopic: "scanStereoscopic", - wallStereoscopic: "elecFence", - entityWall: "entityWall", - polyhedronObject: "multilateral", - clearTrajectoryMotion: "clearTrajectoryMotion", - cube: "cube", - trajectoryMotion: "trackMotion", - roadDraw: "roadDraw", - lineDraw: "lineDraw", - rain: "rain", - snow: "snow", - fog: "fog", - nightVision: "night Vision", - skystarry: "Starry sky", - illumination: "Illumination", - light: "light", - heatMap: "heatMap", - importPanorama: "panorama", - fountain: "fountain", - flyLine:"flyLine", - - waterL: "water column", - groundText: "GroundText", - standText: "StandText", - - // fire: "fire", - // water: "waterSurface", - // annotationAggregation: "annotationAggregation", - // diffuseScan: "radarLightWave", - // radarScan: "diffusedLightWave", - // wallStereoscopic: "electronicFence", - // polyhedronObject: "multilateralBody", - // cube: "cube", - // trajectoryMotion: "trajectoryMotion", - // roadDraw: "roadDraw", - // lineDraw: "lineDraw", - // rain: "rain", - // snow: "snow", - - // 分析二级菜单 - inundationAnalysis: "inundation", - visualFieldAnalysis: "viewshed analysis", - visualFieldAnalysis2: "round analysis", - profileAnalysis: "profile", - cutFill: "cutFill", - slopeDirection: "slopeDirection", - contour: "contour", - qcontour:'Global contour', - // inundationAnalysis: "inundationAnalysis", - // visualFieldAnalysis: "visualFieldAnalysis", - // profileAnalysis: "profileAnalysis", - }, - }, - bottomMenu: { - groundText: "Ground text", - standText: "3D text", - point: "point", - line: "line", - curve: "curve", - panel: "panel", - ellipse: "ellipse", - sector: "sector", - circle: "circle", - attackArrow: "attackArrow", - pincerArrow: "pincerArrow", - rect: "rect", - assemble: "assemble", - unLock: "unLock", - }, - headerTitles: { - systemTitle: "System setting", - udp: "Physical sandbox", - ConcurrencyControl: "Concurrency Control", - localIP: "Local IP", - localPort: "Local Port", - weather: "Weather", - week: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ], - equipment: { - title: "equipment", - addEquipment: "add Equipment", - downloadEquipment: "download Equipment", - bulkImport: "bulk Import", - }, - // 0827 - isc: { - title: "ISCPlatform", - url: "url", - setInfo: "setInfo", - updateEquipment: "updateEquipment", - }, - iconTitle: { - reset: "default view", - fullScreen: "full screen", - set: "setting", - shrink: "shrink", - logout: "logout", - locate: "Satellite positioning", - air: "UAV", - excel: "Excel", - }, - - auth: "Authorization", - Engineering: "Engineering", - Hikang: "Hikang platform", - Version: "Version", - Theme: "System Setting", - Service: "Service access", - Satellite: "Satellite", - searchWay: { - title: "search mode", - searchWayList: { - poi: "Offline search", - net: "Online search", - }, - }, - confirm: "confirm", - auths: { - authTime: "Auth time", - authType: "Auth status", - authCode: "Auth code", - upload: "import", - authexpire: "auth expire", - }, - service: { - offline: "Offline", - official: "Official", - customize: "customize", - agreements: { - Agreement: "Agreement", - setAgreement: "Protocol setting", - port: "port", - location: "location", - }, - }, - Engineerings: { - import: "Road import", - importProject: "Project import", - cover: "cover", - increase: "increase", - derive: "Project derive", - importPOI: "importPOI", - }, - Hikangs: { - enable: "enable", - }, - versions: { - version_code: "Version number", - version_update: "Check for updates", - }, - systemSetting: { - setLanguage: "Language", - theme: "Thematic", - defaultView: "defaultView", - defaultData: "Add online data", - management: "management", - showCompass: "show compass", - showLatitudeLongitudeNetwork: "show Latitude And Longitude Network", - showFangliNet: "Fangli Net", - showDistanceLegend: "show distanceLegend", - showToolBar: "show infoBar", - showFPS: "show fps", - showMapX: "show mapX", - occlusion: "Point occlusion", - coordinateSystem: "System Coordinate system", - switch: "switch", - battery: "Battery Info", - sheetIndexStatusSwitch: "Standard map sheet", - skinList: { - yingguangse: "Fluorescent", - gonganlan: "Tech Blue", - hong: "Sun Red", - }, - }, - model: { - title: "model", - createModelLibrary: "create Model Library", - selectModelLibrary: "select Model Library", - addModelType: "add Model Type", - importModel: "import Model", - updatePoster: "update Poster", - preview: "preview", - updateModel: "update Model", - deleteModel: "delete Model", - editModel: "editModel", - }, - graphLabel: { - title: "graph Label", - edit: "edit", - delete: "delete", - importGraph: "import graph", - addLine: "add line", - addPanel: "add panel", - addCircle: "add circle", - createGraphLabelLibrary: "create GraphLabel Library", - selectGraphLabelLibrary: "select GraphLabel Library", - addGraphLabelType: "add GraphLabel Type", - importGraphLabel: "import GraphLabel", - }, - user: { - title: "title", - deleteUser: "delete user", - createUser: "create user", - importUser: "import user", - role: "Permissions management", - deleteRole: "delete role", - createRole: "create role", - depart: "depart", - createDepart: "create depart", - deleteDepart: "delete depart", - editDepart: "edit depart", - }, - terrain: { - terrainSetting: "Terrain setting", - }, - }, - - rightMenu: { - addResource: "add map data", - addDirectory: "add Directory", - pictureLocation: "add photo data", - importPanorama: "add panoramic data", - edit: "edit Node", - del: "delete Node", - setView: "set View", - resetView: "reset View", - layerRaise: "layer Raise", - layerLower: "layer Lower", - layerToTop: "layer ToTop", - layerToBottom: "layer ToBottom", - addTrajectory: "addTra jectory", - addXlsx: "add Xlsx", - resetPerspective: "reset Perspective", - showAttr: "show Attribute", - importHeader: "import Header", - }, - tree: { - // title: "Information", - title: "Layer Control", - layer: "layer", - location: "location", - }, - btn: { - search: "search", - treePlaceholder: "Please enter a keyword to search", - selectPlaceholder: "select", - selectNoText: "no select", - }, -}; diff --git a/src/renderer/src/assets/i18n/lang/local_tw.js b/src/renderer/src/assets/i18n/lang/local_tw.js deleted file mode 100644 index e820c0f..0000000 --- a/src/renderer/src/assets/i18n/lang/local_tw.js +++ /dev/null @@ -1,320 +0,0 @@ -let obj = require("../../../../../config/app_config"); -module.exports = { - title: { - name: obj.productName_tw, //"实景三维数字孪生系统" - }, - login: { - signIn: "登錄", - }, - - leftMenu: { - firstMenu: { - measure: "測量庫", - tool: "工具庫", - effect: "特效庫", - bigData: "大數據", - situation: "方案庫", - modelLibrary: "模型庫", - onlinePictureSource: "在線圖源", - analysis: "分析庫", - militaryMark: "軍標庫", - ersanwei: "二三維", - junbiao3d: "三維軍標", - }, - secondMenu: { - //模型库 - imports: "導入", - // 测量二级菜单 - projectionArea: "投影面積", - areaMeasure: "貼地面積", - distanceMeasure: "貼地距離", - heightMeasure: "垂直高度", - triangleMeasure: "空間三角", - coorMeasure: "坐標", - MeasureAngle: "夹角", - lopeDistanceMeasures: "坡度", - MeasureAzimuth: "方位角", - projectionDistanceMeasure: "投影距離", - clearMeasure: "清除測量", - clear: "清除", - - // 工具二级菜单 - BIMEdit: "BIM編輯", - goodsSearch: "物资統計", - goodsSearchCircle: "圓形統計", - goodsSearchPolgon: "多邊形統計", - rangeQuery: "範圍查詢", - floodSimulation: "淹沒模擬", - clearQuery: "清除查詢", - destoryRecord: "結束錄製", - graffiti: "塗鴉", - clearGraffiti: "清除塗鴉", - HDScreen: "屏幕截圖", - HDScreenHD: "高清出图", - areaScreen: "範圍截圖", - coorLocation: "坐標定位", - perspective: "透視", - Intervisibility: "視線分析", - tilesetClipping: "剖切", - transform: "模型轉換", - videoRecording: "視頻錄製", - routePlan: "路徑規劃", - clearPlanning: "清除路徑規劃", - clearTilesetClipping: "清除剖切", - pressModel: "模型壓平", - terrainDig: "地形開挖", - pictureLocation: "照片定位", - importPanorama: "全景導入", - roam: "飛行漫遊", - annotationAggregation: "標註點聚合", - mouseLocation: "鼠標定位", - mouseOver: "結束定位", - importImg: "全景關聯", - gdbImport: "gdb導入", - projConvert: "度分秒", - projectionConvert: "投影轉換", - peopleRoomLink: "人房關聯", - splitScreen: "捲簾對比", - // 特效库二级菜单 - fire: "火焰", - smoke: "烟霧", - explosion: "爆炸", - water: "水面", - diffuseScan: "擴散光波", - radarScan: "雷達光波", - clearTrajectoryMotion: "清除軌跡", - scanStereoscopic: "立體雷達", - wallStereoscopic: "電子圍墻", - entityWall: "物體牆", - polyhedronObject: "多邊體", - cube: "立方體", - trajectoryMotion: "軌跡運動", - roadDraw: "道路繪製", - lineDraw: "線路繪製", - rain: "與", - snow: "雪", - fog: "霧", - nightVision: "夜視", - skystarry: "星空", - illumination: "光照", - light: "光照", - heatMap: "熱力圖", - fountain: "喷泉", - waterL: "喷射水柱", - groundText: "貼地文字", - standText: "立體文字", - flyLine:"飛線", - - // 分析二级菜单 - inundationAnalysis: "淹沒分析", - visualFieldAnalysis: "視域分析", - visualFieldAnalysis2: "圆形視域", - profileAnalysis: "剖面分析", - cutFill: "土方分析", - slopeDirection: "坡度坡向", - viewShed: "可視域分析", - contour: "等高線", - qcontour:'全域等高線', - }, - }, - bottomMenu: { - groundText: "貼地文字", - standText: "立體文字", - point: "點", - line: "綫", - curve: "曲線", - panel: "麵", - circle: "圓", - ellipse: "橢圓", - sector: "扇形", - attackArrow: "箭頭", - pincerArrow: "雙箭頭", - rect: "矩形", - assemble: "集結地", - unLock: "鎖定", - }, - headerTitles: { - systemTitle: "係統設置", - udp: "物理沙盘", - ConcurrencyControl: "並發量控制", - localIP: "本地IP", - localPort: "本地端口", - weather: "天气", - week: [ - "星期日", - "星期一", - "星期二", - "星期三", - "星期四", - "星期五", - "星期六", - ], - equipment: { - title: "設備管理", - addEquipment: "添加設備", - downloadEquipment: "下載模板", - bulkImport: "批量導入", - }, - // 0827 - isc: { - title: "ISC平台", - url: "平台地址", - setInfo: "設置平台信息", - updateEquipment: "更新平台設備", - }, - iconTitle: { - reset: "默认视角", - fullScreen: "全屏", - set: "設置", - shrink: "退出全屏", - locate: "北鬥定位", - logout: "退出登錄", - air: "無人機", - excel: "Excel", - }, - auth: "授權信息", - Engineering: "工程信息", - Hikang: "海康平臺", - Version: "版本信息", - Theme: "係統設置", - Service: "服务接入", - Satellite: "衛星定位", - searchWay: { - title: "搜索方式", - searchWayList: { - poi: "离線搜索", - net: "在線搜索", - }, - }, - confirm: "確認", - auths: { - authTime: "授權時間", - authType: "授權狀態", - authCode: "授權碼", - upload: "導入", - authexpire: "授權過期", - }, - service: { - offline: "離綫服務", - official: "官方服務", - customize: "自定義", - agreements: { - Agreement: "協議", - setAgreement: "協議設置", - port: "端口", - location: "地址", - }, - }, - Engineerings: { - import: "路網導入", - cover: "覆蓋", - increase: "增加", - importProject: "工程導入", - derive: "工程導齣", - importPOI: "導入POI", - }, - Hikangs: { - enable: "啓用", - }, - versions: { - version_code: "版本號", - version_update: "檢查更新", - }, - systemSetting: { - setLanguage: "語言設置", - theme: "主題换膚", - defaultView: "設置默認視角", - defaultData: "添加在線數據", - management: "後臺管理", - showCompass: "導航器", - showLatitudeLongitudeNetwork: "經緯網", - showFangliNet: "方裡網", - showDistanceLegend: "比例尺", - showToolBar: "信息欄", - showFPS: "刷新率", - showMapX: "鷹眼圖", - occlusion: "地形遮擋", - coordinateSystem: "系統坐標系", - switch: "切換", - battery: "電池資訊", - sheetIndexStatusSwitch: "標準圖幅", - skinList: { - yingguangse: "熒光色", - gonganlan: "科技藍", - hong: "烈日紅", - }, - }, - model: { - title: "模型管理", - createModelLibrary: "創建模型庫", - selectModelLibrary: "選擇模型庫", - addModelType: "添加模型類型", - importModel: "導入模型", - updatePoster: "更換縮略圖", - preview: "預覽", - updateModel: "更換模型", - deleteModel: "刪除", - editModel: "編輯", - }, - graphLabel: { - title: "軍標管理", - createGraphLabelLibrary: "創建軍標庫", - selectGraphLabelLibrary: "選擇軍標庫", - addGraphLabelType: "添加軍標類型", - importGraphLabel: "導入軍標", - edit: "編輯", - delete: "刪除", - importGraph: "導入軍標", - addLine: "添加線", - addPanel: "添加面", - addCircle: "添加圓", - }, - user: { - title: "用戶管理", - deleteUser: "刪除", - createUser: "創建用戶", - importUser: "導入用戶", - role: "权限管理", - deleteRole: "刪除", - createRole: "創建角色", - depart: "部門管理", - createDepart: "創建部門", - deleteDepart: "創建部門", - editDepart: "修改部門", - }, - terrain: { - terrainSetting: "地形設置", - }, - }, - rightMenu: { - addDirectory: "添加資料夾", - addResource: "添加地圖數據", - pictureLocation: "帶定位照片", - importPanorama: "帶定位全景", - edit: "編輯節點", - del: "刪除節點", - setView: "設置視角", - resetView: "重置視角", - layerRaise: "圖層上移", - layerLower: "圖層下移", - layerToTop: "圖層置頂", - layerToBottom: "圖層置底", - addTrajectory: "軌跡運動", - addXlsx: "添加作戰數據", - resetPerspective: "重置透視", - showAttr: "查看屬性", - importHeader: "導入表头", - }, - tree: { - // title: "綜合資訊", - title: "圖層指揮艙", - layer: "圖層", - location: "地點", - }, - btn: { - search: "搜索", - treePlaceholder: "請輸入關鍵詞進行搜索", - selectPlaceholder: "請選擇", - selectNoText: "無數據", - }, -}; diff --git a/src/renderer/src/assets/i18n/lang/local_zh.js b/src/renderer/src/assets/i18n/lang/local_zh.js deleted file mode 100644 index c292a63..0000000 --- a/src/renderer/src/assets/i18n/lang/local_zh.js +++ /dev/null @@ -1,330 +0,0 @@ -// productName -let obj = require('../../../../../config/app_config') -console.log(obj) -module.exports = { - title: { - name: obj.productName //"实景三维数字孪生系统" - }, - login: { - signIn: '登录' - }, - dashboard: { - langLable: '中文简体' - }, - leftMenu: { - firstMenu: { - measure: '测量库', - tool: '工具库', - effect: '特效库', - bigData: '大数据', - modelLibrary: '模型库', - situation: '方案库', - onlinePictureSource: '在线图源', - analysis: '分析库', - militaryMark: '军标库', - ersanwei: '二三维', - junbiao3d: '三维军标' - }, - secondMenu: { - //模型库 - imports: '导入', - // 测量二级菜单 - projectionArea: '投影面积', - areaMeasure: '贴地面积', - distanceMeasure: '贴地距离', - heightMeasure: '垂直高度', - triangleMeasure: '空间三角', - coorMeasure: '坐标', - MeasureAngle: '夹角', - clearMeasure: '清除测量', - MeasureAzimuth: '方位角', - lopeDistanceMeasures: '坡度', - projectionDistanceMeasure: '投影距离', - clear: '清除', - - // 工具二级菜单 - BIMEdit: 'BIM编辑', - goodsSearch: '物资统计', - goodsSearchPolgon: '多边形统计', - goodsSearchCircle: '圆形统计', - rangeQuery: '范围查询', - floodSimulation: '淹没模拟', - clearQuery: '清除查询', - destoryRecord: '结束录制', - graffiti: '涂鸦', - stopGraffiti: '结束涂鸦', - clearGraffiti: '清除涂鸦', - HDScreen: '屏幕截图', - HDScreenHD: '高清出图', - areaScreen: '范围截图', - coorLocation: '坐标定位', - perspective: '透视', - Intervisibility: '视线分析', - transform: '模型转换', - videoRecording: '视频录制', - routePlan: '路径规划', - tilesetClipping: '剖切', - clearTilesetClipping: '清除剖切', - pressModel: '模型压平', - terrainDig: '地形开挖', - splitScreen: '卷帘对比', - - roam: '飞行漫游', - annotationAggregation: '标注点聚合', - mouseLocation: '鼠标定位', - mouseOver: '结束定位', - importImg: '全景关联', - gdbImport: 'gdb导入', - projConvert: '度分秒', - projectionConvert: '投影转换', - peopleRoomLink: '人房关联', - - // 特效库二级菜单 - fire: '火焰', - smoke: '烟雾', - explosion: '爆炸', - water: '水面', - diffuseScan: '扩散光波', - radarScan: '雷达光波', - scanStereoscopic: '立体雷达', - wallStereoscopic: '电子围墙', - entityWall: '实体墙', - polyhedronObject: '多边体', - cube: '立方体', - trajectoryMotion: '轨迹运动', - clearTrajectoryMotion: '清除轨迹', - roadDraw: '道路绘制', - lineDraw: '线路绘制', - rain: '雨', - snow: '雪', - fog: '雾', - nightVision: '夜视', - skystarry: '星空', - illumination: '光照', - light: '光照', - heatMap: '热力图', - fountain: '喷泉', - waterL: '喷射水柱', - flyLine: '飞线', - // 分析二级菜单 - inundationAnalysis: '淹没分析', - visualFieldAnalysis: '视域分析', - visualFieldAnalysis2: '圆形视域', - profileAnalysis: '剖面分析', - cutFill: '土方分析', - slopeDirection: '坡度坡向', - contour: '等高线', - qcontour: '全局等高线', - pictureLocation: '照片定位', - importPanorama: '全景导入', - clearAnalysis: '清除' - } - }, - bottomMenu: { - groundText: '贴地文字', - standText: '立体文字', - point: '点', - line: '线', - curve: '曲线', - panel: '面', - ellipse: '椭圆', - sector: '扇形', - circle: '圆', - attackArrow: '箭头', - pincerArrow: '双箭头', - assemble: '集结地', - rect: '矩形', - unLock: '锁定', - Lock: '解锁' - }, - headerTitles: { - //顶部抬头以及系统设置页面文字汉语翻译 - systemTitle: '系统设置', - udp: '物理沙盘', - ConcurrencyControl: '并发量控制', - localIP: '本地IP', - localPort: '本地端口', - remoteIP: '远程IP', - remotePort: '远程端口', - weather: '天气', - week: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], - equipment: { - title: '设备管理', - addEquipment: '添加设备', - downloadEquipment: '下载模板', - bulkImport: '批量导入' - }, - // 无人机 - air: { - title: '无人机管理', - addAir: '添加无人机', - downloadAir: '下载模板' - }, - // 0827 - isc: { - title: 'ISC平台', - url: '平台地址', - setInfo: '设置平台信息', - updateEquipment: '更新平台设备' - }, - iconTitle: { - reset: '默认视角', - fullScreen: '全屏', - set: '设置', - shrink: '退出全屏', - logout: '退出登录', - locate: '北斗定位', - air: '无人机', - excel: 'Excel' - }, - auth: '授权信息', - Engineering: '工程信息', - Hikang: '海康平台', - Version: '版本信息', - Theme: '系统设置', - Satellite: '卫星定位', - searchWay: { - title: '搜索方式', - searchWayList: { - poi: '离线搜索', - net: '在线搜索' - } - }, - Service: '服务接入', - confirm: '确认', - auths: { - authType: '授权状态', - authTime: '授权时间', - authCode: '授权码', - upload: '授权导入', - authexpire: '授权过期', - authTempExpire: '授权正常', - noAuthexpire: '暂未授权' - }, - service: { - offline: '离线服务', - official: '官方服务', - customize: '自定义', - agreements: { - Agreement: '协议', - setAgreement: '协议设置', - port: '端口', - location: '地址' - } - }, - Engineerings: { - import: '路网导入', - cover: '覆盖', - increase: '增加', - importProject: '工程覆盖导入', - consolidated: '工程合并导入', - derive: '工程导出', - importPOI: 'POI导入' - }, - Hikangs: { - enable: '启用' - }, - versions: { - version_code: '版本号', - version_update: '检查更新' - }, - systemSetting: { - setLanguage: '语言设置', - theme: '主题换肤', - defaultView: '设置默认视角', - defaultData: '添加在线数据', - management: '后台管理', - showCompass: '导航器', - showLatitudeLongitudeNetwork: '经纬网', - showFangliNet: '方里网', - showDistanceLegend: '比例尺', - showToolBar: '信息栏', - showFPS: '刷新率', - showMapX: '鹰眼图', - occlusion: '地形遮挡', - coordinateSystem: '系统坐标系', - sheetIndexStatusSwitch: '标准图幅', - switch: '切换', - battery: '电池信息', - skinList: { - yingguangse: '荧光色', - gonganlan: '科技蓝', - hong: '烈日红' - } - }, - model: { - title: '模型管理', - createModelLibrary: '创建模型库', - selectModelLibrary: '选择模型库', - addModelType: '添加模型类型', - importModel: '导入模型', - updatePoster: '更换缩略图', - preview: '预览', - updateModel: '更换模型', - deleteModel: '删除', - editModel: '编辑' - }, - graphLabel: { - title: '军标管理', - createGraphLabelLibrary: '创建军标库', - selectGraphLabelLibrary: '选择军标库', - addGraphLabelType: '添加军标类型', - importGraphLabel: '导入军标', - edit: '编辑', - delete: '删除', - importGraph: '导入军标', - addLine: '添加线', - addPanel: '添加面', - addCircle: '添加圆' - }, - user: { - title: '用户管理', - deleteUser: '删除', - createUser: '创建用户', - importUser: '导入用户', - role: '权限管理', - deleteRole: '删除', - createRole: '创建角色', - depart: '部门管理', - createDepart: '创建部门', - deleteDepart: '删除部门', - editDepart: '修改部门' - }, - terrain: { - terrainSetting: '地形设置' - } - }, - rightMenu: { - addDirectory: '添加文件夹', - addResource: '添加地图数据', - pictureLocation: '带定位照片', - importPanorama: '带定位全景', - addBIM: '添加BIM', - edit: '编辑节点', - del: '删除节点', - setView: '设置视角', - resetView: '重置视角', - layerRaise: '图层上移', - layerLower: '图层下移', - layerToTop: '图层置顶', - layerToBottom: '图层置底', - tilesetClipping: '剖切', - addTrajectory: '轨迹运动', - addXlsx: '添加作战数据', - showAttr: '查看属性', - importHeader: '导入表头', - resetPerspective: '重置透视' - }, - tree: { - title: '图层指挥舱', - // title: "综合信息", - layer: '图层', - location: '地点' - }, - btn: { - search: '搜索', - treePlaceholder: '关键词搜索', - selectPlaceholder: '请选择', - selectNoText: '无数据' - } -} diff --git a/src/renderer/src/components/Pagination/index.vue b/src/renderer/src/components/Pagination/index.vue index c45c30c..e89cf7b 100644 --- a/src/renderer/src/components/Pagination/index.vue +++ b/src/renderer/src/components/Pagination/index.vue @@ -5,12 +5,12 @@ v-model:current-page="currentPage" v-model:page-size="pageSize" :background="true" - :page-sizes="[10, 20, 30, 50, 100]" + :page-sizes="pageSizes ? pageSizes : [10, 20, 30, 50, 100]" :pager-count="pagerCount" :total="total" :small="isSmall" class="pagination" - layout="total, sizes, prev, pager, next, jumper" + :layout='"total, prev, pager, next, jumper" + (pageSizes===false?"":"sizes")' @size-change="handleSizeChange" @current-change="handleCurrentChange" /> @@ -44,6 +44,7 @@ const props = defineProps({ type: Number, default: 20 }, + pageSizes: {}, // 设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠 // 移动端页码按钮的数量端默认值 5 pagerCount: { @@ -52,7 +53,7 @@ const props = defineProps({ } }) -const emit = defineEmits(['update:page', 'update:limit', 'pagination']) +const emit = defineEmits(['update:page', 'update:limit', 'update:pageSizes', 'pagination']) const currentPage = computed({ get() { return props.page @@ -71,6 +72,15 @@ const pageSize = computed({ emit('update:limit', val) } }) +const pageSizes = computed({ + get() { + return props.pageSizes + }, + set(val) { + // 触发 update:limit 事件,更新 limit 属性,从而更新 pageSize + emit('update:pageSizes', val) + } +}) const handleSizeChange = (val) => { // 如果修改后超过最大页面,强制跳转到第 1 页 if (currentPage.value * val > props.total) { diff --git a/src/renderer/src/components/dialog/baseDialog.vue b/src/renderer/src/components/dialog/baseDialog.vue index ca0db3b..7788d57 100644 --- a/src/renderer/src/components/dialog/baseDialog.vue +++ b/src/renderer/src/components/dialog/baseDialog.vue @@ -1,9 +1,15 @@ @@ -19,7 +19,9 @@ diff --git a/src/renderer/src/views/components/propertyBox/billboardObject.vue b/src/renderer/src/views/components/propertyBox/billboardObject.vue index 34a597f..6f207f9 100644 --- a/src/renderer/src/views/components/propertyBox/billboardObject.vue +++ b/src/renderer/src/views/components/propertyBox/billboardObject.vue @@ -783,8 +783,8 @@ const remove = () => { type: 'warning' }) .then(async () => { - let selectNodes = getSelectedNodes(window.treeObj) - let source_ids = cusRemoveNode(window.treeObj, selectNodes) + let node = window.treeObj.getNodeByParam('id', that.options.id, null) + let source_ids = cusRemoveNode(window.treeObj, [node]) const res = await TreeApi.removeDirectory({ ids: source_ids }) if (res.code == 0 || res.code == 200) { ElMessage({ @@ -792,6 +792,7 @@ const remove = () => { type: 'success' }) that.remove() + (window as any)._entityMap.delete(source_ids[0]) } else { ElMessage({ message: res.msg || '删除失败', diff --git a/src/renderer/src/views/components/propertyBox/circleDiffuse.vue b/src/renderer/src/views/components/propertyBox/circleDiffuse.vue index 1887a4b..81904c3 100644 --- a/src/renderer/src/views/components/propertyBox/circleDiffuse.vue +++ b/src/renderer/src/views/components/propertyBox/circleDiffuse.vue @@ -275,30 +275,31 @@ const close = () => { const remove = () => { close() ElMessageBox.confirm('此操作将永久删除节点及所有子节点, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let selectNodes = getSelectedNodes(window.treeObj) - let source_ids = cusRemoveNode(window.treeObj, selectNodes) - const res = await TreeApi.removeDirectory({ ids: source_ids }) - if (res.code == 0 || res.code == 200) { - ElMessage({ - message: '删除成功', - type: 'success' - }) - that.remove() - } else { - ElMessage({ - message: res.msg || '删除失败', - type: 'error' - }) - } - }) - .catch(() => { - // 用户点击取消,不执行任何操作 + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' }) + .then(async () => { + let node = window.treeObj.getNodeByParam('id', that.options.id, null) + let source_ids = cusRemoveNode(window.treeObj, [node]) + const res = await TreeApi.removeDirectory({ ids: source_ids }) + if (res.code == 0 || res.code == 200) { + ElMessage({ + message: '删除成功', + type: 'success' + }) + that.remove() + (window as any)._entityMap.delete(source_ids[0]) + } else { + ElMessage({ + message: res.msg || '删除失败', + type: 'error' + }) + } + }) + .catch(() => { + // 用户点击取消,不执行任何操作 + }) } const translate = () => { that.openPositionEditing(() => { diff --git a/src/renderer/src/views/components/propertyBox/curvelineObject.vue b/src/renderer/src/views/components/propertyBox/curvelineObject.vue index a21a9fa..d7dc4b0 100644 --- a/src/renderer/src/views/components/propertyBox/curvelineObject.vue +++ b/src/renderer/src/views/components/propertyBox/curvelineObject.vue @@ -554,8 +554,8 @@ const remove = () => { type: 'warning' }) .then(async () => { - let selectNodes = getSelectedNodes(window.treeObj) - let source_ids = cusRemoveNode(window.treeObj, selectNodes) + let node = window.treeObj.getNodeByParam('id', that.options.id, null) + let source_ids = cusRemoveNode(window.treeObj, [node]) const res = await TreeApi.removeDirectory({ ids: source_ids }) if (res.code == 0 || res.code == 200) { ElMessage({ @@ -563,6 +563,7 @@ const remove = () => { type: 'success' }) that.remove() + (window as any)._entityMap.delete(source_ids[0]) } else { ElMessage({ message: res.msg || '删除失败', @@ -571,6 +572,7 @@ const remove = () => { } }) .catch(() => { + // 用户点击取消,不执行任何操作 }) } diff --git a/src/renderer/src/views/components/propertyBox/explosion.vue b/src/renderer/src/views/components/propertyBox/explosion.vue index 1c4238b..e91fbe9 100644 --- a/src/renderer/src/views/components/propertyBox/explosion.vue +++ b/src/renderer/src/views/components/propertyBox/explosion.vue @@ -66,9 +66,9 @@ import { ref } from 'vue' import { inject } from 'vue' import { TreeApi } from '@/api/tree' import Dialog from '@/components/dialog/baseDialog.vue' -import { useTreeNode } from '../tree/hooks/treeNode' +import { useTreeNode } from '@/views/components/tree/hooks/treeNode' -const { cusUpdateNode } = useTreeNode() +const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode() const baseDialog: any = ref(null) const eventBus: any = inject('bus') @@ -120,8 +120,33 @@ const close = () => { baseDialog.value?.close() } const remove = () => { - that.remove() close() + ElMessageBox.confirm('此操作将永久删除节点及所有子节点, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let node = window.treeObj.getNodeByParam('id', that.options.id, null) + let source_ids = cusRemoveNode(window.treeObj, [node]) + const res = await TreeApi.removeDirectory({ ids: source_ids }) + if (res.code == 0 || res.code == 200) { + ElMessage({ + message: '删除成功', + type: 'success' + }) + that.remove() + (window as any)._entityMap.delete(source_ids[0]) + } else { + ElMessage({ + message: res.msg || '删除失败', + type: 'error' + }) + } + }) + .catch(() => { + // 用户点击取消,不执行任何操作 + }) } defineExpose({ open, diff --git a/src/renderer/src/views/components/propertyBox/flyLine.vue b/src/renderer/src/views/components/propertyBox/flyLine.vue index dc6bbca..9af9589 100644 --- a/src/renderer/src/views/components/propertyBox/flyLine.vue +++ b/src/renderer/src/views/components/propertyBox/flyLine.vue @@ -88,7 +88,7 @@ import { TreeApi } from '@/api/tree' import Dialog from '@/components/dialog/baseDialog.vue' import { useTreeNode } from '../tree/hooks/treeNode' -const { cusUpdateNode } = useTreeNode() +const { cusUpdateNode, getSelectedNodes, cusRemoveNode } = useTreeNode() const baseDialog: any = ref(null) const eventBus: any = inject('bus') @@ -144,8 +144,33 @@ const close = () => { baseDialog.value?.close() } const remove = () => { - that.remove() close() + ElMessageBox.confirm('此操作将永久删除节点及所有子节点, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let node = window.treeObj.getNodeByParam('id', that.options.id, null) + let source_ids = cusRemoveNode(window.treeObj, [node]) + const res = await TreeApi.removeDirectory({ ids: source_ids }) + if (res.code == 0 || res.code == 200) { + ElMessage({ + message: '删除成功', + type: 'success' + }) + that.remove() + (window as any)._entityMap.delete(source_ids[0]) + } else { + ElMessage({ + message: res.msg || '删除失败', + type: 'error' + }) + } + }) + .catch(() => { + // 用户点击取消,不执行任何操作 + }) } defineExpose({ open, diff --git a/src/renderer/src/views/components/propertyBox/graphObject.vue b/src/renderer/src/views/components/propertyBox/graphObject.vue index 120e920..27f9c82 100644 --- a/src/renderer/src/views/components/propertyBox/graphObject.vue +++ b/src/renderer/src/views/components/propertyBox/graphObject.vue @@ -180,8 +180,7 @@