lcw
This commit is contained in:
@ -4,6 +4,11 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
@ -82,6 +87,7 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvCar/components/addForm.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -157,7 +163,7 @@ onMounted(() => {
|
||||
});
|
||||
// 移入
|
||||
const handleSend=()=>{
|
||||
|
||||
|
||||
}
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
|
||||
@ -4,6 +4,12 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
<!-- <el-button type="danger" size="small" @click="handleRow()">批量删除</el-button> -->
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
@ -36,6 +42,8 @@
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="handleSend(row.id)">移入</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
@ -45,7 +53,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 编辑 - 新增-->
|
||||
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
|
||||
<EditForm v-if="show" @updateDate="getList" qtlx="02" ref="editFormDiloag" :dic="{D_BZ_XB,D_GS_ZDQT_LB,D_GS_ZDQT_FXDJ,D_GS_ZDR_CZZT}" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -57,6 +65,8 @@ import EditForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/compo
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDR_CZZT,D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT","D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||
const showzxs = ref(false);
|
||||
@ -127,7 +137,7 @@ const pageData = reactive({
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 150,
|
||||
controlsWidth: 180,
|
||||
tableColumn: [
|
||||
{ label: "群体名称", prop: "qtMc",width:150 },
|
||||
{ label: "群体类别", prop: "qtLb" , showSolt: true,width:150 },
|
||||
@ -136,13 +146,16 @@ const pageData = reactive({
|
||||
{ label: "背景信息", prop: "bgxx", showSolt: true ,width:150 },
|
||||
{ label: "管辖单位", prop: "gxSsdwmc",width:150 },
|
||||
{ label: "状态", prop: "qtZt", showSolt: true,width:150 },
|
||||
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true,width:400 },
|
||||
{ label: "标签", prop: "bqList", showSolt: true ,showOverflowTooltip:true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList();
|
||||
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
});
|
||||
|
||||
//移入
|
||||
|
||||
@ -4,6 +4,13 @@
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add')">新增</el-button>
|
||||
<!-- <el-button type="danger" size="small" @click="handleRow()">批量删除</el-button> -->
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -46,6 +53,8 @@
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="success" @click="handleSend(row.id)">移入</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
@ -55,7 +64,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList"
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList" rylx="02"
|
||||
:dic="{ D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
|
||||
</div>
|
||||
</template>
|
||||
@ -69,6 +78,7 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } =
|
||||
@ -126,7 +136,7 @@ const pageData = reactive({
|
||||
tableColumn: [
|
||||
{ label: "姓名", prop: "ryXm", width: 150 },
|
||||
{ label: "性别", prop: "ryXb", showSolt: true, width: 100 },
|
||||
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100},
|
||||
{ label: "籍贯", prop: "ryJg", showSolt: true, width: 100 },
|
||||
{ label: "身份证", prop: "rySfzh", width: 200 },
|
||||
{ label: "民族", prop: "ryMz", showSolt: true, width: 100 },
|
||||
{ label: "户籍地区划", prop: "hjdQh", showSolt: true, width: 150 },
|
||||
@ -135,10 +145,12 @@ const pageData = reactive({
|
||||
{ label: "审核状态", prop: "zdrZt", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
});
|
||||
|
||||
// 搜索
|
||||
@ -161,7 +173,7 @@ const changeSize = (val) => {
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// 人员类型D_ZDRY_RYLX(01 重点 02 普通〉
|
||||
let data = { rylx:'02',...pageData.pageConfiger, ...queryFrom.value };
|
||||
let data = { rylx: '02', ...pageData.pageConfiger, ...queryFrom.value };
|
||||
qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
@ -251,7 +263,7 @@ const addEdit = (type, row) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
|
||||
@ -2,79 +2,89 @@
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<!-- <el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请</el-button>
|
||||
</template>
|
||||
<div class="flex just-center">
|
||||
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)" >{{ it.zdmc }}</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<div class="flex just-center">
|
||||
<el-button size="small" type="primary" v-for="it in D_GS_BK_SQLX" :key="it.dm" @click="handleApplication(it)">{{
|
||||
it.zdmc }}</el-button>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-popover placement="bottom" :visible="visiblefp" :width="400" trigger="click">
|
||||
<template #reference>
|
||||
<el-button size="small" type="primary" @click="(visiblefp = !visiblefp), (visible = false)" >指定分配</el-button>
|
||||
</template>
|
||||
<div>
|
||||
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||
<div class="flex just-center mt10">
|
||||
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
|
||||
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button> -->
|
||||
<div>
|
||||
<el-input readonly v-model="obj.fpmc" @click="chooseUserVisible = true" placeholder="请选择民警"></el-input>
|
||||
<div class="flex just-center mt10">
|
||||
<el-button @click="(visiblefp = false), (obj = {})" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handlefp" size="small">分配</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-button size="small" type="primary" @click="handleZxs">转线索</el-button>
|
||||
<el-button size="small" type="primary" @click="handleMove">移交管控</el-button> -->
|
||||
<el-button type="primary" size="small" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
<template #ryxx="{ row }">
|
||||
<div class="flex">
|
||||
<img src="" alt="" style="width: 80px;height: 90px;" />
|
||||
<ul class="tl ml10" style="flex:1 0 0">
|
||||
<li class="one_text_detail">姓名:{{ row.ryXm }}</li>
|
||||
<li class="flex one_text_detail">性别:<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" /></li>
|
||||
<li class="flex one_text_detail">籍贯:<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM"/></li>
|
||||
<li class="flex one_text_detail">性别:
|
||||
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
|
||||
</li>
|
||||
<li class="flex one_text_detail">籍贯:
|
||||
<DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
|
||||
</li>
|
||||
<li class="one_text_detail">身份证:{{ row.rySfzh }}</li>
|
||||
<li class="one_text_detail">出生日期:{{ row.ryCsrq }}</li>
|
||||
<li class="flex one_text_detail">民族:<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" /></li>
|
||||
<li class="flex one_text_detail">民族:
|
||||
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<template #jzxx="{ row }">
|
||||
<div class="flex one_text_detail">户籍地区划:<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" /></div>
|
||||
<div class="flex one_text_detail">户籍地区划:
|
||||
<DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
|
||||
</div>
|
||||
<div class="flex one_text_detail">户籍派出所:{{ row.hjdPcsmc }}</div>
|
||||
<div class="flex one_text_detail">户籍地详址:{{ row.hjdXz }}</div>
|
||||
</template>
|
||||
|
||||
<template #bqList="{ row }">
|
||||
<ul >
|
||||
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{ item.bqFz || 0 }} 分) </li>
|
||||
<ul>
|
||||
<li class="one_text_detail marks mb4" :key="index" v-for="(item, index) in row.bqList">{{ item.bqMc }}({{
|
||||
item.bqFz || 0 }} 分) </li>
|
||||
</ul>
|
||||
</template>
|
||||
<template #gxdw="{ row }">
|
||||
<div class="flex one_text_detail">管辖单位:{{ row.gxSsbmmc }}</div>
|
||||
<div class="flex">人员级别:<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB"/> </div>
|
||||
<div class="flex">人员级别:
|
||||
<DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
|
||||
</div>
|
||||
<div class="flex one_text_detail">管控原因:{{ row.zdrLkyy }}</div>
|
||||
<div class="flex">管控状态:<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" /></div>
|
||||
<div class="flex">管控状态:
|
||||
<DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
|
||||
</div>
|
||||
</template>
|
||||
<template #zdrCzzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
|
||||
@ -88,27 +98,24 @@
|
||||
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)" >编辑</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)" >详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList" :dic="{BD_BK_CLYJBQ,D_GS_ZDR_RYJB,D_BZ_XB,D_BZ_MZ,D_BZ_XZQHDM,D_GS_ZDR_BK_ZT,D_GS_ZDR_CZZT,D_GS_BQ_ZL,D_GS_BQ_LB,D_GS_BQ_LX,D_GS_ZDR_YJDJ,D_GS_BK_SSJZ}"/>
|
||||
<AddForm ref="addFormDiloag" @updateDate="getList"
|
||||
:dic="{ BD_BK_CLYJBQ, D_GS_ZDR_RYJB, D_BZ_XB, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ }" />
|
||||
<!-- 选择用户 -->
|
||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds"/>
|
||||
<ChooseUser v-model="chooseUserVisible" @choosedUsers="handleUserSelected" :roleIds="roleIds" />
|
||||
<!-- 转线索 -->
|
||||
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX,D_GS_XS_QTLX }"></ZxsForm>
|
||||
<ZxsForm v-if="showzxs" ref="zxsDilof" @change="getList"
|
||||
:dic="{ D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX }"></ZxsForm>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -121,10 +128,11 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost,qcckDelete } from "@/api/qcckApi.js";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDQT_ZT,D_GS_ZDR_RYJB, D_BZ_XB,BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT","D_GS_ZDR_RYJB","D_BZ_XB","D_BZ_MZ","D_BZ_XZQHDM","D_GS_ZDR_BK_ZT","D_GS_ZDR_CZZT","D_GS_BQ_ZL","D_GS_BQ_LB","D_GS_BQ_LX","D_GS_BK_SSJZ","D_GS_BK_SQLX","D_BZ_SF","D_GS_XS_LY","D_BZ_SSZT","D_GS_XS_LX","D_GS_XS_QTLX","BD_BK_CLYJBQ","D_GS_ZDR_YJDJ");
|
||||
const { D_GS_ZDQT_ZT, D_GS_ZDR_RYJB, D_BZ_XB, BD_BK_CLYJBQ, D_BZ_MZ, D_BZ_XZQHDM, D_GS_ZDR_BK_ZT, D_GS_ZDR_CZZT, D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX, D_GS_ZDR_YJDJ, D_GS_BK_SSJZ, D_GS_BK_SQLX, D_BZ_SF, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDQT_ZT", "D_GS_ZDR_RYJB", "D_BZ_XB", "D_BZ_MZ", "D_BZ_XZQHDM", "D_GS_ZDR_BK_ZT", "D_GS_ZDR_CZZT", "D_GS_BQ_ZL", "D_GS_BQ_LB", "D_GS_BQ_LX", "D_GS_BK_SSJZ", "D_GS_BK_SQLX", "D_BZ_SF", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX", "BD_BK_CLYJBQ", "D_GS_ZDR_YJDJ");
|
||||
const obj = ref({});
|
||||
const showzxs = ref(false);
|
||||
const zxsDilof = ref();
|
||||
@ -179,9 +187,9 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 150,
|
||||
tableColumn: [
|
||||
{ label: "车牌号", prop: "hphm",showOverflowTooltip:true },
|
||||
{ label: "车牌号", prop: "hphm", showOverflowTooltip: true },
|
||||
{ label: "车架号", prop: "clCjh" },
|
||||
{ label: "车辆颜色", prop: "clYs",showOverflowTooltip:true},
|
||||
{ label: "车辆颜色", prop: "clYs", showOverflowTooltip: true },
|
||||
{ label: "车辆所有人", prop: "clSyr" },
|
||||
{ label: "管辖单位", prop: "gxSsbmmc", showSolt: true },
|
||||
{ label: "管控民警姓名", prop: "gkMjXm", showSolt: true },
|
||||
@ -189,8 +197,12 @@ const pageData = reactive({
|
||||
// { label: "审核状态", prop: "zdrZt", showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
console.log( getItem('roleList'));
|
||||
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
@ -249,7 +261,7 @@ const handleUserSelected = (val) => {
|
||||
// 处理分配
|
||||
const handlefp = () => {
|
||||
if (ids.value.length === 0) return ElMessage.error("请先选择需要布控的重点人");
|
||||
qcckPost({ ids: ids.value, uid: obj.value.fpid },"/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
|
||||
qcckPost({ ids: ids.value, uid: obj.value.fpid }, "/mosty-gsxt/tbGsxtZdry/addGkmj").then(() => {
|
||||
ElMessage.success("分配成功");
|
||||
visible.value = false;
|
||||
visiblefp.value = false;
|
||||
@ -285,7 +297,7 @@ const handleZxs = () => {
|
||||
const deleteRow = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
|
||||
qcckPost({id}, "/mosty-gsxt/tbGsxtZdcl/delete" ).then((res) => {
|
||||
qcckPost({ id }, "/mosty-gsxt/tbGsxtZdcl/delete").then((res) => {
|
||||
ElMessage.success("删除成功");
|
||||
getList();
|
||||
});
|
||||
@ -296,7 +308,7 @@ const deleteRow = (id) => {
|
||||
//新增编辑
|
||||
const addEdit = (type, row) => {
|
||||
show.value = true;
|
||||
nextTick(()=>{
|
||||
nextTick(() => {
|
||||
addFormDiloag.value.init(type, row);
|
||||
})
|
||||
};
|
||||
@ -311,7 +323,7 @@ const tabHeightFn = () => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.marks{
|
||||
.marks {
|
||||
padding: 0 4px;
|
||||
white-space: nowrap;
|
||||
background: #73acf1;
|
||||
@ -323,5 +335,4 @@ const tabHeightFn = () => {
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@ -67,6 +67,14 @@ const disabled = ref(false)
|
||||
const showBut = ref()
|
||||
const title = ref('新增')
|
||||
const portrayal = ref(false)
|
||||
const props = defineProps({
|
||||
qtlx: {
|
||||
type: String,
|
||||
default: '01'
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['updateDate'])
|
||||
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true
|
||||
if (type == 'add') {
|
||||
@ -168,7 +176,6 @@ const submit = async () => {
|
||||
requestInfo.value.throwData(),
|
||||
personnel.value.throwData()
|
||||
]);
|
||||
|
||||
const datamasg = {
|
||||
...infoData,
|
||||
qtBjzl: backinfoData.qtbjxx,
|
||||
@ -177,7 +184,8 @@ const submit = async () => {
|
||||
qttz: featinfoData,
|
||||
zyxx: demandsInfoData,
|
||||
sqfj: requestInfoData.fileList.length > 0 ? JSON.stringify(requestInfoData.fileList) : "",
|
||||
zdryList: personnelData
|
||||
zdryList: personnelData,
|
||||
qtlx: props.qtlx
|
||||
}
|
||||
|
||||
const res = await tbGsxtZdqtAdd(datamasg)
|
||||
@ -206,7 +214,7 @@ const submit = async () => {
|
||||
message: '新增成功',
|
||||
type: 'success',
|
||||
})
|
||||
|
||||
emit('updateDate')
|
||||
close()
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
@ -68,7 +68,7 @@
|
||||
<el-link size="small" type="primary" v-if="row.qtZt == '01'" @click="handleSend(row.id)">办结</el-link>
|
||||
<el-link size="small" type="success" v-if="row.qtZt == '01'" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row.id)" v-if="isShiQzDelet">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -97,6 +97,7 @@ import EditForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_ZDR_CZZT, D_GS_BK_SQLX, D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDQT_LB, D_GS_ZDR_BK_ZT, D_GS_BQ_LX, D_GS_ZDQT_ZT, D_BZ_SF, D_BZ_XB, D_GS_XS_LY, D_BZ_SSZT, D_GS_XS_LX, D_GS_XS_QTLX } = proxy.$dict("D_GS_ZDR_CZZT", "D_GS_BK_SQLX", "D_GS_ZDQT_FXDJ", "D_GS_ZDR_RYJB", "D_GS_ZDQT_LB", "D_GS_ZDR_BK_ZT", "D_GS_BQ_LX", "D_GS_ZDQT_ZT", "D_BZ_SF", "D_BZ_XB", "D_GS_XS_LY", "D_BZ_SSZT", "D_GS_XS_LX", "D_GS_XS_QTLX"); //获取字典数据
|
||||
const showzxs = ref(false);
|
||||
@ -185,8 +186,10 @@ const pageData = reactive({
|
||||
{ label: "标签", prop: "bqList", showSolt: true, showOverflowTooltip: true, },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
@ -114,7 +114,13 @@ const showBut = ref(false)
|
||||
const listQuery = ref({});
|
||||
const butShow = ref(false)
|
||||
const title = ref('新增')
|
||||
const showData=ref(false)
|
||||
const showData = ref(false)
|
||||
const props = defineProps({
|
||||
rylx: {
|
||||
type: String,
|
||||
default: '01'
|
||||
}
|
||||
})
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
@ -207,7 +213,7 @@ const submit = async () => {
|
||||
info.value.throwData()
|
||||
// personnelTags.value.throwData(),
|
||||
]);
|
||||
tbGsxtZdrySave({...infoData,rylx:'01'}).then(res => {
|
||||
tbGsxtZdrySave({...infoData,rylx:props.rylx}).then(res => {
|
||||
proxy.$message({
|
||||
message: '新增成功',
|
||||
type: 'success',
|
||||
|
||||
@ -117,6 +117,7 @@ import AddForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { getItem } from "@/utils/storage.js";
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -188,9 +189,11 @@ const pageData = reactive({
|
||||
{ label: "入库时间", prop: "zdrRkkssj", },
|
||||
]
|
||||
});
|
||||
|
||||
const isShiQzDelet = ref(false)
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
tabHeightFn();
|
||||
const isShiQz = getItem('roleList').find(item => item.roleCode == 'JS_777777') != undefined
|
||||
if (isShiQz) isShiQzDelet.value = true
|
||||
if (route.query.id) {
|
||||
addEdit('x', {
|
||||
id: route.query.id
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
<div class="phone-input-container">
|
||||
<div class="inputGroup" v-for="(item, index) in listQuery.ryLxdh" :key="index">
|
||||
<el-input v-model="listQuery.ryLxdh[index]" class="group" placeholder="请输入电话号码" />
|
||||
<div class="flex align-center but" v-if="showBut">
|
||||
<div class="flex align-center but" >
|
||||
<el-button type="primary" :icon="Plus" circle @click="addPhone" title="添加电话号码"
|
||||
v-if="listQuery.ryLxdh.length - 1 == index" />
|
||||
<el-button type="success" :icon="Minus" circle @click="removePhone(index)" title="删除电话号码" />
|
||||
|
||||
308
src/views/backOfficeSystem/ces/components/QueryFormPanel.vue
Normal file
308
src/views/backOfficeSystem/ces/components/QueryFormPanel.vue
Normal file
@ -0,0 +1,308 @@
|
||||
<template>
|
||||
<section class="query-wrap">
|
||||
<div class="query-title">{{ title }}</div>
|
||||
<div class="query-grid">
|
||||
<div v-for="field in renderFields" :key="field.key" class="query-cell">
|
||||
<div class="cell-label">{{ field.label }}</div>
|
||||
<div class="cell-control" :class="{ 'is-checkbox': field.type === 'checkbox' }">
|
||||
<el-input clearable v-if="field.type === 'input'" v-model="formState[field.key]" class="control-input"
|
||||
:placeholder="field.placeholder || ''" />
|
||||
<el-input clearable v-else-if="field.type === 'number'" v-model="formState[field.key]" class="control-input"
|
||||
type="number" :placeholder="field.placeholder || ''" />
|
||||
<el-select clearable v-else-if="field.type === 'select'" v-model="formState[field.key]" class="control-select"
|
||||
:placeholder="field.placeholder || '请选择'" :multiple="field.multiple || false" collapse-tags
|
||||
collapse-tags-tooltip>
|
||||
<el-option v-for="item in field.options || []" :key="item.value ?? item" :label="item.label ?? item"
|
||||
:value="item.value ?? item" />
|
||||
</el-select>
|
||||
<el-date-picker clearable v-else-if="field.type === 'date'" v-model="formState[field.key]"
|
||||
class="control-date" type="date" :placeholder="field.placeholder || '请选择日期'" value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetime'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetime" :placeholder="field.placeholder || '请选择时间'"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'daterange'" v-model="formState[field.key]"
|
||||
class="control-date" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD" />
|
||||
<el-date-picker clearable v-else-if="field.type === 'datetimerange'" v-model="formState[field.key]"
|
||||
class="control-date" type="datetimerange" range-separator="至" start-placeholder="开始时间"
|
||||
end-placeholder="结束时间" value-format="YYYY-MM-DD HH:mm:ss" />
|
||||
<template v-else-if="field.type === 'department'">
|
||||
<MOSTY.Department clearable v-model="formState[field.key]" class="control-select" />
|
||||
</template>
|
||||
<div v-else-if="field.type === 'checkbox'" class=" checkbox-wrap">
|
||||
<el-checkbox v-model="formState[field.key]" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="query-action">
|
||||
<div>
|
||||
<slot name="but"></slot>
|
||||
</div>
|
||||
<div>
|
||||
<el-button size="small" type="primary" @click="handleSearch">{{ searchText }}</el-button>
|
||||
<el-button size="small" type="button" @click="handleReset">重置 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, reactive, watch } from 'vue'
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
default: '查询条件'
|
||||
},
|
||||
searchText: {
|
||||
type: String,
|
||||
default: '查询'
|
||||
},
|
||||
fields: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
searchArr: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['search', 'submit', 'reset'])
|
||||
const formState = reactive({})
|
||||
|
||||
const renderFields = computed(() => {
|
||||
const source = props.searchArr.length ? props.searchArr : props.fields
|
||||
return source.map((field) => ({
|
||||
...field,
|
||||
key: field.key || field.prop,
|
||||
type: field.type || field.showType || 'input'
|
||||
})).filter((field) => field.key)
|
||||
})
|
||||
|
||||
const getResetValue = (field) => {
|
||||
if (field.defaultVal !== undefined) {
|
||||
return Array.isArray(field.defaultVal) ? [...field.defaultVal] : field.defaultVal
|
||||
}
|
||||
if (field.type === 'checkbox') {
|
||||
return false
|
||||
}
|
||||
if (field.type === 'daterange' || field.type === 'datetimerange') {
|
||||
return []
|
||||
}
|
||||
if (field.type === 'select') {
|
||||
if (field.multiple) {
|
||||
return []
|
||||
}
|
||||
return null
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
const buildResetPayload = () => {
|
||||
const payload = {}
|
||||
renderFields.value.forEach((field) => {
|
||||
payload[field.key] = getResetValue(field)
|
||||
})
|
||||
return payload
|
||||
}
|
||||
|
||||
const setFormState = (value = {}) => {
|
||||
Object.keys(formState).forEach((key) => {
|
||||
delete formState[key]
|
||||
})
|
||||
renderFields.value.forEach((field) => {
|
||||
if (value[field.key] !== undefined) {
|
||||
formState[field.key] = Array.isArray(value[field.key]) ? [...value[field.key]] : value[field.key]
|
||||
return
|
||||
}
|
||||
formState[field.key] = getResetValue(field)
|
||||
})
|
||||
}
|
||||
|
||||
const getFormSnapshot = () => {
|
||||
const snapshot = {}
|
||||
renderFields.value.forEach((field) => {
|
||||
const value = formState[field.key]
|
||||
if (Array.isArray(value)) {
|
||||
snapshot[field.key] = [...value]
|
||||
return
|
||||
}
|
||||
snapshot[field.key] = value
|
||||
})
|
||||
return snapshot
|
||||
}
|
||||
|
||||
const handleSearch = () => {
|
||||
const payload = getFormSnapshot()
|
||||
emit('search', payload)
|
||||
emit('submit', payload)
|
||||
}
|
||||
|
||||
const handleReset = () => {
|
||||
const payload = buildResetPayload()
|
||||
setFormState(payload)
|
||||
emit('reset', true)
|
||||
emit('search', payload)
|
||||
emit('submit', payload)
|
||||
}
|
||||
|
||||
watch(
|
||||
renderFields,
|
||||
() => {
|
||||
setFormState(buildResetPayload())
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
defineExpose({
|
||||
formState,
|
||||
handleSearch,
|
||||
handleReset
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.query-wrap {
|
||||
border: 1px solid #b8d3ff;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.query-title {
|
||||
height: 32px;
|
||||
background: linear-gradient(to right, #9ed7ff, #e6f0f8);
|
||||
line-height: 32px;
|
||||
padding-left: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #0d2148;
|
||||
border-bottom: 1px solid #b8d3ff;
|
||||
}
|
||||
|
||||
.query-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.query-cell {
|
||||
display: flex;
|
||||
min-height: 40px;
|
||||
border-right: 1px solid #b8d3ff;
|
||||
border-bottom: 1px solid #b8d3ff;
|
||||
}
|
||||
|
||||
.query-cell:nth-child(4n) {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.cell-label {
|
||||
width: 130px;
|
||||
flex-shrink: 0;
|
||||
border-right: 1px solid #b8d3ff;
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cell-control {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding: 4px 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cell-control.is-checkbox {
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.control-input,
|
||||
.control-select,
|
||||
.control-date {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-input .el-input__wrapper),
|
||||
:deep(.control-select .el-select__wrapper),
|
||||
:deep(.control-date .el-input__wrapper) {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-height: 28px;
|
||||
border-radius: 0;
|
||||
box-shadow: 0 0 0 1px #b8d3ff inset;
|
||||
}
|
||||
|
||||
:deep(.control-date.el-date-editor) {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-date.el-date-editor .el-range-input) {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.control-input .el-input__inner),
|
||||
:deep(.control-select .el-select__placeholder),
|
||||
:deep(.control-date .el-input__inner) {
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
}
|
||||
|
||||
:deep(.control-date .el-range-input) {
|
||||
font-size: 14px;
|
||||
color: #0d2148;
|
||||
}
|
||||
|
||||
:deep(.control-date .el-range__icon),
|
||||
:deep(.control-date .el-range__close-icon) {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.checkbox-wrap {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
:deep(.checkbox-wrap .el-checkbox) {
|
||||
margin-right: 0;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
:deep(.checkbox-wrap .el-checkbox__inner) {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.query-action {
|
||||
height: 36px;
|
||||
display: flex;
|
||||
// justify-content: flex-end;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
height: 26px;
|
||||
min-width: 70px;
|
||||
border: 1px solid #0f5bbd;
|
||||
background: #0f5bbd;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
170
src/views/backOfficeSystem/ces/components/WarnDataTable.vue
Normal file
170
src/views/backOfficeSystem/ces/components/WarnDataTable.vue
Normal file
@ -0,0 +1,170 @@
|
||||
<template>
|
||||
<section class="table-wrap">
|
||||
<div class="table-box">
|
||||
<el-table ref="tableRef" v-loading="loading" :data="data" :row-key="rowKey" border stripe class="warn-data-table"
|
||||
@selection-change="onSelectionChange" :height="height">
|
||||
<el-table-column v-if="selectionMode !== 'none'" type="selection" :width="selectionColumnWidth"
|
||||
:align="selectionColumnAlign" />
|
||||
<el-table-column v-for="column in columns" :key="column.prop || column.label || column.type" :prop="column.prop"
|
||||
:type="column.type" :label="column.label" :width="column.width" :min-width="column.minWidth"
|
||||
:align="column.align" :show-overflow-tooltip="true">
|
||||
<template v-if="column.slotName" #default="scope">
|
||||
<slot v-if="column.slotName" :name="column.slotName" :row="scope.row" :column="column"
|
||||
:$index="scope.$index">
|
||||
{{ column.prop ? scope.row[column.prop] : '' }}
|
||||
</slot>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
columns: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
selectionMode: {
|
||||
type: String,
|
||||
default: 'multiple'
|
||||
},
|
||||
rowKey: {
|
||||
type: [String, Function],
|
||||
default: 'id'
|
||||
},
|
||||
selectionColumnWidth: {
|
||||
type: Number,
|
||||
default: 38
|
||||
},
|
||||
selectionColumnAlign: {
|
||||
type: String,
|
||||
default: 'center'
|
||||
},
|
||||
toolbarActions: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
{ key: 'sign', text: '批量签收', red: true },
|
||||
{ key: 'export', text: '批量导出' },
|
||||
{ key: 'analysis', text: '批量分析' },
|
||||
{ key: 'count', text: '计算人数' }
|
||||
]
|
||||
},
|
||||
tableHeight: {
|
||||
type: [Number, String],
|
||||
default: '600px'
|
||||
},
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
const height = ref()
|
||||
watch(() => props.tableHeight, (newVal) => {
|
||||
if (newVal) {
|
||||
height.value = newVal
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['selection-change', 'row-change'])
|
||||
const tableRef = ref()
|
||||
|
||||
const onSelectionChange = (selection) => {
|
||||
if (props.selectionMode === 'single' && selection.length > 1) {
|
||||
const selectedRow = selection[selection.length - 1]
|
||||
tableRef.value.clearSelection()
|
||||
tableRef.value.toggleRowSelection(selectedRow, true)
|
||||
emit('selection-change', [selectedRow])
|
||||
emit('row-change', selectedRow)
|
||||
return
|
||||
}
|
||||
emit('selection-change', selection)
|
||||
emit('row-change', selection[0] || null)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.table-wrap {
|
||||
margin-top: 10px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
:deep(.el-table--fit) {
|
||||
position: static;
|
||||
// width: calc(100% - 20px) !important;
|
||||
height: calc(100% - 100px);
|
||||
}
|
||||
|
||||
.tool-bar {
|
||||
height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
font-size: 14px;
|
||||
color: #1f56ab;
|
||||
}
|
||||
|
||||
.tool-link {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tool-link.red {
|
||||
color: #e51414;
|
||||
}
|
||||
|
||||
.table-box {
|
||||
border: 1px solid #b5ccf2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__inner-wrapper::before) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__header-wrapper th.el-table__cell) {
|
||||
background: #16263e !important;
|
||||
color: #fff !important;
|
||||
border-color: #b5ccf2;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__header-wrapper th.el-table__cell .cell) {
|
||||
text-align: center;
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
text-overflow: clip;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__body-wrapper td.el-table__cell) {
|
||||
border-color: #b5ccf2;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__cell) {
|
||||
font-size: 13px;
|
||||
color: #0f223f;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table .el-table__cell .cell) {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
:deep(.warn-data-table.el-table--border::after),
|
||||
:deep(.warn-data-table.el-table--group::after),
|
||||
:deep(.warn-data-table::before) {
|
||||
background-color: #b5ccf2;
|
||||
}
|
||||
</style>
|
||||
139
src/views/backOfficeSystem/ces/index.vue
Normal file
139
src/views/backOfficeSystem/ces/index.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="ces-page">
|
||||
<QueryFormPanel :fields="queryFields" @search="handleSearch" />
|
||||
<WarnDataTable :data="tableData" :columns="columns" :selection-mode="selectionMode" :loading="loading">
|
||||
<template #status="{ row }">
|
||||
<span class="status" :class="row.statusClass">{{ row.status }}</span>
|
||||
</template>
|
||||
<template #level="{ row }">
|
||||
<span class="level" :class="row.levelClass">{{ row.level }}</span>
|
||||
</template>
|
||||
<template #operation>
|
||||
<span class="operation">签收 详情 指派 报错 关注</span>
|
||||
</template>
|
||||
<template #timeout="{ row }">
|
||||
<span class="timeout">{{ row.timeout }}</span>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import QueryFormPanel from './components/QueryFormPanel.vue'
|
||||
import WarnDataTable from './components/WarnDataTable.vue'
|
||||
|
||||
const selectionMode = ref('multiple')
|
||||
const loading = ref(false)
|
||||
const lastQueryParams = ref({})
|
||||
|
||||
const handleSearch = (params) => {
|
||||
lastQueryParams.value = params
|
||||
}
|
||||
|
||||
const queryFields = [
|
||||
{ key: 'warnDate', label: '预警时间', type: 'input', placeholder: '年 / 月 / 日' },
|
||||
{ key: 'warnLevel', label: '预警级别', type: 'select', options: ['全部', '红色', '橙色', '黄色', '蓝色'] },
|
||||
{ key: 'receiveUnit', label: '接收单位', type: 'input' },
|
||||
{ key: 'relatedWarn', label: '关联预警', type: 'checkbox' },
|
||||
{ key: 'name', label: '姓名(精确、模糊)', type: 'input' },
|
||||
{ key: 'gender', label: '性别', type: 'select', options: ['全部', '男', '女'] },
|
||||
{ key: 'timeout', label: '超时状态', type: 'select', options: ['全部', '超时签收', '超时反馈'] },
|
||||
{ key: 'personType', label: '人员类别', type: 'select', options: ['全部', '刑事前科类', '在逃人员', '重点关注'] },
|
||||
{ key: 'focus', label: '重点关注', type: 'checkbox' },
|
||||
{ key: 'secondDispatch', label: '二次指派', type: 'checkbox' },
|
||||
{ key: 'idCard', label: '身份证号码(精确、模糊)', type: 'input' },
|
||||
{ key: 'age', label: '年龄', type: 'input' },
|
||||
{ key: 'warnCount', label: '预警次数', type: 'input' },
|
||||
{ key: 'personLevel', label: '人员级别', type: 'select', options: ['全部', '一级', '二级', '三级'] },
|
||||
{ key: 'traceType', label: '轨迹类别', type: 'select', options: ['全部', '人校核查', '轨迹追踪'] },
|
||||
{ key: 'activePlace', label: '活动发生地模糊查询', type: 'input' },
|
||||
{ key: 'groupType', label: '人员组类模糊查询', type: 'input' }
|
||||
]
|
||||
|
||||
const columns = [
|
||||
{ type: 'index', label: '序号', width: 60, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'time', label: '预警时间', width: 150 },
|
||||
{ prop: 'name', label: '人员姓名', width: 80 },
|
||||
{ prop: 'idCard', label: '身份证号', width: 158 },
|
||||
{ prop: 'gender', label: '性别', width: 56, align: 'center' },
|
||||
{ prop: 'age', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'level' },
|
||||
{ prop: 'category', label: '人员类别', width: 108 },
|
||||
{ prop: 'group', label: '人员组类', width: 92 },
|
||||
{ prop: 'trace', label: '轨迹类别', width: 92 },
|
||||
{ prop: 'place', label: '活动发生地', minWidth: 130 },
|
||||
{ prop: 'unit', label: '接收单位', width: 100 },
|
||||
{ prop: 'count', label: '预警次数', width: 80, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'timeout' }
|
||||
]
|
||||
|
||||
const tableData = [
|
||||
{ id: 1, status: '未签收', statusClass: 'danger', time: '2026-03-10 14:23:05', name: '张三', idCard: '513701199606095613', gender: '男', age: 30, level: '蓝色', levelClass: 'blue', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站出口', unit: '波密县公安局', count: 13, timeout: '' },
|
||||
{ id: 2, status: '已签收', statusClass: 'ok', time: '2026-03-10 13:15:30', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 31, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 14, timeout: '超时签收' },
|
||||
{ id: 3, status: '已签收', statusClass: 'ok', time: '2026-03-10 12:08:45', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 32, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 15, timeout: '' },
|
||||
{ id: 4, status: '已反馈', statusClass: 'ok', time: '2026-03-10 11:42:18', name: '曾海峰', idCard: '513701199606095613', gender: '男', age: 33, level: '红色', levelClass: 'red', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '波密县玉许检查站', unit: '波密县公安局', count: 16, timeout: '' },
|
||||
{ id: 5, status: '未签收', statusClass: 'danger', time: '2026-03-09 16:30:22', name: '李明', idCard: '510105199203156789', gender: '男', age: 34, level: '橙色', levelClass: 'orange', category: '刑事前科类', group: '诈骗案', trace: '轨迹追踪', place: '成都市武侯区人民南路', unit: '武侯区公安局', count: 8, timeout: '超时签收' },
|
||||
{ id: 6, status: '已签收', statusClass: 'ok', time: '2026-03-09 15:20:11', name: '王丽', idCard: '320106198807234561', gender: '女', age: 38, level: '黄色', levelClass: 'yellow', category: '重点关注', group: '涉毒人员', trace: '人校核查', place: '南京市鼓楼区中央路', unit: '鼓楼区公安局', count: 5, timeout: '' },
|
||||
{ id: 7, status: '未签收', statusClass: 'danger', time: '2026-03-09 10:05:33', name: '赵强', idCard: '440101199505189012', gender: '男', age: 31, level: '红色', levelClass: 'red', category: '在逃人员', group: '抢劫案', trace: '轨迹追踪', place: '广州市荔湾区芳村大道', unit: '荔湾区公安局', count: 22, timeout: '超时签收' },
|
||||
{ id: 8, status: '已反馈', statusClass: 'ok', time: '2026-03-08 22:18:44', name: '陈静', idCard: '350102199108267890', gender: '女', age: 35, level: '蓝色', levelClass: 'blue', category: '刑事前科类', group: '盗窃案', trace: '人校核查', place: '福州市鼓楼区东街口', unit: '鼓楼区公安局', count: 3, timeout: '' },
|
||||
{ id: 9, status: '已签收', statusClass: 'ok', time: '2026-03-08 18:45:09', name: '孙伟', idCard: '210102199307123456', gender: '男', age: 33, level: '橙色', levelClass: 'orange', category: '重点关注', group: '逃犯人员', trace: '轨迹追踪', place: '沈阳市和平区太原街', unit: '和平区公安局', count: 11, timeout: '' },
|
||||
{ id: 10, status: '未签收', statusClass: 'danger', time: '2026-03-08 09:30:56', name: '周芳', idCard: '420106199612085678', gender: '女', age: 30, level: '黄色', levelClass: 'yellow', category: '刑事前科类', group: '故意伤害', trace: '人校核查', place: '武汉市武昌区中南路', unit: '武昌区公安局', count: 7, timeout: '' }
|
||||
]
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.ces-page {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.status {
|
||||
color: #0f5bbd;
|
||||
}
|
||||
|
||||
.status.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.status.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
|
||||
.level {
|
||||
display: inline-block;
|
||||
min-width: 42px;
|
||||
line-height: 1.2;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
padding: 2px 6px;
|
||||
}
|
||||
|
||||
.level.red {
|
||||
background: #e11212;
|
||||
}
|
||||
|
||||
.level.orange {
|
||||
background: #f39a14;
|
||||
}
|
||||
|
||||
.level.yellow {
|
||||
background: #d9bb17;
|
||||
}
|
||||
|
||||
.level.blue {
|
||||
background: #1b76eb;
|
||||
}
|
||||
|
||||
.operation {
|
||||
color: #1b59bf;
|
||||
}
|
||||
|
||||
.timeout {
|
||||
color: #ff1f1f;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
@ -2,19 +2,22 @@
|
||||
<div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button v-for="(item,index) in butList" :key="index" :type="qh == item ? 'primary' : 'default'" @click="qh = item" size="small">{{item}}</el-button>
|
||||
<el-button v-for="(item, index) in butList" :key="index" :type="qh == item ? 'primary' : 'default'"
|
||||
@click="qh = item" size="small">{{ item }}</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<FouColorWarning v-if="qh=='预警整合'" />
|
||||
<SevenWarning v-if="qh=='七类重点'" />
|
||||
<PortraitWarning v-if="qh=='人像预警'" />
|
||||
<VehicleWarning v-if="qh=='车辆预警'" />
|
||||
<ControlWarning v-if="qh=='布控预警'" />
|
||||
<RegionalControl v-if="qh=='区域预警'" />
|
||||
<WrjWarning v-if="qh=='无人机预警'" />
|
||||
<IdentityWarning v-if="qh=='身份预警'" />
|
||||
<BehaviorWarning v-if="qh=='行为预警'" />
|
||||
<CombinedWarning v-if="qh=='组合预警'" />
|
||||
<FouColorWarning v-if="qh == '预警整合'" />
|
||||
<SevenWarning v-if="qh == '七类重点'" />
|
||||
<PortraitWarning v-if="qh == '人像预警'" />
|
||||
<VehicleWarning v-if="qh == '车辆预警'" />
|
||||
<ControlWarning v-if="qh == '布控预警'" />
|
||||
<RegionalControl v-if="qh == '区域预警'" />
|
||||
<WrjWarning v-if="qh == '无人机预警'" />
|
||||
<PoliticalSecurityWarning v-if="qh == '政保预警'" />
|
||||
<IdentityWarning v-if="qh == '身份预警'" />
|
||||
<BehaviorWarning v-if="qh == '行为预警'" />
|
||||
<CombinedWarning v-if="qh == '组合预警'" />
|
||||
<!-- <Cs v-if="qh == '测试'" /> -->
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
@ -30,23 +33,30 @@ import VehicleWarning from "@/views/backOfficeSystem/fourColorManage/warningList
|
||||
import ControlWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/controlWarning/index.vue"
|
||||
import RegionalControl from "@/views/backOfficeSystem/fourColorManage/warningControl/regionalControl/index.vue"
|
||||
import WrjWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/wrjWarning/index.vue"
|
||||
import PoliticalSecurityWarning from "@/views/backOfficeSystem/fourColorManage/warningControl/politicalSecurity/index.vue"
|
||||
|
||||
import Cs from '@/views/backOfficeSystem/ces/index.vue'
|
||||
import { onMounted, ref } from "vue";
|
||||
const butList=ref(["预警整合","七类重点","人像预警","车辆预警","布控预警","区域预警","无人机预警",])
|
||||
|
||||
const butList = ref(["七类重点", '政保预警', "人像预警", "车辆预警", "布控预警", "区域预警", "无人机预警", "预警整合",])
|
||||
const qh = ref('预警整合')
|
||||
const hasPermissin = ref(false)
|
||||
onMounted(() => {
|
||||
// rolCode : 市情指领导(JS_666666)、市情指权限(JS_777777)、县情指权限(JS_888888)、县情指领导权限(JS_999999);
|
||||
// depCode : 市情指领导(513030199509084123 )、市情指(340827200404141028)、县情指领导(540421196805217650)、朗县公安局指挥中心(县情指)(540422200010197030)、朗县公安局县城派出所(部门)(513425199305205211)
|
||||
let rolCode = ['JS_666666','JS_777777','JS_888888','JS_999999']
|
||||
let depCode = ['513030199509084123','340827200404141028','540421196805217650','540422200010197030','513425199305205211']
|
||||
let rolCode = ['JS_666666', 'JS_777777', 'JS_888888', 'JS_999999']
|
||||
let depCode = ['513030199509084123', '340827200404141028', '540421196805217650', '540422200010197030', '513425199305205211']
|
||||
let roleData = getItem('roleList');
|
||||
let deptData = getItem('deptId');
|
||||
roleData.forEach(item => {
|
||||
if(rolCode.includes(item.roleCode)) hasPermissin.value = true
|
||||
if (rolCode.includes(item.roleCode)) hasPermissin.value = true
|
||||
})
|
||||
deptData.forEach(item => {
|
||||
if(depCode.includes(item.deptCode)) hasPermissin.value = true
|
||||
if (depCode.includes(item.deptCode)) hasPermissin.value = true
|
||||
})
|
||||
if(hasPermissin.value) butList.value = [...butList.value,...["身份预警","行为预警","组合预警"]]
|
||||
if (hasPermissin.value) {
|
||||
const data = butList.value.filter(item => item !== "预警整合")
|
||||
butList.value = [...data, ...["身份预警", "行为预警", "组合预警", "预警整合"]]
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -1,324 +0,0 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">组合标签管理{{ title }} </span>
|
||||
<div>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:loading="loading"
|
||||
@click="submit"
|
||||
>保存</el-button
|
||||
>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage
|
||||
v-model="listQuery"
|
||||
:formList="formData"
|
||||
ref="elform"
|
||||
:rules="rules"
|
||||
>
|
||||
<!-- 身份标签细类 -->
|
||||
<template #sfbqIdList>
|
||||
<el-button @click="openDialog('01')">选择</el-button>
|
||||
<div class="boxlist">
|
||||
<MyTable
|
||||
:tableData="tableDate.sfbqIdList"
|
||||
:tableColumn="tableDate.tableColumn"
|
||||
:tableHeight="tableDate.tableHeight"
|
||||
:key="tableDate.keyCount"
|
||||
:tableConfiger="tableDate.tableConfiger"
|
||||
:controlsWidth="tableDate.controlsWidth"
|
||||
>
|
||||
<template #bqLx="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLx"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LX"
|
||||
/>
|
||||
</template>
|
||||
<template #bqLb="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLb"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LB"
|
||||
/>
|
||||
</template>
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqYs"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_SSYJ"
|
||||
/>
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag
|
||||
:tag="false"
|
||||
:value="row.bqDj"
|
||||
:options="props.dic.D_GS_BQ_DJ"
|
||||
/>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link
|
||||
type="danger"
|
||||
@click="delDictItem(row.id, '身份标签细类')"
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 行为标签细类 -->
|
||||
<template #xwbqIdList>
|
||||
<el-button @click="openDialog('02')">选择</el-button>
|
||||
<div class="boxlist">
|
||||
<MyTable
|
||||
:tableData="tableDate.xwbqIdList"
|
||||
:tableColumn="tableDate.tableColumn"
|
||||
:tableHeight="tableDate.tableHeight"
|
||||
:key="tableDate.keyCount"
|
||||
:tableConfiger="tableDate.tableConfiger"
|
||||
:controlsWidth="tableDate.controlsWidth"
|
||||
>
|
||||
<template #bqLx="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLx"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LX"
|
||||
/>
|
||||
</template>
|
||||
<template #bqLb="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqLb"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_BQ_LB"
|
||||
/>
|
||||
</template>
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag
|
||||
:value="row.bqYs"
|
||||
:tag="false"
|
||||
:options="props.dic.D_GS_SSYJ"
|
||||
/>
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag
|
||||
:tag="false"
|
||||
:value="row.bqDj"
|
||||
:options="props.dic.D_GS_BQ_DJ"
|
||||
/>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link
|
||||
type="danger"
|
||||
@click="delDictItem(row.id, '行为标签细类')"
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
</div>
|
||||
<!-- 列表弹窗 -->
|
||||
<DialogList
|
||||
:Single="false"
|
||||
:roleIds="roleIds"
|
||||
v-if="chooseShow"
|
||||
:dic="props.dic"
|
||||
@chooseDate="chooseDate"
|
||||
:titleValue="chooseTitle"
|
||||
v-model="chooseShow"
|
||||
:bqLx="chooseType"
|
||||
bqDl="02"
|
||||
></DialogList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import DialogList from "@/views/backOfficeSystem/fourColorManage/components/dialogList.vue";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import {
|
||||
ref,
|
||||
defineExpose,
|
||||
defineProps,
|
||||
reactive,
|
||||
defineEmits,
|
||||
getCurrentInstance
|
||||
} from "vue";
|
||||
const emit = defineEmits(["updateDate"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
dic: Object
|
||||
});
|
||||
const roleIds = ref([]); //角色id
|
||||
const chooseType = ref("01"); //选择弹窗类型
|
||||
const chooseShow = ref(false); //选择弹窗
|
||||
const chooseTitle = ref(""); //选择弹窗
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = reactive([
|
||||
{ label: "组合标签名称", prop: "bqMc", type: "input" },
|
||||
{ label: "组合标签代码", prop: "bqDm", type: "input" },
|
||||
// {
|
||||
// label: "标签等级",
|
||||
// prop: "bqDj",
|
||||
// type: "select",
|
||||
// options: props.dic.D_GS_BQ_DJ
|
||||
// },
|
||||
{
|
||||
label: "标签颜色",
|
||||
prop: "bqYs",
|
||||
type: "select",
|
||||
options: props.dic.D_GS_SSYJ
|
||||
},
|
||||
{ label: "组合标签分值", prop: "bqFz", type: "input" },
|
||||
{ label: "组合标签说明", prop: "bqSm", type: "input" },
|
||||
{ label: "身份标签细类", prop: "sfbqIdList", type: "slot", width: "100%" },
|
||||
{ label: "行为标签细类", prop: "xwbqIdList", type: "slot", width: "100%" }
|
||||
]);
|
||||
const rules = reactive({
|
||||
bqMc: [{ required: true, message: "请输入组合标签名称", trigger: "blur" }],
|
||||
bqDm: [{ required: true, message: "请输入组合标签代码", trigger: "blur" }],
|
||||
zhbqjf: [{ required: true, message: "请输入组合标签积分", trigger: "blur" }],
|
||||
sfbqIdList: [
|
||||
{ required: true, message: "请选择身份标签细类", trigger: "change" }
|
||||
],
|
||||
xwbqIdList: [
|
||||
{ required: true, message: "请选择行为标签细类", trigger: "change" }
|
||||
]
|
||||
});
|
||||
|
||||
const tableDate = reactive({
|
||||
sfbqIdList: [], //表格数据
|
||||
xwbqIdList: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
tableHeight: 225,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 90, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "标签名称", prop: "bqMc", showOverflowTooltip: true },
|
||||
{ label: "标签代码", prop: "bqDm" },
|
||||
{ label: "标签大类名称", prop: "bqDlMc" },
|
||||
{ label: "标签类型", prop: "bqLx", showSolt: true },
|
||||
{ label: "标签类别", prop: "bqLb", showSolt: true },
|
||||
{ label: "标签颜色", prop: "bqYs", showSolt: true },
|
||||
{ label: "标签等级", prop: "bqDj", showSolt: true }
|
||||
]
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type == "add" ? "新增" : "编辑";
|
||||
if (row) getDataById(row.id);
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
qcckGet({}, "/mosty-gsxt/tbGsxtBqzh/selectVoById/" + id).then((res) => {
|
||||
listQuery.value = res;
|
||||
tableDate.sfbqIdList = res.sfbqList;
|
||||
listQuery.value.sfbqIdList = res.sfbqList.map((item) => item.id);
|
||||
tableDate.xwbqIdList = res.xwbqList;
|
||||
listQuery.value.xwbqIdList = res.xwbqList.map((item) => item.id);
|
||||
tableDate.keyCount++;
|
||||
});
|
||||
};
|
||||
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit((data) => {
|
||||
let url =
|
||||
title.value == "新增"
|
||||
? "/mosty-gsxt/tbGsxtBqzh/save"
|
||||
: "/mosty-gsxt/tbGsxtBqzh/update";
|
||||
let params = { ...data };
|
||||
loading.value = true;
|
||||
qcckPost(params, url)
|
||||
.then((res) => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("updateDate");
|
||||
loading.value = false;
|
||||
close();
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
// 打开弹窗
|
||||
const openDialog = (type) => {
|
||||
chooseShow.value = true;
|
||||
chooseType.value = type;
|
||||
chooseTitle.value = type == "01" ? "选择身份标签细类" : "选择行为标签细类";
|
||||
roleIds.value =
|
||||
type == "01"
|
||||
? tableDate.sfbqIdList.map((item) => item.id)
|
||||
: tableDate.xwbqIdList.map((item) => item.id);
|
||||
};
|
||||
// 选择数据
|
||||
const chooseDate = (data) => {
|
||||
if (chooseType.value == "01") {
|
||||
tableDate.sfbqIdList = data;
|
||||
listQuery.value.sfbqIdList = tableDate.sfbqIdList.map((item) => item.id);
|
||||
} else {
|
||||
tableDate.xwbqIdList = data;
|
||||
listQuery.value.xwbqIdList = tableDate.xwbqIdList.map((item) => item.id);
|
||||
}
|
||||
};
|
||||
|
||||
// 删除
|
||||
const delDictItem = (id, type) => {
|
||||
switch (type) {
|
||||
case "身份标签细类":
|
||||
tableDate.sfbqIdList = tableDate.sfbqIdList.filter(
|
||||
(item) => item.id !== id
|
||||
);
|
||||
listQuery.value.sfbqIdList = tableDate.sfbqIdList.map((item) => item.id);
|
||||
break;
|
||||
case "行为标签细类":
|
||||
tableDate.xwbqIdList = tableDate.xwbqIdList.filter(
|
||||
(item) => item.id !== id
|
||||
);
|
||||
listQuery.value.xwbqIdList = tableDate.xwbqIdList.map((item) => item.id);
|
||||
break;
|
||||
}
|
||||
};
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
tableDate.sfbqIdList = [];
|
||||
tableDate.xwbqIdList = [];
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
.boxlist {
|
||||
width: 99%;
|
||||
height: 225px;
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
@ -1,178 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<!-- <el-button>
|
||||
<span style="vertical-align: middle">调级</span>
|
||||
</el-button>
|
||||
<el-button>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button>
|
||||
<el-button>
|
||||
<span style="vertical-align: middle">导入</span>
|
||||
</el-button> -->
|
||||
<el-button size="small" type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #bqYs="{ row }">
|
||||
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #bqDj="{ row }">
|
||||
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 编辑详情 -->
|
||||
<EditAddForm v-if="show" ref="detailDiloag" :dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
|
||||
@updateDate="getList" />
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/tbGsxtBqzh/sjxspz" :roleIds="roleIds"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import EditAddForm from "./components/editAddForm.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { tbGsxtBqzhId } from "@/api/yj.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB, D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ", "D_GS_SSYJ", "D_GS_BQ_LB", "D_GS_BQ_LX"); //获取字典数据
|
||||
const detailDiloag = ref();
|
||||
const show = ref(false)
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "组合标签名称", prop: 'bqMc', placeholder: "请输入组合标签名称", showType: "input" },
|
||||
// { label: "组合标签标签等级", prop: 'bqDj', placeholder: "请选择组合标签标签等级", showType: "select",options: D_GS_BQ_DJ },
|
||||
{ label: "组合标签颜色", prop: 'bqYs', placeholder: "请选择组合标签标签颜色", showType: "select", options: D_GS_SSYJ },
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "组合标签名称", prop: "bqMc" },
|
||||
{ label: "标签代码", prop: "bqDm" },
|
||||
// { label: "组合标签等级", prop: "bqDj",showSolt:true },
|
||||
{ label: "组合标签颜色", prop: "bqYs", showSolt: true },
|
||||
{ label: "组合标签分值", prop: "bqFz" },
|
||||
{ label: "组合标签说明", prop: "bqSm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
qcckGet(queryFrom.value, '/mosty-gsxt/tbGsxtBqzh/selectPage').then((res) => {
|
||||
pageData.tableData = res.records;
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 删除
|
||||
const delDictItem = (id) => {
|
||||
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete({}, '/mosty-gsxt/tbGsxtBqzh/' + id).then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addEdit = (type, row) => {
|
||||
show.value = true;
|
||||
nextTick(() => {
|
||||
detailDiloag.value.init(type, row,);
|
||||
})
|
||||
};
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
tbGsxtBqzhId(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,415 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xwcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xwfz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%">
|
||||
<Items :row="props" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs ">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<Detail ref="detailRef"></Detail>
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="02" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<!-- 详情 -->
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"></AddFrom>
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import * as XLSX from "xlsx";
|
||||
import Detail from './components/detail.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import {yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
||||
import AddFrom from './components/addFrom.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
const czjyRef = ref()
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB,D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB',"D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT
|
||||
})
|
||||
const searchBox = ref(); //搜索框
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "电话号码", prop: 'dh', placeholder: "请输入电话号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'xwms', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const detailRef = ref()
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "xwms" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true,width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqglSelectList({ bqLx: '02', bqlb: val, bqDlId: '241cc7b69a50428287cc79445e310180' }).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.id
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
gettbGsxtBqglSelectList('02')
|
||||
|
||||
});
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init( row)
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value,...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
qcckGet(promes, '/mosty-gsxt/yjzxXwyj/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return { ...item }
|
||||
}) || [];
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
|
||||
const exportExcel = () => {
|
||||
if (pageData.tableData.length === 0) return ElMessage({ message: "暂无数据", type: "warning" });
|
||||
const headers = pageData.tableColumn.map(item => item.label);
|
||||
const data = pageData.tableData.map(item => {
|
||||
return [item.xm, item.sfzh, item.dh, item.xldlmc, item.xwzlmc, item.xwms, item.xwcs, item.xwfz];
|
||||
});
|
||||
const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data]);
|
||||
const workbook = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1");
|
||||
XLSX.writeFile(workbook, "行为预警.xlsx");
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') { // 红
|
||||
return '#ff0202'
|
||||
} else if (val == '02') { // 橙
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') { // 黄
|
||||
return '#c2c203' // 原亮黄色:ffff00
|
||||
} else if (val == '04') { // 蓝
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxXwyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
yjzxXwyjSelectList(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
|
||||
window.onresize = function() {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/** 触发选中 */
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
xwms: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '行为预警')
|
||||
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
/** 方便查看对应的颜色, */
|
||||
.test-top-color {
|
||||
color: #ff0202;
|
||||
background-color: #ff8c00;
|
||||
border-color: #c2c203;
|
||||
outline-color: #0000ff;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -10,24 +10,24 @@
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<div class="bgTable" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #xwcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.xwcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" :tag="false" color="#fff" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
@ -35,25 +35,19 @@
|
||||
<template #xwfz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="xwfz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%">
|
||||
<Items :row="props" :dict="dict" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddModel(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)" >配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs ">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -65,33 +59,26 @@
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="02" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl
|
||||
ref="semdFqzlRef"
|
||||
:itemData="itemData"
|
||||
@handleClose="handleClose"
|
||||
identification="yj"
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<!-- 详情 -->
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }"></AddFrom>
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false"
|
||||
:chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz" :roleIds="roleIds"/>
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxXwyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import * as XLSX from "xlsx";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import Detail from './components/detail.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import {yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import { yjzxXwyjSelectList } from "@/api/yj.js";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
@ -100,16 +87,17 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch, nextTick } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddFrom from './components/addFrom.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const czjyRef = ref()
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB,D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB',"D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
const { D_BZ_YJJB, D_GS_SSYJ, D_GSXT_YJXX_CZZT } = proxy.$dict('D_BZ_YJJB', "D_GS_SSYJ", "D_GSXT_YJXX_CZZT"); //获取字典数据
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
@ -125,17 +113,18 @@ const bqLbData = ref({
|
||||
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "电话号码", prop: 'dh', placeholder: "请输入电话号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'xwms', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: "姓名", placeholder: "请输入姓名", type: "input" },
|
||||
{ key: 'sfzh', label: "身份证号码", placeholder: "请输入身份证号码", type: "input" },
|
||||
{ key: 'dh', label: "电话号码", placeholder: "请输入电话号码", type: "input" },
|
||||
{ key: 'xwms', label: "预警标签", placeholder: "请输入预警标签", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", placeholder: "请选择部门", type: "department" },
|
||||
{ key: 'bqys', label: "级别", placeholder: "请选择级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'jfd', label: "积分段", placeholder: "请选择积分段", type: "Slot" },
|
||||
{ key: 'startTime', label: "预警时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const detailRef = ref()
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -153,14 +142,16 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "xwms" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "状态", slotName: "czzt", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "姓名", prop: "xm", width: 100 },
|
||||
{ label: "身份证号", prop: "sfzh", width: 170 },
|
||||
{ label: "标签", prop: "xwms", width: 120 },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "xwcs", showSolt: true,width: 90 },
|
||||
{ label: "预警分值", prop: "xwfz",showSolt: true },
|
||||
{ label: "活动频次", slotName: "xwcs", width: 90, align: 'center' },
|
||||
{ label: "预警分值", slotName: "xwfz", width: 230 },
|
||||
{ label: '操作', width: 300, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -178,11 +169,11 @@ const gettbGsxtBqglSelectList = (val) => {
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
@ -193,14 +184,14 @@ onMounted(() => {
|
||||
});
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init( row)
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value,...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -223,7 +214,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
delete promes.startTime;
|
||||
qcckGet(promes, '/mosty-gsxt/yjzxXwyj/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
@ -238,34 +229,11 @@ const getList = () => {
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
|
||||
const exportExcel = () => {
|
||||
if (pageData.tableData.length === 0) return ElMessage({ message: "暂无数据", type: "warning" });
|
||||
const headers = pageData.tableColumn.map(item => item.label);
|
||||
const data = pageData.tableData.map(item => {
|
||||
return [item.xm, item.sfzh, item.dh, item.xldlmc, item.xwzlmc, item.xwms, item.xwcs, item.xwfz];
|
||||
});
|
||||
const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data]);
|
||||
const workbook = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1");
|
||||
XLSX.writeFile(workbook, "行为预警.xlsx");
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') { // 红
|
||||
return '#ff0202'
|
||||
} else if (val == '02') { // 橙
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') { // 黄
|
||||
return '#c2c203' // 原亮黄色:ffff00
|
||||
} else if (val == '04') { // 蓝
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx,val) // 全息档案跳转
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
@ -274,10 +242,6 @@ const pushAssess = (val) => {
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
@ -327,20 +291,20 @@ const openAddModel = (row) => {
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds=ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value=val.id
|
||||
chooseJfBh.value = val.id
|
||||
yjzxXwyjSelectList(val.id).then(res => {
|
||||
roleIds.value=res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function() {
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
@ -375,14 +339,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxXwyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -393,7 +357,7 @@ const handleQs = () => {
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
@ -406,10 +370,13 @@ const handleQs = () => {
|
||||
outline-color: #0000ff;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,387 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div>
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="04" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT
|
||||
})
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [{ sfcs: 1 }],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 300,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width:'90' },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList();
|
||||
gettbGsxtBqglSelectList()
|
||||
});
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的组合预警API接口
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
|
||||
tbYjxxGetZbtj(promes).then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqzhSelectList({}).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
const assessShow = ref(false)
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxZhyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '组合预警')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
@ -11,24 +11,24 @@
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<div class=" tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #bqys="{ row }">
|
||||
<DictTag :value="row.bqys" :tag="false" :color="bqYs(row.bqys)" :options="D_GS_SSYJ" />
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" :tag="false" color="#fff" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
@ -36,26 +36,20 @@
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div>
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddModel(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddModel(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -79,12 +73,10 @@
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
@ -92,12 +84,13 @@ import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
@ -114,15 +107,16 @@ import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: "姓名", placeholder: "请输入姓名", type: "input" },
|
||||
{ key: 'sfzh', label: "身份证号码", placeholder: "请输入身份证号码", type: "input" },
|
||||
{ key: 'yjbqmc', label: "预警标签", placeholder: "请输入预警标签", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", placeholder: "请选择部门", type: "department" },
|
||||
{ key: 'bqys', label: "级别", placeholder: "请选择级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'jfd', label: "积分段", placeholder: "请选择积分段", type: "Slot" },
|
||||
{ key: 'startTime', label: "预警时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
@ -142,14 +136,16 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 300,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" },
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "状态", slotName: "czzt", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "姓名", prop: "xm", width: 100 },
|
||||
{ label: "身份证号", prop: "sfzh", width: 170 },
|
||||
{ label: "标签", prop: "yjbqmc", width: 120 },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width:'90' },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ label: "活动频次", slotName: "sfcs", width: 90, align: 'center' },
|
||||
{ label: "预警分值", slotName: "sffz", width: 230 },
|
||||
{ label: '操作', width: 300, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -175,8 +171,8 @@ const handleCzjy = (row) => {
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
@ -204,7 +200,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
delete promes.startTime;
|
||||
|
||||
tbYjxxGetZbtj(promes).then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
@ -214,17 +210,6 @@ const getList = () => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
@ -321,7 +306,7 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
@ -356,14 +341,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxZhyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -380,8 +365,6 @@ const handleQs = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,403 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sex="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 2) }} </span>
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<FkDialog @change="getList" lx="05" />
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB,D_GS_BK_CZYQ } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB','D_GS_BK_CZYQ'
|
||||
|
||||
)
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
// { label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'yjJb', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
// { label: "布控时间", prop: 'startTime', placeholder: "请选择布控时间", showType: "datetimerange" },
|
||||
]);
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" , width: 50},
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "sex", showSolt: true , width: 50},
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true , width: 50},
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true , width: 50},
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true , width: 50},
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...queryFrom.value, ...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : '',
|
||||
yjJb: val.yjJb?.join(',') || '',
|
||||
sfglyj: val.sfglyj?.join(',') || '',
|
||||
sfgz: val.sfgz?.join(',') || '',
|
||||
sfzp: val.sfzp?.join(',') || ''
|
||||
};
|
||||
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let params = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
qcckPost(params, '/mosty-gsxt/tbYjxx/getBdbkPageList').then((res) => {
|
||||
pageData.tableData = res?.records || []
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val?.yjLx, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
switch (val) {
|
||||
case '01':
|
||||
return '#ff0202'
|
||||
case '02':
|
||||
return '#ff8c00'
|
||||
case '03':
|
||||
return '#ffff00'
|
||||
case '04':
|
||||
return '#0000ff'
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
const openAddFrom = (row) => {
|
||||
addModelRef.value.init('add', row)
|
||||
}
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 指派
|
||||
const dataList = ref(null)
|
||||
const warningShow = ref(false)
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_GS_SSYJ),
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '预警布控')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref({})
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
dataPres.value = val
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,30 +2,18 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -41,40 +29,48 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_GS_SSYJ" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sex="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 2) }} </span>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_SJLY" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -87,16 +83,16 @@
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
@ -112,9 +108,7 @@ import Pagination from "./components/particulars.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB,D_GS_BK_CZYQ } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB','D_GS_BK_CZYQ'
|
||||
|
||||
)
|
||||
const { D_GS_QLZDRLX, D_BZ_YJLY, D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_BKLYS, D_BZ_XB, D_BZ_SF, D_GS_CSZT, D_GS_BKZT, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ, D_BZ_SJLY } = proxy.$dict('D_GS_QLZDRLX', 'D_BZ_YJLY', "D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB', 'D_BZ_BKLYS', 'D_BZ_XB', 'D_BZ_SF', 'D_GS_CSZT', 'D_GS_BKZT', 'D_GS_ZDR_RYJB', 'D_GS_ZDR_GJLB', 'D_GS_BK_CZYQ', 'D_BZ_SJLY')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
@ -127,9 +121,9 @@ const searchConfiger = ref([
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
@ -140,13 +134,7 @@ const searchConfiger = ref([
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
// { label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'yjJb', placeholder: "请选择级别", showType: "select" ,options: D_BZ_YJJB},
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
// { label: "布控时间", prop: 'startTime', placeholder: "请选择布控时间", showType: "datetimerange" },
|
||||
|
||||
]);
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
@ -172,25 +160,27 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm" , width: 50},
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "sex", showSolt: true , width: 50},
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true , width: 50},
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true , width: 50},
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true , width: 50},
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 70 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80 },
|
||||
{ label: '性别', width: 50, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 50, align: 'center' },
|
||||
{ label: '预警级别', width: 80, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
|
||||
@ -303,7 +293,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
@ -389,10 +379,9 @@ const openBox = (val) => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
expand :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjtp="{ row }">
|
||||
<div v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
<el-image preview-teleported v-else @click.stop style="width: 30px; height: 40px" :src="row.yjtp"
|
||||
:preview-src-list="[row.yjtp]" show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #yjjb="{ row }">
|
||||
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjlb="{ row }">
|
||||
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddModel(row)">详情</el-link> -->
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Items from "./item/items.vue"
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB, D_BZ_YJLX,D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB","D_BZ_YJLX",'D_BZ_YJLY'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警级别", prop: 'yjjbList', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "来源类型", prop: 'yjlxList', placeholder: "请选择来源类型", showType: "select", options: D_BZ_YJLY,multiple:true },
|
||||
{ label: "身份证号", prop: 'rysfzh', placeholder: "请输入身份证", showType: "input",},
|
||||
{ label: "部门", prop: 'ssbmdm', showType: "department"},
|
||||
{ label: "时间", prop: 'timeRange', showType: "datetimerange"},
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 100, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjtp", showSolt: true, width: 100 },
|
||||
{ label: "预警标签", prop: "yjbq", width: 120 },
|
||||
{ label: "预警地址", prop: "yjdz" },
|
||||
{ label: "预警级别", prop: "yjjb", showSolt: true, width: 85 },
|
||||
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
||||
{ label: "来源类型", prop: "yjLylx", showSolt: true,width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "姓名", prop: "ryxm",width: 100 },
|
||||
{ label: "身份证号", prop: "rysfzh", width: 170 },
|
||||
{ label: "车牌号", prop: "cph" ,width: 100},
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
queryFrom.value.startTime = val.timeRange ? val.timeRange[0] : ''
|
||||
queryFrom.value.endTime = val.timeRange ? val.timeRange[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.timeRange;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageAllList').then((res) => {
|
||||
console.log(res);
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjtp: item.yjlx == '01' ? item.yjtp.replace(ORDIMG, IMGYM) : item.yjtp
|
||||
}
|
||||
}) || [];
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffd325'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val?.yjlb, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 240;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
|
||||
}
|
||||
</style>
|
||||
@ -1,24 +1,19 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch' />
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
expand :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<div class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table">
|
||||
<template #yjtp="{ row }">
|
||||
<div v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<template v-if="!row.yjtp || row.yjtp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="40" v-if="row.yjlb == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="40" v-else />
|
||||
</div>
|
||||
</template>
|
||||
<el-image preview-teleported v-else @click.stop style="width: 30px; height: 40px" :src="row.yjtp"
|
||||
:preview-src-list="[row.yjtp]" show-progress>
|
||||
<template #error>
|
||||
@ -31,7 +26,9 @@
|
||||
</template>
|
||||
|
||||
<template #yjjb="{ row }">
|
||||
<DictTag :value="row.yjjb" :tag="false" :color="bqYs(row.yjjb)" :options="D_BZ_YJJB" />
|
||||
<div :style="{ 'background-color': bqYs(row.yjjb) }">
|
||||
<DictTag :value="row.yjjb" :tag="false" color="#fff" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
@ -39,16 +36,12 @@
|
||||
<template #yjlb="{ row }">
|
||||
<DictTag :value="row.yjlb" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01'">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02'">反馈</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddModel(row)">详情</el-link> -->
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -60,26 +53,27 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Items from "./item/items.vue"
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, computed, watch } from "vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJJB, D_BZ_YJLX,D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB","D_BZ_YJLX",'D_BZ_YJLY'); //获取字典数据
|
||||
const { D_BZ_YJJB, D_BZ_YJLX, D_BZ_YJLY } = proxy.$dict("D_BZ_YJJB", "D_BZ_YJLX", 'D_BZ_YJLY'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警级别", prop: 'yjjbList', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "来源类型", prop: 'yjlxList', placeholder: "请选择来源类型", showType: "select", options: D_BZ_YJLY,multiple:true },
|
||||
{ label: "身份证号", prop: 'rysfzh', placeholder: "请输入身份证", showType: "input",},
|
||||
{ label: "部门", prop: 'ssbmdm', showType: "department"},
|
||||
{ label: "时间", prop: 'timeRange', showType: "datetimerange"},
|
||||
{ key: 'yjjbList', label: "预警级别", placeholder: "请选择预警级别", type: "select", options: D_BZ_YJJB },
|
||||
{ key: 'yjlxList', label: "来源类型", placeholder: "请选择来源类型", type: "select", options: D_BZ_YJLY, multiple: true },
|
||||
{ key: 'rysfzh', label: "身份证号", placeholder: "请输入身份证", type: "input" },
|
||||
{ key: 'ssbmdm', label: "部门", type: "department" },
|
||||
{ key: 'startTime', label: "时间", type: "datetimerange" },
|
||||
]);
|
||||
|
||||
const listQuery = ref({});
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -97,17 +91,19 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 100, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjtp", showSolt: true, width: 100 },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "预警图片", slotName: "yjtp", width: 100, align: 'center' },
|
||||
{ label: "预警标签", prop: "yjbq", width: 120 },
|
||||
{ label: "预警地址", prop: "yjdz" },
|
||||
{ label: "预警级别", prop: "yjjb", showSolt: true, width: 85 },
|
||||
{ label: "预警类别", prop: "yjlb", showSolt: true },
|
||||
{ label: "来源类型", prop: "yjLylx", showSolt: true,width: 100 },
|
||||
{ label: "预警级别", slotName: "yjjb", width: 85, align: 'center' },
|
||||
{ label: "预警类别", slotName: "yjlb", width: 100 },
|
||||
{ label: "来源类型", slotName: "yjLylx", width: 100 },
|
||||
{ label: "预警时间", prop: "yjsj", width: 200 },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "姓名", prop: "ryxm",width: 100 },
|
||||
{ label: "姓名", prop: "ryxm", width: 100 },
|
||||
{ label: "身份证号", prop: "rysfzh", width: 170 },
|
||||
{ label: "车牌号", prop: "cph" ,width: 100},
|
||||
{ label: "车牌号", prop: "cph", width: 100 },
|
||||
{ label: '操作', width: 100, slotName: 'operation', align: 'center' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -120,8 +116,8 @@ onMounted(() => {
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val }
|
||||
queryFrom.value.startTime = val.timeRange ? val.timeRange[0] : ''
|
||||
queryFrom.value.endTime = val.timeRange ? val.timeRange[1] : ''
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -142,7 +138,7 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.timeRange;
|
||||
delete promes.startTime;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageAllList').then((res) => {
|
||||
console.log(res);
|
||||
pageData.total = res.total || 0;
|
||||
@ -160,17 +156,7 @@ const getList = () => {
|
||||
|
||||
|
||||
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffd325'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
@ -197,9 +183,13 @@ const tabHeightFn = () => {
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
<style scoped lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,402 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy heightBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="handleQsFk(row)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="03" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxSfyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Detail from './components/detail.vue'
|
||||
import { watch } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
]);
|
||||
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
gettbGsxtBqglSelectList()
|
||||
tabHeightFn();
|
||||
getList();
|
||||
});
|
||||
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的身份预警API接口
|
||||
let params = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete params.times;
|
||||
yjzxSfyjSelectList(params).then((res) => {
|
||||
pageData.tableData = Array.isArray(res?.records) ? res.records : [];
|
||||
pageData.tableData = pageData.tableData.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
// 标签
|
||||
const bqLbData = ref({
|
||||
bqDl: [],
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
const promes = {
|
||||
bqLx: '01',
|
||||
bqLb: val ? '02' : "01",
|
||||
bqDlId: val ? bqLbData.value.bqDl.find(item => item.value == val)?.id : ""
|
||||
}
|
||||
tbGsxtBqglSelectList(promes).then((res) => {
|
||||
if (val) {
|
||||
queryFrom.value.bqxl = ''
|
||||
bqLbData.value.bqXl = res.data ? res.data.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
}
|
||||
}) : []
|
||||
} else {
|
||||
bqLbData.value.bqDl = res ? res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm,
|
||||
id: item.id
|
||||
}
|
||||
}) : []
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
watch(() => bqLbData.value.bqXl, (res) => {
|
||||
bqLbData.value.bqXl = res
|
||||
}, { deep: true })
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt//yjzxSfyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 全息档案
|
||||
const assessShow = ref(false)
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlb, val) // 全息档案跳转
|
||||
}
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffff00'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
const openAddFrom = (row) => {
|
||||
addModelRef.value.init('add', row)
|
||||
}
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxyjzxSfyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "状态",
|
||||
yjsj: "预警时间",
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '身份预警')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,57 +1,44 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<div ref="searchBox" class="mt10">
|
||||
<QueryFormPanel :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy heightBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<div :style="{ height: (pageData.tableHeight + 40) + 'px' }" class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #sfcs="{ row }">
|
||||
<span style="color: #0072ff;" @click="handleClick(row)">{{ row.sfcs }}</span>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #sffz>
|
||||
<el-table-column prop="bqfz" width="80" align="center" label="标签分值" />
|
||||
<el-table-column prop="pzxs" width="60" align="center" label="系数" />
|
||||
<el-table-column prop="sffz" width="90" align="center" label="计算分值"/>
|
||||
<template #bqys="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.bqys) }">
|
||||
<DictTag :value="row.bqys" color="#fff" :tag="false" :options="D_GS_SSYJ" />
|
||||
</div>
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<el-link type="primary" @click="chooseJfFun(row)">配置系统</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link>
|
||||
<el-link type="danger" @click="handleQsFk(row)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<span class="primary" @click="chooseJfFun(row)">配置系统</span>
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<span class="primary" @click="openAddFrom(row)">详情</span>
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -76,10 +63,7 @@
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { getItem } from '@/utils/storage'
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
@ -87,31 +71,34 @@ import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import { qcckPost } from "@/api/qcckApi.js";
|
||||
import { yjzxSfyjSelectList, yjzxyjzxSfyjSelectList } from "@/api/yj.js";
|
||||
import { tbGsxtBqglSelectList } from '@/api/zdr'
|
||||
import Detail from './components/detail.vue'
|
||||
import { watch } from "vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from "./item/items.vue"
|
||||
import { holographicProfileJump, bqYs } from "@/utils/tools.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB } = proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", 'D_BZ_YJJB')
|
||||
const dict = reactive({ D_GSXT_YJXX_CZZT, D_GS_SSYJ })
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
{ label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
{ label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
{ label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ key: 'xm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'sfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'yjbqmc', label: '预警标签', type: 'input', placeholder: '请输入预警标签' },
|
||||
{ key: 'ssbmdm', label: '部门', type: 'department', placeholder: '请选择部门' },
|
||||
{ key: 'bqys', label: '级别', type: 'select', options: D_BZ_YJJB, placeholder: '请选择级别' },
|
||||
{ key: 'ksfz', label: '开始身份分值', type: 'number', placeholder: '请输入开始身份分值' },
|
||||
{ key: 'jsfz', label: '结束身份分值', type: 'number', placeholder: '请输入结束身份分值' },
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
]);
|
||||
|
||||
const permission_sfqs = ref(false)
|
||||
@ -136,14 +123,19 @@ const pageData = reactive({
|
||||
},
|
||||
controlsWidth: 300, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showSolt: true },
|
||||
{ label: "预警时间", prop: "yjsj" ,width: 180},
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "身份证号", prop: "sfzh" ,width: 180},
|
||||
{ label: "标签", prop: "yjbqmc" },
|
||||
{ label: "接收单位", prop: "ssbm" },
|
||||
{ label: "活动频次", prop: "sfcs",width: 90 },
|
||||
{ label: "预警分值", prop: "sffz",showSolt: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '状态', width: 80, align: 'center', slotName: 'czzt' },
|
||||
{ prop: 'yjsj', label: '预警时间', width: 180, align: 'center' },
|
||||
{ prop: 'xm', label: '姓名', width: 100, align: 'center' },
|
||||
{ prop: 'sfzh', label: '身份证号', width: 180, align: 'center' },
|
||||
{ prop: 'yjbqmc', label: '标签', width: 120, align: 'center' },
|
||||
{ label: '级别', width: 88, align: 'center', slotName: 'bqys' },
|
||||
{ prop: 'ssbm', label: '接收单位', align: 'center' },
|
||||
{ label: '活动频次', slotName: 'sfcs', width: 90, align: 'center' },
|
||||
{ prop: 'bqfz', label: '标签分值', width: 80, align: 'center' },
|
||||
{ prop: 'pzxs', label: '系数', width: 60, align: 'center' },
|
||||
{ prop: 'sffz', label: '计算分值', width: 90, align: 'center' },
|
||||
{ label: '操作', width: 240, slotName: 'operation' },
|
||||
]
|
||||
});
|
||||
|
||||
@ -163,18 +155,15 @@ onMounted(() => {
|
||||
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val };
|
||||
queryFrom.value.startTime = val.times ? val.times[0] : ''
|
||||
queryFrom.value.endTime = val.times ? val.times[1] : ''
|
||||
queryFrom.value = { ...val };
|
||||
if (val.startTime && Array.isArray(val.startTime)) {
|
||||
queryFrom.value.startTime = val.startTime[0]
|
||||
queryFrom.value.endTime = val.startTime[1]
|
||||
}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
@ -193,16 +182,8 @@ const getList = () => {
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete params.times;
|
||||
yjzxSfyjSelectList(params).then((res) => {
|
||||
pageData.tableData = Array.isArray(res?.records) ? res.records : [];
|
||||
pageData.tableData = pageData.tableData.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.bqys, D_GS_SSYJ),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
pageData.total = res?.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
@ -299,17 +280,6 @@ const submit = () => {
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#ffff00'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
|
||||
// 新增
|
||||
const addModelRef = ref(null)
|
||||
@ -336,7 +306,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 280;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -353,9 +323,12 @@ const exportExl = () => {
|
||||
xm: "姓名",
|
||||
sfzh: "身份证号",
|
||||
yjbqmc: "标签",
|
||||
bqys_cname: "级别",
|
||||
ssbm: "接收单位",
|
||||
sfcs: "活动频次",
|
||||
sffz: "预警分值",
|
||||
bqfz: "标签分值",
|
||||
pzxs: "系数",
|
||||
sffz: "计算分值",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
@ -370,14 +343,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/yjzxSfyj/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -388,15 +361,20 @@ const handleQs = () => {
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,335 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
yjlb: '03'
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,80 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="count-container">
|
||||
<div class="count-number">{{dataConut}}</div>
|
||||
<div class="count-label">预警人数</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps,getCurrentInstance } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '人数查询'
|
||||
},
|
||||
dataConut: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},width: {
|
||||
type: String,
|
||||
default: '20%'
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.count-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.count-number {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: #409eff;
|
||||
margin-bottom: 16px;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.count-label {
|
||||
font-size: 18px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,76 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button type="primary" @click="submit">确定</el-button>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警指派'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '50%'
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
});
|
||||
|
||||
const elform = ref(null)
|
||||
const submit = async () => {
|
||||
elform.value.submit(() => {
|
||||
const params = { ...listQuery.value, yjid: props.dataList.id };
|
||||
tbYjxxYjzp(params).then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
close();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
});
|
||||
}
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,441 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
</template>
|
||||
</Searchs>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xsd="{ row }">
|
||||
{{ `${row.xsd}%` }}
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
</div>
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_BZ_YJLX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<Detail ref="detailRef" />
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
<FkDialog @change="getList" lx="04" />
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submit' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
<AddFrom ref="addModelRef" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_GS_SSYJ }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Czjy from './components/czjy.vue'
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Items from "./item/items.vue";
|
||||
import ChooseJf from '@/components/ChooseList/ChooseJf/index.vue'
|
||||
import { tbYjxxGetZbtj, tbGsxtBqzhSelectList, yjzxZhyjSelectList } from '@/api/yj.js'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import AddFrom from "./components/addFrom.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import Detail from './components/detail.vue'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB","D_GS_QLZDRLX","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB","D_GS_BK_CZYQ");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
D_GS_SSYJ,
|
||||
D_GSXT_YJXX_CZZT,
|
||||
D_BZ_YJLY,
|
||||
D_BZ_YJJB,
|
||||
D_BZ_YJLX
|
||||
})
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
|
||||
// 搜索配置
|
||||
const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "区域所属单位", prop: 'ssbmdm', placeholder: "请选择区域所属单位", showType: "department" },
|
||||
{ label: "布控单位", prop: 'ssbmdm', placeholder: "请选择布控单位", showType: "department" },
|
||||
{ label: "所属部门", prop: 'ssbmdm', placeholder: "请选择所属部门", showType: "department" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "车牌号码", prop: 'clcph', placeholder: "请输入车牌号码", showType: "input" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "积分段", prop: 'jfd', placeholder: "请选择积分段", showType: "Slot" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 页面数据
|
||||
const pageData = reactive({
|
||||
tableData: [{ sfcs: 1 }],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true,
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth:160,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showOverflowTooltip: true, showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域名称", prop: "bkqymc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域范围", prop: "bkfw", showOverflowTooltip: true, width: 50},
|
||||
// { label: "区域所属", prop: "gkbmmc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "比中", prop: "yjLx", showOverflowTooltip: true, width: 60, showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "身份证号", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showOverflowTooltip: true,showSolt: true, width: 60 },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true ,showSolt: true, width: 60 },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq",showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, showOverflowTooltip: true, width:45 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "所属单位", prop: "ssbm", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true,showSolt: true, width: 65 },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", width: 200 },
|
||||
// { label: "预警标签", prop: "yjbqmc" },
|
||||
// { label: "身份证号", prop: "yjRysfzh", width: 200 },
|
||||
// { label: "预警来源", prop: "yjLylx", showSolt: true },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "车牌号", prop: "yjClcph" },
|
||||
// { label: "布控区域名称", prop: "bkqymc" },
|
||||
// { label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
// let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
// permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
// let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
// let obj = rols.find(item => {
|
||||
// return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
// })
|
||||
// roleCode.value = obj ? true : false;
|
||||
tabHeightFn();
|
||||
getList();
|
||||
gettbGsxtBqglSelectList()
|
||||
});
|
||||
|
||||
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val,sfglyj:val.sfglyj.join(',') };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const reset = () => {
|
||||
delete queryFrom.value.ksfz
|
||||
delete queryFrom.value.jsfz
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
// TODO: 替换为实际的组合预警API接口
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
qcckPost({ promes }, "/mosty-gsxt/tbYjxx/getQybkPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
const gettbGsxtBqglSelectList = (val) => {
|
||||
tbGsxtBqzhSelectList({}).then((res) => {
|
||||
bqLbData.value.bqXl = res.map(item => {
|
||||
return {
|
||||
label: item.bqMc,
|
||||
value: item.bqDm
|
||||
}
|
||||
}) || []
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 查看详情
|
||||
const detailRef = ref()
|
||||
const handleClick = (row) => {
|
||||
detailRef.value.init(row)
|
||||
}
|
||||
const assessShow = ref(false)
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const dataList = ref()
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjlx, val) // 全息档案跳转
|
||||
// assessShow.value = true;
|
||||
// dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
// 发送指令
|
||||
const showDialog = ref(false)
|
||||
const itemData = ref()
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
const semdFqzlRef = ref()
|
||||
const tacitly = {
|
||||
title: 'yjbt',
|
||||
instructionContent: 'yjnr'
|
||||
}
|
||||
const submit = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/yjzxZhyj/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
const addModelRef = ref(null)
|
||||
const openAddModel = (row) => {
|
||||
console.log(row);
|
||||
|
||||
addModelRef.value.init(row)
|
||||
}
|
||||
|
||||
|
||||
// 选择系数
|
||||
const chooseJfShow = ref(false)
|
||||
const chooseJfBh = ref()
|
||||
const roleIds = ref()
|
||||
const chooseJfFun = (val) => {
|
||||
chooseJfBh.value = val.id
|
||||
yjzxZhyjSelectList(val.id).then(res => {
|
||||
roleIds.value = res.sjxspzList.map(item => item.xsid)
|
||||
chooseJfShow.value = true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
yjRyxm: "姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjRysjh: "电话",
|
||||
xsd: "相似度",
|
||||
yjJrcs: "预警次数",
|
||||
yjLx: "预警类型",
|
||||
yjLylx: "预警来源",
|
||||
yjJb: " 预警级别",
|
||||
yjbqmc: "预警标签",
|
||||
yjSj: "预警时间",
|
||||
czzt_cname: "处置状态",
|
||||
ssbm: "所属部门",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
bqys_cname: getMultiDictVal(item.yjLx, D_BZ_YJLX),
|
||||
czzt_cname: getMultiDictVal(item.yjLylx, D_BZ_YJLY),
|
||||
bqys_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '组合预警')
|
||||
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
dataPres.value = val
|
||||
paginationOpen.value = true
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,59 +2,82 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" @reset="reset" :key="pageData.keyCount">
|
||||
<template #jfd>
|
||||
<div>
|
||||
<el-input v-model="queryFrom.ksfz" type="number" placeholder="开始身份分值" style="width: 130px"></el-input>
|
||||
<span style="color: #333;margin: 0 4px;">至</span>
|
||||
<el-input v-model="queryFrom.jsfz" type="number" placeholder="结束身份分值" style="width: 130px"></el-input>
|
||||
</div>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</Searchs>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="exportExl" size="small">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
:expand="true" @chooseData="handleChooseData">
|
||||
<template #xsd="{ row }">
|
||||
{{ `${row.xsd}%` }}
|
||||
<div :style="{ height: (pageData.tableHeight + 40) + 'px' }" class="bgTable">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :color="bqYs(row.yjJb)" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
<template #yjRyxm="{ row }">
|
||||
{{ row.yjLx == 2 ? row.yjClcph : row.yjRyxm }}
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #expand="{ props }">
|
||||
<div class="expand-content" style="max-width: 100%; max-height: 400px; overflow-y: auto; padding: 10px;">
|
||||
<Items :row="props || {}" :dict="dict" />
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_BZ_YJLX" />
|
||||
{{ row.yjLx == 2 ? '车辆' : '人员' }}
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -74,8 +97,9 @@
|
||||
|
||||
<ChooseJf v-model="chooseJfShow" titleValue="选择系数" :Single="false" :chooseJfBh="chooseJfBh" url="/yjzxZhyj/sjxspz"
|
||||
:roleIds="roleIds" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<!-- <Pagination v-model="paginationOpen" /> -->
|
||||
<Pagination v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -99,13 +123,16 @@ import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const permission_sfqs = ref(false)
|
||||
const roleCode = ref(false)
|
||||
const searchBox = ref();
|
||||
const czjyRef = ref()
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB","D_GS_QLZDRLX","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB","D_GS_BK_CZYQ");
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_SSYJ, D_BZ_YJJB, D_BZ_YJLY, D_BZ_YJLX, D_BZ_BKLYS, D_GS_CSZT, D_GS_BKZT, D_BZ_XB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ, D_GS_QLZDRYXX } =
|
||||
proxy.$dict("D_GSXT_YJXX_CZZT", "D_GS_SSYJ", "D_BZ_YJJB", "D_BZ_YJLY", "D_BZ_YJLX", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BKZT", "D_BZ_XB", "D_GS_QLZDRLX", "D_GS_ZDR_RYJB", "D_GS_ZDR_GJLB", "D_GS_BK_CZYQ", "D_GS_QLZDRYXX");
|
||||
|
||||
// 字典数据集合
|
||||
const dict = ref({
|
||||
@ -122,21 +149,20 @@ const searchConfiger = ref([
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "select", options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }], multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "区域所属单位", prop: 'ssbmdm', placeholder: "请选择区域所属单位", showType: "department" },
|
||||
{ label: "布控单位", prop: 'ssbmdm', placeholder: "请选择布控单位", showType: "department" },
|
||||
{ label: "所属部门", prop: 'ssbmdm', placeholder: "请选择所属部门", showType: "department" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "车牌号码", prop: 'clcph', placeholder: "请输入车牌号码", showType: "input" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'number', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'number', placeholder: '请输入结束年龄' },
|
||||
{ key: 'clcph', label: '车牌号码', type: 'input', placeholder: '请输入车牌号码' },
|
||||
{ key: 'yjNr', label: '预警内容', type: 'input', placeholder: '请输入预警内容' },
|
||||
// { label: "预警标签", prop: 'yjbqmc', placeholder: "请输入预警标签", showType: "input" },
|
||||
// { label: "部门", prop: 'ssbmdm', placeholder: "请选择部门", showType: "department" },
|
||||
// { label: "级别", prop: 'bqys', placeholder: "请选择级别", showType: "select", options: D_BZ_YJJB },
|
||||
@ -160,42 +186,31 @@ const pageData = reactive({
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth:160,
|
||||
controlsWidth: 160,
|
||||
tableColumn: [
|
||||
{ label: "状态", prop: "czzt", showOverflowTooltip: true, showSolt: true, width: 80 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域名称", prop: "bkqymc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "区域范围", prop: "bkfw", showOverflowTooltip: true, width: 50},
|
||||
// { label: "区域所属", prop: "gkbmmc", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "比中", prop: "yjLx", showOverflowTooltip: true, width: 60, showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "身份证号", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showOverflowTooltip: true,showSolt: true, width: 60 },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true ,showSolt: true, width: 60 },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true, width: 60 },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq",showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, showOverflowTooltip: true, width:45 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "所属单位", prop: "ssbm", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true,showSolt: true, width: 65 },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true,showSolt: true, width: 50 },
|
||||
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", width: 200 },
|
||||
// { label: "预警标签", prop: "yjbqmc" },
|
||||
// { label: "身份证号", prop: "yjRysfzh", width: 200 },
|
||||
// { label: "预警来源", prop: "yjLylx", showSolt: true },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "车牌号", prop: "yjClcph" },
|
||||
// { label: "布控区域名称", prop: "bkqymc" },
|
||||
// { label: "所属部门", prop: "ssbm" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 80, align: 'center', slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80, align: 'center' },
|
||||
{ prop: 'bkqymc', label: '区域名称', width: 80, align: 'center' },
|
||||
{ label: "比中", slotName: 'yjLx', width: 60, align: 'center' },
|
||||
{ label: '人员姓名', slotName: 'yjRyxm', width: 80, align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80, align: 'center' },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "相似度", slotName: "xsd", align: 'center', width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
|
||||
@ -219,7 +234,7 @@ const handleCzjy = (row) => {
|
||||
}
|
||||
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...queryFrom.value, ...val,sfglyj:val.sfglyj.join(',') };
|
||||
queryFrom.value = { ...queryFrom.value, ...val, yjLx: val.yjLx.join(',') };
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
@ -255,17 +270,6 @@ const getList = () => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
const bqYs = (val) => {
|
||||
if (val == '01') {
|
||||
return '#ff0202'
|
||||
} else if (val == '02') {
|
||||
return '#ff8c00'
|
||||
} else if (val == '03') {
|
||||
return '#e6a23c'
|
||||
} else if (val == '04') {
|
||||
return '#0000ff'
|
||||
}
|
||||
}
|
||||
const bqLbData = ref({
|
||||
bqXl: []
|
||||
})
|
||||
@ -362,7 +366,7 @@ const chooseJfFun = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -431,6 +435,7 @@ const openBox = (val) => {
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
@ -438,4 +443,8 @@ const openBox = (val) => {
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.bgTable {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,334 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,472 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container" v-loading="loading">
|
||||
<div class="three-column-layout">
|
||||
<!-- 重点人员基本信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员基本信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员姓名:</span>
|
||||
<span class="info-value">{{ dataForm.yjRyxm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">性别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.xbdm" :tag="false" :options="dict.D_BZ_XB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">年龄:</span>
|
||||
<span class="info-value">{{ dataForm.nl }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">身份证号码:</span>
|
||||
<span class="info-value">{{ dataForm.yjRysfzh }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">户籍地:</span>
|
||||
<span class="info-value">{{ dataForm.hjdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">现住地址:</span>
|
||||
<span class="info-value">{{ dataForm.xzdXz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">入库时间:</span>
|
||||
<span class="info-value">{{ dataForm.zdrRkkssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">预警级别:</span>
|
||||
<span class="info-value warning-level" :class="ys()">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_BZ_YJJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.bqdl" :tag="false" :options="dict.D_GS_QLZDRLX" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item">
|
||||
<span class="info-label">人员级别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjJb" :tag="false" :options="dict.D_GS_ZDR_RYJB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">人员细类:</span>
|
||||
<span class="info-value">{{ dataForm.yjbqmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">立案单位:</span>
|
||||
<span class="info-value"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">简要案情:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">一标三实:</span>
|
||||
<span class="info-value text-area"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 重点人员活动信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">重点人员活动信息页</div>
|
||||
<div class="info-section blue-bg">
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">轨迹类别:</span>
|
||||
<span class="info-value">
|
||||
<DictTag :value="dataForm.yjLylx" :tag="false" :options="dict.D_GS_ZDR_GJLB" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">核查时间:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].czsj }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">比对时间:</span>
|
||||
<span class="info-value">{{ dataForm.yjSj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动发生地:</span>
|
||||
<span class="info-value">{{ dataForm.xxdz }}</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动场所:</span>
|
||||
<span class="info-value">
|
||||
<span v-if="dataForm.fkList && dataForm.fkList.length > 0">{{ dataForm.fkList[0].xxdz }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">活动信息:</span>
|
||||
<span class="info-value">{{ dataForm.yjNr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息提供单位:</span>
|
||||
<span class="info-value">{{ dataForm.jczmc }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">信息接收单位:</span>
|
||||
<span class="info-value">{{ dataForm.ssbm }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">二次指派单位:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.zpList && dataForm.zpList.length > 0">
|
||||
<span v-for="(item, index) in dataForm.zpList" :key="item.id">
|
||||
{{ item.zpbm }}<span v-if="index < dataForm.zpList.length - 1">,</span>
|
||||
</span>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">签收时限:</span>
|
||||
<span class="info-value">{{ dataForm.qssj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈时限:</span>
|
||||
<span class="info-value">{{ dataForm.fksj }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">处置建议:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.czjyList && dataForm.czjyList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.czjyList" :key="item.id">
|
||||
<span>{{ `${index + 1}、` + item.jynr }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-item full-width">
|
||||
<span class="info-label">反馈内容:</span>
|
||||
<span class="info-value">
|
||||
<div v-if="dataForm.fkList && dataForm.fkList.length > 0">
|
||||
<div v-for="(item, index) in dataForm.fkList" :key="item.id">
|
||||
<span v-if="item.ckczbcxx">{{ `${index + 1}、` + item.ckczbcxx }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 历史预警信息页 -->
|
||||
<div class="column">
|
||||
<div class="column-header">历史预警信息页</div>
|
||||
<div class="info-section">
|
||||
<div class="history-item" v-for="(item, index) in dataForm.yjgjList" :key="item.id">
|
||||
<span class="history-index">{{ `${index + 1}:` }}</span>
|
||||
<span class="history-content">{{ item.yjNr }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, getCurrentInstance, watch, ref } from 'vue';
|
||||
import { qcckGet } from '@/api/qcckApi.js'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警详情'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '90%'
|
||||
}, dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const loading = ref(false)
|
||||
let abortController = null
|
||||
const close = () => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
abortController = null
|
||||
}
|
||||
loading.value = false
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
const dataForm = ref({});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
getPart(props.dataList.id)
|
||||
}
|
||||
}, { deep: true });
|
||||
const getPart = (id) => {
|
||||
if (abortController) {
|
||||
abortController.abort()
|
||||
}
|
||||
abortController = new AbortController()
|
||||
loading.value = true
|
||||
qcckGet({}, `/mosty-gsxt/tbYjxx/getInfo/${id}`, { signal: abortController.signal }).then(res => {
|
||||
if (res) {
|
||||
dataForm.value = res
|
||||
} else {
|
||||
dataForm.value = {}
|
||||
}
|
||||
}).catch(err => {
|
||||
if (err.name !== 'AbortError') {
|
||||
console.error('请求失败:', err)
|
||||
}
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
const ys = () => {
|
||||
switch (dataForm.value.yjJb) {
|
||||
case '01':
|
||||
return 'red';
|
||||
case '02':
|
||||
return 'orange';
|
||||
case '03':
|
||||
return 'yellow';
|
||||
case '04':
|
||||
return 'blue';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.archive-container {
|
||||
padding: 20px;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.column-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: #f0f2f5;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px 4px 0 0;
|
||||
text-align: center;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.column .info-section {
|
||||
flex: 1;
|
||||
border-radius: 0 0 4px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
padding: 15px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.info-section.blue-bg {
|
||||
background: #e6f0f8;
|
||||
border-color: #9ed7ff;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-item.full-width {
|
||||
flex: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
width: 80px;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
flex: 1;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
min-height: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.info-value.text-area {
|
||||
min-height: 80px;
|
||||
align-items: flex-start;
|
||||
padding: 8px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* 红 */
|
||||
.warning-level.red {
|
||||
background: #fef0f0;
|
||||
border-color: #ffccc7;
|
||||
color: #f56c6c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 橙 */
|
||||
.warning-level.orange {
|
||||
background: #fffbe6;
|
||||
border-color: #ffe58f;
|
||||
color: #d48806 !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 黄 */
|
||||
.warning-level.yellow {
|
||||
background: #fdf6ec;
|
||||
border-color: #faecd8;
|
||||
color: #e6a23c !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝 */
|
||||
.warning-level.blue {
|
||||
background: #ecf5ff;
|
||||
border-color: #d9ecff;
|
||||
color: #409eff !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
/* align-items: center; */
|
||||
}
|
||||
|
||||
.history-index {
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
flex: 1;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.demo-tabs {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
::v-deep .el-tabs__content {
|
||||
min-height: 400px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,80 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="count-container">
|
||||
<div class="count-number">{{dataConut}}</div>
|
||||
<div class="count-label">预警人数</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps,getCurrentInstance } from 'vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '人数查询'
|
||||
},
|
||||
dataConut: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},width: {
|
||||
type: String,
|
||||
default: '20%'
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.count-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 40px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.count-number {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: #409eff;
|
||||
margin-bottom: 16px;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.count-label {
|
||||
font-size: 18px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,76 @@
|
||||
<!--预警指派展示组件 -->
|
||||
<template>
|
||||
<el-dialog :draggable="true" :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div class="archive-container">
|
||||
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules" :labelWidth="90">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer" style="text-align: center;">
|
||||
<el-button type="primary" @click="submit">确定</el-button>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, defineProps, defineEmits, reactive, getCurrentInstance } from 'vue';
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { tbYjxxYjzp } from '@/api/yj'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '预警指派'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '50%'
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
dataList: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref()
|
||||
const formData = ref([
|
||||
{ label: "指派部门", prop: "zpbmdm", depMc: 'zpbm', type: "department", width: '45%' },
|
||||
{ label: "指派原因", prop: "zpyy", type: "textarea", width: '80%' },
|
||||
])
|
||||
|
||||
const rules = reactive({
|
||||
zpbmdm: [{ required: true, message: "请选择指派部门", trigger: "blur" }],
|
||||
zpyy: [{ required: true, message: "请输入指派原因", trigger: "change" }],
|
||||
});
|
||||
|
||||
const elform = ref(null)
|
||||
const submit = async () => {
|
||||
elform.value.submit(() => {
|
||||
const params = { ...listQuery.value, yjid: props.dataList.id };
|
||||
tbYjxxYjzp(params).then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
close();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
});
|
||||
}
|
||||
// 定义事件
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const close = () => {
|
||||
elform.value.reset()
|
||||
emit('update:modelValue', false);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,332 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
])
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
pageData.total = res.total || 0;
|
||||
pageData.tableConfiger.loading = false;
|
||||
pageData.tableData = res.records || []
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true;
|
||||
dataList.value = val;
|
||||
}
|
||||
|
||||
|
||||
const failWarning = (val) => {
|
||||
let ids = [val.id]
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/yjbc').then((res) => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 选中项 */
|
||||
const selectRows = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_name: "状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "人员姓名",
|
||||
yjRysfzh: "身份证号",
|
||||
yjJb_name: "预警级别",
|
||||
bqdl_name: "人员类别",
|
||||
yjbqmc: "细类",
|
||||
yjDz: "活动发生地",
|
||||
ssbm: "接收单位",
|
||||
yjCs: "预警次数",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
czzt_name: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_name: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
bqdl_name: getMultiDictVal(item.bqdl, D_GS_QLZDRLX),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '七类重点')
|
||||
}
|
||||
// 批量签收
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
|
||||
particularsShow.value = true;
|
||||
}
|
||||
// 单条签收
|
||||
const handleQsSingle = (row) => {
|
||||
if (row.czzt == '02') return proxy.$message({ type: "warning", message: "数据已签收,无需重复签收" });
|
||||
proxy.$confirm('确认要签收该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ ids: [row.id] }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 关注
|
||||
const payAttention = (row) => {
|
||||
let promes = {}
|
||||
if (row.sfgz == '1') {
|
||||
promes.sfgz = '0'
|
||||
promes.msg = '取消关注'
|
||||
} else {
|
||||
promes.sfgz = '1'
|
||||
promes.msg = '关注'
|
||||
}
|
||||
|
||||
proxy.$confirm('确认要关注该条预警数据吗?', "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ sfgz: promes.sfgz, id: row.id }, '/mosty-gsxt/tbYjxx/yjgz').then(() => {
|
||||
proxy.$message({ type: "success", message: `${promes.msg}成功` });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
@ -2,38 +2,41 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search>
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" ref="searchDom" :key="pageData.keyCount">
|
||||
</Search> -->
|
||||
<QueryFormPanel v-model="queryFrom" :fields="searchConfiger" ref="searchDom" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle> -->
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable expand :tableData="pageData.tableData" :tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth" @chooseData="handleChooseData">
|
||||
<template #expand="{ props }">
|
||||
<div style="max-width: 100%">
|
||||
<Items :row="props || {}" />
|
||||
</div>
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
<div style="background-color: #fff;">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #status="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #age="{ row }">
|
||||
<span v-if="row.yjRysfzh"> {{ IdCard(row.yjRysfzh, 3) }} </span>
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag :value="row.yjJb" :tag="false" :options="D_BZ_YJJB" />
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
@ -41,21 +44,19 @@
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #yjLx="{ row }">
|
||||
<DictTag :value="row.yjLx" :tag="false" :options="D_GS_QLZDRYXX" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" @click="handleQsSingle(row)">签收</el-link>
|
||||
<el-link type="primary" @click="particularsOpen(row)">详情</el-link>
|
||||
<el-link type="warning" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</el-link>
|
||||
<el-link type="primary" @click="payAttention(row)">关注</el-link>
|
||||
|
||||
</template>
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
</MyTable>
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span>
|
||||
</div>
|
||||
</template>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
@ -63,54 +64,58 @@
|
||||
</div>
|
||||
</div>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
<peopleConut v-model="searchOpen" :dataConut="dataConut" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import Items from '@/views/backOfficeSystem/fourColorManage/warningList/portraitWarning/item/items.vue'
|
||||
import ZpForm from "./zpForm.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
import Particulars from "./particulars.vue";
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
// import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, } from "vue";
|
||||
import peopleConut from "./peopleConut.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT'); //获取字典数据
|
||||
const { D_BZ_YJLY, D_GS_QLZDRLX, D_GS_ZDR_GJLB, D_BZ_YJJB, D_GS_CSZT, D_GS_QLZDRYXX, D_BZ_XB, D_GSXT_YJXX_CZZT, D_GS_ZDR_RYJB, D_BZ_SF } = proxy.$dict('D_BZ_YJLY', 'D_GS_QLZDRLX', "D_BZ_YJJB", "D_GS_QLZDRYXX", "D_BZ_XB", "D_GSXT_YJXX_CZZT", "D_GS_ZDR_RYJB", 'D_GS_ZDR_GJLB', 'D_GS_CSZT', "D_BZ_SF"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const warningShow = ref(false);
|
||||
const dataList = ref([]);
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间xx", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB, multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', showType: "department" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT},
|
||||
{ label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
{ label: "预警次数", prop: 'yjCs', placeholder: "请输入预警次数", showType: "number" },
|
||||
{ label: "人员级别", prop: 'yjJb', showType: "select", options: D_GS_ZDR_RYJB },
|
||||
{ label: "轨迹类别", prop: 'yjLylx', showType: "select", options: D_GS_ZDR_GJLB },
|
||||
{ label: "姓名", prop: 'yjRyxm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
{ label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "活动发生地", prop: 'yjDz', placeholder: "请输入活动发生地", showType: "input" },
|
||||
{ label: "人员细类", prop: 'yjbqmc', placeholder: "请输入人员细类", showType: "input" },
|
||||
{ key: 'startTime', label: '预警时间', type: 'datetimerange', placeholder: '请选择预警时间' },
|
||||
{ key: 'yjJb', label: '预警级别', type: 'select', options: D_BZ_YJJB, multiple: true, placeholder: '请选择预警级别' },
|
||||
{ key: 'ssbmdm', label: '接收单位', type: 'department', placeholder: '请选择接收单位' },
|
||||
{ key: 'sfglyj', label: '关联预警', type: 'select', options: D_BZ_SF, placeholder: '请选择关联预警' },
|
||||
{ key: 'yjRyxm', label: '姓名', type: 'input', placeholder: '请输入姓名' },
|
||||
{ key: 'xbdm', label: '性别', type: 'select', options: D_BZ_XB, placeholder: '请选择性别' },
|
||||
{ key: 'cszt', label: '超时状态', type: 'select', options: D_GS_CSZT, placeholder: '请选择超时状态' },
|
||||
{ key: 'bqdl', label: '人员类别', type: 'select', options: D_GS_QLZDRLX, placeholder: '请选择人员类别' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'yjRysfzh', label: '身份证号码', type: 'input', placeholder: '请输入身份证号码' },
|
||||
{ key: 'ksnl', label: '开始年龄', type: 'input', placeholder: '请输入开始年龄' },
|
||||
{ key: 'jsnl', label: '结束年龄', type: 'input', placeholder: '请输入结束年龄' },
|
||||
{ key: 'yjCs', label: '预警次数', type: 'input', placeholder: '请输入预警次数' },
|
||||
{ key: 'bqdl', label: '人员级别', type: 'select', options: D_GS_ZDR_RYJB },
|
||||
{ key: 'yjLylx', label: '轨迹类别', type: 'select', options: D_GS_ZDR_GJLB },
|
||||
{ key: 'yjDz', label: '活动发生地', type: 'input', placeholder: '请输入活动发生地' },
|
||||
{ key: 'yjbqmc', label: '人员细类', type: 'input', placeholder: '请输入人员细类' }
|
||||
])
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableHeight: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
@ -124,20 +129,23 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 200, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警状态", prop: "czzt", showSolt: true, width: 70 },
|
||||
{ label: "预警时间", prop: "yjSj", width: 148 },
|
||||
{ label: "人员姓名", prop: "yjRyxm", },
|
||||
{ label: "身份证号", prop: "yjRysfzh", width: 148 },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 60 },
|
||||
{ label: "年龄", prop: "age", showSolt: true, width: 50 },
|
||||
{ label: "级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "人员类别", prop: "bqdl", showSolt: true, width: 100 },
|
||||
{ label: "人员细类", prop: "yjbqmc" },
|
||||
{ label: "轨迹类别", prop: "yjLylx", showSolt: true },
|
||||
{ label: "活动发生地", prop: "yjDz" },
|
||||
{ label: "接收单位", prop: "ssbm", width: 148 },
|
||||
{ label: "次数", prop: "yjCs", width: 50 },
|
||||
{ label: "超时状态", prop: "cszt" },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '预警状态', width: 86, align: 'center', slotName: 'status' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 150 },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', width: 80 },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 158 },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 88, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '人员类别', width: 90, align: 'center', slotName: 'bqdl' },
|
||||
{ prop: 'yjbqmc', label: '人员细类', width: 92 },
|
||||
{ label: '轨迹类别', width: 92, align: 'center', slotName: 'yjLylx' },
|
||||
{ prop: 'yjDz', label: '活动发生地' },
|
||||
{ prop: 'ssbm', label: '接收单位' },
|
||||
{ prop: 'yjCs', label: '次数', width: 60, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' }
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
@ -151,9 +159,9 @@ const onSearch = (val) => {
|
||||
queryFrom.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
queryFrom.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
queryFrom.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
// queryFrom.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// queryFrom.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// queryFrom.value.sfzp = val.sfzp?.join(',') || ''
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
@ -171,6 +179,7 @@ const getList = () => {
|
||||
...queryFrom.value,
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
|
||||
}
|
||||
delete promes.times;
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/getQlzdrPageList').then((res) => {
|
||||
@ -248,7 +257,7 @@ const handleQs = () => {
|
||||
}).catch(() => { });
|
||||
}
|
||||
// 详情
|
||||
const dataPres=ref({})
|
||||
const dataPres = ref({})
|
||||
const particularsShow = ref(false);
|
||||
const particularsOpen = (row) => {
|
||||
dataPres.value = row
|
||||
@ -290,42 +299,37 @@ const payAttention = (row) => {
|
||||
// 人数计算
|
||||
const searchDom = ref(null)
|
||||
const dataConut = ref(0)
|
||||
const searchOpen=ref(false)
|
||||
const searchOpen = ref(false)
|
||||
const countPeople = () => {
|
||||
|
||||
const promes = {
|
||||
...searchDom.value.searchObj,
|
||||
yjJb: searchDom.value.searchObj.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.searchObj.startTime ? searchDom.value.searchObj.startTime[0] : '',
|
||||
endTime: searchDom.value.searchObj.endTime ? searchDom.value.searchObj.endTime[1] : '',
|
||||
sfglyj: searchDom.value.searchObj.sfglyj?.join(',') || '',
|
||||
sfgz: searchDom.value.searchObj.sfgz?.join(',') || '',
|
||||
sfzp: searchDom.value.searchObj.sfzp?.join(',') || '',
|
||||
...searchDom.value.formState,
|
||||
yjJb: searchDom.value.formState.yjJb?.join(',') || '',
|
||||
startTime: searchDom.value.formState.startTime ? searchDom.value.formState.startTime[0] : '',
|
||||
endTime: searchDom.value.formState.endTime ? searchDom.value.formState.endTime[1] : '',
|
||||
}
|
||||
qcckPost(promes, '/mosty-gsxt/tbYjxx/bkyjQctj').then((res) => {
|
||||
dataConut.value = res || 0
|
||||
searchOpen.value=true
|
||||
searchOpen.value = true
|
||||
}).catch(() => {
|
||||
// proxy.$message({ type: "error", message: `${promes.msg}失败` });
|
||||
});
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
console.log("xxxxxxx");
|
||||
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () { tabHeightFn(); };
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
.danger {
|
||||
color: #ff2424;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
.ok {
|
||||
color: #1d72e8;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,471 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading" style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
expand
|
||||
@chooseData="handleChooseData"
|
||||
:rowClassName="getRowClassName"
|
||||
>
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props"/>
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" :tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList"/>
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Pagination v-model="paginationOpen" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT,D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB ,D_GS_CSZT} = proxy.$dict("D_GSXT_YJXX_CZZT",'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB","D_GS_CSZT")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
{ label: "比重类别", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "细类", prop: "czzt", showSolt: true },
|
||||
{ label: "开始放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "结束放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "飞行时间", prop: "czzt", showSolt: true },
|
||||
{ label: "放飞区域", prop: "czzt", showSolt: true },
|
||||
{ label: "无人机类型", prop: "czzt", showSolt: true },
|
||||
{ label: "手机号", prop: "czzt", showSolt: true },
|
||||
{ label: "所属单位", prop: "czzt", showSolt: true },
|
||||
{ label: "超时状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "姓名", prop: "yjRyxm" },
|
||||
// { label: "性别", prop: "xb", showSolt: true, width: 80 },
|
||||
// { label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||
// { label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
// { label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value,...val };
|
||||
listQuery.value.startTime = val.times ? val.times[0] : ''
|
||||
listQuery.value.endTime = val.times ? val.times[1] : ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '14', // 无人机预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTpreplace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '无人机预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx,val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 详情
|
||||
const paginationOpen=ref(false)
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,87 +1,39 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading" style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<div ref="searchBox">
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">签收</el-button>
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
expand
|
||||
@chooseData="handleChooseData"
|
||||
:rowClassName="getRowClassName"
|
||||
>
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props"/>
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<div class="tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')" v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openAddFrom(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
@ -91,7 +43,8 @@
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj" :tacitly="tacitly" />
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
@ -99,7 +52,7 @@
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList"/>
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Pagination v-model="paginationOpen" />
|
||||
@ -111,6 +64,7 @@ import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
@ -128,10 +82,12 @@ import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Pagination from "./components/particulars.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT,D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB ,D_GS_CSZT} = proxy.$dict("D_GSXT_YJXX_CZZT",'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB","D_GS_CSZT")
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_GS_CSZT } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_GS_CSZT")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
@ -143,28 +99,28 @@ const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "比中项", prop: 'yjLx', showType: "checkbox", showSelectAll: true, options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "比中项", prop: 'bzx', showType: "select", options: [{ label: '人员', value: '1', }, { label: '车辆', value: '2', }] },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "人员类别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "接收单位", prop: 'ssbmdm', placeholder: "请选择接收单位", showType: "department" },
|
||||
{ label: "放飞开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择放飞开始时间" },
|
||||
{ label: "放飞结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择放飞结束时间" },
|
||||
{ label: "无人机型号", prop: 'xm', placeholder: "请输入无人机型号", showType: "input" },
|
||||
{ label: "手机号码", prop: 'mobile', placeholder: "请输入手机号码", showType: "input" },
|
||||
{ label: "姓名", prop: 'xm', placeholder: "请输入姓名", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
{ label: "放飞区域", prop: 'xm', placeholder: "请输入放飞区域", showType: "input" },
|
||||
{ label: "身份证号码", prop: 'sfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
@ -182,31 +138,23 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 160, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "处置状态", prop: "czzt", showSolt: true },
|
||||
{ label: "姓名", prop: "yjRyxm" },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
{ label: "比重类别", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "细类", prop: "czzt", showSolt: true },
|
||||
{ label: "开始放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "结束放飞时间", prop: "czzt", showSolt: true },
|
||||
{ label: "飞行时间", prop: "czzt", showSolt: true },
|
||||
{ label: "放飞区域", prop: "czzt", showSolt: true },
|
||||
{ label: "无人机类型", prop: "czzt", showSolt: true },
|
||||
{ label: "手机号", prop: "czzt", showSolt: true },
|
||||
{ label: "所属单位", prop: "czzt", showSolt: true },
|
||||
{ label: "超时状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
// { label: "处置状态", prop: "czzt", showSolt: true },
|
||||
// { label: "预警时间", prop: "yjSj", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "姓名", prop: "yjRyxm" },
|
||||
// { label: "性别", prop: "xb", showSolt: true, width: 80 },
|
||||
// { label: "年龄", prop: "nl", showSolt: true, width: 80 },
|
||||
// { label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
// { label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true, width: 200 },
|
||||
// { label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
// { label: "相似度", prop: "xsd", showSolt: true },
|
||||
// { label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: "处置状态", align: 'center', width: 80, slotName: 'czzt' },
|
||||
{ prop: 'yjRyxm', label: '人员姓名', align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', width: 80, align: 'center' },
|
||||
{ label: '预警级别', width: 80, align: 'center', slotName: 'yjJb' },
|
||||
{ label: '比重类别', width: 80, align: 'center', slotName: 'bzlb' },
|
||||
{ prop: 'xl', label: '细类', width: 80, align: 'center' },
|
||||
{ prop: 'ksffsj', label: '开始放飞时间', align: 'center' },
|
||||
{ prop: 'jsffsj', label: '结束放飞时间', align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", align: 'center' },
|
||||
{ label: "数据来源", slotName: "yjLylx", align: 'center' },
|
||||
{ prop: 'mobile', label: '手机号', width: 80, align: 'center' },
|
||||
{ prop: 'wrjlx', label: '无人机类型', align: 'center' },
|
||||
{ prop: 'ffsj', label: '飞行时间', width: 80, align: 'center' },
|
||||
{ prop: 'ffqy', label: '放飞区域', width: 80, align: 'center' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -218,11 +166,11 @@ const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2'||'3') ? false : true;
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList'):[]
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666','JS_777777','JS_888888'].includes(item.roleCode)
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
@ -234,7 +182,7 @@ const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value,...val };
|
||||
listQuery.value = { ...listQuery.value, ...val };
|
||||
listQuery.value.startTime = val.times ? val.times[0] : ''
|
||||
listQuery.value.endTime = val.times ? val.times[1] : ''
|
||||
getList()
|
||||
@ -255,7 +203,8 @@ const getList = () => {
|
||||
...listQuery.value,
|
||||
yjLx: '14', // 无人机预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
pageSize: pageData.pageConfiger.pageSize,
|
||||
bzx: listQuery.value.bzx?.join(',') || '',
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
@ -276,13 +225,13 @@ const getList = () => {
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
@ -351,14 +300,14 @@ const exportExl = () => {
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ids}, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
@ -369,7 +318,7 @@ const handleQs = () => {
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx,val)
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
@ -405,13 +354,13 @@ const pushWarning = (val) => {
|
||||
}
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
// 详情
|
||||
const paginationOpen=ref(false)
|
||||
const paginationOpen = ref(false)
|
||||
const openBox = (val) => {
|
||||
paginationOpen.value = true
|
||||
}
|
||||
@ -463,9 +412,7 @@ const openBox = (val) => {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy{
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
.tabBox_zdy {
|
||||
background-color: #ffff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,484 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<!-- <template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template> -->
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>xxxx
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import Particulars from "./components/particulars.vue";
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_BZ_SF,D_GS_ZDR_RYJB, D_GS_ZDR_GJLB} = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT", "D_GS_CSZT", "D_BZ_SF","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', showType: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// // { label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 150, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 50 },
|
||||
{ label: "处置状态", prop: "czzt", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm", width: 50 },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true, width: 50 },
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true, width: 50 },
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true, width: 50 },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true, width: 50 },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true, width: 50 },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50, },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val, yjJb: val.yjJb?.join(',') || '' };
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '1', // 人员预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTp.replace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '人像预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 详情
|
||||
const paginationOpen = ref(false)
|
||||
const dataPres = ref({})
|
||||
const openBox = (val) => {
|
||||
dataPres.value = val
|
||||
paginationOpen.value = true
|
||||
}
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -2,31 +2,34 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<!-- <template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template> -->
|
||||
</Search>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
<!-- <el-button type="primary" size="small" @click="exportExl">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量签收</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs">批量分析</el-button>
|
||||
<el-button type="primary" size="small" @click="countPeople">计算人数</el-button> -->
|
||||
</template>
|
||||
</QueryFormPanel>
|
||||
|
||||
|
||||
<!-- <Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
|
||||
</Search> -->
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<!-- <PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>xxxx
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</PageTitle> -->
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -42,38 +45,58 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
<template #cszt="{ row }">
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
<!-- <template #bqdl="{ row }">
|
||||
<DictTag :value="row.bqdl" :tag="false" :options="D_GS_QLZDRLX" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<!-- <el-link type="primary" @click="openAddFrom(row)">详情</el-link> -->
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
|
||||
-->
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<!-- <span type="primary" @click="openAddFrom(row)">详情</span> -->
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<!-- <span class="primary" @click="handleQsSingle(row)">签收</span>
|
||||
<span class="primary" @click="particularsOpen(row)">详情</span>
|
||||
<span class="warning" @click="pushWarning(row)">指派</span>
|
||||
<span class="warning" v-if="row.sfbc != '1'" @click="failWarning(row)">报错</span>
|
||||
<span class="primary" @click="payAttention(row)">关注</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
@ -96,7 +119,8 @@
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB}" />
|
||||
<Particulars v-model="paginationOpen" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -109,24 +133,27 @@ import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import Particulars from "./components/particulars.vue";
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_BZ_YJLY, D_BZ_XB, D_BZ_SF,D_GS_ZDR_RYJB, D_GS_ZDR_GJLB} = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT", "D_GS_CSZT", "D_BZ_SF","D_GS_ZDR_RYJB","D_GS_ZDR_GJLB")
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX, D_GS_BKZT, D_GS_CSZT, D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT,
|
||||
D_BZ_YJLY, D_BZ_XB, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_BZ_SF, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ',
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_BKZT",
|
||||
"D_GS_CSZT", "D_BZ_SF", "D_GS_ZDR_RYJB", "D_GS_ZDR_GJLB", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
@ -138,38 +165,29 @@ const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', showType: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", prop: 'xsd', showType: "input", placeholder: "请输入相似度" },
|
||||
{ prop: 'sfglyj', showType: "checkbox", showSelectAll: false, options: [{ label: '关联预警', value: '1' }] },
|
||||
{ prop: 'sfgz', showType: "checkbox", showSelectAll: false, options: [{ label: '重点关注', value: '1' }] },
|
||||
{ prop: 'sfzp', showType: "checkbox", showSelectAll: false, options: [{ label: '二次指派', value: '1' }] },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", prop: 'yjRyxm', showType: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", prop: 'xbdm', showType: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", prop: 'ksnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "结束年龄", prop: 'jsnl', placeholder: "请输入年龄", showType: "number" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", prop: 'yjRysfzh', showType: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "布控人员", prop: 'yjRyxms', showType: "Slot" },
|
||||
// { label: "性别", prop: 'xbdm', placeholder: "请选择性别", showType: "select", options: D_BZ_XB },
|
||||
// { label: "身份证", prop: 'yjRysfzh', placeholder: "请输入身份证号码", showType: "input" },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// // { label: "人员类别", prop: 'bqdl', placeholder: "请选择人员类别", showType: "select", options: D_GS_QLZDRLX },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
{ label: "布控开始时间", key: 'bkkssj', type: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", key: 'bkjssj', type: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", key: 'startTime', type: "datetimerange", placeholder: "请选择预警时间" },
|
||||
// { label: "预警名称", prop: 'yjBt', type: "input", placeholder: "请输入预警名称" },
|
||||
{ label: "预警级别", key: 'yjJb', type: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", key: 'bkly', type: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", key: 'bkfw', type: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", key: 'gkbmdm', type: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", key: 'ssbmdm', type: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "相似度", key: 'xsd', type: "input", placeholder: "请输入相似度" },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ key: 'sfzp', label: '二次指派', type: 'select', options: D_BZ_SF, placeholder: '请选择二次指派' },
|
||||
{ key: 'sfgz', label: '重点关注', type: 'select', options: D_BZ_SF, placeholder: '请选择重点关注' },
|
||||
{ label: "签收状态", key: 'czzt', type: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", key: 'cszt', placeholder: "请选择超时状态", type: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", key: 'zkzt', type: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "姓名", key: 'yjRyxm', type: "input", placeholder: "请输入姓名" },
|
||||
{ label: "性别", key: 'xbdm', type: "select", options: D_BZ_XB, placeholder: "请选择性别" },
|
||||
{ label: "开始年龄", key: 'ksnl', placeholder: "请输入年龄", type: "number" },
|
||||
{ label: "结束年龄", key: 'jsnl', placeholder: "请输入年龄", type: "number" },
|
||||
{ label: "跨地区", key: 'sflksd', type: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "身份证号", key: 'yjRysfzh', type: "input", placeholder: "请输入身份证号" },
|
||||
{ label: "预警内容", key: 'yjNr', type: "input", placeholder: "请输入预警内容" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
@ -188,26 +206,28 @@ const pageData = reactive({
|
||||
}, //分页
|
||||
controlsWidth: 150, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 50 },
|
||||
{ label: "处置状态", prop: "czzt", showOverflowTooltip: true, width: 50 },
|
||||
{ label: "预警时间", prop: "yjSj", showOverflowTooltip: true },
|
||||
{ label: "姓名", prop: "yjRyxm", width: 50 },
|
||||
{ label: "身份证", prop: "yjRysfzh", showOverflowTooltip: true },
|
||||
{ label: "性别", prop: "xbdm", showSolt: true, width: 50 },
|
||||
{ label: "年龄", prop: "nl", showSolt: true, width: 50 },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true, width: 50 },
|
||||
{ label: "布控单位", prop: "gkbmdm", showSolt: true, width: 50 },
|
||||
{ label: "布控来源", prop: "bkly", showSolt: true, width: 50 },
|
||||
{ label: "布控范围", prop: "bkfw", showSolt: true, width: 50 },
|
||||
{ label: "布控开始时间", showOverflowTooltip: true, prop: "bkkssj", showSolt: true, width: 50 },
|
||||
{ label: "布控结束时间", showOverflowTooltip: true, prop: "bkjssj", showSolt: true, width: 50 },
|
||||
{ label: "处置要求", prop: "bkczyq", showSolt: true, showOverflowTooltip: true, width: 50 },
|
||||
{ label: "相似度", prop: "xsd", showSolt: true, width: 50 },
|
||||
{ label: "预警内容", prop: "yjNr", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "数据来源", prop: "yjLylx", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showOverflowTooltip: true, showSolt: true, width: 50, },
|
||||
{ label: "在控状态", prop: "zkzt", showOverflowTooltip: true, showSolt: true, width: 50 },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '照片', width: 50, align: 'center', slotName: 'yjTp' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ prop: 'yjSj', label: '预警时间', width: 80, align: 'center' },
|
||||
{ prop: 'yjRyxm', label: '姓名', width: 50, align: 'center' },
|
||||
{ prop: 'yjRysfzh', label: '身份证号', align: 'center' },
|
||||
{ label: '性别', width: 56, align: 'center', slotName: 'xbdm' },
|
||||
{ prop: 'nl', label: '年龄', width: 56, align: 'center' },
|
||||
{ label: '预警级别', width: 70, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", width: 70, align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", width: 80, align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", width: 80, align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "相似度", width: 50, align: 'center', slotName: 'xsd' },
|
||||
{ label: "预警内容", prop: "yjNr", width: 70, align: 'center' },
|
||||
{ label: "所属部门", prop: "ssbm", width: 70, align: 'center'},
|
||||
{ label: "数据来源", width: 70, align: 'center', slotName: 'yjLylx' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -237,9 +257,9 @@ const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val, yjJb: val.yjJb?.join(',') || '' };
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
// listQuery.value.sfglyj = val.sfglyj?.join(',') || ''
|
||||
// listQuery.value.sfgz = val.sfgz?.join(',') || ''
|
||||
// listQuery.value.sfzp = val.sfzp?.join(',') || ''
|
||||
getList()
|
||||
}
|
||||
|
||||
@ -416,7 +436,7 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -477,8 +497,6 @@ const tabHeightFn = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,491 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
</template>
|
||||
</Search>
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</template>
|
||||
<el-image v-else style="width: 30px; height:30px" :src="row.yjTp" :preview-src-list="[row.yjTp]"
|
||||
show-progress>
|
||||
<template #error>
|
||||
<div class="image-slot error">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
<img src="@/assets/images/default_male.png" width="30" height="30" v-else />
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag v-model:value="row.bkly" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag v-model:value="row.bkczyq" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xtSjly="{ row }">
|
||||
<span>{{ row.xtSjly==1?'PC':row.xtSjly==2?'移动端':'一张网' }}</span>
|
||||
</template>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag v-model:value="row.cszt" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #zkzt="{ row }">
|
||||
<DictTag v-model:value="row.zkzt" :options="D_GS_BKZT" />
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<HolographicArchive v-model="assessShow" :dataList="dataList" />
|
||||
|
||||
<Information v-model="showDialog" title="发送指令" @submit='submitSendZl' @close='closeFszl'>
|
||||
<SemdFqzl ref="semdFqzlRef" :itemData="itemData" @handleClose="handleClose" identification="yj"
|
||||
:tacitly="tacitly" />
|
||||
</Information>
|
||||
|
||||
<!-- 详情 -->
|
||||
<AddFromz ref="addFromRefs" :dict="{ D_GSXT_YJXX_CZZT, D_BZ_YJJB, D_BZ_YJLYXT }" />
|
||||
<!-- 处置建议 -->
|
||||
<Czjy ref="czjyRef" @okSubmit="getList"></Czjy>
|
||||
<!-- 指派 -->
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
import { getItem, setItem } from '@/utils/storage'
|
||||
import { exportExlByObj } from "@/utils/exportExcel.js"
|
||||
import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Particulars from './components/particulars.vue'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GSXT_YJXX_CZZT, D_GS_QLZDRLX,
|
||||
D_BZ_XB,
|
||||
D_BZ_BKLYS, D_BZ_YJJB, D_BZ_YJLYXT, D_GS_BKZT, D_BZ_SF,
|
||||
D_BZ_YJLY, D_GS_CSZT, D_GS_BK_CZYQ } = proxy.$dict("D_GSXT_YJXX_CZZT", 'D_GS_QLZDRLX ', "D_GS_BKZT", "D_BZ_SF",
|
||||
"D_BZ_YJJB", "D_BZ_YJLYXT", "D_BZ_YJLY", "D_BZ_XB", "D_BZ_BKLYS", "D_GS_CSZT", "D_GS_BK_CZYQ")
|
||||
const searchBox = ref(); //搜索框
|
||||
const roleCode = ref(false)
|
||||
const czjyRef = ref()
|
||||
const itemData = ref()
|
||||
const semdFqzlRef = ref()
|
||||
const warningShow = ref(false)
|
||||
const dataList = ref([])
|
||||
const showDialog = ref(false)// 发送指令
|
||||
const assessShow = ref(false)// 全息档案
|
||||
const searchConfiger = ref(
|
||||
[
|
||||
{ label: "布控开始时间", prop: 'bkkssj', showType: "date", placeholder: "请选择布控开始时间" },
|
||||
{ label: "布控结束时间", prop: 'bkjssj', showType: "date", placeholder: "请选择布控结束时间" },
|
||||
{ label: "预警时间", prop: 'startTime', showType: "datetimerange", placeholder: "请选择预警时间" },
|
||||
{ label: "预警级别", prop: 'yjJb', showType: "select", options: D_BZ_YJJB, placeholder: "请选择预警级别", multiple: true },
|
||||
{ label: "布控来源", prop: 'bkly', showType: "select", options: D_BZ_BKLYS, placeholder: "请选择布控来源" },
|
||||
{ label: "布控范围", prop: 'bkfw', showType: "input", placeholder: "请输入布控范围" },
|
||||
{ label: "布控单位", prop: 'gkbmdm', showType: "department", placeholder: "请选择布控单位" },
|
||||
{ label: "所属单位", prop: 'ssbmdm', showType: "department", placeholder: "请选择所属单位" },
|
||||
{ label: "签收状态", prop: 'czzt', showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
{ label: "超时状态", prop: 'cszt', placeholder: "请选择超时状态", showType: "select", options: D_GS_CSZT },
|
||||
{ label: "布控状态", prop: 'zkzt', showType: "select", options: D_GS_BKZT, placeholder: "请选择布控状态" },
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号", },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "xtSjly", showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showSolt: true },
|
||||
{ label: "在控状态", prop: "zkzt", showSolt: true},
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
const listQuery = ref({})
|
||||
const opentions = ref([])
|
||||
const loading = ref(false)
|
||||
const selectRows = ref([])
|
||||
const permission_sfqs = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
let str = getItem('deptId') ? getItem('deptId')[0].deptLevel : ''
|
||||
permission_sfqs.value = str.startsWith('2' || '3') ? false : true;
|
||||
|
||||
let rols = getItem('roleList') ? getItem('roleList') : []
|
||||
let obj = rols.find(item => {
|
||||
return ['JS_666666', 'JS_777777', 'JS_888888'].includes(item.roleCode)
|
||||
})
|
||||
roleCode.value = obj ? true : false;
|
||||
|
||||
tabHeightFn();
|
||||
getList()
|
||||
});
|
||||
// 搜索
|
||||
const onReset = () => {
|
||||
listQuery.value.yjRyxm = ''
|
||||
}
|
||||
const onSearch = (val) => {
|
||||
listQuery.value = { ...listQuery.value, ...val };
|
||||
listQuery.value = { ...val, yjJb: val.yjJb?.join(',') || '' }
|
||||
listQuery.value.startTime = val.startTime ? val.startTime[0] : ''
|
||||
listQuery.value.endTime = val.startTime ? val.startTime[1] : ''
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
yjLx: '2', // 车辆预警
|
||||
pageCurrent: pageData.pageConfiger.pageCurrent,
|
||||
pageSize: pageData.pageConfiger.pageSize
|
||||
}
|
||||
delete promes.times;
|
||||
tbYjxxGetPageList(promes).then((res) => {
|
||||
pageData.tableData = res.records.map(item => {
|
||||
return {
|
||||
...item,
|
||||
yjTp: item.yjlx == '01' ? item.yjTpreplace(ORDIMG, IMGYM) : item.yjTp
|
||||
}
|
||||
}) || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const remoteMethod = (query) => {
|
||||
if (!query) return opentions.value = [];
|
||||
loading.value = true
|
||||
tbGsxtZdrySelectList({ ryXm: query }).then(res => {
|
||||
opentions.value = res || [];
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 根据预警级别设置行样式
|
||||
const getRowClassName = (row) => {
|
||||
if (!row.row.yjJb) return '';
|
||||
const level = String(row.row.yjJb);
|
||||
if (level === '01' || level.includes('红') || level.includes('高')) return 'warning-level-01';
|
||||
if (level === '02' || level.includes('橙') || level.includes('中')) return 'warning-level-02';
|
||||
if (level === '03' || level.includes('黄') || level.includes('低')) return 'warning-level-03';
|
||||
if (level === '04' || level.includes('蓝')) return 'warning-level-04';
|
||||
return '';
|
||||
};
|
||||
|
||||
// 处理签收
|
||||
const handleQsFk = (val, type) => {
|
||||
switch (type) {
|
||||
case '签收':
|
||||
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
|
||||
val.czzt = '02'
|
||||
getList()
|
||||
proxy.$message({ type: "success", message: "签收成功" });
|
||||
});
|
||||
})
|
||||
break;
|
||||
case '反馈':
|
||||
case '查看反馈':
|
||||
emitter.emit("openFkDialog", { id: val.id, type });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const handleChooseData = (val) => {
|
||||
selectRows.value = val
|
||||
}
|
||||
|
||||
// 导出
|
||||
const exportExl = () => {
|
||||
const titleObj = {
|
||||
czzt_cname: "处置状态",
|
||||
yjSj: "预警时间",
|
||||
yjRyxm: "姓名",
|
||||
nl_cname: "年龄", // IdCard(row.yjRysfzh, 3)
|
||||
yjLylx: "数据来源",
|
||||
xb_cname: "性别",
|
||||
yjJb_cname: "预警级别",
|
||||
xsd_cname: "相似度",
|
||||
yjDz: "预警地点",
|
||||
yjCs: "预警次数",
|
||||
yjRysjh: "布控手机号",
|
||||
yjClcph: "布控车牌号",
|
||||
yjRysfzh: "身份证",
|
||||
}
|
||||
/** 导出【选中】的数据 (没有就全部)*/
|
||||
const needArr = selectRows.value?.length > 0 ? selectRows.value : pageData.tableData
|
||||
const data = needArr.map(item => {
|
||||
return {
|
||||
...item,
|
||||
nl_cname: IdCard(item.yjRysfzh, 3),
|
||||
xb_cname: IdCard(item.yjRysfzh, 2),
|
||||
xsd_cname: (item.xsd > 0 ? item.xsd : 0) + '%',
|
||||
czzt_cname: getMultiDictVal(item.czzt, D_GSXT_YJXX_CZZT),
|
||||
yjJb_cname: getMultiDictVal(item.yjJb, D_BZ_YJJB),
|
||||
}
|
||||
})
|
||||
exportExlByObj(titleObj, data, '人像预警.xlsx')
|
||||
}
|
||||
|
||||
const handleQs = () => {
|
||||
if (selectRows.value?.length === 0) return proxy.$message({ type: "warning", message: "请选择要签收的预警" });
|
||||
let wqs = selectRows.value.filter(item => item.czzt == '01');
|
||||
if (wqs.length == 0) return proxy.$message({ type: "warning", message: "数据都已签收,请选择未签收的数据" });
|
||||
let yqs = selectRows.value.filter(item => item.czzt == '02');
|
||||
let texy = yqs.length > 0 ? `${yqs.length}条已签收预警数据,确认要签收${wqs.length}条未签收预警数据吗?` : '确认要签收所有预警数据吗?'
|
||||
proxy.$confirm(texy, "警告", { type: "warning" }).then(() => {
|
||||
let ids = wqs.map(item => item.id)
|
||||
qcckPost({ ids }, '/mosty-gsxt/tbYjxx/batchQs').then(() => {
|
||||
proxy.$message({ type: "success", message: "成功" });
|
||||
getList();
|
||||
}).catch(() => {
|
||||
proxy.$message({ type: "error", message: "失败" });
|
||||
});
|
||||
}).catch(() => { });
|
||||
}
|
||||
|
||||
// 全息档案跳转
|
||||
const pushAssess = (val) => {
|
||||
return holographicProfileJump(val.yjLx, val)
|
||||
}
|
||||
|
||||
const showDetail = (item) => {
|
||||
showDialog.value = true;
|
||||
itemData.value = item
|
||||
}
|
||||
const handleClose = () => {
|
||||
showDialog.value = false;
|
||||
}
|
||||
|
||||
const submitSendZl = () => {
|
||||
semdFqzlRef.value.getsendFqzl()
|
||||
}
|
||||
const closeFszl = () => {
|
||||
semdFqzlRef.value.close()
|
||||
}
|
||||
|
||||
// 处置建议
|
||||
const handleCzjy = (row) => {
|
||||
czjyRef.value.init(row)
|
||||
}
|
||||
|
||||
// 详情
|
||||
const openAddFrom = (val) => {
|
||||
addFromRefs.value.init('add', val)
|
||||
}
|
||||
|
||||
|
||||
// 指派
|
||||
const pushWarning = (val) => {
|
||||
warningShow.value = true
|
||||
dataList.value = val;
|
||||
}
|
||||
// 详情
|
||||
const particularsShow = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
particularsShow.value = true
|
||||
dataPres.value = val
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
::v-deep .el-table .cell {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::v-deep .el-table .el-table__cell {
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
/* 预警级别行样式 */
|
||||
.warning-level-01 {
|
||||
background-color: rgba(255, 2, 2, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-01:hover {
|
||||
background-color: rgba(255, 2, 2, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-02 {
|
||||
background-color: rgba(255, 140, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-02:hover {
|
||||
background-color: rgba(255, 140, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-03 {
|
||||
background-color: rgba(255, 210, 8, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-03:hover {
|
||||
background-color: rgba(255, 210, 8, 0.15) !important;
|
||||
}
|
||||
|
||||
.warning-level-04 {
|
||||
background-color: rgba(0, 0, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
.warning-level-04:hover {
|
||||
background-color: rgba(0, 0, 255, 0.15) !important;
|
||||
}
|
||||
|
||||
/* 确保行样式应用到所有单元格 */
|
||||
.warning-level-01 td,
|
||||
.warning-level-02 td,
|
||||
.warning-level-03 td,
|
||||
.warning-level-04 td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -2,31 +2,20 @@
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" @reset="onReset" :key="pageData.keyCount">
|
||||
<template #yjRyxms>
|
||||
<el-select clearable v-model="listQuery.yjRyxm" filterable remote allow-create
|
||||
default-first-optionreserve-keyword placeholder="请输入布控人员" :remote-method="remoteMethod" :loading="loading"
|
||||
style="width: 240px">
|
||||
<el-option v-for="item in opentions" :key="item.rySfzh" :label="item.ryXm" :value="item.rySfzh" />
|
||||
</el-select>
|
||||
<QueryFormPanel v-model="listQuery" :fields="searchConfiger" @search='onSearch'>
|
||||
<template #but>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</Search>
|
||||
</QueryFormPanel>
|
||||
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="exportExl">导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleQs" v-if="permission_sfqs">批量签收</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox tabBox_zdy">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" expand
|
||||
@chooseData="handleChooseData" :rowClassName="getRowClassName">
|
||||
<template #expand="{ props }">
|
||||
<Items :row="props" />
|
||||
</template>
|
||||
<div class=" tabBox_zdy">
|
||||
<WarnDataTable :loading="pageData.tableConfiger.loading" :tableHeight="pageData.tableHeight"
|
||||
:data="pageData.tableData" :columns="pageData.tableColumn" table-class="warn-table"
|
||||
@selectionChange="handleChooseData">
|
||||
<template #yjTp="{ row }">
|
||||
<template v-if="!row.yjTp || row.yjTp.includes('baidu')">
|
||||
<img src="@/assets/images/car.png" width="30" height="30" v-if="row.yjLx == 2" />
|
||||
@ -42,55 +31,48 @@
|
||||
</template>
|
||||
</el-image>
|
||||
</template>
|
||||
|
||||
<template #nl="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 3) }}
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :value="row.czzt" :color="row.czzt === '01' ? '#ff2424' : '#1d72e8'" :tag="false"
|
||||
:options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #xb="{ row }">
|
||||
{{ IdCard(row.yjRysfzh, 2) }}
|
||||
<template #xbdm="{ row }">
|
||||
<DictTag :value="row.xbdm" :tag="false" :options="D_BZ_XB" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<div :style="{ 'background-color': bqYs(row.yjJb) }">
|
||||
<DictTag :value="row.yjJb" color="#fff" :tag="false" :options="D_BZ_YJJB" />
|
||||
</div>
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag :value="row.bkly" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag :value="row.bkczyq" :tag="false" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xsd="{ row }">
|
||||
{{ row.xsd }}%
|
||||
</template>
|
||||
<template #yjLylx="{ row }">
|
||||
<DictTag v-model:value="row.yjLylx" :options="D_BZ_YJLY" />
|
||||
<DictTag :value="row.yjLylx" :tag="false" :options="D_BZ_YJLY" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag v-model:value="row.czzt" :options="D_GSXT_YJXX_CZZT" />
|
||||
</template>
|
||||
<template #yjJb="{ row }">
|
||||
<DictTag v-model:value="row.yjJb" :options="D_BZ_YJJB" />
|
||||
</template>
|
||||
<template #bkly="{ row }">
|
||||
<DictTag v-model:value="row.bkly" :options="D_BZ_BKLYS" />
|
||||
</template>
|
||||
<template #bkczyq="{ row }">
|
||||
<DictTag v-model:value="row.bkczyq" :options="D_GS_BK_CZYQ" />
|
||||
</template>
|
||||
<template #xtSjly="{ row }">
|
||||
<span>{{ row.xtSjly==1?'PC':row.xtSjly==2?'移动端':'一张网' }}</span>
|
||||
</template>
|
||||
|
||||
<template #cszt="{ row }">
|
||||
<DictTag v-model:value="row.cszt" :options="D_GS_CSZT" />
|
||||
<DictTag :value="row.cszt" :tag="false" :options="D_GS_CSZT" />
|
||||
</template>
|
||||
<template #zkzt="{ row }">
|
||||
<DictTag v-model:value="row.zkzt" :options="D_GS_BKZT" />
|
||||
<template #operation="{ row }">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<span class="warning" @click="pushAssess(row)">全息档案</span>
|
||||
<span class="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</span>
|
||||
<!-- <span type="primary" @click="showDetail(row)">转合成</span> -->
|
||||
<!-- <span type="danger" @click="delDictItem(row.id)">转会商</span> -->
|
||||
<span class="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</span>
|
||||
<span class="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</span>
|
||||
<!-- <span type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</span> -->
|
||||
<span class="primary" @click="openBox(row)">详情</span>
|
||||
<span class="primary" @click="pushWarning(row)">指派</span>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="warning" @click="pushAssess(row)">全息档案</el-link>
|
||||
<el-link type="primary" @click="handleCzjy(row)" v-if="roleCode">处置建议</el-link>
|
||||
<!-- <el-link type="primary" @click="showDetail(row)">转合成</el-link> -->
|
||||
<!-- <el-link type="danger" @click="delDictItem(row.id)">转会商</el-link> -->
|
||||
<el-link type="success" @click="handleQsFk(row, '签收')" v-if="row.czzt == '01' && permission_sfqs">签收</el-link>
|
||||
<el-link type="success" @click="handleQsFk(row, '反馈')"
|
||||
v-else-if="row.czzt == '02' && permission_sfqs">反馈</el-link>
|
||||
<!-- <el-link type="success" @click="handleQsFk(row, '查看反馈')" v-else>查看反馈</el-link> -->
|
||||
<el-link type="primary" @click="openBox(row)">详情</el-link>
|
||||
<el-link type="primary" @click="pushWarning(row)">指派</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</WarnDataTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }">
|
||||
</Pages>
|
||||
@ -113,7 +95,8 @@
|
||||
<ZpForm v-model="warningShow" :dataList="dataList" />
|
||||
<!-- 反馈 -->
|
||||
<FkDialog @change="getList" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres" :dict="{D_BZ_XB,D_BZ_YJJB,D_GS_QLZDRLX,D_GS_ZDR_RYJB,D_GS_ZDR_GJLB,D_GS_BK_CZYQ}" />
|
||||
<Particulars v-model="particularsShow" :dataList="dataPres"
|
||||
:dict="{ D_BZ_XB, D_BZ_YJJB, D_GS_QLZDRLX, D_GS_ZDR_RYJB, D_GS_ZDR_GJLB, D_GS_BK_CZYQ }" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -125,20 +108,20 @@ import { getMultiDictVal } from "@/utils/dict.js"
|
||||
import { tbYjxxGetPageList } from '@/api/yj.js'
|
||||
import { IdCard } from '@/utils/validate.js'
|
||||
import { tbGsxtZdrySelectList } from "@/api/zdr.js"
|
||||
import SemdFqzl from '@/components/instructionHasBeen/sendFqzl.vue'
|
||||
import { holographicProfileJump } from "@/utils/tools.js"
|
||||
import Items from './item/items.vue'
|
||||
import WarnDataTable from '@/views/backOfficeSystem/ces/components/WarnDataTable.vue'
|
||||
import QueryFormPanel from "@/views/backOfficeSystem/ces/components/QueryFormPanel.vue";
|
||||
import HolographicArchive from '@/views/home/components/holographicArchive.vue'
|
||||
import Information from "@/views/home/model/information.vue";
|
||||
import FkDialog from "@/views/backOfficeSystem/fourColorManage/warningControl/centerHome/components/fkDialog.vue";
|
||||
import ZpForm from "@/views/backOfficeSystem/fourColorManage/warningControl/sevenWarning/zpForm.vue";
|
||||
import Czjy from './components/czjy.vue';
|
||||
import AddFromz from './components/addFrom.vue';
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import Particulars from './components/particulars.vue'
|
||||
import { bqYs } from '@/utils/tools.js'
|
||||
const ORDIMG = 'https://89.40.7.122:38496/image'
|
||||
const IMGYM = 'https://sg.lz.dsj.xz/dhimage'
|
||||
const { proxy } = getCurrentInstance();
|
||||
@ -172,46 +155,37 @@ const searchConfiger = ref(
|
||||
{ label: "跨地区", prop: 'sflksd', showType: "select", options: D_BZ_SF, placeholder: "请选择是否跨地区" },
|
||||
{ label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号" },
|
||||
{ label: "预警内容", prop: 'yjNr', showType: "input", placeholder: "请输入预警内容" },
|
||||
// { label: "车牌号", prop: 'yjClcph', showType: "input", placeholder: "请输入车牌号", },
|
||||
// { label: "预警时间", prop: 'times', showType: "datetimerange" },
|
||||
// { label: "状态", prop: 'czzt', placeholder: "请选择状态", showType: "select", options: D_GSXT_YJXX_CZZT },
|
||||
// { label: "预警级别", prop: 'yjJb', placeholder: "请选择预警级别", showType: "select", options: D_BZ_YJJB },
|
||||
// { label: "细类", prop: 'yjbqmc', placeholder: "请输入细类", showType: "input" },
|
||||
// { label: "活动发生地址", prop: 'yjDz', placeholder: "请输入活动发生地址", showType: "input" },
|
||||
// { label: "接收单位", prop: 'ssbmdm',showType: "department" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false,
|
||||
haveControls: true
|
||||
},
|
||||
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 180, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "预警图片", prop: "yjTp", showSolt: true, width: 100 },
|
||||
{ label: "状态", prop: "czzt", showSolt: true, width: 80 },
|
||||
{ label: "车牌号", prop: "yjClcph", showOverflowTooltip: true },
|
||||
{ label: "预警级别", prop: "yjJb", showSolt: true },
|
||||
{ label: "布控单位", prop: "gkbmmc", showOverflowTooltip: true },
|
||||
{ label: "布控来源", prop: "bkly", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "布控范围", prop: "bkfw", showOverflowTooltip: true },
|
||||
{ label: "布控开始时间", prop: "bkkssj", showOverflowTooltip: true },
|
||||
{ label: "布控结束时间", prop: "bkjssj", showOverflowTooltip: true },
|
||||
{ label: "处置要求", prop: "bkczyq", showOverflowTooltip: true, showSolt: true },
|
||||
{ label: "内容", prop: "yjNr", showOverflowTooltip: true },
|
||||
{ label: "所属部门", prop: "ssbm", showOverflowTooltip: true },
|
||||
{ label: "数据来源", prop: "xtSjly", showSolt: true },
|
||||
{ label: "超时状态", prop: "cszt", showSolt: true },
|
||||
{ label: "在控状态", prop: "zkzt", showSolt: true},
|
||||
{ type: 'index', label: '序号', width: 55, align: 'center' },
|
||||
{ label: '照片', width: 50, align: 'center', slotName: 'yjTp' },
|
||||
{ label: "处置状态", align: 'center', width: 70, slotName: 'czzt' },
|
||||
{ label: "车牌号", prop: "yjClcph", align: 'center', width: 80 },
|
||||
{ label: '预警级别', width: 70, align: 'center', slotName: 'yjJb' },
|
||||
{ label: "布控单位", prop: "gkbmmc", align: 'center' },
|
||||
{ label: "布控来源", align: 'center', slotName: 'bkly', width: 70 },
|
||||
{ prop: 'bkfw', label: "布控范围", align: 'center', width: 70 },
|
||||
{ prop: 'bkkssj', label: "布控开始时间", align: 'center' },
|
||||
{ prop: 'bkjssj', label: "布控结束时间", align: 'center' },
|
||||
{ label: "处置要求", width: 70, slotName: 'bkczyq', align: 'center' },
|
||||
{ label: "预警内容", prop: "yjNr", align: 'center' },
|
||||
{ label: "数据来源", width: 70, align: 'center', slotName: 'yjLylx' },
|
||||
{ label: '操作', width: 180, slotName: 'operation' },
|
||||
{ label: '超时状态', width: 80, align: 'center', slotName: 'cszt' },
|
||||
{ label: "在控状态", width: 70, align: 'center', slotName: "zkzt" },
|
||||
]
|
||||
});
|
||||
const addFromRefs = ref()
|
||||
@ -414,7 +388,7 @@ const pushWarning = (val) => {
|
||||
const particularsShow = ref(false)
|
||||
const dataPres = ref()
|
||||
const openBox = (val) => {
|
||||
particularsShow.value = true
|
||||
particularsShow.value = true
|
||||
dataPres.value = val
|
||||
|
||||
}
|
||||
@ -422,7 +396,7 @@ const openBox = (val) => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 290;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 230;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -484,8 +458,6 @@ const tabHeightFn = () => {
|
||||
}
|
||||
|
||||
.tabBox_zdy {
|
||||
.el-table--fit {
|
||||
overflow: unset !important;
|
||||
}
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
256
src/views/backOfficeSystem/goingJob/addForm.vue
Normal file
256
src/views/backOfficeSystem/goingJob/addForm.vue
Normal file
@ -0,0 +1,256 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}完成情况</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" :rules="rules">
|
||||
</FormMessage>
|
||||
<div>
|
||||
<div class="btn_box">
|
||||
<el-button :disabled="disabled" type="primary" size="small" @click="openZdsjLod">打开今日完成情况列表</el-button>
|
||||
</div>
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="300"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger">
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" :disabled="disabled" size="small" @click="openZdsjLod('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" :disabled="disabled" size="small" @click="deleteZdsjLodList(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
<div>
|
||||
<div class="btn_box">
|
||||
<el-button :disabled="disabled" type="primary" size="small" @click="openToDayContent">明日值班工作列表</el-button>
|
||||
</div>
|
||||
<MyTable :tableData="toDayJobList.tableData" :tableColumn="toDayJobList.tableColumn" :tableHeight="300"
|
||||
:key="toDayJobList.keyCount" :tableConfiger="toDayJobList.tableConfiger">
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" :disabled="disabled" size="small"
|
||||
@click="openToDayContent('edit', row)">编辑</el-link>
|
||||
<el-link type="danger" :disabled="disabled" size="small" @click="deleteToDayContent(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ZdsjLod v-model="zdsjLodShow" @addZdsjLodList="addZdsjLodList" :zdsjLod="zdsjLod" />
|
||||
<ToDayContent v-model="toDayContentShow" @addZdsjLodList="addToDayLodList" :toDayContent="toDayContent" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import ZdsjLod from "./zdsjLod.vue";
|
||||
import ToDayContent from "./toDayContent.vue";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
jrzbrXm: [{ required: true, message: "请输入今日值班人", trigger: "blur" }],
|
||||
jrzbrLxdh: [{ required: true, message: "请输入今日值班电话", trigger: "blur" }],
|
||||
mrzbrXm: [{ required: true, message: "请输入明日值班人", trigger: "blur" }],
|
||||
mrzbrLxdh: [{ required: true, message: "请输入明日值班电话", trigger: "blur" }],
|
||||
kssj: [{ required: true, message: "请选择开始时间", trigger: "blur" }],
|
||||
jssj: [{ required: true, message: "请选择结束时间", trigger: "blur" }],
|
||||
gzrq: [{ required: true, message: "请选择工作日期", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const formData = ref([
|
||||
{ label: "今日值班人", prop: "jrzbrXm", type: "input" },
|
||||
{ label: "今日值班电话", prop: "jrzbrLxdh", type: "input" },
|
||||
{ label: "明日值班人", prop: "mrzbrXm", type: "input" },
|
||||
{ label: "明日值班电话", prop: "mrzbrLxdh", type: "input" },
|
||||
{ label: "开始时间", prop: "kssj", type: "datetime" },
|
||||
{ label: "结束时间", prop: "jssj", type: "datetime" },
|
||||
{ label: "工作日期", prop: "gzrq", type: "date" },
|
||||
{ label: "备注", prop: "bz", type: "textarea", width: "100%" },
|
||||
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "工作任务", prop: "grw", showOverflowTooltip: true },
|
||||
{ label: "完成情况", prop: "wcqk", showOverflowTooltip: true },
|
||||
{ label: " 来源", prop: "ly", showOverflowTooltip: true },
|
||||
// { label: "序号", prop: "index", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const toDayJobList = reactive({
|
||||
tableData: [], //表格数据
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null", //选择类型
|
||||
},
|
||||
tableColumn: [
|
||||
{ label: "工作内容", prop: "gznr", showOverflowTooltip: true },
|
||||
]
|
||||
});
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
qcckGet({}, '/mosty-gsxt/gzqk/' + row.id).then(res => {
|
||||
listQuery.value = res;
|
||||
pageData.tableData = res.wcqkList || [];
|
||||
toDayJobList.tableData = res.zbgzList || [];
|
||||
});
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
} else {
|
||||
disabled.value = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
wcqkList: pageData.tableData,
|
||||
zbgzList: toDayJobList.tableData,
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
loading.value = true;
|
||||
if (title.value == "新增") {
|
||||
qcckPost(promes, '/mosty-gsxt/gzqk/addEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
} else {
|
||||
qcckPut(promes, '/mosty-gsxt/gzqk/editEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
//打开今日完成情况列表
|
||||
const zdsjLodShow = ref();
|
||||
const zdsjLod = ref();
|
||||
const openZdsjLod = (type, row) => {
|
||||
if (type == 'edit') {
|
||||
console.log(row);
|
||||
zdsjLod.value = { ...row };
|
||||
}
|
||||
zdsjLodShow.value = true;
|
||||
}
|
||||
const addZdsjLodList = (val) => {
|
||||
const index = pageData.tableData.findIndex(v => v.id == val.id);
|
||||
if (index != -1) {
|
||||
pageData.tableData[index] = val;
|
||||
} else {
|
||||
pageData.tableData.push(val);
|
||||
}
|
||||
}
|
||||
const deleteZdsjLodList = (id) => {
|
||||
const index = pageData.tableData.findIndex(v => v.id == id);
|
||||
if (index != -1) {
|
||||
pageData.tableData.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// 打开明日值日列表
|
||||
const toDayContentShow = ref();
|
||||
const toDayContent = ref();
|
||||
const openToDayContent = (type, row) => {
|
||||
if (type == 'edit') {
|
||||
toDayContent.value = { ...row };
|
||||
}
|
||||
toDayContentShow.value = true;
|
||||
}
|
||||
const addToDayLodList = (val) => {
|
||||
const index = toDayJobList.tableData.findIndex(v => v.id == val.id);
|
||||
if (index != -1) {
|
||||
toDayJobList.tableData[index] = val;
|
||||
} else {
|
||||
toDayJobList.tableData.push(val);
|
||||
}
|
||||
}
|
||||
const deleteToDayContent = (id) => {
|
||||
const index = toDayJobList.tableData.findIndex(v => v.id == id);
|
||||
if (index != -1) {
|
||||
toDayJobList.tableData.splice(index, 1);
|
||||
}
|
||||
}
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
});
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.btn_box {
|
||||
margin: 10px 0;
|
||||
}
|
||||
</style>
|
||||
175
src/views/backOfficeSystem/goingJob/index.vue
Normal file
175
src/views/backOfficeSystem/goingJob/index.vue
Normal file
@ -0,0 +1,175 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加完成情况</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #sjzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sjzt" :options="D_BZ_ZDSJCZJG" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" :dict="{ D_BZ_ZDSJCZJG }" />
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_ZDSJCZJG } = proxy.$dict("D_BZ_ZDSJCZJG"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "今日值班人",
|
||||
prop: "jrzbrXm",
|
||||
placeholder: "请输入今日值班人",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "明日值班人",
|
||||
prop: "mrzbrXm",
|
||||
placeholder: "请输入明日值班人",
|
||||
showType: "input",
|
||||
}, {
|
||||
label: "开始时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择开始时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "今日值班人", prop: "jrzbrXm", showOverflowTooltip: true },
|
||||
{ label: "今日值班电话", prop: "jrzbrLxdh", showOverflowTooltip: true },
|
||||
{ label: "明日值班人", prop: "mrzbrXm", showOverflowTooltip: true },
|
||||
{ label: "明日值班电话", prop: "mrzbrLxdh", showOverflowTooltip: true },
|
||||
{ label: "开始时间", prop: "kssj", showOverflowTooltip: true },
|
||||
{ label: "结束时间", prop: "jssj" },
|
||||
{ label: "工作日期", prop: "gzrq" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/gzqk/getPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete(promes, "/mosty-gsxt/gzqk/deleteEntity").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
62
src/views/backOfficeSystem/goingJob/toDayContent.vue
Normal file
62
src/views/backOfficeSystem/goingJob/toDayContent.vue
Normal file
@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="40%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height:150px;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { ref, reactive, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import {generateRandom10Digits} from "@/utils/tools";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
toDayContent: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const emit = defineEmits(["update:modelValue", "addZdsjLodList"]);
|
||||
const title = ref("明日工作内容");
|
||||
const formData = ref([
|
||||
{ label: "工作内容", prop: "gznr", type: "textarea" ,width: "100%" },
|
||||
]);
|
||||
const rules = reactive({
|
||||
gznr: [{ required: true, message: "请输入工作内容", trigger: "blur" }],
|
||||
});
|
||||
|
||||
const closeDialog = () => {
|
||||
elform.value.reset()
|
||||
// 关闭对话框时移除事件监听器
|
||||
emit("update:modelValue", false);
|
||||
|
||||
};
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value = { ...props.toDayContent }
|
||||
}
|
||||
})
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
emit("addZdsjLodList", {...listQuery.value,id:listQuery.value.id?listQuery.value.id:generateRandom10Digits()})
|
||||
closeDialog()
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
66
src/views/backOfficeSystem/goingJob/zdsjLod.vue
Normal file
66
src/views/backOfficeSystem/goingJob/zdsjLod.vue
Normal file
@ -0,0 +1,66 @@
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" width="40%" @close="closeDialog" destroy-on-close append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<div style="width: 100%;height: 300px;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex just-center">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { ref, reactive, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||
import {generateRandom10Digits} from "@/utils/tools";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},zdsjLod: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const emit = defineEmits(["update:modelValue", "addZdsjLodList"]);
|
||||
const title = ref("今日完成情况列表");
|
||||
const formData = ref([{ label: "工作任务", prop: "grw", type: "input" },
|
||||
{ label: "来源", prop: "ly", type: "textarea", width: "100%" },
|
||||
{ label: "完成情况", prop: "wcqk", type: "textarea", width: "100%" },]);
|
||||
const rules = reactive({
|
||||
// xh: [{ required: true, message: "请输入序号", trigger: "blur" }],
|
||||
grw: [{ required: true, message: "请输入工作任务", trigger: "blur" }],
|
||||
ly: [{ required: true, message: "请输入工作来源", trigger: "blur" }],
|
||||
wcqk: [{ required: true, message: "请输入完成情况", trigger: "blur" }],
|
||||
});
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value = { ...props.zdsjLod }
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const closeDialog = () => {
|
||||
elform.value.reset()
|
||||
// 关闭对话框时移除事件监听器
|
||||
emit("update:modelValue", false);
|
||||
|
||||
};
|
||||
|
||||
const submitForm = () => {
|
||||
elform.value.submit((val) => {
|
||||
emit("addZdsjLodList", {...listQuery.value,id:listQuery.value.id?listQuery.value.id:generateRandom10Digits()})
|
||||
closeDialog()
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
||||
178
src/views/backOfficeSystem/policeManagement/addForm.vue
Normal file
178
src/views/backOfficeSystem/policeManagement/addForm.vue
Normal file
@ -0,0 +1,178 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}事件</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px"
|
||||
:rules="rules">
|
||||
</FormMessage>
|
||||
<div style="display: flex;justify-content: flex-end;margin-bottom: 10px;">
|
||||
<el-button type="primary" style="margin-left: 10px;" @click="drawShape()">选择坐标</el-button>
|
||||
</div>
|
||||
<div style="height: 400px;width: 100%; position: absolute;">
|
||||
<GdMap :mapid="'map-92'"></GdMap>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
import GdMap from "@/components/GdMap/index.vue";
|
||||
import emitter from "@/utils/eventBus.js";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
sjbt: [{ required: true, message: "请输入事件标题", trigger: "blur" }],
|
||||
shms: [{ required: true, message: "请输入事件描述", trigger: "blur" }],
|
||||
jd: [{ required: true, message: "请输入经度", trigger: "blur" }],
|
||||
wd: [{ required: true, message: "请输入纬度", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({
|
||||
bqdlList: [],
|
||||
bqxlList: [],
|
||||
}); //表单
|
||||
const formData = ref();
|
||||
watch(() => props.dict.D_BZ_ZDSJCZJG, (newVal) => {
|
||||
if (newVal) {
|
||||
formData.value = [
|
||||
{ label: "事件标题", prop: "sjbt", type: "input" },
|
||||
// { label: "事件描述", prop: "shms", type: "input" },
|
||||
{ label: "事件性质", prop: "sjxz", type: "input" },
|
||||
{ label: "事件地址", prop: "sjdz", type: "input" },
|
||||
// { label: "事件状态", prop: "sjzt", type: "select", options: props.dict.D_BZ_ZDSJCZJG },
|
||||
{ label: "事发时间", prop: "fssj", type: "datetime" },
|
||||
{ label: "事件描述", prop: "shms", type: "textarea", width: "100%" },
|
||||
{ label: "处置结果", prop: "czjg", type: "textarea", width: "100%" },
|
||||
{ label: "经度", prop: "jd", type: "input", disabled: true },
|
||||
{ label: "纬度", prop: "wd", type: "input", disabled: true },
|
||||
]
|
||||
}
|
||||
}, { deep: true });
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
listQuery.value = row;
|
||||
emitter.emit('addPointArea', { coords: [{ jd: row.jd, wd: row.wd }], icon: require("@/assets/point/zl.png"), flag: "zdsj" })
|
||||
}
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
}
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
let url = title.value == "新增" ? "/mosty-gsxt/zdsj/addEntity" : "/mosty-gsxt/zdsj/updateEntity";
|
||||
loading.value = true;
|
||||
qcckPost(promes, url).then(() => {
|
||||
loading.value = false;
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
emitter.on("coordString", coordStringHandler);
|
||||
});
|
||||
const coordStringHandler = (res) => {
|
||||
if (res.type === "point") {
|
||||
listQuery.value.jd = res.coord[0];
|
||||
listQuery.value.wd = res.coord[1];
|
||||
emitter.emit('addPointArea', { coords: [{ jd: res.coord[0], wd: res.coord[1] }], icon: require("@/assets/point/zl.png"), flag: "zdsj" })
|
||||
emitter.emit('setMapCenter', { location: [res.coord[0], res.coord[1]], zoomLevel: 15 })
|
||||
}
|
||||
};
|
||||
const drawShape = () => {
|
||||
emitter.emit("drawShape", {
|
||||
flag: "zdsj",
|
||||
type: "point",
|
||||
isclear: true
|
||||
});
|
||||
}
|
||||
onUnmounted(() => {
|
||||
emitter.off("coordString", coordStringHandler);
|
||||
})
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
177
src/views/backOfficeSystem/policeManagement/index.vue
Normal file
177
src/views/backOfficeSystem/policeManagement/index.vue
Normal file
@ -0,0 +1,177 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加事件</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #sjzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sjzt" :options="D_BZ_ZDSJCZJG" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" :dict="{D_BZ_ZDSJCZJG}" />
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_ZDSJCZJG } = proxy.$dict("D_BZ_ZDSJCZJG"); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "事件标题",
|
||||
prop: "sjbt",
|
||||
placeholder: "请输入事件标题",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "事件状态",
|
||||
prop: "sjzt",
|
||||
placeholder: "请选择事件状态",
|
||||
showType: "select",
|
||||
options: D_BZ_ZDSJCZJG
|
||||
}, {
|
||||
label: "开始时间",
|
||||
prop: "startTime",
|
||||
placeholder: "请选择开始时间",
|
||||
showType: "datetimerange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "事件标题", prop: "sjbt", showOverflowTooltip: true },
|
||||
{ label: "事件地址", prop: "sjdz", showOverflowTooltip: true },
|
||||
{ label: "事件性质", prop: "sjxz", showOverflowTooltip: true },
|
||||
{ label: "事件描述", prop: "shms", showOverflowTooltip: true },
|
||||
{ label: "发生时间", prop: "fssj" },
|
||||
{ label: "处置结果", prop: "czjg", showOverflowTooltip: true },
|
||||
{ label: "事件状态", prop: "sjzt", showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/zdsj/selectPage").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckPost(promes, "/mosty-gsxt/zdsj/deletes").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
// 事件操作
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -21,14 +21,13 @@ const emit = defineEmits(["updateDate"]);
|
||||
const props = defineProps({
|
||||
dic: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
default: () => { }
|
||||
}
|
||||
});
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = ref( [
|
||||
|
||||
const formData = ref([
|
||||
{ label: "报警电话", prop: "bjdh", type: "input" },
|
||||
{ label: "报警电话用户地址", prop: "bjdhyhdz", type: "input" },
|
||||
{ label: "报警电话用户名", prop: "bjdhyhm", type: "input" },
|
||||
@ -36,7 +35,7 @@ const formData = ref( [
|
||||
{ label: "报警人名称", prop: "bjrmc", type: "input" },
|
||||
{ label: "报警人证件号码", prop: "bjrzjhm", type: "input" },
|
||||
{ label: "报警时间", prop: "bjsj", type: "input" },
|
||||
{ label: "警情颜色", prop: "color", type: "select",options: props.dic.D_GS_SSYJ },
|
||||
{ label: "警情颜色", prop: "color", type: "select", options: props.dic.D_GS_SSYJ },
|
||||
{ label: "管辖单位名称", prop: "gxdwmc", type: "input" },
|
||||
{ label: "单位名称", prop: "jcjxtjsdwmc", type: "input" },
|
||||
{ label: "接警单编号", prop: "jjdbh", type: "input" },
|
||||
@ -46,13 +45,13 @@ const formData = ref( [
|
||||
{ label: "接警完成时间", prop: "jjwcsj", type: "input" },
|
||||
{ label: "接警员编号", prop: "jjybh", type: "input" },
|
||||
{ label: "接警员姓名", prop: "jjyxm", type: "input" },
|
||||
{ label: "警情标签", prop: "jqbq", type: "select",options: props.dic.D_BZ_JQBQ},
|
||||
{ label: "警情标签", prop: "jqbq", type: "select", options: props.dic.D_BZ_JQBQ },
|
||||
{ label: "警情地址", prop: "jqdz", type: "input" },
|
||||
{ label: "警情类别代码", prop: "jqlbdm", type: "select", options: props.dic.JQLB },
|
||||
{ label: "警情类型代码", prop: "jqlxdm", type: "select",options: props.dic.JQLX},
|
||||
{ label: "警情来源", prop: "jqly", type: "select",options: props.dic.D_BZ_JQLY},
|
||||
{ label: "警情细类代码", prop: "jqxldm", type: "select" ,options: props.dic.JQXL},
|
||||
{ label: "警情子类代码", prop: "jqzldm", type: "select" ,options: props.dic.JQZL},
|
||||
{ label: "警情类型代码", prop: "jqlxdm", type: "select", options: props.dic.JQLX },
|
||||
{ label: "警情来源", prop: "jqly", type: "select", options: props.dic.D_BZ_JQLY },
|
||||
{ label: "警情细类代码", prop: "jqxldm", type: "select", options: props.dic.JQXL },
|
||||
{ label: "警情子类代码", prop: "jqzldm", type: "select", options: props.dic.JQZL },
|
||||
{ label: "报警内容", prop: "bjnr", type: "textarea", width: "100%" },
|
||||
{ label: "补充接警内容", prop: "bcjjnr", type: "textarea", width: "100%" },
|
||||
{ label: "被困人员情况说明", prop: "bkryqksm", type: "textarea", width: "100%" },
|
||||
|
||||
147
src/views/backOfficeSystem/workLogInfo/addForm.vue
Normal file
147
src/views/backOfficeSystem/workLogInfo/addForm.vue
Normal file
@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}值班</span>
|
||||
<div>
|
||||
<el-button type="primary" size="small" v-if="!disabled" :loading="loading" @click="submit">保存</el-button>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
<FormMessage ref="elform" :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px"
|
||||
:rules="rules">
|
||||
</FormMessage>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as rule from "@/utils/rules.js";
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watch, onUnmounted } from "vue";
|
||||
const emit = defineEmits(["getList"]);
|
||||
const props = defineProps({
|
||||
dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const rules = reactive({
|
||||
zbrxm: [{ required: true, message: "请输入值班人姓名", trigger: "blur" }],
|
||||
zbrq: [{ required: true, message: "请输入值班日期", trigger: "blur" }],
|
||||
lxdh: [{ required: true, message: "请输入值班人联系电话", trigger: "blur" }],
|
||||
});
|
||||
const listQuery = ref({}); //表单
|
||||
const formData = ref([{ label: "值班人姓名", prop: "zbrxm", type: "input" },
|
||||
{ label: "值班日期", prop: "zbrq", type: "date" },
|
||||
{ label: "联系电话", prop: "lxdh", type: "input" },
|
||||
{ label: "备注", prop: "bz", type: "textarea", width: '100%' },]);
|
||||
const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const disabled = ref(false);
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
title.value = type == 'edit' ? '编辑' : type == 'add' ? '新增' : '详情'
|
||||
dialogForm.value = true;
|
||||
if (type != 'add') {
|
||||
listQuery.value = row;
|
||||
if (type == 'detail') {
|
||||
disabled.value = true;
|
||||
} else {
|
||||
disabled.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
}
|
||||
elform.value.submit((data) => {
|
||||
loading.value = true;
|
||||
if (title.value == "新增") {
|
||||
qcckPost(promes, '/mosty-gsxt/gzzbxx/addEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
} else {
|
||||
qcckPut(promes, '/mosty-gsxt/gzzbxx/editEntity').then(() => {
|
||||
proxy.$message({ type: "success", message: title.value + "成功" });
|
||||
emit("getList");
|
||||
close();
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
// 关闭
|
||||
const close = () => {
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
onUnmounted(() => {
|
||||
})
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: calc(99% - 50px);
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.depBox {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 0 0 0 4px;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
|
||||
.coolor {
|
||||
color: #d3d3d3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.zdy-taf {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
border: 1px solid #e9e9e9;
|
||||
border-radius: 4px;
|
||||
padding: 0px 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.map {
|
||||
height: 520px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
164
src/views/backOfficeSystem/workLogInfo/index.vue
Normal file
164
src/views/backOfficeSystem/workLogInfo/index.vue
Normal file
@ -0,0 +1,164 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="handleAdd('add', null)">添加值班</el-button>
|
||||
<el-button type="danger" size="small" @click="handleRow()">批量删除</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 按钮组 -->
|
||||
<div class="content">
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="handleChooseData">
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link type="primary" size="small" @click="handleAdd('edit', row)">编辑</el-link>
|
||||
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
|
||||
<el-link type="danger" size="small" @click="handleRow(row.id)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList" />
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import AddForm from "./addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{
|
||||
label: "值班人姓名",
|
||||
prop: "zbrxm",
|
||||
placeholder: "请输入值班人姓名",
|
||||
showType: "input",
|
||||
},
|
||||
{
|
||||
label: "值班日期",
|
||||
prop: "zbrq",
|
||||
placeholder: "请选择值班日期",
|
||||
showType: "daterange",
|
||||
},
|
||||
|
||||
]);
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [], //表格数据
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkbox", //选择类型
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
}, //分页
|
||||
controlsWidth: 250, //操作栏宽度
|
||||
tableColumn: [
|
||||
{ label: "值班人姓名", prop: "zbrxm", showOverflowTooltip: true },
|
||||
{ label: "值班日期", prop: "zbrq", showOverflowTooltip: true },
|
||||
{ label: "值班人联系电话", prop: "lxdh", showOverflowTooltip: true },
|
||||
{ label: "录入人姓名", prop: "lrrXm", showOverflowTooltip: true },
|
||||
{ label: "录入日期", prop: "xtCjsj" },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
queryFrom.value = {
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.startTime ? val.startTime[1] : ''
|
||||
};
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList();
|
||||
};
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList();
|
||||
};
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...queryFrom.value,
|
||||
}
|
||||
qcckGet(promes, "/mosty-gsxt/gzzbxx/getPageList").then((res) => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => {
|
||||
pageData.tableConfiger.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
// 删除
|
||||
const ids = ref([])
|
||||
const handleChooseData = (val) => {
|
||||
ids.value = val.map(item => item.id)
|
||||
}
|
||||
const handleRow = (id) => {
|
||||
const promes = {
|
||||
ids: id ? [id] : ids.value
|
||||
}
|
||||
proxy.$confirm("确定要删除?", "警告", { type: "warning" }).then(() => {
|
||||
qcckDelete(promes, "/mosty-gsxt/gzzbxx/deleteEntity").then(() => {
|
||||
proxy.$message({ type: "success", message: "删除成功" });
|
||||
getList();
|
||||
});
|
||||
})
|
||||
};
|
||||
// 值班操作
|
||||
const addForm = ref(null);
|
||||
const handleAdd = (type, row) => {
|
||||
addForm.value.init(type, row);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user