This commit is contained in:
lcw
2025-07-28 11:18:25 +08:00
20 changed files with 1085 additions and 823 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,26 +1,13 @@
<template> <template>
<div> <div>
<el-dialog <el-dialog :title="titleValue" width="1400px" v-model="modelValue" @close="closed">
:title="titleValue"
width="1400px"
v-model="modelValue"
@close="closed"
>
<div v-if="modelValue"> <div v-if="modelValue">
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true"> <el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="所属部门"> <el-form-item label="所属部门">
<MOSTY.Department <MOSTY.Department width="100%" clearable v-model="listQuery.ssbmdm" />
width="100%"
clearable
v-model="listQuery.ssbmdm"
/>
</el-form-item> </el-form-item>
<el-form-item label="环林卡口名称"> <el-form-item label="环林卡口名称">
<el-input <el-input v-model="listQuery.jczmc" placeholder="请输入环林卡口名称" clearable />
v-model="listQuery.jczmc"
placeholder="请输入环林卡口名称"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -29,98 +16,34 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="tabBox" style="margin-top: 0px" v-if="modelValue"> <div class="tabBox" style="margin-top: 0px" v-if="modelValue">
<el-table <el-table ref="multipleUserRef" @selection-change="handleSelectionChange" :data="tableData"
ref="multipleUserRef" :highlight-current-row="props.Single" border v-loading="loading" style="width: 100%" :row-key="keyid"
@selection-change="handleSelectionChange" height="450">
:data="tableData" <el-table-column type="selection" width="55" :reserve-selection="true" v-if="!props.Single" />
:highlight-current-row="props.Single"
border
v-loading="loading"
style="width: 100%"
:row-key="keyid"
height="450"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
v-if="!props.Single"
/>
<el-table-column width="55" #default="{ row }" v-else> <el-table-column width="55" #default="{ row }" v-else>
<el-radio v-model="ridioIndex" :label="row.id"></el-radio> <el-radio v-model="ridioIndex" :label="row.id"></el-radio>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="序号" type="index" align="center" sortable width="80" />
label="序号" <el-table-column sortable prop="ssbm" label="所属部门" show-overflow-tooltip align="center"></el-table-column>
type="index" <el-table-column sortable prop="jczmc" show-overflow-tooltip align="center" label="环林卡口名称">
align="center"
sortable
width="80"
/>
<el-table-column
sortable
prop="ssbm"
label="所属部门"
show-overflow-tooltip
align="center"
></el-table-column>
<el-table-column
sortable
prop="jczmc"
show-overflow-tooltip
align="center"
label="环林卡口名称"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column show-overflow-tooltip align="center" label="环林卡口类型" prop="jczlx">
show-overflow-tooltip
align="center"
label="环林卡口类型"
prop="jczlx"
>
<template #default="{ row }"> <template #default="{ row }">
<dict-tag <dict-tag :options="D_BZ_JCZLX" :value="row.jczlx" :tag="false" />
:options="D_BZ_JCZLX"
:value="row.jczlx"
:tag="false"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="xxdz" show-overflow-tooltip align="center" label="环林卡口地址">
prop="xxdz"
show-overflow-tooltip
align="center"
label="环林卡口地址"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column sortable prop="jd" show-overflow-tooltip label="经度" align="center">
sortable
prop="jd"
show-overflow-tooltip
label="经度"
align="center"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column sortable prop="wd" show-overflow-tooltip label="纬度" align="center">
sortable
prop="wd"
show-overflow-tooltip
label="纬度"
align="center"
>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="fenye" > <div class="fenye">
<el-pagination <el-pagination class="pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange"
class="pagination" :current-page="listQuery.pageCurrent" :page-sizes="[2, 5, 10, 20]" :page-size="listQuery.pageSize"
@size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[2, 5, 10, 20]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div> </div>
</div> </div>
<template #footer> <template #footer>
@ -220,7 +143,9 @@ const onComfirm = () => {
proxy.$message.warning("请选择环林卡口"); proxy.$message.warning("请选择环林卡口");
return; return;
} }
emits("choosedJcz", [...jczList, ...checkopenList.value]); console.log(checkopenList.value,'checkopenList.value');
emits("choosedJcz", [...jczList, ...checkopenList?.value]);
} }
closed(); closed();
}; };
@ -250,7 +175,7 @@ const getListData = async () => {
loading.value = false loading.value = false
multipleUser(props.data, tableData.value); multipleUser(props.data, tableData.value);
total.value = Number(res.total); total.value = Number(res.total);
}).catch(()=>{ loading.value = false }); }).catch(() => { loading.value = false });
}; };
const handleFilter = () => { const handleFilter = () => {
listQuery.value.pageCurrent = 1; listQuery.value.pageCurrent = 1;
@ -324,14 +249,16 @@ watch(
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/assets/css/layout.scss"; @import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss"; @import "@/assets/css/element-plus.scss";
::v-deep .el-form--inline { ::v-deep .el-form--inline {
padding-left: 0 !important; padding-left: 0 !important;
} }
::v-deep .el-radio__label { ::v-deep .el-radio__label {
display: none; display: none;
} }
::v-deep .el-table__body tr.current-row > td.el-table__cell { ::v-deep .el-table__body tr.current-row>td.el-table__cell {
background: #106fdc; background: #106fdc;
} }
</style> </style>

View File

@ -85,7 +85,7 @@ onMounted(() => {
box[0].style.right = !res ? "4px" : "398px"; box[0].style.right = !res ? "4px" : "398px";
box[0].style.transition = "0.5s"; box[0].style.transition = "0.5s";
}); });
map = new EliMap({ map = new EliMap({
id: props.mapid, id: props.mapid,
crs: "EPSG:3857", crs: "EPSG:3857",

View File

@ -0,0 +1,371 @@
<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(
"/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

@ -420,7 +420,7 @@ const handleData = (val, type) => {
break; break;
case "zdsb": case "zdsb":
title.value = "终端选择"; title.value = "终端选择";
url.value = "/mosty-jcgl/tbJcglZdsb/selectPage"; url.value = "/mosty-qwzx/tbQwglZdsb/selectPage";
arr = [ arr = [
{ label: "设备编号", prop: "sbbh" }, { label: "设备编号", prop: "sbbh" },
{ label: "设备名称", prop: "sbmc" }, { label: "设备名称", prop: "sbmc" },
@ -526,7 +526,7 @@ const handleData = (val, type) => {
break; break;
case "zfjly": case "zfjly":
title.value = "选择执法记录仪"; title.value = "选择执法记录仪";
url.value = "/mosty-jcgl/tbJcglTcsb/selectPage"; url.value = "/mosty-qwzx/tbQwglTcsb/selectPage";
let crr = [ let crr = [
{ label: "设备名称", prop: "sbmc" }, { label: "设备名称", prop: "sbmc" },
{ label: "设备编号", prop: "sbbh" }, { label: "设备编号", prop: "sbbh" },

View File

@ -66,10 +66,12 @@ onMounted(() => {
activeMeun.value = window.localStorage.getItem("activeId"); activeMeun.value = window.localStorage.getItem("activeId");
}); });
const logout = () => { const logout = () => {
store.dispatch("user/logout"); window.opener = null;
window.open('', '_self');
window.close();
store.commit("app/clearTag", null, { immediate: true }); store.commit("app/clearTag", null, { immediate: true });
store.commit("permission/deleteRouter", { immediate: true }); store.commit("permission/deleteRouter", { immediate: true });
store.commit("user/deleteKeepLiiveRoute", "lz/home"); store.commit("user/deleteKeepLiiveRoute", "home");
}; };
// 菜单切换 // 菜单切换
const handleMeun = (item, idx) => { const handleMeun = (item, idx) => {

View File

@ -1,8 +1,6 @@
import * as ElIcons from "@element-plus/icons-vue"; import * as ElIcons from "@element-plus/icons-vue";
import Axios from 'axios' import Axios from 'axios'
import { import { createApp } from "vue";
createApp
} from "vue";
import App from "./App.vue"; import App from "./App.vue";
import router from "./router"; import router from "./router";
import store from "./store"; import store from "./store";
@ -47,13 +45,8 @@ import installFilter from "@/filters";
//事件总线 //事件总线
import mitt from "mitt"; import mitt from "mitt";
import { import { resetForm } from "@/utils/validate";
resetForm import { getDict, setCascader } from '@/utils/dict';
} from "@/utils/validate";
import {
getDict,
setCascader
} from '@/utils/dict';
import axios from "axios"; import axios from "axios";
//挂载全局方法 //挂载全局方法

File diff suppressed because it is too large Load Diff

View File

@ -111,45 +111,45 @@ export default {
/* /*
*单点登录 *单点登录
*/ */
// oatuhLogin(ctx, userInfo) { oatuhLogin(ctx, userInfo) {
// const { token, systemId } = userInfo; const { token, systemId } = userInfo;
// return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// unifiedLogin({ unifiedLogin({
// token, token,
// systemId systemId
// }) })
// .then((data) => { .then((data) => {
// if (data.deptList.length === 1) { if (data.deptList.length === 1) {
// this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
// this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
// this.commit("user/setUserName", data.userName); this.commit("user/setUserName", data.userName);
// setItem("USERNAME", data.userName); setItem("USERNAME", data.userName);
// setItem("SFRH", data.sfrh); setItem("SFRH", data.sfrh);
// setItem("USERID", data.userId); setItem("USERID", data.userId);
// setItem("PermissionsInfo", data.permissionsInfo); setItem("PermissionsInfo", data.permissionsInfo);
// this.commit("user/setMenuList", data.menuList); this.commit("user/setMenuList", data.menuList);
// setItem("menusPermission", data.menuCodeSet); setItem("menusPermission", data.menuCodeSet);
// setItem("isOatuh", 1); setItem("isOatuh", 1);
// setItem("idEntityCard", data.idEntityCard); setItem("idEntityCard", data.idEntityCard);
// this.commit("user/setUserInfo", { this.commit("user/setUserInfo", {
// token: data.jwtToken, token: data.jwtToken,
// permission: { permission: {
// buttonPermission: ["removeTest", "viewTest"], buttonPermission: ["removeTest", "viewTest"],
// menus: data.menuCodeSet menus: data.menuCodeSet
// }, },
// menuList: data.menuList, menuList: data.menuList,
// deptList: data.deptList deptList: data.deptList
// }); });
// } }
// // 保存登录时间 // 保存登录时间
// setTimeStamp(); setTimeStamp();
// resolve(data); resolve(data);
// }) })
// .catch((err) => { .catch((err) => {
// reject(err); reject(err);
// }); });
// }); });
// }, },
// refreshToken(ctx, parmas) { // refreshToken(ctx, parmas) {
// return new Promise((resolve, reject) => { // return new Promise((resolve, reject) => {
@ -215,7 +215,7 @@ export default {
removeAllItem(); removeAllItem();
// 待补充 清理权限相关的配置 // 待补充 清理权限相关的配置
if (isOatuh) { if (isOatuh) {
window.location.href = `http://80.149.27.78:8001/login`; window.location.href = `http://155.240.22.188:9020`;
} else { } else {
router.push("/login"); router.push("/login");
} }

View File

@ -10,7 +10,7 @@
</el-icon> </el-icon>
<span>新增</span> <span>新增</span>
</el-button> </el-button>
<el-button type="primary" @click="deletList(null)" :disabled="ids.length == 0" typeof="danger"> <el-button type="primary" @click="deletList(null)" :disabled="ids.length == 0" typeof="danger">
<el-icon> <el-icon>
<CirclePlus /> <CirclePlus />
</el-icon> </el-icon>
@ -23,33 +23,28 @@
</div> </div>
<div class="tabBox"> <div class="tabBox">
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="tableHeight"
:tableData="pageData.tableData" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
:tableColumn="pageData.tableColumn" @chooseData="chooseData">
:tableHeight="tableHeight" <template #qclx="{ row }">
:key="pageData.keyCount" <dict-tag :value="row.qclx" :options="D_BZ_QCLX" :tag="false" />
:tableConfiger="pageData.tableConfiger" </template>
:controlsWidth="pageData.controlsWidth" <template #qcjb="{ row }">
@chooseData="chooseData" <dict-tag :options="D_BZ_QCDJ" :value="row.qcjb" :tag="false" />
> </template>
<template #qclx="{ row }"> <!-- 操作 -->
<dict-tag :value="row.qclx" :options="D_BZ_QCLX" :tag="false"/> <template #controls="{ row }">
</template> <el-button @click="addEditForm('eidt', row)" size="small">编辑</el-button>
<template #qcjb="{ row }"> <el-button @click="deletList(row.id)" type="danger" size="small">删除</el-button>
<dict-tag :options="D_BZ_QCDJ" :value="row.qcjb" :tag="false" /> </template>
</template> </MyTable>
<!-- 操作 --> <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="tableHeight"
<template #controls="{ row }"> :pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }" />
<el-button @click="addEditForm('eidt',row)" size="small">编辑</el-button>
<el-button @click="deletList(row.id)" type="danger" size="small">删除</el-button>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="tableHeight" :pageConfiger="{...pageData.pageConfiger,total: pageData.total}" />
</div> </div>
</div> </div>
</div> </div>
<!-- 新增 --> <!-- 新增 -->
<EditAddForm ref="editInfo" @updateDate="getList" :dic="{D_BZ_QCLX,D_BZ_QCDJ,D_BZ_JCZLX}"></EditAddForm> <EditAddForm ref="editInfo" @updateDate="getList" :dic="{ D_BZ_QCLX, D_BZ_QCDJ, D_BZ_JCZLX }"></EditAddForm>
</template> </template>
<script setup> <script setup>
@ -57,7 +52,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./editAddForm.vue"; import EditAddForm from "./editAddForm.vue";
import {qcSelectQcList,qcDeleteQc} from "@/api/lzjcz/index.js"; import { qcSelectQcList, qcDeleteQc } from "@/api/lzjcz/index.js";
import { import {
ref, ref,
reactive, reactive,
@ -70,9 +65,9 @@ import {
} from "vue"; } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { const {
D_BZ_QCLX,D_BZ_QCDJ,D_BZ_JCZLX D_BZ_QCLX, D_BZ_QCDJ, D_BZ_JCZLX
} = proxy.$dict( } = proxy.$dict(
"D_BZ_QCLX","D_BZ_QCDJ","D_BZ_JCZLX" "D_BZ_QCLX", "D_BZ_QCDJ", "D_BZ_JCZLX"
); );
const addEditDialog = ref(); const addEditDialog = ref();
const searchConfiger = reactive([ const searchConfiger = reactive([
@ -87,7 +82,7 @@ const searchConfiger = reactive([
prop: "qclx", prop: "qclx",
placeholder: "请选择圈层类型", placeholder: "请选择圈层类型",
label: "圈层类型", label: "圈层类型",
options:D_BZ_QCLX options: D_BZ_QCLX
}, },
]); ]);
const pageData = reactive({ const pageData = reactive({
@ -96,7 +91,7 @@ const pageData = reactive({
tableConfiger: { tableConfiger: {
loading: false, loading: false,
rowHieght: 61, rowHieght: 61,
showSelectType:'checkBox', showSelectType: 'checkBox',
}, },
total: 0, total: 0,
pageConfiger: { pageConfiger: {
@ -105,10 +100,10 @@ const pageData = reactive({
}, //分页 }, //分页
controlsWidth: 210, //操作栏宽度 controlsWidth: 210, //操作栏宽度
tableColumn: [ tableColumn: [
{ label: "所属部门", prop: "ssbm"}, { label: "所属部门", prop: "ssbm" },
{ label: "圈层名称", prop: "qcmc"}, { label: "圈层名称", prop: "qcmc" },
{ label: "圈层类型", prop: "qclx", showSolt:true }, { label: "圈层类型", prop: "qclx", showSolt: true },
{ label: "圈层等级", prop: "qcjb" ,showSolt:true} { label: "圈层等级", prop: "qcjb", showSolt: true }
] ]
}); });
@ -127,11 +122,11 @@ onMounted(() => {
}); });
// 搜索 // 搜索
const onSearch = (val)=>{ const onSearch = (val) => {
listQuery.value = {...listQuery.value,...val} listQuery.value = { ...listQuery.value, ...val }
if(val.cz) listQuery.value.ssbmdm = ''; if (val.cz) listQuery.value.ssbmdm = '';
delete listQuery.value.cz; delete listQuery.value.cz;
getList() getList()
} }
// 改变分页 // 改变分页
@ -148,11 +143,11 @@ const changeSize = (val) => {
const getList = () => { const getList = () => {
let params = { ...listQuery.value, ...pageData.pageConfiger }; let params = { ...listQuery.value, ...pageData.pageConfiger };
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
qcSelectQcList(params).then(res=>{ qcSelectQcList(params).then(res => {
pageData.tableData=res.records pageData.tableData = res.records
pageData.total=res.total pageData.total = res.total
}).finally(()=>{ }).finally(() => {
pageData.tableConfiger.loading=false pageData.tableConfiger.loading = false
}) })
}; };
@ -179,31 +174,31 @@ const tabHeightFn = () => {
}; };
}; };
// 多选 // 多选
const ids=ref([]) const ids = ref([])
const chooseData = (val)=>{ const chooseData = (val) => {
if(!val) return false; if (!val) return false;
console.log(val); console.log(val);
if(val instanceof Array) ids.value = val.map(v=>{ return v.id }) if (val instanceof Array) ids.value = val.map(v => { return v.id })
console.log(ids.value ); console.log(ids.value);
} }
//批量删除 //批量删除
const deletList = (id) => { const deletList = (id) => {
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => { proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
let IDS = id ? [id] : ids.value let IDS = id ? [id] : ids.value
qcDeleteQc(IDS).then(() => { qcDeleteQc(IDS).then(() => {
proxy.$message({ type: "success",message: "删除成功"}); proxy.$message({ type: "success", message: "删除成功" });
getList() getList()
});
}).catch(() => {
proxy.$message.info("已取消");
}); });
}).catch(() => {
proxy.$message.info("已取消");
});
}; };
// 新增编辑表单 // 新增编辑表单
const editInfo=ref() const editInfo = ref()
const addEditForm = (type,row)=>{ const addEditForm = (type, row) => {
nextTick(()=>{ nextTick(() => {
editInfo.value.init(type,row) editInfo.value.init(type, row)
}) })
} }
onUnmounted(() => { onUnmounted(() => {
@ -214,13 +209,16 @@ onUnmounted(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss"; @import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
.main-box { .main-box {
display: flex; display: flex;
.tableCnt { .tableCnt {
flex: 1; flex: 1;
margin-left: 10px; margin-left: 10px;
} }
} }
.tag { .tag {
padding: 2px 6px; padding: 2px 6px;
margin: 0 1px; margin: 0 1px;

View File

@ -302,7 +302,7 @@ const props = {
emitPath: false emitPath: false
}; };
const formGzy = ref({ const formGzy = ref({
pageNum: 1, pageCurrent: 1,
pageSize: 20, pageSize: 20,
isChild: 1 isChild: 1
}); });

View File

@ -87,7 +87,7 @@ import TableEdit from "./tableEdit.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_JWZLX, D_BZ_DJQW ,D_BZ_SF} = proxy.$dict("D_BZ_JWZLX", "D_BZ_DJQW","D_BZ_SF"); const { D_BZ_JWZLX, D_BZ_DJQW ,D_BZ_SF} = proxy.$dict("D_BZ_JWZLX", "D_BZ_DJQW","D_BZ_SF");
const addEditDialog = ref(); const addEditDialog = ref();
const searchConfiger = reactive({ qwdj: "", qwkssj: "", qwjssj: "" }); const searchConfiger = ref({ qwdj: "", qwkssj: "", qwjssj: "" });
const pageData = reactive({ const pageData = reactive({
tableData: [], // 表格数据 tableData: [], // 表格数据
keyCount: 0, keyCount: 0,
@ -165,7 +165,15 @@ const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList(); getList();
}; };
// 重置
const reset = () => {
pageData.pageConfiger = {
pageCurrent: 1,
pageSize: 20,
};
searchConfiger.value={}
getList();
};
// 处理删除数据 // 处理删除数据
function delDictItem(row) { function delDictItem(row) {
if (row.fbzt === "1") { if (row.fbzt === "1") {
@ -214,7 +222,7 @@ const queryTime = ref([]);
// 处理勤务数据 // 处理勤务数据
const getList=()=> { const getList=()=> {
loadingTable.value = true; loadingTable.value = true;
let params = { ...searchConfiger, ...pageData.pageConfiger }; let params = { ...searchConfiger.value, ...pageData.pageConfiger };
qwjdSelectList(params) qwjdSelectList(params)
.then((res) => { .then((res) => {
pageData.tableData = res.records.map((item) => { pageData.tableData = res.records.map((item) => {
@ -232,8 +240,8 @@ const getList=()=> {
} }
const handleFilter = () => { const handleFilter = () => {
if (queryTime.value.length > 0) { if (queryTime.value.length > 0) {
searchConfiger.qwkssj = queryTime.value[0]; searchConfiger.value.qwkssj = queryTime.value[0];
searchConfiger.qwjssj = queryTime.value[1]; searchConfiger.value.qwjssj = queryTime.value[1];
} }
getList(); getList();

View File

@ -339,6 +339,8 @@ const buttonLoading = ref(false);
// 选择检查站 // 选择检查站
const chooseUserVisible = ref(false); const chooseUserVisible = ref(false);
const choosedJcz = (row) => { const choosedJcz = (row) => {
console.log(row,'row');
listData.jczList = row; listData.jczList = row;
formData.value.kdbbs = row.length; formData.value.kdbbs = row.length;
}; };

View File

@ -10,7 +10,7 @@
<span class="changeBtn" @click="selectDate('today')">今天</span> <span class="changeBtn" @click="selectDate('today')">今天</span>
<span class="changeBtn" @click="selectDate('next-month')">下一月</span> <span class="changeBtn" @click="selectDate('next-month')">下一月</span>
<!-- 传入部门开始日期结束日期接口暂不开发先加按钮 --> <!-- 传入部门开始日期结束日期接口暂不开发先加按钮 -->
<span class="changeBtn">排班报表导出</span> <!-- <span class="changeBtn">排班报表导出</span> -->
<span class="changeBtn" @click="changeList">列表切换</span> <span class="changeBtn" @click="changeList">列表切换</span>
</div> </div>
</template> </template>

View File

@ -88,8 +88,8 @@ const bbcxData = ref([])
const lookCount = async () => { const lookCount = async () => {
isHideen.value = !isHideen.value; isHideen.value = !isHideen.value;
if (!isHideen.value) { if (!isHideen.value) {
const res = await selectDayMFCBbzlCount({ ksrq: props.data.year, jsrq: props.data.year, tjrq: props.data.year }) const res = await selectDayMFCBbzlCount({ ksrq: props.data.year, jsrq: props.data.year, tjrq: props.data.year,ssbmdm:props.dep.bmdm })
const res1 = await qwselectList({ startTime: props.data.year, endTime: props.data.year }) const res1 = await qwselectList({ startTime: props.data.year, endTime: props.data.year,ssbmdm:props.dep.bmdm })
const res2 = await getXfbbBy24h() const res2 = await getXfbbBy24h()
bbcxData.value = res1 ? res1 : [] bbcxData.value = res1 ? res1 : []

View File

@ -65,9 +65,7 @@
</el-icon> </el-icon>
<template #dropdown> <template #dropdown>
<el-dropdown-menu class="loginOut" @click="logout"> <el-dropdown-menu class="loginOut" @click="logout">
<el-dropdown-item command="logout" <el-dropdown-item command="logout">退出登录</el-dropdown-item>
>退出登录</el-dropdown-item
>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -190,10 +188,12 @@ function modularShowFn(val) {
// 退出 // 退出
const logout = () => { const logout = () => {
store.dispatch("user/logout"); window.opener = null;
window.open('', '_self');
window.close();
store.commit("app/clearTag", null, { immediate: true }); store.commit("app/clearTag", null, { immediate: true });
store.commit("permission/deleteRouter", { immediate: true }); store.commit("permission/deleteRouter", { immediate: true });
store.commit("user/deleteKeepLiiveRoute", "lz/home"); store.commit("user/deleteKeepLiiveRoute", "home");
}; };
// 路由跳转 // 路由跳转

View File

@ -2,73 +2,38 @@
<div class="searchBox"> <div class="searchBox">
<el-form :model="listQuery"> <el-form :model="listQuery">
<el-form-item label="开始时间" prop="startTime"> <el-form-item label="开始时间" prop="startTime">
<el-date-picker <el-date-picker style="width: 100%" v-model="listQuery.startTime" type="datetime" placeholder="请选择日期时间"
style="width: 100%" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
v-model="listQuery.startTime"
type="datetime"
placeholder="请选择日期时间"
format="YYYY/MM/DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item> </el-form-item>
<el-form-item label="结束时间" prop="endTime"> <el-form-item label="结束时间" prop="endTime">
<el-date-picker <el-date-picker style="width: 100%" v-model="listQuery.endTime" type="datetime" placeholder="请选择日期时间"
style="width: 100%" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
v-model="listQuery.endTime"
type="datetime"
placeholder="请选择日期时间"
format="YYYY/MM/DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item> </el-form-item>
<el-form-item prop="ssbmid" v-if="props.type == '01'" label="所属辖区"> <el-form-item prop="ssbmid" v-if="props.type == '01'" label="所属辖区">
<MOSTY.Department <MOSTY.Department placeholder="请选择所属辖区" width="100%" clearable filterable v-model="listQuery.ssbmid" />
placeholder="请选择所属辖区"
width="100%"
clearable
filterable
v-model="listQuery.ssbmid"
/>
</el-form-item> </el-form-item>
<el-form-item prop="zdjqtjlx" v-if="props.type == '01'" label="警情类型"> <el-form-item prop="zdjqtjlx" v-if="props.type == '01'" label="警情类型">
<el-select v-model="listQuery.zdjqtjlx"> <el-select v-model="listQuery.zdjqtjlx">
<el-option <el-option v-for="(dict, index) in D_BZ_ZDJQTJLX" :key="index" :label="dict.label"
v-for="(dict, index) in D_BZ_ZDJQTJLX" :value="dict.value"></el-option>
:key="index"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="yjlx" v-if="props.type == '02'" label="预警类型"> <el-form-item prop="yjlx" v-if="props.type == '02'" label="预警类型">
<el-select clearable style="width: 100%" v-model="listQuery.yjLx"> <el-select clearable style="width: 100%" v-model="listQuery.yjLx">
<el-option <el-option v-for="(dict, index) in D_BZ_YJLX" :key="index" :label="dict.label"
v-for="(dict, index) in D_BZ_YJLX" :value="dict.value"></el-option>
:key="index"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="yjdj" v-if="props.type == '02'" label="预警等级"> <el-form-item prop="yjdj" v-if="props.type == '02'" label="预警等级">
<el-select v-model="listQuery.yjJb"> <el-select v-model="listQuery.yjJb">
<el-option <el-option v-for="(dict, index) in D_BZ_tyjb" :key="index" :label="dict.label"
v-for="(dict, index) in D_BZ_tyjb" :value="dict.value"></el-option>
:key="index"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="zlczzt" v-if="props.type == '03'" label="处置状态"> <el-form-item prop="zlczzt" v-if="props.type == '03'" label="处置状态">
<el-select v-model="listQuery.zlczzt"> <el-select v-model="listQuery.zlczzt">
<el-option <el-option v-for="(dict, index) in D_BZ_CZZT" :key="index" :label="dict.label"
v-for="(dict, index) in D_BZ_CZZT" :value="dict.value"></el-option>
:key="index"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<div class="footer"> <div class="footer">
@ -88,7 +53,7 @@ const props = defineProps({
}); });
const emit = defineEmits(["handelSearch", "resetSearch"]); const emit = defineEmits(["handelSearch", "resetSearch"]);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_tyjb, D_BZ_CZZT, D_BZ_ZDJQTJLX,D_BZ_YJLX } = proxy.$dict( const { D_BZ_tyjb, D_BZ_CZZT, D_BZ_ZDJQTJLX, D_BZ_YJLX } = proxy.$dict(
"D_BZ_tyjb", "D_BZ_tyjb",
"D_BZ_CZZT", "D_BZ_CZZT",
"D_BZ_ZDJQTJLX", "D_BZ_ZDJQTJLX",
@ -124,12 +89,14 @@ function reset() {
background: #000; background: #000;
padding: 10px 8px; padding: 10px 8px;
box-sizing: border-box; box-sizing: border-box;
.el-form { .el-form {
width: 100%; width: 100%;
height: 100%; height: 100%;
.footer { .footer {
text-align: center; text-align: center;
} }
} }
} }
</style> </style>

View File

@ -65,9 +65,7 @@
</el-icon> </el-icon>
<template #dropdown> <template #dropdown>
<el-dropdown-menu class="loginOut" @click="logout"> <el-dropdown-menu class="loginOut" @click="logout">
<el-dropdown-item command="logout" <el-dropdown-item command="logout">退出登录</el-dropdown-item>
>退出登录</el-dropdown-item
>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -187,10 +185,12 @@ function modularShowFn(val) {
// 退出 // 退出
const logout = () => { const logout = () => {
store.dispatch("user/logout"); window.opener = null;
window.open('', '_self');
window.close();
store.commit("app/clearTag", null, { immediate: true }); store.commit("app/clearTag", null, { immediate: true });
store.commit("permission/deleteRouter", { immediate: true }); store.commit("permission/deleteRouter", { immediate: true });
store.commit("user/deleteKeepLiiveRoute", "lz/home"); store.commit("user/deleteKeepLiiveRoute", "home");
}; };
// 路由跳转 // 路由跳转

View File

@ -1,34 +1,31 @@
<template></template> <template></template>
<script setup> <script setup>
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { setItem } from "@/utils/storage"; import {
setItem
} from "@/utils/storage";
const loginDialog = ref(false); const loginDialog = ref(false);
const deptList = ref([]); const deptList = ref([]);
const deptId = ref("");
const store = useStore(); const store = useStore();
const origin = location.origin;
function redirectAuth() { function redirectAuth() {
let search = window.location.search; let token = location.hash.slice(20) || null;
let params = new URLSearchParams(search);
let token = params.get("token");
if (token != null) { if (token != null) {
setItem("SSOTOKEN", token); token = token.replace(/\ +/g, "");
handleLogin({ token: token, systemId: "XLFK_ZHJMXFZAGK" }); setItem("SSOTOKEN", token)
handleLogin({ token: token});
} else { } else {
window.location.href = `https://80.60.20.10`; window.location.href = `http://155.240.22.188:9020`;
} }
} }
const handleLogin = (e) => { const handleLogin = (e) => {
store.dispatch("user/oatuhLogin", e).then((res) => { store.dispatch("user/oatuhLogin", e).then((res) => {
console.log("登录后操作");
console.log(res);
// 登录后操作 // 登录后操作
if (res.deptList.length === 1) { if (res.deptList.length === 1) {
window.location.href = "/"; window.location.hash = "/";
} else { } else {
deptList.value = [...res.deptList]; deptList.value = [...res.deptList];
loginDialog.value = true; loginDialog.value = true;
@ -40,6 +37,5 @@ onMounted(() => {
redirectAuth(); redirectAuth();
}); });
</script> </script>
<style> <style></style>
</style>

View File

@ -4,11 +4,11 @@ function resolve(dir) {
return path.join(__dirname, dir); return path.join(__dirname, dir);
} }
// const serverHost = "http://192.192.192.109:8006"; // const serverHost = "http://192.192.192.109:8006";
const serverHost = "http://192.168.1.32:8066"; const serverHost = "http://192.168.0.231:8006";
// const serverHost ="http://80.60.36.64:8006" // const serverHost ="http://80.60.36.64:8006"
module.exports = { module.exports = {
publicPath: "/", publicPath: "/",
outputDir: "dist", outputDir: "qwgl",
assetsDir: "static", assetsDir: "static",
lintOnSave: false, //process.env.NODE_ENV === 'development', lintOnSave: false, //process.env.NODE_ENV === 'development',
productionSourceMap: false, productionSourceMap: false,