优化跳转新地址

main
刘妍 2025-02-20 13:26:57 +08:00
parent 87c5746a01
commit cfe5d4c5ec
2 changed files with 190 additions and 66 deletions

View File

@ -1,18 +1,38 @@
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore';
import { mapFun } from '@/hooks/ceshiFun.hook';
import { router } from '@/router';
const chartEditStore = useChartEditStore();
const ceshiFunction = mapFun();
// 交互事件
export const eventHandlerHook = (comonentList: any, elementList: any, params:any = null) => {
export const eventHandlerHook = (comonentList: any, elementList: any, params: any = null) => {
let obj: any = {};
let index = 0;
for (let i = 0; i < comonentList.length; i++) {
for (let j = 0; j < elementList.length; j++) {
if (elementList[j].movement == 'newaddress') {
// 跳转新地址
window.open(elementList[j].url);
// 打开新页面
if (elementList[j].openNewPage) {
if (elementList[j].skipType == 'routeLink') {
const routeUrl = router.resolve({
path: elementList[j].url,
});
window.open(routeUrl.href, '_blank');
return;
} else {
window.open(elementList[j].url, '_blank');
return;
}
} else {
if (elementList[j].skipType == 'routeLink') {
router.replace(elementList[j].url);
return;
} else {
window.open(elementList[j].url, '_self');
return;
}
}
} else if (elementList[j].movement == 'reveal') {
// 显示
for (let k = 0; k < elementList[j].elementId.length; k++) {
@ -37,9 +57,9 @@ export const eventHandlerHook = (comonentList: any, elementList: any, params:any
// 地图事件联动
for (let k = 0; k < elementList[j].elementId.length; k++) {
if (comonentList[i].id == elementList[j].elementId[k]) {
if(params){
if (params) {
ceshiFunction[elementList[j].funName](params);
}else{
} else {
ceshiFunction[elementList[j].funName]();
}
}

View File

@ -71,10 +71,43 @@
:options="funSelectOptions"
/>
</div>
<div class="movement-type__element" v-if="panel.movement == 'newaddress'">
跳转新地址
<n-input v-model:value="panel.url" type="text" placeholder="请输入网址" />
</div>
<template v-if="panel.movement == 'newaddress'">
<div class="movement-type__element">
跳转方式
<n-select
v-model:value="panel.skipType"
placeholder="请选择"
:options="skipTypeOptions"
/>
</div>
<div class="movement-type__element">
是否在新页面打开
<n-switch v-model:value="panel.openNewPage" />
</div>
<!-- 外部链接 -->
<div class="movement-type__element" v-if="panel.skipType == 'outLink'">
外部链接
<n-input v-model:value="panel.url" type="text" placeholder="请输入网址" />
</div>
<!-- 发布地址 -->
<div class="movement-type__element" v-if="panel.skipType == 'publishLink'">
发布地址
<n-select
v-model:value="panel.url"
placeholder="请选择"
:options="publishOptions"
/>
</div>
<!-- 路由 -->
<div class="movement-type__element" v-if="panel.skipType == 'routeLink'">
路由地址
<n-select
v-model:value="panel.url"
placeholder="请选择"
:options="routeOptions"
/>
</div>
</template>
</div>
</div>
</n-tab-pane>
@ -84,13 +117,17 @@
</div>
</template>
<script setup lang="ts">
import { ref, defineEmits } from 'vue';
import { ref, defineEmits, onMounted } from 'vue';
import { eventTypeOptions, movementTypeOptions } from '../../../../hooks/eventData.hook';
import { goDialog } from '@/utils';
import { DesktopOutline } from '@vicons/ionicons5';
import { useTargetData } from '../../../../hooks/useTargetData.hook';
import { getMenuList } from '@/api/sys/menu';
import { previewPath } from '@/utils';
import { projectListApi } from '@/api/path/project.api';
const { chartEditStore } = useTargetData();
const routeOptions = ref([]);
const funSelectOptions = ref([
{
//
@ -99,71 +136,101 @@
value: 'ceshiClick',
},
{
label:"根据坐标定位地图视角",
value: 'handlerFlyToPoint'
label: '根据坐标定位地图视角',
value: 'handlerFlyToPoint',
},
{
label:"添加任意类型图层",
value: 'handlerAddLayer'
label: '添加任意类型图层',
value: 'handlerAddLayer',
},
{
label:"隐藏任意类型图层",
value: 'handlerHiddenLayer'
label: '隐藏任意类型图层',
value: 'handlerHiddenLayer',
},
{
label:"删除任意类型图层",
value: 'handlerRemoveLayer'
label: '删除任意类型图层',
value: 'handlerRemoveLayer',
},
{
label:"添加单个矢量数据",
value: 'handlerAddEntity'
},{
label:"隐藏单个矢量数据",
value:"handlerHiddenEntity"
},{
label:"移除单个矢量数据",
value:"handlerRemoveEntity"
},{
label:"定位和高亮矢量数据",
value:"handlerFlyToEntity"
},{
label:"清除全部矢量数据",
value:"handlerClearEntityLayer"
},{
label:"隐藏全部矢量数据",
value:"handlerHiddenEntityLayer"
},{
label:"点击地图拾取坐标",
value:"handlerDrawPoint"
},{
label:"绘制贴地线",
value:"handlerDrawLine"
},{
label:"绘制贴地面",
value:"handlerDrawPolygon"
},{
label:"贴地距离测量",
value:"handlerMeasureSurfaceLength"
},{
label:"空间距离测量",
value:"handlerMeasureLength"
},{
label:"贴地面积测量",
value:"handlerMeasureSurfaceArea"
},{
label:"水平面积测量",
value:"handlerMeasureArea"
},{
label:"坐标点位测量",
value:"handlerMeasurePoint"
},{
label:"高度差测量",
value:"handlerMeasureHeight"
},{
label:"清空测量数据",
value:"handlerClearMeasure"
}
label: '添加单个矢量数据',
value: 'handlerAddEntity',
},
{
label: '隐藏单个矢量数据',
value: 'handlerHiddenEntity',
},
{
label: '移除单个矢量数据',
value: 'handlerRemoveEntity',
},
{
label: '定位和高亮矢量数据',
value: 'handlerFlyToEntity',
},
{
label: '清除全部矢量数据',
value: 'handlerClearEntityLayer',
},
{
label: '隐藏全部矢量数据',
value: 'handlerHiddenEntityLayer',
},
{
label: '点击地图拾取坐标',
value: 'handlerDrawPoint',
},
{
label: '绘制贴地线',
value: 'handlerDrawLine',
},
{
label: '绘制贴地面',
value: 'handlerDrawPolygon',
},
{
label: '贴地距离测量',
value: 'handlerMeasureSurfaceLength',
},
{
label: '空间距离测量',
value: 'handlerMeasureLength',
},
{
label: '贴地面积测量',
value: 'handlerMeasureSurfaceArea',
},
{
label: '水平面积测量',
value: 'handlerMeasureArea',
},
{
label: '坐标点位测量',
value: 'handlerMeasurePoint',
},
{
label: '高度差测量',
value: 'handlerMeasureHeight',
},
{
label: '清空测量数据',
value: 'handlerClearMeasure',
},
]);
const skipTypeOptions = ref([
{
label: '外部链接',
value: 'outLink',
},
{
label: '发布地址',
value: 'publishLink',
},
{
label: '路由',
value: 'routeLink',
},
]);
const publishOptions = ref([]);
const props = defineProps({
eventData: {
type: Object,
@ -232,6 +299,43 @@
};
}),
);
const treeIterator = (tree) => {
tree.forEach((node) => {
var obj = {};
obj.label = node.item.name;
obj.value = node.item.url;
if (node.children.length > 0) {
node.children && treeIterator(node.children);
} else {
routeOptions.value.push(obj);
}
});
};
//
const getRouteList = async () => {
const data = await getMenuList();
treeIterator(data);
await data;
};
//
const getPublishedPageList = async () => {
const data = await projectListApi({
state: 1,
page: 1,
limit: 1000,
});
publishOptions.value = data.items.map((item) => {
return {
label: item.projectName,
value: previewPath(item.id),
};
});
};
onMounted(() => {
routeOptions.value = [];
getRouteList();
getPublishedPageList();
});
</script>
<style lang="scss" scoped>
.event-item {