Files
sgxt_web/src/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index.vue
2025-07-10 20:46:20 +08:00

403 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<div class="titleBox">
<PageTitle title="重点群体管理">
<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>
<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>
<el-button type="primary" size="small" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle">
<CirclePlus />
</el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #jbxx="{ row }">
<div>
<img src="" alt="" />
<ul>
<li>群体名称{{ row.qtMc }}</li>
<li class="rowClass">
风险等级
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" />
</li>
<li>创建时间{{ row.xtCjsj }}</li>
</ul>
</div>
<div class="flex">
<el-button type="primary" size="small" v-for="(item, index) in row.bqList" :key="index">
{{ item.bqMc }}</el-button>
</div>
</template>
<template #bgxx="{ row }">
<div>背景资料{{ row.qtBjzl }}</div>
<div>创建单位{{ row.xtCjbmmc }}</div>
</template>
<template #gkxx="{ row }">
<div>管辖单位{{ row.gxSsdwmc }}</div>
<div>列控原因{{ row.zdrLkyy }}</div>
<div>开始时间{{ row.startTime }}</div>
<div>截至时间{{ row.endTime }}</div>
</template>
<template #wkrs="{ row }">
<span style="color: #0072ff">{{ row.wkrs }}</span>
</template>
<template #qtZt="{ row }">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" v-if="row.qtZt == '01' || row.qtZt == '03' || row.qtZt == '06'"
@click="openDetail(row)">送审</el-link>
<el-link size="small" type="success" @click="addEdit('edit', row)" v-if="row.qtZt !== '05'">编辑</el-link>
<el-link size="small" type="primary" @click="infoList('info', row)">查看</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
</template>
</MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
</div>
<el-dialog v-model="dialogVisible" title="发起送审" width="500px" :before-close="handleClose">
<span>是否要发起送审</span>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="autoEdit"> 确定 </el-button>
</div>
</template>
</el-dialog>
<!-- 编辑 - 新增-->
<EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" />
<!-- 详情 -->
<DetailForm ref="detailDiloag" />
<!-- 选择用户 -->
<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>
</div>
</template>
<script setup>
import ZxsForm from "./components/zxsForm.vue";
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
import DetailForm from "./components/infoForm.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import 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";
const { proxy } = getCurrentInstance();
const showzxs = ref(false);
const {
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_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 show = ref(false);
const chooseUserVisible = ref(false); //审批流程
const roleIds = ref([]); //角色id
const editFormDiloag = ref();
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const autoId = ref();
const dialogVisible = ref(false);
const visible = ref(false);
const visiblefp = ref(false);
const zxsDilof = ref();
const obj = ref({
fpmc: ""
});
const searchConfiger = ref([
{
label: "群体名称",
prop: "qtMc",
placeholder: "请输入群体名称",
showType: "input"
},
{
label: "群体风险等级",
prop: "qtFxdj",
placeholder: "请选择群体风险等级",
showType: "select",
options: D_GS_ZDQT_FXDJ
},
{
label: "重点人人员级别",
prop: "zdrRyjb",
placeholder: "请选择重点人人员级别",
showType: "select",
options: D_GS_ZDR_RYJB
},
{
label: "群体类别",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "布控状态",
prop: "zdrBkZt",
placeholder: "请输入布控装态",
showType: "select",
options: D_GS_ZDR_BK_ZT
},
{
label: "布控类型",
prop: "bkzt",
placeholder: "请输入布控类型",
showType: "select",
options: D_GS_BQ_LX
}
]);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 220,
tableColumn: [
{ label: "群体基本信息", prop: "jbxx", showSolt: true },
{ label: "背景信息", prop: "bgxx", showSolt: true },
{ label: "管控信息", prop: "gkxx", showSolt: true },
{ label: "稳控人数", prop: "wkrs", showSolt: true },
{ label: "状态", prop: "qtZt", showSolt: true }
]
});
const queryFrom = ref({});
onMounted(() => {
getList();
tabHeightFn();
});
const openDetail = (row) => {
autoId.value = row.id;
dialogVisible.value = true;
};
//送审
const autoEdit = () => {
dialogVisible.value = false;
let url = `/mosty-gsxt/tbGsxtZdqt/subExamine/${autoId.value}`;
qcckPost({}, url)
.then((res) => {
ElMessage.success("提交成功");
getList();
})
.catch(() => {
ElMessage.error("提交失败");
});
};
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
// 详情
const infoList = (type, row) => {
detailDiloag.value.init(type, row);
};
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value };
let url = "/mosty-gsxt/tbGsxtZdqt/selectPage";
qcckGet(data, url)
.then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
})
.catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 详情
const addEdit = (type, row) => {
show.value = true;
visible.value = false;
nextTick(() => {
editFormDiloag.value.init(type, row);
});
};
const ids = ref([]);
const choosList = ref([]);
const chooseData = (data) => {
ids.value = Array.isArray(data) ? data.map((item) => item.id) : [];
choosList.value = Array.isArray(data) ? data : [];
};
// 选择申请数据数据
const handleApplication = () => {
if (ids.value.length === 0)
return ElMessage.error("请先选择需要布控的重点群体");
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addBksq")
.then(() => {
ElMessage.success("申请成功");
visible.value = false;
getList();
})
.catch(() => {
ElMessage.error("布控申请失败");
});
};
const handleUserSelected = (val) => {
obj.value.fpmc = val[0].userName;
obj.value.fpid = val[0].id;
};
const handlefp = () => {
if (ids.value.length === 0)
return ElMessage.error("请先选择需要分配的重点群体");
qcckPost(
{ ids: ids.value, uid: obj.value.fpid },
"/mosty-gsxt/tbGsxtZdqt/addGkmj"
)
.then(() => {
ElMessage.success("分配成功");
visible.value = false;
visiblefp.value = false;
getList();
})
.catch(() => {
ElMessage.error("分配失败");
});
};
// 移交管控
const handleMove = () => {
if (ids.value.length === 0)
return ElMessage.error("请先选择需要移交管控的重点群体");
proxy
.$confirm("是否确定移交?", "警告", { type: "warning" })
.then(() => {
qcckPost({ ids: ids.value }, "/mosty-gsxt/tbGsxtZdqt/addSfyj")
.then(() => {
ElMessage.success("移交管控成功");
getList();
})
.catch(() => {
ElMessage.error("移交管控失败");
});
})
.catch(() => { });
};
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
defineExpose({ infoList });
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
.rowClass {
display: flex;
align-items: center;
justify-content: center;
}
</style>