This commit is contained in:
lcw
2026-04-01 00:14:43 +08:00
parent af838854fa
commit 582b8677fc
24 changed files with 4234 additions and 1232 deletions

BIN
gsxt.zip

Binary file not shown.

View File

@ -1,5 +1,3 @@
import ImageCompressor from "image-compressor.js"; import ImageCompressor from "image-compressor.js";
// 生成10位数的随机数 // 生成10位数的随机数
@ -13,23 +11,34 @@ export function generateRandom10Digits() {
// 随机颜色 - 把16进制的颜色换成rgba格式 // 随机颜色 - 把16进制的颜色换成rgba格式
export function choseRbgb(color, opcity) { export function choseRbgb(color, opcity) {
if (color) { if (color) {
return 'rgba(' + parseInt('0x' + color.slice(1, 3)) + ',' + parseInt('0x' + color.slice(3, 5)) + ',' + parseInt('0x' + color.slice(5, 7)) + ',' + opcity + ')' return (
"rgba(" +
parseInt("0x" + color.slice(1, 3)) +
"," +
parseInt("0x" + color.slice(3, 5)) +
"," +
parseInt("0x" + color.slice(5, 7)) +
"," +
opcity +
")"
);
} else { } else {
let r = Math.floor(Math.random() * 256) let r = Math.floor(Math.random() * 256);
let g = Math.floor(Math.random() * 256) let g = Math.floor(Math.random() * 256);
let b = Math.floor(Math.random() * 256) let b = Math.floor(Math.random() * 256);
let a = opcity ? opcity : 1 let a = opcity ? opcity : 1;
return `rgba(${r},${g},${b},${a})` return `rgba(${r},${g},${b},${a})`;
} }
} }
// 随机十六进制颜色 // 随机十六进制颜色
export function randomHexColor() { // 随机生成十六进制颜色 export function randomHexColor() {
// 随机生成十六进制颜色
var hex = Math.floor(Math.random() * 16777216).toString(16); var hex = Math.floor(Math.random() * 16777216).toString(16);
while (hex.length < 6) { while (hex.length < 6) {
hex = '0' + hex; hex = "0" + hex;
} }
return '#' + hex; return "#" + hex;
} }
/** /**
@ -47,23 +56,30 @@ export function compressImage(file, quality = 0.6) {
}, },
error(e) { error(e) {
reject("图片压缩失败,请稍后再试"); reject("图片压缩失败,请稍后再试");
}, }
}); });
}); });
}; }
// 今天周几 // 今天周几
export function weekValidate() { export function weekValidate() {
let week = new Date().getDay() let week = new Date().getDay();
let weekenday = '' let weekenday = "";
switch (week) { switch (week) {
case 0: return weekenday = '星期日' case 0:
case 1: return weekenday = '星期一' return (weekenday = "星期日");
case 2: return weekenday = '星期二' case 1:
case 3: return weekenday = '星期三' return (weekenday = "星期一");
case 4: return weekenday = '星期四' case 2:
case 5: return weekenday = '星期五' return (weekenday = "星期二");
case 6: return weekenday = '星期六' case 3:
return (weekenday = "星期三");
case 4:
return (weekenday = "星期四");
case 5:
return (weekenday = "星期五");
case 6:
return (weekenday = "星期六");
} }
} }
@ -86,45 +102,44 @@ export function formatDuring(mss) {
// 转换时间格式 // 转换时间格式
export function timeValidate(date, type) { export function timeValidate(date, type) {
const time = date ? new Date(date) : new Date() const time = date ? new Date(date) : new Date();
const yyyy = time.getFullYear() const yyyy = time.getFullYear();
const MM = (time.getMonth() + 1).toString().padStart(2, 0) const MM = (time.getMonth() + 1).toString().padStart(2, 0);
const dd = time.getDate().toString().padStart(2, '0') const dd = time.getDate().toString().padStart(2, "0");
const hh = time.getHours().toString().padStart(2, '0') const hh = time.getHours().toString().padStart(2, "0");
const mm = time.getMinutes().toString().padStart(2, '0') const mm = time.getMinutes().toString().padStart(2, "0");
const ss = time.getSeconds().toString().padStart(2, '0') const ss = time.getSeconds().toString().padStart(2, "0");
if (type == 'ymd') { if (type == "ymd") {
return `${yyyy}-${MM}-${dd}`; return `${yyyy}-${MM}-${dd}`;
} }
if (type == 'md') { if (type == "md") {
return `${MM}.${dd}` return `${MM}.${dd}`;
} }
if (type == 'td') { if (type == "td") {
return `${yyyy}${MM}${dd}` return `${yyyy}${MM}${dd}`;
} }
if (type == 'ny') { if (type == "ny") {
return `${yyyy}${MM}` return `${yyyy}${MM}`;
} }
if (type == 'yd') { if (type == "yd") {
return `${yyyy}` return `${yyyy}`;
} }
if (type == 'ym') { if (type == "ym") {
return MM return MM;
} }
if (type == 'rm') { if (type == "rm") {
return dd return dd;
} }
if (type == 'mm') { if (type == "mm") {
return `${yyyy}${MM}${dd}${hh}${mm}${ss}` return `${yyyy}${MM}${dd}${hh}${mm}${ss}`;
} }
if (type == 'ydm') { if (type == "ydm") {
return `${yyyy}${MM}${dd}${hh}${mm}${ss}` return `${yyyy}${MM}${dd}${hh}${mm}${ss}`;
} }
return `${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss}` return `${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss}`;
} }
export function timeSlotChange(val) { export function timeSlotChange(val) {
let startTime, endTime; let startTime, endTime;
let now = new Date(); //当前日期 let now = new Date(); //当前日期
@ -132,89 +147,93 @@ export function timeSlotChange(val) {
let nowDay = now.getDate(); //当前日 let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月 let nowMonth = now.getMonth(); //当前月
let nowYear = now.getFullYear(); //当前年 let nowYear = now.getFullYear(); //当前年
let jd = Math.ceil((nowMonth + 1) / 3) let jd = Math.ceil((nowMonth + 1) / 3);
switch (val) { switch (val) {
case '天': case "天":
case '日': case "日":
// 设置当天的开始时间00:00:00 // 设置当天的开始时间00:00:00
const startDate = new Date(); const startDate = new Date();
startDate.setHours(0, 0, 0, 0); startDate.setHours(0, 0, 0, 0);
startTime = timeValidate(startDate, 'ymd'); startTime = timeValidate(startDate, "ymd");
// 设置当天的结束时间23:59:59 // 设置当天的结束时间23:59:59
const endDate = new Date(); const endDate = new Date();
endDate.setHours(23, 59, 59, 999); endDate.setHours(23, 59, 59, 999);
endTime = timeValidate(endDate, 'ymd'); endTime = timeValidate(endDate, "ymd");
console.log(startTime, endTime); console.log(startTime, endTime);
break; break;
case "本周": case "本周":
case "周": case "周":
startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek) startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek) endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek);
break; break;
case "本月": case "本月":
case "月": case "月":
startTime = new Date(nowYear, nowMonth, 1) startTime = new Date(nowYear, nowMonth, 1);
endTime = new Date(nowYear, nowMonth + 1, 0) endTime = new Date(nowYear, nowMonth + 1, 0);
console.log(startTime, endTime); console.log(startTime, endTime);
break; break;
case "本季度": case "本季度":
case "季度": case "季度":
startTime = new Date(nowYear, (jd - 1) * 3, 1) startTime = new Date(nowYear, (jd - 1) * 3, 1);
endTime = new Date(nowYear, jd * 3, 0) endTime = new Date(nowYear, jd * 3, 0);
break break;
case "本年": case "本年":
case "年": case "年":
startTime = new Date(nowYear, 0, 1) startTime = new Date(nowYear, 0, 1);
endTime = new Date(nowYear, 11, 31) endTime = new Date(nowYear, 11, 31);
break break;
} }
return [timeValidate(startTime, 'ymd'), timeValidate(endTime, 'ymd')] return [timeValidate(startTime, "ymd"), timeValidate(endTime, "ymd")];
} }
// 获取当前近多少天 7后7天 -7 前五天 // 获取当前近多少天 7后7天 -7 前五天
export function getRecentDay(n) { export function getRecentDay(n) {
var currentDate = new Date(); var currentDate = new Date();
var preDate = new Date(currentDate.getTime() + n * 24 * 3600 * 1000) var preDate = new Date(currentDate.getTime() + n * 24 * 3600 * 1000);
let year = preDate.getFullYear() let year = preDate.getFullYear();
let mon = preDate.getMonth() + 1 let mon = preDate.getMonth() + 1;
let day = preDate.getDate() let day = preDate.getDate();
let s = year + '-' + (mon < 10 ? ('0' + mon) : mon) + '-' + (day < 10 ? ('0' + day) : day) let s =
return s year +
"-" +
(mon < 10 ? "0" + mon : mon) +
"-" +
(day < 10 ? "0" + day : day);
return s;
} }
// 获取n近7月 7后7 -7 前 // 获取n近7月 7后7 -7 前
export function getnRencebtMonth(n) { export function getnRencebtMonth(n) {
let date = new Date(); let date = new Date();
date.setMonth(date.getMonth() - n) date.setMonth(date.getMonth() - n);
date.toLocaleDateString() date.toLocaleDateString();
let y = date.getFullYear() let y = date.getFullYear();
let m = date.getMonth() + 1 let m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m + '' m = m < 10 ? "0" + m : m + "";
return y + m return y + m;
} }
/** /**
* 数据去重 相同数据值累加 * 数据去重 相同数据值累加
* @param {Object} array 数据 * @param {Object} array 数据
*/ */
export function setArray(array) { export function setArray(array) {
let newArr = [] let newArr = [];
array.forEach(item => { array.forEach((item) => {
const res = newArr.findIndex(ol => { const res = newArr.findIndex((ol) => {
//组织机构代码相同 并且报警类别相同 //组织机构代码相同 并且报警类别相同
return item.ssbmdm == ol.ssbmdm && item.bjlb == ol.bjlb return item.ssbmdm == ol.ssbmdm && item.bjlb == ol.bjlb;
}) });
if (res !== -1) { if (res !== -1) {
newArr[res].sl = newArr[res].sl + item.sl newArr[res].sl = newArr[res].sl + item.sl;
} else { } else {
newArr.push(item) newArr.push(item);
} }
}) });
return newArr return newArr;
} }
/** /**
@ -222,44 +241,49 @@ export function setArray(array) {
* @param {Object} array 数据 * @param {Object} array 数据
*/ */
export function hbArray(array, item1, item2, item3) { export function hbArray(array, item1, item2, item3) {
let newArr = [] let newArr = [];
array.forEach(item => { array.forEach((item) => {
const res = newArr.findIndex(ol => { const res = newArr.findIndex((ol) => {
//组织机构代码相同 并且报警类别相同 //组织机构代码相同 并且报警类别相同
return item.product == ol.product return item.product == ol.product;
}) });
if (res !== -1) { if (res !== -1) {
newArr[res][item1] = newArr[res][item1] + item[item1] newArr[res][item1] = newArr[res][item1] + item[item1];
newArr[res][item2] = newArr[res][item2] + item[item2] newArr[res][item2] = newArr[res][item2] + item[item2];
newArr[res][item3] = newArr[res][item3] + item[item3] newArr[res][item3] = newArr[res][item3] + item[item3];
} else { } else {
newArr.push(item) newArr.push(item);
} }
}) });
return newArr return newArr;
} }
//时间格式 //时间格式
export function dateFormat(type, time) { export function dateFormat(type, time) {
let date let date;
if (time) { if (time) {
date = new Date(time); date = new Date(time);
} else { } else {
date = new Date(); date = new Date();
} }
let year = date.getFullYear(); let year = date.getFullYear();
let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; let month =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); let minutes =
let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
let day let seconds =
date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
let day;
if (type == 'z') { if (type == "z") {
//前一天日期 //前一天日期
day = date.getDate() - 1; day = date.getDate() - 1;
day = day < 10 ? "0" + day : day; day = day < 10 ? "0" + day : day;
return `${year}-${month}-${day}`; return `${year}-${month}-${day}`;
} else if (type == 'all') { } else if (type == "all") {
//格式化日期时间 //格式化日期时间
day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
@ -269,42 +293,78 @@ export function dateFormat(type, time) {
day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return `${year}-${month}-${day}`; return `${year}-${month}-${day}`;
} }
return day return day;
} }
//数字超长处理 //数字超长处理
export function handleNum(num) { export function handleNum(num) {
var data = 0 var data = 0;
if (num) { if (num) {
try { try {
if (num * 1 > 100000) { if (num * 1 > 100000) {
data = (num / 10000).toFixed(0) + '万' data = (num / 10000).toFixed(0) + "万";
} else { } else {
data = (num * 1).toFixed(0) data = (num * 1).toFixed(0);
} }
} catch (error) { } catch (error) {
data = 0 data = 0;
} }
} }
return data return data;
} }
/** /**
* 文件是否是图片 * 文件是否是图片
* @param {*} val * @param {*} val
*/ */
export function IS_PNG(val) { export function IS_PNG(val) {
return ['bmp', 'jpg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf', 'ufo', return (
'eps', 'ai', 'raw', 'wmf', 'webp', 'avif', 'apng' [
].indexOf(val.toLowerCase()) !== -1 "bmp",
"jpg",
"png",
"tif",
"gif",
"pcx",
"tga",
"exif",
"fpx",
"svg",
"psd",
"cdr",
"pcd",
"dxf",
"ufo",
"eps",
"ai",
"raw",
"wmf",
"webp",
"avif",
"apng"
].indexOf(val.toLowerCase()) !== -1
);
} }
/** /**
* 文件是否是音频 * 文件是否是音频
* @param {*} val * @param {*} val
*/ */
export function IS_MP3(val) { export function IS_MP3(val) {
return ['mp3', 'wav', 'wma', 'mp2', 'flac', 'midi', 'ra', 'ape', 'aac', 'cda', 'mov'].indexOf(val.toLowerCase()) !== return (
-1 [
"mp3",
"wav",
"wma",
"mp2",
"flac",
"midi",
"ra",
"ape",
"aac",
"cda",
"mov"
].indexOf(val.toLowerCase()) !== -1
);
} }
/** /**
@ -312,26 +372,39 @@ export function IS_MP3(val) {
* @param {*} val * @param {*} val
*/ */
export function IS_MP4(val) { export function IS_MP4(val) {
return ['avi', 'wmv', 'mpeg', 'mp4', 'm4v', 'mov', 'asf', 'fiv', 'f4v', 'mvb', 'rm', '3gp', 'vob'].indexOf(val return (
.toLowerCase()) !== -1 [
"avi",
"wmv",
"mpeg",
"mp4",
"m4v",
"mov",
"asf",
"fiv",
"f4v",
"mvb",
"rm",
"3gp",
"vob"
].indexOf(val.toLowerCase()) !== -1
);
} }
function handelArr(arr) { function handelArr(arr) {
let brr = [] let brr = [];
if (arr && arr.length > 0) { if (arr && arr.length > 0) {
let obj = {} let obj = {};
let coords = ""; let coords = "";
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
coords += arr[i] + "," coords += arr[i] + ",";
} }
obj.coords = coords obj.coords = coords;
brr.push(obj) brr.push(obj);
} }
return brr return brr;
} }
/** /**
* 时间 天数 * 时间 天数
* @param {*} val * @param {*} val
@ -341,29 +414,31 @@ export function setEchartTime(val) {
let arrTime = []; let arrTime = [];
if (val == 0) { if (val == 0) {
for (let i = 0; i < 24; i++) { for (let i = 0; i < 24; i++) {
arrTime.push(i) arrTime.push(i);
} }
} else { } else {
for (let i = 0; i < val; i++) { for (let i = 0; i < val; i++) {
let date1 = new Date(date.getTime() - i * 24 * 60 * 60 * 1000) let date1 = new Date(date.getTime() - i * 24 * 60 * 60 * 1000);
arrTime.push(_setTime(date1)) arrTime.push(_setTime(date1));
} }
arrTime.reverse() arrTime.reverse();
} }
return arrTime return arrTime;
} }
//设置时间 //设置时间
function _setTime(date) { function _setTime(date) {
let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; let month =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return `${month}-${day}`; return `${month}-${day}`;
} }
//拼接地址 //拼接地址
export function setAddress(val) { export function setAddress(val) {
const url = '/mosty-api/mosty-base/minio/image/download/' const url = "/mosty-api/mosty-base/minio/image/download/";
return url + val return url + val;
} }
export function getUUid() { export function getUUid() {
var list = []; var list = [];
@ -379,27 +454,31 @@ export function getUUid() {
} }
// 预警等级颜色 // 预警等级颜色
export const bqYs = (val) => { export const bqYs = (val) => {
if (val == '01') { if (val == "01") {
return '#ff0202' return "#ff0202";
} else if (val == '02') { } else if (val == "02") {
return '#ff8c00' return "#ff8c00";
} else if (val == '03') { } else if (val == "03") {
return '#ffd208ff' return "#ffd208ff";
} else if (val == '04') { } else if (val == "04") {
return '#0000ff' return "#0000ff";
} }
} };
/** 全息档案跳转 /** 全息档案跳转
* @param {string} szhm 身证号 * @param {string} szhm 身证号
*/ */
export function holographicProfileJump(lx, val) { export function holographicProfileJump(lx, val) {
if (!val) return if (!val) return;
if (lx == 1 || !lx) { if (lx == 1 || !lx || lx == "01") {
const sfzh = val.sfzh || val.rysfzh || val.yjRysfzh const sfzh = val.sfzh || val.rysfzh || val.yjRysfzh;
window.open(`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${sfzh}&from=portal`) window.open(
`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${sfzh}&from=portal`
);
} else { } else {
const cph = val.cph || val.yjClcph const cph = val.cph || val.yjClcph;
window.open(`https://tyyy.lz.dsj.xz/profile/car/car-manage?cphm=${cph}&from=portal`) window.open(
`https://tyyy.lz.dsj.xz/profile/car/car-manage?cphm=${cph}&from=portal`
);
} }
} }
/** /**
@ -416,6 +495,6 @@ export function getErrMsg(fields, msgObj) {
if (!firstErrorField) return; if (!firstErrorField) return;
/** 第一个错误字段的内容 @type{<Array>Object} - [message, field, fieldValue] */ /** 第一个错误字段的内容 @type{<Array>Object} - [message, field, fieldValue] */
let firstErrorFieldObj = fields?.[firstErrorField]; let firstErrorFieldObj = fields?.[firstErrorField];
let errMsg = firstErrorFieldObj?.[0]?.message let errMsg = firstErrorFieldObj?.[0]?.message;
return errMsg return errMsg;
} }

View File

@ -0,0 +1,284 @@
<!-- 布控预警选择弹窗 -->
<template>
<el-dialog
:draggable="true"
:model-value="modelValue"
:title="title"
:width="width"
@close="close"
append-to-body
class="deployment-data-dialog"
>
<div class="deployment-data-content" v-loading="loading">
<!-- 按钮区域 -->
<div class="button-area mb10">
<el-button type="primary" @click="openDeploymentWarningDialog">
<el-icon><Plus /></el-icon>
新增
</el-button>
</div>
<!-- 已选择数据表格 -->
<div class="table-wrapper">
<WarnDataTable
:loading="pageData.tableConfiger.loading"
:tableHeight="400"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="selected-table"
>
<template #czzt="{ 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 #qblyjb="{ row }">
<DictTag :value="row.qblyjb" :tag="false" :options="D_BZ_QBLYJB" />
</template>
<template #bksj="{ row }">
{{
row.bkkssj && row.bkjssj ? `${row.bkkssj} - ${row.bkjssj}` : ""
}}
</template>
<template #xsd="{ row }">{{ row.xsd }}%</template>
<template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template>
<template #bkyjlx="{ row }">
<DictTag :value="row.bkyjlx" :tag="false" :options="D_BZ_BKYJLX" />
</template>
<template #action="{ row }">
<el-button
type="danger"
size="small"
text
@click="handleDelete(row)"
>
删除
</el-button>
</template>
</WarnDataTable>
</div>
<!-- 分页 -->
</div>
<!-- 布控预警选择弹窗 -->
<DeploymentWarningDialog
v-model="deploymentWarningVisible"
@confirm="handleConfirm"
/>
<template #footer>
<div style="text-align: center">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handleSave">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { bqYs } from "@/utils/tools.js";
import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import DeploymentWarningDialog from "./DeploymentWarningDialog.vue";
import { reactive, ref, getCurrentInstance, watch } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
title: {
type: String,
default: "选择数据"
},
width: {
type: String,
default: "90%"
},
showPagination: {
type: Boolean,
default: true
},
currentRelatedRow: {
type: Object,
default: null
}
});
const emit = defineEmits(["update:modelValue", "confirm"]);
const { proxy } = getCurrentInstance();
const {
D_GSXT_YJXX_CZZT,
D_BZ_YJJB,
D_BZ_XB,
D_GS_CSZT,
D_BZ_QBLYJB,
D_BZ_BKYJLX
} = proxy.$dict(
"D_GSXT_YJXX_CZZT",
"D_BZ_YJJB",
"D_BZ_XB",
"D_GS_CSZT",
"D_BZ_QBLYJB",
"D_BZ_BKYJLX"
);
const loading = ref(false);
const deploymentWarningVisible = ref(false);
const pageData = reactive({
tableData: [],
tableConfiger: {
rowHieght: 61,
showSelectType: false,
loading: false,
haveControls: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
tableColumn: [
{ type: "index", label: "序号", width: 55, align: "center" },
{ label: "处置状态", align: "center", slotName: "czzt" },
{ prop: "yjSj", label: "预警时间", width: 150 },
{ prop: "yjRyxm", label: "人员姓名", align: "center" },
{ label: "性别", align: "center", slotName: "xbdm" },
{ prop: "nl", label: "年龄", align: "center" },
{ prop: "yjRysfzh", label: "身份证号", width: 150, align: "center" },
{ label: "管控级别", align: "center", slotName: "qblyjb" },
{ label: "预警级别", align: "center", slotName: "yjJb" },
{ label: "布控时间", align: "center", slotName: "bksj" },
{ prop: "ssbm", label: "接收单位", align: "center" },
{ label: "相似度", slotName: "xsd", align: "center" },
{ prop: "yjNr", label: "预警内容", align: "center" },
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" },
{
label: "操作",
width: 80,
align: "center",
slotName: "action",
fixed: "right"
}
]
});
const close = () => {
// 清空数据
pageData.tableData = [];
pageData.total = 0;
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageSize = 20;
emit("update:modelValue", false);
};
// 打开布控预警选择弹窗
const openDeploymentWarningDialog = () => {
deploymentWarningVisible.value = true;
};
// 确认选择数据
const handleConfirm = (selectedRows) => {
if (selectedRows && selectedRows.length > 0) {
const promes = {
glidList: selectedRows.map((item) => item.id),
yjid: props.currentRelatedRow.id
};
qcckPost(promes, "/mosty-gsxt/tbYjxx/addGlyj")
.then((res) => {
proxy.$message({ type: "success", message: "关联成功" });
getList();
})
.catch(() => {
proxy.$message({ type: "error", message: "关联失败" });
});
}
};
// 删除数据
const handleDelete = (row) => {
// 删除数据
proxy
.$confirm("确定要删除关联预警?", "警告", { type: "warning" })
.then(() => {
qcckPost(
{ yjid: props.currentRelatedRow.id, glidList: [row.id] },
"/mosty-gsxt/tbYjxx/delGlyj"
).then(() => {
proxy.$message({ type: "success", message: "删除关联预警成功" });
getList();
});
});
};
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
pageCurrent: 1,
pageSize: 1000,
glyjcx: 1,
id: props.currentRelatedRow.id
};
qcckPost(promes, "/mosty-gsxt/tbYjxx/getPageList").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
});
};
// 确定
const handleSave = () => {
emit("confirm", pageData.tableData);
close();
};
watch(
() => props.modelValue,
(newVal) => {
if (newVal) {
getList();
}
}
);
</script>
<style lang="scss" scoped>
.deployment-data-content {
background-color: #fff;
}
.table-wrapper {
height: 400px;
overflow: hidden;
}
.button-area {
display: flex;
justify-content: flex-start;
padding: 10px 0;
}
.mb10 {
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,354 @@
<!-- 布控预警弹窗 -->
<template>
<el-dialog
:draggable="true"
:model-value="modelValue"
title="布控预警"
:width="width"
@close="close"
append-to-body
class="deployment-warning-dialog"
>
<div class="deployment-warning-content" v-loading="loading">
<!-- 搜索 -->
<div ref="searchBox" class="mt10 mb10">
<QueryFormPanel
v-model="queryFrom"
:fields="searchConfiger"
@search="onSearch"
/>
</div>
<!-- 表格 -->
<div class="table-wrapper">
<WarnDataTable
:loading="pageData.tableConfiger.loading"
:tableHeight="400"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="warn-table"
@selectionChange="handleChooseData"
>
<template #czzt="{ 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 #qblyjb="{ row }">
<DictTag :value="row.qblyjb" :tag="false" :options="D_BZ_QBLYJB" />
</template>
<template #bksj="{ row }">
{{
row.bkkssj && row.bkjssj ? `${row.bkkssj} - ${row.bkjssj}` : ""
}}
</template>
<template #xsd="{ row }">{{ row.xsd }}%</template>
<template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template>
<template #bkyjlx="{ row }">
<DictTag :value="row.bkyjlx" :tag="false" :options="D_BZ_BKYJLX" />
</template>
</WarnDataTable>
</div>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="400"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 计算人数弹窗 -->
<template #footer>
<div style="text-align: center">
<el-button @click="handleConfirm" type="primary">确定选择</el-button>
<el-button @click="close">关闭</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { bqYs } from "@/utils/tools.js";
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 {
reactive,
ref,
onMounted,
getCurrentInstance,
nextTick,
watch,
computed
} from "vue";
import { ElMessage } from "element-plus";
import peopleConut from "../warningControl/deploymentIntegration/peopleConut.vue";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
width: {
type: String,
default: "90%"
}
});
const emit = defineEmits(["update:modelValue", "confirm"]);
const { proxy } = getCurrentInstance();
const {
D_BZ_YJJB,
D_GS_CSZT,
D_BZ_XB,
D_GSXT_YJXX_CZZT,
D_BZ_QBLYJB,
D_BZ_BKYJLX
} = proxy.$dict(
"D_BZ_YJJB",
"D_BZ_XB",
"D_GSXT_YJXX_CZZT",
"D_GS_CSZT",
"D_BZ_QBLYJB",
"D_BZ_BKYJLX"
);
const searchBox = ref();
const searchDom = ref();
const searchConfiger = ref([
{
label: "处置状态",
prop: "czzt",
showType: "select",
options: D_GSXT_YJXX_CZZT
},
{
label: "预警时间",
prop: "startTime",
showType: "datetimerange",
placeholder: "请选择预警时间"
},
{
label: "姓名",
prop: "yjRyxm",
showType: "input",
placeholder: "请输入姓名"
},
{
label: "身份证号",
prop: "yjRysfzh",
showType: "input",
placeholder: "请输入身份证号"
},
{
label: "管控级别",
prop: "qblyjb",
showType: "select",
options: D_BZ_QBLYJB
},
{
label: "预警级别",
prop: "yjJb",
showType: "select",
options: D_BZ_YJJB,
placeholder: "请选择预警级别",
multiple: true
},
{
label: "布控时间",
prop: "bksj",
showType: "daterange",
placeholder: "请选择布控开始时间"
},
{
label: "接收单位",
prop: "ssbmdm",
showType: "department",
placeholder: "请选择接收单位"
},
{
label: "布控单位",
prop: "gkbmdm",
showType: "department",
placeholder: "请选择布控单位"
},
{
label: "比对源",
prop: "bkyjlx",
showType: "select",
options: D_BZ_BKYJLX,
placeholder: "请选择比对源"
},
{
label: "超时状态",
prop: "cszt",
placeholder: "请选择超时状态",
showType: "select",
options: D_GS_CSZT
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
tableColumn: [
{ type: "index", label: "序号", width: 55, align: "center" },
{ label: "处置状态", align: "center", slotName: "czzt" },
{ prop: "yjSj", label: "预警时间", width: 150 },
{ prop: "yjRyxm", label: "人员姓名", align: "center" },
{ label: "性别", align: "center", slotName: "xbdm" },
{ prop: "nl", label: "年龄", align: "center" },
{ prop: "yjRysfzh", label: "身份证号", width: 150, align: "center" },
{ label: "管控级别", align: "center", slotName: "qblyjb" },
{ label: "预警级别", align: "center", slotName: "yjJb" },
{ label: "布控时间", align: "center", width: 150, slotName: "bksj" },
{ prop: "ssbm", label: "接收单位", align: "center" },
{ prop: "gkbmmc", label: "布控单位", align: "center" },
{ prop: "bkyjlx", label: "比对源", align: "center", slotName: "bkyjlx" },
{ label: "相似度", slotName: "xsd", align: "center" },
{ prop: "yjNr", label: "预警内容", width: 150, align: "center" },
{ label: "超时状态", align: "center", slotName: "cszt" }
]
});
const loading = computed(() => pageData.tableConfiger.loading);
onMounted(() => {});
watch(
() => props.modelValue,
(newVal) => {
if (newVal) {
getList();
}
}
);
const close = () => {
// 清空数据
pageData.tableData = [];
pageData.total = 0;
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageSize = 20;
selectRows.value = [];
emit("update:modelValue", false);
};
// 搜索
const onSearch = (val) => {
queryFrom.value = {
...queryFrom.value,
...val,
startTime: val.startTime ? val.startTime[0] : "",
endTime: val.startTime ? val.startTime[1] : "",
bkkssj: val.bksj ? val.bksj[0] : "",
bkjssj: val.bksj ? val.bksj[1] : "",
yjJb: val.yjJb?.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 params = {
...queryFrom.value,
pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize,
yjlb: "01"
};
qcckPost(params, "/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 selectRows = ref([]);
const handleChooseData = (val) => {
selectRows.value = val;
};
// 确认选择
const handleConfirm = () => {
if (selectRows.value.length === 0) {
ElMessage.warning("请先选择数据");
return;
}
emit("confirm", selectRows.value);
close();
};
</script>
<style lang="scss" scoped>
.deployment-warning-content {
background-color: #fff;
}
.table-wrapper {
height: 400px;
overflow: hidden;
}
.mt10 {
margin-top: 10px;
}
.mb10 {
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,315 @@
<!-- 选择数据弹窗 -->
<template>
<el-dialog
:draggable="true"
:model-value="modelValue"
:title="title"
:width="width"
@close="close"
append-to-body
class="select-data-dialog"
>
<div class="select-data-content" v-loading="loading">
<!-- 按钮区域 -->
<div class="button-area mb10">
<el-button type="primary" @click="openSevenWarningDialog">
<el-icon><Plus /></el-icon>
新增
</el-button>
</div>
<!-- 已选择数据表格 -->
<div class="table-wrapper" ref="tableWrapperRef" v-if="props.modelValue">
<WarnDataTable
:loading="pageData.tableConfiger.loading"
:tableHeight="tableHeight"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="selected-table"
>
<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_GS_ZDR_GJLB"
/>
</template>
<template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template>
<template #qbly="{ row }">
<DictTag :value="row.qbly" :tag="false" :options="D_BZ_QBLY" />
</template>
<template #qblyjb="{ row }">
<DictTag :value="row.qblyjb" :tag="false" :options="D_BZ_QBLYJB" />
</template>
<template #action="{ row }">
<el-button
type="danger"
size="small"
text
@click="handleDelete(row)"
>
删除
</el-button>
</template>
</WarnDataTable>
</div>
<!-- 分页 -->
</div>
<!-- 七类重点选择弹窗 -->
<SevenWarningDialog
v-model="sevenWarningVisible"
@confirm="handleConfirm"
/>
<template #footer>
<div style="text-align: center">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handleSave">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { getMultiDictVal } from "@/utils/dict.js";
import { bqYs } from "@/utils/tools.js";
import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import SevenWarningDialog from "./SevenWarningDialog.vue";
import { qcckPost } from "@/api/qcckApi.js";
import {
reactive,
ref,
onMounted,
getCurrentInstance,
nextTick,
computed,
watch
} from "vue";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
title: {
type: String,
default: "选择数据"
},
width: {
type: String,
default: "90%"
},
showPagination: {
type: Boolean,
default: true
},
currentRelatedRow: {
type: Object,
default: null
}
});
const emit = defineEmits(["update:modelValue", "confirm"]);
const { proxy } = getCurrentInstance();
const {
D_GS_QLZDRLX,
D_GS_ZDR_GJLB,
D_BZ_YJJB,
D_GS_CSZT,
D_BZ_XB,
D_GSXT_YJXX_CZZT,
D_BZ_QBLY,
D_BZ_QBLYJB
} = proxy.$dict(
"D_GS_QLZDRLX",
"D_BZ_YJJB",
"D_BZ_XB",
"D_GSXT_YJXX_CZZT",
"D_GS_ZDR_GJLB",
"D_GS_CSZT",
"D_BZ_QBLY",
"D_BZ_QBLYJB"
);
const loading = ref(false);
const tableHeight = ref(400);
const sevenWarningVisible = ref(false);
watch(
() => props.modelValue,
(newVal) => {
if (newVal) {
tableHeight.value = 500;
getList();
}
}
);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: false,
loading: false,
haveControls: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
tableColumn: [
{ type: "index", label: "序号", width: 55, align: "center" },
{ label: "预警状态", width: 80, align: "center", slotName: "status" },
{ prop: "yjSj", label: "预警时间" },
{ prop: "yjRyxm", label: "人员姓名", width: 80 },
{ prop: "yjRysfzh", label: "身份证号", width: 158 },
{ label: "性别", width: 55, align: "center", slotName: "xbdm" },
{ prop: "nl", label: "年龄", width: 55, align: "center" },
{ label: "预警级别", width: 80, align: "center", slotName: "yjJb" },
{ label: "人员类别", width: 80, align: "center", slotName: "bqdl" },
{ prop: "yjbqmc", label: "人员细类", width: 80 },
{ label: "轨迹类别", width: 80, align: "center", slotName: "yjLylx" },
{ prop: "yjDz", label: "活动发生地", width: 100 },
{ prop: "ssbm", label: "接收单位" },
{ label: "情报来源", width: 80, align: "center", slotName: "qbly" },
{ label: "来源级别", width: 80, align: "center", slotName: "qblyjb" },
{ prop: "yjCs", label: "次数", width: 55, align: "center" },
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" },
{
label: "操作",
align: "center",
slotName: "action",
fixed: "right"
}
]
});
onMounted(() => {});
const close = () => {
// 清空数据
pageData.tableData = [];
pageData.total = 0;
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageSize = 20;
emit("update:modelValue", false);
};
// 打开七类重点选择弹窗
const openSevenWarningDialog = () => {
sevenWarningVisible.value = true;
};
// 确认选择数据
const handleConfirm = (selectedRows) => {
if (selectedRows && selectedRows.length > 0) {
const promes = {
glidList: selectedRows.map((item) => item.id),
yjid: props.currentRelatedRow.id
};
qcckPost(promes, "/mosty-gsxt/tbYjxx/addGlyj")
.then((res) => {
proxy.$message({ type: "success", message: "关联成功" });
getList();
})
.catch(() => {
proxy.$message({ type: "error", message: "关联失败" });
});
}
};
// 删除数据
const handleDelete = (row) => {
proxy
.$confirm("确定要删除关联预警?", "警告", { type: "warning" })
.then(() => {
qcckPost(
{ yjid: props.currentRelatedRow.id, glidList: [row.id] },
"/mosty-gsxt/tbYjxx/delGlyj"
).then(() => {
proxy.$message({ type: "success", message: "删除关联预警成功" });
getList();
});
});
};
// 查询数据
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
pageCurrent: 1,
pageSize: 1000,
// sfglyj: 1,
id: props.currentRelatedRow.id,
glyjcx: 1
};
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 handleSave = () => {
emit("confirm", pageData.tableData);
close();
};
</script>
<style lang="scss" scoped>
.select-data-content {
background-color: #fff;
}
.table-wrapper {
height: 50vh;
overflow: hidden;
}
.button-area {
display: flex;
justify-content: flex-start;
padding: 10px 0;
}
.mb10 {
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,440 @@
<!-- 七类重点预警弹窗 -->
<template>
<el-dialog
:draggable="true"
:model-value="modelValue"
title="七类重点"
:width="width"
@close="close"
append-to-body
class="seven-warning-dialog"
>
<div class="seven-warning-content" v-loading="loading">
<!-- 搜索 -->
<div ref="searchBox" class="mt10 mb10">
<QueryFormPanel
v-model="queryFrom"
:fields="searchConfiger"
ref="searchDom"
@search="onSearch"
>
<template #yjCs>
<div>
<el-input
v-model="queryFrom.yjkscs"
type="number"
placeholder="开始次数"
style="width: 130px"
clearable
:min="0"
/>
<el-input
v-model="queryFrom.yjjscs"
type="number"
placeholder="结束次数"
style="width: 130px"
clearable
:min="0"
/>
</div>
</template>
<template #nl>
<div>
<el-input
v-model="queryFrom.ksnl"
type="number"
placeholder="开始年龄"
style="width: 130px"
clearable
:min="0"
/>
<el-input
v-model="queryFrom.jsnl"
type="number"
placeholder="结束年龄"
style="width: 130px"
clearable
:min="0"
/>
</div>
</template>
</QueryFormPanel>
</div>
<!-- 表格 -->
<div class="table-wrapper">
<WarnDataTable
:loading="pageData.tableConfiger.loading"
:tableHeight="400"
: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_GS_ZDR_GJLB"
/>
</template>
<template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template>
<template #qbly="{ row }">
<DictTag :value="row.qbly" :tag="false" :options="D_BZ_QBLY" />
</template>
<template #qblyjb="{ row }">
<DictTag :value="row.qblyjb" :tag="false" :options="D_BZ_QBLYJB" />
</template>
</WarnDataTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="400"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
</div>
<!-- 计算人数弹窗 -->
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
<template #footer>
<div style="text-align: center">
<el-button @click="handleConfirm" type="primary">确定选择</el-button>
<el-button @click="close">关闭</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { getMultiDictVal } from "@/utils/dict.js";
import { exportExlByObj } from "@/utils/exportExcel.js";
import { bqYs } from "@/utils/tools.js";
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 {
reactive,
ref,
onMounted,
getCurrentInstance,
nextTick,
watch
} from "vue";
import { ElMessage } from "element-plus";
import peopleConut from "../warningControl/sevenWarning/peopleConut.vue";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
width: {
type: String,
default: "90%"
}
});
const emit = defineEmits(["update:modelValue", "confirm"]);
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,
D_BZ_QBLY,
D_BZ_QBLYJB
} = 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",
"D_BZ_QBLY",
"D_BZ_QBLYJB"
);
const searchBox = ref();
const searchDom = ref();
const tableHeight = ref(400);
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: "yjRyxm", label: "姓名", type: "input", placeholder: "请输入姓名" },
{
key: "xbdm",
label: "性别",
type: "select",
options: D_BZ_XB,
placeholder: "请选择性别"
},
{
key: "bqdl",
label: "人员类别",
type: "select",
options: D_GS_QLZDRLX,
placeholder: "请选择人员类别"
},
{
key: "yjRysfzh",
label: "身份证号码",
type: "input",
placeholder: "请输入身份证号码"
},
{
key: "nl",
label: "年龄",
type: "slot",
placeholder: "请输入年龄"
},
{ key: "yjLylx", label: "轨迹类别", type: "select", options: D_GS_ZDR_GJLB },
{
key: "yjDz",
label: "活动发生地",
type: "input",
placeholder: "请输入活动发生地"
},
{
key: "qbly",
label: "情报来源",
type: "select",
options: D_BZ_QBLY,
placeholder: "请选择情报来源"
},
{
key: "qblyjb",
label: "情报来源级别",
type: "select",
options: D_BZ_QBLYJB,
placeholder: "请选择情报来源级别"
}
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
tableColumn: [
{ type: "index", label: "序号", width: 55, align: "center" },
{ label: "预警状态", width: 80, align: "center", slotName: "status" },
{ prop: "yjSj", label: "预警时间" },
{ prop: "yjRyxm", label: "人员姓名", width: 80 },
{ prop: "yjRysfzh", label: "身份证号" },
{ label: "性别", width: 55, align: "center", slotName: "xbdm" },
{ prop: "nl", label: "年龄", width: 55, align: "center" },
{ label: "预警级别", width: 80, align: "center", slotName: "yjJb" },
{ label: "人员类别", width: 80, align: "center", slotName: "bqdl" },
{ prop: "yjbqmc", label: "人员细类", width: 80 },
{ label: "轨迹类别", width: 80, align: "center", slotName: "yjLylx" },
{ prop: "yjDz", label: "活动发生地" },
{ prop: "ssbm", label: "接收单位" },
{ label: "情报来源", width: 80, align: "center", slotName: "qbly" },
{ label: "来源级别", width: 80, align: "center", slotName: "qblyjb" },
{ prop: "yjCs", label: "次数", width: 55, align: "center" },
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" }
]
});
const loading = computed(() => pageData.tableConfiger.loading);
import { computed } from "vue";
onMounted(() => {
getList();
});
watch(
() => props.modelValue,
(newVal) => {
if (newVal) {
nextTick(() => {
tabHeightFn();
});
}
}
);
const close = () => {
// 清空数据
pageData.tableData = [];
pageData.total = 0;
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageSize = 20;
selectRows.value = [];
emit("update:modelValue", false);
};
// 搜索
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] : "";
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 selectRows = ref([]);
const handleChooseData = (val) => {
selectRows.value = val;
};
// 确认选择
const handleConfirm = () => {
if (selectRows.value.length === 0) {
ElMessage.warning("请先选择数据");
return;
}
emit("confirm", selectRows.value);
close();
};
// 表格高度计算
const tabHeightFn = () => {
if (searchBox.value) {
const dialogBody = document.querySelector(
".seven-warning-dialog .el-dialog__body"
);
if (dialogBody) {
const headerHeight = 60;
const footerHeight = 60;
const paddingHeight = 40;
const searchHeight = searchBox.value.offsetHeight || 50;
tableHeight.value =
dialogBody.clientHeight -
headerHeight -
footerHeight -
paddingHeight -
searchHeight -
50;
}
}
};
</script>
<style lang="scss" scoped>
.seven-warning-content {
background-color: #fff;
}
.table-wrapper {
height: 400px;
overflow: hidden;
}
.mt10 {
margin-top: 10px;
}
.mb10 {
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,194 @@
<!--预警详情弹窗根据yjLylx展示不同表格-->
<template>
<el-dialog
:draggable="true"
:model-value="modelValue"
:title="dialogTitle"
:width="width"
@close="close"
append-to-body
>
<div class="yj-detail-dialog" v-loading="loading">
<MyTable
:tableData="tableData"
:tableColumn="tableColumn"
:tableHeight="tableHeight"
:key="keyCount"
:tableConfiger="tableConfiger"
>
<template #jqlyfs="{ row }">
<DictTag :tag="false" :value="row.jqlyfs" :options="dict.D_BZ_JQLY" />
</template>
<template #jqlbdm="{ row }">
<DictTag :tag="false" :value="row.jqlbdm" :options="dict.JQLB" />
</template>
<template #jqxldm="{ row }">
<DictTag :tag="false" :value="row.jqxldm" :options="dict.JQXL" />
</template>
<template #jqdjdm="{ row }">
<DictTag :tag="false" :value="row.jqdjdm" :options="dict.D_BZ_JQDJ" />
</template>
<template #jqlxdm="{ row }">
<DictTag :tag="false" :value="row.jqlxdm" :options="dict.JQLX" />
</template>
</MyTable>
</div>
<template #footer>
<div style="text-align: center">
<el-button @click="close">关闭</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { ref, computed, watch } from "vue";
import { qcckGet } from "@/api/qcckApi.js";
import MyTable from "@/components/aboutTable/MyTable.vue";
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
title: {
type: String,
default: "预警详情"
},
width: {
type: String,
default: "70%"
},
dataList: {
type: Object,
default: () => ({})
},
dict: {
type: Object,
default: () => ({})
}
});
const emit = defineEmits(["update:modelValue"]);
const loading = ref(false);
const tableData = ref([]);
const keyCount = ref(0);
const tableHeight = 500;
const tableConfiger = ref({
rowHieght: 61,
loading: false,
haveControls: false
});
const tableColumn = ref([]);
const close = () => {
emit("update:modelValue", false);
};
const API_MAP = {
21: {
path: "/mosty-gsxt/yjzxSfyjxq/selectList",
name: "身份预警"
},
22: {
path: "/mosty-gsxt/yjzxXwyjxq/selectList",
name: "行为预警"
},
23: {
path: "/mosty-gsxt/yjzxZhyjxq/selectList",
name: "组合预警"
}
};
const COLUMNS_MAP = {
21: [
{ label: "姓名", prop: "bjrmc" },
{ label: "身份证号", prop: "bjrzjhm" },
// { label: "来源类型", prop: "jqlyfs", showSolt: true, width: 100 },
// { label: "警情类别", prop: "jqlbdm", showSolt: true, width: 100 },
// { label: "警情小类", prop: "jqxldm", showSolt: true, width: 100 },
// { label: "警情等级", prop: "jqdjdm", showSolt: true, width: 100 },
// { label: "警情类型", prop: "jqlxdm", showSolt: true, width: 100 },
{ label: "预警地址", prop: "bjdz" },
{ label: "预警内容", prop: "bjnr", showOverflowTooltip: true },
{ label: "预警时间", prop: "yjsj", showOverflowTooltip: true }
],
22: [
{ label: "姓名", prop: "bjrmc" },
{ label: "身份证号", prop: "bjrzjhm" },
// { label: "来源类型", prop: "jqlyfs", showSolt: true, width: 100 },
// { label: "警情类别", prop: "jqlbdm", showSolt: true, width: 100 },
// { label: "警情小类", prop: "jqxldm", showSolt: true, width: 100 },
// { label: "警情等级", prop: "jqdjdm", showSolt: true, width: 100 },
// { label: "警情类型", prop: "jqlxdm", showSolt: true, width: 100 },
{ label: "预警地址", prop: "bjdz" },
{ label: "预警内容", prop: "bjnr", showOverflowTooltip: true },
{ label: "预警时间", prop: "yjsj", showOverflowTooltip: true }
],
23: [
{ label: "姓名", prop: "bjrmc" },
{ label: "身份证号", prop: "bjrzjhm" },
// { label: "来源类型", prop: "jqlyfs", showSolt: true, width: 100 },
// { label: "警情类别", prop: "jqlbdm", showSolt: true, width: 100 },
// { label: "警情小类", prop: "jqxldm", showSolt: true, width: 100 },
// { label: "警情等级", prop: "jqdjdm", showSolt: true, width: 100 },
// { label: "警情类型", prop: "jqlxdm", showSolt: true, width: 100 },
{ label: "预警地址", prop: "bjdz" },
{ label: "预警内容", prop: "bjnr", showOverflowTooltip: true },
{ label: "预警时间", prop: "yjsj", showOverflowTooltip: true }
]
};
const dialogTitle = computed(() => {
const type = API_MAP[props.dataList.yjLylx];
return type ? `${type.name}详情(${tableData.value.length}` : props.title;
});
const fetchData = async (row) => {
const yjLylx = row.yjLylx;
const api = API_MAP[yjLylx];
if (!api) return;
loading.value = true;
tableConfiger.value.loading = true;
tableData.value = [];
tableColumn.value = COLUMNS_MAP[yjLylx] || [];
try {
const res = await qcckGet({ yjid: row.id }, api.path);
if (Array.isArray(res)) {
tableData.value = res;
} else if (res && Array.isArray(res)) {
tableData.value = res;
} else {
tableData.value = [];
}
keyCount.value++;
} catch (e) {
console.error("加载预警详情失败", e);
tableData.value = [];
} finally {
loading.value = false;
tableConfiger.value.loading = false;
}
};
watch(
() => props.modelValue,
(newVal) => {
if (newVal && props.dataList.id) {
fetchData(props.dataList);
}
},
{ deep: true }
);
</script>
<style scoped>
.yj-detail-dialog {
padding: 10px 0;
}
</style>

View File

@ -101,7 +101,7 @@ import ControlWarning from "@/views/backOfficeSystem/fourColorManage/warningCont
import LabelWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/iabelWarning/index.vue"; import LabelWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/iabelWarning/index.vue";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
// "人像预警", "车辆预警",, "区域预警","无人机预警" // "人像预警", "车辆预警",, "区域预警","无人机预警"
const butList = ref(["七类重点", "政保预警", "布控预警", "预警整合"]); const butList = ref(["七类重点", "政保预警", "布控预警"]);
const qh = ref("七类重点"); const qh = ref("七类重点");
const value = ref("人像预警"); const value = ref("人像预警");
const Bqvalue = ref("身份预警"); const Bqvalue = ref("身份预警");
@ -135,7 +135,7 @@ onMounted(() => {
if (hasPermissin.value) { if (hasPermissin.value) {
const data = butList.value.filter((item) => item !== "预警整合"); const data = butList.value.filter((item) => item !== "预警整合");
// "身份预警", "行为预警", "组合预警" // "身份预警", "行为预警", "组合预警"
butList.value = [...data, ...["标签预警", "预警整合"]]; butList.value = [...data, ...["标签预警"]];
} }
}); });
</script> </script>

View File

@ -1,186 +1,280 @@
<template> <template>
<el-dialog :draggable="true" v-model="showDialog" :append-to-body="true" :destroy-on-close="true" :title="title" <el-dialog
:close-on-click-modal="false"> :draggable="true"
<FormMessage v-model="listQuery" :disabled="title == '反馈' ? false : true" :formList="formData" labelWidth="160px" v-model="showDialog"
ref="elform" :rules="rules"> :append-to-body="true"
:destroy-on-close="true"
:title="title"
:close-on-click-modal="false"
>
<FormMessage
v-model="listQuery"
:disabled="title == '反馈' ? false : true"
:formList="formData"
labelWidth="160px"
ref="elform"
:rules="rules"
>
<template #mbzrmjxm> <template #mbzrmjxm>
<MOSTY.Other width="100%" @click="handleChoose('mbzrmjxm')" clearable v-model="listQuery.mbzrmjxm" <MOSTY.Other
placeholder="请选择民警" :readonly="true" /> width="100%"
@click="handleChoose('mbzrmjxm')"
clearable
v-model="listQuery.mbzrmjxm"
placeholder="请选择民警"
:readonly="true"
/>
</template> </template>
<template #czzrmj> <template #czzrmj>
<MOSTY.Other width="100%" @click="handleChoose('czzrmj')" clearable v-model="listQuery.czzrmj" <MOSTY.Other
placeholder="请选择民警" :readonly="true" /> width="100%"
@click="handleChoose('czzrmj')"
clearable
v-model="listQuery.czzrmj"
placeholder="请选择民警"
:readonly="true"
/>
</template> </template>
</FormMessage> </FormMessage>
<template #footer> <template #footer>
<div class="flex just-center"> <div class="flex just-center">
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm" :loading="loading" v-if="title == '反馈'">确认</el-button> <el-button
type="primary"
@click="submitForm"
:loading="loading"
v-if="title == '反馈'"
>确认</el-button
>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<ChooseUser v-model="chooseUserVisible" v-if="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" <ChooseUser
:Single="true" /> v-model="chooseUserVisible"
v-if="chooseUserVisible"
@choosedUsers="handleUserSelected"
:roleIds="roleIds"
:Single="true"
/>
</template> </template>
<script setup> <script setup>
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue" import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { onMounted, reactive, ref, getCurrentInstance,onUnmounted } from 'vue'; import { onMounted, reactive, ref, getCurrentInstance, onUnmounted } from "vue";
const props = defineProps({ const props = defineProps({
lx: { lx: {
type: String, type: String,
default: '01' default: "01"
} }
}) });
const emit = defineEmits(['change']) const emit = defineEmits(["change"]);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BZ_SF, D_YJXX_CZCSLX, D_YJXX_CZSSXZ, D_YJXX_CKCZJG, D_YJXX_CKZYLX } = proxy.$dict('D_YJXX_CKZYLX', 'D_BZ_SF', 'D_YJXX_CZCSLX', 'D_YJXX_CZSSXZ', 'D_YJXX_CKCZJG') const { D_BZ_SF, D_YJXX_CZCSLX, D_YJXX_CZSSXZ, D_YJXX_CKCZJG, D_YJXX_CKZYLX } =
const chooseUserVisible = ref(false) proxy.$dict(
const roleIds = ref([]) "D_YJXX_CKZYLX",
const elform = ref() "D_BZ_SF",
const showDialog = ref(false) "D_YJXX_CZCSLX",
const loading = ref(false) "D_YJXX_CZSSXZ",
const choosetype = ref('') "D_YJXX_CKCZJG"
const listQuery = ref({}) );
const chooseUserVisible = ref(false);
const roleIds = ref([]);
const elform = ref();
const showDialog = ref(false);
const loading = ref(false);
const choosetype = ref("");
const listQuery = ref({});
const formData = ref([ const formData = ref([
{ label: "发现目标状态", prop: "mbzt", type: "select", options: D_BZ_SF }, { label: "发现目标状态", prop: "mbzt", type: "select", options: D_BZ_SF },
{ label: "发现目标责任单位", prop: "mbzrdwdm", type: "department", depMc: 'mbzrdw' }, {
label: "发现目标责任单位",
prop: "mbzrdwdm",
type: "department",
depMc: "mbzrdw"
},
{ label: "发现目标责任民警", prop: "mbzrmjxm", type: "slot" }, { label: "发现目标责任民警", prop: "mbzrmjxm", type: "slot" },
{ label: "是否本人", prop: "sfbr", type: "select", options: D_BZ_SF }, { label: "是否本人", prop: "sfbr", type: "select", options: D_BZ_SF },
{ label: "处置时间", prop: "czsj", type: "datetime" }, { label: "处置时间", prop: "czsj", type: "datetime" },
{ label: "处置地址", prop: "czdz", type: "textarea", width: '100%' }, { label: "处置地址", prop: "czdz", type: "textarea", width: "100%" },
{ label: "详细地址", prop: "xxdz", type: "textarea", width: '100%' }, { label: "详细地址", prop: "xxdz", type: "textarea", width: "100%" },
{ label: "处置责任单位", prop: "czzrdwdm", type: "department", depMc: 'czzrdw' }, {
label: "处置责任单位",
prop: "czzrdwdm",
type: "department",
depMc: "czzrdw"
},
{ label: "处置责任民警", prop: "czzrmj", type: "slot" }, { label: "处置责任民警", prop: "czzrmj", type: "slot" },
{ label: "常控处置措施类型", prop: "ckczcslx", type: "select", options: D_YJXX_CZCSLX }, {
{ label: "常控处置措施细类", prop: "ckczcsxl", type: "select", options: D_YJXX_CZSSXZ }, label: "常控处置措施类型",
{ label: "常控处置结果", prop: "ckczjg", type: "select", options: D_YJXX_CKCZJG }, prop: "ckczcslx",
type: "select",
options: D_YJXX_CZCSLX
},
{
label: "常控处置措施细类",
prop: "ckczcsxl",
type: "select",
options: D_YJXX_CZSSXZ
},
{
label: "常控处置结果",
prop: "ckczjg",
type: "select",
options: D_YJXX_CKCZJG
},
{ label: "常控立线侦察评估", prop: "cklxzcpg", type: "input" }, { label: "常控立线侦察评估", prop: "cklxzcpg", type: "input" },
{ label: "常控立线侦察依据", prop: "cklxzcpgyj", type: "input" }, { label: "常控立线侦察依据", prop: "cklxzcpgyj", type: "input" },
{ label: "常控从事职业类型", prop: "ckzylx", type: "select", options: D_YJXX_CKZYLX }, {
label: "常控从事职业类型",
prop: "ckzylx",
type: "select",
options: D_YJXX_CKZYLX
},
{ label: "是否尿检", prop: "sfnj", type: "radio", options: D_BZ_SF }, { label: "是否尿检", prop: "sfnj", type: "radio", options: D_BZ_SF },
{ label: "常控不尿检理由", prop: "ckbnjly", type: "textarea", width: '100%' }, { label: "常控不尿检理由", prop: "ckbnjly", type: "textarea", width: "100%" },
{ label: "常控处置反馈补充信息", prop: "ckczbcxx", type: "textarea", width: '100%' }, {
]) label: "常控处置反馈补充信息",
prop: "ckczbcxx",
type: "textarea",
width: "100%"
}
]);
const rules = reactive({ const rules = reactive({
mbzt: [{ required: true, message: "请选择发现目标状态", trigger: "change" }], mbzt: [{ required: true, message: "请选择发现目标状态", trigger: "change" }],
fxmbzedw: [{ required: true, message: "请选择发现目标责任单位", trigger: "change" }], fxmbzedw: [
mbzrmjxm: [{ required: true, message: "请选择发现目标责任民警", trigger: "change" }], { required: true, message: "请选择发现目标责任单位", trigger: "change" }
],
mbzrmjxm: [
{ required: true, message: "请选择发现目标责任民警", trigger: "change" }
],
sfbr: [{ required: true, message: "请选择是否本人", trigger: "change" }], sfbr: [{ required: true, message: "请选择是否本人", trigger: "change" }],
czsj: [{ required: true, message: "请选择处置时间", trigger: "change" }], czsj: [{ required: true, message: "请选择处置时间", trigger: "change" }],
czdz: [{ required: true, message: "请选择处置地址", trigger: "blur" }], czdz: [{ required: true, message: "请选择处置地址", trigger: "blur" }],
xxdz: [{ required: true, message: "请选择详细地址", trigger: "blur" }], xxdz: [{ required: true, message: "请选择详细地址", trigger: "blur" }],
czzrdwdm: [{ required: true, message: "请选择处置责任单位", trigger: "change" }], czzrdwdm: [
czzrmj: [{ required: true, message: "请选择处置责任民警", trigger: "change" }], { required: true, message: "请选择处置责任单位", trigger: "change" }
ckczcslx: [{ required: true, message: "请选择常控处置措施类型", trigger: "change" }], ],
ckczcsxl: [{ required: true, message: "请选择常控处置措施细类", trigger: "change" }], czzrmj: [
{ required: true, message: "请选择处置责任民警", trigger: "change" }
],
ckczcslx: [
{ required: true, message: "请选择常控处置措施类型", trigger: "change" }
],
ckczcsxl: [
{ required: true, message: "请选择常控处置措施细类", trigger: "change" }
],
ckczjg: [{ required: true, message: "请输入常控处置结果", trigger: "blur" }], ckczjg: [{ required: true, message: "请输入常控处置结果", trigger: "blur" }],
cklxzcpg: [{ required: true, message: "请输入常控立线侦察评估", trigger: "blur" }], cklxzcpg: [
cklxzcpgyj: [{ required: true, message: "请输入常控立线侦察依据", trigger: "blur" }], { required: true, message: "请输入常控立线侦察评估", trigger: "blur" }
ckzylx: [{ required: true, message: "请选择常控从事职业类型", trigger: "change" }], ],
sfnj: [{ required: true, message: "请选择是否尿检", trigger: "change" }], cklxzcpgyj: [
}) { required: true, message: "请输入常控立线侦察依据", trigger: "blur" }
],
ckzylx: [
{ required: true, message: "请选择常控从事职业类型", trigger: "change" }
],
sfnj: [{ required: true, message: "请选择是否尿检", trigger: "change" }]
});
const title = ref('') const title = ref("");
onMounted(() => { onMounted(() => {
emitter.on("openFkDialog", (val) => { emitter.on("openFkDialog", (val) => {
showDialog.value = true; showDialog.value = true;
listQuery.value = { yjid: val.id } listQuery.value = { yjid: val.id };
let url = '' let url = "";
switch (props.lx) { switch (props.lx) {
case '01': case "01":
url = '/mosty-gsxt/tbYjxx/getInfo/' url = "/mosty-gsxt/tbYjxx/getInfo/";
break; break;
case '02': case "02":
url = '/mosty-gsxt/yjzxXwyj/' url = "/mosty-gsxt/yjzxXwyj/";
break; break;
case '03': case "03":
url = '/mosty-gsxt/yjzxSfyj/' url = "/mosty-gsxt/yjzxSfyj/";
break; break;
case '04': case "04":
url = '/mosty-gsxt/yjzxZhyj/' url = "/mosty-gsxt/yjzxZhyj/";
break; break;
} }
title.value = val.type; title.value = val.type;
if (val.type == '查看反馈') { if (val.type == "查看反馈") {
qcckGet({}, url + val.id).then((res) => { qcckGet({}, url + val.id).then((res) => {
let list = res.fkList || [] let list = res.fkList || [];
listQuery.value = list.length > 0 ? list[0] : {}; listQuery.value = list.length > 0 ? list[0] : {};
}); });
} }
}) });
}) });
const handleChoose = (type) => { const handleChoose = (type) => {
chooseUserVisible.value = true, (chooseUserVisible.value = true), (choosetype.value = type);
choosetype.value = type; };
}
// 选取角色 // 选取角色
const handleUserSelected = (val) => { const handleUserSelected = (val) => {
switch (choosetype.value) { switch (choosetype.value) {
case 'mbzrmjxm': case "mbzrmjxm":
listQuery.value.mbzrmjxm = val[0].userName listQuery.value.mbzrmjxm = val[0].userName;
listQuery.value.mbzrmjsfzh = val[0].inDustRialId listQuery.value.mbzrmjsfzh = val[0].inDustRialId;
break; break;
case 'czzrmj': case "czzrmj":
listQuery.value.czzrmj = val[0].userName listQuery.value.czzrmj = val[0].userName;
listQuery.value.czzrmjsfzh = val[0].inDustRialId listQuery.value.czzrmjsfzh = val[0].inDustRialId;
break; break;
} }
};
}
const submitForm = () => { const submitForm = () => {
elform.value.submit((val) => { elform.value.submit((val) => {
loading.value = true; loading.value = true;
const prome = { const prome = {
...listQuery.value, ...listQuery.value
} };
let url = '' let url = "";
switch (props.lx) { switch (props.lx) {
case '01': case "01":
url = '/mosty-gsxt/tbYjxx/yjfk' url = "/mosty-gsxt/tbYjxx/yjfk";
break; break;
case '02': case "02":
url = '/mosty-gsxt/yjzxXwyj/yjfk' url = "/mosty-gsxt/yjzxXwyj/yjfk";
break; break;
case '03': case "03":
url = '/mosty-gsxt/yjzxSfyj/yjfk' url = "/mosty-gsxt/yjzxSfyj/yjfk";
break; break;
case '04': case "04":
url = '/mosty-gsxt/yjzxZhyj/yjfk' url = "/mosty-gsxt/yjzxZhyj/yjfk";
break; break;
case '05': case "05":
url = '/mosty-gsxt/tbYjxx/yjfk' url = "/mosty-gsxt/tbYjxx/yjfk";
break; break;
} }
qcckPost(prome, url).then(() => { qcckPost(prome, url)
loading.value = false; .then(() => {
proxy.$message({ type: "success", message: "反馈成功" }); loading.value = false;
emit('change') proxy.$message({ type: "success", message: "反馈成功" });
close() emit("change");
}).catch(() => { close();
loading.value = false; })
}) .catch(() => {
}) loading.value = false;
} });
});
};
const close = () => { const close = () => {
elform.value.reset(); elform.value.reset();
listQuery.value = {} listQuery.value = {};
showDialog.value = false; showDialog.value = false;
} };
onUnmounted(() => { onUnmounted(() => {
emitter.off("openFkDialog") emitter.off("openFkDialog");
}) });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -281,7 +281,6 @@ const handleQsFk = (val, type) => {
emitter.emit("openFkDialog", { id: val.id, type }); emitter.emit("openFkDialog", { id: val.id, type });
break; break;
} }
} }
const addModelRef = ref(null) const addModelRef = ref(null)
const openAddModel = (row) => { const openAddModel = (row) => {

View File

@ -2,43 +2,93 @@
<div> <div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox" class="mt10"> <div ref="searchBox" class="mt10">
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'> <QueryFormPanel
v-model="listQuery"
:fields="searchConfiger"
@search="onSearch"
>
<template #but> <template #but>
<el-button type="primary" @click="exportExl" size="small">导出</el-button> <el-button type="primary" @click="exportExl" size="small"
<el-button type="primary" size="small" @click="handleQs">签收</el-button> >导出</el-button
>
<el-button type="primary" size="small" @click="handleQs"
>签收</el-button
>
</template> </template>
</QueryFormPanel> </QueryFormPanel>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class=" tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }"> <div
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight" class="tabBox_zdy"
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table" :style="{ height: pageData.tableHeight + 40 + 'px' }"
@selectionChange="handleChooseData"> >
<WarnDataTable
:loading="pageData.tableConfiger.loading"
:tableHeight="pageData.tableHeight"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="warn-table"
@selectionChange="handleChooseData"
>
<template #yjTp="{ row }"> <template #yjTp="{ row }">
<template 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="30" v-if="row.yjLx == 2" /> <img
<img src="@/assets/images/default_male.png" width="30" height="30" v-else /> 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> </template>
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]" <el-image
show-progress> v-else
style="width: 30px; height: 30px"
:src="row.yjTp"
:preview-src-list="[row.yjTp]"
show-progress
>
<template #error> <template #error>
<div class="image-slot error"> <div class="image-slot error">
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" /> <img
<img src="@/assets/images/default_male.png" width="30" height="30" v-else /> 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> </div>
</template> </template>
</el-image> </el-image>
</template> </template>
<template #czzt="{ row }"> <template #czzt="{ row }">
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false" <DictTag
:options="D_GSXT_YJXX_CZZT" /> :value="row.czzt"
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
:tag="false"
:options="D_GSXT_YJXX_CZZT"
/>
</template> </template>
<template #xbdm="{ row }"> <template #xbdm="{ row }">
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" /> <DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
</template> </template>
<template #yjJb="{ row }"> <template #yjJb="{ row }">
<div :style="{ 'background-color': bqYs(row.yjJb) }"> <div :style="{ 'background-color': bqYs(row.yjJb) }">
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" /> <DictTag
:value="row.yjJb"
color="#fff"
:tag="false"
:options="D_BZ_YJJB"
/>
</div> </div>
</template> </template>
<template #bkly="{ row }"> <template #bkly="{ row }">
@ -47,9 +97,7 @@
<template #bkczyq="{ row }"> <template #bkczyq="{ row }">
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" /> <DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
</template> </template>
<template #xsd="{ row }"> <template #xsd="{ row }"> {{ row.xsd }}% </template>
{{ row.xsd }}%
</template>
<template #yjLylx="{ row }"> <template #yjLylx="{ row }">
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_SJLY" /> <DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_SJLY" />
</template> </template>
@ -57,41 +105,70 @@
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" /> <DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex; justify-content: space-between">
<span class="warning" @click="pushAssess(row)">全息档案</span> <span class="warning" @click="pushAssess(row)">全息档案</span>
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span> <span class="primary" @click="handleCzjy(row)" v-if="roleCode"
>处置建议</span
>
<!-- <span type="primary" @click="showDetail(row)">转合成</span> --> <!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> --> <!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span> <span
<span class="success" @click="handleQsFk(row, '反馈')" class="success"
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span> @click="handleQsFk(row, '签收')"
v-if="row.czzt == '01'"
>签收</span
>
<span
class="success"
@click="handleQsFk(row, '反馈')"
v-else-if="row.czzt == '02'"
>反馈</span
>
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> --> <!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
<span class="primary" @click="openBox(row)">详情</span> <span class="primary" @click="openBox(row)">详情</span>
<span class="primary" @click="pushWarning(row)">指派</span> <span class="primary" @click="pushWarning(row)">指派</span>
</div> </div>
</template> </template>
</WarnDataTable> </WarnDataTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages
...pageData.pageConfiger, @changeNo="changeNo"
total: pageData.total @changeSize="changeSize"
}"></Pages> :tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div> </div>
</div> </div>
<FkDialog @change="getList" lx="05" /> <FkDialog @change="getList" lx="05" />
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" /> <AddFrom
ref="addModelRef"
:dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"
/>
<!-- 处置建议 --> <!-- 处置建议 -->
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy> <Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
<ZpForm v-model="warningShow" :dataList="dataList" /> <ZpForm v-model="warningShow" :dataList="dataList" />
<!-- <Pagination v-model="paginationOpen" /> --> <!-- <Pagination v-model="paginationOpen" /> -->
<Pagination v-model="paginationOpen" :dataList="dataPres" <Pagination
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" /> 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> </template>
<script setup> <script setup>
import { IdCard } from '@/utils/validate.js' import { IdCard } from "@/utils/validate.js";
import Czjy from './components/czjy.vue' import Czjy from "./components/czjy.vue";
import { getItem, setItem } from '@/utils/storage' import { getItem, setItem } from "@/utils/storage";
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue' import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue"; import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import AddFrom from "./components/addFrom.vue"; import AddFrom from "./components/addFrom.vue";
@ -100,46 +177,195 @@ import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/seve
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import { holographicProfileJump } from "@/utils/tools.js" import { holographicProfileJump } from "@/utils/tools.js";
import Items from "./item/items.vue" import Items from "./item/items.vue";
import { exportExlByObj } from "@/utils/exportExcel.js" import { exportExlByObj } from "@/utils/exportExcel.js";
import { getMultiDictVal } from "@/utils/dict.js" import { getMultiDictVal } from "@/utils/dict.js";
import Pagination from "./components/particulars.vue"; import Pagination from "./components/particulars.vue";
const czjyRef = ref() const czjyRef = ref();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const searchBox = ref(); 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, 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 {
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ }) 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([ const searchConfiger = ref([
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" }, {
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" }, label: "布控开始时间",
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" }, prop: "bkkssj",
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true }, showType: "date",
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" }, placeholder: "请选择布控开始时间"
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" }, },
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" }, {
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" }, label: "布控结束时间",
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" }, prop: "bkjssj",
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' }, showType: "date",
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' }, 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: "预警时间",
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" }, prop: "startTime",
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" }, showType: "datetimerange",
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" }, placeholder: "请选择预警时间"
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" }, },
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" }, {
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" }, label: "预警级别",
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" }, prop: "yjJb",
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" }, 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: "请输入相似度"
},
{
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: "请选择布控状态"
},
{
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: "请输入预警内容"
}
]); ]);
const ORDIMG = 'https://89.40.7.122:38496/image' const ORDIMG = "https://89.40.7.122:38496/image";
const IMGYM = 'https://sg.lz.dsj.xz/dhimage' const IMGYM = "https://sg.lz.dsj.xz/dhimage";
const permission_sfqs = ref(false) const permission_sfqs = ref(false);
const roleCode = ref(false) const roleCode = ref(false);
const queryFrom = ref({}); const queryFrom = ref({});
@ -151,7 +377,7 @@ const pageData = reactive({
rowHieght: 61, rowHieght: 61,
showSelectType: "checkBox", showSelectType: "checkBox",
loading: false, loading: false,
haveControls: true, haveControls: true
}, },
total: 0, total: 0,
pageConfiger: { pageConfiger: {
@ -160,37 +386,37 @@ const pageData = reactive({
}, },
controlsWidth: 180, //操作栏宽度 controlsWidth: 180, //操作栏宽度
tableColumn: [ tableColumn: [
{ type: 'index', label: '序号', width: 55, align: 'center' }, { type: "index", label: "序号", width: 55, align: "center" },
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' }, { label: "处置状态", align: "center", width: 70, slotName: "czzt" },
{ prop: 'yjSj', label: '预警时间', width: 80 }, { prop: "yjSj", label: "预警时间", width: 80 },
{ prop: 'yjRyxm', label: '人员姓名', width: 70 }, { prop: "yjRyxm", label: "人员姓名", width: 70 },
{ prop: 'yjRysfzh', label: '身份证号', width: 80 }, { prop: "yjRysfzh", label: "身份证号", width: 80 },
{ label: '性别', width: 50, align: 'center', slotName: 'xbdm' }, { label: "性别", width: 50, align: "center", slotName: "xbdm" },
{ prop: 'nl', label: '年龄', width: 50, align: 'center' }, { prop: "nl", label: "年龄", width: 50, align: "center" },
{ label: '预警级别', width: 80, align: 'center', slotName: 'yjJb' }, { label: "预警级别", width: 80, align: "center", slotName: "yjJb" },
{ label: "布控单位", prop: "gkbmmc", align: 'center' }, { label: "布控单位", prop: "gkbmmc", align: "center" },
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 }, { label: "布控来源", align: "center", slotName: "bkly", width: 70 },
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 }, { prop: "bkfw", label: "布控范围", align: "center", width: 70 },
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' }, { prop: "bkkssj", label: "布控开始时间", align: "center" },
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' }, { prop: "bkjssj", label: "布控结束时间", align: "center" },
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' }, { label: "处置要求", width: 70, slotName: "bkczyq", align: "center" },
{ label: "预警内容", prop: "yjNr", align: 'center' }, { label: "预警内容", prop: "yjNr", align: "center" },
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 }, { label: "相似度", slotName: "xsd", align: "center", width: 50 },
{ label: "所属部门", prop: "ssbm", align: 'center' }, { label: "所属部门", prop: "ssbm", align: "center" },
{ label: "数据来源", slotName: "yjLylx", align: 'center' }, { label: "数据来源", slotName: "yjLylx", align: "center" },
{ label: '操作', width: 180, slotName: 'operation' }, { label: "操作", width: 180, slotName: "operation" },
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }, { label: "超时状态", width: 80, align: "center", slotName: "cszt" },
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" }, { label: "在控状态", width: 70, align: "center", slotName: "zkzt" }
] ]
}); });
onMounted(() => { onMounted(() => {
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : '' 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 => { 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; roleCode.value = obj ? true : false;
tabHeightFn(); tabHeightFn();
@ -199,13 +425,14 @@ onMounted(() => {
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { queryFrom.value = {
...queryFrom.value, ...val, ...queryFrom.value,
startTime: val.startTime ? val.startTime[0] : '', ...val,
endTime: val.startTime ? val.startTime[1] : '', startTime: val.startTime ? val.startTime[0] : "",
yjJb: val.yjJb?.join(',') || '', endTime: val.startTime ? val.startTime[1] : "",
sfglyj: val.sfglyj?.join(',') || '', yjJb: val.yjJb?.join(",") || "",
sfgz: val.sfgz?.join(',') || '', sfglyj: val.sfglyj?.join(",") || "",
sfzp: val.sfzp?.join(',') || '' sfgz: val.sfgz?.join(",") || "",
sfzp: val.sfzp?.join(",") || ""
}; };
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
@ -213,9 +440,9 @@ const onSearch = (val) => {
}; };
const reset = () => { const reset = () => {
delete queryFrom.value.ksfz delete queryFrom.value.ksfz;
delete queryFrom.value.jsfz delete queryFrom.value.jsfz;
} };
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val; pageData.pageConfiger.pageCurrent = val;
@ -232,89 +459,92 @@ const getList = () => {
let params = { let params = {
...queryFrom.value, ...queryFrom.value,
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize, pageSize: pageData.pageConfiger.pageSize
} };
qcckPost(params, '/mosty-gsxt/tbYjxx/getBdbkPageList').then((res) => { qcckPost(params, "/mosty-gsxt/tbYjxx/getBdbkPageList")
pageData.tableData = res?.records || [] .then((res) => {
pageData.total = res?.total || 0; pageData.tableData = res?.records || [];
pageData.tableConfiger.loading = false; pageData.total = res?.total || 0;
}).catch(() => { pageData.tableConfiger.loading = false;
pageData.tableConfiger.loading = false; })
}); .catch(() => {
pageData.tableConfiger.loading = false;
});
}; };
// 处理签收 // 处理签收
const handleQsFk = (val, type) => { const handleQsFk = (val, type) => {
switch (type) { switch (type) {
case '签收': case "签收":
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => { proxy
qcckPost({ id: val.id }, "/mosty-gsxt/mosty-gsxt/tbYjxx/yjqs").then(() => { .$confirm("是否确定要签收?", "警告", { type: "warning" })
val.czzt = '02' .then(() => {
getList() qcckPost({ id: val.id }, "/mosty-gsxt/mosty-gsxt/tbYjxx/yjqs").then(
proxy.$message({ type: "success", message: "签收成功" }); () => {
val.czzt = "02";
getList();
proxy.$message({ type: "success", message: "签收成功" });
}
);
}); });
})
break; break;
case '反馈': case "反馈":
case '查看反馈': case "查看反馈":
emitter.emit("openFkDialog", { id: val.id, type }); emitter.emit("openFkDialog", { id: val.id, type });
break; break;
} }
} };
const pushAssess = (val) => { const pushAssess = (val) => {
return holographicProfileJump(val?.yjLx, val) // 全息档案跳转 return holographicProfileJump(val?.yjLx, val); // 全息档案跳转
} };
const bqYs = (val) => { const bqYs = (val) => {
switch (val) { switch (val) {
case '01': case "01":
return '#ff0202' return "#ff0202";
case '02': case "02":
return '#ff8c00' return "#ff8c00";
case '03': case "03":
return '#ffff00' return "#ffff00";
case '04': case "04":
return '#0000ff' return "#0000ff";
default: default:
return '' return "";
} }
} };
// 新增 // 新增
const addModelRef = ref(null) const addModelRef = ref(null);
const openAddFrom = (row) => { const openAddFrom = (row) => {
addModelRef.value.init('add', row) addModelRef.value.init("add", row);
} };
const handleCzjy = (row) => { const handleCzjy = (row) => {
czjyRef.value.init(row) czjyRef.value.init(row);
} };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230; pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 230;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
}; };
// 指派 // 指派
const dataList = ref(null) const dataList = ref(null);
const warningShow = ref(false) const warningShow = ref(false);
const pushWarning = (val) => { const pushWarning = (val) => {
warningShow.value = true; warningShow.value = true;
dataList.value = val; dataList.value = val;
} };
/** 选中项 */ /** 选中项 */
const selectRows = ref([]) const selectRows = ref([]);
const handleChooseData = (val) => { const handleChooseData = (val) => {
selectRows.value = val selectRows.value = val;
} };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
czzt_cname: "处置状态", czzt_cname: "处置状态",
@ -329,48 +559,62 @@ const exportExl = () => {
yjCs: "预警次数", yjCs: "预警次数",
yjRysjh: "布控手机号", yjRysjh: "布控手机号",
yjClcph: "布控车牌号", yjClcph: "布控车牌号",
yjRysfzh: "身份证", yjRysfzh: "身份证"
} };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData const needArr =
const data = needArr.map(item => { selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => {
return { return {
...item, ...item,
nl_cname: IdCard(item.yjRysfzh, 3), nl_cname: IdCard(item.yjRysfzh, 3),
xb_cname: IdCard(item.yjRysfzh, 2), xb_cname: IdCard(item.yjRysfzh, 2),
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%', xsd_cname: (item.xsd > 0 ? item.xsd : 0) + "%",
yjJb_name: getMultiDictVal(item.yjJb, D_GS_SSYJ), yjJb_name: getMultiDictVal(item.yjJb, D_GS_SSYJ),
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT), czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB), yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB)
} };
}) });
exportExlByObj(titleObj, data, '预警布控') exportExlByObj(titleObj, data, "预警布控");
} };
const handleQs = () => { const handleQs = () => {
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" }); if (selectRows.value?.length === 0)
let wqs = selectRows.value.filter(item => item.czzt == '01'); return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" }); let wqs = selectRows.value.filter((item) => item.czzt == "01");
let yqs = selectRows.value.filter(item => item.czzt == '02'); if (wqs.length == 0)
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?' return proxy.$message({
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => { type: "warning",
let ids = wqs.map(item => item.id) message: "数据都已签收,请选择未签收的数据"
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
proxy.$message({ type: "success", message: "成功" });
getList();
}).catch(() => {
proxy.$message({ type: "error", message: "失败" });
}); });
}).catch(() => { }); 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 paginationOpen = ref(false);
const dataPres = ref({}) const dataPres = ref({});
const openBox = (val) => { const openBox = (val) => {
paginationOpen.value = true paginationOpen.value = true;
dataPres.value = val dataPres.value = val;
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -14,6 +14,9 @@
<el-button type="primary" size="small" @click="handleQs" <el-button type="primary" size="small" @click="handleQs"
>签收</el-button >签收</el-button
> >
<el-button type="primary" size="small" @click="handleRelatedWarning"
>关联预警</el-button
>
</template> </template>
</QueryFormPanel> </QueryFormPanel>
</div> </div>
@ -78,13 +81,13 @@
<span <span
class="success" class="success"
@click="handleQsFk(row, '签收')" @click="handleQsFk(row, '签收')"
v-if="row.czzt == '01' && permission_sfqs" v-if="row.czzt == '01'"
>签收</span >签收</span
> >
<span <span
class="success" class="success"
@click="handleQsFk(row, '反馈')" @click="handleQsFk(row, '反馈')"
v-else-if="row.czzt == '02' && permission_sfqs" v-else-if="row.czzt == '02'"
>反馈</span >反馈</span
> >
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> --> <!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
@ -125,6 +128,12 @@
D_GS_BK_CZYQ D_GS_BK_CZYQ
}" }"
/> />
<DeploymentDataDialog
v-model="selectDataVisible"
title="关联预警"
@confirm="handleSelectConfirm"
:currentRelatedRow="currentRelatedRow"
/>
</template> </template>
<script setup> <script setup>
@ -144,6 +153,8 @@ import { holographicProfileJump } from "@/utils/tools.js";
import { exportExlByObj } from "@/utils/exportExcel.js"; import { exportExlByObj } from "@/utils/exportExcel.js";
import { getMultiDictVal } from "@/utils/dict.js"; import { getMultiDictVal } from "@/utils/dict.js";
import Pagination from "./components/particulars.vue"; import Pagination from "./components/particulars.vue";
import DeploymentDataDialog from "../../YjData/DeploymentDataDialog.vue";
const czjyRef = ref(); const czjyRef = ref();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const searchBox = ref(); const searchBox = ref();
@ -458,32 +469,40 @@ const handleChooseData = (val) => {
}; };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
czzt_cname: "处置状态", index: "序号",
czzt_name: "处置状态",
yjSj: "预警时间", yjSj: "预警时间",
yjRyxm: "姓名", yjRyxm: "人员姓名",
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3) xbdm_name: "性别",
yjLylx: "数据来源", nl: "年龄",
xb_cname: "性别", yjRysfzh: "身份证号",
yjJb_cname: "预警级别", qblyjb_name: "管控级别",
xsd_cname: "相似度", yjJb_name: "预警级别",
yjDz: "预警地点", bksj: "布控时间",
yjCs: "预警次数", ssbm: "接收单位",
yjRysjh: "布控手机号", gkbmmc: "布控单位",
yjClcph: "布控车牌号", bkyjlx_name: "比对源",
yjRysfzh: "身份证" xsd_name: "相似度",
yjNr: "预警内容",
cszt_name: "超时状态",
zkzt_name: "在控状态"
}; };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = const needArr =
selectRows.value?.length > 0 ? selectRows.value : pageData.tableData; selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => { const data = needArr.map((item, index) => {
return { return {
...item, index: index + 1,
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), czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB) xbdm_name: getMultiDictVal(item.xbdm, D_BZ_XB),
qblyjb_name: getMultiDictVal(item.qblyjb, D_BZ_QBLYJB),
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
bkyjlx_name: getMultiDictVal(item.bkyjlx, D_BZ_BKYJLX),
xsd_name: (item.xsd > 0 ? item.xsd : 0) + "%",
cszt_name: getMultiDictVal(item.cszt, D_GS_CSZT),
zkzt_name: getMultiDictVal(item.zkzt, D_GS_BKZT),
bksj: item.bkkssj && item.bkjssj ? `${item.bkkssj} - ${item.bkjssj}` : "",
...item
}; };
}); });
exportExlByObj(titleObj, data, "预警布控"); exportExlByObj(titleObj, data, "预警布控");
@ -526,6 +545,32 @@ const openBox = (val) => {
paginationOpen.value = true; paginationOpen.value = true;
dataPres.value = val; dataPres.value = val;
}; };
// 关联预警弹窗
const selectDataVisible = ref(false);
const currentRelatedRow = ref(null);
// 关联预警
const handleRelatedWarning = () => {
if (selectRows.value.length === 0) {
proxy.$message({ type: "warning", message: "请先选择一条数据" });
return;
}
if (selectRows.value.length > 1) {
proxy.$message({ type: "warning", message: "只能选择一条数据" });
return;
}
currentRelatedRow.value = selectRows.value[0];
selectDataVisible.value = true;
};
// 确认关联预警
const handleSelectConfirm = (selectedData) => {
console.log("关联预警数据:", selectedData);
console.log("当前选中行:", currentRelatedRow.value);
// 这里可以调用接口进行关联操作
// qcckPost({ ... }, "/api/xxx").then(res => { ... })
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -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>

View File

@ -11,6 +11,7 @@
placeholder="开始分值" placeholder="开始分值"
style="width: 130px" style="width: 130px"
clearable clearable
:min="0"
></el-input> ></el-input>
<el-input <el-input
v-model="queryFrom.yjjsfz" v-model="queryFrom.yjjsfz"
@ -18,6 +19,27 @@
placeholder="结束分值" placeholder="结束分值"
style="width: 130px" style="width: 130px"
clearable clearable
:min="0"
></el-input>
</div>
</template>
<template #yjcs>
<div>
<el-input
v-model="queryFrom.ksyjcs"
type="number"
placeholder="开始次数"
style="width: 130px"
clearable
:min="0"
></el-input>
<el-input
v-model="queryFrom.jsyjcs"
type="number"
placeholder="结束次数"
style="width: 130px"
clearable
:min="0"
></el-input> ></el-input>
</div> </div>
</template> </template>
@ -47,6 +69,13 @@
row.sfcs row.sfcs
}}</span> }}</span>
</template> </template>
<template #yjcs="{ row }">
<span
style="color: #0072ff; cursor: pointer"
@click="openYjDetail(row)"
>{{ row.yjcs }}</span
>
</template>
<template #czzt="{ row }"> <template #czzt="{ row }">
<DictTag <DictTag
:value="row.czzt" :value="row.czzt"
@ -143,6 +172,13 @@
url="/yjzxSfyj/sjxspz" url="/yjzxSfyj/sjxspz"
:roleIds="roleIds" :roleIds="roleIds"
/> />
<!-- 预警详情弹窗 -->
<dialogYjList
v-model="yjDetailVisible"
:dataList="yjDetailData"
:dict="{ D_BZ_JQLY, JQLB, D_BZ_JQDJ, JQXL, JQLX }"
/>
</template> </template>
<script setup> <script setup>
@ -162,6 +198,7 @@ import { qcckPost, qcckGet } from "@/api/qcckApi.js";
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js"; import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
import { tbGsxtBqglSelectList } from "@/api/zdr"; import { tbGsxtBqglSelectList } from "@/api/zdr";
import Detail from "./components/detail.vue"; import Detail from "./components/detail.vue";
import dialogYjList from "@/views/backOfficeSystem/fourColorManage/YjData/dialogYjList.vue";
import { watch } from "vue"; import { watch } from "vue";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import { holographicProfileJump, bqYs } from "@/utils/tools.js"; import { holographicProfileJump, bqYs } from "@/utils/tools.js";
@ -173,13 +210,28 @@ import { IdCard } from "@/utils/dict.js";
const czjyRef = ref(); const czjyRef = ref();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const searchBox = ref(); const searchBox = ref();
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJBQLX } = proxy.$dict( // const { } = proxy.$dict();
const {
D_GSXT_YJXX_CZZT,
D_GS_SSYJ,
D_BZ_YJJB,
D_BZ_YJBQLX,
D_BZ_JQDJ,
D_GS_BQ_DJ,
JQLB,
D_BZ_JQLY,
JQXL
} = proxy.$dict(
"D_GSXT_YJXX_CZZT", "D_GSXT_YJXX_CZZT",
"D_GS_SSYJ", "D_GS_SSYJ",
"D_BZ_YJJB", "D_BZ_YJJB",
"D_BZ_YJBQLX" "D_BZ_YJBQLX",
"D_BZ_JQDJ",
"D_GS_BQ_DJ",
"JQLB",
"D_BZ_JQLY",
"JQXL"
); );
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ });
// 搜索配置 // 搜索配置
const searchConfiger = ref([ const searchConfiger = ref([
@ -226,7 +278,7 @@ const searchConfiger = ref([
{ {
key: "yjcs", key: "yjcs",
label: "活动频次", label: "活动频次",
type: "input", type: "slot",
placeholder: "请输入活动频次" placeholder: "请输入活动频次"
}, },
{ {
@ -268,8 +320,9 @@ const pageData = reactive({
{ label: "年龄", align: "center", slotName: "nl", align: "center" }, { label: "年龄", align: "center", slotName: "nl", align: "center" },
{ label: "标签类型", align: "center", slotName: "yjLylx" }, { label: "标签类型", align: "center", slotName: "yjLylx" },
{ label: "标签级别", align: "center", slotName: "yjjb" }, { label: "标签级别", align: "center", slotName: "yjjb" },
{ prop: "yjbq", label: "预警类别", align: "center", width: 120 },
{ prop: "ssbm", label: "接收单位", align: "center", width: 200 }, { prop: "ssbm", label: "接收单位", align: "center", width: 200 },
{ prop: "yjcs", label: "活动频次", align: "center" }, { label: "活动频次", align: "center", slotName: "yjcs" },
{ prop: "yjfz", label: "标签分值", align: "center" }, { prop: "yjfz", label: "标签分值", align: "center" },
{ label: "操作", width: 200, slotName: "operation" } { label: "操作", width: 200, slotName: "operation" }
] ]
@ -375,6 +428,14 @@ const detailRef = ref();
const handleClick = (row) => { const handleClick = (row) => {
detailRef.value.init(row); detailRef.value.init(row);
}; };
// 预警详情弹窗
const yjDetailVisible = ref(false);
const yjDetailData = ref({});
const openYjDetail = (row) => {
yjDetailData.value = row;
yjDetailVisible.value = true;
};
// 处理签收 // 处理签收
const handleQsFk = (val, type) => { const handleQsFk = (val, type) => {
switch (type) { switch (type) {
@ -400,7 +461,10 @@ const handleQsFk = (val, type) => {
const assessShow = ref(false); const assessShow = ref(false);
const dataList = ref(); const dataList = ref();
const pushAssess = (val) => { const pushAssess = (val) => {
return holographicProfileJump(val.yjlb, val); // 全息档案跳转 window.open(
`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${val.rysfzh}&from=portal`
);
// return holographicProfileJump(val.yjlb, val); // 全息档案跳转
}; };
// 发送指令 // 发送指令
@ -475,26 +539,32 @@ const handleChooseData = (val) => {
}; };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
czzt_cname: "状态", index: "序号",
czzt_name: "处置状态",
yjsj: "预警时间", yjsj: "预警时间",
xm: "姓名", ryxm: "姓名",
sfzh: "身份证号", xb_name: "性别",
yjbqmc: "标签", rysfzh: "身份证号",
bqys_cname: "级别", nl: "年龄",
yjLylx_name: "标签类型",
yjjb_name: "标签级别",
yjbq: "预警类别",
ssbm: "接收单位", ssbm: "接收单位",
sfcs: "活动频次", yjcs: "活动频次",
bqfz: "标签分值", yjfz: "标签分值"
pzxs: "系数",
sffz: "计算分值"
}; };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = const needArr =
selectRows.value?.length > 0 ? selectRows.value : pageData.tableData; selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => { const data = needArr.map((item, index) => {
return { return {
...item, index: index + 1,
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ), czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT) xb_name: IdCard(item.rysfzh, 2),
nl: IdCard(item.rysfzh, 3),
yjLylx_name: getMultiDictVal(item.yjLylx, D_BZ_YJBQLX),
yjjb_name: getMultiDictVal(item.yjjb, D_BZ_YJJB),
...item
}; };
}); });
exportExlByObj(titleObj, data, "身份预警"); exportExlByObj(titleObj, data, "身份预警");

View File

@ -4,12 +4,65 @@
<div ref="searchBox" class="mt10 mb10"> <div ref="searchBox" class="mt10 mb10">
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount"> <!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
</Search> --> </Search> -->
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'> <QueryFormPanel
v-model="queryFrom"
:fields="searchConfiger"
ref="searchDom"
@search="onSearch"
>
<template #yjCs>
<div>
<el-input
v-model="queryFrom.yjkscs"
type="number"
placeholder="开始次数"
style="width: 130px"
clearable
:min="0"
></el-input>
<el-input
v-model="queryFrom.yjjscs"
type="number"
placeholder="结束次数"
style="width: 130px"
clearable
:min="0"
></el-input>
</div>
</template>
<template #nl>
<div>
<el-input
v-model="queryFrom.ksnl"
type="number"
placeholder="开始年龄"
style="width: 130px"
clearable
:min="0"
></el-input>
<el-input
v-model="queryFrom.jsnl"
type="number"
placeholder="结束年龄"
style="width: 130px"
clearable
:min="0"
></el-input>
</div>
</template>
<template #but> <template #but>
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button> <el-button type="primary" size="small" @click="exportExl"
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button> >批量导出</el-button
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button> >
<el-button type="primary" size="small" @click="countPeople">计算人数</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> </template>
</QueryFormPanel> </QueryFormPanel>
</div> </div>
@ -22,20 +75,34 @@
</template> </template>
</PageTitle> --> </PageTitle> -->
<!-- 表格 --> <!-- 表格 -->
<div style="background-color: #fff;"> <div style="background-color: #fff">
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight" <WarnDataTable
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table" :loading="pageData.tableConfiger.loading"
@selectionChange="handleChooseData"> :tableHeight="pageData.tableHeight"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="warn-table"
@selectionChange="handleChooseData"
>
<template #status="{ row }"> <template #status="{ row }">
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false" <DictTag
:options="D_GSXT_YJXX_CZZT" /> :value="row.czzt"
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
:tag="false"
:options="D_GSXT_YJXX_CZZT"
/>
</template> </template>
<template #xbdm="{ row }"> <template #xbdm="{ row }">
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" /> <DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
</template> </template>
<template #yjJb="{ row }"> <template #yjJb="{ row }">
<div :style="{ 'background-color': bqYs(row.yjJb) }"> <div :style="{ 'background-color': bqYs(row.yjJb) }">
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" /> <DictTag
:value="row.yjJb"
color="#fff"
:tag="false"
:options="D_BZ_YJJB"
/>
</div> </div>
</template> </template>
<template #bqdl="{ row }"> <template #bqdl="{ row }">
@ -48,68 +115,198 @@
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" /> <DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex; justify-content: space-between">
<span class="primary" @click="handleQsSingle(row)">签收</span> <span
class="primary"
@click="handleQsFk(row)"
v-if="row.czzt == '01'"
>签收</span
>
<span
class="primary"
@click="handleQsFk(row, '反馈')"
v-else-if="row.czzt == '02'"
>反馈</span
>
<span class="primary" @click="particularsOpen(row)">详情</span> <span class="primary" @click="particularsOpen(row)">详情</span>
<span class="warning" @click="pushWarning(row)">指派</span> <span class="warning" @click="pushWarning(row)">指派</span>
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span> <span
<span class="primary" @click="payAttention(row)">关注</span> class="warning"
v-if="row.sfbc != '1'"
@click="failWarning(row)"
>报错</span
>
<span
:class="row.sfgz == 0 ? 'primary' : 'danger'"
@click="payAttention(row)"
>{{ row.sfgz == 0 ? "关注" : "取消关注" }}
</span>
</div> </div>
</template> </template>
</WarnDataTable> </WarnDataTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages
...pageData.pageConfiger, @changeNo="changeNo"
total: pageData.total @changeSize="changeSize"
}"></Pages> :tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div> </div>
</div> </div>
<ZpForm v-model="warningShow" :dataList="dataList" /> <ZpForm v-model="warningShow" :dataList="dataList" />
<Particulars v-model="particularsShow" :dataList="dataPres" <Particulars
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" /> 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" /> <peopleConut v-model="searchOpen" :dataConut="dataConut" />
<FkDialog @change="getList" lx="03" />
</template> </template>
<script setup> <script setup>
import { getMultiDictVal } from "@/utils/dict.js" import { getMultiDictVal } from "@/utils/dict.js";
import { exportExlByObj } from "@/utils/exportExcel.js" import { exportExlByObj } from "@/utils/exportExcel.js";
import ZpForm from "./zpForm.vue"; import ZpForm from "./zpForm.vue";
import { bqYs } from '@/utils/tools.js' import { bqYs } from "@/utils/tools.js";
import Particulars from "./particulars.vue"; import Particulars from "./particulars.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue' import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue"; import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
import PageTitle from "@/components/aboutTable/PageTitle.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 Pages from "@/components/aboutTable/Pages.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, } from "vue"; import emitter from "@/utils/eventBus.js";
import peopleConut from "./peopleConut.vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import PeopleConut from "./peopleConut.vue";
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
const { proxy } = getCurrentInstance(); 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 {
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 searchBox = ref(); //搜索框
const warningShow = ref(false); const warningShow = ref(false);
const dataList = ref([]); const dataList = ref([]);
const searchConfiger = ref( const searchConfiger = ref([
[ {
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' }, key: "startTime",
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' }, label: "预警时间",
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' }, type: "datetimerange",
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' }, 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: "yjJb",
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' }, label: "预警级别",
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' }, type: "select",
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' }, options: D_BZ_YJJB,
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' }, multiple: true,
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' }, placeholder: "请选择预警级别"
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' }, },
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' }, {
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB }, key: "ssbmdm",
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB }, label: "接收单位",
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' }, type: "department",
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' } 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: "nl",
label: "年龄",
type: "slot",
placeholder: "请输入年龄"
},
{
key: "yjCs",
label: "预警次数",
type: "slot",
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 queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
@ -129,198 +326,245 @@ const pageData = reactive({
}, //分页 }, //分页
controlsWidth: 200, //操作栏宽度 controlsWidth: 200, //操作栏宽度
tableColumn: [ tableColumn: [
{ type: 'index', label: '序号', width: 55, align: 'center' }, { type: "index", label: "序号", width: 55, align: "center" },
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' }, { label: "预警状态", width: 86, align: "center", slotName: "status" },
{ prop: 'yjSj', label: '预警时间', width: 150 }, { prop: "yjSj", label: "预警时间", width: 150 },
{ prop: 'yjRyxm', label: '人员姓名', width: 80 }, { prop: "yjRyxm", label: "人员姓名", width: 80 },
{ prop: 'yjRysfzh', label: '身份证号', width: 158 }, { prop: "yjRysfzh", label: "身份证号", width: 158 },
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' }, { label: "性别", width: 56, align: "center", slotName: "xbdm" },
{ prop: 'nl', label: '年龄', width: 56, align: 'center' }, { prop: "nl", label: "年龄", width: 56, align: "center" },
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' }, { label: "预警级别", width: 88, align: "center", slotName: "yjJb" },
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' }, { label: "人员类别", width: 90, align: "center", slotName: "bqdl" },
{ prop: 'yjbqmc', label: '人员细类', width: 92 }, { prop: "yjbqmc", label: "人员细类", width: 92 },
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' }, { label: "轨迹类别", width: 92, align: "center", slotName: "yjLylx" },
{ prop: 'yjDz', label: '活动发生地' }, { prop: "yjDz", label: "活动发生地" },
{ prop: 'ssbm', label: '接收单位' }, { prop: "ssbm", label: "接收单位" },
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' }, { prop: "yjCs", label: "次数", width: 60, align: "center" },
{ label: '操作', width: 180, slotName: 'operation' }, { label: "操作", width: 180, slotName: "operation" },
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' } { label: "超时状态", width: 80, align: "center", slotName: "cszt" }
] ]
}); });
onMounted(() => { onMounted(() => {
tabHeightFn(); tabHeightFn();
getList() getList();
}); });
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' } queryFrom.value = { ...val, yjJb: val.yjJb?.join(",") || "" };
queryFrom.value.startTime = val.startTime ? val.startTime[0] : '' queryFrom.value.startTime = val.startTime ? val.startTime[0] : "";
queryFrom.value.endTime = val.startTime ? val.startTime[1] : '' queryFrom.value.endTime = val.startTime ? val.startTime[1] : "";
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || '' // queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
// queryFrom.value.sfgz = val.sfgz?.join(',') || '' // queryFrom.value.sfgz = val.sfgz?.join(',') || ''
// queryFrom.value.sfzp = val.sfzp?.join(',') || '' // queryFrom.value.sfzp = val.sfzp?.join(',') || ''
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList() getList();
} };
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val; pageData.pageConfiger.pageCurrent = val;
getList() getList();
} };
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList() getList();
} };
const getList = () => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
const promes = { const promes = {
...queryFrom.value, ...queryFrom.value,
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize, pageSize: pageData.pageConfiger.pageSize,
yjlb: '03' yjlb: "03"
} };
delete promes.times; delete promes.times;
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageList').then((res) => { qcckPost(promes, "/mosty-gsxt/tbYjxx/getPageList")
pageData.total = res.total || 0; .then((res) => {
pageData.tableConfiger.loading = false; pageData.total = res.total || 0;
pageData.tableData = res.records || [] pageData.tableConfiger.loading = false;
}).catch(() => { pageData.tableData = res.records || [];
pageData.tableConfiger.loading = false; })
}) .catch(() => {
} pageData.tableConfiger.loading = false;
});
};
const pushWarning = (val) => { const pushWarning = (val) => {
warningShow.value = true; warningShow.value = true;
dataList.value = val; dataList.value = val;
} };
const failWarning = (val) => { const failWarning = (val) => {
let ids = [val.id] let ids = [val.id];
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => { qcckPost({ ids }, "/mosty-gsxt/tbYjxx/yjbc")
proxy.$message({ type: "success", message: "成功" }); .then((res) => {
getList(); proxy.$message({ type: "success", message: "成功" });
}).catch(() => { getList();
proxy.$message({ type: "error", message: "失败" }); })
}); .catch(() => {
} proxy.$message({ type: "error", message: "失败" });
});
};
/** 选中项 */ /** 选中项 */
const selectRows = ref([]) const selectRows = ref([]);
const handleChooseData = (val) => { const handleChooseData = (val) => {
selectRows.value = val selectRows.value = val;
} };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
czzt_name: "状态", index: "序号",
czzt_name: "预警状态",
yjSj: "预警时间", yjSj: "预警时间",
yjRyxm: "人员姓名", yjRyxm: "人员姓名",
yjRysfzh: "身份证号", yjRysfzh: "身份证号",
xbdm_name: "性别",
nl: "年龄",
yjJb_name: "预警级别", yjJb_name: "预警级别",
bqdl_name: "人员类别", bqdl_name: "人员类别",
yjbqmc: "细类", yjbqmc: "人员细类",
yjLylx_name: "轨迹类别",
yjDz: "活动发生地", yjDz: "活动发生地",
ssbm: "接收单位", ssbm: "接收单位",
yjCs: "预警次数", yjCs: "次数",
} cszt_name: "超时状态"
};
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData const needArr =
const data = needArr.map(item => { selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item, index) => {
return { return {
...item, index: index + 1,
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT), czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB), yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX), bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
} xbdm_name: getMultiDictVal(item.xbdm, D_BZ_XB),
}) yjLylx_name: getMultiDictVal(item.yjLylx, D_GS_ZDR_GJLB),
exportExlByObj(titleObj, data, '七类重点') cszt_name: getMultiDictVal(item.cszt, D_GS_CSZT),
} ...item
};
});
exportExlByObj(titleObj, data, "七类重点");
};
// 批量签收 // 批量签收
const handleQs = () => { const handleQs = () => {
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" }); if (selectRows.value?.length === 0)
let wqs = selectRows.value.filter(item => item.czzt == '01'); return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" }); let wqs = selectRows.value.filter((item) => item.czzt == "01");
let yqs = selectRows.value.filter(item => item.czzt == '02'); if (wqs.length == 0)
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?' return proxy.$message({
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => { type: "warning",
let ids = wqs.map(item => item.id) message: "数据都已签收,请选择未签收的数据"
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
proxy.$message({ type: "success", message: "成功" });
getList();
}).catch(() => {
proxy.$message({ type: "error", message: "失败" });
}); });
}).catch(() => { }); 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 dataPres = ref({});
const particularsShow = ref(false); const particularsShow = ref(false);
const particularsOpen = (row) => { const particularsOpen = (row) => {
dataPres.value = row dataPres.value = row;
particularsShow.value = true; particularsShow.value = true;
} };
// 单条签收 // 单条签收
const handleQsSingle = (row) => { const handleQsFk = (row, type) => {
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" }); if (type === "反馈") {
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => { emitter.emit("openFkDialog", { id: row.id, type });
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => { } else {
proxy.$message({ type: "success", message: "成功" }); if (row.czzt == "02")
getList(); return proxy.$message({
}).catch(() => { type: "warning",
proxy.$message({ type: "error", message: "失败" }); message: "数据已签收,无需重复签收"
}); });
}).catch(() => { }); 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) => { const payAttention = (row) => {
let promes = {} let promes = {};
if (row.sfgz == '1') { if (row.sfgz == "1") {
promes.sfgz = '0' promes.sfgz = "0";
promes.msg = '取消关注' promes.msg = "取消关注";
} else { } else {
promes.sfgz = '1' promes.sfgz = "1";
promes.msg = '关注' promes.msg = "关注";
} }
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => { proxy
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => { .$confirm("确认要关注该条预警数据吗?", "警告", { type: "warning" })
proxy.$message({ type: "success", message: `${promes.msg}成功` }); .then(() => {
getList(); qcckPost({ sfgz: promes.sfgz, id: row.id }, "/mosty-gsxt/tbYjxx/yjgz")
}).catch(() => { .then(() => {
proxy.$message({ type: "error", message: `${promes.msg}失败` }); proxy.$message({ type: "success", message: `${promes.msg}成功` });
}); getList();
}).catch(() => { }); })
} .catch(() => {
proxy.$message({ type: "error", message: `${promes.msg}失败` });
});
})
.catch(() => {});
};
// 人数计算 // 人数计算
const searchDom = ref(null) const searchDom = ref(null);
const dataConut = ref(0) const dataConut = ref(0);
const searchOpen = ref(false) const searchOpen = ref(false);
const countPeople = () => { const countPeople = () => {
const promes = { const promes = {
...searchDom.value.formState, ...searchDom.value.formState,
yjJb: searchDom.value.formState.yjJb?.join(',') || '', yjJb: searchDom.value.formState.yjJb?.join(",") || "",
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '', startTime: searchDom.value.formState.startTime
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '', ? searchDom.value.formState.startTime[0]
} : "",
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => { endTime: searchDom.value.formState.endTime
dataConut.value = res || 0 ? searchDom.value.formState.endTime[1]
searchOpen.value = true : ""
}).catch(() => { };
// proxy.$message({ type: "error", message: `${promes.msg}失败` }); 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 = () => { const tabHeightFn = () => {
console.log("xxxxxxx"); pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 230;
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230; window.onresize = function () {
window.onresize = function () { tabHeightFn(); }; tabHeightFn();
};
}; };
</script> </script>

View File

@ -2,37 +2,79 @@
<div> <div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox" class="mt10"> <div ref="searchBox" class="mt10">
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'> <QueryFormPanel
v-model="listQuery"
:fields="searchConfiger"
@search="onSearch"
>
<template #but> <template #but>
<el-button type="primary" @click="exportExl" size="small">导出</el-button> <el-button type="primary" @click="exportExl" size="small"
<el-button type="primary" size="small" @click="handleQs">签收</el-button> >导出</el-button
>
<el-button type="primary" size="small" @click="handleQs"
>签收</el-button
>
</template> </template>
</QueryFormPanel> </QueryFormPanel>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div :style="{ height: (pageData.tableHeight + 40) + 'px' }" class="bgTable"> <div :style="{ height: pageData.tableHeight + 40 + 'px' }" class="bgTable">
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight" <WarnDataTable
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table" :loading="pageData.tableConfiger.loading"
@selectionChange="handleChooseData"> :tableHeight="pageData.tableHeight"
:data="pageData.tableData"
:columns="pageData.tableColumn"
table-class="warn-table"
@selectionChange="handleChooseData"
>
<template #yjTp="{ row }"> <template #yjTp="{ row }">
<template 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="30" v-if="row.yjLx == 2" /> <img
<img src="@/assets/images/default_male.png" width="30" height="30" v-else /> 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> </template>
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]" <el-image
show-progress> v-else
style="width: 30px; height: 30px"
:src="row.yjTp"
:preview-src-list="[row.yjTp]"
show-progress
>
<template #error> <template #error>
<div class="image-slot error"> <div class="image-slot error">
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" /> <img
<img src="@/assets/images/default_male.png" width="30" height="30" v-else /> 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> </div>
</template> </template>
</el-image> </el-image>
</template> </template>
<template #czzt="{ row }"> <template #czzt="{ row }">
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false" <DictTag
:options="D_GSXT_YJXX_CZZT" /> :value="row.czzt"
:color="row.czzt === '01' ? '#ff2424' : '#1d72e8'"
:tag="false"
:options="D_GSXT_YJXX_CZZT"
/>
</template> </template>
<template #yjRyxm="{ row }"> <template #yjRyxm="{ row }">
{{ row.yjLx == 2 ? row.yjClcph : row.yjRyxm }} {{ row.yjLx == 2 ? row.yjClcph : row.yjRyxm }}
@ -42,7 +84,12 @@
</template> </template>
<template #yjJb="{ row }"> <template #yjJb="{ row }">
<div :style="{ 'background-color': bqYs(row.yjJb) }"> <div :style="{ 'background-color': bqYs(row.yjJb) }">
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" /> <DictTag
:value="row.yjJb"
color="#fff"
:tag="false"
:options="D_BZ_YJJB"
/>
</div> </div>
</template> </template>
<template #bkly="{ row }"> <template #bkly="{ row }">
@ -51,88 +98,164 @@
<template #bkczyq="{ row }"> <template #bkczyq="{ row }">
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" /> <DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
</template> </template>
<template #xsd="{ row }"> <template #xsd="{ row }"> {{ row.xsd }}% </template>
{{ row.xsd }}%
</template>
<template #yjLylx="{ row }"> <template #yjLylx="{ row }">
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" /> <DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
</template> </template>
<template #yjLx="{ row }"> <template #yjLx="{ row }">
{{ row.yjLx == 2 ? '车辆' : '人员' }} {{ row.yjLx == 2 ? "车辆" : "人员" }}
</template> </template>
<template #cszt="{ row }"> <template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" /> <DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex; justify-content: space-between">
<span class="warning" @click="pushAssess(row)">全息档案</span> <span class="warning" @click="pushAssess(row)">全息档案</span>
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span> <span class="primary" @click="handleCzjy(row)" v-if="roleCode"
>处置建议</span
>
<!-- <span type="primary" @click="showDetail(row)">转合成</span> --> <!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> --> <!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span> <span
<span class="success" @click="handleQsFk(row, '反馈')" class="success"
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span> @click="handleQsFk(row, '签收')"
v-if="row.czzt == '01'"
>签收</span
>
<span
class="success"
@click="handleQsFk(row, '反馈')"
v-else-if="row.czzt == '02'"
>反馈</span
>
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> --> <!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
<span class="primary" @click="openBox(row)">详情</span> <span class="primary" @click="openBox(row)">详情</span>
<span class="primary" @click="pushWarning(row)">指派</span> <span class="primary" @click="pushWarning(row)">指派</span>
</div> </div>
</template> </template>
</WarnDataTable> </WarnDataTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages
...pageData.pageConfiger, @changeNo="changeNo"
total: pageData.total @changeSize="changeSize"
}"></Pages> :tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div> </div>
</div> </div>
<Detail ref="detailRef" /> <Detail ref="detailRef" />
<HolographicArchive v-model="assessShow" :dataList="dataList" /> <HolographicArchive v-model="assessShow" :dataList="dataList" />
<FkDialog @change="getList" lx="04" /> <FkDialog @change="getList" lx="04" />
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'> <Information
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" v-model="showDialog"
:tacitly="tacitly" /> title="发送指令"
@submit="submit"
@close="closeFszl"
>
<SemdFqzl
ref="semdFqzlRef"
:itemData="itemData"
@handleClose="handleClose"
identification="yj"
:tacitly="tacitly"
/>
</Information> </Information>
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" /> <AddFrom
ref="addModelRef"
:dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"
/>
<!-- 处置建议 --> <!-- 处置建议 -->
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy> <Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz" <ChooseJf
:roleIds="roleIds" /> v-model="chooseJfShow"
titleValue="选择系数"
:Single="false"
:chooseJfBh="chooseJfBh"
url="/yjzxZhyj/sjxspz"
:roleIds="roleIds"
/>
<!-- <Pagination v-model="paginationOpen" /> --> <!-- <Pagination v-model="paginationOpen" /> -->
<Pagination v-model="paginationOpen" :dataList="dataPres" <Pagination
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" /> 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> </template>
<script setup> <script setup>
import Czjy from './components/czjy.vue' import Czjy from "./components/czjy.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import Searchs from "@/components/aboutTable/Search.vue"; import Searchs from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Items from "./item/items.vue"; import Items from "./item/items.vue";
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue' import ChooseJf from "@/components/ChooseList/ChooseJf/index.vue";
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js' import {
import HolographicArchive from '@/views/home/components/holographicArchive.vue' tbYjxxGetZbtj,
tbGsxtBqzhSelectList,
yjzxZhyjSelectList
} from "@/api/yj.js";
import HolographicArchive from "@/views/home/components/holographicArchive.vue";
import Information from "@/views/home/model/information.vue"; import Information from "@/views/home/model/information.vue";
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue' import SemdFqzl from "@/components/instructionHasBeen/sendFqzl.vue";
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue"; import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
import AddFrom from "./components/addFrom.vue"; import AddFrom from "./components/addFrom.vue";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import Detail from './components/detail.vue' import Detail from "./components/detail.vue";
import { exportExlByObj } from "@/utils/exportExcel.js" import { exportExlByObj } from "@/utils/exportExcel.js";
import { getMultiDictVal } from "@/utils/dict.js" import { getMultiDictVal } from "@/utils/dict.js";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
import Pagination from "./components/particulars.vue"; import Pagination from "./components/particulars.vue";
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue' import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue"; import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
import { bqYs } from '@/utils/tools.js' import { bqYs } from "@/utils/tools.js";
const permission_sfqs = ref(false) const permission_sfqs = ref(false);
const roleCode = ref(false) const roleCode = ref(false);
const searchBox = ref(); const searchBox = ref();
const czjyRef = ref() const czjyRef = ref();
const { proxy } = getCurrentInstance(); 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, D_GS_QLZDRYXX } = const {
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"); 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({ const dict = ref({
@ -141,28 +264,116 @@ const dict = ref({
D_BZ_YJLY, D_BZ_YJLY,
D_BZ_YJJB, D_BZ_YJJB,
D_BZ_YJLX D_BZ_YJLX
}) });
import { holographicProfileJump } from "@/utils/tools.js" import { holographicProfileJump } from "@/utils/tools.js";
// 搜索配置 // 搜索配置
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" }, {
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" }, label: "布控开始时间",
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" }, prop: "bkkssj",
{ label: "比中项", prop: 'yjLx', showType: "select", options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }], multiple: true }, showType: "date",
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" }, placeholder: "请选择布控开始时间"
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" }, },
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" }, {
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT }, label: "布控结束时间",
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT }, prop: "bkjssj",
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" }, showType: "date",
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' }, placeholder: "请选择布控结束时间"
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' }, },
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' }, {
{ key: 'ksnl', label: '开始年龄', type: 'number', placeholder: '请输入开始年龄' }, label: "预警时间",
{ key: 'jsnl', label: '结束年龄', type: 'number', placeholder: '请输入结束年龄' }, prop: "startTime",
{ key: 'clcph', label: '车牌号码', type: 'input', placeholder: '请输入车牌号码' }, showType: "datetimerange",
{ key: 'yjNr', label: '预警内容', type: 'input', placeholder: '请输入预警内容' }, placeholder: "请选择预警时间"
},
{
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",
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: "请选择布控状态"
},
{ 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: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" }, // { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
// { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB }, // { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
@ -179,7 +390,7 @@ const pageData = reactive({
rowHieght: 61, rowHieght: 61,
showSelectType: "checkBox", showSelectType: "checkBox",
loading: false, loading: false,
haveControls: true, haveControls: true
}, },
total: 0, total: 0,
pageConfiger: { pageConfiger: {
@ -188,29 +399,29 @@ const pageData = reactive({
}, },
controlsWidth: 160, controlsWidth: 160,
tableColumn: [ tableColumn: [
{ type: 'index', label: '序号', width: 55, align: 'center' }, { type: "index", label: "序号", width: 55, align: "center" },
{ label: '预警状态', width: 80, align: 'center', slotName: 'czzt' }, { label: "预警状态", width: 80, align: "center", slotName: "czzt" },
{ prop: 'yjSj', label: '预警时间', width: 80, align: 'center' }, { prop: "yjSj", label: "预警时间", width: 80, align: "center" },
{ prop: 'bkqymc', label: '区域名称', width: 80, align: 'center' }, { prop: "bkqymc", label: "区域名称", width: 80, align: "center" },
{ label: "比中", slotName: 'yjLx', width: 60, align: 'center' }, { label: "比中", slotName: "yjLx", width: 60, align: "center" },
{ label: '人员姓名', slotName: 'yjRyxm', width: 80, align: 'center' }, { label: "人员姓名", slotName: "yjRyxm", width: 80, align: "center" },
{ prop: 'yjRysfzh', label: '身份证号', width: 80, align: 'center' }, { prop: "yjRysfzh", label: "身份证号", width: 80, align: "center" },
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' }, { label: "性别", width: 56, align: "center", slotName: "xbdm" },
{ prop: 'nl', label: '年龄', width: 56, align: 'center' }, { prop: "nl", label: "年龄", width: 56, align: "center" },
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' }, { label: "预警级别", width: 88, align: "center", slotName: "yjJb" },
{ label: "布控单位", prop: "gkbmmc", align: 'center' }, { label: "布控单位", prop: "gkbmmc", align: "center" },
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 }, { label: "布控来源", align: "center", slotName: "bkly", width: 70 },
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 }, { prop: "bkfw", label: "布控范围", align: "center", width: 70 },
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' }, { prop: "bkkssj", label: "布控开始时间", align: "center" },
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' }, { prop: "bkjssj", label: "布控结束时间", align: "center" },
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' }, { label: "处置要求", width: 70, slotName: "bkczyq", align: "center" },
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 }, { label: "相似度", slotName: "xsd", align: "center", width: 50 },
{ label: "预警内容", prop: "yjNr", align: 'center' }, { label: "预警内容", prop: "yjNr", align: "center" },
{ label: "所属部门", prop: "ssbm", align: 'center' }, { label: "所属部门", prop: "ssbm", align: "center" },
{ label: "数据来源", slotName: "yjLylx", align: 'center' }, { label: "数据来源", slotName: "yjLylx", align: "center" },
{ label: '操作', width: 180, slotName: 'operation' }, { label: "操作", width: 180, slotName: "operation" },
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }, { label: "超时状态", width: 80, align: "center", slotName: "cszt" },
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" }, { label: "在控状态", width: 70, align: "center", slotName: "zkzt" }
] ]
}); });
@ -225,24 +436,23 @@ onMounted(() => {
// roleCode.value = obj ? true : false; // roleCode.value = obj ? true : false;
tabHeightFn(); tabHeightFn();
getList(); getList();
gettbGsxtBqglSelectList() gettbGsxtBqglSelectList();
}); });
const handleCzjy = (row) => { const handleCzjy = (row) => {
czjyRef.value.init(row) czjyRef.value.init(row);
} };
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...queryFrom.value, ...val, yjLx: val.yjLx.join(',') }; queryFrom.value = { ...queryFrom.value, ...val, yjLx: val.yjLx.join(",") };
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList(); getList();
}; };
const reset = () => { const reset = () => {
delete queryFrom.value.ksfz delete queryFrom.value.ksfz;
delete queryFrom.value.jsfz delete queryFrom.value.jsfz;
} };
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val; pageData.pageConfiger.pageCurrent = val;
@ -261,121 +471,121 @@ const getList = () => {
...queryFrom.value, ...queryFrom.value,
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize pageSize: pageData.pageConfiger.pageSize
} };
qcckPost({ promes }, "/mosty-gsxt/tbYjxx/getQybkPageList").then((res) => { qcckPost({ promes }, "/mosty-gsxt/tbYjxx/getQybkPageList")
pageData.tableData = res.records || []; .then((res) => {
pageData.total = res.total || 0; pageData.tableData = res.records || [];
pageData.tableConfiger.loading = false; pageData.total = res.total || 0;
}).catch(() => { pageData.tableConfiger.loading = false;
pageData.tableConfiger.loading = false; })
}); .catch(() => {
pageData.tableConfiger.loading = false;
});
}; };
const bqLbData = ref({ const bqLbData = ref({
bqXl: [] bqXl: []
}) });
const gettbGsxtBqglSelectList = (val) => { const gettbGsxtBqglSelectList = (val) => {
tbGsxtBqzhSelectList({}).then((res) => { tbGsxtBqzhSelectList({}).then((res) => {
bqLbData.value.bqXl = res.map(item => { bqLbData.value.bqXl =
return { res.map((item) => {
label: item.bqMc, return {
value: item.bqDm label: item.bqMc,
} value: item.bqDm
}) || [] };
}) }) || [];
} });
};
// 查看详情 // 查看详情
const detailRef = ref() const detailRef = ref();
const handleClick = (row) => { const handleClick = (row) => {
detailRef.value.init(row) detailRef.value.init(row);
} };
const assessShow = ref(false) const assessShow = ref(false);
/** 选中项 */ /** 选中项 */
const selectRows = ref([]) const selectRows = ref([]);
const dataList = ref() const dataList = ref();
const pushAssess = (val) => { const pushAssess = (val) => {
return holographicProfileJump(val.yjlx, val) // 全息档案跳转 return holographicProfileJump(val.yjlx, val); // 全息档案跳转
// assessShow.value = true; // assessShow.value = true;
// dataList.value = val; // dataList.value = val;
} };
// 发送指令 // 发送指令
const showDialog = ref(false) const showDialog = ref(false);
const itemData = ref() const itemData = ref();
const showDetail = (item) => { const showDetail = (item) => {
showDialog.value = true; showDialog.value = true;
itemData.value = item itemData.value = item;
} };
const handleClose = () => { const handleClose = () => {
showDialog.value = false; showDialog.value = false;
} };
const semdFqzlRef = ref() const semdFqzlRef = ref();
const tacitly = { const tacitly = {
title: 'yjbt', title: "yjbt",
instructionContent: 'yjnr' instructionContent: "yjnr"
} };
const submit = () => { const submit = () => {
semdFqzlRef.value.getsendFqzl() semdFqzlRef.value.getsendFqzl();
} };
const closeFszl = () => { const closeFszl = () => {
semdFqzlRef.value.close() semdFqzlRef.value.close();
} };
// 处理签收 // 处理签收
const handleQsFk = (val, type) => { const handleQsFk = (val, type) => {
switch (type) { switch (type) {
case '签收': case "签收":
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => { proxy
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => { .$confirm("是否确定要签收?", "警告", { type: "warning" })
val.czzt = '02' .then(() => {
getList() qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
proxy.$message({ type: "success", message: "签收成功" }); val.czzt = "02";
getList();
proxy.$message({ type: "success", message: "签收成功" });
});
}); });
})
break; break;
case '反馈': case "反馈":
case '查看反馈': case "查看反馈":
emitter.emit("openFkDialog", { id: val.id, type }); emitter.emit("openFkDialog", { id: val.id, type });
break; break;
} }
};
} const addModelRef = ref(null);
const addModelRef = ref(null)
const openAddModel = (row) => { const openAddModel = (row) => {
console.log(row); console.log(row);
addModelRef.value.init(row) addModelRef.value.init(row);
} };
// 选择系数 // 选择系数
const chooseJfShow = ref(false) const chooseJfShow = ref(false);
const chooseJfBh = ref() const chooseJfBh = ref();
const roleIds = ref() const roleIds = ref();
const chooseJfFun = (val) => { const chooseJfFun = (val) => {
chooseJfBh.value = val.id chooseJfBh.value = val.id;
yjzxZhyjSelectList(val.id).then(res => { yjzxZhyjSelectList(val.id).then((res) => {
roleIds.value = res.sjxspzList.map(item => item.xsid) roleIds.value = res.sjxspzList.map((item) => item.xsid);
chooseJfShow.value = true chooseJfShow.value = true;
}) });
} };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230; pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 230;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
}; };
const handleChooseData = (val) => { const handleChooseData = (val) => {
selectRows.value = val selectRows.value = val;
} };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
yjRyxm: "姓名", yjRyxm: "姓名",
@ -389,46 +599,59 @@ const exportExl = () => {
yjbqmc: "预警标签", yjbqmc: "预警标签",
yjSj: "预警时间", yjSj: "预警时间",
czzt_cname: "处置状态", czzt_cname: "处置状态",
ssbm: "所属部门", ssbm: "所属部门"
} };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData const needArr =
const data = needArr.map(item => { selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => {
return { return {
...item, ...item,
bqys_cname: getMultiDictVal(item.yjLx, D_BZ_YJLX), bqys_cname: getMultiDictVal(item.yjLx, D_BZ_YJLX),
czzt_cname: getMultiDictVal(item.yjLylx, D_BZ_YJLY), czzt_cname: getMultiDictVal(item.yjLylx, D_BZ_YJLY),
bqys_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB), bqys_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT), czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT)
} };
}) });
exportExlByObj(titleObj, data, '组合预警') exportExlByObj(titleObj, data, "组合预警");
};
}
const handleQs = () => { const handleQs = () => {
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" }); if (selectRows.value?.length === 0)
let wqs = selectRows.value.filter(item => item.czzt == '01'); return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" }); let wqs = selectRows.value.filter((item) => item.czzt == "01");
let yqs = selectRows.value.filter(item => item.czzt == '02'); if (wqs.length == 0)
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?' return proxy.$message({
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => { type: "warning",
let ids = wqs.map(item => item.id) message: "数据都已签收,请选择未签收的数据"
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
proxy.$message({ type: "success", message: "成功" });
getList();
}).catch(() => {
proxy.$message({ type: "error", message: "失败" });
}); });
}).catch(() => { }); 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 paginationOpen = ref(false);
const dataPres = ref() const dataPres = ref();
const openBox = (val) => { const openBox = (val) => {
dataPres.value = val dataPres.value = val;
paginationOpen.value = true paginationOpen.value = true;
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -1,19 +1,34 @@
<template> <template>
<div> <div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox" class="mt10 mb10"> <div ref="searchBox" class="mt10 mb10">
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"> <Searchs
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
>
</Searchs> </Searchs>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="margTop" > <div class="margTop">
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
>
<template #sfcs="{ row }"> <template #sfcs="{ row }">
<span style="color: #0072ff;">{{ row.sfcs }}</span> <span style="color: #0072ff">{{ row.sfcs }}</span>
</template> </template>
<template #yjjb="{ row }"> <template #yjjb="{ row }">
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" /> <DictTag
:value="row.yjjb"
:tag="false"
:color="bqYs(row.yjjb)"
:options="D_BZ_YJJB"
/>
</template> </template>
<template #yjlx="{ row }"> <template #yjlx="{ row }">
<DictTag :value="row.yjlx" :tag="false" :options="D_GS_ZDQT_YJLB" /> <DictTag :value="row.yjlx" :tag="false" :options="D_GS_ZDQT_YJLB" />
@ -22,13 +37,21 @@
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" /> <DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
</template> </template>
<template #sffz="{ row }"> <template #sffz="{ row }">
<span :style="row.sffz > 100 ? 'color: #ff0000;' : 'color: #0072ff;'">{{ row.sffz }}</span> <span
:style="row.sffz > 100 ? 'color: #ff0000;' : 'color: #0072ff;'"
>{{ row.sffz }}</span
>
</template> </template>
<template #yjtp="{ row }"> <template #yjtp="{ row }">
<template 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="30" /> <img src="@/assets/images/car.png" width="30" height="30" />
</template> </template>
<el-image style="width: 30px; height:30px" :src="row.yjtp" :preview-src-list="[row.yjtp]" show-progress> <el-image
style="width: 30px; height: 30px"
:src="row.yjtp"
:preview-src-list="[row.yjtp]"
show-progress
>
<template #error> <template #error>
<div class="image-slot error"> <div class="image-slot error">
<img src="@/assets/images/car.png" width="30" height="30" /> <img src="@/assets/images/car.png" width="30" height="30" />
@ -46,10 +69,15 @@
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> --> <!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages
...pageData.pageConfiger, @changeNo="changeNo"
total: pageData.total @changeSize="changeSize"
}"></Pages> :tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div> </div>
</div> </div>
<!-- <Detail ref="detailRef" /> --> <!-- <Detail ref="detailRef" /> -->
@ -60,35 +88,66 @@
</template> </template>
<script setup> <script setup>
import { holographicProfileJump } from "@/utils/tools.js" import { holographicProfileJump } from "@/utils/tools.js";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import Searchs from "@/components/aboutTable/Search.vue"; import Searchs from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import DictTag from "@/components/DictTag/index.vue"; import DictTag from "@/components/DictTag/index.vue";
import { bqYs } from '@/utils/tools' import { bqYs } from "@/utils/tools";
// import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue"; // import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { yjzxSfyjSelectList } from "@/api/yj.js"; import { yjzxSfyjSelectList } from "@/api/yj.js";
import { tbGsxtBqglSelectList } from '@/api/zdr' import { tbGsxtBqglSelectList } from "@/api/zdr";
// import Detail from './components/detail.vue' // import Detail from './components/detail.vue'
import { watch } from "vue"; import { watch } from "vue";
import emitter from "@/utils/eventBus.js"; import emitter from "@/utils/eventBus.js";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const searchBox = ref(); const searchBox = ref();
const { D_BZ_YJLX, D_BZ_HPZL, D_BZ_YJJB, D_GS_ZDQT_YJLB } = proxy.$dict("D_BZ_YJLX", "D_BZ_HPZL", "D_BZ_YJJB", "D_GS_ZDQT_YJLB") const { D_BZ_YJLX, D_BZ_HPZL, D_BZ_YJJB, D_GS_ZDQT_YJLB } = proxy.$dict(
"D_BZ_YJLX",
"D_BZ_HPZL",
"D_BZ_YJJB",
"D_GS_ZDQT_YJLB"
);
// 搜索配置 // 搜索配置
const searchConfiger = ref([ const searchConfiger = ref([
// { label: "姓名", prop: 'ryxm', placeholder: "请输入姓名", showType: "input" }, // { label: "姓名", prop: 'ryxm', placeholder: "请输入姓名", showType: "input" },
// { label: "身份证号码", prop: 'rysfzh', placeholder: "请输入身份证号码", showType: "input" }, // { label: "身份证号码", prop: 'rysfzh', placeholder: "请输入身份证号码", showType: "input" },
// { label: "车牌号", prop: 'cph', placeholder: "请输入车牌号", showType: "input" },//yjClcph // { label: "车牌号", prop: 'cph', placeholder: "请输入车牌号", showType: "input" },//yjClcph
{ label: "预警类型", prop: 'yjlxList', placeholder: "请选择预警类型", showType: "select", options: [],multiple:true }, {
{ label: "预警级别", prop: 'yjjbList', placeholder: "请选择预警级别", showType: "select", options: [],multiple:true }, label: "预警类型",
{ label: "预警类别", prop: 'yjlbList', placeholder: "请选择预警级别", showType: "select", options: [],multiple:true }, prop: "yjlxList",
{ label: "时间", prop: 'times', showType: "datetimerange" }, placeholder: "请选择预警类型",
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" }, showType: "select",
options: [],
multiple: true
},
{
label: "预警级别",
prop: "yjjbList",
placeholder: "请选择预警级别",
showType: "select",
options: [],
multiple: true
},
{
label: "预警类别",
prop: "yjlbList",
placeholder: "请选择预警级别",
showType: "select",
options: [],
multiple: true
},
{ label: "时间", prop: "times", showType: "datetimerange" },
{
label: "部门",
prop: "ssbmdm",
placeholder: "请选择部门",
showType: "department"
}
// { label: "号牌类型", prop: 'hplx', placeholder: "请选择号牌类型", showType: "select", options: [] }, // { label: "号牌类型", prop: 'hplx', placeholder: "请选择号牌类型", showType: "select", options: [] },
]); ]);
@ -111,9 +170,9 @@ const pageData = reactive({
}, //分页 }, //分页
controlsWidth: 100, //操作栏宽度 controlsWidth: 100, //操作栏宽度
tableColumn: [ tableColumn: [
{ label: "身份分值", prop: "sffz", showSolt: true }, { label: "分值", prop: "sffz", showSolt: true },
// { label: "预警图片", prop: "yjtp", showSlot: true, width: 100 }, // { label: "预警图片", prop: "yjtp", showSlot: true, width: 100 },
{ label: "预警时间", prop: "yjsj",}, { label: "预警时间", prop: "yjsj" },
{ label: "姓名", prop: "ryxm", showOverflowTooltip: true }, { label: "姓名", prop: "ryxm", showOverflowTooltip: true },
// { label: "车牌号", prop: "cph", showOverflowTooltip: true }, // { label: "车牌号", prop: "cph", showOverflowTooltip: true },
// { label: "号牌类型", prop: "hplx", showOverflowTooltip: true }, // { label: "号牌类型", prop: "hplx", showOverflowTooltip: true },
@ -121,12 +180,17 @@ const pageData = reactive({
// { label: "部门名称", prop: "ssbm", showOverflowTooltip: true }, // { label: "部门名称", prop: "ssbm", showOverflowTooltip: true },
// { label: "预警地址", prop: "yjdz", showOverflowTooltip: true }, // { label: "预警地址", prop: "yjdz", showOverflowTooltip: true },
{ label: "预警标签", prop: "yjbq", showOverflowTooltip: true }, { label: "预警标签", prop: "yjbq", showOverflowTooltip: true },
{ label: "预警级别", prop: "yjjb", showSolt: true, showOverflowTooltip: true }, {
label: "预警级别",
prop: "yjjb",
showSolt: true,
showOverflowTooltip: true
},
{ label: "预警类别", prop: "yjlb", showSolt: true }, { label: "预警类别", prop: "yjlb", showSolt: true },
{ label: "预警类型", prop: "yjlx", showSolt: true }, { label: "预警类型", prop: "yjlx", showSolt: true },
// { label: "身份次数", prop: "sfcs", showSlot: true }, // { label: "身份次数", prop: "sfcs", showSlot: true },
{ label: "预警内容", prop: "yjnr", showOverflowTooltip: true }, { label: "预警内容", prop: "yjnr", showOverflowTooltip: true }
] ]
}); });
// yjlb // 预警类别 D_BZ_YJLX 1人像 2车辆。。 // yjlb // 预警类别 D_BZ_YJLX 1人像 2车辆。。
@ -138,22 +202,24 @@ onMounted(() => {
searchConfiger.value[0].options = D_GS_ZDQT_YJLB; searchConfiger.value[0].options = D_GS_ZDQT_YJLB;
searchConfiger.value[1].options = D_BZ_YJJB; searchConfiger.value[1].options = D_BZ_YJJB;
searchConfiger.value[2].options = D_BZ_YJLX; searchConfiger.value[2].options = D_BZ_YJLX;
getList() getList();
}); });
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val; pageData.pageConfiger.pageCurrent = val;
getList() getList();
} };
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList() getList();
} };
const pushAssess = (val) => {
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
}
const pushAssess = (row) => {
window.open(
`https://tyyy.lz.dsj.xz/profile/people/person-manage?sfzhm=${row.rysfzh}&from=portal`
);
// return holographicProfileJump(val.yjlx, val); // 全息档案跳转
};
// 获取数据 // 获取数据
const getList = () => { const getList = () => {
@ -162,66 +228,68 @@ const getList = () => {
...queryFrom.value, ...queryFrom.value,
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize pageSize: pageData.pageConfiger.pageSize
} };
delete promes.times; delete promes.times;
qcckPost(promes, '/mosty-gsxt/tbYjxx/selectYjxxFzPage').then((res) => { qcckPost(promes, "/mosty-gsxt/tbYjxx/selectYjxxFzPage")
pageData.tableData = res.records || []; .then((res) => {
pageData.total = res.total; pageData.tableData = res.records || [];
pageData.tableConfiger.loading = false; pageData.total = res.total;
}).catch(() => { pageData.tableConfiger.loading = false;
pageData.tableConfiger.loading = false; })
}) .catch(() => {
} pageData.tableConfiger.loading = false;
});
};
// 处理签收 // 处理签收
const handleToImportantMan = (val, type) => { const handleToImportantMan = (val, type) => {
proxy.$confirm("是否确定转重点人?", "警告", { type: "warning" }).then(() => { proxy.$confirm("是否确定转重点人?", "警告", { type: "warning" }).then(() => {
qcckGet({}, `/mosty-gsxt/tbYjxx/yjToZdry/${val.id}`).then(() => { qcckGet({}, `/mosty-gsxt/tbYjxx/yjToZdry/${val.id}`).then(() => {
proxy.$message({ type: "success", message: "转重点人成功" }); proxy.$message({ type: "success", message: "转重点人成功" });
getList() getList();
}); });
}) });
};
}
// 发送指令 // 发送指令
const showDialog = ref(false) const showDialog = ref(false);
const itemData = ref() const itemData = ref();
const semdFqzlRef = ref() const semdFqzlRef = ref();
const tacitly = { const tacitly = {
title: 'jfbt', title: "jfbt",
instructionContent: 'jfnr' instructionContent: "jfnr"
} };
const submit = () => { const submit = () => {
semdFqzlRef.value.getsendFqzl() semdFqzlRef.value.getsendFqzl();
} };
const closeFszl = () => { const closeFszl = () => {
semdFqzlRef.value.close() semdFqzlRef.value.close();
} };
const addModelRef = ref() const addModelRef = ref();
const openAddFrom = (row) => { const openAddFrom = (row) => {
emitter.emit('openAddFrom', row) emitter.emit("openAddFrom", row);
} };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - (searchBox.value?.offsetHeight || 0) - 220; pageData.tableHeight =
window.onresize = function() { window.innerHeight - (searchBox.value?.offsetHeight || 0) - 220;
window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
}; };
// 搜索 // 搜索
const onSearch = (obj) => { const onSearch = (obj) => {
queryFrom.value = {...obj } queryFrom.value = { ...obj };
queryFrom.value.startTime = obj.times ? obj.times[0] : '' queryFrom.value.startTime = obj.times ? obj.times[0] : "";
queryFrom.value.endTime = obj.times ? obj.times[1] : '' queryFrom.value.endTime = obj.times ? obj.times[1] : "";
getList() getList();
} };
defineExpose({ defineExpose({
getList getList
}) });
</script> </script>
<style> <style>

View File

@ -10,6 +10,46 @@
ref="searchDom" ref="searchDom"
@search="onSearch" @search="onSearch"
> >
<template #yjCs>
<div>
<el-input
v-model="queryFrom.yjkscs"
type="number"
placeholder="开始次数"
style="width: 130px"
clearable
:min="0"
/>
<el-input
v-model="queryFrom.yjjscs"
type="number"
placeholder="结束次数"
style="width: 130px"
clearable
:min="0"
/>
</div>
</template>
<template #nl>
<div>
<el-input
v-model="queryFrom.ksnl"
type="number"
placeholder="开始年龄"
style="width: 130px"
clearable
:min="0"
/>
<el-input
v-model="queryFrom.jsnl"
type="number"
placeholder="结束年龄"
style="width: 130px"
clearable
:min="0"
/>
</div>
</template>
<template #but> <template #but>
<el-button type="primary" size="small" @click="exportExl" <el-button type="primary" size="small" @click="exportExl"
>批量导出</el-button >批量导出</el-button
@ -17,12 +57,15 @@
<el-button type="primary" size="small" @click="handleQs" <el-button type="primary" size="small" @click="handleQs"
>批量签收</el-button >批量签收</el-button
> >
<el-button type="primary" size="small" @click="handleQs" <!-- <el-button type="primary" size="small" @click="handleQs"
>批量分析</el-button >批量分析</el-button
> > -->
<el-button type="primary" size="small" @click="countPeople" <el-button type="primary" size="small" @click="countPeople"
>计算人数</el-button >计算人数</el-button
> >
<el-button type="primary" size="small" @click="handleRelatedWarning"
>关联预警</el-button
>
</template> </template>
</QueryFormPanel> </QueryFormPanel>
</div> </div>
@ -69,7 +112,7 @@
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" /> <DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
</template> </template>
<template #yjLylx="{ row }"> <template #yjLylx="{ row }">
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" /> <DictTag :value="row.yjLylx" :tag="false" :options="D_GS_ZDR_GJLB" />
</template> </template>
<template #cszt="{ row }"> <template #cszt="{ row }">
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" /> <DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
@ -82,7 +125,18 @@
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<span class="primary" @click="handleQsSingle(row)">签收</span> <span
class="primary"
@click="handleQsSingle(row)"
v-if="row.czzt == '01'"
>签收</span
>
<span
class="success"
@click="handleQsFk(row, '反馈')"
v-else-if="row.czzt == '02'"
>反馈</span
>
<span class="primary" @click="particularsOpen(row)">详情</span> <span class="primary" @click="particularsOpen(row)">详情</span>
<span class="warning" @click="pushWarning(row)">指派</span> <span class="warning" @click="pushWarning(row)">指派</span>
<span <span
@ -91,7 +145,11 @@
@click="failWarning(row)" @click="failWarning(row)"
>报错</span >报错</span
> >
<span class="primary" @click="payAttention(row)">关注</span> <span
:class="row.sfgz == 0 ? 'primary' : 'danger'"
@click="payAttention(row)"
>{{ row.sfgz == 0 ? "关注" : "取消关注" }}
</span>
</div> </div>
</template> </template>
</WarnDataTable> </WarnDataTable>
@ -113,6 +171,13 @@
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" :dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }"
/> />
<peopleConut v-model="searchOpen" :dataConut="dataConut" /> <peopleConut v-model="searchOpen" :dataConut="dataConut" />
<SelectDataDialog
v-model="selectDataVisible"
title="关联预警"
@confirm="handleSelectConfirm"
:currentRelatedRow="currentRelatedRow"
/>
<FkDialog @change="getList" lx="05" />
</template> </template>
<script setup> <script setup>
@ -121,16 +186,17 @@ import { exportExlByObj } from "@/utils/exportExcel.js";
import ZpForm from "./zpForm.vue"; import ZpForm from "./zpForm.vue";
import { bqYs } from "@/utils/tools.js"; import { bqYs } from "@/utils/tools.js";
import Particulars from "./particulars.vue"; import Particulars from "./particulars.vue";
import Search from "@/components/aboutTable/Search.vue";
import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue"; import WarnDataTable from "@/views/backOfficeSystem/ces/components/WarnDataTable.vue";
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue"; import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
// import MyTable from "@/components/aboutTable/MyTable.vue"; // import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import peopleConut from "./peopleConut.vue"; import peopleConut from "./peopleConut.vue";
import SelectDataDialog from "../../YjData/SelectDataDialog.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
import emitter from "@/utils/eventBus.js";
const { const {
D_BZ_YJLY, D_BZ_YJLY,
D_GS_QLZDRLX, D_GS_QLZDRLX,
@ -232,24 +298,19 @@ const searchConfiger = ref([
placeholder: "请输入身份证号码" placeholder: "请输入身份证号码"
}, },
{ {
key: "ksnl", key: "nl",
label: "开始年龄", label: "年龄",
type: "input", type: "slot",
placeholder: "请输入开始年龄" placeholder: "请输入年龄"
},
{
key: "jsnl",
label: "结束年龄",
type: "input",
placeholder: "请输入结束年龄"
}, },
{ {
key: "yjCs", key: "yjCs",
label: "预警次数", label: "预警次数",
type: "input", type: "slot",
placeholder: "请输入预警次数" placeholder: "请输入预警次数"
}, },
{ key: "bqdl", label: "人员级别", type: "select", options: D_GS_ZDR_RYJB }, // { key: "bqdl", label: "人员级别", type: "select", options: D_GS_ZDR_RYJB },
{ key: "yjLylx", label: "轨迹类别", type: "select", options: D_GS_ZDR_GJLB }, { key: "yjLylx", label: "轨迹类别", type: "select", options: D_GS_ZDR_GJLB },
{ {
key: "yjDz", key: "yjDz",
@ -299,7 +360,7 @@ const pageData = reactive({
tableColumn: [ tableColumn: [
{ type: "index", label: "序号", width: 55, align: "center" }, { type: "index", label: "序号", width: 55, align: "center" },
{ label: "预警状态", width: 80, align: "center", slotName: "status" }, { label: "预警状态", width: 80, align: "center", slotName: "status" },
{ prop: "yjSj", label: "预警时间", width: 145 }, { prop: "yjSj", label: "预警时间", width: 125 },
{ prop: "yjRyxm", label: "人员姓名", width: 80 }, { prop: "yjRyxm", label: "人员姓名", width: 80 },
{ prop: "yjRysfzh", label: "身份证号", width: 158 }, { prop: "yjRysfzh", label: "身份证号", width: 158 },
{ label: "性别", width: 55, align: "center", slotName: "xbdm" }, { label: "性别", width: 55, align: "center", slotName: "xbdm" },
@ -313,7 +374,7 @@ const pageData = reactive({
{ label: "情报来源", width: 80, align: "center", slotName: "qbly" }, { label: "情报来源", width: 80, align: "center", slotName: "qbly" },
{ label: "来源级别", width: 80, align: "center", slotName: "qblyjb" }, { label: "来源级别", width: 80, align: "center", slotName: "qblyjb" },
{ prop: "yjCs", label: "次数", width: 55, align: "center" }, { prop: "yjCs", label: "次数", width: 55, align: "center" },
{ label: "操作", width: 180, slotName: "operation" }, { label: "操作", width: 200, slotName: "operation" },
{ label: "超时状态", width: 80, align: "center", slotName: "cszt" } { label: "超时状态", width: 80, align: "center", slotName: "cszt" }
] ]
}); });
@ -378,6 +439,18 @@ const failWarning = (val) => {
}); });
}; };
// 处理签收
const handleQsFk = (val, type) => {
console.log(val.id, "xxxxxxxxxxxxxxxxxxxxxxxx");
switch (type) {
case "反馈":
case "查看反馈":
emitter.emit("openFkDialog", { id: val.id, type });
break;
}
};
/** 选中项 */ /** 选中项 */
const selectRows = ref([]); const selectRows = ref([]);
const handleChooseData = (val) => { const handleChooseData = (val) => {
@ -385,26 +458,39 @@ const handleChooseData = (val) => {
}; };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
czzt_name: "状态", index: "序号",
czzt_name: "预警状态",
yjSj: "预警时间", yjSj: "预警时间",
yjRyxm: "人员姓名", yjRyxm: "人员姓名",
yjRysfzh: "身份证号", yjRysfzh: "身份证号",
xbdm_name: "性别",
nl: "年龄",
yjJb_name: "预警级别", yjJb_name: "预警级别",
bqdl_name: "人员类别", bqdl_name: "人员类别",
yjbqmc: "细类", yjbqmc: "人员细类",
yjLylx_name: "轨迹类别",
yjDz: "活动发生地", yjDz: "活动发生地",
ssbm: "接收单位", ssbm: "接收单位",
yjCs: "预警次数" qbly_name: "情报来源",
qblyjb_name: "来源级别",
yjCs: "次数",
cszt_name: "超时状态"
}; };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = const needArr =
selectRows.value?.length > 0 ? selectRows.value : pageData.tableData; selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => { const data = needArr.map((item, index) => {
return { return {
...item, index: index + 1,
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT), czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB), yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX) bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
xbdm_name: getMultiDictVal(item.xbdm, D_BZ_XB),
yjLylx_name: getMultiDictVal(item.yjLylx, D_GS_ZDR_GJLB),
qbly_name: getMultiDictVal(item.qbly, D_BZ_QBLY),
qblyjb_name: getMultiDictVal(item.qblyjb, D_BZ_QBLYJB),
cszt_name: getMultiDictVal(item.cszt, D_GS_CSZT),
...item
}; };
}); });
exportExlByObj(titleObj, data, "七类重点"); exportExlByObj(titleObj, data, "七类重点");
@ -497,6 +583,30 @@ const payAttention = (row) => {
const searchDom = ref(null); const searchDom = ref(null);
const dataConut = ref(0); const dataConut = ref(0);
const searchOpen = ref(false); const searchOpen = ref(false);
// 关联预警弹窗
const selectDataVisible = ref(false);
const currentRelatedRow = ref(null);
// 关联预警
const handleRelatedWarning = () => {
if (selectRows.value.length === 0) {
proxy.$message({ type: "warning", message: "请先选择一条数据" });
return;
}
if (selectRows.value.length > 1) {
proxy.$message({ type: "warning", message: "只能选择一条数据" });
return;
}
currentRelatedRow.value = selectRows.value[0];
selectDataVisible.value = true;
};
// 确认关联预警
const handleSelectConfirm = (selectedData) => {
console.log("关联预警数据:", selectedData);
console.log("当前选中行:", currentRelatedRow.value);
};
const countPeople = () => { const countPeople = () => {
const promes = { const promes = {
...searchDom.value.formState, ...searchDom.value.formState,
@ -519,8 +629,6 @@ const countPeople = () => {
}; };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
console.log("xxxxxxx");
pageData.tableHeight = pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 230; window.innerHeight - searchBox.value.offsetHeight - 230;
window.onresize = function () { window.onresize = function () {

View File

@ -1,226 +1,245 @@
<template> <template>
<el-dialog <el-dialog
class="luntan-tech-dialog" class="luntan-tech-dialog"
:model-value="modelValue" :model-value="modelValue"
center center
width="500px" width="500px"
:destroy-on-close="true" :destroy-on-close="true"
:title="title" :title="title"
@close="close" @close="close"
:close-on-click-modal="false" :close-on-click-modal="false"
> :append-to-body="true"
<div class="avatar-upload-container"> >
<div class="avatar-preview"> <div class="avatar-upload-container">
<img v-if="avatarUrl" :src="avatarUrl" alt="预览头像" class="preview-image"> <div class="avatar-preview">
<div v-else class="preview-placeholder"> <img
<el-icon class="placeholder-icon"> v-if="avatarUrl"
<User /> :src="avatarUrl"
</el-icon> alt="预览头像"
<span>请上传头像</span> class="preview-image"
</div> />
</div> <div v-else class="preview-placeholder">
<div class="upload-section"> <el-icon class="placeholder-icon">
<el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false" <User />
:on-change="handleAvatarChange" :before-upload="beforeAvatarUpload" accept="image/*"> </el-icon>
<el-button size="small" type="primary">选择图片</el-button> <span>请上传头像</span>
</el-upload>
<div class="upload-tips">
<p> 支持 JPGPNG 格式</p>
<p> 图片大小不超过 2MB</p>
<p> 建议尺寸为 200x200 像素</p>
</div>
</div>
</div> </div>
</div>
<div class="upload-section">
<el-upload
class="avatar-uploader"
:auto-upload="false"
:show-file-list="false"
:on-change="handleAvatarChange"
:before-upload="beforeAvatarUpload"
accept="image/*"
>
<el-button size="small" type="primary">选择图片</el-button>
</el-upload>
<div class="upload-tips">
<p> 支持 JPGPNG 格式</p>
<p> 图片大小不超过 2MB</p>
<p> 建议尺寸为 200x200 像素</p>
</div>
</div>
</div>
<template #footer> <template #footer>
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>
<el-button type="primary" @click="confirmUpload" :loading="uploading" :disabled="!avatarUrl || uploading"> <el-button
{{ uploading ? '上传中...' : '确认更换' }} type="primary"
</el-button> @click="confirmUpload"
</template> :loading="uploading"
</el-dialog> :disabled="!avatarUrl || uploading"
>
{{ uploading ? "上传中..." : "确认更换" }}
</el-button>
</template>
</el-dialog>
</template> </template>
<script setup> <script setup>
import { ref, watch } from "vue"; import { ref, watch } from "vue";
import { ElMessage } from 'element-plus'; import { ElMessage } from "element-plus";
import { User } from '@element-plus/icons-vue'; import { User } from "@element-plus/icons-vue";
import { upImageUploadId } from '@/api/commit'; import { upImageUploadId } from "@/api/commit";
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {
type: Boolean, type: Boolean,
default: false default: false
}, },
title: { title: {
type: String, type: String,
default: "更换头像" default: "更换头像"
}, },
heightNumber: { heightNumber: {
type: Number, type: Number,
default: 250 default: 250
} }
}); });
const emits = defineEmits(["update:modelValue", "avatarUpdated"]); const emits = defineEmits(["update:modelValue", "avatarUpdated"]);
// 头像相关状态 // 头像相关状态
const avatarUrl = ref(''); const avatarUrl = ref("");
const uploading = ref(false); const uploading = ref(false);
// 监听对话框显示状态,重置头像预览 // 监听对话框显示状态,重置头像预览
watch(() => props.modelValue, (newVal) => { watch(
() => props.modelValue,
(newVal) => {
if (!newVal) { if (!newVal) {
// 对话框关闭时重置头像预览 // 对话框关闭时重置头像预览
avatarUrl.value = ''; avatarUrl.value = "";
} }
}); }
);
// 当前选择的文件 // 当前选择的文件
const selectedFile = ref(null); const selectedFile = ref(null);
// 处理头像选择 // 处理头像选择
const handleAvatarChange = (file) => { const handleAvatarChange = (file) => {
selectedFile.value = file.raw; selectedFile.value = file.raw;
// 创建临时预览URL // 创建临时预览URL
const reader = new FileReader(); const reader = new FileReader();
reader.onload = (e) => { reader.onload = (e) => {
avatarUrl.value = e.target.result; avatarUrl.value = e.target.result;
}; };
reader.readAsDataURL(file.raw); reader.readAsDataURL(file.raw);
}; };
// 上传前检查 // 上传前检查
const beforeAvatarUpload = (file) => { const beforeAvatarUpload = (file) => {
const isJPG = file.type === 'image/jpeg'; const isJPG = file.type === "image/jpeg";
const isPNG = file.type === 'image/png'; const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < 2; const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) { if (!isJPG && !isPNG) {
ElMessage.error('请上传 JPG 或 PNG 格式的图片!'); ElMessage.error("请上传 JPG 或 PNG 格式的图片!");
return false; return false;
} }
if (!isLt2M) { if (!isLt2M) {
ElMessage.error('图片大小不能超过 2MB!'); ElMessage.error("图片大小不能超过 2MB!");
return false; return false;
} }
return true; return true;
}; };
// 确认上传头像 // 确认上传头像
const confirmUpload = async () => { const confirmUpload = async () => {
if (!avatarUrl.value || !selectedFile.value) { if (!avatarUrl.value || !selectedFile.value) {
ElMessage.warning('请先选择头像图片'); ElMessage.warning("请先选择头像图片");
return; return;
} }
uploading.value = true; uploading.value = true;
try { try {
// 创建FormData对象 // 创建FormData对象
const formData = new FormData(); const formData = new FormData();
formData.append('file', selectedFile.value); formData.append("file", selectedFile.value);
// 调用实际的上传接口 // 调用实际的上传接口
const response = await upImageUploadId(formData); const response = await upImageUploadId(formData);
console.log(response); console.log(response);
emits('avatarUpdated', response); emits("avatarUpdated", response);
// 关闭对话框 // 关闭对话框
close(); close();
} catch (error) {
} catch (error) { console.error("上传头像失败:", error);
console.error('上传头像失败:', error); ElMessage.error("上传头像失败,请重试");
ElMessage.error('上传头像失败,请重试'); } finally {
} finally { uploading.value = false;
uploading.value = false; }
}
}; };
// 关闭对话框 // 关闭对话框
const close = () => { const close = () => {
emits("update:modelValue", false); emits("update:modelValue", false);
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '../styles/luntan-tech.scss'; @import "../styles/luntan-tech.scss";
.avatar-upload-container { .avatar-upload-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 12px 0 8px; padding: 12px 0 8px;
} }
.avatar-preview { .avatar-preview {
width: 160px; width: 160px;
height: 160px; height: 160px;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
border: 2px solid rgba(0, 227, 255, 0.4); border: 2px solid rgba(0, 227, 255, 0.4);
margin-bottom: 20px; margin-bottom: 20px;
display: flex;
justify-content: center;
align-items: center;
background: rgba(10, 30, 60, 0.6);
box-shadow: 0 0 20px rgba(0, 120, 200, 0.2);
.preview-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.preview-placeholder {
display: flex; display: flex;
flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
background: rgba(10, 30, 60, 0.6); color: $lt-text-muted;
box-shadow: 0 0 20px rgba(0, 120, 200, 0.2);
.preview-image { .placeholder-icon {
width: 100%; font-size: 48px;
height: 100%; margin-bottom: 8px;
object-fit: cover; color: rgba(0, 227, 255, 0.45);
} }
.preview-placeholder { span {
display: flex; font-size: 14px;
flex-direction: column;
justify-content: center;
align-items: center;
color: $lt-text-muted;
.placeholder-icon {
font-size: 48px;
margin-bottom: 8px;
color: rgba(0, 227, 255, 0.45);
}
span {
font-size: 14px;
}
} }
}
} }
.upload-section { .upload-section {
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.avatar-uploader { .avatar-uploader {
margin-bottom: 16px; margin-bottom: 16px;
:deep(.el-button--primary) { :deep(.el-button--primary) {
background: linear-gradient(180deg, #00a3ff 0%, #0066bb 100%); background: linear-gradient(180deg, #00a3ff 0%, #0066bb 100%);
border-color: rgba(0, 227, 255, 0.5); border-color: rgba(0, 227, 255, 0.5);
box-shadow: 0 0 12px rgba(0, 163, 255, 0.35); box-shadow: 0 0 12px rgba(0, 163, 255, 0.35);
} }
} }
.upload-tips { .upload-tips {
width: 100%; width: 100%;
padding: 12px; padding: 12px;
border-radius: 4px; border-radius: 4px;
font-size: 12px; font-size: 12px;
color: $lt-text-muted; color: $lt-text-muted;
background: rgba(10, 30, 60, 0.65); background: rgba(10, 30, 60, 0.65);
border: 1px solid $lt-border-dim; border: 1px solid $lt-border-dim;
p { p {
margin: 4px 0; margin: 4px 0;
line-height: 1.5; line-height: 1.5;
} }
} }
</style> </style>
<style lang="scss"> <style lang="scss">
@import '../styles/luntan-dialog-tech.scss'; @import "../styles/luntan-dialog-tech.scss";
</style> </style>

View File

@ -5,6 +5,7 @@
title="发布帖子" title="发布帖子"
width="60%" width="60%"
:before-close="handleClose" :before-close="handleClose"
:append-to-body="true"
> >
<div style="overflow: auto; height: 60vh"> <div style="overflow: auto; height: 60vh">
<el-form :model="form" :rules="rules" ref="formRef" label-width="80px"> <el-form :model="form" :rules="rules" ref="formRef" label-width="80px">

View File

@ -5,6 +5,7 @@
title="发表回复" title="发表回复"
width="600px" width="600px"
:before-close="handleClose" :before-close="handleClose"
:append-to-body="true"
> >
<el-form :model="form" :rules="rules" ref="formRef"> <el-form :model="form" :rules="rules" ref="formRef">
<el-form-item prop="content"> <el-form-item prop="content">
@ -158,5 +159,5 @@ const resetForm = () => {
</style> </style>
<style lang="scss"> <style lang="scss">
@import '../styles/luntan-dialog-tech.scss'; @import "../styles/luntan-dialog-tech.scss";
</style> </style>

View File

@ -2,17 +2,32 @@
<div> <div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox" class="mt10 mb10"> <div ref="searchBox" class="mt10 mb10">
<Search :searchArr="searchConfiger" ref="ces" @submit="onSearch" :key="pageData.keyCount"> <Search
<el-button type="primary" size="small" @click="exportExl">导出</el-button> :searchArr="searchConfiger"
<el-button type="primary" size="small" @click="getSlect">我的关注</el-button> ref="ces"
@submit="onSearch"
:key="pageData.keyCount"
>
<el-button type="primary" size="small" @click="exportExl"
>导出</el-button
>
<el-button type="primary" size="small" @click="getSlect"
>我的关注</el-button
>
</Search> </Search>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="heightBox margTop"> <div class="heightBox margTop">
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" :tableData="pageData.tableData"
@chooseData="handleChooseData"> :tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="handleChooseData"
>
<!-- <template #jjlx="{ row }"> <!-- <template #jjlx="{ row }">
<DictTag :tag="false" :value="row.jjlx" :options="D_BZ_JQBQ" /> <DictTag :tag="false" :value="row.jjlx" :options="D_BZ_JQBQ" />
</template> --> </template> -->
@ -25,52 +40,98 @@
<!-- <template #ypzt="{ row }"> <!-- <template #ypzt="{ row }">
{{ row.ypzt === '01' ? '已研判' : '未研判' }} {{ row.ypzt === '01' ? '已研判' : '未研判' }}
</template> --> </template> -->
<template #hszt="{ row }"> <template #hszt="{ row }">
{{ row.hszt === '01' ? '未会商' : '已会商' }} {{ row.hszt === "01" ? "未会商" : "已会商" }}
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="warning" @click="CreateConsultationMeeting(row)">创建会商</el-link> <el-link type="warning" @click="CreateConsultationMeeting(row)"
<el-link :type=" row.sfgz=='0'?'success':'danger'" @click="Attention(row,row.sfgz=='0'?'关注':'取消关注')">{{ row.sfgz=='0'?'关注':'取消关注' }}</el-link> >创建会商</el-link
>
<el-link
:type="row.sfgz == '0' ? 'success' : 'danger'"
@click="Attention(row, row.sfgz == '0' ? '关注' : '取消关注')"
>{{ row.sfgz == "0" ? "关注" : "取消关注" }}</el-link
>
<el-link type="primary" @click="addEdit('edit', row)">详情</el-link> <el-link type="primary" @click="addEdit('edit', row)">详情</el-link>
<!-- <el-link type="warning" @click="handleYP('研判', row)">研判</el-link> <!-- <el-link type="warning" @click="handleYP('研判', row)">研判</el-link>
<el-link type="danger" @click="handleYP('深度研判', row)">深度研判</el-link> --> <el-link type="danger" @click="handleYP('深度研判', row)">深度研判</el-link> -->
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" <Pages
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }"> @changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }"
>
</Pages> </Pages>
</div> </div>
<!-- 编辑详情 --> <!-- 编辑详情 -->
<EditAddForm v-if="show" ref="detailDiloag" <EditAddForm
:dic="{ JQLB, JQLX, JQXL, JQZL, D_BZ_JQLY, D_BZ_JQFL, JQLB_DP, D_BZ_JQBQ, D_GS_SSYJ }" @updateDate="getList" /> v-if="show"
ref="detailDiloag"
:dic="{
JQLB,
JQLX,
JQXL,
JQZL,
D_BZ_JQLY,
D_BZ_JQFL,
JQLB_DP,
D_BZ_JQBQ,
D_GS_SSYJ
}"
@updateDate="getList"
/>
<!-- 研判弹窗 --> <!-- 研判弹窗 -->
<YpDialog ref="ypDialog" @change="getList" /> <YpDialog ref="ypDialog" @change="getList" />
<DeepYpDialog ref="deepYpDialog" @change="getList" /> <DeepYpDialog ref="deepYpDialog" @change="getList" />
<DiscussionDialog v-model="showDialog" :dataList="dataList" :lx="lx" /> <DiscussionDialog v-model="showDialog" :dataList="dataList" :lx="lx" />
</div> </div>
</template> </template>
<script setup> <script setup>
import { getMultiDictVal } from "@/utils/dict.js" import { getMultiDictVal } from "@/utils/dict.js";
import { exportExlByObj } from "@/utils/exportExcel.js" import { exportExlByObj } from "@/utils/exportExcel.js";
import YpDialog from "./components/ypDialog.vue"; import YpDialog from "./components/ypDialog.vue";
import DeepYpDialog from "./components/deepypDialog.vue"; import DeepYpDialog from "./components/deepypDialog.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./components/editAddForm.vue"; import EditAddForm from "./components/editAddForm.vue";
import { lzJcjPjdbSelectPage } from '@/api/semanticAnalysis.js' import { lzJcjPjdbSelectPage } from "@/api/semanticAnalysis.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import DiscussionDialog from "@/views/backOfficeSystem/JudgmentHome/ResearchHome/components/discussionDialog.vue"; import DiscussionDialog from "@/views/backOfficeSystem/JudgmentHome/ResearchHome/components/discussionDialog.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js" import { qcckGet, qcckPost } from "@/api/qcckApi.js";
const { proxy } = getCurrentInstance(); 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 ypDialog = ref(); const ypDialog = ref();
const deepYpDialog = ref(); const deepYpDialog = ref();
const detailDiloag = ref(); const detailDiloag = ref();
const show = ref(false) const show = ref(false);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "接警员姓名", label: "接警员姓名",
@ -97,6 +158,12 @@ const searchConfiger = ref([
showType: "select", showType: "select",
options: D_GS_BQ_DJ options: D_GS_BQ_DJ
}, },
{
label: "监测时间",
prop: "startTime",
placeholder: "请选择监测时间",
showType: "datetimerange"
}
]); ]);
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const pageData = reactive({ const pageData = reactive({
@ -105,7 +172,7 @@ const pageData = reactive({
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
showSelectType: "checkbox", showSelectType: "checkbox",
loading: false, loading: false
}, },
total: 0, total: 0,
pageConfiger: { pageConfiger: {
@ -124,37 +191,40 @@ const pageData = reactive({
{ label: "警情类型", prop: "jqlbdm", showSolt: true }, { label: "警情类型", prop: "jqlbdm", showSolt: true },
{ label: "警情地址", prop: "jqdz" }, { label: "警情地址", prop: "jqdz" },
{ label: "补充接警内容", prop: "bcjjnr", showOverflowTooltip: true }, { label: "补充接警内容", prop: "bcjjnr", showOverflowTooltip: true },
{ label: "会商状态", prop: "hszt", showSolt: true }, { label: "会商状态", prop: "hszt", showSolt: true }
] ]
}); });
onMounted(() => { onMounted(() => {
tabHeightFn(); tabHeightFn();
getList() getList();
}); });
const listQuery = ref({}) const listQuery = ref({});
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
listQuery.value = { ...val }; listQuery.value = {
...val,
startTime: val.startTime ? val.startTime[0] : "",
endTime: val.startTime ? val.startTime[1] : ""
};
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList() getList();
} };
const ces=ref() const ces = ref();
// 点击关注 // 点击关注
const getSlect = () => { const getSlect = () => {
listQuery.value = { ...ces.value.searchObj , sfgz: 1 }; listQuery.value = { ...ces.value.searchObj, sfgz: 1 };
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList() getList();
} };
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val; pageData.pageConfiger.pageCurrent = val;
getList() getList();
} };
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList() getList();
} };
const getList = () => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
@ -162,36 +232,38 @@ const getList = () => {
pageCurrent: pageData.pageConfiger.pageCurrent, pageCurrent: pageData.pageConfiger.pageCurrent,
pageSize: pageData.pageConfiger.pageSize, pageSize: pageData.pageConfiger.pageSize,
...listQuery.value ...listQuery.value
} };
lzJcjPjdbSelectPage(params).then(res => { lzJcjPjdbSelectPage(params)
pageData.tableData = res.records || []; .then((res) => {
pageData.total = res.total; pageData.tableData = res.records || [];
}).finally(() => { pageData.total = res.total;
pageData.tableConfiger.loading = false; })
}) .finally(() => {
} pageData.tableConfiger.loading = false;
});
};
// 新增 // 新增
const addEdit = (type, row) => { const addEdit = (type, row) => {
show.value = true; show.value = true;
nextTick(() => { nextTick(() => {
detailDiloag.value.init(type, row,); detailDiloag.value.init(type, row);
}) });
}; };
const handleYP = (type, row) => { const handleYP = (type, row) => {
if (type === '研判') { if (type === "研判") {
ypDialog.value.init(row); ypDialog.value.init(row);
} else { } else {
deepYpDialog.value.init(row); deepYpDialog.value.init(row);
} }
} };
/** 选中项 */ /** 选中项 */
const selectRows = ref([]) const selectRows = ref([]);
const handleChooseData = (val) => { const handleChooseData = (val) => {
selectRows.value = val selectRows.value = val;
} };
const exportExl = () => { const exportExl = () => {
const titleObj = { const titleObj = {
jjdbh: "接警单编号", jjdbh: "接警单编号",
@ -203,65 +275,70 @@ const exportExl = () => {
jqlbdm_name: "警情类型", jqlbdm_name: "警情类型",
jqdz: "警情地址", jqdz: "警情地址",
bcjjnr: "补充接警内容", bcjjnr: "补充接警内容",
ypzt_name: "会商状态", ypzt_name: "会商状态"
} };
/** 导出【选中】的数据 (没有就全部)*/ /** 导出【选中】的数据 (没有就全部)*/
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData const needArr =
const data = needArr.map(item => { selectRows.value?.length > 0 ? selectRows.value : pageData.tableData;
const data = needArr.map((item) => {
return { return {
...item, ...item,
jqdjdm_name: getMultiDictVal(item.jqdjdm, D_GS_BQ_DJ), jqdjdm_name: getMultiDictVal(item.jqdjdm, D_GS_BQ_DJ),
jqlbdm_name: getMultiDictVal(item.jqlbdm, JQLB), jqlbdm_name: getMultiDictVal(item.jqlbdm, JQLB),
ypzt_name: item.hszt === '01' ? '未会商' : '已会商', ypzt_name: item.hszt === "01" ? "未会商" : "已会商"
} };
}) });
exportExlByObj(titleObj, data, '警情管理') exportExlByObj(titleObj, data, "警情管理");
} };
// 创建会商 // 创建会商
const showDialog = ref(false) const showDialog = ref(false);
const dataList = ref({}) const dataList = ref({});
const lx = ref('01') const lx = ref("01");
const CreateConsultationMeeting = (val) => { const CreateConsultationMeeting = (val) => {
dataList.value = val dataList.value = val;
showDialog.value=true showDialog.value = true;
} };
// 是否关注 // 是否关注
const Attention = (val,str) => { const Attention = (val, str) => {
proxy.$confirm(`是否${str}该警情?`, '提示', { proxy
confirmButtonText: '确定', .$confirm(`是否${str}该警情?`, "提示", {
cancelButtonText: '取消', confirmButtonText: "确定",
type: 'warning' cancelButtonText: "取消",
}).then(() => { type: "warning"
// 关注警情
qcckPost({
id: val.jjdbh,
sfgz: val.sfgz === '0' ? '1' : '0',
},'/mosty-gsxt/lzJcjPjdb/jqgz').then(res => {
proxy.$message({
message: `${str}成功`,
type: 'success'
}) })
getList() .then(() => {
}) // 关注警情
qcckPost(
}).catch(() => { {
// 取消关注 id: val.jjdbh,
}); sfgz: val.sfgz === "0" ? "1" : "0"
} },
"/mosty-gsxt/lzJcjPjdb/jqgz"
).then((res) => {
proxy.$message({
message: `${str}成功`,
type: "success"
});
getList();
});
})
.catch(() => {
// 取消关注
});
};
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 220; pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 220;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
}; };
</script> </script>
<style > <style>
.el-loading-mask { .el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important; background: rgba(0, 0, 0, 0.5) !important;
} }
</style> </style>

View File

@ -0,0 +1,70 @@
<template>
<div class="comom-title">
<div class="title" style="width: 70%;">重点人员类型<span class="switchover" @click.stop="reversalPush">切换</span></div>
<div class="title titleFz" @click="visible = true">
查看列表
</div>
</div>
<div style="height: calc(100% - 35px);">
<Pie3D :data="data" />
</div>
<ZdryDiloding v-model="visible" />
</template>
<script setup>
import Pie3D from '@/components/MyComponents/Pie3D.vue'
import ZdryDiloding from '@/views/home/model/mesgSwitch/zdryDiloding.vue'
import { tbGsxtZdryzdryBqtj } from '@/api/zdr'
import { ref } from 'vue'
const data = ref([
{ value: 18, name: '涉恐人员' },
{ value: 13, name: '涉稳人员' },
{ value: 17, name: '在逃人员' },
{ value: 20, name: '涉毒人员' },
{ value: 25, name: '刑事犯罪前科' },
{ value: 30, name: '肇事肇祸精神病' },
{ value: 30, name: '重点上访人员' },
{ value: 30, name: '僧尼人员' },
])
const emit = defineEmits(["reversalPush"])
const reversalPush = () => {
emit('reversalPush')
}
const visible = ref(false)
const tbGsxtZdryzdryBqtjFn = () => {
tbGsxtZdryzdryBqtj({ bqlx: '01' }).then(res => {
const dataList = res.slice(0, 8)
data.value = dataList.map(item => {
return {
value: item.sl,
name: item.bqmc,
}
})
})
}
tbGsxtZdryzdryBqtjFn()
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5);
}
</style>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
.titleFz {
position: relative;
z-index: 100;
font-size: 14px !important;
color: rgb(255, 166, 14);
}
.switchover{
cursor: pointer;
font-size: 14px;
margin-left: 20px;
color: rgb(255, 146, 4);
margin-left: 23%;
}
</style>

View File

@ -1,48 +1,41 @@
<template> <template>
<div class="comom-title"> <div class="comom-title">
<div class="title" style="width: 70%;">重点人员类型<span class="switchover" @click.stop="reversalPush">切换</span></div> <div class="title" style="width: 70%">
<div class="title titleFz" @click="visible = true"> 警种统计 <span class="switchover" @click.stop="reversalPush">切换</span>
查看列表
</div> </div>
<div class="title titleFz" @click="visible = true">查看列表</div>
</div> </div>
<div style="height: calc(100% - 35px);"> <div style="height: calc(100% - 35px)">
<Pie3D :data="data" /> <Pie3D :data="data" />
</div> </div>
<ZdryDiloding v-model="visible" /> <ZdryDiloding v-model="visible" />
</template> </template>
<script setup> <script setup>
import Pie3D from '@/components/MyComponents/Pie3D.vue' import Pie3D from "@/components/MyComponents/Pie3D.vue";
import ZdryDiloding from '@/views/home/model/mesgSwitch/zdryDiloding.vue' import ZdryDiloding from "@/views/home/model/mesgSwitch/zdryDiloding.vue";
import { tbGsxtZdryzdryBqtj } from '@/api/zdr' import { tbGsxtZdryzdryBqtj } from "@/api/zdr";
import { ref } from 'vue' import { qcckGet } from "@/api/qcckApi";
const data = ref([ import { ref } from "vue";
{ value: 18, name: '涉恐人员' }, const data = ref([]);
{ value: 13, name: '涉稳人员' }, const emit = defineEmits(["reversalPush"]);
{ value: 17, name: '在逃人员' },
{ value: 20, name: '涉毒人员' },
{ value: 25, name: '刑事犯罪前科' },
{ value: 30, name: '肇事肇祸精神病' },
{ value: 30, name: '重点上访人员' },
{ value: 30, name: '僧尼人员' },
])
const emit = defineEmits(["reversalPush"])
const reversalPush = () => { const reversalPush = () => {
emit('reversalPush') emit("reversalPush");
} };
const visible = ref(false) const visible = ref(false);
const tbGsxtZdryzdryBqtjFn = () => { const tbGsxtZdryzdryBqtjFn = () => {
tbGsxtZdryzdryBqtj({ bqlx: '01' }).then(res => { qcckGet({}, "/mosty-gsxt/tbGsxtZdry/ryjzCount ").then((res) => {
const dataList = res.slice(0, 8) // tbGsxtZdryzdryBqtj({ bqlx: "01" }).then((res) => {
data.value = dataList.map(item => { // const dataList = res.slice(0, 8);
data.value = res.map((item) => {
return { return {
value: item.sl, value: item.sl ? item.sl : 0,
name: item.bqmc, name: item.zdmc
} };
}) });
}) });
} };
tbGsxtZdryzdryBqtjFn() tbGsxtZdryzdryBqtjFn();
</script> </script>
<style> <style>
@ -60,7 +53,7 @@ tbGsxtZdryzdryBqtjFn()
font-size: 14px !important; font-size: 14px !important;
color: rgb(255, 166, 14); color: rgb(255, 166, 14);
} }
.switchover{ .switchover {
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
margin-left: 20px; margin-left: 20px;