|
@@ -6,13 +6,21 @@
|
|
<el-button :icon="Back" circle type="primary" @click="router.back()" />
|
|
<el-button :icon="Back" circle type="primary" @click="router.back()" />
|
|
</div>
|
|
</div>
|
|
<div class="nav_container">
|
|
<div class="nav_container">
|
|
- <div class="nav_item" :class="{ active: isCurrentTab(0) }" @click="handleTabs(0)">
|
|
|
|
|
|
+ <div
|
|
|
|
+ class="nav_item"
|
|
|
|
+ :class="{ active: isCurrentTab(0) }"
|
|
|
|
+ @click="handleTabs(0)"
|
|
|
|
+ >
|
|
<el-icon size="20">
|
|
<el-icon size="20">
|
|
<locationIcon />
|
|
<locationIcon />
|
|
</el-icon>
|
|
</el-icon>
|
|
<span>坐标</span>
|
|
<span>坐标</span>
|
|
</div>
|
|
</div>
|
|
- <div class="nav_item" :class="{ active: isCurrentTab(1) }" @click="handleTabs(1)">
|
|
|
|
|
|
+ <div
|
|
|
|
+ class="nav_item"
|
|
|
|
+ :class="{ active: isCurrentTab(1) }"
|
|
|
|
+ @click="handleTabs(1)"
|
|
|
|
+ >
|
|
<el-icon size="20">
|
|
<el-icon size="20">
|
|
<vectorIcon />
|
|
<vectorIcon />
|
|
</el-icon>
|
|
</el-icon>
|
|
@@ -23,22 +31,46 @@
|
|
</Teleport>
|
|
</Teleport>
|
|
<div id="map" class="map-container" ref="mapContainer" @click.stop>
|
|
<div id="map" class="map-container" ref="mapContainer" @click.stop>
|
|
<div class="map-component">
|
|
<div class="map-component">
|
|
- <el-select v-model="tileType" placeholder="选择底图" style="width: 120px" class="tile-type-select">
|
|
|
|
- <el-option v-for="item in tileOptions" :key="item" :label="item" :value="item" />
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="tileType"
|
|
|
|
+ placeholder="选择底图"
|
|
|
|
+ style="width: 120px"
|
|
|
|
+ class="tile-type-select"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in tileOptions"
|
|
|
|
+ :key="item"
|
|
|
|
+ :label="item"
|
|
|
|
+ :value="item"
|
|
|
|
+ />
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="board" ref="boardContainer"></div>
|
|
<div class="board" ref="boardContainer"></div>
|
|
</div>
|
|
</div>
|
|
<div class="right-control">
|
|
<div class="right-control">
|
|
- <MapRight v-if="isCurrentTab(0)" @fly-point="flyScenePoint" @fly-scene="flyScene" @goto-point="gotoPointPage" />
|
|
|
|
- <MapRightPoly @del="handlePolysDel" @edit="handlePolysEdit" :data="boardData" v-if="isCurrentTab(1)">
|
|
|
|
|
|
+ <MapRight
|
|
|
|
+ v-if="isCurrentTab(0)"
|
|
|
|
+ @fly-point="flyScenePoint"
|
|
|
|
+ @fly-scene="flyScene"
|
|
|
|
+ @goto-point="gotoPointPage"
|
|
|
|
+ />
|
|
|
|
+ <MapRightPoly
|
|
|
|
+ @del="handlePolysDel"
|
|
|
|
+ @edit="handlePolysEdit"
|
|
|
|
+ :data="boardData"
|
|
|
|
+ v-if="boardData && isCurrentTab(1)"
|
|
|
|
+ >
|
|
</MapRightPoly>
|
|
</MapRightPoly>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<Teleport to="body" v-if="isMounted">
|
|
<Teleport to="body" v-if="isMounted">
|
|
<!-- <el-button class="temp_btn" @click="clearPolys">后端全清</el-button> -->
|
|
<!-- <el-button class="temp_btn" @click="clearPolys">后端全清</el-button> -->
|
|
- <div class="draw-global-icon" v-if="isCurrentTab(1) && !isEditDrawingMode" @click="handleBoardDraw">
|
|
|
|
|
|
+ <div
|
|
|
|
+ class="draw-global-icon"
|
|
|
|
+ v-if="isCurrentTab(1) && !isEditDrawingMode"
|
|
|
|
+ @click="handleBoardDraw"
|
|
|
|
+ >
|
|
<el-icon size="36">
|
|
<el-icon size="36">
|
|
<picpenIcon />
|
|
<picpenIcon />
|
|
</el-icon>
|
|
</el-icon>
|
|
@@ -51,15 +83,15 @@
|
|
import MapRight from "./map-right.vue";
|
|
import MapRight from "./map-right.vue";
|
|
import { router, setDocTitle } from "@/router";
|
|
import { router, setDocTitle } from "@/router";
|
|
import { Manage } from "./openlayer";
|
|
import { Manage } from "./openlayer";
|
|
-import { ScenePoint, Scene, scenePoints, scenes } from "@/store/scene";
|
|
|
|
|
|
+import { ScenePoint, Scene, scenePoints, scenes, SceneStatus } from "@/store/scene";
|
|
import { initRelics, initSelfRelics, relics } from "@/store/relics";
|
|
import { initRelics, initSelfRelics, relics } from "@/store/relics";
|
|
import { onMounted, ref, watchEffect, watch, onUnmounted, computed } from "vue";
|
|
import { onMounted, ref, watchEffect, watch, onUnmounted, computed } from "vue";
|
|
-import { createBoard, scenePosTransform } from "./board";
|
|
|
|
|
|
+import { createBoard, PolygonsPointAttrib } from "drawing-board";
|
|
import MapRightPoly from "./map-right-poly.vue";
|
|
import MapRightPoly from "./map-right-poly.vue";
|
|
import { Back } from "@element-plus/icons-vue";
|
|
import { Back } from "@element-plus/icons-vue";
|
|
-import vectorIcon from '@/assets/vector.svg';
|
|
|
|
-import picpenIcon from '@/assets/pic_pen.svg';
|
|
|
|
-import locationIcon from '@/assets/location.svg';
|
|
|
|
|
|
+import vectorIcon from "@/assets/vector.svg";
|
|
|
|
+import picpenIcon from "@/assets/pic_pen.svg";
|
|
|
|
+import locationIcon from "@/assets/location.svg";
|
|
import {
|
|
import {
|
|
addOrUpdateDrawingFetch,
|
|
addOrUpdateDrawingFetch,
|
|
getDrawingDetailFetch,
|
|
getDrawingDetailFetch,
|
|
@@ -70,13 +102,30 @@ import {
|
|
// import { relicsPolyginsFetch } from "@/request";
|
|
// import { relicsPolyginsFetch } from "@/request";
|
|
// import { Grid, LocationInformation } from "@element-plus/icons-vue";
|
|
// import { Grid, LocationInformation } from "@element-plus/icons-vue";
|
|
|
|
|
|
-import {
|
|
|
|
- mapManageInit,
|
|
|
|
- boardInit,
|
|
|
|
- flyUserCenter,
|
|
|
|
- tileOptions,
|
|
|
|
- tileType,
|
|
|
|
-} from "./map-flow";
|
|
|
|
|
|
+import { mapManageInit, flyUserCenter, tileOptions, tileType } from "./map-flow";
|
|
|
|
+
|
|
|
|
+const scenePosTransform = (scenes: Scene[]) => {
|
|
|
|
+ const points: PolygonsPointAttrib[] = [];
|
|
|
|
+
|
|
|
|
+ scenes.forEach((scene) => {
|
|
|
|
+ if (scene.calcStatus !== SceneStatus.SUCCESS) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ scene.scenePos.forEach((pos) => {
|
|
|
|
+ if (!pos.pos || pos.pos.length === 0) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ points.push({
|
|
|
|
+ x: pos.pos[0],
|
|
|
|
+ y: pos.pos[1],
|
|
|
|
+ title: pos.name,
|
|
|
|
+ id: pos.id.toString(),
|
|
|
|
+ rtk: true,
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ return points;
|
|
|
|
+};
|
|
|
|
|
|
const relicsId = computed(() => router.currentRoute.value.params.relicsId || "");
|
|
const relicsId = computed(() => router.currentRoute.value.params.relicsId || "");
|
|
|
|
|
|
@@ -124,7 +173,7 @@ const flyScene = (scene: Scene) => {
|
|
|
|
|
|
const flyScenePoint = (point: ScenePoint) => {
|
|
const flyScenePoint = (point: ScenePoint) => {
|
|
flyPos(point.pos);
|
|
flyPos(point.pos);
|
|
- board.polygon().activePointId.value = point.id.toString();
|
|
|
|
|
|
+ board.polygon.status.activePointId = point.id.toString();
|
|
};
|
|
};
|
|
|
|
|
|
watch(
|
|
watch(
|
|
@@ -152,7 +201,7 @@ watch(
|
|
// );
|
|
// );
|
|
initCroodTabdata();
|
|
initCroodTabdata();
|
|
|
|
|
|
- board.polygon().bus.on("clickPoint", (bpoint) => {
|
|
|
|
|
|
+ board.polygon.bus.on("clickPoint", (bpoint) => {
|
|
const point =
|
|
const point =
|
|
bpoint.id &&
|
|
bpoint.id &&
|
|
scenePoints.value.find((point) => point.id.toString() === bpoint.id);
|
|
scenePoints.value.find((point) => point.id.toString() === bpoint.id);
|
|
@@ -162,7 +211,7 @@ watch(
|
|
// relicsPolyginsFetch().then((data) => {
|
|
// relicsPolyginsFetch().then((data) => {
|
|
// relics.value;
|
|
// relics.value;
|
|
// board.setData(data, router.currentRoute.value.params.relicsId as string);
|
|
// board.setData(data, router.currentRoute.value.params.relicsId as string);
|
|
- // board.polygon().bus.on("clickPoint", (bpoint) => {
|
|
|
|
|
|
+ // board.polygon.bus.on("clickPoint", (bpoint) => {
|
|
// const point =
|
|
// const point =
|
|
// bpoint.id &&
|
|
// bpoint.id &&
|
|
// scenePoints.value.find((point) => point.id.toString() === bpoint.id);
|
|
// scenePoints.value.find((point) => point.id.toString() === bpoint.id);
|
|
@@ -202,17 +251,19 @@ watchEffect(() => {
|
|
const mapContainer = ref<HTMLDivElement>();
|
|
const mapContainer = ref<HTMLDivElement>();
|
|
const boardContainer = ref<HTMLDivElement>();
|
|
const boardContainer = ref<HTMLDivElement>();
|
|
let mapManage: Manage;
|
|
let mapManage: Manage;
|
|
-let board: ReturnType<typeof createBoard>;
|
|
|
|
|
|
+
|
|
|
|
+const board = createBoard();
|
|
const boardData = ref<DrawingDataType | null>(null);
|
|
const boardData = ref<DrawingDataType | null>(null);
|
|
let endEdithandler;
|
|
let endEdithandler;
|
|
|
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
mapManage = mapManageInit(mapContainer.value!);
|
|
mapManage = mapManageInit(mapContainer.value!);
|
|
- board = (window as any).board = boardInit(boardContainer.value!, mapManage);
|
|
|
|
|
|
+ board.setProps({
|
|
|
|
+ dom: boardContainer.value!,
|
|
|
|
+ map: mapManage.map,
|
|
|
|
+ });
|
|
isMounted.value = true;
|
|
isMounted.value = true;
|
|
-
|
|
|
|
const borardPolyData = computed(() => board.getData());
|
|
const borardPolyData = computed(() => board.getData());
|
|
-
|
|
|
|
watch(
|
|
watch(
|
|
borardPolyData,
|
|
borardPolyData,
|
|
(updater) => {
|
|
(updater) => {
|
|
@@ -234,11 +285,11 @@ const handleTabs = (index: number) => {
|
|
};
|
|
};
|
|
|
|
|
|
const handleBoardDraw = () => {
|
|
const handleBoardDraw = () => {
|
|
- console.log("开始start draw", String(relicsId.value), board.polygon());
|
|
|
|
|
|
+ console.log("开始start draw", String(relicsId.value), board.polygon);
|
|
try {
|
|
try {
|
|
- endEdithandler = board.polygon().editPolygon();
|
|
|
|
|
|
+ endEdithandler = board.polygon.editPolygon();
|
|
isEditDrawingMode.value = true;
|
|
isEditDrawingMode.value = true;
|
|
- board.polygon().bus.on("penEndHandler", handleSyncDataToServer);
|
|
|
|
|
|
+ board.polygon.bus.on("penEndHandler", handleSyncDataToServer);
|
|
} catch (error) {
|
|
} catch (error) {
|
|
console.error("error", error);
|
|
console.error("error", error);
|
|
}
|
|
}
|
|
@@ -247,6 +298,7 @@ const handleSyncDataToServer = () => {
|
|
setTimeout(async () => {
|
|
setTimeout(async () => {
|
|
console.log("handleSyncDataToServer");
|
|
console.log("handleSyncDataToServer");
|
|
const data = (board.getData() as any) as DrawingDataType;
|
|
const data = (board.getData() as any) as DrawingDataType;
|
|
|
|
+ console.log(data);
|
|
boardData.value = data;
|
|
boardData.value = data;
|
|
const param: DrawingParamsType = {
|
|
const param: DrawingParamsType = {
|
|
data: data,
|
|
data: data,
|
|
@@ -257,7 +309,7 @@ const handleSyncDataToServer = () => {
|
|
await addOrUpdateDrawingFetch(param);
|
|
await addOrUpdateDrawingFetch(param);
|
|
isEditDrawingMode.value = false;
|
|
isEditDrawingMode.value = false;
|
|
|
|
|
|
- board.polygon().bus.off("penEndHandler");
|
|
|
|
|
|
+ board.polygon.bus.off("penEndHandler");
|
|
if (endEdithandler) {
|
|
if (endEdithandler) {
|
|
console.log("end edit");
|
|
console.log("end edit");
|
|
}
|
|
}
|
|
@@ -289,14 +341,12 @@ watch(
|
|
const initCroodTabdata = async () => {
|
|
const initCroodTabdata = async () => {
|
|
const points = scenePosTransform(scenes.value);
|
|
const points = scenePosTransform(scenes.value);
|
|
console.log("initCroodTabdata", points, scenes.value);
|
|
console.log("initCroodTabdata", points, scenes.value);
|
|
- board.setData(
|
|
|
|
- {
|
|
|
|
- points: points,
|
|
|
|
- lines: [],
|
|
|
|
- polygons: [],
|
|
|
|
- },
|
|
|
|
- String(relicsId.value)
|
|
|
|
- );
|
|
|
|
|
|
+ board.setData({
|
|
|
|
+ id: String(relicsId.value),
|
|
|
|
+ points: points,
|
|
|
|
+ lines: [],
|
|
|
|
+ polygons: [],
|
|
|
|
+ });
|
|
};
|
|
};
|
|
|
|
|
|
const initPolyTabData = async () => {
|
|
const initPolyTabData = async () => {
|
|
@@ -308,15 +358,16 @@ const initPolyTabData = async () => {
|
|
if (res.data) {
|
|
if (res.data) {
|
|
boardData.value = res.data;
|
|
boardData.value = res.data;
|
|
boardData.value.points = points.concat(res.data.points);
|
|
boardData.value.points = points.concat(res.data.points);
|
|
- board.setData(boardData.value, String(relicsId.value));
|
|
|
|
|
|
+ console.log(boardData.value);
|
|
|
|
+ board.setData({ ...boardData.value, id: String(relicsId.value) });
|
|
}
|
|
}
|
|
}, 500);
|
|
}, 500);
|
|
- } catch (error) { }
|
|
|
|
|
|
+ } catch (error) {}
|
|
};
|
|
};
|
|
|
|
|
|
const handlePolysDel = (id: string) => {
|
|
const handlePolysDel = (id: string) => {
|
|
try {
|
|
try {
|
|
- board.polygon().removePolygon(id);
|
|
|
|
|
|
+ board.polygon.removePolygon(id);
|
|
handleSyncDataToServer();
|
|
handleSyncDataToServer();
|
|
} catch (error) {
|
|
} catch (error) {
|
|
console.error("handlePolysDel", error);
|
|
console.error("handlePolysDel", error);
|
|
@@ -422,7 +473,7 @@ const handlePolysEdit = (item: PolyDataType) => {
|
|
&.light {
|
|
&.light {
|
|
--color: #fff;
|
|
--color: #fff;
|
|
|
|
|
|
- >div {
|
|
|
|
|
|
+ > div {
|
|
text-shadow: 0 0 2px #000;
|
|
text-shadow: 0 0 2px #000;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -430,7 +481,7 @@ const handlePolysEdit = (item: PolyDataType) => {
|
|
&.dark {
|
|
&.dark {
|
|
--color: #000;
|
|
--color: #000;
|
|
|
|
|
|
- >div {
|
|
|
|
|
|
+ > div {
|
|
text-shadow: 0 0 2px #fff;
|
|
text-shadow: 0 0 2px #fff;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -491,7 +542,6 @@ const handlePolysEdit = (item: PolyDataType) => {
|
|
background-color: #ecf5ff;
|
|
background-color: #ecf5ff;
|
|
position: relative;
|
|
position: relative;
|
|
|
|
|
|
-
|
|
|
|
&::before {
|
|
&::before {
|
|
content: "";
|
|
content: "";
|
|
height: 100%;
|
|
height: 100%;
|