Merge branch 'main' of http://61.139.16.27:26684/zy_oyj/sgxt_web
This commit is contained in:
@ -106,3 +106,10 @@ export const useStatistics = (data) => {
|
|||||||
data
|
data
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
/** 获取是否红色名字,市情指领导、优秀信息员、优秀研判名字要变橙红色 */
|
||||||
|
export const getUserIsRed = () => {
|
||||||
|
return request({
|
||||||
|
url: '/mosty-api/mosty-gsxt' + "/xxcj/mjjf/sfgxys",
|
||||||
|
method: "GET"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
@ -23,122 +23,6 @@ export const privateRoutes = [
|
|||||||
* 公开路由表
|
* 公开路由表
|
||||||
*/
|
*/
|
||||||
export const publicRoutes = [
|
export const publicRoutes = [
|
||||||
{
|
|
||||||
path: "/systemConfig",
|
|
||||||
component: layout,
|
|
||||||
name: "systemConfigModel",
|
|
||||||
redirect: "/dict/index",
|
|
||||||
meta: {
|
|
||||||
title: "系统管理",
|
|
||||||
icon: "article"
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: "/user/department-ist",
|
|
||||||
name: "departmentList",
|
|
||||||
component: () => import("@/views/backOfficeSystem/systemConfig/department-list/index"),
|
|
||||||
meta: {
|
|
||||||
title: "部门管理",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: "/user/userList",
|
|
||||||
name: "userList",
|
|
||||||
component: () =>
|
|
||||||
import("@/views/backOfficeSystem/systemConfig/user-list/index"),
|
|
||||||
meta: {
|
|
||||||
title: "用户管理",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/user/role",
|
|
||||||
name: "userRoleIndex",
|
|
||||||
component: () =>
|
|
||||||
import("@/views/backOfficeSystem/systemConfig/role-list/index"),
|
|
||||||
meta: {
|
|
||||||
title: "角色列表",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/user/menuList",
|
|
||||||
name: "menuList",
|
|
||||||
component: () =>
|
|
||||||
import("@/views/backOfficeSystem/systemConfig/menu-list/index"),
|
|
||||||
meta: {
|
|
||||||
title: "菜单管理",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: "/dict/detail",
|
|
||||||
name: "dictDetail",
|
|
||||||
component: () =>
|
|
||||||
import("@/views/backOfficeSystem/systemConfig/dict/detail"),
|
|
||||||
meta: {
|
|
||||||
title: "字典数据"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/dict/index",
|
|
||||||
name: "dictIndex",
|
|
||||||
component: () =>
|
|
||||||
import("@/views/backOfficeSystem/systemConfig/dict/index"),
|
|
||||||
meta: {
|
|
||||||
title: "字典列表",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: "/user/deptAllocationUser/:id",
|
|
||||||
name: "deptAllocationUser",
|
|
||||||
component: () =>
|
|
||||||
import(
|
|
||||||
"@/views/backOfficeSystem/systemConfig/department-list/deptAllocationUser"
|
|
||||||
),
|
|
||||||
meta: {
|
|
||||||
title: "管理用户"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/user/allocationUser/:id",
|
|
||||||
name: "allocationUser",
|
|
||||||
component: () =>
|
|
||||||
import(
|
|
||||||
"@/views/backOfficeSystem/systemConfig/role-list/allocationUser"
|
|
||||||
),
|
|
||||||
meta: {
|
|
||||||
title: "分配用户"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: "/user/systemConfig",
|
|
||||||
name: "systemConfig",
|
|
||||||
component: () =>
|
|
||||||
import(
|
|
||||||
"@/views/backOfficeSystem/systemConfig/system-config-list/index"
|
|
||||||
),
|
|
||||||
meta: {
|
|
||||||
title: "系统配置",
|
|
||||||
icon: "article-ranking"
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
path: "/calendar",
|
|
||||||
name: "calendar",
|
|
||||||
component: () => import("@/views/backOfficeSystem/calendar/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: "敏感节点",
|
|
||||||
icon: "article"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "/oatuh_login",
|
path: "/oatuh_login",
|
||||||
name: "oatuh_login",
|
name: "oatuh_login",
|
||||||
@ -252,12 +136,12 @@ export const publicRoutes = [
|
|||||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/index"),
|
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/index"),
|
||||||
// meta: { title: "预警中心大屏", icon: "article" },
|
// meta: { title: "预警中心大屏", icon: "article" },
|
||||||
// },
|
// },
|
||||||
{
|
// {
|
||||||
path: "/warningBk",
|
// path: "/warningBk",
|
||||||
name: "warningBk",
|
// name: "warningBk",
|
||||||
meta: { title: "布控预警", icon: "article" },
|
// meta: { title: "布控预警", icon: "article" },
|
||||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/warningBk/index"),
|
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/warningBk/index"),
|
||||||
},
|
// },
|
||||||
|
|
||||||
{
|
{
|
||||||
path: "/identityWarning",
|
path: "/identityWarning",
|
||||||
@ -306,12 +190,12 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
path: "/fouColorWarning",
|
// path: "/fouColorWarning",
|
||||||
name: "fouColorWarning",
|
// name: "fouColorWarning",
|
||||||
meta: { title: "四色预警", icon: "article" },
|
// meta: { title: "四色预警", icon: "article" },
|
||||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
path: "/scoreRanking",
|
path: "/scoreRanking",
|
||||||
name: "scoreRanking",
|
name: "scoreRanking",
|
||||||
@ -441,15 +325,7 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/tsypHome_",
|
|
||||||
name: "tsypHome",
|
|
||||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/tsypHome/index"),
|
|
||||||
meta: {
|
|
||||||
title: "数据监测",
|
|
||||||
icon: "article"
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
path: "/ssemanticAnalysis",
|
path: "/ssemanticAnalysis",
|
||||||
name: "semanticAnalysis",
|
name: "semanticAnalysis",
|
||||||
component: () => import("@/views/backOfficeSystem/SemanticAnalysis/index.vue"),
|
component: () => import("@/views/backOfficeSystem/SemanticAnalysis/index.vue"),
|
||||||
@ -485,31 +361,6 @@ export const publicRoutes = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: "/dataMonitor",
|
|
||||||
name: "dataMonitor",
|
|
||||||
meta: { title: "数据监控", icon: "article" },
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: "/resourceMonitoring",
|
|
||||||
name: "resourceMonitoring",
|
|
||||||
component: () => import("@/views/backOfficeSystem/dataMonitor/resourceMonitoring/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: "数据资源检测",
|
|
||||||
icon: "article"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// path: "/onlineUserMonitoring",
|
|
||||||
// name: "onlineUserMonitoring",
|
|
||||||
// component: () => import("@/views/backOfficeSystem/dataMonitor/onlineUserMonitoring/index.vue"),
|
|
||||||
// meta: {
|
|
||||||
// title: "在线用户监控",
|
|
||||||
// icon: "article"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "/IntelligentControl",
|
path: "/IntelligentControl",
|
||||||
name: "IntelligentControl",
|
name: "IntelligentControl",
|
||||||
@ -736,6 +587,15 @@ export const publicRoutes = [
|
|||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
|
path: "/ResearchHome",
|
||||||
|
name: "ResearchHome",
|
||||||
|
component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
|
||||||
|
meta: {
|
||||||
|
title: "智能研判",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
path: "/dataReduction",
|
path: "/dataReduction",
|
||||||
name: "dataReduction",
|
name: "dataReduction",
|
||||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/dataReduction/index"),
|
component: () => import("@/views/backOfficeSystem/JudgmentHome/dataReduction/index"),
|
||||||
@ -744,44 +604,34 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// path: "/situationHome",
|
||||||
|
// name: "situationHome",
|
||||||
|
// component: () => import("@/views/backOfficeSystem/JudgmentHome/situationHome/index"),
|
||||||
|
// meta: {
|
||||||
|
// title: "战略研判",
|
||||||
|
// icon: "article"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// 后面写的研判
|
||||||
{
|
{
|
||||||
path: "/ResearchHome",
|
path: "/tacticalResearch",
|
||||||
name: "ResearchHome",
|
name: "tacticalResearch",
|
||||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
|
component: () => import("@/views/backOfficeSystem/JudgmentHome/tacticalResearch/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "战术研判",
|
title: "战术研判",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/situationHome",
|
path: "/strategicResearch",
|
||||||
name: "situationHome",
|
name: "strategicResearch",
|
||||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/situationHome/index"),
|
component: () => import("@/views/backOfficeSystem/JudgmentHome/strategicResearch/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: "战略研判",
|
title: "战略研判",
|
||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 后面写的研判
|
|
||||||
// {
|
|
||||||
// path: "/tacticalResearch",
|
|
||||||
// name: "tacticalResearch",
|
|
||||||
// component: () => import("@/views/backOfficeSystem/JudgmentHome/tacticalResearch/index.vue"),
|
|
||||||
// meta: {
|
|
||||||
// title: "战术研判",
|
|
||||||
// icon: "article"
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: "/strategicResearch",
|
|
||||||
// name: "strategicResearch",
|
|
||||||
// component: () => import("@/views/backOfficeSystem/JudgmentHome/strategicResearch/index.vue"),
|
|
||||||
// meta: {
|
|
||||||
// title: "战略研判",
|
|
||||||
// icon: "article"
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
path: "/judgmentCommand",
|
path: "/judgmentCommand",
|
||||||
name: "judgmentCommand",
|
name: "judgmentCommand",
|
||||||
@ -930,6 +780,147 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/dataMonitor",
|
||||||
|
name: "dataMonitor",
|
||||||
|
meta: { title: "数据监控", icon: "article" },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "/resourceMonitoring",
|
||||||
|
name: "resourceMonitoring",
|
||||||
|
component: () => import("@/views/backOfficeSystem/dataMonitor/resourceMonitoring/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: "数据资源检测",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/onlineUserMonitoring",
|
||||||
|
name: "onlineUserMonitoring",
|
||||||
|
component: () => import("@/views/backOfficeSystem/dataMonitor/onlineUserMonitoring/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: "在线用户监控",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/systemConfig",
|
||||||
|
component: layout,
|
||||||
|
name: "systemConfigModel",
|
||||||
|
redirect: "/dict/index",
|
||||||
|
meta: {
|
||||||
|
title: "系统管理",
|
||||||
|
icon: "article"
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "/user/department-ist",
|
||||||
|
name: "departmentList",
|
||||||
|
component: () => import("@/views/backOfficeSystem/systemConfig/department-list/index"),
|
||||||
|
meta: {
|
||||||
|
title: "部门管理",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: "/user/userList",
|
||||||
|
name: "userList",
|
||||||
|
component: () =>
|
||||||
|
import("@/views/backOfficeSystem/systemConfig/user-list/index"),
|
||||||
|
meta: {
|
||||||
|
title: "用户管理",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/user/role",
|
||||||
|
name: "userRoleIndex",
|
||||||
|
component: () =>
|
||||||
|
import("@/views/backOfficeSystem/systemConfig/role-list/index"),
|
||||||
|
meta: {
|
||||||
|
title: "角色列表",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/user/menuList",
|
||||||
|
name: "menuList",
|
||||||
|
component: () =>
|
||||||
|
import("@/views/backOfficeSystem/systemConfig/menu-list/index"),
|
||||||
|
meta: {
|
||||||
|
title: "菜单管理",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: "/dict/detail",
|
||||||
|
name: "dictDetail",
|
||||||
|
component: () =>
|
||||||
|
import("@/views/backOfficeSystem/systemConfig/dict/detail"),
|
||||||
|
meta: {
|
||||||
|
title: "字典数据"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/dict/index",
|
||||||
|
name: "dictIndex",
|
||||||
|
component: () =>
|
||||||
|
import("@/views/backOfficeSystem/systemConfig/dict/index"),
|
||||||
|
meta: {
|
||||||
|
title: "字典列表",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: "/user/deptAllocationUser/:id",
|
||||||
|
name: "deptAllocationUser",
|
||||||
|
component: () =>
|
||||||
|
import(
|
||||||
|
"@/views/backOfficeSystem/systemConfig/department-list/deptAllocationUser"
|
||||||
|
),
|
||||||
|
meta: {
|
||||||
|
title: "管理用户"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/user/allocationUser/:id",
|
||||||
|
name: "allocationUser",
|
||||||
|
component: () =>
|
||||||
|
import(
|
||||||
|
"@/views/backOfficeSystem/systemConfig/role-list/allocationUser"
|
||||||
|
),
|
||||||
|
meta: {
|
||||||
|
title: "分配用户"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: "/user/systemConfig",
|
||||||
|
name: "systemConfig",
|
||||||
|
component: () =>
|
||||||
|
import(
|
||||||
|
"@/views/backOfficeSystem/systemConfig/system-config-list/index"
|
||||||
|
),
|
||||||
|
meta: {
|
||||||
|
title: "系统配置",
|
||||||
|
icon: "article-ranking"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
path: "/calendar",
|
||||||
|
name: "calendar",
|
||||||
|
component: () => import("@/views/backOfficeSystem/calendar/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: "敏感节点",
|
||||||
|
icon: "article"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/rests",
|
path: "/rests",
|
||||||
name: "rests",
|
name: "rests",
|
||||||
@ -938,19 +929,36 @@ export const publicRoutes = [
|
|||||||
icon: "article"
|
icon: "article"
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
// {
|
|
||||||
// path: "/fouColorWarning",
|
|
||||||
// name: "fouColorWarning",
|
|
||||||
// meta: { title: "四色预警", icon: "article" },
|
|
||||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
path: "/CollectCrculate",
|
path: "/CollectCrculate",
|
||||||
name: "CollectCrculate",
|
name: "CollectCrculate",
|
||||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"),
|
component: () => import("@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"),
|
||||||
meta: { title: "信息采集", icon: "article" },
|
meta: { title: "情报采集", icon: "article" },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/fouColorWarning",
|
||||||
|
name: "fouColorWarning",
|
||||||
|
meta: { title: "四色预警", icon: "article" },
|
||||||
|
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// path: "/ResearchHome",
|
||||||
|
// name: "ResearchHome",
|
||||||
|
// component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
|
||||||
|
// meta: {
|
||||||
|
// title: "战术研判",
|
||||||
|
// icon: "article"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: "/situationHome",
|
||||||
|
// name: "situationHome",
|
||||||
|
// component: () => import("@/views/backOfficeSystem/JudgmentHome/situationHome/index"),
|
||||||
|
// meta: {
|
||||||
|
// title: "战略研判",
|
||||||
|
// icon: "article"
|
||||||
|
// }
|
||||||
|
// },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { ref, toRefs } from 'vue';
|
import { ref, toRefs, isRef } from 'vue';
|
||||||
import { getSysDictByCode } from '@/api/sysDict' //引入封装数字字典接口
|
import { getSysDictByCode } from '@/api/sysDict' //引入封装数字字典接口
|
||||||
|
|
||||||
import { getLocalDic } from "@/utils/localDic/index.js"
|
import { getLocalDic } from "@/utils/localDic/index.js"
|
||||||
@ -45,7 +45,7 @@ export function getDict(...args) {
|
|||||||
p.children = p.itemList
|
p.children = p.itemList
|
||||||
})
|
})
|
||||||
res.value[d] = result.itemList
|
res.value[d] = result.itemList
|
||||||
// console.log(`${d} - ${result.zdmc} :`, result.itemList);
|
//
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,3 +142,38 @@ export function IdCard(IdCard, type) {
|
|||||||
}
|
}
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*翻译字典数据
|
||||||
|
* @export
|
||||||
|
* @param {*} dm
|
||||||
|
* @param {*} array
|
||||||
|
*/
|
||||||
|
export function getDictValue(dm, array) {
|
||||||
|
let item = array.value.find(item => {
|
||||||
|
if (item.value) {
|
||||||
|
return item.value == dm;
|
||||||
|
} else if (item.dm) {
|
||||||
|
return item.dm == dm;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return item ? item.label : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取多个字典值(一个值也可以) 字典内容 value-label
|
||||||
|
* @param {String} 要查的值
|
||||||
|
* @param {Array} dict 字典内容
|
||||||
|
*/
|
||||||
|
export function getMultiDictVal(values, dict) {
|
||||||
|
if (typeof values === 'string' && values?.length) values = values.split(',')
|
||||||
|
if (!Array.isArray(values)) return ''
|
||||||
|
if (isRef(dict)) dict = dict.value
|
||||||
|
if (!Array.isArray(dict)) return ''
|
||||||
|
|
||||||
|
return values.map(v => {
|
||||||
|
const item = dict.find(item => item.value === v);
|
||||||
|
return item ? item.label : v;
|
||||||
|
}).join(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
56
src/utils/exportExcel.js
Normal file
56
src/utils/exportExcel.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import * as XLSX from "xlsx";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出Excel(简单的导出)
|
||||||
|
* @param {Array} data 二维数据
|
||||||
|
* @param {String} fileName 文件名
|
||||||
|
*/
|
||||||
|
export function easyExport(data, fileName = '导出文件') {
|
||||||
|
const wb = XLSX.utils.book_new();
|
||||||
|
// 二维数组例子:[ ['姓名', '年龄', '城市'], ['张三', 25, '北京'], ['李四', 30, '上海'] ];
|
||||||
|
const ws = XLSX.utils.aoa_to_sheet(data); // aoa_to_sheet 方法将二维数组转换为工作表
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 宽度调整
|
||||||
|
ws['!cols'] = Array(data?.[0]?.length || 0).fill({ wpx: 80 });
|
||||||
|
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||||
|
XLSX.writeFile(wb, fileName + '.xlsx');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据对象导出Excel
|
||||||
|
* @param {Object} titleObj 标题对象 {key: '标题', key2: '标题2'}
|
||||||
|
* @param {Array} dataArr 数据数组 例子 [{key: '张三', key2: '25'}, {key: '李四', key2: '30'}]
|
||||||
|
* @param {String} fileName 文件名
|
||||||
|
*/
|
||||||
|
export function exportExlByObj(titleObj, dataArr, fileName = '导出文件') {
|
||||||
|
dataArr = Array.isArray(dataArr) ? [...dataArr] : []
|
||||||
|
/** 列表标题数组 */
|
||||||
|
const titleArr = [Object.values(titleObj)];
|
||||||
|
const sheetHead = [fileName]
|
||||||
|
/** 转二维数据 */
|
||||||
|
const toNeedArr = (titleObj = {}, tableData = []) => {
|
||||||
|
return tableData.map(row => {
|
||||||
|
const rowArr = []
|
||||||
|
Object.keys(titleObj || {}).map(key => {
|
||||||
|
const cellVal = row[key] || ''
|
||||||
|
if (typeof cellVal !== 'string') String(cellVal)
|
||||||
|
rowArr.push(cellVal)
|
||||||
|
})
|
||||||
|
return rowArr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/** @param {Array} 表格数据 (二维数组) */
|
||||||
|
const tableData = toNeedArr(titleObj, dataArr);
|
||||||
|
// 合并标题和数据
|
||||||
|
const finalData = [...titleArr, ...tableData];
|
||||||
|
// 合并标题
|
||||||
|
easyExport(finalData, fileName);
|
||||||
|
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@
|
|||||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
@ -19,16 +20,22 @@
|
|||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
|
:expand="true" @chooseData="handleChooseData">
|
||||||
<template #xwcs="{ row }">
|
<template #xwcs="{ row }">
|
||||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #bqYs="{ row }">
|
<template #bqys="{ row }">
|
||||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||||
</template>
|
</template>
|
||||||
<template #czzt="{ row }">
|
<template #czzt="{ row }">
|
||||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||||
</template>
|
</template>
|
||||||
|
<template #expand="{ props }">
|
||||||
|
<div class="expand-content" style="max-width: 100%">
|
||||||
|
<Items :row="props" :dict="dict" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||||
<el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
<el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||||
@ -64,6 +71,7 @@ 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 { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||||
@ -74,10 +82,21 @@ import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/ce
|
|||||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
||||||
import AddFrom from './components/addFrom.vue'
|
import AddFrom from './components/addFrom.vue'
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
import { holographicProfileJump } from "@/utils/tools.js"
|
||||||
|
import { getMultiDictVal } from "@/utils/dict.js"
|
||||||
|
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict("D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
const { D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict("D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||||
|
|
||||||
|
// 字典数据集合
|
||||||
|
const dict = ref({
|
||||||
|
D_GS_SSYJ,
|
||||||
|
D_GSXT_YJXX_CZZT
|
||||||
|
})
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
|
/** 选中项 */
|
||||||
|
const selectRows = ref([])
|
||||||
const bqLbData = ref({
|
const bqLbData = ref({
|
||||||
bqXl: []
|
bqXl: []
|
||||||
})
|
})
|
||||||
@ -100,7 +119,7 @@ const pageData = reactive({
|
|||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
showSelectType: "null",
|
showSelectType: "checkBox",
|
||||||
loading: false,
|
loading: false,
|
||||||
haveControls: true
|
haveControls: true
|
||||||
},
|
},
|
||||||
@ -118,7 +137,7 @@ const pageData = reactive({
|
|||||||
{ label: "行为子类", prop: "xwzlmc", showOverflowTooltip: true },
|
{ label: "行为子类", prop: "xwzlmc", showOverflowTooltip: true },
|
||||||
{ label: "行为描述", prop: "xwms", showOverflowTooltip: true },
|
{ label: "行为描述", prop: "xwms", showOverflowTooltip: true },
|
||||||
{ label: "行为次数", prop: "xwcs", showSolt: true },
|
{ label: "行为次数", prop: "xwcs", showSolt: true },
|
||||||
{ label: "行为颜色", prop: "bqYs", showSolt: true },
|
{ label: "行为颜色", prop: "bqys", showSolt: true },
|
||||||
{ label: "行为分值", prop: "xwfz", },
|
{ label: "行为分值", prop: "xwfz", },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "所属县局", prop: "ssbm" },
|
{ label: "所属县局", prop: "ssbm" },
|
||||||
@ -286,6 +305,39 @@ const tabHeightFn = () => {
|
|||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** 触发选中 */
|
||||||
|
const handleChooseData = (val) => {
|
||||||
|
selectRows.value = val
|
||||||
|
}
|
||||||
|
const exportExl = () => {
|
||||||
|
const titleObj = {
|
||||||
|
xm: "姓名",
|
||||||
|
sfzh: "身份证号",
|
||||||
|
dh: "电话",
|
||||||
|
xldlmc: "行为大类",
|
||||||
|
xwzlmc: "行为子类",
|
||||||
|
xwms: "行为描述",
|
||||||
|
xwcs: "行为次数",
|
||||||
|
bqys_cname: "行为颜色",
|
||||||
|
xwfz: "行为分值",
|
||||||
|
czzt_cname: "处置状态",
|
||||||
|
ssbm: "所属县局",
|
||||||
|
}
|
||||||
|
/** 导出【选中】的数据 (没有就全部)*/
|
||||||
|
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||||
|
const data = needArr.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exportExlByObj(titleObj, data, '行为预警')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@ -0,0 +1,106 @@
|
|||||||
|
<template>
|
||||||
|
<div class="warning-item">
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">预警人姓名:<span>{{ row.xm }}</span></div>
|
||||||
|
<div class="info-item">身份证号:<span>{{ row.sfzh }}</span></div>
|
||||||
|
<div class="info-item">电话:<span>{{ row.dh }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">行为大类:<span>{{ row.xldlmc }}</span></div>
|
||||||
|
<div class="info-item">行为子类:<span>{{ row.xwzlmc }}</span></div>
|
||||||
|
<div class="info-item">行为次数:<span>{{ row.xwcs }}次</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
标签颜色:
|
||||||
|
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)"
|
||||||
|
:options="Array.isArray(props.dict.D_GS_SSYJ) ? props.dict.D_GS_SSYJ : []" />
|
||||||
|
</div>
|
||||||
|
<div class=" info-item">预警时间:<span>{{ row.yjsj }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-item">行为分值:<span>{{ row.xwfz }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
处置状态:
|
||||||
|
|
||||||
|
<DictTag v-model:value="row.czzt"
|
||||||
|
:options="Array.isArray(props.dict.D_GSXT_YJXX_CZZT) ? props.dict.D_GSXT_YJXX_CZZT : []" />
|
||||||
|
</div>
|
||||||
|
<div class="info-item">所属部门:<span>{{ row.ssbm }}</span></div>
|
||||||
|
<div class="info-item">所属县局:<span>{{ row.ssxgaj }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">所属市局:<span>{{ row.sssgaj }}</span></div>
|
||||||
|
<div class="info-item">接警员姓名:<span>{{ row.jjyxm }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item full-width">行为描述:<span>{{ row.xwms }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const props = defineProps({
|
||||||
|
/** 表格行数据 */
|
||||||
|
row: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
D_GS_SSYJ: [],
|
||||||
|
D_GSXT_YJXX_CZZT: []
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const bqYs = (val) => {
|
||||||
|
if (val == '01') { // 红
|
||||||
|
return '#ff0202'
|
||||||
|
} else if (val == '02') { // 橙
|
||||||
|
return '#ff8c00'
|
||||||
|
} else if (val == '03') { // 黄
|
||||||
|
return '#c2c203' // 原亮黄色:ffff00
|
||||||
|
} else if (val == '04') { // 蓝
|
||||||
|
return '#0000ff'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.warning-item {
|
||||||
|
width: 100%;
|
||||||
|
padding: 15px;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-row {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
flex: 0 0 calc(33.33% - 20px);
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
padding: 5px 0;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全宽字段
|
||||||
|
.full-width {
|
||||||
|
flex: 0 0 100% !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -10,6 +10,7 @@
|
|||||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
@ -17,9 +18,10 @@
|
|||||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Searchs>
|
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Searchs>
|
||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{height:(pageData.tableHeight + 40)+'px'}">
|
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
|
:expand="true" @chooseData="handleChooseData">
|
||||||
<template #sfcs="{ row }">
|
<template #sfcs="{ row }">
|
||||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||||
</template>
|
</template>
|
||||||
@ -29,6 +31,11 @@
|
|||||||
<template #czzt="{ row }">
|
<template #czzt="{ row }">
|
||||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||||
</template>
|
</template>
|
||||||
|
<template #expand="{ props }">
|
||||||
|
<div class="expand-content" style="max-width: 100%">
|
||||||
|
<Items :row="props || {}" :dict="dict" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||||
<el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
<el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||||
@ -60,19 +67,29 @@ 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 { tbYjxxGetZbtj, tbGsxtBqzhSelectList } from '@/api/yj.js'
|
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList } from '@/api/yj.js'
|
||||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
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, watch,nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, watch, 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 { getMultiDictVal } from "@/utils/dict.js"
|
||||||
import emitter from "@/utils/eventBus.js";
|
import emitter from "@/utils/eventBus.js";
|
||||||
|
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT","D_GS_SSYJ","D_BZ_YJJB");
|
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB");
|
||||||
|
|
||||||
|
// 字典数据集合
|
||||||
|
const dict = ref({
|
||||||
|
D_GS_SSYJ,
|
||||||
|
D_GSXT_YJXX_CZZT
|
||||||
|
})
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
import { holographicProfileJump } from "@/utils/tools.js"
|
||||||
|
|
||||||
// 搜索配置
|
// 搜索配置
|
||||||
@ -184,6 +201,8 @@ const handleClick = (row) => {
|
|||||||
detailRef.value.init(row)
|
detailRef.value.init(row)
|
||||||
}
|
}
|
||||||
const assessShow = ref(false)
|
const assessShow = ref(false)
|
||||||
|
/** 选中项 */
|
||||||
|
const selectRows = ref([])
|
||||||
const dataList = ref()
|
const dataList = ref()
|
||||||
const pushAssess = (val) => {
|
const pushAssess = (val) => {
|
||||||
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
return holographicProfileJump(val?.sfzh) // 全息档案跳转
|
||||||
@ -255,10 +274,43 @@ const tabHeightFn = () => {
|
|||||||
} else {
|
} else {
|
||||||
pageData.tableHeight = window.innerHeight - 250;
|
pageData.tableHeight = window.innerHeight - 250;
|
||||||
}
|
}
|
||||||
window.onresize = function () {
|
window.onresize = function() {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const handleChooseData = (val) => {
|
||||||
|
selectRows.value = val
|
||||||
|
}
|
||||||
|
const exportExl = () => {
|
||||||
|
|
||||||
|
const titleObj = {
|
||||||
|
xm: "姓名",
|
||||||
|
sfzh: "身份证号",
|
||||||
|
dh: "电话",
|
||||||
|
sfdlmc: "组合大类",
|
||||||
|
sfzlmc: "组合小类",
|
||||||
|
sfcs: "组合次数",
|
||||||
|
bqys_cname: "标签颜色",
|
||||||
|
yjsj: "预警时间",
|
||||||
|
sffz: "预警分值",
|
||||||
|
czzt_cname: "处置状态",
|
||||||
|
ssbm: "所属县局",
|
||||||
|
}
|
||||||
|
/** 导出【选中】的数据 (没有就全部)*/
|
||||||
|
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||||
|
const data = needArr.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exportExlByObj(titleObj, data, '组合预警')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@ -0,0 +1,74 @@
|
|||||||
|
<template>
|
||||||
|
<div class="warning-item">
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">姓名:<span>{{ row.xm }}</span></div>
|
||||||
|
<div class="info-item">身份证号:<span>{{ row.sfzh }}</span></div>
|
||||||
|
<div class="info-item">电话:<span>{{ row.dh }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">组合大类:<span>{{ row.sfdlmc }}</span></div>
|
||||||
|
<div class="info-item">组合小类:<span>{{ row.sfzlmc }}</span></div>
|
||||||
|
<div class="info-item">组合次数:<span>{{ row.sfcs }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
标签颜色:<DictTag v-model:value="row.bqys" :options="props.dict.D_GS_SSYJ" />
|
||||||
|
</div>
|
||||||
|
<div class="info-item">预警时间:<span>{{ row.yjsj }}</span></div>
|
||||||
|
<div class="info-item">预警分值:<span>{{ row.sffz }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
处置状态:<DictTag v-model:value="row.czzt" :options="props.dict.D_GSXT_YJXX_CZZT" />
|
||||||
|
</div>
|
||||||
|
<div class="info-item">所属县局:<span>{{ row.ssbm }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const props = defineProps({
|
||||||
|
/** 表格行数据 */
|
||||||
|
row: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
D_GS_SSYJ: [],
|
||||||
|
D_GSXT_YJXX_CZZT: []
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.warning-item {
|
||||||
|
width: 100%;
|
||||||
|
padding: 15px;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-row {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
flex: 0 0 calc(33.33% - 20px);
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
padding: 5px 0;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -5,15 +5,16 @@
|
|||||||
<!-- <el-button>
|
<!-- <el-button>
|
||||||
<span style="vertical-align: middle">导出</span>
|
<span style="vertical-align: middle">导出</span>
|
||||||
</el-button> -->
|
</el-button> -->
|
||||||
<el-button type="success" @click="openSearch">
|
<el-button type="success" @click="openSearch">
|
||||||
<Search style="width: 1em; height: 1em; margin-right: 8px" />
|
<Search style="width: 1em; height: 1em; margin-right: 8px" />
|
||||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
<div ref="searchBox" v-if="search">
|
<div ref="searchBox" v-if="search">
|
||||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
|
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount">
|
||||||
<template #defaultSlot>
|
<template #defaultSlot>
|
||||||
<el-select @change="gettbGsxtBqglSelectList" v-model="queryFrom.sfdl" placeholder="请选择身份类型"
|
<el-select @change="gettbGsxtBqglSelectList" v-model="queryFrom.sfdl" placeholder="请选择身份类型"
|
||||||
@ -29,17 +30,23 @@
|
|||||||
</Searchs>
|
</Searchs>
|
||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{height:(pageData.tableHeight + 40)+'px'}">
|
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||||
|
@chooseData="handleChooseData">
|
||||||
|
<template #expand="{ props }">
|
||||||
|
<div class="expand-content" style="max-width: 100%">
|
||||||
|
<Items :row="props || {}" :dict="dict" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<template #sfcs="{ row }">
|
<template #sfcs="{ row }">
|
||||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #bqys="{ row }">
|
<template #bqys="{ row }">
|
||||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||||
</template>
|
</template>
|
||||||
<template #czzt="{ row }">
|
<template #czzt="{ row }">
|
||||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||||
</template>
|
</template>
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||||
@ -64,7 +71,7 @@
|
|||||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||||
:tacitly="tacitly" />
|
: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 }" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -77,7 +84,7 @@ import Information from "@/views/home/model/information.vue";
|
|||||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||||
import AddFrom from "./components/addFrom.vue";
|
import AddFrom from "./components/addFrom.vue";
|
||||||
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'
|
||||||
@ -85,10 +92,14 @@ 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";
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
import { holographicProfileJump } from "@/utils/tools.js"
|
||||||
|
import Items from "./item/items.vue"
|
||||||
|
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||||
|
import { getMultiDictVal } from "@/utils/dict.js"
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
const {D_GSXT_YJXX_CZZT,D_GS_SSYJ} = proxy.$dict("D_GSXT_YJXX_CZZT","D_GS_SSYJ")
|
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ")
|
||||||
|
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||||
// 搜索配置
|
// 搜索配置
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||||
@ -126,7 +137,7 @@ const pageData = reactive({
|
|||||||
{ label: "预警时间", prop: "yjsj" },
|
{ label: "预警时间", prop: "yjsj" },
|
||||||
{ label: "预警分值", prop: "sffz" },
|
{ label: "预警分值", prop: "sffz" },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "所属县局", prop: "ssbm" },
|
{ label: "所属县局", prop: "ssbm" },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -156,8 +167,16 @@ const getList = () => {
|
|||||||
pageData.tableConfiger.loading = true;
|
pageData.tableConfiger.loading = true;
|
||||||
// TODO: 替换为实际的身份预警API接口
|
// TODO: 替换为实际的身份预警API接口
|
||||||
yjzxSfyjSelectList(queryFrom.value).then((res) => {
|
yjzxSfyjSelectList(queryFrom.value).then((res) => {
|
||||||
pageData.tableData = res.records || [];
|
pageData.tableData = Array.isArray(res?.records) ? res.records : [];
|
||||||
pageData.total = res.total || 0;
|
pageData.tableData = pageData.tableData.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
pageData.total = res?.total || 0;
|
||||||
pageData.tableConfiger.loading = false;
|
pageData.tableConfiger.loading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
pageData.tableConfiger.loading = false;
|
pageData.tableConfiger.loading = false;
|
||||||
@ -287,10 +306,42 @@ const tabHeightFn = () => {
|
|||||||
} else {
|
} else {
|
||||||
pageData.tableHeight = window.innerHeight - 250;
|
pageData.tableHeight = window.innerHeight - 250;
|
||||||
}
|
}
|
||||||
window.onresize = function () {
|
window.onresize = function() {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
/** 选中项 */
|
||||||
|
const selectRows = ref([])
|
||||||
|
const handleChooseData = (val) => {
|
||||||
|
selectRows.value = val
|
||||||
|
}
|
||||||
|
const exportExl = () => {
|
||||||
|
const titleObj = {
|
||||||
|
xm: "姓名",
|
||||||
|
sfzh: "身份证号",
|
||||||
|
dh: "电话",
|
||||||
|
sfdlmc: "组合大类",
|
||||||
|
sfzlmc: "组合小类",
|
||||||
|
sfcs: "组合次数",
|
||||||
|
bqys_cname: "标签颜色",
|
||||||
|
yjsj: "预警时间",
|
||||||
|
sffz: "预警分值",
|
||||||
|
czzt_cname: "处置状态",
|
||||||
|
ssbm: "所属县局",
|
||||||
|
}
|
||||||
|
/** 导出【选中】的数据 (没有就全部)*/
|
||||||
|
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||||
|
const data = needArr.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exportExlByObj(titleObj, data, '身份预警')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@ -0,0 +1,83 @@
|
|||||||
|
<template>
|
||||||
|
<div class="warning-item">
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">预警人姓名:<span>{{ row.xm }}</span></div>
|
||||||
|
<div class="info-item">身份证号:<span>{{ row.sfzh }}</span></div>
|
||||||
|
<div class="info-item">电话:<span>{{ row.dh }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">组合大类:<span>{{ row.sfdlmc }}</span></div>
|
||||||
|
<div class="info-item">组合小类:<span>{{ row.sfzlmc }}</span></div>
|
||||||
|
<div class="info-item">组合预警次数:<span>{{ row.sfcs }}次</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
标签颜色:
|
||||||
|
<DictTag v-model:value="row.bqys" :options="props.dict.D_GS_SSYJ" />
|
||||||
|
</div>
|
||||||
|
<div class="info-item">预警时间:<span>{{ row.yjsj }}</span></div>
|
||||||
|
<div class="info-item">预警分值:<span>{{ row.sffz }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">
|
||||||
|
处置状态:
|
||||||
|
<DictTag v-model:value="row.czzt" :options="props.dict.D_GSXT_YJXX_CZZT" />
|
||||||
|
</div>
|
||||||
|
<div class="info-item">所属部门:<span>{{ row.ssbm }}</span></div>
|
||||||
|
<div class="info-item">所属县局:<span>{{ row.ssxgaj }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">所属市局:<span>{{ row.sssgaj }}</span></div>
|
||||||
|
<div class="info-item">接警员姓名:<span>{{ row.jjyxm }}</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref, computed } from 'vue'
|
||||||
|
// import DictTag from '@/components/dictTag.vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
/** 表格行数据 */
|
||||||
|
row: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
D_GS_SSYJ: [],
|
||||||
|
D_GSXT_YJXX_CZZT: []
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
// console.log('row😃: ', props.row);
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.warning-item {
|
||||||
|
width: 100%;
|
||||||
|
padding: 15px;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-row {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
flex: 0 0 calc(33.33% - 20px);
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
padding: 5px 0;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="titleBox">
|
<div class="titleBox">
|
||||||
<PageTitle title="预警布控">
|
<PageTitle title="布控预警">
|
||||||
<el-button>
|
<el-button>
|
||||||
<span style="vertical-align: middle">导出</span>
|
<span style="vertical-align: middle">导出</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -13,24 +13,22 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox">
|
<div class="tabBox">
|
||||||
<MyTable
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:tableData="pageData.tableData"
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
:tableColumn="pageData.tableColumn"
|
:expand="true">
|
||||||
:tableHeight="pageData.tableHeight"
|
<template #yjJb="{ row }">
|
||||||
:key="pageData.keyCount"
|
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||||
:tableConfiger="pageData.tableConfiger"
|
</template>
|
||||||
:controlsWidth="pageData.controlsWidth"
|
<template #expand="{ props }">
|
||||||
>
|
<div class="expand-content" style="max-width: 100%">
|
||||||
|
<Items :row="props || {}" :dict="dict" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||||
@changeNo="changeNo"
|
...pageData.pageConfiger,
|
||||||
@changeSize="changeSize"
|
total: pageData.total
|
||||||
:tableHeight="pageData.tableHeight"
|
}"></Pages>
|
||||||
:pageConfiger="{
|
|
||||||
...pageData.pageConfiger,
|
|
||||||
total: pageData.total
|
|
||||||
}"
|
|
||||||
></Pages>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -40,22 +38,33 @@ import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
|||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search 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 { qcckGet } from "@/api/qcckApi.js";
|
import Items from "./item/items.vue";
|
||||||
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||||
|
import { bqYs } from '@/utils/tools'
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { D_BZ_YJJB, D_GS_ZDQT_YJLB, D_BZ_YJLX, D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict("D_BZ_YJJB", "D_GS_ZDQT_YJLB", "D_BZ_YJLX", "D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||||
|
|
||||||
|
// 字典数据集合
|
||||||
|
const dict = ref({
|
||||||
|
D_BZ_YJJB
|
||||||
|
})
|
||||||
|
|
||||||
const searchBox = ref();
|
const searchBox = ref();
|
||||||
|
|
||||||
// 搜索配置
|
// 搜索配置
|
||||||
const searchConfiger = ref([
|
const searchConfiger = ref([
|
||||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input"},
|
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input"},
|
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||||
{ label: "身份类型", prop: 'sflx', placeholder: "请选择身份类型", showType: "select", options: [
|
{
|
||||||
{ label: "重点人员", value: "1" },
|
label: "身份类型", prop: 'sflx', placeholder: "请选择身份类型", showType: "select", options: [
|
||||||
{ label: "在逃人员", value: "2" },
|
{ label: "重点人员", value: "1" },
|
||||||
{ label: "涉毒人员", value: "3" },
|
{ label: "在逃人员", value: "2" },
|
||||||
{ label: "涉恐人员", value: "4" }
|
{ label: "涉毒人员", value: "3" },
|
||||||
]},
|
{ label: "涉恐人员", value: "4" }
|
||||||
|
]
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const queryFrom = ref({});
|
const queryFrom = ref({});
|
||||||
@ -77,14 +86,17 @@ const pageData = reactive({
|
|||||||
},
|
},
|
||||||
controlsWidth: 160,
|
controlsWidth: 160,
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "姓名", prop: "xm",},
|
{ label: "预警标题", prop: "yjBt", },
|
||||||
{ label: "身份证号", prop: "sfzh", },
|
{ label: "姓名", prop: "yjRyxm", },
|
||||||
{ label: "电话", prop: "dh", },
|
{ label: "身份证号", prop: "yjRysfzh", },
|
||||||
{ label: "身份类型", prop: "sflx",},
|
{ label: "电话", prop: "yjRysjh", },
|
||||||
{ label: "身份等级", prop: "sfdj",},
|
// { label: "身份类型", prop: "sflx",},
|
||||||
{ label: "预警原因", prop: "yjyy", showOverflowTooltip: true },
|
// { label: "身份等级", prop: "sfdj",},
|
||||||
{ label: "预警时间", prop: "yjsj",},
|
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true },
|
||||||
{ label: "处理状态", prop: "clzt",},
|
{ label: "预警日期", prop: "yjFsrq", },
|
||||||
|
{ label: "预警时间", prop: "yjFssj", },
|
||||||
|
{ label: "预警标签详情", prop: "yjbqmc", },
|
||||||
|
{ label: "预警级别", prop: "yjJb", showSolt: true, showOverflowTooltip: true },
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -94,7 +106,7 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const onSearch = (val) => {
|
const onSearch = (val) => {
|
||||||
queryFrom.value = {...val};
|
queryFrom.value = { ...val };
|
||||||
pageData.pageConfiger.pageCurrent = 1;
|
pageData.pageConfiger.pageCurrent = 1;
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
@ -112,7 +124,8 @@ const changeSize = (val) => {
|
|||||||
const getList = () => {
|
const getList = () => {
|
||||||
pageData.tableConfiger.loading = true;
|
pageData.tableConfiger.loading = true;
|
||||||
// TODO: 替换为实际的身份预警API接口
|
// TODO: 替换为实际的身份预警API接口
|
||||||
qcckGet(queryFrom.value, '/mosty-gsxt/identityWarning/selectPage').then((res) => {
|
// qcckGet(queryFrom.value, '/mosty-gsxt/identityWarning/selectPage').then((res) => {
|
||||||
|
qcckPost(queryFrom.value, '/mosty-gsxt/tbYjxx/getPageList').then((res) => {
|
||||||
pageData.tableData = res.records || [];
|
pageData.tableData = res.records || [];
|
||||||
pageData.total = res.total || 0;
|
pageData.total = res.total || 0;
|
||||||
pageData.tableConfiger.loading = false;
|
pageData.tableConfiger.loading = false;
|
||||||
@ -124,7 +137,7 @@ const getList = () => {
|
|||||||
// 表格高度计算
|
// 表格高度计算
|
||||||
const tabHeightFn = () => {
|
const tabHeightFn = () => {
|
||||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||||
window.onresize = function () {
|
window.onresize = function() {
|
||||||
tabHeightFn();
|
tabHeightFn();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
<template>
|
||||||
|
<div class="warning-item">
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">预警标题:<span>{{ row.yjBt }}</span></div>
|
||||||
|
<div class="info-item">姓名:<span>{{ row.yjRyxm }}</span></div>
|
||||||
|
<div class="info-item">身份证号:<span>{{ row.yjRysfzh }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">电话:<span>{{ row.yjRysjh }}</span></div>
|
||||||
|
<div class="info-item">预警内容:<span>{{ row.yjNr }}</span></div>
|
||||||
|
<div class="info-item">预警日期:<span>{{ row.yjFsrq }}</span></div>
|
||||||
|
</div>
|
||||||
|
<div class="second-row">
|
||||||
|
<div class="info-item">预警时间:<span>{{ row.yjFssj }}</span></div>
|
||||||
|
<div class="info-item">预警标签详情:<span>{{ row.yjbqmc }}</span></div>
|
||||||
|
<div class="info-item">
|
||||||
|
预警级别:
|
||||||
|
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="Array.isArray(props.dict.D_BZ_YJJB) ? props.dict.D_BZ_YJJB : []" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { bqYs } from '@/utils/tools'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
/** 表格行数据 */
|
||||||
|
row: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
D_BZ_YJJB: []
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.warning-item {
|
||||||
|
width: 100%;
|
||||||
|
padding: 15px;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-row {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
flex: 0 0 calc(33.33% - 20px);
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
padding: 5px 0;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -4,7 +4,7 @@
|
|||||||
<div class="tabBox" :style="{ height: !search ? maxHeight + 200 + 'px' : (maxHeight + 150) + 'px' }">
|
<div class="tabBox" :style="{ height: !search ? maxHeight + 200 + 'px' : (maxHeight + 150) + 'px' }">
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="maxHeight + 'px'"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="maxHeight + 'px'"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
:expand="true">
|
:expand="true" @chooseData="handleChooseData">
|
||||||
<template #expand="{ props }">
|
<template #expand="{ props }">
|
||||||
<div class="expand-content" style="max-width: 100%">
|
<div class="expand-content" style="max-width: 100%">
|
||||||
<Items :data="props" :dict="dict" />
|
<Items :data="props" :dict="dict" />
|
||||||
@ -85,6 +85,10 @@ import { holographicProfileJump } from "@/utils/tools.js"
|
|||||||
|
|
||||||
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 { exportExlByObj } from "@/utils/exportExcel.js"
|
||||||
|
import { getMultiDictVal } from "@/utils/dict.js"
|
||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dict: {
|
dict: {
|
||||||
@ -97,6 +101,10 @@ const props = defineProps({
|
|||||||
}, search: {
|
}, search: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
|
},
|
||||||
|
excelTitle: {
|
||||||
|
type: String,
|
||||||
|
default: '预警信息'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
@ -104,7 +112,7 @@ const pageData = reactive({
|
|||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
showSelectType: "null",
|
showSelectType: "checkBox",
|
||||||
loading: false,
|
loading: false,
|
||||||
haveControls: true
|
haveControls: true
|
||||||
},
|
},
|
||||||
@ -131,8 +139,8 @@ const pageData = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/** 选中项 */
|
||||||
|
const selectRows = ref([])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -243,7 +251,49 @@ const getRowClassName = (row) => {
|
|||||||
// tabHeightFn();
|
// tabHeightFn();
|
||||||
// };
|
// };
|
||||||
// };
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
const handleChooseData = (val) => {
|
||||||
|
selectRows.value = val
|
||||||
|
}
|
||||||
|
const exportExl = () => {
|
||||||
|
|
||||||
|
const titleObj = {
|
||||||
|
czzt_cname: "处置状态",
|
||||||
|
yjSj: "预警时间",
|
||||||
|
yjRyxm: "姓名",
|
||||||
|
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||||
|
yjLylx: "数据来源",
|
||||||
|
xb_cname: "性别",
|
||||||
|
yjJb_cname: "预警级别",
|
||||||
|
xsd_cname: "相似度",
|
||||||
|
yjDz: "预警地点",
|
||||||
|
yjCs: "预警次数",
|
||||||
|
yjRysjh: "布控手机号",
|
||||||
|
yjClcph: "布控车牌号",
|
||||||
|
yjRysfzh: "身份证",
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 导出【选中】的数据 (没有就全部)*/
|
||||||
|
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||||
|
const data = needArr.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||||
|
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||||
|
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, props.dict.D_GSXT_YJXX_CZZT),
|
||||||
|
yjJb_cname: getMultiDictVal(item.yjJb, props.dict.D_BZ_YJJB),
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exportExlByObj(titleObj, data, props.excelTitle || '人像预警.xlsx')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
|
exportExl,
|
||||||
getList
|
getList
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
@ -32,9 +33,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px', paddingTop: '10px' }">
|
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px', paddingTop: '10px' }">
|
||||||
<div style="padding:0 10px;"> <el-button type="primary" @click="exportExcel">导出</el-button></div>
|
<!-- <div style="padding:0 10px;"> <el-button type="primary" @click="exportExcel">导出</el-button></div> -->
|
||||||
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 200) : (pageData.tableHeight - 150)"
|
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 160) : (pageData.tableHeight - 110)"
|
||||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" />
|
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" excelTitle="人像预警" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
||||||
@ -99,6 +100,8 @@ import AddFromz from './components/addFrom.vue';
|
|||||||
import FileSaver from "file-saver";
|
import FileSaver from "file-saver";
|
||||||
import emitter from "@/utils/eventBus.js";
|
import emitter from "@/utils/eventBus.js";
|
||||||
import * as XLSX from "xlsx";
|
import * as XLSX from "xlsx";
|
||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_BZ_YJJB", "D_BZ_YJLYXT")
|
const { D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_BZ_YJJB", "D_BZ_YJLYXT")
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
@ -131,6 +134,8 @@ const shortcuts = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
/** 表格高度 */
|
/** 表格高度 */
|
||||||
tableHeight: 600,
|
tableHeight: 600,
|
||||||
@ -344,6 +349,10 @@ const handleExport = () => {
|
|||||||
console.error('导出Excel失败:', e);
|
console.error('导出Excel失败:', e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const exportExl = () => {
|
||||||
|
localWarningRef.value && localWarningRef.value.exportExl()
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table--fit {
|
::v-deep .el-table--fit {
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{height:!search?maxHeight+200+'px':(maxHeight+150)+'px'}">
|
<div class="tabBox" :style="{ height: !search ? maxHeight + 200 + 'px' : (maxHeight + 150) + 'px' }">
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="maxHeight+'px'"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="maxHeight + 'px'"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||||
:expand="true" >
|
:expand="true" @chooseData="handleChooseData">
|
||||||
<template #expand="{ props }">
|
<template #expand="{ props }">
|
||||||
<div class="expand-content" style="max-width: 100%">
|
<div class="expand-content" style="max-width: 100%">
|
||||||
<Items :data="props" :dict="dict" />
|
<Items :data="props" :dict="dict" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #yjTp="{ row }">
|
<template #yjTp="{ row }">
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<el-button type="success" @click="showFeedback(item, '反馈')" v-if="item.czzt == '02'">反馈</el-button>
|
<el-button type="success" @click="showFeedback(item, '反馈')" v-if="item.czzt == '02'">反馈</el-button>
|
||||||
<el-button type="success" @click="showFeedback(item, '查看反馈')" v-if="item.czzt == '03'">查看反馈</el-button> -->
|
<el-button type="success" @click="showFeedback(item, '查看反馈')" v-if="item.czzt == '03'">查看反馈</el-button> -->
|
||||||
</MyTable>
|
</MyTable>
|
||||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="maxHeight+100" :pageConfiger="{
|
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="maxHeight + 100" :pageConfiger="{
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
total: pageData.total
|
total: pageData.total
|
||||||
}"></Pages>
|
}"></Pages>
|
||||||
@ -82,9 +82,12 @@ 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 emitter from "@/utils/eventBus.js";
|
import emitter from "@/utils/eventBus.js";
|
||||||
import { holographicProfileJump } from "@/utils/tools.js"
|
import { holographicProfileJump } from "@/utils/tools.js"
|
||||||
|
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||||
|
import { getMultiDictVal } from "@/utils/dict.js"
|
||||||
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";
|
||||||
|
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dict: {
|
dict: {
|
||||||
@ -104,7 +107,7 @@ const pageData = reactive({
|
|||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
tableConfiger: {
|
tableConfiger: {
|
||||||
rowHieght: 61,
|
rowHieght: 61,
|
||||||
showSelectType: "null",
|
showSelectType: "checkBox",
|
||||||
loading: false,
|
loading: false,
|
||||||
haveControls: true
|
haveControls: true
|
||||||
},
|
},
|
||||||
@ -116,13 +119,13 @@ const pageData = reactive({
|
|||||||
}, //分页
|
}, //分页
|
||||||
controlsWidth: 300, //操作栏宽度
|
controlsWidth: 300, //操作栏宽度
|
||||||
tableColumn: [
|
tableColumn: [
|
||||||
{ label: "预警图片", prop: "yjTp", showSolt: true,width: 100 },
|
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||||
{ label: "姓名", prop: "yjRyxm" },
|
{ label: "姓名", prop: "yjRyxm" },
|
||||||
{ label: "年龄", prop: "nl", showSolt: true,width: 80 },
|
{ label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
||||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||||
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||||
@ -131,7 +134,8 @@ const pageData = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/** 选中项 */
|
||||||
|
const selectRows = ref([])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -243,8 +247,48 @@ const getRowClassName = (row) => {
|
|||||||
// tabHeightFn();
|
// tabHeightFn();
|
||||||
// };
|
// };
|
||||||
// };
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
const handleChooseData = (val) => {
|
||||||
|
selectRows.value = val
|
||||||
|
}
|
||||||
|
const exportExl = () => {
|
||||||
|
const titleObj = {
|
||||||
|
czzt_cname: "处置状态",
|
||||||
|
yjSj: "预警时间",
|
||||||
|
yjRyxm: "姓名",
|
||||||
|
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||||
|
yjLylx: "数据来源",
|
||||||
|
xb_cname: "性别",
|
||||||
|
yjJb_cname: "预警级别",
|
||||||
|
xsd_cname: "相似度",
|
||||||
|
yjDz: "预警地点",
|
||||||
|
yjCs: "预警次数",
|
||||||
|
yjRysjh: "布控手机号",
|
||||||
|
yjClcph: "布控车牌号",
|
||||||
|
yjRysfzh: "身份证",
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 导出【选中】的数据 (没有就全部)*/
|
||||||
|
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||||
|
const data = needArr.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||||
|
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||||
|
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||||
|
czzt_cname: getMultiDictVal(item.czzt, props.dict.D_GSXT_YJXX_CZZT),
|
||||||
|
yjJb_cname: getMultiDictVal(item.yjJb, props.dict.D_BZ_YJJB),
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exportExlByObj(titleObj, data, props.excelTitle || '预警.xlsx')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
getList
|
getList,
|
||||||
|
exportExl
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -252,6 +296,7 @@ defineExpose({
|
|||||||
.el-loading-mask {
|
.el-loading-mask {
|
||||||
background: rgba(0, 0, 0, 0.5) !important;
|
background: rgba(0, 0, 0, 0.5) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 预警级别行样式 */
|
/* 预警级别行样式 */
|
||||||
.warning-level-01 {
|
.warning-level-01 {
|
||||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||||
@ -260,6 +305,7 @@ defineExpose({
|
|||||||
.warning-level-01:hover {
|
.warning-level-01:hover {
|
||||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.warning-level-02 {
|
.warning-level-02 {
|
||||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||||
}
|
}
|
||||||
@ -267,6 +313,7 @@ defineExpose({
|
|||||||
.warning-level-02:hover {
|
.warning-level-02:hover {
|
||||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.warning-level-03 {
|
.warning-level-03 {
|
||||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||||
}
|
}
|
||||||
@ -274,6 +321,7 @@ defineExpose({
|
|||||||
.warning-level-03:hover {
|
.warning-level-03:hover {
|
||||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.warning-level-04 {
|
.warning-level-04 {
|
||||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||||
}
|
}
|
||||||
@ -281,6 +329,7 @@ defineExpose({
|
|||||||
.warning-level-04:hover {
|
.warning-level-04:hover {
|
||||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 确保行样式应用到所有单元格 */
|
/* 确保行样式应用到所有单元格 */
|
||||||
.warning-level-01 td,
|
.warning-level-01 td,
|
||||||
.warning-level-02 td,
|
.warning-level-02 td,
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
@ -29,9 +30,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px', paddingTop: '10px' }">
|
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px', paddingTop: '10px' }">
|
||||||
<div style="padding:0 10px;"> <el-button type="primary" @click="exportExcel">导出</el-button></div>
|
<!-- <div style="padding:0 10px;"> <el-button type="primary" @click="exportExcel">导出</el-button></div> -->
|
||||||
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 200) : (pageData.tableHeight - 150)"
|
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 160) : (pageData.tableHeight - 110)"
|
||||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" />
|
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" excelTitle="车辆预警" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
||||||
@ -129,7 +130,7 @@ const shortcuts = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
/** 表格高度 */
|
/** 表格高度 */
|
||||||
tableHeight: 600,
|
tableHeight: 600,
|
||||||
tableData: [], //表格数据
|
tableData: [], //表格数据
|
||||||
keyCount: 0,
|
keyCount: 0,
|
||||||
@ -341,6 +342,11 @@ const handleExport = () => {
|
|||||||
console.error('导出Excel失败:', e);
|
console.error('导出Excel失败:', e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const exportExl = () => {
|
||||||
|
localWarningRef.value && localWarningRef.value.exportExl()
|
||||||
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .el-table--fit {
|
::v-deep .el-table--fit {
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { IdCard } from '@/utils/validate.js'
|
import { IdCard } from '@/utils/validate.js'
|
||||||
import { reactive, ref, getCurrentInstance, watch } from "vue";
|
import { reactive, ref, getCurrentInstance, watch, defineEmits } from "vue";
|
||||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||||
import HolographicArchive from './holographicArchive.vue'
|
import HolographicArchive from './holographicArchive.vue'
|
||||||
import WarningAssignment from './warningAssignment.vue'
|
import WarningAssignment from './warningAssignment.vue'
|
||||||
@ -85,10 +85,10 @@ const props = defineProps({
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
const emit = defineEmits(["plotThetrajectory", "showDetail", 'showFeedback','fkLxOptions']);
|
||||||
watch(() => props.item, (newVal, oldVal) => {
|
watch(() => props.item, (newVal, oldVal) => {
|
||||||
emit('fkLxOptions', newVal);
|
emit('fkLxOptions', newVal);
|
||||||
},{deep:true,immediate:true})
|
},{deep:true,immediate:true})
|
||||||
const emit = defineEmits(["plotThetrajectory", "showDetail", 'showFeedback','fkLxOptions']);
|
|
||||||
|
|
||||||
const showTransfer = (item) => {
|
const showTransfer = (item) => {
|
||||||
router.push({
|
router.push({
|
||||||
|
|||||||
@ -75,7 +75,7 @@
|
|||||||
<div class="flex align-center">
|
<div class="flex align-center">
|
||||||
<img class="mr10" src="@/assets/images/icon_046.png" alt="" />
|
<img class="mr10" src="@/assets/images/icon_046.png" alt="" />
|
||||||
<div class="f14">
|
<div class="f14">
|
||||||
<div style="color:#0BB7FF">{{ userName }}</div>
|
<div :style="{color:isRed ? '#ff5500' : '#fff',fontWeight:isRed ? 'bold' : 'normal'}">{{ userName }}</div>
|
||||||
<div>{{ dept }}</div>
|
<div>{{ dept }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -110,8 +110,11 @@ import { getItem } from "@/utils/storage";
|
|||||||
import { timeValidate, weekValidate } from "@/utils/tools.js";
|
import { timeValidate, weekValidate } from "@/utils/tools.js";
|
||||||
import { useRouter, useRoute, onBeforeRouteLeave } from "vue-router";
|
import { useRouter, useRoute, onBeforeRouteLeave } from "vue-router";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
|
import { getUserIsRed } from "@/api/sys.js"
|
||||||
import xinxi from "@/assets/images/icon_045.png";
|
import xinxi from "@/assets/images/icon_045.png";
|
||||||
import tool from "@/assets/images/icon_044.png";
|
import tool from "@/assets/images/icon_044.png";
|
||||||
|
|
||||||
|
|
||||||
const icon1 = require("@/assets/images/icon_048.png"); //晴天
|
const icon1 = require("@/assets/images/icon_048.png"); //晴天
|
||||||
const icon2 = require("@/assets/images/icon_049.png"); //小雨
|
const icon2 = require("@/assets/images/icon_049.png"); //小雨
|
||||||
const icon3 = require("@/assets/images/icon_050.png"); //高温
|
const icon3 = require("@/assets/images/icon_050.png"); //高温
|
||||||
@ -122,6 +125,8 @@ const icon7 = require("@/assets/images/icon_055.png"); //多云转晴 - 阴天
|
|||||||
const icon8 = require("@/assets/images/icon_056.png"); //多云
|
const icon8 = require("@/assets/images/icon_056.png"); //多云
|
||||||
import { ref, onMounted, defineEmits, defineProps, onUnmounted, reactive, watch } from "vue";
|
import { ref, onMounted, defineEmits, defineProps, onUnmounted, reactive, watch } from "vue";
|
||||||
const userName = getItem("USERNAME");
|
const userName = getItem("USERNAME");
|
||||||
|
/** 是否红色名字 市情指领导、优秀信息员、优秀研判名字要变橙红色*/
|
||||||
|
const isRed = ref(false)
|
||||||
const dept = getItem("deptId") ? getItem("deptId")[0].deptName : '';
|
const dept = getItem("deptId") ? getItem("deptId")[0].deptName : '';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
title: {
|
title: {
|
||||||
@ -163,12 +168,17 @@ const datatime = ref(timeValidate(null, "ymd"));
|
|||||||
const timersfm = ref(null);
|
const timersfm = ref(null);
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// getWheather();
|
// getWheather();
|
||||||
|
getIsRed()
|
||||||
timersfm.value = setInterval(() => {
|
timersfm.value = setInterval(() => {
|
||||||
CurrentTime();
|
CurrentTime();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
|
/** 获取名字是否标红 */
|
||||||
|
function getIsRed() {
|
||||||
|
getUserIsRed().then(res=>{
|
||||||
|
isRed.value = res === true
|
||||||
|
})
|
||||||
|
}
|
||||||
// 按钮切换
|
// 按钮切换
|
||||||
const handleBtns = (val) => {
|
const handleBtns = (val) => {
|
||||||
console.log(val);
|
console.log(val);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="comom-title">
|
<div class="comom-title">
|
||||||
<div class="title">情报来源类型<span class="switchover" @click="reversalPush">切换</span></div>
|
<div class="title">岗位标兵<span class="switchover" @click="reversalPush">切换</span></div>
|
||||||
<el-popover :visible="visible" placement="right" :width="430">
|
<el-popover :visible="visible" placement="right" :width="430">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<div class="title" style="position: relative;z-index: 10000;height: 40px;width: 40px;" @click="visible = true">
|
<div class="title" style="position: relative;z-index: 10000;height: 40px;width: 40px;" @click="visible = true">
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
优秀信息员
|
优秀信息员
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-button" :class="{ active: activeTab === 'ypy' }" @click="switchTab('ypy')">
|
<div class="tab-button" :class="{ active: activeTab === 'ypy' }" @click="switchTab('ypy')">
|
||||||
优秀研判的列表
|
优秀研判
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
60
打包.bat
60
打包.bat
@ -1,12 +1,56 @@
|
|||||||
@echo off
|
@echo off
|
||||||
echo <20><>ʼ<EFBFBD><CABC>֥<EFBFBD>ڸ<EFBFBD>pc<70><63><EFBFBD><EFBFBD>(sgxt_pc)...
|
chcp 65001 >nul
|
||||||
|
title 构建和打包工具
|
||||||
|
|
||||||
|
echo ========================================
|
||||||
|
echo 《林芝哨岗》 vue构建和打包工具
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
echo [1/3] 清理旧的构建文件...
|
||||||
|
@REM if exist gsxt (
|
||||||
|
@REM rmdir /s /q gsxt
|
||||||
|
@REM )
|
||||||
|
if exist gsxt.zip (
|
||||||
|
del gsxt.zip
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [2/3] 开始构建项目...
|
||||||
call npm run build
|
call npm run build
|
||||||
echo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>...
|
|
||||||
if exist gsxt.zip del gsxt.zip
|
if %ERRORLEVEL% NEQ 0 (
|
||||||
|
echo.
|
||||||
|
echo ❌ 构建失败!请检查错误信息。
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [3/3] 压缩构建文件...
|
||||||
|
if not exist gsxt (
|
||||||
|
echo ❌ 找不到构建输出文件夹 gsxt
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
powershell Compress-Archive -Path gsxt -DestinationPath gsxt.zip
|
powershell Compress-Archive -Path gsxt -DestinationPath gsxt.zip
|
||||||
echo ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>
|
|
||||||
explorer .
|
if %ERRORLEVEL% EQU 0 (
|
||||||
msg * "<EFBFBD><EFBFBD>֥<EFBFBD>ڸ<EFBFBD>pc<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>"
|
echo.
|
||||||
start http://localhost:9528?project=sgxt_pc
|
echo ✅ 构建和打包完成!
|
||||||
powershell -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>', '<27>ɹ<EFBFBD>', [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Exclamation)"
|
echo 📦 输出文件: gsxt.zip
|
||||||
|
echo 📁 文件大小:
|
||||||
|
dir gsxt.zip | findstr gsxt.zip
|
||||||
|
start http://localhost:9528?project=sgxt_pc
|
||||||
|
explorer .
|
||||||
|
msg * "《林芝哨岗》打包完成!"
|
||||||
|
@REM powershell -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('打包和压缩已完成!', '成功', [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Exclamation)"
|
||||||
|
) else (
|
||||||
|
echo ❌ 压缩失败!
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 按任意键退出...
|
||||||
|
pause >nul
|
||||||
Reference in New Issue
Block a user