|
|
@@ -10,8 +10,9 @@
|
|
|
<div class="drawer-element-content">
|
|
|
<div class="name element-item">
|
|
|
<span class="mr30">名称:</span>
|
|
|
- <a-input v-model:value="layerState.layerName" style="width:110px" placeholder="element name"
|
|
|
- @change="changeLayer" />
|
|
|
+ {{ layerState.layerName }}
|
|
|
+ <!-- <a-input v-model:value="layerState.layerName" style="width:110px" placeholder="element name"
|
|
|
+ @change="changeLayer" /> -->
|
|
|
</div>
|
|
|
<div class="longitude element-item" v-if="layerState.currentType === geoType.Point">
|
|
|
<span class="mr30">经度:</span>
|
|
|
@@ -54,100 +55,73 @@
|
|
|
<a-button type="primary" @click="deleteElement">删除</a-button>
|
|
|
</div>
|
|
|
</a-drawer>
|
|
|
- <!-- <a-drawer title="图片信息" placement="right" :closable="true" v-model:visible="visible" :mask="true"
|
|
|
- getContainer="#g-container" :wrap-style="{ position: 'absolute' }" wrapClassName="drawer-element-wrapper"
|
|
|
- @close="closeDrawer" width="300">
|
|
|
- <div class="drawer-element-content">
|
|
|
- <div class="name element-item">
|
|
|
- <span class="mr30">名称:</span>
|
|
|
- <a-input v-model:value="layerState.layerName" style="width:110px" placeholder="element name"
|
|
|
- @change="changeLayer" />
|
|
|
- </div>
|
|
|
- <div class="longitude element-item" v-if="layerState.currentType === geoType.Point">
|
|
|
- <span class="mr30">经度:</span>
|
|
|
- {{ layerState.longitude || '--' }}
|
|
|
- </div>
|
|
|
- <div class="latitude element-item" v-if="layerState.currentType === geoType.Point">
|
|
|
- <span class="mr30">纬度:</span>
|
|
|
- {{ layerState.latitude || '--' }}
|
|
|
- </div>
|
|
|
- <div class="latitude element-item" v-if="layerState.element_from === 2">
|
|
|
- <span class="mr30">高度:</span>
|
|
|
- {{ layerState.height || '--' }}
|
|
|
- </div>
|
|
|
- <div class="color-content">
|
|
|
- <span class="mr30">颜色: </span>
|
|
|
- <div v-for="item in colors" :key="item.id" class="color-item" :style="'background:' + item.color"
|
|
|
- @click="changeColor(item)">
|
|
|
- <svg-icon v-if="item.color === layerState.color" :size="18" name="check"></svg-icon>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="element-item">
|
|
|
- <span class="mr30">用户:</span>
|
|
|
- {{ layerState.user_name || '--' }}
|
|
|
- </div>
|
|
|
- <div class="element-item">
|
|
|
- <span class="mr30">来源:</span>
|
|
|
- <Icon v-if="layerState.element_from === 2">
|
|
|
- <template #component>
|
|
|
- <svg width="1em" height="1em" fill="currentColor" viewBox="0 0 1024 1024">
|
|
|
- <path
|
|
|
- d="M1024 418.21v576H0v-576h1024z m-672 192c-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z m320 0c-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM236.59 29.79h125.55v320H236.59v-320z m425.28 0h125.55v320H661.87v-320z"
|
|
|
- p-id="4408" />
|
|
|
- </svg>
|
|
|
- </template>
|
|
|
- </Icon>
|
|
|
- <DesktopOutlined v-else />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="flex-row flex-justify-around flex-align-center mt20">
|
|
|
- <a-button type="primary" @click="deleteElement">删除</a-button>
|
|
|
- </div>
|
|
|
- </a-drawer> -->
|
|
|
+ <PhotoDrawer :visible="state.photoDrawerVisible" :fileId="selectedKeys[0]" :closeDrawer="closeDrawer" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
import { onMounted, reactive, ref, watch } from 'vue'
|
|
|
-import {
|
|
|
- deleteElementReq,
|
|
|
- getElementGroupsReq,
|
|
|
- updateElementsReq
|
|
|
-} from '/@/api/layer'
|
|
|
import Icon from '@ant-design/icons-vue';
|
|
|
import { DesktopOutlined } from '@ant-design/icons-vue';
|
|
|
import LayersTree from '/@/components/LayersTree.vue'
|
|
|
+import PhotoDrawer from './components/PhotoDrawer.vue'
|
|
|
import { MapElementEnum } from '/@/constants/map'
|
|
|
import { useGMapCover } from '/@/hooks/use-g-map-cover'
|
|
|
-import { useMyStore } from '/@/store'
|
|
|
import { GeojsonCoordinate, LayerResource } from '/@/types/map'
|
|
|
import { Color, GeoType } from '/@/types/mapLayer'
|
|
|
+import {
|
|
|
+ deleteElementReq,
|
|
|
+ getElementGroupsReq,
|
|
|
+ updateElementsReq
|
|
|
+} from '/@/api/layer'
|
|
|
+import { useMyStore } from '/@/store'
|
|
|
import { gcj02towgs84, wgs84togcj02 } from '/@/vendors/coordtransform'
|
|
|
|
|
|
interface Props {
|
|
|
- mapClickId: string,
|
|
|
+ mapClickElement: {
|
|
|
+ id: string,
|
|
|
+ type: string,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
const props = withDefaults(defineProps<Props>(), {
|
|
|
|
|
|
});
|
|
|
|
|
|
-watch(() => props.mapClickId, (newValue, oldValue) => {
|
|
|
- if (newValue) {
|
|
|
- // 默认文件夹列表
|
|
|
- const defaultFileList: any = mapLayers.value.filter((item: any) => item.type === 2);
|
|
|
- if (defaultFileList.length === 0) {
|
|
|
- return;
|
|
|
+const state = reactive({
|
|
|
+ photoDrawerVisible: false,
|
|
|
+})
|
|
|
+
|
|
|
+watch(() => props.mapClickElement, (newValue, oldValue) => {
|
|
|
+ if (newValue.id) {
|
|
|
+ if (newValue.type === 'DEFAULT') {// 默认文件夹
|
|
|
+ // 默认文件夹列表
|
|
|
+ const defaultFileList: any = mapLayers.value.filter((item: any) => item.type === 2);
|
|
|
+ if (defaultFileList.length === 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const pid = defaultFileList[0].id;
|
|
|
+ expandedKeys.value = [pid];
|
|
|
+ selectedKeys.value = [`resource__${newValue.id}`];
|
|
|
+ selectedLayer.value = getCurrentLayer(`resource__${newValue.id}`)
|
|
|
+ setBaseInfo()
|
|
|
+ visible.value = true;
|
|
|
+ state.photoDrawerVisible = false
|
|
|
+ } else if (newValue.type === 'PHOTO') {
|
|
|
+ // 图片标注列表
|
|
|
+ const photoList: any = mapLayers.value.filter((item: any) => item.type === 3);
|
|
|
+ if (photoList.length === 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const pid = photoList[0].id;
|
|
|
+ expandedKeys.value = [pid];
|
|
|
+ selectedKeys.value = [`resource__${newValue.id}`];
|
|
|
+ selectedLayer.value = getCurrentLayer(`resource__${newValue.id}`)
|
|
|
+ state.photoDrawerVisible = true
|
|
|
+ visible.value = false;
|
|
|
}
|
|
|
- const pid = defaultFileList[0].id;
|
|
|
- expandedKeys.value = [pid];
|
|
|
- selectedKeys.value = [`resource__${newValue}`];
|
|
|
- selectedLayer.value = getCurrentLayer(`resource__${newValue}`)
|
|
|
- setBaseInfo()
|
|
|
- visible.value = true
|
|
|
- store.commit('SET_DRAW_VISIBLE_INFO', visible.value)
|
|
|
}
|
|
|
-});
|
|
|
+}, { deep: true });
|
|
|
|
|
|
const store = useMyStore()
|
|
|
let useGMapCoverHook = useGMapCover()
|
|
|
@@ -158,7 +132,6 @@ const selectedKeys = ref<string[]>([])
|
|
|
const selectedKey = ref<string>('')
|
|
|
const selectedLayer = ref<any>(null)
|
|
|
const visible = ref<boolean>(false)
|
|
|
-store.commit('SET_DRAW_VISIBLE_INFO', visible.value)
|
|
|
const geoType = GeoType
|
|
|
|
|
|
const layerState = reactive({
|
|
|
@@ -207,9 +180,18 @@ watch(() => store.state.Layers, newData => {
|
|
|
function setMapCoverByElement(elements: LayerResource[]) {
|
|
|
elements.forEach(element => {
|
|
|
const name = element.name
|
|
|
- const color = element.resource?.content.properties.color
|
|
|
- const type = element.resource?.type as number
|
|
|
- updateMapElement(element, name, color)
|
|
|
+ const content: any = element.resource?.content;
|
|
|
+ const color = content.properties.color;
|
|
|
+ const pictureInfo = content.picture;
|
|
|
+ if (pictureInfo) {
|
|
|
+ const list: any = element.resource?.content.geometry.coordinates;
|
|
|
+ const coordinates = list.slice(0, 2);
|
|
|
+ // 绘制图片标注文件夹
|
|
|
+ useGMapCoverHook.updatePhotoElement(pictureInfo.file_id, name, pictureInfo.thumbnail_url, coordinates);
|
|
|
+ } else {
|
|
|
+ // 绘制默认文件夹
|
|
|
+ updateMapElement(element, name, color);
|
|
|
+ }
|
|
|
})
|
|
|
}
|
|
|
|
|
|
@@ -238,20 +220,18 @@ function updateMapElement(
|
|
|
|
|
|
function selectLayer(keys: string[], e) {
|
|
|
visible.value = false
|
|
|
- store.commit('SET_DRAW_VISIBLE_INFO', visible.value)
|
|
|
- if (!e.selected) {
|
|
|
- return;
|
|
|
- }
|
|
|
- selectedKey.value = e.node.eventKey
|
|
|
- selectedLayer.value = getCurrentLayer(selectedKey.value)
|
|
|
- setBaseInfo()
|
|
|
- const info = e.selectedNodes[0];
|
|
|
- const { type } = info.props.parent;
|
|
|
- if (type === 2) {// 默认文件夹
|
|
|
- visible.value = e.selected
|
|
|
- store.commit('SET_DRAW_VISIBLE_INFO', visible.value)
|
|
|
- } else if (type === 3) {// 图片标注
|
|
|
- console.log('此处写图片标注弹出层逻辑');
|
|
|
+ state.photoDrawerVisible = false
|
|
|
+ if (e.selected) {
|
|
|
+ selectedKey.value = e.node.eventKey
|
|
|
+ selectedLayer.value = getCurrentLayer(selectedKey.value)
|
|
|
+ const info = e.selectedNodes[0];
|
|
|
+ const { type } = info.props.parent;
|
|
|
+ if (type === 2) {// 默认文件夹
|
|
|
+ setBaseInfo()
|
|
|
+ visible.value = true
|
|
|
+ } else if (type === 3) {// 图片标注
|
|
|
+ state.photoDrawerVisible = true
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -307,8 +287,12 @@ onMounted(() => {
|
|
|
})
|
|
|
|
|
|
function closeDrawer() {
|
|
|
- store.commit('SET_MAP_CLICK_ID', '');
|
|
|
- store.commit('SET_DRAW_VISIBLE_INFO', false)
|
|
|
+ store.commit('SET_MAP_CLICK_ELEMENT', {
|
|
|
+ id: '',
|
|
|
+ type: '',
|
|
|
+ });
|
|
|
+ visible.value = false
|
|
|
+ state.photoDrawerVisible = false
|
|
|
selectedKeys.value = []
|
|
|
}
|
|
|
|
|
|
@@ -329,7 +313,6 @@ async function deleteElement() {
|
|
|
return
|
|
|
}
|
|
|
visible.value = false
|
|
|
- store.commit('SET_DRAW_VISIBLE_INFO', visible.value)
|
|
|
// 移除标点
|
|
|
useGMapCoverHook.removeCoverFromMap(elementid)
|
|
|
// 移除文本覆盖物
|
|
|
@@ -349,6 +332,7 @@ async function getElementGroups(type?: string) {
|
|
|
elements: item.elements.map((o: any) => {
|
|
|
return {
|
|
|
...o,
|
|
|
+ id: item.type === 3 ? o.resource.content.picture.file_id : o.id,// 图片标注类型时,id更改为fileId
|
|
|
height: o.resource.content.geometry.coordinates[2]
|
|
|
}
|
|
|
})
|
|
|
@@ -387,7 +371,6 @@ function updateWgs84togcj02() {
|
|
|
}
|
|
|
|
|
|
function updateCoordinates(transformType: string, element: LayerResource) {
|
|
|
- const geoType = element.resource?.content.geometry.type
|
|
|
const type = element.resource?.type as number
|
|
|
if (element.resource) {
|
|
|
if (MapElementEnum.PIN === type) {
|