This commit is contained in:
lcw
2025-07-21 16:21:47 +08:00
parent e83dbabe9d
commit 5855c5d2d6
388 changed files with 126419 additions and 418 deletions

View File

@ -5,6 +5,7 @@ header {
display: flex;
justify-content: space-between;
align-items: center;
.logo {
white-space: nowrap;
padding-left: 8px;
@ -16,6 +17,7 @@ header {
-webkit-text-fill-color: transparent;
text-shadow: 4px 4px 4px rgba(255, 255, 255, 0.15);
}
.right {
display: flex;
height: 100%;
@ -23,9 +25,11 @@ header {
z-index: 199;
position: relative;
padding-right: 10px;
.detail {
display: flex;
cursor: pointer;
.hd {
white-space: nowrap;
color: #ffffff;
@ -100,6 +104,7 @@ header {
color: #fff;
padding: 20px;
box-sizing: border-box;
.head_box {
height: 48px;
border-bottom: 1px solid #f1f4f8;
@ -107,9 +112,11 @@ header {
display: flex;
justify-content: space-between;
align-items: center;
.title {
position: relative;
padding-left: 10px;
&::before {
position: absolute;
content: "";
@ -200,6 +207,7 @@ header {
background: #fff;
border-radius: 4px;
height: calc(100vh - 124px);
.el-table--fit {
width: calc(100% - 20px) !important;
position: absolute;
@ -209,6 +217,7 @@ header {
height: calc(100% - 100px);
overflow: auto;
}
.fenye {
background: #fff;
border-width: 0 1px 1px 1px;
@ -216,6 +225,7 @@ header {
right: 0px;
left: 0px;
padding-right: 10px;
.el-pagination {
display: flex;
align-items: center;
@ -233,7 +243,7 @@ header {
}
::v-deep .el-dialog {
--el-dialog-bg-color: #061639;
// --el-dialog-bg-color: #061639;
}
.main-box {
@ -266,19 +276,24 @@ header {
.content-box-sun {
display: flex;
.org-box {
flex: 1;
.org-content-box {
width: 95%;
.org-search-box {
display: flex;
}
.tree-box {
height: 750px;
overflow: auto;
}
}
}
.right-box-sun {
flex: 4;
}
@ -290,6 +305,7 @@ header {
justify-content: space-between;
position: relative;
z-index: 2;
.title {
height: 60px;
line-height: 60px;
@ -300,4 +316,4 @@ header {
.btnBox {
margin-top: 14px;
}
}
}

View File

@ -0,0 +1,360 @@
<template>
<div :id="mapid" class="map"></div>
<div class="changeMap_box" v-if="props.isShow">
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况"
style="--el-switch-color: #13ce66; --el-switch-off-color: #ff4949" />
<!-- <el-carousel type="card" height="75px" :autoplay="false" indicator-position="none" :initial-index="3" @change="onMapImageChange">
<el-carousel-item>
<div class="mapImageItem">
<img :src="require('@/assets/images/slt.jpg')" alt="" />
<div>栅格浅色</div>
</div>
</el-carousel-item>
<el-carousel-item>
<div class="mapImageItem">
<img :src="require('@/assets/images/yxt.jpg')" alt="" />
<div>影像图</div>
</div>
</el-carousel-item>
<el-carousel-item>
<div class="mapImageItem">
<img :src="require('@/assets/images/yst.jpg')" alt="" />
<div>栅格深色</div>
</div>
</el-carousel-item>
<el-carousel-item>
<div class="mapImageItem">
<img :src="require('@/assets/images/shy.png')" alt="" />
<div>三合一</div>
</div>
</el-carousel-item>
</el-carousel> -->
<!-- 地图缩放 -->
<div class="zoomTargetBox">
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom">
</el-input-number>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted, defineProps, nextTick } from "vue";
import { MapUtil } from "./mapUtil";
import emitter from "@/utils/eventBus.js";
import { getItem } from "@/utils/storage";
const conditionRoute = ref(true); //路况
const mMap = ref(null); //地图对象
const mapUtil = ref(null); //地图工具对象
const zoomTarget = ref(6);
const props = defineProps({
mapid: {
type: String,
default: "mapDiv"
},
//是否显示可以切换地图底图
isShow: {
type: Boolean,
default: false
},
//是否显示实时路况
isShowMvt: {
type: Boolean,
default: false
},
//是否显示地图层级
isShowZoom: {
type: Boolean,
default: false
},
//是否显示绘制控件
isShowDraw: {
type: Boolean,
default: false
}
});
try {
const userInfo = getItem("deptId")[0].deptCode;
} catch (error) { }
let map;
let mapLayer;
let mapLayer1;
onMounted(() => {
emitter.on("followUp", (res) => {
let box = document.getElementsByClassName("changeMap_box");
if (!box) return;
box[0].style.right = !res ? "4px" : "398px";
box[0].style.transition = "0.5s";
});
map = new EliMap({
id: props.mapid,
crs: "EPSG:4490",
style: {
glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36057012, 29.64276831],
zoom: 15
},
minZoom: 7,
maxZoom: 18,
});
window.map = map;
map.mapboxGLMap.on("load", () => {
map.addWMTSLayer(
"http://89.0.23.24/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap"
,
{
Service: "getImage",
Type: "RGB",
ZoomOffset: "0",
V: "0.3",
Zoom: "{z}",
Row: "{y}",
Col: "{x}"
},
{
tileSize: 300
}
);
zoomTarget.value = map.mapboxGLMap.getZoom();
});
mapUtil.value = new MapUtil(map);
mapUtil.value.Drawplot(); //初始化加载绘制工具
// 设置地图中心点及图层
emitter.on("setMapCenter", (res) => {
mapUtil.value.setMapCenter(res.location, res.zoomLevel);
});
emitter.on("removePlot", (flag) => {
mapUtil.value.removePlot(flag);
});
emitter.on("removeAll", (flag) => {
mapUtil.value.removeAll(flag);
});
// 撒点
emitter.on("addPointArea", (obj) => {
mapUtil.value.makerSki(obj);
});
// 鼠标滑过提示文字的点位
emitter.on("showPoint", (obj) => {
mapUtil.value.showPoint(obj);
});
// 清除覆盖物
emitter.on("deletePointArea", (res) => {
mapUtil.value.removeElement(res);
});
// 清除某个覆盖物的单个
emitter.on("deletePointAreaOne", (obj) => {
mapUtil.value.removeElementOne(obj.flag, obj.id);
});
// 清除某个覆盖物的单个
emitter.on("showSquire", (obj) => {
mapUtil.value.zdySquire(obj);
});
// 绘制图形 - 回显区域
emitter.on("drawShape", (res) => {
mapUtil.value.plot(res, resFun);
});
emitter.on("removeEara", (flag) => {
mapUtil.value.removeEara(flag);
});
// 回显图形
emitter.on("echoPlane", (res) => {
mapUtil.value.echoPlane(res);
});
//移除绘制区域
emitter.on("removeEara", (flag) => {
mapUtil.value.removeEara(flag);
});
// 回显线
emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res, res.flag);
});
//创建边界面geojson
emitter.on("setBoundarys", (res) => {
mapUtil.value.createBoundarys(res);
});
// 移除边界
emitter.on("removeBj", (res) => {
mapUtil.value.removeBj(res);
});
// 轨迹回放
emitter.on("drawLineAnimation", (res) => {
mapUtil.value.displayLineAnimation(res);
});
// 聚合撒点
emitter.on("addPoint", (obj) => {
mapUtil.value.aggregateScatteringPoint(obj);
});
// 热力图显示
emitter.on("thermodynamicChart", (res) => {
mapUtil.value.showHeatDrawing(res);
});
// 扩散圆
emitter.on("diffusionCircle", (res) => {
mapUtil.value.diffusionCircle(res);
});
// 展示盘曲
emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj);
});
// 获取当前地图中心点
emitter.on("getCurrentCenter", (res) => {
let centerPoint = map.mapboxGLMap.getCenter();
let coords = [centerPoint.lng, centerPoint.lat];
emitter.emit("getcentercoord", coords);
});
});
//切换地图底图
const onMapImageChange = (val) => {
//清除已经存在胡地图图层
if (map.mapboxGLMap.getLayer("SGQS_ID"))
map.mapboxGLMap.removeLayer("SGQS_ID");
if (map.mapboxGLMap.getLayer("YX_ID")) map.mapboxGLMap.removeLayer("YX_ID");
if (map.mapboxGLMap.getLayer("SGSG_ID"))
map.mapboxGLMap.removeLayer("SGSG_ID");
if (map.mapboxGLMap.getLayer("TDT_TITLE_ID"))
map.mapboxGLMap.removeLayer("TDT_TITLE_ID");
if (map.mapboxGLMap.getLayer("TDT_ROAD_ID"))
map.mapboxGLMap.removeLayer("TDT_ROAD_ID");
if (map.mapboxGLMap.getLayer("TDT_POI_ID"))
map.mapboxGLMap.removeLayer("TDT_POI_ID");
//设置图层
switch (val) {
case 0:
mapSetLayer("SGQS_ID", "SGQS");
break;
case 1:
mapSetLayer("YX_ID", "YX");
break;
case 2:
mapSetLayer("SGSG_ID", "SGSG");
break;
case 3:
mapSetLayer("TDT_TITLE_ID", "TDT_TITLE_SOURCES");
mapSetLayer("TDT_ROAD_ID", "TDT_ROAD_SOURCES");
mapSetLayer("TDT_POI_ID", "TDT_POI_SOURCES");
break;
}
if (map.mapboxGLMap.getLayer("realTimeTrafficlevelOne"))
map.mapboxGLMap.moveLayer("realTimeTrafficlevelOne");
if (map.mapboxGLMap.getLayer("map_id")) map.mapboxGLMap.moveLayer("map_id");
if (map.mapboxGLMap.getLayer("map_ids")) map.mapboxGLMap.moveLayer("map_ids");
};
//设置图层函数
const mapSetLayer = (id, source) => {
map.mapboxGLMap.addLayer({ id, type: "raster", source });
};
//获取地图绘制的数据
const resFun = (coord, type, flag, data) => {
emitter.emit("coordString", {
coord: coord,
type: type,
flag: flag,
data: data
});
};
// 地图层级
const handleZoom = (val) => {
map.mapboxGLMap.setZoom(val);
};
// 是否打开或者关闭路况
const handleSwitch = (val) => {
if (val) {
// 打开
} else {
// 关闭
}
};
onUnmounted(() => {
emitter.off("removePlot");
emitter.off("setMapCenter");
emitter.off("addPointArea");
emitter.off("showPoint");
emitter.off("deletePointArea");
emitter.off("deletePointAreaOne");
emitter.off("drawShape");
emitter.off("echoPlane");
emitter.off("removeEara");
emitter.off("echoLine");
emitter.off("addPoint");
emitter.off("thermodynamicChart");
emitter.off("drawLineAnimation");
emitter.off("aggregateScatteringPoint");
emitter.off("hotmap");
emitter.off("setBoundarys");
emitter.off("diffusionCircle");
emitter.off("SsCircle");
emitter.off("ClearssCircle");
});
</script>
<style lang="scss" scoped>
.map {
width: 100%;
height: 100%;
background-color: aliceblue;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
z-index: 1;
}
.changeMap_box {
position: absolute;
right: 398px;
bottom: 4px;
z-index: 9;
.mapImageItem {
border: 1px solid #08aae8;
background: rgb(9, 26, 70);
&>img {
width: 100%;
height: 50px;
}
&>div {
text-align: center;
position: relative;
top: -3px;
}
}
.zoomTargetBox {
margin-top: 10px;
margin-left: 23px;
}
::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase {
background: #133362;
color: #fff;
border: none;
}
::v-deep .el-input__inner {
background: #0c1641;
}
}
</style>

View File

@ -1,8 +1,7 @@
<template>
<div :id="mapid" class="map"></div>
<div class="changeMap_box" v-if="props.isShow">
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况"
style="--el-switch-color: #13ce66; --el-switch-off-color: #ff4949" />
<el-switch v-model="conditionRoute" @change="handleSwitch" active-text="打开路况" inactive-text="关闭路况" style="--el-switch-color:#13ce66;--el-switch-off-color:#ff4949;" />
<!-- <el-carousel type="card" height="75px" :autoplay="false" indicator-position="none" :initial-index="3" @change="onMapImageChange">
<el-carousel-item>
<div class="mapImageItem">
@ -75,7 +74,7 @@ const props = defineProps({
});
try {
const userInfo = getItem("deptId")[0].deptCode;
} catch (error) { }
} catch (error) {}
let map;
let mapLayer;
let mapLayer1;
@ -89,33 +88,27 @@ onMounted(() => {
map = new EliMap({
id: props.mapid,
crs: "EPSG:4490",
crs: "EPSG:3857",
style: {
glyphs: "./fonts/{fontstack}/{range}.pbf",
center: [94.36057012, 29.64276831],
zoom: 15
center: [94.36,29.65],
zoom: 10
},
minZoom: 7,
maxZoom: 18,
transformRequest: (url) => {
if (url.indexOf("TileMatrix=") != -1) {
const arr = url.split("TileMatrix=");
const arr1 = arr[1].split("&");
const nurl = `${arr[0]}&TileMatrix=${Number(arr1[0])}&${arr1[1]}&${arr1[2]}`;
}
}
});
window.map = map;
map.mapboxGLMap.on("load", () => {
map.addWMTSLayer(
"http://89.0.23.24/PGIS_S_TileMapServer/Maps/XZDJ_SL/EzMap"
,
{
Service: "getImage",
Type: "RGB",
ZoomOffset: "0",
V: "0.3",
Zoom: "{z}",
Row: "{y}",
Col: "{x}"
},
{
tileSize: 300
}
);
map.addGaudLayer({
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
})
zoomTarget.value = map.mapboxGLMap.getZoom();
});
mapUtil.value = new MapUtil(map);
@ -173,7 +166,7 @@ onMounted(() => {
});
// 回显线
emitter.on("echoLine", (res) => {
mapUtil.value.createLine(res, res.flag);
mapUtil.value.createLine(res);
});
//创建边界面geojson
emitter.on("setBoundarys", (res) => {
@ -204,6 +197,11 @@ onMounted(() => {
mapUtil.value.diffusionCircle(res);
});
// 清除全部覆盖物
emitter.on("removeElementAll", () => {
mapUtil.value.removeElementAll();
});
// 展示盘曲
emitter.on("showGapText", (obj) => {
mapUtil.value.gapText(obj);
@ -302,6 +300,7 @@ onUnmounted(() => {
emitter.off("diffusionCircle");
emitter.off("SsCircle");
emitter.off("ClearssCircle");
emitter.off("removeElementAll");
});
</script>
@ -324,35 +323,29 @@ onUnmounted(() => {
right: 398px;
bottom: 4px;
z-index: 9;
.mapImageItem {
border: 1px solid #08aae8;
background: rgb(9, 26, 70);
&>img {
& > img {
width: 100%;
height: 50px;
}
&>div {
& > div {
text-align: center;
position: relative;
top: -3px;
}
}
.zoomTargetBox {
margin-top: 10px;
margin-left: 23px;
}
::v-deep .el-input-number__decrease,
::v-deep .el-input-number__increase {
background: #133362;
color: #fff;
border: none;
}
::v-deep .el-input__inner {
background: #0c1641;
}

View File

@ -86,4 +86,4 @@ function exportExcel() {
</script>
<style>
</style>
</style>

View File

@ -1,132 +1,65 @@
<template>
<div
v-loading="loadingPage"
class="pageSearch searchBox"
:style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`"
>
<div v-loading="loadingPage" class="pageSearch searchBox"
:style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`">
<div class="box">
<div v-for="(item, index) in getArr" :key="index" class="item">
<div class="label" v-if="item.label">{{ item.label }}</div>
<!-- select -->
<el-select
v-if="item.showType === 'select'"
v-model="searchObj[item.prop]"
:multiple="item.multiple"
:clearable="item.clearable"
:filterable="item.filterable"
:placeholder="item.placeholder"
collapse-tags
collapse-tags-tooltip
>
<el-option
v-for="obj in getOptions[item.prop]"
:key="obj.value"
:label="obj.label || obj.lable"
:value="obj.value"
/>
<el-select v-if="item.showType === 'select'" v-model="searchObj[item.prop]" :multiple="item.multiple"
:clearable="item.clearable" :filterable="item.filterable" :placeholder="item.placeholder" collapse-tags
collapse-tags-tooltip>
<el-option v-for="obj in getOptions[item.prop]" :key="obj.value" :label="obj.label || obj.lable"
:value="obj.value" />
</el-select>
<!-- input -->
<el-input
v-else-if="item.showType === 'input'"
class="input"
v-model="searchObj[item.prop]"
:clearable="item.clearable"
:placeholder="item.placeholder"
/>
<el-input v-else-if="item.showType === 'input'" class="input" v-model="searchObj[item.prop]"
:clearable="item.clearable" :placeholder="item.placeholder" />
<!-- 日期段选择器 -->
<el-date-picker
v-else-if="item.showType === 'daterange'"
v-model="searchObj[item.prop]"
type="daterange"
unlink-panels
:range-separator="item.rangeSeparator"
:start-placeholder="item.startPlaceholder"
:end-placeholder="item.endPlaceholder"
:shortcuts="item.shortcuts"
:disabledDate="item.bool ? disabledDate : ''"
value-format="YYYY-MM-DD"
/>
<el-date-picker v-else-if="item.showType === 'daterange'" v-model="searchObj[item.prop]" type="daterange"
unlink-panels :range-separator="item.rangeSeparator" :start-placeholder="item.startPlaceholder"
:end-placeholder="item.endPlaceholder" :shortcuts="item.shortcuts"
:disabledDate="item.bool ? disabledDate : ''" value-format="YYYY-MM-DD" />
<el-date-picker
v-else-if="item.showType === 'date'"
v-model="searchObj[item.prop]"
type="date"
:placeholder="item.placeholder"
:disabled-date="disabledDate"
:shortcuts="item.shortcuts"
value-format="YYYY-MM-DD"
>
<el-date-picker v-else-if="item.showType === 'date'" v-model="searchObj[item.prop]" type="date"
:placeholder="item.placeholder" :disabled-date="disabledDate" :shortcuts="item.shortcuts"
value-format="YYYY-MM-DD">
</el-date-picker>
<el-time-picker v-else-if="item.showType === 'time'" v-model="searchObj[item.prop]" format="HH:mm:ss"
value-format="HH:mm:ss" :placeholder="item.placeholder" />
<!-- 时间日期 -->
<el-date-picker
v-else-if="item.showType === 'datetime'"
v-model="searchObj[item.prop]"
type="datetime"
:placeholder="item.placeholder"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
<el-date-picker v-else-if="item.showType === 'datetime'" v-model="searchObj[item.prop]" type="datetime"
:placeholder="item.placeholder" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
<!-- checkbox -->
<template v-else-if="item.showType === 'department'">
<MOSTY.Department clearable v-model="item.ssbmdm" />
</template>
<!-- checkbox -->
<template v-else-if="item.showType === 'checkbox'">
<el-checkbox
v-if="item.showSelectAll"
v-model="item.checkAll"
:indeterminate="item.isIndeterminate"
@change="
(val) => {
handleCheckAllChange(val, item);
}
"
>全选</el-checkbox
>
<el-checkbox-group
v-model="searchObj[item.prop]"
@change="
(val) => {
handleCheckedCitiesChange(val, item);
}
"
>
<el-checkbox
v-for="obj in item.options"
:key="obj.value"
:label="obj.value"
>{{ obj.label }}</el-checkbox
>
<el-checkbox v-if="item.showSelectAll" v-model="item.checkAll" :indeterminate="item.isIndeterminate" @change="
(val) => {
handleCheckAllChange(val, item);
}
">全选</el-checkbox>
<el-checkbox-group v-model="searchObj[item.prop]" @change="
(val) => {
handleCheckedCitiesChange(val, item);
}
">
<el-checkbox v-for="obj in item.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-checkbox>
</el-checkbox-group>
</template>
<!-- radio -->
<el-radio-group
v-else-if="item.showType === 'radio'"
v-model="searchObj[item.prop]"
@change="
(val) => {
handleRadioChange(val, item);
}
"
>
<el-radio
v-for="obj in item.options"
:key="obj.value"
:label="obj.value"
>{{ obj.label }}</el-radio
>
<el-radio-group v-else-if="item.showType === 'radio'" v-model="searchObj[item.prop]" @change="
(val) => {
handleRadioChange(val, item);
}
">
<el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio>
</el-radio-group>
<!-- 级联选择 -->
<el-cascader
v-else-if="item.showType === 'cascader'"
@change="changeca"
v-model="searchObj[item.prop]"
:props="item.props"
:show-all-levels="item.showAllLevels"
:clearable="item.clearable"
:options="getOptions[item.prop]"
:placeholder="item.placeholder"
/>
<el-cascader v-else-if="item.showType === 'cascader'" @change="changeca" v-model="searchObj[item.prop]"
:props="item.props" :show-all-levels="item.showAllLevels" :clearable="item.clearable"
:options="getOptions[item.prop]" :placeholder="item.placeholder" />
<div v-else-if="item.showType === 'defaultSlot'">
<slot name="defaultSlot"></slot>
</div>
@ -583,11 +516,13 @@ watchEffect(() => {
.box {
display: flex;
flex-wrap: wrap;
.item {
display: flex;
margin-right: 20px;
margin-bottom: 15px;
}
.label {
margin: auto;
margin-right: 5px;

View File

@ -33,7 +33,7 @@
<el-form-item label="公交线路编码">
<el-input
disabled
v-model="listQuery.zdbm"
v-model="listQuery.gjxlbm"
placeholder="公交线路编码"
/>
</el-form-item>

View File

@ -60,7 +60,7 @@ const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "行政区划",
prop: "xzqy",
prop: "xzqhbm",
placeholder: "行政区划",
showType: "select",
options: D_BZ_XZQHDM
@ -69,13 +69,13 @@ const searchConfiger = ref([
label: "开始时间",
prop: "startTime",
placeholder: "公交线路起点站",
showType: "datetime"
showType: "time"
},
{
label: "结束时间",
prop: "endTime",
placeholder: "公交线路终点站",
showType: "datetime"
showType: "time"
}
]);
@ -107,8 +107,10 @@ const pageData = reactive({
tableColumn: [
{ label: "公交线路编码", prop: "gjxlbm" },
{ label: "公交站点名称", prop: "zdmc" },
{ label: "公交站点编码", prop: "xzqhbm" },
{ label: "行政区划", prop: "xzqhbm", showSolt: true }
{ label: "公交站点编码", prop: "zdbm" },
{ label: "行政区划", prop: "xzqhbm", showSolt: true },
{ label: "开始时间", prop: "kssj" },
{ label: "结束时间", prop: "jssj" }
]
});
@ -140,7 +142,7 @@ const getList = () => {
tbGjZdxxselectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -71,26 +71,9 @@ const urlImg = "/mosty-api/mosty-base/minio/image/download/";
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "车牌号",
prop: "cph",
placeholder: "车牌号",
showType: "input"
},
// {
// label: "起点",
// prop: "xlqdz",
// placeholder: "起点",
// showType: "input"
// },
// {
// label: "终点",
// prop: "xlzdz",
// placeholder: "终点",
// showType: "input"
// },
{
label: "日期",
label: "预警日期",
prop: "startTime",
placeholder: "日期",
showType: "daterange",
@ -158,7 +141,7 @@ const getList = () => {
tbGjYjgetPageList(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -0,0 +1,88 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="flex justify-end">
<el-button size="small" @click="close">关闭</el-button>
</div>
<el-form :label-width="230" label-position="left" v-model="personalInfo">
<div class="flex align-center bottom" :key="index">
<div style="width: calc(100% - 400px)">
<div class="form-row">
<el-form-item label="车辆驾驶员">
<el-input v-model="personalInfo.cljsy" placeholder="车辆驾驶员" disabled />
</el-form-item>
<el-form-item label="车辆类型">
<el-select v-model="personalInfo.cllx" placeholder="请选择车辆类型" disabled>
<el-option
v-for="item in dict.D_BZ_GGJTGJLX"
:key="item.value"
:label="item.zdmc"
:value="item.dm"
/>
</el-select>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="车牌号">
<el-input v-model="personalInfo.cph" placeholder="请输入" disabled/>
</el-form-item>
<el-form-item label="单位名称">
<el-input v-model="personalInfo.dwmc" placeholder="请输入" disabled/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="企业部门">
<el-input v-model="personalInfo.qybm" placeholder="请输入" disabled/>
</el-form-item>
<el-form-item label="行政区域">
<el-input v-model="personalInfo.xzqy" placeholder="请输入" disabled/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="线路名称">
<el-input v-model="personalInfo.xlmc" placeholder="请输入" disabled/>
</el-form-item>
</div>
</div>
</div>
</el-form>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const props = defineProps({
dict: {
type: Object,
default: () => {}
}
})
const personalInfo = ref({})
const dialogForm = ref(false)
const init = (type, res) => {
dialogForm.value = true;
personalInfo.value = res
}
const close = () => {
dialogForm.value = false;
}
onMounted(() => {
});
defineExpose({
init
});
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
.justify-end {
justify-content: right;
}
</style>

View File

@ -0,0 +1,152 @@
<template>
<div>
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
</Search>
</div>
<!-- 表格 -->
<!-- class="tabBox" -->
<div>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #cllx="{ row }">
<dict-tag :options="dict.D_BZ_GGJTGJLX" :value="row.cllx" :tag="false" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('basic', row)">详情</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<!-- 详情 -->
<Cldeict ref="cldeict" :dict="dict" />
</div>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import { tbGjclselectPage } from "@/api/mosty-zhgj.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import Cldeict from "./cldeict.vue";
const cldeict = ref()
const searchBox = ref(); //搜索框
const props = defineProps({
dwid: { type: String, default: "" },
dict: {
type: Object,
default: () => { }
}
})
const searchConfiger = ref([
{
label: "车牌号",
prop: "cph",
placeholder: "车牌号",
showType: "input"
},
{
label: "车辆驾驶员",
prop: "cljsy",
placeholder: "车辆驾驶员",
showType: "input"
}, {
label: "车辆类型",
prop: "cllx",
placeholder: "车辆类型",
showType: "select",
options: props.dict.D_BZ_GGJTGJLX
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 5,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "车辆类型", prop: "cllx", showSolt: true },
{ label: "车牌号", prop: "cph" },
{ label: "单位名称", prop: "dwmc" },
{ label: "部门", prop: "qybm" },
{ label: "线路名称", prop: "xlmc" },
{ label: "驾驶员", prop: "cljsy" },
]
});
onMounted(() => {
getList();
tabHeightFn();
});
//选择类型
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value, dwid: props.dwid };
tbGjclselectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
const addEdit = (type, row) => {
cldeict.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 350;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,163 @@
<template>
<div>
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
>
</Search>
</div>
<!-- 表格 -->
<!-- class="tabBox" -->
<div >
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('basic', row)">详情</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 详情 -->
<Cyrydeict ref="cyrydeict" :dict="dict"/>
</div>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import {tbJcxxAbryselectPage } from "@/api/mosty-zhgj.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import Cyrydeict from "./cyrydeict.vue";
const cyrydeict = ref()
const searchBox = ref(); //搜索框
const props = defineProps({
dwid: { type: String, default: "" },
dict: {
type: Object,
default: () => {}
},
})
const searchConfiger = ref([
{
label: "姓名",
prop: "xm",
placeholder: "姓名",
showType: "input"
},
{
label: "证件号码",
prop: "zjhm",
placeholder: "证件号码",
showType: "input"
} , {
label: "联系方式",
prop: "lxdh",
placeholder: "联系方式",
showType: "input"
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 5,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "证件号码", prop: "zjhm" },
{ label: "联系方式", prop: "lxdh" },
{ label: "入职时间", prop: "rzsj" },
{ label: "岗位", prop: "gw" }
]
});
onMounted(() => {
getList();
tabHeightFn();
});
//选择类型
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value,dwid:props.dwid };
tbJcxxAbryselectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
const addEdit = (type, row) => {
cyrydeict.value.init(type, row);
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 350;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,98 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="flex justify-end">
<el-button size="small" @click="close">关闭</el-button>
</div>
<el-form :label-width="230" label-position="left" v-model="personalInfo">
<div style="width: calc(100% - 400px);overflow: auto;">
<div class="form-row">
<el-form-item label="姓名">
<el-input v-model="personalInfo.xm" placeholder="姓名" disabled />
</el-form-item>
<el-form-item label="民族">
<el-select v-model="personalInfo.mzdm" placeholder="请选择民族" disabled>
<el-option
v-for="item in dict.D_BZ_MZ"
:key="item.value"
:label="item.zdmc"
:value="item.dm"
/>
</el-select>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="证件号码">
<el-input v-model="personalInfo.zjhm" placeholder="请输入证件号码" disabled/>
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="personalInfo.lxdh" placeholder="请输入证件号码" disabled/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="居住地址">
<el-input v-model="personalInfo.jzdz" placeholder="请输入证件号码" disabled/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="单位名称">
<el-input v-model="personalInfo.dwmc" placeholder="请输入证件号码" disabled/>
</el-form-item>
<el-form-item label="企业部门">
<el-input v-model="personalInfo.qybm" placeholder="请输入证件号码" disabled />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="入职时间">
<el-input v-model="personalInfo.rzsj" placeholder="请输入入职时间" disabled/>
</el-form-item>
<el-form-item label="岗位">
<el-input v-model="personalInfo.gw" placeholder="请输入岗位" disabled/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="违法犯罪经历描述">
<el-input v-model="personalInfo.wffzms" placeholder="请输入违法犯罪经历描述" disabled/>
</el-form-item>
</div>
</div>
</el-form>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const props = defineProps({
dict: {
type: Object,
default: () => {}
}
})
const personalInfo = ref({})
const dialogForm=ref(false)
const init = (type,res) => {
dialogForm.value = true;
personalInfo.value = res
}
const close = () => {
dialogForm.value = false;
}
onMounted(() => {
});
defineExpose({
init
});
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
.justify-end{
justify-content: right;
}
</style>

View File

@ -18,13 +18,13 @@
<div style="width: calc(100% - 176px)">
<div class="form-row">
<el-form-item label="单位类型">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.dwlx"
placeholder="ktv"
/>
</el-form-item>
<el-form-item label="统一社会信用代码">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.shxydm"
placeholder="请输入"
/>
@ -32,13 +32,13 @@
</div>
<div class="form-row">
<el-form-item label="单位名称(营业执照登记名称)">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.dwmc"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="单位注册地址">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.dwzcdz"
placeholder="请输入"
/>
@ -46,13 +46,13 @@
</div>
<div class="form-row">
<el-form-item label="单位司机数量">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.dwsjsl"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="单位车辆数量">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.dwclsl"
placeholder="请输入"
/>
@ -60,7 +60,7 @@
</div>
<div class="form-row">
<el-form-item label="所属辖区">
<el-input
<el-input disabled
v-model="dataList.corpoInfo.ssxq"
placeholder="请输入"
/>
@ -78,102 +78,16 @@
</el-tab-pane>
<el-tab-pane label="从业人员" name="staff">
<!-- 从业人员表格 -->
<el-form :label-width="230" label-position="left">
<div
class="flex align-center bottom"
v-for="(item, index) in dataList.personalInfo"
:key="index"
>
<div style="width: calc(100% - 176px)">
<div class="form-row">
<el-form-item label="姓名">
<el-input v-model="item.xm" placeholder="ktv" />
</el-form-item>
<el-form-item label="民族">
<el-input v-model="item.shxydm" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="证件号码">
<el-input v-model="item.zjhm" placeholder="请输入" />
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="item.lxdh" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="居住地址">
<el-input v-model="item.jzdz" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="单位名称">
<el-input v-model="item.dwmc" placeholder="请输入" />
</el-form-item>
<el-form-item label="企业部门">
<el-input v-model="item.qybm" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="入职时间">
<el-input v-model="item.rzsj" placeholder="请输入" />
</el-form-item>
<el-form-item label="岗位">
<el-input v-model="item.gw" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="违法犯罪经历描述">
<el-input v-model="item.wffzms" placeholder="请输入" />
</el-form-item>
</div>
</div>
</div>
<Empty :show="dataList.personalInfo.length == 0" />
</el-form>
<Cyry v-if="activeName=='staff'" :dwid="dataList.corpoInfo.id" :dict="dict"/>
</el-tab-pane>
<el-tab-pane label="车辆" name="vehicle">
<!-- 车辆 -->
<el-form :label-width="230" label-position="left">
<div
class="flex align-center bottom"
v-for="(item, index) in dataList.vehicleInfo"
:key="index"
>
<div style="width: calc(100% - 176px)">
<div class="form-row">
<el-form-item label="车辆驾驶员">
<el-input v-model="item.cljsy" placeholder="ktv" />
</el-form-item>
<el-form-item label="车辆类型">
<el-input v-model="item.cllx" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="车牌号">
<el-input v-model="item.cph" placeholder="请输入" />
</el-form-item>
<el-form-item label="单位名称">
<el-input v-model="item.dwmc" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="企业部门">
<el-input v-model="item.qybm" placeholder="请输入" />
</el-form-item>
<el-form-item label="行政区域">
<el-input v-model="item.xzqy" placeholder="请输入" />
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="线路名称">
<el-input v-model="item.xlmc" placeholder="请输入" />
</el-form-item>
</div>
</div>
</div>
<Clsl v-if="activeName=='vehicle'" :dwid="dataList.corpoInfo.id" :dict="dict"/>
<!-- <el-form :label-width="230" label-position="left">
<Empty :show="dataList.vehicleInfo.length == 0" />
</el-form>
</el-form> -->
</el-tab-pane>
</el-tabs>
</div>
@ -184,6 +98,11 @@
import { ref, reactive } from "vue";
import { tbGjclselectList, tbJcxxAbrySelectList } from "@/api/mosty-zhgj.js";
import Empty from "@/components/Empty/index.vue";
import Cyry from './cyry.vue'
import Clsl from './clsl.vue'
const props = defineProps({
dict: { type: Object, default:{} }
});
const dialogForm = ref(false);
const activeName = ref("basic");
const title = ref("单位信息");
@ -192,20 +111,21 @@ const dataList = reactive({
vehicleInfo: [],
personalInfo: []
});
// 初始化数据
const init = (type, row) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
activeName.value = type;
dataList.corpoInfo = { ...row };
switchover(type);
// switchover(type);
};
const switchover = (type) => {
if (type == "staff") {
gettbJcxxAbrySelectList();
} else if (type == "vehicle") {
gettbGjclselectList();
}
// if (type == "staff") {
// // gettbJcxxAbrySelectList();
// } else if (type == "vehicle") {
// gettbGjclselectList();
// }
};
const gettbJcxxAbrySelectList = () => {
tbJcxxAbrySelectList({ dwid: dataList.corpoInfo.id }).then((res) => {

View File

@ -1,7 +1,7 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="客运单位信息管理" />
<PageTitle title="客运单位信息管理"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">
@ -10,13 +10,7 @@
@submit="onSearch"
:key="pageData.keyCount"
>
<!-- <template #defaultSlot>
<div>
<el-input-number v-model="queryFrom.xqy"></el-input-number>
<span class="ml10 mr10" style="color: #000"></span>
<el-input-number v-model="queryFrom.dqy"></el-input-number>
</div>
</template> -->
</Search>
</div>
<!-- 表格 -->
@ -52,7 +46,7 @@
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
<DetailForm ref="detailDiloag" :dict="{D_BZ_MZ,D_BZ_GGJTGJLX}"/>
</div>
</template>
@ -65,20 +59,20 @@ import DetailForm from "./components/detailForm.vue";
import { gjDwjbxxSelectPage } from "@/api/mosty-zhgj.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const { D_BZ_MZ,D_BZ_GGJTGJLX} =proxy.$dict("D_BZ_MZ","D_BZ_GGJTGJLX")
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "单位名称",
prop: "placeName",
prop: "dwmc",
placeholder: "单位名称",
showType: "input"
},
{
label: "单位类型",
prop: "placeName",
prop: "dwlx",
placeholder: "单位类型",
showType: "input"
}
@ -87,16 +81,7 @@ const searchConfiger = ref([
const queryFrom = ref({});
const pageData = reactive({
tableData: [
// {
// id: 1,
// placeName: "老王打印店",
// placePhone: "13800138000",
// legalPersonName: "张三",
// legalPersonId: "511222222222222",
// legalPersonPhone: "13900139000",
// operationStatus: "在营",
// jurisdiction: "巴宜区纺织路派出所"
// }
],
keyCount: 0,
tableConfiger: {
@ -111,10 +96,10 @@ const pageData = reactive({
},
controlsWidth: 200,
tableColumn: [
{ label: "单位名称", prop: "placeName" },
{ label: "单位类型", prop: "operationStatus" },
{ label: "单位车辆数量", prop: "jurisdiction" },
{ label: "所属辖区", prop: "legalPersonName" }
{ label: "单位名称", prop: "dwmc" },
{ label: "单位类型", prop: "dwlx" },
{ label: "单位车辆数量", prop: "dwclsl" },
{ label: "所属辖区", prop: "ssxq" }
]
});
@ -146,7 +131,7 @@ const getList = () => {
gjDwjbxxSelectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -142,7 +142,7 @@ const getList = () => {
tbJcxxAbryselectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -12,65 +12,72 @@
<div style="width: calc(100% - 176px)">
<div class="form-row">
<el-form-item label="行政区域">
<el-input v-model="listQuery.dwlx" placeholder="行政区域" />
<el-select v-model="listQuery.xzqy" placeholder="请选择车辆类型" disabled>
<el-option
v-for="item in dict.D_BZ_XZQHDM"
:key="item.value"
:label="item.zdmc"
:value="item.dm"
/>
</el-select>
</el-form-item>
<el-form-item label="公交线路编码">
<el-input
v-model="listQuery.shxydm"
<el-input disabled
v-model="listQuery.xlbm"
placeholder="公交线路编码"
/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="公交线路名称">
<el-input v-model="listQuery.dwmc" placeholder="公交线路名称" />
<el-input v-model="listQuery.xlmc" placeholder="公交线路名称" disabled/>
</el-form-item>
<el-form-item label="公交线路起点站">
<el-input
v-model="listQuery.dwzcdz"
v-model="listQuery.xlqdz" disabled
placeholder="公交线路起点站"
/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="公交线路终点站" class="el-form-items">
<el-input
v-model="listQuery.dwsjsl"
<el-input disabled
v-model="listQuery.xlzdz"
placeholder="公交线路终点站"
/>
</el-form-item>
</div>
<div class="form-row">
<!-- <div class="form-row">
<el-form-item label="起点站首末车">
<el-input v-model="listQuery.ssxq" placeholder="起点站首末车" />
</el-form-item>
</div>
</div> -->
<div class="form-row">
<el-form-item label="开始时间">
<el-input
v-model="listQuery.ssxq"
<el-form-item label="起点站开始时间">
<el-input disabled
v-model="listQuery.qdzjssj"
placeholder="开始时间"
/> </el-form-item
><el-form-item label="结束时间">
<el-input v-model="listQuery.ssxq" placeholder="结束时间" />
><el-form-item label="起点站结束时间">
<el-input v-model="listQuery.qdzkssj" placeholder="结束时间" disabled/>
</el-form-item>
</div>
<div class="form-row">
<!-- <div class="form-row">
<el-form-item label="终点站点站首末车">
<el-input
v-model="listQuery.ssxq"
placeholder="终点站点站首末车"
/>
</el-form-item>
</div>
</div> -->
<div class="form-row">
<el-form-item label="开始时间">
<el-input
v-model="listQuery.ssxq"
<el-form-item label="终点站开始时间">
<el-input disabled
v-model="listQuery.zdzkssj"
placeholder="开始时间"
/> </el-form-item
><el-form-item label="结束时间">
<el-input v-model="listQuery.ssxq" placeholder="结束时间" />
><el-form-item label="终点站结束时间">
<el-input v-model="listQuery.zdzjssj" placeholder="结束时间" disabled/>
</el-form-item>
</div>
</div>
@ -82,7 +89,12 @@
<script setup>
import { ref, reactive } from "vue";
const props = defineProps({
dict: {
type: Array,
default: {},
},
});
const dialogForm = ref(false);
const title = ref("公交线路详情");
const listQuery = ref({});

View File

@ -9,15 +9,7 @@
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
>
<!-- <template #defaultSlot>
<div>
<el-input-number v-model="queryFrom.xqy"></el-input-number>
<span class="ml10 mr10" style="color: #000"></span>
<el-input-number v-model="queryFrom.dqy"></el-input-number>
</div>
</template> -->
</Search>
/>
</div>
<!-- 表格 -->
<div class="tabBox">
@ -30,6 +22,13 @@
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #xzqy="{ row }">
<dict-tag
:options="D_BZ_XZQHDM"
:value="row.xzqy"
:tag="false"
/>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('detail', row)">详情</el-link>
@ -46,7 +45,7 @@
></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" title="公交线路详情" />
<DetailForm ref="detailDiloag" title="公交线路详情" :dict="{D_BZ_XZQHDM}"/>
</div>
</template>
@ -59,7 +58,7 @@ import DetailForm from "./components/detailForm.vue";
import { tbGjclXlxxselectPage } from "@/api/mosty-zhgj.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const {D_BZ_XZQHDM}=proxy.$dict('D_BZ_XZQHDM')
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const searchConfiger = ref([
@ -67,7 +66,8 @@ const searchConfiger = ref([
label: "行政区划",
prop: "xzqy",
placeholder: "行政区划",
showType: "input"
showType: "select",
options: D_BZ_XZQHDM,
},
{
label: "公交线路起点站",
@ -99,10 +99,10 @@ const pageData = reactive({
},
controlsWidth: 200,
tableColumn: [
{ label: "公交线路名称", prop: "placeName" },
{ label: "公交线路起点站", prop: "operationStatus" },
{ label: "公交线路终点站", prop: "jurisdiction" },
{ label: "行政区划", prop: "legalPersonName" }
{ label: "公交线路名称", prop: "xlmc" },
{ label: "公交线路起点站", prop: "xlqdz" },
{ label: "公交线路终点站", prop: "xlzdz" },
{ label: "行政区划", prop: "xzqy",showSolt:true }
]
});

View File

@ -13,31 +13,31 @@
<div class="form-row">
<div class="form-item">
<div class="lable">车牌号</div>
<div class="menu">{{ listQuery.cph }}</div>
<div class="menu">{{ listQuery.msgs.cph }}</div>
</div>
<div class="form-item">
<div class="lable">日期</div>
<div class="menu">{{ listQuery.gprq }}</div>
<div class="menu">{{listQuery.msgs.gprq }}</div>
</div>
</div>
<div class="form-row">
<div class="form-item">
<div class="lable">车辆驾驶员</div>
<div class="menu">{{ listQuery.cljsy }}</div>
<div class="menu">{{ listQuery.msgs.cljsy }}</div>
</div>
<div class="form-item">
<div class="lable">车辆起始线路</div>
<div class="menu">{{ listQuery.clqsxl }}</div>
<div class="menu">{{listQuery.msgs.clqsxl }}</div>
</div>
</div>
<div class="form-row">
<div class="form-item">
<div class="lable">乘客数量</div>
<div class="menu">{{ listQuery.cksl }}</div>
<div class="menu">{{ listQuery.msgs.cksl }}</div>
</div>
<div class="form-item">
<div class="lable">重点人数量</div>
<div class="menu">{{ listQuery.zdrsl }}</div>
<div class="menu">{{ listQuery.msgs.zdrsl }}</div>
</div>
</div>
<!-- 乘客信息 -->
@ -152,31 +152,31 @@
<div class="form-row">
<div class="form-item">
<div class="lable">车牌号</div>
<div class="menu">{{ listQuery.cph }}</div>
<div class="menu">{{listQuery.msgs.cph }}</div>
</div>
<div class="form-item">
<div class="lable">日期</div>
<div class="menu">{{ listQuery.gprq }}</div>
<div class="menu">{{ listQuery.msgs.gprq }}</div>
</div>
</div>
<div class="form-row">
<div class="form-item">
<div class="lable">车辆驾驶员</div>
<div class="menu">{{ listQuery.cljsy }}</div>
<div class="menu">{{ listQuery.msgs.cljsy }}</div>
</div>
<div class="form-item">
<div class="lable">车辆起始线路</div>
<div class="menu">{{ listQuery.clqsxl }}</div>
<div class="menu">{{ listQuery.msgs.clqsxl }}</div>
</div>
</div>
<div class="form-row">
<div class="form-item">
<div class="lable">乘客数量</div>
<div class="menu">{{ listQuery.cksl }}</div>
<div class="menu">{{ listQuery.msgs.cksl }}</div>
</div>
<div class="form-item">
<div class="lable">重点人数量</div>
<div class="menu">{{ listQuery.zdrsl }}</div>
<div class="menu">{{ listQuery.msgs.zdrsl }}</div>
</div>
</div>
</div>
@ -191,6 +191,7 @@
import { ref, reactive } from "vue";
import GdMap from "@/components/GdMap/index.vue";
import { tbGpJbxxgetInfo, tbGjclgetInfo } from "@/api/mosty-zhgj.js";
import emitter from "@/utils/eventBus.js";
const props = defineProps({
dict: {
type: Object,
@ -199,7 +200,7 @@ const props = defineProps({
});
const dialogForm = ref(false);
const title = ref("购票详情");
const listQuery = reactive({ zdrList: [], ztscryList: [], ckxxList: [] });
const listQuery = reactive({ zdrList: [], ztscryList: [], ckxxList: [],msgs:{}});
const show = ref(true);
// 初始化数据
const init = (type, row) => {
@ -219,7 +220,10 @@ const init = (type, row) => {
};
const gettbGpJbxxgetInfo = (val) => {
tbGpJbxxgetInfo(val).then((res) => {
listQuery = res;
listQuery.msgs = { ...res };
listQuery.ckxxList = res.ckxxList;
listQuery.zdrList = res.zdrList;
listQuery.ztscryList = res.ztscryList;
});
};
const gettbGjclgetInfo = (val) => {

View File

@ -64,21 +64,21 @@ const searchConfiger = ref([
placeholder: "车牌号",
showType: "input"
},
// {
// label: "起点",
// prop: "xlqdz",
// placeholder: "起点",
// showType: "input"
// },
// {
// label: "终点",
// prop: "xlzdz",
// placeholder: "终点",
// showType: "input"
// },
{
label: "起点",
prop: "xlqdz",
placeholder: "起点",
showType: "input"
},
{
label: "终点",
prop: "xlzdz",
placeholder: "终点",
showType: "input"
},
{
label: "日期",
prop: "endTime",
label: "购票日期",
prop: "gprq",
placeholder: "日期",
showType: "date"
}
@ -99,12 +99,12 @@ const pageData = reactive({
},
controlsWidth: 200,
tableColumn: [
{ label: "车牌号", prop: "gjxlbm" },
{ label: "日期", prop: "zdmc" },
{ label: "车辆驾驶员", prop: "xm" },
{ label: "车辆行驶线路", prop: "xzqhbm" },
{ label: "乘客数量", prop: "xzqhbm" },
{ label: "重点人数量", prop: "xzqhbm" }
{ label: "车牌号", prop: "cph" },
{ label: "购票日期", prop: "gprq" },
{ label: "车辆驾驶员", prop: "cljsy" },
{ label: "车辆行驶线路", prop: "clqsxl" },
{ label: "乘客数量", prop: "cksl" },
{ label: "重点人数量", prop: "zdrsl" }
]
});
onMounted(() => {
@ -135,7 +135,7 @@ const getList = () => {
tbGpJbxxselectPage(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -134,7 +134,7 @@ const getList = () => {
tbGjYjgetPageList(data)
.then((res) => {
pageData.tableData = res.records;
pageData.total = 0;
pageData.total = res.total;
})
.finally(() => {
pageData.tableConfiger.loading = false;

View File

@ -1,45 +1,78 @@
<template>
<div class="data-statistics flex align-center just-center">
<div class="img_but" @click="gettbGjZdxxselectList">
<div class="imgBox"><img src="@/assets/images/qt11/lx.png" alt="" /></div>
<div class="textB">路线</div>
<div class="img_but" v-for="(item,index) in imgBut" :key="index" @click="funClick(index,item.key)" >
<div class="imgBox" v-if="item.show" ><img :src="item.icon1" alt="" /></div>
<div class="imgBox" v-else><img :src="item.icon2" alt="" /></div>
<div class="textB">{{ item.name }}</div>
</div>
<div class="img_but boxCenter" @click="gettbGjclXlxxselectList">
<!-- <div class="img_but boxCenter" @click="gettbGjZdxxselectList" >
<div class="imgBox"><img src="@/assets/images/qt11/zt.png" alt="" /></div>
<div class="imgBox"><img src="@/assets/images/qt11/ztxz.png" alt="" /></div>
<div class="textB">站台</div>
</div>
<div class="img_but" @click="clearContents">
<div class="imgBox">
<img src="@/assets/images/qt11/qc.png" alt="" />
</div>
<div class="imgBox">
<img src="@/assets/images/qt11/qcxz.png" alt="" />
</div>
<div class="textB">清除</div>
</div>
</div> -->
</div>
</template>
<script setup>
import { ref } from "vue";
// 可以在这里添加需要的响应式数据和方法
import { tbGjZdxxselectList, tbGjclXlxxselectList } from "@/api/mosty-zhgj.js";
import emitter from "@/utils/eventBus.js";
const imgBut =ref( [
{
name: '路线',
icon1: require("@/assets/images/qt11/lx.png"),
icon2: require("@/assets/images/qt11/lxxz.png"),
show: true,
key:'xl'
},
{
name: '站台',
icon1: require("@/assets/images/qt11/zt.png"),
icon2: require("@/assets/images/qt11/ztxz.png"),
show: true,
key:'zt'
},
{
name: '清除',
icon1: require("@/assets/images/qt11/qc.png"),
icon2: require("@/assets/images/qt11/qcxz.png"),
show: true,
key:'qc'
},
])
const funClick = (index,val) => {
imgBut.value[index].show = !imgBut.value[index].show
switch (val) {
case 'xl':
gettbGjclXlxxselectList()
break;
case 'zt':
gettbGjZdxxselectList()
break;
case 'qc':
clearContents()
setTimeout(() => {
imgBut.value[index].show = true
imgBut.value[0].show = true
imgBut.value[1].show =true
}, 500);
break;
}
}
const gettbGjZdxxselectList = () => {
tbGjZdxxselectList({}).then((res) => {});
tbGjZdxxselectList({}).then((res) => {
const data = res.map((item) => {
return { coords: [item.zb], text: item.xlmc };
});
emitter.emit("echoLine", {
type: "solid",
coords: data,
isclear: true,
flag: "lx",
color: "#46ff71"
});
});
};
const gettbGjclXlxxselectList = () => {
tbGjclXlxxselectList({}).then((res) => {
if (res) {
const coords = res
const coords = res
.filter((item) => item.jd && item.wd)
.map((items) => {
return {
@ -49,16 +82,26 @@ const gettbGjclXlxxselectList = () => {
});
const icon = require("@/assets/images/qt11/car.png");
emitter.emit("addPoint", { coords, flag: "gjz", icon });
});
};
const gettbGjclXlxxselectList = () => {
tbGjclXlxxselectList({}).then((res) => {
if (res) {
const data =res.filter(item=>item.zb&&item.zb.length>0 ).map((item) => {
return { coords: [item.zb], text: item.xlmc };
});
emitter.emit("echoLine", {
type: "solid",
coords: data,
isclear: true,
flag: "lx",
color: "#46ff71"
});
}
});
};
// const coords = [
// { jd: 102.651727, wd: 30.117088 },
// { jd: 102.527442, wd: 30.108846 },
// { jd: 102.801965, wd: 30.100063 },
// { jd: 102.711411, wd: 30.158424 },
// { jd: 102.579582, wd: 30.174818 }
// ];
// 清除
const clearContents = () => {
emitter.emit("deletePointArea", "gjz");

View File

@ -12,8 +12,6 @@
<div class="item_card">
<div style="line-height: 18px">
{{ item.yjNr }}
<!-- 2025年3月20日,早上10点时重点人员张三购买林芝客运站前
往朗县客运站的车票 -->
</div>
<el-divider border-style="dashed" class="dashed" />
<div class="flex">
@ -25,7 +23,7 @@
<div class="inform_name">
姓名<span>{{ item.yjRyxm }}</span>
</div>
<div class="inform_tag">{{ item.yjlyBqmc }}</div>
<div class="inform_tag" v-if="item.yjlyBqmc">{{ item.yjlyBqmc }}</div>
</div>
<div>身份证{{ item.yjRysfzh }}</div>

View File

@ -22,11 +22,11 @@
<div class="course">行驶路线{{ item.xlmc }}</div>
<div class="fare">
<div class="flex riding" style="">
<div>乘车人数20</div>
<div>途中乘车人数30</div>
<div>乘车人数{{ item.ccrs?item.ccrs:0 }}</div>
<div>途中乘车人数{{ item.ztscrs?item.ztscrs:0 }}</div>
</div>
<div>重点人30</div>
<div>重点人{{ item.zdrs?item.zdrs:0 }}</div>
</div>
</div>
<el-divider border-style="dashed" class="dashed" />

View File

@ -5,15 +5,15 @@
<div class="f18 pl104">{{ hour + ":" + minute + ":" + second }}</div>
</div>
<div class="title absolute" @click="goPath">{{ props.title }}</div>
<div>
<!-- <div>
<div class="min_title absolute">
<span class="title_text">林芝市</span>
</div>
</div>
</div> -->
<div class="wd absolute">
<el-icon size="25px" style="top: 6px" color="#86C8EB"><Sunny /></el-icon>
<span> 温度 1~7°C </span>
<!-- <el-icon size="25px" style="top: 6px" color="#86C8EB"><Sunny /></el-icon>
<span> 温度 1~7°C </span> -->
</div>
</div>
</template>
@ -25,7 +25,7 @@ import { ref, onMounted, defineProps, onUnmounted } from "vue";
const props = defineProps({
title: {
type: String,
default: "公交系统"
default: "智慧公交"
}
});
const datatime = ref(getRecentDay(0));

View File

@ -3,7 +3,7 @@ const path = require("path");
function resolve(dir) {
return path.join(__dirname, dir);
}
const serverHost = "http://192.168.43.92:8006";
const serverHost = "http://192.168.1.32:8066";
// const serverHost = "http://127.0.0.1:8006"
module.exports = {
publicPath: "./",

738
ylth/Heatmap_min.js Normal file
View File

@ -0,0 +1,738 @@
(function(b, c, a) {
c[b] = a()
})("h337", this, function() {
var c = {
defaultRadius: 40,
defaultRenderer: "canvas2d",
defaultGradient: {
0.35: "rgb(0,0,255)",
0.45: "rgb(0,255,255)",
0.75: "rgb(0,255,0)",
0.85: "yellow",
1: "rgb(255,0,0)"
},
defaultMaxOpacity: 1,
defaultMinOpacity: 0,
defaultBlur: 0.85,
defaultXField: "x",
defaultYField: "y",
defaultValueField: "value",
plugins: {}
};
var g = (function l() {
var n = function n(o) {
this._coordinator = {};
this._data = [];
this._radi = [];
this._min = 0;
this._max = 1;
this._xField = o.xField || o.defaultXField;
this._yField = o.yField || o.defaultYField;
this._valueField = o.valueField || o.defaultValueField;
if (o.radius) {
this._cfgRadius = o.radius
}
};
var m = c.defaultRadius;
n.prototype = {
_organiseData: function(o, q) {
var u = o[this._xField];
var s = o[this._yField];
var z = this._radi;
var w = this._data;
var t = this._max;
var p = this._min;
var v = o[this._valueField] || 1;
var r = o.radius || this._cfgRadius || m;
if (!w[u]) {
w[u] = [];
z[u] = []
}
if (!w[u][s]) {
w[u][s] = v;
z[u][s] = r
} else {
w[u][s] += v
}
if (w[u][s] > t) {
if (!q) {
this._max = w[u][s]
} else {
this.setDataMax(w[u][s])
}
return false
} else {
return {
x: u,
y: s,
value: v,
radius: r,
min: p,
max: t
}
}
},
_unOrganizeData: function() {
var r = [];
var q = this._data;
var p = this._radi;
for (var o in q) {
for (var s in q[o]) {
r.push({
x: o,
y: s,
radius: p[o][s],
value: q[o][s]
})
}
}
return {
min: this._min,
max: this._max,
data: r
}
},
_onExtremaChange: function() {
this._coordinator.emit("extremachange", {
min: this._min,
max: this._max
})
},
addData: function() {
if (arguments[0].length > 0) {
var p = arguments[0];
var o = p.length;
while (o--) {
this.addData.call(this, p[o])
}
} else {
var q = this._organiseData(arguments[0], true);
if (q) {
this._coordinator.emit("renderpartial", {
min: this._min,
max: this._max,
data: [q]
})
}
}
return this
},
setData: function(q) {
var p = q.data;
var r = p.length;
this._data = [];
this._radi = [];
for (var o = 0; o < r; o++) {
this._organiseData(p[o], false)
}
this._max = q.max;
this._min = q.min || 0;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
removeData: function() {},
setDataMax: function(o) {
this._max = o;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
setDataMin: function(o) {
this._min = o;
this._onExtremaChange();
this._coordinator.emit("renderall", this._getInternalData());
return this
},
setCoordinator: function(o) {
this._coordinator = o
},
_getInternalData: function() {
return {
max: this._max,
min: this._min,
data: this._data,
radi: this._radi
}
},
getData: function() {
return this._unOrganizeData()
}
};
return n
})();
var h = (function j() {
var p = function(q) {
var s = q.gradient || q.defaultGradient;
var v = document.createElement("canvas");
var u = v.getContext("2d");
v.width = 256;
v.height = 1;
var t = u.createLinearGradient(0, 0, 256, 1);
for (var r in s) {
t.addColorStop(r, s[r])
}
u.fillStyle = t;
u.fillRect(0, 0, 256, 1);
return u.getImageData(0, 0, 256, 1).data
};
var o = function(s, t) {
var v = document.createElement("canvas");
var r = v.getContext("2d");
var q = s;
var w = s;
v.width = v.height = s * 2;
if (t == 1) {
r.beginPath();
r.arc(q, w, s, 0, 2 * Math.PI, false);
r.fillStyle = "rgba(0,0,0,1)";
r.fill()
} else {
var u = r.createRadialGradient(q, w, s * t, q, w, s);
u.addColorStop(0, "rgba(0,0,0,1)");
u.addColorStop(1, "rgba(0,0,0,0)");
r.fillStyle = u;
r.fillRect(0, 0, 2 * s, 2 * s)
}
return v
};
var n = function(u) {
var B = [];
var t = u.min;
var x = u.max;
var C = u.radi;
var u = u.data;
var q = Object.keys(u);
var r = q.length;
while (r--) {
var s = q[r];
var y = Object.keys(u[s]);
var A = y.length;
while (A--) {
var w = y[A];
var z = u[s][w];
var v = C[s][w];
B.push({
x: s,
y: w,
value: z,
radius: v
})
}
}
return {
min: t,
max: x,
data: B
}
};
function m(t) {
var q = t.element;
var u = this.shadowCanvas = document.createElement("canvas");
var s = this.canvas = t.canvas || document.createElement("canvas");
var r = this._renderBoundaries = [10000, 10000, 0, 0];
var v = getComputedStyle(t.element) || {};
s.className = "heatmap-canvas";
this._width = s.width = u.width = +(v.width.replace(/px/, ""));
this._height = s.height = u.height = +(v.height.replace(/px/, ""));
this.shadowCtx = u.getContext("2d");
this.ctx = s.getContext("2d");
s.style.cssText = u.style.cssText = "position:absolute;left:0;top:0;";
q.style.position = "relative";
q.appendChild(s);
this._palette = p(t);
this._templates = {};
this._setStyles(t)
}
m.prototype = {
renderPartial: function(q) {
this._drawAlpha(q);
this._colorize()
},
renderAll: function(q) {
this._clear();
this._drawAlpha(n(q));
this._colorize()
},
_updateGradient: function(q) {
this._palette = p(q)
},
updateConfig: function(q) {
if (q.gradient) {
this._updateGradient(q)
}
this._setStyles(q)
},
setDimensions: function(r, q) {
this._width = r;
this._height = q;
this.canvas.width = this.shadowCanvas.width = r;
this.canvas.height = this.shadowCanvas.height = q
},
_clear: function() {
this.shadowCtx.clearRect(0, 0, this._width, this._height);
this.ctx.clearRect(0, 0, this._width, this._height)
},
_setStyles: function(q) {
this._blur = (q.blur == 0) ? 0 : (q.blur || q.defaultBlur);
if (q.backgroundColor) {
this.canvas.style.backgroundColor = q.backgroundColor
}
this._opacity = (q.opacity || 0) * 255;
this._maxOpacity = (q.maxOpacity || q.defaultMaxOpacity) * 255;
this._minOpacity = (q.minOpacity || q.defaultMinOpacity) * 255;
this._useGradientOpacity = !!q.useGradientOpacity
},
_drawAlpha: function(v) {
var u = this._min = v.min;
var B = this._max = v.max;
var v = v.data || [];
var s = v.length;
var t = 1 - this._blur;
while (s--) {
var F = v[s];
var D = F.x;
var A = F.y;
var z = F.radius;
var E = Math.min(F.value, B);
var r = D - z;
var q = A - z;
var C = this.shadowCtx;
var w;
if (!this._templates[z]) {
this._templates[z] = w = o(z, t)
} else {
w = this._templates[z]
}
C.globalAlpha = (E - u) / (B - u);
C.drawImage(w, r, q);
if (r < this._renderBoundaries[0]) {
this._renderBoundaries[0] = r
}
if (q < this._renderBoundaries[1]) {
this._renderBoundaries[1] = q
}
if (r + 2 * z > this._renderBoundaries[2]) {
this._renderBoundaries[2] = r + 2 * z
}
if (q + 2 * z > this._renderBoundaries[3]) {
this._renderBoundaries[3] = q + 2 * z
}
}
},
_colorize: function() {
var w = this._renderBoundaries[0];
var u = this._renderBoundaries[1];
var B = this._renderBoundaries[2] - w;
var z = this._renderBoundaries[3] - u;
var G = this._width;
var A = this._height;
var r = this._opacity;
var I = this._maxOpacity;
var C = this._minOpacity;
var v = this._useGradientOpacity;
if (w < 0) {
w = 0
}
if (u < 0) {
u = 0
}
if (w + B > G) {
B = G - w
}
if (u + z > A) {
z = A - u
}
var J = this.shadowCtx.getImageData(w, u, B, z);
var H = J.data;
var E = H.length;
var F = this._palette;
for (var D = 3; D < E; D += 4) {
var s = H[D];
var t = s * 4;
if (!t) {
continue
}
var q;
if (r > 0) {
q = r
} else {
if (s < I) {
if (s < C) {
q = C
} else {
q = s
}
} else {
q = I
}
}
H[D - 3] = F[t];
H[D - 2] = F[t + 1];
H[D - 1] = F[t + 2];
H[D] = v ? F[t + 3] : q
}
J.data = H;
this.ctx.putImageData(J, w, u);
this._renderBoundaries = [1000, 1000, 0, 0]
},
getValueAt: function(r) {
var w;
var t = this.shadowCtx;
var s = t.getImageData(r.x, r.y, 1, 1);
var v = s.data[3];
var q = this._max;
var u = this._min;
w = (Math.abs(q - u) * (v / 255)) >> 0;
return w
},
getDataURL: function() {
return this.canvas.toDataURL()
}
};
return m
})();
var e = (function b() {
var m = false;
if (c.defaultRenderer === "canvas2d") {
m = h
}
return m
})();
var i = {
merge: function() {
var m = {};
var n = arguments.length;
for (var p = 0; p < n; p++) {
var q = arguments[p];
for (var o in q) {
m[o] = q[o]
}
}
return m
}
};
var f = (function k() {
var m = (function o() {
function q() {
this.cStore = {}
}
q.prototype = {
on: function(s, u, r) {
var t = this.cStore;
if (!t[s]) {
t[s] = []
}
t[s].push((function(v) {
return u.call(r, v)
}))
},
emit: function(u, t) {
var w = this.cStore;
if (w[u]) {
var r = w[u].length;
for (var s = 0; s < r; s++) {
var v = w[u][s];
v(t)
}
}
}
};
return q
})();
var p = function(r) {
var s = r._renderer;
var t = r._coordinator;
var q = r._store;
t.on("renderpartial", s.renderPartial, s);
t.on("renderall", s.renderAll, s);
t.on("extremachange", function(u) {
r._config.onExtremaChange && r._config.onExtremaChange({
min: u.min,
max: u.max,
gradient: r._config.gradient || r._config.defaultGradient
})
});
q.setCoordinator(t)
};
function n() {
var q = this._config = i.merge(c, arguments[0] || {});
this._coordinator = new m();
if (q.plugin) {
var s = q.plugin;
if (!c.plugins[s]) {
throw new Error("Plugin '" + s + "' not found. Maybe it was not registered.")
} else {
var r = c.plugins[s];
this._renderer = new r.renderer(q);
this._store = new r.store(q)
}
} else {
this._renderer = new e(q);
this._store = new g(q)
}
p(this)
}
n.prototype = {
addData: function() {
this._store.addData.apply(this._store, arguments);
return this
},
removeData: function() {
this._store.removeData && this._store.removeData.apply(this._store, arguments);
return this
},
setData: function() {
this._store.setData.apply(this._store, arguments);
return this
},
setDataMax: function() {
this._store.setDataMax.apply(this._store, arguments);
return this
},
setDataMin: function() {
this._store.setDataMin.apply(this._store, arguments);
return this
},
configure: function(q) {
this._config = i.merge(this._config, q);
this._renderer.updateConfig(this._config);
this._coordinator.emit("renderall", this._store._getInternalData());
return this
},
repaint: function() {
this._coordinator.emit("renderall", this._store._getInternalData());
return this
},
getData: function() {
return this._store.getData()
},
getDataURL: function() {
return this._renderer.getDataURL()
},
getValueAt: function(q) {
if (this._store.getValueAt) {
return this._store.getValueAt(q)
} else {
if (this._renderer.getValueAt) {
return this._renderer.getValueAt(q)
} else {
return null
}
}
}
};
return n
})();
var a = {
create: function(m) {
return new f(m)
},
register: function(n, m) {
c.plugins[n] = m
}
};
return a
});
var BMapLib = window.BMapLib = BMapLib || {};
(function() {
var a = BMapLib.HeatmapOverlay = function(c) {
this.conf = c;
this.conf.visible = c.visible === undefined ? true : c.visible;
this.heatmap = null;
this.latlngs = [];
this.bounds = null
};
a.prototype = new BMapGL.Overlay();
a.prototype.initialize = function(f) {
this._map = f;
var c = document.createElement("div");
c.style.position = "absolute";
c.style.top = 0;
c.style.left = 0;
c.style.border = 0;
c.style.width = this._map.getSize().width + "px";
c.style.height = this._map.getSize().height + "px";
this.conf.element = c;
if (!b()) {
return c
}
f.getPanes().floatPane.appendChild(c);
this.conf.valueField = this.conf.valueField || "count";
this.heatmap = h337.create(this.conf);
var e = this;
f.addEventListener("resize", function(h) {
var g = h.size;
c.style.width = g.width + "px";
c.style.height = g.height + "px";
e.heatmap._renderer.setDimensions(g.width, g.height);
e.draw()
});
this._div = c;
return c
};
a.prototype.draw = function() {
if (!b()) {
return
}
var k = this._map.getBounds();
if (k.equals(this.bounds)) {
return
}
this.bounds = k;
var j = this._map.pointToOverlayPixel(k.getNorthEast()),
p = this._map.pointToOverlayPixel(k.getSouthWest()),
c = j.y,
i = p.x,
l = p.y - j.y,
o = j.x - p.x;
this.conf.element.style.left = i + "px";
this.conf.element.style.top = c + "px";
this.conf.element.style.width = o + "px";
this.conf.element.style.height = l + "px";
if (this.latlngs.length > 0) {
this.heatmap.removeData();
var n = this.latlngs.length;
d = {
max: this.heatmap._store.getData().max,
data: []
};
while (n--) {
var f = this.latlngs[n].latlng;
if (!k.containsPoint(f)) {
continue
}
var g = this._map.pointToOverlayPixel(f),
i = this._map.pointToOverlayPixel(k.getSouthWest()).x,
c = this._map.pointToOverlayPixel(k.getNorthEast()).y,
e = new BMapGL.Pixel(g.x - i, g.y - c);
var m = this.pixelTransform(e);
d.data.push({
x: m.x,
y: m.y,
count: this.latlngs[n].c
})
}
if (this.conf.radiusChangeByZoom) {
this.heatmap._store._cfgRadius = this.conf.radiusChangeByZoom(this._map.getZoom())
}
this.heatmap.setData(d)
}
};
a.prototype.pixelTransform = function(f) {
var c = this.heatmap.width,
e = this.heatmap.height;
while (f.x < 0) {
f.x += c
}
while (f.x > c) {
f.x -= c
}
while (f.y < 0) {
f.y += e
}
while (f.y > e) {
f.y -= e
}
f.x = (f.x >> 0);
f.y = (f.y >> 0);
return f
};
a.prototype.setDataSet = function(j) {
this.data = j;
if (!b()) {
return
}
var i = this._map.getBounds();
var l = {
max: j.max,
data: []
};
var m = j.data,
k = m.length;
this.latlngs = [];
this.heatmap.removeData();
if (this.conf.radiusChangeByZoom) {
this.heatmap._store._cfgRadius = this.conf.radiusChangeByZoom(this._map.getZoom())
}
while (k--) {
var f = new BMapGL.Point(m[k].lng, m[k].lat);
this.latlngs.push({
latlng: f,
c: m[k].count
});
if (!i.containsPoint(f)) {
continue
}
var g = this._map.pointToOverlayPixel(f),
h = this._map.pointToOverlayPixel(i.getSouthWest()).x,
c = this._map.pointToOverlayPixel(i.getNorthEast()).y,
e = new BMapGL.Pixel(g.x - h, g.y - c);
var n = this.pixelTransform(e);
l.data.push({
x: n.x,
y: n.y,
count: m[k].count
})
}
this.heatmap.setData(l)
};
a.prototype.addDataPoint = function(e, g, f) {
if (!b()) {
return
}
if (this.data && this.data.data) {
this.data.data.push({
lng: e,
lat: g,
count: f
})
}
var h = new BMapGL.Point(e, g),
c = this.pixelTransform(this._map.pointToOverlayPixel(h));
this.heatmap.store.addDataPoint(c.x, c.y, f);
this.latlngs.push({
latlng: h,
c: f
})
};
a.prototype.toggle = function() {
if (!b()) {
return
}
if (this.conf.visible === true) {
this.conf.visible = false
} else {
this.conf.visible = true
}
if (this.conf.visible) {
this.conf.element.style.display = "block"
} else {
this.conf.element.style.display = "none"
}
};
a.prototype.setOptions = function(c) {
if (!b()) {
return
}
for (var e in c) {
if (e == "radius") {
this.heatmap._store._cfgRadius = c[e]
}
if (e == "opacity") {
c[e] = c[e] / 100
}
}
this.heatmap.configure(c);
if (this.data) {
this.setDataSet(this.data)
}
};
function b() {
var c = document.createElement("canvas");
return !!(c.getContext && c.getContext("2d"))
}
})();

BIN
ylth/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 10240-10495

View File

@ -0,0 +1,3 @@

Microsoft YaHei 10496-10751

View File

@ -0,0 +1,3 @@

Microsoft YaHei 10752-11007

View File

@ -0,0 +1,3 @@

Microsoft YaHei 11008-11263

View File

@ -0,0 +1,3 @@

Microsoft YaHei 11264-11519

View File

@ -0,0 +1,3 @@

Microsoft YaHei 11520-11775

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 1280-1535

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 1536-1791

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 1792-2047

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 2048-2303

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 2304-2559

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@

Microsoft YaHei 2560-2815

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More