lcw
This commit is contained in:
@ -47,3 +47,57 @@ export const xsasjxsajqxajqk = (params) => {
|
||||
params
|
||||
})
|
||||
}
|
||||
// /asj/xzaj/ztgs 治安案件区域分析
|
||||
export const xsasjxsajztgs = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/ztgs`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
// /asj/xzaj/ccajlbfx 治安案件类别分析
|
||||
export const xsasjxsajccajlbfx = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/ccajlbfx`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
// /asj/xzaj/ajxsfx 治安案件线索分析
|
||||
export const xsasjxsajajxsfx = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/ajxsfx`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
export const xsasjxsajxsfx = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/xsfx`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
export const xsasjxsajnldtj = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/nldtj`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export const xsasjxsajajfsqy = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/ajfsqy`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
// /asj/xzaj/ajdyfx 治安案件发生区域分析
|
||||
export const xsasjxsajajdyfx = (params) => {
|
||||
return request({
|
||||
url: api + `/asj/xzaj/ajdyfx`,
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
@ -33,9 +33,9 @@ const chooseMarksVisible = ref(false)
|
||||
const emit = defineEmits(['change'])
|
||||
const listQuery = ref({})
|
||||
const formData = ref([
|
||||
{ label: "身份证号", prop: "rySfzh", type: "input" ,width:'45%'},
|
||||
{ label: "人员姓名", prop: "ryXm", type: "input" ,width:'45%'},
|
||||
{ label: "性别", prop: "ryXb", type: "select" ,width:'45%',options:D_BZ_XB},
|
||||
{ label: "身份证号", prop: "rySfzh", type: "input" ,width:'45%'},
|
||||
{ label: "手机号码", prop: "ryLxdh", type: "input",width:'45%' },
|
||||
{ label: "户籍地址", prop: "hjdXz", type: "input", width: '100%' },
|
||||
{ label: "户籍地派出所", prop: "hjdpcsdm", depMc: 'hjdpcs', type: "department", width: '48%' },
|
||||
@ -49,11 +49,13 @@ const formData = ref([
|
||||
])
|
||||
const rules = reactive({
|
||||
// fjZp: [{ required: true, message: "请上传人员照片", trigger: "blur" }],
|
||||
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
|
||||
yjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }],
|
||||
ssbmdm:[{ required: true, message: "请选择所属部门", trigger: "change" }]
|
||||
fjZp: [{ required: true, message: "人员照片", trigger: "blur" }],
|
||||
// ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||
|
||||
// ryXb: [{ required: true, message: "请选择性别", trigger: "change" }],
|
||||
// yjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }],
|
||||
// ssbmdm:[{ required: true, message: "请选择所属部门", trigger: "change" }]
|
||||
// ryLxdh: [{ required: true, message: "请输入手机号码", trigger: "blur" }],
|
||||
// hjdXz: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
|
||||
// xzdXz: [{ required: true, message: "请输入现居住地址", trigger: "blur" }],
|
||||
|
||||
@ -1,75 +1,37 @@
|
||||
<template>
|
||||
<div v-loading="loadingPage" class="pageSearch searchBox" :style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`">
|
||||
<div style="padding: 0" v-loading="loadingPage" class="pageSearch searchBox"
|
||||
:style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`">
|
||||
<div class="filter-title">
|
||||
<span class="filter-label"><el-icon><Filter /></el-icon>筛选条件</span>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div v-for="(item, index) in getArr" :key="index" class="item">
|
||||
<div class="label" v-if="item.label">{{ item.label }}</div>
|
||||
<!-- select -->
|
||||
<el-select
|
||||
v-if="item.showType === 'select'"
|
||||
v-model="searchObj[item.prop]"
|
||||
:multiple="item.multiple"
|
||||
:clearable="item.clearable"
|
||||
:filterable="item.filterable"
|
||||
:placeholder="item.placeholder"
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
>
|
||||
<el-option
|
||||
v-for="obj in getOptions[item.prop]"
|
||||
:key="obj.value"
|
||||
:label="obj.label || obj.lable"
|
||||
:value="obj.value"
|
||||
/>
|
||||
<el-select v-if="item.showType === 'select'" v-model="searchObj[item.prop]" :multiple="item.multiple"
|
||||
:clearable="item.clearable" :filterable="item.filterable" :placeholder="item.placeholder" collapse-tags
|
||||
collapse-tags-tooltip>
|
||||
<el-option v-for="obj in getOptions[item.prop]" :key="obj.value" :label="obj.label || obj.lable"
|
||||
:value="obj.value" />
|
||||
</el-select>
|
||||
<!-- input -->
|
||||
<el-input
|
||||
v-else-if="item.showType === 'input'"
|
||||
class="input"
|
||||
v-model="searchObj[item.prop]"
|
||||
:clearable="item.clearable"
|
||||
:placeholder="item.placeholder"
|
||||
/>
|
||||
<el-input v-else-if="item.showType === 'input'" class="input" v-model="searchObj[item.prop]"
|
||||
:clearable="item.clearable" :placeholder="item.placeholder" />
|
||||
<!-- 日期段选择器 -->
|
||||
<el-date-picker
|
||||
v-else-if="item.showType === 'daterange'"
|
||||
v-model="searchObj[item.prop]"
|
||||
type="daterange"
|
||||
unlink-panels
|
||||
:range-separator="item.rangeSeparator"
|
||||
:start-placeholder="item.startPlaceholder"
|
||||
:end-placeholder="item.endPlaceholder"
|
||||
:shortcuts="item.shortcuts"
|
||||
:disabledDate="disabledDate"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-else-if="item.showType === 'datetimerange'"
|
||||
v-model="searchObj[item.prop]"
|
||||
type="datetimerange"
|
||||
unlink-panels
|
||||
:range-separator="item.rangeSeparator || '至'"
|
||||
:start-placeholder="item.startPlaceholder || '开始日期'"
|
||||
:end-placeholder="item.endPlaceholder || '结束日期'"
|
||||
:shortcuts="item.shortcuts"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-else-if="item.showType === 'date'"
|
||||
v-model="searchObj[item.prop]"
|
||||
type="date"
|
||||
:placeholder="item.placeholder"
|
||||
:disabled-date="disabledDate"
|
||||
:shortcuts="item.shortcuts"
|
||||
value-format="YYYY-MM-DD"
|
||||
>
|
||||
<el-date-picker v-else-if="item.showType === 'daterange'" v-model="searchObj[item.prop]" type="daterange"
|
||||
unlink-panels :range-separator="item.rangeSeparator" :start-placeholder="item.startPlaceholder"
|
||||
:end-placeholder="item.endPlaceholder" :shortcuts="item.shortcuts" :disabledDate="disabledDate"
|
||||
value-format="YYYY-MM-DD" />
|
||||
<el-date-picker v-else-if="item.showType === 'datetimerange'" v-model="searchObj[item.prop]"
|
||||
type="datetimerange" unlink-panels :range-separator="item.rangeSeparator || '至'"
|
||||
:start-placeholder="item.startPlaceholder || '开始日期'" :end-placeholder="item.endPlaceholder || '结束日期'"
|
||||
:shortcuts="item.shortcuts" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<el-date-picker v-else-if="item.showType === 'date'" v-model="searchObj[item.prop]" type="date"
|
||||
:placeholder="item.placeholder" :disabled-date="disabledDate" :shortcuts="item.shortcuts"
|
||||
value-format="YYYY-MM-DD">
|
||||
</el-date-picker>
|
||||
<el-date-picker
|
||||
v-else-if="item.showType === 'datetime'"
|
||||
v-model="searchObj[item.prop]"
|
||||
type="datetime"
|
||||
:placeholder="item.placeholder"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
>
|
||||
<el-date-picker v-else-if="item.showType === 'datetime'" v-model="searchObj[item.prop]" type="datetime"
|
||||
:placeholder="item.placeholder" value-format="YYYY-MM-DD HH:mm:ss">
|
||||
</el-date-picker>
|
||||
|
||||
<!-- checkbox -->
|
||||
@ -78,60 +40,31 @@
|
||||
</template>
|
||||
<!-- checkbox -->
|
||||
<template v-else-if="item.showType === 'checkbox'">
|
||||
<el-checkbox
|
||||
v-if="item.showSelectAll"
|
||||
v-model="item.checkAll"
|
||||
:indeterminate="item.isIndeterminate"
|
||||
@change="
|
||||
<el-checkbox v-if="item.showSelectAll" v-model="item.checkAll" :indeterminate="item.isIndeterminate" @change="
|
||||
(val) => {
|
||||
handleCheckAllChange(val, item);
|
||||
}
|
||||
"
|
||||
>全选</el-checkbox
|
||||
>
|
||||
<el-checkbox-group
|
||||
v-model="searchObj[item.prop]"
|
||||
@change="
|
||||
">全选</el-checkbox>
|
||||
<el-checkbox-group v-model="searchObj[item.prop]" @change="
|
||||
(val) => {
|
||||
handleCheckedCitiesChange(val, item);
|
||||
}
|
||||
"
|
||||
>
|
||||
<el-checkbox
|
||||
v-for="obj in item.options"
|
||||
:key="obj.value"
|
||||
:label="obj.value"
|
||||
>{{ obj.label }}</el-checkbox
|
||||
>
|
||||
">
|
||||
<el-checkbox v-for="obj in item.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</template>
|
||||
<!-- radio -->
|
||||
<el-radio-group
|
||||
v-else-if="item.showType === 'radio'"
|
||||
v-model="searchObj[item.prop]"
|
||||
@change="
|
||||
<el-radio-group v-else-if="item.showType === 'radio'" v-model="searchObj[item.prop]" @change="
|
||||
(val) => {
|
||||
handleRadioChange(val, item);
|
||||
}
|
||||
"
|
||||
>
|
||||
<el-radio
|
||||
v-for="obj in item.options"
|
||||
:key="obj.value"
|
||||
:label="obj.value"
|
||||
>{{ obj.label }}</el-radio
|
||||
>
|
||||
">
|
||||
<el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
<!-- 级联选择 -->
|
||||
<el-cascader
|
||||
v-else-if="item.showType === 'cascader'"
|
||||
v-model="searchObj[item.prop]"
|
||||
:props="item.props"
|
||||
:show-all-levels="item.showAllLevels"
|
||||
:clearable="item.clearable"
|
||||
:options="getOptions[item.prop]"
|
||||
:placeholder="item.placeholder"
|
||||
/>
|
||||
<el-cascader v-else-if="item.showType === 'cascader'" v-model="searchObj[item.prop]" :props="item.props"
|
||||
:show-all-levels="item.showAllLevels" :clearable="item.clearable" :options="getOptions[item.prop]"
|
||||
:placeholder="item.placeholder" />
|
||||
<div v-if="item.showType === 'Slot'">
|
||||
<slot :name="item.prop"></slot>
|
||||
</div>
|
||||
@ -242,6 +175,10 @@ const props = defineProps({
|
||||
type: String,
|
||||
default: "rgb(255, 255, 255, 1)"
|
||||
},
|
||||
bool: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
});
|
||||
let loadingPage = ref(false);
|
||||
const emit = defineEmits(["submit", "reset"]);
|
||||
@ -532,14 +469,41 @@ watchEffect(() => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.pageSearch {
|
||||
|
||||
.filter-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
width: 100%;
|
||||
background: linear-gradient(to right, #9ed7ff, #e6f0f8);
|
||||
padding: 5px 15px;
|
||||
.filter-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.filter-line {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
background-color: #ccc;
|
||||
}
|
||||
}
|
||||
|
||||
.box {
|
||||
padding: 0 15px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
margin-right: 12px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.label {
|
||||
margin: auto;
|
||||
margin-right: 5px;
|
||||
@ -549,7 +513,7 @@ watchEffect(() => {
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-date-editor .el-range-separator{
|
||||
::v-deep .el-date-editor .el-range-separator {
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -590,6 +590,11 @@ const sendMessage = (gzlid) => {
|
||||
qcckPost(promes, '/mosty-gsxt/ypbg/sjzl/updateBkgzl').then(res => {
|
||||
console.log(res);
|
||||
})
|
||||
break;
|
||||
case 'BQBK':
|
||||
qcckPost(promes, '/mosty-gsxt/gsxt/bqbk/sendFqzl ').then(res => {
|
||||
console.log(res);
|
||||
})
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,6 +54,12 @@ export const publicRoutes = [
|
||||
name: "deploymentApproval",
|
||||
component: () => import("@/views/backOfficeSystem/ApprovalInformation/deploycontrol/deploymentApproval.vue"),
|
||||
},
|
||||
// 标签布控审核
|
||||
{
|
||||
path: "/shym",
|
||||
name: "shym",
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/marksControl/components/shym.vue"),
|
||||
},
|
||||
// 布控审核信息
|
||||
{
|
||||
path: "/information",
|
||||
@ -79,26 +85,26 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningList/index"),
|
||||
meta: {
|
||||
title: "布控预警",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
path: "/behaviorWarnings",
|
||||
name: "behaviorWarnings",
|
||||
meta: { title: "行为预警", icon: "article" },
|
||||
meta: { title: "行为预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/behaviorWarning/index"),
|
||||
},
|
||||
{
|
||||
path: "/identityWarnings",
|
||||
name: "identityWarnings",
|
||||
meta: { title: "身份预警", icon: "article" },
|
||||
meta: { title: "身份预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/identityWarning/index"),
|
||||
},
|
||||
{
|
||||
path: "/combinedWarnings",
|
||||
name: "combinedWarnings",
|
||||
meta: { title: "组合预警", icon: "article" },
|
||||
meta: { title: "组合预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/combinedWarning/index"),
|
||||
},
|
||||
{
|
||||
@ -107,7 +113,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
|
||||
meta: {
|
||||
title: "重点人管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}, {
|
||||
path: "/myControls",
|
||||
@ -115,7 +121,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/myControl/index"),
|
||||
meta: {
|
||||
title: "我的布控",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}, {
|
||||
path: "/DeploymentAreas",
|
||||
@ -123,7 +129,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/DeploymentArea/index"),
|
||||
meta: {
|
||||
title: "布控区域",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -134,44 +140,44 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/FourColorWarning",
|
||||
name: "FourColorWarning",
|
||||
meta: { title: "预警中心", icon: "article" },
|
||||
meta: { title: "预警中心", icon: "article-ranking" },
|
||||
children: [
|
||||
// {
|
||||
// path: "/centerHome",
|
||||
// name: "centerHome",
|
||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/index"),
|
||||
// meta: { title: "预警中心大屏", icon: "article" },
|
||||
// meta: { title: "预警中心大屏", icon: "article-create" },
|
||||
// },
|
||||
// {
|
||||
// path: "/warningBk",
|
||||
// name: "warningBk",
|
||||
// meta: { title: "布控预警", icon: "article" },
|
||||
// meta: { title: "布控预警", icon: "article-create" },
|
||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/warningBk/index"),
|
||||
// },
|
||||
{
|
||||
path: "/fouColorWarning",
|
||||
name: "fouColorWarning",
|
||||
meta: { title: "预警数据整合", icon: "article" },
|
||||
meta: { title: "预警数据整合", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
||||
},
|
||||
|
||||
{
|
||||
path: "/identityWarning",
|
||||
name: "identityWarning",
|
||||
meta: { title: "身份预警", icon: "article" },
|
||||
meta: { title: "身份预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/identityWarning/index"),
|
||||
},
|
||||
|
||||
{
|
||||
path: "/behaviorWarning",
|
||||
name: "behaviorWarning",
|
||||
meta: { title: "行为预警", icon: "article" },
|
||||
meta: { title: "行为预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/behaviorWarning/index"),
|
||||
},
|
||||
{
|
||||
path: "/combinedWarning",
|
||||
name: "combinedWarning",
|
||||
meta: { title: "组合预警", icon: "article" },
|
||||
meta: { title: "组合预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/combinedWarning/index"),
|
||||
},
|
||||
// {
|
||||
@ -180,7 +186,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningList/index"),
|
||||
// meta: {
|
||||
// title: "布控预警",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
{
|
||||
@ -189,7 +195,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/index"),
|
||||
meta: {
|
||||
title: "人像预警",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -199,31 +205,37 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningList/vehicleWarning/index"),
|
||||
meta: {
|
||||
title: "车辆预警",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/controlWarning",
|
||||
name: "controlWarning",
|
||||
meta: { title: "布控预警", icon: "article" },
|
||||
meta: { title: "布控预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/controlWarning/index"),
|
||||
},
|
||||
{
|
||||
path: "/regionalControl",
|
||||
name: "regionalControl",
|
||||
meta: { title: "区域布控预警", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/regionalControl/index"),
|
||||
},
|
||||
// {
|
||||
// path: "/fouColorWarning",
|
||||
// name: "fouColorWarning",
|
||||
// meta: { title: "四色预警", icon: "article" },
|
||||
// meta: { title: "四色预警", icon: "article-create" },
|
||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/fouColorWarning/index"),
|
||||
// },
|
||||
{
|
||||
path: "/scoreRanking",
|
||||
name: "scoreRanking",
|
||||
meta: { title: "积分排名", icon: "article" },
|
||||
meta: { title: "积分排名", icon: "article-create" },
|
||||
component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/scoreRanking/index"),
|
||||
},
|
||||
// {
|
||||
// path: "/modelWarning",
|
||||
// name: "modelWarning",
|
||||
// meta: { title: "模型预警", icon: "article" },
|
||||
// meta: { title: "模型预警", icon: "article-create" },
|
||||
// component: () => import("@/views/backOfficeSystem/fourColorManage/warningControl/modelWarning/index"),
|
||||
// },
|
||||
|
||||
@ -234,7 +246,7 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/IntelligentControl",
|
||||
name: "IntelligentControl",
|
||||
meta: { title: "智能布控", icon: "article" },
|
||||
meta: { title: "智能布控", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/DeploymentArea",
|
||||
@ -242,7 +254,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/DeploymentArea/index"),
|
||||
meta: {
|
||||
title: "布控区域",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -251,7 +263,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/myControl/index"),
|
||||
meta: {
|
||||
title: "常态布控",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -260,7 +272,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/myControl/index"),
|
||||
meta: {
|
||||
title: "临时布控",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -269,7 +281,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/marksControl/index"),
|
||||
meta: {
|
||||
title: "标签布控",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
@ -278,7 +290,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/IntelligentControl/DeploymentAudit/index"),
|
||||
// meta: {
|
||||
// title: "我的审核",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
@ -287,7 +299,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/IntelligentControl/ControlApproval/index"),
|
||||
// meta: {
|
||||
// title: "我的审批",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// }
|
||||
]
|
||||
@ -295,36 +307,36 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/HumanIntelligence",
|
||||
name: "HumanIntelligence",
|
||||
meta: { title: "信息汇聚支撑", icon: "article" },
|
||||
meta: { title: "信息汇聚支撑", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/InfoCollection",
|
||||
name: "InfoCollection",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/infoCollection/index"),
|
||||
meta: { title: "信息采集", icon: "article" },
|
||||
meta: { title: "信息采集", icon: "article-create" },
|
||||
},
|
||||
{
|
||||
path: "/InternalList",
|
||||
name: "InternalList",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/listView/index"),
|
||||
meta: { title: "内部列表", icon: "article", qbjbList: '02' },
|
||||
meta: { title: "内部列表", icon: "article-create", qbjbList: '02' },
|
||||
},
|
||||
{
|
||||
path: "/openSourceList",
|
||||
name: "openSourceList",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/listView/index"),
|
||||
meta: { title: "共享列表", icon: "article", qbjbList: '01' },
|
||||
meta: { title: "共享列表", icon: "article-create", qbjbList: '01' },
|
||||
}, {
|
||||
path: "/socialInformationCrculated",
|
||||
name: "changeTheClue",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/FollowLeads/index"),
|
||||
meta: { title: "转线索列表", icon: "article" },
|
||||
meta: { title: "转线索列表", icon: "article-create" },
|
||||
},
|
||||
{
|
||||
path: "/socialInformationCrculatec",
|
||||
name: "recombinantSynthesis",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/ConversionSynthesis/index"),
|
||||
meta: { title: "转合成列表", icon: "article" },
|
||||
meta: { title: "转合成列表", icon: "article-create" },
|
||||
},
|
||||
// {
|
||||
// path: "/CollectPoints",
|
||||
@ -332,7 +344,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/HumanIntelligence/CollectPoints/index"),
|
||||
// meta: {
|
||||
// title: "采集积分",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
{
|
||||
@ -341,7 +353,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/transferConsultationList/index.vue"),
|
||||
meta: {
|
||||
title: "转会商列表",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -350,7 +362,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/supplementReportList/index.vue"),
|
||||
meta: {
|
||||
title: "补充/续报列表",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -359,7 +371,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/integralList/index.vue"),
|
||||
meta: {
|
||||
title: "积分列表",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -368,7 +380,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/InformationReporting/index.vue"),
|
||||
meta: {
|
||||
title: "蜂群信息上报",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
@ -377,7 +389,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/MakeAcomment/index"),
|
||||
// meta: {
|
||||
// title: "情报评一评",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// }
|
||||
]
|
||||
@ -385,7 +397,7 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/ResearchJudgment",
|
||||
name: "ResearchJudgment",
|
||||
meta: { title: "线索落核盯办", icon: "article" },
|
||||
meta: { title: "线索落核盯办", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/DatAcquisition",
|
||||
@ -393,7 +405,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/DatAcquisition/index"),
|
||||
meta: {
|
||||
title: "线索数据采集",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -404,7 +416,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/ResearchJudgment/MoralAnalysis/index"),
|
||||
// meta: {
|
||||
// title: "情报语义分析",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
{
|
||||
@ -413,7 +425,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/IntelligenceManagement/index"),
|
||||
meta: {
|
||||
title: "线索管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}, {
|
||||
path: "/InstructionInformation",
|
||||
@ -421,13 +433,13 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InstructionInformation/index"),
|
||||
meta: {
|
||||
title: "线索下发管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
// path: "/InformationFlows",
|
||||
// name: "InformationFlows",
|
||||
// meta: { title: "情报流转", icon: "article" },
|
||||
// meta: { title: "情报流转", icon: "article-create" },
|
||||
// // redirect: "/InformationFlow",
|
||||
// // children: [
|
||||
|
||||
@ -441,7 +453,7 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/ExcavationResearch",
|
||||
name: "ExcavationResearch",
|
||||
meta: { title: "重点人发掘", icon: "article" },
|
||||
meta: { title: "重点人发掘", icon: "article-ranking" },
|
||||
children: [
|
||||
|
||||
{
|
||||
@ -453,7 +465,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "重点人员初步发掘",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -465,7 +477,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "重点人员深度发掘",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -477,7 +489,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "重点人员落地审核",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
]
|
||||
@ -488,7 +500,7 @@ export const publicRoutes = [
|
||||
redirect: "/ResearchHome",
|
||||
meta: {
|
||||
title: "会商研判",
|
||||
icon: "article"
|
||||
icon: "article-ranking"
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@ -497,7 +509,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/policeReport/index.vue"),
|
||||
meta: {
|
||||
title: "警情管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -506,7 +518,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
|
||||
meta: {
|
||||
title: "智能研判",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -515,7 +527,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/dataReduction/index"),
|
||||
meta: {
|
||||
title: "数据整理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
@ -524,7 +536,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/JudgmentHome/situationHome/index"),
|
||||
// meta: {
|
||||
// title: "战略研判",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
// 后面写的研判
|
||||
@ -534,7 +546,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/tacticalResearch/index.vue"),
|
||||
meta: {
|
||||
title: "战术研判",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -543,7 +555,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/strategicResearch/index.vue"),
|
||||
meta: {
|
||||
title: "战略研判",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -552,7 +564,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/judgmentCommand/index.vue"),
|
||||
meta: {
|
||||
title: "研判指令",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -561,7 +573,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/internalAuditor/index.vue"),
|
||||
meta: {
|
||||
title: "内部审核人员",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
@ -570,7 +582,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/AnalysisReport/index"),
|
||||
// meta: {
|
||||
// title: "研判报告",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
{
|
||||
@ -579,7 +591,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/MeetingRoom/index"),
|
||||
meta: {
|
||||
title: "网上会商室",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -590,7 +602,7 @@ export const publicRoutes = [
|
||||
redirect: "/ResearchHome",
|
||||
meta: {
|
||||
title: "全域管控",
|
||||
icon: "article"
|
||||
icon: "article-ranking"
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@ -599,7 +611,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/BaseLibrary/index"),
|
||||
meta: {
|
||||
title: "基础库",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -608,7 +620,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
|
||||
meta: {
|
||||
title: "重点人管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -617,7 +629,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"),
|
||||
meta: {
|
||||
title: "重点人审批",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -626,7 +638,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
|
||||
meta: {
|
||||
title: "重点群体管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -635,7 +647,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"),
|
||||
meta: {
|
||||
title: "重点群体审核",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -644,7 +656,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvCar/index"),
|
||||
meta: {
|
||||
title: "重点车辆管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
]
|
||||
@ -652,7 +664,7 @@ export const publicRoutes = [
|
||||
{
|
||||
path: "/dataApplication",
|
||||
name: "dataApplication",
|
||||
meta: { title: "数据应用", icon: "article" },
|
||||
meta: { title: "数据应用", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/IntegralCoefficient",
|
||||
@ -663,7 +675,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "积分系数配置",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -676,7 +688,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "身份标签管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -688,7 +700,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "行为标签管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -700,7 +712,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "标签组合管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}, {
|
||||
path: "/tsypHome",
|
||||
@ -708,7 +720,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/JudgmentHome/tsypHome/index"),
|
||||
meta: {
|
||||
title: "模型管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -718,7 +730,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/JobAppraisal/index"),
|
||||
meta: {
|
||||
title: "工作考核",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -727,7 +739,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/fileTransfer/index"),
|
||||
meta: {
|
||||
title: "文件中转",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -736,7 +748,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/fileOrientation/index"),
|
||||
meta: {
|
||||
title: "文件定向传输",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -745,7 +757,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/SemanticAnalysis/index.vue"),
|
||||
meta: {
|
||||
title: "语义分析",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -754,7 +766,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/ReportStatisticalAnalysis/index"),
|
||||
meta: {
|
||||
title: "情报统计分析",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -763,7 +775,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/RecordsOperations/index"),
|
||||
meta: {
|
||||
title: "操作记录",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -773,7 +785,7 @@ export const publicRoutes = [
|
||||
// name: "BasicManagement",
|
||||
// meta: {
|
||||
// title: "基础管理",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// },
|
||||
// children: [
|
||||
|
||||
@ -786,7 +798,7 @@ export const publicRoutes = [
|
||||
// // ),
|
||||
// // meta: {
|
||||
// // title: "布控监视",
|
||||
// // icon: "article"
|
||||
// // icon: "article-create"
|
||||
// // }
|
||||
// // },
|
||||
// // {
|
||||
@ -796,7 +808,7 @@ export const publicRoutes = [
|
||||
// // import("@/views/backOfficeSystem/BasicManagement/experienceShare/index"),
|
||||
// // meta: {
|
||||
// // title: "经验分享",
|
||||
// // icon: "article"
|
||||
// // icon: "article-create"
|
||||
// // }
|
||||
// // },
|
||||
|
||||
@ -810,13 +822,13 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/forumPost/index.vue"),
|
||||
meta: {
|
||||
title: "情报论坛",
|
||||
icon: "article"
|
||||
icon: "article-ranking"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/dataMonitor",
|
||||
name: "dataMonitor",
|
||||
meta: { title: "数据监控", icon: "article" },
|
||||
meta: { title: "数据监控", icon: "article-ranking" },
|
||||
children: [
|
||||
{
|
||||
path: "/resourceMonitoring",
|
||||
@ -824,7 +836,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/dataMonitor/resourceMonitoring/index.vue"),
|
||||
meta: {
|
||||
title: "数据资源检测",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -833,7 +845,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/dataMonitor/onlineUserMonitoring/index.vue"),
|
||||
meta: {
|
||||
title: "在线用户监控",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -845,7 +857,7 @@ export const publicRoutes = [
|
||||
// redirect: "/dict/index",
|
||||
meta: {
|
||||
title: "系统管理",
|
||||
icon: "article"
|
||||
icon: "article-ranking"
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@ -854,7 +866,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/systemConfig/department-list/index"),
|
||||
meta: {
|
||||
title: "部门管理",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -865,7 +877,7 @@ export const publicRoutes = [
|
||||
import("@/views/backOfficeSystem/systemConfig/user-list/index"),
|
||||
meta: {
|
||||
title: "用户管理",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -875,7 +887,7 @@ export const publicRoutes = [
|
||||
import("@/views/backOfficeSystem/systemConfig/role-list/index"),
|
||||
meta: {
|
||||
title: "角色列表",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -885,7 +897,7 @@ export const publicRoutes = [
|
||||
import("@/views/backOfficeSystem/systemConfig/menu-list/index"),
|
||||
meta: {
|
||||
title: "菜单管理",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -905,7 +917,7 @@ export const publicRoutes = [
|
||||
import("@/views/backOfficeSystem/systemConfig/dict/index"),
|
||||
meta: {
|
||||
title: "字典列表",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -941,7 +953,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "系统配置",
|
||||
icon: "article-ranking"
|
||||
icon: "article-create"
|
||||
}
|
||||
}, {
|
||||
path: "/calendar",
|
||||
@ -949,7 +961,7 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/calendar/index.vue"),
|
||||
meta: {
|
||||
title: "敏感节点",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
]
|
||||
@ -959,14 +971,14 @@ export const publicRoutes = [
|
||||
name: "rests",
|
||||
meta: {
|
||||
title: "其他",
|
||||
icon: "article"
|
||||
icon: "article-ranking"
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "/CollectCrculate",
|
||||
name: "CollectCrculate",
|
||||
component: () => import("@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"),
|
||||
meta: { title: "情报采集", icon: "article" },
|
||||
meta: { title: "情报采集", icon: "article-create" },
|
||||
}, {
|
||||
path: "/RlStatisticalAnalysis",
|
||||
name: "RlStatisticalAnalysis",
|
||||
@ -976,7 +988,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "上报统计分析",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
|
||||
@ -989,7 +1001,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "上报任务调度",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -1001,7 +1013,7 @@ export const publicRoutes = [
|
||||
),
|
||||
meta: {
|
||||
title: "力量建设管理",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -1010,7 +1022,34 @@ export const publicRoutes = [
|
||||
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
|
||||
meta: {
|
||||
title: "情报统计分析",
|
||||
icon: "article"
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/ysMyControl",
|
||||
name: "ysMyControl",
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/ysMyControl/index"),
|
||||
meta: {
|
||||
title: "常态布控",
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/ysPrivateSurveillance",
|
||||
name: "ysPrivateSurveillance",
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/ysMyControl/index"),
|
||||
meta: {
|
||||
title: "临时布控",
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
{
|
||||
path: "/ysmarksControl",
|
||||
name: "ysmarksControl",
|
||||
component: () => import("@/views/backOfficeSystem/IntelligentControl/ysMarksControl/index"),
|
||||
meta: {
|
||||
title: "标签布控",
|
||||
icon: "article-create"
|
||||
}
|
||||
},
|
||||
// {
|
||||
@ -1019,7 +1058,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/JudgmentHome/ResearchHome/index"),
|
||||
// meta: {
|
||||
// title: "战术研判",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
@ -1028,7 +1067,7 @@ export const publicRoutes = [
|
||||
// component: () => import("@/views/backOfficeSystem/JudgmentHome/situationHome/index"),
|
||||
// meta: {
|
||||
// title: "战略研判",
|
||||
// icon: "article"
|
||||
// icon: "article-create"
|
||||
// }
|
||||
// },
|
||||
]
|
||||
|
||||
@ -8,83 +8,61 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage
|
||||
ref="elform"
|
||||
:disabled="disabled"
|
||||
v-model="listQuery"
|
||||
:formList="formData"
|
||||
labelWidth="100px"
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px"
|
||||
:rules="rules">
|
||||
<template #yjgz>
|
||||
<div class="zdy-taf"></div>
|
||||
<template #bqdlList>
|
||||
<div @click="openBqdl" class="depBox" style="cursor: pointer;">
|
||||
<el-tag class="ml4 mr4" v-for="(it, idx) in listQuery.bqdlList" :key="idx" closable
|
||||
@close="deleDlbq(idx)">{{ it.bqMc }}</el-tag>
|
||||
<span class="coolor" v-if="!listQuery.bqdlList || listQuery.bqdlList.length == 0">请选择标签大类</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #tjqy>
|
||||
<div class="ww100">
|
||||
<div class="ww100 flex align-center">
|
||||
<div class="zdy-taf"></div>
|
||||
<el-button type="primary">选择</el-button>
|
||||
</div>
|
||||
<div class="map relative">
|
||||
<GdMap></GdMap>
|
||||
</div>
|
||||
<template #bqxlList>
|
||||
<div @click="openBqxl" class="depBox" style="cursor: pointer;">
|
||||
<el-tag class="ml4 mr4" v-for="(it, idx) in listQuery.bqxlList" :key="idx" closable
|
||||
@close="deleXlbq(idx)">{{ it.bqMc }}</el-tag>
|
||||
<span class="coolor" v-if="!listQuery.bqxlList || listQuery.bqxlList.length == 0">请选择标签小类</span>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
</div>
|
||||
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||
<BqLb v-model="chooseBqdl" @choosed="choosedDlbq" :roleIds="dlIds" />
|
||||
<MinBq v-model="chooseBqxl" @choosed="choosedXlbq" :roleIds="xlIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch } from "vue";
|
||||
import BqLb from "./index.vue"
|
||||
import MinBq from "./minBq.vue"
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const { proxy } = getCurrentInstance();
|
||||
const roleIds = ref([]);
|
||||
const chooseMarksVisible = ref(false);
|
||||
const { D_GS_BQ_LB } = proxy.$dict("D_GS_BQ_LB");
|
||||
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||
...rule.identityCardRule({ validator: true },'rySfzh'), //身份证校验
|
||||
...rule.identityCardRule({ validator: true }, 'rySfzh'), //身份证校验
|
||||
...rule.phoneRule({ validator: true }, "ryLxdh"), // 是否必填 是否进行校验,
|
||||
});
|
||||
const obj = {
|
||||
bqlist:[
|
||||
{ label: "布控标签", value: "01" },
|
||||
{ label: "历史标签", value: "02" },
|
||||
{ label: "数据源", value: "03" },
|
||||
],
|
||||
sjy:[
|
||||
{ label: "网吧", value: "01" },
|
||||
{ label: "卡口", value: "02" },
|
||||
{ label: "市综平台", value: "03" },
|
||||
]
|
||||
}
|
||||
const listQuery = ref({}); //表单
|
||||
const listQuery = ref({
|
||||
bqdlList: [],
|
||||
bqxlList: [],
|
||||
}); //表单
|
||||
const formData = ref([
|
||||
{ label: "任务名称", prop: "rwmc", type: "input" },
|
||||
{ label: "布控人电话", prop: "bkysDh", type: "input" },
|
||||
{ label: "人员等级", prop: "ryJb", type: "input" },
|
||||
{ label: "人员类型", prop: "ryJl", type: "input" },
|
||||
{ label: "处置措施", prop: "czcs", type: "input" },
|
||||
{ label: "布控事由", prop: "bksy", type: "input" },
|
||||
{ label: "报警方式", prop: "bjfs", type: "input" },
|
||||
{ label: "报警接收人", prop: "bjjsr", type: "input" },
|
||||
{ label: "任务布控时限", prop: "rwBkzs", type: "datetimerange" },
|
||||
{ label: "布控标签", prop: "bkbq", type: "select",options: obj.bqlist ,multiple:true},
|
||||
{ label: "数据源", prop: "sjy", type: "select",options: obj.sjy },
|
||||
{ label: "数据源", prop: "sjy", type: "select",options: obj.sjy },
|
||||
{ label: "预警规则", prop: "yjgz", type: "slot" ,width:'100%'}, //选择多个标签
|
||||
{ label: "添加区域", prop: "tjqy", type: "slot" ,width:'100%'}, //选择多个标签
|
||||
{ label: "标签大类", prop: "bqdlList", type: "slot", width: '100%' }, //选择多个标签
|
||||
{ label: "标签小类", prop: "bqxlList", type: "slot", width: '100%' },
|
||||
{ label: "执法依据", prop: "zfyj", type: "textarea", width: '100%' }
|
||||
]);
|
||||
|
||||
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
@ -93,9 +71,6 @@ const disabled = ref(false);
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" : type == "detail" ? "详情" : "编辑";
|
||||
disabled.value = type == "detail" ? true : false;
|
||||
if (row) getDataById(row.id);
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
@ -108,22 +83,59 @@ const getDataById = (id) => {
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit((data) => {
|
||||
const a = listQuery.value.bqdlList.map(item => {
|
||||
return { bqdl: item.id, bqdm: item.bqDm, bqmc: item.bqMc, bqsm: item.bqSm, bqys: item.bqYs }
|
||||
})
|
||||
const b = listQuery.value.bqxlList.map(item => {
|
||||
return { bqdl: listQuery.value.dlid, bqdm: item.bqDm, bqmc: item.bqMc, bqsm: item.bqSm, bqys: item.bqYs }
|
||||
})
|
||||
const promes = [...a, ...b]
|
||||
|
||||
|
||||
// data.fjdz = data.fjdz?.join(",");
|
||||
// let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdcl/add" : "/mosty-gsxt/tbGsxtZdcl/update";
|
||||
// let params = { ...data };
|
||||
// loading.value = true;
|
||||
// qcckPost(params, url).then(() => {
|
||||
// loading.value = false;
|
||||
// proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
// emit("updateDate");
|
||||
// close();
|
||||
// }).catch(() => {
|
||||
// loading.value = false;
|
||||
// });
|
||||
let url = title.value == "新增" ? "/mosty-gsxt/gsxt/bqbk/saveList" : "/mosty-gsxt/tbGsxtZdcl/update";
|
||||
|
||||
loading.value = true;
|
||||
qcckPost({list:promes}, url).then(() => {
|
||||
loading.value = false;
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("updateDate");
|
||||
close();
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
//打卡大类弹窗
|
||||
const chooseBqdl = ref(false)
|
||||
const dlIds = ref()
|
||||
const openBqdl = () => {
|
||||
chooseBqdl.value = true
|
||||
}
|
||||
const choosedDlbq = (val) => {
|
||||
listQuery.value.bqdlList = val
|
||||
dlIds.value = val.map(item => item.id)
|
||||
}
|
||||
const deleDlbq = (val) => {
|
||||
listQuery.value.bqdlList.splice(val, 1);
|
||||
dlIds.value = listQuery.value.bqdlList.map(item => item.id);
|
||||
}
|
||||
// 打卡小类弹窗
|
||||
const chooseBqxl = ref(false)
|
||||
const xlIds = ref()
|
||||
const openBqxl = () => {
|
||||
chooseBqxl.value = true
|
||||
}
|
||||
const choosedXlbq = (val) => {
|
||||
listQuery.value.dlid = val.bqDlid
|
||||
listQuery.value.bqxlList = val.list
|
||||
xlIds.value = val.list.map(item => item.id)
|
||||
}
|
||||
const deleXlbq = (val) => {
|
||||
listQuery.value.bqxlList.splice(val, 1);
|
||||
xlIds.value = listQuery.value.bqxlList.map(item => item.id);
|
||||
}
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
@ -151,27 +163,17 @@ defineExpose({ init });
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 305px;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
border: none;
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
::v-deep .el-input__inner:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
}
|
||||
.zdy-taf{
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
@ -180,7 +182,8 @@ defineExpose({ init });
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.map{
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
@ -0,0 +1,259 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="titleValue"
|
||||
width="1400px"
|
||||
:model-value="modelValue"
|
||||
append-to-body
|
||||
@close="closed"
|
||||
>
|
||||
<div>
|
||||
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
|
||||
<el-form-item label="标签名称">
|
||||
<el-input
|
||||
placeholder="请输入标签名称"
|
||||
v-model="listQuery.bqMc"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="handleFilter">查询</el-button>
|
||||
<el-button type="info" @click="reset"> 重置 </el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div
|
||||
class="tabBox"
|
||||
:class="props.Single ? 'tabBoxRadio' : ''"
|
||||
:key="keyVal"
|
||||
style="margin-top: 0px"
|
||||
>
|
||||
<el-table
|
||||
ref="multipleUserRef"
|
||||
@selection-change="handleSelectionChange"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
border
|
||||
:row-key="keyid"
|
||||
style="width: 100%"
|
||||
height="450"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55"
|
||||
:reserve-selection="true"
|
||||
/>
|
||||
<el-table-column prop="bqMc" align="center" label="标签名称" />
|
||||
<el-table-column prop="bqDm" align="center" label="标签代码" />
|
||||
<el-table-column prop="bqDj" align="center" label="标签等级">
|
||||
<template #default="{ row }">
|
||||
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="bqYs" align="center" label="标签颜色">
|
||||
<template #default="{ row }">
|
||||
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="fenye" :style="{ top: tableHeight + 'px' }">
|
||||
<el-pagination
|
||||
class="pagination"
|
||||
@pageSize-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="listQuery.pageCurrent"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-pageSize="listQuery.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="closed">取消</el-button>
|
||||
<el-button type="primary" @click="onComfirm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import { defineProps, ref, getCurrentInstance, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BQ_DJ, D_GS_SSYJ,D_GS_BQ_LB,D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ","D_GS_BQ_LB","D_GS_BQ_LX"); //获取字典数据
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
titleValue: {
|
||||
type: String,
|
||||
default: "身份标签"
|
||||
},
|
||||
LeaderType: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
//是否单选
|
||||
Single: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
roleIds: {
|
||||
type: Array,
|
||||
default: []
|
||||
}
|
||||
});
|
||||
const loading = ref(false);
|
||||
const total = ref(0);
|
||||
const listQuery = ref({
|
||||
pageCurrent: 1,
|
||||
pageSize: 20
|
||||
});
|
||||
|
||||
const keyVal = ref(0);
|
||||
const multipleUserRef = ref(null);
|
||||
const multipleSelectionUser = ref([]);
|
||||
const tableData = ref([]);
|
||||
const emits = defineEmits(["update:modelValue", "choosed"]);
|
||||
const keyid = (row) => {
|
||||
return row.id;
|
||||
};
|
||||
|
||||
const closed = () => {
|
||||
emits("update:modelValue", false);
|
||||
};
|
||||
const reset = () => {
|
||||
listQuery.value = { pageCurrent: 1, pageSize: 20 };
|
||||
getListData();
|
||||
};
|
||||
|
||||
// 为用户分配角色
|
||||
const onComfirm = () => {
|
||||
const userList = multipleSelectionUser.value;
|
||||
let list = [];
|
||||
let listId = [];
|
||||
userList.forEach((val) => {
|
||||
if (listId.indexOf(val.id) == -1) {
|
||||
list.push(val);
|
||||
listId.push(val.id);
|
||||
}
|
||||
});
|
||||
emits("choosed", list);
|
||||
closed();
|
||||
};
|
||||
/**
|
||||
* pageSize 改变触发
|
||||
*/
|
||||
const handleSizeChange = (currentSize) => {
|
||||
listQuery.value.pageSize = currentSize;
|
||||
getListData();
|
||||
};
|
||||
/**
|
||||
* 页码改变触发
|
||||
*/
|
||||
const handleCurrentChange = (currentPage) => {
|
||||
listQuery.value.pageCurrent = currentPage;
|
||||
getListData();
|
||||
};
|
||||
const bqLb=ref('01')
|
||||
const getListData = () => {
|
||||
keyVal.value++;
|
||||
loading.value = true;
|
||||
const params = { ...listQuery.value, bqLb:bqLb.value,bqLx: "01" };
|
||||
qcckGet(params, "/mosty-gsxt/tbGsxtBqgl/selectPage")
|
||||
.then((res) => {
|
||||
loading.value = false;
|
||||
tableData.value = res.records || [];
|
||||
total.value = res.total;
|
||||
// 直接调用,multipleUser 内部已处理延迟
|
||||
multipleUser();
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
//列表回显 - 优化版,确保已选择数据正确回显
|
||||
function multipleUser() {
|
||||
// 确保表格引用和数据都存在
|
||||
if (!multipleUserRef.value || !tableData.value || tableData.value.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 等待下一帧确保DOM更新完成
|
||||
setTimeout(() => {
|
||||
// 再次检查表格引用是否存在
|
||||
if (!multipleUserRef.value) return;
|
||||
|
||||
// 先清除所有选中状态
|
||||
multipleUserRef.value.clearSelection();
|
||||
|
||||
// 再根据roleIds重新设置选中状态
|
||||
if (props.roleIds && Array.isArray(props.roleIds) && props.roleIds.length > 0) {
|
||||
tableData.value.forEach((item) => {
|
||||
// 使用严格比较,确保ID类型匹配
|
||||
if (props.roleIds.some((id) => String(id) === String(item.id))) {
|
||||
multipleUserRef.value.toggleRowSelection(item, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
listQuery.value.pageCurrent = 1;
|
||||
getListData();
|
||||
};
|
||||
|
||||
const handleSelectionChange = (val) => {
|
||||
if (props.Single) {
|
||||
if (val.length > 1) {
|
||||
let del_row = val.shift();
|
||||
multipleUserRef.value.toggleRowSelection(del_row, false);
|
||||
}
|
||||
multipleSelectionUser.value = val;
|
||||
} else {
|
||||
multipleSelectionUser.value = val;
|
||||
}
|
||||
};
|
||||
|
||||
// 监听弹窗打开状态,打开时重新加载数据
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(val) => {
|
||||
if (val) {
|
||||
handleFilter();
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
// 监听roleIds变化,确保数据回显正确
|
||||
watch(
|
||||
() => props.roleIds,
|
||||
(newRoleIds) => {
|
||||
// 使用setTimeout确保在表格数据加载完成后再进行选择
|
||||
setTimeout(() => {
|
||||
multipleUser();
|
||||
}, 100);
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/assets/css/layout.scss";
|
||||
@import "@/assets/css/element-plus.scss";
|
||||
</style>
|
||||
<style>
|
||||
.tabBoxRadio .el-checkbox__inner {
|
||||
border-radius: 50% !important;
|
||||
}
|
||||
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,235 @@
|
||||
<template>
|
||||
<el-dialog :title="titleValue" width="1400px" :model-value="modelValue" append-to-body @close="closed">
|
||||
<div>
|
||||
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
|
||||
<el-form-item label="标签大类">
|
||||
<el-select v-model="listQuery.bqDlId" placeholder="请选择标签大类" clearable>
|
||||
<el-option v-for="item in DlList" :key="item.id" :label="item.bqMc" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="标签名称">
|
||||
<el-input placeholder="请输入标签名称" v-model="listQuery.bqMc" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="handleFilter">查询</el-button>
|
||||
<el-button type="info" @click="reset"> 重置 </el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" :key="keyVal" style="margin-top: 0px">
|
||||
<el-table ref="multipleUserRef" @selection-change="handleSelectionChange" :data="tableData" v-loading="loading"
|
||||
border :row-key="keyid" style="width: 100%" height="450">
|
||||
<el-table-column type="selection" width="55" :reserve-selection="true" />
|
||||
<el-table-column prop="bqMc" align="center" label="标签名称" />
|
||||
<el-table-column prop="bqDm" align="center" label="标签代码" />
|
||||
<el-table-column prop="bqDj" align="center" label="标签等级">
|
||||
<template #default="{ row }">
|
||||
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="bqYs" align="center" label="标签颜色">
|
||||
<template #default="{ row }">
|
||||
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="fenye" :style="{ top: tableHeight + 'px' }">
|
||||
<el-pagination class="pagination" @pageSize-change="handleSizeChange" @current-change="handleCurrentChange"
|
||||
:current-page="listQuery.pageCurrent" :page-sizes="[10, 20, 50, 100]" :page-pageSize="listQuery.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="closed">取消</el-button>
|
||||
<el-button type="primary" @click="onComfirm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import { defineProps, ref, getCurrentInstance, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB, D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ", "D_GS_BQ_LB", "D_GS_BQ_LX"); //获取字典数据
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
titleValue: {
|
||||
type: String,
|
||||
default: "身份标签"
|
||||
},
|
||||
LeaderType: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
//是否单选
|
||||
Single: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
roleIds: {
|
||||
type: Array,
|
||||
default: []
|
||||
}
|
||||
});
|
||||
const loading = ref(false);
|
||||
const total = ref(0);
|
||||
const listQuery = ref({
|
||||
pageCurrent: 1,
|
||||
pageSize: 20
|
||||
});
|
||||
|
||||
const keyVal = ref();
|
||||
const multipleUserRef = ref(null);
|
||||
const multipleSelectionUser = ref([]);
|
||||
const tableData = ref([]);
|
||||
const emits = defineEmits(["update:modelValue", "choosed"]);
|
||||
const keyid = (row) => {
|
||||
return row.id;
|
||||
};
|
||||
|
||||
const closed = () => {
|
||||
emits("update:modelValue", false);
|
||||
};
|
||||
const reset = () => {
|
||||
listQuery.value = { pageCurrent: 1, pageSize: 20 };
|
||||
getListData();
|
||||
};
|
||||
|
||||
// 为用户分配角色
|
||||
const onComfirm = () => {
|
||||
const userList = multipleSelectionUser.value;
|
||||
let list = [];
|
||||
let listId = [];
|
||||
userList.forEach((val) => {
|
||||
if (listId.indexOf(val.id) == -1) {
|
||||
list.push(val);
|
||||
listId.push(val.id);
|
||||
}
|
||||
});
|
||||
emits("choosed", { list, bqDlid: listQuery.value.bqDlId });
|
||||
closed();
|
||||
};
|
||||
/**
|
||||
* pageSize 改变触发
|
||||
*/
|
||||
const handleSizeChange = (currentSize) => {
|
||||
listQuery.value.pageSize = currentSize;
|
||||
getListData();
|
||||
};
|
||||
/**
|
||||
* 页码改变触发
|
||||
*/
|
||||
const handleCurrentChange = (currentPage) => {
|
||||
listQuery.value.pageCurrent = currentPage;
|
||||
getListData();
|
||||
};
|
||||
const getListData = () => {
|
||||
keyVal.value++;
|
||||
loading.value = true;
|
||||
const params = { ...listQuery.value, bqLb: '02', bqLx: "01" };
|
||||
qcckGet(params, "/mosty-gsxt/tbGsxtBqgl/selectPage")
|
||||
.then((res) => {
|
||||
loading.value = false;
|
||||
tableData.value = res.records || [];
|
||||
total.value = res.total;
|
||||
multipleUser();
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
const DlList = ref()
|
||||
// 获取大类
|
||||
const getDlBq = () => {
|
||||
const params = { pageCurrent: 1, pageSize: 200, bqLb: '01', bqLx: "01" };
|
||||
qcckGet(params, "/mosty-gsxt/tbGsxtBqgl/selectPage")
|
||||
.then((res) => {
|
||||
DlList.value = res.records || [];
|
||||
listQuery.value.bqDlId = DlList.value[0].id
|
||||
getListData()
|
||||
})
|
||||
|
||||
}
|
||||
//列表回显 - 优化版,确保已选择数据正确回显
|
||||
function multipleUser() {
|
||||
if (!multipleUserRef.value || !tableData.value || tableData.value.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 先清除所有选中状态
|
||||
tableData.value.forEach((item) => {
|
||||
multipleUserRef.value.toggleRowSelection(item, false);
|
||||
});
|
||||
|
||||
// 再根据roleIds重新设置选中状态
|
||||
if (props.roleIds && Array.isArray(props.roleIds) && props.roleIds.length > 0) {
|
||||
tableData.value.forEach((item) => {
|
||||
if (props.roleIds.some((id) => id == item.id)) {
|
||||
multipleUserRef.value.toggleRowSelection(item, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
listQuery.value.pageCurrent = 1;
|
||||
getListData();
|
||||
};
|
||||
|
||||
const handleSelectionChange = (val) => {
|
||||
if (props.Single) {
|
||||
if (val.length > 1) {
|
||||
let del_row = val.shift();
|
||||
multipleUserRef.value.toggleRowSelection(del_row, false);
|
||||
}
|
||||
multipleSelectionUser.value = val;
|
||||
} else {
|
||||
multipleSelectionUser.value = val;
|
||||
}
|
||||
};
|
||||
|
||||
// 监听弹窗打开状态,打开时重新加载数据
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(val) => {
|
||||
if (val) {
|
||||
getDlBq()
|
||||
// handleFilter();
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
// 监听roleIds变化,确保数据回显正确
|
||||
watch(
|
||||
() => props.roleIds,
|
||||
(newRoleIds) => {
|
||||
// 使用setTimeout确保在表格数据加载完成后再进行选择
|
||||
setTimeout(() => {
|
||||
multipleUser();
|
||||
}, 100);
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "@/assets/css/layout.scss";
|
||||
@import "@/assets/css/element-plus.scss";
|
||||
</style>
|
||||
<style>
|
||||
.tabBoxRadio .el-checkbox__inner {
|
||||
border-radius: 50% !important;
|
||||
}
|
||||
|
||||
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,119 @@
|
||||
<template>
|
||||
<div class="information-container">
|
||||
<h2 class="page-title">研判详情</h2>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="label">标签名称:</span>
|
||||
<span class="value">{{ detail.bqmc || '暂无' }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">标签代码:</span>
|
||||
<span class="value">
|
||||
<span class="value">{{ detail.bqdm || '暂无' }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="label">标签颜色:</span>
|
||||
<span class="value">
|
||||
<DictTag v-if="detail.bqys && D_GS_SSYJ" :tag="false" :value="detail.bqys" :options="D_GS_SSYJ" />
|
||||
<span v-else>暂无</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">标签描述:</span>
|
||||
<span class="value">{{ detail.bqsm || '暂无' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import DictTag from '@/components/DictTag/index.vue';
|
||||
import { onMounted ,ref,getCurrentInstance} from 'vue';
|
||||
import { useRoute } from 'vue-router'
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
|
||||
const route = useRoute();
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {D_GS_SSYJ}=proxy.$dict("D_GS_SSYJ");
|
||||
const detail=ref({});
|
||||
// 新增:存储用户提供的研判部门详情数据
|
||||
onMounted(() => {
|
||||
qcckGet({},`/mosty-gsxt/gsxt/bqbk/selectById/${route.query.id}`).then(res => {
|
||||
detail.value=res;
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.information-container {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.page-title {
|
||||
color: #303133;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-weight: bold;
|
||||
color: #606266;
|
||||
margin-right: 12px;
|
||||
width: 100px;
|
||||
text-align: right;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #303133;
|
||||
flex: 1;
|
||||
line-height: 32px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
/* 新增:数据展示模块样式 */
|
||||
.data-section {
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #e8e8e8;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
color: #303133;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
</style>
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="标签布控" >
|
||||
<el-button type="primary" size="small" @click="handleItem('add', '')">
|
||||
<el-button type="primary" size="small" @click="AddFrom('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
@ -21,13 +21,14 @@
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :tag="false" :value="row.bqys" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleItem('edit',row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleItem('detail',row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleItem('deleite',row)">删除</el-link>
|
||||
<el-link type="primary" size="small" @click="createProcess(row)" v-if="row.shzt!= '03'">发起审批</el-link>
|
||||
<el-link type="danger" size="small" @click="handleItem('deleite',row)" v-if="row.shzt == '03'">撤控</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@ -43,6 +44,8 @@
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="addForm" @updateDate="getList"></AddForm>
|
||||
</div>
|
||||
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '布控审批', flowType: 'BQBK', modelName: '布控' }"
|
||||
:path="fixedValue" @getList="getList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -51,19 +54,26 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from './components/addForm.vue'
|
||||
import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF } = proxy.$dict("D_BZ_SF"); //获取字典数据
|
||||
const {D_GS_SSYJ} = proxy.$dict("D_GS_SSYJ"); //获取字典数据
|
||||
const searchBox = ref();
|
||||
const addForm = ref()
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "任务名称",
|
||||
prop: "rwmc",
|
||||
placeholder: "请输入任务名称",
|
||||
label: "标签名称",
|
||||
prop: "bqmc",
|
||||
placeholder: "请输入标签名称",
|
||||
showType: "input",
|
||||
}, {
|
||||
label: "时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请输入时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
@ -79,14 +89,13 @@ const pageData = reactive({
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 120, //操作栏宽度
|
||||
controlsWidth: 240, //操作栏宽度
|
||||
|
||||
tableColumn: [
|
||||
{ label: "任务名称", prop: "rwmc" },
|
||||
{ label: "布控人电话", prop: "bkysDh" },
|
||||
{ label: "人员等级", prop: "bkysDj" },
|
||||
{ label: "处置措施", prop: "czcs" },
|
||||
{ label: "布控事由", prop: "bksy" },
|
||||
{ label: "布控标签", prop: "bqmc" },
|
||||
{ label: "标签代码", prop: "bqdm" },
|
||||
{ label: "标签颜色", prop: "bqys", showSolt: true },
|
||||
{ label: "标签描述", prop: "bqsm" },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
@ -96,7 +105,11 @@ onMounted(() => {
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val };
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
@ -112,28 +125,53 @@ const changeSize = (val) => {
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
// pageData.tableConfiger.loading = true;
|
||||
// let data = {
|
||||
// ...pageData.pageConfiger,
|
||||
// ...queryFrom.value,
|
||||
// };
|
||||
// qcckGet(data, "/mosty-gsxt/tbGsxtBk/selectPage").then((res) => {
|
||||
// pageData.tableData = res.records || [];
|
||||
// pageData.total = res.total;
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// }).catch(() => {
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// });
|
||||
pageData.tableConfiger.loading = true;
|
||||
let data = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
};
|
||||
qcckGet(data, "/mosty-gsxt/gsxt/bqbk/getPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
const AddFrom = () => {
|
||||
addForm.value.init()
|
||||
}
|
||||
const handleItem = (type,row) => {
|
||||
if(type == 'delete'){
|
||||
proxy.$confirm('确认撤控吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
qcckPost({ ids: [row.id] }, "/mosty-gsxt/gsxt/bqbk/bqck").then((res) => {
|
||||
proxy.$message({
|
||||
message: '撤控成功',
|
||||
type: 'success'
|
||||
});
|
||||
getList();
|
||||
|
||||
}else{
|
||||
addForm.value.init(type,row);
|
||||
}
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
})
|
||||
};
|
||||
|
||||
// 固定值
|
||||
const fixedValue = {
|
||||
clueVerification: 'shym',
|
||||
byMeansOf: 'gsxt/bqbk/callback ',
|
||||
nobyMeansOf: 'gsxt/bqbk/callback ',
|
||||
recycle: 'gsxt/bqbk/callback ',
|
||||
}
|
||||
const showSp = ref(false);
|
||||
const rowData = ref()
|
||||
const createProcess = (row) => {
|
||||
showSp.value = true;
|
||||
rowData.value = row
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 300;
|
||||
@ -164,9 +202,9 @@ const tabHeightFn = () => {
|
||||
background: none;
|
||||
}
|
||||
|
||||
:deep(.el-table--fit) {
|
||||
top: 52px !important;
|
||||
}
|
||||
// :deep(.el-table--fit) {
|
||||
// top: 52px !important;
|
||||
// }
|
||||
.btns {
|
||||
height: 52px;
|
||||
padding: 10px;
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
label-position="left">
|
||||
<div style="display: flex; align-items: center;margin-bottom: 10px;">
|
||||
<el-radio-group v-model="listQuery.bkDx" size="large" fill="#6cf" @change="shangeDx">
|
||||
<el-radio-button :label="item.dm" v-for="(item, index) in props.dic.D_GS_BK_DX" :key="index">{{
|
||||
<el-radio-button :label="item.dm" v-for="(item, index) in props.dic.D_GS_BK_NEWDX" :key="index">{{
|
||||
item.zdmc }}</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-button type="primary" @click="handleAddPeo" v-if="!disabled" style="margin-left: 10px;">
|
||||
@ -53,20 +53,37 @@
|
||||
</MyTable>
|
||||
</div>
|
||||
<div style="width: 100%;" class="mt25">
|
||||
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
||||
<el-form-item prop="bkSjKs" label="布控开始时间">
|
||||
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择布控开始时间" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px">
|
||||
<el-form-item prop="bkSjJs" label="布控结束时间">
|
||||
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择布控结束时间" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="czYq" label="处置要求" label-width="60px" style="width:18% ;">
|
||||
<el-form-item prop="czYq" label="处置要求">
|
||||
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bkDj" label="布控等级" label-width="60px" style="width:18% ;">
|
||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_BK_DJ" placeholder="请选择布控级别"
|
||||
|
||||
</div>
|
||||
<div style="width: 100%;" class="mt10">
|
||||
<el-form-item prop="bkDj" label="布控部门" v-if="props.name == 'myControl'">
|
||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_SSYJ" placeholder="请选择布控级别"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bkDj" label="布控等级" v-else>
|
||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_BZ_JQDJ" placeholder="请选择布控级别"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bklylx" label="布控来源">
|
||||
<MOSTY.Select v-model="listQuery.bklylx" :dictEnum="props.dic.D_BZ_BKLYS" placeholder="请选择布控来源"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div style="width: 100%;" class="mt10">
|
||||
<el-form-item prop="zfyj" label="执法依据" style="width: 100%;">
|
||||
<MOSTY.Other v-model="listQuery.zfyj" placeholder="请输入执法依据" type="textarea" style="width: 100%;"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</div>
|
||||
@ -88,7 +105,7 @@
|
||||
<div class=" mapSearch flex">
|
||||
<el-select v-model="hzfs" placeholder="请选择布控范围" clearable @change="qhhzfs">
|
||||
<el-option label="区域选择" value="1"></el-option>
|
||||
<el-option label="自定义范围" value="2"></el-option>
|
||||
<!-- <el-option label="自定义范围" value="2"></el-option> -->
|
||||
</el-select>
|
||||
<el-select multiple style="margin-left: 10px;" v-model="bkqyList" placeholder="请选择布控范围" clearable
|
||||
@change="hzfsChage" v-if="hzfs == '1'">
|
||||
@ -97,17 +114,17 @@
|
||||
}}</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-button type="primary" @click="drawQy" style="margin-left: 10px;" v-else>
|
||||
<!-- <el-button type="primary" @click="drawQy" style="margin-left: 10px;" v-else>
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">自定义区域</span>
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
</div>
|
||||
<div class="ww100 relative mb10"
|
||||
<!-- <div class="ww100 relative mb10"
|
||||
style="height: 60vh;border: 1px solid #dcdfe6;border-radius: 4px;overflow: hidden;">
|
||||
<GdMap></GdMap>
|
||||
</div>
|
||||
</div> -->
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
@ -143,14 +160,14 @@ import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { tableColumnList, Zd } from '@/views/backOfficeSystem/ApprovalInformation/tableRow.js'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, nextTick, watch, onMounted } from "vue";
|
||||
import { queryProcessNode, queryProcessNodeLog, queryProcess } from '@/api/spl'
|
||||
import ApprovalEcho from "@/components/flowPath/ApprovalEcho.vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { setAddress } from '@/utils/tools.js'
|
||||
import { tbGsxtBkId } from "@/api/commit.js";
|
||||
const emit = defineEmits(["change"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
dic: Object,
|
||||
name: String
|
||||
});
|
||||
const route = useRoute()
|
||||
const elform = ref()
|
||||
@ -222,7 +239,7 @@ const init = (type, row) => {
|
||||
disabled.value = type == 'detail' ? true : false;
|
||||
dialogForm.value = true;
|
||||
if (row) tableDate.tableConfiger.haveControls = false;
|
||||
Zd({ D_GS_BK_DJ: props.dic.D_GS_BK_DJ, BD_BK_CLYJBQ: props.dic.BD_BK_CLYJBQ })
|
||||
Zd({ D_GS_SSYJ: props.dic.D_GS_SSYJ, BD_BK_CLYJBQ: props.dic.BD_BK_CLYJBQ })
|
||||
|
||||
get_bkqy_list(row)
|
||||
};
|
||||
@ -426,44 +443,44 @@ const close = () => {
|
||||
// 选择身份证
|
||||
const chooseVisible_SFZ = ref(false)
|
||||
// 获取布控信息的工作流
|
||||
const workflow = ref()
|
||||
const getWorkflow = async (id) => {
|
||||
const promes = {
|
||||
processId: id
|
||||
}
|
||||
const proNode = await queryProcessNode(promes)
|
||||
const proNodeLog = await queryProcessNodeLog(promes)
|
||||
const process = await queryProcess(promes)
|
||||
workflow.value = proNode.rows.map(item => {
|
||||
const log = proNodeLog.rows.filter(items => item.nodeId == items.nodeId)
|
||||
// const workflow = ref()
|
||||
// const getWorkflow = async (id) => {
|
||||
// const promes = {
|
||||
// processId: id
|
||||
// }
|
||||
// const proNode = await queryProcessNode(promes)
|
||||
// const proNodeLog = await queryProcessNodeLog(promes)
|
||||
// const process = await queryProcess(promes)
|
||||
// workflow.value = proNode.rows.map(item => {
|
||||
// const log = proNodeLog.rows.filter(items => item.nodeId == items.nodeId)
|
||||
|
||||
if (item.eventType == '0') {
|
||||
return {
|
||||
...item,
|
||||
log: {
|
||||
userData: item.userData ? JSON.parse(item.userData) : JSON.parse(process.rows[0].processData).orgNameData,
|
||||
userName: process.rows[0].userName,
|
||||
xtLrsj: process.rows[0].xtLrsj,
|
||||
processStatus: process.rows[0].processStatus,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
...item,
|
||||
orgNameData: JSON.parse(log[0].userData),
|
||||
log: log
|
||||
}
|
||||
}
|
||||
})
|
||||
// if (item.eventType == '0') {
|
||||
// return {
|
||||
// ...item,
|
||||
// log: {
|
||||
// userData: item.userData ? JSON.parse(item.userData) : JSON.parse(process.rows[0].processData).orgNameData,
|
||||
// userName: process.rows[0].userName,
|
||||
// xtLrsj: process.rows[0].xtLrsj,
|
||||
// processStatus: process.rows[0].processStatus,
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// return {
|
||||
// ...item,
|
||||
// orgNameData: JSON.parse(log[0].userData),
|
||||
// log: log
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
|
||||
};
|
||||
const drawQy = () => {
|
||||
emitter.emit("drawShape", {
|
||||
flag: "select_point",
|
||||
type: "polygon",
|
||||
isclear: true
|
||||
});
|
||||
}
|
||||
// };
|
||||
// const drawQy = () => {
|
||||
// emitter.emit("drawShape", {
|
||||
// flag: "select_point",
|
||||
// type: "polygon",
|
||||
// isclear: true
|
||||
// });
|
||||
// }
|
||||
const hzfs = ref('1')
|
||||
const bkqyList = ref()
|
||||
const qhhzfs = () => {
|
||||
|
||||
@ -135,6 +135,9 @@ const rulesList = {
|
||||
dh: [{ required: true, message: "请输入电话号码", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'10': {
|
||||
fjZp: [{ required: true, message: "请传人员照片", trigger: "blur" }],
|
||||
}
|
||||
}
|
||||
watch(() => props.bkDx, (val, oldval) => {
|
||||
|
||||
@ -20,10 +20,11 @@
|
||||
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
||||
</template>
|
||||
<template #bkDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_BK_DJ" />
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" v-if="route.name=='myControl'" />
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_BZ_JQDJ" v-else/>
|
||||
</template>
|
||||
<template #bkDx="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_DX" />
|
||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_NEWDX" />
|
||||
</template>
|
||||
<template #bkdxList="{ row }">
|
||||
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it, idx) in row.bkdxList" :key="idx">
|
||||
@ -67,9 +68,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- 布控类型 -->
|
||||
<AddBkdx ref="addBkdxForm" @change="getList" :dic="{
|
||||
D_GS_BK_DX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ,
|
||||
D_GS_BK_DJ, BD_BK_CLYJBQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_GS_ZDR_YJDJ
|
||||
<AddBkdx ref="addBkdxForm" @change="getList" :name="route.name" :dic="{
|
||||
D_GS_BK_NEWDX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ,D_BZ_JQDJ,D_BZ_BKLYS,
|
||||
D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_GS_ZDR_YJDJ,
|
||||
}" />
|
||||
<!-- 预警弹窗 -->
|
||||
<YjDialog ref="warningkdxForm"></YjDialog>
|
||||
@ -89,11 +90,15 @@ import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
|
||||
import {tbGsxtBkQuash} from '@/api/zdr.js'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { rotate } from "ol/transform";
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_BK_DJ, BD_BK_CLYJBQ, D_GS_ZDR_YJDJ,
|
||||
D_GS_BK_DX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS } = proxy.$dict("D_GS_ZDR_YJDJ", "D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX", "D_GS_BK_DJ", "D_GS_BK_DX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS", 'BD_BK_CLYJBQ'); //获取字典数据
|
||||
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_ZDR_YJDJ,
|
||||
D_GS_BK_NEWDX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS,D_BZ_BKLYS,
|
||||
D_BZ_JQDJ } = proxy.$dict("D_GS_ZDR_YJDJ", "D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX",
|
||||
"D_GS_SSYJ", "D_GS_BK_NEWDX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS",
|
||||
'BD_BK_CLYJBQ', 'D_BZ_JQDJ',"D_BZ_BKLYS"); //获取字典数据
|
||||
const addBkdxForm = ref(null); //布控对象组件
|
||||
const warningkdxForm = ref(); //布控对象组件
|
||||
const searchBox = ref(); //搜索框
|
||||
@ -103,14 +108,14 @@ const searchConfiger = ref([
|
||||
prop: "bkDj",
|
||||
placeholder: "请选择布控等级",
|
||||
showType: "select",
|
||||
options: D_GS_BK_DJ
|
||||
options: route.name == 'myControl' ? D_GS_SSYJ : D_BZ_JQDJ
|
||||
},
|
||||
{
|
||||
label: "布控类型",
|
||||
prop: "bkDx",
|
||||
placeholder: "请选择布控类型",
|
||||
showType: "select",
|
||||
options: D_GS_BK_DX
|
||||
options: D_GS_BK_NEWDX
|
||||
},
|
||||
{
|
||||
label: "布控状态",
|
||||
@ -119,6 +124,12 @@ const searchConfiger = ref([
|
||||
showType: "select",
|
||||
options: D_GS_BK_ZT
|
||||
},
|
||||
{
|
||||
label: "布控时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择布控时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
@ -166,7 +177,11 @@ onMounted(() => {
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val };
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime? val.startTime[0]: '',
|
||||
endTime: val.startTime? val.startTime[1]: ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
@ -0,0 +1,187 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}标签布控</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage
|
||||
ref="elform"
|
||||
:disabled="disabled"
|
||||
v-model="listQuery"
|
||||
:formList="formData"
|
||||
labelWidth="100px"
|
||||
:rules="rules">
|
||||
<template #yjgz>
|
||||
<div class="zdy-taf"></div>
|
||||
</template>
|
||||
<template #tjqy>
|
||||
<div class="ww100">
|
||||
<div class="ww100 flex align-center">
|
||||
<div class="zdy-taf"></div>
|
||||
<el-button type="primary">选择</el-button>
|
||||
</div>
|
||||
<div class="map relative">
|
||||
<GdMap></GdMap>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
</div>
|
||||
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch } from "vue";
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const { proxy } = getCurrentInstance();
|
||||
const roleIds = ref([]);
|
||||
const chooseMarksVisible = ref(false);
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||
...rule.identityCardRule({ validator: true },'rySfzh'), //身份证校验
|
||||
...rule.phoneRule({ validator: true }, "ryLxdh"), // 是否必填 是否进行校验,
|
||||
});
|
||||
const obj = {
|
||||
bqlist:[
|
||||
{ label: "布控标签", value: "01" },
|
||||
{ label: "历史标签", value: "02" },
|
||||
{ label: "数据源", value: "03" },
|
||||
],
|
||||
sjy:[
|
||||
{ label: "网吧", value: "01" },
|
||||
{ label: "卡口", value: "02" },
|
||||
{ label: "市综平台", value: "03" },
|
||||
]
|
||||
}
|
||||
const listQuery = ref({}); //表单
|
||||
const formData = ref([
|
||||
{ label: "任务名称", prop: "rwmc", type: "input" },
|
||||
{ label: "布控人电话", prop: "bkysDh", type: "input" },
|
||||
{ label: "人员等级", prop: "ryJb", type: "input" },
|
||||
{ label: "人员类型", prop: "ryJl", type: "input" },
|
||||
{ label: "处置措施", prop: "czcs", type: "input" },
|
||||
{ label: "布控事由", prop: "bksy", type: "input" },
|
||||
{ label: "报警方式", prop: "bjfs", type: "input" },
|
||||
{ label: "报警接收人", prop: "bjjsr", type: "input" },
|
||||
{ label: "任务布控时限", prop: "rwBkzs", type: "datetimerange" },
|
||||
{ label: "布控标签", prop: "bkbq", type: "select",options: obj.bqlist ,multiple:true},
|
||||
{ label: "数据源", prop: "sjy", type: "select",options: obj.sjy },
|
||||
{ label: "数据源", prop: "sjy", type: "select",options: obj.sjy },
|
||||
{ label: "预警规则", prop: "yjgz", type: "slot" ,width:'100%'}, //选择多个标签
|
||||
{ label: "添加区域", prop: "tjqy", type: "slot" ,width:'100%'}, //选择多个标签
|
||||
]);
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" : type == "detail" ? "详情" : "编辑";
|
||||
disabled.value = type == "detail" ? true : false;
|
||||
if (row) getDataById(row.id);
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
// qcckGet({id}, "/mosty-gsxt/tbGsxtZdcl/selectByid").then((res) => {
|
||||
// listQuery.value = res;
|
||||
// listQuery.value.fjdz = listQuery.value.fjdz?.split(",");
|
||||
// });
|
||||
};
|
||||
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit((data) => {
|
||||
// data.fjdz = data.fjdz?.join(",");
|
||||
// let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdcl/add" : "/mosty-gsxt/tbGsxtZdcl/update";
|
||||
// let params = { ...data };
|
||||
// loading.value = true;
|
||||
// qcckPost(params, url).then(() => {
|
||||
// loading.value = false;
|
||||
// proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
// emit("updateDate");
|
||||
// close();
|
||||
// }).catch(() => {
|
||||
// loading.value = false;
|
||||
// });
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 305px;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
border: none;
|
||||
}
|
||||
|
||||
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
::v-deep .el-input__inner:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
}
|
||||
.zdy-taf{
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.map{
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,176 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="标签布控" >
|
||||
<el-button type="primary" size="small" @click="handleItem('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch"></Search>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleItem('edit',row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleItem('detail',row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleItem('deleite',row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight + 42"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="addForm" @updateDate="getList"></AddForm>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from './components/addForm.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SF } = proxy.$dict("D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref();
|
||||
const addForm = ref()
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "任务名称",
|
||||
prop: "rwmc",
|
||||
placeholder: "请输入任务名称",
|
||||
showType: "input",
|
||||
},
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 120, //操作栏宽度
|
||||
|
||||
tableColumn: [
|
||||
{ label: "任务名称", prop: "rwmc" },
|
||||
{ label: "布控人电话", prop: "bkysDh" },
|
||||
{ label: "人员等级", prop: "bkysDj" },
|
||||
{ label: "处置措施", prop: "czcs" },
|
||||
{ label: "布控事由", prop: "bksy" },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
// pageData.tableConfiger.loading = true;
|
||||
// let data = {
|
||||
// ...pageData.pageConfiger,
|
||||
// ...queryFrom.value,
|
||||
// };
|
||||
// qcckGet(data, "/mosty-gsxt/tbGsxtBk/selectPage").then((res) => {
|
||||
// pageData.tableData = res.records || [];
|
||||
// pageData.total = res.total;
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// }).catch(() => {
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// });
|
||||
};
|
||||
|
||||
const handleItem = (type,row) => {
|
||||
if(type == 'delete'){
|
||||
|
||||
}else{
|
||||
addForm.value.init(type,row);
|
||||
}
|
||||
};
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 300;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.main-nav {
|
||||
padding: 16px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.sub-nav {
|
||||
background-color: #fff;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__header) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__nav-wrap::after) {
|
||||
height: 1px;
|
||||
background: none;
|
||||
}
|
||||
|
||||
:deep(.el-table--fit) {
|
||||
top: 52px !important;
|
||||
}
|
||||
.btns {
|
||||
height: 52px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,682 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">布控对象</span>
|
||||
<div>
|
||||
<el-button size="small" type="primary" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div :class="dataOrge.gzlid ? 'ww80' : 'ww100'">
|
||||
<div class="form_cnt">
|
||||
<el-form :model="listQuery" :rules="rules" :disabled="disabled" ref="elform" inline :label-width="100"
|
||||
label-position="left">
|
||||
<div style="display: flex; align-items: center;margin-bottom: 10px;">
|
||||
<el-radio-group v-model="listQuery.bkDx" size="large" fill="#6cf" @change="shangeDx">
|
||||
<el-radio-button :label="item.dm" v-for="(item, index) in props.dic.D_GS_BK_DX" :key="index">{{
|
||||
item.zdmc }}</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-button type="primary" @click="handleAddPeo" v-if="!disabled" style="margin-left: 10px;">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="relative ww100">
|
||||
<MyTable :tableData="listQuery.bkdxList" :tableColumn="tableDate.tableColumn"
|
||||
:tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
|
||||
:controlsWidth="tableDate.controlsWidth">
|
||||
<template #fjZp="{ row }">
|
||||
<el-image :src="setAddress(row.fjZp)"></el-image>
|
||||
</template>
|
||||
<template #yjdj="{ row }">
|
||||
<DictTag :tag="false" :value="row.yjdj" :options="props.dic.D_GS_ZDR_YJDJ" />
|
||||
</template>
|
||||
<template #yjbq="{ row }">
|
||||
<DictTag :tag="false" :value="row.yjbq" :options="props.dic.BD_BK_CLYJBQ" />
|
||||
</template>
|
||||
<template #ryXb="{ row }">
|
||||
<DictTag :tag="false" :value="row.ryXb" :options="props.dic.D_BZ_XB" />
|
||||
</template>
|
||||
<template #bqList="{ row }">
|
||||
<span v-if="row.bqList">
|
||||
<span v-for="(it, idx) in row.bqList" :key="idx"> {{ it.bqMc }}、</span>
|
||||
</span>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary">查看档案</el-link>
|
||||
<el-link type="danger" @click="deleteRow(row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
<div style="width: 100%;" class="mt25">
|
||||
<el-form-item prop="bkSjKs" label="布控开始时间" label-width="120px">
|
||||
<MOSTY.Date v-model="listQuery.bkSjKs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择布控开始时间" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bkSjJs" label="布控结束时间" label-width="120px">
|
||||
<MOSTY.Date v-model="listQuery.bkSjJs" type="datetime" format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择布控结束时间" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="czYq" label="处置要求" label-width="60px" style="width:18% ;">
|
||||
<MOSTY.Select v-model="listQuery.czYq" :dictEnum="props.dic.D_GS_BK_CZYQ" placeholder="请选择处置要求"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item prop="bkDj" label="布控等级" label-width="60px" style="width:18% ;">
|
||||
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_SSYJ" placeholder="请选择布控级别"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div style="width: 100%;" class="mt10">
|
||||
<el-form-item prop="bkSy" label="布控事由" style="width: 100%;">
|
||||
<MOSTY.Other v-model="listQuery.bkSy" placeholder="请输入布控事由" type="textarea" style="width: 100%;"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div style="width: 100%;" class="mt10">
|
||||
<el-form-item prop="bkfj" label="上传附件" style="width: 100%;">
|
||||
<div>
|
||||
<MOSTY.Upload :showBtn="true" :limit="10" :isImg="false" :isAll="true" v-model="listQuery.bkfj" />
|
||||
<div>支持png、jpg、pdf文件上传</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="smallTitle">布控范围</div>
|
||||
<div class=" mapSearch flex">
|
||||
<el-select v-model="hzfs" placeholder="请选择布控范围" clearable @change="qhhzfs">
|
||||
<el-option label="区域选择" value="1"></el-option>
|
||||
<el-option label="自定义范围" value="2"></el-option>
|
||||
</el-select>
|
||||
<el-select multiple style="margin-left: 10px;" v-model="bkqyList" placeholder="请选择布控范围" clearable
|
||||
@change="hzfsChage" v-if="hzfs == '1'">
|
||||
<el-option :label="item.label" :value="item.value" v-for="(item, index) in bkqyArr" :key="index">{{
|
||||
item.label
|
||||
}}</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-button type="primary" @click="drawQy" style="margin-left: 10px;" v-else>
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">自定义区域</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="ww100 relative mb10"
|
||||
style="height: 60vh;border: 1px solid #dcdfe6;border-radius: 4px;overflow: hidden;">
|
||||
<GdMap></GdMap>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ww20" v-if="dataOrge.gzlid">
|
||||
<ApprovalEcho ref="approvalEcho" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- 选择布控人员 -->
|
||||
<BkryDialod :modelValue="chooseVisible_RY" @update:modelValue="chooseVisible_RY = $event" @choosed="choosed"
|
||||
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
||||
<!-- 选择车辆布控 -->
|
||||
<BkclDialod :modelValue="chooseVisible_CL" @update:modelValue="chooseVisible_CL = $event" @choosed="choosed"
|
||||
@choosedAdd="choosedAdd" :roleIds="roleIds" />
|
||||
<!-- 选择布控群体 -->
|
||||
<BkqtDialod :modelValue="chooseVisible_QT" @update:modelValue="chooseVisible_QT = $event" @choosed="choosed"
|
||||
:roleIds="roleIds" />
|
||||
<BksfzDialod :modelValue="chooseVisible_SFZ" @update:modelValue="chooseVisible_SFZ = $event" @choosed="choosed"
|
||||
:roleIds="roleIds" :bkDx="listQuery.bkDx" @choosedAdd="choosedAdd" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getItem } from "@/utils/storage";
|
||||
import BkryDialod from '@/components/ChooseList/ChooseZdr/index.vue';
|
||||
import BkqtDialod from '@/components/ChooseList/ChooseQt/index.vue';
|
||||
import BkclDialod from '@/components/ChooseList/ChooseCl/index.vue';
|
||||
import BksfzDialod from './dolog/sfzLog.vue';
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { tableColumnList, Zd } from '@/views/backOfficeSystem/ApprovalInformation/tableRow.js'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, nextTick, watch, onMounted } from "vue";
|
||||
import { queryProcessNode, queryProcessNodeLog, queryProcess } from '@/api/spl'
|
||||
import ApprovalEcho from "@/components/flowPath/ApprovalEcho.vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { setAddress } from '@/utils/tools.js'
|
||||
import { tbGsxtBkId } from "@/api/commit.js";
|
||||
const emit = defineEmits(["change"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const route = useRoute()
|
||||
const elform = ref()
|
||||
const roleIds = ref([]); //角色ID
|
||||
const chooseVisible_RY = ref(false); //选择布控人员弹窗
|
||||
const chooseVisible_QT = ref(false); //选择布控群体弹窗
|
||||
const chooseVisible_CL = ref(false)
|
||||
const bkqyArr = ref([]); //布控区域
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const loading = ref(false)
|
||||
const addPerson = ref([]) //单独新增的数据
|
||||
const listQuery = ref({
|
||||
bkYz: '01',
|
||||
bkdxList: [],
|
||||
}); //表单数据
|
||||
const rules = reactive({
|
||||
bkBt: [{ required: true, message: "请输入布控标题", trigger: "blur" }],
|
||||
bkDx: [{ required: true, message: "请选择布控对象", trigger: "change" }],
|
||||
bkSjKs: [{ required: true, message: "请选择布控开始时间", trigger: "change" }],
|
||||
bkSjJs: [{ required: true, message: "请选择布控结束时间", trigger: "change" }],
|
||||
czJsdwdm: [{ required: true, message: "请选择处置接收单位", trigger: "change" }],
|
||||
bkshrSsbmdm: [{ required: true, message: "请选择审核部门", trigger: "change" }],
|
||||
bksprSsbmdm: [{ required: true, message: "请选择审批部门", trigger: "change" }],
|
||||
})
|
||||
let tableDate = reactive({
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "照片", prop: "fjZp", showSolt: true },
|
||||
{ label: "姓名", prop: "ryXm" },
|
||||
{ label: "性别", prop: "ryXb", showSolt: true },
|
||||
{ label: "身份证号", prop: "rySfzh" },
|
||||
{ label: "户籍地", prop: "ryHjd" },
|
||||
{ label: "现居住地址", prop: "ryXjd" },
|
||||
{ label: "手机号", prop: "rySjhm" },
|
||||
{ label: "虚拟身份", prop: "qtXnsf" },
|
||||
{ label: "车牌号", prop: "clCph" },
|
||||
{ label: "车辆识别代码", prop: "clCjh" },
|
||||
{ label: "特征描述", prop: "qtTzms" },
|
||||
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true }
|
||||
]
|
||||
});
|
||||
|
||||
const title = ref('')
|
||||
const disabled = ref(false)
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
listQuery.value.bkfj = [];
|
||||
if (type == 'add') {
|
||||
tableDate.tableConfiger.haveControls = true;
|
||||
disabled.value = false;
|
||||
listQuery.value.bkfqrXm = getItem("USERNAME");
|
||||
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
|
||||
listQuery.value.bkfqrSsbmmc = getItem("deptId")[0].deptName;;
|
||||
listQuery.value.bkfqrSsbmdm = getItem("deptId")[0].deptCode;;
|
||||
}
|
||||
title.value = type == 'add' ? '新增' : type == 'detail' ? '详情' : '编辑';
|
||||
disabled.value = type == 'detail' ? true : false;
|
||||
dialogForm.value = true;
|
||||
if (row) tableDate.tableConfiger.haveControls = false;
|
||||
Zd({ D_GS_SSYJ: props.dic.D_GS_SSYJ, BD_BK_CLYJBQ: props.dic.BD_BK_CLYJBQ })
|
||||
|
||||
get_bkqy_list(row)
|
||||
};
|
||||
|
||||
// 获取布控区域
|
||||
const get_bkqy_list = (row) => {
|
||||
qcckGet({}, '/mosty-gsxt/tbGsxtBkQy/selectList').then(res => {
|
||||
let arr = res || [];
|
||||
bkqyArr.value = arr.map(item => {
|
||||
return { ...item, label: item.qymc, value: item.id }
|
||||
})
|
||||
if (row) getDataById(row.id);
|
||||
})
|
||||
}
|
||||
const dataOrge = ref({})
|
||||
const approvalEcho = ref()
|
||||
watch(() => approvalEcho.value, (val) => {
|
||||
if (val) {
|
||||
approvalEcho.value.getWorkflow(dataOrge.value.gzlid)
|
||||
}
|
||||
|
||||
}, { deep: true })
|
||||
|
||||
|
||||
watch(() => approvalEcho.value, (val) => {
|
||||
if (val) {
|
||||
console.log(approvalEcho.value);
|
||||
approvalEcho.value.getWorkflow(dataOrge.value.gzlid)
|
||||
}
|
||||
|
||||
}, { deep: true })
|
||||
|
||||
|
||||
const shangeDx = () => {
|
||||
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
||||
listQuery.value.bkDxxx = '';
|
||||
listQuery.value.bkdxList = [];
|
||||
roleIds.value = [];
|
||||
addPerson.value = []
|
||||
}
|
||||
// 删除数据
|
||||
const deleteRow = (row) => {
|
||||
roleIds.value = roleIds.value.filter(id => id != row.id);
|
||||
addPerson.value = addPerson.value.filter(it => it.id != row.id);
|
||||
listQuery.value.bkdxList = listQuery.value.bkdxList.filter(it => it.id != row.id);
|
||||
}
|
||||
// 单独新增的数据
|
||||
const choosedAdd = (item) => {
|
||||
let obj = {}
|
||||
if (listQuery.value.bkDx !== '02') {
|
||||
obj = { id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb, rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz, rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh, clCph: item.clCph, qtTzms: item.qtTzms, bqList: item.bqList }
|
||||
} else {
|
||||
obj = {
|
||||
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc, bqList: item.bqList
|
||||
}
|
||||
}
|
||||
switch (listQuery.value.bkDx) {
|
||||
default:
|
||||
obj = { ...item }
|
||||
break;
|
||||
}
|
||||
addPerson.value.push(obj);//缓存的数据
|
||||
if (!listQuery.value.bkdxList) listQuery.value.bkdxList = [];
|
||||
listQuery.value.bkdxList.unshift(obj);
|
||||
console.log(listQuery.value.bkdxList);
|
||||
|
||||
}
|
||||
|
||||
// 选择重点人
|
||||
const choosed = (val) => {
|
||||
tableDate.tableColumn = tableColumnList[listQuery.value.bkDx]
|
||||
if (listQuery.value.bkDx == '01') {// 人员
|
||||
roleIds.value = val.map(it => it.id);
|
||||
let arr = val.map(item => {
|
||||
let bqArr = item.bqList || [];
|
||||
let bqs = bqArr.map(v => {
|
||||
return { bqZl: v.bqZl, bqId: v.bqId, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||
})
|
||||
return {
|
||||
id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb,
|
||||
rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz,
|
||||
rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh,
|
||||
clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs, yjdj: item.zdrYjdj, ssbmdm: item.zrSsbmdm
|
||||
}
|
||||
})
|
||||
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||
} else if (listQuery.value.bkDx == '03') {
|
||||
roleIds.value = val.map(it => it.id);
|
||||
let arr = val.map(item => {
|
||||
|
||||
return {
|
||||
clCph: item.hphm, clCjh: item.clCjh, clSyr: item.clSyr, clSyrsfzh: item.clSyrsfzh,
|
||||
clYs: item.clYs, gxSsbmmc: item.gxSsbmmc, yjbq: item.yjbq, yjdj: item.yjdj, ssbmdm: item.zrSsbmdm
|
||||
}
|
||||
})
|
||||
listQuery.value.bkdxList = [...addPerson.value, ...arr];
|
||||
|
||||
}
|
||||
else {// 群体
|
||||
listQuery.value.bkDxxx = (val.map(it => it.id)).join(',');
|
||||
let peolist = []
|
||||
val.forEach(item => {
|
||||
if (item.zdryList) peolist = peolist.concat(item.zdryList)
|
||||
})
|
||||
let brrPeo = peolist.map(item => {
|
||||
let bqArr = item.bqList || [];
|
||||
let bqs = bqArr.map(v => {
|
||||
return { bqZl: v.bqZl, bqId: v.bqId, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||
})
|
||||
return {
|
||||
id: item.id, fjZp: item.fjZp, ryXm: item.ryXm, ryXb: item.ryXb,
|
||||
rySfzh: item.rySfzh, ryHjd: item.hjdXz, ryXjd: item.xzdXz,
|
||||
rySjhm: item.ryLxdh, qtXnsf: item.qtXnsf, clCjh: item.clCjh,
|
||||
clCph: item.clCph, qtTzms: item.qtTzms, bqList: bqs,
|
||||
yjdj: item.zdrYjdj, ssbmdm: item.zrSsbmdm
|
||||
}
|
||||
})
|
||||
listQuery.value.bkdxList = brrPeo;
|
||||
}
|
||||
};
|
||||
|
||||
// 选择人员
|
||||
const handleAddPeo = () => {
|
||||
|
||||
if (!listQuery.value.bkDx) return proxy.$message({ type: "warning", message: '请选择布控对象' });
|
||||
switch (listQuery.value.bkDx) {
|
||||
case '01':
|
||||
chooseVisible_RY.value = true
|
||||
break;
|
||||
case '04':
|
||||
case '05':
|
||||
case '06':
|
||||
case '07':
|
||||
case '08':
|
||||
case '09':
|
||||
case '10':
|
||||
chooseVisible_SFZ.value = true
|
||||
break;
|
||||
case '03':
|
||||
chooseVisible_CL.value = true
|
||||
break;
|
||||
case '02':
|
||||
chooseVisible_QT.value = true
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.validate((validate) => {
|
||||
if (!validate) return;
|
||||
let bklx = ''
|
||||
if (route.name == 'myControl') {
|
||||
bklx = '01'
|
||||
} else {
|
||||
bklx = '02'
|
||||
}
|
||||
let params = { ...listQuery.value, bklx: bklx };
|
||||
params.bkfj = params.bkfj ? params.bkfj.join(',') : '';
|
||||
params.bkdxList = params.bkdxList ? params.bkdxList : [];
|
||||
params.bkdxList.forEach(item => {
|
||||
if (Array.isArray(item.fjZp)) {
|
||||
item.fjZp = item.fjZp ? item.fjZp.join(',') : ''
|
||||
} else {
|
||||
item.fjZp = item.fjZp
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
loading.value = true;
|
||||
let url = title.value == '新增' ? "/mosty-gsxt/tbGsxtBk/save" : "/mosty-gsxt/tbGsxtBk/update";
|
||||
qcckPost(params, url).then((res) => {
|
||||
proxy.$message({ type: "success", message: "布控成功" });
|
||||
emit("change");
|
||||
loading.value = false;
|
||||
close();
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
onMounted(() => {
|
||||
emitter.on("coordString", (res) => {
|
||||
listQuery.value.bkqyList = [{
|
||||
pgis: res.coord[0],
|
||||
}]
|
||||
});
|
||||
});
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
addPerson.value = [];
|
||||
roleIds.value = []
|
||||
dataOrge.value = {}
|
||||
};
|
||||
// 选择身份证
|
||||
const chooseVisible_SFZ = ref(false)
|
||||
// 获取布控信息的工作流
|
||||
const workflow = ref()
|
||||
const getWorkflow = async (id) => {
|
||||
const promes = {
|
||||
processId: id
|
||||
}
|
||||
const proNode = await queryProcessNode(promes)
|
||||
const proNodeLog = await queryProcessNodeLog(promes)
|
||||
const process = await queryProcess(promes)
|
||||
workflow.value = proNode.rows.map(item => {
|
||||
const log = proNodeLog.rows.filter(items => item.nodeId == items.nodeId)
|
||||
|
||||
if (item.eventType == '0') {
|
||||
return {
|
||||
...item,
|
||||
log: {
|
||||
userData: item.userData ? JSON.parse(item.userData) : JSON.parse(process.rows[0].processData).orgNameData,
|
||||
userName: process.rows[0].userName,
|
||||
xtLrsj: process.rows[0].xtLrsj,
|
||||
processStatus: process.rows[0].processStatus,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
...item,
|
||||
orgNameData: JSON.parse(log[0].userData),
|
||||
log: log
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
};
|
||||
const drawQy = () => {
|
||||
emitter.emit("drawShape", {
|
||||
flag: "select_point",
|
||||
type: "polygon",
|
||||
isclear: true
|
||||
});
|
||||
}
|
||||
const hzfs = ref('1')
|
||||
const bkqyList = ref()
|
||||
const qhhzfs = () => {
|
||||
listQuery.value.bkqyList = []
|
||||
bkqyList.value = []
|
||||
emitter.emit('removeBj')
|
||||
emitter.emit('removeEara', "select_point")
|
||||
}
|
||||
|
||||
const hzfsChage = (val) => {
|
||||
const qyList = []
|
||||
console.log(val);
|
||||
|
||||
listQuery.value.bkqyList = val.map((item, index) => {
|
||||
const data = bkqyArr.value.filter(items => items.id == item)[0]
|
||||
console.log(data);
|
||||
|
||||
if (data) {
|
||||
qyList.push(data.pgis)
|
||||
}
|
||||
console.log(item);
|
||||
return {
|
||||
bkQyid: data.id,
|
||||
pgis: data.pgis
|
||||
}
|
||||
})
|
||||
setTimeout(() => {
|
||||
changeXzqh(qyList)
|
||||
}, 2000)
|
||||
}
|
||||
const changeXzqh = (val) => {
|
||||
// 先移除已有的边界
|
||||
emitter.emit('removeBj')
|
||||
// 如果传入的是多个区域数据(二维数组)
|
||||
const features = val.map((area, index) => ({
|
||||
geometry: {
|
||||
type: "Polygon",
|
||||
coordinates: [area] // 确保格式正确
|
||||
},
|
||||
properties: {
|
||||
},
|
||||
type: "Feature"
|
||||
}))
|
||||
// 循环为每个区域创建单独的多边形,这样可以设置不同的样式
|
||||
features.forEach((feature, index) => {
|
||||
emitter.emit('setBoundarys', {
|
||||
data: {
|
||||
type: "FeatureCollection",
|
||||
features: [feature]
|
||||
},
|
||||
color: '#cf1010',
|
||||
fillColor: 'rgba(255, 255, 255,0)',
|
||||
})
|
||||
})
|
||||
}
|
||||
// 根据id获取详情
|
||||
const getDataById = (id) => {
|
||||
qcckGet({}, '/mosty-gsxt/tbGsxtBk/selectVoById/' + id).then(res => {
|
||||
res.bkfj = res.ossList || [];
|
||||
listQuery.value = res || {}
|
||||
dataOrge.value = res
|
||||
if (res.bkqyList) {
|
||||
bkqyList.value = res.bkqyList ? res.bkqyList.map(v => {
|
||||
{
|
||||
if (v.bkQyid) {
|
||||
hzfs.value = '1'
|
||||
} else {
|
||||
hzfs.value = '2'
|
||||
}
|
||||
return v.bkQyid
|
||||
}
|
||||
|
||||
}) : [];
|
||||
const data = res.bkqyList.map(item => {
|
||||
return item.pgis
|
||||
})
|
||||
setTimeout(() => {
|
||||
console.log(data);
|
||||
changeXzqh(data)
|
||||
// listQuery.value.bkDxxx = data.join(',')
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
|
||||
tableDate.tableColumn = tableColumnList[res.bkDx ? res.bkDx : '01']
|
||||
})
|
||||
}
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
.smallTitle {
|
||||
width: 100%;
|
||||
font-size: 15px;
|
||||
line-height: 50px;
|
||||
font-weight: 550;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.mapSearch {
|
||||
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
::v-deep .el-form-item--default {
|
||||
margin: 0 1% 0 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .avatar-uploader {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
::v-deep .el-upload--picture-card i {
|
||||
width: 156px;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 305px;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
border: none;
|
||||
}
|
||||
|
||||
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
::v-deep .el-input__inner:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* 使用深度选择器覆盖子组件样式 */
|
||||
::v-deep .el-step.is-vertical .el-step__title {
|
||||
color: #000000 !important;
|
||||
border-color: #000000 !important;
|
||||
}
|
||||
|
||||
::v-deep .el-step__description {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
::v-deep .el-step__description.is-wait {
|
||||
|
||||
color: #000000 !important;
|
||||
border-color: #000000 !important;
|
||||
}
|
||||
|
||||
.el-step__title.is-wait {
|
||||
color: #000000 !important;
|
||||
border-color: #000000 !important;
|
||||
}
|
||||
|
||||
::v-deep .el-step__head.is-wait {
|
||||
color: #000000 !important;
|
||||
border-color: #000000 !important;
|
||||
}
|
||||
|
||||
::v-deep .el-step__line {
|
||||
background-color: #000000 !important;
|
||||
}
|
||||
|
||||
.nodeBox {
|
||||
width: 80%;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
background-color: aliceblue;
|
||||
|
||||
.nodeorgNameTg {
|
||||
background-color: #1abe20;
|
||||
}
|
||||
|
||||
.nameTag {
|
||||
line-height: 30px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.nodeorgNameDd {
|
||||
background-color: #18a2dd;
|
||||
}
|
||||
|
||||
.fontColor {
|
||||
color: #1abe20;
|
||||
}
|
||||
|
||||
.fontColorDd {
|
||||
color: #18a2dd;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__label {
|
||||
padding: 0;
|
||||
|
||||
}
|
||||
|
||||
::v-deep .el-radio-button__inner {
|
||||
color: #000 !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,185 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="新增布控" @close="close" :close-on-click-modal="false">
|
||||
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||
<template #bqList>
|
||||
<div class="marks pointer" @click="chooseMarksVisible = true">
|
||||
<span style="color: rgb(175 178 184);padding-left: 10px;"
|
||||
v-if="!listQuery.bqList || listQuery.bqList.length == 0">请选择标签</span>
|
||||
<span v-else>
|
||||
<el-tag @close.stop="closeTag(idx)" type="success" closable v-for="(it, idx) in listQuery.bqList"
|
||||
:key="idx">{{ it.bqMc }}</el-tag>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { reactive, ref, getCurrentInstance, watch } from 'vue';
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
bkDx: {
|
||||
type: String,
|
||||
default: '01'
|
||||
}
|
||||
})
|
||||
const emits = defineEmits(["update:modelValue", "choosed", "choosedAdd"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_XB, D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB", "D_GS_ZDR_YJDJ"); // 获取字典数据
|
||||
const elform = ref()
|
||||
const roleIds = ref([])
|
||||
const chooseMarksVisible = ref(false)
|
||||
const listQuery = ref({})
|
||||
|
||||
const formData = ref()
|
||||
const rules = ref()
|
||||
const tableColumnList = {
|
||||
'04': [
|
||||
{ label: "身份证号", prop: "rySfzh", type: "input" },
|
||||
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
|
||||
'05': [
|
||||
{ label: "车辆识别代码", prop: "clCjh", type: "input" },
|
||||
{ label: "车牌号", prop: "clCph", type: "input", },
|
||||
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
'06': [
|
||||
{ label: "Mac地址", prop: "mac", type: "input" },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
'07': [
|
||||
{ label: "IMEI", prop: "imei", type: "input" },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
'08': [
|
||||
{ label: "IMSI", prop: "imsi", type: "input" },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
'09': [
|
||||
{ label: "电话", prop: "rySjhm", type: "input" },
|
||||
{ label: "姓名", prop: "ryXm", type: "input", },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
],
|
||||
'10': [{ label: "姓名", prop: "ryXm", type: "input", },
|
||||
{ label: "身份证号", prop: "rySfzh", type: "input" },
|
||||
{ label: "预警等级", prop: "yjdj", type: "select", options: D_GS_ZDR_YJDJ },
|
||||
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB },
|
||||
{ label: "标签", prop: "bqList", type: "slot", width: '100%' },
|
||||
{ label: "责任部门", prop: "ssbmdm", type: "department" },
|
||||
{ label: "人员照片", prop: "fjZp", type: "upload", width: '100%' },
|
||||
],
|
||||
}
|
||||
const rulesList = {
|
||||
'04': {
|
||||
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
|
||||
},
|
||||
'03': {
|
||||
fjZp: [{ required: true, message: "请选择附件", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'05': {
|
||||
clCjh: [{ required: true, message: "请输入车辆识别代码", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'06': {
|
||||
mac: [{ required: true, message: "请输入Mac地址", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'07': {
|
||||
imei: [{ required: true, message: "请输入IMEI", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'08': {
|
||||
imsi: [{ required: true, message: "请输入IMSI", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
},
|
||||
'09': {
|
||||
dh: [{ required: true, message: "请输入电话号码", trigger: "blur" }],
|
||||
ssbmdm: [{ required: true, message: "请选择责任部门", trigger: "blur" }],
|
||||
yjdj: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
|
||||
}
|
||||
}
|
||||
watch(() => props.bkDx, (val, oldval) => {
|
||||
formData.value = tableColumnList[val]
|
||||
rules.value = rulesList[val]
|
||||
}, { immediate: true })
|
||||
|
||||
|
||||
// 选择标签
|
||||
const choosed = (val) => {
|
||||
listQuery.value.bqList = val.map(v => {
|
||||
return { bqZl: v.bqLb, bqId: v.id, bqLx: v.bqLx, bqLb: v.bqLb, bqMc: v.bqMc, bqDm: v.bqDm }
|
||||
});
|
||||
roleIds.value = val.map(v => v.id)
|
||||
}
|
||||
|
||||
// 删除数据
|
||||
const closeTag = (idx) => {
|
||||
listQuery.value.bqList.splice(idx, 1)
|
||||
roleIds.value.splice(idx, 1)
|
||||
}
|
||||
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
val.id = new Date().getTime()
|
||||
emits('choosedAdd', val)
|
||||
close()
|
||||
})
|
||||
}
|
||||
|
||||
const close = async () => {
|
||||
roleIds.value = []
|
||||
listQuery.value = {}
|
||||
listQuery.value.fjZp = []
|
||||
await emits("update:modelValue", false);
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.marks {
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,120 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">预警详情</span>
|
||||
<div>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<div class="left">
|
||||
<div class="lh30">轨迹信息</div>
|
||||
<div class="flex item mr15">
|
||||
<img :src="person" alt="">
|
||||
<div class="ml10">
|
||||
<div>姓名:张三(51018319954544454)</div>
|
||||
<div>预警次数:<span>6</span>次</div>
|
||||
<div>预警来源:布控预警</div>
|
||||
<div>预警标签:社区戒毒</div>
|
||||
<div><span class="marks">轨迹上图</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="cntBox">
|
||||
<li class="li-item" v-for="idx in 10" :key="idx">
|
||||
<div class="mb10">预警时间:2024-05-21 10:10:05</div>
|
||||
<div class="item flex info">
|
||||
<img :src="person" alt="" style="width:99px;height: 92px;">
|
||||
<div class="ml10">预警内容;预警内容:5月21日20.41.14人像抓拍数据测到 马志强(510502199506168718)出现在024000050迎库路大世界石梯人行道2L4-SPL</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="right">
|
||||
<GdMap></GdMap>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import { ref, defineExpose,defineEmits } from "vue";
|
||||
const emit = defineEmits(["change"]);
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const person = require('@/assets/images/person.png')
|
||||
const dialogForm = ref(false); //弹窗
|
||||
|
||||
// 初始化数据
|
||||
const init = (row) => {
|
||||
dialogForm.value = true;
|
||||
};
|
||||
|
||||
// 关闭
|
||||
const close = () => {
|
||||
dialogForm.value = false;
|
||||
};
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
.form_cnt{
|
||||
display: flex;
|
||||
.left{
|
||||
width: 400px;
|
||||
height: 100%;
|
||||
margin-right: 10px;
|
||||
.item{
|
||||
background: rgb(248, 248, 248);
|
||||
padding: 4px;
|
||||
}
|
||||
.info{
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.marks{
|
||||
font-size: 12px;
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
background: #0072ff;
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
}
|
||||
.cntBox{
|
||||
margin-top: 6px;
|
||||
height: calc(100% - 140px);
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
.li-item{
|
||||
border-left:1px solid #0072ff ;
|
||||
padding-left:10px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
&::before{
|
||||
position: absolute;
|
||||
content: '';
|
||||
top: 0;
|
||||
left: -5px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background: #0072ff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.right{
|
||||
position: relative;
|
||||
width: calc(100% - 410px);
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,252 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle :title=" route.meta.title ">
|
||||
<el-button type="primary" @click="handleAdd('add', null)">发起布控</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
|
||||
<template #bkZt="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
|
||||
</template>
|
||||
<template #bkDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #bkDx="{ row }">
|
||||
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_DX" />
|
||||
</template>
|
||||
<template #bkdxList="{ row }">
|
||||
<span v-if="row.bkdxList"><span class="nowrap" v-for="(it, idx) in row.bkdxList" :key="idx">
|
||||
{{ it.ryXm ? it.ryXm : it.imei ? it.imei : it.imsi ? it.imsi : '' }}
|
||||
<!-- :it.ryXm?it.mac:it.imsi?it.imsi:'xxxx' -->
|
||||
<span v-if="idx < row.bkdxList.length - 1">、</span></span></span>
|
||||
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
<!-- <template #sjrs="{ row }">
|
||||
<span v-if="row.bkdxList"> {{ row.bkdxList.length }} </span>
|
||||
<span v-else>0</span>
|
||||
</template> -->
|
||||
<!-- <template #qyList="{ row }">
|
||||
<span v-for="(it,idx) in row.qyList" :key="idx"> {{ it.qymc }} <span v-if="idx < row.qyList.length-1">、</span></span>
|
||||
</template> -->
|
||||
<!-- <template #yjcs="{row}">
|
||||
<span @click="openWarning(row)" style="color: #00ffff;" class="mr5 pointer">{{ row.yjcs || 0}}</span>次
|
||||
</template> -->
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<template v-if="!row.gzlid">
|
||||
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
@click="createProcess(row)">送审</el-link>
|
||||
<el-link type="primary" size="small" @click="tbGsxtBkQuashList( row)" v-else>撤控</el-link>
|
||||
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
|
||||
@click="handleAdd('edit', row)">编辑</el-link>
|
||||
</template>
|
||||
<!-- 审核通过后才有轨迹 -->
|
||||
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)"
|
||||
v-if="['01', '03', '06'].includes(row.bkZt)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 布控类型 -->
|
||||
<AddBkdx ref="addBkdxForm" @change="getList" :dic="{
|
||||
D_GS_BK_DX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ,
|
||||
D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_GS_ZDR_YJDJ
|
||||
}" />
|
||||
<!-- 预警弹窗 -->
|
||||
<YjDialog ref="warningkdxForm"></YjDialog>
|
||||
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '布控审批', flowType: 'BKSP', modelName: '布控' }"
|
||||
:path="fixedValue" @getList="getList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import AddBkdx from "./components/addBkdx.vue";
|
||||
import YjDialog from "./components/yjDialog.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
|
||||
import {tbGsxtBkQuash} from '@/api/zdr.js'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_ZDR_YJDJ,
|
||||
D_GS_BK_DX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS } = proxy.$dict("D_GS_ZDR_YJDJ", "D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX", "D_GS_SSYJ", "D_GS_BK_DX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS", 'BD_BK_CLYJBQ'); //获取字典数据
|
||||
const addBkdxForm = ref(null); //布控对象组件
|
||||
const warningkdxForm = ref(); //布控对象组件
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "布控等级",
|
||||
prop: "bkDj",
|
||||
placeholder: "请选择布控等级",
|
||||
showType: "select",
|
||||
options: D_GS_SSYJ
|
||||
},
|
||||
{
|
||||
label: "布控类型",
|
||||
prop: "bkDx",
|
||||
placeholder: "请选择布控类型",
|
||||
showType: "select",
|
||||
options: D_GS_BK_DX
|
||||
},
|
||||
{
|
||||
label: "布控状态",
|
||||
prop: "bkZt",
|
||||
placeholder: "请选择布控状态",
|
||||
showType: "select",
|
||||
options: D_GS_BK_ZT
|
||||
},
|
||||
{
|
||||
label: "布控时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择布控时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
|
||||
tableColumn: [
|
||||
{ label: "布控对象", prop: "bkdxList", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "布控类型", prop: "bkDx", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "布控等级", prop: "bkDj", showSolt: true },
|
||||
{ label: "开始时间", prop: "bkSjKs", showOverflowTooltip: true },
|
||||
{ label: "结束时间", prop: "bkSjJs", showOverflowTooltip: true },
|
||||
{ label: "申请人", prop: "bkfqrXm" },
|
||||
{ label: "布控状态", prop: "bkZt", showSolt: true },
|
||||
]
|
||||
});
|
||||
// 固定值
|
||||
const fixedValue = {
|
||||
clueVerification: 'deploymentApproval',
|
||||
byMeansOf: 'tbGsxtBk/gsbkCallback',
|
||||
nobyMeansOf: 'tbGsxtBk/gsbkCallback',
|
||||
recycle: 'tbGsxtBk/gsbkCallback',
|
||||
}
|
||||
const showSp = ref(false);
|
||||
const rowData = ref()
|
||||
const createProcess = (row) => {
|
||||
showSp.value = true;
|
||||
rowData.value = row
|
||||
}
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime? val.startTime[0]: '',
|
||||
endTime: val.startTime? val.startTime[1]: ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let bklx = ''
|
||||
console.log();
|
||||
|
||||
if (route.name == 'myControl') {
|
||||
bklx = '01'
|
||||
} else {
|
||||
bklx = '02'
|
||||
}
|
||||
let data = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
bkcxlx: '01',
|
||||
bklx: bklx
|
||||
};
|
||||
qcckGet(data, "/mosty-gsxt/tbGsxtBk/selectPage").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
const handleAdd = (type, row) => {
|
||||
addBkdxForm.value.init(type, row);
|
||||
};
|
||||
|
||||
// 删除
|
||||
const handleRow = (id) => {
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete({}, "/mosty-gsxt/tbGsxtBk/" + id).then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
const tbGsxtBkQuashList = (item) => {
|
||||
tbGsxtBkQuash({id:item.id}).then(res=>{
|
||||
proxy.$message({ type: "success", message: "操作成功" });
|
||||
getList();
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,185 @@
|
||||
<template>
|
||||
<div style="height:100%;width:100%" :id="echartsId"></div>
|
||||
</template>
|
||||
<script setup>
|
||||
import * as echarts from "echarts";
|
||||
import { onMounted, ref, reactive, defineProps, onUnmounted, watch, nextTick } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
echartsId:{
|
||||
type:String,
|
||||
default:'barId'
|
||||
},
|
||||
data:{
|
||||
type:Object,
|
||||
default:{
|
||||
title:'', // 图表标题
|
||||
color:[], //['#EB00FF','#F57100']
|
||||
list:[], //[{label:'总数',val:[80,70,60,50]}, {label:'已处置',val:[70,40,30,80]}, ]
|
||||
xData:[] ,//['09-01','09-02','09-03','09-04']
|
||||
labelColor:'#000', //横坐标颜色 - 纵坐标颜色 - 标题颜色
|
||||
rotate:0, //横坐标旋转角度
|
||||
interval:0, //横坐标间隔
|
||||
isVertical:false,//是否竖排垂直展示
|
||||
}
|
||||
},
|
||||
dataZoom:{
|
||||
type:Boolean,
|
||||
default:false
|
||||
},
|
||||
rotate:{
|
||||
type:Number,
|
||||
default:0
|
||||
}
|
||||
});
|
||||
watch(()=>props.data,val=>{
|
||||
nextTick(()=>{
|
||||
init(val)
|
||||
})
|
||||
},{immediate:true,deep:true})
|
||||
|
||||
|
||||
// 初始化
|
||||
function init (val) {
|
||||
let color = val.color;
|
||||
let list = val.list
|
||||
let series = list.map((item ,idx)=>{
|
||||
return {
|
||||
type: "bar",
|
||||
name:item.label,
|
||||
data:item.val,
|
||||
itemStyle:{normal: { color: color[idx] }},
|
||||
showSymbol:false,
|
||||
barWidth: '30%', // 柱状图宽度
|
||||
}
|
||||
})
|
||||
chartFn(series)
|
||||
}
|
||||
|
||||
function chartFn(series) {
|
||||
var myChart = echarts.init(document.getElementById(props.echartsId));
|
||||
var option = {
|
||||
title: {
|
||||
text: props.data.title || '',
|
||||
left: 'center',
|
||||
textStyle: {
|
||||
color: props.data.color[0] || "#000",
|
||||
fontSize: 14
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: "25%",
|
||||
right: "0%",
|
||||
left: "0%",
|
||||
bottom: "0%", // 增加底部空间,为两行X轴标签留出空间
|
||||
containLabel: true
|
||||
},
|
||||
legend: {
|
||||
data: props.data.list.map(v => { return v.label }),
|
||||
textStyle: {
|
||||
color: props.data.color[0] || "#409EFF",
|
||||
fontSize: 12
|
||||
},
|
||||
right: "5%",
|
||||
top: "10%"
|
||||
},
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
},
|
||||
backgroundColor: "rgba(255,255,255,1)",
|
||||
padding: [5, 10],
|
||||
textStyle: { color: "#7588E4" },
|
||||
extraCssText: "box-shadow: 0 0 5px rgba(0,0,0,0.3)"
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: props.data.xData,
|
||||
axisTick: { alignWithLabel: true },
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: props.data.color[0] || "#409EFF"
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
rotate: props.rotate, // 设置标签旋转角度
|
||||
show: true,
|
||||
color: props.data.color[0] || "#409EFF",
|
||||
fontSize: 10,
|
||||
interval: props.data.interval || 0, // 强制显示所有标签
|
||||
formatter: function(value, index) {
|
||||
// 组合显示数量和年龄范围,数量在上,范围在下
|
||||
const bottomValues = props.data.bottomValues || [];
|
||||
const bottomValue = bottomValues[index] || '';
|
||||
return `${bottomValue}\n${value}`;
|
||||
},
|
||||
margin: 10 // 调整边距
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
axisLabel: {
|
||||
color: props.data.color[0] || "#409EFF",
|
||||
fontSize: 10,
|
||||
formatter: '{value}%' // 显示百分比
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
type: 'solid',
|
||||
color: props.data.color[0] || "#409EFF"
|
||||
}
|
||||
},
|
||||
axisTick: { show: false },
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: props.data.color[0] || "#409EFF"
|
||||
}
|
||||
}
|
||||
},
|
||||
series: series.map((item, index) => ({
|
||||
...item,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
formatter: function(params) {
|
||||
// 显示顶部百分比标签
|
||||
return `占比 ${params.value}%`;
|
||||
},
|
||||
color: props.data.color[0] || "#409EFF",
|
||||
fontSize: 10
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: item.itemStyle.normal.color
|
||||
}
|
||||
}
|
||||
})),
|
||||
// // 底部数值标签
|
||||
// graphic: props.data.bottomValues ? props.data.bottomValues.map((value, idx) => {
|
||||
// const percent = (idx + 0.5) / props.data.xData.length * 100;
|
||||
// return {
|
||||
// type: 'text',
|
||||
// left: `${percent}%`,
|
||||
// bottom: '5%', // 调整到底部,显示在x轴标签下方
|
||||
// style: {
|
||||
// text: value,
|
||||
// fill: '#000',
|
||||
// fontSize: 12
|
||||
// }
|
||||
// };
|
||||
// }) : []
|
||||
};
|
||||
option && myChart.setOption(option);
|
||||
window.addEventListener('resize', function() {
|
||||
myChart.resize();
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,70 @@
|
||||
<template>
|
||||
<div class="table-data">
|
||||
<table border="1" cellspacing="0" cellpadding="0" width="100%">
|
||||
<tr style="text-align: center;font-size: 12pt;">
|
||||
<th colspan="6">{{ title }}</th>
|
||||
</tr>
|
||||
<tr style="text-align: center;font-size: 12pt;font-weight: normal;">
|
||||
<th v-if="lx == '0' || lx == '1'"></th>
|
||||
<th v-for="item in titleList" :key="item">{{ item }}</th>
|
||||
</tr>
|
||||
<tr style="text-align: center;font-size: 12pt;font-family: 'Times New Roman';" v-for="value in condition"
|
||||
:key="value">
|
||||
<template v-if="lx == '0'">
|
||||
<td>{{ value.tjlx }}</td>
|
||||
<td>{{ value.ajsls }}</td>
|
||||
<td>{{ value.ccs }}</td>
|
||||
<td>{{ value.wfry }}</td>
|
||||
</template>
|
||||
<template v-if="lx == '1'">
|
||||
<td>{{ value.tjlx }}</td>
|
||||
<td>{{ value.rlggcx }}</td>
|
||||
<td>{{ value.qhrsaq }}</td>
|
||||
<td>{{ value.fhshglcx }}</td>
|
||||
<td>{{ value.fhggaq }}</td>
|
||||
</template>
|
||||
<template v-if="lx == '2'">
|
||||
<td>{{ value.ajlx }}</td>
|
||||
<td>{{ value.sl }}</td>
|
||||
<td>{{ value.zb }}</td>
|
||||
</template>
|
||||
<template v-if="lx == '3'">
|
||||
<td>{{ value.afqy }}</td>
|
||||
<td>{{ value.sl }}</td>
|
||||
</template>
|
||||
<template v-if="lx == '4'">
|
||||
<td>{{ value.ssbm }}</td>
|
||||
<td>{{ value.las }}</td>
|
||||
<td>{{ value.pas }}</td>
|
||||
<td>{{ value.ccl }}</td>
|
||||
<td>{{ value.xyrs }}</td>
|
||||
<td>{{ value.bz }}</td>
|
||||
</template>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, computed } from 'vue'
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
listData: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
titleList: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}, lx: {
|
||||
type: String,
|
||||
default: '0'
|
||||
}
|
||||
})
|
||||
const condition = computed(() => {
|
||||
const data = props.listData.map(item => item)
|
||||
return data
|
||||
})
|
||||
</script>
|
||||
@ -0,0 +1,464 @@
|
||||
<template>
|
||||
<div class="report-container" ref="tableBox">
|
||||
|
||||
<div ref="ajReport">
|
||||
<div class="main-title">{{ wdValue.date }}份全市治安案件形势分析</div>
|
||||
<div class="section-title">一、治安案件总体概述</div>
|
||||
<div class="body-text" v-if="wdValue.zaajZtgsList">
|
||||
{{ wdValue.ym }}月份,全市各级公安机关治安部门受理行政案件{{ wdValue.zaajZtgsList.ajsls }}起、查处案件{{ wdValue.zaajZtgsList.ccs }}起、查处率{{
|
||||
wdValue.zaajZtgsList.ccl }}%、查处违法人员{{ wdValue.zaajZtgsList.wfry }}人。
|
||||
<TableData title="全市治安案件总体情况表" :listData="wdValue.zaajZtgsList.ztqk" :titleList="['受理治安案件数', '查处数', '查处违法人员数']"
|
||||
lx="0" />
|
||||
</div>
|
||||
<div class="section-title">二、治安案件形势分析</div>
|
||||
<div>
|
||||
|
||||
<div class="body-text" v-if="wdValue.zaajList.length > 0">
|
||||
(一)受理案件类别分析。{{ wdValue.ym }}月受理的{{ wdValue.zaajZtgsList.ajsls }}起行政案件中,<span
|
||||
v-for="(item, index) in wdValue.zaajList" :key="index">{{ item.label }}{{ item.sy }}起环比{{ item.sySj }}{{
|
||||
item.hb }}、同比{{ item.bySj }}{{ item.tb }}<span v-if="index == wdValue.zaajList.length - 1">;</span> <span
|
||||
v-else>。</span></span>
|
||||
<TableData title="全市治安案件总体情况表" :listData="wdValue.ajxsfxList"
|
||||
:titleList="['扰乱公共秩序', '侵害人身安全和财产权利', '妨害社会管理秩序', '妨害公共安全']" lx="1" />
|
||||
</div>
|
||||
<div class="body-text">
|
||||
(二)查处案件类别分析。{{ wdValue.ym }}月份的查处63起行政案件中,<span v-for="(item, index) in wdValue.zaajFbqktj" :key="index">
|
||||
{{ item.ajlx }}{{ item.sl }}起、占查处案件总数的{{ item.zb }}<span
|
||||
v-if="index == wdValue.zaajFbqktj.length - 1">,</span>
|
||||
<span v-else>。</span></span>
|
||||
<TableData title="全市查处主要治安案件情况" :listData="wdValue.zaajFbqktj" :titleList="['案件类型', '查处数', '占查处总数的百分比']"
|
||||
lx="2" />
|
||||
</div>
|
||||
<div class="body-text">
|
||||
(三)查处违法犯罪人员年龄分析。{{ wdValue.ym }}月份共查处违法人员{{ wdValue.nldtjOnj.ccxyr }}人,其中<span
|
||||
v-for="value in wdValue.nldtjOnj.nldtj.data" :key="value.agegroup">
|
||||
{{ value.agegroup }} {{ value.count }}人、占查处违法人员总数的{{ value.zb }}<span
|
||||
v-if="index == wdValue.nldtjOnj.nldtj.data.length - 1">。</span><span v-else>、</span>
|
||||
</span>
|
||||
</div>
|
||||
<div style="height:250px; width:280px;margin: 0 auto;">
|
||||
<bar v-if="wdValue.nldtjOnj.nldtj" :echartsId="'myBarChart'" :data="{
|
||||
title: '图一',
|
||||
color: ['#FF6B6B'],
|
||||
...wdValue.nldtjOnj.nldtj
|
||||
}" />
|
||||
</div>
|
||||
<div class="body-text">
|
||||
(四)案件发生区域分析。{{wdValue.sajajfsqy.qyfx }}
|
||||
<TableData title="受理治安案件发生区域" :listData="wdValue.sajajfsqy.xxsj" :titleList="['案件发生区域', '案件数量']" lx="3" />
|
||||
</div>
|
||||
<div class="body-text">
|
||||
(五)治安案件地域分析。{{ wdValue.ym }}月份全市治安案件平均查处率为{{ wdValue.zaajZtgsList.ccl }}%<span v-if="parseFloat(wdValue.zaajZtgsList.ccl) > 0"> ,<span v-for="value in wdValue.jxsajajdyfx.greaterThan" :key="value.ssbm">{{ value.ssbm }}、</span>查处率高,分别为<span v-for="value in wdValue.jxsajajdyfx.lessThan" :key="value.ssbm">{{ value.ccl }}</span>,<span v-for="value in wdValue.jxsajajdyfx.lessThan" :key="value.ssbm">{{ value.ccl }}</span></span><span>。</span>
|
||||
<TableData title="各县(市)公安(分)局治安案件统计表" :listData="wdValue.jxsajajdyfx.res"
|
||||
:titleList="['部门、(市)公安(分)局', '受理数', '查处数','查处率','查处违法人员数','备注']" lx="4" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-title">三、对策建议</div>
|
||||
<div class="body-text">
|
||||
{{ wdValue.xzjyL }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex;justify-content: center;align-items: center;">
|
||||
<el-button type="primary" @click="downloadWithStyles">导出WORD</el-button>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import * as echarts from "echarts";
|
||||
import { xsasjxsajztgs, xsasjxsajccajlbfx, xsasjxsajajxsfx, xsasjxsajnldtj, xsasjxsajajfsqy, xsasjxsajajdyfx, xsasjxsajaltdtj, xsasjxsajfbqktj, xsasjxsajFatdtj, xsasjxsajxyrQkfx, xsasjxsajypbgZttj, xsasjxsajqxajqk } from '@/api/fileapi'
|
||||
import { ref, onMounted, watch } from 'vue'
|
||||
import { connectSSEWithPost } from '@/utils/sse'
|
||||
import { timeValidate } from '@/utils/tools'
|
||||
import { downloadDocWithStyle, downloadPDF } from "@/utils/export.js"
|
||||
import TableData from './tableData.vue'
|
||||
import Bar from './bar.vue'
|
||||
import Docxtemplater from 'docxtemplater';
|
||||
import PizZip from 'pizzip';
|
||||
import { saveAs } from 'file-saver';
|
||||
|
||||
const props = defineProps({
|
||||
search: {
|
||||
type: Object,
|
||||
default: () => { }
|
||||
},
|
||||
xzlx: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
const params = ref({ ...props.search })
|
||||
|
||||
|
||||
|
||||
onMounted(async () => {
|
||||
getxsasjxsajztgs()
|
||||
getxsasjxsajccajlbfx()
|
||||
getxsasjxsajajxsfx()
|
||||
getxsasjxsajnldtj()
|
||||
getxsasjxsajajfsqy()
|
||||
getxsasjxsajajdyfx()
|
||||
getconnectSSEWithPost()
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 值
|
||||
const wdValue = ref({
|
||||
date: timeValidate(new Date(), 'ny'),
|
||||
ym: timeValidate((() => { const d = new Date(); d.setMonth(d.getMonth() - 1); return d; })(), 'ym'),
|
||||
td: timeValidate(new Date(), 'td'),
|
||||
zaajZtgsList: {},
|
||||
ajxsfxList: [],
|
||||
zaajList: [],
|
||||
zaajFbqktj: [],
|
||||
zaajFbqktjList: {},
|
||||
nldtjOnj: {
|
||||
ccxyr: 0,
|
||||
nldtj: { list: [] }
|
||||
},
|
||||
jxsajajdyfx: {},
|
||||
sajajfsqy: {},
|
||||
xzjyL:""
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
const ajReport = ref(null)
|
||||
// 获取报告所有文字内容
|
||||
const getReportTextContent = () => {
|
||||
if (!ajReport.value) {
|
||||
return ''
|
||||
}
|
||||
// 提取元素内的所有文本内容
|
||||
const textContent = ajReport.value.textContent || ''
|
||||
// 处理空白字符,去除多余的换行和空格
|
||||
return textContent
|
||||
.replace(/\s+/g, ' ') // 将多个空白字符替换为单个空格
|
||||
.trim() // 去除首尾空白
|
||||
}
|
||||
|
||||
// 侦防建议
|
||||
const getconnectSSEWithPost = () => {
|
||||
const params = getReportTextContent()
|
||||
connectSSEWithPost({ prompt: params }, {
|
||||
onChunk: (content) => {
|
||||
wdValue.value.xzjyL += content;
|
||||
},
|
||||
onComplete: () => {
|
||||
console.log('SSE连接完成');
|
||||
},
|
||||
onError: (error) => {
|
||||
console.error('SSE连接错误:', error);
|
||||
}
|
||||
})
|
||||
}
|
||||
// 区域分析
|
||||
const getxsasjxsajztgs = () => {
|
||||
// ...params.value
|
||||
xsasjxsajztgs({ ...params.value }).then(res => {
|
||||
wdValue.value.zaajZtgsList = res
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 治安案件类别分析
|
||||
const getxsasjxsajccajlbfx = () => {
|
||||
xsasjxsajccajlbfx({ ...params.value }).then(res => {
|
||||
wdValue.value.zaajFbqktj = res
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
const xzlx = [
|
||||
{
|
||||
key: 'rlggcx',
|
||||
label: '扰乱公共秩序类',
|
||||
value: ''
|
||||
}, {
|
||||
key: 'qhrsaq',
|
||||
label: '侵害人身安全和财产权利类',
|
||||
value: ''
|
||||
}, {
|
||||
key: 'fhshglcx',
|
||||
label: '妨害社会管理秩序类',
|
||||
value: ''
|
||||
}, {
|
||||
key: 'fhggaq',
|
||||
label: '妨害公共安全类',
|
||||
value: ''
|
||||
}
|
||||
]
|
||||
const strFun = (str) => {
|
||||
const newStr = parseInt(str.slice(0, str.length - 1))
|
||||
return newStr == 0 ? '持平' : newStr > 0 ? `上升${newStr}%` : `下降${Math.abs(newStr)}%`
|
||||
}
|
||||
// 治安案件线索分析
|
||||
const getxsasjxsajajxsfx = () => {
|
||||
xsasjxsajajxsfx({ ...params.value }).then(res => {
|
||||
wdValue.value.ajxsfxList = res
|
||||
const list = res.map(item => item.tjlx)
|
||||
wdValue.value.zaajList = xzlx.map(item => {
|
||||
return {
|
||||
...item,
|
||||
sySj: list[0],
|
||||
bySj: list[2],
|
||||
sy: res[1][item.key],
|
||||
by: res[2][item.key],
|
||||
hb: strFun(res[3][item.key]),
|
||||
tb: strFun(res[4][item.key]),
|
||||
}
|
||||
})
|
||||
|
||||
console.log(wdValue.value.zaajList);
|
||||
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
const getxsasjxsajnldtj = () => {
|
||||
xsasjxsajnldtj({ ...params.value }).then(res => {
|
||||
wdValue.value.nldtjOnj.ccxyr = res.ccxyr ? res.ccxyr : '0'
|
||||
wdValue.value.nldtjOnj.nldtj.list = [
|
||||
{ label: '占比', val: res.nldtj.map(item => (item.count / res.ccxyr * 100).toFixed(2)) },
|
||||
]
|
||||
wdValue.value.nldtjOnj.nldtj.xData = res.nldtj.map(item => item.agegroup)
|
||||
wdValue.value.nldtjOnj.nldtj.bottomValues = res.nldtj.map(item => item.count)
|
||||
wdValue.value.nldtjOnj.nldtj.data = res.nldtj
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
|
||||
const getxsasjxsajajfsqy = () => {
|
||||
xsasjxsajajfsqy({ ...params.value }).then(res => {
|
||||
wdValue.value.sajajfsqy = res
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const getxsasjxsajajdyfx = () => {
|
||||
xsasjxsajajdyfx({ ...params.value }).then(res => {
|
||||
const { greaterThan, lessThan } = compareCclValues(res);
|
||||
wdValue.value.jxsajajdyfx = {
|
||||
greaterThan, lessThan,
|
||||
res
|
||||
}
|
||||
console.log(wdValue.value.jxsajajdyfx);
|
||||
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
|
||||
// 比较ccl值的方法
|
||||
const compareCclValues = (data) => {
|
||||
// 获取基准ccl值
|
||||
const baseCcl = wdValue.value.zaajZtgsList.ccl || '0%';
|
||||
const baseCclValue = parseFloat(baseCcl);
|
||||
|
||||
// 初始化结果数组
|
||||
const greaterThan = [];
|
||||
const lessThan = [];
|
||||
|
||||
// 遍历数据进行比较
|
||||
data.forEach(item => {
|
||||
const itemCcl = item.ccl || '0%';
|
||||
const itemCclValue = parseFloat(itemCcl);
|
||||
|
||||
if (itemCclValue > baseCclValue) {
|
||||
greaterThan.push(item);
|
||||
} else if (itemCclValue < baseCclValue) {
|
||||
lessThan.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
return { greaterThan, lessThan };
|
||||
}
|
||||
// 导出word
|
||||
const tableBox = ref(null);
|
||||
const downloadWithStyles = async () => {
|
||||
if (!tableBox.value?.innerHTML) return;
|
||||
try {
|
||||
// 将类样式转换为行内样式的函数
|
||||
const convertClassesToInlineStyles = (html) => {
|
||||
// 创建临时DOM元素
|
||||
const tempDiv = document.createElement('div');
|
||||
tempDiv.innerHTML = html;
|
||||
|
||||
// 定义样式映射
|
||||
const styleMap = {
|
||||
'.report-container': {
|
||||
'padding': '20px',
|
||||
'color': '#000'
|
||||
},
|
||||
'.main-title': {
|
||||
'font-size': '22pt',
|
||||
'font-family': '黑体, SimHei, Microsoft YaHei',
|
||||
'text-align': 'center',
|
||||
'font-weight': 'bold',
|
||||
'line-height': '30pt'
|
||||
},
|
||||
'.section-title': {
|
||||
'font-size': '16pt',
|
||||
'font-family': '黑体, SimHei, Microsoft YaHei',
|
||||
'line-height': '30pt',
|
||||
'text-indent': '2em',
|
||||
'font-weight': 'bold'
|
||||
},
|
||||
'.body-text': {
|
||||
'font-size': '16pt',
|
||||
'font-family': '仿宋_GB2312',
|
||||
'line-height': '30pt',
|
||||
'text-indent': '2em'
|
||||
},
|
||||
'.font-bold': {
|
||||
'font-weight': '600'
|
||||
},
|
||||
'.right-align': {
|
||||
'text-align': 'right',
|
||||
'margin-left': 'auto',
|
||||
'width': 'fit-content'
|
||||
}
|
||||
};
|
||||
|
||||
// 遍历所有元素,应用行内样式
|
||||
const elements = tempDiv.querySelectorAll('*');
|
||||
elements.forEach(element => {
|
||||
// 获取元素的所有类名
|
||||
const classes = element.className.split(' ').filter(c => c);
|
||||
|
||||
// 为每个类名应用对应的样式
|
||||
classes.forEach(className => {
|
||||
const styles = styleMap[`.${className}`];
|
||||
if (styles) {
|
||||
Object.entries(styles).forEach(([property, value]) => {
|
||||
element.style[property] = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 返回转换后的HTML
|
||||
return tempDiv.innerHTML;
|
||||
};
|
||||
|
||||
// 转换样式并构建导出内容
|
||||
let inlineStyledContent = convertClassesToInlineStyles(tableBox.value.innerHTML);
|
||||
|
||||
// 处理图表转换为图片
|
||||
const tempExportDiv = document.createElement('div');
|
||||
tempExportDiv.innerHTML = inlineStyledContent;
|
||||
|
||||
// 直接在原始DOM中查找所有图表容器
|
||||
const originalChartContainers = tableBox.value.querySelectorAll('div[id]');
|
||||
for (const originalContainer of originalChartContainers) {
|
||||
try {
|
||||
// 获取图表实例
|
||||
const chart = echarts.getInstanceByDom(originalContainer);
|
||||
if (chart) {
|
||||
// 确保图表已渲染并获取完整大小
|
||||
const containerWidth = originalContainer.offsetWidth;
|
||||
const containerHeight = originalContainer.offsetHeight;
|
||||
|
||||
// 调整图表大小以确保完整渲染
|
||||
chart.resize({
|
||||
width: containerWidth,
|
||||
height: containerHeight
|
||||
});
|
||||
|
||||
// 等待一小段时间确保图表渲染完成
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
|
||||
// 获取图表的base64图片,设置合适的尺寸
|
||||
const imgSrc = chart.getDataURL({
|
||||
pixelRatio: 2, // 提高图片清晰度
|
||||
backgroundColor: '#fff',
|
||||
width: containerWidth,
|
||||
height: containerHeight
|
||||
});
|
||||
|
||||
// 在临时DOM中查找对应的容器并替换
|
||||
const tempContainer = tempExportDiv.querySelector(`div[id="${originalContainer.id}"]`);
|
||||
if (tempContainer) {
|
||||
// 创建图片元素替换图表容器
|
||||
const img = document.createElement('img');
|
||||
img.src = imgSrc;
|
||||
// 使用内联样式确保在Word中占满宽度
|
||||
img.setAttribute('style', 'width: 100%; height: auto; margin: 20px 0;');
|
||||
// 替换容器
|
||||
tempContainer.style.textIndent = '0em';
|
||||
tempContainer.parentNode.replaceChild(img, tempContainer);
|
||||
tempContainer.style.textIndent = '0em';
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('转换图表为图片失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取处理后的HTML
|
||||
const processedContent = tempExportDiv.innerHTML;
|
||||
|
||||
const styledContent = `
|
||||
<div style="padding: 20px; color: #000;">
|
||||
${processedContent}
|
||||
</div>
|
||||
`;
|
||||
downloadDocWithStyle(styledContent, `刑事案件分析报告_${timeValidate(new Date(), 'ny')}`);
|
||||
} catch (error) {
|
||||
console.error('导出Word失败:', error);
|
||||
alert('导出Word失败,请检查控制台错误信息');
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.report-container {
|
||||
padding: 20px;
|
||||
height: 90%;
|
||||
overflow: auto;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
font-size: 22pt;
|
||||
font-family: '黑体, SimHei, Microsoft YaHei';
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
line-height: 30pt;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 16pt;
|
||||
font-family: '黑体, SimHei, Microsoft YaHei';
|
||||
line-height: 30pt;
|
||||
text-indent: 2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
font-size: 16pt;
|
||||
// font-family: ', FangSong, Microsoft YaHei';
|
||||
font-family: '仿宋_GB2312';
|
||||
line-height: 30pt;
|
||||
text-indent: 2em;
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.right-align {
|
||||
text-align: right;
|
||||
margin-left: auto;
|
||||
width: fit-content;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss"></style>
|
||||
@ -4,6 +4,7 @@
|
||||
<div class="xsaj">
|
||||
<JudgmentReport :search="search" v-if="xzlx === '02'" />
|
||||
<Xsaj :search="search" v-if="xzlx === '03'" />
|
||||
<Zaaj :search="search" v-if="xzlx === '04'" />
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@ -13,6 +14,8 @@
|
||||
import { ref, reactive, watch } from 'vue'
|
||||
import JudgmentReport from './AnalysisReport/index.vue'
|
||||
import Xsaj from './caseFile/xsaj.vue'
|
||||
import Zaaj from './caseFile/zaaj.vue'
|
||||
|
||||
const title = ref('详情')
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
|
||||
@ -318,6 +318,7 @@ const onSearch = () => {
|
||||
|
||||
let len = []
|
||||
xzlx.value = Array.isArray(searchList.value.lx) ? searchList.value.lx[0][0] : ''
|
||||
console.log(xzlx.value);
|
||||
const bjlbs = Array.isArray(searchList.value.lx) ? searchList.value.lx.map(item => {
|
||||
len.push(item[0])
|
||||
return item[item.length - 1]
|
||||
@ -512,7 +513,6 @@ const visible = ref(false)
|
||||
const search = ref({})
|
||||
const handleYP = () => {
|
||||
visible.value = true
|
||||
console.log(searchList.value.lx);
|
||||
|
||||
if (searchList.value.lx.length == 0) {
|
||||
xzlx.value = '02'
|
||||
@ -541,6 +541,10 @@ const handleYP = () => {
|
||||
}
|
||||
break;
|
||||
case '04':
|
||||
search.value = {
|
||||
startTime: searchList.value.datetimes ? searchList.value.datetimes[0] : '',
|
||||
endTime: searchList.value.datetimes ? searchList.value.datetimes[1] : '',
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">区域布控预警{{ title }} </span>
|
||||
<div>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform">
|
||||
</FormMessage>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, watch } from "vue";
|
||||
import AddFrom from "../components/addFrom.vue";
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => { }
|
||||
}
|
||||
});
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = ref([])
|
||||
watch(() => props.dict, (res) => {
|
||||
if (res) {
|
||||
formData.value = [
|
||||
{ label: "预警人姓名", prop: "yjRyxm", type: "input" },
|
||||
{ label: "身份证号", prop: "yjRysfzh", type: "input" },
|
||||
{ label: "电话", prop: "yjRysjh", type: "input" },
|
||||
{ label: "年龄", prop: "nl", type: "input" },
|
||||
{ label: "性别", prop: "xb", type: "input" },
|
||||
{ label: "相似度", prop: "xsd", type: "input" },
|
||||
{ label: "预警时间", prop: "yjSj", type: "input" },
|
||||
{ label: "籍贯", prop: "yjRyhjjg", type: "input" },
|
||||
{ label: "预警次数", prop: "yjJrcs", type: "input" },
|
||||
{ label: "预警标签", prop: "yjbqmc", type: "input" },
|
||||
{ label: "所属部门", prop: "ssbm", type: "input" },
|
||||
{ label: "所属县局", prop: "ssxgaj", type: "input" },
|
||||
{ label: "所属市局", prop: "sssgaj", type: "input" },
|
||||
{ label: "预警来源", prop: "yjLylx", type: "select", options: props.dict.D_BZ_YJLY },
|
||||
{ label: "预警级别", prop: "yjJb", type: "select", options: props.dict.D_BZ_YJJB },
|
||||
{ label: "预警类型", prop: "yjLx", type: "select", options: props.dict.D_BZ_YJLX },
|
||||
{ label: "预警地址", prop: "yjDz", type: "input", type: "textarea" },
|
||||
{ label: "预警内容", prop: "yjNr", type: "input", type: "textarea" },
|
||||
|
||||
|
||||
|
||||
// { label: "组合大类", prop: "sfdlmc", type: "input" },
|
||||
// { label: "组合小类", prop: "sfzlmc", type: "input" },
|
||||
// { label: "组合预警次数", prop: "sfcs", type: "input", lx: "number" },
|
||||
|
||||
// { label: "预警分值", prop: "sffz", type: "input", lx: "number" },
|
||||
// { label: "处置状态", prop: "czzt", type: "select", options: props.dict.D_GSXT_YJXX_CZZT },
|
||||
|
||||
// { label: "接警员姓名", prop: "jjyxm", type: "input" },
|
||||
// { label: "预警内容", prop: "yjNr", type: "textarea", width: "100%" },
|
||||
]
|
||||
}
|
||||
|
||||
}, { deep: true, immediate: true })
|
||||
const listQuery = ref({}); //表单
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("详情");
|
||||
|
||||
const init = (row) => {
|
||||
dialogForm.value = true;
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${row.id}`).then((res) => {
|
||||
console.log(res);
|
||||
|
||||
listQuery.value = {
|
||||
...res,
|
||||
nl: IdCard(res.yjRysfzh, 3) || "",
|
||||
xb: IdCard(res.yjRysfzh, 2) || "",
|
||||
xsd: res.xsd + '%'
|
||||
}
|
||||
|
||||
})
|
||||
// yjzxZhyjSelectList(row.id).then(res => {
|
||||
// listQuery.value = {
|
||||
// ...res,
|
||||
// // nl: IdCard(res.yjRysfzh, 3) || "",
|
||||
// // xb: IdCard(res.yjRysfzh, 2) || "",
|
||||
// xsd: res.xsd + '%'
|
||||
// }
|
||||
// })
|
||||
};
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
loading.value = false;
|
||||
dialogForm.value = false;
|
||||
listQuery.value = {}
|
||||
};
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep {
|
||||
.el-form-item__content {
|
||||
align-items: normal;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,50 @@
|
||||
<template>
|
||||
<el-dialog title="处置建议" v-model="visible" width="50%" v-if="visible" @close="closeHndle">
|
||||
<el-form :model="form" ref="formRef" :rules="rules" label-width="120px" >
|
||||
<el-form-item label="处置建议" prop="jynr">
|
||||
<el-input v-model="form.jynr" placeholder="请输入处置建议" type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
<div class="flex just-center">
|
||||
<el-button type="primary" @click="okSubmit">确定</el-button>
|
||||
<el-button @click="closeHndle">返回</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import { ref , defineExpose} from 'vue'
|
||||
const emit = defineEmits(['okSubmit'])
|
||||
const visible = ref(false)
|
||||
const formRef = ref()
|
||||
const form = ref({})
|
||||
const rules = ref({
|
||||
jynr: [
|
||||
{ required: true, message: '请输入处置建议', trigger: 'blur' }
|
||||
]
|
||||
})
|
||||
const init = (row) => {
|
||||
visible.value = true;
|
||||
form.value.yjid = row.id;
|
||||
}
|
||||
|
||||
const closeHndle = () => {
|
||||
visible.value = false;
|
||||
form.value = {};
|
||||
}
|
||||
|
||||
const okSubmit = async () => {
|
||||
await formRef.value.validate((valid) => {
|
||||
if (!valid) return;
|
||||
let params = {...form.value , lylx:'04'}
|
||||
qcckPost(params,'/mosty-gsxt/yjxx/czjy/insert').then((res) => {
|
||||
emit('okSubmit', {...form.value})
|
||||
closeHndle()
|
||||
})
|
||||
})
|
||||
}
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
@ -0,0 +1,57 @@
|
||||
<template>
|
||||
<el-dialog :title="`组合预警次数详情(${pageData.tableData.length})`" v-model="dialogVisible" width="60%">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
>
|
||||
</MyTable>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet } from "@/api/qcckApi.js";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { ref , reactive , defineExpose} from 'vue'
|
||||
const dialogVisible = ref(false)
|
||||
const pageData = reactive({
|
||||
tableData: [{jqbh:'JQBH-43',bjr:'张三',bjrdh:'15665255545',bjrsfzh:'510156565656525565',yjnr:'xxxxxxxxx',jsj:'2023-08-24 15:00:00'}], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
loading: false,
|
||||
haveControls: false,
|
||||
},
|
||||
tableHeight:600,
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
tableColumn: [
|
||||
{ label: "警情编号", prop: "jjdbh"},
|
||||
{ label: "报警人", prop: "bjrmc" },
|
||||
{ label: "报警人电话", prop: "bjdh" },
|
||||
{ label: "报警人身份证", prop: "bjrzjhm"},
|
||||
{ label: "预警内容", prop: "bjnr", showOverflowTooltip: true },
|
||||
{ label: "报警时间", prop: "bjsj", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const init = (row) => {
|
||||
dialogVisible.value = true;
|
||||
pageData.tableConfiger.loading = true;
|
||||
pageData.tableData = []
|
||||
qcckGet({yjid:row.id},'/mosty-gsxt/yjzxZhyjxq/getPageList').then((res)=>{
|
||||
pageData.tableData = res || [];
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(()=>{
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
@ -0,0 +1,376 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="区域布控预警">
|
||||
<!-- <el-button>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button> -->
|
||||
<el-button type="success" @click="openSearch">
|
||||
<Search style="width: 1em; height: 1em; margin-right: 8px" />
|
||||
<span style="vertical-align: middle" v-if="!search">搜索</span>
|
||||
<span style="vertical-align: middle" v-else>关闭搜索</span>
|
||||
</el-button>
|
||||
<el-button type="primary" @click="exportExl">导出</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" v-if="search">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xsd="{ row }">
|
||||
{{ `${row.xsd}%` }}
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="04" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_BZ_YJLY,
|
||||
D_BZ_YJJB,
|
||||
D_BZ_YJLX
|
||||
})
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [{ sfcs: 1 }],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 200,
|
||||
tableColumn: [
|
||||
{ label: "预警人姓名", prop: "yjRyxm" },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjSj", width: 200 },
|
||||
{ label: "预警标签", prop: "yjbqmc" },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 200 },
|
||||
{ label: "预警来源", prop: "yjLylx", showSolt: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "车牌号", prop: "yjClcph" },
|
||||
{ label: "布控区域名称", prop: "bkqymc" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
// let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
// permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
// let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
// let obj = rols.find(item => {
|
||||
// return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
// })
|
||||
// roleCode.value = obj ? true : false;
|
||||
tabHeightFn();
|
||||
getList();
|
||||
gettbGsxtBqglSelectList()
|
||||
});
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的组合预警API接口
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
qcckPost({ promes }, "/mosty-gsxt/tbYjxx/getQybkPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqzhSelectList({}).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
const assessShow = ref(false)
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxZhyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 搜索栏
|
||||
const search = ref(false)
|
||||
const openSearch = () => {
|
||||
search.value = !search.value
|
||||
nextTick(() => {
|
||||
tabHeightFn()
|
||||
})
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
if (search.value) {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
} else {
|
||||
pageData.tableHeight = window.innerHeight - 250;
|
||||
}
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
|
||||
const titleObj = {
|
||||
yjRyxm: "姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjRysjh: "电话",
|
||||
xsd: "相似度",
|
||||
yjJrcs: "预警次数",
|
||||
yjLx: "预警类型",
|
||||
yjLylx: "预警来源",
|
||||
yjJb: " 预警级别",
|
||||
yjbqmc: "预警标签",
|
||||
yjSj: "预警时间",
|
||||
czzt_cname: "处置状态",
|
||||
ssbm: "所属部门",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.yjLx, D_BZ_YJLX),
|
||||
czzt_cname: getMultiDictVal(item.yjLylx, D_BZ_YJLY),
|
||||
bqys_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '组合预警')
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</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>
|
||||
@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<div class="warning-item">
|
||||
|
||||
<el-divider content-position="left">处置建议</el-divider>
|
||||
<div class="item-row">
|
||||
<div class="info-item">
|
||||
<span class="text">预警人姓名:{{ list.yjRyxm }}</span>
|
||||
<span class="text"> 预警人员手机号:{{ list.yjRysjh }}</span>
|
||||
<span class="text"> 身份证号码:{{ list.yjRysfzh }}</span>
|
||||
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="text">相似度:{{ list.xsd }}%</span>
|
||||
<span class="text">预警时间:{{ list.yjSj }}</span>
|
||||
<span class="text">籍贯:{{ list.yjRyhjjg }}</span>
|
||||
<span class="text">预警次数:{{ list.yjJrcs }}</span>
|
||||
<span class="text">预警标签:{{ list.yjbqmc }}</span>
|
||||
<span class="text">所属部门:{{ list.ssbm }}</span>
|
||||
|
||||
</div>
|
||||
<div class="info-item flex">
|
||||
<span class="text flex">预警类型:
|
||||
<DictTag :value="list.yjLx" :options="dict.D_BZ_YJLX" />
|
||||
</span>
|
||||
<span class="text flex">预警来源:
|
||||
<DictTag :value="list.yjLylx" :options="dict.D_BZ_YJLY" />
|
||||
</span>
|
||||
<span class="text flex"> 预警级别:
|
||||
<DictTag :value="list.yjJb" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="text"> 预警地址:{{ list.yjDz }}</span>
|
||||
</div>
|
||||
<div class="info-item">预警内容:<span>{{ list.yjNr || '暂无' }}</span></div>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">反馈内容</el-divider>
|
||||
<div class="item-row" v-for="(it, idx) in Fklist" :key="idx">
|
||||
<div class="info-item">
|
||||
<span class="text">处置地址:{{ it.czdz }}</span>
|
||||
<span class="text">处置时间:{{ it.czsj }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="text">常控不尿检理由:<span>{{ it.ckbnjly || '暂无' }}</span></span>
|
||||
<span class="text">常控处置反馈补充信息:<span>{{ it.ckczbcxx || '暂无' }}</span></span>
|
||||
<span class="text">常控立线侦察评估:<span>{{ it.cklxzcpg || '暂无' }}</span></span>
|
||||
<span class="text">常控立线侦察评估依据:<span>{{ it.cklxzcpgyj || '暂无' }}</span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-empty v-if="Fklist.length === 0" description="暂无数据" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
|
||||
|
||||
const props = defineProps({
|
||||
/** 表格行数据 */
|
||||
row: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
D_GS_SSYJ: [],
|
||||
D_GSXT_YJXX_CZZT: []
|
||||
})
|
||||
},
|
||||
})
|
||||
const list = ref({})
|
||||
const Fklist = ref([])
|
||||
|
||||
onMounted(() => {
|
||||
if (!props.row.id) {
|
||||
return
|
||||
}
|
||||
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${props.row.id}`).then((res) => {
|
||||
list.value = res || {}
|
||||
console.log('list: ', list.value);
|
||||
|
||||
})
|
||||
qcckGet({}, '/mosty-gsxt/yjzxZhyj/' + props.row.id).then((res) => {
|
||||
Fklist.value = res.fkList || []
|
||||
})
|
||||
})
|
||||
// console.log('row😃: ', props.row);
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.warning-item {
|
||||
width: 100%;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.item-row {
|
||||
border-bottom: 1px dashed #e8e8e8;
|
||||
line-height: 36px;
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
line-height: 36px;
|
||||
width: 100%;
|
||||
|
||||
.text {
|
||||
display: inline-block;
|
||||
width: 25%;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -33,6 +33,9 @@
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="props.dict.D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="props.dict.D_GSXT_YJXX_CZZT" />
|
||||
@ -139,7 +142,7 @@ const pageData = reactive({
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
<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> -->
|
||||
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 160) : (pageData.tableHeight - 110)"
|
||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" excelTitle="人像预警" />
|
||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT,D_BZ_YJLY }" :search="search" excelTitle="人像预警" />
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
||||
@ -70,7 +70,7 @@
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLYXT" />
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
@ -115,7 +115,7 @@ import * as XLSX from "xlsx";
|
||||
|
||||
|
||||
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,D_BZ_YJLY } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_BZ_YJJB", "D_BZ_YJLYXT","D_BZ_YJLY")
|
||||
const searchBox = ref(); //搜索框
|
||||
const shortcuts = [
|
||||
{
|
||||
@ -172,14 +172,14 @@ const pageData = reactive({
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "年龄", prop: "nl", showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true,showSolt:D_BZ_YJLY },
|
||||
{ label: "性别", prop: "xb", showSolt: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true },
|
||||
{ label: "预警地点", prop: "yjDz", showOverflowTooltip: true },
|
||||
{ label: "预警次数", prop: "yjCs", showOverflowTooltip: true },
|
||||
{ label: "布控手机号", prop: "yjRysjh", showOverflowTooltip: true },
|
||||
{ label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
// { label: "布控车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
|
||||
@ -33,6 +33,9 @@
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="props.dict.D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="props.dict.D_GSXT_YJXX_CZZT" />
|
||||
@ -135,6 +138,8 @@ const pageData = reactive({
|
||||
{ label: "标题", prop: "yjBt" },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
|
||||
|
||||
|
||||
]
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
<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> -->
|
||||
<LocalWarning :maxHeight="search ? (pageData.tableHeight - 160) : (pageData.tableHeight - 110)"
|
||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" :search="search" excelTitle="车辆预警" />
|
||||
ref="localWarningRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT ,D_BZ_YJLY}" :search="search" excelTitle="车辆预警" />
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog v-model="showDc" title="导出预警" width="80%">
|
||||
@ -64,7 +64,7 @@
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLYXT" />
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
@ -107,7 +107,7 @@ import FileSaver from "file-saver";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import * as XLSX from "xlsx";
|
||||
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_YJLY } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_BZ_YJJB", "D_BZ_YJLY")
|
||||
const searchBox = ref(); //搜索框
|
||||
const shortcuts = [
|
||||
{
|
||||
@ -162,7 +162,7 @@ const pageData = reactive({
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "年龄", prop: "nl", showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true , showSolt: true },
|
||||
{ label: "性别", prop: "xb", showSolt: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true },
|
||||
|
||||
Reference in New Issue
Block a user