From f3228fca742bd98004c21c2434a802f1d5e242bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=88=E5=85=86=E5=A2=9E?= <你的邮箱@example.com> Date: Tue, 28 Jul 2026 18:28:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=99=BA=E8=83=BD=E9=85=8D?= =?UTF-8?q?=E5=9B=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/.env.development | 6 +- ...视化配置平台(MapStudio)技术实现说明文档.md | 343 + frontend/package.json | 2 + frontend/pnpm-lock.yaml | 47 + .../src/assets/images/map-denggaoxian.png | Bin 0 -> 46772 bytes frontend/src/layout/components/AppMain.vue | 7 +- frontend/src/modules/MapStudio/api/index.ts | 210 + .../MapStudio/components/HistoryModal.vue | 251 + .../components/ImportAnchorModal.vue | 456 + .../MapStudio/components/LeftToolbar.vue | 416 + .../modules/MapStudio/components/Legend.vue | 291 + .../MapStudio/components/MapContainer.vue | 13 + .../MapStudio/components/MapImageOverlay.vue | 224 + .../MapStudio/components/RightDrawer.vue | 3259 ++ .../MapStudio/components/SaveModal.vue | 363 + .../MapStudio/components/TableOverlay.vue | 299 + .../MapStudio/components/district.json | 26913 ++++++++++++++++ .../MapStudio/composables/useAnchorLayers.ts | 1420 + .../MapStudio/composables/useDrawTools.ts | 1097 + .../MapStudio/composables/useMapInit.ts | 250 + .../MapStudio/composables/useOverlayLayers.ts | 238 + .../MapStudio/composables/useUndoRedo.ts | 445 + frontend/src/modules/MapStudio/index.vue | 268 + .../MapStudio/stores/mapStudioStore.ts | 263 + .../src/modules/MapStudio/styles/index.scss | 191 + frontend/src/modules/MapStudio/types/index.ts | 359 + .../views/zhiNengFenXi/zhiNengPeiTu/index.vue | 7 + 27 files changed, 37634 insertions(+), 4 deletions(-) create mode 100644 frontend/docs/地图可视化配置平台(MapStudio)技术实现说明文档.md create mode 100644 frontend/src/assets/images/map-denggaoxian.png create mode 100644 frontend/src/modules/MapStudio/api/index.ts create mode 100644 frontend/src/modules/MapStudio/components/HistoryModal.vue create mode 100644 frontend/src/modules/MapStudio/components/ImportAnchorModal.vue create mode 100644 frontend/src/modules/MapStudio/components/LeftToolbar.vue create mode 100644 frontend/src/modules/MapStudio/components/Legend.vue create mode 100644 frontend/src/modules/MapStudio/components/MapContainer.vue create mode 100644 frontend/src/modules/MapStudio/components/MapImageOverlay.vue create mode 100644 frontend/src/modules/MapStudio/components/RightDrawer.vue create mode 100644 frontend/src/modules/MapStudio/components/SaveModal.vue create mode 100644 frontend/src/modules/MapStudio/components/TableOverlay.vue create mode 100644 frontend/src/modules/MapStudio/components/district.json create mode 100644 frontend/src/modules/MapStudio/composables/useAnchorLayers.ts create mode 100644 frontend/src/modules/MapStudio/composables/useDrawTools.ts create mode 100644 frontend/src/modules/MapStudio/composables/useMapInit.ts create mode 100644 frontend/src/modules/MapStudio/composables/useOverlayLayers.ts create mode 100644 frontend/src/modules/MapStudio/composables/useUndoRedo.ts create mode 100644 frontend/src/modules/MapStudio/index.vue create mode 100644 frontend/src/modules/MapStudio/stores/mapStudioStore.ts create mode 100644 frontend/src/modules/MapStudio/styles/index.scss create mode 100644 frontend/src/modules/MapStudio/types/index.ts create mode 100644 frontend/src/views/zhiNengFenXi/zhiNengPeiTu/index.vue diff --git a/frontend/.env.development b/frontend/.env.development index d29767aa..51fb15b8 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -7,13 +7,13 @@ VITE_APP_TITLE = '水电水利建设项目全过程环境管理信息平台' VITE_APP_PORT = 3000 VITE_APP_BASE_API = '/dev-api' # 本地环境 -# VITE_APP_BASE_URL = 'http://localhost:8093' +VITE_APP_BASE_URL = 'http://localhost:8093' # 测试环境 # VITE_APP_BASE_URL = 'http://172.16.21.142:8093' # 汤伟 -VITE_APP_BASE_URL = 'http://10.84.111.235:8093' +# VITE_APP_BASE_URL = 'http://10.84.111.235:8093' # 李林 -# VITE_APP_BASE_URL = 'http://10.84.111.25:8093' +VITE_APP_BASE_URL = 'http://10.84.111.25:8093' ## 开发环境 附件服务地址 VITE_APP_ATTACHMENT_URL = 'https://211.99.26.225:12125' diff --git a/frontend/docs/地图可视化配置平台(MapStudio)技术实现说明文档.md b/frontend/docs/地图可视化配置平台(MapStudio)技术实现说明文档.md new file mode 100644 index 00000000..474df459 --- /dev/null +++ b/frontend/docs/地图可视化配置平台(MapStudio)技术实现说明文档.md @@ -0,0 +1,343 @@ +# 地图可视化配置平台(MapStudio)技术实现说明文档 + +## 1. 项目概述 + +本项目是一个基于 **Vue3** + **Ant Design Vue 4.0** + **OpenLayers (ol ^10.8.0)** 的独立地图配图功能模块。 **核心定位**:用于流域水电场景的地图配图工具,支持多类型底图切换、基础图层叠加、业务锚点管理(含样式编辑)。 **关键特性**:作为一个高内聚、低耦合的独立模块,支持整体复制迁移至其他 Vue3 项目。 + +## 2. 技术栈与环境 + +- **框架**:Vue 3 (Composition API) +- **UI 组件库**:Ant Design Vue 4.0 (`a-drawer`, `a-tabs`, `a-popover`, `a-modal` 等) +- **地图引擎**:OpenLayers (`ol@^10.8.0`) +- **状态管理**:Vue `reactive` + `provide`/`inject` 模式(`useMapStudioState.ts`) +- **辅助库**:`html2canvas`(配图截图预览,待接入) +- **图标资源**:`/src/assets/legend/*.svg`(Vite glob 批量导入) + +## 3. 页面布局结构 + +整体采用 **“左侧固定工具栏 + 中央地图容器 + 右侧可收抽屉 + 左下悬浮图例”** 的布局方案。 + +| 区域 | 组件/实现 | 交互说明 | +| :--------------------- | :--------------------- | :------------------------------------------------------------------------------------------- | +| **工具栏** | `LeftToolbar.vue` | 垂直排列【放大】、【缩小】、【全屏】、【导入(占位)】、【保存配图】。独立于抽屉,抽屉收起时依然显示。目前按钮均为静态占位,无实际交互逻辑。 | +| **中央地图容器** | `index.vue` 内联 div | 承载 OL Map 实例,直接在 `index.vue` 中通过 `ref` 挂载地图,无独立 `MapContainer.vue` 组件。 | +| **右侧抽屉** | `RightDrawer.vue` | `a-drawer` 组件,支持收起/展开。内部嵌套 `a-tabs`,包含【基础底图】、【图例/标题管理】、【锚点样式】三个 Tab。 | +| **左下悬浮图例** | `Legend.vue` | 动态显示当前可见锚点分类的图标和标签,支持图例标题/子级样式配置,位置可通过配置调整(左上/左下/右上/右下)。 | + +## 4. 功能模块详细说明 + +### 4.1 底图切换 + +- **支持类型**:【影像图】、【矢量图】、【地形图】、【等高线图】。通过替换 `ol/layer/Tile` 的 `source` 实现。 + - 影像图:ArcGIS World Imagery + - 矢量图:内网 GeoServer WMTS(`qgc_qsj_arcgistiles_l13`) + - 地形图:天地图地形 `ter_w` + - 等高线图:Thunderforest Cycle +- **边界图层**:可通过 `a-checkbox` 控制显示/隐藏内网 GeoServer 提供的流域边界线。切换到矢量图时强制隐藏边界。 +- **空间范围限定**:未实现(后续可扩展)。 + +### 4.2 叠加基础图层(显隐控制) + +通过 `useOverlayLayers.ts` 管理,右侧抽屉"基础底图"Tab 中的 Checkbox 勾选控制图层显隐(取消勾选时仅 `setVisible(false)`,不删除图层)。 + +支持以下图层(部分为 WMTS/ArcGIS/GeoServer 服务): + +| 图层 | 类型 | 数据来源 | +| :----------- | :---------- | :------------------------------- | +| 行政标注 | TileLayer | 天地图矢量标注 `cia_w` | +| 区域服务 | ImageLayer | ArcGIS REST `ZH_QUYU` | +| 九段线 | ImageLayer | ArcGIS REST `九段线服务1` | +| 岛屿 | ImageLayer | GeoServer WMS `cite:dy` | +| 流域注记 | ImageLayer | ArcGIS REST `zh_LiuYu_annotation` | +| 流域线 | ImageLayer | ArcGIS REST `zh_LiuYu_line` | +| 轮渡 | ImageLayer | ArcGIS REST `jiaotong_ferry` | +| 铁路 | ImageLayer | ArcGIS REST `jiaotong_railway` | +| 地铁 | ImageLayer | ArcGIS REST `jiaotong_metro` | +| 行政区面状 | ImageLayer | ArcGIS REST `zh_XingZhengQu_Polygon` | +| 行政区 | ImageLayer | ArcGIS REST `ZH_XINGZHEGNQU` | + +### 4.3 业务锚点系统 + +锚点类型(4 类):电站、过鱼设施、鱼类增殖站、低温水减缓设施。页面初始化时即并行加载所有分类的接口数据,勾选子类型后渲染到地图上,同时图例自动显示。 + +#### 4.3.1 数据模型 + +锚点核心接口定义在 `useMapStudioState.ts` 中: + +```typescript +interface AnchorCategory { + key: string; // 分类 key(powerStation / fishPassage / fishFarm / coldWater) + label: string; // 分类名称 + icon: string; // 分类图标 key + children: AnchorItem[]; +} + +interface AnchorItem { + key: string; // 子类型 key(如 large_eng_built) + label: string; // 子类型名称 + icon: string; // 子类型图标 key + checked: boolean; // 是否勾选 +} +``` + +每个锚点 Feature 的 properties 包含: + +- `_iconUrl` - 当前图标 URL +- `_label` - 显示文字 +- `_stnm` - 站点名称 +- `_lng`, `_lat` - 经纬度 +- `_categoryKey`, `_subTypeKey` - 分类/子类型标识 +- `_iconSource` - 图标来源(inherit / custom) +- `_customIconUrl` - 自定义图标 URL +- `_customTypeLabel` - 自定义类型名称(更换图标时可自定义) +- `_ov_*` - 样式覆盖字段(字体、字号、颜色、加粗、图标大小、描边、文字位置/边距、显示文字) + +#### 4.3.2 样式继承与优先级 + +- **全局样式**:存储在 `anchorGlobalStyle` ref 中,修改时全局锚点刷新。 +- **单个覆盖**:存储在 feature properties 的 `_ov_*` 字段中。`null` 表示继承全局。 +- **渲染合并**:在 `createStyleFunction()` 中执行:`getOv(feature, key, globalValue)` - 有覆盖用覆盖值,否则回退到全局。 +- **恢复默认**:将所有 `_ov_*` 置为 `null`。 + +#### 4.3.3 锚点交互 + +- **勾选显示**:右侧抽屉"基础底图"Tab 提供四类锚点的 Checkbox 组,勾选子类型后地图渲染对应锚点,图例自动更新。 +- **选中与编辑**: + - **点击地图锚点**:触发选中事件,右侧抽屉自动切换到"锚点样式"Tab 并展开该锚点的详情编辑区域。 + - **右侧面板编辑**:可编辑当前选中锚点的: + - **经纬度**(支持直接修改并更新地图位置) + - **显示文字**(修改锚点显示的文本) + - **更换图标**(上传自定义图标,支持两个选项) + - **样式覆盖**(每个样式字段独立覆盖全局,支持一键恢复继承) + - **无气泡 popover**:目前不弹出地图气泡。 + +- **更换图标**: + - **选项 A - 应用于此锚点**:仅替换当前选中锚点的图标。可选择"添加到图例",输入父级名称和当前名称,若图例中不存在则自动添加。 + - **选项 B - 应用于所有同类型**:替换当前分类下所有锚点的图标,同时图例中该分类的图标也会更新。 + +- **碰撞检测**:不做碰撞检测与抽稀(`declutterMode: 'none'`)。 + +#### 4.3.4 锚点导入(暂为占位) + +左侧工具栏【导入】按钮为静态占位,无实际交互逻辑。 + +#### 4.3.5 图标资源映射 + +图标 SVG 文件存放于 `/src/assets/legend/`,通过 `ICON_SVG_MAP`(`useMapStudioState.ts`)建立 icon key 到文件名(不含扩展名)的映射,Vite glob 批量导入获取 URL。 + +### 4.4 图例/标题管理 + +右侧抽屉"图例/标题管理"Tab: + +#### 4.4.1 图例配置 + +- **显示控制**:`a-checkbox` 控制图例和标题的显隐 +- **图例属性**:位置(左上/左下/右上/右下)、宽度、高度、左边距/右边距、上边距/下边距 +- **图例标题**:对齐方式(左/中/右)、字体、字号、颜色、加粗 +- **子级样式**:字体、字号、颜色、加粗、图标大小 + +#### 4.4.2 标题配置 + +- 标题内容、X/Y 位置、宽度、高度(通过 `BasicControlOptions[1].checked` 控制显隐) + +### 4.5 锚点全局样式管理 + +右侧抽屉"锚点样式"Tab,在无选中锚点时仅显示"全局样式"配置区: + +- 字体、字号、颜色、加粗 +- 图标大小 +- 文字描边宽度、描边颜色 +- 文字位置(上/下/左/右)、水平边距、垂直边距 +- 是否显示文字标注 +- **恢复默认**:一键重置为 `DEFAULT_ANCHOR_STYLE` + +有选中锚点时,顶部显示"当前选中"区域,包含: + +- 分类标签(含自定义类型名称) +- 站点名称 +- 经纬度编辑 +- 显示文字编辑 +- 当前图标预览 + 更换图标按钮 +- **样式覆盖**区:每个样式字段独立可调,带"恢复为继承"按钮(×) +- **恢复默认**:一键清空所有覆盖 + +### 4.6 自定义图形绘制(未实现) + +预留功能,尚未开发。 + +### 4.7 自定义图片叠加(未实现) + +预留功能,尚未开发。 + +### 4.8 配图方案管理(未实现) + +预留功能,尚未开发。 + +## 5. 目录结构与实际代码 + +``` +src/modules/MapStudio/ +├── index.vue # 主入口组件 +├── api/ +│ └── index.ts # 4 类锚点 API 接口 +├── components/ +│ ├── LeftToolbar.vue # 左侧工具栏 +│ ├── RightDrawer.vue # 右侧抽屉 +│ └── Legend.vue # 左下悬浮图例 +├── composables/ +│ ├── useMapStudioState.ts # 共享状态创建/注入 +│ ├── useMapInit.ts # 地图初始化与底图切换 +│ ├── useOverlayLayers.ts # 基础图层叠加管理 +│ └── useAnchorLayers.ts # 锚点图层管理 +└── styles/ + └── index.scss # 模块样式 +``` + +## 6. 核心数据流 + +- **状态管理**:`useMapStudioState.ts` 通过 `createMapStudioState()` 创建所有响应式状态,`provideMapStudioState()` 注入,子组件通过 `injectMapStudioState()` 获取。 +- **锚点图层**:`useAnchorLayers.ts` 管理 4 类锚点的 API 数据加载、OL 图层创建/显隐、样式函数、地图点击选中、样式覆盖同步。 +- **基础图层**:`useOverlayLayers.ts` 管理基础底图的叠加,通过 `LAYER_MAP` 定义各图层的创建工厂,响应式同步勾选状态。 +- **API 层**:`api/index.ts` 定义 4 类锚点的请求参数和接口函数,使用项目通用 `request` 工具(基于 axios)。 + +## 7. 开发注意事项与难点规避 + +- **性能优化**:锚点数量较多(>500)时,务必开启 VectorSource 的 `renderMode: 'vector'`,并批量添加 Features(`source.addFeatures()`)。 +- **样式刷新**:覆盖字段写入 feature 后,必须重新 `setStyle(styleFn)` 触发重绘。 +- **交互冲突**:左侧工具栏按钮需阻止点击事件冒泡,避免触发地图的 `singleclick` 事件。 +- **底图切换**:切换时将新底图 `insertAt(0)` 插入最底层,避免覆盖上层叠加图层。 +- **边界图层**:切换到底图"矢量图"时强制移除边界图层(因矢量图 WMTS 已包含边界信息)。 +- **图标覆盖**:选项 B 替换图标时,通过 `categoryIconOverrides` 存储覆盖 URL,图例组件会读取该字段更新显示。 + +## 8. 未实现功能列表与推荐优先级 + +### 功能完成度概览 + +| 功能模块 | 状态 | 说明 | +| :--------------------- | :----------- | :------------------------------------------- | +| 底图切换 | ✅ 已完成 | 4 种底图,边界图层显隐控制 | +| 基础图层叠加 | ✅ 已完成 | 11 个子图层,分组 Checkbox 勾选控制 | +| 锚点数据加载与展示 | ✅ 已完成 | 4 类接口初始化加载,勾选渲染,图例自动更新 | +| 锚点全局样式控制 | ✅ 已完成 | 字体/字号/颜色/加粗/图标大小/描边/位置/边距 | +| 锚点选中与编辑 | ✅ 已完成 | 点击选中,右侧面板编辑经纬度/文字/样式 | +| 更换图标(单锚点) | ✅ 已完成 | 上传+添加到图例,自定义类型名称 | +| 更换图标(同分类) | ✅ 已完成 | 替换全部分类图标,更新图例 | +| 图例/标题配置 | ✅ 已完成 | 位置/尺寸/对齐/字体/颜色/加粗 | +| 配图方案管理 | ❌ 未实现 | 保存/加载/历史配图 | +| 工具栏按钮功能 | ❌ 未实现 | 放大/缩小/全屏/导入/保存按钮均为静态占位 | +| 自定义图形绘制 | ❌ 未实现 | 线条/箭头/矩形/圆圈 | +| 自定义图片叠加 | ❌ 未实现 | PNG 上传叠加,调整位置/大小 | +| 空间范围限定 | ❌ 未实现 | 选择区域并裁切地图 | +| 锚点拖拽 | ❌ 未实现 | Translate 交互拖动锚点位置 | +| 选中锚点 popover 气泡 | ❌ 未实现 | 点击锚点在地图弹出小气泡 | +| 锚点导入功能 | ❌ 未实现 | Excel/CSV 批量导入 | + +### 推荐开发优先级 + +**P0 - 核心功能(建议优先完成)** + +1. **配图方案管理** - 这是配图工具的核心闭环功能。左侧【保存】按钮应弹出命名输入框,保存当前所有状态(底图类型、图层显隐、锚点数据与样式覆盖、图例配置、标题配置)为JSON配图方案,并支持历史记录查看、加载、删除。 + - 涉及文件:`LeftToolbar.vue`(接入保存/导入按钮逻辑)、`RightDrawer.vue`(新增加载方案界面)、新建 `useSerializer.ts`(序列化/反序列化) + - 依赖:需要后端存储接口或本地 localStorage + +2. **工具栏按钮功能** - 放大/缩小/全屏/导入/保存按钮目前均为静态。放大缩小应绑定 `map.getView().zoom`,全屏应调用 `FullScreen` API,导入按钮应弹出功能弹框。 + - 涉及文件:`LeftToolbar.vue`(接入 mapInstance) + +**P1 - 重要功能(配图方案之后)** + +3. **自定义图形绘制** - 利用 `ol/interaction/Draw` 实现线条、矩形、圆圈,以及箭头(起点终点+终点三角头)。图形存入独立 `VectorSource`,支持选中删除。保存配图时需包含图形坐标数据。 + - 涉及文件:新建 `useDrawTools.ts`、`RightDrawer.vue`(新增绘制Tab或面板) + +4. **自定义图片叠加** - 上传 PNG 图片以绝对定位 div 覆盖在地图上,支持鼠标拖拽移动位置。保存配图时记录 CSS 位置数据。 + - 涉及文件:新建 `CustomImageOverlay.vue`、`RightDrawer.vue`(新增图片管理面板) + +**P2 - 增强功能(基础功能稳定后)** + +5. **空间范围限定** - 下拉选择水电基地/流域/省份,地图 fit 至对应边界,并可调用 `clippingPolygons` 实现区域外变灰的裁切效果。 + - 涉及文件:`useMapInit.ts`(扩展)、`RightDrawer.vue`(新增下拉选择) + +6. **选中锚点气泡 popover** - 点击锚点时在地图弹出轻量 `a-popover` 气泡,显示站点名称和"删除"按钮。 + - 涉及文件:`useAnchorLayers.ts`(点击事件扩展) + +7. **锚点拖拽** - 启用 `ol/interaction/Translate` 允许拖动锚点改变地理位置,拖拽结束自动更新选中面板的经纬度。 + - 涉及文件:`useAnchorLayers.ts`(添加 Translate 交互) + +8. **锚点导入** - 左侧【导入】按钮弹出 a-modal 弹框,支持 Excel/CSV 批量导入经纬度数据。 + - 涉及文件:`LeftToolbar.vue`(接入导入弹框)、新建导入逻辑 composable + +**P3 - 工程优化(可逐步完善)** + +9. **迁移为 Pinia 状态管理** - 当前使用 `provide`/`inject`,迁移到 Pinia 可更好地支持 Vue Devtools 调试和模块隔离。 + - 涉及文件:新建 `store/mapStudioStore.ts`,调整 `useMapStudioState.ts` + +10. **目录结构调整** - 将类型定义迁移到 `types/index.ts`,新建 `MapContainer.vue` 独立组件,对外暴露 `index.ts`(app.use 安装)。 + +## 9. 与现有底层地图的集成方案(接入指南) + +### 9.1 核心原则(禁止叠放) + +在集成至已有地图项目时,**严禁**使用 `z-index` 将本模块地图叠放于底层地图之上。 + +**原因**: + +1. **事件冲突**:鼠标滚轮缩放、点击拖拽等事件会同时触发两层地图,导致画面闪烁、缩放倍数混乱。 +2. **性能浪费**:被遮盖的底层地图仍在持续进行瓦片请求和渲染,消耗 CPU/GPU 与网络资源。 + +**正确策略**:必须将底层地图**隐藏/销毁**后,再加载本模块地图。 + +### 9.2 推荐集成方案(二选一) + +#### 方案 A:隐藏底层容器(推荐,保留底层状态) + +适用于底层地图涉及复杂的业务交互状态(如选中的点位、高亮区域),退出模块后需无缝恢复。 + +- **进入模块时**:设置底层地图容器的 CSS 样式为 `display: none` 或 `visibility: hidden`。 +- **模块内部**:在底层地图容器同级位置,新建一个绝对定位的 `div` 作为本模块地图的挂载点,初始化 `ol.Map`。 +- **退出模块时**: + 1. 调用本模块地图实例的 `map.dispose()` 销毁地图。 + 2. 移除新建的挂载 `div` 元素。 + 3. 恢复底层地图容器的显示样式。 + +#### 方案 B:销毁底层地图(更彻底) + +适用于底层地图仅作展示、无复杂临时状态的场景。 + +- **进入模块时**:直接获取底层地图容器,销毁原有 `ol.Map` 实例(`targetElement.innerHTML = ''`),并复用该容器作为本模块地图的挂载点。 +- **退出模块时**:销毁本模块地图实例,根据业务需求决定是否重新初始化底层地图。 + +### 9.3 解耦约定(确保模块可迁移) + +由于本模块设计为**独立可迁移**,模块内部代码**严禁**直接操作父级项目的 DOM 元素或地图实例。 + +**正确的通信方式**:本模块 `MapStudio/index.vue` 通过暴露生命周期事件,由父级项目自行控制底层地图的显隐与销毁。 + +```vue + + + + +``` diff --git a/frontend/package.json b/frontend/package.json index 72fb6471..cb07e5e5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,6 +34,7 @@ "esri-leaflet": "^3.0.19", "exceljs": "^4.4.0", "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", "js-base64": "^3.7.5", "js-cookie": "^3.0.1", "jsencrypt": "^3.3.2", @@ -57,6 +58,7 @@ "vue-ant-modal-enhance": "^1.2.2", "vue-i18n": "^9.1.9", "vue-router": "^4.1.6", + "vue3-draggable-resizable": "^1.6.5", "vuedraggable": "^2.24.3", "wujie": "^1.0.24", "wujie-vue3": "^1.0.24", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 42ba5b75..3eddab55 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: file-saver: specifier: ^2.0.5 version: 2.0.5 + html2canvas: + specifier: ^1.4.1 + version: 1.4.1 js-base64: specifier: ^3.7.5 version: 3.7.8 @@ -149,6 +152,9 @@ importers: vue-router: specifier: ^4.1.6 version: 4.6.4(vue@3.5.33(typescript@6.0.3)) + vue3-draggable-resizable: + specifier: ^1.6.5 + version: 1.6.5 vuedraggable: specifier: ^2.24.3 version: 2.24.3 @@ -2720,6 +2726,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-arraybuffer@1.0.2: + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3016,6 +3026,9 @@ packages: css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + css-line-break@2.1.0: + resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} + css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -3772,6 +3785,10 @@ packages: html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + html2canvas@1.4.1: + resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} + engines: {node: '>=8.0.0'} + htmlparser2@3.10.1: resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} @@ -5462,6 +5479,9 @@ packages: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} + text-segmentation@1.0.3: + resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -5714,6 +5734,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utrie@1.0.2: + resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} + uuid@13.0.2: resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} hasBin: true @@ -5858,6 +5881,9 @@ packages: peerDependencies: vue: ^3.0.0 + vue3-draggable-resizable@1.6.5: + resolution: {integrity: sha512-31142E31fGNnq3HKqvmFLSsqIbhck7TyGuQWhUKrDw6DOcGAuRx4ddRjaxvT6fe7dgeKH53qAh+i0ZlWtPLl2g==} + vue@3.5.33: resolution: {integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==} peerDependencies: @@ -10304,6 +10330,8 @@ snapshots: balanced-match@1.0.2: {} + base64-arraybuffer@1.0.2: {} + base64-js@1.5.1: {} base@0.11.2: @@ -10654,6 +10682,10 @@ snapshots: dependencies: tiny-invariant: 1.3.3 + css-line-break@2.1.0: + dependencies: + utrie: 1.0.2 + css-select@4.3.0: dependencies: boolbase: 1.0.0 @@ -11558,6 +11590,11 @@ snapshots: html-void-elements@2.0.1: {} + html2canvas@1.4.1: + dependencies: + css-line-break: 2.1.0 + text-segmentation: 1.0.3 + htmlparser2@3.10.1: dependencies: domelementtype: 1.3.1 @@ -13279,6 +13316,10 @@ snapshots: text-extensions@1.9.0: {} + text-segmentation@1.0.3: + dependencies: + utrie: 1.0.2 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -13533,6 +13574,10 @@ snapshots: util-deprecate@1.0.2: {} + utrie@1.0.2: + dependencies: + base64-arraybuffer: 1.0.2 + uuid@13.0.2: {} uuid@8.3.2: {} @@ -13695,6 +13740,8 @@ snapshots: is-plain-object: 3.0.1 vue: 3.5.33(typescript@6.0.3) + vue3-draggable-resizable@1.6.5: {} + vue@3.5.33(typescript@6.0.3): dependencies: '@vue/compiler-dom': 3.5.33 diff --git a/frontend/src/assets/images/map-denggaoxian.png b/frontend/src/assets/images/map-denggaoxian.png new file mode 100644 index 0000000000000000000000000000000000000000..9f04743594d72b962962b33f634edc3ec17a6ceb GIT binary patch literal 46772 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 literal 0 HcmV?d00001 diff --git a/frontend/src/layout/components/AppMain.vue b/frontend/src/layout/components/AppMain.vue index ec8921f5..c0f0bb70 100644 --- a/frontend/src/layout/components/AppMain.vue +++ b/frontend/src/layout/components/AppMain.vue @@ -11,11 +11,16 @@ const modelStore = useModelStore(); const tagsViewStore = useTagsViewStore(); const router = useRoute(); const routeKey = computed(() => router.path + Math.random()); + +// 智能配图页面隐藏底层 GisView(避免地图叠放冲突) +const isZhiNengPeiTu = computed(() => { + return router.path === '/zhiNengFenXi/zhiNengPeiTu/index'; +});