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));