This commit is contained in:
2025-07-16 20:59:42 +08:00
parent 726bae2652
commit 7407a43c85
4 changed files with 677 additions and 341 deletions

View File

@ -3,28 +3,63 @@
<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
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 :disabled="disabled" v-model="listQuery" :formList="formData" labelWidth="100px" ref="elform" :rules="rules"></FormMessage>
<div class="ml50 mr50"><span class="mr10">人员标签模型 : </span><el-button type="primary" v-if="!disabled" @click="chooseMarksVisible = true">选择</el-button></div>
<div class="form_cnt">
<FormMessage
:disabled="disabled"
v-model="listQuery"
:formList="formData"
labelWidth="100px"
ref="elform"
:rules="rules"
></FormMessage>
<div class="ml50 mr50">
<span class="mr10">人员标签模型 : </span
><el-button
type="primary"
v-if="!disabled"
@click="chooseMarksVisible = true"
>选择</el-button
>
</div>
<div class="boxlist ml50 mr50">
<MyTable
:tableData="listQuery.bqList"
:tableColumn="tableDate.tableColumn"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth">
:controlsWidth="tableDate.controlsWidth"
>
<template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="props.dic.D_GS_BQ_LB" />
<DictTag
:value="row.bqLb"
:tag="false"
:options="props.dic.D_GS_BQ_LB"
/>
</template>
<template #bqLx="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
<DictTag
:value="row.bqLx"
:tag="false"
:options="props.dic.D_GS_BQ_LX"
/>
</template>
<template #bqZl="{ row }">
<DictTag :value="row.bqZl" :tag="false" :options="props.dic.D_GS_BQ_ZL" />
<DictTag
:value="row.bqZl"
:tag="false"
:options="props.dic.D_GS_BQ_ZL"
/>
</template>
<template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)">删除</el-link>
@ -33,37 +68,66 @@
</div>
<!-- 选择审核人 -->
<div class="ww100 mt20 ml50 mr50">
<el-steps direction="vertical" :active="listQuery.wccz" space="500" finish-status="success">
<el-step title="发起申请" >
<template #description>
<div class="flex align-center ww100 mt10 mb20">
<el-input v-model="listQuery.sqrXm" readonly class="ww20"></el-input>
<el-input v-model="listQuery.sqrSsbmmc" readonly class="ww20 ml10 mr10"></el-input>
<span class="f12" style="color: #333333;"> 备注发起人和部门根据登陆人自动填写</span>
</div>
</template>
</el-step>
<el-step title="审核确认" >
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span class="mr4">审核部门 : </span>
<MOSTY.Department @getDepValue="getShdep" v-model="listQuery.shSsbmdm" clearable :placeholder="listQuery.shSsbmmc ? listQuery.shSsbmmc : '' " />
</div>
</template>
</el-step>
<el-step title="审批确认" >
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span lass="mr4">审批部门 : </span>
<MOSTY.Department @getDepValue="getSPdep" v-model="listQuery.spSsbmdm" clearable :placeholder="listQuery.spSsbmmc ? listQuery.spSsbmmc : '' " />
</div>
</template>
</el-step>
<el-steps
direction="vertical"
:active="listQuery.wccz"
space="500"
finish-status="success"
>
<el-step title="发起申请">
<template #description>
<div class="flex align-center ww100 mt10 mb20">
<el-input
v-model="listQuery.sqrXm"
readonly
class="ww20"
></el-input>
<el-input
v-model="listQuery.sqrSsbmmc"
readonly
class="ww20 ml10 mr10"
></el-input>
<span class="f12" style="color: #333333">
备注发起人和部门根据登陆人自动填写</span
>
</div>
</template>
</el-step>
<el-step title="审核确认">
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span class="mr4">审核部门 : </span>
<MOSTY.Department
@getDepValue="getShdep"
v-model="listQuery.shSsbmdm"
clearable
:placeholder="listQuery.shSsbmmc ? listQuery.shSsbmmc : ''"
/>
</div>
</template>
</el-step>
<el-step title="审批确认">
<template #description>
<div class="flex align-center ww100 mt10 mb20 depBox">
<span lass="mr4">审批部门 : </span>
<MOSTY.Department
@getDepValue="getSPdep"
v-model="listQuery.spSsbmdm"
clearable
:placeholder="listQuery.spSsbmmc ? listQuery.spSsbmmc : ''"
/>
</div>
</template>
</el-step>
</el-steps>
</div>
</div>
</div>
<ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" />
<ChooseMarks
v-model="chooseMarksVisible"
@choosed="choosed"
:roleIds="roleIds"
/>
</template>
<script setup>
@ -73,16 +137,25 @@ import ChooseMarks from "@/components/ChooseList/ChooseMarks/index.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick, watch } from "vue";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
nextTick,
watch
} from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const roleIds = ref([])
const chooseMarksVisible = ref(false)
const roleIds = ref([]);
const chooseMarksVisible = ref(false);
const dialogForm = ref(false); //弹窗
const pcsList = ref([])
const pcsList = ref([]);
const rules = reactive({
ryXm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
rySfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
@ -92,40 +165,105 @@ const rules = reactive({
ryCsrq: [{ required: true, message: "请选择出生日期", trigger: "change" }],
ryJg: [{ required: true, message: "请选择籍贯", trigger: "change" }],
zdrRyjb: [{ required: true, message: "请选择人员级别", trigger: "change" }],
zdrYjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }],
zdrYjdj: [{ required: true, message: "请选择预警等级", trigger: "change" }]
});
const listQuery = ref({}); //表单
const formData = ref([])
watch(()=>props.dic,val=> {
formData.value = [
{ label: "姓名", prop: "ryXm", type: "input" },
{ label: "性别", prop: "ryXb", type: "select", options: props.dic.D_BZ_XB },
{ label: "民族", prop: "ryMz", type: "select", options: props.dic.D_BZ_MZ },
{ label: "身份证号", prop: "rySfzh", type: "input" },
{ label: "联系电话", prop: "ryLxdh", type: "input" },
{ label: "出生日期", prop: "ryCsrq", type: "date" },
{ label: "籍贯", prop: "ryJg", type: "select", options: props.dic.D_BZ_XZQHDM },
{ label: "人员级别", prop: "zdrRyjb", type: "select", options: props.dic.D_GS_ZDR_RYJB },
{ label: "预警等级", prop: "zdrYjdj", type: "select", options: props.dic.D_GS_ZDR_YJDJ },
{ label: "户籍地区划", prop: "hjdQh", type: "select", options: props.dic.D_BZ_XZQHDM },
{ label: "户籍地详址", prop: "hjdXz", type: "input" },
{ label: "户籍地派出所", prop: "hjdPcsdm", type: "select",options:pcsList },
{ label: "现住地区划", prop: "xzdQh", type: "select", options: props.dic.D_BZ_XZQHDM },
{ label: "现住地详址", prop: "xzdXz", type: "input" },
{ label: "现住地派出所", prop: "xzdPcsdm", type: "select",options:pcsList },
{ label: "管辖单位", prop: "gxSsbmdm", type: "department" },
{ label: "诉求单位", prop: "sqSsbmdm", type: "department" },
{ label: "责任单位", prop: "zrSsbmdm", type: "department" },
{ label: "所属警种", prop: "zdrSsjz", type: "select", options: props.dic.D_GS_BK_SSJZ },
{ label: "涉及警种", prop: "zdrSjjz", type: "select", options: props.dic.D_GS_BK_SSJZ, multiple: true },
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
{ label: "管控原因", prop: "zdrLkyy", type: "textarea", width: "100%" },
{ label: "处置状态", prop: "zdrCzzt", type: "select", options: props.dic.D_GS_ZDR_CZZT },
{ label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" },
{ label: "入库结束时间", prop: "zdrRkjssj", type: "datetime" },
]
},{immediate:true,deep:true})
const formData = ref([]);
watch(
() => props.dic,
(val) => {
formData.value = [
{ label: "姓名", prop: "ryXm", type: "input" },
{
label: "性别",
prop: "ryXb",
type: "select",
options: props.dic.D_BZ_XB
},
{
label: "民族",
prop: "ryMz",
type: "select",
options: props.dic.D_BZ_MZ
},
{ label: "身份证号", prop: "rySfzh", type: "input" },
{ label: "联系电话", prop: "ryLxdh", type: "input" },
{ label: "出生日期", prop: "ryCsrq", type: "date" },
{
label: "籍贯",
prop: "ryJg",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{
label: "人员级别",
prop: "zdrRyjb",
type: "select",
options: props.dic.D_GS_ZDR_RYJB
},
{
label: "预警等级",
prop: "zdrYjdj",
type: "select",
options: props.dic.D_GS_ZDR_YJDJ
},
{
label: "户籍地区划",
prop: "hjdQh",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{ label: "户籍地详址", prop: "hjdXz", type: "input" },
{
label: "户籍地派出所",
prop: "hjdPcsdm",
type: "select",
options: pcsList
},
{
label: "现住地区划",
prop: "xzdQh",
type: "select",
options: props.dic.D_BZ_XZQHDM
},
{ label: "现住地详址", prop: "xzdXz", type: "input" },
{
label: "现住地派出所",
prop: "xzdPcsdm",
type: "select",
options: pcsList
},
{ label: "管辖单位", prop: "gxSsbmdm", type: "department" },
{ label: "诉求单位", prop: "sqSsbmdm", type: "department" },
{ label: "责任单位", prop: "zrSsbmdm", type: "department" },
{
label: "所属警种",
prop: "zdrSsjz",
type: "select",
options: props.dic.D_GS_BK_SSJZ
},
{
label: "涉及警种",
prop: "zdrSjjz",
type: "select",
options: props.dic.D_GS_BK_SSJZ,
multiple: true
},
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" },
{ label: "管控民警警号", prop: "gkMjJh", type: "input" },
{ label: "管控原因", prop: "zdrLkyy", type: "textarea", width: "100%" },
{
label: "处置状态",
prop: "zdrCzzt",
type: "select",
options: props.dic.D_GS_ZDR_CZZT
},
{ label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" },
{ label: "入库结束时间", prop: "zdrRkjssj", type: "datetime" }
];
},
{ immediate: true, deep: true }
);
const tableDate = reactive({
tableConfiger: {
@ -134,7 +272,7 @@ const tableDate = reactive({
loading: false
},
controlsWidth: 90, //操作栏宽度
keyCount:0,
keyCount: 0,
tableColumn: [
{ label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" },
@ -146,20 +284,22 @@ const tableDate = reactive({
const loading = ref(false);
const elform = ref();
const title = ref("");
const showInfo = ref(false)
const disabled = ref(false)
const showInfo = ref(false);
const disabled = ref(false);
onMounted(() => {
chooseDep()
chooseDep();
});
const chooseDep = () =>{
qcckPost({orgLevel:40}, "/mosty-base/deptFeign/queryListByDept").then((res) => {
pcsList.value = res.map(item => {
return { zdmc:item.orgName, dm:item.orgCode, value:item.orgCode }
});
});
}
const chooseDep = () => {
qcckPost({ orgLevel: 40 }, "/mosty-base/deptFeign/queryListByDept").then(
(res) => {
pcsList.value = res.map((item) => {
return { zdmc: item.orgName, dm: item.orgCode, value: item.orgCode };
});
}
);
};
// 初始化数据
const init = (type, row) => {
@ -167,13 +307,15 @@ const init = (type, row) => {
title.value = type == "add" ? "新增" : type == "detail" ? "详情" : "编辑";
disabled.value = type == "detail" ? true : false;
tableDate.tableConfiger.haveControls = type == "detail" ? false : true;
if(type == 'add'){
if (type == "add") {
listQuery.value.sqrXm = getItem("USERNAME");
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;;
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;
}
setTimeout(()=>{ showInfo.value = true; },5)
setTimeout(() => {
showInfo.value = true;
}, 5);
if (row) getDataById(row.id);
};
// 根据id查询详情
@ -182,48 +324,65 @@ const getDataById = (id) => {
listQuery.value = res;
listQuery.value.zdrSjjz = listQuery.value.zdrSjjz.split(",");
tableDate.bqList = res.bqList;
listQuery.value.sqrXm = getItem("USERNAME");
listQuery.value.bkfqrSfzh = getItem("idEntityCard");
listQuery.value.sqrSsbmmc = getItem("deptId")[0].deptName;
listQuery.value.sqrSsbmdm = getItem("deptId")[0].deptCode;
});
};
// 选择标签
const choosed = (val) => {
listQuery.value.bqList = val.map(v=>{
return { bqZl:v.bqLb , bqId:v.id, bqLx:v.bqLx, bqLb:v.bqLb, bqMc:v.bqMc, bqDm:v.bqDm }
});
roleIds.value = val.map(v=>v.id)
}
listQuery.value.bqList = val.map((v) => {
return {
bqZl: v.bqLb,
bqId: v.id,
bqLx: v.bqLx,
bqLb: v.bqLb,
bqMc: v.bqMc,
bqDm: v.bqDm
};
});
roleIds.value = val.map((v) => v.id);
};
// 删除
const delDictItem = (bqId) =>{
listQuery.value.bqList = listQuery.value.bqList.filter(v=> v.bqId != bqId);
tableDate.keyCount++
}
const delDictItem = (bqId) => {
listQuery.value.bqList = listQuery.value.bqList.filter((v) => v.bqId != bqId);
tableDate.keyCount++;
};
// 提交
const submit = () => {
elform.value.submit((data) => {
data.zdrSjjz = data.zdrSjjz.join(",");
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdry/save" : "/mosty-gsxt/tbGsxtZdry/update";
let url =
title.value == "新增"
? "/mosty-gsxt/tbGsxtZdry/save"
: "/mosty-gsxt/tbGsxtZdry/update";
let params = { ...data };
if(params.hjdPcsdm) {
let obj = pcsList.value.find(v=>v.dm == params.hjdPcsdm)
params.hjdPcsmc = obj ? obj.zdmc : ''
if (params.hjdPcsdm) {
let obj = pcsList.value.find((v) => v.dm == params.hjdPcsdm);
params.hjdPcsmc = obj ? obj.zdmc : "";
}
if(params.xzdPcsdm) {
let obj1 = pcsList.value.map(v=>v.dm == params.xzdPcsdm)
params.xzdPcsmc = obj1 ? obj1.zdmc : ''
if (params.xzdPcsdm) {
let obj1 = pcsList.value.map((v) => v.dm == params.xzdPcsdm);
params.xzdPcsmc = obj1 ? obj1.zdmc : "";
}
loading.value = true;
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {loading.value = false;});
qcckPost(params, url)
.then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
})
.catch(() => {
loading.value = false;
});
});
};
// 关闭
const close = () => {
listQuery.value = {};
@ -248,23 +407,22 @@ defineExpose({ init });
margin-top: 10px;
overflow: hidden;
}
.depBox{
border: 1px solid #e9e9e9;
width: 305px;
padding: 0 0 0 4px;
border-radius: 4px;
::v-deep .el-input__inner{
border: none;
}
::v-deep .el-cascader .el-input.is-focus .el-input__inner{
border-color: transparent !important;
}
::v-deep .el-input__inner:focus {
box-shadow: none;
}
::v-deep .el-input.is-disabled .el-input__inner{
border-color: transparent !important;
}
.depBox {
border: 1px solid #e9e9e9;
width: 305px;
padding: 0 0 0 4px;
border-radius: 4px;
::v-deep .el-input__inner {
border: none;
}
::v-deep .el-cascader .el-input.is-focus .el-input__inner {
border-color: transparent !important;
}
::v-deep .el-input__inner:focus {
box-shadow: none;
}
::v-deep .el-input.is-disabled .el-input__inner {
border-color: transparent !important;
}
}
</style>

View File

@ -3,30 +3,45 @@
<div class="head_box">
<span class="title">流线索</span>
<div>
<el-button type="primary" :loading="loading" @click="submit">保存</el-button>
<el-button type="primary" :loading="loading" @click="submit"
>保存</el-button
>
<el-button @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<FormMessage
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<template #gapdive>
<div style="width: 100%;height: 10px;" class="mb20">
<div style="width: 100%; height: 10px" class="mb20">
<el-divider content-position="left">基础信息</el-divider>
</div>
</template>
<template #gapline>
<div style="width: 100%;height: 10px;" class="mb20">
<div style="width: 100%; height: 10px" class="mb20">
<el-divider content-position="left">线索内容</el-divider>
</div>
</template>
<template #scfj>
<div style="width: 100%;padding-left: 50px;">
<div>上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span> </div>
<div><MOSTY.Upload :showBtn="true" :limit="10" v-model="fjdz" /> </div>
<div style="width: 100%; padding-left: 50px">
<div>
上传附件:<span class="f12"
>可附电子表格Word文档图像音视频文件</span
>
</div>
<div>
<MOSTY.Upload :showBtn="true" :limit="10" v-model="fjdz" />
</div>
</div>
</template>
</FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<el-divider content-position="left"
><span class="mr20">相关人员</span>
</el-divider>
<MyTable
:tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn"
@ -35,14 +50,16 @@
:tableConfiger="pageForm.tableConfiger"
:controlsWidth="pageForm.controlsWidth"
>
<template #xb="{row}">
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</template>
<template #bqList="{row}">
<div v-if="row.bqList">
<el-tag type="success" v-for="(it,idx) in row.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</div>
</template>
<template #xb="{ row }">
<DictTag :value="row.xb" :tag="false" :options="props.dic.D_BZ_XB" />
</template>
<template #bqList="{ row }">
<div v-if="row.bqList">
<el-tag type="success" v-for="(it, idx) in row.bqList" :key="idx">{{
it.bqMc
}}</el-tag>
</div>
</template>
</MyTable>
</div>
</div>
@ -53,7 +70,15 @@ import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
nextTick
} from "vue";
const emit = defineEmits(["change"]);
const props = defineProps({
dic: Object
@ -63,26 +88,46 @@ const dialogForm = ref(false); //弹窗
const rules = reactive({
xsMc: [{ required: true, message: "请输入线索名称", trigger: "blur" }],
xlLx: [{ required: true, message: "请选择线索类型", trigger: "change" }],
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }],
qbLy: [{ required: true, message: "请选择情报来源", trigger: "change" }]
});
const formData = ref([
{ prop: "gapdive", type: "slot",width:'100%' },
{ prop: "gapdive", type: "slot", width: "100%" },
{ label: "线索名称", prop: "xsMc", type: "input" },
{ label: "线索类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
{ label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime"},
{ label: "指向结束时间", prop: "zxjssj", type: "datetime"},
{ label: "指向地点", prop: "zxdz", type: "input"},
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
{ prop: "gapline", type: "slot",width:'100%' },
{ prop: "scfj", type: "slot",width:'100%'},
{ label: "线索内容", prop: "xsNr", type: "textarea",width:'100%'},
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
{ label: "群体名称", prop: "qtmc", type: "input"},
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"},
{ label: "线索报送单位", prop: "ssbmdm", type: "department"},
{
label: "线索类型",
prop: "xlLx",
type: "select",
options: props.dic.D_GS_XS_LX
},
{
label: "情报来源",
prop: "qbLy",
type: "select",
options: props.dic.D_GS_XS_LY
},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime" },
{ label: "指向结束时间", prop: "zxjssj", type: "datetime" },
{ label: "指向地点", prop: "zxdz", type: "input" },
{
label: "所属专题",
prop: "sszt",
type: "select",
options: props.dic.D_BZ_SSZT
},
{ prop: "gapline", type: "slot", width: "100%" },
{ prop: "scfj", type: "slot", width: "100%" },
{ label: "线索内容", prop: "xsNr", type: "textarea", width: "100%" },
{
label: "群体类型",
prop: "qtlx",
type: "select",
options: props.dic.D_GS_XS_QTLX
},
{ label: "群体名称", prop: "qtmc", type: "input" },
{ label: "涉及人数", prop: "sjrs", type: "inputNumber" },
{ label: "线索报送单位", prop: "ssbmdm", type: "department" }
]);
const fjdz = ref()
const fjdz = ref();
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
@ -93,28 +138,26 @@ const pageForm = reactive({
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls:false
haveControls: false
},
controlsWidth: 220,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb",showSolt:true },
{ label: "性别", prop: "xb", showSolt: true },
{ label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bqList",showSolt:true }
{ label: "标签", prop: "bqList", showSolt: true }
]
});
onMounted(()=>{
tabHeightFn()
})
onMounted(() => {
tabHeightFn();
});
// 初始化数据
const init = (list) => {
fjdz.value = []
tabHeightFn()
fjdz.value = [];
tabHeightFn();
dialogForm.value = true;
pageForm.tableData = list.map((it) => {
return {
@ -130,27 +173,28 @@ const init = (list) => {
pageForm.keyCount++;
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let params = { ...data ,ryList:pageForm.tableData,cjLx:'0'};
params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(','):'';
let params = { ...data, ryList: pageForm.tableData, cjLx: "0" };
params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(",") : "";
loading.value = true;
qcckPost(params, '/mosty-gsxt/qbcj/add').then((res) => {
loading.value = false;
proxy.$message({ type: "success", message: "成功" });
emit("change");
close();
}).catch(() => {
loading.value = false;
});
qcckPost(params, "/mosty-gsxt/qbcj/add")
.then((res) => {
loading.value = false;
proxy.$message({ type: "success", message: "成功" });
emit("change");
close();
})
.catch(() => {
loading.value = false;
});
});
};
// 关闭
const close = () => {
fjdz.value = []
fjdz.value = [];
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
@ -158,7 +202,7 @@ const close = () => {
// 表格高度计算
const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720;
pageForm.tableHeight = window.innerHeight - 720;
window.onresize = function () {
tabHeightFn();
};
@ -181,17 +225,17 @@ defineExpose({ init });
overflow: hidden;
}
::v-deep .avatar-uploader{
::v-deep .avatar-uploader {
display: flex;
align-items: center;
}
::v-deep .el-upload-list{
::v-deep .el-upload-list {
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon{
::v-deep .el-upload-list__item-name .el-icon {
top: 3px;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div class="statistical-analysis">
<div class="left">
<div style="background:#fff" class="pl10 pr10 pb10 pt10">
<div style="background: #fff" class="pl10 pr10 pb10 pt10">
<div class="title">图像信息</div>
<MyTable
:tableData="pageData.tableData"
@ -19,17 +19,28 @@
<img width="60" height="60" :src="pro" alt="" />
</template>
<template #controls="{ row }">
<el-link size="small" type="success" @click="addEdit('edit', row)" >研判确认</el-link >
<el-link size="small" type="success" @click="addEdit('edit', row)"
>研判确认</el-link
>
<el-link size="small" type="primary">查看</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)"
>删除</el-link
>
</template>
</MyTable>
</div>
<div style="background:#fff" class="mt10 pl10 pr10 pb10 pt10" >
<div style="background: #fff" class="mt10 pl10 pr10 pb10 pt10">
<div class="flex align-center">
<div class="title mr20">人员信息</div>
<div class="mb13">
<el-button size="small" v-for="it in btnsList" :key="it" @click="chooseType(it)"> {{ it }} </el-button>
<el-button
size="small"
v-for="it in btnsList"
:key="it"
@click="chooseType(it)"
>
{{ it }}
</el-button>
</div>
</div>
<MyTable
@ -42,32 +53,56 @@
@chooseData="chooseDataBottom"
>
<template #ryXm="{ row }">
<div class="one_text_detail">姓名{{ row.ryXm }} &nbsp;</div>
<div class="one_text_detail">姓名{{ row.ryXm }} &nbsp;</div>
<div class="one_text_detail">电话{{ row.rySjhm }} &nbsp;</div>
<div class="one_text_detail">身份证{{ row.rySfzh }} </div>
<div class="one_text_detail">身份证{{ row.rySfzh }}</div>
</template>
<template #fxDj="{ row }">
<DictTag :tag="false" :value="row.fxDj" :options="D_GS_RQFJ_FXDJ"/>
<DictTag :tag="false" :value="row.fxDj" :options="D_GS_RQFJ_FXDJ" />
</template>
<template #fxLb="{ row }">
<DictTag :tag="false" :value="row.fxLb" :options="D_GS_RQFJ_FXLB"/>
<DictTag :tag="false" :value="row.fxLb" :options="D_GS_RQFJ_FXLB" />
</template>
<template #bqList="{ row }">
<div v-if="row.bqList">
<el-tag v-for="(it,idx) in row.bqList" :key="idx">{{ it.bqMc }}</el-tag>
<el-tag v-for="(it, idx) in row.bqList" :key="idx"
>{{ it.bqMc }}</el-tag
>
</div>
</template>
<template #czfs="{ row }">
<div>关注<DictTag :tag="false" style="display: inline;" :value="row.sfGz" :options="D_BZ_SF" /> &nbsp;</div>
<div>布控人员<DictTag :tag="false" style="display: inline;" :value="row.sfZbkry" :options="D_BZ_SF" />&nbsp;</div>
<div>重点人员<DictTag :tag="false" style="display: inline;" :value="row.sfZzdry" :options="D_BZ_SF" /></div>
<div>
关注<DictTag
:tag="false"
style="display: inline"
:value="row.sfGz"
:options="D_BZ_SF"
/>
&nbsp;
</div>
<div>
布控人员<DictTag
:tag="false"
style="display: inline"
:value="row.sfZbkry"
:options="D_BZ_SF"
/>&nbsp;
</div>
<div>
重点人员<DictTag
:tag="false"
style="display: inline"
:value="row.sfZzdry"
:options="D_BZ_SF"
/>
</div>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight1"
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }"
:pageConfiger="{ ...pageData.pageConfiger, total: pageData.total }"
/>
</div>
</div>
@ -75,20 +110,28 @@
<div class="title">轨迹信息</div>
<ul class="cntBox" v-loading="modelLoading">
<li class="step" v-for="(item, index) in stepList" :key="index">
<div style="color: #000;">{{ item.yjFssj }}</div>
<div class="desc">
<div class="one_text_detail mb5">事由{{ item.yjNr }}</div>
<div class="one_text_detail mb5">数据来源{{ item.yjGzymc }}</div>
<div class="one_text_detail">所在地址{{ item.yjDz }}</div>
</div>
<div style="color: #000">{{ item.yjFssj }}</div>
<div class="desc">
<div class="one_text_detail mb5">事由{{ item.yjNr }}</div>
<div class="one_text_detail mb5">数据来源{{ item.yjGzymc }}</div>
<div class="one_text_detail">所在地址{{ item.yjDz }}</div>
</div>
</li>
<MOSTY.Empty :show="!modelLoading && stepList.length <= 0"></MOSTY.Empty>
<MOSTY.Empty
:show="!modelLoading && stepList.length <= 0"
></MOSTY.Empty>
</ul>
</div>
</div>
<!-- 弹窗 -->
<Model v-model="isShow" :type="chooselx" :chooseList="chooseList" :ids="ids" @change="getList" :dic="{D_BZ_SF,D_GS_ZDRFJ_SPZT}"></Model>
<Model
v-model="isShow"
:type="chooselx"
:chooseList="chooseList"
:ids="ids"
@change="getList"
:dic="{ D_BZ_SF, D_GS_ZDRFJ_SPZT }"
></Model>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
@ -100,12 +143,13 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import { qcckPost } from "@/api/qcckApi.js";
const { proxy } = getCurrentInstance();
const {D_GS_ZDRFJ_SPZT,D_BZ_SF, D_GS_RQFJ_FXDJ, D_GS_RQFJ_FXLB } = proxy.$dict('D_GS_ZDRFJ_SPZT',"D_BZ_SF","D_GS_RQFJ_FXDJ","D_GS_RQFJ_FXLB"); //获取字典数据
const btnsList = reactive(['是否重点人','布控','是否关注','移交管控'])
const chooselx = ref('')
const isShow = ref(false)
const ids = ref([])
const chooseList = ref([])
const { D_GS_ZDRFJ_SPZT, D_BZ_SF, D_GS_RQFJ_FXDJ, D_GS_RQFJ_FXLB } =
proxy.$dict("D_GS_ZDRFJ_SPZT", "D_BZ_SF", "D_GS_RQFJ_FXDJ", "D_GS_RQFJ_FXLB"); //获取字典数据
const btnsList = reactive(["是否重点人", "布控", "是否关注", "移交管控"]);
const chooselx = ref("");
const isShow = ref(false);
const ids = ref([]);
const chooseList = ref([]);
const pageData = reactive({
tableData: [
{
@ -128,7 +172,7 @@ const pageData = reactive({
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls:false
haveControls: false
},
total: 0,
pageConfiger: {
@ -145,24 +189,43 @@ const pageData = reactive({
{ label: "人像相似度", prop: "rxxsd" }
],
tableColumnPeople: [
{ label: "姓名", prop: "ryXm",showOverflowTooltip:true ,showSolt: true},
{ label: "户籍地址", prop: "ryHjdz" ,showOverflowTooltip:true},
{ label: "护照号码", prop: "ryHzhm" ,showOverflowTooltip:true},
{ label: "现住地址", prop: "ryXzdz" ,showOverflowTooltip:true},
{ label: "附件照片", prop: "ryFjZp" ,showOverflowTooltip:true},
{ label: "管辖单位", prop: "gxDwDm" ,showOverflowTooltip:true},
{ label: "责任部门", prop: "ssbm",showOverflowTooltip:true},
{ label: "标签", prop: "bqList",showOverflowTooltip:true,showSolt: true},
{ label: "风险积分", prop: "fxjf",showOverflowTooltip:true},
{ label: "风险等级", prop: "fxDj",showOverflowTooltip:true, showSolt: true },
{ label: "风险类别", prop: "fxLb",showOverflowTooltip:true, showSolt: true },
{ label: "处置方式", prop: "czfs",showOverflowTooltip:true, showSolt: true },
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true, showSolt: true },
{ label: "户籍地址", prop: "ryHjdz", showOverflowTooltip: true },
{ label: "护照号码", prop: "ryHzhm", showOverflowTooltip: true },
{ label: "现住地址", prop: "ryXzdz", showOverflowTooltip: true },
{ label: "附件照片", prop: "ryFjZp", showOverflowTooltip: true },
{ label: "管辖单位", prop: "gxDwDm", showOverflowTooltip: true },
{ label: "责任部门", prop: "ssbm", showOverflowTooltip: true },
{
label: "标签",
prop: "bqList",
showOverflowTooltip: true,
showSolt: true
},
{ label: "风险积分", prop: "fxjf", showOverflowTooltip: true },
{
label: "风险等级",
prop: "fxDj",
showOverflowTooltip: true,
showSolt: true
},
{
label: "风险类别",
prop: "fxLb",
showOverflowTooltip: true,
showSolt: true
},
{
label: "处置方式",
prop: "czfs",
showOverflowTooltip: true,
showSolt: true
}
]
});
const modelLoading = ref(false)
const modelLoading = ref(false);
const stepList = ref([]);
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
@ -172,85 +235,93 @@ const changeSize = (val) => {
getList();
};
//获取模型识别列表
const getList = () => {
let data = { ...pageData.pageConfiger };
qcckGet(data, "/mosty-gsxt/tbGsxtRqfjRy/selectPage").then((res) => {
pageData.tableDataPeople = res.records || [];
pageData.total = res.total;
if(pageData.tableDataPeople.length > 0) chooseDataBottom(pageData.tableDataPeople[0])
})
if (pageData.tableDataPeople.length > 0)
chooseDataBottom(pageData.tableDataPeople[0]);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =( window.innerHeight - 280 ) / 2;
pageData.tableHeight1 =(( window.innerHeight - 280 ) / 2 )- 50;
pageData.tableHeight = (window.innerHeight - 280) / 2;
pageData.tableHeight1 = (window.innerHeight - 280) / 2 - 50;
window.onresize = function () {
tabHeightFn();
};
};
// 选择数据
const chooseDataBottom = (val) =>{
if(Array.isArray(val)) {
ids.value = val.map(item=>item.id);
chooseList.value = val.filter(v=>{ if(v.sfZzdry == 0) return v; });
}else{
if(!val.rySfzh) {
const chooseDataBottom = (val) => {
if (Array.isArray(val)) {
ids.value = val.map((item) => item.id);
chooseList.value = val.filter((v) => {
if (v.sfZzdry != 1) return v;
});
} else {
if (!val.rySfzh) {
ElMessage.warning("该人员没有轨迹");
}else{
} else {
stepList.value = [];
modelLoading.value = true;
let params = { pageSize:1000, pageNum:1 ,yjRysfzh:val.rySfzh};
qcckPost(params,'/mosty-jmxf/tbYjxx/getPageList').then(res=>{
stepList.value = res.records || [];
modelLoading.value = false;
}).catch(()=>{
modelLoading.value = false;
})
let params = { pageSize: 1000, pageNum: 1, yjRysfzh: val.rySfzh };
qcckPost(params, "/mosty-jmxf/tbYjxx/getPageList")
.then((res) => {
stepList.value = res.records || [];
modelLoading.value = false;
})
.catch(() => {
modelLoading.value = false;
});
}
}
}
};
const chooseType = (val)=>{
const chooseType = (val) => {
chooselx.value = val;
if(ids.value.length == 0) return ElMessage.warning("请选择对应的数据");
switch(val){
case '布控':
proxy.$confirm("确定要布控", "警告", {type: "warning"}).then(() => {
let params = { ids:ids.value, sfbk:'1'}
qcckPost(params,'/mosty-gsxt/tbGsxtRqfjRy/updateBySfbkpz').then(res=>{
ElMessage.success("布控成功");
getList()
if (ids.value.length == 0) return ElMessage.warning("请选择对应的数据");
switch (val) {
case "布控":
proxy
.$confirm("确定要布控", "警告", { type: "warning" })
.then(() => {
let params = { ids: ids.value, sfbk: "1" };
qcckPost(params, "/mosty-gsxt/tbGsxtRqfjRy/updateBySfbkpz").then(
(res) => {
ElMessage.success("布控成功");
getList();
}
);
})
}).catch(() => {});
.catch(() => {});
break;
case '是否重点人':
if(chooseList.value.length == 0) return ElMessage.warning("选择的数据中都是重点人");
case "是否重点人":
if (chooseList.value.length == 0)
return ElMessage.warning("选择的数据中都是重点人");
isShow.value = true;
break;
case '是否关注':
case '移交管控':
case "是否关注":
case "移交管控":
isShow.value = true;
break;
}
}
};
onMounted(()=>{
onMounted(() => {
tabHeightFn();
getList()
})
getList();
});
</script>
<style lang="scss" scoped>
.statistical-analysis {
width: 100%;
height: 100%;
padding: 10px 10px 0 10px ;
padding: 10px 10px 0 10px;
box-sizing: border-box;
overflow: hidden;
.title {
@ -266,7 +337,11 @@ onMounted(()=>{
left: 0;
width: 78px;
height: 4px;
background: linear-gradient( 90deg, #3597f9c4 0%, rgba(53, 150, 249, 0) 100%);
background: linear-gradient(
90deg,
#3597f9c4 0%,
rgba(53, 150, 249, 0) 100%
);
border-radius: 4px 4px 4px 4px;
}
}
@ -283,7 +358,7 @@ onMounted(()=>{
float: right;
box-sizing: border-box;
background: #fff;
.cntBox{
.cntBox {
height: calc(100% - 60px);
overflow: hidden;
overflow-y: auto;
@ -293,9 +368,9 @@ onMounted(()=>{
position: relative;
border-left: 3px dashed #0072ff;
margin-left: 10px;
&::before{
&::before {
position: absolute;
content: '';
content: "";
width: 20px;
height: 20px;
background: #0072ff;

View File

@ -1,88 +1,147 @@
<template>
<el-dialog v-model="modelValue" title="提交" width="500px" @close="handleClose">
<el-dialog
v-model="modelValue"
title="提交"
width="500px"
@close="handleClose"
>
<el-form :model="listQuery" ref="formValidate" :rules="rules">
<el-form-item prop="sfGz" label="是否关注" v-if="props.type == '是否关注'">
<MOSTY.Select filterable v-model="listQuery.sfGz" :dictEnum="props.dic.D_BZ_SF" width="100%" clearable placeholder="请选择是否布控"/>
</el-form-item>
<el-form-item prop="sfZzdry" label="是否移交管控" v-if="props.type == '移交管控'">
<MOSTY.Select filterable v-model="listQuery.sfZzdry" :dictEnum="props.dic.D_BZ_SF" width="100%" clearable placeholder="请选择是否布控"/>
</el-form-item>
<el-form-item label="审核部门" prop="ssbmdm" style="width: 100%;" v-if="props.type == '是否重点人'">
<MOSTY.Department style="width: 100%;" clearable v-model="listQuery.ssbmdm" placeholder="请选择部门" />
</el-form-item>
<el-form-item label="审批部门" prop="ssbmdm" style="width: 100%;" v-if="props.type == '是否重点人'">
<MOSTY.Department style="width: 100%;" clearable v-model="listQuery.ssbmdm" placeholder="请选择部门" />
</el-form-item>
<el-form-item
prop="sfGz"
label="是否关注"
v-if="props.type == '是否关注'"
>
<MOSTY.Select
filterable
v-model="listQuery.sfGz"
:dictEnum="props.dic.D_BZ_SF"
width="100%"
clearable
placeholder="请选择是否布控"
/>
</el-form-item>
<el-form-item
prop="sfZzdry"
label="是否移交管控"
v-if="props.type == '移交管控'"
>
<MOSTY.Select
filterable
v-model="listQuery.sfZzdry"
:dictEnum="props.dic.D_BZ_SF"
width="100%"
clearable
placeholder="请选择是否布控"
/>
</el-form-item>
<el-form-item
label="审核部门"
prop="shSsbmdm"
style="width: 100%"
v-if="props.type == '是否重点人'"
>
<MOSTY.Department
style="width: 100%"
clearable
v-model="listQuery.shSsbmdm"
@getDepValue="changeSh"
placeholder="请选择部门"
/>
</el-form-item>
<el-form-item
label="审批部门"
prop="spSsbmdm"
style="width: 100%"
v-if="props.type == '是否重点人'"
>
<MOSTY.Department
style="width: 100%"
clearable
@getDepValue="changeSp"
v-model="listQuery.spSsbmdm"
placeholder="请选择部门"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="tc">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
<div class="tc">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</template>
</el-dialog>
</el-dialog>
</template>
<script setup>
import { ElMessage } from "element-plus";
import { qcckPost } from "@/api/qcckApi.js";
import * as MOSTY from "@/components/MyComponents/index";
import { ref ,defineProps,defineEmits, reactive} from 'vue';
import { ref, defineProps, defineEmits, reactive } from "vue";
const props = defineProps({
modelValue:{
type:Boolean,
default:false
},
ids:{
type:Array,
default:[]
},
chooseList:{
type:Array,
default:[]
},
type:{
type:String,
default:''
},
dic:{
type:Object,
default:''
},
})
modelValue: {
type: Boolean,
default: false
},
ids: {
type: Array,
default: []
},
chooseList: {
type: Array,
default: []
},
type: {
type: String,
default: ""
},
dic: {
type: Object,
default: ""
}
});
const emits = defineEmits(["update:modelValue"]);
const formValidate = ref()
const formValidate = ref();
const rules = reactive({
sfGz: [{ required: true, message: "请选择是否关注", trigger: "change" }],
sfZzdry: [{ required: true, message: "请选择是否移交管控", trigger: "change" }],
ssbmdm: [{ required: true, message: "请选择是部门", trigger: "change" }],
})
sfGz: [{ required: true, message: "请选择是否关注", trigger: "change" }],
sfZzdry: [
{ required: true, message: "请选择是否移交管控", trigger: "change" }
],
shSsbmdm: [{ required: true, message: "请选择审核部门", trigger: "change" }],
spSsbmdm: [{ required: true, message: "请选择审批部门", trigger: "change" }]
});
const listQuery = ref({});
const submitForm = () =>{
formValidate.value.validate((valid) => {
if (!valid) return false;
let params = { ids:props.ids, ...listQuery.value }
let url = ''
if( props.type == '是否关注') url = '/mosty-gsxt/tbGsxtRqfjRy/updateBySfgz'
if( props.type == '移交管控') url = '/mosty-gsxt/tbGsxtRqfjRy/updateByYjgk'
if( props.type == '是否重点人') url = '/mosty-gsxt/tbGsxtRqfjRy/updateByYjgk'
qcckPost(params,url).then(res=>{
ElMessage.success("成功");
emits('update:modelValue',false)
emits('change')
})
})
}
const submitForm = () => {
formValidate.value.validate((valid) => {
if (!valid) return false;
let params = { ids: props.ids, ...listQuery.value };
let url = "";
if (props.type == "是否关注") url = "/mosty-gsxt/tbGsxtRqfjRy/updateBySfgz";
if (props.type == "移交管控") url = "/mosty-gsxt/tbGsxtRqfjRy/updateByYjgk";
if (props.type == "是否重点人") {
url = " /mosty-gsxt/tbGsxtRqfjRy/sendZdrSs";
params.ids = props.chooseList.map((v) => v.id);
}
qcckPost(params, url).then((res) => {
ElMessage.success("成功");
emits("update:modelValue", false);
emits("change");
});
});
};
const handleClose = () =>{
emits('update:modelValue',false)
formValidate.value.resetFields();
}
const changeSh = (val) => {
listQuery.value.shSsbmmc = val ? val.orgName : "";
};
const changeSp = (val) => {
listQuery.value.spSsbmmc = val ? val.orgName : "";
};
const handleClose = () => {
emits("update:modelValue", false);
formValidate.value.resetFields();
};
</script>
<style lang="scss" scoped>
</style>