lcw
This commit is contained in:
66
src/App.vue
66
src/App.vue
@ -3,10 +3,12 @@
|
||||
<keep-alive :include="store.getters.keepLiiveRoute">
|
||||
<Watermark :text="content" :color="'rgba(0, 0, 0, .15)'">
|
||||
<Component :is="Component"></Component>
|
||||
|
||||
</Watermark>
|
||||
</keep-alive>
|
||||
</router-view>
|
||||
<Fzq />
|
||||
<Fzq />
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import Watermark from "@/components/Watermark.vue";
|
||||
@ -128,12 +130,14 @@ v-deep .el-loading-mask {
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "仿宋_GB2312";
|
||||
src: url("~@/assets/font/仿宋_GB2312.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.bk_drawer_box {
|
||||
.el-drawer__header {
|
||||
background: #fff !important;
|
||||
@ -154,14 +158,16 @@ v-deep .el-loading-mask {
|
||||
left: -10px;
|
||||
transform: translateY(-50%) translateX(-50%);
|
||||
}
|
||||
.popupCustomBox{
|
||||
|
||||
.popupCustomBox {
|
||||
width: 130px;
|
||||
position: relative;
|
||||
background: rgba(2, 55, 114, 0.99);
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
.popupCustomTitle_title{
|
||||
|
||||
.popupCustomTitle_title {
|
||||
padding: 4px;
|
||||
box-sizing: border-box;
|
||||
font-size: 12px;
|
||||
@ -174,7 +180,8 @@ v-deep .el-loading-mask {
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
&::after{
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
@ -186,18 +193,65 @@ v-deep .el-loading-mask {
|
||||
border-right: 10px solid transparent;
|
||||
border-top: 10px solid rgba(2, 55, 114, 0.99);
|
||||
}
|
||||
.popupCustomTitle_li{
|
||||
|
||||
.popupCustomTitle_li {
|
||||
font-size: 12px;
|
||||
line-height: 22px;
|
||||
text-transform: none;
|
||||
margin-bottom: 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
span{
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 60px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.blink-animation {
|
||||
width: 10px !important;
|
||||
height: 10px !important;
|
||||
min-width: 10px;
|
||||
min-height: 10px;
|
||||
max-width: 10px;
|
||||
max-height: 10px;
|
||||
display: inline-block;
|
||||
border-radius: 50%;
|
||||
background: radial-gradient(circle, #ff4d4f 0%, #ff1f1f 60%, #b30000 100%);
|
||||
transform: scaleY(0.58);
|
||||
transform-origin: center center;
|
||||
animation: alarmFlash 1.1s ease-in-out infinite, quakeRings 1.9s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes alarmFlash {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.95;
|
||||
background: radial-gradient(circle, #ff6666 0%, #ff1f1f 62%, #b30000 100%);
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0.72;
|
||||
background: radial-gradient(circle, #ff5252 0%, #e81919 62%, #990000 100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes quakeRings {
|
||||
0% {
|
||||
box-shadow:
|
||||
0 0 0 0 rgba(255, 31, 31, 0.6),
|
||||
0 0 0 0 rgba(255, 31, 31, 0.42),
|
||||
0 0 0 0 rgba(255, 31, 31, 0.25);
|
||||
}
|
||||
|
||||
100% {
|
||||
box-shadow:
|
||||
0 0 0 16px rgba(255, 31, 31, 0),
|
||||
0 0 0 34px rgba(255, 31, 31, 0),
|
||||
0 0 0 52px rgba(255, 31, 31, 0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -401,4 +401,91 @@
|
||||
src: url("~@/assets/font/HANYILINGXINTIJIAN-1.TTF");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.warning {
|
||||
color: #df6c07;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.success {
|
||||
color: #00ff91;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.primary {
|
||||
color: #0b83f4;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.info {
|
||||
color: #808080;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.danger {
|
||||
color: #ff4d4f;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
// 警情闪速动画
|
||||
@keyframes alert-flash {
|
||||
0%, 100% {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
opacity: 0.3;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes alert-pulse {
|
||||
0% {
|
||||
box-shadow: 0 0 0 0 rgba(255, 77, 79, 0.7);
|
||||
}
|
||||
70% {
|
||||
box-shadow: 0 0 0 10px rgba(255, 77, 79, 0);
|
||||
}
|
||||
100% {
|
||||
box-shadow: 0 0 0 0 rgba(255, 77, 79, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes alert-blink {
|
||||
0%, 49% {
|
||||
opacity: 1;
|
||||
}
|
||||
50%, 100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 警情闪速样式类
|
||||
.alert-flash {
|
||||
animation: alert-flash 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.alert-pulse {
|
||||
animation: alert-pulse 1.5s ease-out infinite;
|
||||
}
|
||||
|
||||
.alert-blink {
|
||||
animation: alert-blink 1s step-start infinite;
|
||||
}
|
||||
|
||||
// 组合效果 - 闪烁 + 脉冲
|
||||
.alert-flash-pulse {
|
||||
animation: alert-flash 1s ease-in-out infinite, alert-pulse 1.5s ease-out infinite;
|
||||
}
|
||||
|
||||
// 警情颜色变体
|
||||
.alert-danger-flash {
|
||||
color: #ff4d4f;
|
||||
animation: alert-flash 0.8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.alert-warning-flash {
|
||||
color: #df6c07;
|
||||
animation: alert-flash 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
BIN
src/assets/images/R_T.png
Normal file
BIN
src/assets/images/R_T.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/images/rili.png
Normal file
BIN
src/assets/images/rili.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
@ -159,9 +159,9 @@ onMounted(() => {
|
||||
emitter.on("drawShape", (res) => {
|
||||
mapUtil.value.plot(res, resFun);
|
||||
});
|
||||
emitter.on("removeEara", (flag) => {
|
||||
mapUtil.value.removeEara(flag);
|
||||
});
|
||||
// emitter.on("removeEara", (flag) => {
|
||||
// mapUtil.value.removeEara(flag);
|
||||
// });
|
||||
// 回显图形
|
||||
emitter.on("echoPlane", (res) => {
|
||||
mapUtil.value.echoPlane(res);
|
||||
|
||||
@ -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">
|
||||
@ -31,7 +30,8 @@
|
||||
</el-carousel> -->
|
||||
<!-- 地图缩放 -->
|
||||
<div class="zoomTargetBox">
|
||||
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom"></el-input-number>
|
||||
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom">
|
||||
</el-input-number>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -44,7 +44,7 @@ import { getItem } from "@/utils/storage";
|
||||
const conditionRoute = ref(true); //路况
|
||||
const mMap = ref(null); //地图对象
|
||||
const mapUtil = ref(null); //地图工具对象
|
||||
const zoomTarget = ref(15);
|
||||
const zoomTarget = ref(6);
|
||||
|
||||
const props = defineProps({
|
||||
mapid: {
|
||||
@ -70,11 +70,12 @@ const props = defineProps({
|
||||
isShowDraw: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
try {
|
||||
const userInfo = getItem("deptId")[0].deptCode;
|
||||
} catch (error) { }
|
||||
} catch (error) {}
|
||||
let map;
|
||||
let mapLayer;
|
||||
let mapLayer1;
|
||||
@ -88,37 +89,66 @@ 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: 11
|
||||
},
|
||||
minZoom: 5,
|
||||
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(
|
||||
"/PGIS_S_TileMapServer/Maps/XZDJ_DJ/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();
|
||||
// 地图加载完成后发出事件
|
||||
// emit('mapLoaded')
|
||||
});
|
||||
mapUtil.value = new MapUtil(map);
|
||||
|
||||
// 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(); //初始化加载绘制工具
|
||||
|
||||
// 设置地图中心点及图层
|
||||
@ -154,10 +184,6 @@ onMounted(() => {
|
||||
emitter.on("showSquire", (obj) => {
|
||||
mapUtil.value.zdySquire(obj);
|
||||
});
|
||||
// 展示气泡框
|
||||
emitter.on("makerPopup", (obj) => {
|
||||
mapUtil.value.makerPopup(obj);
|
||||
});
|
||||
|
||||
// 绘制图形 - 回显区域
|
||||
emitter.on("drawShape", (res) => {
|
||||
@ -263,6 +289,7 @@ const mapSetLayer = (id, source) => {
|
||||
|
||||
//获取地图绘制的数据
|
||||
const resFun = (coord, type, flag, data) => {
|
||||
|
||||
emitter.emit("coordString", {
|
||||
coord: coord,
|
||||
type: type,
|
||||
@ -276,6 +303,12 @@ const handleZoom = (val) => {
|
||||
map.mapboxGLMap.setZoom(val);
|
||||
};
|
||||
|
||||
emitter.on("map-resize", () => {
|
||||
if (map && map.mapboxGLMap) {
|
||||
map.mapboxGLMap.resize();
|
||||
}
|
||||
});
|
||||
|
||||
// 是否打开或者关闭路况
|
||||
const handleSwitch = (val) => {
|
||||
if (val) {
|
||||
@ -292,7 +325,6 @@ onUnmounted(() => {
|
||||
emitter.off("showPoint");
|
||||
emitter.off("deletePointArea");
|
||||
emitter.off("deletePointAreaOne");
|
||||
emitter.off("makerPopup");
|
||||
emitter.off("drawShape");
|
||||
emitter.off("echoPlane");
|
||||
emitter.off("removeEara");
|
||||
@ -306,6 +338,7 @@ onUnmounted(() => {
|
||||
emitter.off("diffusionCircle");
|
||||
emitter.off("SsCircle");
|
||||
emitter.off("ClearssCircle");
|
||||
emitter.off("map-resize");
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -328,35 +361,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;
|
||||
}
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
<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">
|
||||
@ -30,21 +31,20 @@
|
||||
</el-carousel> -->
|
||||
<!-- 地图缩放 -->
|
||||
<div class="zoomTargetBox">
|
||||
<el-input-number :min="7" :max="18" v-model="zoomTarget" :step="1" step-strictly @change="handleZoom">
|
||||
</el-input-number>
|
||||
<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, computed } from "vue";
|
||||
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 zoomTarget = ref(15);
|
||||
|
||||
const props = defineProps({
|
||||
mapid: {
|
||||
@ -70,19 +70,11 @@ const props = defineProps({
|
||||
isShowDraw: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 地图唯一标识,用于隔离不同地图实例的操作
|
||||
mapKey: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
});
|
||||
|
||||
// 计算地图唯一标识,如果没有传入则使用mapid
|
||||
const uniqueMapKey = computed(() => props.mapKey || props.mapid);
|
||||
try {
|
||||
const userInfo = getItem("deptId")[0].deptCode;
|
||||
} catch (error) {}
|
||||
} catch (error) { }
|
||||
let map;
|
||||
let mapLayer;
|
||||
let mapLayer1;
|
||||
@ -96,107 +88,76 @@ onMounted(() => {
|
||||
|
||||
map = new EliMap({
|
||||
id: props.mapid,
|
||||
crs: "EPSG:3857",
|
||||
crs: "EPSG:4490",
|
||||
style: {
|
||||
glyphs: "./fonts/{fontstack}/{range}.pbf",
|
||||
center: [94.36,29.65],
|
||||
zoom: 10
|
||||
center: [94.36057012, 29.64276831],
|
||||
zoom: 15
|
||||
},
|
||||
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]}`;
|
||||
|
||||
}
|
||||
}
|
||||
minZoom: 5,
|
||||
maxZoom: 18,
|
||||
});
|
||||
|
||||
// 移除全局挂载,避免不同地图实例冲突
|
||||
// window.map = map;
|
||||
|
||||
// 将地图实例存储在组件内
|
||||
mMap.value = map;
|
||||
|
||||
window.map = map;
|
||||
map.mapboxGLMap.on("load", () => {
|
||||
map.addGaudLayer({
|
||||
url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
|
||||
})
|
||||
map.addWMTSLayer(
|
||||
"/PGIS_S_TileMapServer/Maps/XZDJ_DJ/EzMap"
|
||||
,
|
||||
{
|
||||
Service: "getImage",
|
||||
Type: "RGB",
|
||||
ZoomOffset: "0",
|
||||
V: "0.3",
|
||||
Zoom: "{z}",
|
||||
Row: "{y}",
|
||||
Col: "{x}"
|
||||
},
|
||||
{
|
||||
tileSize: 300
|
||||
}
|
||||
);
|
||||
zoomTarget.value = map.mapboxGLMap.getZoom();
|
||||
// 地图加载完成后发出事件
|
||||
// emit('mapLoaded')
|
||||
});
|
||||
|
||||
mapUtil.value = new MapUtil(map);
|
||||
|
||||
mapUtil.value.Drawplot(); //初始化加载绘制工具
|
||||
|
||||
// 为每个事件添加唯一标识过滤,确保只处理与当前地图实例相关的操作
|
||||
|
||||
// 设置地图中心点及图层
|
||||
emitter.on(`setMapCenter_${uniqueMapKey.value}`, (res) => {
|
||||
mapUtil.value.setMapCenter(res.location, res.zoomLevel);
|
||||
});
|
||||
|
||||
// 也保留原始事件,但添加条件判断
|
||||
emitter.on("setMapCenter", (res) => {
|
||||
// 如果事件包含flag并且与当前地图的唯一标识匹配,或者没有指定flag,则处理
|
||||
if (!res.flag || res.flag === uniqueMapKey.value) {
|
||||
mapUtil.value.setMapCenter(res.location, res.zoomLevel);
|
||||
}
|
||||
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) => {
|
||||
// 只处理与当前地图相关的标记点
|
||||
if (!obj.baseFlag || obj.baseFlag === uniqueMapKey.value ||
|
||||
obj.flag && obj.flag.includes(uniqueMapKey.value)) {
|
||||
mapUtil.value.makerSki(obj);
|
||||
}
|
||||
mapUtil.value.makerSki(obj);
|
||||
});
|
||||
|
||||
// 鼠标滑过提示文字的点位
|
||||
emitter.on("showPoint", (obj) => {
|
||||
mapUtil.value.showPoint(obj);
|
||||
});
|
||||
|
||||
// 展示气泡框
|
||||
emitter.on("makerPopup", (obj) => {
|
||||
mapUtil.value.makerPopup(obj);
|
||||
});
|
||||
|
||||
// 清除覆盖物
|
||||
emitter.on("deletePointArea", (res) => {
|
||||
// 只清除与当前地图相关的覆盖物
|
||||
if (typeof res === 'object' && res.baseFlag) {
|
||||
if (res.baseFlag === uniqueMapKey.value) {
|
||||
mapUtil.value.removeElement(res.baseFlag);
|
||||
}
|
||||
} else if (typeof res === 'string') {
|
||||
if (res === uniqueMapKey.value || res.includes(uniqueMapKey.value)) {
|
||||
mapUtil.value.removeElement(res);
|
||||
}
|
||||
}
|
||||
mapUtil.value.removeElement(res);
|
||||
});
|
||||
|
||||
// 清除某个覆盖物的单个
|
||||
emitter.on("deletePointAreaOne", (obj) => {
|
||||
if (obj.flag === uniqueMapKey.value || obj.flag.includes(uniqueMapKey.value)) {
|
||||
mapUtil.value.removeElementOne(obj.flag, obj.id);
|
||||
}
|
||||
mapUtil.value.removeElementOne(obj.flag, obj.id);
|
||||
});
|
||||
|
||||
// 清除某个覆盖物的单个
|
||||
emitter.on("showSquire", (obj) => {
|
||||
mapUtil.value.zdySquire(obj);
|
||||
});
|
||||
// 展示气泡框
|
||||
emitter.on("makerPopup", (obj) => {
|
||||
mapUtil.value.makerPopup(obj);
|
||||
});
|
||||
|
||||
// 绘制图形 - 回显区域
|
||||
emitter.on("drawShape", (res) => {
|
||||
@ -302,7 +263,6 @@ const mapSetLayer = (id, source) => {
|
||||
|
||||
//获取地图绘制的数据
|
||||
const resFun = (coord, type, flag, data) => {
|
||||
|
||||
emitter.emit("coordString", {
|
||||
coord: coord,
|
||||
type: type,
|
||||
@ -330,9 +290,9 @@ onUnmounted(() => {
|
||||
emitter.off("setMapCenter");
|
||||
emitter.off("addPointArea");
|
||||
emitter.off("showPoint");
|
||||
emitter.off("makerPopup");
|
||||
emitter.off("deletePointArea");
|
||||
emitter.off("deletePointAreaOne");
|
||||
emitter.off("makerPopup");
|
||||
emitter.off("drawShape");
|
||||
emitter.off("echoPlane");
|
||||
emitter.off("removeEara");
|
||||
@ -368,29 +328,35 @@ 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;
|
||||
}
|
||||
@ -72,7 +72,7 @@ export function MapUtil(map) {
|
||||
*/
|
||||
|
||||
MapUtil.prototype.makerSki = (res) => {
|
||||
let { coords, icon, flag, showTitle, size, offset } = res
|
||||
let { coords, icon, flag, showTitle, size, offset, flash } = res
|
||||
if (!coords) return;
|
||||
if (!_that._self[flag]) _that._self[flag] = []; //存储地图标识的容器
|
||||
if (!_that.idsBox[flag]) _that.idsBox[flag] = []; //存储id的容器
|
||||
@ -81,13 +81,19 @@ export function MapUtil(map) {
|
||||
} else {
|
||||
coords.forEach(item => {
|
||||
let el = document.createElement("img");
|
||||
el.src = item.icon || icon;
|
||||
if (!flash) {
|
||||
el.src = item.icon ? item.icon : icon;
|
||||
} else {
|
||||
el.className = 'blink-animation'
|
||||
}
|
||||
el.style.width = size ? size : "25px";
|
||||
if (flag.includes('jczMap_')) el.style.width = '45px';
|
||||
if (showTitle) _that.makerShowTitle(item, [item.jd, item.wd], flag, '', offset) //展示标题
|
||||
// if (flag == 'hm') _that.makerPopup({data:item,flag:'hm_pop',type:'Custom'}) //展示气泡框
|
||||
|
||||
|
||||
// 确保坐标格式正确,使用对象格式传递坐标
|
||||
const marker = map.Marker(el, { lng: item.jd, lat: item.wd }, { anchor: 'bottom', offset: [0, 0] })
|
||||
const marker = map.Marker(el, { lng: item.jd, lat: item.wd }, { anchor: 'bottom', offset: offset ? offset : [0, 0] })
|
||||
el.addEventListener("click", () => {
|
||||
_that.openInfoDetail(flag, item) //点击打开详情
|
||||
})
|
||||
@ -321,7 +327,9 @@ export function MapUtil(map) {
|
||||
MapUtil.prototype.diffusionCircle = (obj) => {
|
||||
let { coords, flag, isClear } = obj
|
||||
if (!_that._self[flag]) _that._self[flag] = {}
|
||||
if (isClear) _that._self[flag].destroy() //destroy销毁,show(false) 移除
|
||||
if (isClear && _that._self[flag] && typeof _that._self[flag].destroy === 'function') {
|
||||
_that._self[flag].destroy() //destroy销毁,show(false) 移除
|
||||
}
|
||||
let data = [{ position: coords }]
|
||||
_that._self[flag] = map.DiffuseCircle(data, {
|
||||
radius: 10,
|
||||
@ -412,8 +420,11 @@ export function MapUtil(map) {
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
const el = list[i];
|
||||
console.log(el, 'el');
|
||||
if (el && typeof el == 'object') el.destroy() //destory()销毁 , show(false) false:隐藏 true :展示
|
||||
else _that.removePlot(key)
|
||||
if (el && typeof el === 'object' && typeof el.destroy === 'function') {
|
||||
el.destroy() //destory()销毁 , show(false) false:隐藏 true :展示
|
||||
} else {
|
||||
_that.removePlot(key)
|
||||
}
|
||||
}
|
||||
_that._self[key] = [];
|
||||
}
|
||||
@ -430,7 +441,11 @@ export function MapUtil(map) {
|
||||
for (let key in _that._self.gpsZb) {
|
||||
let item = _that._self.gpsZb[key]
|
||||
if (item && item.length > 0) {
|
||||
for (let child in item) { item[child].destroy() }
|
||||
for (let child in item) {
|
||||
if (item[child] && typeof item[child].destroy === 'function') {
|
||||
item[child].destroy()
|
||||
}
|
||||
}
|
||||
_that._self.gpsZb[key] = []
|
||||
}
|
||||
}
|
||||
@ -442,7 +457,9 @@ export function MapUtil(map) {
|
||||
if (layer !== 'gpsZb') {
|
||||
for (let i = 0; i < _that._self[layer].length; i++) {
|
||||
const el = _that._self[layer][i];
|
||||
el.destroy()//destory()销毁 , show(false) false:隐藏 true :展示
|
||||
if (el && typeof el.destroy === 'function') {
|
||||
el.destroy()//destory()销毁 , show(false) false:隐藏 true :展示
|
||||
}
|
||||
}
|
||||
_that._self[layer] = [];
|
||||
|
||||
@ -452,7 +469,9 @@ export function MapUtil(map) {
|
||||
if (!_that._self[flagT]) return false;
|
||||
for (let i = 0; i < _that._self[flagT].length; i++) {
|
||||
const el = _that._self[flagT][i];
|
||||
el.destroy()//destory()销毁 , show(false) false:隐藏 true :展示
|
||||
if (el && typeof el.destroy === 'function') {
|
||||
el.destroy()//destory()销毁 , show(false) false:隐藏 true :展示
|
||||
}
|
||||
}
|
||||
_that._self[flagT] = []
|
||||
}
|
||||
@ -467,11 +486,15 @@ export function MapUtil(map) {
|
||||
list.forEach((el, index) => {
|
||||
if (el == id) {
|
||||
_that.idsBox[layer].splice(index, 1);
|
||||
if (_that._self[layer][index]) _that._self[layer][index].destroy()
|
||||
if (_that._self[layer][index] && typeof _that._self[layer][index].destroy === 'function') {
|
||||
_that._self[layer][index].destroy()
|
||||
}
|
||||
_that._self[layer].splice(index, 1)
|
||||
if (layer == 'rx') {
|
||||
let flagT = layer + 'rxTitle';
|
||||
if (_that._self[flagT][index]) _that._self[flagT][index].destroy()
|
||||
if (_that._self[flagT][index] && typeof _that._self[flagT][index].destroy === 'function') {
|
||||
_that._self[flagT][index].destroy()
|
||||
}
|
||||
_that._self[flagT].splice(index, 1)
|
||||
_that.removeGpsZbOverlayById(id) //删除图标
|
||||
}
|
||||
@ -485,7 +508,11 @@ export function MapUtil(map) {
|
||||
try {
|
||||
let info = _that._self.gpsZb[id]
|
||||
if (info) {
|
||||
info.forEach(element => { element.destroy() });
|
||||
info.forEach(element => {
|
||||
if (element && typeof element.destroy === 'function') {
|
||||
element.destroy()
|
||||
}
|
||||
});
|
||||
delete _that._self.gpsZb[id]
|
||||
}
|
||||
} catch (err) { }
|
||||
@ -759,7 +786,7 @@ export function MapUtil(map) {
|
||||
|
||||
// 移除轨迹
|
||||
MapUtil.prototype.removeTrajectory = (flag) => {
|
||||
if (_that._self[flag]) {
|
||||
if (_that._self[flag] && typeof _that._self[flag].destroy === 'function') {
|
||||
_that._self[flag].destroy();
|
||||
_that._self[flag] = null
|
||||
}
|
||||
@ -848,7 +875,7 @@ export function MapUtil(map) {
|
||||
// 移除边界
|
||||
MapUtil.prototype.removeBj = (res) => {
|
||||
// 移除单个polygonGeo(为了向后兼容)
|
||||
if (_that.polygonGeo) {
|
||||
if (_that.polygonGeo && typeof _that.polygonGeo.destroy === 'function') {
|
||||
_that.polygonGeo.destroy();
|
||||
_that.polygonGeo = null;
|
||||
}
|
||||
@ -856,7 +883,9 @@ export function MapUtil(map) {
|
||||
// 移除所有添加到boundaryList中的多边形
|
||||
if (_that.boundaryList && _that.boundaryList.length > 0) {
|
||||
_that.boundaryList.forEach(polygon => {
|
||||
polygon.destroy();
|
||||
if (polygon && typeof polygon.destroy === 'function') {
|
||||
polygon.destroy();
|
||||
}
|
||||
});
|
||||
_that.boundaryList = [];
|
||||
}
|
||||
@ -882,6 +911,12 @@ export function MapUtil(map) {
|
||||
case 'yj':
|
||||
emitter.emit('yjShow', data);
|
||||
break;
|
||||
case 'jq':
|
||||
emitter.emit('showJqXq', data);
|
||||
break;
|
||||
case 'sj':
|
||||
emitter.emit('showZdsjXq', data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,18 +1,8 @@
|
||||
<template>
|
||||
<div class="form-item-box" :style="{ width: width }">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
class="el-cascader-zj"
|
||||
:show-all-levels="false"
|
||||
clearable
|
||||
filterable
|
||||
:disabled="props.disabled"
|
||||
:placeholder="modelValue ? placeholder : '请选择部门'"
|
||||
:options="tableData"
|
||||
v-model="oldmodelValue"
|
||||
@change="handleChange"
|
||||
:props="endProps"
|
||||
/>
|
||||
<el-cascader style="width: 100%" class="el-cascader-zj" :show-all-levels="false" clearable filterable
|
||||
:disabled="props.disabled" :placeholder="modelValue ? placeholder : '请选择部门'" :options="tableData"
|
||||
v-model="oldmodelValue" @change="handleChange" :props="endProps" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -41,14 +31,14 @@ const props = defineProps({
|
||||
default: []
|
||||
},
|
||||
width: {
|
||||
default: COMPONENT_WIDTH,
|
||||
default: '',
|
||||
type: String
|
||||
},
|
||||
isAll:{
|
||||
isAll: {
|
||||
default: false,
|
||||
type: Boolean
|
||||
},
|
||||
disabled:{
|
||||
disabled: {
|
||||
default: false,
|
||||
type: Boolean
|
||||
},
|
||||
@ -72,7 +62,7 @@ const endProps = {
|
||||
lazyLoad(node, resolve) {
|
||||
listQuery.value.parentid = node.data.id;
|
||||
let params = { ...listQuery.value };
|
||||
if(props.isAll && firstLoad.value) {
|
||||
if (props.isAll && firstLoad.value) {
|
||||
params.parentid = 1;
|
||||
firstLoad.value = false;
|
||||
}
|
||||
@ -89,7 +79,7 @@ const endProps = {
|
||||
const tableData = ref([]);
|
||||
const getSysMenuTree = async () => {
|
||||
let params = { ...listQuery.value }
|
||||
if(props.isAll) params.parentid = 1;
|
||||
if (props.isAll) params.parentid = 1;
|
||||
const res = await selectDeptPage(params);
|
||||
tableData.value = res;
|
||||
depList.value = res
|
||||
@ -101,29 +91,29 @@ onMounted(() => {
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(val) => {
|
||||
console.log(val,'val');
|
||||
console.log(val, 'val');
|
||||
oldmodelValue.value = val;
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
const emits = defineEmits(["update:modelValue",'getDepValue']);
|
||||
const emits = defineEmits(["update:modelValue", 'getDepValue']);
|
||||
const handleChange = (e) => {
|
||||
if (props.multiple === true) {
|
||||
const data = e.map((item) => {return item[item.length - 1];});
|
||||
const data = e.map((item) => { return item[item.length - 1]; });
|
||||
emits("update:modelValue", data);
|
||||
const obj= data.map(items=>{
|
||||
const obj = data.map(items => {
|
||||
return {
|
||||
... depList.value.find(item=>{ return item.orgCode == items})
|
||||
...depList.value.find(item => { return item.orgCode == items })
|
||||
}
|
||||
})
|
||||
console.log(obj);
|
||||
|
||||
|
||||
emits("getDepValue", obj);
|
||||
|
||||
|
||||
} else {
|
||||
const data = e ? e[e.length - 1] : "";
|
||||
emits("update:modelValue", data);
|
||||
let obj = depList.value.find(item=>{ return item.orgCode == data})
|
||||
let obj = depList.value.find(item => { return item.orgCode == data })
|
||||
emits("getDepValue", obj);
|
||||
}
|
||||
};
|
||||
|
||||
@ -173,7 +173,8 @@ const props = defineProps({
|
||||
const emit = defineEmits([
|
||||
"chooseData",
|
||||
"rowdbClickHland",
|
||||
"rowcontextmenuHland"
|
||||
"rowcontextmenuHland",
|
||||
"changePage"
|
||||
]);
|
||||
const multipleTableRef = ref();
|
||||
const currentRow = ref();
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
</el-radio-group>
|
||||
|
||||
<!-- 时间选择 -->
|
||||
<el-time-picker v-else-if="item.type == 'time'" v-model="listQuery[item.prop]" placeholder="选择时间" style="width: 100%" :disabled="item.disabled" />
|
||||
<el-time-picker v-else-if="item.type == 'time'" v-model="listQuery[item.prop]" placeholder="选择时间" style="width: 100%" :disabled="item.disabled" value-format="HH:mm:ss"/>
|
||||
<el-date-picker v-else-if="item.type == 'date'" v-model="listQuery[item.prop]" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width: 100%" :disabled="item.disabled" />
|
||||
<el-date-picker v-else-if="item.type == 'datetime'" v-model="listQuery[item.prop]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择时间" style="width: 100%" :disabled="item.disabled" />
|
||||
<el-date-picker v-else-if="item.type == 'datetimerange'" v-model="listQuery[item.prop]" type="datetimerange" :shortcuts="shortcuts" range-separator="To" value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="选择开始时间" end-placeholder="选择结束时间" style="width: 100%" :disabled="item.disabled" />
|
||||
|
||||
@ -41,6 +41,11 @@ export const publicRoutes = [
|
||||
name: "home",
|
||||
component: () => import("@/views/home/index") //系统登录
|
||||
},
|
||||
{
|
||||
path: "/mapNavigation",
|
||||
name: "mapNavigation",
|
||||
component: () => import("@/views/home/model/mapNavigation.vue") //系统登录
|
||||
},
|
||||
{
|
||||
path: "/KeyPopulations",
|
||||
name: "KeyPopulations",
|
||||
@ -484,6 +489,15 @@ export const publicRoutes = [
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/policeManagement",
|
||||
name: "policeManagement",
|
||||
component: () => import("@/views/backOfficeSystem/policeManagement/index.vue"),
|
||||
meta: {
|
||||
title: "重大事件",
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/ResearchHome",
|
||||
name: "ResearchHome",
|
||||
@ -658,6 +672,29 @@ export const publicRoutes = [
|
||||
name: "dataApplication",
|
||||
meta: { title: "数据应用", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/Gzqkgl",
|
||||
name: "Gzqkgl",
|
||||
meta: {
|
||||
title: "工作情况管理",
|
||||
icon: "article-create"
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "/goingJob",
|
||||
name: "goingJob",
|
||||
meta: { title: "工作情况", icon: "article-ranking" },
|
||||
component: () => import("@/views/backOfficeSystem/goingJob/index.vue")
|
||||
}, {
|
||||
path: "/workLogInfo",
|
||||
name: "workLogInfo",
|
||||
meta: { title: "值班信息", icon: "article-ranking" },
|
||||
component: () => import("@/views/backOfficeSystem/workLogInfo/index.vue")
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
path: "/Cspz",
|
||||
name: "Cspz",
|
||||
|
||||
@ -4,6 +4,11 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
@ -82,6 +87,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvCar/components/addForm.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -157,7 +163,7 @@ onMounted(() => {
|
||||
});
|
||||
// 移入
|
||||
const handleSend=()=>{
|
||||
|
||||
|
||||
}
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
|
||||
@ -4,6 +4,12 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
<!-- <el-button type="danger" size="small" @click="handleRow()">批量删除</el-button> -->
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
@ -36,6 +42,8 @@
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="handleSend(row.id)">移入</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
@ -45,7 +53,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 编辑 - 新增-->
|
||||
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
|
||||
<EditForm v-if="show" @updateDate="getList" qtlx="02" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -57,6 +65,8 @@ import EditForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/compo
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDR_CZZT,D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT","D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||
const showzxs = ref(false);
|
||||
@ -127,7 +137,7 @@ const pageData = reactive({
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 150,
|
||||
controlsWidth: 180,
|
||||
tableColumn: [
|
||||
{ label: "群体名称", prop: "qtMc",width:150 },
|
||||
{ label: "群体类别", prop: "qtLb" , showSolt: true,width:150 },
|
||||
@ -136,13 +146,16 @@ const pageData = reactive({
|
||||
{ label: "背景信息", prop: "bgxx", showSolt: true ,width:150 },
|
||||
{ label: "管辖单位", prop: "gxSsdwmc",width:150 },
|
||||
{ label: "状态", prop: "qtZt", showSolt: true,width:150 },
|
||||
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true,width:400 },
|
||||
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList();
|
||||
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
});
|
||||
|
||||
//移入
|
||||
|
||||
@ -4,6 +4,13 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
<!-- <el-button type="danger" size="small" @click="handleRow()">批量删除</el-button> -->
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -46,6 +53,8 @@
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="success" @click="handleSend(row.id)">移入</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
@ -55,7 +64,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList"
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList" rylx="02"
|
||||
:dic="{ D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
|
||||
</div>
|
||||
</template>
|
||||
@ -69,6 +78,7 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
|
||||
@ -126,7 +136,7 @@ const pageData = reactive({
|
||||
tableColumn: [
|
||||
{ label: "姓名", prop: "ryXm", width: 150 },
|
||||
{ label: "性别", prop: "ryXb", showSolt: true, width: 100 },
|
||||
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100},
|
||||
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100 },
|
||||
{ label: "身份证", prop: "rySfzh", width: 200 },
|
||||
{ label: "民族", prop: "ryMz", showSolt: true, width: 100 },
|
||||
{ label: "户籍地区划", prop: "hjdQh", showSolt: true, width: 150 },
|
||||
@ -135,10 +145,12 @@ const pageData = reactive({
|
||||
{ label: "审核状态", prop: "zdrZt", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
});
|
||||
|
||||
// 搜索
|
||||
@ -161,7 +173,7 @@ const changeSize = (val) => {
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// 人员类型D_ZDRY_RYLX(01 重点 02 普通〉
|
||||
let data = { rylx:'02',...pageData.pageConfiger, ...queryFrom.value };
|
||||
let data = { rylx: '02', ...pageData.pageConfiger, ...queryFrom.value };
|
||||
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
@ -251,7 +263,7 @@ const addEdit = (type, row) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
|
||||
@ -2,79 +2,89 @@
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<!-- <el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button>
|
||||
</template>
|
||||
<div class="flex just-center">
|
||||
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)" >{{ it.zdmc }}</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<div class="flex just-center">
|
||||
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)">{{
|
||||
it.zdmc }}</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)" >指定分配</el-button>
|
||||
</template>
|
||||
<div>
|
||||
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||
<div class="flex just-center mt10">
|
||||
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
|
||||
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button> -->
|
||||
<div>
|
||||
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||
<div class="flex just-center mt10">
|
||||
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
|
||||
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button> -->
|
||||
<el-button type="primary" size="small" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
<template #ryxx="{ row }">
|
||||
<div class="flex">
|
||||
<img src="" alt="" style="width: 80px;height: 90px;" />
|
||||
<ul class="tl ml10" style="flex:1 0 0">
|
||||
<li class="one_text_detail">姓名:{{ row.ryXm }}</li>
|
||||
<li class="flex one_text_detail">性别:<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
|
||||
<li class="flex one_text_detail">籍贯:<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
|
||||
<li class="flex one_text_detail">性别:
|
||||
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
|
||||
</li>
|
||||
<li class="flex one_text_detail">籍贯:
|
||||
<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
|
||||
</li>
|
||||
<li class="one_text_detail">身份证:{{ row.rySfzh }}</li>
|
||||
<li class="one_text_detail">出生日期:{{ row.ryCsrq }}</li>
|
||||
<li class="flex one_text_detail">民族:<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
|
||||
<li class="flex one_text_detail">民族:
|
||||
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<template #jzxx="{ row }">
|
||||
<div class="flex one_text_detail">户籍地区划:<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
|
||||
<div class="flex one_text_detail">户籍地区划:
|
||||
<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
|
||||
</div>
|
||||
<div class="flex one_text_detail">户籍派出所:{{ row.hjdPcsmc }}</div>
|
||||
<div class="flex one_text_detail">户籍地详址:{{ row.hjdXz }}</div>
|
||||
</template>
|
||||
|
||||
<template #bqList="{ row }">
|
||||
<ul >
|
||||
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{ item.bqFz || 0 }} 分) </li>
|
||||
<ul>
|
||||
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
|
||||
item.bqFz || 0 }} 分) </li>
|
||||
</ul>
|
||||
</template>
|
||||
<template #gxdw="{ row }">
|
||||
<div class="flex one_text_detail">管辖单位:{{ row.gxSsbmmc }}</div>
|
||||
<div class="flex">人员级别:<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div>
|
||||
<div class="flex">人员级别:
|
||||
<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
|
||||
</div>
|
||||
<div class="flex one_text_detail">管控原因:{{ row.zdrLkyy }}</div>
|
||||
<div class="flex">管控状态:<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div>
|
||||
<div class="flex">管控状态:
|
||||
<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
|
||||
</div>
|
||||
</template>
|
||||
<template #zdrCzzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
|
||||
@ -88,27 +98,24 @@
|
||||
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)" >编辑</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{BD_BK_CLYJBQ,D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList"
|
||||
:dic="{ BD_BK_CLYJBQ, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
|
||||
<!-- 选择用户 -->
|
||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
|
||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" />
|
||||
<!-- 转线索 -->
|
||||
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX,D_GS_XS_QTLX }"></ZxsForm>
|
||||
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList"
|
||||
:dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }"></ZxsForm>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -121,10 +128,11 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB,BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX","BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
|
||||
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT", "D_GS_ZDR_RYJB", "D_BZ_XB", "D_BZ_MZ", "D_BZ_XZQHDM", "D_GS_ZDR_BK_ZT", "D_GS_ZDR_CZZT", "D_GS_BQ_ZL", "D_GS_BQ_LB", "D_GS_BQ_LX", "D_GS_BK_SSJZ", "D_GS_BK_SQLX", "D_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX", "BD_BK_CLYJBQ", "D_GS_ZDR_YJDJ");
|
||||
const obj = ref({});
|
||||
const showzxs = ref(false);
|
||||
const zxsDilof = ref();
|
||||
@ -179,9 +187,9 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 150,
|
||||
tableColumn: [
|
||||
{ label: "车牌号", prop: "hphm",showOverflowTooltip:true },
|
||||
{ label: "车牌号", prop: "hphm", showOverflowTooltip: true },
|
||||
{ label: "车架号", prop: "clCjh" },
|
||||
{ label: "车辆颜色", prop: "clYs",showOverflowTooltip:true},
|
||||
{ label: "车辆颜色", prop: "clYs", showOverflowTooltip: true },
|
||||
{ label: "车辆所有人", prop: "clSyr" },
|
||||
{ label: "管辖单位", prop: "gxSsbmmc", showSolt: true },
|
||||
{ label: "管控民警姓名", prop: "gkMjXm", showSolt: true },
|
||||
@ -189,8 +197,12 @@ const pageData = reactive({
|
||||
// { label: "审核状态", prop: "zdrZt", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
console.log( getItem('roleList'));
|
||||
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
@ -249,7 +261,7 @@ const handleUserSelected = (val) => {
|
||||
// 处理分配
|
||||
const handlefp = () => {
|
||||
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
|
||||
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
|
||||
qcckPost({ ids: ids.value, uid: obj.value.fpid }, "/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
|
||||
ElMessage.success("分配成功");
|
||||
visible.value = false;
|
||||
visiblefp.value = false;
|
||||
@ -285,7 +297,7 @@ const handleZxs = () => {
|
||||
const deleteRow = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
|
||||
qcckPost({id}, "/mosty-gsxt/tbGsxtZdcl/delete" ).then((res) => {
|
||||
qcckPost({ id }, "/mosty-gsxt/tbGsxtZdcl/delete").then((res) => {
|
||||
ElMessage.success("删除成功");
|
||||
getList();
|
||||
});
|
||||
@ -296,7 +308,7 @@ const deleteRow = (id) => {
|
||||
//新增编辑
|
||||
const addEdit = (type, row) => {
|
||||
show.value = true;
|
||||
nextTick(()=>{
|
||||
nextTick(() => {
|
||||
addFormDiloag.value.init(type, row);
|
||||
})
|
||||
};
|
||||
@ -311,7 +323,7 @@ const tabHeightFn = () => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.marks{
|
||||
.marks {
|
||||
padding: 0 4px;
|
||||
white-space: nowrap;
|
||||
background: #73acf1;
|
||||
@ -323,5 +335,4 @@ const tabHeightFn = () => {
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -67,6 +67,14 @@ const disabled = ref(false)
|
||||
const showBut = ref()
|
||||
const title = ref('新增')
|
||||
const portrayal = ref(false)
|
||||
const props = defineProps({
|
||||
qtlx: {
|
||||
type: String,
|
||||
default: '01'
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['updateDate'])
|
||||
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true
|
||||
if (type == 'add') {
|
||||
@ -168,7 +176,6 @@ const submit = async () => {
|
||||
requestInfo.value.throwData(),
|
||||
personnel.value.throwData()
|
||||
]);
|
||||
|
||||
const datamasg = {
|
||||
...infoData,
|
||||
qtBjzl: backinfoData.qtbjxx,
|
||||
@ -177,7 +184,8 @@ const submit = async () => {
|
||||
qttz: featinfoData,
|
||||
zyxx: demandsInfoData,
|
||||
sqfj: requestInfoData.fileList.length > 0 ? JSON.stringify(requestInfoData.fileList) : "",
|
||||
zdryList: personnelData
|
||||
zdryList: personnelData,
|
||||
qtlx: props.qtlx
|
||||
}
|
||||
|
||||
const res = await tbGsxtZdqtAdd(datamasg)
|
||||
@ -206,7 +214,7 @@ const submit = async () => {
|
||||
message: '新增成功',
|
||||
type: 'success',
|
||||
})
|
||||
|
||||
emit('updateDate')
|
||||
close()
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
@ -68,7 +68,7 @@
|
||||
<el-link size="small" type="primary" v-if="row.qtZt == '01'" @click="handleSend(row.id)">办结</el-link>
|
||||
<el-link size="small" type="success" v-if="row.qtZt == '01'" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -97,6 +97,7 @@ import EditForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDR_CZZT, D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT", "D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||
const showzxs = ref(false);
|
||||
@ -185,8 +186,10 @@ const pageData = reactive({
|
||||
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true, },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
@ -114,7 +114,13 @@ const showBut = ref(false)
|
||||
const listQuery = ref({});
|
||||
const butShow = ref(false)
|
||||
const title = ref('新增')
|
||||
const showData=ref(false)
|
||||
const showData = ref(false)
|
||||
const props = defineProps({
|
||||
rylx: {
|
||||
type: String,
|
||||
default: '01'
|
||||
}
|
||||
})
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
@ -207,7 +213,7 @@ const submit = async () => {
|
||||
info.value.throwData()
|
||||
// personnelTags.value.throwData(),
|
||||
]);
|
||||
tbGsxtZdrySave({...infoData,rylx:'01'}).then(res => {
|
||||
tbGsxtZdrySave({...infoData,rylx:props.rylx}).then(res => {
|
||||
proxy.$message({
|
||||
message: '新增成功',
|
||||
type: 'success',
|
||||
|
||||
@ -117,6 +117,7 @@ import AddForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -188,9 +189,11 @@ const pageData = reactive({
|
||||
{ label: "入库时间", prop: "zdrRkkssj", },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
tabHeightFn();
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
if (route.query.id) {
|
||||
addEdit('x', {
|
||||
id: route.query.id
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
<div class="phone-input-container">
|
||||
<div class="inputGroup" v-for="(item, index) in listQuery.ryLxdh" :key="index">
|
||||
<el-input v-model="listQuery.ryLxdh[index]" class="group" placeholder="请输入电话号码" />
|
||||
<div class="flex align-center but" v-if="showBut">
|
||||
<div class="flex align-center but" >
|
||||
<el-button type="primary" :icon="Plus" circle @click="addPhone" title="添加电话号码"
|
||||
v-if="listQuery.ryLxdh.length - 1 == index" />
|
||||
<el-button type="success" :icon="Minus" circle @click="removePhone(index)" title="删除电话号码" />
|
||||
|
||||
308
src/views/backOfficeSystem/ces/components/QueryFormPanel.vue
Normal file
308
src/views/backOfficeSystem/ces/components/QueryFormPanel.vue
Normal file
@ -0,0 +1,308 @@
|
||||
<template>
|
||||
<section class="query-wrap">
|
||||
<div class="query-title">{{ title }}</div>
|
||||
<div class="query-grid">
|
||||
<div v-for="field in renderFields" :key="field.key" class="query-cell">
|
||||
<div class="cell-label">{{ field.label }}</div>
|
||||
<div class="cell-control" :class="{ 'is-checkbox': field.type === 'checkbox' }">
|
||||
<el-input clearable v-if="field.type === 'input'" v-model="formState[field.key]" class="control-input"
|
||||
:placeholder="field.placeholder || ''" />
|
||||
<el-input clearable v-else-if="field.type === 'number'" v-model="formState[field.key]" class="control-input"
|
||||
type="number" :placeholder="field.placeholder || ''" />
|
||||
<el-select clearable v-else-if="field.type === 'select'" v-model="formState[field.key]" class="control-select"
|
||||
:placeholder="field.placeholder || '请选择'" :multiple="field.multiple || false" collapse-tags
|
||||
collapse-tags-tooltip>
|
||||
<el-option v-for="item in field.options || []" :key="item.value ?? item" :label="item.label ?? item"
|
||||
:value="item.value ?? item" />
|
||||
</el-select>
|
||||
<el-date-picker clearable v-else-if="field.type === 'date'" v-model="formState[field.key]"
|
||||
class="control-date" type="date" :placeholder="field.placeholder || '请选择日期'" value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetime'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetime" :placeholder="field.placeholder || '请选择时间'"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'daterange'" v-model="formState[field.key]"
|
||||
class="control-date" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetimerange'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetimerange" range-separator="至" start-placeholder="开始时间"
|
||||
end-placeholder="结束时间" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<template v-else-if="field.type === 'department'">
|
||||
<MOSTY.Department clearable v-model="formState[field.key]" class="control-select" />
|
||||
</template>
|
||||
<div v-else-if="field.type === 'checkbox'" class=" checkbox-wrap">
|
||||
<el-checkbox v-model="formState[field.key]" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="query-action">
|
||||
<div>
|
||||
<slot name="but"></slot>
|
||||
</div>
|
||||
<div>
|
||||
<el-button size="small" type="primary" @click="handleSearch">{{ searchText }}</el-button>
|
||||
<el-button size="small" type="button" @click="handleReset">重置 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, reactive, watch } from 'vue'
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: '查询条件'
|
||||
},
|
||||
searchText: {
|
||||
type: String,
|
||||
default: '查询'
|
||||
},
|
||||
fields: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
searchArr: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['search', 'submit', 'reset'])
|
||||
const formState = reactive({})
|
||||
|
||||
const renderFields = computed(() => {
|
||||
const source = props.searchArr.length ? props.searchArr : props.fields
|
||||
return source.map((field) => ({
|
||||
...field,
|
||||
key: field.key || field.prop,
|
||||
type: field.type || field.showType || 'input'
|
||||
})).filter((field) => field.key)
|
||||
})
|
||||
|
||||
const getResetValue = (field) => {
|
||||
if (field.defaultVal !== undefined) {
|
||||
return Array.isArray(field.defaultVal) ? [...field.defaultVal] : field.defaultVal
|
||||
}
|
||||
if (field.type === 'checkbox') {
|
||||
return false
|
||||
}
|
||||
if (field.type === 'daterange' || field.type === 'datetimerange') {
|
||||
return []
|
||||
}
|
||||
if (field.type === 'select') {
|
||||
if (field.multiple) {
|
||||
return []
|
||||
}
|
||||
return null
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
const buildResetPayload = () => {
|
||||
const payload = {}
|
||||
renderFields.value.forEach((field) => {
|
||||
payload[field.key] = getResetValue(field)
|
||||
})
|
||||
return payload
|
||||
}
|
||||
|
||||
const setFormState = (value = {}) => {
|
||||
Object.keys(formState).forEach((key) => {
|
||||
delete formState[key]
|
||||
})
|
||||
renderFields.value.forEach((field) => {
|
||||
if (value[field.key] !== undefined) {
|
||||
formState[field.key] = Array.isArray(value[field.key]) ? [...value[field.key]] : value[field.key]
|
||||
return
|
||||
}
|
||||
formState[field.key] = getResetValue(field)
|
||||
})
|
||||
}
|
||||
|
||||
const getFormSnapshot = () => {
|
||||
const snapshot = {}
|
||||
renderFields.value.forEach((field) => {
|
||||
const value = formState[field.key]
|
||||
if (Array.isArray(value)) {
|
||||
snapshot[field.key] = [...value]
|
||||
return
|
||||
}
|
||||
snapshot[field.key] = value
|
||||
})
|
||||
return snapshot
|
||||
}
|
||||
|
||||
const handleSearch = () => {
|
||||
const payload = getFormSnapshot()
|
||||
emit('search', payload)
|
||||
emit('submit', payload)
|
||||
}
|
||||
|
||||
const handleReset = () => {
|
||||
const payload = buildResetPayload()
|
||||
setFormState(payload)
|
||||
emit('reset', true)
|
||||
emit('search', payload)
|
||||
emit('submit', payload)
|
||||
}
|
||||
|
||||
watch(
|
||||
renderFields,
|
||||
() => {
|
||||
setFormState(buildResetPayload())
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
defineExpose({
|
||||
formState,
|
||||
handleSearch,
|
||||
handleReset
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.query-wrap {
|
||||
border: 1px solid #b8d3ff;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.query-title {
|
||||
height: 32px;
|
||||
background: linear-gradient(to right, #9ed7ff, #e6f0f8);
|
||||
line-height: 32px;
|
||||
padding-left: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #0d2148;
|
||||
border-bottom: 1px solid #b8d3ff;
|
||||
}
|
||||
|
||||
.query-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.query-cell {
|
||||
display: flex;
|
||||
min-height: 40px;
|
||||
border-right: 1px solid #b8d3ff;
|
||||
border-bottom: 1px solid #b8d3ff;
|
||||
}
|
||||
|
||||
.query-cell:nth-child(4n) {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.cell-label {
|
||||
width: 130px;
|
||||
flex-shrink: 0;
|
||||
border-right: 1px solid #b8d3ff;
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cell-control {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 4px 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cell-control.is-checkbox {
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.control-input,
|
||||
.control-select,
|
||||
.control-date {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-input .el-input__wrapper),
|
||||
:deep(.control-select .el-select__wrapper),
|
||||
:deep(.control-date .el-input__wrapper) {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-height: 28px;
|
||||
border-radius: 0;
|
||||
box-shadow: 0 0 0 1px #b8d3ff inset;
|
||||
}
|
||||
|
||||
:deep(.control-date.el-date-editor) {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-date.el-date-editor .el-range-input) {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-input .el-input__inner),
|
||||
:deep(.control-select .el-select__placeholder),
|
||||
:deep(.control-date .el-input__inner) {
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
}
|
||||
|
||||
:deep(.control-date .el-range-input) {
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
}
|
||||
|
||||
:deep(.control-date .el-range__icon),
|
||||
:deep(.control-date .el-range__close-icon) {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.checkbox-wrap {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
:deep(.checkbox-wrap .el-checkbox) {
|
||||
margin-right: 0;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
:deep(.checkbox-wrap .el-checkbox__inner) {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.query-action {
|
||||
height: 36px;
|
||||
display: flex;
|
||||
// justify-content: flex-end;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
height: 26px;
|
||||
min-width: 70px;
|
||||
border: 1px solid #0f5bbd;
|
||||
background: #0f5bbd;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
170
src/views/backOfficeSystem/ces/components/WarnDataTable.vue
Normal file
170
src/views/backOfficeSystem/ces/components/WarnDataTable.vue
Normal file
@ -0,0 +1,170 @@
|
||||
<template>
|
||||
<section class="table-wrap">
|
||||
<div class="table-box">
|
||||
<el-table ref="tableRef" v-loading="loading" :data="data" :row-key="rowKey" border stripe class="warn-data-table"
|
||||
@selection-change="onSelectionChange" :height="height">
|
||||
<el-table-column v-if="selectionMode !== 'none'" type="selection" :width="selectionColumnWidth"
|
||||
:align="selectionColumnAlign" />
|
||||
<el-table-column v-for="column in columns" :key="column.prop || column.label || column.type" :prop="column.prop"
|
||||
:type="column.type" :label="column.label" :width="column.width" :min-width="column.minWidth"
|
||||
:align="column.align" :show-overflow-tooltip="true">
|
||||
<template v-if="column.slotName" #default="scope">
|
||||
<slot v-if="column.slotName" :name="column.slotName" :row="scope.row" :column="column"
|
||||
:$index="scope.$index">
|
||||
{{ column.prop ? scope.row[column.prop] : '' }}
|
||||
</slot>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
columns: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
selectionMode: {
|
||||
type: String,
|
||||
default: 'multiple'
|
||||
},
|
||||
rowKey: {
|
||||
type: [String, Function],
|
||||
default: 'id'
|
||||
},
|
||||
selectionColumnWidth: {
|
||||
type: Number,
|
||||
default: 38
|
||||
},
|
||||
selectionColumnAlign: {
|
||||
type: String,
|
||||
default: 'center'
|
||||
},
|
||||
toolbarActions: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
{ key: 'sign', text: '批量签收', red: true },
|
||||
{ key: 'export', text: '批量导出' },
|
||||
{ key: 'analysis', text: '批量分析' },
|
||||
{ key: 'count', text: '计算人数' }
|
||||
]
|
||||
},
|
||||
tableHeight: {
|
||||
type: [Number, String],
|
||||
default: '600px'
|
||||
},
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
const height = ref()
|
||||
watch(() => props.tableHeight, (newVal) => {
|
||||
if (newVal) {
|
||||
height.value = newVal
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['selection-change', 'row-change'])
|
||||
const tableRef = ref()
|
||||
|
||||
const onSelectionChange = (selection) => {
|
||||
if (props.selectionMode === 'single' && selection.length > 1) {
|
||||
const selectedRow = selection[selection.length - 1]
|
||||
tableRef.value.clearSelection()
|
||||
tableRef.value.toggleRowSelection(selectedRow, true)
|
||||
emit('selection-change', [selectedRow])
|
||||
emit('row-change', selectedRow)
|
||||
return
|
||||
}
|
||||
emit('selection-change', selection)
|
||||
emit('row-change', selection[0] || null)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.table-wrap {
|
||||
margin-top: 10px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
:deep(.el-table--fit) {
|
||||
position: static;
|
||||
// width: calc(100% - 20px) !important;
|
||||
height: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.tool-bar {
|
||||
height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
font-size: 14px;
|
||||
color: #1f56ab;
|
||||
}
|
||||
|
||||
.tool-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tool-link.red {
|
||||
color: #e51414;
|
||||
}
|
||||
|
||||
.table-box {
|
||||
border: 1px solid #b5ccf2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__inner-wrapper::before) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__header-wrapper th.el-table__cell) {
|
||||
background: #16263e !important;
|
||||
color: #fff !important;
|
||||
border-color: #b5ccf2;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__header-wrapper th.el-table__cell .cell) {
|
||||
text-align: center;
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
text-overflow: clip;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__body-wrapper td.el-table__cell) {
|
||||
border-color: #b5ccf2;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__cell) {
|
||||
font-size: 13px;
|
||||
color: #0f223f;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__cell .cell) {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table.el-table--border::after),
|
||||
:deep(.warn-data-table.el-table--group::after),
|
||||
:deep(.warn-data-table::before) {
|
||||
background-color: #b5ccf2;
|
||||
}
|
||||
</style>
|
||||
139
src/views/backOfficeSystem/ces/index.vue
Normal file
139
src/views/backOfficeSystem/ces/index.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="ces-page">
|
||||
<QueryFormPanel :fields="queryFields" @search="handleSearch" />
|
||||
<WarnDataTable :data="tableData" :columns="columns" :selection-mode="selectionMode" :loading="loading">
|
||||
<template #status="{ row }">
|
||||
<span class="status" :class="row.statusClass">{{ row.status }}</span>
|
||||
</template>
|
||||
<template #level="{ row }">
|
||||
<span class="level" :class="row.levelClass">{{ row.level }}</span>
|
||||
</template>
|
||||
<template #operation>
|
||||
<span class="operation">签收 详情 指派 报错 关注</span>
|
||||
</template>
|
||||
<template #timeout="{ row }">
|
||||
<span class="timeout">{{ row.timeout }}</span>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import QueryFormPanel from './components/QueryFormPanel.vue'
|
||||
import WarnDataTable from './components/WarnDataTable.vue'
|
||||
|
||||
const selectionMode = ref('multiple')
|
||||
const loading = ref(false)
|
||||
const lastQueryParams = ref({})
|
||||
|
||||
const handleSearch = (params) => {
|
||||
lastQueryParams.value = params
|
||||
}
|
||||
|
||||
const queryFields = [
|
||||
{ key: 'warnDate', label: '预警时间', type: 'input', placeholder: '年 / 月 / 日' },
|
||||
{ key: 'warnLevel', label: '预警级别', type: 'select', options: ['全部', '红色', '橙色', '黄色', '蓝色'] },
|
||||
{ key: 'receiveUnit', label: '接收单位', type: 'input' },
|
||||
{ key: 'relatedWarn', label: '关联预警', type: 'checkbox' },
|
||||
{ key: 'name', label: '姓名(精确、模糊)', type: 'input' },
|
||||
{ key: 'gender', label: '性别', type: 'select', options: ['全部', '男', '女'] },
|
||||
{ key: 'timeout', label: '超时状态', type: 'select', options: ['全部', '超时签收', '超时反馈'] },
|
||||
{ key: 'personType', label: '人员类别', type: 'select', options: ['全部', '刑事前科类', '在逃人员', '重点关注'] },
|
||||
{ key: 'focus', label: '重点关注', type: 'checkbox' },
|
||||
{ key: 'secondDispatch', label: '二次指派', type: 'checkbox' },
|
||||
{ key: 'idCard', label: '身份证号码(精确、模糊)', type: 'input' },
|
||||
{ key: 'age', label: '年龄', type: 'input' },
|
||||
{ key: 'warnCount', label: '预警次数', type: 'input' },
|
||||
{ key: 'personLevel', label: '人员级别', type: 'select', options: ['全部', '一级', '二级', '三级'] },
|
||||
{ key: 'traceType', label: '轨迹类别', type: 'select', options: ['全部', '人校核查', '轨迹追踪'] },
|
||||
{ key: 'activePlace', label: '活动发生地模糊查询', type: 'input' },
|
||||
{ key: 'groupType', label: '人员组类模糊查询', type: 'input' }
|
||||
]
|
||||
|
||||
const columns = [
|
||||
{ type: 'index', label: '序号', width: 60, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'time', label: '预警时间', width: 150 },
|
||||
{ prop: 'name', label: '人员姓名', width: 80 },
|
||||
{ prop: 'idCard', label: '身份证号', width: 158 },
|
||||
{ prop: 'gender', label: '性别', width: 56, align: 'center' },
|
||||
{ prop: 'age', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'level' },
|
||||
{ prop: 'category', label: '人员类别', width: 108 },
|
||||
{ prop: 'group', label: '人员组类', width: 92 },
|
||||
{ prop: 'trace', label: '轨迹类别', width: 92 },
|
||||
{ prop: 'place', label: '活动发生地', minWidth: 130 },
|
||||
{ prop: 'unit', label: '接收单位', width: 100 },
|
||||
{ prop: 'count', label: '预警次数', width: 80, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'timeout' }
|
||||
]
|
||||
|
||||
const tableData = [
|
||||
{ id: 1, status: '未签收', statusClass: 'danger', time: '2026-03-10 14:23:05', name: '张三', idCard: '513701199606095613', gender: '男', age: 30, level: '蓝色', levelClass: 'blue', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站出口', unit: '波密县公安局', count: 13, timeout: '' },
|
||||
{ id: 2, status: '已签收', statusClass: 'ok', time: '2026-03-10 13:15:30', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 31, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 14, timeout: '超时签收' },
|
||||
{ id: 3, status: '已签收', statusClass: 'ok', time: '2026-03-10 12:08:45', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 32, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 15, timeout: '' },
|
||||
{ id: 4, status: '已反馈', statusClass: 'ok', time: '2026-03-10 11:42:18', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 33, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 16, timeout: '' },
|
||||
{ id: 5, status: '未签收', statusClass: 'danger', time: '2026-03-09 16:30:22', name: '李明', idCard: '510105199203156789', gender: '男', age: 34, level: '橙色', levelClass: 'orange', category: '刑事前科类', group: '诈骗案', trace: '轨迹追踪', place: '成都市武侯区人民南路', unit: '武侯区公安局', count: 8, timeout: '超时签收' },
|
||||
{ id: 6, status: '已签收', statusClass: 'ok', time: '2026-03-09 15:20:11', name: '王丽', idCard: '320106198807234561', gender: '女', age: 38, level: '黄色', levelClass: 'yellow', category: '重点关注', group: '涉毒人员', trace: '人校核查', place: '南京市鼓楼区中央路', unit: '鼓楼区公安局', count: 5, timeout: '' },
|
||||
{ id: 7, status: '未签收', statusClass: 'danger', time: '2026-03-09 10:05:33', name: '赵强', idCard: '440101199505189012', gender: '男', age: 31, level: '红色', levelClass: 'red', category: '在逃人员', group: '抢劫案', trace: '轨迹追踪', place: '广州市荔湾区芳村大道', unit: '荔湾区公安局', count: 22, timeout: '超时签收' },
|
||||
{ id: 8, status: '已反馈', statusClass: 'ok', time: '2026-03-08 22:18:44', name: '陈静', idCard: '350102199108267890', gender: '女', age: 35, level: '蓝色', levelClass: 'blue', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '福州市鼓楼区东街口', unit: '鼓楼区公安局', count: 3, timeout: '' },
|
||||
{ id: 9, status: '已签收', statusClass: 'ok', time: '2026-03-08 18:45:09', name: '孙伟', idCard: '210102199307123456', gender: '男', age: 33, level: '橙色', levelClass: 'orange', category: '重点关注', group: '逃犯人员', trace: '轨迹追踪', place: '沈阳市和平区太原街', unit: '和平区公安局', count: 11, timeout: '' },
|
||||
{ id: 10, status: '未签收', statusClass: 'danger', time: '2026-03-08 09:30:56', name: '周芳', idCard: '420106199612085678', gender: '女', age: 30, level: '黄色', levelClass: 'yellow', category: '刑事前科类', group: '故意伤害', trace: '人校核查', place: '武汉市武昌区中南路', unit: '武昌区公安局', count: 7, timeout: '' }
|
||||
]
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.ces-page {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.status {
|
||||
color: #0f5bbd;
|
||||
}
|
||||
|
||||
.status.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.status.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
|
||||
.level {
|
||||
display: inline-block;
|
||||
min-width: 42px;
|
||||
line-height: 1.2;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
padding: 2px 6px;
|
||||
}
|
||||
|
||||
.level.red {
|
||||
background: #e11212;
|
||||
}
|
||||
|
||||
.level.orange {
|
||||
background: #f39a14;
|
||||
}
|
||||
|
||||
.level.yellow {
|
||||
background: #d9bb17;
|
||||
}
|
||||
|
||||
.level.blue {
|
||||
background: #1b76eb;
|
||||
}
|
||||
|
||||
.operation {
|
||||
color: #1b59bf;
|
||||
}
|
||||
|
||||
.timeout {
|
||||
color: #ff1f1f;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
@ -2,19 +2,22 @@
|
||||
<div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button v-for="(item,index) in butList" :key="index" :type="qh == item ? 'primary' : 'default'" @click="qh = item" size="small">{{item}}</el-button>
|
||||
<el-button v-for="(item, index) in butList" :key="index" :type="qh == item ? 'primary' : 'default'"
|
||||
@click="qh = item" size="small">{{ item }}</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<FouColorWarning v-if="qh=='预警整合'" />
|
||||
<SevenWarning v-if="qh=='七类重点'" />
|
||||
<PortraitWarning v-if="qh=='人像预警'" />
|
||||
<VehicleWarning v-if="qh=='车辆预警'" />
|
||||
<ControlWarning v-if="qh=='布控预警'" />
|
||||
<RegionalControl v-if="qh=='区域预警'" />
|
||||
<WrjWarning v-if="qh=='无人机预警'" />
|
||||
<IdentityWarning v-if="qh=='身份预警'" />
|
||||
<BehaviorWarning v-if="qh=='行为预警'" />
|
||||
<CombinedWarning v-if="qh=='组合预警'" />
|
||||
<FouColorWarning v-if="qh == '预警整合'" />
|
||||
<SevenWarning v-if="qh == '七类重点'" />
|
||||
<PortraitWarning v-if="qh == '人像预警'" />
|
||||
<VehicleWarning v-if="qh == '车辆预警'" />
|
||||
<ControlWarning v-if="qh == '布控预警'" />
|
||||
<RegionalControl v-if="qh == '区域预警'" />
|
||||
<WrjWarning v-if="qh == '无人机预警'" />
|
||||
<PoliticalSecurityWarning v-if="qh == '政保预警'" />
|
||||
<IdentityWarning v-if="qh == '身份预警'" />
|
||||
<BehaviorWarning v-if="qh == '行为预警'" />
|
||||
<CombinedWarning v-if="qh == '组合预警'" />
|
||||
<!-- <Cs v-if="qh == '测试'" /> -->
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
@ -30,23 +33,30 @@ import VehicleWarning from "@/views/backOfficeSystem/fourColorManage/warningList
|
||||
import ControlWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/controlWarning/index.vue"
|
||||
import RegionalControl from "@/views/backOfficeSystem/fourColorManage/warningControl/regionalControl/index.vue"
|
||||
import WrjWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/wrjWarning/index.vue"
|
||||
import PoliticalSecurityWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/politicalSecurity/index.vue"
|
||||
|
||||
import Cs from '@/views/backOfficeSystem/ces/index.vue'
|
||||
import { onMounted, ref } from "vue";
|
||||
const butList=ref(["预警整合","七类重点","人像预警","车辆预警","布控预警","区域预警","无人机预警",])
|
||||
|
||||
const butList = ref(["七类重点", '政保预警', "人像预警", "车辆预警", "布控预警", "区域预警", "无人机预警", "预警整合",])
|
||||
const qh = ref('预警整合')
|
||||
const hasPermissin = ref(false)
|
||||
onMounted(() => {
|
||||
// rolCode : 市情指领导(JS_666666)、市情指权限(JS_777777)、县情指权限(JS_888888)、县情指领导权限(JS_999999);
|
||||
// depCode : 市情指领导(513030199509084123 )、市情指(340827200404141028)、县情指领导(540421196805217650)、朗县公安局指挥中心(县情指)(540422200010197030)、朗县公安局县城派出所(部门)(513425199305205211)
|
||||
let rolCode = ['JS_666666','JS_777777','JS_888888','JS_999999']
|
||||
let depCode = ['513030199509084123','340827200404141028','540421196805217650','540422200010197030','513425199305205211']
|
||||
let rolCode = ['JS_666666', 'JS_777777', 'JS_888888', 'JS_999999']
|
||||
let depCode = ['513030199509084123', '340827200404141028', '540421196805217650', '540422200010197030', '513425199305205211']
|
||||
let roleData = getItem('roleList');
|
||||
let deptData = getItem('deptId');
|
||||
roleData.forEach(item => {
|
||||
if(rolCode.includes(item.roleCode)) hasPermissin.value = true
|
||||
if (rolCode.includes(item.roleCode)) hasPermissin.value = true
|
||||
})
|
||||
deptData.forEach(item => {
|
||||
if(depCode.includes(item.deptCode)) hasPermissin.value = true
|
||||
if (depCode.includes(item.deptCode)) hasPermissin.value = true
|
||||
})
|
||||
if(hasPermissin.value) butList.value = [...butList.value,...["身份预警","行为预警","组合预警"]]
|
||||
if (hasPermissin.value) {
|
||||
const data = butList.value.filter(item => item !== "预警整合")
|
||||
butList.value = [...data, ...["身份预警", "行为预警", "组合预警", "预警整合"]]
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -1,324 +0,0 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">组合标签管理{{ title }} </span>
|
||||
<div>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:loading="loading"
|
||||
@click="submit"
|
||||
>保存</el-button
|
||||
>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage
|
||||
v-model="listQuery"
|
||||
:formList="formData"
|
||||
ref="elform"
|
||||
:rules="rules"
|
||||
>
|
||||
<!-- 身份标签细类 -->
|
||||
<template #sfbqIdList>
|
||||
<el-button @click="openDialog('01')">选择</el-button>
|
||||
<div class="boxlist">
|
||||
<MyTable
|
||||
:tableData="tableDate.sfbqIdList"
|
||||
:tableColumn="tableDate.tableColumn"
|
||||
:tableHeight="tableDate.tableHeight"
|
||||
:key="tableDate.keyCount"
|
||||
:tableConfiger="tableDate.tableConfiger"
|
||||
:controlsWidth="tableDate.controlsWidth"
|
||||
>
|
||||
<template #bqLx="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLx"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LX"
|
||||
/>
|
||||
</template>
|
||||
<template #bqLb="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLb"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LB"
|
||||
/>
|
||||
</template>
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqYs"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_SSYJ"
|
||||
/>
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag
|
||||
:tag="false"
|
||||
:value="row.bqDj"
|
||||
:options="props.dic.D_GS_BQ_DJ"
|
||||
/>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link
|
||||
type="danger"
|
||||
@click="delDictItem(row.id, '身份标签细类')"
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 行为标签细类 -->
|
||||
<template #xwbqIdList>
|
||||
<el-button @click="openDialog('02')">选择</el-button>
|
||||
<div class="boxlist">
|
||||
<MyTable
|
||||
:tableData="tableDate.xwbqIdList"
|
||||
:tableColumn="tableDate.tableColumn"
|
||||
:tableHeight="tableDate.tableHeight"
|
||||
:key="tableDate.keyCount"
|
||||
:tableConfiger="tableDate.tableConfiger"
|
||||
:controlsWidth="tableDate.controlsWidth"
|
||||
>
|
||||
<template #bqLx="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLx"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LX"
|
||||
/>
|
||||
</template>
|
||||
<template #bqLb="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLb"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LB"
|
||||
/>
|
||||
</template>
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqYs"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_SSYJ"
|
||||
/>
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag
|
||||
:tag="false"
|
||||
:value="row.bqDj"
|
||||
:options="props.dic.D_GS_BQ_DJ"
|
||||
/>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link
|
||||
type="danger"
|
||||
@click="delDictItem(row.id, '行为标签细类')"
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
<!-- 列表弹窗 -->
|
||||
<DialogList
|
||||
:Single="false"
|
||||
:roleIds="roleIds"
|
||||
v-if="chooseShow"
|
||||
:dic="props.dic"
|
||||
@chooseDate="chooseDate"
|
||||
:titleValue="chooseTitle"
|
||||
v-model="chooseShow"
|
||||
:bqLx="chooseType"
|
||||
bqDl="02"
|
||||
></DialogList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import DialogList from "@/views/backOfficeSystem/fourColorManage/components/dialogList.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import {
|
||||
ref,
|
||||
defineExpose,
|
||||
defineProps,
|
||||
reactive,
|
||||
defineEmits,
|
||||
getCurrentInstance
|
||||
} from "vue";
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const roleIds = ref([]); //角色id
|
||||
const chooseType = ref("01"); //选择弹窗类型
|
||||
const chooseShow = ref(false); //选择弹窗
|
||||
const chooseTitle = ref(""); //选择弹窗
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = reactive([
|
||||
{ label: "组合标签名称", prop: "bqMc", type: "input" },
|
||||
{ label: "组合标签代码", prop: "bqDm", type: "input" },
|
||||
// {
|
||||
// label: "标签等级",
|
||||
// prop: "bqDj",
|
||||
// type: "select",
|
||||
// options: props.dic.D_GS_BQ_DJ
|
||||
// },
|
||||
{
|
||||
label: "标签颜色",
|
||||
prop: "bqYs",
|
||||
type: "select",
|
||||
options: props.dic.D_GS_SSYJ
|
||||
},
|
||||
{ label: "组合标签分值", prop: "bqFz", type: "input" },
|
||||
{ label: "组合标签说明", prop: "bqSm", type: "input" },
|
||||
{ label: "身份标签细类", prop: "sfbqIdList", type: "slot", width: "100%" },
|
||||
{ label: "行为标签细类", prop: "xwbqIdList", type: "slot", width: "100%" }
|
||||
]);
|
||||
const rules = reactive({
|
||||
bqMc: [{ required: true, message: "请输入组合标签名称", trigger: "blur" }],
|
||||
bqDm: [{ required: true, message: "请输入组合标签代码", trigger: "blur" }],
|
||||
zhbqjf: [{ required: true, message: "请输入组合标签积分", trigger: "blur" }],
|
||||
sfbqIdList: [
|
||||
{ required: true, message: "请选择身份标签细类", trigger: "change" }
|
||||
],
|
||||
xwbqIdList: [
|
||||
{ required: true, message: "请选择行为标签细类", trigger: "change" }
|
||||
]
|
||||
});
|
||||
|
||||
const tableDate = reactive({
|
||||
sfbqIdList: [], //表格数据
|
||||
xwbqIdList: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
tableHeight: 225,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 90, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "标签名称", prop: "bqMc", showOverflowTooltip: true },
|
||||
{ label: "标签代码", prop: "bqDm" },
|
||||
{ label: "标签大类名称", prop: "bqDlMc" },
|
||||
{ label: "标签类型", prop: "bqLx", showSolt: true },
|
||||
{ label: "标签类别", prop: "bqLb", showSolt: true },
|
||||
{ label: "标签颜色", prop: "bqYs", showSolt: true },
|
||||
{ label: "标签等级", prop: "bqDj", showSolt: true }
|
||||
]
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" : "编辑";
|
||||
if (row) getDataById(row.id);
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
qcckGet({}, "/mosty-gsxt/tbGsxtBqzh/selectVoById/" + id).then((res) => {
|
||||
listQuery.value = res;
|
||||
tableDate.sfbqIdList = res.sfbqList;
|
||||
listQuery.value.sfbqIdList = res.sfbqList.map((item) => item.id);
|
||||
tableDate.xwbqIdList = res.xwbqList;
|
||||
listQuery.value.xwbqIdList = res.xwbqList.map((item) => item.id);
|
||||
tableDate.keyCount++;
|
||||
});
|
||||
};
|
||||
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit((data) => {
|
||||
let url =
|
||||
title.value == "新增"
|
||||
? "/mosty-gsxt/tbGsxtBqzh/save"
|
||||
: "/mosty-gsxt/tbGsxtBqzh/update";
|
||||
let params = { ...data };
|
||||
loading.value = true;
|
||||
qcckPost(params, url)
|
||||
.then((res) => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("updateDate");
|
||||
loading.value = false;
|
||||
close();
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
// 打开弹窗
|
||||
const openDialog = (type) => {
|
||||
chooseShow.value = true;
|
||||
chooseType.value = type;
|
||||
chooseTitle.value = type == "01" ? "选择身份标签细类" : "选择行为标签细类";
|
||||
roleIds.value =
|
||||
type == "01"
|
||||
? tableDate.sfbqIdList.map((item) => item.id)
|
||||
: tableDate.xwbqIdList.map((item) => item.id);
|
||||
};
|
||||
// 选择数据
|
||||
const chooseDate = (data) => {
|
||||
if (chooseType.value == "01") {
|
||||
tableDate.sfbqIdList = data;
|
||||
listQuery.value.sfbqIdList = tableDate.sfbqIdList.map((item) => item.id);
|
||||
} else {
|
||||
tableDate.xwbqIdList = data;
|
||||
listQuery.value.xwbqIdList = tableDate.xwbqIdList.map((item) => item.id);
|
||||
}
|
||||
};
|
||||
|
||||
// 删除
|
||||
const delDictItem = (id, type) => {
|
||||
switch (type) {
|
||||
case "身份标签细类":
|
||||
tableDate.sfbqIdList = tableDate.sfbqIdList.filter(
|
||||
(item) => item.id !== id
|
||||
);
|
||||
listQuery.value.sfbqIdList = tableDate.sfbqIdList.map((item) => item.id);
|
||||
break;
|
||||
case "行为标签细类":
|
||||
tableDate.xwbqIdList = tableDate.xwbqIdList.filter(
|
||||
(item) => item.id !== id
|
||||
);
|
||||
listQuery.value.xwbqIdList = tableDate.xwbqIdList.map((item) => item.id);
|
||||
break;
|
||||
}
|
||||
};
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
tableDate.sfbqIdList = [];
|
||||
tableDate.xwbqIdList = [];
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
.boxlist {
|
||||
width: 99%;
|
||||
height: 225px;
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
@ -1,178 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<!-- <el-button>
|
||||
<span style="vertical-align: middle">调级</span>
|
||||
</el-button>
|
||||
<el-button>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button>
|
||||
<el-button>
|
||||
<span style="vertical-align: middle">导入</span>
|
||||
</el-button> -->
|
||||
<el-button size="small" type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 编辑详情 -->
|
||||
<EditAddForm v-if="show" ref="detailDiloag" :dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
|
||||
@updateDate="getList" />
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/tbGsxtBqzh/sjxspz" :roleIds="roleIds"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import EditAddForm from "./components/editAddForm.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { tbGsxtBqzhId } from "@/api/yj.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB, D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ", "D_GS_BQ_LB", "D_GS_BQ_LX"); //获取字典数据
|
||||
const detailDiloag = ref();
|
||||
const show = ref(false)
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "组合标签名称", prop: 'bqMc', placeholder: "请输入组合标签名称", showType: "input" },
|
||||
// { label: "组合标签标签等级", prop: 'bqDj', placeholder: "请选择组合标签标签等级", showType: "select",options: D_GS_BQ_DJ },
|
||||
{ label: "组合标签颜色", prop: 'bqYs', placeholder: "请选择组合标签标签颜色", showType: "select", options: D_GS_SSYJ },
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "组合标签名称", prop: "bqMc" },
|
||||
{ label: "标签代码", prop: "bqDm" },
|
||||
// { label: "组合标签等级", prop: "bqDj",showSolt:true },
|
||||
{ label: "组合标签颜色", prop: "bqYs", showSolt: true },
|
||||
{ label: "组合标签分值", prop: "bqFz" },
|
||||
{ label: "组合标签说明", prop: "bqSm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
qcckGet(queryFrom.value, '/mosty-gsxt/tbGsxtBqzh/selectPage').then((res) => {
|
||||
pageData.tableData = res.records;
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 删除
|
||||
const delDictItem = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete({}, '/mosty-gsxt/tbGsxtBqzh/' + id).then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addEdit = (type, row) => {
|
||||
show.value = true;
|
||||
nextTick(() => {
|
||||
detailDiloag.value.init(type, row,);
|
||||
})
|
||||
};
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
tbGsxtBqzhId(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,415 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xwcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xwfz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%">
|
||||
<Items :row="props" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs ">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<Detail ref="detailRef"></Detail>
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="02" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<!-- 详情 -->
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"></AddFrom>
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import * as XLSX from "xlsx";
|
||||
import Detail from './components/detail.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import {yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
||||
import AddFrom from './components/addFrom.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
const czjyRef = ref()
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB,D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB',"D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT
|
||||
})
|
||||
const searchBox = ref(); //搜索框
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "电话号码", prop: 'dh', placeholder: "请输入电话号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'xwms', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const detailRef = ref()
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "xwms" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true,width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqglSelectList({ bqLx: '02', bqlb: val, bqDlId: '241cc7b69a50428287cc79445e310180' }).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.id
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
gettbGsxtBqglSelectList('02')
|
||||
|
||||
});
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init( row)
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value,...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
qcckGet(promes, '/mosty-gsxt/yjzxXwyj/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return { ...item }
|
||||
}) || [];
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
|
||||
const exportExcel = () => {
|
||||
if (pageData.tableData.length === 0) return ElMessage({ message: "暂无数据", type: "warning" });
|
||||
const headers = pageData.tableColumn.map(item => item.label);
|
||||
const data = pageData.tableData.map(item => {
|
||||
return [item.xm, item.sfzh, item.dh, item.xldlmc, item.xwzlmc, item.xwms, item.xwcs, item.xwfz];
|
||||
});
|
||||
const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data]);
|
||||
const workbook = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1");
|
||||
XLSX.writeFile(workbook, "行为预警.xlsx");
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') { // 红
|
||||
return '#ff0202'
|
||||
} else if (val == '02') { // 橙
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') { // 黄
|
||||
return '#c2c203' // 原亮黄色:ffff00
|
||||
} else if (val == '04') { // 蓝
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxXwyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
yjzxXwyjSelectList(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
|
||||
window.onresize = function() {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/** 触发选中 */
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
xwms: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '行为预警')
|
||||
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
/** 方便查看对应的颜色, */
|
||||
.test-top-color {
|
||||
color: #ff0202;
|
||||
background-color: #ff8c00;
|
||||
border-color: #c2c203;
|
||||
outline-color: #0000ff;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -10,24 +10,24 @@
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<div class="bgTable" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #xwcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" :tag="false" color="#fff" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
@ -35,25 +35,19 @@
|
||||
<template #xwfz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%">
|
||||
<Items :row="props" :dict="dict" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddModel(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs ">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -65,33 +59,26 @@
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="02" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<!-- 详情 -->
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"></AddFrom>
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import * as XLSX from "xlsx";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import Detail from './components/detail.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import {yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import { yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
@ -100,16 +87,17 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddFrom from './components/addFrom.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const czjyRef = ref()
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB,D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB',"D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
const { D_BZ_YJJB, D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB', "D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
@ -125,17 +113,18 @@ const bqLbData = ref({
|
||||
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "电话号码", prop: 'dh', placeholder: "请输入电话号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'xwms', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: "姓名", placeholder: "请输入姓名", type: "input" },
|
||||
{ key: 'sfzh', label: "身份证号码", placeholder: "请输入身份证号码", type: "input" },
|
||||
{ key: 'dh', label: "电话号码", placeholder: "请输入电话号码", type: "input" },
|
||||
{ key: 'xwms', label: "预警标签", placeholder: "请输入预警标签", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", placeholder: "请选择部门", type: "department" },
|
||||
{ key: 'bqys', label: "级别", placeholder: "请选择级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'jfd', label: "积分段", placeholder: "请选择积分段", type: "Slot" },
|
||||
{ key: 'startTime', label: "预警时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const detailRef = ref()
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -153,14 +142,16 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "xwms" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "状态", slotName: "czzt", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "姓名", prop: "xm", width: 100 },
|
||||
{ label: "身份证号", prop: "sfzh", width: 170 },
|
||||
{ label: "标签", prop: "xwms", width: 120 },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true,width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz",showSolt: true },
|
||||
{ label: "活动频次", slotName: "xwcs", width: 90, align: 'center' },
|
||||
{ label: "预警分值", slotName: "xwfz", width: 230 },
|
||||
{ label: '操作', width: 300, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -178,11 +169,11 @@ const gettbGsxtBqglSelectList = (val) => {
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
@ -193,14 +184,14 @@ onMounted(() => {
|
||||
});
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init( row)
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value,...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -223,7 +214,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
delete promes.startTime;
|
||||
qcckGet(promes, '/mosty-gsxt/yjzxXwyj/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
@ -238,34 +229,11 @@ const getList = () => {
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
|
||||
const exportExcel = () => {
|
||||
if (pageData.tableData.length === 0) return ElMessage({ message: "暂无数据", type: "warning" });
|
||||
const headers = pageData.tableColumn.map(item => item.label);
|
||||
const data = pageData.tableData.map(item => {
|
||||
return [item.xm, item.sfzh, item.dh, item.xldlmc, item.xwzlmc, item.xwms, item.xwcs, item.xwfz];
|
||||
});
|
||||
const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data]);
|
||||
const workbook = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1");
|
||||
XLSX.writeFile(workbook, "行为预警.xlsx");
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') { // 红
|
||||
return '#ff0202'
|
||||
} else if (val == '02') { // 橙
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') { // 黄
|
||||
return '#c2c203' // 原亮黄色:ffff00
|
||||
} else if (val == '04') { // 蓝
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
@ -274,10 +242,6 @@ const pushAssess = (val) => {
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
@ -327,20 +291,20 @@ const openAddModel = (row) => {
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
chooseJfBh.value = val.id
|
||||
yjzxXwyjSelectList(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function() {
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
@ -375,14 +339,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -393,7 +357,7 @@ const handleQs = () => {
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
@ -406,10 +370,13 @@ const handleQs = () => {
|
||||
outline-color: #0000ff;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,387 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div>
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="04" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT
|
||||
})
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [{ sfcs: 1 }],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 300,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width:'90' },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList();
|
||||
gettbGsxtBqglSelectList()
|
||||
});
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的组合预警API接口
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
|
||||
tbYjxxGetZbtj(promes).then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqzhSelectList({}).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
const assessShow = ref(false)
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxZhyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '组合预警')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -11,24 +11,24 @@
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<div class=" tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" :tag="false" color="#fff" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
@ -36,26 +36,20 @@
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div>
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddModel(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -79,12 +73,10 @@
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
@ -92,12 +84,13 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
@ -114,15 +107,16 @@ import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: "姓名", placeholder: "请输入姓名", type: "input" },
|
||||
{ key: 'sfzh', label: "身份证号码", placeholder: "请输入身份证号码", type: "input" },
|
||||
{ key: 'yjbqmc', label: "预警标签", placeholder: "请输入预警标签", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", placeholder: "请选择部门", type: "department" },
|
||||
{ key: 'bqys', label: "级别", placeholder: "请选择级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'jfd', label: "积分段", placeholder: "请选择积分段", type: "Slot" },
|
||||
{ key: 'startTime', label: "预警时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
@ -142,14 +136,16 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 300,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "状态", slotName: "czzt", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "姓名", prop: "xm", width: 100 },
|
||||
{ label: "身份证号", prop: "sfzh", width: 170 },
|
||||
{ label: "标签", prop: "yjbqmc", width: 120 },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width:'90' },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ label: "活动频次", slotName: "sfcs", width: 90, align: 'center' },
|
||||
{ label: "预警分值", slotName: "sffz", width: 230 },
|
||||
{ label: '操作', width: 300, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -175,8 +171,8 @@ const handleCzjy = (row) => {
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
@ -204,7 +200,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
delete promes.startTime;
|
||||
|
||||
tbYjxxGetZbtj(promes).then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
@ -214,17 +210,6 @@ const getList = () => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
@ -321,7 +306,7 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
@ -356,14 +341,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -380,8 +365,6 @@ const handleQs = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,403 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sex="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 2) }} </span>
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB,D_GS_BK_CZYQ } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB','D_GS_BK_CZYQ'
|
||||
|
||||
)
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
// { label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'yjJb', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
// { label: "布控时间", prop: 'startTime', placeholder: "请选择布控时间", showType: "datetimerange" },
|
||||
]);
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" , width: 50},
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "sex", showSolt: true , width: 50},
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true , width: 50},
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true , width: 50},
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true , width: 50},
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...queryFrom.value, ...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : '',
|
||||
yjJb: val.yjJb?.join(',') || '',
|
||||
sfglyj: val.sfglyj?.join(',') || '',
|
||||
sfgz: val.sfgz?.join(',') || '',
|
||||
sfzp: val.sfzp?.join(',') || ''
|
||||
};
|
||||
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let params = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
qcckPost(params, '/mosty-gsxt/tbYjxx/getBdbkPageList').then((res) => {
|
||||
pageData.tableData = res?.records || []
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val?.yjLx, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
switch (val) {
|
||||
case '01':
|
||||
return '#ff0202'
|
||||
case '02':
|
||||
return '#ff8c00'
|
||||
case '03':
|
||||
return '#ffff00'
|
||||
case '04':
|
||||
return '#0000ff'
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
const openAddFrom = (row) => {
|
||||
addModelRef.value.init('add', row)
|
||||
}
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 指派
|
||||
const dataList = ref(null)
|
||||
const warningShow = ref(false)
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_GS_SSYJ),
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '预警布控')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref({})
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
dataPres.value = val
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,30 +2,18 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -41,40 +29,48 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sex="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 2) }} </span>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_SJLY" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -87,16 +83,16 @@
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
@ -112,9 +108,7 @@ import Pagination from "./components/particulars.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB,D_GS_BK_CZYQ } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB','D_GS_BK_CZYQ'
|
||||
|
||||
)
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ, D_BZ_SJLY } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB', 'D_GS_BK_CZYQ', 'D_BZ_SJLY')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
@ -127,9 +121,9 @@ const searchConfiger = ref([
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
@ -140,13 +134,7 @@ const searchConfiger = ref([
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
// { label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'yjJb', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
// { label: "布控时间", prop: 'startTime', placeholder: "请选择布控时间", showType: "datetimerange" },
|
||||
|
||||
]);
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
@ -172,25 +160,27 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" , width: 50},
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "sex", showSolt: true , width: 50},
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true , width: 50},
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true , width: 50},
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true , width: 50},
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 70 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80 },
|
||||
{ label: '性别', width: 50, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 50, align: 'center' },
|
||||
{ label: '预警级别', width: 80, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
|
||||
@ -303,7 +293,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
@ -389,10 +379,9 @@ const openBox = (val) => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
expand :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjtp="{ row }">
|
||||
<div v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
<el-image preview-teleported v-else @click.stop style="width: 30px; height: 40px" :src="row.yjtp"
|
||||
:preview-src-list="[row.yjtp]" show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #yjjb="{ row }">
|
||||
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjlb="{ row }">
|
||||
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddModel(row)">详情</el-link> -->
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Items from "./item/items.vue"
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB, D_BZ_YJLX,D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB","D_BZ_YJLX",'D_BZ_YJLY'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警级别", prop: 'yjjbList', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "来源类型", prop: 'yjlxList', placeholder: "请选择来源类型", showType: "select", options: D_BZ_YJLY,multiple:true },
|
||||
{ label: "身份证号", prop: 'rysfzh', placeholder: "请输入身份证", showType: "input",},
|
||||
{ label: "部门", prop: 'ssbmdm', showType: "department"},
|
||||
{ label: "时间", prop: 'timeRange', showType: "datetimerange"},
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 100, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjtp", showSolt: true, width: 100 },
|
||||
{ label: "预警标签", prop: "yjbq", width: 120 },
|
||||
{ label: "预警地址", prop: "yjdz" },
|
||||
{ label: "预警级别", prop: "yjjb", showSolt: true, width: 85 },
|
||||
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
||||
{ label: "来源类型", prop: "yjLylx", showSolt: true,width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "姓名", prop: "ryxm",width: 100 },
|
||||
{ label: "身份证号", prop: "rysfzh", width: 170 },
|
||||
{ label: "车牌号", prop: "cph" ,width: 100},
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
queryFrom.value.startTime = val.timeRange ? val.timeRange[0] : ''
|
||||
queryFrom.value.endTime = val.timeRange ? val.timeRange[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.timeRange;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageAllList').then((res) => {
|
||||
console.log(res);
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjtp: item.yjlx == '01' ? item.yjtp.replace(ORDIMG, IMGYM) : item.yjtp
|
||||
}
|
||||
}) || [];
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffd325'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val?.yjlb, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 240;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
|
||||
}
|
||||
</style>
|
||||
@ -1,24 +1,19 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' />
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
expand :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<div class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table">
|
||||
<template #yjtp="{ row }">
|
||||
<div v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<template v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
</template>
|
||||
<el-image preview-teleported v-else @click.stop style="width: 30px; height: 40px" :src="row.yjtp"
|
||||
:preview-src-list="[row.yjtp]" show-progress>
|
||||
<template #error>
|
||||
@ -31,7 +26,9 @@
|
||||
</template>
|
||||
|
||||
<template #yjjb="{ row }">
|
||||
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" />
|
||||
<div :style="{ 'background-color': bqYs(row.yjjb) }">
|
||||
<DictTag :value="row.yjjb" :tag="false" color="#fff" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
@ -39,16 +36,12 @@
|
||||
<template #yjlb="{ row }">
|
||||
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddModel(row)">详情</el-link> -->
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -60,26 +53,27 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Items from "./item/items.vue"
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB, D_BZ_YJLX,D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB","D_BZ_YJLX",'D_BZ_YJLY'); //获取字典数据
|
||||
const { D_BZ_YJJB, D_BZ_YJLX, D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB", "D_BZ_YJLX", 'D_BZ_YJLY'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警级别", prop: 'yjjbList', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "来源类型", prop: 'yjlxList', placeholder: "请选择来源类型", showType: "select", options: D_BZ_YJLY,multiple:true },
|
||||
{ label: "身份证号", prop: 'rysfzh', placeholder: "请输入身份证", showType: "input",},
|
||||
{ label: "部门", prop: 'ssbmdm', showType: "department"},
|
||||
{ label: "时间", prop: 'timeRange', showType: "datetimerange"},
|
||||
{ key: 'yjjbList', label: "预警级别", placeholder: "请选择预警级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'yjlxList', label: "来源类型", placeholder: "请选择来源类型", type: "select", options: D_BZ_YJLY, multiple: true },
|
||||
{ key: 'rysfzh', label: "身份证号", placeholder: "请输入身份证", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", type: "department" },
|
||||
{ key: 'startTime', label: "时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -97,17 +91,19 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 100, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjtp", showSolt: true, width: 100 },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "预警图片", slotName: "yjtp", width: 100, align: 'center' },
|
||||
{ label: "预警标签", prop: "yjbq", width: 120 },
|
||||
{ label: "预警地址", prop: "yjdz" },
|
||||
{ label: "预警级别", prop: "yjjb", showSolt: true, width: 85 },
|
||||
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
||||
{ label: "来源类型", prop: "yjLylx", showSolt: true,width: 100 },
|
||||
{ label: "预警级别", slotName: "yjjb", width: 85, align: 'center' },
|
||||
{ label: "预警类别", slotName: "yjlb", width: 100 },
|
||||
{ label: "来源类型", slotName: "yjLylx", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "姓名", prop: "ryxm",width: 100 },
|
||||
{ label: "姓名", prop: "ryxm", width: 100 },
|
||||
{ label: "身份证号", prop: "rysfzh", width: 170 },
|
||||
{ label: "车牌号", prop: "cph" ,width: 100},
|
||||
{ label: "车牌号", prop: "cph", width: 100 },
|
||||
{ label: '操作', width: 100, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -120,8 +116,8 @@ onMounted(() => {
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
queryFrom.value.startTime = val.timeRange ? val.timeRange[0] : ''
|
||||
queryFrom.value.endTime = val.timeRange ? val.timeRange[1] : ''
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -142,7 +138,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.timeRange;
|
||||
delete promes.startTime;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageAllList').then((res) => {
|
||||
console.log(res);
|
||||
pageData.total = res.total || 0;
|
||||
@ -160,17 +156,7 @@ const getList = () => {
|
||||
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffd325'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
@ -197,9 +183,13 @@ const tabHeightFn = () => {
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
<style scoped lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,402 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy heightBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="handleQsFk(row)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="03" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxSfyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Detail from './components/detail.vue'
|
||||
import { watch } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
gettbGsxtBqglSelectList()
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的身份预警API接口
|
||||
let params = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete params.times;
|
||||
yjzxSfyjSelectList(params).then((res) => {
|
||||
pageData.tableData = Array.isArray(res?.records) ? res.records : [];
|
||||
pageData.tableData = pageData.tableData.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
// 标签
|
||||
const bqLbData = ref({
|
||||
bqDl: [],
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
const promes = {
|
||||
bqLx: '01',
|
||||
bqLb: val ? '02' : "01",
|
||||
bqDlId: val ? bqLbData.value.bqDl.find(item => item.value == val)?.id : ""
|
||||
}
|
||||
tbGsxtBqglSelectList(promes).then((res) => {
|
||||
if (val) {
|
||||
queryFrom.value.bqxl = ''
|
||||
bqLbData.value.bqXl = res.data ? res.data.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
}
|
||||
}) : []
|
||||
} else {
|
||||
bqLbData.value.bqDl = res ? res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
id: item.id
|
||||
}
|
||||
}) : []
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
watch(() => bqLbData.value.bqXl, (res) => {
|
||||
bqLbData.value.bqXl = res
|
||||
}, { deep: true })
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt//yjzxSfyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlb, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffff00'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
const openAddFrom = (row) => {
|
||||
addModelRef.value.init('add', row)
|
||||
}
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxyjzxSfyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '身份预警')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,57 +1,44 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy heightBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<div :style="{ height: (pageData.tableHeight + 40) + 'px' }" class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<template #bqys="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" color="#fff" :tag="false" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="handleQsFk(row)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddFrom(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -76,10 +63,7 @@
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
@ -87,31 +71,34 @@ import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Detail from './components/detail.vue'
|
||||
import { watch } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { holographicProfileJump, bqYs } from "@/utils/tools.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'sfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'yjbqmc', label: '预警标签', type: 'input', placeholder: '请输入预警标签' },
|
||||
{ key: 'ssbmdm', label: '部门', type: 'department', placeholder: '请选择部门' },
|
||||
{ key: 'bqys', label: '级别', type: 'select', options: D_BZ_YJJB, placeholder: '请选择级别' },
|
||||
{ key: 'ksfz', label: '开始身份分值', type: 'number', placeholder: '请输入开始身份分值' },
|
||||
{ key: 'jsfz', label: '结束身份分值', type: 'number', placeholder: '请输入结束身份分值' },
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
]);
|
||||
|
||||
const permission_sfqs = ref(false)
|
||||
@ -136,14 +123,19 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '状态', width: 80, align: 'center', slotName: 'czzt' },
|
||||
{ prop: 'yjsj', label: '预警时间', width: 180, align: 'center' },
|
||||
{ prop: 'xm', label: '姓名', width: 100, align: 'center' },
|
||||
{ prop: 'sfzh', label: '身份证号', width: 180, align: 'center' },
|
||||
{ prop: 'yjbqmc', label: '标签', width: 120, align: 'center' },
|
||||
{ label: '级别', width: 88, align: 'center', slotName: 'bqys' },
|
||||
{ prop: 'ssbm', label: '接收单位', align: 'center' },
|
||||
{ label: '活动频次', slotName: 'sfcs', width: 90, align: 'center' },
|
||||
{ prop: 'bqfz', label: '标签分值', width: 80, align: 'center' },
|
||||
{ prop: 'pzxs', label: '系数', width: 60, align: 'center' },
|
||||
{ prop: 'sffz', label: '计算分值', width: 90, align: 'center' },
|
||||
{ label: '操作', width: 240, slotName: 'operation' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -163,18 +155,15 @@ onMounted(() => {
|
||||
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value = { ...val };
|
||||
if (val.startTime && Array.isArray(val.startTime)) {
|
||||
queryFrom.value.startTime = val.startTime[0]
|
||||
queryFrom.value.endTime = val.startTime[1]
|
||||
}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
@ -193,16 +182,8 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete params.times;
|
||||
yjzxSfyjSelectList(params).then((res) => {
|
||||
pageData.tableData = Array.isArray(res?.records) ? res.records : [];
|
||||
pageData.tableData = pageData.tableData.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
@ -299,17 +280,6 @@ const submit = () => {
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffff00'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
@ -336,7 +306,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -353,9 +323,12 @@ const exportExl = () => {
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
bqys_cname: "级别",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
bqfz: "标签分值",
|
||||
pzxs: "系数",
|
||||
sffz: "计算分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
@ -370,14 +343,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -388,15 +361,20 @@ const handleQs = () => {
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,335 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
yjlb: '03'
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,80 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="count-container">
|
||||
<div class="count-number">{{dataConut}}</div>
|
||||
<div class="count-label">预警人数</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps,getCurrentInstance } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '人数查询'
|
||||
},
|
||||
dataConut: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},width: {
|
||||
type: String,
|
||||
default: '20%'
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.count-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.count-number {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: #409eff;
|
||||
margin-bottom: 16px;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.count-label {
|
||||
font-size: 18px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,76 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button type="primary" @click="submit">确定</el-button>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警指派'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '50%'
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
});
|
||||
|
||||
const elform = ref(null)
|
||||
const submit = async () => {
|
||||
elform.value.submit(() => {
|
||||
const params = { ...listQuery.value, yjid: props.dataList.id };
|
||||
tbYjxxYjzp(params).then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
close();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
});
|
||||
}
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,441 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xsd="{ row }">
|
||||
{{ `${row.xsd}%` }}
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="04" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB","D_GS_QLZDRLX","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB","D_GS_BK_CZYQ");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_BZ_YJLY,
|
||||
D_BZ_YJJB,
|
||||
D_BZ_YJLX
|
||||
})
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "区域所属单位", prop: 'ssbmdm', placeholder: "请选择区域所属单位", showType: "department" },
|
||||
{ label: "布控单位", prop: 'ssbmdm', placeholder: "请选择布控单位", showType: "department" },
|
||||
{ label: "所属部门", prop: 'ssbmdm', placeholder: "请选择所属部门", showType: "department" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "车牌号码", prop: 'clcph', placeholder: "请输入车牌号码", showType: "input" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [{ sfcs: 1 }],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth:160,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showOverflowTooltip: true, showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域名称", prop: "bkqymc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域范围", prop: "bkfw", showOverflowTooltip: true, width: 50},
|
||||
// { label: "区域所属", prop: "gkbmmc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "比中", prop: "yjLx", showOverflowTooltip: true, width: 60, showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "身份证号", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showOverflowTooltip: true,showSolt: true, width: 60 },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true ,showSolt: true, width: 60 },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq",showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, showOverflowTooltip: true, width:45 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "所属单位", prop: "ssbm", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true,showSolt: true, width: 65 },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", width: 200 },
|
||||
// { label: "预警标签", prop: "yjbqmc" },
|
||||
// { label: "身份证号", prop: "yjRysfzh", width: 200 },
|
||||
// { label: "预警来源", prop: "yjLylx", showSolt: true },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "车牌号", prop: "yjClcph" },
|
||||
// { label: "布控区域名称", prop: "bkqymc" },
|
||||
// { label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
// let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
// permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
// let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
// let obj = rols.find(item => {
|
||||
// return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
// })
|
||||
// roleCode.value = obj ? true : false;
|
||||
tabHeightFn();
|
||||
getList();
|
||||
gettbGsxtBqglSelectList()
|
||||
});
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val,sfglyj:val.sfglyj.join(',') };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的组合预警API接口
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
qcckPost({ promes }, "/mosty-gsxt/tbYjxx/getQybkPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqzhSelectList({}).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
const assessShow = ref(false)
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxZhyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
yjRyxm: "姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjRysjh: "电话",
|
||||
xsd: "相似度",
|
||||
yjJrcs: "预警次数",
|
||||
yjLx: "预警类型",
|
||||
yjLylx: "预警来源",
|
||||
yjJb: " 预警级别",
|
||||
yjbqmc: "预警标签",
|
||||
yjSj: "预警时间",
|
||||
czzt_cname: "处置状态",
|
||||
ssbm: "所属部门",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.yjLx, D_BZ_YJLX),
|
||||
czzt_cname: getMultiDictVal(item.yjLylx, D_BZ_YJLY),
|
||||
bqys_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '组合预警')
|
||||
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
dataPres.value = val
|
||||
paginationOpen.value = true
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,59 +2,82 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xsd="{ row }">
|
||||
{{ `${row.xsd}%` }}
|
||||
<div :style="{ height: (pageData.tableHeight + 40) + 'px' }" class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
<template #yjRyxm="{ row }">
|
||||
{{ row.yjLx == 2 ? row.yjClcph : row.yjRyxm }}
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_BZ_YJLX" />
|
||||
{{ row.yjLx == 2 ? '车辆' : '人员' }}
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -74,8 +97,9 @@
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -99,13 +123,16 @@ import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB","D_GS_QLZDRLX","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB","D_GS_BK_CZYQ");
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ, D_GS_QLZDRYXX } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB", "D_GS_QLZDRLX", "D_GS_ZDR_RYJB", "D_GS_ZDR_GJLB", "D_GS_BK_CZYQ", "D_GS_QLZDRYXX");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
@ -122,21 +149,20 @@ const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "select", options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }], multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "区域所属单位", prop: 'ssbmdm', placeholder: "请选择区域所属单位", showType: "department" },
|
||||
{ label: "布控单位", prop: 'ssbmdm', placeholder: "请选择布控单位", showType: "department" },
|
||||
{ label: "所属部门", prop: 'ssbmdm', placeholder: "请选择所属部门", showType: "department" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "车牌号码", prop: 'clcph', placeholder: "请输入车牌号码", showType: "input" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'number', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'number', placeholder: '请输入结束年龄' },
|
||||
{ key: 'clcph', label: '车牌号码', type: 'input', placeholder: '请输入车牌号码' },
|
||||
{ key: 'yjNr', label: '预警内容', type: 'input', placeholder: '请输入预警内容' },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
@ -160,42 +186,31 @@ const pageData = reactive({
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth:160,
|
||||
controlsWidth: 160,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showOverflowTooltip: true, showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域名称", prop: "bkqymc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域范围", prop: "bkfw", showOverflowTooltip: true, width: 50},
|
||||
// { label: "区域所属", prop: "gkbmmc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "比中", prop: "yjLx", showOverflowTooltip: true, width: 60, showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "身份证号", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showOverflowTooltip: true,showSolt: true, width: 60 },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true ,showSolt: true, width: 60 },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq",showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, showOverflowTooltip: true, width:45 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "所属单位", prop: "ssbm", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true,showSolt: true, width: 65 },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", width: 200 },
|
||||
// { label: "预警标签", prop: "yjbqmc" },
|
||||
// { label: "身份证号", prop: "yjRysfzh", width: 200 },
|
||||
// { label: "预警来源", prop: "yjLylx", showSolt: true },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "车牌号", prop: "yjClcph" },
|
||||
// { label: "布控区域名称", prop: "bkqymc" },
|
||||
// { label: "所属部门", prop: "ssbm" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 80, align: 'center', slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80, align: 'center' },
|
||||
{ prop: 'bkqymc', label: '区域名称', width: 80, align: 'center' },
|
||||
{ label: "比中", slotName: 'yjLx', width: 60, align: 'center' },
|
||||
{ label: '人员姓名', slotName: 'yjRyxm', width: 80, align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80, align: 'center' },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
|
||||
@ -219,7 +234,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val,sfglyj:val.sfglyj.join(',') };
|
||||
queryFrom.value = { ...queryFrom.value, ...val, yjLx: val.yjLx.join(',') };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
@ -255,17 +270,6 @@ const getList = () => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
@ -362,7 +366,7 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -431,6 +435,7 @@ const openBox = (val) => {
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
@ -438,4 +443,8 @@ const openBox = (val) => {
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,334 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,80 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="count-container">
|
||||
<div class="count-number">{{dataConut}}</div>
|
||||
<div class="count-label">预警人数</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps,getCurrentInstance } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '人数查询'
|
||||
},
|
||||
dataConut: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},width: {
|
||||
type: String,
|
||||
default: '20%'
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.count-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.count-number {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: #409eff;
|
||||
margin-bottom: 16px;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.count-label {
|
||||
font-size: 18px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,76 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button type="primary" @click="submit">确定</el-button>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警指派'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '50%'
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
});
|
||||
|
||||
const elform = ref(null)
|
||||
const submit = async () => {
|
||||
elform.value.submit(() => {
|
||||
const params = { ...listQuery.value, yjid: props.dataList.id };
|
||||
tbYjxxYjzp(params).then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
close();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
});
|
||||
}
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,38 +2,41 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
@ -41,21 +44,19 @@
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -63,54 +64,58 @@
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间xx", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT},
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
@ -124,20 +129,23 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
@ -151,9 +159,9 @@ const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -171,6 +179,7 @@ const getList = () => {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
@ -248,7 +257,7 @@ const handleQs = () => {
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres=ref({})
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
@ -290,42 +299,37 @@ const payAttention = (row) => {
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen=ref(false)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value=true
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,471 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading" style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
expand
|
||||
@chooseData="handleChooseData"
|
||||
:rowClassName="getRowClassName"
|
||||
>
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props"/>
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" :tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList"/>
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Pagination v-model="paginationOpen" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT,D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB ,D_GS_CSZT} = proxy.$dict("D_GSXT_YJXX_CZZT",'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB","D_GS_CSZT")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
{ label: "比重类别", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "细类", prop: "czzt", showSolt: true },
|
||||
{ label: "开始放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "结束放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "飞行时间", prop: "czzt", showSolt: true },
|
||||
{ label: "放飞区域", prop: "czzt", showSolt: true },
|
||||
{ label: "无人机类型", prop: "czzt", showSolt: true },
|
||||
{ label: "手机号", prop: "czzt", showSolt: true },
|
||||
{ label: "所属单位", prop: "czzt", showSolt: true },
|
||||
{ label: "超时状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "姓名", prop: "yjRyxm" },
|
||||
// { label: "性别", prop: "xb", showSolt: true, width: 80 },
|
||||
// { label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||
// { label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
// { label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value,...val };
|
||||
listQuery.value.startTime = val.times ? val.times[0] : ''
|
||||
listQuery.value.endTime = val.times ? val.times[1] : ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '14', // 无人机预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTpreplace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '无人机预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx,val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 详情
|
||||
const paginationOpen=ref(false)
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,87 +1,39 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading" style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
expand
|
||||
@chooseData="handleChooseData"
|
||||
:rowClassName="getRowClassName"
|
||||
>
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props"/>
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<div class="tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
@ -91,7 +43,8 @@
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" :tacitly="tacitly" />
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
@ -99,7 +52,7 @@
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList"/>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Pagination v-model="paginationOpen" />
|
||||
@ -111,6 +64,7 @@ import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
@ -128,10 +82,12 @@ import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT,D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB ,D_GS_CSZT} = proxy.$dict("D_GSXT_YJXX_CZZT",'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB","D_GS_CSZT")
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_GS_CSZT } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_GS_CSZT")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
@ -143,28 +99,28 @@ const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "比中项", prop: 'bzx', showType: "select", options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
@ -182,31 +138,23 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
{ label: "比重类别", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "细类", prop: "czzt", showSolt: true },
|
||||
{ label: "开始放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "结束放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "飞行时间", prop: "czzt", showSolt: true },
|
||||
{ label: "放飞区域", prop: "czzt", showSolt: true },
|
||||
{ label: "无人机类型", prop: "czzt", showSolt: true },
|
||||
{ label: "手机号", prop: "czzt", showSolt: true },
|
||||
{ label: "所属单位", prop: "czzt", showSolt: true },
|
||||
{ label: "超时状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "姓名", prop: "yjRyxm" },
|
||||
// { label: "性别", prop: "xb", showSolt: true, width: 80 },
|
||||
// { label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||
// { label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
// { label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "处置状态", align: 'center', width: 80, slotName: 'czzt' },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80, align: 'center' },
|
||||
{ label: '预警级别', width: 80, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '比重类别', width: 80, align: 'center', slotName: 'bzlb' },
|
||||
{ prop: 'xl', label: '细类', width: 80, align: 'center' },
|
||||
{ prop: 'ksffsj', label: '开始放飞时间', align: 'center' },
|
||||
{ prop: 'jsffsj', label: '结束放飞时间', align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ prop: 'mobile', label: '手机号', width: 80, align: 'center' },
|
||||
{ prop: 'wrjlx', label: '无人机类型', align: 'center' },
|
||||
{ prop: 'ffsj', label: '飞行时间', width: 80, align: 'center' },
|
||||
{ prop: 'ffqy', label: '放飞区域', width: 80, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -218,11 +166,11 @@ const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
@ -234,7 +182,7 @@ const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value,...val };
|
||||
listQuery.value = { ...listQuery.value, ...val };
|
||||
listQuery.value.startTime = val.times ? val.times[0] : ''
|
||||
listQuery.value.endTime = val.times ? val.times[1] : ''
|
||||
getList()
|
||||
@ -255,7 +203,8 @@ const getList = () => {
|
||||
...listQuery.value,
|
||||
yjLx: '14', // 无人机预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
bzx: listQuery.value.bzx?.join(',') || '',
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
@ -276,13 +225,13 @@ const getList = () => {
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
@ -351,14 +300,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -369,7 +318,7 @@ const handleQs = () => {
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx,val)
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
@ -405,13 +354,13 @@ const pushWarning = (val) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 详情
|
||||
const paginationOpen=ref(false)
|
||||
const paginationOpen = ref(false)
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
}
|
||||
@ -463,9 +412,7 @@ const openBox = (val) => {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
.tabBox_zdy {
|
||||
background-color: #ffff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,484 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<!-- <template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template> -->
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>xxxx
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import Particulars from "./components/particulars.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_BZ_SF,D_GS_ZDR_RYJB, D_GS_ZDR_GJLB} = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT", "D_GS_CSZT", "D_BZ_SF","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', showType: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// // { label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 150, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 50 },
|
||||
{ label: "处置状态", prop: "czzt", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm", width: 50 },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true, width: 50 },
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true, width: 50 },
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true, width: 50 },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true, width: 50 },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true, width: 50 },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50, },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val, yjJb: val.yjJb?.join(',') || '' };
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '1', // 人员预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTp.replace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '人像预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref({})
|
||||
const openBox = (val) => {
|
||||
dataPres.value = val
|
||||
paginationOpen.value = true
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -2,31 +2,34 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<!-- <template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template> -->
|
||||
</Search>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
<!-- <el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button> -->
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
|
||||
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
|
||||
</Search> -->
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>xxxx
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle> -->
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -42,38 +45,58 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
<!-- <template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
-->
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<!-- <span type="primary" @click="openAddFrom(row)">详情</span> -->
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<!-- <span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
@ -96,7 +119,8 @@
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -109,24 +133,27 @@ import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import Particulars from "./components/particulars.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_BZ_SF,D_GS_ZDR_RYJB, D_GS_ZDR_GJLB} = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT", "D_GS_CSZT", "D_BZ_SF","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB")
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT,
|
||||
D_BZ_YJLY, D_BZ_XB, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_BZ_SF, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ',
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT",
|
||||
"D_GS_CSZT", "D_BZ_SF", "D_GS_ZDR_RYJB", "D_GS_ZDR_GJLB", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
@ -138,38 +165,29 @@ const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', showType: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// // { label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
{ label: "布控开始时间", key: 'bkkssj', type: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", key: 'bkjssj', type: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", key: 'startTime', type: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', type: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", key: 'yjJb', type: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", key: 'bkly', type: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", key: 'bkfw', type: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", key: 'gkbmdm', type: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", key: 'ssbmdm', type: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", key: 'xsd', type: "input", placeholder: "请输入相似度" },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ label: "签收状态", key: 'czzt', type: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", key: 'cszt', placeholder: "请选择超时状态", type: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", key: 'zkzt', type: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", key: 'yjRyxm', type: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", key: 'xbdm', type: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", key: 'ksnl', placeholder: "请输入年龄", type: "number" },
|
||||
{ label: "结束年龄", key: 'jsnl', placeholder: "请输入年龄", type: "number" },
|
||||
{ label: "跨地区", key: 'sflksd', type: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", key: 'yjRysfzh', type: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", key: 'yjNr', type: "input", placeholder: "请输入预警内容" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -188,26 +206,28 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 150, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 50 },
|
||||
{ label: "处置状态", prop: "czzt", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm", width: 50 },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true, width: 50 },
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true, width: 50 },
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true, width: 50 },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true, width: 50 },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true, width: 50 },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50, },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '照片', width: 50, align: 'center', slotName: 'yjTp' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80, align: 'center' },
|
||||
{ prop: 'yjRyxm', label: '姓名', width: 50, align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', align: 'center' },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 70, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", width: 70, align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", width: 80, align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", width: 80, align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "相似度", width: 50, align: 'center', slotName: 'xsd' },
|
||||
{ label: "预警内容", prop: "yjNr", width: 70, align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", width: 70, align: 'center'},
|
||||
{ label: "数据来源", width: 70, align: 'center', slotName: 'yjLylx' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -237,9 +257,9 @@ const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val, yjJb: val.yjJb?.join(',') || '' };
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
// listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
getList()
|
||||
}
|
||||
|
||||
@ -416,7 +436,7 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -477,8 +497,6 @@ const tabHeightFn = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,491 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag v-model:value="row.bkly" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag v-model:value="row.bkczyq" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xtSjly="{ row }">
|
||||
<span>{{ row.xtSjly==1?'PC':row.xtSjly==2?'移动端':'一张网' }}</span>
|
||||
</template>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag v-model:value="row.cszt" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #zkzt="{ row }">
|
||||
<DictTag v-model:value="row.zkzt" :options="D_GS_BKZT" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Particulars from './components/particulars.vue'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX,
|
||||
D_BZ_XB,
|
||||
D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_GS_BKZT, D_BZ_SF,
|
||||
D_BZ_YJLY, D_GS_CSZT, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_GS_BKZT", "D_BZ_SF",
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号", },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "xtSjly", showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showSolt: true },
|
||||
{ label: "在控状态", prop: "zkzt", showSolt: true},
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val };
|
||||
listQuery.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '2', // 车辆预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTpreplace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 根据预警级别设置行样式
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '人像预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 详情
|
||||
const particularsShow = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
particularsShow.value = true
|
||||
dataPres.value = val
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -2,31 +2,20 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</Search>
|
||||
</QueryFormPanel>
|
||||
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -42,55 +31,48 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag v-model:value="row.bkly" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag v-model:value="row.bkczyq" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xtSjly="{ row }">
|
||||
<span>{{ row.xtSjly==1?'PC':row.xtSjly==2?'移动端':'一张网' }}</span>
|
||||
</template>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag v-model:value="row.cszt" :options="D_GS_CSZT" />
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #zkzt="{ row }">
|
||||
<DictTag v-model:value="row.zkzt" :options="D_GS_BKZT" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
@ -113,7 +95,8 @@
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -125,20 +108,20 @@ import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Particulars from './components/particulars.vue'
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -172,46 +155,37 @@ const searchConfiger = ref(
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号", },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "xtSjly", showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showSolt: true },
|
||||
{ label: "在控状态", prop: "zkzt", showSolt: true},
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '照片', width: 50, align: 'center', slotName: 'yjTp' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ label: "车牌号", prop: "yjClcph", align: 'center', width: 80 },
|
||||
{ label: '预警级别', width: 70, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "数据来源", width: 70, align: 'center', slotName: 'yjLylx' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -414,7 +388,7 @@ const pushWarning = (val) => {
|
||||
const particularsShow = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
particularsShow.value = true
|
||||
particularsShow.value = true
|
||||
dataPres.value = val
|
||||
|
||||
}
|
||||
@ -422,7 +396,7 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -484,8 +458,6 @@ const tabHeightFn = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
256
src/views/backOfficeSystem/goingJob/addForm.vue
Normal file
256
src/views/backOfficeSystem/goingJob/addForm.vue
Normal file
@ -0,0 +1,256 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}完成情况</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" :rules="rules">
|
||||
</FormMessage>
|
||||
<div>
|
||||
<div class="btn_box">
|
||||
<el-button :disabled="disabled" type="primary" size="small" @click="openZdsjLod">打开今日完成情况列表</el-button>
|
||||
</div>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="300"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger">
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" :disabled="disabled" size="small" @click="openZdsjLod('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" :disabled="disabled" size="small" @click="deleteZdsjLodList(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
<div>
|
||||
<div class="btn_box">
|
||||
<el-button :disabled="disabled" type="primary" size="small" @click="openToDayContent">明日值班工作列表</el-button>
|
||||
</div>
|
||||
<MyTable :tableData="toDayJobList.tableData" :tableColumn="toDayJobList.tableColumn" :tableHeight="300"
|
||||
:key="toDayJobList.keyCount" :tableConfiger="toDayJobList.tableConfiger">
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" :disabled="disabled" size="small"
|
||||
@click="openToDayContent('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" :disabled="disabled" size="small" @click="deleteToDayContent(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ZdsjLod v-model="zdsjLodShow" @addZdsjLodList="addZdsjLodList" :zdsjLod="zdsjLod" />
|
||||
<ToDayContent v-model="toDayContentShow" @addZdsjLodList="addToDayLodList" :toDayContent="toDayContent" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import ZdsjLod from "./zdsjLod.vue";
|
||||
import ToDayContent from "./toDayContent.vue";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
jrzbrXm: [{ required: true, message: "请输入今日值班人", trigger: "blur" }],
|
||||
jrzbrLxdh: [{ required: true, message: "请输入今日值班电话", trigger: "blur" }],
|
||||
mrzbrXm: [{ required: true, message: "请输入明日值班人", trigger: "blur" }],
|
||||
mrzbrLxdh: [{ required: true, message: "请输入明日值班电话", trigger: "blur" }],
|
||||
kssj: [{ required: true, message: "请选择开始时间", trigger: "blur" }],
|
||||
jssj: [{ required: true, message: "请选择结束时间", trigger: "blur" }],
|
||||
gzrq: [{ required: true, message: "请选择工作日期", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const formData = ref([
|
||||
{ label: "今日值班人", prop: "jrzbrXm", type: "input" },
|
||||
{ label: "今日值班电话", prop: "jrzbrLxdh", type: "input" },
|
||||
{ label: "明日值班人", prop: "mrzbrXm", type: "input" },
|
||||
{ label: "明日值班电话", prop: "mrzbrLxdh", type: "input" },
|
||||
{ label: "开始时间", prop: "kssj", type: "datetime" },
|
||||
{ label: "结束时间", prop: "jssj", type: "datetime" },
|
||||
{ label: "工作日期", prop: "gzrq", type: "date" },
|
||||
{ label: "备注", prop: "bz", type: "textarea", width: "100%" },
|
||||
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "工作任务", prop: "grw", showOverflowTooltip: true },
|
||||
{ label: "完成情况", prop: "wcqk", showOverflowTooltip: true },
|
||||
{ label: " 来源", prop: "ly", showOverflowTooltip: true },
|
||||
// { label: "序号", prop: "index", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const toDayJobList = reactive({
|
||||
tableData: [], //表格数据
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "工作内容", prop: "gznr", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
qcckGet({}, '/mosty-gsxt/gzqk/' + row.id).then(res => {
|
||||
listQuery.value = res;
|
||||
pageData.tableData = res.wcqkList || [];
|
||||
toDayJobList.tableData = res.zbgzList || [];
|
||||
});
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
} else {
|
||||
disabled.value = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
wcqkList: pageData.tableData,
|
||||
zbgzList: toDayJobList.tableData,
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
loading.value = true;
|
||||
if (title.value == "新增") {
|
||||
qcckPost(promes, '/mosty-gsxt/gzqk/addEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
} else {
|
||||
qcckPut(promes, '/mosty-gsxt/gzqk/editEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
//打开今日完成情况列表
|
||||
const zdsjLodShow = ref();
|
||||
const zdsjLod = ref();
|
||||
const openZdsjLod = (type, row) => {
|
||||
if (type == 'edit') {
|
||||
console.log(row);
|
||||
zdsjLod.value = { ...row };
|
||||
}
|
||||
zdsjLodShow.value = true;
|
||||
}
|
||||
const addZdsjLodList = (val) => {
|
||||
const index = pageData.tableData.findIndex(v => v.id == val.id);
|
||||
if (index != -1) {
|
||||
pageData.tableData[index] = val;
|
||||
} else {
|
||||
pageData.tableData.push(val);
|
||||
}
|
||||
}
|
||||
const deleteZdsjLodList = (id) => {
|
||||
const index = pageData.tableData.findIndex(v => v.id == id);
|
||||
if (index != -1) {
|
||||
pageData.tableData.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// 打开明日值日列表
|
||||
const toDayContentShow = ref();
|
||||
const toDayContent = ref();
|
||||
const openToDayContent = (type, row) => {
|
||||
if (type == 'edit') {
|
||||
toDayContent.value = { ...row };
|
||||
}
|
||||
toDayContentShow.value = true;
|
||||
}
|
||||
const addToDayLodList = (val) => {
|
||||
const index = toDayJobList.tableData.findIndex(v => v.id == val.id);
|
||||
if (index != -1) {
|
||||
toDayJobList.tableData[index] = val;
|
||||
} else {
|
||||
toDayJobList.tableData.push(val);
|
||||
}
|
||||
}
|
||||
const deleteToDayContent = (id) => {
|
||||
const index = toDayJobList.tableData.findIndex(v => v.id == id);
|
||||
if (index != -1) {
|
||||
toDayJobList.tableData.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
});
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.btn_box {
|
||||
margin: 10px 0;
|
||||
}
|
||||
</style>
|
||||
175
src/views/backOfficeSystem/goingJob/index.vue
Normal file
175
src/views/backOfficeSystem/goingJob/index.vue
Normal file
@ -0,0 +1,175 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加完成情况</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #sjzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sjzt" :options="D_BZ_ZDSJCZJG" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" :dict="{ D_BZ_ZDSJCZJG }" />
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_ZDSJCZJG } = proxy.$dict("D_BZ_ZDSJCZJG"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "今日值班人",
|
||||
prop: "jrzbrXm",
|
||||
placeholder: "请输入今日值班人",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "明日值班人",
|
||||
prop: "mrzbrXm",
|
||||
placeholder: "请输入明日值班人",
|
||||
showType: "input",
|
||||
}, {
|
||||
label: "开始时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择开始时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "今日值班人", prop: "jrzbrXm", showOverflowTooltip: true },
|
||||
{ label: "今日值班电话", prop: "jrzbrLxdh", showOverflowTooltip: true },
|
||||
{ label: "明日值班人", prop: "mrzbrXm", showOverflowTooltip: true },
|
||||
{ label: "明日值班电话", prop: "mrzbrLxdh", showOverflowTooltip: true },
|
||||
{ label: "开始时间", prop: "kssj", showOverflowTooltip: true },
|
||||
{ label: "结束时间", prop: "jssj" },
|
||||
{ label: "工作日期", prop: "gzrq" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/gzqk/getPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete(promes, "/mosty-gsxt/gzqk/deleteEntity").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
62
src/views/backOfficeSystem/goingJob/toDayContent.vue
Normal file
62
src/views/backOfficeSystem/goingJob/toDayContent.vue
Normal file
@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="40%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height:150px;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { ref, reactive, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import {generateRandom10Digits} from "@/utils/tools";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
toDayContent: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const emit = defineEmits(["update:modelValue", "addZdsjLodList"]);
|
||||
const title = ref("明日工作内容");
|
||||
const formData = ref([
|
||||
{ label: "工作内容", prop: "gznr", type: "textarea" ,width: "100%" },
|
||||
]);
|
||||
const rules = reactive({
|
||||
gznr: [{ required: true, message: "请输入工作内容", trigger: "blur" }],
|
||||
});
|
||||
|
||||
const closeDialog = () => {
|
||||
elform.value.reset()
|
||||
// 关闭对话框时移除事件监听器
|
||||
emit("update:modelValue", false);
|
||||
|
||||
};
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value = { ...props.toDayContent }
|
||||
}
|
||||
})
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
emit("addZdsjLodList", {...listQuery.value,id:listQuery.value.id?listQuery.value.id:generateRandom10Digits()})
|
||||
closeDialog()
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
66
src/views/backOfficeSystem/goingJob/zdsjLod.vue
Normal file
66
src/views/backOfficeSystem/goingJob/zdsjLod.vue
Normal file
@ -0,0 +1,66 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="40%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height: 300px;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { ref, reactive, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import {generateRandom10Digits} from "@/utils/tools";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},zdsjLod: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const emit = defineEmits(["update:modelValue", "addZdsjLodList"]);
|
||||
const title = ref("今日完成情况列表");
|
||||
const formData = ref([{ label: "工作任务", prop: "grw", type: "input" },
|
||||
{ label: "来源", prop: "ly", type: "textarea", width: "100%" },
|
||||
{ label: "完成情况", prop: "wcqk", type: "textarea", width: "100%" },]);
|
||||
const rules = reactive({
|
||||
// xh: [{ required: true, message: "请输入序号", trigger: "blur" }],
|
||||
grw: [{ required: true, message: "请输入工作任务", trigger: "blur" }],
|
||||
ly: [{ required: true, message: "请输入工作来源", trigger: "blur" }],
|
||||
wcqk: [{ required: true, message: "请输入完成情况", trigger: "blur" }],
|
||||
});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value = { ...props.zdsjLod }
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const closeDialog = () => {
|
||||
elform.value.reset()
|
||||
// 关闭对话框时移除事件监听器
|
||||
emit("update:modelValue", false);
|
||||
|
||||
};
|
||||
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
emit("addZdsjLodList", {...listQuery.value,id:listQuery.value.id?listQuery.value.id:generateRandom10Digits()})
|
||||
closeDialog()
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
178
src/views/backOfficeSystem/policeManagement/addForm.vue
Normal file
178
src/views/backOfficeSystem/policeManagement/addForm.vue
Normal file
@ -0,0 +1,178 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}事件</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px"
|
||||
:rules="rules">
|
||||
</FormMessage>
|
||||
<div style="display: flex;justify-content: flex-end;margin-bottom: 10px;">
|
||||
<el-button type="primary" style="margin-left: 10px;" @click="drawShape()">选择坐标</el-button>
|
||||
</div>
|
||||
<div style="height: 400px;width: 100%; position: absolute;">
|
||||
<GdMap :mapid="'map-92'"></GdMap>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
sjbt: [{ required: true, message: "请输入事件标题", trigger: "blur" }],
|
||||
shms: [{ required: true, message: "请输入事件描述", trigger: "blur" }],
|
||||
jd: [{ required: true, message: "请输入经度", trigger: "blur" }],
|
||||
wd: [{ required: true, message: "请输入纬度", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({
|
||||
bqdlList: [],
|
||||
bqxlList: [],
|
||||
}); //表单
|
||||
const formData = ref();
|
||||
watch(() => props.dict.D_BZ_ZDSJCZJG, (newVal) => {
|
||||
if (newVal) {
|
||||
formData.value = [
|
||||
{ label: "事件标题", prop: "sjbt", type: "input" },
|
||||
// { label: "事件描述", prop: "shms", type: "input" },
|
||||
{ label: "事件性质", prop: "sjxz", type: "input" },
|
||||
{ label: "事件地址", prop: "sjdz", type: "input" },
|
||||
// { label: "事件状态", prop: "sjzt", type: "select", options: props.dict.D_BZ_ZDSJCZJG },
|
||||
{ label: "事发时间", prop: "fssj", type: "datetime" },
|
||||
{ label: "事件描述", prop: "shms", type: "textarea", width: "100%" },
|
||||
{ label: "处置结果", prop: "czjg", type: "textarea", width: "100%" },
|
||||
{ label: "经度", prop: "jd", type: "input", disabled: true },
|
||||
{ label: "纬度", prop: "wd", type: "input", disabled: true },
|
||||
]
|
||||
}
|
||||
}, { deep: true });
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
listQuery.value = row;
|
||||
emitter.emit('addPointArea', { coords: [{ jd: row.jd, wd: row.wd }], icon: require("@/assets/point/zl.png"), flag: "zdsj" })
|
||||
}
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
let url = title.value == "新增" ? "/mosty-gsxt/zdsj/addEntity" : "/mosty-gsxt/zdsj/updateEntity";
|
||||
loading.value = true;
|
||||
qcckPost(promes, url).then(() => {
|
||||
loading.value = false;
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
emitter.on("coordString", coordStringHandler);
|
||||
});
|
||||
const coordStringHandler = (res) => {
|
||||
if (res.type === "point") {
|
||||
listQuery.value.jd = res.coord[0];
|
||||
listQuery.value.wd = res.coord[1];
|
||||
emitter.emit('addPointArea', { coords: [{ jd: res.coord[0], wd: res.coord[1] }], icon: require("@/assets/point/zl.png"), flag: "zdsj" })
|
||||
emitter.emit('setMapCenter', { location: [res.coord[0], res.coord[1]], zoomLevel: 15 })
|
||||
}
|
||||
};
|
||||
const drawShape = () => {
|
||||
emitter.emit("drawShape", {
|
||||
flag: "zdsj",
|
||||
type: "point",
|
||||
isclear: true
|
||||
});
|
||||
}
|
||||
onUnmounted(() => {
|
||||
emitter.off("coordString", coordStringHandler);
|
||||
})
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
177
src/views/backOfficeSystem/policeManagement/index.vue
Normal file
177
src/views/backOfficeSystem/policeManagement/index.vue
Normal file
@ -0,0 +1,177 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加事件</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #sjzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sjzt" :options="D_BZ_ZDSJCZJG" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" :dict="{D_BZ_ZDSJCZJG}" />
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_ZDSJCZJG } = proxy.$dict("D_BZ_ZDSJCZJG"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "事件标题",
|
||||
prop: "sjbt",
|
||||
placeholder: "请输入事件标题",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "事件状态",
|
||||
prop: "sjzt",
|
||||
placeholder: "请选择事件状态",
|
||||
showType: "select",
|
||||
options: D_BZ_ZDSJCZJG
|
||||
}, {
|
||||
label: "开始时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择开始时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "事件标题", prop: "sjbt", showOverflowTooltip: true },
|
||||
{ label: "事件地址", prop: "sjdz", showOverflowTooltip: true },
|
||||
{ label: "事件性质", prop: "sjxz", showOverflowTooltip: true },
|
||||
{ label: "事件描述", prop: "shms", showOverflowTooltip: true },
|
||||
{ label: "发生时间", prop: "fssj" },
|
||||
{ label: "处置结果", prop: "czjg", showOverflowTooltip: true },
|
||||
{ label: "事件状态", prop: "sjzt", showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/zdsj/selectPage").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost(promes, "/mosty-gsxt/zdsj/deletes").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
// 事件操作
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -21,14 +21,13 @@ const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dic: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
default: () => { }
|
||||
}
|
||||
});
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = ref( [
|
||||
|
||||
const formData = ref([
|
||||
{ label: "报警电话", prop: "bjdh", type: "input" },
|
||||
{ label: "报警电话用户地址", prop: "bjdhyhdz", type: "input" },
|
||||
{ label: "报警电话用户名", prop: "bjdhyhm", type: "input" },
|
||||
@ -36,7 +35,7 @@ const formData = ref( [
|
||||
{ label: "报警人名称", prop: "bjrmc", type: "input" },
|
||||
{ label: "报警人证件号码", prop: "bjrzjhm", type: "input" },
|
||||
{ label: "报警时间", prop: "bjsj", type: "input" },
|
||||
{ label: "警情颜色", prop: "color", type: "select",options: props.dic.D_GS_SSYJ },
|
||||
{ label: "警情颜色", prop: "color", type: "select", options: props.dic.D_GS_SSYJ },
|
||||
{ label: "管辖单位名称", prop: "gxdwmc", type: "input" },
|
||||
{ label: "单位名称", prop: "jcjxtjsdwmc", type: "input" },
|
||||
{ label: "接警单编号", prop: "jjdbh", type: "input" },
|
||||
@ -46,13 +45,13 @@ const formData = ref( [
|
||||
{ label: "接警完成时间", prop: "jjwcsj", type: "input" },
|
||||
{ label: "接警员编号", prop: "jjybh", type: "input" },
|
||||
{ label: "接警员姓名", prop: "jjyxm", type: "input" },
|
||||
{ label: "警情标签", prop: "jqbq", type: "select",options: props.dic.D_BZ_JQBQ},
|
||||
{ label: "警情标签", prop: "jqbq", type: "select", options: props.dic.D_BZ_JQBQ },
|
||||
{ label: "警情地址", prop: "jqdz", type: "input" },
|
||||
{ label: "警情类别代码", prop: "jqlbdm", type: "select", options: props.dic.JQLB },
|
||||
{ label: "警情类型代码", prop: "jqlxdm", type: "select",options: props.dic.JQLX},
|
||||
{ label: "警情来源", prop: "jqly", type: "select",options: props.dic.D_BZ_JQLY},
|
||||
{ label: "警情细类代码", prop: "jqxldm", type: "select" ,options: props.dic.JQXL},
|
||||
{ label: "警情子类代码", prop: "jqzldm", type: "select" ,options: props.dic.JQZL},
|
||||
{ label: "警情类型代码", prop: "jqlxdm", type: "select", options: props.dic.JQLX },
|
||||
{ label: "警情来源", prop: "jqly", type: "select", options: props.dic.D_BZ_JQLY },
|
||||
{ label: "警情细类代码", prop: "jqxldm", type: "select", options: props.dic.JQXL },
|
||||
{ label: "警情子类代码", prop: "jqzldm", type: "select", options: props.dic.JQZL },
|
||||
{ label: "报警内容", prop: "bjnr", type: "textarea", width: "100%" },
|
||||
{ label: "补充接警内容", prop: "bcjjnr", type: "textarea", width: "100%" },
|
||||
{ label: "被困人员情况说明", prop: "bkryqksm", type: "textarea", width: "100%" },
|
||||
|
||||
147
src/views/backOfficeSystem/workLogInfo/addForm.vue
Normal file
147
src/views/backOfficeSystem/workLogInfo/addForm.vue
Normal file
@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}值班</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px"
|
||||
:rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
zbrxm: [{ required: true, message: "请输入值班人姓名", trigger: "blur" }],
|
||||
zbrq: [{ required: true, message: "请输入值班日期", trigger: "blur" }],
|
||||
lxdh: [{ required: true, message: "请输入值班人联系电话", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const formData = ref([{ label: "值班人姓名", prop: "zbrxm", type: "input" },
|
||||
{ label: "值班日期", prop: "zbrq", type: "date" },
|
||||
{ label: "联系电话", prop: "lxdh", type: "input" },
|
||||
{ label: "备注", prop: "bz", type: "textarea", width: '100%' },]);
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
listQuery.value = row;
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
} else {
|
||||
disabled.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
loading.value = true;
|
||||
if (title.value == "新增") {
|
||||
qcckPost(promes, '/mosty-gsxt/gzzbxx/addEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
} else {
|
||||
qcckPut(promes, '/mosty-gsxt/gzzbxx/editEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
onUnmounted(() => {
|
||||
})
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
164
src/views/backOfficeSystem/workLogInfo/index.vue
Normal file
164
src/views/backOfficeSystem/workLogInfo/index.vue
Normal file
@ -0,0 +1,164 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加值班</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" />
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "值班人姓名",
|
||||
prop: "zbrxm",
|
||||
placeholder: "请输入值班人姓名",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "值班日期",
|
||||
prop: "zbrq",
|
||||
placeholder: "请选择值班日期",
|
||||
showType: "daterange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "值班人姓名", prop: "zbrxm", showOverflowTooltip: true },
|
||||
{ label: "值班日期", prop: "zbrq", showOverflowTooltip: true },
|
||||
{ label: "值班人联系电话", prop: "lxdh", showOverflowTooltip: true },
|
||||
{ label: "录入人姓名", prop: "lrrXm", showOverflowTooltip: true },
|
||||
{ label: "录入日期", prop: "xtCjsj" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/gzzbxx/getPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete(promes, "/mosty-gsxt/gzzbxx/deleteEntity").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
// 值班操作
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -1,41 +1,42 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" width="70%" @close="closeDialog" :close-on-click-modal="false" destroy-on-close append-to-body>
|
||||
<el-dialog :model-value="modelValue" width="70%" @close="closeDialog" :close-on-click-modal="false" destroy-on-close
|
||||
append-to-body>
|
||||
<template #title>
|
||||
<div class="flex just-between align-center">
|
||||
<span class="f18">警情总数</span>
|
||||
<span @click="exportFile" class="f14 pointer" style="color: #0072ff;">下载</span>
|
||||
<span @click="exportFile" class="f14 pointer" style="color: #0072ff;margin-right: 40px;">下载</span>
|
||||
</div>
|
||||
</template>
|
||||
<div>
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<!-- <template #jjlx="{ row }">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<!-- <template #jjlx="{ row }">
|
||||
<DictTag :tag="false" :value="row.jjlx" :options="D_BZ_JQBQ" />
|
||||
</template> -->
|
||||
<template #jqdjdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqdjdm" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
<template #jqlbdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
|
||||
</template>
|
||||
<template #ypzt="{ row }">
|
||||
{{ row.ypzt === '01' ? '已研判' : '未研判' }}
|
||||
</template>
|
||||
<!-- <template #jqdjdm="{ row }">
|
||||
<template #jqdjdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqdjdm" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
<template #jqlbdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqlbdm" :options="JQLB" />
|
||||
</template>
|
||||
<template #ypzt="{ row }">
|
||||
{{ row.ypzt === '01' ? '已研判' : '未研判' }}
|
||||
</template>
|
||||
<!-- <template #jqdjdm="{ row }">
|
||||
<DictTag :tag="false" :value="row.jqdjdm" :options="D_BZ_JQDJ" />
|
||||
</template> -->
|
||||
<!-- 操作 -->
|
||||
<!-- <template #controls="{ row }">
|
||||
<!-- 操作 -->
|
||||
<!-- <template #controls="{ row }">
|
||||
<el-link type="primary" @click="addEdit('edit', row)">详情</el-link>
|
||||
<el-link type="warning" @click="handleYP('研判', row)">研判</el-link>
|
||||
<el-link type="danger" @click="handleYP('深度研判', row)">深度研判</el-link>
|
||||
</template> -->
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@ -55,11 +56,11 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js'
|
||||
import { ref, reactive, getCurrentInstance, watch } from "vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import {timeValidate} from '@/utils/tools.js'
|
||||
import { timeValidate } from '@/utils/tools.js'
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const { proxy } = getCurrentInstance()
|
||||
const { D_GS_BQ_DJ,JQLB,JQLX,JQXL,JQZL,D_BZ_JQLY,D_BZ_JQFL,JQLB_DP,D_BZ_JQBQ,D_GS_SSYJ } = proxy.$dict('D_GS_BQ_DJ',"JQLB",'JQLX','JQXL','JQZL','D_BZ_JQLY','D_BZ_JQFL','JQLB_DP','D_BZ_JQBQ','D_GS_SSYJ'); //获取字典数据
|
||||
const { D_GS_BQ_DJ, JQLB, JQLX, JQXL, JQZL, D_BZ_JQLY, D_BZ_JQFL, JQLB_DP, D_BZ_JQBQ, D_GS_SSYJ } = proxy.$dict('D_GS_BQ_DJ', "JQLB", 'JQLX', 'JQXL', 'JQZL', 'D_BZ_JQLY', 'D_BZ_JQFL', 'JQLB_DP', 'D_BZ_JQBQ', 'D_GS_SSYJ'); //获取字典数据
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
@ -126,12 +127,12 @@ const pageData = reactive({
|
||||
{ label: "报警时间", prop: "bjsj" },
|
||||
{ label: "报警内容", prop: "bjnr", showOverflowTooltip: true },
|
||||
{ label: "接警员姓名", prop: "jjyxm" },
|
||||
{ label: "警情级别", prop: "jqdjdm",showSolt:true },
|
||||
{ label: "警情级别", prop: "jqdjdm", showSolt: true },
|
||||
// { label: "警情标签", prop: "jjlx", showSolt: true },
|
||||
{ label: "警情类型", prop: "jqlbdm",showSolt:true },
|
||||
{ label: "警情类型", prop: "jqlbdm", showSolt: true },
|
||||
{ label: "警情地址", prop: "jqdz" },
|
||||
{ label: "补充接警内容", prop: "bcjjnr", showOverflowTooltip: true },
|
||||
{ label: "研判状态", prop: "ypzt",showSolt:true },
|
||||
{ label: "研判状态", prop: "ypzt", showSolt: true },
|
||||
],
|
||||
tableHeight: "40vh",
|
||||
});
|
||||
@ -147,12 +148,12 @@ const onSearch = (val) => {
|
||||
}
|
||||
watch(() => props.modelValue, (val) => {
|
||||
if (val) {
|
||||
parameter.value = {startTime:timeValidate(new Date(),'ymd'),endTime:timeValidate(new Date(),'ymd')}
|
||||
parameter.value = { startTime: timeValidate(new Date(), 'ymd'), endTime: timeValidate(new Date(), 'ymd') }
|
||||
changePage()
|
||||
}
|
||||
})
|
||||
const changePage = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
pageData.tableConfiger.loading = true;
|
||||
const params = {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
@ -177,7 +178,7 @@ const changeSize = (val) => {
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportFile = () =>{
|
||||
const exportFile = () => {
|
||||
const titleObj = {
|
||||
jjdbh: "接警单编号",
|
||||
bjdh: "报警电话",
|
||||
@ -190,13 +191,13 @@ const exportFile = () =>{
|
||||
bcjjnr: "补充接警内容",
|
||||
ypzt_name: "研判状态",
|
||||
}
|
||||
let list = pageData.tableData.map(item => ({
|
||||
...item,
|
||||
jqdjdm_name: getMultiDictVal(item.jqdjdm, D_GS_BQ_DJ),
|
||||
jqlbdm_name: getMultiDictVal(item.jqlbdm, JQLB),
|
||||
ypzt_name: item.ypzt == '01' ? '已研判' : '未研判'
|
||||
}))
|
||||
exportExlByObj(titleObj, list, '警情总数')
|
||||
let list = pageData.tableData.map(item => ({
|
||||
...item,
|
||||
jqdjdm_name: getMultiDictVal(item.jqdjdm, D_GS_BQ_DJ),
|
||||
jqlbdm_name: getMultiDictVal(item.jqlbdm, JQLB),
|
||||
ypzt_name: item.ypzt == '01' ? '已研判' : '未研判'
|
||||
}))
|
||||
exportExlByObj(titleObj, list, '警情总数')
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
820
src/views/home/dialog/jobLog.vue
Normal file
820
src/views/home/dialog/jobLog.vue
Normal file
@ -0,0 +1,820 @@
|
||||
<template>
|
||||
<el-dialog :model-value="props.modelValue" width="82%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div class="job-log-page">
|
||||
<div class="page-title">情报研判大队工作日报</div>
|
||||
<div class="top-row">
|
||||
<div class="date-card panel">
|
||||
<div class="date-head">
|
||||
<div class="date-value">{{ todayText }}</div>
|
||||
</div>
|
||||
<div class="date-body">
|
||||
<div class="weekday">{{ weekText }}</div>
|
||||
<div>
|
||||
<el-popover placement="right" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<img src="@/assets/images/rili.png" alt="" srcset="">
|
||||
</template>
|
||||
<el-date-picker v-model="promes.zbrq" style="width: 100%" type="date" placeholder="选择日期"
|
||||
value-format="YYYY-MM-DD" @change="dateChange" />
|
||||
</el-popover>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="duty-boxes">
|
||||
<div class="duty-card duty-today">
|
||||
<div class="duty-line">
|
||||
<div class="label">今日值班人员:</div>
|
||||
<div class="value">{{ zbData.jrzbrXm }}</div>
|
||||
</div>
|
||||
<div class="phone" v-if="zbData.jrzbrLxdh">({{ zbData.jrzbrLxdh }})</div>
|
||||
</div>
|
||||
<div class="duty-card duty-tomorrow">
|
||||
<div class="duty-line">
|
||||
<div class="label">明日值班人员:</div>
|
||||
<div class="value">{{ zbData.mrzbrXm }}</div>
|
||||
</div>
|
||||
<div class="phone">{{ zbData.mrzbrLxdh }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="summary-card panel">
|
||||
<div class="summary-head">{{ summaryDateText }}</div>
|
||||
<div class="summary-grid">
|
||||
<div class="grid-item">
|
||||
<div class="grid-title">公安部重点人员四色预警</div>
|
||||
<div class="stat-list">
|
||||
<div v-for="(item, index) in warningStats" :key="item.level" class="stat-line">
|
||||
<span class="dot" :class="item.className"></span>
|
||||
<span class="name">{{ item.level }}</span>
|
||||
<span class="num">{{ item.personnel }}人</span>
|
||||
<span class="num">{{ item.yjContent }}条</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid-item">
|
||||
<div class="grid-title">签收反馈情况</div>
|
||||
<div class="feedback-list">
|
||||
<div v-for="item in feedbackStats" :key="item.name" class="feedback-line">
|
||||
<span>{{ item.name }}</span>
|
||||
<span>{{ item.value }}条</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom-row">
|
||||
<div class="notice-panel panel">
|
||||
<div class="panel-title panel-title-yellow">公告栏</div>
|
||||
<div class="notice-list" v-infinite-scroll="loadMoreDuty" :infinite-scroll-disabled="dutyScrollDisabled"
|
||||
:infinite-scroll-immediate="false" :infinite-scroll-distance="10">
|
||||
<div class="notice-table-title">值班表</div>
|
||||
<div class="notice-head">
|
||||
<span>时间</span>
|
||||
<span>值班人员</span>
|
||||
<span>电话</span>
|
||||
</div>
|
||||
<template v-if="noticeList.length">
|
||||
<div v-for="(item, index) in noticeList" :key="`${item.zbrq}-${item.lxdh}-${index}`" class="notice-item">
|
||||
<span>{{ item.zbrq }}</span>
|
||||
<span>{{ item.zbrxm }}</span>
|
||||
<span>{{ item.lxdh }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<div v-else-if="dutyLoaded" class="notice-empty">暂无数据</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-panel panel pdDate">
|
||||
<div class="work-grid">
|
||||
<div class="work-section">
|
||||
<div class="panel-title panel-title-blue">今日已完成工作</div>
|
||||
<div class="work-table-wrap">
|
||||
<div class="complete-grid" :class="{ 'is-empty-grid': !completeWorks.length }">
|
||||
<div class="complete-grid-row complete-grid-head">
|
||||
<div class="complete-grid-cell complete-col-index"><span class="cell-text" title="序号">序号</span>
|
||||
</div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" title="来源">来源</span></div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" title="工作任务">工作任务</span>
|
||||
</div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" title="完成情况">完成情况</span>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="completeWorks.length">
|
||||
<div class="complete-grid-row" v-for="(item, index) in completeWorks" :key="item.id">
|
||||
<div class="complete-grid-cell complete-col-index"><span class="cell-text"
|
||||
:title="String(index + 1)">{{ index + 1 }}</span></div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" :title="item.ly">{{
|
||||
item.ly }}</span></div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" :title="item.grw">{{
|
||||
item.grw }}</span></div>
|
||||
<div class="complete-grid-cell complete-col-main"><span class="cell-text" :title="item.wcqk">{{
|
||||
item.wcqk }}</span></div>
|
||||
</div>
|
||||
</template>
|
||||
<div v-else class="complete-grid-empty">暂无数据</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="work-section">
|
||||
<div class="panel-title panel-title-red">每日值班工作</div>
|
||||
<div class="work-table-wrap">
|
||||
<div class="duty-list" :class="{ 'is-empty-list': !dutyWorks.length }">
|
||||
<template v-if="dutyWorks.length">
|
||||
<div class="duty-row" v-for="(row, index) in dutyWorks" :key="index">
|
||||
<div class="duty-col-index"><span class="cell-text">{{ index + 1 }}</span></div>
|
||||
<div class="duty-col-content"><span class="cell-text">{{ row.gznr || "" }}</span></div>
|
||||
</div>
|
||||
</template>
|
||||
<div v-else class="empty-cell">暂无数据</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, reactive, ref, watch } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
const emit = defineEmits(["update:modelValue"]);
|
||||
const closeDialog = () => emit("update:modelValue", false);
|
||||
const weekList = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
|
||||
const pad = (v) => `${v}`.padStart(2, "0");
|
||||
const formatPickerDate = (value) => `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())}`;
|
||||
const getDateByPickerValue = (value) => {
|
||||
if (!value) return new Date();
|
||||
const [year, month, day] = value.split("-").map(Number);
|
||||
return new Date(year, month - 1, day);
|
||||
};
|
||||
|
||||
|
||||
|
||||
const noticeList = ref([]);
|
||||
const completeWorks = ref([]);
|
||||
const dutyWorks = ref([]);
|
||||
|
||||
|
||||
// 查询值班列表
|
||||
const promes = reactive({
|
||||
pageSize: 10,
|
||||
pageCurrent: 1,
|
||||
zbrq: formatPickerDate(new Date())
|
||||
});
|
||||
|
||||
const selectedDate = computed(() => getDateByPickerValue(promes.zbrq));
|
||||
const todayText = computed(() => {
|
||||
const current = selectedDate.value;
|
||||
return `${current.getFullYear()}/${pad(current.getMonth() + 1)}/${pad(current.getDate())}`;
|
||||
});
|
||||
const weekText = computed(() => weekList[selectedDate.value.getDay()]);
|
||||
const formatDateMinute = (value) => `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())} ${pad(value.getHours())}:${pad(value.getMinutes())}:${pad(value.getSeconds())}`;
|
||||
const getSummaryRange = () => {
|
||||
const now = new Date();
|
||||
const end = new Date(selectedDate.value);
|
||||
end.setHours(now.getHours(), now.getMinutes(), now.getSeconds(), 0);
|
||||
const start = new Date(end);
|
||||
start.setDate(start.getDate() - 1);
|
||||
return { start, end };
|
||||
};
|
||||
const summaryDateText = computed(() => {
|
||||
const { start, end } = getSummaryRange();
|
||||
return `${start.getFullYear()}年${start.getMonth() + 1}月${start.getDate()}日${pad(start.getHours())}:${pad(start.getMinutes())}至${end.getFullYear()}年${end.getMonth() + 1}月${end.getDate()}日${pad(end.getHours())}:${pad(end.getMinutes())} `;
|
||||
});
|
||||
|
||||
const total = ref(0);
|
||||
const dutyLoading = ref(false);
|
||||
const dutyLoaded = ref(false);
|
||||
const dutyScrollDisabled = computed(() => dutyLoading.value || (dutyLoaded.value && noticeList.value.length >= total.value));
|
||||
const resetDutyList = () => {
|
||||
noticeList.value = [];
|
||||
total.value = 0;
|
||||
promes.pageCurrent = 1;
|
||||
dutyLoaded.value = false;
|
||||
};
|
||||
const getDutyList = (force = false) => {
|
||||
if (dutyLoading.value) return;
|
||||
if (!force && dutyLoaded.value && noticeList.value.length >= total.value) return;
|
||||
dutyLoading.value = true;
|
||||
qcckGet({ ...promes }, "/mosty-gsxt/gzzbxx/getPageList")
|
||||
.then((res) => {
|
||||
const records = res?.records || [];
|
||||
noticeList.value = promes.pageCurrent === 1 ? records : noticeList.value.concat(records);
|
||||
total.value = Number(res?.total || 0);
|
||||
promes.pageCurrent += 1;
|
||||
})
|
||||
.finally(() => {
|
||||
dutyLoading.value = false;
|
||||
dutyLoaded.value = true;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
const zbData = ref({})
|
||||
// 获取值班列表情况
|
||||
const gzqkGetPageList = () => {
|
||||
const paramsList = {
|
||||
gzrq: promes.zbrq,
|
||||
};
|
||||
qcckGet({ ...paramsList }, "/mosty-gsxt/gzqk/selectList")
|
||||
.then((res) => {
|
||||
zbData.value = res[0] || {};
|
||||
})
|
||||
.finally(() => {
|
||||
});
|
||||
};
|
||||
const gzqkQueryByDate = () => {
|
||||
qcckGet({ date: promes.zbrq }, "/mosty-gsxt/gzqk/queryByDate")
|
||||
.then((res) => {
|
||||
dutyWorks.value = res ? (res.zbgzList || []) : [];
|
||||
completeWorks.value = res ? (res.wcqkList || []) : [];
|
||||
})
|
||||
.finally(() => {
|
||||
});
|
||||
}
|
||||
const warningStats = ref([
|
||||
{ level: "红色预警", personnel: "0", perKey: 'hsrysl', yjContent: '0', className: "dot-red", yjKey: 'hsyjsl' },
|
||||
{ level: "橙色预警", personnel: "0", perKey: 'csrysl', yjContent: '0', className: "dot-orange", yjKey: 'csyjsl' },
|
||||
{ level: "黄色预警", personnel: "0", perKey: 'ysrysl', yjContent: '0', className: "dot-yellow", yjKey: 'ysyjsl' },
|
||||
{ level: "蓝色预警", personnel: "0", perKey: 'lsrysl', yjContent: '0', className: "dot-blue", yjKey: 'lsyjsl' }
|
||||
])
|
||||
|
||||
const feedbackStats = ref([
|
||||
{ name: "按时签收", value: "", key: 'zcqs' },
|
||||
{ name: "按时反馈", value: "", key: 'zcfk' },
|
||||
{ name: "超时签收", value: "", key: 'csqs' },
|
||||
{ name: "超时反馈", value: "", key: 'csfk' }
|
||||
]);
|
||||
// 预警级别
|
||||
const getYjxxTj = () => {
|
||||
const { start, end } = getSummaryRange();
|
||||
qcckPost({ startTime: formatDateMinute(start), endTime: formatDateMinute(end) }, "/mosty-gsxt/tbYjxx/gzqkYjdj")
|
||||
.then((res) => {
|
||||
warningStats.value = warningStats.value.map((item) => {
|
||||
item.personnel = res[item.perKey] || 0;
|
||||
item.yjContent = res[item.yjKey] || 0;
|
||||
return item
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
});
|
||||
}
|
||||
// 反馈情况
|
||||
const getYjCzztTj = () => {
|
||||
const { start, end } = getSummaryRange();
|
||||
qcckPost({ kssj: formatDateMinute(start), jssj: formatDateMinute(end) }, "/mosty-gsxt/tbYjxx/qsfktj")
|
||||
.then((res) => {
|
||||
feedbackStats.value = feedbackStats.value.map((item) => {
|
||||
item.value = res[item.key] || 0;
|
||||
return item
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const loadMoreDuty = () => {
|
||||
getDutyList();
|
||||
};
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
dateChange()
|
||||
}
|
||||
});
|
||||
const dateChange = () => {
|
||||
resetDutyList();
|
||||
getDutyList(true);
|
||||
gzqkGetPageList()
|
||||
gzqkQueryByDate()
|
||||
getYjxxTj()
|
||||
getYjCzztTj()
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.job-log-page {
|
||||
width: 100%;
|
||||
height: 700px;
|
||||
max-height: 700px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #f1f6ff;
|
||||
border: 1px solid #9db6dd;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
height: 44px;
|
||||
line-height: 44px;
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
background: linear-gradient(180deg, #4b96e7 0%, #2f6dbb 100%);
|
||||
margin-bottom: 12px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
|
||||
.top-row {
|
||||
display: grid;
|
||||
grid-template-columns: 300px 300px 1fr;
|
||||
gap: 8px;
|
||||
margin-bottom: 8px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.panel {
|
||||
border: 1px solid #9ab0cf;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.pdDate {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.date-card {
|
||||
display: grid;
|
||||
grid-template-rows: 58px 1fr;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.date-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: linear-gradient(180deg, #d6c75f 0%, #cab84d 100%);
|
||||
}
|
||||
|
||||
.date-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f7f3ad;
|
||||
}
|
||||
|
||||
.date-value {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
color: #3a3a3a;
|
||||
}
|
||||
|
||||
.weekday {
|
||||
margin-top: 2px;
|
||||
font-size: 30px;
|
||||
font-weight: 700;
|
||||
color: #1f1f1f;
|
||||
}
|
||||
|
||||
.calendar-icon {
|
||||
width: 66px;
|
||||
height: 56px;
|
||||
margin-top: 8px;
|
||||
border-radius: 8px;
|
||||
border: 3px solid #005ca7;
|
||||
color: #005ca7;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 30px;
|
||||
background: #fff7cf;
|
||||
}
|
||||
|
||||
.duty-boxes {
|
||||
display: grid;
|
||||
grid-template-rows: 1fr 1fr;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.duty-card {
|
||||
border-radius: 10px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
align-content: center;
|
||||
padding: 8px 10px 7px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
|
||||
.duty-line {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: baseline;
|
||||
gap: 6px;
|
||||
white-space: nowrap;
|
||||
|
||||
}
|
||||
|
||||
.duty-today {
|
||||
background: linear-gradient(180deg, #5aa0ef 0%, #3b7fd1 100%);
|
||||
}
|
||||
|
||||
.duty-tomorrow {
|
||||
background: linear-gradient(180deg, #ed7070 0%, #ce4242 100%);
|
||||
}
|
||||
|
||||
.duty-card .label {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.duty-card .value {
|
||||
font-size: 16px;
|
||||
line-height: 1.1;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.duty-card .phone {
|
||||
margin-top: 2px;
|
||||
font-size: 16px;
|
||||
line-height: 1.15;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.summary-card {
|
||||
padding: 0 10px 8px;
|
||||
}
|
||||
|
||||
.summary-head {
|
||||
height: 38px;
|
||||
line-height: 38px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
color: #655825;
|
||||
background: #f5ed8d;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.summary-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
border: 1px solid #d9d9d9;
|
||||
}
|
||||
|
||||
.grid-item {
|
||||
border-right: 1px solid #d9d9d9;
|
||||
}
|
||||
|
||||
.grid-item:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.grid-title {
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
.stat-list,
|
||||
.feedback-list {
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
.stat-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 18px;
|
||||
margin-bottom: 2px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.stat-line .dot {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 50%;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.stat-line .name {
|
||||
width: 98px;
|
||||
}
|
||||
|
||||
.dot-red {
|
||||
background: #ff4d4f;
|
||||
}
|
||||
|
||||
.dot-orange {
|
||||
background: #ff9f43;
|
||||
}
|
||||
|
||||
.dot-yellow {
|
||||
background: #f6d34d;
|
||||
}
|
||||
|
||||
.dot-blue {
|
||||
background: #4a90e2;
|
||||
}
|
||||
|
||||
.feedback-line {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 18px;
|
||||
margin-bottom: 3px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.bottom-row {
|
||||
display: grid;
|
||||
grid-template-columns: 300px 1fr;
|
||||
gap: 8px;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.panel-title {
|
||||
height: 60px;
|
||||
line-height: 60px;
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
border-bottom: 1px solid #99abcb;
|
||||
}
|
||||
|
||||
.panel-title-yellow {
|
||||
background: #f5ed8d;
|
||||
color: #2d2d2d;
|
||||
}
|
||||
|
||||
.panel-title-blue {
|
||||
background: #5ea3ef;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.panel-title-red {
|
||||
background: #de4d5e;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.notice-panel {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.notice-list {
|
||||
flex: 1;
|
||||
padding: 6px;
|
||||
font-size: 14px;
|
||||
color: #1d5d97;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.notice-table-title {
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
color: inherit;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.notice-head,
|
||||
.notice-item {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1.4fr;
|
||||
gap: 4px;
|
||||
padding: 4px 2px;
|
||||
border-bottom: 1px dashed #d8d8d8;
|
||||
color: inherit;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notice-head {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.notice-empty {
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.table-panel {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.work-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 3fr 2fr;
|
||||
gap: 8px;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.work-grid>div {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.work-section {
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.work-table-wrap {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.complete-grid {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-left: 1px solid #9bacca;
|
||||
border-top: 1px solid #9bacca;
|
||||
}
|
||||
|
||||
.complete-grid-row {
|
||||
display: grid;
|
||||
grid-template-columns: 12% 29.33% 29.33% 29.33%;
|
||||
min-height: 40px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.complete-grid-cell {
|
||||
border-right: 1px solid #9bacca;
|
||||
border-bottom: 1px solid #9bacca;
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.complete-grid-head .complete-grid-cell {
|
||||
background: #f1f5fe;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.complete-col-index {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.complete-col-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.is-empty-grid .complete-grid-empty {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.complete-grid-empty {
|
||||
border-right: 1px solid #9bacca;
|
||||
border-bottom: 1px solid #9bacca;
|
||||
min-height: 70px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #8a8a8a;
|
||||
}
|
||||
|
||||
.work-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 15px;
|
||||
table-layout: fixed;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.work-table th,
|
||||
.work-table td {
|
||||
border: 1px solid #9bacca;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.complete-row {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.empty-cell {
|
||||
height: 100%;
|
||||
min-height: 70px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #8a8a8a;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.is-empty-table tbody {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.is-empty-table tbody tr {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.cell-text {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.col-index {
|
||||
width: 12%;
|
||||
}
|
||||
|
||||
.col-main {
|
||||
width: 29.33%;
|
||||
}
|
||||
|
||||
.work-table thead th {
|
||||
background: #f1f5fe;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.index-cell {
|
||||
width: 40px;
|
||||
background: #f8f8f8;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.duty-list {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-left: 1px solid #9bacca;
|
||||
border-top: 1px solid #9bacca;
|
||||
}
|
||||
|
||||
.duty-row {
|
||||
display: grid;
|
||||
grid-template-columns: 40px 1fr 40px 1fr;
|
||||
min-height: 40px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.duty-col-index,
|
||||
.duty-col-content {
|
||||
border-right: 1px solid #9bacca;
|
||||
border-bottom: 1px solid #9bacca;
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.duty-col-index {
|
||||
background: #f8f8f8;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.duty-col-content {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.is-empty-list {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.is-empty-list .empty-cell {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-right: 1px solid #9bacca;
|
||||
border-bottom: 1px solid #9bacca;
|
||||
}
|
||||
|
||||
:deep(.el-dialog__body) {
|
||||
padding: 10px 12px;
|
||||
}
|
||||
|
||||
.num {
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
198
src/views/home/dialog/jqXq.vue
Normal file
198
src/views/home/dialog/jqXq.vue
Normal file
@ -0,0 +1,198 @@
|
||||
<template>
|
||||
<DialogDragger title="警情详情" top="150px" v-model="props.show" @close="closeDialog">
|
||||
<div class="jqxq-wrap">
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警人名称</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjrmc") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警电话用户名</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjdhyhm") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警电话</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjdh") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警人证件号码</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjrzjhm") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警时间</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjsj") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警电话用户地址</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjdhyhdz") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">报警地址</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjdz") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警单编号</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjdbh") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警单位名称</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjdwmc") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警完成时间</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjwcsj") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警员编号</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjybh") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警员姓名</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjyxm") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警录音号</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjlyh") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">接警时间</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jjsj") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情颜色</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqdjdm", D_GS_SSYJ) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">管辖单位名称</div>
|
||||
<div class="jqxq-value">{{ fieldValue("gxdwmc") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">单位名称</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jcjxtjsdwmc") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情类别</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqlbdm", JQLB) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情类型</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqlxdm", JQLX) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情来源</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqlyfs", D_BZ_JQLY) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情细类</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqxldm", JQXL) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">警情子类</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqzldm", JQZL) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">警情地址</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqdz") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">报警内容</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bjnr") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">警情标签</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jqbq", D_BZ_JQBQ) }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">补充接警内容</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bcjjnr") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">被困人员情况说明</div>
|
||||
<div class="jqxq-value">{{ fieldValue("bkryqksm") }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</DialogDragger>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, getCurrentInstance } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import DialogDragger from "@/views/home/layout/dialogDragger.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { JQLB, JQLX, JQXL, JQZL, D_BZ_JQLY, D_BZ_JQBQ, D_GS_SSYJ } = proxy.$dict("JQLB", "JQLX", "JQXL", "JQZL", "D_BZ_JQLY", "D_BZ_JQBQ", "D_GS_SSYJ");
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
zbData: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}, show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}, data: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const detailData = computed(() => (Array.isArray(props.data) ? (props.data[0] || {}) : (props.data || {})));
|
||||
const getOptionLabel = (options, value) => {
|
||||
if (!Array.isArray(options) || !options.length) return `${value}`;
|
||||
const match = options.find((item) => {
|
||||
const values = [item.value, item.dictValue, item.dictCode, item.code, item.key];
|
||||
return values.some((v) => `${v}` === `${value}`);
|
||||
});
|
||||
if (!match) return `${value}`;
|
||||
const label = match.label || match.dictLabel || match.name || match.text;
|
||||
return label === undefined || label === null || label === "" ? `${value}` : label;
|
||||
};
|
||||
const formatValue = (raw, options) => {
|
||||
if (raw === undefined || raw === null || raw === "") return "--";
|
||||
if (options) return getOptionLabel(options, raw);
|
||||
return `${raw}`;
|
||||
};
|
||||
const fieldValue = (prop, options) => formatValue(detailData.value[prop], options);
|
||||
const closeDialog = () => {
|
||||
emitter.emit("showJqXq", false);
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.jqxq-wrap {
|
||||
max-height: 70vh;
|
||||
overflow: auto;
|
||||
padding: 8px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.jqxq-row {
|
||||
display: grid;
|
||||
grid-template-columns: 160px 1fr;
|
||||
border: 1px solid #d8e4f0;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.jqxq-row.is-full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.jqxq-label {
|
||||
padding: 8px 10px;
|
||||
background: #eef4fb;
|
||||
color: #315a86;
|
||||
border-right: 1px solid #d8e4f0;
|
||||
font-weight: 600;
|
||||
word-break: break-all;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.jqxq-value {
|
||||
padding: 10px;
|
||||
color: #1f2d3d;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
@ -5,6 +5,8 @@
|
||||
<!-- 预警信息弹框 -->
|
||||
<Home_YJ v-if="isShow.showYj" :show="isShow.showYj" :data="list.Info_YJ" />
|
||||
<PopupWarning v-if="isShow.showWarning" :show="isShow.showWarning" :data="list.Info_Warning" />
|
||||
<jqXq v-if="isShow.showJqXq" :show="isShow.showJqXq" :data="list.Info_JqXq" />
|
||||
<zdsjXq v-if="isShow.showZdsjXq" :show="isShow.showZdsjXq" :data="list.Info_ZdsjXq" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -14,15 +16,21 @@ import Home_YJ from "./components/home_yj.vue";
|
||||
import PopupWarning from './components/popupWarning'
|
||||
import Intelligence from "@/views/home/model/mesgSwitch/intelligence.vue";
|
||||
import { ref, onMounted, onUnmounted, reactive, getCurrentInstance } from "vue";
|
||||
import jqXq from "./jqXq.vue";
|
||||
import zdsjXq from "./zdsjXq.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const isShow = ref({
|
||||
showYj: false, //预警弹窗
|
||||
showWarning: false, //预警弹窗
|
||||
showQbsb: false, //情报上报列表弹窗
|
||||
showJqXq: false,
|
||||
showZdsjXq: false,
|
||||
});
|
||||
const list = reactive({
|
||||
Info_YJ: [], //预警数据
|
||||
Info_Warning: [],
|
||||
Info_JqXq: [],
|
||||
Info_ZdsjXq: [],
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
@ -40,10 +48,23 @@ onMounted(() => {
|
||||
emitter.on("lookQbsbList", (res) => {
|
||||
isShow.value.showQbsb = res ? true : false;
|
||||
});
|
||||
// 展示警情详情
|
||||
emitter.on("showJqXq", (res) => {
|
||||
isShow.value.showJqXq = res ? true : false;
|
||||
if (res) list.Info_JqXq = res;
|
||||
});
|
||||
// 展示处置信息详情
|
||||
emitter.on("showZdsjXq", (res) => {
|
||||
isShow.value.showZdsjXq = res ? true : false;
|
||||
if (res) list.Info_ZdsjXq = res;
|
||||
});
|
||||
});
|
||||
onUnmounted(() => {
|
||||
emitter.off("showHomeYJ");
|
||||
emitter.off("showHomeWarning");
|
||||
emitter.off("lookQbsbList");
|
||||
emitter.off("showJqXq");
|
||||
emitter.off("showZdsjXq");
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
108
src/views/home/dialog/zdsjLod.vue
Normal file
108
src/views/home/dialog/zdsjLod.vue
Normal file
@ -0,0 +1,108 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="60%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height: 650px;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
<div style="display: flex;justify-content: flex-end;">
|
||||
<el-button type="primary" style="margin-left: 10px;" @click="drawShape()">选择坐标</el-button>
|
||||
</div>
|
||||
<div style="height: 300px;width: 96%; position: absolute;">
|
||||
<GdMap :mapid="'map-92'" v-if="showMap"></GdMap>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { ref, reactive, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
zbData: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const emit = defineEmits(["update:modelValue",]);
|
||||
const title = ref("新增重点事件");
|
||||
const formData = ref([]);
|
||||
const rules = reactive({
|
||||
sjbt: [{ required: true, message: "请输入事件标题", trigger: "blur" }],
|
||||
shms: [{ required: true, message: "请输入事件描述", trigger: "blur" }],
|
||||
jd: [{ required: true, message: "请输入经度", trigger: "blur" }],
|
||||
wd: [{ required: true, message: "请输入纬度", trigger: "blur" }],
|
||||
});
|
||||
const showMap = ref(false)
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
formData.value = [
|
||||
{ label: "事件标题", prop: "sjbt", type: "input" },
|
||||
// { label: "事件描述", prop: "shms", type: "input" },
|
||||
{ label: "事件性质", prop: "sjxz", type: "input" },
|
||||
{ label: "事件地址", prop: "sjdz", type: "input" },
|
||||
|
||||
// { label: "事件状态", prop: "sjzt", type: "select", options: props.dict.D_BZ_ZDSJCZJG },
|
||||
{ label: "事发时间", prop: "fssj", type: "datetime" },
|
||||
{ label: "事件描述", prop: "shms", type: "textarea", width: "100%" },
|
||||
{ label: "处置结果", prop: "czjg", type: "textarea", width: "100%" },
|
||||
{ label: "经度", prop: "jd", type: "input", disabled: true },
|
||||
{ label: "纬度", prop: "wd", type: "input", disabled: true },
|
||||
]
|
||||
setTimeout(() => {
|
||||
showMap.value = true
|
||||
}, 1000);
|
||||
}
|
||||
})
|
||||
const drawShape = () => {
|
||||
emitter.emit("drawShape", {
|
||||
flag: "zdsj",
|
||||
type: "point",
|
||||
isclear: true
|
||||
});
|
||||
}
|
||||
watch(() => props.zbData, (newVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value.jd = newVal[0]
|
||||
listQuery.value.wd = newVal[1]
|
||||
}
|
||||
}, { deep: true })
|
||||
const closeDialog = () => {
|
||||
showMap.value = false
|
||||
elform.value.reset()
|
||||
// 关闭对话框时移除事件监听器
|
||||
emit("update:modelValue", false);
|
||||
};
|
||||
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
qcckPost({ ...listQuery.value }, '/mosty-gsxt/zdsj/addEntity').then(res => {
|
||||
console.log(res);
|
||||
proxy.$message.success("新增成功");
|
||||
emit("update:modelValue", false);
|
||||
})
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
109
src/views/home/dialog/zdsjXq.vue
Normal file
109
src/views/home/dialog/zdsjXq.vue
Normal file
@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<DialogDragger title="重点事件详情" top="150px" v-model="props.show" @close="closeDialog">
|
||||
<div class="jqxq-wrap">
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">事件标题</div>
|
||||
<div class="jqxq-value">{{ fieldValue("sjbt") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">事件性质</div>
|
||||
<div class="jqxq-value">{{ fieldValue("sjxz") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">事件地址</div>
|
||||
<div class="jqxq-value">{{ fieldValue("sjdz") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">事发时间</div>
|
||||
<div class="jqxq-value">{{ fieldValue("fssj") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">经度</div>
|
||||
<div class="jqxq-value">{{ fieldValue("jd") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row">
|
||||
<div class="jqxq-label">纬度</div>
|
||||
<div class="jqxq-value">{{ fieldValue("wd") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">事件描述</div>
|
||||
<div class="jqxq-value">{{ fieldValue("shms") }}</div>
|
||||
</div>
|
||||
<div class="jqxq-row is-full">
|
||||
<div class="jqxq-label">处置结果</div>
|
||||
<div class="jqxq-value">{{ fieldValue("czjg") }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</DialogDragger>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, getCurrentInstance } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import DialogDragger from "@/views/home/layout/dialogDragger.vue";
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
zbData: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}, show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}, data: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const detailData = computed(() => (Array.isArray(props.data) ? (props.data[0] || {}) : (props.data || {})));
|
||||
const formatValue = (raw) => {
|
||||
if (raw === undefined || raw === null || raw === "") return "--";
|
||||
return `${raw}`;
|
||||
};
|
||||
const fieldValue = (prop) => formatValue(detailData.value[prop]);
|
||||
const closeDialog = () => {
|
||||
emitter.emit("showZdsjXq", false);
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.jqxq-wrap {
|
||||
max-height: 70vh;
|
||||
overflow: auto;
|
||||
padding: 8px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.jqxq-row {
|
||||
display: grid;
|
||||
grid-template-columns: 160px 1fr;
|
||||
border: 1px solid #d8e4f0;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.jqxq-row.is-full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.jqxq-label {
|
||||
padding: 8px 10px;
|
||||
background: #eef4fb;
|
||||
color: #315a86;
|
||||
border-right: 1px solid #d8e4f0;
|
||||
font-weight: 600;
|
||||
word-break: break-all;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.jqxq-value {
|
||||
padding: 10px;
|
||||
color: #1f2d3d;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div class="homeBox" style="background-color: #07274d;">
|
||||
<div class="homeBox">
|
||||
<!-- 头部 -->
|
||||
|
||||
<Head></Head>
|
||||
<!-- 左边 -->
|
||||
<div class="home-aside asideL">
|
||||
@ -10,20 +11,20 @@
|
||||
<div class="asideL-Bottom">
|
||||
<div class="commom-aside">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="modelQbsb" class="flip-wrapper">
|
||||
<QbsbCount @change="modelQbsb = !modelQbsb"></QbsbCount>
|
||||
</div>
|
||||
<div :key="'text'" v-else class="flip-wrapper">
|
||||
<Statistics @change="modelQbsb = !modelQbsb" />
|
||||
</div>
|
||||
</transition>
|
||||
<div :key="'qb'" v-if="modelQbsb" class="flip-wrapper">
|
||||
<QbsbCount @change="modelQbsb = !modelQbsb"></QbsbCount>
|
||||
</div>
|
||||
<div :key="'text'" v-else class="flip-wrapper">
|
||||
<Statistics @change="modelQbsb = !modelQbsb" />
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
<div class="commom-aside">
|
||||
<!-- <KeyPpersonneltypes /> -->
|
||||
<MyCase/>
|
||||
<MyCase />
|
||||
</div>
|
||||
<div class="commom-aside" @mouseenter="mouseEnter" @mouseleave="mouseLeave" >
|
||||
<div style="position: relative; height: 100%;">
|
||||
<div class="commom-aside" @mouseenter="mouseEnter" @mouseleave="mouseLeave">
|
||||
<div class="relative-full-height">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="reversalPushShow" class="flip-wrapper">
|
||||
<QblyType @reversalPush="reversalPush"></QblyType>
|
||||
@ -42,14 +43,14 @@
|
||||
<Calendar />
|
||||
</div>
|
||||
<div class="commom-aside-big" @mouseenter="mouseEnter" @mouseleave="mouseLeave">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="reversalShow" class="flip-wrapper">
|
||||
<Experience @reversalPush="reversal"></Experience>
|
||||
</div>
|
||||
<div :key="'text'" v-else class="flip-wrapper">
|
||||
<KeyPpersonneltypes @reversalPush="reversal"></KeyPpersonneltypes>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="reversalShow" class="flip-wrapper">
|
||||
<Experience @reversalPush="reversal"></Experience>
|
||||
</div>
|
||||
<div :key="'text'" v-else class="flip-wrapper">
|
||||
<KeyPpersonneltypes @reversalPush="reversal"></KeyPpersonneltypes>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
<div class="commom-aside-small">
|
||||
<!-- <SituationAssessment /> -->
|
||||
@ -58,29 +59,43 @@
|
||||
</div>
|
||||
<!-- 中间 -->
|
||||
<div class="home-center">
|
||||
<div class="middle-top"><Yszs /></div>
|
||||
<div class="middle-top">
|
||||
<Yszs />
|
||||
</div>
|
||||
<div class="flex middle-bottom mt10">
|
||||
<div style="width: 30px;position: absolute;z-index: 100;left: 0;background-color: #07274d;height: 30px;text-align: center;line-height:30px;">
|
||||
<div class="icon-button audio-button">
|
||||
<el-icon :size="20" v-if="ispLayBack" @click="closeLayBack">
|
||||
<Bell />
|
||||
</el-icon>
|
||||
<el-icon :size="20" v-else @click="ispLayBack=true">
|
||||
<el-icon :size="20" v-else @click="ispLayBack = true">
|
||||
<MuteNotification />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div style="width: 30px;position: absolute;z-index: 100;left: 34px;background-color: #07274d;height: 30px;text-align: center;line-height:30px;">
|
||||
<div class="icon-button notification-button">
|
||||
<el-tooltip class="item" effect="dark" :content="showNotification ? '通知关闭' : '通知打开'" placement="bottom">
|
||||
<el-icon :size="20" @click="handleOpenNotification" style="top: 3px;">
|
||||
<Open v-if="showNotification" />
|
||||
<TurnOff v-else />
|
||||
<el-icon :size="20" @click="handleOpenNotification" class="icon-top">
|
||||
<Open v-if="showNotification" />
|
||||
<TurnOff v-else />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<div class="flex" style="position: absolute;z-index: 100;left: 70px;background-color: #07274d;height: 30px;text-align: center;line-height:30px;">
|
||||
<div style="width: 30px;">
|
||||
<el-icon :size="20" @click="showSeatch = !showSeatch" style="top: 3px;"><Search /></el-icon>
|
||||
<div class="icon-button map-button" @click="mapNavigationShowOk">
|
||||
<el-icon :size="20">
|
||||
<Rank />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="icon-button job-button" @click="jobLogShowOpen">
|
||||
<el-icon :size="20">
|
||||
<Message />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="search-container">
|
||||
<div class="search-icon">
|
||||
<el-icon :size="20" @click="showSeatch = !showSeatch" class="icon-top">
|
||||
<Search />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div :style="{'width': showSeatch ? '270px' : '0'}" class="trnsitinForm">
|
||||
<div :style="{ 'width': showSeatch ? '270px' : '0' }" class="trnsitinForm">
|
||||
<el-input v-model="searchText" placeholder="请输入身份证" clearable>
|
||||
<template #append>
|
||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
||||
@ -89,25 +104,25 @@
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
</div>
|
||||
<div style="width: 100%;border: 1px sienna;position: relative">
|
||||
<GdMap></GdMap>
|
||||
<div class="map-container">
|
||||
<GdMap :mapid="'map-91'"></GdMap>
|
||||
</div>
|
||||
<div class="flex-1" style="width: 340px;position: absolute;z-index: 100;right: 0;">
|
||||
<div class="deploy-control">
|
||||
<DeployControl />
|
||||
</div>
|
||||
<div class="flex-1" style="width: 340px;position: absolute;z-index: 100;left: 0;top: 30%;">
|
||||
<div class="general-window">
|
||||
<GeneralWindow />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 底部 -->
|
||||
<div class="home-foot-t">
|
||||
<div style="width: 33%;">
|
||||
<div class="foot-item">
|
||||
<!-- <WarningDistrict></WarningDistrict> -->
|
||||
<WarningPoints></WarningPoints>
|
||||
</div>
|
||||
<div style="width: 33%;">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div class="foot-item">
|
||||
<transition name="flip" mode="out-in">
|
||||
<div :key="'qb'" v-if="modelWarning" class="flip-wrapper">
|
||||
<SevenWarning @changeModel="changeModel"></SevenWarning>
|
||||
<!-- <WarningLevels @changeModel="changeModel"></WarningLevels> -->
|
||||
@ -115,9 +130,9 @@
|
||||
<div :key="'text'" v-else class="flip-wrapper">
|
||||
<BkWarning @changeModel="changeModel"></BkWarning>
|
||||
</div>
|
||||
</transition>
|
||||
</transition>
|
||||
</div>
|
||||
<div style="width: 33%;">
|
||||
<div class="foot-item">
|
||||
<Bkcz></Bkcz>
|
||||
</div>
|
||||
</div>
|
||||
@ -129,12 +144,13 @@
|
||||
<PeoDialog ref="peoDialogRef"></PeoDialog>
|
||||
<!-- 权限申请 -->
|
||||
<QxsqDialog />
|
||||
<JobLog v-model="jobLogShow" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import QxsqDialog from './components/qxsqDialog.vue'
|
||||
import { qcckGet ,qcckPost} from "@/api/qcckApi.js";
|
||||
import { ref, onMounted, onUnmounted,getCurrentInstance } from 'vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { ref, onMounted, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import PeoDialog from './components/peoDialog.vue'
|
||||
import LeftDialog from './dialog/leftDialog'
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
@ -166,6 +182,9 @@ import MyCase from './model/myCase.vue'
|
||||
// 导入音频播放器工具类
|
||||
import audioPlayer from '@/utils/audioPlayer'
|
||||
import TestDiv from "@/components/common/TestDiv.vue";
|
||||
import router from '../../router';
|
||||
import JobLog from './dialog/jobLog.vue'
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const modelWarning = ref(true)
|
||||
const modelQbsb = ref(true)
|
||||
@ -193,7 +212,7 @@ const changeXzqh = (val, trg) => {
|
||||
type: "Polygon",
|
||||
coordinates: [area] // 确保格式正确
|
||||
},
|
||||
properties: { },
|
||||
properties: {},
|
||||
type: "Feature"
|
||||
}))
|
||||
// 循环为每个区域创建单独的多边形,这样可以设置不同的样式
|
||||
@ -272,11 +291,11 @@ const getDepId = () => {
|
||||
const handleOpenNotification = () => {
|
||||
clearInterval(popupTimer.value)
|
||||
showNotification.value = !showNotification.value;
|
||||
emitter.emit('deletePointArea','hm_pop')
|
||||
if(showNotification.value){
|
||||
emitter.emit('deletePointArea', 'hm_pop')
|
||||
if (showNotification.value) {
|
||||
// 主动展开提示,默认展示所有
|
||||
allDep.value.forEach(item => {
|
||||
emitter.emit("makerPopup", { data:item, flag: "hm_pop",type:'Custom'});
|
||||
emitter.emit("makerPopup", { data: item, flag: "hm_pop", type: 'Custom' });
|
||||
})
|
||||
} else {
|
||||
// 关闭主动展开后,恢复循环单条气泡展示
|
||||
@ -289,7 +308,7 @@ const makerCenter = () => {
|
||||
qcckGet({}, '/mosty-gsxt/lzJcjPjdb/selectCountNew').then(res => {
|
||||
let list = res || [];
|
||||
allDep.value = list;
|
||||
emitter.emit("addPointArea", { coords:list, icon: dw, flag: "hm", size: '14px', showTitle: false, offset: [0, -25] });
|
||||
emitter.emit("addPointArea", { coords: list, icon: dw, flag: "hm", size: '14px', showTitle: false, offset: [0, -25] });
|
||||
})
|
||||
|
||||
}
|
||||
@ -319,8 +338,8 @@ const startPopupLoop = () => {
|
||||
clearInterval(popupTimer.value)
|
||||
popupTimer.value = setInterval(() => {
|
||||
if (!showNotification.value && allDep.value.length > 0) {
|
||||
emitter.emit('deletePointArea','hm_pop')
|
||||
emitter.emit("makerPopup", { data: allDep.value[indexNum.value], flag: "hm_pop", type:'Custom' })
|
||||
emitter.emit('deletePointArea', 'hm_pop')
|
||||
emitter.emit("makerPopup", { data: allDep.value[indexNum.value], flag: "hm_pop", type: 'Custom' })
|
||||
indexNum.value = (indexNum.value + 1) % allDep.value.length
|
||||
}
|
||||
}, 10000)
|
||||
@ -328,8 +347,8 @@ const startPopupLoop = () => {
|
||||
|
||||
// 搜索
|
||||
const handleSearch = () => {
|
||||
if(!searchText.value) return proxy.$message.warning('请输入身份证号');
|
||||
qcckPost({ rysfzh: searchText.value },'/mosty-gsxt/tbYjxx/getPageAllList').then(res => {
|
||||
if (!searchText.value) return proxy.$message.warning('请输入身份证号');
|
||||
qcckPost({ rysfzh: searchText.value }, '/mosty-gsxt/tbYjxx/getPageAllList').then(res => {
|
||||
peoDialogRef.value.init(res.records || [])
|
||||
})
|
||||
}
|
||||
@ -340,7 +359,7 @@ const getTbYjxxGetList = () => {
|
||||
const today = new Date();
|
||||
const startTime = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0).getTime();
|
||||
const endTime = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59).getTime();
|
||||
const promes = { startTime:timeValidate(startTime), endTime:timeValidate(endTime), }
|
||||
const promes = { startTime: timeValidate(startTime), endTime: timeValidate(endTime), }
|
||||
tbYjxxGetList(promes).then(res => {
|
||||
const coords = res.map(item => {
|
||||
return { id: item.id, jd: item.jd, wd: item.wd, yjtp: item.yjTp, yjnr: item.yjNr, yjLx: item.yjlx, yjlx: '01', yjsj: item.yjSj, rysfzh: item.yjRysfzh, ryxm: item.yjRyxm }
|
||||
@ -355,7 +374,7 @@ const reversalPush = () => {
|
||||
// 移除clearInterval调用,避免定时器被清除
|
||||
}
|
||||
|
||||
const reversal= () => {
|
||||
const reversal = () => {
|
||||
reversalShow.value = !reversalShow.value
|
||||
// 移除clearInterval调用,避免定时器被清除
|
||||
}
|
||||
@ -377,7 +396,7 @@ const mouseLeave = () => {
|
||||
}, 30000)
|
||||
}
|
||||
|
||||
function changeModel(){
|
||||
function changeModel() {
|
||||
modelWarning.value = !modelWarning.value
|
||||
}
|
||||
|
||||
@ -385,9 +404,9 @@ function changeModel(){
|
||||
onMounted(() => {
|
||||
getDepId()
|
||||
makerCenter()
|
||||
bnTimer.value = setInterval(()=>{
|
||||
bnTimer.value = setInterval(() => {
|
||||
makerCenter()
|
||||
},60000)
|
||||
}, 60000)
|
||||
startPopupLoop()
|
||||
mouseLeave()
|
||||
getTbYjxxGetList()
|
||||
@ -425,7 +444,6 @@ onMounted(() => {
|
||||
audioPlayer.pause()
|
||||
})
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
clearInterval(timing.value)
|
||||
clearInterval(bnTimer.value)
|
||||
@ -433,10 +451,101 @@ onUnmounted(() => {
|
||||
// 组件卸载时停止音频播放并释放资源
|
||||
if (audioPlayer) audioPlayer.destroy();
|
||||
})
|
||||
|
||||
const mapNavigationShowOk = () => {
|
||||
router.push({ path: '/mapNavigation' })
|
||||
}
|
||||
|
||||
// 岗位日志
|
||||
const jobLogShow = ref(false)
|
||||
const jobLogShowOpen = () => {
|
||||
jobLogShow.value = true
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/assets/css/homeScreen.scss";
|
||||
|
||||
.homeBox {
|
||||
background-color: #07274d;
|
||||
}
|
||||
|
||||
.relative-full-height {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.icon-button {
|
||||
width: 30px;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
background-color: #07274d;
|
||||
height: 30px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.audio-button {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.notification-button {
|
||||
left: 34px;
|
||||
}
|
||||
|
||||
.map-button {
|
||||
left: 105px;
|
||||
}
|
||||
|
||||
.job-button {
|
||||
left: 140px;
|
||||
}
|
||||
|
||||
.search-container {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
left: 70px;
|
||||
background-color: #07274d;
|
||||
height: 30px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.icon-top {
|
||||
position: relative;
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.map-container {
|
||||
width: 100%;
|
||||
border: 1px solid sienna;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.deploy-control {
|
||||
width: 340px;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.general-window {
|
||||
width: 340px;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
left: 0;
|
||||
top: 30%;
|
||||
}
|
||||
|
||||
.foot-item {
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
.fxq {
|
||||
border-radius: 35px;
|
||||
width: 35px;
|
||||
@ -445,6 +554,7 @@ onUnmounted(() => {
|
||||
transform-origin: left center;
|
||||
overflow: hidden;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -469,24 +579,30 @@ onUnmounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fxq2 {
|
||||
background-color: #9d88f9;
|
||||
}
|
||||
|
||||
.fxq1:hover {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.fxq2:hover {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.fxq3:hover {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
::v-deep .badge-top-left .el-badge__content {
|
||||
top: 0;
|
||||
right: auto;
|
||||
left: -10px;
|
||||
transform: translateY(-50%) translateX(-50%);
|
||||
}
|
||||
|
||||
.badge-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -497,9 +613,11 @@ onUnmounted(() => {
|
||||
min-height: 45px;
|
||||
/* 确保收缩时有足够空间显示第一个图标 */
|
||||
}
|
||||
|
||||
.badge-content:not(.expanded) {
|
||||
max-height: 45px;
|
||||
}
|
||||
|
||||
/* 收缩时只显示第一个图标,隐藏其他内容 */
|
||||
.badge-content:not(.expanded)> :not(:first-child) {
|
||||
opacity: 0;
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
<div class="flex align-center">
|
||||
<img class="mr10" src="@/assets/images/icon_046.png" alt="" />
|
||||
<div class="f14 user-info">
|
||||
<div :style="{color:isRed ? '#ff5500' : '#fff',fontWeight:isRed ? 'bold' : 'normal'}">{{ userName }}</div>
|
||||
<div :style="{ color: isRed ? '#ff5500' : '#fff', fontWeight: isRed ? 'bold' : 'normal' }">{{ userName }}</div>
|
||||
<div class="dept-text" :title="dept">{{ dept }}</div>
|
||||
</div>
|
||||
|
||||
@ -132,6 +132,9 @@ const props = defineProps({
|
||||
type: {
|
||||
type: String,
|
||||
default: ''
|
||||
}, defDay: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
});
|
||||
const wekendays = ref([
|
||||
@ -171,7 +174,7 @@ onMounted(() => {
|
||||
});
|
||||
/** 获取名字是否标红 */
|
||||
function getIsRed() {
|
||||
getUserIsRed().then(res=>{
|
||||
getUserIsRed().then(res => {
|
||||
isRed.value = res === true
|
||||
})
|
||||
}
|
||||
@ -189,7 +192,13 @@ const handleBtns = (val) => {
|
||||
router.push("/ResearchHome");
|
||||
break;
|
||||
case "后台":
|
||||
router.push("/YjData");
|
||||
if (props.defDay) {
|
||||
router.push("/YjData");
|
||||
} else {
|
||||
router.push("/");
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case "安全监控":
|
||||
router.push("/resourceMonitoring");
|
||||
|
||||
635
src/views/home/model/mapNavigation.vue
Normal file
635
src/views/home/model/mapNavigation.vue
Normal file
@ -0,0 +1,635 @@
|
||||
<template>
|
||||
<div class="homeBox">
|
||||
<!-- <div class="header">
|
||||
<div class="title">
|
||||
<el-icon><Map /></el-icon>
|
||||
地图导航
|
||||
</div>
|
||||
<div class="close-button" @click="close">
|
||||
<el-icon>
|
||||
<Close />
|
||||
</el-icon>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<Head :defDay="false"></Head>
|
||||
<div class="map-container">
|
||||
<GdMap :mapid="'map-99'"></GdMap>
|
||||
<div class="button-container">
|
||||
<template v-for="(value, index) in butList" :key="index">
|
||||
<el-popover v-if="value.label === '警情' && value.onChage" placement="top" :width="200" trigger="hover">
|
||||
<template #reference>
|
||||
<div class="but" :class="{ 'butOk': value.onChage }" @click="changeBut(value)">
|
||||
{{ value.label }}
|
||||
</div>
|
||||
</template>
|
||||
<div class="jqdj-popover">
|
||||
<el-checkbox-group v-model="jqdjdmFilter" @change="handleJqdjFilterChange">
|
||||
<el-checkbox v-for="item in D_BZ_JQDJ" :key="item.dm" :label="item.dm">
|
||||
{{ item.zdmc }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
</el-popover>
|
||||
<div v-else class="but" :class="{ 'butOk': value.onChage }" @click="changeBut(value)">
|
||||
{{ value.label }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list">
|
||||
<div class="titel">
|
||||
<div class="levelOneAlert">{{ listTitle }}</div>
|
||||
<div class="switchover" @click="change">切换</div>
|
||||
</div>
|
||||
<div class="search">
|
||||
<div class="jqdj-filter" v-if="changeState">
|
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange">
|
||||
全选
|
||||
</el-checkbox>
|
||||
<el-checkbox-group v-model="selectedJqdj" @change="handleCheckedChange">
|
||||
<el-checkbox v-for="item in D_BZ_JQDJ" :key="item.dm" :label="item.dm">
|
||||
{{ item.zdmc }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
<div>
|
||||
<el-input v-model="promes.jjdbh" :placeholder="changeState ? '输入接警单编号' : '输入事件标题'" class="input-with-select"
|
||||
clearable />
|
||||
<el-button class="button-model" type="primary" @click="search">搜索</el-button>
|
||||
<el-button type="success" :icon="Plus" @click="changeChooseShow" v-if="!changeState" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="dataList" v-infinite-scroll="loadMore" infinite-scroll-disabled="loading"
|
||||
infinite-scroll-distance="10">
|
||||
|
||||
<template v-if="changeState">
|
||||
<div class="item" v-for="(item, index) in jqList" :key="index" @click="clickJq(item)">
|
||||
<div class="data-title">接警单:{{ item.jjdbh }}</div>
|
||||
<div class="data-row">
|
||||
<div class="data-title">报警人:{{ item.bjrmc }}</div>
|
||||
<div class="data-title">报警电话:{{ item.bjdh }}</div>
|
||||
</div>
|
||||
<div class="data-row">
|
||||
<div class="data-title data-row">
|
||||
警情等级:
|
||||
<DictTag :tag="false" color="red" :value="item.jqdjdm" :options="D_GS_BQ_DJ" />
|
||||
</div>
|
||||
<div class="data-title data-row">警情类别:
|
||||
<DictTag :tag="false" :value="item.jqlbdm" :options="JQLB" color="#fff" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="data-title content">报警内容:{{ item.bjnr }}</div>
|
||||
<div class="data-title">报警时间:{{ item.bjsj }}</div>
|
||||
<div class="data-title imTyle" @click.stop="updetDz(item)">报警地址:<img src="@/assets/point/dingwei.png"
|
||||
alt="" />{{ item.bjdz }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="item" v-for="(item, index) in zdsjList" :key="index" @click="clickJq(item)">
|
||||
<div class="data-title">事件标题:{{ item.sjbt }}</div>
|
||||
<div class="data-title display-flex">事件状态:
|
||||
<DictTag :tag="false" color="#fff" :value="item.sjzt" :options="D_BZ_ZDSJCZJG" />
|
||||
</div>
|
||||
<div class="data-title">处置结果:{{ item.czjg }}</div>
|
||||
<div class="data-title">发生时间:{{ item.fssj }}</div>
|
||||
<div class="data-title">事件性质:{{ item.sjxz }}</div>
|
||||
<div class="data-title">事件描述:{{ item.shms }}</div>
|
||||
<div class="data-title imTyle" @click.stop="updetDz(item)">事件地址:<img src="@/assets/point/dingwei.png"
|
||||
alt="" />{{ item.sjdz }}</div>
|
||||
<div class="data-title">所属部门:{{ item.ssbm }}</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ZdsjLod v-model="chooseShow" :dict="{ D_BZ_ZDSJCZJG }" :zbData="zbData" />
|
||||
<!-- 左边弹窗 -->
|
||||
<LeftDialog></LeftDialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import LeftDialog from '../dialog/leftDialog.vue'
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import { ref, onMounted, getCurrentInstance, onUnmounted } from 'vue'
|
||||
import { Close, Map, Plus } from '@element-plus/icons-vue';
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import ZdsjLod from "@/views/home/dialog/zdsjLod.vue";
|
||||
import Head from '../layout/head.vue'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BQ_DJ, JQLB, D_BZ_ZDSJCZJG, D_BZ_JQDJ } = proxy.$dict('D_GS_BQ_DJ', "JQLB", "D_BZ_ZDSJCZJG", "D_BZ_JQDJ"); //获取字典数据
|
||||
|
||||
const butList = ref([
|
||||
{
|
||||
label: '警情',
|
||||
onChage: true
|
||||
},
|
||||
{
|
||||
label: '事件',
|
||||
onChage: true
|
||||
},
|
||||
{
|
||||
label: '清除',
|
||||
onChage: false
|
||||
}
|
||||
])
|
||||
const rowData = ref()
|
||||
|
||||
// 警情等级筛选(底部按钮的popover)
|
||||
const jqdjdmFilter = ref([])
|
||||
|
||||
// 处理警情等级筛选变化
|
||||
const handleJqdjFilterChange = () => {
|
||||
getLzJcjPjdb()
|
||||
}
|
||||
|
||||
// 底部按钮
|
||||
const changeBut = (row) => {
|
||||
|
||||
if (row.label == '清除') {
|
||||
emitter.emit('deletePointArea', 'sj_flash')
|
||||
emitter.emit('deletePointArea', 'jq_flash')
|
||||
|
||||
return
|
||||
}
|
||||
let index = butList.value.findIndex(item => item.label == row.label)
|
||||
butList.value[index].onChage = !butList.value[index].onChage
|
||||
if (index == 0) {
|
||||
if (butList.value[index].onChage) {
|
||||
getLzJcjPjdb()
|
||||
} else {
|
||||
jqdjdmFilter.value = [] // 清空选中的警情等级
|
||||
emitter.emit("deletePointArea", "jq")
|
||||
}
|
||||
} else {
|
||||
if (butList.value[index].onChage) {
|
||||
getZdsj()
|
||||
} else {
|
||||
emitter.emit("deletePointArea", "sj")
|
||||
}
|
||||
}
|
||||
}
|
||||
// 获取所有的一级警情
|
||||
const getLzJcjPjdb = () => {
|
||||
const jqdjdmStr = jqdjdmFilter.value.length > 0 ? jqdjdmFilter.value.join(',') : ''
|
||||
emitter.emit("deletePointArea", "jq")
|
||||
qcckGet({
|
||||
jqdjdm: jqdjdmStr
|
||||
}, "/mosty-gsxt/lzJcjPjdb/selectList").then(res => {
|
||||
let list = res.filter(item => item.fxdwjd && item.fxdwjd).map(item => {
|
||||
return {
|
||||
...item,
|
||||
jd: item.fxdwjd,
|
||||
wd: item.fxdwwd
|
||||
}
|
||||
}) || [];
|
||||
const dw = require("@/assets/point/jq.png")
|
||||
|
||||
emitter.emit("addPoint", { coords: list, icon: dw, flag: "jq" });
|
||||
})
|
||||
}
|
||||
|
||||
const loading = ref(false)
|
||||
const changeState = ref(true)// 点击切换
|
||||
// 获取所有的重点事件
|
||||
const getZdsj = () => {
|
||||
qcckGet({}, "/mosty-gsxt/zdsj/selectList").then(res => {
|
||||
let list = res.filter(item => item.jd && item.wd).map(item => {
|
||||
return {
|
||||
...item,
|
||||
}
|
||||
}) || [];
|
||||
const dw = require("@/assets/point/zl.png")
|
||||
emitter.emit("addPoint", { coords: list, icon: dw, flag: "sj" });
|
||||
})
|
||||
}
|
||||
// 分页查询一级警情
|
||||
const jqList = ref([])
|
||||
// 分页查询重点事件
|
||||
const zdsjList = ref([])
|
||||
|
||||
// 警情等级多选
|
||||
const checkAll = ref(false)
|
||||
const isIndeterminate = ref(false)
|
||||
const selectedJqdj = ref([])
|
||||
|
||||
// 全选/取消全选 - 点击全选按钮时触发
|
||||
const handleCheckAllChange = (val) => {
|
||||
if (val) {
|
||||
// 全选:选中所有选项
|
||||
selectedJqdj.value = D_BZ_JQDJ.value.map(item => item.dm)
|
||||
} else {
|
||||
// 取消全选:清空所有选项
|
||||
selectedJqdj.value = []
|
||||
}
|
||||
isIndeterminate.value = false
|
||||
promes.value.currentPage = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
// 多选框变化 - 点击具体选项时触发
|
||||
const handleCheckedChange = (value) => {
|
||||
const checkedCount = value.length
|
||||
const totalCount = D_BZ_JQDJ.value.length
|
||||
|
||||
// 只有当所有选项都选中时,全选按钮才为勾选状态
|
||||
checkAll.value = checkedCount === totalCount
|
||||
// 部分选中时显示半选状态
|
||||
isIndeterminate.value = checkedCount > 0 && checkedCount < totalCount
|
||||
|
||||
promes.value.currentPage = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
const promes = ref({
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
jjdbh: ''
|
||||
})
|
||||
const getList = () => {
|
||||
loading.value = true
|
||||
if (changeState.value) {
|
||||
// 将选中的警情等级转为字符串
|
||||
const jqdjdmStr = selectedJqdj.value.length > 0 ? selectedJqdj.value.join(',') : ''
|
||||
qcckGet({ ...promes.value, jqdjdm: jqdjdmStr }, "/mosty-gsxt/lzJcjPjdb/selectPage").then(res => {
|
||||
jqList.value = promes.value.currentPage == 1 ? res.records : jqList.value.concat(res.records)
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
} else {
|
||||
qcckGet({ ...promes.value, sjbt: promes.value.jjdbh }, "/mosty-gsxt/zdsj/selectPage").then(res => {
|
||||
zdsjList.value = promes.value.currentPage == 1 ? res.records : zdsjList.value.concat(res.records)
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
// chooseShow 弹窗
|
||||
const chooseShow = ref(false)
|
||||
const changeChooseShow = (val) => {
|
||||
chooseShow.value = true
|
||||
}
|
||||
// 滚动加载
|
||||
const loadMore = () => {
|
||||
if (loading.value) return
|
||||
promes.value.currentPage++
|
||||
getList()
|
||||
}
|
||||
// 搜索一级警情
|
||||
const search = () => {
|
||||
promes.value.currentPage = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
emitter.on("coordString", coordStringHandler);
|
||||
// 初始化选中所有警情等级
|
||||
selectedJqdj.value = D_BZ_JQDJ.value.map(item => item.dm)
|
||||
checkAll.value = false
|
||||
getLzJcjPjdb()
|
||||
getZdsj()
|
||||
getList()
|
||||
})
|
||||
|
||||
// 组件卸载时移除事件监听器
|
||||
onUnmounted(() => {
|
||||
emitter.off("coordString", coordStringHandler);
|
||||
});
|
||||
//点击
|
||||
const updetDz = (row) => {
|
||||
if (changeState.value) {
|
||||
proxy.$confirm('是否进行定位?', "警告", { type: "warning" }
|
||||
).then(() => {
|
||||
rowData.value = row
|
||||
emitter.emit("drawShape", {
|
||||
flag: "jq",
|
||||
type: "point",
|
||||
isclear: true
|
||||
});
|
||||
})
|
||||
} else {
|
||||
proxy.$confirm('是否进行定位?', "警告", { type: "warning" }
|
||||
).then(() => {
|
||||
rowData.value = row
|
||||
emitter.emit("drawShape", {
|
||||
flag: "sj",
|
||||
type: "point",
|
||||
isclear: true
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const clickJq = (row) => {
|
||||
emitter.emit('deletePointArea', 'sj_flash')
|
||||
emitter.emit('deletePointArea', 'jq_flash')
|
||||
if (changeState.value) {
|
||||
// 添加新的闪烁点位
|
||||
emitter.emit('addPointArea', { flag: 'jq_flash', coords: [{ jd: row.fxdwjd, wd: row.fxdwwd }], flash: true, offset: [-1, 28] })
|
||||
// 定位到该点
|
||||
emitter.emit('setMapCenter', { location: [row.fxdwjd, row.fxdwwd], zoomLevel: 15 })
|
||||
} else {
|
||||
// 添加新的闪烁点位
|
||||
emitter.emit('addPointArea', { flag: 'sj_flash', coords: [{ jd: row.jd, wd: row.wd }], flash: true, offset: [-1, 28] })
|
||||
// 定位到该点
|
||||
emitter.emit('setMapCenter', { location: [row.jd, row.wd], zoomLevel: 15 })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const listTitle = ref('一级警情')
|
||||
const change = (row) => {
|
||||
changeState.value = !changeState.value
|
||||
listTitle.value = changeState.value ? '一级警情' : '重大事件'
|
||||
getList()
|
||||
}
|
||||
const zbData = ref()
|
||||
// 事件处理函数
|
||||
const coordStringHandler = (res) => {
|
||||
if (res.type === "point") {
|
||||
if (chooseShow.value) {
|
||||
zbData.value = res.coord
|
||||
} else {
|
||||
proxy.$confirm('确定定位吗?', "警告", { type: "warning" }
|
||||
).then(() => {
|
||||
if (changeState.value) {
|
||||
qcckPost({
|
||||
jjdbh: rowData.value.jjdbh,
|
||||
fxdwjd: res.coord[0],
|
||||
fxdwwd: res.coord[1],
|
||||
}, "/mosty-gsxt/lzJcjPjdb/updateJqJwd").then(resData => {
|
||||
// emitter.emit("addPoint", { coords: [{jd:res.coord[0],wd:res.coord[1]}], icon: require("@/assets/point/jq.png"), flag: "jq" });
|
||||
proxy.$message({ type: "success", message: "定位成功" });
|
||||
emitter.emit('deletePointArea', 'jq');
|
||||
getLzJcjPjdb()
|
||||
})
|
||||
} else {
|
||||
qcckPost({
|
||||
id: rowData.value.id,
|
||||
jd: res.coord[0],
|
||||
wd: res.coord[1],
|
||||
}, "/mosty-gsxt/zdsj/updateEntity").then(resData => {
|
||||
proxy.$message({ type: "success", message: "定位成功" });
|
||||
emitter.emit('deletePointArea', 'sj');
|
||||
getZdsj()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/assets/css/homeScreen.scss";
|
||||
|
||||
.qbfkBox {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
background-color: #07274d;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #008efc;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.close-button {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
border-color: rgba(255, 255, 255, 0.3);
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
}
|
||||
|
||||
.map-container {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
animation: fadeIn 0.5s ease-out 0.2s both;
|
||||
|
||||
}
|
||||
|
||||
.list {
|
||||
position: absolute;
|
||||
top: 70px;
|
||||
right: 20px;
|
||||
width: 350px;
|
||||
height: 600px;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 5px;
|
||||
// padding: 10px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
||||
background: #052249;
|
||||
overflow: auto;
|
||||
z-index: 3;
|
||||
|
||||
.titel {
|
||||
background: url('~@/assets/images/bg17.png') no-repeat center center;
|
||||
background-size: 100% 100%;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 20px;
|
||||
align-items: center;
|
||||
|
||||
.levelOneAlert {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.switchover {
|
||||
font-size: 14px;
|
||||
color: #ff6702;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.search {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
|
||||
.jqdj-filter {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
color: white;
|
||||
|
||||
:deep(.el-checkbox) {
|
||||
color: white;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
:deep(.el-checkbox__label) {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
>div:last-child {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.button-model {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.dataList {
|
||||
height: calc(100% - 135px);
|
||||
background-color: #052249;
|
||||
overflow: auto;
|
||||
padding: 5px 0;
|
||||
|
||||
.item {
|
||||
background-color: #0a3a6e;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
margin: 0 10px 5px;
|
||||
}
|
||||
|
||||
.data-title {
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.content {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.data-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
|
||||
.data-title {
|
||||
// flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-container {
|
||||
// background-color: rgb(0, 0, 0);
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
width: 50%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.but {
|
||||
width: 155px;
|
||||
height: 33px;
|
||||
background-image: url('~@/assets/images/home_btns_right.png');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.butOk {
|
||||
width: 155px;
|
||||
height: 33px;
|
||||
background-image: url('~@/assets/images/home_btns_right_active.png');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
|
||||
.jqdj-popover {
|
||||
:deep(.el-checkbox-group) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
:deep(.el-checkbox) {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.display-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.imTyle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
margin-right: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
// 动画效果
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user