1771 lines
48 KiB
Vue
1771 lines
48 KiB
Vue
<template>
|
||
<div v-if="renderContent" v-html="renderContent"></div>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { computed } from "vue";
|
||
import moment from "moment";
|
||
// TODO: 请根据实际项目路径替换以下导入
|
||
// import { getThemee } from '@/utils/JdColor';
|
||
// import { transUnitRender, transUnit, getUnitConfigByCode } from '@/utils/unit.config';
|
||
// import { Session } from '@/utils/session'; // 假设的路径
|
||
|
||
// --- 占位工具函数 (请替换为真实实现) ---
|
||
const getThemee = (key: string) => {
|
||
// 模拟返回颜色配置
|
||
return { name: key, color: "#333", unit: "" };
|
||
};
|
||
|
||
const transUnitRender = (val: any, type: string, code: string) => {
|
||
if (val == null) return "-";
|
||
return val; // 简单返回,实际应进行单位转换
|
||
};
|
||
|
||
const transUnit = (val: any, type: string, code: string) => {
|
||
if (val == null) return "-";
|
||
return val;
|
||
};
|
||
|
||
const getUnitConfigByCode = (type: string, code: string) => {
|
||
// 模拟返回单位配置
|
||
const units: Record<string, string> = {
|
||
ZJRL: "MW",
|
||
FDLYKW: "亿kW·h",
|
||
QI: "m³/s",
|
||
QO: "m³/s",
|
||
QECLIMIT: "m³/s",
|
||
INTEMP: "℃",
|
||
OUTTEMP: "℃",
|
||
WTMP: "℃",
|
||
WEI: "尾",
|
||
};
|
||
return { unit: units[code] || "" };
|
||
};
|
||
|
||
const Session = {
|
||
getToken: () => ({ accessToken: "your-token-here" }), // 模拟 Token
|
||
getAppCode: () => "hbb", // 模拟 App Code
|
||
};
|
||
|
||
// --- 常量定义 ---
|
||
const eqtpList: Record<string, string> = {
|
||
"1": "生态放流孔",
|
||
"2": "生态放流闸",
|
||
"3": "生态放流洞",
|
||
"4": "生态放流管",
|
||
"5": "基荷发电",
|
||
"6": "生态机组",
|
||
};
|
||
|
||
const dwtpList: Record<string, string> = {
|
||
DW_1: "多层式进水口",
|
||
DW_2: "叠梁门式进水口",
|
||
DW_3: "翻板门式进水口",
|
||
DW_4: "套筒式进水口",
|
||
DW_5: "前置挡墙",
|
||
DW_6: "隔水幕墙",
|
||
DW_9: "其他设施",
|
||
};
|
||
|
||
const fptpList: Record<string, string> = {
|
||
FP_1: "鱼道",
|
||
FP_2: "仿自然通道",
|
||
FP_3: "集运鱼系统",
|
||
FP_4: "升鱼机",
|
||
FP_5: "其它过鱼方式",
|
||
};
|
||
|
||
const locationList: Record<string, string> = {
|
||
"1": "库尾",
|
||
"2": "库中",
|
||
"3": "坝前",
|
||
"4": "坝下",
|
||
};
|
||
|
||
const allYs = [
|
||
"CHLA",
|
||
"CL",
|
||
"CLARITY",
|
||
"CODCR",
|
||
"CODMN",
|
||
"COND",
|
||
"CYANO",
|
||
"DOX",
|
||
"FCG",
|
||
"FID",
|
||
"LAS",
|
||
"NH3N",
|
||
"NO3",
|
||
"PH",
|
||
"S2",
|
||
"SE",
|
||
"TN",
|
||
"TP",
|
||
"TU",
|
||
"WTMP",
|
||
"ZN",
|
||
];
|
||
|
||
const app = Session.getAppCode();
|
||
const timegj = [moment().subtract(7, "days").format("MM-DD"), moment().format("MM-DD")];
|
||
const env = (window as any).__env__;
|
||
|
||
// --- Props 定义 ---
|
||
interface IconDivProps {
|
||
ennm?: string;
|
||
stnm?: string;
|
||
ttpwr?: string | number;
|
||
yrge?: string | number;
|
||
anchoPointState?: string;
|
||
sttpMap?: string;
|
||
tm?: string;
|
||
wwqtg?: string;
|
||
wqGrd?: string;
|
||
sfdb?: string;
|
||
stlc?: string;
|
||
position?: string;
|
||
eqtp?: string;
|
||
limit?: string;
|
||
qo?: string;
|
||
qi?: string;
|
||
normz?: string;
|
||
rz?: string;
|
||
ddz?: string;
|
||
dz?: string;
|
||
status?: string;
|
||
inTemp?: string;
|
||
outTemp?: string;
|
||
temperature?: string;
|
||
fishList?: any[];
|
||
list?: any[];
|
||
bldstt?: string;
|
||
development?: string;
|
||
targetNum?: string;
|
||
actualNum?: string;
|
||
rvnm?: string;
|
||
typeNum?: string;
|
||
rescueNum?: string;
|
||
ph?: string;
|
||
tp?: string;
|
||
tn?: string;
|
||
lgtd?: number;
|
||
lttd?: number;
|
||
targetCount?: string;
|
||
buildCount?: string;
|
||
location?: string;
|
||
dtin?: number | string;
|
||
stdSstate?: number | string;
|
||
stdSstateName?: string;
|
||
dtinName?: string;
|
||
lcjStatus?: number | string;
|
||
lcjStatusName?: string;
|
||
bldsttCcode?: string;
|
||
lastTmEngEqDataVo?: any;
|
||
wtvtInfo?: any;
|
||
deviceType?: string;
|
||
enfc?: number;
|
||
rvcdName?: string;
|
||
wqGrdName?: string;
|
||
wwqtgName?: string;
|
||
year?: string;
|
||
targetFtp?: string;
|
||
actualFtp?: string;
|
||
qecLimit?: any;
|
||
vlsr?: string;
|
||
fhstnm?: string;
|
||
warnDataList?: any[];
|
||
warnStateName?: string;
|
||
dtmel?: string;
|
||
logo?: string;
|
||
name?: string;
|
||
ftp?: string;
|
||
z?: string;
|
||
q?: string;
|
||
v?: string;
|
||
sttpName?: string;
|
||
aiSttpName?: string;
|
||
reachname?: string;
|
||
wt?: string;
|
||
yyyy?: string;
|
||
stqCount?: number;
|
||
wqCount?: number;
|
||
zcount?: number;
|
||
wtCount?: number;
|
||
popName?: string;
|
||
isHover?: boolean;
|
||
}
|
||
|
||
// const props = defineProps<IconDivProps>();
|
||
const props = {
|
||
sttp: "ENG",
|
||
stcd: "008660211200000001",
|
||
lgtd: 98.958315,
|
||
lttd: 30.754818,
|
||
dtmel: 3793.292,
|
||
anchoPointState: "large_eng_built",
|
||
// anchoPointState: "mid_eng_built",
|
||
|
||
sttpMap: "ENG",
|
||
titleName: "叶巴滩",
|
||
distance: 50000000,
|
||
rvcd: "SJLY46",
|
||
addvcd: "542123",
|
||
baseId: "01",
|
||
rstcds: null,
|
||
sttpCode: "ENG",
|
||
ennm: "叶巴滩",
|
||
rvnm: null,
|
||
ttpwr: 2240,
|
||
ddz: null,
|
||
normz: 2889,
|
||
qecLimit: null,
|
||
yrge: 91.6,
|
||
ifEngSpecial: false,
|
||
avq: 839,
|
||
endInstalledType: 1,
|
||
lastTmEngEqDataVo: {
|
||
stcd: "008660211200000001",
|
||
stnm: "叶巴滩",
|
||
tm: "2090-01-01 08:00:00",
|
||
ttpwr: 2240,
|
||
qecLimit: null,
|
||
mwrLimit: null,
|
||
avqLimit: null,
|
||
qecC: null,
|
||
mwrC: null,
|
||
avqC: null,
|
||
normz: 2889,
|
||
ddz: null,
|
||
qi: null,
|
||
qo: null,
|
||
rz: 2889,
|
||
dz: null,
|
||
vlsr: null,
|
||
vlsrTm: null,
|
||
mwrVlsr: null,
|
||
mwrVlsrTm: null,
|
||
},
|
||
logo: null,
|
||
addvcdName: "贡觉县",
|
||
jcdt: null,
|
||
siteStepSort: 0,
|
||
prsc: 1,
|
||
iconRotate: null,
|
||
bldsttCcode: 2,
|
||
rvcdStepSort: 1,
|
||
rscdStepSort: null,
|
||
stnm: "叶巴滩",
|
||
iconCode: "map-dxsdzYijian",
|
||
code: "pointLayer",
|
||
popName: "叶巴滩",
|
||
_id: "ENG_008660211200000001",
|
||
};
|
||
// --- 辅助函数 ---
|
||
|
||
const isNil = (val: any) => val == null;
|
||
|
||
const getStatusHtml = () => {
|
||
const { dtin, stdSstate, stdSstateName, dtinName, lcjStatus, lcjStatusName } = props;
|
||
const _dtin = `${dtin}`;
|
||
const baseId = (window as any).__lyConfigs?.baseId;
|
||
const _stdSstate = baseId === "07" || baseId === "02" ? `${lcjStatus}` : `${stdSstate}`;
|
||
const _stdSstateName =
|
||
baseId === "07" || baseId === "02" ? lcjStatusName : stdSstateName;
|
||
|
||
// if (_dtin === "0") {
|
||
// return `<span>${dtinName || "未接入"}</span>`;
|
||
// } else if (_dtin === "1" && _stdSstate === "1") {
|
||
return `<span style="color: #76C500">${_stdSstateName || "正常运行"}</span>`;
|
||
// } else if (_dtin === "1" && _stdSstate === "3") {
|
||
// return `<span style="color: #FF6B6B">${_stdSstateName || "未正常运行"}</span>`;
|
||
// }
|
||
return `<span>${_stdSstateName || "最近1年无数据"}</span>`;
|
||
};
|
||
|
||
const getLimitSpanHtml = (minVal: any, maxVal: any) => {
|
||
if (!isNil(maxVal) && !isNil(minVal)) {
|
||
return `<span style="color: rgba(255,255,255,0.45)">(${minVal}~${maxVal})</span>`;
|
||
} else if (!isNil(maxVal)) {
|
||
return `<span style="color: rgba(255,255,255,0.45)">(≤${maxVal})</span>`;
|
||
} else if (!isNil(minVal)) {
|
||
return `<span style="color: rgba(255,255,255,0.45)">(≥${minVal})</span>`;
|
||
}
|
||
return "";
|
||
};
|
||
|
||
const needNotShow = (minVal: any, maxVal: any, val: any) => {
|
||
const _min = isNil(minVal) ? null : Number(minVal);
|
||
const _max = isNil(maxVal) ? null : Number(maxVal);
|
||
const _val = isNil(val) ? null : Number(val);
|
||
if (isNil(_val)) return true;
|
||
if (!isNil(_max) && !isNil(_min)) return _val >= _min && _val <= _max;
|
||
if (!isNil(_max)) return _val <= _max;
|
||
if (!isNil(_min)) return _val >= _min;
|
||
return true;
|
||
};
|
||
|
||
const getYsListHtml = () => {
|
||
let html = "";
|
||
allYs.forEach((ys: any) => {
|
||
const _ys = ys.toLowerCase();
|
||
const val = (props as any)[_ys];
|
||
const ystheme = getThemee(ys);
|
||
const ysUpper = ys.toUpperCase();
|
||
|
||
let minVal, maxVal;
|
||
const ysLimit = props; // 假设 props 上直接挂了 min/max 字段,或者需要从特定字段解析
|
||
|
||
// 模拟解析 min/max,实际需根据数据结构调整
|
||
if ((ysLimit as any).min) {
|
||
// 简化处理,实际可能需要 JSON.parse
|
||
minVal = (ysLimit as any).min;
|
||
}
|
||
if ((ysLimit as any).max) {
|
||
maxVal = (ysLimit as any).max;
|
||
}
|
||
|
||
if (!needNotShow(minVal, maxVal, val)) {
|
||
const unit =
|
||
ysUpper === "PH"
|
||
? ""
|
||
: getUnitConfigByCode("WQ_R", ysUpper)?.unit || ystheme?.unit || "";
|
||
html += `
|
||
<li>
|
||
<div class="__label">${ystheme?.name}:</div>
|
||
<span style="color: #E55555">
|
||
${val} ${unit}
|
||
${getLimitSpanHtml(minVal, maxVal)}
|
||
</span>
|
||
</li>
|
||
`;
|
||
}
|
||
});
|
||
return html;
|
||
};
|
||
|
||
const getStateClass = () => {
|
||
let setclass = "";
|
||
if (props?.anchoPointState) {
|
||
if (
|
||
props.anchoPointState.includes("large_eng") ||
|
||
props.anchoPointState.includes("eef_1")
|
||
) {
|
||
setclass = "large_eng";
|
||
} else if (
|
||
props.anchoPointState.includes("mid_eng") ||
|
||
props.anchoPointState.includes("eef_2")
|
||
) {
|
||
setclass = "mid_eng";
|
||
} else {
|
||
setclass = "large_eng";
|
||
}
|
||
} else {
|
||
setclass = "large_eng";
|
||
}
|
||
if (props?.ennm && props.ennm.length > 3) {
|
||
setclass += " smallfont";
|
||
}
|
||
if (props?.ttpwr && `${transUnitRender(props.ttpwr, "Other", "ZJRL")}`.length > 4) {
|
||
setclass += " leftsmallfont";
|
||
}
|
||
if (
|
||
(props?.yrge && `${transUnitRender(props.yrge, "Other", "FDLYKW")}`.length > 4) ||
|
||
(props?.limit && `${props.limit}`.length > 4)
|
||
) {
|
||
setclass += " rightsmallfont";
|
||
}
|
||
return setclass;
|
||
};
|
||
|
||
const getImageUrl = (logo: string) => {
|
||
if (!logo) return "";
|
||
const token = Session.getToken()?.accessToken;
|
||
const fsAddress = (window as any).__fsAddress || "";
|
||
return `${fsAddress}?${logo}&view=jpg&token=${token}`;
|
||
};
|
||
|
||
// --- 核心渲染逻辑 ---
|
||
|
||
const renderContent = computed(() => {
|
||
const p = props;
|
||
const dzFdl = getUnitConfigByCode("Other", "FDLYKW")?.unit;
|
||
const dzZjrl = getUnitConfigByCode("Other", "ZJRL")?.unit;
|
||
|
||
// 模拟 Utility.parseQueryString
|
||
const urlParams = new URLSearchParams(window.location.search);
|
||
const page = urlParams.get("page") || "";
|
||
|
||
let newsttpMap = p.sttpMap;
|
||
// if (newsttpMap == "ENG") {
|
||
// if (
|
||
// (p?.anchoPointState?.indexOf("_eng_") !== -1 && !p?.isHover) ||
|
||
// p?.anchoPointState?.indexOf("eef_") !== -1
|
||
// ) {
|
||
// newsttpMap = "eng2";
|
||
// } else if (page == "shuiWenFenXi") {
|
||
// newsttpMap = "eng3";
|
||
// } else if (page == "renGongFangLiu") {
|
||
// newsttpMap = "eng4";
|
||
// }
|
||
// }
|
||
console.log(newsttpMap);
|
||
|
||
let html = "";
|
||
|
||
switch (newsttpMap) {
|
||
case "ENG":
|
||
html = `
|
||
<div class=" ${"iconEngDiv_" + props.anchoPointState} ${
|
||
"iconEngDiv-" + props.anchoPointState + "-" + props?.bldsttCcode
|
||
}">
|
||
<div class="iconDivTitle">${p?.ennm || p?.stnm}</div>
|
||
<div class="iconDivContent">
|
||
<div class="iconDivLeft">
|
||
<div>${transUnitRender(p?.ttpwr, "Other", "ZJRL")}</div>
|
||
<div style="font-size: 12px">${dzZjrl || "万kW"}</div>
|
||
</div>
|
||
<div class="iconDivRight">
|
||
<div>${transUnitRender(p?.yrge, "Other", "FDLYKW")}</div>
|
||
<div style="font-size: 12px">${dzFdl || "亿kW·h"}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "eng1":
|
||
if (p?.anchoPointState == "eef_1_none" || p?.anchoPointState == "eef_2_none") {
|
||
html = `
|
||
<div class="iconDiv ${getStateClass()} ${p?.anchoPointState || ""}">
|
||
<div class="iconDivTitle">${p?.ennm || p?.stnm}</div>
|
||
<div class="iconDivContent">暂无数据</div>
|
||
</div>
|
||
`;
|
||
} else {
|
||
html = `
|
||
<div class="iconDiv ${getStateClass()} ${p?.anchoPointState || ""}">
|
||
<div class="iconDivTitle">${p?.ennm || p?.stnm}</div>
|
||
<div class="iconDivContent">
|
||
<div class="iconDivLeft">${transUnitRender(p?.ttpwr, "Other", "ZJRL")}</div>
|
||
<div class="iconDivRight">${p?.limit}</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
}
|
||
break;
|
||
|
||
case "eng2": {
|
||
let lastTmEngEqDataVo: any = {};
|
||
if (typeof p?.lastTmEngEqDataVo == "string") {
|
||
lastTmEngEqDataVo = JSON.parse(p.lastTmEngEqDataVo);
|
||
} else {
|
||
lastTmEngEqDataVo = p.lastTmEngEqDataVo;
|
||
}
|
||
if (!lastTmEngEqDataVo?.qo && !lastTmEngEqDataVo?.qi) return "";
|
||
|
||
const baseId = (window as any).__lyConfigs?.baseId;
|
||
const qiHtml =
|
||
baseId !== "02" && lastTmEngEqDataVo?.qi != null && lastTmEngEqDataVo?.qi !== ""
|
||
? `
|
||
<li>
|
||
<div class="__label">入库流量:</div>
|
||
<div class="__info">
|
||
${transUnitRender(lastTmEngEqDataVo?.qi, "HYDROPW_R", "QI")} ${
|
||
getUnitConfigByCode("HYDROPW_R", "QI")?.unit
|
||
}
|
||
</div>
|
||
</li>
|
||
`
|
||
: "";
|
||
|
||
const qecLimitVal = lastTmEngEqDataVo?.qecLimit;
|
||
let qecLimitDisplay = "-";
|
||
if (qecLimitVal == 0 || qecLimitVal == null) {
|
||
qecLimitDisplay = app == "hbb" ? "-" : "无生态流量要求";
|
||
} else {
|
||
qecLimitDisplay = `${transUnitRender(qecLimitVal, "HYDROPW_R", "QECLIMIT")} ${
|
||
getUnitConfigByCode("HYDROPW_R", "QECLIMIT")?.unit
|
||
}`;
|
||
}
|
||
|
||
const vlsrHtml = lastTmEngEqDataVo?.vlsr
|
||
? `<li><div>限值来源:${lastTmEngEqDataVo?.vlsr}</div></li>`
|
||
: "";
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-middle">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm}</div>
|
||
<div class="map-tooltip-sub">${lastTmEngEqDataVo?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
${qiHtml}
|
||
<li>
|
||
<div class="__label">${baseId == "02" ? "生态流量:" : "出库流量:"}</div>
|
||
<div class="__info">
|
||
${transUnitRender(lastTmEngEqDataVo?.qo, "HYDROPW_R", "QO")} ${
|
||
getUnitConfigByCode("HYDROPW_R", "QO")?.unit
|
||
}
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">生态流量限值:</div>
|
||
<div class="__info">${qecLimitDisplay}</div>
|
||
</li>
|
||
${vlsrHtml}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "eng3":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm}</div>
|
||
<div class="map-tooltip-sub">${p?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">入库水温:</div>
|
||
<div class="__info">
|
||
${transUnitRender(p?.inTemp, "WTRV_R", "INTEMP") ?? "-"} ${
|
||
getUnitConfigByCode("WTRV_R", "INTEMP")?.unit
|
||
}
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">出库水温:</div>
|
||
<div class="__info">
|
||
${transUnitRender(p?.outTemp, "WTRV_R", "OUTTEMP") ?? "-"} ${
|
||
getUnitConfigByCode("WTRV_R", "OUTTEMP")?.unit
|
||
}
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "eng4": {
|
||
let devStatusHtml = "<span>数据未接入</span>";
|
||
if (p?.development == "未完成")
|
||
devStatusHtml = '<span style="color: #FF6B6B">未完成</span>';
|
||
else if (p?.development == "未填报")
|
||
devStatusHtml = '<span style="color: #F0CC1D">未填报</span>';
|
||
else if (p?.development == "已完成")
|
||
devStatusHtml = '<span style="color: #76C500">已完成</span>';
|
||
|
||
const targetInfo = p.targetNum
|
||
? `${p?.targetFtp || "-"}种/${p?.targetNum || "-"}万尾`
|
||
: "--";
|
||
const actualInfo = p.actualNum
|
||
? `${p?.actualFtp || "-"}种/${p?.actualNum || "-"}万尾`
|
||
: "--";
|
||
|
||
html = `
|
||
<div class="map-tooltip">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm || p?.popName}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">年份:</div>
|
||
<div class="__info">${p?.year || "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">目标放流种类/数量:</div>
|
||
<div class="__info">${targetInfo}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">实际放流种类数量:</div>
|
||
<div class="__info">${actualInfo}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">工作开展情况:</div>
|
||
<div class="__info">${devStatusHtml}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "VA": {
|
||
const hbbLi =
|
||
app == "hbb"
|
||
? `
|
||
<li>
|
||
<div class="__label">接入状态:</div>
|
||
<div class="__info">${
|
||
p?.dtin === 0 ? "未接入" : p?.dtin === 1 ? "已接入" : "-"
|
||
}</div>
|
||
</li>
|
||
`
|
||
: "";
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">建设状态:</div>
|
||
<div class="__info">
|
||
${
|
||
p?.bldsttCcode == "0"
|
||
? "未建"
|
||
: p?.bldsttCcode == "1"
|
||
? "在建"
|
||
: p?.bldsttCcode == "2"
|
||
? "已建"
|
||
: "-"
|
||
}
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm}</div>
|
||
</li>
|
||
${hbbLi}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "DW":
|
||
case "DW_1":
|
||
case "DW_2":
|
||
case "DW_3":
|
||
case "DW_4":
|
||
case "DW_5":
|
||
case "DW_6":
|
||
case "DW_9":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">设施类型:</div>
|
||
<div class="__info">${p?.sttpMap ? dwtpList[p.sttpMap] || "-" : "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">运行状态:</div>
|
||
<div class="__info">${getStatusHtml()}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "FP":
|
||
case "FP_1":
|
||
case "FP_2":
|
||
case "FP_3":
|
||
case "FP_4":
|
||
case "FP_5":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">设施类型:</div>
|
||
<div class="__info">${p?.dwtp ? fptpList[p.dwtp] : "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">建设状态:</div>
|
||
<div class="__info">${
|
||
p?.bldstt == "0"
|
||
? "未建"
|
||
: p?.bldstt == "1"
|
||
? "在建"
|
||
: p?.bldstt == "2"
|
||
? "已建"
|
||
: "-"
|
||
}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">运行状态:</div>
|
||
<div class="__info">${getStatusHtml()}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "FB":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">建设状态:</div>
|
||
<div class="__info">${
|
||
p?.bldstt == "0"
|
||
? "未建"
|
||
: p?.bldstt == "1"
|
||
? "在建"
|
||
: p?.bldstt == "2"
|
||
? "已建"
|
||
: "-"
|
||
}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">运行状态:</div>
|
||
<div class="__info">${getStatusHtml()}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">服务电站:</div>
|
||
<div class="__info">${p?.ennm}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "EQ":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">设施类型:</div>
|
||
<div class="__info">${p?.eqtp ? eqtpList[p.eqtp] : "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 110px; width: 110px">生态流量限值:</div>
|
||
<div class="__info">${p?.qecLimit}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "WT": {
|
||
let wtvtInfo: any = {};
|
||
if (typeof p?.wtvtInfo == "string") {
|
||
wtvtInfo = JSON.parse(p.wtvtInfo);
|
||
} else {
|
||
wtvtInfo = p.wtvtInfo;
|
||
}
|
||
const tt = p?.deviceType == "1" ? "水深" : "高程";
|
||
const sizeClass = p.enfc === 0 ? "small" : "middle";
|
||
|
||
if (p.enfc === 0) {
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-${sizeClass}">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm ?? "-"}</div>
|
||
<div class="map-tooltip-sub">${p?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">水温:</div>
|
||
<div class="__info">
|
||
${transUnit(p?.temperature, "WQ_R", "WTMP") ?? "-"}
|
||
${getUnitConfigByCode("WQ_R", "WTMP")?.unit}
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
} else {
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-${sizeClass}">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<div class="map-tooltip-sub">${wtvtInfo?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">
|
||
${tt} ${transUnit(wtvtInfo?.minWthg, "WQ_R", "WTMP") || "-"}m:
|
||
</div>
|
||
<div class="__info">
|
||
${transUnit(wtvtInfo?.minWthgWt, "WQ_R", "WTMP")}
|
||
${getUnitConfigByCode("WQ_R", "WTMP")?.unit}
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">平均水温:</div>
|
||
<div class="__info">
|
||
${transUnit(wtvtInfo?.avgWt, "WQ_R", "WTMP")}
|
||
${getUnitConfigByCode("WQ_R", "WTMP")?.unit}
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">
|
||
${tt} ${transUnit(wtvtInfo?.maxWthg, "WQ_R", "WTMP") || "-"}m:
|
||
</div>
|
||
<div class="__info">
|
||
${transUnit(wtvtInfo?.maxWthgWt, "WQ_R", "WTMP")}
|
||
${getUnitConfigByCode("WQ_R", "WTMP")?.unit}
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
}
|
||
break;
|
||
}
|
||
|
||
case "FH": {
|
||
const baseId = (window as any).__lyConfigs?.baseId;
|
||
const ennmLi =
|
||
baseId === "all"
|
||
? ""
|
||
: `
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm || "-"}</div>
|
||
</li>
|
||
`;
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">所在河流:</div>
|
||
<div class="__info">${p?.rvcdName || "-"}</div>
|
||
</li>
|
||
${ennmLi}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "WQFB":
|
||
case "WQ": {
|
||
const wqGrdTheme = getThemee(p.wqGrdName);
|
||
const wwqtgTheme = getThemee(p.wwqtgName);
|
||
|
||
html = `
|
||
<div class="map-tooltip">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p.stnm}</div>
|
||
<ul class="map-tooltip-sub map-tooltip-list">
|
||
<li>
|
||
<div class="__label">监测时间:</div>
|
||
<div class="__info">${p?.tm ?? "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">水质等级:</div>
|
||
<div class="__info">
|
||
<span style="color: ${wqGrdTheme?.color}">${
|
||
wqGrdTheme?.name ?? "-"
|
||
}类</span>
|
||
(目标等级 <span style="color: ${wwqtgTheme?.color}">${
|
||
wwqtgTheme?.name ?? "-"
|
||
}类</span>)
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
${getYsListHtml()}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "WE": {
|
||
const mergedFishList: any[] = [];
|
||
const fishList =
|
||
typeof p.fishList === "string" ? JSON.parse(p.fishList) : p.fishList;
|
||
fishList?.forEach((item: any) => {
|
||
const existingItem = mergedFishList.find(
|
||
(mergedItem: any) => mergedItem.fishName === item.fishName
|
||
);
|
||
if (existingItem) {
|
||
existingItem.count += item.count;
|
||
} else {
|
||
mergedFishList.push({ ...item });
|
||
}
|
||
});
|
||
|
||
let fishItemsHtml = "";
|
||
if (mergedFishList.length > 0) {
|
||
mergedFishList.slice(0, 3).forEach((item: any) => {
|
||
fishItemsHtml += `
|
||
<li>
|
||
<div class="__label">${item.fishName}:</div>
|
||
<div class="__info">
|
||
${transUnitRender(item.count, "Other", "WEI")}
|
||
${getUnitConfigByCode("Other", "WEI")?.unit}
|
||
</div>
|
||
</li>
|
||
`;
|
||
});
|
||
} else {
|
||
fishItemsHtml = "<li>暂无数据</li>";
|
||
}
|
||
|
||
if (mergedFishList.length > 3) {
|
||
fishItemsHtml += `<li><div style="text-align: center; flex: 0 0 100%; width: 100%">...</div></li>`;
|
||
}
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-middle">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p.stnm}</div>
|
||
<ul class="map-tooltip-sub map-tooltip-list __list2">
|
||
<li>
|
||
<div class="__label">调查时间:</div>
|
||
<div class="__info">${p?.tm ?? "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm ?? "-"} </div>
|
||
</li>
|
||
</ul>
|
||
<div class="map-tooltip-sub1">
|
||
<span class="__content">调查鱼类</span>
|
||
</div>
|
||
<ul class="map-tooltip-content map-tooltip-list __noborder __small __list2">
|
||
${fishItemsHtml}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "WE_FISH": {
|
||
const fishData =
|
||
typeof p.fishList === "string" ? JSON.parse(p.fishList) : p.fishList;
|
||
const imgUrl = getImageUrl(p.logo);
|
||
const imgHtml = p.logo
|
||
? `<img style="width: 100px; object-fit: cover; margin-right: 10px" src="${imgUrl}" alt="" />`
|
||
: `<div style="width: 100px; object-fit: cover; margin-right: 10px">暂无图片</div>`;
|
||
|
||
let yearsHtml = "";
|
||
fishData?.forEach((item: any) => {
|
||
yearsHtml += `
|
||
<div class="__label">
|
||
${item.year}:${transUnitRender(item.count, "Other", "WEI")}
|
||
${getUnitConfigByCode("Other", "WEI")?.unit}
|
||
</div>
|
||
`;
|
||
});
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-middle">
|
||
<div class="map-tooltip-box">
|
||
<div style="display: flex; justify-content: center">
|
||
${imgHtml}
|
||
<div style="text-align: left">
|
||
<div>${fishData?.[0]?.fishName}</div>
|
||
<div>${yearsHtml}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "TE": {
|
||
let listItemsHtml = "";
|
||
if (p.list?.length > 0) {
|
||
p.list.slice(0, 3).forEach((item: any) => {
|
||
listItemsHtml += `
|
||
<li>
|
||
<div class="__label">${item.name}:</div>
|
||
<div class="__info">${item.amount}k㎡</div>
|
||
</li>
|
||
`;
|
||
});
|
||
} else {
|
||
listItemsHtml = "<li>暂无数据</li>";
|
||
}
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-middle">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p.stnm}</div>
|
||
<ul class="map-tooltip-sub map-tooltip-list __list2">
|
||
<li>
|
||
<div class="__label">调查时间:</div>
|
||
<div class="__info">${p?.tm ?? "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p?.ennm ?? "-"} </div>
|
||
</li>
|
||
</ul>
|
||
<div class="map-tooltip-sub1">
|
||
<span class="__content">调查结果</span>
|
||
</div>
|
||
<ul class="map-tooltip-content map-tooltip-list __noborder __small">
|
||
${listItemsHtml}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "VP":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p.stnm}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">建设状态:</div>
|
||
<div class="__info">${
|
||
p.bldsttCcode == "0"
|
||
? "未建"
|
||
: p.bldsttCcode == "1"
|
||
? "在建"
|
||
: p.bldsttCcode == "2"
|
||
? "已建"
|
||
: "-"
|
||
}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">关联电站:</div>
|
||
<div class="__info">${p.ennm}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "ENG_ALARM": {
|
||
const sizeClass = app === "hbb" ? "small" : "middle";
|
||
const timeRange =
|
||
app == "hbb" ? `${p?.yyyy ?? "-"}年` : `${timegj[0]}~${timegj[1]}`;
|
||
|
||
let extraLi = "";
|
||
if (
|
||
env !== "ddh" &&
|
||
env !== "ddhpro" &&
|
||
app !== "hbb" &&
|
||
env !== "ylj" &&
|
||
env !== "yljpro"
|
||
) {
|
||
extraLi += `
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 100px; width: 100px">水位告警:</div>
|
||
<div class="__info${p?.zcount > 0 ? " __warn" : ""}">${
|
||
p?.zcount ?? "-"
|
||
} 次</div>
|
||
</li>
|
||
`;
|
||
}
|
||
if (app !== "hbb" && env !== "ylj" && env !== "yljpro") {
|
||
extraLi += `
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 100px; width: 100px">水温告警:</div>
|
||
<div class="__info${p?.wtCount > 0 ? " __warn" : ""}">${
|
||
p?.wtCount ?? "-"
|
||
} 次</div>
|
||
</li>
|
||
`;
|
||
}
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-${sizeClass}">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p.ennm}</div>
|
||
<div class="map-tooltip-sub1">
|
||
<span class="__content">电站告警统计</span>
|
||
</div>
|
||
<ul class="map-tooltip-content map-tooltip-list __noborder">
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 100px; width: 100px">
|
||
${app == "hbb" ? "统计年份" : "统计时间范围"}:
|
||
</div>
|
||
<div class="__info">${timeRange}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 100px; width: 100px">生态流量告警:</div>
|
||
<div class="__info${p?.stqCount > 0 ? " __warn" : ""}">${
|
||
p?.stqCount ?? "-"
|
||
} 次</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label" style="flex: 0 0 100px; width: 100px">水质告警:</div>
|
||
<div class="__info${p?.wqCount > 0 ? " __warn" : ""}">${
|
||
p?.wqCount ?? "-"
|
||
} 次</div>
|
||
</li>
|
||
${extraLi}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "ylfb":
|
||
html = `
|
||
<div class="map-tooltip">
|
||
<div class="map-tooltip-box">${p?.ftp ?? "-"}</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "ZQ":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm + "流量站"}</div>
|
||
<div class="map-tooltip-sub">${p?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">水位(m):</div>
|
||
<div class="__info">${p?.z ?? "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">流量(m³/s):</div>
|
||
<div class="__info">${p?.q ?? "-"}</div>
|
||
</li>
|
||
<li>
|
||
<div class="__label">流速(m/s):</div>
|
||
<div class="__info">${p?.v ?? "-"}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "VD":
|
||
case "AIVD": {
|
||
const baseId = (window as any).__lyConfigs?.baseId;
|
||
const habitatLi =
|
||
p?.ennm === null && p?.fhstnm === null
|
||
? ""
|
||
: p?.ennm === null
|
||
? `<li><div class="__label">所属栖息地:</div><div class="__info">${p?.fhstnm}</div></li>`
|
||
: baseId === "all"
|
||
? ""
|
||
: `<li><div class="__label">关联电站:</div><div class="__info">${p?.ennm}</div></li>`;
|
||
|
||
html = `
|
||
<div class="map-tooltip">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${
|
||
p?.stnm?.endsWith("视频站") ? p?.stnm : p?.stnm + "视频站"
|
||
}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">监控内容类型:</div>
|
||
<div class="__info">${
|
||
newsttpMap == "VD" ? p?.sttpName : p?.aiSttpName
|
||
}</div>
|
||
</li>
|
||
${habitatLi}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "REACH": {
|
||
const wwqtgTheme = getThemee(p?.wwqtgName);
|
||
const wqGrdTheme = getThemee(p?.wqGrdName);
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.reachname}</div>
|
||
<div class="map-waterQuality-subtitle">
|
||
<div class="map-waterQuality-leftType">
|
||
水质要求<br/>
|
||
<span style="color: ${wwqtgTheme?.color}">${
|
||
wwqtgTheme?.name || "-"
|
||
}</span> 类
|
||
</div>
|
||
<div class="map-waterQuality-rightType">
|
||
监测结果<br/>
|
||
<span style="color: ${wqGrdTheme?.color}">${
|
||
wqGrdTheme?.name || "-"
|
||
}</span> 类
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "WT_ALARM":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm || p?.ennm}</div>
|
||
<div class="map-tooltip-sub">${p?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">水温:</div>
|
||
<div class="__info">${p?.wt ?? "-"} ℃</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "WQ_ALARM": {
|
||
let warnItems = "";
|
||
p.warnDataList?.forEach((item: any) => {
|
||
const theme = getThemee(item.ys);
|
||
warnItems += `
|
||
<li>
|
||
<div class="__label">${theme.name}:</div>
|
||
<div class="__info">
|
||
${item.ssz} ${getUnitConfigByCode("WQ_R", item.ys)?.unit}
|
||
</div>
|
||
</li>
|
||
`;
|
||
});
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.stnm || p?.ennm}</div>
|
||
<div class="map-tooltip-sub">${p?.warnDataList?.[0]?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
${warnItems}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
case "RZ_ALARM":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm}</div>
|
||
<div class="map-tooltip-sub">${p?.tm ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">水位:</div>
|
||
<div class="__info">${p?.rz ?? "-"} m</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "OPERAT_ALARM":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">
|
||
<div class="map-tooltip-title">${p?.ennm || p?.stnm}</div>
|
||
<div class="map-tooltip-sub">${p?.dtmel ?? ""}</div>
|
||
<ul class="map-tooltip-content map-tooltip-list">
|
||
<li>
|
||
<div class="__label">运行情况:</div>
|
||
<div class="__info">${p?.warnStateName ?? "-"}</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "WVA":
|
||
case "FD":
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">${p.stnm}</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
|
||
case "TE_ANIMALS": {
|
||
let _pic: string[] = [];
|
||
if (p.logo) {
|
||
_pic = [p]
|
||
.filter((item: any) => item.logo !== null)
|
||
.map((item: any) => item.logo?.split(","))
|
||
.flat();
|
||
}
|
||
const imgUrl = _pic?.[0] ? getImageUrl(_pic[0]) : "";
|
||
const imgHtml = _pic?.[0]
|
||
? `<img style="width: 100px; object-fit: cover; margin-right: 10px" src="${imgUrl}" alt="" />`
|
||
: `<div style="width: 100px; object-fit: cover; margin-right: 10px">暂无图片</div>`;
|
||
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-middle">
|
||
<div class="map-tooltip-box">
|
||
<div style="display: flex; justify-content: center">
|
||
${imgHtml}
|
||
</div>
|
||
<div style="text-align: center">
|
||
<div>${p?.name}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`;
|
||
break;
|
||
}
|
||
|
||
default:
|
||
html = `
|
||
<div class="map-tooltip map-tooltip-small">
|
||
<div class="map-tooltip-box">${p.ennm || p.stnm}</div>
|
||
</div>
|
||
`;
|
||
}
|
||
|
||
return html ? `<div>${html}</div>` : "";
|
||
});
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.map-tooltip {
|
||
height: auto;
|
||
color: rgba(255, 255, 255, 0.85);
|
||
text-align: center;
|
||
position: relative;
|
||
padding: 24px 0 25px;
|
||
// width: 279px;
|
||
width: 260px;
|
||
|
||
&::after {
|
||
content: "";
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
height: 24px;
|
||
background: url(@/assets/images/mapTip/top@260.png) center no-repeat;
|
||
filter: opacity(75%);
|
||
}
|
||
|
||
&::before {
|
||
content: "";
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
height: 25px;
|
||
background: url(@/assets/images/mapTip/bottom@260.png) center no-repeat;
|
||
filter: opacity(75%);
|
||
}
|
||
|
||
&-box {
|
||
padding: 0 12px;
|
||
&::before {
|
||
content: "";
|
||
position: absolute;
|
||
top: 24px;
|
||
bottom: 25px;
|
||
left: 0;
|
||
right: 0;
|
||
z-index: -1;
|
||
background: url(@/assets/images/mapTip/center@260.png) repeat-y;
|
||
filter: opacity(75%);
|
||
}
|
||
}
|
||
|
||
&-title {
|
||
font-size: 16px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
&-list {
|
||
font-size: 14px;
|
||
line-height: 1.5;
|
||
|
||
> li {
|
||
display: flex;
|
||
text-align: left;
|
||
|
||
.__label {
|
||
flex: 0 0 100px;
|
||
width: 100px;
|
||
text-align: right;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
.__warn {
|
||
color: #ff4d4f;
|
||
}
|
||
}
|
||
}
|
||
|
||
&-content {
|
||
margin-top: 10px;
|
||
border-top: 1px dashed #12aaeb;
|
||
padding: 10px 0;
|
||
margin: 10px 0 0;
|
||
&.__noborder {
|
||
border: none;
|
||
margin-top: 6px;
|
||
}
|
||
&.__small {
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
&-sub {
|
||
margin: 0;
|
||
padding: 10px 0 0;
|
||
text-align: center;
|
||
}
|
||
&-sub1 {
|
||
text-align: center;
|
||
position: relative;
|
||
height: 1px;
|
||
border-bottom: 1px dashed #12aaeb;
|
||
margin-top: 16px;
|
||
.__content {
|
||
position: absolute;
|
||
top: -9px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
background-color: rgb(88 110 134);
|
||
padding: 0 6px;
|
||
font-size: 12px;
|
||
border-radius: 3px;
|
||
white-space: nowrap;
|
||
}
|
||
}
|
||
&.map-tooltip-small {
|
||
width: 175px;
|
||
padding: 18px 0 18px;
|
||
&::after {
|
||
background-image: url(@/assets/images/mapTip/top@175.png);
|
||
height: 18px;
|
||
filter: opacity(75%);
|
||
}
|
||
&::before {
|
||
background-image: url(@/assets/images/mapTip/bottom@175.png);
|
||
height: 18px;
|
||
filter: opacity(75%);
|
||
}
|
||
.map-tooltip-box {
|
||
padding: 0 10px;
|
||
&::before {
|
||
content: "";
|
||
position: absolute;
|
||
top: 18px;
|
||
bottom: 18px;
|
||
left: 0;
|
||
right: 0;
|
||
z-index: -1;
|
||
background-image: url(@/assets/images/mapTip/center@175.png);
|
||
filter: opacity(75%);
|
||
}
|
||
}
|
||
.map-tooltip-list {
|
||
> li {
|
||
.__label {
|
||
flex: 0 0 80px;
|
||
width: 80px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
&.map-tooltip-middle {
|
||
width: 215px;
|
||
padding: 18px 0 18px;
|
||
&::after {
|
||
background-image: url(@/assets/images/mapTip/top@215.png);
|
||
height: 18px;
|
||
filter: opacity(75%);
|
||
}
|
||
&::before {
|
||
background-image: url(@/assets/images/mapTip/bottom@215.png);
|
||
height: 18px;
|
||
filter: opacity(75%);
|
||
}
|
||
.map-tooltip-box {
|
||
padding: 0 10px;
|
||
&::before {
|
||
content: "";
|
||
position: absolute;
|
||
top: 18px;
|
||
bottom: 18px;
|
||
left: 0;
|
||
right: 0;
|
||
z-index: -1;
|
||
background-image: url(@/assets/images/mapTip/center@215.png);
|
||
filter: opacity(75%);
|
||
}
|
||
}
|
||
.map-tooltip-list {
|
||
> li {
|
||
.__label {
|
||
flex: 0 0 110px;
|
||
width: 110px;
|
||
}
|
||
}
|
||
&.__list2 {
|
||
> li {
|
||
.__label {
|
||
flex: 0 0 90px;
|
||
width: 90px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.map-waterQuality-subtitle {
|
||
margin-top: 10px;
|
||
border: 1px solid rgba(77, 129, 167);
|
||
border-bottom: none;
|
||
|
||
.map-waterQuality-leftType,
|
||
.map-waterQuality-rightType {
|
||
width: 50%;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
注意:这里需要引入或复制原 style.less 的内容
|
||
以下仅为示例基础样式,确保结构不崩坏
|
||
*/
|
||
.iconDiv {
|
||
background: rgba(0, 0, 0, 0.6);
|
||
color: #fff;
|
||
border-radius: 4px;
|
||
padding: 5px;
|
||
font-size: 12px;
|
||
&.smallfont {
|
||
font-size: 10px;
|
||
}
|
||
}
|
||
.iconDivContent {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
}
|
||
.map-tooltip {
|
||
font-size: 12px;
|
||
color: #fff;
|
||
&-box {
|
||
border-radius: 4px;
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
||
padding: 8px;
|
||
min-width: 150px;
|
||
}
|
||
&-title {
|
||
margin-bottom: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
&-sub {
|
||
font-size: 10px;
|
||
color: #999;
|
||
margin-bottom: 4px;
|
||
}
|
||
ul {
|
||
list-style: none;
|
||
padding: 10px 0;
|
||
margin: 0;
|
||
li {
|
||
display: flex;
|
||
margin-bottom: 2px;
|
||
.__label {
|
||
flex-shrink: 0;
|
||
color: #fff;
|
||
}
|
||
.__info {
|
||
word-break: break-all;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// 电站 - 大型
|
||
.iconEngDiv_large_eng_built {
|
||
width: 150px;
|
||
height: 164px;
|
||
background-repeat: no-repeat;
|
||
background-size: 100%;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
margin-bottom: 0 !important;
|
||
.iconDivTitle {
|
||
width: 100%;
|
||
height: 48%;
|
||
line-height: 100px;
|
||
text-align: center;
|
||
align-items: center;
|
||
font-size: 16px;
|
||
text-align: center;
|
||
font-weight: normal;
|
||
position: relative;
|
||
&::after {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
height: 2px;
|
||
width: 80%;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
content: " ";
|
||
}
|
||
}
|
||
.iconDivContent {
|
||
width: 100%;
|
||
height: 52%;
|
||
font-size: 11px;
|
||
position: relative;
|
||
&::after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 50%;
|
||
right: 0;
|
||
width: 2px;
|
||
height: 62%;
|
||
transform: translateX(-50%);
|
||
content: " ";
|
||
}
|
||
.iconDivLeft {
|
||
width: 50%;
|
||
padding-left: 34px;
|
||
box-sizing: border-box;
|
||
}
|
||
.iconDivRight {
|
||
width: 50%;
|
||
padding-left: 10px;
|
||
box-sizing: border-box;
|
||
padding-right: 30px;
|
||
div:nth-child(1) {
|
||
text-align: right;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 电站 - 中型
|
||
.iconEngDiv_mid_eng_built {
|
||
width: 150px;
|
||
height: 112px;
|
||
background-repeat: no-repeat;
|
||
background-size: 100%;
|
||
display: flex;
|
||
flex-direction: column;
|
||
margin-bottom: 0 !important;
|
||
.iconDivTitle {
|
||
width: 100%;
|
||
height: 50px;
|
||
line-height: 52px;
|
||
text-align: center;
|
||
align-items: center;
|
||
font-size: 16px;
|
||
text-align: center;
|
||
font-weight: normal;
|
||
}
|
||
.iconDivContent {
|
||
width: 100%;
|
||
height: 36;
|
||
padding: 0 10px;
|
||
font-size: 11px;
|
||
position: relative;
|
||
&::after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 50%;
|
||
right: 0;
|
||
width: 2px;
|
||
height: 100%;
|
||
content: " ";
|
||
}
|
||
.iconDivLeft {
|
||
width: 50%;
|
||
text-align: center;
|
||
}
|
||
.iconDivRight {
|
||
width: 50%;
|
||
text-align: center;
|
||
}
|
||
}
|
||
}
|
||
|
||
.iconEngDiv-large_eng_built-0 {
|
||
background-image: url("@/assets/images/mapTip/map-dxsdzGuihuaNetMonitor.svg");
|
||
color: #859ea3;
|
||
.iconDivTitle,
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #859ea3;
|
||
}
|
||
}
|
||
}
|
||
.iconEngDiv-large_eng_built-1 {
|
||
background-image: url("@/assets/images/mapTip/map-dxsdzZaijianNetMonitor.svg");
|
||
color: #5389b9;
|
||
.iconDivTitle,
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #5389b9;
|
||
}
|
||
}
|
||
}
|
||
.iconEngDiv-large_eng_built-2 {
|
||
background-image: url("@/assets/images/mapTip/map-dxsdzYijianNetMonitor.svg");
|
||
color: #7dbc18;
|
||
.iconDivTitle,
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #95c842;
|
||
}
|
||
}
|
||
}
|
||
.iconEngDiv-mid_eng_built-0 {
|
||
background-image: url("@/assets/images/mapTip/map-zxsdzGuihuaNetMonitor.svg");
|
||
color: #859ea3;
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #859ea3;
|
||
}
|
||
}
|
||
}
|
||
|
||
.iconEngDiv-mid_eng_built-1 {
|
||
background-image: url("@/assets/images/mapTip/map-zxsdzZaijianNetMonitor.svg");
|
||
color: #5389b9;
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #5389b9;
|
||
}
|
||
}
|
||
}
|
||
.iconEngDiv-mid_eng_built-2 {
|
||
background-image: url("@/assets/images/mapTip/map-zxsdzYijianNetMonitor.svg");
|
||
color: #7dbc18;
|
||
.iconDivContent {
|
||
&::after {
|
||
background-color: #95c842;
|
||
}
|
||
}
|
||
}
|
||
</style>
|