diff --git a/ffplay/81.ico b/ffplay/81.ico new file mode 100644 index 0000000..37dc2bd Binary files /dev/null and b/ffplay/81.ico differ diff --git a/ffplay/avcodec-60.dll b/ffplay/avcodec-60.dll new file mode 100644 index 0000000..1cdba31 Binary files /dev/null and b/ffplay/avcodec-60.dll differ diff --git a/ffplay/avdevice-60.dll b/ffplay/avdevice-60.dll new file mode 100644 index 0000000..30c2e0a Binary files /dev/null and b/ffplay/avdevice-60.dll differ diff --git a/ffplay/avfilter-9.dll b/ffplay/avfilter-9.dll new file mode 100644 index 0000000..5571ab2 Binary files /dev/null and b/ffplay/avfilter-9.dll differ diff --git a/ffplay/avformat-60.dll b/ffplay/avformat-60.dll new file mode 100644 index 0000000..413038c Binary files /dev/null and b/ffplay/avformat-60.dll differ diff --git a/ffplay/avutil-58.dll b/ffplay/avutil-58.dll new file mode 100644 index 0000000..af1419a Binary files /dev/null and b/ffplay/avutil-58.dll differ diff --git a/ffplay/earth.ico b/ffplay/earth.ico new file mode 100644 index 0000000..1610ac5 Binary files /dev/null and b/ffplay/earth.ico differ diff --git a/ffplay/ffmpeg.exe b/ffplay/ffmpeg.exe new file mode 100644 index 0000000..15dc359 Binary files /dev/null and b/ffplay/ffmpeg.exe differ diff --git a/ffplay/ffmpeg_arm b/ffplay/ffmpeg_arm new file mode 100644 index 0000000..a7452f7 Binary files /dev/null and b/ffplay/ffmpeg_arm differ diff --git a/ffplay/ffmpeg_x86 b/ffplay/ffmpeg_x86 new file mode 100644 index 0000000..da3cb34 Binary files /dev/null and b/ffplay/ffmpeg_x86 differ diff --git a/ffplay/ffplay b/ffplay/ffplay new file mode 100644 index 0000000..75177dd Binary files /dev/null and b/ffplay/ffplay differ diff --git a/ffplay/ffplay.exe b/ffplay/ffplay.exe new file mode 100644 index 0000000..8c14576 Binary files /dev/null and b/ffplay/ffplay.exe differ diff --git a/ffplay/ffprobe.exe b/ffplay/ffprobe.exe new file mode 100644 index 0000000..2b5bdbf Binary files /dev/null and b/ffplay/ffprobe.exe differ diff --git a/ffplay/jingwu.ico b/ffplay/jingwu.ico new file mode 100644 index 0000000..869db0a Binary files /dev/null and b/ffplay/jingwu.ico differ diff --git a/ffplay/postproc-57.dll b/ffplay/postproc-57.dll new file mode 100644 index 0000000..5087877 Binary files /dev/null and b/ffplay/postproc-57.dll differ diff --git a/ffplay/rcedit-x86.exe b/ffplay/rcedit-x86.exe new file mode 100644 index 0000000..779c314 Binary files /dev/null and b/ffplay/rcedit-x86.exe differ diff --git a/ffplay/rcedit-x86.txt b/ffplay/rcedit-x86.txt new file mode 100644 index 0000000..5d71973 --- /dev/null +++ b/ffplay/rcedit-x86.txt @@ -0,0 +1 @@ +$ rcedit "path-to-exe-or-dll" --set-icon "path-to-ico" \ No newline at end of file diff --git a/ffplay/swresample-4.dll b/ffplay/swresample-4.dll new file mode 100644 index 0000000..85075a8 Binary files /dev/null and b/ffplay/swresample-4.dll differ diff --git a/ffplay/swscale-7.dll b/ffplay/swscale-7.dll new file mode 100644 index 0000000..3d84c37 Binary files /dev/null and b/ffplay/swscale-7.dll differ diff --git a/package-lock.json b/package-lock.json index 6a6dc25..19c7745 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,13 @@ "@electron-toolkit/utils": "^4.0.0", "@ztree/ztree_v3": "^3.5.48", "axios": "^1.11.0", + "clipboard": "^2.0.11", + "dayjs": "^1.11.18", + "echarts": "^6.0.0", "electron-updater": "^6.3.9", "element-plus": "^2.10.4", - "js-md5": "^0.8.3", "mitt": "^3.0.1", + "moment": "^2.30.1", "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.4.1", "scss": "^0.2.4", @@ -30,7 +33,7 @@ "@electron-toolkit/eslint-config-ts": "^3.0.0", "@electron-toolkit/tsconfig": "^1.0.1", "@types/jquery": "^3.5.32", - "@types/node": "^22.16.5", + "@types/node": "^22.18.1", "@types/plist": "^3.0.5", "@types/verror": "^1.10.11", "@types/vue-i18n": "^6.1.3", @@ -2649,9 +2652,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.16.5", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.16.5.tgz", - "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "version": "22.18.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.18.1.tgz", + "integrity": "sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -4647,6 +4650,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", @@ -5196,9 +5210,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.18", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.18.tgz", + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", "license": "MIT" }, "node_modules/de-indent": { @@ -5361,6 +5375,12 @@ "node": ">=0.4.0" } }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", @@ -5610,6 +5630,16 @@ "dev": true, "license": "MIT" }, + "node_modules/echarts": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz", + "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "6.0.0" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz", @@ -7248,6 +7278,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", @@ -8453,11 +8492,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/js-md5": { - "version": "0.8.3", - "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz", - "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9268,6 +9302,15 @@ "pathe": "^2.0.1" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", @@ -10986,6 +11029,12 @@ "dev": true, "license": "MIT" }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", @@ -12243,6 +12292,12 @@ "node": ">= 10.0.0" } }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, "node_modules/tiny-typed-emitter": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", @@ -12461,6 +12516,12 @@ "typescript": ">=4.8.4" } }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", @@ -13886,6 +13947,15 @@ "engines": { "node": ">= 10" } + }, + "node_modules/zrender": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz", + "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } } } } diff --git a/package.json b/package.json index 307d503..16e7c91 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,13 @@ "@electron-toolkit/utils": "^4.0.0", "@ztree/ztree_v3": "^3.5.48", "axios": "^1.11.0", + "clipboard": "^2.0.11", + "dayjs": "^1.11.18", "echarts": "^6.0.0", "electron-updater": "^6.3.9", "element-plus": "^2.10.4", "mitt": "^3.0.1", + "moment": "^2.30.1", "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.4.1", "scss": "^0.2.4", @@ -42,7 +45,7 @@ "@electron-toolkit/eslint-config-ts": "^3.0.0", "@electron-toolkit/tsconfig": "^1.0.1", "@types/jquery": "^3.5.32", - "@types/node": "^22.16.5", + "@types/node": "^22.18.1", "@types/plist": "^3.0.5", "@types/verror": "^1.10.11", "@types/vue-i18n": "^6.1.3", diff --git a/src/main/index.ts b/src/main/index.ts index 518caac..395b5d7 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,8 +2,10 @@ import { app, shell, BrowserWindow, ipcMain, globalShortcut, dialog } from 'elec 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 fs from 'fs' import { exec } from 'child_process' +import dayjs from 'dayjs' // 开发环境路径处理 - 确保添加正确的file协议 @@ -148,6 +150,50 @@ function createWindow(): void { event.sender.send("selectedItem", arr); }); }); + ipcMain.on("saveFile", (event, { title, filename, filters }) => { + dialog + .showSaveDialog({ + title, + defaultPath: filename, + filters, + }) + .then((files) => { + let path = ""; + if (!files.canceled) { + path = files.filePath.replace(/\\/g, "/"); + } + event.sender.send("selectedFileItem", path); + }); + }); + + let recorder; + ipcMain.on("startRecoder", (event) => { + console.log("开始录制"); + recorder = new Recorder(); + recorder.start(); + }); + ipcMain.on("endRecoder", (event) => { + console.log("结束录制"); + // 判断是否存在recorder,是否有recorder.end方法 + if (!recorder) { + console.log("recorder不存在"); + return; + } + recorder.end(() => { + let path = dialog.showSaveDialogSync({ + title: "保存视频文件", + defaultPath: dayjs().format("YYYYMMDDHHmmss") + "视频录制.mp4", + filters: [{ name: "文件类型", extensions: ["mp4"] }], + }); + if (path != undefined) { + recorder.move(path, () => { + recorder = null; + }); + } else { + recorder = null; + } + }); + }); // 设置窗口标题和图标 mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) diff --git a/src/preload/config.ts b/src/preload/config.ts new file mode 100644 index 0000000..05a7d4e --- /dev/null +++ b/src/preload/config.ts @@ -0,0 +1,22 @@ +//获取项目根目录 +function GetHomeDir() { + let HOME_DIR = process.cwd(); + console.log("process.env.NODE_ENV", process.env.NODE_ENV); + if (process.env.NODE_ENV === "production") { + let arr = process.execPath.replaceAll("\\", "/").split("/"); + arr.pop(); + HOME_DIR = arr.join("/"); + } + return HOME_DIR; +} +//获取项目根目录 +function GetAsar() { + let HOME_DIR = process.cwd(); + if (process.env.NODE_ENV === "production") { + let arr = process.execPath.replaceAll("\\", "/").split("/"); + arr.pop(); + HOME_DIR = arr.join("/"); + } + return HOME_DIR; +} +export { GetHomeDir, GetAsar }; diff --git a/src/preload/index.ts b/src/preload/index.ts index 556c4d8..5c41ea8 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -23,3 +23,4 @@ if (process.contextIsolated) { // @ts-ignore (define in dts) window.YJColorPicker = YJColorPicker } + diff --git a/src/preload/recorder.ts b/src/preload/recorder.ts new file mode 100644 index 0000000..e4972c8 --- /dev/null +++ b/src/preload/recorder.ts @@ -0,0 +1,113 @@ +import path from "path"; +import { GetHomeDir } from "./config"; +const os = require("os"); +const fs = require("fs"); +let platform = os.platform(); +const arch = os.arch(); +const moment = require("moment"); +const { spawn } = require("child_process"); +const EventEmitter = require("events"); +let ffmpegExePath = path.join(GetHomeDir(), "ffplay"); +class MyEmitter extends EventEmitter { } + +const myEmitter = new MyEmitter(); +class Recorder { + constructor(option = {}) { + this.shell = undefined; + this.filename = + moment(parseInt(new Date().getTime())).format("YYYYMMDDHHmmss") + ".mp4"; + this.exe = "ffmpeg.exe"; + if (platform === "win32") { + this.exe = "ffmpeg.exe"; + this.params = "-f gdigrab -r 30 -y -i desktop -pix_fmt yuv420p"; + } + if (platform === "linux") { + switch (arch) { + case "x64": + this.exe = "ffmpeg_x86"; + break; + case "arm": + this.exe = "ffmpeg_arm"; + break; + } + this.params = + "-v verbose -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 -c:v libx264 -preset ultrafast -crf 18"; + //-s 1920x1080 + // ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 -c:v libx264 -preset ultrafast -crf 18 output.mp4 + } + this.commands = path.join(GetHomeDir(), "/ffplay/" + this.exe); + } + get_path() { + return path.join(ffmpegExePath, this.filename); + } + start() { + this.exec(this.commands, this.params); + } + + exec(commands, param) { + let arr = param.split(" "); + arr.push(this.get_path()); + console.log("commands, arr", commands, arr); + this.shell = spawn(commands, arr, { + ffmpegExePath, + // stdio: "ignore", + // shell: true + }) + .on("exit", (err) => { + console.log("exit", err); + myEmitter.emit("process-exit"); + }) + .on("data", function (data) { + // console.log(typeof data); + }) + .on("data", function (data) { }); + this.shell.unref(); + } + end(cb) { + if (!this.shell.killed) { + console.log(this.shell); + this.shell.stdin.write("q"); + myEmitter.once("process-exit", () => { + cb(); + }); + } else { + cb(); + } + } + move(dst, cb) { + let readStream = fs.createReadStream(this.get_path()); + let writeStream = fs.createWriteStream(dst); + readStream.pipe(writeStream); + readStream.on("end", () => { + fs.unlinkSync(this.get_path()); + cb(); + }); + } +} +/*function start() { + config.recorder = new Recorder() + config.recorder.start() +} + +function end(cb) { + config.recorder.end(() => { + cb() + }) +} + +function getRecorder() { + return config.recorder +} + +function resetRecorder() { + config.recorder = null +} + +exports.Recorder = { + start, + end, + getRecorder, + resetRecorder, +}*/ + +export { Recorder }; diff --git a/src/renderer/src/api/setting/auth.ts b/src/renderer/src/api/setting/auth.ts new file mode 100644 index 0000000..d7981b9 --- /dev/null +++ b/src/renderer/src/api/setting/auth.ts @@ -0,0 +1,16 @@ +//授权 +import request from '@/axios/request' +export const AuthApi = { + // 查看授权信息 + showAuth: async () => { + return await request.get({ + url: `/auth/show` + }) + }, + //获取系统授权码 + authInfo: async () => { + return await request.get({ + url: `/auth/info` + }) + }, +} diff --git a/src/renderer/src/axios/index.ts b/src/renderer/src/axios/index.ts index 63ad25c..f9d3936 100644 --- a/src/renderer/src/axios/index.ts +++ b/src/renderer/src/axios/index.ts @@ -10,15 +10,14 @@ import type { const pendingRequests = new Map() let baseURL: any if (window && window.process && window.process.type === 'renderer') { - // baseURL = localStorage.getItem('ip') ||'http://192.168.110.25:8848'|| 'http://127.0.0.1:8808' - baseURL = 'http://127.0.0.1:8848' + baseURL = localStorage.getItem('ip') || 'http://192.168.110.25:8848' || 'http://127.0.0.1:8808' } else { baseURL = 'http://192.168.110.25:8848' } // 创建自定义配置的axios实例 const service: AxiosInstance = axios.create({ - baseURL:baseURL, + baseURL: 'http://192.168.110.25:8848', timeout: 10000, headers: { 'Content-Type': 'application/json', @@ -50,10 +49,10 @@ service.interceptors.request.use( // 在这里添加认证token const token = localStorage.getItem('Authorization') -console.log("localStorage.getItem('Authorization')",token); + console.log("localStorage.getItem('Authorization')", token); if (token && config.headers) { - // Bearer + // Bearer config.headers.Authorization = `${token}` } return config @@ -68,18 +67,18 @@ service.interceptors.response.use( (response: AxiosResponse) => { const key = getRequestKey(response.config) pendingRequests.delete(key) -console.log(response); + console.log(response); // 统一处理HTTP状态码 if (response.status === 200) { - if ([0,200].includes(response.data.code)) { + if ([0, 200].includes(response.data.code)) { return response } - if (response.data.code==401) { + if (response.data.code == 401) { router.push('/') localStorage.removeItem('Authorization') } - if (![0,200].includes(response.data.code)) { + if (![0, 200].includes(response.data.code)) { ElMessage({ message: response.data.msg || response.data.message, type: 'error' diff --git a/src/renderer/src/common/initMapData.ts b/src/renderer/src/common/initMapData.ts index 36d9edd..d44beb0 100644 --- a/src/renderer/src/common/initMapData.ts +++ b/src/renderer/src/common/initMapData.ts @@ -43,13 +43,36 @@ export const initMapData = async (type, data) => { data.host = 'http://192.168.110.25:8848' entityObject = new YJ.Obj.Terrain(window.earth, data) break - case 'layer': + case 'layer': data.host = 'http://192.168.110.25:8848' entityObject = new YJ.Obj.Layer(window.earth, data) break - case 'tileset': + case 'tileset': data.host = 'http://192.168.110.25:8848' entityObject = new YJ.Obj.Tileset(window.earth, data) + + entityObject.load((res) => { + // 等模型加载完后再加载压平模型 + Array.from(window.pressModelMap.keys()).forEach((key) => { + if (key.indexOf("_" + data.id) > -1) { + const nodes = window.pressModelMap.get(key); + if (nodes) { + if (nodes.isShow == 1) { + // nodeType[nodes.source_type].render(nodes); + const flatData = JSON.parse(nodes.params) + const entity = window.earth.entityMap.get(flatData.modelId).entity + let flat = new YJ.Analysis.Flat(window.earth, entity, { + positions: flatData.positions, + height: flatData.height, + name: nodes.sourceName + }) + window.pressModelEntities.set(nodes.id, flat) + } + } + } + }); + + }) break case 'path': entityObject = new YJ.Obj.TrajectoryMotion(window.earth, data) @@ -64,10 +87,10 @@ export const initMapData = async (type, data) => { entityObject = new YJ.Obj.RadarScan(window.earth, data) break default: - return break } options = structuredClone(entityObject.options) delete options.host + // options = entityObject return options } diff --git a/src/renderer/src/components/upload/uploadFiles.vue b/src/renderer/src/components/upload/uploadFiles.vue index 6ab56c7..4e634aa 100644 --- a/src/renderer/src/components/upload/uploadFiles.vue +++ b/src/renderer/src/components/upload/uploadFiles.vue @@ -1,6 +1,6 @@ @@ -177,13 +188,13 @@ const flyto = (e) => { break case 'third': var lng = - // @ts-ignore (define in dts) + // @ts-ignore (define in dts) Math.abs(longitude.value) + Math.abs(lngMin.value) / 60 + Math.abs(lngSec.value) / 3600 var lat = - // @ts-ignore (define in dts) + // @ts-ignore (define in dts) Math.abs(latitude.value) + Math.abs(latMin.value) / 60 + Math.abs(latSec.value) / 3600 - // @ts-ignore (define in dts) + // @ts-ignore (define in dts) lng = longitude.value < 0 ? -lng : lng // @ts-ignore (define in dts) lat = latitude.value < 0 ? -lat : lat diff --git a/src/renderer/src/views/components/propertyBox/GoodsSearchCircle.vue b/src/renderer/src/views/components/propertyBox/GoodsSearchCircle.vue new file mode 100644 index 0000000..32dbfcf --- /dev/null +++ b/src/renderer/src/views/components/propertyBox/GoodsSearchCircle.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue b/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue new file mode 100644 index 0000000..1d751e7 --- /dev/null +++ b/src/renderer/src/views/components/propertyBox/GoodsSearchPolgon.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/src/renderer/src/views/components/propertyBox/Graffiti.vue b/src/renderer/src/views/components/propertyBox/Graffiti.vue index 71cfcbe..744cdeb 100644 --- a/src/renderer/src/views/components/propertyBox/Graffiti.vue +++ b/src/renderer/src/views/components/propertyBox/Graffiti.vue @@ -59,7 +59,7 @@ eventBus.on('graffitiDialog', () => { graffiti = new YJ.Obj.Graffiti(window.earth, { width: width.value }) - }, 0) + }, 10) }) const closeCallBack = (e) => {} diff --git a/src/renderer/src/views/components/propertyBox/ProjConvert.vue b/src/renderer/src/views/components/propertyBox/ProjConvert.vue new file mode 100644 index 0000000..f9a1fe6 --- /dev/null +++ b/src/renderer/src/views/components/propertyBox/ProjConvert.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/src/renderer/src/views/components/propertyBox/ProjectionConvert.vue b/src/renderer/src/views/components/propertyBox/ProjectionConvert.vue new file mode 100644 index 0000000..7490566 --- /dev/null +++ b/src/renderer/src/views/components/propertyBox/ProjectionConvert.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/renderer/src/views/components/propertyBox/RoutePlanning.vue b/src/renderer/src/views/components/propertyBox/RoutePlanning.vue index fbecf15..aecc66a 100644 --- a/src/renderer/src/views/components/propertyBox/RoutePlanning.vue +++ b/src/renderer/src/views/components/propertyBox/RoutePlanning.vue @@ -1,12 +1,21 @@