From a41a6119753e49ac1737819e2f6a7eacf3fa8a05 Mon Sep 17 00:00:00 2001 From: he-zhi-cheng <2753731935@qq.com> Date: Mon, 11 Aug 2025 14:21:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=AE=8C=E6=88=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 258 +++ package.json | 1 + src-tauri/config.json | 2 +- src-tauri/data46.iris | Bin 0 -> 30898 bytes src/App.vue | 23 +- src/DataView/APPDataview.vue | 151 +- .../assets/保存曲线-未点击.png | Bin 0 -> 449 bytes src/DataView/assets/保存曲线-点击.png | Bin 0 -> 629 bytes .../assets/图例设置-未点击.png | Bin 0 -> 763 bytes src/DataView/assets/图例设置-点击.png | Bin 0 -> 978 bytes src/DataView/assets/图钉.png | Bin 0 -> 2933 bytes src/DataView/assets/文件图标-线.png | Bin 0 -> 350 bytes src/DataView/assets/文件图标-面.png | Bin 0 -> 673 bytes src/DataView/assets/文件夹图标.png | Bin 0 -> 471 bytes .../assets/重置视图-未点击.png | Bin 0 -> 489 bytes src/DataView/assets/重置视图-点击.png | Bin 0 -> 662 bytes src/DataView/menuvue/menubar.vue | 100 +- src/DataView/vuecomponents/GuiForDataShow.vue | 195 ++- .../vuecomponents/GuiForDivesInfo.vue | 310 +++- src/DataView/vuecomponents/GuiForPlotShow.vue | 1391 ++++++++++++----- src/DataView/vuecomponents/GuiLeftSider.vue | 455 +++++- src/DataView/vuecomponents/MapContainer.vue | 280 +++- .../vuecomponents/PictureDisplayInterface.vue | 240 +++ src/DataView/vuecomponents/SaveFileDialog.vue | 301 ++++ src/main.js | 74 +- src/utils/hyperspectralParser.js | 112 ++ src/utils/irisDataDispose.js | 455 ++++++ src/utils/spectralDataService.js | 106 ++ src/utils/tauriApi.js | 118 ++ yarn.lock | 106 ++ 30 files changed, 3988 insertions(+), 690 deletions(-) create mode 100644 src-tauri/data46.iris create mode 100644 src/DataView/assets/保存曲线-未点击.png create mode 100644 src/DataView/assets/保存曲线-点击.png create mode 100644 src/DataView/assets/图例设置-未点击.png create mode 100644 src/DataView/assets/图例设置-点击.png create mode 100644 src/DataView/assets/图钉.png create mode 100644 src/DataView/assets/文件图标-线.png create mode 100644 src/DataView/assets/文件图标-面.png create mode 100644 src/DataView/assets/文件夹图标.png create mode 100644 src/DataView/assets/重置视图-未点击.png create mode 100644 src/DataView/assets/重置视图-点击.png create mode 100644 src/DataView/vuecomponents/PictureDisplayInterface.vue create mode 100644 src/DataView/vuecomponents/SaveFileDialog.vue create mode 100644 src/utils/hyperspectralParser.js create mode 100644 src/utils/irisDataDispose.js create mode 100644 src/utils/spectralDataService.js create mode 100644 src/utils/tauriApi.js diff --git a/package-lock.json b/package-lock.json index c6bd5e1..441bf64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "maptalks": "^1.1.3", "markdown-it": "^14.1.0", "mitt": "^3.0.1", + "ol": "^10.6.1", "serialport": "^12.0.0", "vue": "^3.3.4", "vue-drag-resize": "^2.0.3", @@ -687,6 +688,12 @@ "node": ">= 8" } }, + "node_modules/@petamoriken/float16": { + "version": "3.9.2", + "resolved": "https://r.cnpmjs.org/@petamoriken/float16/-/float16-3.9.2.tgz", + "integrity": "sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==", + "license": "MIT" + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -1412,6 +1419,12 @@ "@types/lodash": "*" } }, + "node_modules/@types/rbush": { + "version": "4.0.0", + "resolved": "https://r.cnpmjs.org/@types/rbush/-/rbush-4.0.0.tgz", + "integrity": "sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ==", + "license": "MIT" + }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", @@ -1983,6 +1996,12 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/earcut": { + "version": "3.0.2", + "resolved": "https://r.cnpmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==", + "license": "ISC" + }, "node_modules/echart": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/echart/-/echart-0.1.3.tgz", @@ -2289,6 +2308,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/geotiff": { + "version": "2.1.3", + "resolved": "https://r.cnpmjs.org/geotiff/-/geotiff-2.1.3.tgz", + "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==", + "license": "MIT", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + }, + "engines": { + "node": ">=10.19" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2651,6 +2689,12 @@ "any-promise": "^1.1.0" } }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://r2.cnpmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==", + "license": "Apache-2.0" + }, "node_modules/less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", @@ -2985,6 +3029,38 @@ "integrity": "sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==", "dev": true }, + "node_modules/ol": { + "version": "10.6.1", + "resolved": "https://r.cnpmjs.org/ol/-/ol-10.6.1.tgz", + "integrity": "sha512-xp174YOwPeLj7c7/8TCIEHQ4d41tgTDDhdv6SqNdySsql5/MaFJEJkjlsYcvOPt7xA6vrum/QG4UdJ0iCGT1cg==", + "license": "BSD-2-Clause", + "dependencies": { + "@types/rbush": "4.0.0", + "earcut": "^3.0.0", + "geotiff": "^2.1.3", + "pbf": "4.0.1", + "rbush": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/ol/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://r.cnpmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/ol/node_modules/rbush": { + "version": "4.0.1", + "resolved": "https://r.cnpmjs.org/rbush/-/rbush-4.0.1.tgz", + "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==", + "license": "MIT", + "dependencies": { + "quickselect": "^3.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3001,6 +3077,18 @@ "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://r.cnpmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-headers": { + "version": "2.0.6", + "resolved": "https://r.cnpmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", + "license": "MIT" + }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -3038,6 +3126,18 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, + "node_modules/pbf": { + "version": "4.0.1", + "resolved": "https://r.cnpmjs.org/pbf/-/pbf-4.0.1.tgz", + "integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==", + "license": "BSD-3-Clause", + "dependencies": { + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3109,6 +3209,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://r2.cnpmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -3152,6 +3258,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://r.cnpmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", @@ -3202,6 +3320,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://r2.cnpmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3817,6 +3944,12 @@ "resolved": "https://registry.npmjs.org/vue3-konami-code/-/vue3-konami-code-1.0.0.tgz", "integrity": "sha512-fhHAPFZA1jsgDHlYz5dnG52RmY9+vtfMthBaY1S5VBxNLdU4EWTbnJO0nfL8Uybw5uHsDqCGtTbGaX7nIvQ9Qw==" }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://r.cnpmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "license": "Apache-2.0" + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -3832,6 +3965,12 @@ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", "dev": true }, + "node_modules/xml-utils": { + "version": "1.10.2", + "resolved": "https://r.cnpmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", + "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==", + "license": "CC0-1.0" + }, "node_modules/ylru": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", @@ -3847,6 +3986,12 @@ "dependencies": { "tslib": "2.3.0" } + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://r.cnpmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==", + "license": "MIT AND BSD-3-Clause" } }, "dependencies": { @@ -4181,6 +4326,11 @@ "fastq": "^1.6.0" } }, + "@petamoriken/float16": { + "version": "3.9.2", + "resolved": "https://r.cnpmjs.org/@petamoriken/float16/-/float16-3.9.2.tgz", + "integrity": "sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==" + }, "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -4555,6 +4705,11 @@ "@types/lodash": "*" } }, + "@types/rbush": { + "version": "4.0.0", + "resolved": "https://r.cnpmjs.org/@types/rbush/-/rbush-4.0.0.tgz", + "integrity": "sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ==" + }, "@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", @@ -4977,6 +5132,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "earcut": { + "version": "3.0.2", + "resolved": "https://r.cnpmjs.org/earcut/-/earcut-3.0.2.tgz", + "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==" + }, "echart": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/echart/-/echart-0.1.3.tgz", @@ -5195,6 +5355,21 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, + "geotiff": { + "version": "2.1.3", + "resolved": "https://r.cnpmjs.org/geotiff/-/geotiff-2.1.3.tgz", + "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==", + "requires": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + } + }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -5483,6 +5658,11 @@ } } }, + "lerc": { + "version": "3.0.0", + "resolved": "https://r2.cnpmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==" + }, "less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", @@ -5724,6 +5904,33 @@ "integrity": "sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==", "dev": true }, + "ol": { + "version": "10.6.1", + "resolved": "https://r.cnpmjs.org/ol/-/ol-10.6.1.tgz", + "integrity": "sha512-xp174YOwPeLj7c7/8TCIEHQ4d41tgTDDhdv6SqNdySsql5/MaFJEJkjlsYcvOPt7xA6vrum/QG4UdJ0iCGT1cg==", + "requires": { + "@types/rbush": "4.0.0", + "earcut": "^3.0.0", + "geotiff": "^2.1.3", + "pbf": "4.0.1", + "rbush": "^4.0.0" + }, + "dependencies": { + "quickselect": { + "version": "3.0.0", + "resolved": "https://r.cnpmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==" + }, + "rbush": { + "version": "4.0.1", + "resolved": "https://r.cnpmjs.org/rbush/-/rbush-4.0.1.tgz", + "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==", + "requires": { + "quickselect": "^3.0.0" + } + } + } + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -5737,6 +5944,16 @@ "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, + "pako": { + "version": "2.1.0", + "resolved": "https://r.cnpmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "parse-headers": { + "version": "2.0.6", + "resolved": "https://r.cnpmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==" + }, "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -5767,6 +5984,14 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, + "pbf": { + "version": "4.0.1", + "resolved": "https://r.cnpmjs.org/pbf/-/pbf-4.0.1.tgz", + "integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==", + "requires": { + "resolve-protobuf-schema": "^2.1.0" + } + }, "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5810,6 +6035,11 @@ "source-map-js": "^1.2.1" } }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://r2.cnpmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -5832,6 +6062,11 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "6.1.2", + "resolved": "https://r.cnpmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==" + }, "quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", @@ -5871,6 +6106,14 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://r2.cnpmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6259,6 +6502,11 @@ "resolved": "https://registry.npmjs.org/vue3-konami-code/-/vue3-konami-code-1.0.0.tgz", "integrity": "sha512-fhHAPFZA1jsgDHlYz5dnG52RmY9+vtfMthBaY1S5VBxNLdU4EWTbnJO0nfL8Uybw5uHsDqCGtTbGaX7nIvQ9Qw==" }, + "web-worker": { + "version": "1.5.0", + "resolved": "https://r.cnpmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==" + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -6271,6 +6519,11 @@ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", "dev": true }, + "xml-utils": { + "version": "1.10.2", + "resolved": "https://r.cnpmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", + "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==" + }, "ylru": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", @@ -6283,6 +6536,11 @@ "requires": { "tslib": "2.3.0" } + }, + "zstddec": { + "version": "0.1.0", + "resolved": "https://r.cnpmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==" } } } diff --git a/package.json b/package.json index 622f16d..a84ff2e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "maptalks": "^1.1.3", "markdown-it": "^14.1.0", "mitt": "^3.0.1", + "ol": "^10.6.1", "serialport": "^12.0.0", "vue": "^3.3.4", "vue-drag-resize": "^2.0.3", diff --git a/src-tauri/config.json b/src-tauri/config.json index 46fbff2..d0a3e2b 100644 --- a/src-tauri/config.json +++ b/src-tauri/config.json @@ -1 +1 @@ -{"pathofsave":"C:\\Program Files\\lucamtool","Filename":"testaa","caijiavgNumber":"1","useSG":false,"usehighpass":false,"Dispatcher":{"isenable":true,"begin":"06:25","end":"23:59"},"sensor_typeforset":"IS3"} \ No newline at end of file +{"pathofsave":null,"Filename":"testaa","caijiavgNumber":"1","useSG":false,"usehighpass":false,"Dispatcher":{"isenable":true,"begin":"06:25","end":"23:59"},"sensor_typeforset":"IRIS-IS11"} \ No newline at end of file diff --git a/src-tauri/data46.iris b/src-tauri/data46.iris new file mode 100644 index 0000000000000000000000000000000000000000..9d1a9f55351580e6e57d215875f64ce342a4d347 GIT binary patch literal 30898 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 literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue index efab979..90283c2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,4 @@ \ No newline at end of file diff --git a/src/DataView/assets/保存曲线-未点击.png b/src/DataView/assets/保存曲线-未点击.png new file mode 100644 index 0000000000000000000000000000000000000000..ea92febef36b642cb9a36166d231d235407f88c6 GIT binary patch literal 449 zcmV;y0Y3hTP)Px$dr3q=R7gwhmcL5FP!z_$Q#v^KBu*U_I#f^`M6k0@U{sn;4i$0(b`zSSW^%|Q zbgVeoL9k;d=ML_6DlJ4mxoSchlKzQiGfT+HIp>%2-Fwf8Am>YR&W{jKsi@*cNg4pl z0u)yP6Bv$1IQBd>iN}Qi!?YVBxFpyYVgixUmoqsCgA!~6iXu`b*d4#28i#~{6H`4> zu;#YZmQJXj_5IdS+W{cSrr#N+eIx>pWPc1Cc#awcF*AT@!c_n|?zCp_eH73Ua5(k3 zdv|TWYWsYEmLx6_Ifzyj)jWWJ?7EJs&IO#A_WnC)Mi-obU!Yvww5|KJO%Sg9{ScopgRu7ddypGGCtLv$RCH1JWdl>iw$H$1Pw7da4Zq1aNuMh=y@WLO%fNbV>M^G>CebK7jP#-?(g9T r_<%gU4A|`Tls^N=nsiZI?tc}ZsfS00000NkvXXu0mjfuw}cg literal 0 HcmV?d00001 diff --git a/src/DataView/assets/保存曲线-点击.png b/src/DataView/assets/保存曲线-点击.png new file mode 100644 index 0000000000000000000000000000000000000000..b073d7513e8284fb8a7e58fd7e54072ae2af305c GIT binary patch literal 629 zcmV-*0*d{KP)Px%FG)l}R7gwhmrrODK@`Tn7kBeVqBl<-M3J^iy_A3lL2ay}&_ii26+xjV5lbs7 z76d)?QY=DKK|Dyk=tV>Y#Zw?4c(FZ}(13_N2nuaLv$bn>v#-3A+SSa4&8FR4e5ak+ zdG9yxdo#=o0l>+tOC1qCG6`@GKym5YYGZ~$K$ck>%Vl;KNT8(AEDUs&2qPE?BtxWTmFyzQ9Kh=@>W>`)i?99N>A*#9YC96?v7zb5+-K zXk>-|2fNksRpUnFb&qXY>i**~9P8A5@juL4c=`Uf=lLueh z0D6PS8Q6#Mnz~1Rwu7v>aGx+vie%OTC$c9P+_QZXU=yG$JCz%`%$~v;UGPyvPA(w1 P00000NkvXXu0mjfhj<{O literal 0 HcmV?d00001 diff --git a/src/DataView/assets/图例设置-未点击.png b/src/DataView/assets/图例设置-未点击.png new file mode 100644 index 0000000000000000000000000000000000000000..05cb039e34cb6cbbde084da2b841020a4805aed3 GIT binary patch literal 763 zcmVPx%wMj%lR7gv;RzXM3wNYF!pfd_*^53NYe&Z}A6ZPnGWmF70{f8TraeeZqW z4Dp{Y?iatiH*pz6T?t26$fT?%#rsVJk>12Pm+B%=yA!d<$;^PsvQO&OK2n%N)OrRHxYCfg3++H zf)nH8_PSr|!m-2!Ndx$)vpitTLx_v8ot)~;0NxlbBO@tmx>P|pYR`C}>7;$e58OL1 zwA0Xtlf!8weLBMIxRavYuB>;E{x5_6vbo60>mCLGc+3)VWe9leF75 zwdh|f@RED3-8!0g+_w-$O0FTIhGR5s6S*3Kf|K@Y(`pI)^xBsOe&Bo3Akvq(ly|W{ zKdb3%)^_|ryJLx7FQzz*J5~@1+2-+6cnGk=OAs`*wt}|u8R?4J!5Z?Zpjv`gJzH*V zbwz^CPWxcs5GDY&N{EA4CvXSSTpnl}OWKPbxIxZPGC?c@Y=V>&(M(~zI8WOMazI-E z@K!*JTtqS{>%rf_!X$)c5>Ww3NMMZ_%6)gf25NB|WVFyiDO-_1z+n=mz@UWo(WLdV zyyrcAH&5o}P7(}4T0)K4k{*nIDaLr~1HvOf?<-e8h9LZafs5&T*6T`whOZ19LEf1J z*&v`lGh_{x$L*?tyreu^NAKVGu$x=THG+%&bjrG0s$$Ddt9lMLTxJRURPx&j7da6R7gv`mu*N>Q5eVnXZK!T+NLChRuqYW3StHtq+lsQM1GL`D3nurvrO&P zinOc`t0=Jd*BN~ZLX%nrA!&g|7-%4rr3jg&q$~I0=C->N=i1caHh0(Z`EZgV)V-QvqZo@+d1< zfU-Ih>W@a@!AqMYq)0o43%k|Oy|ALa+jFl&0%q#YmZ{E9qIBEWVG*rz$|+cI zKnd}8QpomL4wTK61$z8%LN9# zv{wx#&|q>QaXF8M*ES@tL;xVqkgGa4mQ;(1(d9Ebj`T?#Ngk;j>0l?1uo zWJPKI0ss^Tu9>BGOjyDC$@@fCuR|UKC+)O`!yee~=+2}?O?CD{1S-!7D2 zF-g(8Ei*;H@j@kf2AuN1X{!WSCn!$p%;@~$y0z<2Q(_IO%`xRKaPj5rr|+>87<4)4Q9vUs%0EB zTBAqF$Y~O+8txv6LjMmj@I!(fbJ|^M433CW;sj$X>EdEIRNXSoI*WaFE;hj6d71vN zKK=xmtrYt939nGU;9#PZ^9{+Z9JT(hzXxAJ*rlFzuBQO<C(*LggCVnbmRXMKy3hNrY`YNOWoq0KWk62L|-R9UH||907*qoM6N<$f|8!h A$^ZZW literal 0 HcmV?d00001 diff --git a/src/DataView/assets/图钉.png b/src/DataView/assets/图钉.png new file mode 100644 index 0000000000000000000000000000000000000000..9ece5d71b73003a0e520af438a1f37cd1ce66850 GIT binary patch literal 2933 zcmbVO4LFnQ8(%1rMNx_3ZR8ZTy)*OiYNQPlLq76Rso7o(+qi=^)r z&Y_ONTtw-rB&Aa6i#pX`N`-Rpen!V=8`C2v14H|5CKPV`BYrrMI{d4a;Ugq3KL`sXmB)_u}KIAZ1M?Y zZ;E9*a&Rurz_LULCE&qg7Ldq`@5k?V7j*gB*(1vJZgGUi~Q4(LwO2qR;X5Sd-u!t?>3dCH552zSf z5lFn4ibE~^>H<$NNy`^agb588F_9%8k_e#6rEwsKJ&6;<3**L>bJ#>U4(7ppu?WSI zCb5EOM2v`{k$*!ydHfdzXlR+tNgY45g~yvzAriYKpl(bAs z5>PYERNe?6nh<7*5n&*L#C^Lczi%c3G@9yS9DpUkTs{Yph?agQ1JhYzn2NIjZ76uq z0T0>*lE@GRgebOFpaTSgU!hEd!;MV(A(RB!{uPR54TmLW{Z}xD4MieC9t-uE%VR~s zL;*hv2TVp1q9JjJ5LJv?NB(}_lScCsB9YuU^g!hAu>$aPquG%h?dU_4_W7F$&bR2*BC z0x$EqPm; zo9~osyUW&n$x`>WurOC%0BB&k@~9ibR6(hWrkmmdEi=<^;YM9!4YoO(n~$b_0o<}9 zg3MQP(@Q!ujxUU8Z#JipbHumut0gz6QGGp)&g6W$#&4`g*n--@^L4d#h}`PokYKsP zfWw}L=kkd?R|jyHokCiKNuO^k)h3@ zj8eNd_w_Jz6N=zB2JskcnQC zZI3i~Nvz(_mRj*(>9o@YS!Q}2X&I;AsHL~%SU+EQdU?Vq;Nd%#J3OT#=aw*LZP@Co zE8pD+IhpPXi#_VgPs%WNE}Uw%a0eFOru;I8ru)a9!7sXbaAIYq9xi=}17)t)<*SS< zHLEzy!jsnfWo_Es>g9@A+n>kig2fv9T!S}&4H;E6&(elu4;oFQh%qPB&(7o`K~^(p zhp%K`(+D!7vslI1Ju;>Vy<2v{7g8BxG&-z~*-`00^(Vo|(Bvu>Xt&S=d zxwBYq(_N$CjL*rf+ z)!1u;w|Y0TWO`(VB}dB=RCY@>PHp(;e$!}MZ1*}%!`0=15&IweTMTcRDM%42I#b{S ztK1e{Ds7E^)#6sKb|o1b)FkSjy1NA{N6Wk`B_@fj?Yry z){r7U2wUbZeY5QM&Tw-$*NHvMq{OEm_4k`)0X2)~b>@@oOT&=ZK68@ZtiZj4cZ%i4 zS+v87?LH=LRmsev*(VA%`ABvZ*ctX(--!a%+9&{~@?D0$+v1YWA)kQNy$?^QDbjCe z73N^7HYR(=KAM}|<3~xh3~)%w2tGR{lhIpxEP7CIN@@Ww1>1Iu`x#oG;dGc0In#Bv zv|-55J3e^V%r@Xn!%pSKexqV#VXRzs>f9NLb7uC+LTw+7JLY{UKi%pxhfkLN)SApG z;l*`gj5mAc$9s2Z$^NjZ{d3o2QIAn^-w3P!KF@wp=;_9xk8^AE3)PQr%Pg@JuPNs) zD~C&7>`Qsl8_;|`_a?qrd+F<(dcDM_oZ*(!{oJjiqhZeW_DcxL(FbKsYb43@7v?z} z#}-p`a$`F4Z?-HN#AZ#~fK^y{`yRe{XzeKBE>`{)d)#DM`70+$uVB-Qd(H)20|eo& zM9pe_VG)6!bmZMWXt`OsW&MeaQyF^YKDv^RlF_b(P6^#>hpSe2#M^$V`0(CzK(}`D znqOY`XV1ycspd3XJ9*BfL#YjPQR(^ckEcs;z1y=LT`q-%kF_IX(Y&FbfHV~ge|*I~!OTzz@+ sAT_8r<<%C6pMl!}xg2{}U9o!%BT_Uj%j9QyseX(--F)b0S8Uk!PflB?%>V!Z literal 0 HcmV?d00001 diff --git a/src/DataView/assets/文件图标-线.png b/src/DataView/assets/文件图标-线.png new file mode 100644 index 0000000000000000000000000000000000000000..bb672b72357d17c77b39191ea0a52f993c002a72 GIT binary patch literal 350 zcmV-k0iphhP)Px$7)eAyR47wpWME)maByf~(J^8SX86w_0pg>8|BPp*OsG4GEXD}pPx%TS-JgR5(w4R6S@@VH7jT~N8o+G=bm%#x#4WE zQZCgdAAoW~fGP!q4pQtpFj~KQosWyXMle6Vlx}mj*}g|$TAu*OJ<^3o14M+aHNmGB zofzP;V6OJo;>^5nM*u2%p?^7vZtDbA!J@SuKLJ+#54I<1@f|#s0ZSeXIlzu56AZuq*|s9k+dKJuD3_=oN~=5yjFmLw$|6%6wHPP70`G-Fq-+??ex9N=pU|+4kS|#lzpTIPczP~6Nk>hHpbo}7SyBR>{ zhol?T6N#6Mq6IQDC2c2QroQ zg`Q{q+)BALQN1l97er8@iPK&%xk;DO_+{3R79dZ18`0IjTnj}{Z4ErL00000NkvXX Hu0mjfL7OxO literal 0 HcmV?d00001 diff --git a/src/DataView/assets/文件夹图标.png b/src/DataView/assets/文件夹图标.png new file mode 100644 index 0000000000000000000000000000000000000000..525bbf87cf7901f6875d0a1f6d4fd7741552a57e GIT binary patch literal 471 zcmV;|0Vw{7P)Px$kx4{BR5(wqRJ}@rK@gmYAf&Ofu&}UK1VIo4Q4qwRMg<=rwU6No_y~D|REqcm z3ZjTu1T6FcY{XI!gxs#|-F}zLA2vyIm%ZKDnc3wd#`NQua6r92+JlBB!0F+j+5y-` zM-RB$`WV%idUg0U8l)%_ZF0NS7!CBWf1;DR0Ep+*%If0I4yVFd05IXve5bxs-gbUe zQBQBG1ffs>(LP!XN(;lon(mfkXMFo+c-=}=6eLyE(hMu2^v@y{tCI8_M*~B9QwamG z$Lcho%*us00|)npiJH}hmklFVWes>~1@@lK9>SIUSVMVUi_(me!9`HIBx`2%tPC;4 z1ne49fyKh(YVzYhR?)@6G42Dv9|`F6M6mtY_^CM)i5* zU0FkiVgn_gsONJtK>b)$XUiq35o+x0jBx>^SoJC{g3p@#o{sH%^ap0y*XPn~=+^)M N002ovPDHLkV1h3`*sA~l literal 0 HcmV?d00001 diff --git a/src/DataView/assets/重置视图-未点击.png b/src/DataView/assets/重置视图-未点击.png new file mode 100644 index 0000000000000000000000000000000000000000..c11e50587af5ced39fcc4b98580f07bf4e047c55 GIT binary patch literal 489 zcmVPx$qe(ZWrY0_`ev$j~u^ARW3nI5;?HE}?g{Lx-08 z4jl@m+=;!@!NI}7%|Qwd83haN(6!)TXS21?CAq(xB_)9*A0#oL-}t@n{eSO$@9`dS z%ZInDkLd#HUbxgI4hYP4GE1UhXb`R+s`FMrQ^M+Q9DM2A^*C4k@Cwic#M91$G!DXH z-&pm+;J=+(1XxO=V6HD9k4A#Ai4FqhFcPLa>z)kmK44JlwVHXV2lyzkLZKz7Ar;^5 zZomI&YjbOx-iSN=2B;o1*Iv_aW!ckM=;Duu=*eLet fcF`yi+I+47WgplXjJEW|00000NkvXXu0mjft3%wS literal 0 HcmV?d00001 diff --git a/src/DataView/assets/重置视图-点击.png b/src/DataView/assets/重置视图-点击.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcf60de8c3f61fe51a8dee77dfaa1f952fce834 GIT binary patch literal 662 zcmV;H0%`q;P)Px%P)S5VR7gwZmtROzQ5?s=zuRu>Hrtf`JxByWsX-4i!ya=Dq>>QddMTnP3_}-^ z22o%^Sz(N#sEDW+-_}1fgvDN!SpVynu0g?}YC8_L{jvu9uCo}u14-NsWP{JvFM#VVS_Hm!(t$lY zY&d;8JJk1@H(==7Jgz*oDAa#8mzrb3Glk@>33sS45Q<@?`)wp<_pN-rw%J{ z?~>EN55pQBzE*{xE3-PSz9Tcx;lfx{NBFDBvRE#obfbx~SY08bjW+^CCL4jcj?V5` z415u61adxtO#UdGP9{13n32a9Rjs-`7&*zCdan2lfVzAs$!Q*jmsHanD+6hRg}uV) wRm45yaH9De49sht11tehkm;$`kbiUJH;J?@MDI1MVE_OC07*qoM6N<$f&&9EoB#j- literal 0 HcmV?d00001 diff --git a/src/DataView/menuvue/menubar.vue b/src/DataView/menuvue/menubar.vue index fc3a162..013b16a 100644 --- a/src/DataView/menuvue/menubar.vue +++ b/src/DataView/menuvue/menubar.vue @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/src/DataView/vuecomponents/GuiForDivesInfo.vue b/src/DataView/vuecomponents/GuiForDivesInfo.vue index a2f5010..17b97b2 100644 --- a/src/DataView/vuecomponents/GuiForDivesInfo.vue +++ b/src/DataView/vuecomponents/GuiForDivesInfo.vue @@ -1,74 +1,264 @@ - - + \ No newline at end of file diff --git a/src/DataView/vuecomponents/GuiForPlotShow.vue b/src/DataView/vuecomponents/GuiForPlotShow.vue index 5f86627..4b40f26 100644 --- a/src/DataView/vuecomponents/GuiForPlotShow.vue +++ b/src/DataView/vuecomponents/GuiForPlotShow.vue @@ -1,425 +1,1082 @@ - - + + \ No newline at end of file diff --git a/src/DataView/vuecomponents/GuiLeftSider.vue b/src/DataView/vuecomponents/GuiLeftSider.vue index 6306cf1..1a5f0d8 100644 --- a/src/DataView/vuecomponents/GuiLeftSider.vue +++ b/src/DataView/vuecomponents/GuiLeftSider.vue @@ -1,78 +1,447 @@ - + +.fileitem1 { + width: 100%; + height: 20px; + display: flex; + align-items: center; + + &>img { + width: 18px; + height: 18px; + margin-right: 5px; + } +} + +.fileitem2 { + width: 100%; + height: 18px; + display: flex; + align-items: center; + + &>img { + margin-right: 5px; + + width: 13px; + height: 13px; + } +} + +.fileitem:nth-child(2) { + width: 13px; + height: 13px; +} + +.GuiLeftSider { + padding: 17px 24px; +} + +.GuiLeftSider p { + font-size: 18px; + color: #434959; + text-align: left; + font-weight: 600; +} + +.defaultList button { + width: 100%; + height: 40px; + border-radius: 4px; + border: 1.4px solid #4271EE; + box-shadow: none; + font-size: 16px; + color: #4271EE; +} + \ No newline at end of file diff --git a/src/DataView/vuecomponents/MapContainer.vue b/src/DataView/vuecomponents/MapContainer.vue index 472b043..0902666 100644 --- a/src/DataView/vuecomponents/MapContainer.vue +++ b/src/DataView/vuecomponents/MapContainer.vue @@ -1,78 +1,236 @@ - - diff --git a/src/DataView/vuecomponents/PictureDisplayInterface.vue b/src/DataView/vuecomponents/PictureDisplayInterface.vue new file mode 100644 index 0000000..f1128bc --- /dev/null +++ b/src/DataView/vuecomponents/PictureDisplayInterface.vue @@ -0,0 +1,240 @@ + + + + + \ No newline at end of file diff --git a/src/DataView/vuecomponents/SaveFileDialog.vue b/src/DataView/vuecomponents/SaveFileDialog.vue new file mode 100644 index 0000000..462a273 --- /dev/null +++ b/src/DataView/vuecomponents/SaveFileDialog.vue @@ -0,0 +1,301 @@ + + + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 086a3be..c0bf67c 100644 --- a/src/main.js +++ b/src/main.js @@ -2,54 +2,64 @@ import { createApp } from "vue"; import "./styles.css"; //import App from "./AppHyperSpectral.vue"; import App from "./App.vue"; -import { appWindow } from '@tauri-apps/api/window'; -import { LogicalSize } from '@tauri-apps/api/window'; -import ElementPlus from 'element-plus'; -import 'element-plus/dist/index.css' -import {createBootstrap} from 'bootstrap-vue-next' +import { appWindow } from "@tauri-apps/api/window"; +import { LogicalSize } from "@tauri-apps/api/window"; +import ElementPlus from "element-plus"; +import "element-plus/dist/index.css"; +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' +import { createBootstrap } from "bootstrap-vue-next"; // // // Add the necessary CSS -import 'bootstrap/dist/css/bootstrap.css' -import 'bootstrap-vue-next/dist/bootstrap-vue-next.css' -import ArcoVue from '@arco-design/web-vue'; +import "bootstrap/dist/css/bootstrap.css"; +import "bootstrap-vue-next/dist/bootstrap-vue-next.css"; +import ArcoVue from "@arco-design/web-vue"; -import '@arco-design/web-vue/dist/arco.css'; -import { Draggable,DraggablePlugin, DraggableDirective } from '@braks/revue-draggable'; -import KonamiCode from 'vue3-konami-code'; +import "@arco-design/web-vue/dist/arco.css"; +import { + Draggable, + DraggablePlugin, + DraggableDirective, +} from "@braks/revue-draggable"; +import KonamiCode from "vue3-konami-code"; import EventBus from "./eventBus.js"; +import tauriApi from "./utils/tauriApi.js"; async function setWindowSize() { - // const primaryMonitor = await screen.primaryMonitor(); - // const screenSize = primaryMonitor.size; + // const primaryMonitor = await screen.primaryMonitor(); + // const screenSize = primaryMonitor.size; - const newSize = new LogicalSize(800, 600); - await appWindow.setSize(newSize); - // appWindow.setSize(new Size(1000, 1000)); + const newSize = new LogicalSize(800, 600); + await appWindow.setSize(newSize); + // appWindow.setSize(new Size(1000, 1000)); } var app = createApp(App); -app.use(ElementPlus); -app.use(createBootstrap( {components: true, directives: true,plugins:true,icons: true,})); +app.use(ElementPlus, { + locale: zhCn, +}); +app.use( + createBootstrap({ + components: true, + directives: true, + plugins: true, + icons: true, + }) +); app.use(ArcoVue); app.use(DraggablePlugin); app.use(KonamiCode, { - onKonamiCodeEntered: () => { - // 用户输入Konami Code后执行的代码 - console.log('Konami Code 已输入!'); - EventBus.emit('konamiactive'); - } + onKonamiCodeEntered: () => { + // 用户输入Konami Code后执行的代码 + console.log("Konami Code 已输入!"); + EventBus.emit("konamiactive"); + }, }); // or -app.directive('draggable', DraggableDirective) -app.component('Draggable', Draggable); - - - +app.directive("draggable", DraggableDirective); +app.component("Draggable", Draggable); +// 注册全局 API +app.config.globalProperties.$tauriApi = tauriApi; // app.use(BootstrapVueIcons); app.mount("#app"); - - - - diff --git a/src/utils/hyperspectralParser.js b/src/utils/hyperspectralParser.js new file mode 100644 index 0000000..683b2dc --- /dev/null +++ b/src/utils/hyperspectralParser.js @@ -0,0 +1,112 @@ +import { ref } from 'vue'; + +export function useHyperspectralDataParser() { + const parsedData = ref(null); + const error = ref(null); + + // 解析时间结构 + const parseTimeStruct = (timeData) => { + if (!timeData) return null; + return { + timezone: timeData.time_zone || 0, + year: timeData.year || 0, + month: timeData.month || 0, + day: timeData.day || 0, + hour: timeData.hour || 0, + minute: timeData.minute || 0, + second: timeData.second || 0, + millisecond: timeData.millisecond || 0 + }; + }; + + // 解析设备元数据 + const parseDeviceInfo = (metaData) => { + if (!metaData || metaData.info_type !== "devinfo") { + return null; + } + return { + infoType: metaData.info_type, + sensorId: metaData.sensor_id || '', + bandNum: metaData.bandnum || 0, + waveCoeff: { + a1: metaData.wave_coeff?.a1 || 0, + a2: metaData.wave_coeff?.a2 || 0, + a3: metaData.wave_coeff?.a3 || 0, + a4: metaData.wave_coeff?.a4 || 0 + } + }; + }; + + // 解析光谱数据 + const parseSpectralData = (uint8Array, bands, dataType) => { + try { + switch (dataType) { + case 0x20: // float32 + return new Float32Array(uint8Array.buffer, 0, bands); + case 0x21: // float64 + return new Float64Array(uint8Array.buffer, 0, bands); + case 0x10: // uint8 + return new Uint8Array(uint8Array.buffer, 0, bands); + case 0x11: // int16 + return new Int16Array(uint8Array.buffer, 0, bands); + case 0x12: // uint16 + return new Uint16Array(uint8Array.buffer, 0, bands); + case 0x13: // int32 + return new Int32Array(uint8Array.buffer, 0, bands); + case 0x14: // uint32 + return new Uint32Array(uint8Array.buffer, 0, bands); + default: + throw new Error(`Unsupported data type: 0x${dataType.toString(16)}`); + } + } catch (e) { + error.value = `Failed to parse spectral data: ${e.message}`; + return null; + } + }; + + // 主解析函数 + const parseHyperspectralData = (rawData, metaData) => { + try { + if (!rawData || !rawData.spectral_data || !rawData.bands) { + throw new Error('Invalid data format: missing required fields'); + } + const uint8Array = new Uint8Array(rawData.spectral_data); + const deviceInfo = metaData ? parseDeviceInfo(metaData) : null; + const result = { + deviceInfo, + dataInfo: { + name: rawData.name || '', + sensorId: rawData.sensor_id || '', + fiberId: rawData.fiber_id || 0, + collectionTime: rawData.collection_time ? parseTimeStruct(rawData.collection_time) : null, + exposure: rawData.exposure || 0, + gain: rawData.gain || 0, + dataType: rawData.data_type || 0, + pixelSize: rawData.pixel_size || 0, + groundType: rawData.ground_type || 0, + validFlag: rawData.valid_flag || 0, + bands: rawData.bands || 0 + }, + spectralData: parseSpectralData(uint8Array, rawData.bands, rawData.data_type) + }; + parsedData.value = result; + return result; + } catch (e) { + error.value = `Data parsing error: ${e.message}`; + return null; + } + }; + + // 重置状态 + const reset = () => { + parsedData.value = null; + error.value = null; + }; + + return { + parsedData, + error, + parseHyperspectralData, + reset + }; +} \ No newline at end of file diff --git a/src/utils/irisDataDispose.js b/src/utils/irisDataDispose.js new file mode 100644 index 0000000..0a47ece --- /dev/null +++ b/src/utils/irisDataDispose.js @@ -0,0 +1,455 @@ +class getIrisDataDispose { + spectralName; + irisData; + spectralInfoData; + spectral_data; + image_info; + devinfoData; + environmentData; + + constructor(irisData, spectralName) { + this.irisData = irisData; + this.spectralName = spectralName; + this.spectral_data = irisData.spectral_data_section; + this.image_info = irisData.image_info_section; + + for (const element of irisData.spectral_info_section) { + if (element.info_type == "devinfo") { + this.devinfoData = element; + } else if (element.info_type == "environment") { + this.environmentData = element; + } + } + } + + initData() { + const basicTypes = ["ground_dn", "flat_dn", "dark_dn", "gain"]; + const specialTypes = [ + "flat_ref", + "radiance_ground", + "radiance_flat", + "refrad", + ]; + + if (basicTypes.includes(this.spectralName)) { + return this.getFileSpectralData(); + } else if (specialTypes.includes(this.spectralName)) { + return this.getSpecialFileSpectralData(); + } + } + + //获取一般后端直接返回的类型 + getFileSpectralData() { + for (const element of this.spectral_data) { + const typedArray = manageSpectralData(element, this.devinfoData); + const normalArray = Array.from(typedArray); + if (element.name.toLowerCase().includes(this.spectralName)) { + return { ...element, normalArray }; + } + } + } + + //获取需要计算的类型 + getSpecialFileSpectralData() { + let spectralDataMap = new Map([ + ["ground_dn", null], + ["flat_dn", null], + ["dark_dn", null], + ["flat_ref", null], + ["gain", null], + ["radiance_ground", null], + ["radiance_flat", null], + ["refrad", null], + ]); + for (const element of this.spectral_data) { + const typedArray = manageSpectralData(element, this.devinfoData); + const normalArray = Array.from(typedArray); + if (element.name.toLowerCase().includes("ground_dn")) { + spectralDataMap.set("ground_dn", { ...element, normalArray }); + } else if (element.name.toLowerCase().includes("flat_dn")) { + spectralDataMap.set("flat_dn", { ...element, normalArray }); + } else if (element.name.toLowerCase().includes("dark_dn")) { + spectralDataMap.set("dark_dn", { ...element, normalArray }); + } else if (element.name.toLowerCase().includes("gain")) { + spectralDataMap.set("gain", { ...element, normalArray }); + } + } + + if ( + spectralDataMap.get("ground_dn") && + spectralDataMap.get("flat_dn") && + spectralDataMap.get("dark_dn") && + spectralDataMap.get("gain") + ) { + const obj1 = { + ground_dn: spectralDataMap.get("ground_dn").normalArray, + flat_dn: spectralDataMap.get("flat_dn").normalArray, + dark_dn: spectralDataMap.get("dark_dn").normalArray, + gain: spectralDataMap.get("gain").normalArray, + }; + + const arrAll = mergeObjectArrays(obj1); + const name = spectralDataMap.get("ground_dn").name.split("_")[0]; + + // 通用的数值验证函数 + const validateAndPush = (array, value, type, invalidCount) => { + if (isFinite(value) && !isNaN(value)) { + array.push(value); + return true; + } else { + invalidCount.invalidResult++; + return false; + } + }; + + // 通用的除零检查函数 + const checkDivision = (numerator, denominator, type, invalidCount) => { + if (Math.abs(denominator) < 1e-10) { + invalidCount.zeroDiv++; + return null; + } + return numerator / denominator; + }; + + // 通用的结果验证和返回函数 + const validateResult = (array, name, type) => { + if (array.length === 0) { + console.error(`${type}计算错误: 没有有效的数据点,无法生成图表`); + return { normalArray: [], name: name }; + } + return { normalArray: array, name: name }; + }; + + if (this.spectralName == "radiance_ground") { + const radiance_ground = []; + const invalidCount = { zeroDiv: 0, invalidResult: 0 }; + + for (const element of arrAll) { + const gainExposure = spectralDataMap.get("gain").exposure; + const groundExposure = spectralDataMap.get("ground_dn").exposure; + + // 检查曝光时间除零 - 改为补充0值 + if (Math.abs(groundExposure) < 1e-10) { + invalidCount.zeroDiv++; + radiance_ground.push(0); + continue; + } + + const exposureRatio = gainExposure / groundExposure; + const dnDiff = element.ground_dn - element.dark_dn; + const a = exposureRatio * (element.gain * dnDiff); + + // 验证结果,无效时补充0值 + if (isFinite(a) && !isNaN(a)) { + radiance_ground.push(a); + } else { + invalidCount.invalidResult++; + radiance_ground.push(0); + } + } + // 记录统计信息 + if (invalidCount.zeroDiv > 0 || invalidCount.invalidResult > 0) { + console.warn(`radiance_ground计算统计: 除零错误 ${invalidCount.zeroDiv} 个,无效结果 ${invalidCount.invalidResult} 个,有效数据 ${radiance_ground.length} 个`); + } + + return validateResult(radiance_ground, name + "_radiance_ground", 'radiance_ground'); + + } else if (this.spectralName == "radiance_flat") { + const radiance_flat = []; + const invalidCount = { zeroDiv: 0, invalidResult: 0 }; + + for (const element of arrAll) { + const gainExposure = spectralDataMap.get("gain").exposure; + const flatExposure = spectralDataMap.get("flat_dn").exposure; + + // 检查曝光时间除零 - 改为补充0值 + if (Math.abs(flatExposure) < 1e-10) { + invalidCount.zeroDiv++; + radiance_flat.push(0); + continue; + } + + const exposureRatio = gainExposure / flatExposure; + const dnDiff = element.flat_dn - element.dark_dn; + const b = exposureRatio * (element.gain * dnDiff); + + // 验证结果,无效时补充0值 + if (isFinite(b) && !isNaN(b)) { + radiance_flat.push(b); + } else { + invalidCount.invalidResult++; + radiance_flat.push(0); + } + } + // 记录统计信息 + if (invalidCount.zeroDiv > 0 || invalidCount.invalidResult > 0) { + console.warn(`radiance_flat计算统计: 除零错误 ${invalidCount.zeroDiv} 个,无效结果 ${invalidCount.invalidResult} 个,有效数据 ${radiance_flat.length} 个`); + } + + return validateResult(radiance_flat, name + "_radiance_flat", 'radiance_flat'); + + } else if (this.spectralName == "refrad") { + const refrad = []; + const invalidCount = { zeroDiv: 0, invalidResult: 0 }; + + for (const element of arrAll) { + const gainExposure = spectralDataMap.get("gain").exposure; + const groundExposure = spectralDataMap.get("ground_dn").exposure; + const flatExposure = spectralDataMap.get("flat_dn").exposure; + + // 检查曝光时间除零 - 改为补充0值 + if (Math.abs(groundExposure) < 1e-10 || Math.abs(flatExposure) < 1e-10) { + invalidCount.zeroDiv++; + refrad.push(0); + continue; + } + + const groundRatio = gainExposure / groundExposure; + const flatRatio = gainExposure / flatExposure; + + const groundDnDiff = element.ground_dn - element.dark_dn; + const flatDnDiff = element.flat_dn - element.dark_dn; + + const a = groundRatio * (element.gain * groundDnDiff); + const b = flatRatio * (element.gain * flatDnDiff); + + // 检查分母b是否为零 - 改为补充0值 + if (Math.abs(b) < 1e-10) { + invalidCount.zeroDiv++; + refrad.push(0); + } else { + const c = a / b; + if (isFinite(c) && !isNaN(c)) { + refrad.push(c); + } else { + invalidCount.invalidResult++; + refrad.push(0); + } + } + } + + // 记录统计信息 + if (invalidCount.zeroDiv > 0 || invalidCount.invalidResult > 0) { + console.warn(`refrad计算统计: 除零错误 ${invalidCount.zeroDiv} 个,无效结果 ${invalidCount.invalidResult} 个,有效数据 ${refrad.length} 个`); + } + + return validateResult(refrad, name + "_refrad", 'refrad'); + + } else if (this.spectralName == "flat_ref") { + const validData = []; + const invalidCount = { zeroDiv: 0, invalidResult: 0 }; + + for (const element of arrAll) { + const denominator = element.flat_dn - element.dark_dn; + const numerator = element.ground_dn - element.dark_dn; + + // 检查分母是否为零或接近零 - 改为补充0值 + if (Math.abs(denominator) < 1e-10) { + invalidCount.zeroDiv++; + validData.push(0); + } else { + const b = numerator / denominator; + if (isFinite(b) && !isNaN(b)) { + validData.push(b); + } else { + invalidCount.invalidResult++; + validData.push(0); + } + } + } + + // 记录统计信息 + if (invalidCount.zeroDiv > 0 || invalidCount.invalidResult > 0) { + console.warn(`flat_ref计算统计: 除零错误 ${invalidCount.zeroDiv} 个,无效结果 ${invalidCount.invalidResult} 个,有效数据 ${validData.length} 个`); + } + return validateResult(validData, name + "_flat_ref", 'flat_ref'); + } + } + } + + getSpectralInfoData() { + let spectralInfoData = []; + for (let i = 0; i < this.devinfoData.bandnum; i++) { + const a = + this.devinfoData.wave_coeff.a1 * i ** 3 + + this.devinfoData.wave_coeff.a2 * i * i + + this.devinfoData.wave_coeff.a3 * i + + this.devinfoData.wave_coeff.a4; + spectralInfoData.push(a); + } + return spectralInfoData; + } + + parseImageData(image_info) { + if (!image_info || image_info.length === 0) { + console.log("No image data found"); + return []; + } + const imageInfos = image_info; + const images = []; + for (const imageInfo of imageInfos) { + // 获取图像类型 + const imageType = imageInfo.info_type; + let mimeType; + switch (imageType) { + case 0: + mimeType = "image/jpeg"; + break; + case 1: + mimeType = "image/png"; + break; + case 2: + mimeType = "image/tiff"; + break; + case 3: + mimeType = "application/octet-stream"; // 原始数据 + break; + default: + mimeType = "application/octet-stream"; + } + // 创建Blob对象 + const imageBlob = new Blob([new Uint8Array(imageInfo.image_data)], { + type: mimeType, + }); + // 创建URL + const imageUrl = URL.createObjectURL(imageBlob); + images.push({ + name: imageInfo.name, + type: imageType, + url: imageUrl, + time: imageInfo.collection_time, + }); + } + + return images; + } +} + +function mergeObjectArrays(obj) { + const keys = Object.keys(obj); + const length = obj[keys[0]].length; + + const result = []; + + for (let i = 0; i < length; i++) { + const item = {}; + for (const key of keys) { + item[key] = obj[key][i]; + } + result.push(item); + } + + return result; +} + +const manageSpectralData = (rawData, devinfoData) => { + const bands = devinfoData.bandnum; + const uint8Array = new Uint8Array(rawData.spectral_data); + try { + switch (rawData.data_type) { + case 0x20: // float32 + return new Float32Array(uint8Array.buffer, 0, bands); + case 0x21: // float64 + return new Float64Array(uint8Array.buffer, 0, bands); + case 0x10: // uint8 + return new Uint8Array(uint8Array.buffer, 0, bands); + case 0x11: // int16 + return new Int16Array(uint8Array.buffer, 0, bands); + case 0x12: // uint16 + return new Uint16Array(uint8Array.buffer, 0, bands); + case 0x13: // int32 + return new Int32Array(uint8Array.buffer, 0, bands); + case 0x14: // uint32 + return new Uint32Array(uint8Array.buffer, 0, bands); + default: + throw new Error(`Unsupported data type: 0x${dataType.toString(16)}`); + } + } catch (e) { + error.value = `Failed to parse spectral data: ${e.message}`; + return null; + } +}; + +const spectralTypeList = [ + { + value: "ground_dn", + label: "地物DN", + }, + { + value: "flat_dn", + label: "参考DN", + }, + { + value: "dark_dn", + label: "暗噪DN", + }, + { + value: "flat_ref", + label: "反射率", + }, + { + value: "gain", + label: "能量校准文件", + }, + { + value: "radiance_ground", + label: "地物辐射亮度", + }, + { + value: "radiance_flat", + label: "参考辐射亮度", + }, + { + value: "refrad", + label: "反射率能量", + }, + { + value: "jdfs", + label: "绝对反射率", + }, + { + value: "ckbzwj", + label: "参考校准文件", + }, + { + value: "fszd", + label: "辐射照度", + }, +]; + +const spectralProcessTypeList = [ + { + value: "D1", + label: "一阶导数", + }, + { + value: "D2", + label: "二阶导数", + }, + { + value: "MA", + label: "移动平均平滑", + }, +]; + +function D1(arr) { + const result = []; + for (let i = 1; i < arr.length; i++) { + result.push(arr[i] - arr[i - 1]); + } + result.push(arr[arr.length - 1]); + return result; +} + +function D2(arr) { + const arr2 = D1(arr); + return D1(arr2); +} + +export { + spectralTypeList, + getIrisDataDispose, + spectralProcessTypeList, + D1, + D2, +}; diff --git a/src/utils/spectralDataService.js b/src/utils/spectralDataService.js new file mode 100644 index 0000000..a0c2b92 --- /dev/null +++ b/src/utils/spectralDataService.js @@ -0,0 +1,106 @@ +import { getIrisDataDispose, D1, D2 } from '../utils/irisDataDispose'; +import { invoke } from "@tauri-apps/api/tauri"; + +/** + * 光谱数据处理服务 + */ +export class SpectralDataService { + /** + * 提取文件名 + */ + static extractFileName(filePath) { + const match = filePath.match(/[^\\\/]+$/); + return match ? match[0] : ''; + } + + /** + * 加载文件数据 + */ + static async loadFileData(filePaths) { + const fileData = []; + for (const path of filePaths) { + try { + const src = await invoke("getoneirisfile", { path }); + const fileName = this.extractFileName(path); + fileData.push({ data: src, name: fileName }); + } catch (error) { + console.error(`加载文件失败: ${path}`, error); + } + } + return fileData; + } + + /** + * 处理光谱数据 + */ + static processSpectralData(fileData, spectralType, processType = '') { + const spectralDataList = []; + const imageList = []; + + for (const element of fileData) { + if (!element.data) continue; + + try { + const dispose = new getIrisDataDispose(element.data, spectralType); + const datay = dispose.initData(); + const datax = dispose.getSpectralInfoData(); + const environmentData = dispose.environmentData; + const img = dispose.parseImageData(element.data.image_info_section); + + if (datay?.normalArray && datax) { + spectralDataList.push({ + name: datay?.name || '', + datax: datax, + datay: datay.normalArray, + environmentData: { ...environmentData, fileName: element.name } + }); + imageList.push(img); + } + } catch (error) { + console.error(`处理光谱数据失败: ${element.name}`, error); + } + } + + return { + spectralDataList, + imageList, + processedData: this.applyProcessing(spectralDataList, processType) + }; + } + + /** + * 应用数据处理(D1/D2等) + */ + static applyProcessing(spectralDataList, processType) { + if (!processType) return spectralDataList; + + switch (processType) { + case 'D1': + return spectralDataList.map(item => ({ + name: item.name + '_D1', + datax: item.datax, + datay: D1(item.datay), + environmentData: item.environmentData + })); + case 'D2': + return spectralDataList.map(item => ({ + name: item.name + '_D2', + datax: item.datax, + datay: D2(item.datay), + environmentData: item.environmentData + })); + default: + return spectralDataList; + } + } + + /** + * 批量处理选定文件的光谱数据 + */ + static processSelectedFiles(fileData, selectedFileNames, spectralType, processType = '') { + const filteredData = fileData.filter(file => + selectedFileNames.includes(file.name) + ); + return this.processSpectralData(filteredData, spectralType, processType); + } +} \ No newline at end of file diff --git a/src/utils/tauriApi.js b/src/utils/tauriApi.js new file mode 100644 index 0000000..d14dea1 --- /dev/null +++ b/src/utils/tauriApi.js @@ -0,0 +1,118 @@ +import { invoke } from "@tauri-apps/api/tauri"; +import { dialog, fs } from "@tauri-apps/api"; + +export default { + /** + * 打开文件夹选择对话框并获取文件夹内容 + * @param {string} defaultPath 默认路径 + * @returns {Promise} 文件夹树形结构 + */ + async getFolderList(defaultPath = "") { + try { + // 打开文件夹选择对话框 + const options = { + defaultPath: defaultPath || "../", + directory: true, + title: "请选择文件夹", + }; + + const selectedPath = await dialog.open(options); + + if (!selectedPath) { + return { + label: '请选择', + children: [], + }; + } + + // 读取文件夹内容并构建树形结构 + const tree = await this.buildFolderTree(selectedPath); + return tree; + } catch (error) { + console.error("获取文件夹列表失败:", error); + return { + label: '请选择', + children: [], + }; + } + }, + + /** + * 构建文件夹树形结构 + * @param {string} folderPath 文件夹路径 + * @returns {Promise} 树形结构对象 + */ + async buildFolderTree(folderPath) { + try { + const entries = await fs.readDir(folderPath, { recursive: true }); + + // 获取文件夹名称 + const pathParts = folderPath.split(/[\\\/]/); + const folderName = pathParts[pathParts.length - 1] || folderPath; + const obj = { + name: folderName, + path: folderPath, + children: entries, + isFolder: true, + isLeaf: false + } + const data = this.getTreeData(obj); + return data + } catch (error) { + console.error("构建文件夹树失败:", error); + return { + label: folderPath, + children: [], + path: folderPath, + isFolder: true, + isLeaf: false + }; + } + }, + + + getTreeData(entries) { + if (!entries) { + return null; + } + const obj = { + label: entries.name, + path: entries.path, + } + if (entries?.children && Array.isArray(entries.children)) { + // 处理数组 + obj.children = entries.children.map((item) => { + return this.getTreeData(item); + }); + obj.isFolder = true; + obj.isLeaf = false; + + } else { + obj.isLeaf = true; + obj.isFolder = false; + } + return obj; + } + + +}; + + +function deepTraverse(data) { + if (Array.isArray(data)) { + // 处理数组 + data.forEach((item, index) => { + console.log(`数组项 ${index}:`, item); + deepTraverse(item); // 递归处理数组元素 + }); + } else if (typeof data === 'object' && data !== null) { + // 处理对象 + Object.entries(data).forEach(([key, value]) => { + console.log(`属性 ${key}:`, value); + deepTraverse(value); // 递归处理对象属性 + }); + } else { + // 基本类型值 + console.log('值:', data); + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index d500cde..a30b23d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,6 +124,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@petamoriken/float16@^3.4.7": + version "3.9.2" + resolved "https://r.cnpmjs.org/@petamoriken/float16/-/float16-3.9.2.tgz" + integrity sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog== + "@popperjs/core@^2.11.8", "@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": version "2.11.8" resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" @@ -287,6 +292,11 @@ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz" integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== +"@types/rbush@4.0.0": + version "4.0.0" + resolved "https://r.cnpmjs.org/@types/rbush/-/rbush-4.0.0.tgz" + integrity sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ== + "@types/web-bluetooth@^0.0.16": version "0.0.16" resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz" @@ -694,6 +704,11 @@ destroy@^1.0.4: resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +earcut@^3.0.0: + version "3.0.2" + resolved "https://r.cnpmjs.org/earcut/-/earcut-3.0.2.tgz" + integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ== + echart@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/echart/-/echart-0.1.3.tgz" @@ -854,6 +869,20 @@ function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +geotiff@^2.1.3: + version "2.1.3" + resolved "https://r.cnpmjs.org/geotiff/-/geotiff-2.1.3.tgz" + integrity sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA== + dependencies: + "@petamoriken/float16" "^3.4.7" + lerc "^3.0.0" + pako "^2.0.4" + parse-headers "^2.0.2" + quick-lru "^6.1.1" + web-worker "^1.2.0" + xml-utils "^1.0.2" + zstddec "^0.1.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -1096,6 +1125,11 @@ koa@^2.2.0: type-is "^1.6.16" vary "^1.1.2" +lerc@^3.0.0: + version "3.0.0" + resolved "https://r2.cnpmjs.org/lerc/-/lerc-3.0.0.tgz" + integrity sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww== + less@*, less@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz" @@ -1339,6 +1373,17 @@ number-precision@^1.6.0: resolved "https://registry.npmjs.org/number-precision/-/number-precision-1.6.0.tgz" integrity sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ== +ol@^10.6.1: + version "10.6.1" + resolved "https://r.cnpmjs.org/ol/-/ol-10.6.1.tgz" + integrity sha512-xp174YOwPeLj7c7/8TCIEHQ4d41tgTDDhdv6SqNdySsql5/MaFJEJkjlsYcvOPt7xA6vrum/QG4UdJ0iCGT1cg== + dependencies: + "@types/rbush" "4.0.0" + earcut "^3.0.0" + geotiff "^2.1.3" + pbf "4.0.1" + rbush "^4.0.0" + on-finished@^2.3.0: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" @@ -1351,6 +1396,16 @@ only@~0.0.2: resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz" integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== +pako@^2.0.4: + version "2.1.0" + resolved "https://r.cnpmjs.org/pako/-/pako-2.1.0.tgz" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + +parse-headers@^2.0.2: + version "2.0.6" + resolved "https://r.cnpmjs.org/parse-headers/-/parse-headers-2.0.6.tgz" + integrity sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A== + parse-node-version@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" @@ -1378,6 +1433,13 @@ pathe@^1.1.2: resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pbf@4.0.1: + version "4.0.1" + resolved "https://r.cnpmjs.org/pbf/-/pbf-4.0.1.tgz" + integrity sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA== + dependencies: + resolve-protobuf-schema "^2.1.0" + picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" @@ -1421,6 +1483,11 @@ postcss@^8.4.35, postcss@^8.5.3: picocolors "^1.1.1" source-map-js "^1.2.1" +protocol-buffers-schema@^3.3.1: + version "3.6.0" + resolved "https://r2.cnpmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== + prr@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" @@ -1441,11 +1508,21 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^6.1.1: + version "6.1.2" + resolved "https://r.cnpmjs.org/quick-lru/-/quick-lru-6.1.2.tgz" + integrity sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ== + quickselect@^1.0.1: version "1.1.1" resolved "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz" integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== +quickselect@^3.0.0: + version "3.0.0" + resolved "https://r.cnpmjs.org/quickselect/-/quickselect-3.0.0.tgz" + integrity sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g== + rbush@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz" @@ -1453,6 +1530,13 @@ rbush@^2.0.2: dependencies: quickselect "^1.0.1" +rbush@^4.0.0: + version "4.0.1" + resolved "https://r.cnpmjs.org/rbush/-/rbush-4.0.1.tgz" + integrity sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ== + dependencies: + quickselect "^3.0.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1465,6 +1549,13 @@ resize-observer-polyfill@^1.5.1: resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://r2.cnpmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + resolve@^1.22.8: version "1.22.8" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" @@ -1789,6 +1880,11 @@ vue3-konami-code@^1.0.0: resolved "https://registry.npmjs.org/vue3-konami-code/-/vue3-konami-code-1.0.0.tgz" integrity sha512-fhHAPFZA1jsgDHlYz5dnG52RmY9+vtfMthBaY1S5VBxNLdU4EWTbnJO0nfL8Uybw5uHsDqCGtTbGaX7nIvQ9Qw== +web-worker@^1.2.0: + version "1.5.0" + resolved "https://r.cnpmjs.org/web-worker/-/web-worker-1.5.0.tgz" + integrity sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw== + webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" @@ -1799,6 +1895,11 @@ webpack-virtual-modules@^0.6.1: resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz" integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== +xml-utils@^1.0.2: + version "1.10.2" + resolved "https://r.cnpmjs.org/xml-utils/-/xml-utils-1.10.2.tgz" + integrity sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA== + ylru@^1.2.0: version "1.4.0" resolved "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz" @@ -1810,3 +1911,8 @@ zrender@5.5.0: integrity sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w== dependencies: tslib "2.3.0" + +zstddec@^0.1.0: + version "0.1.0" + resolved "https://r.cnpmjs.org/zstddec/-/zstddec-0.1.0.tgz" + integrity sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==