diff --git a/mock/pools/_monitorDetailData.bundled_1744248881266_ux47rphq2u8.mjs b/mock/pools/_monitorDetailData.bundled_1744248881266_ux47rphq2u8.mjs
new file mode 100644
index 0000000..38d4cc9
--- /dev/null
+++ b/mock/pools/_monitorDetailData.bundled_1744248881266_ux47rphq2u8.mjs
@@ -0,0 +1 @@
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
diff --git a/mock/utils/_apiMock.bundled_1744248880889_3kpl4mqm58.mjs b/mock/utils/_apiMock.bundled_1744248880889_3kpl4mqm58.mjs
new file mode 100644
index 0000000..23990b7
--- /dev/null
+++ b/mock/utils/_apiMock.bundled_1744248880889_3kpl4mqm58.mjs
@@ -0,0 +1,49 @@
+// mock/utils/apiMock.ts
+function fetchMockSuccessFullByOther({
+ data,
+ msg
+}) {
+ const result = {
+ code: 200,
+ // 200 成功
+ success: true,
+ // true 成功
+ data: data || null,
+ // mock业务层数据
+ msg,
+ // 成功提示
+ isMock: true
+ // true 标识当前是模拟数据
+ };
+ return result;
+}
+function fetchMockFailFullByOther({ data, msg }) {
+ const result = {
+ code: 599,
+ // 200 成功
+ success: false,
+ // true 成功
+ data: data || null,
+ // mock业务层数据
+ msg,
+ // 成功提示
+ isMock: true
+ // true 标识当前是模拟数据
+ };
+ return result;
+}
+function fetchCurrPageByList({ data }) {
+ const { current, pageSize } = data;
+ const prevPage = current - 1;
+ const currPageData = {
+ ...data,
+ data: data.data.slice(prevPage * pageSize, current * pageSize)
+ };
+ return fetchMockSuccessFullByOther({ data: currPageData });
+}
+export {
+ fetchCurrPageByList,
+ fetchMockFailFullByOther,
+ fetchMockSuccessFullByOther
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibW9jay91dGlscy9hcGlNb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX2luamVjdGVkX2ZpbGVuYW1lX18gPSBcIkU6XFxcXHlheGluX3dlYlxcXFw1Ry1Mb2FkaW5nLUJheS1XZWJcXFxcbW9ja1xcXFx1dGlsc1xcXFxhcGlNb2NrLnRzXCI7Y29uc3QgX19pbmplY3RlZF9kaXJuYW1lX18gPSBcIkU6XFxcXHlheGluX3dlYlxcXFw1Ry1Mb2FkaW5nLUJheS1XZWJcXFxcbW9ja1xcXFx1dGlsc1wiO2NvbnN0IF9faW5qZWN0ZWRfaW1wb3J0X21ldGFfdXJsX18gPSBcImZpbGU6Ly8vRToveWF4aW5fd2ViLzVHLUxvYWRpbmctQmF5LVdlYi9tb2NrL3V0aWxzL2FwaU1vY2sudHNcIjsvKlxyXG4gKiBAQXV0aG9yOiBkb25naGFvIGRvbmdoYW9Ac3VwZXJ2aXNpb24ubHRkXHJcbiAqIEBEYXRlOiAyMDI1LTAzLTA3IDE0OjU4OjM5XHJcbiAqIEBMYXN0RWRpdG9yczogZG9uZ2hhbyBkb25naGFvQHN1cGVydmlzaW9uLmx0ZFxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI1LTAzLTEzIDE0OjI5OjI2XHJcbiAqIEBGaWxlUGF0aDogXFw1Ry1Mb2FkaW5nLUJheS1XZWJcXG1vY2tcXHV0aWxzXFxhcGlNb2NrLnRzXHJcbiAqIEBEZXNjcmlwdGlvbjogXHU4RkQ5XHU2NjJGXHU5RUQ4XHU4QkE0XHU4QkJFXHU3RjZFLFx1OEJGN1x1OEJCRVx1N0Y2RWBjdXN0b21NYWRlYCwgXHU2MjUzXHU1RjAwa29yb0ZpbGVIZWFkZXJcdTY3RTVcdTc3MEJcdTkxNERcdTdGNkUgXHU4RkRCXHU4ODRDXHU4QkJFXHU3RjZFOiBodHRwczovL2dpdGh1Yi5jb20vT0JLb3JvMS9rb3JvMUZpbGVIZWFkZXIvd2lraS8lRTklODUlOEQlRTclQkQlQUVcclxuICovXHJcbmltcG9ydCB7IGZhaWxNb2NrQXBpUHJvcHMsIHN1Y2Nlc3NNb2NrQXBpUHJvcHMgfSBmcm9tIFwiLi4vdHlwaW5nXCI7XHJcbmV4cG9ydCBmdW5jdGlvbiBmZXRjaE1vY2tTdWNjZXNzRnVsbEJ5T3RoZXIoe1xyXG4gIGRhdGEsXHJcbiAgbXNnLFxyXG59KTogc3VjY2Vzc01vY2tBcGlQcm9wcyB7XHJcbiAgLy8gcmV0dXJuIHtcclxuICAvLyAgIGNvZGU6IDIwMCwgLy8gMjAwIFx1NjIxMFx1NTI5RlxyXG4gIC8vICAgc3VjY2VzczogdHJ1ZSwgLy8gdHJ1ZSBcdTYyMTBcdTUyOUZcclxuICAvLyAgIGRhdGE6IGRhdGEgfHwgbnVsbCwgLy8gbW9ja1x1NEUxQVx1NTJBMVx1NUM0Mlx1NjU3MFx1NjM2RVxyXG4gIC8vICAgbXNnOiBtc2cgfCBcIm9rXCIsIC8vIFx1NjIxMFx1NTI5Rlx1NjNEMFx1NzkzQVxyXG4gIC8vICAgaXNNb2NrOiB0cnVlIC8vIHRydWUgXHU2ODA3XHU4QkM2XHU1RjUzXHU1MjREXHU2NjJGXHU2QTIxXHU2MkRGXHU2NTcwXHU2MzZFXHJcbiAgLy8gfSBhcyBzdWNjZXNzTW9ja0FwaVByb3BzO1xyXG4gIGNvbnN0IHJlc3VsdDogc3VjY2Vzc01vY2tBcGlQcm9wcyA9IHtcclxuICAgIGNvZGU6IDIwMCwgLy8gMjAwIFx1NjIxMFx1NTI5RlxyXG4gICAgc3VjY2VzczogdHJ1ZSwgLy8gdHJ1ZSBcdTYyMTBcdTUyOUZcclxuICAgIGRhdGE6IGRhdGEgfHwgbnVsbCwgLy8gbW9ja1x1NEUxQVx1NTJBMVx1NUM0Mlx1NjU3MFx1NjM2RVxyXG4gICAgbXNnOiBtc2cgYXMgc3RyaW5nIHwgXCJva1wiLCAvLyBcdTYyMTBcdTUyOUZcdTYzRDBcdTc5M0FcclxuICAgIGlzTW9jazogdHJ1ZSwgLy8gdHJ1ZSBcdTY4MDdcdThCQzZcdTVGNTNcdTUyNERcdTY2MkZcdTZBMjFcdTYyREZcdTY1NzBcdTYzNkVcclxuICB9O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmZXRjaE1vY2tGYWlsRnVsbEJ5T3RoZXIoeyBkYXRhLCBtc2cgfSk6IGZhaWxNb2NrQXBpUHJvcHMge1xyXG4gIC8vIHJldHVybiB7XHJcbiAgLy8gICBjb2RlOiA1OTksIC8vIDIwMCBcdTYyMTBcdTUyOUZcclxuICAvLyAgIHN1Y2Nlc3M6IHRydWUsIC8vIHRydWUgXHU2MjEwXHU1MjlGXHJcbiAgLy8gICBkYXRhOiBkYXRhIHx8IG51bGwsIC8vIG1vY2tcdTRFMUFcdTUyQTFcdTVDNDJcdTY1NzBcdTYzNkVcclxuICAvLyAgIG1zZzogbXNnIHwgXCJmYWlsXCIsIC8vIFx1NjIxMFx1NTI5Rlx1NjNEMFx1NzkzQVxyXG4gIC8vICAgaXNNb2NrOiB0cnVlIC8vIHRydWUgXHU2ODA3XHU4QkM2XHU1RjUzXHU1MjREXHU2NjJGXHU2QTIxXHU2MkRGXHU2NTcwXHU2MzZFXHJcbiAgLy8gfSBhcyBmYWlsTW9ja0FwaVByb3BzO1xyXG4gIGNvbnN0IHJlc3VsdDogZmFpbE1vY2tBcGlQcm9wcyA9IHtcclxuICAgIGNvZGU6IDU5OSwgLy8gMjAwIFx1NjIxMFx1NTI5RlxyXG4gICAgc3VjY2VzczogZmFsc2UsIC8vIHRydWUgXHU2MjEwXHU1MjlGXHJcbiAgICBkYXRhOiBkYXRhIHx8IG51bGwsIC8vIG1vY2tcdTRFMUFcdTUyQTFcdTVDNDJcdTY1NzBcdTYzNkVcclxuICAgIG1zZzogbXNnIGFzIHN0cmluZyB8IFwiZmFpbFwiLCAvLyBcdTYyMTBcdTUyOUZcdTYzRDBcdTc5M0FcclxuICAgIGlzTW9jazogdHJ1ZSwgLy8gdHJ1ZSBcdTY4MDdcdThCQzZcdTVGNTNcdTUyNERcdTY2MkZcdTZBMjFcdTYyREZcdTY1NzBcdTYzNkVcclxuICB9O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8vIFx1NTIwNlx1OTg3NVx1NUM1NVx1NzkzQVxyXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hDdXJyUGFnZUJ5TGlzdCh7IGRhdGEgfSk6IHN1Y2Nlc3NNb2NrQXBpUHJvcHMge1xyXG4gIC8vIGNvbnNvbGUubG9nKFwiZmV0Y2hDdXJyUGFnZUJ5TGlzdF9kYXRhXCIsIGRhdGEpO1xyXG4gIGNvbnN0IHsgY3VycmVudCwgcGFnZVNpemUgfSA9IGRhdGE7XHJcbiAgY29uc3QgcHJldlBhZ2UgPSBjdXJyZW50IC0gMTtcclxuICBjb25zdCBjdXJyUGFnZURhdGEgPSB7XHJcbiAgICAuLi5kYXRhLFxyXG4gICAgZGF0YTogZGF0YS5kYXRhLnNsaWNlKHByZXZQYWdlICogcGFnZVNpemUsIGN1cnJlbnQgKiBwYWdlU2l6ZSksXHJcbiAgfTtcclxuICByZXR1cm4gZmV0Y2hNb2NrU3VjY2Vzc0Z1bGxCeU90aGVyKHsgZGF0YTogY3VyclBhZ2VEYXRhIH0pO1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFTTyxTQUFTLDRCQUE0QjtBQUFBLEVBQzFDO0FBQUEsRUFDQTtBQUNGLEdBQXdCO0FBUXRCLFFBQU0sU0FBOEI7QUFBQSxJQUNsQyxNQUFNO0FBQUE7QUFBQSxJQUNOLFNBQVM7QUFBQTtBQUFBLElBQ1QsTUFBTSxRQUFRO0FBQUE7QUFBQSxJQUNkO0FBQUE7QUFBQSxJQUNBLFFBQVE7QUFBQTtBQUFBLEVBQ1Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHlCQUF5QixFQUFFLE1BQU0sSUFBSSxHQUFxQjtBQVF4RSxRQUFNLFNBQTJCO0FBQUEsSUFDL0IsTUFBTTtBQUFBO0FBQUEsSUFDTixTQUFTO0FBQUE7QUFBQSxJQUNULE1BQU0sUUFBUTtBQUFBO0FBQUEsSUFDZDtBQUFBO0FBQUEsSUFDQSxRQUFRO0FBQUE7QUFBQSxFQUNWO0FBQ0EsU0FBTztBQUNUO0FBR08sU0FBUyxvQkFBb0IsRUFBRSxLQUFLLEdBQXdCO0FBRWpFLFFBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSTtBQUM5QixRQUFNLFdBQVcsVUFBVTtBQUMzQixRQUFNLGVBQWU7QUFBQSxJQUNuQixHQUFHO0FBQUEsSUFDSCxNQUFNLEtBQUssS0FBSyxNQUFNLFdBQVcsVUFBVSxVQUFVLFFBQVE7QUFBQSxFQUMvRDtBQUNBLFNBQU8sNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
diff --git a/mock/utils/_is.bundled_1744248880889_bs1pugk682m.mjs b/mock/utils/_is.bundled_1744248880889_bs1pugk682m.mjs
new file mode 100644
index 0000000..fb4499e
--- /dev/null
+++ b/mock/utils/_is.bundled_1744248880889_bs1pugk682m.mjs
@@ -0,0 +1,27 @@
+// mock/utils/is.ts
+var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([
+ "jpg",
+ "jpeg",
+ "png",
+ "gif",
+ "bmp",
+ "svg",
+ "webp",
+ "tiff",
+ "psd",
+ "ico",
+ "jfif",
+ "apng",
+ "avif"
+]);
+function isImage(filename) {
+ const baseName = filename.split("/").pop().split("\\").pop();
+ if (!baseName) return false;
+ const ext = baseName.split(".").pop()?.toLowerCase();
+ if (!ext || ext.length < 2) return false;
+ return IMAGE_EXTENSIONS.has(ext);
+}
+export {
+ isImage
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibW9jay91dGlscy9pcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX19pbmplY3RlZF9maWxlbmFtZV9fID0gXCJFOlxcXFx5YXhpbl93ZWJcXFxcNUctTG9hZGluZy1CYXktV2ViXFxcXG1vY2tcXFxcdXRpbHNcXFxcaXMudHNcIjtjb25zdCBfX2luamVjdGVkX2Rpcm5hbWVfXyA9IFwiRTpcXFxceWF4aW5fd2ViXFxcXDVHLUxvYWRpbmctQmF5LVdlYlxcXFxtb2NrXFxcXHV0aWxzXCI7Y29uc3QgX19pbmplY3RlZF9pbXBvcnRfbWV0YV91cmxfXyA9IFwiZmlsZTovLy9FOi95YXhpbl93ZWIvNUctTG9hZGluZy1CYXktV2ViL21vY2svdXRpbHMvaXMudHNcIjsvKipcclxuICogXHU1MjI0XHU2NUFEXHU2NTg3XHU0RUY2XHU1NDBEXHU2NjJGXHU1NDI2XHU0RTNBXHU1NkZFXHU3MjQ3XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSBcdTVCOENcdTY1NzRcdTY1ODdcdTRFRjZcdTU0MERcdUZGMDhcdTU0MkJcdThERUZcdTVGODRcdTU0OENcdTYyNjlcdTVDNTVcdTU0MERcdUZGMDlcclxuICogQHJldHVybnMge2Jvb2xlYW59IFx1NjYyRlx1NTQyNlx1NEUzQVx1NTZGRVx1NzI0N1xyXG4gKi9cclxuXHJcbmNvbnN0IElNQUdFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFtcclxuICBcImpwZ1wiLFxyXG4gIFwianBlZ1wiLFxyXG4gIFwicG5nXCIsXHJcbiAgXCJnaWZcIixcclxuICBcImJtcFwiLFxyXG4gIFwic3ZnXCIsXHJcbiAgXCJ3ZWJwXCIsXHJcbiAgXCJ0aWZmXCIsXHJcbiAgXCJwc2RcIixcclxuICBcImljb1wiLFxyXG4gIFwiamZpZlwiLFxyXG4gIFwiYXBuZ1wiLFxyXG4gIFwiYXZpZlwiLFxyXG5dKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2UoZmlsZW5hbWUpIHtcclxuICAvLyAxLiBcdTUzQkJcdTk2NjRcdThERUZcdTVGODRcdUZGMENcdTUzRUFcdTRGRERcdTc1NTlcdTY1ODdcdTRFRjZcdTU0MERcclxuICBjb25zdCBiYXNlTmFtZSA9IGZpbGVuYW1lLnNwbGl0KFwiL1wiKS5wb3AoKS5zcGxpdChcIlxcXFxcIikucG9wKCk7XHJcbiAgaWYgKCFiYXNlTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAyLiBcdTYzRDBcdTUzRDZcdTYyNjlcdTVDNTVcdTU0MERcdUZGMDhcdTU5MDRcdTc0MDZcdTU5MUFcdTYyNjlcdTVDNTVcdTU0MERcdUZGMENcdTUzRDZcdTY3MDBcdTU0MEVcdTRFMDBcdTRFMkFcdUZGMDlcclxuICBjb25zdCBleHQgPSBiYXNlTmFtZS5zcGxpdChcIi5cIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgaWYgKCFleHQgfHwgZXh0Lmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZTsgLy8gXHU2MjY5XHU1QzU1XHU1NDBEXHU5NTdGXHU1RUE2XHU4MUYzXHU1QzExMlx1NEY0RFx1RkYwOFx1NTk4Mi5qcGdcdUZGMDlcclxuXHJcbiAgLy8gMy4gXHU2OEMwXHU2N0U1XHU2NjJGXHU1NDI2XHU1NzI4XHU1NkZFXHU3MjQ3XHU2MjY5XHU1QzU1XHU1NDBEXHU3NjdEXHU1NDBEXHU1MzU1XHJcbiAgcmV0dXJuIElNQUdFX0VYVEVOU0lPTlMuaGFzKGV4dCk7XHJcbn1cclxuXHJcbi8vIFx1NzkzQVx1NEY4Qlx1NkQ0Qlx1OEJENVxyXG4vLyAgIGNvbnNvbGUubG9nKGlzSW1hZ2UoJ3Bob3RvLmpwZycpKTsgICAgIC8vIHRydWVcclxuLy8gICBjb25zb2xlLmxvZyhpc0ltYWdlKCdpbWFnZS5wbmcnKSk7ICAgIC8vIHRydWVcclxuLy8gICBjb25zb2xlLmxvZyhpc0ltYWdlKCdsb2dvLnN2ZycpKTsgICAgIC8vIHRydWVcclxuLy8gICBjb25zb2xlLmxvZyhpc0ltYWdlKCdjb3Zlci50YXIuZ3onKSk7IC8vIGZhbHNlXHVGRjA4XHU5NzVFXHU1NkZFXHU3MjQ3XHU2MjY5XHU1QzU1XHU1NDBEXHVGRjA5XHJcbi8vICAgY29uc29sZS5sb2coaXNJbWFnZSgnZmlsZScpKTsgICAgICAgICAvLyBmYWxzZVx1RkYwOFx1NjVFMFx1NjI2OVx1NUM1NVx1NTQwRFx1RkYwOVxyXG4vLyAgIGNvbnNvbGUubG9nKGlzSW1hZ2UoJy5oaWRkZW4ucG5nJykpOyAgLy8gdHJ1ZVx1RkYwOFx1OTY5MFx1ODVDRlx1NjU4N1x1NEVGNlx1RkYwOVxyXG4vLyAgIGNvbnNvbGUubG9nKGlzSW1hZ2UoJ2ljb24uSlBFRycpKTsgICAgLy8gdHJ1ZVx1RkYwOFx1NTkyN1x1NUMwRlx1NTE5OVx1NEUwRFx1NjU0Rlx1NjExRlx1RkYwOVxyXG4vLyAgIGNvbnNvbGUubG9nKGlzSW1hZ2UoJ3ZpZGVvLm1wNCcpKTsgICAgLy8gZmFsc2VcdUZGMDhcdTg5QzZcdTk4OTFcdUZGMDlcclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQU1BLElBQU0sbUJBQW1CLG9CQUFJLElBQUk7QUFBQSxFQUMvQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFDTSxTQUFTLFFBQVEsVUFBVTtBQUVoQyxRQUFNLFdBQVcsU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUMzRCxNQUFJLENBQUMsU0FBVSxRQUFPO0FBR3RCLFFBQU0sTUFBTSxTQUFTLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRyxZQUFZO0FBQ25ELE1BQUksQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFHLFFBQU87QUFHbkMsU0FBTyxpQkFBaUIsSUFBSSxHQUFHO0FBQ2pDOyIsCiAgIm5hbWVzIjogW10KfQo=
diff --git a/mock/utils/_mockMoment.bundled_1744248880889_qf9hpn2ffp.mjs b/mock/utils/_mockMoment.bundled_1744248880889_qf9hpn2ffp.mjs
new file mode 100644
index 0000000..734182e
--- /dev/null
+++ b/mock/utils/_mockMoment.bundled_1744248880889_qf9hpn2ffp.mjs
@@ -0,0 +1,20 @@
+// mock/utils/mockMoment.ts
+function generateRandomDateTimeByYear(year) {
+ const month = Math.floor(Math.random() * 12) + 1;
+ const day = Math.floor(Math.random() * 31) + 1;
+ const hour = Math.floor(Math.random() * 24);
+ const minute = Math.floor(Math.random() * 60);
+ const second = Math.floor(Math.random() * 60);
+ return `${year}-${month < 10 ? "0" : ""}${month}-${day < 10 ? "0" : ""}${day} ${hour < 10 ? "0" : ""}${hour}:${minute < 10 ? "0" : ""}${minute}:${second < 10 ? "0" : ""}${second}`;
+}
+function generateRandomMoment(date = /* @__PURE__ */ new Date(), type = "HH:mm:ss") {
+ const hour = Math.floor(Math.random() * 24);
+ const minute = Math.floor(Math.random() * 60);
+ const second = Math.floor(Math.random() * 60);
+ return `${hour < 10 ? "0" : ""}${hour}:${minute < 10 ? "0" : ""}${minute}:${second < 10 ? "0" : ""}${second}`;
+}
+export {
+ generateRandomDateTimeByYear,
+ generateRandomMoment
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibW9jay91dGlscy9tb2NrTW9tZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX2luamVjdGVkX2ZpbGVuYW1lX18gPSBcIkU6XFxcXHlheGluX3dlYlxcXFw1Ry1Mb2FkaW5nLUJheS1XZWJcXFxcbW9ja1xcXFx1dGlsc1xcXFxtb2NrTW9tZW50LnRzXCI7Y29uc3QgX19pbmplY3RlZF9kaXJuYW1lX18gPSBcIkU6XFxcXHlheGluX3dlYlxcXFw1Ry1Mb2FkaW5nLUJheS1XZWJcXFxcbW9ja1xcXFx1dGlsc1wiO2NvbnN0IF9faW5qZWN0ZWRfaW1wb3J0X21ldGFfdXJsX18gPSBcImZpbGU6Ly8vRToveWF4aW5fd2ViLzVHLUxvYWRpbmctQmF5LVdlYi9tb2NrL3V0aWxzL21vY2tNb21lbnQudHNcIjtleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21EYXRlVGltZUJ5WWVhcih5ZWFyKSB7XHJcbiAgLy8gXHU3NTFGXHU2MjEwXHU5NjhGXHU2NzNBXHU2NzA4XHU0RUZEXHVGRjA4MS0xMlx1RkYwOVxyXG4gIGNvbnN0IG1vbnRoID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTIpICsgMTtcclxuXHJcbiAgLy8gXHU3NTFGXHU2MjEwXHU5NjhGXHU2NzNBXHU2NUU1XHU2NzFGXHVGRjA4MS0zMVx1RkYwOVxyXG4gIGNvbnN0IGRheSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMxKSArIDE7XHJcblxyXG4gIC8vIFx1NzUxRlx1NjIxMFx1OTY4Rlx1NjczQVx1NUMwRlx1NjVGNlx1RkYwODAtMjNcdUZGMDlcclxuICBjb25zdCBob3VyID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjQpO1xyXG5cclxuICAvLyBcdTc1MUZcdTYyMTBcdTk2OEZcdTY3M0FcdTUyMDZcdTk0OUZcdUZGMDgwLTU5XHVGRjA5XHJcbiAgY29uc3QgbWludXRlID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNjApO1xyXG5cclxuICAvLyBcdTc1MUZcdTYyMTBcdTk2OEZcdTY3M0FcdTc5RDJcdTk0OUZcdUZGMDgwLTU5XHVGRjA5XHJcbiAgY29uc3Qgc2Vjb25kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNjApO1xyXG5cclxuICAvLyBcdThGRDRcdTU2REVcdTk2OEZcdTY3M0FcdTY1RTVcdTY3MUZcdTU0OENcdTY1RjZcdTk1RjRcdTc2ODRcdTVCNTdcdTdCMjZcdTRFMzJcclxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aCA8IDEwID8gXCIwXCIgOiBcIlwifSR7bW9udGh9LSR7XHJcbiAgICBkYXkgPCAxMCA/IFwiMFwiIDogXCJcIlxyXG4gIH0ke2RheX0gJHtob3VyIDwgMTAgPyBcIjBcIiA6IFwiXCJ9JHtob3VyfToke21pbnV0ZSA8IDEwID8gXCIwXCIgOiBcIlwifSR7bWludXRlfToke1xyXG4gICAgc2Vjb25kIDwgMTAgPyBcIjBcIiA6IFwiXCJcclxuICB9JHtzZWNvbmR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTW9tZW50KGRhdGUgPSBuZXcgRGF0ZSgpLCB0eXBlID0gXCJISDptbTpzc1wiKSB7XHJcbiAgLy8gXHU3NTFGXHU2MjEwXHU5NjhGXHU2NzNBXHU1QzBGXHU2NUY2XHVGRjA4MC0yM1x1RkYwOVxyXG4gIGNvbnN0IGhvdXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNCk7XHJcblxyXG4gIC8vIFx1NzUxRlx1NjIxMFx1OTY4Rlx1NjczQVx1NTIwNlx1OTQ5Rlx1RkYwODAtNTlcdUZGMDlcclxuICBjb25zdCBtaW51dGUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA2MCk7XHJcblxyXG4gIC8vIFx1NzUxRlx1NjIxMFx1OTY4Rlx1NjczQVx1NzlEMlx1OTQ5Rlx1RkYwODAtNTlcdUZGMDlcclxuICBjb25zdCBzZWNvbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA2MCk7XHJcbiAgLy8gXHU4RkQ0XHU1NkRFXHU5NjhGXHU2NzNBXHU2NUU1XHU2NzFGXHU1NDhDXHU2NUY2XHU5NUY0XHU3Njg0XHU1QjU3XHU3QjI2XHU0RTMyXHJcbiAgcmV0dXJuIGAke2hvdXIgPCAxMCA/IFwiMFwiIDogXCJcIn0ke2hvdXJ9OiR7bWludXRlIDwgMTAgPyBcIjBcIiA6IFwiXCJ9JHttaW51dGV9OiR7XHJcbiAgICBzZWNvbmQgPCAxMCA/IFwiMFwiIDogXCJcIlxyXG4gIH0ke3NlY29uZH1gO1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBMlIsU0FBUyw2QkFBNkIsTUFBTTtBQUVyVSxRQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUcvQyxRQUFNLE1BQU0sS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUc3QyxRQUFNLE9BQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUU7QUFHMUMsUUFBTSxTQUFTLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxFQUFFO0FBRzVDLFFBQU0sU0FBUyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksRUFBRTtBQUc1QyxTQUFPLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsR0FBRyxLQUFLLElBQzdDLE1BQU0sS0FBSyxNQUFNLEVBQ25CLEdBQUcsR0FBRyxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFDdEUsU0FBUyxLQUFLLE1BQU0sRUFDdEIsR0FBRyxNQUFNO0FBQ1g7QUFFTyxTQUFTLHFCQUFxQixPQUFPLG9CQUFJLEtBQUssR0FBRyxPQUFPLFlBQVk7QUFFekUsUUFBTSxPQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxFQUFFO0FBRzFDLFFBQU0sU0FBUyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksRUFBRTtBQUc1QyxRQUFNLFNBQVMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUU7QUFFNUMsU0FBTyxHQUFHLE9BQU8sS0FBSyxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFDdEUsU0FBUyxLQUFLLE1BQU0sRUFDdEIsR0FBRyxNQUFNO0FBQ1g7IiwKICAibmFtZXMiOiBbXQp9Cg==
diff --git a/package-lock.json b/package-lock.json
index ad5064d..37e52d2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,10 +8,15 @@
"name": "data-dashboard",
"version": "0.0.0",
"dependencies": {
+ "@types/three": "^0.175.0",
+ "axios": "^1.8.3",
"echarts": "^5.6.0",
+ "lodash": "^4.17.21",
+ "moment": "^2.30.1",
"postcss-scss": "^4.0.9",
"sass": "^1.85.1",
"swiper": "^11.2.5",
+ "three": "^0.175.0",
"unplugin-auto-import": "^19.1.1",
"video.js": "^8.22.0",
"vue": "^3.5.13"
@@ -1794,6 +1799,11 @@
"integrity": "sha512-Z8U/6E2BWSdDkt3IWPiphoV+8V6aNzRmu2SriSbuhm6i3QIcY3TdUJzUP5NX8M8MZuIl+v4/77Rer8u4YSrSsg==",
"dev": true
},
+ "node_modules/@tweenjs/tween.js": {
+ "version": "23.1.3",
+ "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.3.tgz",
+ "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA=="
+ },
"node_modules/@types/echarts": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/@types/echarts/-/echarts-5.0.0.tgz",
@@ -1824,12 +1834,35 @@
"@types/lodash": "*"
}
},
+ "node_modules/@types/stats.js": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmmirror.com/@types/stats.js/-/stats.js-0.17.3.tgz",
+ "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ=="
+ },
+ "node_modules/@types/three": {
+ "version": "0.175.0",
+ "resolved": "https://registry.npmmirror.com/@types/three/-/three-0.175.0.tgz",
+ "integrity": "sha512-ldMSBgtZOZ3g9kJ3kOZSEtZIEITmJOzu8eKVpkhf036GuNkM4mt0NXecrjCn5tMm1OblOF7dZehlaDypBfNokw==",
+ "dependencies": {
+ "@tweenjs/tween.js": "~23.1.3",
+ "@types/stats.js": "*",
+ "@types/webxr": "*",
+ "@webgpu/types": "*",
+ "fflate": "~0.8.2",
+ "meshoptimizer": "~0.18.1"
+ }
+ },
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
"devOptional": true
},
+ "node_modules/@types/webxr": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmmirror.com/@types/webxr/-/webxr-0.5.21.tgz",
+ "integrity": "sha512-geZIAtLzjGmgY2JUi6VxXdCrTb99A7yP49lxLr2Nm/uIK0PkkxcEi4OGhoGDO4pxCf3JwGz2GiJL2Ej4K2bKaA=="
+ },
"node_modules/@videojs/http-streaming": {
"version": "3.17.0",
"resolved": "https://registry.npmmirror.com/@videojs/http-streaming/-/http-streaming-3.17.0.tgz",
@@ -2246,6 +2279,11 @@
}
}
},
+ "node_modules/@webgpu/types": {
+ "version": "0.1.60",
+ "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.60.tgz",
+ "integrity": "sha512-8B/tdfRFKdrnejqmvq95ogp8tf52oZ51p3f4QD5m5Paey/qlX4Rhhy5Y8tgFMi7Ms70HzcMMw3EQjH/jdhTwlA=="
+ },
"node_modules/@xmldom/xmldom": {
"version": "0.8.10",
"resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
@@ -2337,6 +2375,11 @@
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
"dev": true
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
"node_modules/autoprefixer": {
"version": "10.4.20",
"resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz",
@@ -2374,6 +2417,16 @@
"postcss": "^8.1.0"
}
},
+ "node_modules/axios": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.4.tgz",
+ "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -2469,6 +2522,18 @@
"esbuild": ">=0.17"
}
},
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -2540,6 +2605,17 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "13.1.0",
"resolved": "https://registry.npmmirror.com/commander/-/commander-13.1.0.tgz",
@@ -2683,6 +2759,14 @@
}
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",
@@ -2712,6 +2796,19 @@
"resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
},
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2804,6 +2901,47 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/esbuild": {
"version": "0.25.0",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.0.tgz",
@@ -2905,6 +3043,11 @@
"reusify": "^1.0.4"
}
},
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
@@ -2950,6 +3093,25 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
"node_modules/foreground-child": {
"version": "3.3.1",
"resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz",
@@ -2966,6 +3128,20 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/form-data": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
@@ -2997,7 +3173,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3011,6 +3186,41 @@
"node": ">=6.9.0"
}
},
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz",
@@ -3061,17 +3271,52 @@
"node": ">=4"
}
},
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -3524,8 +3769,7 @@
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash-es": {
"version": "4.17.21",
@@ -3568,6 +3812,14 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/memoize-one": {
"version": "6.0.0",
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
@@ -3583,6 +3835,11 @@
"node": ">= 8"
}
},
+ "node_modules/meshoptimizer": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmmirror.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
+ "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw=="
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
@@ -3596,6 +3853,25 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
@@ -3681,6 +3957,14 @@
"random": "bin/random"
}
},
+ "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==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/mpd-parser": {
"version": "1.3.1",
"resolved": "https://registry.npmmirror.com/mpd-parser/-/mpd-parser-1.3.1.tgz",
@@ -4138,6 +4422,11 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/quansync": {
"version": "0.2.8",
"resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.8.tgz",
@@ -4673,6 +4962,11 @@
"node": ">=0.8"
}
},
+ "node_modules/three": {
+ "version": "0.175.0",
+ "resolved": "https://registry.npmmirror.com/three/-/three-0.175.0.tgz",
+ "integrity": "sha512-nNE3pnTHxXN/Phw768u0Grr7W4+rumGg/H6PgeseNJojkJtmeHJfZWi41Gp2mpXl1pg1pf1zjwR4McM1jTqkpg=="
+ },
"node_modules/tinyglobby": {
"version": "0.2.12",
"resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.12.tgz",
diff --git a/package.json b/package.json
index 32dde1c..b8658cc 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"preview:prod": "vite preview --port 6060 --mode production"
},
"dependencies": {
+ "@types/three": "^0.175.0",
"axios": "^1.8.3",
"echarts": "^5.6.0",
"lodash": "^4.17.21",
@@ -20,6 +21,7 @@
"postcss-scss": "^4.0.9",
"sass": "^1.85.1",
"swiper": "^11.2.5",
+ "three": "^0.175.0",
"unplugin-auto-import": "^19.1.1",
"video.js": "^8.22.0",
"vue": "^3.5.13"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6404fb0..c877b02 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -29,6 +29,9 @@ importers:
swiper:
specifier: ^11.2.5
version: 11.2.5
+ three:
+ specifier: ^0.175.0
+ version: 0.175.0
unplugin-auto-import:
specifier: ^19.1.1
version: 19.1.1(@vueuse/core@9.13.0(vue@3.5.13(typescript@5.7.3)))
@@ -1772,6 +1775,9 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ three@0.175.0:
+ resolution: {integrity: sha512-nNE3pnTHxXN/Phw768u0Grr7W4+rumGg/H6PgeseNJojkJtmeHJfZWi41Gp2mpXl1pg1pf1zjwR4McM1jTqkpg==}
+
tinyglobby@0.2.12:
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
@@ -3541,6 +3547,8 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ three@0.175.0: {}
+
tinyglobby@0.2.12:
dependencies:
fdir: 6.4.3(picomatch@4.0.2)
diff --git a/src/assets/common/amplify_btn.png b/src/assets/common/amplify_btn.png
new file mode 100644
index 0000000..624216c
Binary files /dev/null and b/src/assets/common/amplify_btn.png differ
diff --git a/src/assets/common/pointModalBg.png b/src/assets/common/pointModalBg.png
new file mode 100644
index 0000000..d67056c
Binary files /dev/null and b/src/assets/common/pointModalBg.png differ
diff --git a/src/assets/common/reduce_btn.png b/src/assets/common/reduce_btn.png
new file mode 100644
index 0000000..7f72d54
Binary files /dev/null and b/src/assets/common/reduce_btn.png differ
diff --git a/src/assets/common/reset_btn.png b/src/assets/common/reset_btn.png
new file mode 100644
index 0000000..dbb3112
Binary files /dev/null and b/src/assets/common/reset_btn.png differ
diff --git a/src/views/dashboard/AppearanceMonitor.scss b/src/views/dashboard/AppearanceMonitor.scss
index d2c4203..e870a5f 100644
--- a/src/views/dashboard/AppearanceMonitor.scss
+++ b/src/views/dashboard/AppearanceMonitor.scss
@@ -9,7 +9,7 @@
// align-items: center;
.appearance-monitor-right {
box-sizing: border-box;
- width: 44%;
+ width:970px;
// display: flex;
background-image: url("@/assets/common/carbtmBg.png");
background-size: 100% 100%;
@@ -35,7 +35,7 @@
.appearance-monitor-left {
- width: 55%;
+ width: 48%;
background-image: url("@/assets/common/boderBg.png");
background-size: 100% 100%;
background-position: center;
@@ -65,7 +65,7 @@
.monitor-left-bottom {
width: 100%;
padding: 0 16px;
- margin-bottom: 16px;
+ margin-bottom: 29px;
overflow: visible;
.swiper {
width: 100%;
@@ -109,7 +109,8 @@
}
}
.empty-bg {
- width: 100%;
+ box-sizing: border-box;
+ width: 892px;
height: 815px;
background-image: url("@/assets/common/emptyBg.png");
background-size: 156px 102px;
diff --git a/src/views/dashboard/AppearanceMonitor.vue b/src/views/dashboard/AppearanceMonitor.vue
index c3b5e17..752493d 100644
--- a/src/views/dashboard/AppearanceMonitor.vue
+++ b/src/views/dashboard/AppearanceMonitor.vue
@@ -70,6 +70,9 @@
+
+ {{row}}
+
@@ -77,6 +80,7 @@
+
+
+
\ No newline at end of file
diff --git a/src/views/dashboard/components/densityWorker.js b/src/views/dashboard/components/densityWorker.js
new file mode 100644
index 0000000..a8c792c
--- /dev/null
+++ b/src/views/dashboard/components/densityWorker.js
@@ -0,0 +1,21 @@
+self.onmessage = function (e) {
+ console.log('Received message:', e.data);
+ const { positions, gridSize, grid } = e.data;
+ const numPoints = positions.length / 3;
+ console.log('Number of points:', numPoints);
+
+ // 计算每个点的密度
+ const densities = [];
+ for (let i = 0; i < numPoints; i++) {
+ const x = positions[i * 3];
+ const y = positions[i * 3 + 1];
+ const z = positions[i * 3 + 2];
+ const gridX = Math.floor(x / gridSize);
+ const gridY = Math.floor(y / gridSize);
+ const gridZ = Math.floor(z / gridSize);
+ const key = `${gridX},${gridY},${gridZ}`;
+ densities.push(grid[key] || 0);
+ }
+
+ self.postMessage(densities);
+};
\ No newline at end of file