ggfwjsc/src/view/sy_mapcopy.vue

3575 lines
95 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="module">
<teleport to="body">
<div id="map" style="width: 100vw; height: 100vh" v-show="openD"></div>
<div class="left" style="width: 517px">
<div class="lyx">
<div class="title">
<div class="title_name">
<span @click="csh()">龙游县</span>
<span v-if="title_jd" @click="to_jd(title_jd)"
>>{{ title_jd }}</span
>
<span v-if="title_cs">>{{ title_cs }}</span>
</div>
</div>
<div
class="content_item2"
v-for="(item, index) in personTotal.slice(0, 1)"
:class="{ choose: item.age == choose.person }"
@click="buten(item)"
:key="index"
>
<div class="content_item_name">{{ ageLess0(item.ages) }}</div>
<div class="content_item_value">{{ item.rksl }}人</div>
</div>
<div class="age-container">
<div class="progress-wrapper">
<div
v-for="(item, index) in PopulationRatio"
:class="[
'progress-container',
{
'above-line': index % 2 !== 0,
'below-line': index % 2 === 0,
},
]"
:style="{
width: item.progress + '%',
backgroundColor: item.bgColor,
}"
>
<span
:style="{ color: item.bgColor }"
:class="[
{
'above-line2': index % 2 !== 0,
'below-line2': index % 2 === 0,
},
]"
>{{ item.progress.toFixed(2) + "%" }}</span
>
<span
style="color: #fff; white-space: nowrap"
:class="[
{
'above-line1': index % 2 !== 0,
'below-line1': index % 2 === 0,
},
]"
>{{ item.age }}</span
>
<div
class="age-line"
:style="{
backgroundColor: item.bgColor,
}"
></div>
<div
class="dot"
:style="{ backgroundColor: item.bgColor }"
></div>
</div>
</div>
</div>
<div class="content">
<div
class="content_item"
v-for="(item, index) in personTotal.slice(1)"
:class="{ choose: item.age == choose.person }"
@click="buten(item)"
:key="index"
>
<div class="content_item_name">{{ ageLess0(item.ages) }}</div>
<div class="content_item_value">
{{ item.rksl }}人
<div class="content_item_percent">({{ item.percent }}%)</div>
</div>
</div>
</div>
</div>
<div class="tsbq">
<div class="title">
<div class="title_name">
<span>特殊标签</span>
</div>
</div>
<div class="content">
<div
class="content_item"
v-for="(item, index) in tsbqTotal"
:class="{ choose: item.id == choose.person }"
@click="buten2(item)"
:key="index"
>
<div class="content_item_name">{{ item.name }}</div>
<div class="content_item_value">{{ item.rksl }}</div>
</div>
</div>
</div>
</div>
<div class="right" style="width: 517px">
<div class="jbggfwq">
<div class="title">
<div class="title_name"><span> 基本公共服务圈</span></div>
</div>
<div class="jbggfwq_content">
<div
class="jbggfwq_content_item"
v-for="(item, index) in jbfwqTotal"
:key="index"
>
<div class="jbggfwq_content_item_left">{{ item.name }}</div>
<div class="jbggfwq_content_item_right">
<div
class="jbggfwq_content_item_right_item"
v-for="itemm in item.child"
:class="{ choose: itemm.jc == choose.fwq }"
@click="changeFwq(itemm.jc, item.name, itemm.jc)"
>
{{ itemm.jc }}
</div>
</div>
</div>
</div>
</div>
<div class="zyys">
<div class="title">
<div class="title_name"><span> 资源要素</span></div>
</div>
<div class="zyys_content">
<div
class="zyys_content_item"
v-for="(item, index) in yaosuTotal"
:class="{
choose: yaosuList.includes(item.name),
wz: item.wz == true,
}"
@click="changeys(item.name)"
:key="index"
>
<img :src="item.img" class="zyys_content_item_left" />
<div class="zyys_content_item_right">{{ item.name }}</div>
</div>
</div>
</div>
</div>
<Dialog
:dialogShow="dialogShow"
:columns="tableType.columns"
:title="tableType.title"
:tableData="tableType.data"
:pagination="pagination"
@close="close"
@handle="handlePagination"
@openMessage="openMessage"
>
<template #jzzt="{ currentCol, currentData }">
<div v-if="currentData.jzzt == 1">居住</div>
<div v-else>未居住</div>
</template>
</Dialog>
<personDetail
class="detail"
style="width: 1920px; height: 1080px"
v-show="!openD"
:message="message"
@closeDetail="closeDetail"
></personDetail>
</teleport>
</div>
</template>
<script setup>
import {
ref,
reactive,
onMounted,
onBeforeMount,
onBeforeUnmount,
computed,
defineProps,
watch,
nextTick,
} from "vue";
import { ElMessage } from "element-plus";
import tools from "@/utils/tools";
import initializeMap from "@/utils/mapInitializer.js";
import http from "@/utils/request.js";
import mapTown from "@/assets/json/ly.json";
// import xkz from "@/assets/json/xkz.json";
import cssj from "@/assets/json/cssj.json";
import j0 from "@/assets/images/map/j0.png";
import j1 from "@/assets/images/map/j1.png";
import j2 from "@/assets/images/map/j2.png";
import j3 from "@/assets/images/map/j3.png";
import j4 from "@/assets/images/map/j4.png";
import j5 from "@/assets/images/map/j5.png";
import j6 from "@/assets/images/map/j6.png";
import j7 from "@/assets/images/map/j7.png";
import j8 from "@/assets/images/map/j8.png";
import j9 from "@/assets/images/map/j9.png";
import j10 from "@/assets/images/map/j10.png";
import dwd from "@/assets/images/map/dwd.png";
import fwqbg1 from "@/assets/images/map/qlv.png";
import fwqbg2 from "@/assets/images/map/qlan.png";
import fwqbg3 from "@/assets/images/map/slan.png";
import fwqbg4 from "@/assets/images/map/slv.png";
import fwqbg5 from "@/assets/images/map/shuang.png";
import fwqbg6 from "@/assets/images/map/qqlv.png";
import b1 from "@/assets/images/map/bb1.png";
import b2 from "@/assets/images/map/b2.png";
import b3 from "@/assets/images/map/b3.png";
import b4 from "@/assets/images/map/b4.png";
import b5 from "@/assets/images/map/b5.png";
import b6 from "@/assets/images/map/b6.png";
import xcbg from "@/assets/images/map/xcbg.png";
import AED from "@/assets/images/map/AED.png";
import Dialog from "./dialog/dialogMapDp.vue";
import personDetail from "./person/index.vue";
//--------定义参数-------
//是否打开人物详情
const openD = ref(true);
const message = ref({});
//存放渲染的地块及图标的数组
const jdm_arr = ref([]); //街道名
const jdm_number_arr = ref([]); //街道名(+数量)
const fwq_list_arr = ref([]); //基本公共服务圈
const cs_qk_arr = ref([]); //社区彩色区块
const cs_name_arr = ref([]); //社区名
const cs_number_name_arr = ref([]); //社区名(+数量)
const cs_choose_arr = ref([]); //单点社区对应的区块(蓝色)
const cs_un_choose_arr = ref([]); //单点社区其他区块(灰色)
const cs_dd_arr = ref([]); //单点社区名
//存放村社区块
const csqk = ref({});
//头部标题
const title_choose = ref("");
const title_jd = ref("");
const title_cs = ref("");
//是否单点社区
const sfdd = ref(false);
const xuanzhongCs = ref([]);
//存放街道
const cfJd = ref("");
//存放村社
const cfCs = ref("");
//点击存放村社暂时
const cfCsZs = ref("");
//地图
var map = null;
//默认龙游县灰色地块
const mapTownDataDK = reactive([]);
//社区地块
const xkzDk = reactive([]);
//社区中心点
const xkzCenter = reactive([
{
name: "溪口村",
center: [119.2002156322304, 28.83866363229786],
number: "50",
},
{
name: "扁石村",
center: [119.18143177857742, 28.858795781247416],
number: "50",
},
{
name: "大垄村",
center: [119.15947390269743, 28.856881986353613],
number: "50",
},
{
name: "枫林村",
center: [119.2244601402551, 28.874916936765324],
number: "50",
},
{
name: "双港口村",
center: [119.2112370831526, 28.873145674638753],
number: "50",
},
{
name: "灵上村",
center: [119.18997199384468, 28.871170115155575],
number: "50",
},
{
name: "灵下村",
center: [119.19215588030731, 28.890692457149832],
number: "50",
},
{
name: "下徐村",
center: [119.13517530022014, 28.877528537725134],
number: "50",
},
{
name: "大沃口村",
center: [119.17629950196843, 28.895987778606404],
number: "50",
},
{
name: "寺下村",
center: [119.15115841066512, 28.913624042836545],
number: "50",
},
{
name: "大阳家村",
center: [119.165141274073, 28.89860048623702],
number: "50",
},
{
name: "石角村",
center: [119.12327500764461, 28.911094612057784],
number: "50",
},
{
name: "红罗村",
center: [119.18884846618927, 28.911017362099795],
number: "50",
},
{
name: "冷水村",
center: [119.19787638778016, 28.934598743672993],
number: "50",
},
{
name: "新溪社区",
center: [119.184555, 28.853068],
number: "50",
},
]);
//村社颜色列表
const colorList = [
{
bg: "RGBA(52, 231, 134, 1)",
},
{
bg: "RGBA(255, 206, 0, 1)",
},
{
bg: "RGBA(186, 232, 128, 1)",
},
{
bg: "RGBA(35, 146, 223, 1)",
},
{
bg: "RGBA(60, 144, 252, 1)",
},
{
bg: "RGBA(255, 142, 0, 1)",
},
{
bg: "RGBA(137, 128, 0, 1)",
},
{
bg: "RGBA(0, 207, 249, 1)",
},
{
bg: "RGBA(27, 91, 55, 1)",
},
];
//存放特殊标签中文对应的简写
const tsbq_id_total = ref([
{
name: "残疾人",
id: "cjr",
},
{
name: "低边",
id: "dibian",
},
{
name: "低保",
id: "db",
},
{
name: "高血压",
id: "gxy",
},
{
name: "糖尿病",
id: "tnb",
},
{
name: "退役军人",
id: "tyjr",
},
{
name: "困境儿童",
id: "kjer",
},
]);
//单选中社区区块
const chooseCsList = ref([]);
//单选未中社区区块
const unChooseList = ref([]);
const sqname = ref();
// const townName = ref();
//地图街道设置(存放数量)
const mapTownCount = reactive([
{
name: "龙洲街道",
center: [119.1573083, 28.9799445],
number: "1000",
},
{
name: "东华街道",
center: [119.209592, 28.9799445],
number: "1000",
},
{
name: "小南海镇",
center: [119.119616, 29.07309],
number: "1000",
},
{
name: "湖镇镇",
center: [119.2906892, 29.0386151],
number: "1000",
},
{
name: "溪口镇",
center: [119.1859408, 28.8879474],
number: "1000",
},
{
name: "詹家镇",
center: [119.1201732, 29.005175],
number: "1000",
},
{
name: "塔石镇",
center: [119.1256669, 29.1373072],
number: "1000",
},
{
name: "横山镇",
center: [119.1876111, 29.1903275],
number: "1000",
},
{
name: "模环乡",
center: [119.237015, 29.120862],
number: "1000",
},
{
name: "石佛乡",
center: [119.1002998, 29.2018674],
number: "1000",
},
{
name: "沐尘畲族乡",
center: [119.1837169, 28.8014116],
number: "1000",
},
{
name: "罗家乡",
center: [119.2453273, 28.9130851],
number: "1000",
},
{
name: "庙下乡",
center: [119.1037175, 28.8089885],
number: "1000",
},
{
name: "大街乡",
center: [119.2664362, 28.8432149],
number: "1000",
},
{
name: "社阳乡",
center: [119.3109367, 28.9074754],
number: "1000",
},
]);
//选中
const choose = ref({
person: "",
fwq: 9999,
yaosu: 9999,
});
//人口数
const personTotal = ref([
{
id: 0,
name: "总人口",
value: "1724114",
ages: "总人口",
age: "1000",
},
]);
//人口数比例
const PopulationRatio = ref([
{
id: 0,
age: "1-10岁",
progress: 10, //进度条占比
bgColor: "rgba(246, 214, 120, 1)",
},
{
id: 1,
age: "11-20岁",
progress: 10, //进度条占比
bgColor: "rgba(243, 254, 128, 1)",
},
{
id: 2,
age: "21-30岁",
progress: 10, //进度条占比
bgColor: "rgba(164, 241, 119, 1)",
},
{
id: 3,
age: "31-40岁",
progress: 10, //进度条占比
bgColor: "rgba(110, 255, 201, 1)",
},
{
id: 4,
age: "41-50岁",
progress: 10, //进度条占比
bgColor: "rgba(105, 201, 241, 1)",
},
{
id: 5,
age: "51-60岁",
progress: 10, //进度条占比
bgColor: "rgba(107, 138, 244, 1)",
},
{
id: 6,
age: "61-70岁",
progress: 10, //进度条占比
bgColor: "rgba(161, 128, 255, 1)",
},
{
id: 7,
age: "71-80岁",
progress: 10, //进度条占比
bgColor: "rgba(179, 238, 147, 1)",
},
{
id: 8,
age: "81-90岁",
progress: 10, //进度条占比
bgColor: "rgba(190, 255, 246, 1)",
},
{
id: 9,
age: "91-100岁",
progress: 10, //进度条占比
bgColor: "rgba(222, 173, 98, 1)",
},
]);
//特殊标签
const tsbqTotal = ref([
{
id: 10,
name: "退役军人",
value: "26737",
},
{
id: 20,
name: "留守",
value: "26737",
},
{
id: 30,
name: "困境儿童",
value: "26737",
},
{
id: 40,
name: "特困",
value: "26737",
},
{
id: 0,
name: "低边",
value: "26737",
},
{
id: 1,
name: "低保",
value: "26737",
},
{
id: 2,
name: "高血压",
value: "26737",
},
{
id: 3,
name: "糖尿病",
value: "26737",
},
{
id: 4,
name: "残疾人",
value: "26737",
},
]);
const data = reactive({
serviceCircleList: [],
fwqCoordinates: [], //服务圈经度
fwqCoordinates1: [], //服务圈经度
fwqCoordinates2: [], //服务圈纬度
zoomLevel: null, //服务圈缩放级别
});
//基本公共服务圈
const jbfwqTotal = ref([]);
const jbfwqPx = reactive([
"龙洲街道",
"东华街道",
"小南海镇",
"湖镇镇",
"溪口镇",
"詹家镇",
"塔石镇",
"横山镇",
"模环乡",
"石佛乡",
"沐尘畲族乡",
"罗家乡",
"庙下乡",
"大街乡",
"社阳乡",
]);
//存放地图上服务圈数据
var circle;
const fwqList = ref([]);
//资源要素
const yaosuTotal = ref([
{
id: 0,
name: "体育场所",
img: j0,
wz: false,
},
{
id: 1,
name: "幼儿园",
img: j1,
wz: false,
},
{
id: 2,
name: "小学",
img: j2,
wz: false,
},
{
id: 3,
name: "初中",
img: j3,
wz: false,
},
{
id: 4,
name: "高中",
img: j4,
wz: false,
},
{
id: 5,
name: "医院",
img: j5,
wz: false,
},
{
id: 6,
name: "南孔书院",
img: j6,
wz: false,
},
{
id: 7,
name: "养老机构",
img: j7,
wz: false,
},
{
id: 8,
name: "汽车充电桩",
img: j8,
wz: true,
},
{
id: 9,
name: "卫生服务中心",
img: j9,
wz: true,
},
{
id: 10,
name: "AED",
img: j10,
wz: true,
},
]);
//选中的资源要素
const yaosuList = ref([]);
//选中资源要素坐标
const yaosuIcon = ref({
体育场所: {
sj: [],
},
幼儿园: { sj: [] },
小学: { sj: [] },
初中: { sj: [] },
高中: { sj: [] },
医院: { sj: [] },
南孔书院: { sj: [] },
养老机构: { sj: [] },
汽车充电桩: { sj: [] },
卫生服务中心: { sj: [] },
AED: { sj: [] },
});
// 鼠标点击添加点位
let currentMarker = null; // 用于保存当前标记的引用
// 详情弹框
const dialogShow = ref(false);
const tableType = reactive({
url: "",
title: "人员列表",
columns: [
{
label: "姓名",
property: "nm",
},
{
label: "手机号",
property: "contactTel",
},
{
label: "政治面貌",
property: "zzmm",
},
{
label: "居住状态",
property: "jzzt",
type: "slot",
},
{
label: "民族",
property: "ethnic",
},
{
label: "性别",
property: "gender",
},
{
label: "户口登记地",
property: "domicAddr",
width: "300px",
},
],
data: [],
});
// 表格分页
const pagination = reactive({
total: 100,
pageSize: 10,
currentPage: 1,
});
//--------定义方法----------------------------------------
//地图初始化
const initMap = () => {
map = new BMapGL.Map("map", { minZoom: 8, maxZoom: 20 });
map.setMapType(BMAP_SATELLITE_MAP);
map.enableScrollWheelZoom(true);
goMapCenter([119.178783, 29.034583], 11);
//加载乡镇信息
loadTown();
//渲染地块
addPolygonCounty();
//添加街道名
addJd();
};
//点击龙游县初始化
const csh = () => {
clear();
xkzDk.length = 0;
map.removeEventListener("click", markera);
if (currentMarker !== null) {
map.removeOverlay(currentMarker);
}
goMapCenter([119.178783, 29.034583], 11);
getData();
getDataBq();
};
//清空村社的数据
const clear = () => {
xuanzhongCs.value = [];
sfdd.value = false;
title_choose.value = "";
title_jd.value = "";
title_cs.value = "";
cfJd.value = "";
cfCs.value = "";
cfCsZs.value = "";
cs_un_choose_arr.value.forEach((item, index) => {
map.removeOverlay(cs_un_choose_arr.value[index]);
});
cs_choose_arr.value.forEach((item, index) => {
map.removeOverlay(cs_choose_arr.value[index]);
});
cs_number_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_number_name_arr.value[index]);
});
cs_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_name_arr.value[index]);
});
cs_qk_arr.value.forEach((item, index) => {
map.removeOverlay(cs_qk_arr.value[index]);
});
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_qk_arr.value = [];
cs_name_arr.value = [];
cs_number_name_arr.value = [];
cs_choose_arr.value = [];
cs_un_choose_arr.value = [];
cs_dd_arr.value = [];
};
//定义地图中点
const goMapCenter = (point, zoom) => {
map.centerAndZoom(new BMapGL.Point(point[0], point[1]), zoom);
};
//0岁时,改为小于1岁
const ageLess0 = computed(() => {
return function (item) {
if (item == "0岁") {
return "小于1岁";
} else {
return item;
}
};
});
//鼠标点击添加点位
const BMAP = () => {
// 添加鼠标点击事件监听器
map.addEventListener("click", markera);
};
const markera = (e) => {
console.log(`"center":[${e.latlng.lng},${e.latlng.lat}],`);
// 检查并移除当前标记
if (currentMarker !== null) {
map.removeOverlay(currentMarker);
}
// 创建新标记
let icons = new BMapGL.Icon(AED, new BMapGL.Size(24, 62));
var marker = new BMapGL.Marker(new BMapGL.Point(e.latlng.lng, e.latlng.lat), {
icon: icons,
});
// 将新标记添加到地图中并更新当前标记引用
map.addOverlay(marker);
currentMarker = marker;
};
//点击人口数
const buten = async (item) => {
getData(item.age);
getDatas(cfJd.value, item.age);
};
//点击特殊标签
const buten2 = async (item) => {
getDataBqs(cfJd.value, cfCs.value, item.id);
};
//人口
const getData = async (e) => {
let e1 = e;
if (e == "9999") {
e = "";
}
try {
const res = await http.get(`/api/ggfwyth/ysyzt/getXzjdrksl?age=${e || ""}`);
if (res.code == 200) {
if (cfJd.value == "") {
personTotal.value = [
{
id: "9999",
ages: "总人口",
age: "9999",
value: "res.data.total",
},
{
id: "6666",
name: "近一年死亡",
value: "5650",
ages: "近一年死亡",
age: "6666",
percent: "",
},
];
personTotal.value[0].rksl = res.data.total;
personTotal.value[0].ages = "总人口";
personTotal.value[1].rksl = res.data.swrs;
personTotal.value[1].ages = "近一年死亡";
personTotal.value[1].percent = res.data.swrsPercent;
res.data.age.forEach((item, index) => {
personTotal.value.push({
id: index + 1,
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
});
// 年龄百分比
const agename = [
"09Percent",
"1019Percent",
"2029Percent",
"3039Percent",
"4049Percent",
"5059Percent",
"6069Percent",
"7079Percent",
"8089Percent",
"9099Percent",
"100nlPercent",
];
if (res.data.ageGroupsPercent) {
// console.log(PopulationRatio.value[0].progress);
agename.forEach((key, index) => {
if (PopulationRatio.value[index]) {
PopulationRatio.value[index].progress =
res.data.ageGroupsPercent[key];
}
});
}
}
mapTownCount.map((item) => {
item.swrs = 0;
res.data.townWwrs.map((items) => {
if (items.xzjd == item.name) {
item.swrs = items.swrs;
}
});
});
mapTownCount.map((item) => {
item.number = 0;
res.data.town.map((items) => {
if (items.town == item.name) {
item.number = items.rksl;
}
});
});
}
} catch (error) {
console.error("Error fetching data:", error);
}
if (e1) {
changeRs(e1);
}
};
const getDatas = async (e, i) => {
if (i == "9999") {
i = "";
}
await http
.get(`/api/ggfwyth/ysyzt/getCssrksl?town=${e}&age=${i || ""}`)
.then((res) => {
if (res.code == 200) {
if (cfCs.value != "") {
} else if (cfJd.value !== "") {
personTotal.value = [
{
// id: "9999",
ages: "总人口",
age: "9999",
value: "res.data.total",
},
{
// id: "6666",
name: "近一年死亡",
value: "5650",
ages: "近一年死亡",
age: "6666",
percent: "",
},
];
let before_age = "";
personTotal.value[0].rksl = res.data.total;
personTotal.value[0].ages = "总人口";
personTotal.value[1].rksl = res.data.swrs;
personTotal.value[1].ages = "近一年死亡";
personTotal.value[1].percent = res.data.swrsPercent;
res.data.age.forEach((item, index) => {
if (index == 0 && item.age == 0) {
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
} else {
if (item.age - before_age == 1) {
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
} else {
for (let k = before_age; k < item.age - 1; k++) {
before_age = before_age + 1;
personTotal.value.push({
rksl: 0,
age: before_age + "",
ages: before_age + "岁",
percent: 0.0,
});
}
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
}
}
});
}
if (cfJd.value != "") {
xkzCenter.map((item) => {
item.swrs = 0;
res.data.committeeSwrs.map((items) => {
if (items.csq == item.name) {
item.swrs = items.swrs;
}
});
});
xkzCenter.map((item) => {
item.number = 0;
res.data.committee.map((items) => {
if (items.committee == item.name) {
item.number = items.rksl;
}
});
});
}
cs_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_name_arr.value[index]);
});
cs_number_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_number_name_arr.value[index]);
});
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
if (title_jd.value == "") {
} else {
if (sfdd.value) {
if (choose.value.person == "") {
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_dd_arr.value = [...xuanzhongCs.value];
cs_dd_arr.value.map((item, index) => {
DGcreateCs(item, index);
});
} else {
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_dd_arr.value = [...xuanzhongCs.value];
cs_dd_arr.value.map((item, index) => {
DGcreateCs2(item, index);
});
}
} else {
if (choose.value.person == "") {
addCs();
} else {
addCs2();
}
}
}
// 年龄百分比
const agename = [
"09Percent",
"1019Percent",
"2029Percent",
"3039Percent",
"4049Percent",
"5059Percent",
"6069Percent",
"7079Percent",
"8089Percent",
"9099Percent",
"100nlPercent",
];
if (res.data.ageGroupsPercent) {
agename.forEach((key, index) => {
if (PopulationRatio.value[index]) {
PopulationRatio.value[index].progress =
res.data.ageGroupsPercent[key];
}
});
}
}
});
};
const getDatas2 = async (e, i, cs) => {
let i1 = i;
if (
i == "cjr" ||
i == "dibian" ||
i == "db" ||
i == "gxy" ||
i == "tnb" ||
i == "tyjr" ||
i == "kjer"
) {
i = "";
}
await http
.get(
`/api/ggfwyth/ysyzt/getCssrksl?town=${e}&age=${i || ""}&committee=${cs}`
)
.then((res) => {
if (res.code == 200) {
personTotal.value = [
{
// id: "9999",
name: "总人口",
ages: "总人口",
age: "9999",
value: "res.data.total",
},
{
// id: "6666",
name: "近一年死亡",
value: "5650",
ages: "近一年死亡",
age: "6666",
},
];
personTotal.value[0].rksl = res.data.total;
personTotal.value[0].ages = "总人口";
personTotal.value[1].rksl = res.data.swrs;
personTotal.value[1].ages = "近一年死亡";
personTotal.value[1].percent = res.data.swrsPercent;
// res.data.age.forEach((item, index) => {
// personTotal.value.push({
// id: index + 1,
// rksl: item.rksl,
// age: item.age + "",
// ages: item.age + "岁",
// percent: item.percent,
// });
// });
let before_age = "";
res.data.age.forEach((item, index) => {
// if (index == 0) {
// personTotal.value.push({
// rksl: item.rksl,
// age: item.age + "",
// ages: item.age + "岁",
// percent: item.percent,
// });
// before_age = item.age;
// console.log("执行111", before_age);
// } else {
// if (item.age - before_age == 1) {
// personTotal.value.push({
// rksl: item.rksl,
// age: item.age + "",
// ages: item.age + "岁",
// percent: item.percent,
// });
// before_age = item.age;
// } else {
// for (let i = 0; i < item.age - before_age - 1; i++) {
// ++before_age;
// personTotal.value.push({
// rksl: 0,
// age: before_age + "",
// ages: before_age + "岁",
// percent: 0.0,
// });
// }
// personTotal.value.push({
// rksl: item.rksl,
// age: item.age + "",
// ages: item.age + "岁",
// percent: item.percent,
// });
// before_age = item.age;
// }
// }
if (index == 0 && item.age == 0) {
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
} else {
if (item.age - before_age == 1) {
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
} else {
for (let k = before_age; k < item.age - 1; k++) {
before_age = before_age + 1;
personTotal.value.push({
rksl: 0,
age: before_age + "",
ages: before_age + "岁",
percent: 0.0,
});
}
personTotal.value.push({
rksl: item.rksl,
age: item.age + "",
ages: item.age + "岁",
percent: item.percent,
});
before_age = item.age;
}
}
});
xkzCenter.map((item) => {
item.swrs = 0;
res.data.committeeSwrs.map((items) => {
if (items.csq == item.name) {
item.swrs = items.swrs;
}
});
});
// 年龄百分比
const agename = [
"09Percent",
"1019Percent",
"2029Percent",
"3039Percent",
"4049Percent",
"5059Percent",
"6069Percent",
"7079Percent",
"8089Percent",
"9099Percent",
"100nlPercent",
];
if (res.data.ageGroupsPercent) {
agename.forEach((key, index) => {
if (PopulationRatio.value[index]) {
PopulationRatio.value[index].progress =
res.data.ageGroupsPercent[key];
}
});
}
}
});
if (
i1 == "cjr" ||
i1 == "dibian" ||
i1 == "db" ||
i1 == "gxy" ||
i1 == "tnb" ||
i1 == "tyjr" ||
i1 == "kjer"
) {
} else {
if (choose.value.person == "") {
cs_dd_arr.value.map((item, index) => {
DGcreateCs(item, index);
});
} else {
cs_dd_arr.value.map((item, index) => {
DGcreateCs2(item, index);
});
}
}
};
//特殊标签
//获取特殊标签
//特殊标签列表数据请求
const getDataBq = async (jd, cs) => {
await http
.get(`/api/ggfwyth/ysyzt/getTsbq?csq=${cs || ""}&xzjd=${jd || ""}`)
.then((res) => {
if (res.code == 200) {
tsbqTotal.value.length = 0;
for (let name in res.data) {
let idd = "";
for (let v = 0; v < tsbq_id_total.value.length; v++) {
if (tsbq_id_total.value[v].name == name) {
idd = tsbq_id_total.value[v].id;
}
}
tsbqTotal.value.push({
id: idd,
name: name,
rksl: res.data[name] || 0,
});
}
}
});
};
const getDataBqs = async (jd, cs, bq) => {
await getDataBqJD(bq);
getDataBqs2(cfJd.value, cfCs.value, bq);
// await http.get(`/api/ggfwyth/ysyzt/getTsbqByXzjdOrCsq`, data).then((res) => {
// if (res.code == 200) {
// mapTownCount.map((item) => {
// item.numbers = 0;
// res.data.map((items) => {
// if (items.xzjd == item.name) {
// item.numbers = items.rs;
// }
// });
// });
// }
// });
};
//特殊标签获取街道内部人数
const getDataBqs2 = async (jd, cs, bq, f = true) => {
//f用来判断执不执行changeRs2
let data = {};
let vv = 0;
if (cs == "" && jd == "") {
data = {
tsbq: bq,
};
vv = 1;
} else if (cs == "") {
data = {
xzjd: jd,
tsbq: bq,
};
vv = 2;
} else {
data = {
xzjd: jd,
tsbq: bq,
csq: cs,
};
vv = 3;
}
await http.get(`/api/ggfwyth/ysyzt/getTsbqByXzjdOrCsq`, data).then((res) => {
if (res.code == 200) {
if (cfJd.value != "") {
xkzCenter.map((item) => {
item.numbers = 0;
res.data.map((items) => {
if (items.csq == item.name) {
item.numbers = items.rs;
}
});
});
}
if (f) {
changeRs2(bq);
}
cs_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_name_arr.value[index]);
});
cs_number_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_number_name_arr.value[index]);
});
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
if (title_jd.value == "") {
} else {
if (sfdd.value) {
if (choose.value.person == "") {
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_dd_arr.value = [...xuanzhongCs.value];
cs_dd_arr.value.map((item, index) => {
DGcreateCs(item, index);
});
} else {
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_dd_arr.value = [...xuanzhongCs.value];
cs_dd_arr.value.map((item, index) => {
DGcreateCs2(item, index);
});
}
} else {
if (choose.value.person == "") {
addCs();
} else {
addCs2();
}
}
}
}
});
};
//单点选择区域获取特殊标签
const getDataBqs3 = async (jd, cs, bq) => {
//f用来判断执不执行changeRs2
let data = {};
let vv = 0;
if (cs == "" && jd == "") {
data = {
tsbq: bq,
};
vv = 1;
} else if (cs == "") {
data = {
xzjd: jd,
tsbq: bq,
};
vv = 2;
} else {
data = {
xzjd: jd,
tsbq: bq,
csq: cs,
};
vv = 3;
}
await http.get(`/api/ggfwyth/ysyzt/getTsbqByXzjdOrCsq`, data).then((res) => {
if (res.code == 200) {
// if (cfJd.value != "") {
xkzCenter.map((item) => {
item.numbers = 0;
res.data.map((items) => {
if (items.csq == item.name) {
item.numbers = items.rs;
}
});
});
// }
// cs_name_arr.value.forEach((item, index) => {
// map.removeOverlay(cs_name_arr.value[index]);
// });
// cs_number_name_arr.value.forEach((item, index) => {
// map.removeOverlay(cs_number_name_arr.value[index]);
// });
// cs_dd_arr.value.forEach((item, index) => {
// map.removeOverlay(cs_dd_arr.value[index]);
// });
// if (title_jd.value == "") {
// } else {
// if (sfdd.value) {
cs_dd_arr.value = [...xuanzhongCs.value];
if (choose.value.person == "") {
// cs_dd_arr.value.forEach((item, index) => {
// map.removeOverlay(cs_dd_arr.value[index]);
// });
cs_dd_arr.value.map((item, index) => {
DGcreateCs(item, index);
});
} else {
// cs_dd_arr.value = [...xuanzhongCs.value];
console.log(cs_dd_arr.value);
cs_dd_arr.value.map((item, index) => {
DGcreateCs2(item, index);
});
}
// }
// else {
// if (choose.value.person == "") {
// addCs();
// } else {
// addCs2();
// }
// }
// }
}
});
};
//特殊标签单独获取各个街道人数
const getDataBqJD = async (bq) => {
let data = {};
data = {
tsbq: bq,
};
await http.get(`/api/ggfwyth/ysyzt/getTsbqByXzjdOrCsq`, data).then((res) => {
if (res.code == 200) {
if (res?.data) {
mapTownCount.map((item) => {
item.numbers = 0;
res.data.map((items) => {
if (items.xzjd == item.name) {
item.numbers = items.rs;
}
});
});
}
}
});
};
//人口,标签切换执行
const changeRs = (id) => {
if (choose.value.person == id) {
choose.value.person = "";
jdm_number_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_number_arr.value[index]);
});
addJd();
} else {
choose.value.person = id;
jdm_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_arr.value[index]);
});
jdm_number_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_number_arr.value[index]);
});
addJd2();
}
};
const changeRs2 = (id) => {
if (choose.value.person == id) {
choose.value.person = "";
jdm_number_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_number_arr.value[index]);
});
addJd();
} else {
choose.value.person = id;
jdm_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_arr.value[index]);
});
jdm_number_arr.value.forEach((item, index) => {
map.removeOverlay(jdm_number_arr.value[index]);
});
addJd2();
}
};
//----------资源要素------------
//判断数组中是否包含某个字符
const removeCharFromArray = (arr, charToRemove) => {
// 如果数组包含该字符,则过滤掉它
if (arr.includes(charToRemove)) {
return arr.filter((ch) => ch !== charToRemove);
} else {
arr.push(charToRemove);
return arr;
}
};
const changeys = (name) => {
if (yaosuList.value.includes(name)) {
yaosuList.value = yaosuList.value.filter((ch) => ch !== name);
// yaosuIcon.value[name].sj.forEach((item, index) => {
// map.removeOverlay( yaosuIcon.value[name].sj[index]);
// });
} else {
yaosuList.value.push(name);
// getZyys(name);
}
};
const getZyys = (name) => {
http.get(``).then((res) => {
if (res.code == 200) {
res.data.map((item, index) => {
createZyys(item, index, name);
});
}
});
};
// 添加资源要素的图标
const createZyys = (polygon, indexx, name) => {
// data.fwqCoordinates = polygon.point;
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.height = "40px";
content.style.width = "40px";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "20px";
img2.src = this.properties.imgSrc2;
content.appendChild(img2);
return content;
}
yaosuIcon.value[name].sj[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.point),
opacity: 0.5,
offsetY: -10,
properties: {
imgSrc2: polygon.img2,
type: "customOverlay",
},
});
map.addOverlay(yaosuIcon.value[name].sj[indexx]);
};
//----------资源要素------------
//点击街道,回到街道
const to_jd = (item_name) => {
clear();
title_jd.value = item_name;
map.removeEventListener("click", markera);
if (currentMarker !== null) {
map.removeOverlay(currentMarker);
}
// townName.value = item_name;
// if (item_name == cfJd.value) {
// } else {
// console.log(111, choose.value.person);
cfJd.value = item_name;
let jdCenter = [];
BMAP();
loadCs(item_name);
addPolygonCountyCs();
getDataBq(cfJd.value, "");
if (choose.value.person == "") {
getDatas(cfJd.value, "");
}
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
getDataBqs2(cfJd.value, cfCs.value, choose.value.person, false);
getDatas(cfJd.value, "");
} else if (choose.value.person != "") {
if (choose.value.person == "9999") {
getDatas(cfJd.value, "");
} else {
// if (choose.value.person == 1) {
// getDatas(cfJd.value, "0"); //0岁传字符串
// } else {
// getDatas(cfJd.value, choose.value.person);
// }
getDatas(cfJd.value, choose.value.person);
}
}
// if (title_jd.value == item.name) {
// } else {
// title_jd.value = item.name;
// }
mapTownCount.map((itemm) => {
if (itemm.name == item_name) {
jdCenter = itemm.center;
}
});
goMapCenter(jdCenter, 13);
// }
};
//详情
const open_detail = () => {
let age = "";
// if (choose.value.person == "9999") {
// age = "";
// person_detail(age);
// dialogShow.value = true;
// } else if (choose.value.person == "6666") {
// age = "";
// } else if (choose.value.person == 1) {
// age = "0";
// person_detail(age);
// dialogShow.value = true;
// } else {
// age = choose.value.person - 1;
// person_detail(age);
// dialogShow.value = true;
// }
if (choose.value.person == "9999") {
age = "";
person_detail(age);
dialogShow.value = true;
} else if (choose.value.person == "6666") {
age = "";
} else {
age = choose.value.person;
person_detail(age);
dialogShow.value = true;
}
};
const close = () => {
dialogShow.value = false;
pagination.total = 100;
};
//表格分页
const handlePagination = (current) => {
pagination.currentPage = current;
let age = "";
// if (choose.value.person == "9999") {
// age = "";
// } else if (choose.value.person == "6666") {
// age = "";
// } else if (choose.value.person == 1) {
// age = "0";
// } else {
// age = choose.value.person - 1;
// }
if (choose.value.person == "9999") {
age = "";
} else if (choose.value.person == "6666") {
age = "";
} else {
age = choose.value.person;
}
person_detail(age);
};
//打开人物详情页面
const openMessage = (e) => {
message.value = e;
openD.value = false;
reset_font2();
//监听实现人物详情动态缩放
window.addEventListener("resize", reset_font2);
};
//关闭人物详情页面
const closeDetail = () => {
openD.value = true;
window.removeEventListener("resize", reset_font2);
};
//获取人口列表接口
const person_detail = (age) => {
http
.get(
`/api/ggfwyth/ysyzt/getRysmzq?page=${pagination.currentPage}&size=${
pagination.pageSize
}&age=${age || ""}&committee=${cfCsZs.value || ""}&town=${
cfJd.value || ""
}`
)
.then((res) => {
if (res.code == 200) {
tableType.data = res.data;
pagination.total = res.count;
}
});
};
//--------公共服务圈-----------
//获取服务圈村社数据
const getFwq = () => {
http.get(`/api/ggfwyth/ysyzt/listXzjdAndCsq`).then((res) => {
if (res.code == 200) {
res.data.forEach((item, index) => {
jbfwqTotal.value.push({
name: item.xzjd,
child: [],
});
item.jcs.forEach((item2) => {
// console.log(item2.jc,6666);
jbfwqTotal.value[index].child.push({
name: item2.jc,
jc: item2.jc,
});
});
});
let arr=[]
jbfwqPx.forEach((item,index)=>{
jbfwqTotal.value.forEach((item2,index2)=>{
if(item==item2.name){
arr.push(item2)
}
})
})
jbfwqTotal.value=arr;
}
});
};
//点击服务圈村
const changeFwq = async (id, name, names) => {
if (choose.value.fwq == id) {
choose.value.fwq = null;
csh(); //地图初始化
addPolygonCounty(); //添加地区
fwq_list_arr.value.forEach((item, index) => {
map.removeOverlay(fwq_list_arr.value[index]); // 清空服务圈 图标
});
fwq_list_arr.value = [];
map.removeOverlay(circle); // 清空服务圈 圆
circle = null;
} else {
csh();
await getServiceCircle(names, name);
if (fwqList.value.length !== 0) {
fwq_list_arr.value.forEach((item, index) => {
map.removeOverlay(fwq_list_arr.value[index]); // 清空服务圈 图标
});
map.removeOverlay(circle); // 清空服务圈 圆
circle = null;
fwq_list_arr.value = [];
choose.value.fwq = id;
map.clearOverlays(); //清空地图上所有的覆盖物
addggfwq(); //创建公共服务圈
setTimeout(() => {
goMapCenter(
[data.fwqCoordinates1, data.fwqCoordinates2],
data.zoomLevel
); //中心点缩放
}, 500);
} else {
ElMessage.warning({
message: "无数据",
offset: 100, // 距离窗口顶部的偏移量
});
}
}
};
// 服务圈数据
const getServiceCircle = async (communityName, townName) => {
try {
const response = await http.get(
`/api/ggfwyth/ysyzt/zyysxx?jc=${communityName}&xzjd=${townName}`
);
if (response.code === 200) {
updateFwqList(response.data, townName, communityName);
}
} catch (error) {
console.error("Error fetching data:", error);
}
};
// 计算中心点
const calculateCenterPoint = (coordinates) => {
if (coordinates.length === 0) {
return null;
}
let x = 0.0;
let y = 0.0;
let z = 0.0;
coordinates.forEach((coord) => {
const lat = (parseFloat(coord[1]) * Math.PI) / 180;
const lon = (parseFloat(coord[0]) * Math.PI) / 180;
x += Math.cos(lat) * Math.cos(lon);
y += Math.cos(lat) * Math.sin(lon);
z += Math.sin(lat);
});
const total = coordinates.length;
x /= total;
y /= total;
z /= total;
const centralLon = Math.atan2(y, x);
const centralSquareRoot = Math.sqrt(x * x + y * y);
const centralLat = Math.atan2(z, centralSquareRoot);
return [
((centralLon * 180) / Math.PI).toFixed(6), // 经度
((centralLat * 180) / Math.PI).toFixed(6), // 纬度
];
};
const calculateAverage = (coordinates) => {
// const numericCoordinates = coordinates.map(Number); // 将字符串转换为数字
const numericCoordinates = coordinates.map((coord) => {
// 使用正则表达式去除非数字字符(保留小数点和负号)
const cleanedCoord = coord.replace(/[^0-9.-]/g, "");
return Number(cleanedCoord); // 将清理后的字符串转换为数字
});
const sum = numericCoordinates.reduce((acc, val) => acc + val, 0); // 计算总和
const average = sum / numericCoordinates.length; // 计算平均值
// console.log(average, "计算平均值");
return parseFloat(average.toFixed(5)); // 保留5位小数并转换为数字
};
// 根据最大距离计算合适的缩放级别
const calculateZoomLevel = (maxDistance) => {
if (maxDistance < 151) return 18;
if (maxDistance < 400) return 17;
if (maxDistance < 600) return 17.5;
if (maxDistance < 1000) return 16;
if (maxDistance < 2000) return 15;
if (maxDistance < 3000) return 14;
if (maxDistance < 5000) return 13;
return 13;
};
//创建公共服务圈
const addggfwq = () => {
if (fwqList.value.length !== 0) {
data.fwqCoordinates = [];
// data.fwqCoordinates1 = [];
// data.fwqCoordinates2 = [];
fwqList.value.map((item, index) => {
data.fwqCoordinates.push(item.point);
// data.fwqCoordinates1.push(item.point[0]);
// data.fwqCoordinates2.push(item.point[1]);
createCustomOverlay(item, index);
});
const centerPoint = calculateCenterPoint(data.fwqCoordinates);
data.fwqCoordinates1 = centerPoint[0];
data.fwqCoordinates2 = centerPoint[1];
// data.fwqCoordinates1 = calculateAverage(data.fwqCoordinates1);
// data.fwqCoordinates2 = calculateAverage(data.fwqCoordinates2);
console.log(centerPoint); // 输出中心点的经纬度
// console.log("经纬度", data.fwqCoordinates1, data.fwqCoordinates2 );
let distances = []; // 初始化距离数组
fwqList.value.forEach((item) => {
// let distance = algorithm(
// (item.point[0] = Number(item.point[0].replace(/[^0-9.-]/g, ""))),
// (item.point[1] = Number(item.point[1].replace(/[^0-9.-]/g, ""))),
// data.fwqCoordinates1,
// data.fwqCoordinates2
// );
let distance = algorithm(
Number(item.point[0].replace(/[^0-9.-]/g, "")),
Number(item.point[1].replace(/[^0-9.-]/g, "")),
Number(centerPoint[0]),
Number(centerPoint[1])
);
distances.push(distance); // 将距离存入数组
});
let maxDistance = Math.max(...distances); // 找到最大距离
maxDistance = Math.ceil(maxDistance * 1.8); // 向上取整
if (maxDistance < 100) {
maxDistance = 150; // 如果小于 100则赋值为 150
}
data.zoomLevel = calculateZoomLevel(maxDistance);
console.log("最大距离:", maxDistance, data.zoomLevel);
drawACircle(maxDistance);
} else {
ElMessage.warning({
message: "无数据",
offset: 100, // 距离窗口顶部的偏移量
});
}
};
//计算两点之间直线距离
const algorithm = (point1, point2, point3, point4) => {
// console.log(point1, point2, point3, point4, 5555);
let [x1, y1] = [point1, point2];
let [x2, y2] = [point3, point4];
let Lat1 = rad(x1); // 纬度
let Lat2 = rad(x2);
let a = Lat1 - Lat2; // 两点纬度之差
let b = rad(y1) - rad(y2); // 经度之差
let s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(a / 2), 2) +
Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)
)
);
// 计算两点距离的公式
s = s * 6378137.0; // 弧长等于弧度乘地球半径(半径为米)
s = Math.round(s * 10000) / 10000; // 精确距离的数值
return s;
};
// 角度转换成弧度
const rad = (d) => {
return (d * Math.PI) / 180.0;
};
// 添加服务圈
const drawACircle = (maxDistance) => {
// console.log("经纬度1", data.fwqCoordinates1, data.fwqCoordinates2);
if (!circle) {
var point = new BMapGL.Point(data.fwqCoordinates1, data.fwqCoordinates2);
circle = new BMapGL.Circle(point, maxDistance, {
strokeColor: "yellow",
strokeWeight: 2,
strokeOpacity: 0.8,
fillOpacity: 0.1,
strokeStyle: "dashed",
zIndex: 99,
// fillColor: "yellow",
});
map.addOverlay(circle);
}
};
// 添加公共服务圈的图标
const createCustomOverlay = (polygon, indexx) => {
// data.fwqCoordinates = polygon.point;
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.height = "40px";
content.style.width = "40px";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
var div = document.createElement("div");
div.style.color = "#ddd";
div.style.padding = `${polygon.padding}`;
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.fontSize = "12px";
div.style.borderRadius = "10px";
div.style.display = "flex";
div.style.justifyContent = "center";
div.style.alignItems = "center";
div.style.background = `url(${polygon.img}) no-repeat 0/100% 100%`;
div.style.cursor = "pointer";
div.style.transform = `translate(${polygon.x}px,${polygon.y}px)`;
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "14px";
title.style.fontWeight = "700";
title.style.marginLeft = "0px";
title.style.color = `${polygon.textColor}`;
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "20px";
img2.src = this.properties.imgSrc2;
content.appendChild(div);
content.appendChild(img2);
// div.onclick = function () {
// addPolygonTown(this.getAttribute('name'))
// removeCustomOverlay()
// addStage(this.getAttribute('name'))
// state.mapStatus = 1
// }
return content;
}
fwq_list_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.point),
opacity: 0.5,
offsetY: 0,
properties: {
title: polygon.name,
imgSrc2: polygon.img2,
type: "customOverlay",
},
});
// var labelopts = {
// position: new BMapGL.Point(polygon.point[0], polygon.point[1]), // 指定文本标注所在的地理位置
// offset: new BMapGL.Size(0, -97), // 设置文本偏移量
// };
// var label = new BMapGL.Label(polygon.name, labelopts);
// label.setStyle({
// color: "#fff",
// borderRadius: "1px",
// padding: "5px 13px",
// // background: `url(${b1s}) no-repeat 0/100% 100%`,
// fontSize: "15px",
// lineHeight: "20px",
// border: "0",
// transform: "translateX(-50%)",
// });
map.addOverlay(fwq_list_arr.value[indexx]);
};
const updateFwqList = (data, townName, communityName) => {
// console.log(data, townName, communityName,'服务器数据');
let updatedFwqList = [];
jbfwqTotal.value.forEach((town) => {
if (town.name === townName) {
town.child.forEach((community, index) => {
if (community.name === communityName) {
updatedFwqList = data
.filter(
(item) => item.xzjd === townName && item.jc === communityName
)
.map((item) => ({
x: 53,
y: 0,
img: fwqbg1,
img2: b2,
name: item.zyysmc,
point: [item.jd, item.wd],
padding: "4px 8px 10px",
textColor: "#fff",
bgColor: "#00b050",
}));
community.fwqList = updatedFwqList;
}
});
}
});
fwqList.value = updatedFwqList;
// console.log(jbfwqTotal.value[4].child[0], "乡镇");
};
//------------------------------
//-------乡镇街道级别---------
//加载乡镇信息
const loadTown = () => {
for (let v of mapTown.features) {
if (v.geometry.coordinates.length > 1) {
for (let w in v.geometry.coordinates) {
if (v.geometry.coordinates[w][0].length < 60) continue;
mapTownDataDK.push({
name: v.properties.name,
point: v.geometry.coordinates[w][0],
});
}
} else {
mapTownDataDK.push({
name: v.properties.name,
point: v.geometry.coordinates[0],
});
}
}
};
//添加地图区块
const addPolygonCounty = () => {
map.clearOverlays();
let fillColor = "#ffffff";
mapTownDataDK.map((item) => {
item.leg = 0;
//地区的坐标范围
let points = [];
item.point.map((p) => points.push(new BMapGL.Point(...p)));
if (points.length) {
//创建面
let polygon = new BMapGL.Polygon(points, {
strokeColor: "#5E9AD2",
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: fillColor,
fillOpacity: 0.7,
name: item.name,
zIndex: 92,
});
map.addOverlay(polygon);
polygon.addEventListener("click", () => {
// townName.value = item.name;
if (item.name == cfJd.value) {
} else {
clear();
xkzDk.length = 0;
cfJd.value = item.name;
let jdCenter = [];
// if (item.name == "溪口镇") {
BMAP();
loadCs(item.name);
addPolygonCountyCs();
getDataBq(cfJd.value, "");
if (choose.value.person == "") {
getDatas(cfJd.value, "");
}
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
getDataBqs2(cfJd.value, cfCs.value, choose.value.person, false);
getDatas(cfJd.value, "");
} else if (choose.value.person != "") {
if (choose.value.person == "9999") {
getDatas(cfJd.value, "");
} else {
// if (choose.value.person == 1) {
// getDatas(cfJd.value, "0"); //0岁传字符串
// } else {
// getDatas(cfJd.value, choose.value.person - 1);
// }
getDatas(cfJd.value, choose.value.person);
}
}
if (title_jd.value == item.name) {
} else {
title_jd.value = item.name;
}
mapTownCount.map((itemm) => {
if (itemm.name == item.name) {
jdCenter = itemm.center;
}
});
goMapCenter(jdCenter, 13);
// }
// else {
// loadCs(item.name);
// addPolygonCountyCs();
// // map.removeEventListener("click", markera);
// // if (currentMarker !== null) {
// // map.removeOverlay(currentMarker);
// // }
// // clear();
// // getData();
// // getDataBq();
// }
}
});
}
});
};
//添加街道名
const addJd = () => {
mapTownCount.map((item, index) => {
createCustomOverlayJd(item, index);
});
};
//添加街道名2含数量
const addJd2 = () => {
nextTick(() => {
mapTownCount.map((item, index) => {
createCustomOverlayJd2(item, index);
});
});
// if (center_now.value[0] == 119.178783) {
// goMapCenter([119.178783, 29.034581], 11);
// }
};
// 添加地图上的街道名
const createCustomOverlayJd = (polygon, indexx) => {
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
content.style.height = "20px";
content.style.width = "20px";
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.justifyContent = "center";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "12px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
return content;
}
jdm_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
type: "customOverlay",
},
});
map.addOverlay(jdm_arr.value[indexx]);
};
// 添加地图上的街道名+(人数,标签)
const createCustomOverlayJd2 = (polygon, indexx) => {
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
content.style.height = "20px";
content.style.width = "20px";
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.flexDirection = "column";
div.style.justifyContent = "center";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "12px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
var number = document.createElement("div");
number.style.fontSize = "13px";
number.style.fontWeight = "600";
number.style.color = "#FEFF6C";
number.style.textShadow = "0px 2px 4px rgba(0,0,0,0.5)";
div.appendChild(number);
number.appendChild(document.createTextNode(this.properties.number));
content.appendChild(div);
// div.onclick = function () {
// let jdCenter = [];
// if (polygon.name == "溪口镇") {
// title_choose.value = title_choose.value + `>${polygon.name}`;
// loadCs();
// addPolygonCountyCs();
// mapTownCount.map((item) => {
// if (item.name == "溪口镇") {
// jdCenter = item.center;
// }
// });
// addCs2();
// goMapCenter(jdCenter, 14);
// }
// };
return content;
}
let num = "";
if (choose.value.person == "6666") {
num = "swrs";
} else if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
num = "numbers";
} else {
num = "number";
}
jdm_number_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
number: polygon[`${num}`],
type: "customOverlay",
},
});
map.addOverlay(jdm_number_arr.value[indexx]);
};
//------------------------------
//---------村社级别------------
//加载村社信息
const loadCs = (name) => {
xkzCenter.length = 0;
cssj.forEach((item, index) => {
if (item.name == name) {
csqk.value = item.sj;
}
});
for (let v of csqk.value.features) {
if (v.geometry.coordinates.length > 1) {
for (let w in v.geometry.coordinates) {
if (v.geometry.coordinates[w][0].length < 60) continue;
xkzDk.push({
name: v.properties.name,
point: v.geometry.coordinates[w],
});
}
xkzCenter.push({
name: v.properties.name,
center: v.properties.center,
});
} else {
xkzDk.push({
name: v.properties.name,
point: v.geometry.coordinates[0],
});
xkzCenter.push({
name: v.properties.name,
center: v.properties.center,
});
}
}
};
//添加村社区块
const addPolygonCountyCs = () => {
// console.log(11111111111111, xkzDk);
xkzDk.map((item, index) => {
let num = index % 9;
let fillColor = colorList[num].bg;
//地区的坐标范围
let points = [];
item.point[0].map((p) => points.push(new BMapGL.Point(...p)));
if (points.length) {
//创建面
cs_qk_arr.value[index] = new BMapGL.Polygon(points, {
strokeColor: fillColor,
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: fillColor,
fillOpacity: 0.7,
name: item.name,
zIndex: 99,
});
map.addOverlay(cs_qk_arr.value[index]);
cs_qk_arr.value[index].addEventListener("click", () => {
// console.log("名字", item.name);
cs_dd_arr.value = [];
cfCs.value = item.name;
title_cs.value = item.name;
sfdd.value = true;
xkzCenter.forEach((a, b) => {
if (a.name == item.name) {
cs_dd_arr.value.push(a);
xuanzhongCs.value.push(a);
}
});
chooseCsList.value.length = 0;
unChooseList.value.length = 0;
xkzDk.forEach((itemm, indexx) => {
if (itemm.name == item.name) {
chooseCsList.value.push(itemm);
} else {
unChooseList.value.push(itemm);
}
});
cs_qk_arr.value.forEach((item, index) => {
map.removeOverlay(cs_qk_arr.value[index]);
});
cs_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_name_arr.value[index]);
});
cs_number_name_arr.value.forEach((item, index) => {
map.removeOverlay(cs_number_name_arr.value[index]);
});
getDataBq(cfJd.value, cfCs.value);
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
getDataBqs3(cfJd.value, cfCs.value, choose.value.person);
} else {
// getDataBqs(cfJd.value, cfCs.value);
}
//这段注意
// if (choose.value.person == 1) {
// getDatas2(cfJd.value, "0", cfCs.value); //0岁传字符串
// } else {
// getDatas2(cfJd.value, choose.value.person - 1, cfCs.value);
// }
getDatas2(cfJd.value, choose.value.person, cfCs.value);
// getDatas2(cfJd.value, choose.value.person, cfCs.value);
addCsChoose();
addCsUnChoose();
// if (choose.value.person == "") {
// cs_dd_arr.value.map((item, index) => {
// DGcreateCs(item, index);
// });
// } else {
// cs_dd_arr.value.map((item, index) => {
// DGcreateCs2(item, index);
// });
// }
});
}
});
};
//添加选中社区
const addCsChoose = () => {
chooseCsList.value.map((item, index) => {
sqname.value = item.name;
let fillColor = "blue";
//地区的坐标范围
let points = [];
item.point[0].map((p) => points.push(new BMapGL.Point(...p)));
if (points.length) {
//创建面
cs_choose_arr.value[index] = new BMapGL.Polygon(points, {
strokeColor: fillColor,
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: fillColor,
fillOpacity: 0.4,
name: item.name,
zIndex: 99,
});
map.addOverlay(cs_choose_arr.value[index]);
}
});
};
//添加未选中社区
const addCsUnChoose = () => {
unChooseList.value.map((item, index) => {
let fillColor = "RGBA(125, 140, 154, 1)";
//地区的坐标范围
let points = [];
item.point[0].map((p) => points.push(new BMapGL.Point(...p)));
if (points.length) {
//创建面
cs_un_choose_arr.value[index] = new BMapGL.Polygon(points, {
strokeColor: fillColor,
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: fillColor,
fillOpacity: 0.5,
name: item.name,
zIndex: 99,
});
map.addOverlay(cs_un_choose_arr.value[index]);
cs_un_choose_arr.value[index].addEventListener("click", () => {
cfCs.value = item.name;
title_cs.value = cfCs.value;
sfdd.value = true;
cs_dd_arr.value.forEach((item, index) => {
map.removeOverlay(cs_dd_arr.value[index]);
});
cs_un_choose_arr.value.forEach((item, index) => {
map.removeOverlay(cs_un_choose_arr.value[index]);
});
cs_choose_arr.value.forEach((item, index) => {
map.removeOverlay(cs_choose_arr.value[index]);
});
chooseCsList.value.length = 0;
unChooseList.value.length = 0;
cs_dd_arr.value = [];
xuanzhongCs.value = [];
xkzCenter.forEach((a, b) => {
if (a.name == item.name) {
cs_dd_arr.value.push(a);
xuanzhongCs.value.push(a);
}
});
xkzDk.forEach((itemm, indexx) => {
if (itemm.name == item.name) {
chooseCsList.value.push(itemm);
} else {
unChooseList.value.push(itemm);
}
});
// cs_un_choose_arr.value.forEach((item, index) => {
// map.removeOverlay(cs_qk_arr.value[index]);
// });
// getDataBqs(cfJd.value, cfCs.value);
getDataBq(cfJd.value, cfCs.value);
// if (choose.value.person == 1) {
// getDatas2(cfJd.value, "0", cfCs.value); //0岁传字符串
// } else {
// getDatas2(cfJd.value, choose.value.person - 1, cfCs.value);
// }
getDatas2(cfJd.value, choose.value.person, cfCs.value);
// getDatas2(cfJd.value, choose.value.person, cfCs.value);
// if (
// choose.value.person == "cjr" ||
// choose.value.person == "dibian" ||
// choose.value.person == "db" ||
// choose.value.person == "gxy" ||
// choose.value.person == "tnb" ||
// choose.value.person == "tyjr" ||
// choose.value.person == "kjer"
// ) {
// getDataBqs2(cfJd.value, cfCs.value, choose.value.person, false);
// }
// if (choose.value.person == "") {
// cs_dd_arr.value.map((item, index) => {
// DGcreateCs(item, index);
// });
// } else
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
getDataBqs3(cfJd.value, cfCs.value, choose.value.person);
}
// if (choose.value.person == "") {
// cs_dd_arr.value.map((item, index) => {
// DGcreateCs(item, index);
// });
// } else {
// cs_dd_arr.value.map((item, index) => {
// DGcreateCs2(item, index);
// });
// }
addCsChoose();
addCsUnChoose();
});
}
});
};
//创建村社
const addCs = () => {
xkzCenter.map((item, index) => {
createCs(item, index);
});
};
//创建村社(人数,标签)
const addCs2 = () => {
xkzCenter.map((item, index) => {
createCs2(item, index);
});
};
//添加村社
const createCs = (polygon, indexx) => {
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.height = "60px";
content.style.width = "60px";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.justifyContent = "center";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.style.padding = "5px";
div.style.minWidth = "60px";
div.style.background = `url(${xcbg}) no-repeat 0/100% 100%`;
div.style.transform = "translateY(50px)";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "10px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "26px";
img2.src = this.properties.imgSrc2;
content.appendChild(div);
content.appendChild(img2);
return content;
}
cs_name_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
imgSrc2: dwd,
type: "customOverlay",
},
});
map.addOverlay(cs_name_arr.value[indexx]);
};
//添加村社+(人数,标签)
const createCs2 = (polygon, indexx) => {
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
content.style.height = "60px";
content.style.width = "60px";
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.justifyContent = "space-between";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.style.padding = "5px";
div.style.minWidth = "60px";
div.style.background = `url(${xcbg}) no-repeat 0/100% 100%`;
div.style.transform = "translateY(50px)";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "10px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
var number = document.createElement("div");
number.style.fontSize = "10px";
number.style.fontWeight = "600";
number.style.color = "black";
div.appendChild(number);
number.appendChild(document.createTextNode(this.properties.number));
// content.appendChild(div);
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "26px";
img2.src = this.properties.imgSrc2;
content.appendChild(div);
content.appendChild(img2);
return content;
}
let num = "";
if (choose.value.person == "6666") {
num = "swrs";
} else if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
num = "numbers";
} else {
num = "number";
}
cs_number_name_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
number: polygon[`${num}`],
imgSrc2: dwd,
type: "customOverlay",
},
});
map.addOverlay(cs_number_name_arr.value[indexx]);
cs_number_name_arr.value[indexx].addEventListener("click", () => {
cfCsZs.value = polygon.name;
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
} else {
open_detail();
}
});
};
//添加单个村社
const DGcreateCs = (polygon, indexx) => {
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.height = "60px";
content.style.width = "60px";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.justifyContent = "center";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.style.padding = "5px";
div.style.minWidth = "60px";
div.style.background = `url(${xcbg}) no-repeat 0/100% 100%`;
div.style.transform = "translateY(50px)";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "10px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "26px";
img2.src = this.properties.imgSrc2;
content.appendChild(div);
content.appendChild(img2);
return content;
}
cs_dd_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
imgSrc2: dwd,
type: "customOverlay",
},
});
map.addOverlay(cs_dd_arr.value[indexx]);
};
//添加单个村社(+数量)
const DGcreateCs2 = (polygon, indexx) => {
// console.log(choose.value.person, "单个村社", polygon);
// console.log("单个村社", polygon.name);
// console.log("单个村社", polygon.number);
// console.log("单个村社", polygon.swrs);
function createLabelDOM() {
var content = document.createElement("div");
content.style.display = "flex";
content.style.flexDirection = "column";
content.style.alignItems = "center";
content.style.height = "60px";
content.style.width = "60px";
content.style.zIndex = BMapGL.Overlay.getZIndex(this.point.lat);
var div = document.createElement("div");
div.style.color = "#333";
div.style.whiteSpace = "nowrap";
div.style.MozUserSelect = "none";
div.style.display = "flex";
div.style.justifyContent = "space-between";
div.style.alignItems = "center";
div.style.cursor = "pointer";
div.style.padding = "5px";
div.style.minWidth = "60px";
div.style.background = `url(${xcbg}) no-repeat 0/100% 100%`;
div.style.transform = "translateY(50px)";
div.setAttribute("name", this.properties.title);
var title = document.createElement("div");
title.style.fontSize = "10px";
title.style.fontWeight = "600";
title.style.color = "#000000";
div.appendChild(title);
title.appendChild(document.createTextNode(this.properties.title));
content.appendChild(div);
var number = document.createElement("div");
number.style.fontSize = "10px";
number.style.fontWeight = "600";
number.style.color = "black";
div.appendChild(number);
number.appendChild(document.createTextNode(this.properties.number));
content.appendChild(div);
let img2 = document.createElement("img");
img2.style.width = "20px";
img2.style.height = "26px";
img2.src = this.properties.imgSrc2;
content.appendChild(div);
content.appendChild(img2);
return content;
}
let num = "";
if (choose.value.person == "6666") {
num = "swrs";
} else if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
num = "numbers";
} else {
num = "number";
}
cs_dd_arr.value[indexx] = new BMapGL.CustomOverlay(createLabelDOM, {
point: new BMapGL.Point(...polygon.center),
opacity: 0.5,
offsetY: -10,
properties: {
title: polygon.name,
number: polygon[`${num}`],
imgSrc2: dwd,
type: "customOverlay",
},
});
map.addOverlay(cs_dd_arr.value[indexx]);
cs_dd_arr.value[indexx].addEventListener("click", () => {
console.log(cfJd.value, polygon.name);
cfCsZs.value = polygon.name;
if (
choose.value.person == "cjr" ||
choose.value.person == "dibian" ||
choose.value.person == "db" ||
choose.value.person == "gxy" ||
choose.value.person == "tnb" ||
choose.value.person == "tyjr" ||
choose.value.person == "kjer"
) {
} else {
open_detail();
}
// open_detail();
});
};
//适配
const reset_font = () => {
let width = document.documentElement.clientWidth || document.body.clientWidth;
let height =
document.documentElement.clientHeight || document.body.clientHeight;
document.querySelector(".header_content").style.transformOrigin = "top left";
document.querySelector(".header_content").style.transform =
"scale(" + width / 1920 + "," + height / 1080 + ")";
if (document.querySelector(".left")) {
document.querySelector(".left").style.transformOrigin = "bottom left";
document.querySelector(".left").style.transform =
"scale(" + width / 1920 + "," + height / 1080 + ")";
document.querySelector(".right").style.transformOrigin = "bottom right";
document.querySelector(".right").style.transform =
"scale(" + width / 1920 + "," + height / 1080 + ")";
}
};
const reset_font2 = () => {
let width = document.documentElement.clientWidth || document.body.clientWidth;
let height =
document.documentElement.clientHeight || document.body.clientHeight;
document.querySelector(".detail").style.transformOrigin = "top left";
document.querySelector(".detail").style.transform =
"scale(" + width / 1920 + "," + height / 1080 + ")";
};
onMounted(() => {
// tools.data.set("token", "6b0e380b4a8f46baae4923f83faf670d");
reset_font();
initMap();
getData();
getDataBq();
BMAP();
getFwq();
});
</script>
<style lang="scss" scoped>
::v-deep .anchorBL {
display: none;
}
.module {
display: flex;
width: 100%;
height: 100%;
position: relative;
margin-top: 112px;
}
#id {
z-index: 10;
}
//左侧弹框
.left {
box-sizing: border-box;
position: absolute;
left: 0;
bottom: 0;
width: 520px;
height: 960px;
background: linear-gradient(
270deg,
rgba(0, 52, 131, 0.69) 0%,
rgba(0, 32, 83, 0.77) 50%,
rgba(0, 60, 131, 0.74) 100%
),
radial-gradient(
128% 99% at 100% 46%,
rgba(0, 48, 125, 0.29) 0%,
rgba(0, 61, 134, 0.42) 100%
);
box-shadow: inset 0px 0px 56px 0px rgba(173, 221, 255, 0.5);
backdrop-filter: blur(3px);
padding: 30px 15px;
display: flex;
flex-direction: column;
z-index: 12;
overflow: hidden;
//人口数
.lyx {
.content_item2 {
color: #ffffff;
cursor: pointer;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px;
padding-left: 24px;
width: 100%;
// height: 57px;
background-image: url(@/assets/images/map/unchoose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
margin-bottom: 12px;
}
.content_item_name {
position: relative;
}
.content_item_name::before {
content: "";
position: absolute;
width: 3px;
height: 3px;
background: #29ffc1;
border: 3px solid rgba(0, 255, 189, 0.31);
border-radius: 6px;
top: 7.5px;
left: -13px;
}
.content_item_value {
display: flex;
.content_item_percent {
margin-left: 2px;
color: #6bfeff;
text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.5);
}
}
.content {
box-sizing: border-box;
margin-top: 20px;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
color: #ffffff;
height: 300px;
overflow: auto;
.content_item {
cursor: pointer;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px;
padding-left: 24px;
padding-right: 5px;
width: 48%;
position: relative;
// height: 57px;
background-image: url(@/assets/images/map/unchoose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
margin-bottom: 12px;
font-size: 18px;
}
.content_item:first-child {
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px;
padding-left: 24px;
width: 100%;
// height: 57px;
background-image: url(@/assets/images/map/unchoose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
margin-bottom: 12px;
}
// .content_item:nth-child(2) {
// box-sizing: border-box;
// display: flex;
// align-items: center;
// justify-content: space-between;
// padding: 18px;
// padding-left: 24px;
// width: 100%;
// // height: 57px;
// background-image: url(@/assets/images/map/unchoose.png);
// background-repeat: no-repeat;
// background-size: 100% 100%;
// margin-bottom: 12px;
// }
// .content_item_name {
// position: relative;
// }
// .content_item_name::before {
// content: "";
// position: absolute;
// width: 3px;
// height: 3px;
// background: #29ffc1;
// border: 3px solid rgba(0, 255, 189, 0.31);
// border-radius: 6px;
// top: 7.5px;
// left: -13px;
// }
// .content_item_value {
// display: flex;
// .content_item_percent {
// margin-left: 2px;
// color: #6bfeff;
// text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.5);
// }
// }
// .choose {
// background-image: url(@/assets/images/map/choose.png) !important;
// background-repeat: no-repeat !important;
// background-size: 100% 100% !important;
// }
}
.choose {
background-image: url(@/assets/images/map/choose.png) !important;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
}
.content::-webkit-scrollbar {
display: none;
}
}
//特殊标签
.tsbq {
margin-top: 30px;
.content {
box-sizing: border-box;
margin-top: 20px;
display: flex;
flex-flow: row wrap;
justify-content: space-between;
color: #ffffff;
height: 220px;
overflow: auto;
.content_item {
cursor: pointer;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px;
padding-left: 24px;
width: 48%;
// height: 57px;
background-image: url(@/assets/images/map/unchoose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
margin-bottom: 12px;
font-size: 18px;
}
// .content_item:last-child {
// box-sizing: border-box;
// display: flex;
// align-items: center;
// justify-content: space-between;
// padding: 24px;
// width: 100%;
// height: 57px;
// background-image: url(@/assets/images/map/unchoose.png);
// background-repeat: no-repeat;
// background-size: 100% 100%;
// margin-bottom: 12px;
// }
.content_item_name {
position: relative;
}
.content_item_name::before {
content: "";
position: absolute;
width: 3px;
height: 3px;
background: rgb(255, 226, 41);
border: 3px solid rgba(255, 226, 41, 0.31);
border-radius: 6px;
top: 7.5px;
left: -13px;
}
.choose {
background-image: url(@/assets/images/map/choose.png) !important;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
}
}
.content::-webkit-scrollbar {
display: none;
}
}
}
//右侧弹框
.right {
box-sizing: border-box;
position: absolute;
right: 0;
bottom: 0;
width: 520px;
height: 960px;
background: linear-gradient(
270deg,
rgba(0, 52, 131, 0.69) 0%,
rgba(0, 32, 83, 0.77) 50%,
rgba(0, 60, 131, 0.74) 100%
),
radial-gradient(
128% 99% at 100% 46%,
rgba(0, 48, 125, 0.29) 0%,
rgba(0, 61, 134, 0.42) 100%
);
box-shadow: inset 0px 0px 56px 0px rgba(173, 221, 255, 0.5);
backdrop-filter: blur(3px);
padding: 30px 15px;
display: flex;
flex-direction: column;
z-index: 12;
overflow: hidden;
.jbggfwq {
.jbggfwq_content {
height: 500px;
overflow: auto;
display: flex;
flex-direction: column;
margin-top: 15px;
margin-bottom: 34px;
.jbggfwq_content_item {
margin-bottom: 5px;
display: flex;
// align-items: center;
color: #ffffff;
.jbggfwq_content_item_left {
margin-right: 10px;
width: 80px;
height: 48px;
line-height: 48px;
}
.jbggfwq_content_item_right {
width: 370px;
display: flex;
flex-flow: row wrap;
overflow: hidden;
// border-radius: 6px;
.jbggfwq_content_item_right_item {
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
width: 92px;
height: 48px;
font-weight: 500;
text-align: center;
font-size: 16px;
line-height: 28px;
background: rgba(124, 151, 180, 0.8);
// padding: 10px;
margin-bottom: 4px;
position: relative;
/* 必须设置 position 属性以便伪元素定位 */
}
.jbggfwq_content_item_right_item::after {
content: "";
display: block;
width: 1px;
height: 18px;
background-color: #fff;
position: absolute;
top: 14px;
right: 0px;
}
:nth-child(4n).jbggfwq_content_item_right_item::after {
opacity: 0;
}
:last-child.jbggfwq_content_item_right_item::after {
opacity: 0;
}
.choose {
background-image: url(@/assets/images/map/choose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
}
}
.jbggfwq_content::-webkit-scrollbar {
display: none;
}
}
.zyys {
.zyys_content {
margin-top: 20px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
flex-flow: row wrap;
.zyys_content_item {
width: 110px;
height: 54px;
cursor: pointer;
margin-bottom: 20px;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
background: rgba(124, 151, 180, 0.8);
.zyys_content_item_left {
width: 18px;
height: 18px;
margin-right: 3px;
}
.zyys_content_item_right {
font-weight: 500;
font-size: 16px;
}
}
.wz {
width: 150px;
}
.choose {
background-image: url(@/assets/images/map/choose.png);
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
}
}
.title {
background-image: url(@/assets/images/map/map_title_bg.png);
background-repeat: no-repeat;
background-size: 100% 100%;
.title_name {
cursor: pointer;
display: flex;
font-family: YouSheBiaoTiHei;
font-size: 30px;
font-weight: 900;
// line-height: 44px;
letter-spacing: 4px;
margin-bottom: 15px;
background: linear-gradient(180deg, #ffffff 0%, #ffffff 40%, #00ffff 100%);
/* 使文字没有背景颜色的背景 */
background-clip: text;
/* 为了兼容性添加渐变背景到IE */
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
padding-left: 23px;
span {
display: block;
font-family: YouSheBiaoTiHei;
font-size: 30px;
font-weight: 900;
// line-height: 44px;
letter-spacing: 4px;
margin-bottom: 18px;
background: linear-gradient(
180deg,
#ffffff 0%,
#ffffff 40%,
#00ffff 100%
);
/* 使文字没有背景颜色的背景 */
background-clip: text;
/* 为了兼容性添加渐变背景到IE */
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
// .title_line {
// height: 4px;
// width: 100%;
// border-top: 1px solid #ffffff;
// border-bottom: 2px dashed #ffffff;
// }
}
.age-container {
position: relative;
left: 10px;
width: 450px;
height: 120px;
display: flex;
align-items: center;
margin-top: 4px;
.progress-wrapper {
display: flex;
align-items: center;
position: relative;
width: 100%;
}
.progress-container {
position: relative;
transition: width 0.3s ease;
height: 10px;
background-color: rgba(255, 255, 255, 0.2);
&.above-line {
.dot {
top: -20px;
}
.age-line {
top: -30px;
}
span {
&.above-line1 {
top: -55px;
}
}
&:nth-child(even) {
.dot {
top: -20px;
}
.age-line {
top: -18px;
}
span {
top: -40px;
}
}
}
&.below-line {
.dot {
top: 20px;
}
.age-line {
top: 5px;
}
span {
&.below-line1 {
top: 40px;
}
}
&:nth-child(odd) {
.dot {
top: 20px;
}
.age-line {
top: 5px;
}
span {
top: 30px;
}
}
}
.dot {
width: 10px;
height: 10px;
border-radius: 50%;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
.age-line {
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 1px;
height: 20px;
}
span {
position: absolute;
left: 50%;
transform: translateX(-50%);
font-size: 14px;
&.above-line1 {
top: -50px;
}
&.below-line1 {
top: 50px;
}
&.above-line2 {
top: -55px !important; //上面百分比
}
&.below-line2 {
top: 45px !important ; //下面百分比
}
}
}
.progress-container:first-child {
border-radius: 5px 0 0 5px;
}
.progress-container:last-child {
border-radius: 0 5px 5px 0;
}
}
:deep(.el-table) {
background: rgba(32, 64, 115, 1);
--el-table-border-color: none;
border: 1px solid #7aceff;
}
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
background-color: #2f4b74;
}
:deep(.el-table__empty-block) {
background-color: #122560;
}
:deep(.el-table .el-table__row) {
border-bottom: none;
}
.detail {
z-index: 9998;
}
</style>