添加部分钩子函数,便于代码维护
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import {
|
||||
baQiao,
|
||||
beiLin,
|
||||
changAn,
|
||||
gaoLing,
|
||||
huYi,
|
||||
lanTian,
|
||||
lianHu,
|
||||
linTong,
|
||||
weiYang,
|
||||
xinCheng,
|
||||
yanLiang,
|
||||
yanTa,
|
||||
zhouZhi,
|
||||
} from '@/assets';
|
||||
import { Color } from 'cesium';
|
||||
|
||||
export const useAdministrativeDivision = () => {
|
||||
const areas = [
|
||||
baQiao,
|
||||
beiLin,
|
||||
changAn,
|
||||
gaoLing,
|
||||
huYi,
|
||||
lanTian,
|
||||
lianHu,
|
||||
linTong,
|
||||
weiYang,
|
||||
xinCheng,
|
||||
yanLiang,
|
||||
yanTa,
|
||||
zhouZhi,
|
||||
];
|
||||
const areasId = [
|
||||
'baqiao',
|
||||
'beilin',
|
||||
'changan',
|
||||
'gaoling',
|
||||
'huyi',
|
||||
'lantian',
|
||||
'lianhu',
|
||||
'lintong',
|
||||
'weiyang',
|
||||
'xincheng',
|
||||
'yanliang',
|
||||
'yanta',
|
||||
'zhouzhi',
|
||||
];
|
||||
const areasColor = [
|
||||
new Color(255 / 255, 153 / 255, 0 / 255),
|
||||
new Color(255 / 255, 51 / 255, 102 / 255),
|
||||
new Color(0 / 255, 178 / 255, 255 / 255),
|
||||
new Color(102 / 255, 255 / 255, 102 / 255),
|
||||
new Color(204 / 255, 102 / 255, 255 / 255),
|
||||
new Color(255 / 255, 204 / 255, 0 / 255),
|
||||
new Color(0 / 255, 204 / 255, 153 / 255),
|
||||
new Color(255 / 255, 102 / 255, 102 / 255),
|
||||
new Color(102 / 255, 153 / 255, 255 / 255),
|
||||
new Color(255 / 255, 178 / 255, 102 / 255),
|
||||
new Color(153 / 255, 255 / 255, 204 / 255),
|
||||
new Color(255 / 255, 153 / 255, 204 / 255),
|
||||
new Color(190 / 255, 255 / 255, 232 / 255),
|
||||
];
|
||||
const areaTransparency = 0.3;
|
||||
const labelTransparency = 1;
|
||||
|
||||
return { areas, areasId, areasColor, areaTransparency, labelTransparency };
|
||||
};
|
||||
@@ -0,0 +1,78 @@
|
||||
import config from '@/config/config.json';
|
||||
import { CesiumUtilsSingleton } from '@/utils/cesium/CesiumUtils';
|
||||
import { ScreenSpaceEventType } from 'cesium';
|
||||
import type { ClickObject } from '@/types/cesium/ClickObject';
|
||||
import { useLoadingInformationStore } from '@/stores/useLoadingInformation';
|
||||
export const useMap = () => {
|
||||
// 注册全局点击监听器
|
||||
const registerAndClickOnTheListener = () => {
|
||||
CesiumUtilsSingleton.clickLayer((pickedObject: ClickObject) => {
|
||||
if (
|
||||
pickedObject &&
|
||||
pickedObject.id &&
|
||||
typeof pickedObject.id === 'string'
|
||||
) {
|
||||
const matchResult = pickedObject.id.match(/\d+$/);
|
||||
const id = matchResult ? parseInt(matchResult[0]) : -1;
|
||||
|
||||
// 当id改变时候,重置状态
|
||||
if (
|
||||
useLoadingInformationStore().getHiddenPointId() !== id &&
|
||||
useLoadingInformationStore().getRiskPointId() !== id
|
||||
) {
|
||||
useLoadingInformationStore().resetStatue();
|
||||
}
|
||||
|
||||
// 点击对象
|
||||
useLoadingInformationStore().setClickObject(pickedObject);
|
||||
|
||||
// 隐患点
|
||||
if (pickedObject.id.startsWith(config.prefix.hiddenDangerPointId)) {
|
||||
useLoadingInformationStore().setHiddenPointId(id);
|
||||
}
|
||||
|
||||
// 风险点
|
||||
else if (pickedObject.id.startsWith(config.prefix.riskPointId)) {
|
||||
useLoadingInformationStore().setRiskPointId(id);
|
||||
} else {
|
||||
// 重置状态
|
||||
useLoadingInformationStore().resetStatue();
|
||||
}
|
||||
} else {
|
||||
// 重置状态
|
||||
useLoadingInformationStore().resetStatue();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 注册全局滚轮监听器
|
||||
const registerAScrollListener = () => {
|
||||
CesiumUtilsSingleton.getViewer()!.scene.canvas.addEventListener(
|
||||
'wheel',
|
||||
() => {
|
||||
// 设置最小最大高度
|
||||
CesiumUtilsSingleton.setHeightLimits();
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
// 当行政区超出页面时,自动拉回视角
|
||||
const automaticallyAdjustThePerspective = () => {
|
||||
CesiumUtilsSingleton.outOverView();
|
||||
};
|
||||
|
||||
// 禁止事件
|
||||
const prohibitedEvents = () => {
|
||||
// 禁止全局默认双击事件
|
||||
CesiumUtilsSingleton.getViewer()?.cesiumWidget.screenSpaceEventHandler.removeInputAction(
|
||||
ScreenSpaceEventType.LEFT_DOUBLE_CLICK
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
registerAndClickOnTheListener,
|
||||
registerAScrollListener,
|
||||
automaticallyAdjustThePerspective,
|
||||
prohibitedEvents,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
debrisFlowIcon,
|
||||
flashFloodIcon,
|
||||
landslideIcon,
|
||||
waterLoggingIcon,
|
||||
} from '@/assets';
|
||||
|
||||
export const useHiddenPoint = () => {
|
||||
const field = {
|
||||
fieldCode: '野外编号',
|
||||
disasterName: '灾害点名称',
|
||||
position: '位置',
|
||||
disasterType: '灾害类型',
|
||||
scaleGrade: '规模等级',
|
||||
riskGrade: '风险等级',
|
||||
};
|
||||
|
||||
function getDisasterIcon(disasterType?: string): string {
|
||||
switch (disasterType) {
|
||||
case '滑坡':
|
||||
return landslideIcon;
|
||||
case '泥石流':
|
||||
return debrisFlowIcon;
|
||||
case '内涝':
|
||||
return waterLoggingIcon;
|
||||
case '山洪':
|
||||
return flashFloodIcon;
|
||||
default:
|
||||
throw new Error(`未知的灾害类型: ${disasterType}`);
|
||||
}
|
||||
}
|
||||
|
||||
return { field, getDisasterIcon };
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
import { riskAreaIcon } from '@/assets';
|
||||
|
||||
export const useRiskPoint = () => {
|
||||
// 信息框标题
|
||||
const informationBoxTitle = '风险区域';
|
||||
|
||||
const field = {
|
||||
riskName: '风险区名称',
|
||||
unitCode: '统一编号',
|
||||
housing: '住房(间)',
|
||||
permanentPopulation: '常住人口(人)',
|
||||
residentCounts: '居民户数(户)',
|
||||
riskProperty: '威胁财产(万元)',
|
||||
inspectorName: '巡查员姓名',
|
||||
inspectorTele: '巡查员手机号',
|
||||
position: '位置',
|
||||
lon: '经度',
|
||||
lat: '纬度',
|
||||
};
|
||||
|
||||
function getDisasterIcon(): string {
|
||||
return riskAreaIcon;
|
||||
}
|
||||
|
||||
return { informationBoxTitle, field, getDisasterIcon };
|
||||
};
|
||||
@@ -4,7 +4,7 @@ import { HiddenPointType } from '@/types/common/DisasterType';
|
||||
import type { PaginationType } from '@/types/common/PaginationType';
|
||||
|
||||
// 灾害链影响点列表钩子函数
|
||||
export function useRainDisasterChain() {
|
||||
export const useRainDisasterChain = () => {
|
||||
// 搜索条件
|
||||
const conditions = ref({
|
||||
tableData: '',
|
||||
@@ -70,4 +70,4 @@ export function useRainDisasterChain() {
|
||||
changeConditions,
|
||||
changeCurrentPage,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
} from '@/assets';
|
||||
|
||||
// 引入图例钩子函数
|
||||
export function useRainLegend() {
|
||||
export const useRainLegend = () => {
|
||||
// 图例数据
|
||||
const legendList = [
|
||||
{ name: '滑坡隐患点', link: landslideIcon },
|
||||
@@ -18,4 +18,4 @@ export function useRainLegend() {
|
||||
];
|
||||
|
||||
return { legendList };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
export const useIndex = () => {
|
||||
const route = useRoute();
|
||||
|
||||
const topNavMap = [
|
||||
{ title: '暴雨灾害链', name: 'rainstorm', query: { identification: 1 } },
|
||||
{ title: '地震灾害链', name: 'earthquake', query: { identification: 2 } },
|
||||
{ title: '多灾种灾害链分析', name: 'index', query: { identification: 3 } },
|
||||
{ title: '灾害链情景推演', name: 'index', query: { identification: 4 } },
|
||||
{ title: '数据管理', name: 'index', query: { identification: 5 } },
|
||||
{ title: '文件管理', name: 'index', query: { identification: 6 } },
|
||||
];
|
||||
|
||||
// 判断当前导航项是否激活
|
||||
const isActive = (identification: number) => {
|
||||
const targetId = identification.toString();
|
||||
let currentId = route.query.identification;
|
||||
if (!currentId) return targetId === '1';
|
||||
if (Array.isArray(currentId)) currentId = currentId[0];
|
||||
return currentId === targetId || route.query.identification === targetId;
|
||||
};
|
||||
|
||||
return { topNavMap, isActive };
|
||||
};
|
||||
Reference in New Issue
Block a user