diff --git a/src/api/demo/mediaLibrary.ts b/src/api/demo/mediaLibrary.ts index 2094a87..b466817 100644 --- a/src/api/demo/mediaLibrary.ts +++ b/src/api/demo/mediaLibrary.ts @@ -1,5 +1,14 @@ import { defHttp } from '@/utils/http/axios'; enum Api { + // 获取地图标注列表 + GetAnnotationList = '/api/Manage/GetAnnotationList', + // 添加地图标注 + AddAnnotation = '/api/Manage/AddAnnotation', + // 更新地图标注 + UpdateAnnotation = '/api/Manage/UpdateAnnotation', + // 删除地图标注 + DeleteAnnotation = '/api/Manage/DeleteAnnotation', + // 获取地图作业区域列表 GetWorkAreaList = '/api/Manage/GetWorkAreaList', // 添加地图作业区域 @@ -10,6 +19,35 @@ enum Api { DeleteWorkArea = '/api/Manage/DeleteWorkArea', } +// 获取地图标注列表 +export function GetAnnotationList(params) { + return defHttp.get({ + url: Api.GetAnnotationList, + params + }); +} +// 添加地图标注 +export function AddAnnotation(params) { + return defHttp.post({ + url: Api.AddAnnotation, + data:params + }); +} +// 更新地图标注 +export function UpdateAnnotation(params) { + return defHttp.post({ + url: Api.UpdateAnnotation, + data:params + }); +} +// 删除地图标注 +export function DeleteAnnotation(params) { + return defHttp.post({ + url: Api.DeleteAnnotation + '?id=' + params.id, + data:params + }); +} + // 获取地图作业区域列表 export function GetWorkAreaList(params) { return defHttp.get({ @@ -26,15 +64,15 @@ export function AddWorkArea(params) { } // 更新地图作业区域 export function UpdateWorkArea(params) { -return defHttp.post({ - url: Api.UpdateWorkArea, - data:params -}); + return defHttp.post({ + url: Api.UpdateWorkArea, + data:params + }); } // 删除地图作业区域 export function DeleteWorkArea(params) { -return defHttp.post({ - url: Api.DeleteWorkArea + '?id=' + params.id, - data:params -}); -} \ No newline at end of file + return defHttp.post({ + url: Api.DeleteWorkArea + '?id=' + params.id, + data:params + }); +} diff --git a/src/views/demo/system/mediaLibrary/path/index.vue b/src/views/demo/system/mediaLibrary/path/index.vue index 940efaf..0f2bef4 100644 --- a/src/views/demo/system/mediaLibrary/path/index.vue +++ b/src/views/demo/system/mediaLibrary/path/index.vue @@ -11,8 +11,8 @@ ref="pathLeftMenuRef" :pathRecord="props.pathRecord" :leftMenuShow="leftMenuShow" - :allMarkDataList="allMarkDataList" - :nowShowMarkData="nowShowMarkData" + :allAnnotationDataList="allAnnotationDataList" + :nowShowAnnotationData="nowShowAnnotationData" :allAreaDataList="allAreaDataList" :nowShowAreaData="nowShowAreaData" :allImageDataList="allImageDataList" @@ -20,12 +20,13 @@ @changeLeftMenuShow="changeLeftMenuShow" @handlerLocation="handlerLocation" @closePathModal="closePathModal" - @changeMarkInfoShow="changeMarkInfoShow" - @setNowShowMarkData="setNowShowMarkData" + @changeAnnotationInfoShow="changeAnnotationInfoShow" + @setNowShowAnnotationData="setNowShowAnnotationData" @setNowShowImageData="setNowShowImageData" @setNowShowAreaData="setNowShowAreaData" + @setAllAnnotationData="setAllAnnotationData" @setAllAreaData="setAllAreaData" - @deleteMark="deleteMark" + @deleteAnnotation="deleteAnnotation" @deleteArea="deleteArea" /> @@ -33,30 +34,30 @@
-
- +
@@ -84,15 +85,13 @@ diff --git a/src/views/demo/system/mediaLibrary/path/pathAreaInfo.vue b/src/views/demo/system/mediaLibrary/path/pathAreaInfo.vue index 641e390..2165b03 100644 --- a/src/views/demo/system/mediaLibrary/path/pathAreaInfo.vue +++ b/src/views/demo/system/mediaLibrary/path/pathAreaInfo.vue @@ -2,17 +2,17 @@
-
自定义飞行区
+
自定义飞行区
-
+
-
+
-
+
-
+
自定义作业区绘制后,飞行器只能在该区域内飞行
-
+
自定义禁降区绘制后,飞行器不能在绘制区域内自动降落
-
+
自定义作业区绘制后,飞行器只能在该区域内飞行
-
更多信息
+
更多信息
-
启用状态
+
启用状态
-
+
{{ props.nowShowAreaData.state == 0 ? '已启用' : '已禁用' }}
- - -
水平距离
+ + +
水平周长
- -
{{ nowAreaData.length.toFixed(1) }}m
+ +
{{ length.toFixed(2) }}m
-
水平面积
+
水平面积
-
{{ nowAreaData.area.toFixed(2) }}㎡
-
- - -
水平周长
-
- -
{{ nowAreaData.length.toFixed(1) }}m
+
{{ area.toFixed(2) }}㎡
-
半径
+
半径
-
+
- - -
宽度
-
- -
-
- -
-
- - {{ nowAreaData.properties.width }} - - - m -
-
- -
-
-
-
绘制者
+
绘制者
-
{{ props.nowShowAreaData.createdUser }}
+
{{ props.nowShowAreaData.createdUser }}
@@ -195,85 +152,16 @@ ]); const nowAreaData: any = ref(props.nowShowAreaData); - watch( - () => nowAreaData.value, - () => { - emits('setNowShowAreaData', nowAreaData.value, false); - }, - { - deep: true, - }, - ); - - // 宽度---------------------------------------------------------------------- - const numInputFlag = ref(false); - const focusInputRef = ref(); - // input鼠标聚焦 - function focusInput() { - numInputFlag.value = true; - nextTick(() => { - if (focusInputRef.value && focusInputRef.value.focus) { - focusInputRef.value.focus(); - } - }); - } - // input鼠标聚焦后离开or点击Enter - function blurInput() { - numInputFlag.value = false; - // 检测是否是数字 - if (/^-?\d+(\.\d+)?$/.test(nowAreaData.value.properties.width.toString())) { - if (nowAreaData.value.properties.width > 100) { - // 不能大于100 - nowAreaData.value.properties.width = 100; - } else if (nowAreaData.value.properties.width < 10) { - // 不能小于10 - nowAreaData.value.properties.width = 10; - } else { - // 保存小数点后两位 - let newnum = cloneDeep(nowAreaData.value.properties.width); - nowAreaData.value.properties.width = parseFloat(parseFloat(newnum).toFixed(2)); - } - } else { - // 不是数字 - nowAreaData.value.properties.width = 10; - } - } - // 宽度-减少 - function removeRecordNum() { - let newnum = cloneDeep(nowAreaData.value.properties.width); - if (newnum == 10) { - return; - } - newnum -= 5; - nowAreaData.value.properties.width = parseFloat(newnum.toFixed(2)); - } - // 宽度-增加 - function addRecordNum() { - let newnum = cloneDeep(nowAreaData.value.properties.width); - if (newnum == 100) { - return; - } - newnum += 5; - nowAreaData.value.properties.width = parseFloat(newnum.toFixed(2)); - } - // 关闭 function closePathAreaInfo() { emits('closePathAreaInfo'); } // 移动到中心位置 function handlerLocation() { - if (props.nowShowAreaData.geomtype == 'Circle') { - emits('handlerLocation', { - lng: props.nowShowAreaData.properties.centerPoint[0], - lat: props.nowShowAreaData.properties.centerPoint[1], - }); - } else { - emits('handlerLocation', { - lng: props.nowShowAreaData.properties.centerPoint[0], - lat: props.nowShowAreaData.properties.centerPoint[1], - }); - } + emits('handlerLocation', { + lng: props.nowShowAreaData.properties.centerPoint[0], + lat: props.nowShowAreaData.properties.centerPoint[1], + }); } // 删除此区域 function deleteArea() { @@ -287,19 +175,37 @@ }); } + // 水平周长和水平面积 + const length: any = ref(); + const area: any = ref(); + + watch( + () => nowAreaData.value, + () => { + emits('setNowShowAreaData', nowAreaData.value, false); + }, + { + deep: true, + }, + ); watch( () => props.nowShowAreaData, () => { nowAreaData.value = props.nowShowAreaData; - // 水平面积 - // getArea(); - if (props.nowShowAreaData.type == 'noland') { - // 水平距离 - // getDistance(); - } if (props.nowShowAreaData.geomtype == 'Polygon') { // 水平距离 - // getDistance(); + length.value = mars3d.MeasureUtil.getDistance(nowAreaData.value.coordinates[0]); + // 水平面积 + area.value = mars3d.MeasureUtil.getArea(nowAreaData.value.coordinates[0]); + } + if (props.nowShowAreaData.geomtype == 'Circle') { + // 水平距离 + length.value = 2 * Math.PI * parseFloat(nowAreaData.value.properties.radius); + // 水平面积 + area.value = + Math.PI * + parseFloat(nowAreaData.value.properties.radius) * + parseFloat(nowAreaData.value.properties.radius); } }, { @@ -323,7 +229,7 @@ padding: 15px; } - .markTitle { + .annotationTitle { display: flex; align-items: center; justify-content: flex-start; @@ -334,7 +240,7 @@ width: 100%; flex-wrap: wrap; - .markTitleButton_right { + .annotationTitleButton_right { height: 20px; width: 20px; display: flex; @@ -343,7 +249,7 @@ margin-right: 12px; font-size: 18px; } - .markTitleButton { + .annotationTitleButton { height: 20px; width: 20px; display: flex; @@ -354,7 +260,7 @@ } } - .markContent { + .annotationContent { display: flex; align-items: center; justify-content: flex-start; @@ -365,7 +271,7 @@ color: #ffffff; } - .markButton { + .annotationButton { display: flex; align-items: center; justify-content: flex-start; @@ -375,7 +281,7 @@ flex-wrap: wrap; } - .markPrompt { + .annotationPrompt { display: flex; align-items: center; justify-content: flex-start; diff --git a/src/views/demo/system/mediaLibrary/path/pathLeftMenu.vue b/src/views/demo/system/mediaLibrary/path/pathLeftMenu.vue index df01a12..59ebc33 100644 --- a/src/views/demo/system/mediaLibrary/path/pathLeftMenu.vue +++ b/src/views/demo/system/mediaLibrary/path/pathLeftMenu.vue @@ -24,13 +24,14 @@
@@ -103,10 +104,10 @@
-
- - - - +
+ + + +
- +
-
{{ show.name }}
+
{{ show.name }}
@@ -286,9 +289,9 @@
@@ -407,12 +410,7 @@ CheckCircleOutlined, StopOutlined, } from '@ant-design/icons-vue'; - import { - GetWorkAreaList, - AddWorkArea, - UpdateWorkArea, - DeleteWorkArea, - } from '@/api/demo/mediaLibrary'; + import { UpdateWorkArea, UpdateAnnotation } from '@/api/demo/mediaLibrary'; import { cloneDeep } from 'lodash-es'; import { useMessage } from '@/hooks/web/useMessage'; const { createMessage, createConfirm } = useMessage(); @@ -420,8 +418,8 @@ const props = defineProps([ 'pathRecord', 'leftMenuShow', - 'allMarkDataList', - 'nowShowMarkData', + 'allAnnotationDataList', + 'nowShowAnnotationData', 'allImageDataList', 'nowShowImageData', 'allAreaDataList', @@ -431,19 +429,20 @@ 'changeLeftMenuShow', 'handlerLocation', 'closePathModal', - 'changeMarkInfoShow', - 'setNowShowMarkData', + 'changeAnnotationInfoShow', + 'setNowShowAnnotationData', 'setNowShowImageData', 'setNowShowAreaData', 'setAllAreaData', - 'deleteMark', + 'setAllAnnotationData', + 'deleteAnnotation', 'deleteArea', ]); - const showMenuInfoList = ref(props.allMarkDataList); + const showMenuInfoList = ref(props.allAnnotationDataList); const showMenuInfoName = ref('地图标注'); function updateShowMenuInfoList(type) { if (type == '地图标注') { - showMenuInfoList.value = props.allMarkDataList; + handleChangeAnnotationSearch(); } if (type == '地图照片') { showMenuInfoList.value = props.allImageDataList; @@ -461,7 +460,6 @@ function closePathModal() { emits('closePathModal'); } - // 地图图片-加载到地图上 function funAddOrRemoveToMap(show) { show.show_on_map = !show.show_on_map; @@ -472,9 +470,51 @@ } } + // 地图标注-搜索 + const filterAfterAnnotationDataList = ref(props.allAnnotationDataList); + function handleChangeAnnotationSearch() { + let filterAnnotationData = props.allAnnotationDataList; + // if (areatype.value !== 'all') { + // filterAnnotationData = filterAnnotationData.filter((item) => item.type == areatype.value); + // } + // if (areastate.value !== 'all') { + // filterAnnotationData = filterAnnotationData.filter((item) => item.state == areastate.value); + // } + filterAfterAnnotationDataList.value = filterAnnotationData; + showMenuInfoList.value = filterAfterAnnotationDataList.value; + } // 地图标注-删除标注 - function deleteMark(show) { - emits('deleteMark', show); + function deleteAnnotation(show) { + show.deleteClickNum = 0; + emits('deleteAnnotation', show); + } + // 地图标注-显示该标注 + function showThisAnnotation(value) { + setNowShowAnnotationData({ + ...value, + state: 0, + }); + UpdateAnnotation({ + ...value, + properties: JSON.stringify(value.properties), + state: 0, + }).then((res) => { + emits('setAllAnnotationData'); + }); + } + // 地图标注-隐藏该标注 + function hideThisAnnotation(value) { + setNowShowAnnotationData({ + ...value, + state: 1, + }); + UpdateAnnotation({ + ...value, + properties: JSON.stringify(value.properties), + state: 1, + }).then((res) => { + emits('setAllAnnotationData'); + }); } // 地图作业区域------------------------------------------------- @@ -519,12 +559,7 @@ }); UpdateWorkArea({ ...value, - // id: value.id, - // name: value.name, - // type: value.type, properties: JSON.stringify(value.properties), - // geom: value.geom, - // workSpaceId: '1', state: 0, }).then((res) => { emits('setAllAreaData'); @@ -537,13 +572,8 @@ state: 1, }); UpdateWorkArea({ - // id: value.id, - // name: value.name, - // type: value.type, ...value, properties: JSON.stringify(value.properties), - // geom: value.geom, - // workSpaceId: '1', state: 1, }).then((res) => { emits('setAllAreaData'); @@ -555,8 +585,8 @@ } // 设定当前标记 - function setNowShowMarkData(value) { - emits('setNowShowMarkData', value); + function setNowShowAnnotationData(value) { + emits('setNowShowAnnotationData', value); } // 设定当前图片 function setNowShowImageData(value) { @@ -689,7 +719,7 @@ padding-bottom: 5px; gap: 10px; - .leftMenu_buttonList_mark { + .leftMenu_buttonList_annotation { position: relative; border-radius: 5px; height: 40px; @@ -739,7 +769,7 @@ max-height: 800px; // 地图标注 - .showMenuInfo_mark { + .showMenuInfo_annotation { position: relative; display: flex; align-items: center; diff --git a/src/views/demo/system/mediaLibrary/path/pathMap.vue b/src/views/demo/system/mediaLibrary/path/pathMap.vue index 9932398..4161975 100644 --- a/src/views/demo/system/mediaLibrary/path/pathMap.vue +++ b/src/views/demo/system/mediaLibrary/path/pathMap.vue @@ -1,6 +1,6 @@