This commit is contained in:
13684185576
2025-07-08 19:50:38 +08:00
47 changed files with 2732 additions and 2970 deletions

View File

@ -146,7 +146,16 @@ const form = ref({});
const tableData = ref([]); const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosedUsers"]); const emits = defineEmits(["update:modelValue", "choosedUsers"]);
onMounted(() => { onMounted(() => {
handleFilter(); });
watch(()=>props.modelValue, (val) => {
if (val) {
nextTick(() => {
getListData();
});
}
},{
immediate: true
}); });
const closed = () => { const closed = () => {
emits("update:modelValue", false); emits("update:modelValue", false);
@ -246,7 +255,4 @@ const handleSelectionChange = (val) => {
display: none; display: none;
} }
.el-dialog__title {
color: #fff;
}
</style> </style>

View File

@ -0,0 +1,190 @@
<template>
<el-dialog :title="titleValue" width="1400px" :model-value="modelValue" append-to-body @close="closed">
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="标签名称">
<el-input placeholder="请输入标签名称" v-model="listQuery.bqMc" clearable ></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" :key="keyTabel" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="xsBh" align="center" label="线索编号"/>
<el-table-column prop="xsMc" align="center" label="线索名称"/>
<el-table-column prop="xlLx" align="center" label="线索类型">
<template #default="{ row }">
<DictTag :tag="false" :value="row.xlLx" :options="D_GS_XS_LX" />
</template>
</el-table-column>
<el-table-column prop="qbLy" align="center" label="线索来源">
<template #default="{ row }">
<DictTag :value="row.qbLy" :tag="false" :options="D_GS_XS_LY" />
</template>
</el-table-column>
<el-table-column prop="xsNr" align="center" label="线索内容"/>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@pageCurrent-change="handleCurrentChange"
:pageCurrent-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { qcckGet} from "@/api/qcckApi.js";
import { defineProps, ref ,getCurrentInstance, watch} from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_XS_LX,D_GS_XS_LY } = proxy.$dict("D_GS_XS_LX","D_GS_XS_LY"); //获取字典数据
const props = defineProps({
modelValue: {
type: Boolean,
default:false
},
titleValue: {
type: String,
default: "选择线索"
},
LeaderType: {
type: String,
default: ""
},
//是否单选
Single: {
type: Boolean,
default: true
},
roleIds: {
type: Array,
default: []
}
});
const total = ref(0);
const listQuery = ref({
pageCurrent: 1,
pageSize: 20
});
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "choosed"]);
const keyTabel = ref(0)
const keyid = (row) => {
return row.id;
};
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { pageCurrent: 1, pageSize: 20, };
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosed", list);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.pageSize = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.pageCurrent = currentPage;
getListData();
};
const getListData = () => {
keyTabel.value++
const params = {...listQuery.vlue}
qcckGet(params,'/mosty-gsxt/qbcj/selectPage').then(res=>{
tableData.value = res.records || [];
total.value = res.total;
multipleUser();
})
};
//列表回显
function multipleUser() {
tableData.value.forEach((item) => {
multipleUserRef.value.toggleRowSelection(item, false);
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.pageCurrent = 1;
getListData();
};
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
watch(()=>props.modelValue,val=>{
if(val) handleFilter();
},{immediate:true})
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -125,20 +125,11 @@ const nodeClick = (node) => {
}else{ }else{
emits("update:modelValue", node.orgCode); emits("update:modelValue", node.orgCode);
} }
emits("change", node);
}; };
const emits = defineEmits(["update:modelValue"]); const emits = defineEmits(["update:modelValue",'change']);
const handleChange = (e) => {
if (props.multiple === true) {
const data = e.map((item) => {
return item[item.length - 1];
});
emits("update:modelValue", data);
} else {
const data = e[0];
emits("update:modelValue", data);
}
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -313,7 +313,7 @@ const createScroll = () => {
} }
}; };
// 触底加载 // 滚动-触底加载
const loadTable = () => { const loadTable = () => {
emit("changePage",props.tabelModel); emit("changePage",props.tabelModel);
}; };

View File

@ -8,13 +8,12 @@
label-position="right" label-position="right"
> >
<el-form-item <el-form-item
:class="myClass" v-for="(item,idx) in props.formList"
v-for="item in props.formList"
:style="item.width && { width: item.width }" :style="item.width && { width: item.width }"
:prop="item.prop" :prop="item.prop"
:label="item.label" :label="item.label"
:label-width="item.labelWidth" :label-width="item.labelWidth"
:key="item" :key="idx"
> >
<!-- input表单 input--> <!-- input表单 input-->
<MOSTY.Other <MOSTY.Other

View File

@ -42,6 +42,17 @@
:disabledDate="disabledDate" :disabledDate="disabledDate"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
<el-date-picker
v-else-if="item.showType === 'datetimerange'"
v-model="searchObj[item.prop]"
type="datetimerange"
unlink-panels
:range-separator="item.rangeSeparator || ''"
:start-placeholder="item.startPlaceholder || '开始日期'"
:end-placeholder="item.endPlaceholder || '结束日期'"
:shortcuts="item.shortcuts"
value-format="YYYY-MM-DD HH:mm:ss"
/>
<el-date-picker <el-date-picker
v-else-if="item.showType === 'date'" v-else-if="item.showType === 'date'"
v-model="searchObj[item.prop]" v-model="searchObj[item.prop]"
@ -583,4 +594,8 @@ watchEffect(() => {
} }
} }
} }
::v-deep .el-date-editor .el-range-separator{
color: #333;
}
</style> </style>

View File

@ -377,7 +377,16 @@ export const publicRoutes = [
title: "社会信息人员建设管理", title: "社会信息人员建设管理",
icon: "article" icon: "article"
} }
},
{
path: "/JobAppraisal",
name: "JobAppraisal",
component: () => import("@/views/backOfficeSystem/HumanIntelligence/JobAppraisal/index"),
meta: {
title: "社会员工工作信息考核",
icon: "article"
} }
},
] ]
}, },
{ {
@ -432,7 +441,8 @@ export const publicRoutes = [
title: "重点人员预警模型", title: "重点人员预警模型",
icon: "article" icon: "article"
} }
} },
] ]
}, },
{ {

View File

@ -101,7 +101,7 @@ export default {
this.commit("user/setUserName", data.userName); this.commit("user/setUserName", data.userName);
setItem('isOatuh', 0) setItem('isOatuh', 0)
setItem("USERNAME", data.userName); setItem("USERNAME", data.userName);
setItem("roleList", data.roleList); setItem("roleList", data.sysRole ? data.sysRole : []);
setItem("SFRH", data.sfrh); setItem("SFRH", data.sfrh);
setItem("USERID", data.userId); setItem("USERID", data.userId);
setItem("PermissionsInfo", data.permissionsInfo); setItem("PermissionsInfo", data.permissionsInfo);

View File

@ -64,6 +64,45 @@ export function timeValidate(date, type) {
} }
export function timeSlotChange(val) {
let startTime, endTime;
let now = new Date(); //当前日期
let nowDayOfWeek = now.getDay(); //今天本周的第几天
let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月
let nowYear = now.getFullYear(); //当前年
let jd = Math.ceil((nowMonth + 1) / 3)
switch (val) {
case '天':
case '日':
startTime = timeValidate(new Date(), 'ymd')
endTime = timeValidate(new Date(), 'ymd')
break;
case "本周":
case "周":
startTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
endTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek)
break;
case "本月":
case "月":
startTime = new Date(nowYear, nowMonth, 1)
endTime = new Date(nowYear, nowMonth + 1, 0)
break;
case "本季度":
case "季度":
startTime = new Date(nowYear, (jd - 1) * 3, 1)
endTime = new Date(nowYear, jd * 3, 0)
break
case "本年":
case "年":
startTime = new Date(nowYear, 0, 1)
endTime = new Date(nowYear, 11, 31)
break
}
return [timeValidate(startTime, 'ymd'), timeValidate(endTime, 'ymd')]
}
// 获取当前近多少天 7后7天 -7 前五天 // 获取当前近多少天 7后7天 -7 前五天
export function getRecentDay(n) { export function getRecentDay(n) {
var currentDate = new Date(); var currentDate = new Date();

View File

@ -5,50 +5,38 @@
<span class="title">重点人信息统计</span> <span class="title">重点人信息统计</span>
<span :class="active == it ? 'active'+`${idx}`:''" @click="changeDate(it)" class="tabsBtn pointer" v-for="(it,idx) in btns" :key="it">{{ it }}</span> <span :class="active == it ? 'active'+`${idx}`:''" @click="changeDate(it)" class="tabsBtn pointer" v-for="(it,idx) in btns" :key="it">{{ it }}</span>
</div> </div>
<span style="color:#00B7FF;" class="f12 pointer">查看更多 </span>
</div> </div>
<div class="asideCnt"> <div class="asideCnt">
<div class="seachBox flex"> <div class="seachBox flex">
<!-- 搜索 --> <MOSTY.Other style="flex:1" v-model="keywords" clearable placeholder="输入关键字" />
<MOSTY.Select v-model="listQuery.bqm" style="width: 120px;margin-right:10px" :dictEnum="search.xd" clearable placeholder="选择标签" /> <el-button type="primary" @click="handleSearch">搜索</el-button>
<MOSTY.Other v-model="listQuery.nr" clearable placeholder="输入内容" />
<el-button type="primary">搜索</el-button>
</div> </div>
<MyTable @changePage="changePage" customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" > <MyTable @changePage="changePage" customClass="zdy_peo_table" :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" >
<template #qtFxdj="{row}">
<DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ"/>
</template>
<template #qtZt="{row}">
<DictTag :tag="false" :value="row.qtZt" :options="D_GS_ZDQT_ZT"/>
</template>
</MyTable> </MyTable>
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { qcckGet } from "@/api/qcckApi.js";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/DarkTable.vue"; import MyTable from "@/components/aboutTable/DarkTable.vue";
import { reactive, ref,onMounted } from "vue"; import { reactive, ref,onMounted,getCurrentInstance } from "vue";
const btns = ref(['重点人','重点群体']) const btns = ref(['重点人','重点群体'])
const active = ref('重点人'); const active = ref('重点人');
const keywords = ref(''); // 搜索关键字
const { proxy } = getCurrentInstance();
const { D_GS_ZDQT_ZT,D_BZ_RYBQ,D_GS_ZDQT_FXDJ } = proxy.$dict('D_GS_ZDQT_ZT','D_BZ_RYBQ','D_GS_ZDQT_FXDJ') //获取字典数据
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" }, { ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" }, { ryXm: "王五", rySfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
{ xm: "王五", sfzh: "330102199505057890", bq: "吸毒人员" },
], ],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
@ -64,35 +52,82 @@ const pageData = reactive({
pageNum: 1 pageNum: 1
}, //分页 }, //分页
tableColumn: [ tableColumn: [
{ label: "姓名", prop: "xm", showOverflowTooltip: true }, { label: "姓名", prop: "ryXm", showOverflowTooltip: true },
{ label: "身份证号码", prop: "sfzh",showOverflowTooltip: true }, { label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
{ label: "标签", prop: "bq",showOverflowTooltip: true }, { label: "标签", prop: "bq",showOverflowTooltip: true },
{ label: "所属线索", prop: "xsmc",showOverflowTooltip: true },
] ]
}); });
const search = reactive({
xd: [
{ label: "吸毒", value: "10" },
{ label: "贩毒", value: "20" }
],
});
const listQuery = ref([])
onMounted(() => { onMounted(() => {
tabHeightFn(); tabHeightFn();
window.onresize = function () { getList();
tabHeightFn();
};
}); });
// 切换标签
const changeDate = (val) =>{ const changeDate = (val) =>{
active.value = val; active.value = val;
pageData.pageConfiger.pageNum = 1;
pageData.tableData = [];
switch(val){
case '重点人':
pageData.tableColumn = [
{ label: "姓名", prop: "ryXm", showOverflowTooltip: true },
{ label: "身份证号码", prop: "rySfzh",showOverflowTooltip: true },
{ label: "标签", prop: "bq",showOverflowTooltip: true },
{ label: "所属线索", prop: "xsmc",showOverflowTooltip: true },
];
break;
case '重点群体':
pageData.tableColumn = [
{ label: "群体名称", prop: "qtMc", showOverflowTooltip: true },
{ label: "群体状态", prop: "qtZt",showSolt:true,showOverflowTooltip: true },
{ label: "群体风险等级", prop: "qtFxdj",showSolt:true, showOverflowTooltip: true },
];
break;
} }
getList();
}
// 搜索
const handleSearch = () => {
pageData.pageConfiger.pageNum = 1; // 重置页码
getList();
};
// 滚动分页加载 // 滚动分页加载
const changePage = () =>{ const changePage = () =>{
if( pageData.tableConfiger.loading) return; // 防止重复加载
pageData.pageConfiger.pageNum++;
} }
const getList = () => {
pageData.tableConfiger.loading = true;
let url = active.value === '重点人' ? '/mosty-gsxt/tbGsxtZdry/selectPage' : '/mosty-gsxt/tbGsxtZdqt/selectPage';
let params = {
pageNum: pageData.pageConfiger.pageNum,
pageSize: pageData.pageConfiger.pageSize,
keywords: keywords.value,
};
qcckGet(params,url).then((res) => {
console.log(res,'=====');
let arr = res.records || [];
pageData.tableData = pageData.pageConfiger.pageNum == 1 ? arr : pageData.tableData.concat(arr);
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = document.getElementById('zdrxxtj').offsetHeight - 160; pageData.tableHeight = document.getElementById('zdrxxtj').offsetHeight - 160;
window.onresize = function () {
tabHeightFn();
};
}; };
</script> </script>

View File

@ -1,221 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ title }}</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-tabs v-model="activeName">
<el-tab-pane label="场所信息" name="basic">
<el-form :model="listQuery" :label-width="230" label-position="left">
<div class="flex align-center">
<div style="width: calc(100% - 176px);">
<div class="form-row">
<el-form-item label="统一社会信用代码">
<el-input v-model="listQuery.tyshdm" placeholder="ktv"/>
</el-form-item>
<el-form-item label="单位名称(营业执照登记名称)">
<el-input v-model="listQuery.djmc" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所联系电话">
<el-input v-model="listQuery.cslxdh" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="经营状况">
<el-input v-model="listQuery.csdm" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所面积">
<el-input v-model="listQuery.csmj" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="开业日期">
<el-input v-model="listQuery.kyrq" placeholder="请输入"/>
</el-form-item>
</div>
</div>
<img height="130" src="@/assets/images/person.png" alt="">
</div>
<el-form-item label="单位注册地址">
<el-input v-model="listQuery.dwzcdz" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所地址">
<el-input v-model="listQuery.csdz" placeholder="请输入"/>
</el-form-item>
<div class="flex align-center">
<div style="width: calc(100% - 176px);">
<div class="form-row">
<el-form-item label="法定代表人">
<el-input v-model="listQuery.fddbr" placeholder="请输入"/>
</el-form-item>
<el-form-item label="法定代表人证件号码">
<el-input v-model="listQuery.fddbrzjhm" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="法定代表人联系电话">
<el-input v-model="listQuery.fddbrLxdh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="法定代表人居住地址">
<el-input v-model="listQuery.fddbrJzdz" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所负责人">
<el-input v-model="listQuery.csfzr" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所负责人身份证号">
<el-input v-model="listQuery.csfzrSfzh" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="场所负责人联系方式">
<el-input v-model="listQuery.csfzrLxfs" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所负责人居住地址">
<el-input v-model="listQuery.csfzrJzdz" placeholder="请输入"/>
</el-form-item>
</div>
</div>
<div>
<img height="65" style="width: 100%;" src="@/assets/images/person.png" alt="">
<img height="65" style="width: 100%;" src="@/assets/images/person.png" alt="">
</div>
</div>
<div class="upload-group">
<el-form-item label="营业执照照片">
<img height="130" src="@/assets/images/person.png" alt="">
<img height="130" src="@/assets/images/person.png" alt="">
<img height="130" src="@/assets/images/person.png" alt="">
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="机修场所备案编号">
<el-input v-model="listQuery.jxcsbabh" placeholder="请输入"/>
</el-form-item>
<el-form-item label="场所备案机构名称">
<el-input v-model="listQuery.ylcsbajgmc" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="备案登记日期">
<el-input v-model="listQuery.badjrq" placeholder="请输入"/>
</el-form-item>
<el-form-item label="所属辖区">
<el-input v-model="listQuery.ssxq" placeholder="请输入"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="责任民警">
<el-input v-model="listQuery.zrmj" placeholder="请输入"/>
</el-form-item>
<el-form-item label="警号">
<el-input v-model="listQuery.jh" placeholder="请输入"/>
</el-form-item>
</div>
</el-form>
</el-tab-pane>
<el-tab-pane label="从业人员" name="staff">
<!-- 从业人员表格 -->
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Plus } from '@element-plus/icons-vue';
const dialogForm = ref(false);
const activeName = ref('basic');
const title = ref('开锁业场所管理详情');
const listQuery = ref({});
const areaOptions = ref([]); // 区域选项数据
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
// 根据type和row初始化表单数据
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.cntinfo{
height: calc(100% - 70px);
overflow: hidden;
overflow-y: auto;
}
.form-row {
display: flex;
.el-form-item {
flex: 1;
}
}
.upload-group {
display: flex;
// gap: 20px;
.el-form-item {
flex: 1;
}
}
.unit {
margin-left: 5px;
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,27 +1,7 @@
<template> <template>
<div> <div>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="布控审批" /> <PageTitle title="布控审批">
</div>
<!-- 搜索 -->
<div ref="searchBox">
<!-- 顶部主导航 -->
<div class="main-nav">
<el-button
:class="['nav-btn', activeMainNav === 'todo' ? 'active' : '']"
@click="activeMainNav = 'todo'"
>
我的待办
</el-button>
<el-button
:class="['nav-btn', activeMainNav === 'done' ? 'active' : '']"
@click="activeMainNav = 'done'"
>
我的已办
</el-button>
</div>
<!-- 子导航 -->
<div class="sub-nav"> <div class="sub-nav">
<el-tabs v-model="activeSubNav" @click="handleType"> <el-tabs v-model="activeSubNav" @click="handleType">
<el-tab-pane label="我的发起" name="myInitiate"></el-tab-pane> <el-tab-pane label="我的发起" name="myInitiate"></el-tab-pane>
@ -31,38 +11,19 @@
<el-tab-pane label="我的处置" name="myHandle"></el-tab-pane> <el-tab-pane label="我的处置" name="myHandle"></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search <Search
:searchArr="searchConfiger" :searchArr="searchConfiger"
@submit="onSearch" @submit="onSearch"
:key="pageData.keyCount" :key="pageData.keyCount"
> >
<template #defaultSlot>
<div>
<el-input-number v-model="queryFrom.xqy"></el-input-number>
<span class="ml10 mr10" style="color: #000"></span>
<el-input-number v-model="queryFrom.dqy"></el-input-number>
</div>
</template>
</Search> </Search>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="tabBox"> <div class="tabBox">
<div ref="btns" class="btns flexcb">
<div class="">
<el-button>批量处理</el-button>
<el-button>导出</el-button>
</div>
<el-input
v-model="input2"
style="max-width: 300px"
placeholder="请输入关键字"
>
<template #append
><el-button type="primary" icon="Search"></el-button
></template>
</el-input>
</div>
<MyTable <MyTable
:tableData="pageData.tableData" :tableData="pageData.tableData"
:tableColumn="pageData.tableColumn" :tableColumn="pageData.tableColumn"
@ -91,6 +52,7 @@
</div> </div>
<div class="flex"> <div class="flex">
<el-button <el-button
:key="index"
type="primary" type="primary"
size="small" size="small"
v-for="(item, index) in row.bqList" v-for="(item, index) in row.bqList"
@ -104,7 +66,6 @@
<div>创建单位{{ row.xtCjbmmc }}</div> <div>创建单位{{ row.xtCjbmmc }}</div>
</template> </template>
<template #gkxx="{ row }"> <template #gkxx="{ row }">
<!-- <div>群体标签{{ }}</div> -->
<div>管辖单位{{ row.gxSsdwmc }}</div> <div>管辖单位{{ row.gxSsdwmc }}</div>
<div>列控原因{{ row.zdrLkyy }}</div> <div>列控原因{{ row.zdrLkyy }}</div>
<div>开始时间{{ row.startTime }}</div> <div>开始时间{{ row.startTime }}</div>
@ -119,29 +80,29 @@
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-button <el-link
size="small" size="small"
type="primary"
@click="autoEdit('auto', row)" @click="autoEdit('auto', row)"
v-if="row.qtZt === '02' && activeSubNav === 'myAudit'" v-if="row.qtZt === '02' && activeSubNav === 'myAudit'"
>审核</el-button >审核</el-link
> >
<el-button <el-link
size="small" size="small"
type="success"
@click="autoEdit('approval', row)" @click="autoEdit('approval', row)"
v-if="row.qtZt === '04' && activeSubNav === 'myApprove'" v-if="row.qtZt === '04' && activeSubNav === 'myApprove'"
>审批</el-button >审批</el-link
> >
<el-button size="small" @click="autoEdit('detail', row)" <el-link size="small" type="info" @click="autoEdit('detail', row)"
>详情</el-button >详情</el-link
> >
<!-- <el-button size="small">从业人员</el-button>
<el-button size="small">转区域</el-button> -->
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@changeNo="changeNo" @changeNo="changeNo"
@changeSize="changeSize" @changeSize="changeSize"
:tableHeight="pageData.tableHeight + 42" :tableHeight="pageData.tableHeight"
:pageConfiger="{ :pageConfiger="{
...pageData.pageConfiger, ...pageData.pageConfiger,
total: pageData.total total: pageData.total
@ -158,38 +119,19 @@ 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 Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { setItem, getItem, removeAllItem } from "@/utils/storage"; import { setItem, getItem } from "@/utils/storage";
import { selectUserDeptPage } from "@/api/user-manage"; import { selectUserDeptPage } from "@/api/user-manage";
import MpvGroupInfo from "../mpvGroup/index.vue"; import MpvGroupInfo from "../mpvGroup/components/infoForm.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { const { D_GS_ZDQT_FXDJ, D_GS_ZDR_RYJB, D_GS_ZDR_BK_ZT } = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_ZDR_RYJB","D_GS_ZDR_BK_ZT" ); //获取字典数据
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
} = proxy.$dict(
"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"
); //获取字典数据
const deptList = ref([]); //部门列表 const deptList = ref([]); //部门列表
const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const btns = ref();
const userId = getItem("USERID"); const userId = getItem("USERID");
const MpvGroupInfoRef = ref(null); const MpvGroupInfoRef = ref(null);
// 主导航激活状态
const activeMainNav = ref("todo");
// 子导航激活状态 // 子导航激活状态
const activeSubNav = ref("myAudit"); const activeSubNav = ref("myAudit");
const searchConfiger = ref([ const searchConfiger = ref([
@ -212,84 +154,12 @@ const searchConfiger = ref([
placeholder: "请选择重点人人员级别", placeholder: "请选择重点人人员级别",
showType: "select", showType: "select",
options: D_GS_ZDR_RYJB options: D_GS_ZDR_RYJB
},
{
label: "成员姓名",
prop: "cyXm ",
placeholder: "请输入成员姓名",
showType: "input"
},
{
label: "群体类别",
prop: "qtLb",
placeholder: "请选择群体类别",
showType: "select",
options: D_GS_ZDQT_LB
},
{
label: "成员身份证号",
prop: "cySfzh",
placeholder: "请输入成员身份证号",
showType: "input"
},
{
label: "群体大类",
prop: "qtDl",
placeholder: "请输入群体大类",
showType: "input"
},
{
label: "群体细类",
prop: "qtXl",
placeholder: "请输入群体细类",
showType: "input"
},
{
label: "管辖单位名称",
prop: "gxSsdwmc",
placeholder: "请输入管辖单位名称",
showType: "input"
},
{
label: "开始时间",
prop: "startTime",
placeholder: "请输入开始时间",
showType: "date"
},
{
label: "截至时间",
prop: "endTime",
placeholder: "请输入截至时间",
showType: "date"
},
{
label: "布控状态",
prop: "zdrBkZt",
placeholder: "请输入布控装态",
showType: "select",
options: D_GS_ZDR_BK_ZT
},
{
label: "布控类型",
prop: "bkzt",
placeholder: "请输入布控类型",
showType: "select",
options: D_GS_BQ_LX
} }
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
const userInfo = ref({}); const userInfo = ref({});
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [], //表格数据
{
name: "1",
ssxq: "1",
cyxm: "1",
qqksrxm: "1",
qqksrsfzh: "1",
jzrxm: "1"
}
], //表格数据
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -317,10 +187,6 @@ onMounted(() => {
getdepartmentList(); getdepartmentList();
}); });
// 详情
const info = (type, row) => {
MpvGroupInfoRef.value.init(type, row);
};
// 获取部门列表 // 获取部门列表
const getdepartmentList = () => { const getdepartmentList = () => {
selectUserDeptPage().then((res) => { selectUserDeptPage().then((res) => {
@ -339,7 +205,7 @@ const getUserInfo = async () => {
}; };
//选择类型 //选择类型
const handleType = (val) => { const handleType = () => {
pageData.keyCount++; pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
@ -384,19 +250,13 @@ const getList = (val) => {
// 详情 // 详情
const autoEdit = (type, row) => { const autoEdit = (type, row) => {
MpvGroupInfoRef.value.infoList(type, row); MpvGroupInfoRef.value.init(type, row);
}; };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
console.log("btns.value.offsetHeight", btns.value.offsetHeight);
pageData.tableHeight = pageData.tableHeight =
window.innerHeight - window.innerHeight - searchBox.value.offsetHeight - 260;
searchBox.value.offsetHeight -
btns.value.offsetHeight -
30 -
250;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
@ -413,6 +273,7 @@ const tabHeightFn = () => {
margin-right: 10px; margin-right: 10px;
border: none; border: none;
background: none; background: none;
&.active { &.active {
background-color: #409eff; background-color: #409eff;
color: #fff; color: #fff;
@ -432,12 +293,12 @@ const tabHeightFn = () => {
height: 1px; height: 1px;
} }
:deep(.el-table--fit) {
top: 52px !important;
}
.btns { .btns {
height: 52px; height: 52px;
padding: 10px; padding: 10px;
box-sizing: border-box; box-sizing: border-box;
} }
::v-deep .el-tabs__nav-wrap::after {
background: none;
}
</style> </style>

View File

@ -3,33 +3,12 @@
<div class="head_box"> <div class="head_box">
<span class="title">重点群体管理 </span> <span class="title">重点群体管理 </span>
<div> <div>
<el-button <el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button>
type="primary"
size="small"
:loading="loading"
@click="submit"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<el-tabs <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane :label="title + '群体'" name="first"></el-tab-pane>
<el-tab-pane label="轨迹信息" name="second"></el-tab-pane>
<el-tab-pane label="标签信息" name="third"></el-tab-pane>
</el-tabs>
<FormMessage
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<template #qtXx> <template #qtXx>
<el-divider content-position="left">群体信息</el-divider> <el-divider content-position="left">群体信息</el-divider>
</template> </template>
@ -42,21 +21,11 @@
</template> </template>
<template #xzRy> <template #xzRy>
<div class="btns"> <div class="btns">
<el-button type="primary" @click="handleAddEdit('add', '')" <el-button type="primary" @click="handleAddEdit('add', '')">新增</el-button>
>新增</el-button <el-button type="primary" @click="selectionAdd()">选择重点人员</el-button>
>
<el-button type="primary" @click="selectionAdd()"
>选择重点人员</el-button
>
</div> </div>
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :key="pageData.keyCount"
:tableData="pageData.tableData" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" @chooseData="chooseData">
:tableColumn="pageData.tableColumn"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #ryxx="{ row }"> <template #ryxx="{ row }">
<div> <div>
<img src="" alt="" /> <img src="" alt="" />
@ -64,29 +33,17 @@
<li>姓名{{ row.rySfzh }}</li> <li>姓名{{ row.rySfzh }}</li>
<li class="rowClass"> <li class="rowClass">
性别 性别
<DictTag <DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
:tag="false"
:value="row.ryXb"
:options="D_BZ_XB"
/>
</li> </li>
<li class="rowClass"> <li class="rowClass">
籍贯 籍贯
<DictTag <DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
:tag="false"
:value="row.ryJg"
:options="D_BZ_XZQHDM"
/>
</li> </li>
<li>身份证{{ row.rySfzh }}</li> <li>身份证{{ row.rySfzh }}</li>
<li>出生日期{{ row.ryCsrq }}</li> <li>出生日期{{ row.ryCsrq }}</li>
<li class="rowClass"> <li class="rowClass">
民族 民族
<DictTag <DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
:tag="false"
:value="row.ryMz"
:options="D_BZ_MZ"
/>
</li> </li>
</ul> </ul>
</div> </div>
@ -99,11 +56,7 @@
<template #jzxx="{ row }"> <template #jzxx="{ row }">
<div class="rowClass"> <div class="rowClass">
户籍地区划 户籍地区划
<DictTag <DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
:tag="false"
:value="row.hjdQh"
:options="D_BZ_XZQHDM"
/>
</div> </div>
<div>户籍派出所{{ row.hjdPcsmc }}</div> <div>户籍派出所{{ row.hjdPcsmc }}</div>
<div>户籍地详址{{ row.hjdXz }}</div> <div>户籍地详址{{ row.hjdXz }}</div>
@ -112,28 +65,16 @@
<div>管辖单位{{ row.gxSsbmmc }}</div> <div>管辖单位{{ row.gxSsbmmc }}</div>
<div class="rowClass"> <div class="rowClass">
人员级别 人员级别
<DictTag <DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
:tag="false"
:value="row.zdrRyjb"
:options="D_GS_ZDR_RYJB"
/>
</div> </div>
<div>管控原因{{ zdrLkyy }}</div> <div>管控原因{{ zdrLkyy }}</div>
<div class="rowClass"> <div class="rowClass">
管控状态 管控状态
<DictTag <DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
:tag="false"
:value="row.zdrBkZt"
:options="D_GS_ZDR_BK_ZT"
/>
</div> </div>
</template> </template>
<template #zdrCzzt="{ row }"> <template #zdrCzzt="{ row }">
<DictTag <DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
:tag="false"
:value="row.zdrCzzt"
:options="D_GS_ZDR_CZZT"
/>
</template> </template>
<template #xtSjzt="{ row }"> <template #xtSjzt="{ row }">
<div> <div>
@ -143,20 +84,8 @@
</div> </div>
</template> </template>
<template #controls="{ row, index }"> <template #controls="{ row, index }">
<el-button <el-button size="small" type="primary" @click="handleAddEdit('edit', row)" link>编辑</el-button>
size="small" <el-button size="small" type="danger" @click="deleteData(index)" link>删除</el-button>
type="primary"
@click="handleAddEdit('edit', row)"
link
>编辑</el-button
>
<el-button
size="small"
type="danger"
@click="deleteData(index)"
link
>删除</el-button
>
</template> </template>
</MyTable> </MyTable>
</template> </template>
@ -167,14 +96,9 @@
<template #bqList> <template #bqList>
<el-button @click="open('01')">选择</el-button> <el-button @click="open('01')">选择</el-button>
<div class="boxlist"> <div class="boxlist">
<MyTable <MyTable :tableData="tableDate.bqList" :tableColumn="tableDate.tableColumn"
:tableData="tableDate.bqList" :tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
:tableColumn="tableDate.tableColumn" :controlsWidth="tableDate.controlsWidth">
:tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth"
>
<template #bqLb="{ row }"> <template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" /> <DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" />
</template> </template>
@ -186,9 +110,7 @@
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)" <el-link type="danger" @click="delDictItem(row.bqId)">删除</el-link>
>删除</el-link
>
</template> </template>
</MyTable> </MyTable>
</div> </div>
@ -198,19 +120,12 @@
<template #lqxxList> <template #lqxxList>
<el-button @click="openDialog('01')">新增</el-button> <el-button @click="openDialog('01')">新增</el-button>
<div class="boxlist"> <div class="boxlist">
<MyTable <MyTable :tableData="tableDate.lqxxList" :tableColumn="tableDate.tableLqColumn"
:tableData="tableDate.lqxxList" :tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
:tableColumn="tableDate.tableLqColumn" :controlsWidth="tableDate.controlsWidth">
:tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth"
>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row, index }"> <template #controls="{ row, index }">
<el-link type="danger" @click="delDictItem(index)" <el-link type="danger" @click="delDictItem(index)">删除</el-link>
>删除</el-link
>
</template> </template>
</MyTable> </MyTable>
</div> </div>
@ -218,38 +133,16 @@
</FormMessage> </FormMessage>
</div> </div>
<!-- 列表弹窗 --> <!-- 列表弹窗 -->
<DialogList <DialogList :Single="false" :roleIds="roleIds" v-if="chooseShow" @chooseDate="chooseDate" :titleValue="chooseTitle"
:Single="false" v-model="chooseShow" :bqLx="chooseType" bqDl="02"></DialogList>
:roleIds="roleIds" <addFormPeo ref="addFormDiloag" @chooseDate="addFormPeoDate" @handleEditDate="handleEditDate" />
v-if="chooseShow"
@chooseDate="chooseDate"
:titleValue="chooseTitle"
v-model="chooseShow"
:bqLx="chooseType"
bqDl="02"
></DialogList>
<addFormPeo
ref="addFormDiloag"
@chooseDate="addFormPeoDate"
@handleEditDate="handleEditDate"
/>
<selectionList <selectionList :Single="false" :roleIds="selectroleId" v-if="selectionValue" @chooseDate="chooseSelectDate"
:Single="false" :titleValue="chooseTitle" v-model="selectionValue">
:roleIds="selectroleId"
v-if="selectionValue"
@chooseDate="chooseSelectDate"
:titleValue="chooseTitle"
v-model="selectionValue"
>
</selectionList> </selectionList>
<!-- 列表弹窗 --> <!-- 列表弹窗 -->
<TagSelectorDialog <TagSelectorDialog v-model="choose" ref="tagDialog" @chooseDate="handleTagSelect"
v-model="choose" :dic="{ D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX }" />
ref="tagDialog"
@chooseDate="handleTagSelect"
:dic="{ D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX }"
/>
</div> </div>
</template> </template>
@ -260,9 +153,8 @@ import DialogList from "./dialogList.vue";
import selectionList from "./selectionList.vue"; import selectionList from "./selectionList.vue";
import addFormPeo from "./addFormPeo.vue"; import addFormPeo from "./addFormPeo.vue";
import ApprovalInfo from "./approvalInfo.vue"; import ApprovalInfo from "./approvalInfo.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import TagSelectorDialog from "./TagSelectorDialogPeo.vue"; import TagSelectorDialog from "./TagSelectorDialogPeo.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import { import {
ref, ref,
@ -316,7 +208,7 @@ const dialogForm = ref(false); //弹窗
const formRef = ref(); const formRef = ref();
const activeName = ref("first"); const activeName = ref("first");
const formData = ref([ const formData = ref([
{ label: "", prop: "qtXx", type: "slot", width: "100%" }, { prop: "qtXx", type: "slot", width: "100%" },
{ label: "群体名称", prop: "qtMc", type: "input" }, { label: "群体名称", prop: "qtMc", type: "input" },
{ label: "群体别名", prop: "qtBm", type: "input" }, { label: "群体别名", prop: "qtBm", type: "input" },
{ label: "群体简称", prop: "qtJc", type: "input" }, { label: "群体简称", prop: "qtJc", type: "input" },
@ -592,16 +484,19 @@ defineExpose({ init });
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss"; @import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active { ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
color: #0072ff; color: #0072ff;
background: rgba(0, 114, 255, 0.3); background: rgba(0, 114, 255, 0.3);
} }
.boxlist { .boxlist {
width: 99%; width: 99%;
height: 225px; height: 225px;
margin-top: 10px; margin-top: 10px;
overflow: hidden; overflow: hidden;
} }
.btns { .btns {
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;

View File

@ -3,41 +3,19 @@
<div class="head_box"> <div class="head_box">
<span class="title">重点群体管理 </span> <span class="title">重点群体管理 </span>
<div> <div>
<el-button <el-button size="small" type="primary" @click="autoClick" v-if="typetext == 'auto'">审核</el-button>
size="small" <el-button size="small" @click="autoClick" type="primary" v-if="typetext == 'approval'">审批</el-button>
type="primary"
@click="autoClick"
v-if="typetext == 'auto'"
>审核</el-button
>
<el-button
size="small"
@click="autoClick"
type="primary"
v-if="typetext == 'approval'"
>审批</el-button
>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<el-tabs <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane :label="title + '群体'" name="first"></el-tab-pane> <el-tab-pane :label="title + '群体'" name="first"></el-tab-pane>
<el-tab-pane label="轨迹信息" name="second"></el-tab-pane> <el-tab-pane label="轨迹信息" name="second"></el-tab-pane>
<el-tab-pane label="标签信息" name="third"></el-tab-pane> <el-tab-pane label="标签信息" name="third"></el-tab-pane>
</el-tabs> </el-tabs>
<FormMessage <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<template #qtXx> <template #qtXx>
<el-divider content-position="left">群体信息</el-divider> <el-divider content-position="left">群体信息</el-divider>
</template> </template>
@ -49,14 +27,8 @@
<ApprovalInfo ref="approvalInfoRef" /> <ApprovalInfo ref="approvalInfoRef" />
</template> </template>
<template #xzRy> <template #xzRy>
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :key="pageData.keyCount"
:tableData="pageData.tableData" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" @chooseData="chooseData">
:tableColumn="pageData.tableColumn"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #ryxx="{ row }"> <template #ryxx="{ row }">
<div> <div>
<img src="" alt="" /> <img src="" alt="" />
@ -64,29 +36,17 @@
<li>姓名{{ row.rySfzh }}</li> <li>姓名{{ row.rySfzh }}</li>
<li class="rowClass"> <li class="rowClass">
性别 性别
<DictTag <DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
:tag="false"
:value="row.ryXb"
:options="D_BZ_XB"
/>
</li> </li>
<li class="rowClass"> <li class="rowClass">
籍贯 籍贯
<DictTag <DictTag :tag="false" :value="row.ryJg" :options="D_BZ_XZQHDM" />
:tag="false"
:value="row.ryJg"
:options="D_BZ_XZQHDM"
/>
</li> </li>
<li>身份证{{ row.rySfzh }}</li> <li>身份证{{ row.rySfzh }}</li>
<li>出生日期{{ row.ryCsrq }}</li> <li>出生日期{{ row.ryCsrq }}</li>
<li class="rowClass"> <li class="rowClass">
民族 民族
<DictTag <DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
:tag="false"
:value="row.ryMz"
:options="D_BZ_MZ"
/>
</li> </li>
</ul> </ul>
</div> </div>
@ -99,11 +59,7 @@
<template #jzxx="{ row }"> <template #jzxx="{ row }">
<div class="rowClass"> <div class="rowClass">
户籍地区划 户籍地区划
<DictTag <DictTag :tag="false" :value="row.hjdQh" :options="D_BZ_XZQHDM" />
:tag="false"
:value="row.hjdQh"
:options="D_BZ_XZQHDM"
/>
</div> </div>
<div>户籍派出所{{ row.hjdPcsmc }}</div> <div>户籍派出所{{ row.hjdPcsmc }}</div>
<div>户籍地详址{{ row.hjdXz }}</div> <div>户籍地详址{{ row.hjdXz }}</div>
@ -112,28 +68,16 @@
<div>管辖单位{{ row.gxSsbmmc }}</div> <div>管辖单位{{ row.gxSsbmmc }}</div>
<div class="rowClass"> <div class="rowClass">
人员级别 人员级别
<DictTag <DictTag :tag="false" :value="row.zdrRyjb" :options="D_GS_ZDR_RYJB" />
:tag="false"
:value="row.zdrRyjb"
:options="D_GS_ZDR_RYJB"
/>
</div> </div>
<div>管控原因{{ zdrLkyy }}</div> <div>管控原因{{ zdrLkyy }}</div>
<div class="rowClass"> <div class="rowClass">
管控状态 管控状态
<DictTag <DictTag :tag="false" :value="row.zdrBkZt" :options="D_GS_ZDR_BK_ZT" />
:tag="false"
:value="row.zdrBkZt"
:options="D_GS_ZDR_BK_ZT"
/>
</div> </div>
</template> </template>
<template #zdrCzzt="{ row }"> <template #zdrCzzt="{ row }">
<DictTag <DictTag :tag="false" :value="row.zdrCzzt" :options="D_GS_ZDR_CZZT" />
:tag="false"
:value="row.zdrCzzt"
:options="D_GS_ZDR_CZZT"
/>
</template> </template>
<template #xtSjzt="{ row }"> <template #xtSjzt="{ row }">
<div> <div>
@ -147,64 +91,28 @@
<!-- 两群采集录入--> <!-- 两群采集录入-->
<template #lqxxList> <template #lqxxList>
<div class="boxlist"> <div class="boxlist">
<MyTable <MyTable :tableData="tableDate.lqxxList" :tableColumn="tableDate.tableLqColumn"
:tableData="tableDate.lqxxList" :tableHeight="tableDate.tableHeight" :key="tableDate.keyCount" :tableConfiger="tableDate.tableConfiger"
:tableColumn="tableDate.tableLqColumn" :controlsWidth="tableDate.controlsWidth">
:tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth"
>
</MyTable> </MyTable>
</div> </div>
</template> </template>
</FormMessage> </FormMessage>
</div> </div>
<!-- 列表弹窗 --> <!-- 列表弹窗 -->
<DialogList <DialogList :Single="false" :roleIds="roleIds" v-if="chooseShow" @chooseDate="chooseDate" :titleValue="chooseTitle"
:Single="false" v-model="chooseShow" :bqLx="chooseType" bqDl="02"></DialogList>
:roleIds="roleIds" <addFormPeo ref="addFormDiloag" @chooseDate="addFormPeoDate" @handleEditDate="handleEditDate" />
v-if="chooseShow"
@chooseDate="chooseDate"
:titleValue="chooseTitle"
v-model="chooseShow"
:bqLx="chooseType"
bqDl="02"
></DialogList>
<addFormPeo
ref="addFormDiloag"
@chooseDate="addFormPeoDate"
@handleEditDate="handleEditDate"
/>
<selectionList <selectionList :Single="false" :roleIds="selectroleId" v-if="selectionValue" @chooseDate="chooseSelectDate"
:Single="false" :titleValue="chooseTitle" v-model="selectionValue">
:roleIds="selectroleId"
v-if="selectionValue"
@chooseDate="chooseSelectDate"
:titleValue="chooseTitle"
v-model="selectionValue"
>
</selectionList> </selectionList>
<el-dialog v-model="dialogVisible" title="审核" width="500px"> <el-dialog v-model="dialogVisible" title="审核" width="500px">
<FormMessage <FormMessage v-model="listQueryAuto" :formList="formAutoData" ref="elform">
v-model="listQueryAuto"
:formList="formAutoData"
ref="elform"
>
<!-- 自定义原因字段渲染 --> <!-- 自定义原因字段渲染 -->
<template #shBtgyy> <template #shBtgyy>
<el-form-item <el-form-item label="原因" prop="shBtgyy" v-if="listQueryAuto.sftg == '0'" style="width: 100%">
label="原因" <el-input type="textarea" v-model="listQueryAuto.shBtgyy" placeholder="请输入不通过原因" />
prop="shBtgyy"
v-if="listQueryAuto.sftg == '0'"
style="width: 100%"
>
<el-input
type="textarea"
v-model="listQueryAuto.shBtgyy"
placeholder="请输入不通过原因"
/>
</el-form-item> </el-form-item>
</template> </template>
</FormMessage> </FormMessage>
@ -226,7 +134,6 @@ import selectionList from "./selectionList.vue";
import addFormPeo from "./addFormPeo.vue"; import addFormPeo from "./addFormPeo.vue";
import ApprovalInfo from "./approvalInfo.vue"; import ApprovalInfo from "./approvalInfo.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
@ -591,16 +498,19 @@ defineExpose({ init });
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss"; @import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active { ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
color: #0072ff; color: #0072ff;
background: rgba(0, 114, 255, 0.3); background: rgba(0, 114, 255, 0.3);
} }
.boxlist { .boxlist {
width: 99%; width: 99%;
height: 225px; height: 225px;
margin-top: 10px; margin-top: 10px;
overflow: hidden; overflow: hidden;
} }
.btns { .btns {
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;

View File

@ -1,120 +0,0 @@
<template>
<el-form ref="elform" :model="listQuery" :rules="rules" :inline="true" label-position="right">
<el-divider content-position="left">群体信息</el-divider>
<el-form-item prop="qtmc" label="群体名称">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtmc" :placeholder="`请输入群体名称`"/>
</el-form-item>
<el-form-item prop="qtbm" label="群体别名">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtbm" :placeholder="`请输入群体别名`"/>
</el-form-item>
<el-form-item prop="qtjc" label="群体简称">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtjc" :placeholder="`请输入群体简称`"/>
</el-form-item>
<el-form-item prop="qtlb" label="群体类别">
<MOSTY.Other width="100%" clearable v-model="listQuery.qtlb" :placeholder="`请输入群体类别`"/>
</el-form-item>
<el-form-item prop="clsj" label="成立时间">
<el-date-picker v-model="listQuery.clsj" type="date" value-format="YYYY-MM-DD" placeholder="请选择日期" style="width:100%;" />
</el-form-item>
<el-form-item prop="fxdj" label="风险等级">
<MOSTY.Select filterable v-model="listQuery.fxdj" :dictEnum="[]" width="100%" clearable :placeholder="`请选择风险等级`"/>
</el-form-item>
<el-form-item prop="ybjc" label="背景资料" style="width:100%">
<MOSTY.Other filterable v-model="listQuery.bjzl" style="width:100%" />
</el-form-item>
<el-form-item prop="ybjc" label="两群采集录入" style="width:100%">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
/>
</el-form-item>
<el-divider content-position="left">群体管辖信息</el-divider>
<el-form-item prop="gxdw" label="管辖单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.gxdw" :placeholder="`请输入管辖单位`"/>
</el-form-item>
<el-form-item prop="gxxq" label="管辖辖区">
<MOSTY.Other width="100%" clearable v-model="listQuery.gxxq" :placeholder="`请输入管辖辖区`"/>
</el-form-item>
<el-form-item prop="lxr" label="联系人">
<MOSTY.Other width="100%" clearable v-model="listQuery.lxr" :placeholder="`请输入联系人`"/>
</el-form-item>
<el-form-item prop="lxfs" label="联系方式">
<MOSTY.Other width="100%" clearable v-model="listQuery.lxfs" :placeholder="`请输入联系方式`"/>
</el-form-item>
<el-divider content-position="left">审批信息</el-divider>
<el-form-item prop="sqr" label="申请人">
<MOSTY.Other width="100%" clearable v-model="listQuery.sqr" :placeholder="`请输入申请人`"/>
</el-form-item>
<el-form-item prop="sqdw" label="申请单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.sqdw" :placeholder="`请输入申请单位`"/>
</el-form-item>
<el-form-item prop="shr" label="审核人">
<MOSTY.Other width="100%" clearable v-model="listQuery.shr" :placeholder="`请输入审核人`"/>
</el-form-item>
<el-form-item prop="shdw" label="审核单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.shdw" :placeholder="`请输入审核单位`"/>
</el-form-item>
<el-form-item prop="spr" label="审批人">
<MOSTY.Other width="100%" clearable v-model="listQuery.spr" :placeholder="`请输入审批人`"/>
</el-form-item>
<el-form-item prop="spdw" label="审批单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.spdw" :placeholder="`请输入审批单位`"/>
</el-form-item>
<el-form-item prop="jsdw" label="接收单位">
<MOSTY.Other width="100%" clearable v-model="listQuery.jsdw" :placeholder="`请输入接收单位`"/>
</el-form-item>
<el-form-item prop="sffk" label="是否反馈">
<MOSTY.Other width="100%" clearable v-model="listQuery.sffk" :placeholder="`请输入是否反馈`"/>
</el-form-item>
</el-form>
</template>
<script setup>
import * as MOSTY from "@/components/MyComponents/index";
import MyTable from "@/components/aboutTable/MyTable.vue";
import { reactive,defineEmits,ref , defineExpose,} from 'vue'
const emits = defineEmits(["update:modelValue"]);
const elform = ref();
const listQuery = ref({});
const rules = reactive({
qtmc: [{ required: true, message: '请输入群体名称', trigger: 'blur' }],
})
const pageData = reactive({
tableData: [],
tableConfiger: {
rowHieght: 30,
showSelectType: "null",
loading: false,
haveControls:false,
showIndex:false
},
tableHeight:200,
tableColumn: [
{ label: "微信群", prop: "wxq"},
{ label: "QQ群", prop: "qqq"},
{ label: "群主", prop: "qz"},
{ label: "联系电话", prop: "lxdh"},
{ label: "群重要内容", prop: "zynr"},
]
});
const submit = (resfun) => {
elform.value.validate((valid) => {
if (!valid) return false;
resfun(listQuery.value);
});
};
defineExpose({ submit });
</script>
<style>
</style>

View File

@ -0,0 +1,201 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">流线索</span>
<div>
<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">
<template #gapdive>
<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">
<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>
</template>
</FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<MyTable
:tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn"
:tableHeight="pageForm.tableHeight"
:key="pageForm.keyCount"
: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>
</MyTable>
</div>
</div>
</template>
<script setup>
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";
const emit = defineEmits(["change"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
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" }],
});
const formData = ref([
{ 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"},
]);
const fjdz = ref()
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const pageForm = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false,
haveControls:false
},
controlsWidth: 220,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb",showSolt:true },
{ label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bqList",showSolt:true }
]
});
onMounted(()=>{
tabHeightFn()
})
// 初始化数据
const init = (list) => {
fjdz.value = []
tabHeightFn()
dialogForm.value = true;
let peo = []
list.forEach(item => {
if(item.zdryList) peo = peo.concat(item.zdryList);
});
pageForm.tableData = peo.map((it) => {
return {
xm: it.ryXm,
xb: it.ryXb,
sfzh: it.rySfzh,
hjdz: it.xzdXz,
hjdpcs: it.hjdPcsmc,
hjdpcsdm: it.hjdPcsdm,
bqList: it.bqList || []
};
});
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(','):'';
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;
});
});
};
// 关闭
const close = () => {
fjdz.value = []
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
// 表格高度计算
const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720;
window.onresize = function () {
tabHeightFn();
};
};
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: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
::v-deep .avatar-uploader{
display: flex;
align-items: center;
}
::v-deep .el-upload-list{
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon{
top: 3px;
}
</style>

View File

@ -2,63 +2,64 @@
<div> <div>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="重点群体管理"> <PageTitle title="重点群体管理">
<el-button type="primary" size="small" v-for="it in btns" :key="it"> <el-popover placement="bottom" :visible="visible" :width="400" trigger="click">
{{ it }}</el-button <template #reference>
> <el-button type="primary" @click="(visible = !visible), (visiblefp = false)" size="small">布控申请
<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> </el-button>
<el-button type="danger" size="small" @click="addEdit('add', '')"> </template>
<el-icon style="vertical-align: middle"><Dete /></el-icon> <div class="flex just-center">
<span style="vertical-align: middle">批量删除</span> <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> </el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox"> <div ref="searchBox">
<Search <Search :searchArr="searchConfiger" @submit="onSearch" />
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
/>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="tabBox"> <div class="tabBox">
<MyTable <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:tableData="pageData.tableData" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
:tableColumn="pageData.tableColumn" @chooseData="chooseData">
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #jbxx="{ row }"> <template #jbxx="{ row }">
<div> <div>
<img src="" alt="" /> <img src="" alt="" />
<ul> <ul>
<li>群体名称{{ row.qtMc }}</li> <li>群体名称{{ row.qtMc }}</li>
<!-- <li>所属辖区</li> -->
<li class="rowClass"> <li class="rowClass">
风险等级 风险等级
<DictTag <DictTag :tag="false" :value="row.qtFxdj" :options="D_GS_ZDQT_FXDJ" />
:tag="false"
:value="row.qtFxdj"
:options="D_GS_ZDQT_FXDJ"
/>
</li> </li>
<li>创建时间{{ row.xtCjsj }}</li> <li>创建时间{{ row.xtCjsj }}</li>
</ul> </ul>
</div> </div>
<div class="flex"> <div class="flex">
<el-button <el-button type="primary" size="small" v-for="(item, index) in row.bqList" :key="index">
type="primary" {{ item.bqMc }}</el-button>
size="small"
v-for="(item, index) in row.bqList" :key="index"
>
{{ item.bqMc }}</el-button
>
</div> </div>
</template> </template>
<template #bgxx="{ row }"> <template #bgxx="{ row }">
@ -66,7 +67,6 @@
<div>创建单位{{ row.xtCjbmmc }}</div> <div>创建单位{{ row.xtCjbmmc }}</div>
</template> </template>
<template #gkxx="{ row }"> <template #gkxx="{ row }">
<!-- <div>群体标签{{ }}</div> -->
<div>管辖单位{{ row.gxSsdwmc }}</div> <div>管辖单位{{ row.gxSsdwmc }}</div>
<div>列控原因{{ row.zdrLkyy }}</div> <div>列控原因{{ row.zdrLkyy }}</div>
<div>开始时间{{ row.startTime }}</div> <div>开始时间{{ row.startTime }}</div>
@ -81,58 +81,44 @@
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link <el-link size="small" v-if="row.qtZt == '01' || row.qtZt == '03' || row.qtZt == '06'"
v-if="row.qtZt == '01' || row.qtZt == '03' || row.qtZt == '06'" @click="openDetail(row)">送审</el-link>
@click="openDetail(row)" <el-link size="small" type="success" @click="addEdit('edit', row)" v-if="row.qtZt !== '05'">编辑</el-link>
>送审</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>
<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> </template>
</MyTable> </MyTable>
<Pages <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger, ...pageData.pageConfiger,
total: pageData.total total: pageData.total
}" }"></Pages>
></Pages>
</div> </div>
<el-dialog <el-dialog v-model="dialogVisible" title="发起送审" width="500px" :before-close="handleClose">
v-model="dialogVisible"
title="发起送审"
width="500px"
:before-close="handleClose"
>
<span>是否要发起送审</span> <span>是否要发起送审</span>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="autoEdit()"> 确定 </el-button> <el-button type="primary" @click="autoEdit"> 确定 </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 编辑 --> <!-- 编辑 - 新增-->
<EditForm @updateDate="updateDate" ref="editFormDiloag" /> <EditForm v-if="show" @updateDate="getList" ref="editFormDiloag" />
<!-- 详情 --> <!-- 详情 -->
<DetailForm ref="detailDiloag" /> <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> </div>
</template> </template>
<script setup> <script setup>
import ZxsForm from "./components/zxsForm.vue";
import ChooseUser from "@/components/MyComponents/ChooseUser/index.vue";
import DetailForm from "./components/infoForm.vue"; import DetailForm from "./components/infoForm.vue";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
@ -141,41 +127,52 @@ import Search from "@/components/aboutTable/Search.vue";
import EditForm from "./components/addForm.vue"; import EditForm from "./components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const showzxs = ref(false);
const { const {
D_GS_BK_SQLX,
D_GS_ZDQT_FXDJ, D_GS_ZDQT_FXDJ,
D_GS_ZDR_RYJB, D_GS_ZDR_RYJB,
D_GS_ZDQT_LB, D_GS_ZDQT_LB,
D_GS_ZDR_BK_ZT, D_GS_ZDR_BK_ZT,
D_GS_BQ_LX, D_GS_BQ_LX,
D_GS_ZDQT_ZT 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( } = proxy.$dict(
"D_GS_BK_SQLX",
"D_GS_ZDQT_FXDJ", "D_GS_ZDQT_FXDJ",
"D_GS_ZDR_RYJB", "D_GS_ZDR_RYJB",
"D_GS_ZDQT_LB", "D_GS_ZDQT_LB",
"D_GS_ZDR_BK_ZT", "D_GS_ZDR_BK_ZT",
"D_GS_BQ_LX", "D_GS_BQ_LX",
"D_GS_ZDQT_ZT" "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 editFormDiloag = ref();
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const autoId = ref(); const autoId = ref();
const dialogVisible = ref(false); const dialogVisible = ref(false);
const btns = reactive([ const visible = ref(false);
"一键布控", const visiblefp = ref(false);
"维护群体", const zxsDilof = ref();
"矛盾化解", const obj = ref({
"转指令", fpmc: ""
"转线索", });
"转督导",
"转合成",
"移交管控",
"批量导入",
"导出"
]);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "群体名称", label: "群体名称",
@ -197,12 +194,6 @@ const searchConfiger = ref([
showType: "select", showType: "select",
options: D_GS_ZDR_RYJB options: D_GS_ZDR_RYJB
}, },
{
label: "成员姓名",
prop: "cyXm ",
placeholder: "请输入成员姓名",
showType: "input"
},
{ {
label: "群体类别", label: "群体类别",
prop: "qtLb", prop: "qtLb",
@ -210,42 +201,6 @@ const searchConfiger = ref([
showType: "select", showType: "select",
options: D_GS_ZDQT_LB options: D_GS_ZDQT_LB
}, },
{
label: "成员身份证号",
prop: "cySfzh",
placeholder: "请输入成员身份证号",
showType: "input"
},
{
label: "群体大类",
prop: "qtDl",
placeholder: "请输入群体大类",
showType: "input"
},
{
label: "群体细类",
prop: "qtXl",
placeholder: "请输入群体细类",
showType: "input"
},
{
label: "管辖单位名称",
prop: "gxSsdwmc",
placeholder: "请输入管辖单位名称",
showType: "input"
},
{
label: "开始时间",
prop: "startTime",
placeholder: "请输入开始时间",
showType: "date"
},
{
label: "截至时间",
prop: "endTime",
placeholder: "请输入截至时间",
showType: "date"
},
{ {
label: "布控状态", label: "布控状态",
prop: "zdrBkZt", prop: "zdrBkZt",
@ -263,13 +218,7 @@ const searchConfiger = ref([
]); ]);
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{
img: "",
jbxx: "",
wkrs: "1/5"
}
],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -286,7 +235,7 @@ const pageData = reactive({
{ label: "群体基本信息", prop: "jbxx", showSolt: true }, { label: "群体基本信息", prop: "jbxx", showSolt: true },
{ label: "背景信息", prop: "bgxx", showSolt: true }, { label: "背景信息", prop: "bgxx", showSolt: true },
{ label: "管控信息", prop: "gkxx", showSolt: true }, { label: "管控信息", prop: "gkxx", showSolt: true },
{ label: "稳控人数", prop: "wkrs", showSolt: true, width: 80 }, { label: "稳控人数", prop: "wkrs", showSolt: true },
{ label: "状态", prop: "qtZt", showSolt: true } { label: "状态", prop: "qtZt", showSolt: true }
] ]
}); });
@ -315,15 +264,7 @@ const autoEdit = () => {
ElMessage.error("提交失败"); ElMessage.error("提交失败");
}); });
}; };
const updateDate = () => {
getList();
};
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList();
};
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...val }; queryFrom.value = { ...val };
@ -344,7 +285,7 @@ const changeSize = (val) => {
}; };
// 获取列表 // 获取列表
const getList = (val) => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
let url = "/mosty-gsxt/tbGsxtZdqt/selectPage"; let url = "/mosty-gsxt/tbGsxtZdqt/selectPage";
@ -361,7 +302,80 @@ const getList = (val) => {
// 详情 // 详情
const addEdit = (type, row) => { const addEdit = (type, row) => {
show.value = true;
visible.value = false;
nextTick(() => {
editFormDiloag.value.init(type, row); 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);
});
}; };
// 表格高度计算 // 表格高度计算
@ -379,6 +393,7 @@ defineExpose({ infoList });
.el-loading-mask { .el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important; background: rgba(0, 0, 0, 0.5) !important;
} }
.rowClass { .rowClass {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -214,7 +214,6 @@ const multipleUserRef = ref(null);
const emits = defineEmits(["update:modelValue", "chooseDate"]); const emits = defineEmits(["update:modelValue", "chooseDate"]);
const type = ref("标签大类"); const type = ref("标签大类");
onMounted(() => { onMounted(() => {
console.log(props.dic.D_GS_BQ_ZL, "props.dic.D_GS_BQ_ZL");
tabs.value = props.dic.D_GS_BQ_ZL; tabs.value = props.dic.D_GS_BQ_ZL;
activeTab.value = tabs.value?.[0]?.dm || "01"; activeTab.value = tabs.value?.[0]?.dm || "01";
handleFilter(); handleFilter();

View File

@ -3,23 +3,12 @@
<div class="head_box"> <div class="head_box">
<span class="title">{{ title }}重点人管理</span> <span class="title">{{ title }}重点人管理</span>
<div> <div>
<el-button <el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button >
type="primary"
size="small"
:loading="loading"
@click="submit"
>保存</el-button
>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<template #basic> <template #basic>
<el-divider content-position="left">基础管理</el-divider> <el-divider content-position="left">基础管理</el-divider>
</template> </template>
@ -45,22 +34,19 @@
:tableHeight="tableDate.tableHeight" :tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount" :key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger" :tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth" :controlsWidth="tableDate.controlsWidth">
>
<template #bqLb="{ row }"> <template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" /> <DictTag :value="row.bqLb" :tag="false" :options="props.dic.D_GS_BQ_LB" />
</template> </template>
<template #bqLx="{ row }"> <template #bqLx="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="D_GS_BQ_LX" /> <DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
</template> </template>
<template #bqZl="{ row }"> <template #bqZl="{ row }">
<DictTag :value="row.bqZl" :tag="false" :options="D_GS_BQ_ZL" /> <DictTag :value="row.bqZl" :tag="false" :options="props.dic.D_GS_BQ_ZL" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)" <el-link type="danger" @click="delDictItem(row.bqId)">删除</el-link>
>删除</el-link
>
</template> </template>
</MyTable> </MyTable>
</div> </div>
@ -68,92 +54,37 @@
<!-- 管辖单位 --> <!-- 管辖单位 -->
<template #gxSsbmdm> <template #gxSsbmdm>
<el-select <el-select v-model="listQuery.gxSsbmdm" placeholder="请选择管辖单位" style="width: 240px" @change="handleDeptChange('gxSsbmmc', $event)" >
v-model="listQuery.gxSsbmdm" <el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
placeholder="请选择管辖单位"
style="width: 240px"
@change="handleDeptChange('gxSsbmmc', $event)"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select> </el-select>
</template> </template>
<!-- 户籍派出所 --> <!-- 户籍派出所 -->
<template #hjdPcsdm> <template #hjdPcsdm>
<el-select <el-select v-model="listQuery.hjdPcsdm" placeholder="请选择户籍派出所" style="width: 240px" @change="handleDeptChange('hjdPcsmc', $event)">
v-model="listQuery.hjdPcsdm" <el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
placeholder="请选择户籍派出所"
style="width: 240px"
@change="handleDeptChange('hjdPcsmc', $event)"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select> </el-select>
</template> </template>
<!-- 诉求单位 --> <!-- 诉求单位 -->
<template #sqSsbmdm> <template #sqSsbmdm>
<el-select <el-select v-model="listQuery.sqSsbmdm" placeholder="请选择户籍派出所" style="width: 240px" @change="handleDeptChange('sqSsbmmc', $event)" >
v-model="listQuery.sqSsbmdm" <el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
placeholder="请选择户籍派出所"
style="width: 240px"
@change="handleDeptChange('sqSsbmmc', $event)"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select> </el-select>
</template> </template>
<!-- 现住地派出所 --> <!-- 现住地派出所 -->
<template #xzdPcsdm> <template #xzdPcsdm>
<el-select <el-select v-model="listQuery.xzdPcsdm" placeholder="请选择现住地派出所" style="width: 240px" @change="handleDeptChange('xzdPcsmc', $event)">
v-model="listQuery.xzdPcsdm" <el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
placeholder="请选择现住地派出所"
style="width: 240px"
@change="handleDeptChange('xzdPcsmc', $event)"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select> </el-select>
</template> </template>
<!-- 责任单位 --> <!-- 责任单位 -->
<template #zrSsbmdm> <template #zrSsbmdm>
<el-select <el-select v-model="listQuery.zrSsbmdm" placeholder="请选择责任单位" style="width: 240px" @change="handleDeptChange('zrSsbmmc', $event)">
v-model="listQuery.zrSsbmdm" <el-option v-for="item in deptList" :key="item.value" :label="item.label" :value="item.value.toString()"/>
placeholder="请选择责任单位"
style="width: 240px"
@change="handleDeptChange('zrSsbmmc', $event)"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select> </el-select>
</template> </template>
</FormMessage> </FormMessage>
<!-- 列表弹窗 --> <!-- 列表弹窗 -->
<TagSelectorDialog <TagSelectorDialog v-model="chooseShow" ref="tagDialog" @chooseDate="handleTagSelect" :dic="props.dic"/>
v-model="chooseShow"
ref="tagDialog"
@chooseDate="handleTagSelect"
:dic="{ D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX }"
/>
</div> </div>
</div> </div>
</template> </template>
@ -163,129 +94,47 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import TagSelectorDialog from "./TagSelectorDialog.vue"; import TagSelectorDialog from "./TagSelectorDialog.vue";
import * as rule from "@/utils/rules.js"; import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
nextTick
} from "vue";
import { selectUserDeptPage } from "@/api/user-manage"; import { selectUserDeptPage } from "@/api/user-manage";
const emit = defineEmits(["updateDate"]); const emit = defineEmits(["updateDate"]);
const props = defineProps({ const props = defineProps({
dic: Object dic: Object
}); });
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const {
D_GS_BK_SSJZ,
D_GS_ZDR_RYJB,
D_GS_SSYJ,
D_GS_BQ_DJ,
D_BZ_XZQHDM,
D_BZ_MZ,
D_BZ_XB,
D_GS_ZDR_CZZT,
D_GS_BQ_ZL,
D_GS_BQ_LB,
D_GS_BQ_LX,
D_GS_ZDR_YJDJ
} = proxy.$dict(
"D_GS_BK_SSJZ",
"D_GS_ZDR_RYJB",
"D_GS_SSYJ",
"D_GS_BQ_DJ",
"D_BZ_XZQHDM",
"D_BZ_MZ",
"D_BZ_XB",
"D_GS_ZDR_CZZT",
"D_GS_BQ_ZL",
"D_GS_BQ_LB",
"D_GS_BQ_LX",
"D_GS_ZDR_YJDJ"
); //获取字典数据
const tagDialog = ref(); const tagDialog = ref();
const dialogForm = ref(false); //弹窗 const dialogForm = ref(false); //弹窗
const formData = ref([ const formData = ref([
{ label: "", prop: "basic", type: "slot", width: "100%" }, { label: "", prop: "basic", type: "slot", width: "100%" },
{ label: "姓名", prop: "ryXm", type: "input" }, { label: "姓名", prop: "ryXm", type: "input" },
{ label: "性别", prop: "ryXb", type: "select", options: D_BZ_XB }, { label: "性别", prop: "ryXb", type: "select", options: props.dic.D_BZ_XB },
{ label: "民族", prop: "ryMz", type: "select", options: D_BZ_MZ }, { label: "民族", prop: "ryMz", type: "select", options: props.dic.D_BZ_MZ },
{ label: "身份证号", prop: "rySfzh", type: "input" }, { label: "身份证号", prop: "rySfzh", type: "input" },
{ label: "联系电话", prop: "ryLxdh", type: "input" }, { label: "联系电话", prop: "ryLxdh", type: "input" },
{ label: "出生日期", prop: "ryCsrq", type: "date" }, { label: "出生日期", prop: "ryCsrq", type: "date" },
{ label: "籍贯", prop: "ryJg", type: "select", options: D_BZ_XZQHDM }, { label: "籍贯", prop: "ryJg", type: "select", options: props.dic.D_BZ_XZQHDM },
{ { label: "级别", prop: "zdrRyjb", type: "select", options: props.dic.D_GS_ZDR_RYJB },
label: "级别", { label: "预警等级", prop: "zdrYjdj", type: "select", options: props.dic.D_GS_ZDR_YJDJ },
prop: "zdrRyjb",
type: "select",
options: D_GS_ZDR_RYJB
},
{
label: "预警等级",
prop: "zdrYjdj",
type: "select",
options: D_GS_ZDR_YJDJ
},
{ label: "", prop: "address", type: "slot", width: "100%" }, { label: "", prop: "address", type: "slot", width: "100%" },
{ label: "户籍地区划", prop: "hjdQh", type: "select", options: D_BZ_XZQHDM }, { label: "户籍地区划", prop: "hjdQh", type: "select", options: props.dic.D_BZ_XZQHDM },
{ label: "户籍地详址", prop: "hjdXz", type: "input" }, { label: "户籍地详址", prop: "hjdXz", type: "input" },
{ { label: "户籍地派出所", prop: "hjdPcsdm", type: "slot" },
label: "户籍地派出所", { label: "现住地区划", prop: "xzdQh", type: "select", options: props.dic.D_BZ_XZQHDM },
prop: "hjdPcsdm",
type: "slot"
},
{ label: "现住地区划", prop: "xzdQh", type: "select", options: D_BZ_XZQHDM },
{ label: "现住地详址", prop: "xzdXz", type: "input" }, { label: "现住地详址", prop: "xzdXz", type: "input" },
{ { label: "现住地派出所", prop: "xzdPcsdm", type: "slot" },
label: "现住地派出所",
prop: "xzdPcsdm",
type: "slot"
},
{ label: "", prop: "jurisdiction", type: "slot", width: "100%" }, { label: "", prop: "jurisdiction", type: "slot", width: "100%" },
{ { label: "管辖单位", prop: "gxSsbmdm", type: "slot" },
label: "管辖单位", { label: "诉求单位", prop: "sqSsbmdm", type: "slot" },
prop: "gxSsbmdm", { label: "责任单位", prop: "zrSsbmdm", type: "slot" },
type: "slot" { 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: "sqSsbmdm",
type: "slot"
},
{
label: "责任单位",
prop: "zrSsbmdm",
type: "slot"
},
{ label: "所属警种", prop: "zdrSsjz", type: "select", options: D_GS_BK_SSJZ },
{
label: "涉及警种",
prop: "zdrSjjz",
type: "select",
options: D_GS_BK_SSJZ,
multiple: true
},
{ label: "管控民警姓名", prop: "gkMjXm", type: "input" }, { label: "管控民警姓名", prop: "gkMjXm", type: "input" },
{ label: "管控民警警号", prop: "gkMjJh", type: "input" }, { label: "管控民警警号", prop: "gkMjJh", type: "input" },
{ label: "管控原因", prop: "zdrLkyy", type: "textarea", width: "100%" }, { label: "管控原因", prop: "zdrLkyy", type: "textarea", width: "100%" },
{ label: "", prop: "status", type: "slot", width: "100%" }, { label: "", prop: "status", type: "slot", width: "100%" },
{ { label: "处置状态", prop: "zdrCzzt", type: "select", options: props.dic.D_GS_ZDR_CZZT },
label: "处置状态",
prop: "zdrCzzt",
type: "select",
options: D_GS_ZDR_CZZT
},
{ label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" }, { label: "入库开始时间", prop: "zdrRkkssj", type: "datetime" },
{ label: "入库结束时间", prop: "zdrRkjssj", type: "datetime" }, { label: "入库结束时间", prop: "zdrRkjssj", type: "datetime" },
// { label: "人员标签大类", prop: "bqdl", type: "select", options: [] },
// { label: "人员标签细类", prop: "bqxl", type: "select", options: [] },
{ label: "", prop: "bqInfo", type: "slot", width: "100%" }, { label: "", prop: "bqInfo", type: "slot", width: "100%" },
{ label: "标签列表", prop: "bqList", type: "slot", width: "80%" } { label: "标签列表", prop: "bqList", type: "slot", width: "80%" }
]); ]);
@ -322,7 +171,6 @@ const title = ref("");
const rules = reactive({ const rules = reactive({
xsbt: [{ required: true, message: "请输入线索标题", trigger: "blur" }] xsbt: [{ required: true, message: "请输入线索标题", trigger: "blur" }]
}); });
const editpeo = ref();
onMounted(() => { onMounted(() => {
getdepartmentList(); getdepartmentList();
}); });
@ -353,19 +201,13 @@ const getdepartmentList = () => {
const submit = () => { const submit = () => {
elform.value.submit((data) => { elform.value.submit((data) => {
data.zdrSjjz = data.zdrSjjz.join(","); data.zdrSjjz = data.zdrSjjz.join(",");
let url = let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtZdry/save" : "/mosty-gsxt/tbGsxtZdry/update";
title.value == "新增"
? "/mosty-gsxt/tbGsxtZdry/save"
: "/mosty-gsxt/tbGsxtZdry/update";
let params = { ...data }; let params = { ...data };
qcckPost(params, url).then((res) => {
qcckPost(params, url)
.then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" }); proxy.$message({ type: "success", message: title.value + "成功" });
emit("onSearch"); emit("onSearch");
close(); close();
}) }).catch(() => {});
.catch(() => {});
}); });
}; };
// 打开弹窗 // 打开弹窗
@ -378,9 +220,7 @@ const openDialog = (type) => {
const handleDeptChange = (nameField, selectedValue) => { const handleDeptChange = (nameField, selectedValue) => {
// 找到选中的部门 // 找到选中的部门
const selectedDept = deptList.value.find( const selectedDept = deptList.value.find((item) => item.value.toString() === selectedValue );
(item) => item.value.toString() === selectedValue
);
// 更新名称 // 更新名称
listQuery.value[nameField] = selectedDept ? selectedDept.label : ""; listQuery.value[nameField] = selectedDept ? selectedDept.label : "";
}; };
@ -428,10 +268,12 @@ defineExpose({ init, setFormData });
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss"; @import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active { ::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
color: #0072ff; color: #0072ff;
background: rgba(0, 114, 255, 0.3); background: rgba(0, 114, 255, 0.3);
} }
.boxlist { .boxlist {
width: 99%; width: 99%;
height: 225px; height: 225px;

View File

@ -1,662 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ title }}重点人管理</span>
<div>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage
v-model="listQuery"
:formList="formData"
ref="elform"
:rules="rules"
>
<template #basic>
<el-divider content-position="left">基础管理</el-divider>
</template>
<template #address>
<el-divider content-position="left">地址信息</el-divider>
</template>
<template #jurisdiction>
<el-divider content-position="left">管辖信息</el-divider>
</template>
<template #status>
<el-divider content-position="left">状态信息</el-divider>
</template>
<template #bqInfo>
<el-divider content-position="left">标签信息</el-divider>
</template>
<!-- 人员标签模型-->
<template #bqList>
<!-- <el-button @click="openDialog('01')">选择</el-button> -->
<div class="boxlist">
<MyTable
:tableData="tableDate.bqList"
:tableColumn="tableDate.tableColumn"
:tableHeight="tableDate.tableHeight"
:key="tableDate.keyCount"
:tableConfiger="tableDate.tableConfiger"
:controlsWidth="tableDate.controlsWidth"
>
<template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" />
</template>
<template #bqLx="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="D_GS_BQ_LX" />
</template>
<template #bqZl="{ row }">
<DictTag :value="row.bqZl" :tag="false" :options="D_GS_BQ_ZL" />
</template>
<!-- 操作 -->
<!-- <template #controls="{ row }">
<el-link type="danger" @click="delDictItem(row.bqId)"
>删除</el-link
>
</template> -->
</MyTable>
</div>
</template>
<!-- 管辖单位 -->
<template #gxSsbmdm>
<el-select
v-model="listQuery.gxSsbmdm"
placeholder="请选择管辖单位"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select>
</template>
<!-- 户籍派出所 -->
<template #hjdPcsdm>
<el-select
v-model="listQuery.hjdPcsdm"
placeholder="请选择户籍派出所"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select>
</template>
<!-- 诉求单位 -->
<template #sqSsbmdm>
<el-select
v-model="listQuery.sqSsbmdm"
placeholder="请选择户籍派出所"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select>
</template>
<!-- 现住地派出所 -->
<template #xzdPcsdm>
<el-select
v-model="listQuery.xzdPcsdm"
placeholder="请选择现住地派出所"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select>
</template>
<!-- 责任单位 -->
<template #zrSsbmdm>
<el-select
v-model="listQuery.zrSsbmdm"
placeholder="请选择责任单位"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="item in deptList"
:key="item.value"
:label="item.label"
:value="item.value.toString()"
/>
</el-select>
</template>
</FormMessage>
<!-- 列表弹窗 -->
<TagSelectorDialog
v-model="chooseShow"
ref="tagDialog"
@chooseDate="handleTagSelect"
:dic="{ D_GS_BQ_ZL, D_GS_BQ_LB, D_GS_BQ_LX }"
/>
</div>
</div>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import TagSelectorDialog from "./TagSelectorDialog.vue";
import * as rule from "@/utils/rules.js";
import {
ref,
defineExpose,
reactive,
onMounted,
defineEmits,
getCurrentInstance,
nextTick
} from "vue";
import { selectUserDeptPage } from "@/api/user-manage";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const {
D_GS_BK_SSJZ,
D_GS_ZDR_RYJB,
D_GS_SSYJ,
D_GS_BQ_DJ,
D_BZ_XZQHDM,
D_BZ_MZ,
D_BZ_XB,
D_GS_ZDR_CZZT,
D_GS_BQ_ZL,
D_GS_BQ_LB,
D_GS_BQ_LX,
D_GS_ZDR_YJDJ
} = proxy.$dict(
"D_GS_BK_SSJZ",
"D_GS_ZDR_RYJB",
"D_GS_SSYJ",
"D_GS_BQ_DJ",
"D_BZ_XZQHDM",
"D_BZ_MZ",
"D_BZ_XB",
"D_GS_ZDR_CZZT",
"D_GS_BQ_ZL",
"D_GS_BQ_LB",
"D_GS_BQ_LX",
"D_GS_ZDR_YJDJ"
); //获取字典数据
const tagDialog = ref();
const dialogForm = ref(false); //弹窗
// const formData = ref([
// { label: "", prop: "basic", type: "slot", width: "100%" },
// { label: "姓名", prop: "ryXm", type: "input", disabled: true },
// { label: "身份证号", prop: "rySfzh", type: "input", disabled: true },
// {
// label: "户籍地派出所名称",
// prop: "hjdPcsmc",
// type: "input",
// disabled: true
// },
// {
// label: "户籍地派出所代码",
// prop: "hjdPcsdm",
// type: "slot",
// disabled: true
// },
// { label: "管辖单位", prop: "gxSsbmmc", type: "input", disabled: true },
// {
// label: "管辖单位代码",
// prop: "gxSsbmdm",
// type: "slot",
// disabled: true
// },
// {
// label: "户籍地区划",
// prop: "hjdQh",
// type: "select",
// options: D_BZ_XZQHDM,
// disabled: true
// },
// { label: "户籍地详址", prop: "hjdXz", type: "input", disabled: true },
// { label: "人员出生日期", prop: "ryCsrq", type: "date", disabled: true },
// {
// label: "人员籍贯",
// prop: "ryJg",
// type: "select",
// options: D_BZ_XZQHDM,
// disabled: true
// },
// { label: "人员联系电话", prop: "ryLxdh", type: "input", disabled: true },
// {
// label: "人员民族",
// prop: "ryMz",
// type: "select",
// options: D_BZ_MZ,
// disabled: true
// },
// {
// label: "人员性别",
// prop: "ryXb",
// type: "select",
// options: D_BZ_XB,
// disabled: true
// },
// { label: "诉求单位名称", prop: "sqSsbmmc", type: "input", disabled: true },
// {
// label: "诉求单位代码",
// prop: "sqSsbmdm",
// type: "slot",
// disabled: true
// },
// {
// label: "现住地派出所名称",
// prop: "xzdPcsmc",
// type: "input",
// disabled: true
// },
// {
// label: "现住地派出所代码",
// prop: "xzdPcsdm",
// type: "slot",
// disabled: true
// },
// {
// label: "现住地区划",
// prop: "xzdQh",
// type: "select",
// options: D_BZ_XZQHDM,
// disabled: true
// },
// { label: "现住地详址", prop: "xzdXz", type: "input", disabled: true },
// {
// label: "重点人处置状态",
// prop: "zdrCzzt",
// type: "select",
// options: D_GS_ZDR_CZZT,
// disabled: true
// },
// {
// label: "入库开始时间",
// prop: "zdrRkkssj",
// type: "datetime",
// disabled: true
// },
// {
// label: "入库结束时间",
// prop: "zdrRkjssj",
// type: "datetime",
// disabled: true
// },
// {
// label: "人员级别",
// prop: "zdrRyjb",
// type: "select",
// options: D_GS_ZDR_RYJB,
// disabled: true
// },
// {
// label: "所属警种",
// prop: "zdrSsjz",
// type: "select",
// options: D_GS_BK_SSJZ,
// disabled: true
// },
// {
// label: "涉及警种",
// prop: "zdrSjjz",
// type: "select",
// options: D_GS_BK_SSJZ,
// multiple: true,
// disabled: true
// },
// {
// label: "重点人预警等级",
// prop: "zdrYjdj",
// type: "select",
// options: D_GS_ZDR_YJDJ,
// disabled: true
// },
// { label: "管控民警姓名", prop: "gkMjXm", type: "input", disabled: true },
// { label: "管控民警警号", prop: "gkMjJh", type: "input", disabled: true },
// {
// label: "管控原因",
// prop: "zdrLkyy",
// type: "textarea",
// width: "100%",
// disabled: true
// },
// { label: "责任单位", prop: "zrSsbmmc", type: "input", disabled: true },
// {
// label: "责任单位代码",
// prop: "zrSsbmdm",
// type: "slot",
// disabled: true
// },
// // { label: "人员标签大类", prop: "bqdl", type: "select", options: [] },
// // { label: "人员标签细类", prop: "bqxl", type: "select", options: [] },
// { label: "标签列表", prop: "bqList", type: "slot", width: "80%" }
// ]);
const formData = ref([
{ label: "", prop: "basic", type: "slot", width: "100%" },
{ label: "姓名", prop: "ryXm", type: "input", disabled: true },
{
label: "性别",
prop: "ryXb",
type: "select",
options: D_BZ_XB,
disabled: true
},
{
label: "民族",
prop: "ryMz",
type: "select",
options: D_BZ_MZ,
disabled: true
},
{ label: "身份证号", prop: "rySfzh", type: "input", disabled: true },
{ label: "联系电话", prop: "ryLxdh", type: "input", disabled: true },
{ label: "出生日期", prop: "ryCsrq", type: "date", disabled: true },
{
label: "籍贯",
prop: "ryJg",
type: "select",
options: D_BZ_XZQHDM,
disabled: true
},
{
label: "级别",
prop: "zdrRyjb",
type: "select",
options: D_GS_ZDR_RYJB,
disabled: true
},
{
label: "预警等级",
prop: "zdrYjdj",
type: "select",
options: D_GS_ZDR_YJDJ,
disabled: true
},
{ label: "", prop: "address", type: "slot", width: "100%" },
{
label: "户籍地区划",
prop: "hjdQh",
type: "select",
options: D_BZ_XZQHDM,
disabled: true
},
{ label: "户籍地详址", prop: "hjdXz", type: "input", disabled: true },
{
label: "户籍地派出所",
prop: "hjdPcsdm",
type: "slot",
disabled: true
},
{
label: "现住地区划",
prop: "xzdQh",
type: "select",
options: D_BZ_XZQHDM,
disabled: true
},
{ label: "现住地详址", prop: "xzdXz", type: "input", disabled: true },
{
label: "现住地派出所",
prop: "xzdPcsdm",
type: "slot",
disabled: true
},
{
label: "",
prop: "jurisdiction",
type: "slot",
width: "100%"
},
{
label: "管辖单位",
prop: "gxSsbmdm",
type: "slot",
disabled: true
},
{
label: "诉求单位",
prop: "sqSsbmdm",
type: "slot",
disabled: true
},
{
label: "责任单位",
prop: "zrSsbmdm",
type: "slot",
disabled: true
},
{
label: "所属警种",
prop: "zdrSsjz",
type: "select",
options: D_GS_BK_SSJZ,
disabled: true
},
{
label: "涉及警种",
prop: "zdrSjjz",
type: "select",
options: D_GS_BK_SSJZ,
multiple: true,
disabled: true
},
{ label: "管控民警姓名", prop: "gkMjXm", type: "input", disabled: true },
{ label: "管控民警警号", prop: "gkMjJh", type: "input", disabled: true },
{
label: "管控原因",
prop: "zdrLkyy",
type: "textarea",
width: "100%",
disabled: true
},
{ label: "", prop: "status", type: "slot", width: "100%" },
{
label: "处置状态",
prop: "zdrCzzt",
type: "select",
options: D_GS_ZDR_CZZT,
disabled: true
},
{
label: "入库开始时间",
prop: "zdrRkkssj",
type: "datetime",
disabled: true
},
{
label: "入库结束时间",
prop: "zdrRkjssj",
type: "datetime",
disabled: true
},
// { label: "人员标签大类", prop: "bqdl", type: "select", options: [] },
// { label: "人员标签细类", prop: "bqxl", type: "select", options: [] },
{ label: "", prop: "bqInfo", type: "slot", width: "100%" },
{
label: "标签列表",
prop: "bqList",
type: "slot",
width: "80%",
disabled: true
}
]);
const listQuery = ref({}); //表单
const deptList = ref([]); //部门列表
const chooseShow = ref(false); //选择弹窗
const tableDate = reactive({
bqList: [], //表格数据
keyCount: 0,
rykeyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
tableHeight: 225,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 90, //操作栏宽度
tableColumn: [
{ label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" },
{ label: "标签种类", prop: "bqZl", showSolt: true },
{ label: "标签类型", prop: "bqLx", showSolt: true },
{ label: "标签类别", prop: "bqLb", showSolt: true }
]
});
const chooseType = ref("01"); //选择弹窗类型
const chooseTitle = ref(""); //选择弹窗
const loading = ref(false);
const elform = ref();
const title = ref("");
const rules = reactive({
xsbt: [{ required: true, message: "请输入线索标题", trigger: "blur" }]
});
const editpeo = ref();
onMounted(() => {
getdepartmentList();
});
// 初始化数据
const init = (type, row) => {
dialogForm.value = true;
title.value = type == "add" ? "新增" : type == "info" ? "详情" : "编辑";
if (row) getDataById(row.id);
};
// 根据id查询详情
const getDataById = (id) => {
qcckGet({}, "/mosty-gsxt/tbGsxtZdry/selectVoById/" + id).then((res) => {
listQuery.value = res;
listQuery.value.zdrSjjz = listQuery.value.zdrSjjz.split(",");
tableDate.bqList = res.bqList;
});
};
// 获取部门列表
const getdepartmentList = () => {
selectUserDeptPage().then((res) => {
deptList.value = res?.records.map((item) => ({
label: item.deptName,
value: item.deptId
}));
});
};
// 提交
const submit = () => {
elform.value.submit((data) => {
data.zdrSjjz = data.zdrSjjz.join(",");
let url =
title.value == "新增"
? "/mosty-gsxt/tbGsxtZdry/save"
: "/mosty-gsxt/tbGsxtZdry/update";
let params = { ...data };
qcckPost(params, url)
.then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("onSearch");
close();
})
.catch(() => {});
});
};
// 打开弹窗
const openDialog = (type) => {
chooseShow.value = true;
chooseType.value = type;
chooseTitle.value = "请选择标签";
nextTick(() => {
tagDialog.value.setValues(listQuery.value.bqList);
});
};
const handleTagSelect = (selectedTags) => {
console.log("已选标签:", selectedTags);
tableDate.bqList = selectedTags.map((item) => ({
bqDm: item.bqDm || "",
bqId: item.bqId || "",
bqLb: item.bqLb || "",
bqLx: item.bqLx || "",
bqMc: item.bqMc || "",
bqZl: item.bqZl || ""
}));
listQuery.value.bqList = tableDate.bqList;
// 每个标签包含: bqDm, bqId, bqLb, bqLx, bqMc, bqZl 属性
};
// 接收父组件传入的数据并回显
const setFormData = (data) => {
tableDate.bqList = data.bqList ?? [];
listQuery.value = {
...data // 假设 data 包含所有需要的字段
};
};
// 关闭
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
// 删除
const delDictItem = (bqId) => {
tableDate.bqList = tableDate.bqList.filter((item) => item.bqId !== bqId);
listQuery.value.bqList = tableDate.bqList;
};
// 2. 暴露获取数据的方法
const getFormData = () => {
// 可以在这里添加验证逻辑
return {
formData: listQuery.value
};
};
defineExpose({ init, setFormData });
</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: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
</style>

View File

@ -0,0 +1,197 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">流线索</span>
<div>
<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">
<template #gapdive>
<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">
<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>
</template>
</FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<MyTable
:tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn"
:tableHeight="pageForm.tableHeight"
:key="pageForm.keyCount"
: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>
</MyTable>
</div>
</div>
</template>
<script setup>
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";
const emit = defineEmits(["change"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
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" }],
});
const formData = ref([
{ 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"},
]);
const fjdz = ref()
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const pageForm = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false,
haveControls:false
},
controlsWidth: 220,
tableColumn: [
{ label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb",showSolt:true },
{ label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bqList",showSolt:true }
]
});
onMounted(()=>{
tabHeightFn()
})
// 初始化数据
const init = (list) => {
fjdz.value = []
tabHeightFn()
dialogForm.value = true;
pageForm.tableData = list.map((it) => {
return {
xm: it.ryXm,
xb: it.ryXb,
sfzh: it.rySfzh,
hjdz: it.xzdXz,
hjdpcs: it.hjdPcsmc,
hjdpcsdm: it.hjdPcsdm,
bqList: it.bqList || []
};
});
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(','):'';
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;
});
});
};
// 关闭
const close = () => {
fjdz.value = []
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
// 表格高度计算
const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720;
window.onresize = function () {
tabHeightFn();
};
};
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: 99%;
height: 225px;
margin-top: 10px;
overflow: hidden;
}
::v-deep .avatar-uploader{
display: flex;
align-items: center;
}
::v-deep .el-upload-list{
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon{
top: 3px;
}
</style>

View File

@ -2,26 +2,57 @@
<div> <div>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="重点人管理"> <PageTitle title="重点人管理">
<el-button type="primary" size="small" v-for="it in btns" :key="it"> <el-popover
{{ it }}</el-button placement="bottom"
:visible="visible"
:width="400"
trigger="click"
> >
<el-button type="primary" size="small" @click="addEdit('add', '')"> <template #reference>
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon> <el-button
<span style="vertical-align: middle">新增</span> type="primary"
@click="(visible = !visible), (visiblefp = false)"
size="small"
>布控申请
</el-button> </el-button>
<el-button type="danger" size="small" @click="addEdit('add', '')"> </template>
<el-icon style="vertical-align: middle"><Dete /></el-icon> <div class="flex just-center">
<span style="vertical-align: middle">批量删除</span> <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> </el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox"> <div ref="searchBox">
<Search <Search :searchArr="searchConfiger" @submit="onSearch" />
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
/>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="tabBox"> <div class="tabBox">
@ -61,11 +92,11 @@
</div> </div>
<div class="flex"> <div class="flex">
<el-button <el-button
:key="index"
type="primary" type="primary"
size="small" size="small"
v-for="(item, index) in row.bqList" v-for="(item, index) in row.bqList"
> >{{ item.bqMc }}</el-button
{{ item.bqMc }}</el-button
> >
</div> </div>
</template> </template>
@ -111,9 +142,6 @@
<el-link size="small" type="success" @click="addEdit('edit', row)" <el-link size="small" type="success" @click="addEdit('edit', row)"
>编辑</el-link >编辑</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 size="small" type="danger" @click="deleteRow(row)"
>删除</el-link >删除</el-link
> >
@ -130,55 +158,91 @@
></Pages> ></Pages>
</div> </div>
<!-- 详情 --> <!-- 详情 -->
<addForm ref="addFormDiloag" /> <AddForm
<DetailForm ref="detailDiloag" /> ref="addFormDiloag"
</div> v-if="show"
</template> :dic="{
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import addForm from "./components/addForm.vue";
import DetailForm from "./components/infoForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import AddForm from "./components/addForm.vue";
const { proxy } = getCurrentInstance();
const {
D_GS_BK_SSJZ,
D_GS_ZDR_RYJB, D_GS_ZDR_RYJB,
D_BZ_XB, D_BZ_XB,
D_BZ_MZ, D_BZ_MZ,
D_BZ_XZQHDM, D_BZ_XZQHDM,
D_GS_ZDR_BK_ZT, D_GS_ZDR_BK_ZT,
D_GS_ZDR_CZZT 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" />
<!-- 转线索 -->
<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 { ElMessage } from "element-plus";
import ChooseUser from "@/components/MyComponents/ChooseUser/index.vue";
import ZxsForm from "./components/zxsForm.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 AddForm from "./components/addForm.vue";
import { qcckGet,qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance,nextTick } from "vue";
const { proxy } = getCurrentInstance();
const {
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
} = proxy.$dict( } = proxy.$dict(
"D_GS_BK_SSJZ",
"D_GS_ZDR_RYJB", "D_GS_ZDR_RYJB",
"D_BZ_XB", "D_BZ_XB",
"D_BZ_MZ", "D_BZ_MZ",
"D_BZ_XZQHDM", "D_BZ_XZQHDM",
"D_GS_ZDR_BK_ZT", "D_GS_ZDR_BK_ZT",
"D_GS_ZDR_CZZT" "D_GS_ZDR_CZZT",
); //获取字典数据 "D_GS_BQ_ZL",
const detailDiloag = ref(); "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'
);
const obj = ref({
fpmc: ""
});
const showzxs = ref(false);
const zxsDilof = ref();
const show = ref(false);
const addFormDiloag = ref(); const addFormDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const btns = reactive([ const chooseUserVisible = ref(false); //审批流程
"一键布控", const visible = ref(false);
"维护群体", const visiblefp = ref(false);
"矛盾化解",
"转指令",
"转线索",
"转督导",
"转合成",
"移交管控",
"批量导入",
"导出"
]);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "姓名", label: "姓名",
@ -198,122 +262,17 @@ const searchConfiger = ref([
placeholder: "请输入户籍地", placeholder: "请输入户籍地",
showType: "input" showType: "input"
}, },
{
label: "户籍地派出所",
prop: "hjdPcsdm",
placeholder: "请输入户籍地派出所",
showType: "input"
},
{
label: "现居地",
prop: "xzdXz",
placeholder: "请输入现居地",
showType: "input"
},
{
label: "现居地派出所",
prop: "xzdPcsmc",
placeholder: "请输入现居地派出所",
showType: "input"
},
{
label: "入库开始时间",
prop: "startTime",
placeholder: "请选择入库开始时间",
showType: "date"
},
{
label: "入库结束时间",
prop: "endTime",
placeholder: "请输入入库结束时间",
showType: "date"
},
{ {
label: "人员级别", label: "人员级别",
prop: "zdrRyjb", prop: "zdrRyjb",
placeholder: "请输入人员级别", placeholder: "请输入人员级别",
showType: "select", showType: "select",
options: D_GS_ZDR_RYJB options: D_GS_ZDR_RYJB
},
{
label: "所属警种",
prop: "zdrSsjz",
placeholder: "请选择所属警种",
showType: "select",
options: D_GS_BK_SSJZ
},
{
label: "管辖单位",
prop: "gxSsbmmc",
placeholder: "请选择管辖单位",
showType: "input"
},
{
label: "涉及警种",
prop: "zdrSjjz",
placeholder: "请选择涉及警种",
showType: "select",
options: D_GS_BK_SSJZ,
multiple: true
},
{
label: "管辖民警姓名",
prop: "gkMjXm",
placeholder: "请输入管辖民警姓名",
showType: "input"
},
{
label: "管辖民警警号",
prop: "gkMjJh",
placeholder: "请输入管辖民警警号",
showType: "input"
},
{
label: "管辖民警联系方式",
prop: "gkMjLxfs",
placeholder: "请输入管辖民警联系方式",
showType: "input"
},
{
label: "管辖原因",
prop: "zdrLkyy",
placeholder: "请输入管辖原因",
showType: "input"
},
{
label: "被管控人联系方式",
prop: "ryLxdh",
placeholder: "请输入被管控人联系方式",
showType: "input"
},
{
label: "责任单位",
prop: "zrSsbmmc",
placeholder: "请选择责任单位",
showType: "input"
},
{
label: "人员标签大类",
prop: "bqDl",
placeholder: "请选择人员标签大类",
showType: "select"
},
{
label: "人员标签细类",
prop: "bqXl",
placeholder: "请选择人员标签细类",
showType: "select"
} }
]); ]);
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{
img: "",
jbxx: "",
wkrs: "1/5"
}
],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -342,12 +301,6 @@ onMounted(() => {
tabHeightFn(); tabHeightFn();
}); });
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList();
};
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...val }; queryFrom.value = { ...val };
@ -365,11 +318,10 @@ const changeSize = (val) => {
}; };
// 获取列表 // 获取列表
const getList = (val) => { const getList = () => {
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
let url = "/mosty-gsxt/tbGsxtZdry/selectPage"; qcckGet(data, "/mosty-gsxt/tbGsxtZdry/selectPage")
qcckGet(data, url)
.then((res) => { .then((res) => {
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;
@ -382,12 +334,12 @@ const getList = (val) => {
//新增编辑 //新增编辑
const addEdit = (type, row) => { const addEdit = (type, row) => {
show.value = true;
setTimeout(() => {
addFormDiloag.value.init(type, row); addFormDiloag.value.init(type, row);
}, 400);
}; };
// 详情
const infoList = (type, row) => {
detailDiloag.value.init(type, row);
};
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = pageData.tableHeight =
@ -396,12 +348,72 @@ const tabHeightFn = () => {
tabHeightFn(); tabHeightFn();
}; };
}; };
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/tbGsxtZdry/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/tbGsxtZdry/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/tbGsxtZdry/addSfyj").then(() => {
ElMessage.success("移交管控成功");
getList();
}).catch(() => {
ElMessage.error("移交管控失败");
});
})
};
const handleZxs = () => {
if (ids.value.length === 0) return ElMessage.error("请先选择需要转线索的重点群体");
showzxs.value = true;
nextTick(() => {
zxsDilof.value.init(choosList.value);
});
};
</script> </script>
<style> <style>
.el-loading-mask { .el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important; background: rgba(0, 0, 0, 0.5) !important;
} }
.rowClass { .rowClass {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -148,9 +148,11 @@ const pageData = reactive({
{ label: "是否转重点人员", prop: "sfZzdry", showSolt: true } { label: "是否转重点人员", prop: "sfZzdry", showSolt: true }
] ]
}); });
const roleList = reactive(JSON.parse(localStorage.getItem('roleList')) || []) const roleList = ref([])
onMounted(() => { onMounted(() => {
let qx = JSON.parse(localStorage.getItem('roleList')) || [];
roleList.value = qx.map(item => item.roleCode);
getList(); getList();
tabHeightFn(); tabHeightFn();
}); });

View File

@ -3,13 +3,11 @@
<div class="head_box"> <div class="head_box">
<span class="title">人力情报信息采集流转编辑</span> <span class="title">人力情报信息采集流转编辑</span>
<div> <div>
<el-button @click="submit">保存</el-button>
<el-button @click="close">暂存</el-button>
<el-button @click="close">关闭</el-button> <el-button @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules"> <FormMessage disabled v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #gapdive> <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> <el-divider content-position="left">基础信息</el-divider>
@ -23,11 +21,11 @@
<template #scfj> <template #scfj>
<div style="width: 100%;padding-left: 50px;"> <div style="width: 100%;padding-left: 50px;">
<div>上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span> </div> <div>上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span> </div>
<div><MOSTY.Upload :showBtn="true" :limit="10" v-model="listQuery.tps" /> </div> <div><MOSTY.Upload :showBtn="true" disabled :limit="10" v-model="fjdz" /> </div>
</div> </div>
</template> </template>
</FormMessage> </FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> <el-button type="primary" size="small" @click="showPeo = true,peoTitle = '新增人员'">添加人员</el-button></el-divider> <el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<MyTable <MyTable
:tableData="pageForm.tableData" :tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn" :tableColumn="pageForm.tableColumn"
@ -35,18 +33,23 @@
:key="pageForm.keyCount" :key="pageForm.keyCount"
:tableConfiger="pageForm.tableConfiger" :tableConfiger="pageForm.tableConfiger"
:controlsWidth="pageForm.controlsWidth" :controlsWidth="pageForm.controlsWidth"
@chooseData="chooseData"
> >
<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 #controls="{ row }"> <template #controls="{ row,index }">
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link > <el-link size="small" type="success" @click="addEdit('detail', row,index)">详情</el-link>
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
</div> </div>
<!-- 人员 --> <!-- 人员 -->
<AddPeo v-model="showPeo" :dic="props.dic" :title="peoTitle"></AddPeo> <AddPeo ref="showAdd" :dic="props.dic" ></AddPeo>
</div> </div>
</template> </template>
@ -55,36 +58,40 @@ import * as MOSTY from "@/components/MyComponents/index";
import AddPeo from './addPeo.vue' import AddPeo from './addPeo.vue'
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet } 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(["updateDate"]); const emit = defineEmits(["change"]);
const props = defineProps({ const props = defineProps({
dic: Object dic: Object
}); });
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗 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" }],
});
const formData = ref([ const formData = ref([
{ label: "", prop: "gapdive", type: "slot",width:'100%' }, { prop: "gapdive", type: "slot",width:'100%' },
{ label: "线索编号", prop: "xsbh", type: "input",}, { label: "线索名称", prop: "xsMc", type: "input" },
{ label: "线索名称", prop: "xsmc", type: "input" }, { label: "线索类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
{ label: "线索类型", prop: "xslx", type: "select", options:props.dic.D_GS_XS_LX }, { label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "情报来源", prop: "qbly", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime"}, { label: "指向开始时间", prop: "zxkssj", type: "datetime"},
{ label: "指向结束时间", prop: "zxjssj", type: "datetime"}, { label: "指向结束时间", prop: "zxjssj", type: "datetime"},
{ label: "指向地点", prop: "zxdz", type: "input"}, { label: "指向地点", prop: "zxdz", type: "input"},
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT}, { label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
{ prop: "gapline", type: "slot",width:'100%' }, { prop: "gapline", type: "slot",width:'100%' },
{ prop: "scfj", type: "slot",width:'100%'}, { prop: "scfj", type: "slot",width:'100%'},
{ label: "线索内容", prop: "xsnr", type: "textarea",width:'100%'}, { label: "线索内容", prop: "xsNr", type: "textarea",width:'100%'},
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX }, { label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
{ label: "群体名称", prop: "qtmc", type: "input"}, { label: "群体名称", prop: "qtmc", type: "input"},
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"}, { label: "涉及人数", prop: "sjrs", type: "inputNumber"},
{ label: "线索报送单位", prop: "fjWb", type: "department"}, { label: "线索报送单位", prop: "ssbmdm", type: "department"},
]); ]);
const listQuery = ref({tps:[]}); //表单 const fjdz = ref()
const listQuery = ref({}); //表单
const loading = ref(false); const loading = ref(false);
const elform = ref(); const elform = ref();
const title = ref("");
const pageForm = reactive({ const pageForm = reactive({
tableData: [], tableData: [],
keyCount: 0, keyCount: 0,
@ -96,53 +103,46 @@ const pageForm = reactive({
controlsWidth: 220, controlsWidth: 220,
tableColumn: [ tableColumn: [
{ label: "姓名", prop: "xm" }, { label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb" }, { label: "性别", prop: "xb",showSolt:true },
{ label: "身份证号", prop: "sfzh" }, { label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjd" }, { label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" }, { label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bq" } { label: "标签", prop: "bqList",showSolt:true }
] ]
}); });
const showPeo = ref(false) const showAdd = ref()
const peoTitle = ref('')
onMounted(()=>{ onMounted(()=>{
tabHeightFn() tabHeightFn()
}) })
// 初始化数据 // 初始化数据
const init = (type, row) => { const init = (type, row) => {
listQuery.value = {tps :[]}; fjdz.value = []
tabHeightFn() tabHeightFn()
dialogForm.value = true; dialogForm.value = true;
// 初始化表单数据,并根据详情页设置禁用状态 // 初始化表单数据,并根据详情页设置禁用状态
// if (row) getDataById(row.id); if (row) getDataById(row.id);
}; };
// 根据id查询详情 // 根据id查询详情
const getDataById = (id) => { const getDataById = (id) => {
// qcckGet({}, "/mosty-gsxt/tbGsxtRqfjNr/" + id).then((res) => { qcckGet({id}, "/mosty-gsxt/qbcj/selectByid").then((res) => {
// listQuery.value = res; listQuery.value = res;
// }); pageForm.tableData = res.ryList || [];
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let params = { ...data };
qcckPost(params, '/mosty-gsxt/tbGsxtRqfjNr/save').then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("onSearch");
close();
})
.catch(() => {});
}); });
}; };
// 打开弹窗
const addEdit = (type,row,index) =>{
showAdd.value.init(type,row,index)
}
// 关闭 // 关闭
const close = () => { const close = () => {
fjdz.value = []
listQuery.value = {};
dialogForm.value = false; dialogForm.value = false;
loading.value = false; loading.value = false;
elform.value.reset()
listQuery.value = {tps :[]};
}; };
// 表格高度计算 // 表格高度计算

View File

@ -1,10 +1,18 @@
<template> <template>
<el-dialog v-model="modelValue" :title="props.title" @close="close" :close-on-click-modal="false"> <el-dialog v-model="showDialog" :destroy-on-close="true" title="人员详情" @close="close" :close-on-click-modal="false">
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules"></FormMessage> <FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
<template #bqList>
<div class="marks pointer" >
<span style="color: rgb(175 178 184);padding-left: 10px;" v-if="!listQuery.bqList || listQuery.bqList.length == 0 ">请选择标签</span>
<span v-else >
<el-tag type="success" v-for="(it,idx) in listQuery.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</span>
</div>
</template>
</FormMessage>
<template #footer> <template #footer>
<div class="flex just-center"> <div class="flex just-center">
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -14,34 +22,28 @@
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
const props = defineProps({ const props = defineProps({
modelValue:{
type:Boolean,
default:false
},
dic:{ dic:{
type:Object, type:Object,
default:{} default:{}
}, },
title:{
type:String,
default:'新增人员'
}
}) })
const roleIds = ref([])
const elform = ref() const elform = ref()
const emit = defineEmits('update:modelValue') const showDialog = ref(false)
const emit = defineEmits(['change'])
const listQuery = ref({}) const listQuery = ref({})
const formData = ref([ const formData = ref([
{ label: "姓名", prop: "xm", type: "input" }, { label: "姓名", prop: "xm", type: "input" ,width:'48%'},
{ label: "性别", prop: "xb", type: "select",options:props.dic.D_BZ_XB }, { label: "性别", prop: "xb", type: "select",options:props.dic.D_BZ_XB ,width:'48%'},
{ label: "身份证号", prop: "sfzh", type: "input" }, { label: "身份证号", prop: "sfzh", type: "input" ,width:'48%'},
{ label: "户籍地", prop: "hjd", type: "input" }, { label: "户籍地", prop: "hjdz", type: "input",width:'48%' },
{ label: "户籍地派出所", prop: "hjdpcs", type: "input" }, { label: "户籍地派出所", prop: "hjdpcsdm", type: "department" ,width:'48%'},
{ label: "标签", prop: "bq", type: "input" }, { label: "标签", prop: "bqList", type: "slot",width:'100%' },
{ label: "是否挑头人", prop: "sfdtr", type: "select",options:props.dic.D_BZ_SF }, { label: "是否挑头人", prop: "sfttr", type: "select",options:props.dic.D_BZ_SF ,width:'48%'},
{ label: "是否响应人", prop: "sfxyr", type: "select" ,options:props.dic.D_BZ_SF }, { label: "是否响应人", prop: "sfxyr", type: "select" ,options:props.dic.D_BZ_SF,width:'48%' },
{ label: "所属群体", prop: "ssqt", type: "input" }, { label: "所属群体", prop: "ssqt", type: "input" ,width:'48%'},
{ label: "微信号", prop: "wxh", type: "input" }, { label: "微信号", prop: "wx", type: "input" ,width:'48%'},
{ label: "QQ", prop: "qqh", type: "input" }, { label: "QQ", prop: "qq", type: "input" ,width:'48%'},
]) ])
const rules = reactive({ const rules = reactive({
xm: [{ required: true, message: "请输入姓名", trigger: "blur" }], xm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
@ -49,21 +51,28 @@ const rules = reactive({
sfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }], sfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
hjd: [{ required: true, message: "请输入户籍地", trigger: "blur" }], hjd: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
}) })
const title = ref('')
const submitForm = () =>{ const init = (type,row,index) =>{
elform.value.submit(()=>{ title.value = type == 'add' ? '新增' :'编辑';
showDialog.value = true;
}) if(row) listQuery.value = {...row};
} }
const close = () =>{ const close = () =>{
elform.value.reset(); elform.value.reset();
emit('update:modelValue',false) showDialog.value = false;
} }
defineExpose({init})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-form-item--default {
width: 48% !important; .marks{
width: 100%;
width: 100%;
min-height: 32px;
border: 1px solid #e9e9e9;
border-radius: 4px;
} }
</style> </style>

View File

@ -6,10 +6,6 @@
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon> <el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">导出</span> <span style="vertical-align: middle">导出</span>
</el-button> </el-button>
<el-button type="danger" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><Dete /></el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
@ -27,9 +23,18 @@
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> @chooseData="chooseData">
<template #xlLx="{row}">
<DictTag :tag="false" :value="row.xlLx" :options="D_GS_XS_LX" />
</template>
<template #qbLy="{row}">
<DictTag :tag="false" :value="row.qbLy" :options="D_GS_XS_LY" />
</template>
<template #czzt="{row}">
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
</template>
<template #shzt="{row}"> <template #shzt="{row}">
<span>采纳将这条信息推送到情报管理模块</span> <!-- 采纳将这条信息推送到情报管理,退回 -->
<span>退回</span> <DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" @clickTag="clickTag(row.shzt)" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
@ -62,7 +67,7 @@
<el-button size="small" type="primary" @click.stop="handleSumbit(row)">确定</el-button> <el-button size="small" type="primary" @click.stop="handleSumbit(row)">确定</el-button>
</div> </div>
</el-popover> </el-popover>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link> <el-link size="small" type="danger" @click="delDictItem(row.id)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@ -76,48 +81,45 @@
></Pages> ></Pages>
</div> </div>
<!-- 新增 --> <!-- 新增 -->
<AddForm ref="detailDiloag" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" /> <AddForm ref="detailDiloag" @change="change" v-if="isShow" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" />
</div> </div>
</template> </template>
<script setup> <script setup>
import * as MOSTY from "@/components/MyComponents/index";
import PageTitle from "@/components/aboutTable/PageTitle.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 Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import AddForm from "./components/addForm.vue"; import AddForm from "./components/addForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { fa } from "element-plus/es/locale.mjs";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const {D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据 const {D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const chooseRow = ref({}) const chooseRow = ref({})
const rules = reactive({
bhyy:false,
shzt: false,
})
const isShow = ref(false)
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "线索名称", prop: 'clueTitle', placeholder: "请输入线索名称", showType: "input" }, { label: "线索名称", prop: 'xsMc', placeholder: "请输入线索名称", showType: "input" },
{ label: "语义关键字", prop: 'semanticKeywords', placeholder: "请输入语义关键字", showType: "input" }, { label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" },
{ label: "线索类型", prop: 'clueType', placeholder: "请选择线索类型", showType: "select" }, { label: "线索类型", prop: 'xlLx', placeholder: "请选择线索类型", showType: "select" },
{ label: "线索来源", prop: 'clueSource', placeholder: "请选择线索来源", showType: "select" }, { label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select" },
{ label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" }, { label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" },
{ label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select" }, { label: "开始时间", prop: 'zxkssj', placeholder: "请选择开始时间", showType: "date" },
{ label: "开始时间", prop: 'startTime', placeholder: "请选择开始时间", showType: "date" }, { label: "结束时间", prop: 'zxjssj', placeholder: "请选择结束时间", showType: "date" },
{ label: "结束时间", prop: 'endTime', placeholder: "请选择结束时间", showType: "date" }, { label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" },
{ label: "指向地点", prop: 'targetLocation', placeholder: "请输入指向地点", showType: "input" },
]); ]);
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{
clueNo: "XS20240101001",
clueTitle: "可疑人员活动线索",
clueType: "人员线索",
clueSource: "群众举报",
startTime: "2024-01-01 08:00:00",
endTime: "2024-01-01 18:00:00",
targetLocation: "某市某区某街道",
clueContent: "发现多名可疑人员在该区域频繁出入,疑似从事非法活动。",
attachment: "report.pdf"
},],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -131,17 +133,18 @@ const pageData = reactive({
}, },
controlsWidth: 150, controlsWidth: 150,
tableColumn: [ tableColumn: [
{ label: "上报人姓名", prop: "clueNo" }, { label: "上报人姓名", prop: "xssbr" },
{ label: "上报人电话", prop: "clueNo" }, { label: "上报人电话", prop: "xssbrdh" },
{ label: "线索编号", prop: "clueNo" }, { label: "线索编号", prop: "xsBh" },
{ label: "线索名称", prop: "clueTitle" }, { label: "线索名称", prop: "xsMc" },
{ label: "线索类型", prop: "clueType" }, { label: "线索类型", prop: "xlLx",showSolt:true },
{ label: "线索来源", prop: "clueSource" }, { label: "线索来源", prop: "qbLy",showSolt:true },
{ label: "开始时间", prop: "startTime" }, { label: "开始时间", prop: "zxkssj" },
{ label: "结束时间", prop: "endTime" }, { label: "结束时间", prop: "zxjssj" },
{ label: "指向地点", prop: "targetLocation" }, { label: "指向地点", prop: "zxdz" },
{ label: "线索内容", prop: "clueContent", width: 200 }, { label: "线索内容", prop: "xsNr"},
{ label: "附件", prop: "attachment", showSolt: true }, { label: "处置状态", prop: "czzt",showSolt: true},
{ label: "附件", prop: "fjdz", showSolt: true },
{ label: "审核状态", prop: "shzt", showSolt: true }, { label: "审核状态", prop: "shzt", showSolt: true },
] ]
}); });
@ -153,6 +156,7 @@ onMounted(() => {
tabHeightFn(); tabHeightFn();
}); });
const handleSh = (val) =>{ const handleSh = (val) =>{
chooseRow.value = {id:val.id,shzt:'01'} chooseRow.value = {id:val.id,shzt:'01'}
val.visible = !val.visible; val.visible = !val.visible;
@ -190,22 +194,31 @@ const changeSize = (val) =>{
} }
// 获取列表 // 获取列表
const getList = (val) =>{ const getList = () =>{
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value,cjLx:'1' };
// let url = '/mosty-lzcj/tbDwMbkf/queryList'; qcckGet(data,'/mosty-gsxt/qbcj/selectPage').then(res=>{
// qcckPost(data,url).then(res=>{ pageData.tableData = res.records || [];
// pageData.tableData = res.records || []; pageData.total = res.total;
// pageData.total = res.total; pageData.tableConfiger.loading = false;
// pageData.tableConfiger.loading = false; }).catch(()=>{ pageData.tableConfiger.loading = false; })
// }).catch(()=>{ pageData.tableConfiger.loading = false; }) }
// 删除
const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckPost({id},'/mosty-gsxt/qbcj/delete').then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
} }
// 详情 // 详情
const addEdit = (type, row) => { const addEdit = (type, row) => {
nextTick(()=>{ isShow.value = true;
setTimeout(()=>{
detailDiloag.value.init(type, row); detailDiloag.value.init(type, row);
}) },500)
}; };
// 表格高度计算 // 表格高度计算
@ -217,6 +230,19 @@ const tabHeightFn = () => {
}; };
</script> </script>
<style lang="scss" scoped>
.label-pop{
position: relative;
&::before{
position: absolute;
content: '*';
top: 0;
left: -7px;
color: red;
}
}
</style>
<style> <style>
.el-loading-mask { .el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important; background: rgba(0, 0, 0, 0.5) !important;

View File

@ -0,0 +1,184 @@
<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"></FormMessage>
</div>
</div>
</template>
<script setup>
import { IdCard } from "@/utils/validate.js";
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, } from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const validateIdentity = () => {
return (rule, value, callback) => {
if (!value) {
return callback(new Error("身份证号不能为空"));
} else if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(value)) {
callback(new Error("输入的身份证长度或格式错误"));
}
//身份证城市
var aCity = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外"
};
if (!aCity[parseInt(value?.substr(0, 2))]) callback(new Error("身份证地区非法"));
// 出生日期验证
var sBirthday = (
value.substr(6, 4) +
"-" +
Number(value.substr(10, 2)) +
"-" +
Number(value.substr(12, 2))
).replace(/-/g, "-"),
d = new Date(sBirthday);
let yyyy = d.getFullYear();
let mm = d.getMonth() + 1;
let dd = d.getDate();
if (sBirthday !== yyyy + "-" + mm + "-" + dd) {
listQuery.value.ryCsrq = "";
callback(new Error("身份证上的出生日期非法"));
} else {
let month = mm < 10 ? "0" + mm : mm;
listQuery.value.ryCsrq = yyyy + "-" + month + "-" + dd;
}
// 身份证号码校验
var sum = 0,
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
codes = "10X98765432";
for (var i = 0; i < value.length - 1; i++) {
sum += value[i] * weights[i];
}
var last = codes[sum % 11]; //计算出来的最后一位身份证号码
if (value[value.length - 1] !== last) {
listQuery.value.ryXb = "";
callback(new Error("输入的身份证号非法"));
} else {
if (value.length === 18) {
listQuery.value.ryCsrq = IdCard(value, 1);
listQuery.value.ryXb =
parseInt(value.substr(16, 1)) % 2 === 1 ? "1" : "2";
}
}
callback();
};
};
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const formData = ref([
{ label: "管辖部门", prop: "gxbmDm", type: "department" },
{ label: "姓名", prop: "ryXm", type: "input" },
{ label: "联系电话", prop: "ryLxdh", type: "input" },
{ label: "身份证号", prop: "rySfzh", type: "input" },
{ label: "出生日期", prop: "ryCsrq", type: "date" },
{ label: "性别", prop: "ryXb", type: "select", options: props.dic.D_BZ_XB },
{ label: "民族", prop: "ryMz", type: "select", options: props.dic.D_BZ_MZ },
{ label: "学历", prop: "ryXl", type: "select", options: props.dic.D_BZ_WHCD },
{ label: "政治面貌", prop: "ryZzmm", type: "select", options: props.dic.D_BZ_ZZMM},
{ label: "所在单位", prop: "rySzdw", type: "input" },
{ label: "居住地地址", prop: "jzdDz", type: "textarea", width: "100%" },
{ label: "考核分数", prop: "khfs", type: "input" },
{ label: "奖惩类型", prop: "jclx", type: "select", options: props.dic.D_GS_RLQB_JCQK},
]);
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const title = ref("");
const rules = reactive({
gxbmDm: [{ required: true, message: "请选择管辖部门", trigger: "change" }],
ryXm: [{ required: true, message: "请输入人员姓名", trigger: "blur" }],
rySfzh: [
{ required: true, message: "请输入人员身份证号", trigger: ["blur", "change"]},
{ trigger: ["blur", "change"], validator: validateIdentity() }
],
...rule.phoneRule({ require: true, validator: true }, "ryLxdh") // 是否必填 是否进行校验 可以传第二个参数
});
// 初始化数据
const init = (type, row) => {
dialogForm.value = true;
title.value = type == "add" ? "新增" : "编辑";
if (row) getDataById(row.id);
};
// 根据id查询详情
const getDataById = (id) => {
qcckGet({id}, "/mosty-gsxt/tbJlqk/selectByid").then((res) => {
listQuery.value = res;
});
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let url = title.value == "新增" ? "/mosty-gsxt/tbJlqk/add" : "/mosty-gsxt/tbJlqk/update";
let params = { ...data };
loading.value = true;
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {loading.value = false;});
});
};
// 关闭
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
</style>

View File

@ -0,0 +1,170 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="社会信息员工工作考核">
<el-button type="primary" @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"
>
<template #ryXb="{ row }">
<DictTag :tag="false" :value="row.ryXb" :options="D_BZ_XB" />
</template>
<template #ryXl="{ row }">
<DictTag :tag="false" :value="row.ryXl" :options="D_BZ_WHCD" />
</template>
<template #ryMz="{ row }">
<DictTag :tag="false" :value="row.ryMz" :options="D_BZ_MZ" />
</template>
<template #jclx="{ row }">
<DictTag :tag="false" :value="row.jclx" :options="D_GS_RLQB_JCQK" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link >
<el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
/>
</div>
<!-- 详情 -->
<DetailForm v-if="show" @updateDate="getList" ref="detailDiloag" :dic="{ D_BZ_WHCD, D_BZ_MZ, D_BZ_XB, D_BZ_ZZMM,D_GS_RLQB_JCQK }"
/>
</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 DetailForm from "./components/addForm.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const { D_GS_RLQB_JCQK,D_BZ_WHCD, D_BZ_MZ, D_BZ_XB, D_BZ_ZZMM } = proxy.$dict("D_GS_RLQB_JCQK","D_BZ_WHCD","D_BZ_MZ","D_BZ_XB","D_BZ_ZZMM"); //获取字典数据
const detailDiloag = ref();
const searchBox = ref(); //搜索框
const show = ref(false);
const searchConfiger = ref([
{ label: "姓名", prop: "ryXm", placeholder: "请输入姓名", showType: "input" },
{ label: "身份证号", prop: "rySfzh", placeholder: "请输入身份证号", showType: "input"}
]);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 200,
tableColumn: [
{ label: "姓名", prop: "ryXm" },
{ label: "性别", prop: "ryXb",showSolt: true },
{ label: "民族", prop: "ryMz",showSolt: true },
{ label: "学历", prop: "ryXl",showSolt: true },
{ label: "身份证", prop: "rySfzh"},
{ label: "所在单位", prop: "rySzdw"},
{ label: "考核分数", prop: "khfs" },
{ label: "奖惩类型", prop: "jclx",showSolt: true },
]
});
const queryFrom = ref({});
onMounted(() => {
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
getList();
};
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 };
qcckGet(data, "/mosty-gsxt/tbJlqk/selectPage").then((res) => {
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 删除
const deleteRow = (id) => {
proxy.$confirm("确定要删除", "警告", { type: "warning" }).then(() => {
qcckPost({id}, "/mosty-gsxt/tbJlqk/delete").then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
});
})
};
// 详情
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.value.init(type, row);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -3,22 +3,15 @@
<!-- 左侧树形菜单 --> <!-- 左侧树形菜单 -->
<div class="left-menu"> <div class="left-menu">
<!-- 这个部分用的是组件-后期替换 --> <!-- 这个部分用的是组件-后期替换 -->
<el-tree <MOSTY.DepartmentTree width="310px" @change="init" placeholder="管理部门" clearable filterable :isBmId="true" v-model="listQuery.ssbmdm" />
:data="treeData"
:props="defaultProps"
@node-click="handleNodeClick"
default-expand-all
/>
</div> </div>
<!-- 右侧内容区 --> <!-- 右侧内容区 -->
<div class="right-content"> <div class="right-content">
<!-- 顶部筛选 --> <!-- 顶部筛选 -->
<div class="filter-section"> <div class="filter-section">
<el-radio-group v-model="radio"> <el-radio-group v-model="radio" @change="changeRadio">
<el-radio :label="it.value" v-for="it in timeList" :key="it.value">{{ <el-radio v-for="(it,idx) in timeList" :key="idx" :label="it.num" >{{ it.label }}</el-radio>
it.label
}}</el-radio>
</el-radio-group> </el-radio-group>
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@ -30,23 +23,19 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@change="handleDateChange" @change="handleDateChange"
/> />
<el-button type="primary" @click="handleExport">查询</el-button> <el-button type="primary" @click="init">查询</el-button>
<el-button type="primary" @click="handleExport">重置</el-button> <el-button type="primary" @click="handleRest">重置</el-button>
</div> </div>
<!-- 统计图表区域 --> <!-- 统计图表区域 -->
<div class="charts-container"> <div class="charts-container">
<div class="chart-item"> <div class="chart-item">
<div class="chart-title"> <div class="chart-title">
<span>报送情况</span> <span>线索类型</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<div class="chart"> <div class="chart">
<PieEcharts <PieEcharts echartsId="bsqkEpieChart" color="#333" :data="obj.xslxList"></PieEcharts>
echartsId="bsqkEpieChart"
color="#333"
:data="obj.bsqkList"
></PieEcharts>
</div> </div>
</div> </div>
<div class="chart-item"> <div class="chart-item">
@ -55,29 +44,19 @@
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<div class="chart"> <div class="chart">
<DbarEcharts <DbarEcharts echartsId="bar3DChart" :data="obj.cnList"></DbarEcharts>
echartsId="bar3DChart"
:data="obj.cnList"
></DbarEcharts>
</div> </div>
</div> </div>
<div class="chart-item"> <div class="chart-item">
<div class="chart-title"> <div class="chart-title">
<span>战果情况</span> <span>处置状态</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<ul class="chart mt8"> <ul class="chart mt8">
<li v-for="(it, idx) in obj.zgList" :key="idx" class="mb6"> <li v-for="(it, idx) in obj.czztList" :key="idx" class="mb6">
<div style="color: #333">{{ it.label }}</div> <div style="color: #333">{{ it.label }}</div>
<el-progress <el-progress :text-inside="true" :stroke-width="20" :percentage="50" status="exception" >
:text-inside="true" <span><span style="color: #e37233">{{ it.value }}</span> </span >
:stroke-width="20"
:percentage="50"
status="exception"
>
<span
><span style="color: #e37233">{{ it.value }}</span> </span
>
</el-progress> </el-progress>
</li> </li>
</ul> </ul>
@ -87,11 +66,7 @@
<span>奖惩情况</span> <span>奖惩情况</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<lineEcharts <lineEcharts color="#333" echartsId="areaChart" :data="obj.jcqkList"></lineEcharts>
color="#333"
echartsId="areaChart"
:data="obj.jcList"
></lineEcharts>
</div> </div>
</div> </div>
</div> </div>
@ -99,93 +74,111 @@
</template> </template>
<script setup> <script setup>
import { timeValidate, timeSlotChange } from "@/utils/tools.js";
import * as MOSTY from "@/components/MyComponents/index";
import lineEcharts from "@/views/home/echarts/lineEcharts.vue"; import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
import PieEcharts from "@/views/home/echarts/pieEcharts.vue"; import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue"; import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import * as echarts from "echarts"; const radio = ref(0);
const radio = ref("日");
const timeList = ref([ const timeList = ref([
{ label: "日", value: "0" }, { label: "日", num: 0 },
{ label: "月", value: "1" }, { label: "月", num: 1 },
{ label: "季", value: "2" }, { label: "季", num: 2 },
{ label: "年", value: "3" } { label: "年", num: 3 }
]); ]);
const dateRange = ref([timeValidate(),timeValidate()]);// 日期范围
const listQuery = ref({})
const obj = reactive({ const obj = reactive({
listQuery: {}, xslxList: [],
bsqkList: [ jcqkList: [],
{ label: "待上报", value: 18 }, czztList: [],
{ label: "已上报", value: 20 },
{ label: "已流转指令", value: 50 },
{ label: "已办结", value: 40 },
{ label: "已归档", value: 30 }
],
//
jcList: [
{ label: "表彰奖励", value: 10 },
{ label: "物质奖励", value: 20 },
{ label: "其他奖励", value: 50 },
{ label: "责任追究", value: 40 },
{ label: "通报批评", value: 40 },
{ label: "其他惩罚", value: 30 }
],
zgList: [
{ label: "已处置", value: 10 },
{ label: "转指令", value: 20 },
{ label: "转协同", value: 50 },
{ label: "转督办", value: 40 },
{ label: "转移交", value: 40 },
{ label: "警种变更", value: 40 }
],
cnList: { cnList: {
list: [ list: [],
{ label: "已采纳", val: 50 },
{ label: "未采纳", val: 40 },
{ label: "已合并", val: 10 },
{ label: "已流转", val: 30 },
{ label: "退回", val: 40 },
],
topColor:'#1bd6c2', topColor:'#1bd6c2',
colors: ["#28EEBF","#0DBAC5"], colors: ["#28EEBF","#0DBAC5"],
} }
}); });
// 树形菜单数据
const treeData = ref([ onMounted(() => {
{ init() //初始化数据
label: "林芝市公安局200", });
children: [
{ label: "工布江达县公安局100" }, const init = () => {
{ label: "工布江达城区派出所10" }, let data = {
{ label: "某某某派出所10" }, ssbmdm: listQuery.value.ssbmdm,
{ label: "某某某公安局100" } kssj: dateRange.value[0] + ' 00:00:00',
] jssj: dateRange.value[1] + ' 23:59:59',
cjLx: 1 // 1-临安吗
};
// 获取线索类型统计
qcckPost(data, '/mosty-gsxt/qbcj/getXscjTjByXslx').then(res => {
let arr = res || [];
obj.xslxList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
});
// 获取奖惩情况统计
qcckPost(data, '/mosty-gsxt/tbJlqk/getShygkhtj').then(res => {
let arr = res || [];
obj.jcqkList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
});
// 获取处置状态统计
qcckPost(data, '/mosty-gsxt/qbcj/getXscjTjByCzzt').then(res => {
let arr = res || [];
obj.czztList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
});
// 获取采纳情况统计
qcckPost(data, '/mosty-gsxt/qbcj/getXscjTjByShzt').then(res => {
let arr = res || [];
obj.cnList.list = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
});
} }
]);
const defaultProps = { const changeRadio = (val) =>{
children: "children", switch(val){
label: "label" case 0: //日
dateRange.value = [timeValidate(),timeValidate()]
break;
case 1: //月
dateRange.value = timeSlotChange('本月')
break;
case 2: //季度
dateRange.value = timeSlotChange('本季度')
break;
case 3: //年
dateRange.value = timeSlotChange('本年')
break;
}
}
const handleDateChange = (val) => {
radio.value = '';
if(val[0] == timeSlotChange('天')[0] && val[1] == timeSlotChange('天')[1]) radio.value = 0;
if(val[0] == timeSlotChange('本月')[0] && val[1] == timeSlotChange('本月')[1]) radio.value = 1;
if(val[0] == timeSlotChange('本季度')[0] && val[1] == timeSlotChange('本季度')[1]) radio.value = 2;
if(val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) radio.value = 3;
}; };
// 日期范围 // 重置
const dateRange = ref([]); const handleRest = () => {
radio.value = 0;
// 事件处理函数 dateRange.value = [timeValidate(),timeValidate()];
const handleNodeClick = (data) => { init();
console.log(data);
}; };
;
const handleDateChange = () => {
// 处理日期变化
};
const handleExport = () => {
// 处理导出
};
onMounted(() => {});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -194,7 +187,7 @@ onMounted(() => {});
height: 100%; height: 100%;
.left-menu { .left-menu {
width: 280px; width: 350px;
padding: 20px; padding: 20px;
margin-top: 20px; margin-top: 20px;
border-radius: 4px; border-radius: 4px;

View File

@ -4,7 +4,6 @@
<!-- 头部筛选 --> <!-- 头部筛选 -->
<div class="topSearch"> <div class="topSearch">
<el-form v-model="listQuery"> <el-form v-model="listQuery">
<!-- <MOSTY.Department clearable width="400px" v-model="listQuery.ssbmdm" /> -->
<MOSTY.Select v-model="listQuery.sd" :dictEnum="search.xd" /> <MOSTY.Select v-model="listQuery.sd" :dictEnum="search.xd" />
<MOSTY.Select v-model="listQuery.zs" :dictEnum="search.zs" /> <MOSTY.Select v-model="listQuery.zs" :dictEnum="search.zs" />
<MOSTY.Select v-model="listQuery.qy" :dictEnum="search.qy" /> <MOSTY.Select v-model="listQuery.qy" :dictEnum="search.qy" />

View File

@ -1,13 +1,119 @@
<template> <template>
<div>22</div> <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 #glxsmc>
<el-input placeholder="请选择关联线索" @click="chooseVisiblexS = true" readonly v-model="listQuery.glxsmc"></el-input>
</template>
<template #chryList>
<el-input placeholder="请选择参会人员" @click="chooseVisible = true" readonly v-model="listQuery.rymc"></el-input>
</template>
</FormMessage>
</div>
</div>
<ChooseUser v-model="chooseVisible" :Single="false" @choosedUsers="handleUserSelected" :roleIds="roleIds" />
<Xslist v-model="chooseVisiblexS" @choosed="choosed" :roleIds="roleIdsxs"></Xslist>
</template> </template>
<script> <script setup>
export default { import ChooseUser from "@/components/MyComponents/ChooseUser/index.vue";
import Xslist from '@/components/MyComponents/ChooseXs/index.vue'
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, } from "vue";
const emit = defineEmits(["updateDate"]);
} const roleIds = ref([]); //角色id
const chooseVisible = ref(false);
const roleIdsxs = ref([]); //角色id
const chooseVisiblexS = ref(false);
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const rules = reactive({
hskssj: [{ required: true, message: "请选择会商开始时间", trigger: "change" }],
hsjssj: [{ required: true, message: "请选择会商结束时间", trigger: "change" }],
hsnr: [{ required: true, message: "请输入会商内容", trigger: "blur" }],
hsbt: [{ required: true, message: "请输入会商标题", trigger: "blur" }],
glxsmc: [{ required: true, message: "请选择关联线索", trigger: "change" }],
chryList: [{ required: true, message: "请选择参会人员", trigger: "change" }],
});
const formData = ref([
{ label: "会商开始时间", prop: "hskssj", type: "datetime" },
{ label: "会商结束时间", prop: "hsjssj", type: "datetime" },
{ label: "会商内容", prop: "hsnr", type: "textarea", width: "100%" },
{ label: "关联线索", prop: "glxsmc", type: "slot", },
{ label: "会商标题", prop: "hsbt", type: "input" },
{ label: "参会人员", prop: "chryList", type: "slot" ,width:'100%'},
]);
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({id}, "/mosty-gsxt/wshs/selectByid").then((res) => {
res.rymc = res.chryList ? res.chryList.map(v=>v.chryxm).join(","):'';
res.chryList = res.chryList ? res.chryList.map(item => item.chryid) : [];
roleIds.value = res.chryList;
roleIdsxs.value = res.glxsid ? [res.glxsid] : [];
listQuery.value = res;
});
};
const handleUserSelected = (userData) => {
roleIds.value = userData.map(item => item.id);
listQuery.value.chryList = userData.map(item => item.id)
listQuery.value.rymc = userData.map(item => item.userName).join("、");
};
const choosed = (data) => {
listQuery.value.glxsmc = data[0].xsMc;
listQuery.value.glxsid = data[0].id;
roleIdsxs.value = data.map(item => item.id);
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let url = title.value == "新增" ? "/mosty-gsxt/wshs/add" : "/mosty-gsxt/wshs/update";
let params = { ...data };
loading.value = true;
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {loading.value = false;});
});
};
// 关闭
const close = () => {
listQuery.value = {};
roleIds.value = [];
roleIdsxs.value = [];
dialogForm.value = false;
loading.value = false;
};
defineExpose({ init });
</script> </script>
<style> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
</style> </style>

View File

@ -1,55 +1,60 @@
<template> <template>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="网上会议室" /> <PageTitle title="网上会议室">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
<div ref="searchBox"> <div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" /> <Search :searchArr="searchConfiger" @submit="onSearch" />
</div> </div>
<!-- 表格 --> <!-- 表格 -->
<div class="tabBox"> <div class="tabBox">
<div class="flexcb"> <ul class="list noScollLine" v-loading="pageData.loading">
<div class="btns"> <li class="list-item" v-for="(item, index) in pageData.list" :key="`tableData${index}`">
<el-button type="primary">新增</el-button>
<el-button type="danger">删除</el-button>
</div>
<Search :searchArr="searchArrMeet" @submit="onSearch" :key="pageData.keyCount + 1" class="search" />
</div>
<div class="list noScollLine">
<div class="list-item" v-for="(item, index) in pageData.tableData" :key="`tableData${index}`" @onmouseover="">
<div class="top"> <div class="top">
<div class="title ellipsis">{{ item.title }}</div> <div class="title ellipsis">{{ item.hsbt }}</div>
<div class="info h20 ellipsis">会商内容{{ item.hynr }}</div> <div class="info h20 ellipsis">会商内容{{ item.hsnr }}</div>
<div class="info h20 ellipsis">关联线索{{ item.lxxs }}</div> <div class="info h20 ellipsis">关联线索{{ item.glxsmc }}</div>
<div class="info h20 ellipsis">涉及人员{{ item.sjry }}</div> <div class="info h20 ellipsis">涉及人员{{ item.sjry }}</div>
<div class="info h20 ellipsis">会商处置意见xxxxxxx线索</div> <div class="info h20 ellipsis">会商处置意见{{ item.czyj }}</div>
<div class="info h20 ellipsis">会议时间{{ item.hskssj }} - {{ item.hsjssj }}</div>
</div> </div>
<div class="mid"> <div class="mid">
<div class="left"> <div class="left">
<div class="title ellipsis">参会人员{{ item.chry }}</div> <div class="title ellipsis">参会人员{{ item.chry }}</div>
<div class="desc"> <div class="desc">
<div class="info ellipsis" v-for="(el, i) in item.cqcs" :key="i">{{ i + 1 }}.{{ el }}</div> <div class="info ellipsis" v-for="(el, i) in item.xsplList" :key="i">{{ i + 1 }}{{ el.plnr }}</div>
<!-- <div class="info ellipsis">2.应抓捕赵某王某XXXXXXXXX王某XXXXXXXXXXXXXXXX等人</div> -->
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<el-button type="primary" size="small">加入会议</el-button> <el-button type="primary" size="small" @click="joinMeeting(item)">加入会议</el-button>
<el-button type="primary" size="small">反馈情况</el-button> <el-button type="primary" size="small">反馈情况</el-button>
<el-button type="primary" size="small">处置下发</el-button> <el-button type="primary" size="small">处置下发</el-button>
</div> </div>
</div> </div>
<div class="bottom"> <div class="bottom">
<el-popover placement="top" :visible="item.visible" :width="400" trigger="click">
<template #reference>
<el-link type="primary"><el-icon><ChatDotSquare /></el-icon>评论</el-link> <el-link type="primary"><el-icon><ChatDotSquare /></el-icon>评论</el-link>
</template>
<MOSTY.Other filterable style="width: 100%;" v-model="comments" type="textarea" rows="3" clearable placeholder="发表评论"/>
<div class="mt10 flex just-center">
<el-button size="small" type="primary" @click.stop="handleSumbit(item)">发送</el-button>
</div>
</el-popover>
<el-link type="primary" ><el-icon><VideoPlay /></el-icon>会议回放</el-link> <el-link type="primary" ><el-icon><VideoPlay /></el-icon>会议回放</el-link>
<el-link type="primary"><el-icon><Edit /></el-icon>详情</el-link> <el-link type="primary" @click="addEdit('edit', item)"><el-icon><Edit /></el-icon>编辑</el-link>
<el-link type="danger"><el-icon><Delete /></el-icon>删除</el-link> <el-link type="danger" @click="delDictItem(item.id)"><el-icon><Delete /></el-icon>删除</el-link>
</div> </div>
</div> </li>
</div> <MOSTY.Empty :show="!pageData.loading && pageData.list.length <= 0"></MOSTY.Empty>
</ul>
<Pages <Pages
@changeNo="changeNo" @changeNo="changeNo"
@changeSize="changeSize" @changeSize="changeSize"
@ -61,10 +66,11 @@
></Pages> ></Pages>
</div> </div>
<!-- 详情 --> <!-- 详情 -->
<DetailForm ref="detailDiloag" /> <DetailForm ref="detailDiloag" @updateDate="getList" />
</template> </template>
<script setup> <script setup>
import * as MOSTY from "@/components/MyComponents/index";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
@ -78,134 +84,26 @@
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "会议主题", label: "会议主题",
prop: "businessNo", prop: "hsbt",
placeholder: "请输入会议主题", placeholder: "请输入会议主题",
showType: "input" showType: "input"
}, },
{ {
label: "关联线索", label: "会议时间",
prop: "goodsName", prop: "daterange",
placeholder: "请选择关联线索", showType: "datetimerange"
showType: "select"
}, },
{
label: "涉及人员",
prop: "businessNo",
placeholder: "请输入涉及人员",
showType: "input"
},
{
label: "会议内容",
prop: "businessNo",
placeholder: "请输入会议内容",
showType: "input"
}
]); ]);
const searchArrMeet = ref([ const comments = ref(''); // 评论内容
{
label: "",
prop: "title",
placeholder: "请输入关键字",
showType: "input"
}
]);
const queryFrom = ref({}); const queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
tableData: [ list: [],
{ loading: false,
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
},
{
title: "林芝市XX地区发生的重大案件处理",
hynr: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
lxxs: "XX王某XXXXXXXXXXXXX王某XXXXXXXXXXXXXXXXXXXXXXX",
sjry: "王某、赵某、.....",
chry: "王某、赵某、赵某赵某赵某.....",
cqcs: ["应抓捕XXXXXXXXXXcccccccccc", "应抓捕XXXXXXXXXXcccccccccc"]
}
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0, total: 0,
pageConfiger: { pageConfiger: {
pageSize: 20, pageSize: 20,
pageCurrent: 1 pageCurrent: 1
}, },
controlsWidth: 120
}); });
onMounted(() => { onMounted(() => {
@ -214,36 +112,75 @@
}); });
// 搜索 // 搜索
const onSearch = val => { const onSearch = (val) => {
queryFrom.value = { ...val }; queryFrom.value = { ...val };
if (val.daterange && val.daterange.length > 0) {
queryFrom.value.startTime = val.daterange[0];
queryFrom.value.endTime = val.daterange[1];
} else {
queryFrom.value.startTime = '';
queryFrom.value.endTime = '';
}
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList(); getList();
}; };
const changeNo = val => { const changeNo = (val) => {
pageData.pageConfiger.pageNum = val; pageData.pageConfiger.pageNum = val;
getList(); getList();
}; };
const changeSize = val => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList(); getList();
}; };
// 获取列表 // 获取列表
const getList = val => { const getList = () => {
// pageData.tableConfiger.loading = true; pageData.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList'; delete data.daterange; // 删除daterange字段
// qcckPost(data,url).then(res=>{ qcckGet(data,'/mosty-gsxt/wshs/selectPage').then(res=>{
// pageData.tableData = res.records || []; let arr = res.records || [];
// pageData.total = res.total; arr.forEach(item => {
// pageData.tableConfiger.loading = false; item.chry = item.chryList ? item.chryList.map(el => el.chryxm).join('、') : '';
// }).catch(()=>{ pageData.tableConfiger.loading = false; }) item.sjry = item.xsryList ? item.xsryList.map(el => el.xm).join('、') : '';
});
pageData.list = arr;
pageData.total = res.total;
pageData.loading = false;
}).catch(()=>{ pageData.loading = false; })
}; };
// 提交评论
const handleSumbit = (item) => {
if (!comments.value) return proxy.$message({ type: "warning", message: "评论内容不能为空" });
proxy.$message({ type: "success", message: "评论已发送" });
qcckPost({id:item.id,plnr:comments.value},'/mosty-gsxt/wshs/addWshyPl').then((res)=>{
getList();
item.visible = false; // 关闭评论弹窗
comments.value = ''; // 清空评论内容
})
};
// 加入会议
const joinMeeting = (item) => {
qcckPost({id:item.id},'/mosty-gsxt/wshs/addWshyRy').then((res)=>{
getList();
})
};
// 删除
const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckPost({id},'/mosty-gsxt/wshs/delete').then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
}
// 详情 // 详情
const addEdit = (type, row) => { const addEdit = (type, row) => {
// detailDiloag.value.init(type, row); detailDiloag.value.init(type, row);
}; };
// 表格高度计算 // 表格高度计算
@ -274,15 +211,14 @@
padding: 10px 20px; padding: 10px 20px;
} }
.list { .list {
height: calc(100% - 62px); height: calc(100% - 40px);
gap: 10px; gap: 10px;
margin: 0 15px; margin: 0 15px;
overflow: auto; overflow: auto;
.list-item { .list-item {
display: inline-block; display: inline-block;
border: 1px solid #ccc; border: 1px solid #ccc;
height: 254px; height: 270px;
width: 380px; width: 380px;
box-sizing: border-box; box-sizing: border-box;
border-radius: 5px; border-radius: 5px;
@ -324,6 +260,19 @@
padding: 10px 0; padding: 10px 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.left {
width: calc(100% - 80px);
.title {
font-size: 14px;
color: black;
margin-bottom: 5px;
}
.info {
font-size: 12px;
color: #a5a1a1;
line-height: 1.5;
}
}
.right { .right {
width: 80px; width: 80px;

View File

@ -158,7 +158,7 @@ const deleteRow = (index) =>{
const submit = () => { const submit = () => {
elform.value.submit((data) => { elform.value.submit((data) => {
let url = title.value == "新增" ? "/mosty-gsxt/qbcj/add" : "/mosty-gsxt/qbcj/update"; let url = title.value == "新增" ? "/mosty-gsxt/qbcj/add" : "/mosty-gsxt/qbcj/update";
let params = { ...data ,ryList:pageForm.tableData,cjLx:'01'}; let params = { ...data ,ryList:pageForm.tableData,cjLx:'0'};
params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(','):''; params.fjdz = fjdz.value.length > 0 ? fjdz.value.join(','):'';
loading.value = true; loading.value = true;
qcckPost(params, url).then((res) => { qcckPost(params, url).then((res) => {

View File

@ -39,6 +39,7 @@
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" /> <DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
</template> </template>
<template #shzt="{row}"> <template #shzt="{row}">
<!-- 采纳将这条信息推送到情报管理,退回 -->
<DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" @clickTag="clickTag(row.shzt)" /> <DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" @clickTag="clickTag(row.shzt)" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
@ -110,14 +111,12 @@ const isShow = ref(false)
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "线索名称", prop: 'xsMc', placeholder: "请输入线索名称", showType: "input" }, { label: "线索名称", prop: 'xsMc', placeholder: "请输入线索名称", showType: "input" },
{ label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" }, { label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" },
{ label: "线索类型", prop: 'xlLx', placeholder: "请选择线索类型", showType: "select" }, { label: "线索类型", prop: 'xlLx', placeholder: "请选择线索类型", showType: "select",options:D_GS_XS_LX },
{ label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select" }, { label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select",options:D_GS_XS_LY },
{ label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" },
{ label: "开始时间", prop: 'zxkssj', placeholder: "请选择开始时间", showType: "date" }, { label: "开始时间", prop: 'zxkssj', placeholder: "请选择开始时间", showType: "date" },
{ label: "结束时间", prop: 'zxjssj', placeholder: "请选择结束时间", showType: "date" }, { label: "结束时间", prop: 'zxjssj', placeholder: "请选择结束时间", showType: "date" },
{ label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" }, { label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" },
]); ]);
const elForm = ref()
const chooseRow = ref({}) const chooseRow = ref({})
const rules = reactive({ const rules = reactive({
bhyy:false, bhyy:false,
@ -171,7 +170,7 @@ const cancel = (row) =>{
const handleSumbit = (row) =>{ const handleSumbit = (row) =>{
rules.bhyy = !chooseRow.value.bhyy ? true :false; rules.bhyy = !chooseRow.value.bhyy ? true :false;
if(chooseRow.value.shzt == '01' && rules.bhyy) return false; if(chooseRow.value.shzt == '01' && rules.bhyy) return false;
let data = { ...chooseRow.value ,cjLx:'01'} let data = { ...chooseRow.value }
qcckPost(data,'/mosty-gsxt/qbcj/updateByXssh').then(res=>{ qcckPost(data,'/mosty-gsxt/qbcj/updateByXssh').then(res=>{
row.visible = false; row.visible = false;
proxy.$message({ type: "success", message: "审核成功" }); proxy.$message({ type: "success", message: "审核成功" });
@ -199,7 +198,7 @@ const changeSize = (val) =>{
// 获取列表 // 获取列表
const getList = () =>{ const getList = () =>{
pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value,cjLx:'0' };
qcckGet(data,'/mosty-gsxt/qbcj/selectPage').then(res=>{ qcckGet(data,'/mosty-gsxt/qbcj/selectPage').then(res=>{
pageData.tableData = res.records || []; pageData.tableData = res.records || [];
pageData.total = res.total; pageData.total = res.total;
@ -226,7 +225,7 @@ const addEdit = (type, row) => {
}; };
const clickTag = (val) =>{ const clickTag = (val) =>{
if(val == '01') router.push('/IntelligenceManagement'); if(val == '02') router.push('/IntelligenceManagement');
} }
// 表格高度计算 // 表格高度计算

View File

@ -8,12 +8,22 @@
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage :formList="formData" ref="elform" :rules="rules"></FormMessage> <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #glxsid>
<div class="box pointer ellipsis" @click="chooseVisible = true">
<span v-if="listQuery.glxs">{{ listQuery.glxs }}</span>
<span v-else style="color: #b8b8b8;">请选择关联线索</span>
</div> </div>
</template>
</FormMessage>
</div>
<!-- 选择线索 -->
<Xslist v-model="chooseVisible" @choosed="choosed" :roleIds="roleIds"></Xslist>
</div> </div>
</template> </template>
<script setup> <script setup>
import Xslist from '@/components/MyComponents/ChooseXs/index.vue'
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js"; import * as rule from "@/utils/rules.js";
@ -22,57 +32,74 @@ const emit = defineEmits(["updateDate"]);
const props = defineProps({ const props = defineProps({
dic: Object dic: Object
}); });
const chooseVisible = ref(false)
const roleIds = ref([])
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗 const dialogForm = ref(false); //弹窗
const formData = ref([ const formData = ref([
{ label: "指令标题", prop: "title", type: "input", }, { label: "指令标题", prop: "zlbt", type: "input", },
{ label: "是否生成指令号", prop: "generateNumber", type: "select", options: [] }, { label: "指令类型", prop: "zllx", type: "select", options: props.dic.D_GS_XS_ZLLX },
{ label: "指令类型", prop: "type", type: "select", options: [] }, { label: "指令等级", prop: "zldj", type: "select", options: props.dic.D_GS_ZDQT_FXDJ },
{ label: "指令等级", prop: "dj", type: "select", options: [] }, { label: "反馈结束时间", prop: "jssj", type: "datetime" },
{ label: "指令发起人", prop: "fqr", type: "input" }, { label: "联系人", prop: "zllxr", type: "input" },
{ label: "发起部门", prop: "dep", type: "input" }, { label: "联系电话", prop: "zllxdh", type: "input" },
{ label: "联系人", prop: "contact", type: "input" }, { label: "关联线索", prop: "glxsid", type: "slot" },
{ label: "联系电话", prop: "phone", type: "input" }, { label: "主送单位", prop: "zsdw", type: "department" },
{ label: "关联线索", prop: "relatedClues", type: "input" }, { label: "抄送单位", prop: "csdw", type: "department" },
{ label: "主送单位", prop: "mainUnit", type: "input" }, { label: "指令内容", prop: "zlnr", type: "textarea",width: '100%' },
{ label: "抄送单位", prop: "ccUnit", type: "input" }, { label: "附件", prop: "fjzd", type: "upload",width: '100%' },
{ label: "指令内容", prop: "nr", type: "textarea",width: '100%' },
{ label: "附件", prop: "tpdz", type: "upload",width: '100%' },
]); ]);
const listQuery = ref({ const listQuery = ref({}); //表单
sfbqdj: []
}); //表单
const loading = ref(false); const loading = ref(false);
const elform = ref(); const elform = ref();
const title = ref(""); const title = ref("");
const rules = reactive({ const rules = reactive({
bqmc: [{ required: true, message: "请输入标签名称", trigger: "blur" }] zlbt: [{ required: true, message: "请输入指令标题", trigger: "blur" }],
zllx: [{ required: true, message: "请选择指令类型", trigger: "change" }],
zldj: [{ required: true, message: "请选择指令等级", trigger: "change" }],
jssj: [{ required: true, message: "请选择反馈结束时间", trigger: "change" }],
zllxr: [{ required: true, message: "请输入联系人", trigger: "blur" }],
zllxdh: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
zsdw: [{ required: true, message: "请选择主送单位", trigger: "change" }],
csdw: [{ required: true, message: "请选择抄送单位", trigger: "change" }],
zlnr: [{ required: true, message: "请输入指令内容", trigger: "blur" }],
glxsid: [{ required: true, message: "请选择关联线索", trigger: "change" }],
}); });
const editpeo = ref();
onMounted(() => {});
// 初始化数据 // 初始化数据
const init = (type, row,) => { const init = (type, row,) => {
listQuery.value.fjzd = null
dialogForm.value = true; dialogForm.value = true;
title.value = type == 'add' ? "新增" : "编辑"; title.value = type == 'add' ? "新增" : "编辑";
if (row) getDataById(row.id); if (row) getDataById(row.id);
}; };
// 根据id查询详情 // 根据id查询详情
const getDataById = (id) => { const getDataById = (id) => {
// qcckGet({}, '/mosty-gsxt/tbGsxtBqgl/'+id).then((res) => { qcckGet({id}, '/mosty-gsxt/zlxx/selectByid').then((res) => {
// listQuery.value = res; res.fjzd = res.fjzd ? res.fjzd.split(','):[];
// }); listQuery.value = res;
});
}; };
// 选择标签
const choosed = (val) => {
listQuery.value.glxs = val[0].xsMc;
listQuery.value.glxsid = val[0].id;
roleIds.value = val.map(v=>v.id)
}
// 提交 // 提交
const submit = () => { const submit = () => {
elform.value.submit((data)=>{ elform.value.submit((data)=>{
// let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update'; let url = title.value == "新增" ? '/mosty-gsxt/zlxx/add':'/mosty-gsxt/zlxx/update';
// let params = { ...data } let params = { ...data }
// qcckPost(params, url).then((res) => { loading.value = true;
// proxy.$message({ type: "success", message: title.value + "成功" }); params.fjzd = params.fjzd ? params.fjzd.join(','):''
// emit("updateDate"); qcckPost(params, url).then((res) => {
// close(); loading.value = false;
// }).catch(() => {}); proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {loading.value = false;});
}); });
}; };
@ -88,4 +115,11 @@ defineExpose({ init });
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/css/layout.scss"; @import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss"; @import "~@/assets/css/element-plus.scss";
.box{
width: 100%;
height: 32px;
border-radius: 4px;
border: 1px solid #e9e9e9;
padding-left: 10px;
}
</style> </style>

View File

@ -6,14 +6,6 @@
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon> <el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span> <span style="vertical-align: middle">新增</span>
</el-button> </el-button>
<el-button type="danger" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><Dete /></el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
<el-button >
<el-icon style="vertical-align: middle"><Setting /></el-icon>
<span style="vertical-align: middle">批量处置</span>
</el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
@ -29,20 +21,17 @@
:key="pageData.keyCount" :key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger" :tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> >
<!-- 事故照片 -->
<template #accidentPhoto="{ row }"> <template #zldj="{row}">
<el-image <DictTag :tag="false" :value="row.zldj" :options="D_GS_ZDQT_FXDJ" />
style="width: 50px; height: 50px" </template>
:src="row.accidentPhoto" <template #czzt="{row}">
:preview-src-list="[row.accidentPhoto]"> <DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
</el-image>
</template> </template>
<!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link size="small" type="primary" @click="addEdit('detail', row)">查看</el-link>
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link> <el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link> <el-link size="small" type="danger" @click="deleteRow(row.id)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@ -56,7 +45,7 @@
></Pages> ></Pages>
</div> </div>
<!-- 详情 --> <!-- 详情 -->
<DetailForm ref="detailDiloag" /> <DetailForm ref="detailDiloag" @updateDate="getList" :dic="{D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ}" />
</div> </div>
</template> </template>
@ -71,28 +60,22 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const {D_GS_XS_SJLY,D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ,D_GS_XS_CZZT} = proxy.$dict('D_GS_XS_SJLY','D_GS_XS_ZLLX','D_GS_ZDQT_FXDJ','D_GS_XS_CZZT')
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "指令标题", prop: 'instructionTitle', placeholder: "请输入指令标题", showType: "input" }, { label: "指令标题", prop: 'zlbt', placeholder: "请输入指令标题", showType: "input" },
{ label: "督办对象", prop: 'supervisoryObject', placeholder: "请输入督办对象", showType: "input" }, { label: "指令类型", prop: 'zllx', placeholder: "请选择指令类型", showType: "select",options:D_GS_XS_ZLLX },
{ label: "指令类型", prop: 'instructionType', placeholder: "请选择指令类型", showType: "input" }, { label: "指令等级", prop: 'zldj', placeholder: "请选择指令等级", showType: "select" ,options:D_GS_ZDQT_FXDJ},
{ label: "指令等级", prop: 'instructionLevel', placeholder: "请选择指令等级", showType: "input" }, { label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select" ,options:D_GS_XS_CZZT},
{ label: "指令来源", prop: 'instructionSource', placeholder: "请输入指令来源", showType: "input" }, { label: "反馈截止时间", prop: 'jssj', placeholder: "请选择反馈截止时间", showType: "datetime" },
{ label: "处置状态", prop: 'processingStatus', placeholder: "请选择处置状态", showType: "input" },
{ label: "数据来源", prop: 'dataSource', placeholder: "请输入数据来源", showType: "input" },
{ label: "反馈截止时间", prop: 'feedbackDeadline', placeholder: "请选择反馈截止时间", showType: "input" },
{ label: "指令流向", prop: 'instructionFlow', placeholder: "请输入指令流向", showType: "input" },
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{id: 1, instructionFlow: '本级发起', instructionTitle: '关于XX的指令', urgencyLevel: '紧急', informationSource: '信息来源', workingStatus: '工作中', supervisoryObject: '督办对象', instructionLevel: '一级', feedbackPosition: '反馈位置', feedbackDeadline: '2024-01-20', receivedNumber: 5, unreceivedNumber: 2, processingStatus: '已处理', status: '已完成'},
],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
showSelectType: "checkBox", showSelectType: "null",
loading: false loading: false
}, },
total: 0, total: 0,
@ -102,19 +85,10 @@ const pageData = reactive({
}, },
controlsWidth: 180, controlsWidth: 180,
tableColumn: [ tableColumn: [
{ label: '指令流向', prop: 'instructionFlow' }, { label: '指令标题', prop: 'zlbt' },
{ label: '指令标题', prop: 'instructionTitle' }, { label: '指令等级', prop: 'zldj',showSolt:true },
{ label: '紧急程度', prop: 'urgencyLevel', width: 100 }, { label: '反馈截止时间', prop: 'jssj' },
{ label: '信息来源', prop: 'informationSource' }, { label: '处置状态', prop: 'czzt',showSolt:true },
{ label: '工作状态', prop: 'workingStatus', width: 100 },
{ label: '督办对象', prop: 'supervisoryObject' },
{ label: '指令等级', prop: 'instructionLevel', width: 100 },
{ label: '反馈位置', prop: 'feedbackPosition' },
{ label: '反馈截止时间', prop: 'feedbackDeadline', width: 120 },
{ label: '发送人数', prop: 'receivedNumber', width: 100 },
{ label: '未接收人数', prop: 'unreceivedNumber', width: 100 },
{ label: '处置状态', prop: 'processingStatus', width: 100 },
{ label: '状态', prop: 'status', width: 100 },
] ]
}); });
@ -123,12 +97,6 @@ onMounted(() => {
tabHeightFn(); tabHeightFn();
}); });
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索 // 搜索
const onSearch = (val) =>{ const onSearch = (val) =>{
queryFrom.value = {...val} queryFrom.value = {...val}
@ -147,14 +115,24 @@ const changeSize = (val) =>{
// 获取列表 // 获取列表
const getList = (val) =>{ const getList = (val) =>{
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList'; qcckGet(data,'/mosty-gsxt/zlxx/selectPage').then(res=>{
// qcckPost(data,url).then(res=>{ pageData.tableData = res.records || [];
// pageData.tableData = res.records || []; pageData.total = res.total;
// pageData.total = res.total; pageData.tableConfiger.loading = false;
// pageData.tableConfiger.loading = false; }).catch(()=>{ pageData.tableConfiger.loading = false; })
// }).catch(()=>{ pageData.tableConfiger.loading = false; }) }
const deleteRow = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckPost({id},'/mosty-gsxt/zlxx/delete').then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
} }
// 详情 // 详情

View File

@ -3,22 +3,15 @@
<!-- 左侧树形菜单 --> <!-- 左侧树形菜单 -->
<div class="left-menu"> <div class="left-menu">
<!-- 这个部分用的是组件-后期替换 --> <!-- 这个部分用的是组件-后期替换 -->
<el-tree <MOSTY.DepartmentTree width="310px" @change="init" placeholder="管理部门" clearable filterable :isBmId="true" v-model="listQuery.ssbmdm" />
:data="treeData"
:props="defaultProps"
@node-click="handleNodeClick"
default-expand-all
/>
</div> </div>
<!-- 右侧内容区 --> <!-- 右侧内容区 -->
<div class="right-content"> <div class="right-content">
<!-- 顶部筛选 --> <!-- 顶部筛选 -->
<div class="filter-section"> <div class="filter-section">
<el-radio-group v-model="radio"> <el-radio-group v-model="radio" @change="changeRadio">
<el-radio :label="it.value" v-for="it in timeList" :key="it.value">{{ <el-radio v-for="(it,idx) in timeList" :key="idx" :label="it.num" >{{ it.label }}</el-radio>
it.label
}}</el-radio>
</el-radio-group> </el-radio-group>
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@ -30,8 +23,8 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@change="handleDateChange" @change="handleDateChange"
/> />
<el-button type="primary" @click="handleExport">查询</el-button> <el-button type="primary" @click="init">查询</el-button>
<el-button type="primary" @click="handleExport">重置</el-button> <el-button type="primary" @click="handleRest">重置</el-button>
</div> </div>
<!-- 统计图表区域 --> <!-- 统计图表区域 -->
@ -42,42 +35,28 @@
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<div class="chart"> <div class="chart">
<PieEcharts <PieEcharts echartsId="pieChart" color="#333" :data="obj.cjList" />
echartsId="pieChart"
color="#333"
:data="obj.cjList"
></PieEcharts>
</div> </div>
</div> </div>
<div class="chart-item"> <div class="chart-item">
<div class="chart-title"> <div class="chart-title">
<span>指令统计</span> <span>线索来源统计</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<div class="chart"> <div class="chart">
<DbarEcharts <DbarEcharts echartsId="bar3DChart" :data="obj.xslyList" />
echartsId="bar3DChart"
:data="obj.zlList"
></DbarEcharts>
</div> </div>
</div> </div>
<div class="chart-item"> <div class="chart-item">
<div class="chart-title"> <div class="chart-title">
<span>线索类型统计</span> <span>线索专题统计</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<ul class="chart mt8"> <ul class="chart mt8">
<li v-for="(it, idx) in obj.jjList" :key="idx" class="mb6"> <li v-for="(it, idx) in obj.xxztList" :key="idx" class="mb6">
<div style="color: #333">{{ it.label }}</div> <div style="color: #333">{{ it.label }}</div>
<el-progress <el-progress :text-inside="true" :stroke-width="20" :percentage="50" status="exception">
:text-inside="true" <span><span style="color: #e37233">{{ it.value }}</span> </span>
:stroke-width="20"
:percentage="50"
status="exception"
>
<span
><span style="color: #e37233">{{ it.value }}</span> </span
>
</el-progress> </el-progress>
</li> </li>
</ul> </ul>
@ -87,11 +66,7 @@
<span>线索类型统计</span> <span>线索类型统计</span>
<el-button type="primary">导出统计表</el-button> <el-button type="primary">导出统计表</el-button>
</div> </div>
<lineEcharts <lineEcharts color="#333" echartsId="areaChart" :data="obj.xxlxList" />
color="#333"
echartsId="areaChart"
:data="obj.bkgzList"
></lineEcharts>
</div> </div>
</div> </div>
</div> </div>
@ -99,92 +74,109 @@
</template> </template>
<script setup> <script setup>
import { timeValidate, timeSlotChange } from "@/utils/tools.js";
import * as MOSTY from "@/components/MyComponents/index";
import lineEcharts from "@/views/home/echarts/lineEcharts.vue"; import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
import PieEcharts from "@/views/home/echarts/pieEcharts.vue"; import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue"; import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted } from "vue";
import * as echarts from "echarts";
const radio = ref("日"); const dateRange = ref([timeValidate(),timeValidate()]);// 日期范围
const radio = ref(0); //当天
const timeList = ref([ const timeList = ref([
{ label: "日", value: "0" }, { label: "日", num: 0 },
{ label: "月", value: "1" }, { label: "月", num: 1 },
{ label: "季", value: "2" }, { label: "季", num: 2 },
{ label: "年", value: "3" } { label: "年", num: 3 }
]); ]);
const listQuery = ref({})
const obj = reactive({ const obj = reactive({
listQuery: {}, cjList: [],// 线索采集统计
cjList: [ xxztList: [],// 线索专题统计
{ label: "采纳数", value: 18 }, xxlxList: [],//线索类型统计
{ label: "编刊数", value: 20 }, xslyList: {
{ label: "退回数", value: 50 }, list: [],//线索来源统计
{ label: "合并数", value: 40 },
{ label: "其他", value: 30 }
],
// 布控工作统计
bkgzList: [
{ label: "发起总数", value: 10 },
{ label: "审核总数", value: 20 },
{ label: "审批总数", value: 50 },
{ label: "处置总数", value: 40 },
{ label: "其他", value: 30 }
],
jjList: [
{ label: "涉稳", value: 10 },
{ label: "涉毒", value: 20 },
{ label: "行政", value: 50 },
{ label: "群体", value: 40 },
{ label: "灾害", value: 40 }
],
zlList: {
list: [
{ label: "下发数", val: 50 },
{ label: "未签收", val: 40 },
{ label: "已签收", val: 10 },
{ label: "超时签收", val: 30 },
{ label: "未反馈", val: 40 },
{ label: "已反馈", val: 40 }
],
topColor:'#1bd6c2', topColor:'#1bd6c2',
colors: ["#28EEBF","#0DBAC5"], colors: ["#28EEBF","#0DBAC5"],
} }
}); });
// 树形菜单数据 onMounted(() => {
const treeData = ref([ init() //初始化数据
{ });
label: "林芝市公安局200",
children: [
{ label: "工布江达县公安局100" }, const init = () =>{
{ label: "工布江达城区派出所10" }, let data = {
{ label: "某某某派出所10" }, ssbmdm:listQuery.value.ssbmdm,
{ label: "某某某公安局100" } kssj:dateRange.value[0]+' 00:00:00',
] jssj:dateRange.value[1]+' 23:59:59',
cjLx:0 // 0 民警后台录入
}
// 线索采集统计
qcckPost(data,'/mosty-gsxt/qbcj/getXscjTjByShzt').then(res=>{
let arr = res || [];
obj.cjList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
})
// 线索类型统计
qcckPost(data,'/mosty-gsxt/qbcj/getXscjTjByXslx').then(res=>{
let arr = res || [];
obj.xxlxList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
})
// 线索专题统计
qcckPost(data,'/mosty-gsxt/qbcj/getXscjTjBySszt').then(res=>{
let arr = res || [];
obj.xxztList = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
})
// 线索来源统计
qcckPost(data,'/mosty-gsxt/qbcj/getXscjTjByQbly').then(res=>{
let arr = res || [];
obj.xslyList.list = arr.map(v=>{
return { label:v.zdmc,value:v.count }
})
})
} }
]);
const defaultProps = { const changeRadio = (val) =>{
children: "children", switch(val){
label: "label" case 0: //日
dateRange.value = [timeValidate(),timeValidate()]
break;
case 1: //月
dateRange.value = timeSlotChange('本月')
break;
case 2: //季度
dateRange.value = timeSlotChange('本季度')
break;
case 3: //年
dateRange.value = timeSlotChange('本年')
break;
}
}
const handleDateChange = (val) => {
radio.value = '';
if(val[0] == timeSlotChange('天')[0] && val[1] == timeSlotChange('天')[1]) radio.value = 0;
if(val[0] == timeSlotChange('本月')[0] && val[1] == timeSlotChange('本月')[1]) radio.value = 1;
if(val[0] == timeSlotChange('本季度')[0] && val[1] == timeSlotChange('本季度')[1]) radio.value = 2;
if(val[0] == timeSlotChange('本年')[0] && val[1] == timeSlotChange('本年')[1]) radio.value = 3;
}; };
// 日期范围 // 重置
const dateRange = ref([]); const handleRest = () => {
radio.value = 0;
// 事件处理函数 dateRange.value = [timeValidate(),timeValidate()];
const handleNodeClick = (data) => { init();
console.log(data);
}; };
const handleDateChange = () => {
// 处理日期变化
};
const handleExport = () => {
// 处理导出
};
onMounted(() => {});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -193,7 +185,7 @@ onMounted(() => {});
height: 100%; height: 100%;
.left-menu { .left-menu {
width: 280px; width: 350px;
padding: 20px; padding: 20px;
margin-top: 20px; margin-top: 20px;
border-radius: 4px; border-radius: 4px;

View File

@ -3,13 +3,11 @@
<div class="head_box"> <div class="head_box">
<span class="title">人力情报信息采集流转详情</span> <span class="title">人力情报信息采集流转详情</span>
<div> <div>
<el-button @click="close">保存</el-button>
<el-button @click="close">暂存</el-button>
<el-button @click="close">关闭</el-button> <el-button @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules"> <FormMessage disabled v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #gapdive> <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> <el-divider content-position="left">基础信息</el-divider>
@ -21,10 +19,13 @@
</div> </div>
</template> </template>
<template #scfj> <template #scfj>
<div style="width: 100%;">上传附件: <el-button size="small" type="primary">上传附件</el-button> <span class="f12">可附电子表格Word文档图像音视频文件</span></div> <div style="width: 100%;padding-left: 50px;">
<div>上传附件:<span class="f12">可附电子表格Word文档图像音视频文件</span> </div>
<div><MOSTY.Upload :showBtn="true" disabled :limit="10" v-model="fjdz" /> </div>
</div>
</template> </template>
</FormMessage> </FormMessage>
<el-divider content-position="left"><span class="mr20">相关人员</span> <el-button type="primary" size="small" @click="showPeo = true,peoTitle = '新增人员'">添加人员</el-button></el-divider> <el-divider content-position="left"><span class="mr20">相关人员</span> </el-divider>
<MyTable <MyTable
:tableData="pageForm.tableData" :tableData="pageForm.tableData"
:tableColumn="pageForm.tableColumn" :tableColumn="pageForm.tableColumn"
@ -32,52 +33,62 @@
:key="pageForm.keyCount" :key="pageForm.keyCount"
:tableConfiger="pageForm.tableConfiger" :tableConfiger="pageForm.tableConfiger"
:controlsWidth="pageForm.controlsWidth" :controlsWidth="pageForm.controlsWidth"
@chooseData="chooseData"
> >
<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 #controls="{ row }"> <template #controls="{ row,index }">
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link > <el-link size="small" type="success" @click="addEdit('detail', row,index)">详情</el-link>
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
</div> </div>
<!-- 人员 --> <!-- 人员 -->
<AddPeo v-model="showPeo" :dic="props.dic" :title="peoTitle"></AddPeo> <AddPeo ref="showAdd" :dic="props.dic" ></AddPeo>
</div> </div>
</template> </template>
<script setup> <script setup>
import * as MOSTY from "@/components/MyComponents/index";
import AddPeo from './addPeo.vue' import AddPeo from './addPeo.vue'
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } 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(["updateDate"]); const emit = defineEmits(["change"]);
const props = defineProps({ const props = defineProps({
dic: Object dic: Object
}); });
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗 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" }],
});
const formData = ref([ const formData = ref([
{ label: "", prop: "gapdive", type: "slot",width:'100%' }, { prop: "gapdive", type: "slot",width:'100%' },
{ label: "线索编号", prop: "xsbh", type: "input",}, { label: "线索名称", prop: "xsMc", type: "input" },
{ label: "线索名称", prop: "xsmc", type: "input" }, { label: "线索类型", prop: "xlLx", type: "select", options:props.dic.D_GS_XS_LX },
{ label: "线索类型", prop: "xslx", type: "select", options:props.dic.D_GS_XS_LX }, { label: "情报来源", prop: "qbLy", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "情报来源", prop: "qbly", type: "select", options:props.dic.D_GS_XS_LY},
{ label: "指向开始时间", prop: "zxkssj", type: "datetime"}, { label: "指向开始时间", prop: "zxkssj", type: "datetime"},
{ label: "指向结束时间", prop: "zxjssj", type: "datetime"}, { label: "指向结束时间", prop: "zxjssj", type: "datetime"},
{ label: "指向地点", prop: "zxdz", type: "input"}, { label: "指向地点", prop: "zxdz", type: "input"},
{ label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT}, { label: "所属专题", prop: "sszt", type: "select",options:props.dic.D_BZ_SSZT},
{ prop: "gapline", type: "slot",width:'100%' }, { prop: "gapline", type: "slot",width:'100%' },
{ prop: "scfj", type: "slot",width:'100%'}, { prop: "scfj", type: "slot",width:'100%'},
{ label: "线索内容", prop: "xsnr", type: "textarea",width:'100%'}, { label: "线索内容", prop: "xsNr", type: "textarea",width:'100%'},
{ label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX }, { label: "群体类型", prop: "qtlx", type: "select",options:props.dic.D_GS_XS_QTLX },
{ label: "群体名称", prop: "qtmc", type: "input"}, { label: "群体名称", prop: "qtmc", type: "input"},
{ label: "涉及人数", prop: "sjrs", type: "inputNumber"}, { label: "涉及人数", prop: "sjrs", type: "inputNumber"},
{ label: "线索报送单位", prop: "fjWb", type: "department"}, { label: "线索报送单位", prop: "ssbmdm", type: "department"},
]); ]);
const fjdz = ref()
const listQuery = ref({}); //表单 const listQuery = ref({}); //表单
const loading = ref(false); const loading = ref(false);
const elform = ref(); const elform = ref();
@ -93,55 +104,50 @@ const pageForm = reactive({
controlsWidth: 220, controlsWidth: 220,
tableColumn: [ tableColumn: [
{ label: "姓名", prop: "xm" }, { label: "姓名", prop: "xm" },
{ label: "性别", prop: "xb" }, { label: "性别", prop: "xb",showSolt:true },
{ label: "身份证号", prop: "sfzh" }, { label: "身份证号", prop: "sfzh" },
{ label: "户籍地", prop: "hjd" }, { label: "户籍地", prop: "hjdz" },
{ label: "户籍地派出所", prop: "hjdpcs" }, { label: "户籍地派出所", prop: "hjdpcs" },
{ label: "标签", prop: "bq" } { label: "标签", prop: "bqList",showSolt:true }
] ]
}); });
const showPeo = ref(false) const showAdd = ref()
const peoTitle = ref('')
onMounted(()=>{ onMounted(()=>{
tabHeightFn() tabHeightFn()
}) })
// 初始化数据 // 初始化数据
const init = (type, row) => { const init = (type, row) => {
fjdz.value = []
tabHeightFn() tabHeightFn()
dialogForm.value = true; dialogForm.value = true;
title.value = type == "add" ? "新增" : type == "info" ? "详情" : "编辑"; title.value = type == "add" ? "新增" : type == "info" ? "详情" : "编辑";
// 初始化表单数据,并根据详情页设置禁用状态 // 初始化表单数据,并根据详情页设置禁用状态
// if (row) getDataById(row.id); if (row) getDataById(row.id);
}; };
// 根据id查询详情 // 根据id查询详情
const getDataById = (id) => { const getDataById = (id) => {
// qcckGet({}, "/mosty-gsxt/tbGsxtRqfjNr/" + id).then((res) => { qcckGet({id}, "/mosty-gsxt/qbcj/selectByid").then((res) => {
// listQuery.value = res; listQuery.value = res;
// }); pageForm.tableData = res.ryList || [];
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let url = title.value == "新增" ? "/mosty-gsxt/tbGsxtRqfjNr/save" : "/mosty-gsxt/tbGsxtRqfjNr/update";
let params = { ...data };
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value + "成功" });
// emit("onSearch");
// close();
// })
// .catch(() => {});
}); });
}; };
// 打开弹窗
const addEdit = (type,row,index) =>{
showAdd.value.init(type,row,index)
}
// 关闭 // 关闭
const close = () => { const close = () => {
fjdz.value = []
listQuery.value = {}; listQuery.value = {};
dialogForm.value = false; dialogForm.value = false;
loading.value = false; loading.value = false;
}; };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageForm.tableHeight = window.innerHeight - 720; pageForm.tableHeight = window.innerHeight - 720;
@ -166,4 +172,18 @@ defineExpose({ init });
margin-top: 10px; margin-top: 10px;
overflow: hidden; overflow: hidden;
} }
::v-deep .avatar-uploader{
display: flex;
align-items: center;
}
::v-deep .el-upload-list{
margin-left: 20px;
display: flex;
align-items: center;
}
::v-deep .el-upload-list__item-name .el-icon{
top: 3px;
}
</style> </style>

View File

@ -1,10 +1,18 @@
<template> <template>
<el-dialog v-model="modelValue" :title="props.title" @close="close" :close-on-click-modal="false"> <el-dialog v-model="showDialog" :destroy-on-close="true" title="人员详情" @close="close" :close-on-click-modal="false">
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules"></FormMessage> <FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
<template #bqList>
<div class="marks pointer" >
<span style="color: rgb(175 178 184);padding-left: 10px;" v-if="!listQuery.bqList || listQuery.bqList.length == 0 ">请选择标签</span>
<span v-else >
<el-tag type="success" v-for="(it,idx) in listQuery.bqList" :key="idx">{{ it.bqMc }}</el-tag >
</span>
</div>
</template>
</FormMessage>
<template #footer> <template #footer>
<div class="flex just-center"> <div class="flex just-center">
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -14,34 +22,28 @@
import FormMessage from "@/components/aboutTable/FormMessage.vue"; import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
const props = defineProps({ const props = defineProps({
modelValue:{
type:Boolean,
default:false
},
dic:{ dic:{
type:Object, type:Object,
default:{} default:{}
}, },
title:{
type:String,
default:'新增人员'
}
}) })
const roleIds = ref([])
const elform = ref() const elform = ref()
const emit = defineEmits('update:modelValue') const showDialog = ref(false)
const emit = defineEmits(['change'])
const listQuery = ref({}) const listQuery = ref({})
const formData = ref([ const formData = ref([
{ label: "姓名", prop: "xm", type: "input" }, { label: "姓名", prop: "xm", type: "input" ,width:'48%'},
{ label: "性别", prop: "xb", type: "select",options:props.dic.D_BZ_XB }, { label: "性别", prop: "xb", type: "select",options:props.dic.D_BZ_XB ,width:'48%'},
{ label: "身份证号", prop: "sfzh", type: "input" }, { label: "身份证号", prop: "sfzh", type: "input" ,width:'48%'},
{ label: "户籍地", prop: "hjd", type: "input" }, { label: "户籍地", prop: "hjdz", type: "input",width:'48%' },
{ label: "户籍地派出所", prop: "hjdpcs", type: "input" }, { label: "户籍地派出所", prop: "hjdpcsdm", type: "department" ,width:'48%'},
{ label: "标签", prop: "bq", type: "input" }, { label: "标签", prop: "bqList", type: "slot",width:'100%' },
{ label: "是否挑头人", prop: "sfdtr", type: "select",options:props.dic.D_BZ_SF }, { label: "是否挑头人", prop: "sfttr", type: "select",options:props.dic.D_BZ_SF ,width:'48%'},
{ label: "是否响应人", prop: "sfxyr", type: "select" ,options:props.dic.D_BZ_SF }, { label: "是否响应人", prop: "sfxyr", type: "select" ,options:props.dic.D_BZ_SF,width:'48%' },
{ label: "所属群体", prop: "ssqt", type: "input" }, { label: "所属群体", prop: "ssqt", type: "input" ,width:'48%'},
{ label: "微信号", prop: "wxh", type: "input" }, { label: "微信号", prop: "wx", type: "input" ,width:'48%'},
{ label: "QQ", prop: "qqh", type: "input" }, { label: "QQ", prop: "qq", type: "input" ,width:'48%'},
]) ])
const rules = reactive({ const rules = reactive({
xm: [{ required: true, message: "请输入姓名", trigger: "blur" }], xm: [{ required: true, message: "请输入姓名", trigger: "blur" }],
@ -49,21 +51,28 @@ const rules = reactive({
sfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }], sfzh: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
hjd: [{ required: true, message: "请输入户籍地", trigger: "blur" }], hjd: [{ required: true, message: "请输入户籍地", trigger: "blur" }],
}) })
const title = ref('')
const submitForm = () =>{ const init = (type,row,index) =>{
elform.value.submit(()=>{ title.value = type == 'add' ? '新增' :'编辑';
showDialog.value = true;
}) if(row) listQuery.value = {...row};
} }
const close = () =>{ const close = () =>{
elform.value.reset(); elform.value.reset();
emit('update:modelValue',false) showDialog.value = false;
} }
defineExpose({init})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-form-item--default {
width: 48% !important; .marks{
width: 100%;
width: 100%;
min-height: 32px;
border: 1px solid #e9e9e9;
border-radius: 4px;
} }
</style> </style>

View File

@ -0,0 +1,92 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="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"></FormMessage>
</div>
</div>
</template>
<script setup>
import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import { useRouter } from "vue-router";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const router = useRouter();
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const rules = reactive({
zlbt: [{ required: true, message: "请输入指令标题", trigger: "blur" }],
zllx: [{ required: true, message: "请选择指令类型", trigger: "change" }],
zldj: [{ required: true, message: "请选择指令等级", trigger: "change" }],
jssj: [{ required: true, message: "请选择反馈结束时间", trigger: "change" }],
zllxr: [{ required: true, message: "请输入联系人", trigger: "blur" }],
zllxdh: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
zsdw: [{ required: true, message: "请选择主送单位", trigger: "change" }],
csdw: [{ required: true, message: "请选择抄送单位", trigger: "change" }],
zlnr: [{ required: true, message: "请输入指令内容", trigger: "blur" }],
});
const formData = ref([
{ label: "线索名称", prop: "glxs", type: "input", disabled:true },
{ label: "指令标题", prop: "zlbt", type: "input", },
{ label: "指令类型", prop: "zllx", type: "select", options: props.dic.D_GS_XS_ZLLX },
{ label: "指令等级", prop: "zldj", type: "select", options: props.dic.D_GS_ZDQT_FXDJ },
{ label: "反馈结束时间", prop: "jssj", type: "datetime" },
{ label: "联系人", prop: "zllxr", type: "input" },
{ label: "联系电话", prop: "zllxdh", type: "input" },
{ label: "主送单位", prop: "zsdw", type: "department" },
{ label: "抄送单位", prop: "csdw", type: "department" },
{ label: "指令内容", prop: "zlnr", type: "textarea",width: '100%' },
{ label: "附件", prop: "fjzd", type: "upload",width: '100%' },
]);
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
onMounted(() => {});
// 初始化数据
const init = (row) => {
listQuery.value.fjzd = null
dialogForm.value = true;
listQuery.value.glxs = row.xsMc;
listQuery.value.glxsid = row.id;
};
;
// 提交
const submit = () => {
elform.value.submit((data)=>{
let params = { ...data }
params.fjzd = params.fjzd ? params.fjzd.join(','):''
loading.value = true;
qcckPost(params, '/mosty-gsxt/zlxx/add').then((res) => {
loading.value = false;
proxy.$message({ type: "success", message: "转发成功" });
router.push('/InstructionInformation')
}).catch(() => {loading.value = false;});
});
};
// 关闭
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
</style>

View File

@ -2,14 +2,10 @@
<div> <div>
<div class="titleBox"> <div class="titleBox">
<PageTitle title="人力情报信息采集流转"> <PageTitle title="人力情报信息采集流转">
<el-button type="primary" @click="addEdit('add', '')"> <el-button type="primary" @click="addEdit">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon> <el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">导出</span> <span style="vertical-align: middle">导出</span>
</el-button> </el-button>
<el-button type="danger" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><Dete /></el-icon>
<span style="vertical-align: middle">批量删除</span>
</el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
@ -27,14 +23,23 @@
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> @chooseData="chooseData">
<template #shzt="{row}"> <template #xlLx="{row}">
<span>采纳将这条信息推送到</span> <DictTag :tag="false" :value="row.xlLx" :options="D_GS_XS_LX" />
<span>退回</span>
</template> </template>
<template #qbLy="{row}">
<DictTag :tag="false" :value="row.qbLy" :options="D_GS_XS_LY" />
</template>
<template #czzt="{row}">
<DictTag :tag="false" :value="row.czzt" :options="D_GS_XS_CZZT" />
</template>
<template #shzt="{row}">
<DictTag :tag="false" :value="row.shzt" :options="D_BZ_XSSHZT" />
</template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link size="small" type="primary" @click="handleZL(row)">转为指令</el-link>
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link> <el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@ -48,7 +53,8 @@
></Pages> ></Pages>
</div> </div>
<!-- 新增 --> <!-- 新增 -->
<AddForm ref="detailDiloag" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" /> <AddForm ref="detailDiloag" v-if="isShow" :dic="{D_BZ_SF,D_BZ_XB,D_GS_XS_LY,D_BZ_SSZT,D_GS_XS_LX ,D_GS_XS_QTLX}" />
<ZlForm ref="zlDialog" v-if="isShow" :dic="{D_GS_XS_ZLLX,D_GS_ZDQT_FXDJ}"></ZlForm>
</div> </div>
</template> </template>
@ -58,61 +64,28 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import AddForm from "./components/addForm.vue"; import AddForm from "./components/addForm.vue";
import ZlForm from "./components/zlForm.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 { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const {D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB} = proxy.$dict("D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB"); //获取字典数据 const {D_GS_ZDQT_FXDJ,D_GS_XS_ZLLX,D_GS_XS_CZZT,D_GS_XS_LY, D_BZ_SSZT,D_BZ_SF,D_GS_XS_LX ,D_GS_XS_QTLX,D_BZ_XB,D_BZ_XSSHZT} = proxy.$dict("D_GS_ZDQT_FXDJ","D_GS_XS_ZLLX","D_GS_XS_CZZT","D_GS_XS_LY","D_BZ_SSZT","D_BZ_SF","D_GS_XS_LX","D_GS_XS_QTLX","D_BZ_XB","D_BZ_XSSHZT"); //获取字典数据
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const isShow = ref(false)
const zlDialog = ref(false)
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "线索名称", prop: 'clueTitle', placeholder: "请输入线索名称", showType: "input" }, { label: "线索名称", prop: 'xsMc', placeholder: "请输入线索名称", showType: "input" },
{ label: "语义关键字", prop: 'semanticKeywords', placeholder: "请输入语义关键字", showType: "input" }, { label: "内容关键字", prop: 'xsNr', placeholder: "请输入语义关键字", showType: "input" },
{ label: "线索类型", prop: 'clueType', placeholder: "请选择线索类型", showType: "select" }, { label: "线索类型", prop: 'xlLx', placeholder: "请选择线索类型", showType: "select" },
{ label: "线索来源", prop: 'clueSource', placeholder: "请选择线索来源", showType: "select" }, { label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select" },
{ label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" }, { label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" },
{ label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select" }, { label: "开始时间", prop: 'zxkssj', placeholder: "请选择开始时间", showType: "date" },
{ label: "开始时间", prop: 'startTime', placeholder: "请选择开始时间", showType: "date" }, { label: "结束时间", prop: 'zxjssj', placeholder: "请选择结束时间", showType: "date" },
{ label: "结束时间", prop: 'endTime', placeholder: "请选择结束时间", showType: "date" }, { label: "指向地点", prop: 'zxdz', placeholder: "请输入指向地点", showType: "input" },
{ label: "指向地点", prop: 'targetLocation', placeholder: "请输入指向地点", showType: "input" },
]); ]);
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{
clueNo: "XS20240101001",
clueTitle: "可疑人员活动线索",
clueType: "人员线索",
clueSource: "群众举报",
startTime: "2024-01-01 08:00:00",
endTime: "2024-01-01 18:00:00",
targetLocation: "某市某区某街道",
clueContent: "发现多名可疑人员在该区域频繁出入,疑似从事非法活动。",
attachment: "report.pdf"
},
{
clueNo: "XS20240101002",
clueTitle: "涉毒交易线索",
clueType: "违法犯罪线索",
clueSource: "技术侦查",
startTime: "2024-01-02 10:00:00",
endTime: "2024-01-02 16:00:00",
targetLocation: "某市某区某小区",
clueContent: "监控发现多次可疑交易活动,疑似涉及违禁物品。",
attachment: "evidence.docx"
},
{
clueNo: "XS20240101003",
clueTitle: "非法聚集线索",
clueType: "群体性事件",
clueSource: "网络监控",
startTime: "2024-01-03 14:00:00",
endTime: "2024-01-03 22:00:00",
targetLocation: "某市某广场",
clueContent: "网络平台发现有组织策划非法聚集活动的信息。",
attachment: "online_evidence.zip"
}
],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -126,15 +99,17 @@ const pageData = reactive({
}, },
controlsWidth: 220, controlsWidth: 220,
tableColumn: [ tableColumn: [
{ label: "线索编号", prop: "clueNo" }, { label: "线索编号", prop: "xsBh" },
{ label: "线索名称", prop: "clueTitle" }, { label: "线索名称", prop: "xsMc" },
{ label: "线索类型", prop: "clueType" }, { label: "线索类型", prop: "xlLx",showSolt:true },
{ label: "线索来源", prop: "clueSource" }, { label: "线索来源", prop: "qbLy",showSolt:true },
{ label: "开始时间", prop: "startTime" }, { label: "开始时间", prop: "zxkssj" },
{ label: "结束时间", prop: "endTime" }, { label: "结束时间", prop: "zxjssj" },
{ label: "指向地点", prop: "targetLocation" }, { label: "指向地点", prop: "zxdz" },
{ label: "线索内容", prop: "clueContent", width: 200 }, { label: "线索内容", prop: "xsNr"},
{ label: "附件", prop: "attachment", solt: true }, { label: "处置状态", prop: "czzt",showSolt: true},
{ label: "附件", prop: "fjdz", showSolt: true },
{ label: "审核状态", prop: "shzt", showSolt: true },
] ]
}); });
@ -145,12 +120,7 @@ onMounted(() => {
tabHeightFn(); tabHeightFn();
}); });
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索 // 搜索
const onSearch = (val) =>{ const onSearch = (val) =>{
queryFrom.value = {...val} queryFrom.value = {...val}
@ -169,21 +139,30 @@ const changeSize = (val) =>{
// 获取列表 // 获取列表
const getList = (val) =>{ const getList = (val) =>{
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList'; qcckGet(data,'/mosty-gsxt/qbcj/selectPage').then(res=>{
// qcckPost(data,url).then(res=>{ pageData.tableData = res.records || [];
// pageData.tableData = res.records || []; pageData.total = res.total;
// pageData.total = res.total; pageData.tableConfiger.loading = false;
// pageData.tableConfiger.loading = false; }).catch(()=>{ pageData.tableConfiger.loading = false; })
// }).catch(()=>{ pageData.tableConfiger.loading = false; }) }
// 转为指令
const handleZL = (val) =>{
isShow.value = true;
setTimeout(()=>{
zlDialog.value.init(val)
},500)
} }
// 详情 // 详情
const addEdit = (type, row) => { const addEdit = (type, row) => {
nextTick(()=>{ isShow.value = true;
setTimeout(()=>{
detailDiloag.value.init(type, row); detailDiloag.value.init(type, row);
}) },500)
}; };
// 表格高度计算 // 表格高度计算

View File

@ -8,7 +8,7 @@
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage :formList="formData" ref="elform" :rules="rules"></FormMessage> <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules"></FormMessage>
</div> </div>
</div> </div>
</template> </template>
@ -16,7 +16,6 @@
<script setup> <script setup>
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import * as rule from "@/utils/rules.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue"; import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue";
const emit = defineEmits(["updateDate"]); const emit = defineEmits(["updateDate"]);
const props = defineProps({ const props = defineProps({
@ -25,13 +24,16 @@ const props = defineProps({
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗 const dialogForm = ref(false); //弹窗
const formData = ref([ const formData = ref([
{ label: "语义名称", prop: "bqmc", type: "input", }, { label: "语义名称", prop: "yymc", type: "input", },
{ label: "要素类型", prop: "sfbqdl", type: "select", options: [] }, { label: "要素类型", prop: "yslx", type: "input"},
{ label: "要素名称", prop: "sfbqxl", type: "input", options: [] }, { label: "要素名称", prop: "ysmc", type: "input"},
{ label: "要素描述", prop: "ysms", type: "textarea", width: "100%" }, { label: "要素描述", prop: "ysms", type: "textarea", width: "100%" },
]); ]);
const rules = reactive({ const rules = reactive({
bqmc: [{ required: true, message: "请输入标签名称", trigger: "blur" }] yymc: [{ required: true, message: "请输入标签名称", trigger: "blur" }],
yslx: [{ required: true, message: "请输入要素类型", trigger: "blur" }],
ysmc: [{ required: true, message: "请输入要素名称", trigger: "blur" }],
ysms: [{ required: true, message: "请输入要素描述", trigger: "blur" }],
}); });
const listQuery = ref({}); //表单 const listQuery = ref({}); //表单
const loading = ref(false); const loading = ref(false);
@ -39,28 +41,32 @@ const elform = ref();
const title = ref(""); const title = ref("");
onMounted(() => {}); onMounted(() => {});
// 初始化数据 // 初始化数据
const init = (type, row,) => { const init = (type, id) => {
dialogForm.value = true; dialogForm.value = true;
title.value = type == 'add' ? "新增" : "编辑"; title.value = type == 'add' ? "新增" : "编辑";
if (row) getDataById(row.id); if (id) getDataById(id);
}; };
// 根据id查询详情 // 根据id查询详情
const getDataById = (id) => { const getDataById = (id) => {
// qcckGet({}, '/mosty-gsxt/tbGsxtBqgl/'+id).then((res) => { qcckGet({id}, '/mosty-gsxt/qbyy/selectByid').then((res) => {
// listQuery.value = res; listQuery.value = res;
// }); });
}; };
// 提交 // 提交
const submit = () => { const submit = () => {
elform.value.submit((data)=>{ elform.value.submit((data)=>{
// let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update'; let url = title.value == "新增" ? '/mosty-gsxt/qbyy/add':'/mosty-gsxt/qbyy/update';
// let params = { ...data } let params = { ...data }
// qcckPost(params, url).then((res) => { loading.value = true;
// proxy.$message({ type: "success", message: title.value + "成功" }); qcckPost(params, url).then((res) => {
// emit("updateDate"); loading.value = false;
// close(); proxy.$message({ type: "success", message: title.value + "成功" });
// }).catch(() => {}); emit("updateDate");
close();
}).catch(()=>{
loading.value = false;
})
}); });
}; };

View File

@ -5,25 +5,28 @@
</div> </div>
<div class="flex just-between"> <div class="flex just-between">
<!-- 左边 --> <!-- 左边 -->
<div class="ww49"> <div class="ww49" style="min-width: 647px;">
<div ref="searchBox"> <div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" /> <Search :searchArr="searchConfiger" @submit="onSearch">
<el-button type="primary" @click="addForm('add',null)">新增</el-button>
</Search>
</div> </div>
<div class="tabBox"> <div class="tabBox">
<MyTable <MyTable
:tableData="pageData.tableData" :tableData="pageData.tableData"
:tableColumn="pageData.tableColumn" :tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight" :tableHeight="pageData.tableHeight1"
:key="pageData.keyCount" :key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger" :tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData" @chooseData="chooseData"
> >
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link> <el-link type="primary" @click="addForm('edit', row.id)">编辑</el-link>
<el-link type="danger" @click="delDictItem([row.id])">删除</el-link> <el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<div class="txetBox"></div>
<div class="footBnt"> <div class="footBnt">
<el-button type="primary">导入</el-button> <el-button type="primary">导入</el-button>
<el-button type="primary">语义分析</el-button> <el-button type="primary">语义分析</el-button>
@ -48,7 +51,7 @@
> >
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link> <el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="danger" @click="delDictItem([row.id])">删除</el-link> <el-link type="danger" @click="delDictItemRight(row.id)">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@ -98,13 +101,14 @@ const searchConfiger = ref([
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
tableData: [{ id: 1, xh: 1, yymc: "XX公司", yslx: "实体识别", ysmc: "组织", ysms: "林芝某公司", bz: "" }], //表格数据 tableData: [], //表格数据
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
showSelectType: "checkBox", showSelectType: "null",
loading: false loading: false
}, },
tableHeight1:300,
tableConfigerR: { tableConfigerR: {
rowHieght: 61, rowHieght: 61,
showSelectType: null, showSelectType: null,
@ -117,16 +121,19 @@ const pageData = reactive({
}, //分页 }, //分页
controlsWidth: 160, //操作栏宽度 controlsWidth: 160, //操作栏宽度
tableColumn: [ tableColumn: [
{ label: "语义名称", prop: "yymc" }, { label: "语义名称", prop: "yymc",showOverflowTooltip:true },
{ label: "要素类型", prop: "yslx" }, { label: "要素类型", prop: "yslx",showOverflowTooltip:true },
{ label: "要素名称", prop: "ysmc" }, { label: "要素名称", prop: "ysmc",showOverflowTooltip:true },
{ label: "要素描述", prop: "ysms" }, { label: "要素描述", prop: "ysms",showOverflowTooltip:true },
] ]
}); });
onMounted(() => { onMounted(() => {
tabHeightFn(); tabHeightFn();
getList();
}); });
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...val }; queryFrom.value = { ...val };
@ -134,38 +141,57 @@ const onSearch = (val) => {
getList(); getList();
}; };
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
const getList = () => { const getList = () => {
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
// qcckGet(queryFrom.value).then((res)=>{ qcckGet(queryFrom.value,'/mosty-gsxt/qbyy/selectList').then((res)=>{
// pageData.tableData = res.data.list; pageData.tableData = res || [];
// pageData.total = res.data.total; pageData.tableConfiger.loading = false;
// pageData.keyCount++; })
// pageData.tableConfiger.loading = false;
// })
}; };
// 删除 // 删除
const delDictItem = (ids) => { const delDictItem = (id) => {
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckPost({id},'/mosty-gsxt/qbyy/delete').then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
};
// 删除右边
const delDictItemRight = (id) => {
// proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => { // proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{ // qcckPost({id},'/mosty-gsxt/qbyy/delete').then(()=>{
// proxy.$message({ type: "success", message: "删除成功" }); // proxy.$message({ type: "success", message: "删除成功" });
// getList(); // getList();
// }) // })
// }).catch(() => {}); // }).catch(() => {});
}; };
// 新增数据 -- 左边
const addForm = (type, id) =>{
detailDiloag.value.init(type, id);
}
const changeNo = (val) => {
// pageData.pageConfiger.pageNum = val;
// getListR();
};
const changeSize = (val) => {
// pageData.pageConfiger.pageSize = val;
// getListR();
};
// 新增 // 新增
const addEdit = (type, row) => { const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
}; };
// 表格高度计算 // 表格高度计算
@ -185,6 +211,15 @@ const tabHeightFn = () => {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.txetBox{
position: absolute;
bottom: 50px;
height: 210px;
width: 100%;
padding: 0 10px;
box-sizing: border-box;
background: red;
}
</style> </style>
<style> <style>

View File

@ -1,58 +1,37 @@
<template> <template>
<div class="dialog" v-if="dialogForm"> <div class="dialog" v-if="dialogForm">
<div class="head_box"> <div class="head_box">
<span class="title">典当物品信息详情</span> <span class="title">操作记录详情</span>
<div> <div>
<el-button size="small" @click="close">关闭</el-button> <el-button size="small" @click="close">关闭</el-button>
</div> </div>
</div> </div>
<div class="cntinfo"> <div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left"> <el-form :model="listQuery" disabled :label-width="230" label-position="left">
<div class="form-row"> <div class="form-row">
<el-form-item label="业务流水号码"> <el-form-item label="模块名称">
<el-input v-model="listQuery.ywlsh" placeholder="01131213"/> <el-input v-model="listQuery.mkmc"/>
</el-form-item> </el-form-item>
<el-form-item label="典当物品类别"> <el-form-item label="操作人员">
<el-input v-model="listQuery.ddwplb" placeholder="贵金属"/> <el-input v-model="listQuery.operName" />
</el-form-item> </el-form-item>
</div> </div>
<div class="form-row"> <div class="form-row">
<el-form-item label="典当人姓名"> <el-form-item label="操作人员身份证号">
<el-input v-model="listQuery.ddrxm" placeholder="张三"/> <el-input v-model="listQuery.operSfzh" />
</el-form-item> </el-form-item>
<el-form-item label="典当人证件号码"> <el-form-item label="操作人员ID">
<el-input v-model="listQuery.ddrzjhm" placeholder="511111111111111111"/> <el-input v-model="listQuery.operUserId" />
</el-form-item> </el-form-item>
</div> </div>
<div class="form-row"> <div class="form-row">
<el-form-item label="典当人联系电话"> <el-form-item label="操作模块">
<el-input v-model="listQuery.ddrlxdh" placeholder="15222222222"/> <el-input v-model="listQuery.title"/>
</el-form-item>
<el-form-item label="典当物品名称">
<el-input v-model="listQuery.ddwpmc" placeholder="100g金条"/>
</el-form-item> </el-form-item>
</div> </div>
<div class="form-row">
<el-form-item label="典当物品持有凭证">
<el-input v-model="listQuery.cypz" placeholder="123"/>
</el-form-item>
<el-form-item label="典当物品数量">
<el-input v-model="listQuery.ddwpsl" placeholder="5"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="典当物品照片">
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
</el-form-item>
</div>
</el-form> </el-form>
</div> </div>
</div> </div>
@ -62,18 +41,12 @@
import { ref, reactive } from 'vue'; import { ref, reactive } from 'vue';
const dialogForm = ref(false); const dialogForm = ref(false);
const listQuery = ref({ const listQuery = ref({});
plateImages: [
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
{img:require('@/assets/images/person.png')},
]
});
// 初始化数据 // 初始化数据
const init = (type, row) => { const init = (type, row) => {
dialogForm.value = true; dialogForm.value = true;
// 根据type和row初始化表单数据 listQuery.value = row || {}; // 如果row为空则初始化为空对象
}; };
const close = () => { const close = () => {

View File

@ -16,15 +16,7 @@
:key="pageData.keyCount" :key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger" :tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> >
<!-- 事故照片 -->
<template #accidentPhoto="{ row }">
<el-image
style="width: 50px; height: 50px"
:src="row.accidentPhoto"
:preview-src-list="[row.accidentPhoto]">
</el-image>
</template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button> <el-button size="small" @click="addEdit('detail', row)">详情</el-button>
@ -51,27 +43,20 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue"; import DetailForm from "./components/detailForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref(); const detailDiloag = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "物品名称", prop: 'itemName', placeholder: "请输入物品名称", showType: "input" }, { label: "模块名称", prop: 'mkmc', placeholder: "请输入模块名称", showType: "input" },
{ label: "物品类别", prop: 'itemType', placeholder: "请输入物品类别", showType: "input" }, { label: "操作人员", prop: 'operName', placeholder: "请输入操作人员", showType: "input" },
{ label: "持有凭证", prop: 'certificate', placeholder: "请输入持有凭证", showType: "input" }, { label: "操作人员身份证号", prop: 'operSfzh', placeholder: "请输入操作人员身份证号", showType: "input" },
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
tableData: [ tableData: [],
{id: 1, placeName: '老王典当', itemName: '100g金条', itemType: '贵重金属', certificate: '123456', quantity: 5, pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222'},
{id: 2, placeName: '老王典当', itemName: '100g金条', itemType: '贵重金属', certificate: '123456', quantity: 5, pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222'},
{id: 3, placeName: '老王典当', itemName: '100g金条', itemType: '贵重金属', certificate: '123456', quantity: 5, pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222'},
{id: 4, placeName: '老王典当', itemName: '100g金条', itemType: '贵重金属', certificate: '123456', quantity: 5, pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222'},
{id: 5, placeName: '老王典当', itemName: '100g金条', itemType: '贵重金属', certificate: '123456', quantity: 5, pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222'},
],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
rowHieght: 61, rowHieght: 61,
@ -80,19 +65,16 @@ const pageData = reactive({
}, },
total: 0, total: 0,
pageConfiger: { pageConfiger: {
pageSize: 20, size: 20,
pageCurrent: 1 current: 1
}, },
controlsWidth: 120, controlsWidth: 120,
tableColumn: [ tableColumn: [
{ label: "场所名称", prop: "placeName" }, { label: "模块名称", prop: "mkmc" },
{ label: "物品名称", prop: "itemName" }, { label: "操作人员", prop: "operName" },
{ label: "物品类别", prop: "itemType" }, { label: "操作人员身份证号", prop: "operSfzh" },
{ label: "持有凭证", prop: "certificate" }, { label: "操作人员ID", prop: "operUserId" },
{ label: "数量", prop: "quantity", width: 80 }, { label: "操作模块", prop: "title"},
{ label: "典当人", prop: "pawner" },
{ label: "典当人证件号码", prop: "pawnerIdCard" },
{ label: "典当人联系电话", prop: "pawnerPhone" },
] ]
}); });
@ -101,16 +83,10 @@ onMounted(() => {
tabHeightFn(); tabHeightFn();
}); });
//选择类型
const handleType = (val) => {
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
}
// 搜索 // 搜索
const onSearch = (val) =>{ const onSearch = (val) =>{
queryFrom.value = {...val} queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.current = 1;
getList() getList()
} }
@ -119,20 +95,19 @@ const changeNo = (val) =>{
getList() getList()
} }
const changeSize = (val) =>{ const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.size = val;
getList() getList()
} }
// 获取列表 // 获取列表
const getList = (val) =>{ const getList = () =>{
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger, ...queryFrom.value }; let data = { ...pageData.pageConfiger, ...queryFrom.value };
// let url = '/mosty-lzcj/tbDwMbkf/queryList'; qcckPost(data,'/mosty-base/monitor/operlog/list').then(res=>{
// qcckPost(data,url).then(res=>{ pageData.tableData = res.records || [];
// pageData.tableData = res.records || []; pageData.total = res.total;
// pageData.total = res.total; pageData.tableConfiger.loading = false;
// pageData.tableConfiger.loading = false; }).catch(()=>{ pageData.tableConfiger.loading = false; })
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
} }
// 详情 // 详情

View File

@ -9,9 +9,9 @@
</div> </div>
<div class="commCnt"> <div class="commCnt">
<div class="hh50"> <div class="hh50">
<div class="comm-title">处置统计</div> <div class="comm-title">类型统计</div>
<div class="echartsBox"> <div class="echartsBox">
<MoreBarEcharts echartsId="cztjEcharts" :data="obj.data_cztj"></MoreBarEcharts> <MoreBarEcharts echartsId="cztjEcharts" :data="obj.data_lxtj"></MoreBarEcharts>
</div> </div>
</div> </div>
<div class="hh50"> <div class="hh50">
@ -39,10 +39,10 @@
<div class="comm-title title-s">{{ it.title }}</div> <div class="comm-title title-s">{{ it.title }}</div>
<div class="list-table" > <div class="list-table" >
<MyTable <MyTable
:tableData="it.tableData" :tableData="it.tableList"
:tableColumn="pageData.tableColumn" :tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount+idx" :key="it.keyCount"
:isScroll="true" :isScroll="true"
:fixed="false" :fixed="false"
:tabelModel="it.title" :tabelModel="it.title"
@ -52,10 +52,8 @@
> >
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="primary" size="small">详情</el-link>
<el-link type="primary" size="small">网上会商</el-link> <el-link type="primary" size="small">网上会商</el-link>
<el-link type="primary" size="small">处置</el-link> <el-link type="primary" size="small">处置</el-link>
<el-link type="primary" size="small">反馈</el-link>
</template> </template>
</MyTable> </MyTable>
</div> </div>
@ -67,22 +65,25 @@
</template> </template>
<script setup> <script setup>
import { qcckPost, qcckGet } from "@/api/qcckApi.js";
import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue"; import MoreBarEcharts from "@/views/home/echarts/moreBarEcharts.vue";
import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue"; import LineEcharts from "@/views/home/echarts/moreLineEcharts.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/DarkTable.vue"; import MyTable from "@/components/aboutTable/DarkTable.vue";
import { nextTick, onMounted, reactive ,ref } from 'vue'; import { nextTick, onMounted, reactive,getCurrentInstance ,ref, watch } from 'vue';
import { set } from "lodash";
const { proxy } = getCurrentInstance();
const {D_BZ_SSZT,D_GS_XS_LY} = proxy.$dict("D_BZ_SSZT","D_GS_XS_LY"); //获取字典数据
const searchBox = ref(); const searchBox = ref();
const listBoxRef = ref(); const listBoxRef = ref();
// 图数据 // 图数据
const obj = reactive({ const obj = reactive({
data_cztj:{ data_lxtj:{
xData:['上访','诈骗','敲诈勒索','盗窃','涉黄','涉毒','强奸猥亵','灾害事故','自杀'], xData:['上访','诈骗','敲诈勒索','盗窃','涉黄','涉毒','强奸猥亵','灾害事故','自杀'],
color:[['#0DBAC5','#28EEBF'],['#F06C0D','#EEB416']], color:[['#0DBAC5','#28EEBF'],['#F06C0D','#EEB416']],
labelColor:'#000', labelColor:'#000',
list:[ list:[
{label:'总数',val:[30,20,10,60,50,60,35,45,20]}, {label:'总数',val:[30,20,10,60,50,60,35,45,20]},
{label:'未办结',val:[40,30,20,50,30,44,50,45,62]},
] ]
}, },
data_hstj:{ data_hstj:{
@ -91,56 +92,27 @@ const obj = reactive({
labelColor:'#000', labelColor:'#000',
list:[ list:[
{label:'总数',val:[30,20,10,60,50,60,35,45,20]}, {label:'总数',val:[30,20,10,60,50,60,35,45,20]},
{label:'已会商',val:[40,30,20,50,30,44,50,45,62]},
] ]
} }
}) })
// 搜索 // 搜索
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "专题来源", prop: "ztly", placeholder: "请选择", showType: "select"}, { label: "线索来源", prop: 'qbLy', placeholder: "请选择线索来源", showType: "select",options:D_GS_XS_LY },
{ label: "所属专题", prop: "sszt", placeholder: "请输入", showType: "input"}, { label: "线索内容", prop: "xsNr", placeholder: "请输入", showType: "input"},
{ label: "线索内容", prop: "xsnr", placeholder: "请输入", showType: "input"}, { label: "开始时间", prop: 'zxkssj', placeholder: "请选择开始时间", showType: "date" },
{ label: "时间", prop: "sjd", showType: "daterange"}, { label: "结束时间", prop: 'zxjssj', placeholder: "请选择结束时间", showType: "date" },
{ label: "会商情况", prop: "hsqk", placeholder: "请选择", showType: "select"},
]) ])
// 每个列表对应的值 // 每个列表对应的值
const list = reactive([ const list = ref([
{ title:'上访', tableData:[ // { title:'诈骗', tableList:[]},
{ bt:' 张三上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 李四上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 王五上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
{ bt:' 赵二上访', nr:'低价快速的还是', rs:'25', ztfl:'上访', sbsj:'2025/02/19',},
]},
{ title:'诈骗', tableData:[]},
{ title:'敲诈勒索',tableData:[]},
{ title:'盗窃',tableData:[]},
{ title:'涉黄',tableData:[]},
{ title:'涉赌',tableData:[]},
{ title:'涉毒',tableData:[]},
{ title:'强奸猥亵',tableData:[]},
]) ])
// 列表公用 // 列表公用
const pageData = reactive({ const pageData = reactive({
tableColumn:[ tableColumn:[
{ label: "线索标题", width:55, prop: "bt",showOverflowTooltip: true}, { label: "线索标题", prop: "xsMc",showOverflowTooltip: true},
{ label: "线索内容", prop: "nr",showOverflowTooltip: true}, { label: "线索内容", prop: "xsNr",showOverflowTooltip: true},
{ label: "涉及人数",width:55, prop: "rs",showOverflowTooltip: true}, { label: "涉及人数", prop: "sjrs",showOverflowTooltip: true},
{ label: "专题分类", prop: "ztfl",showOverflowTooltip: true}, { label: "上报时间", prop: "sxsbsj",showOverflowTooltip: true},
{ label: "上报时间",width:55, prop: "sbsj",showOverflowTooltip: true},
], ],
keyCount: 0, keyCount: 0,
tableConfiger: { tableConfiger: {
@ -150,20 +122,49 @@ const pageData = reactive({
showIndex:false, showIndex:false,
rowHeight: 30, rowHeight: 30,
}, },
controlsWidth: 200, //操作栏宽度 controlsWidth: 120, //操作栏宽度
}); });
onMounted(() => { onMounted(() => {
tabHeightFn(); getCount(); //获取统计数据
}); });
const getCount = () => {
// 获取处置状态统计
qcckPost({}, '/mosty-gsxt/qbcj/getXscjTjByXslx').then(res => {
let arr = res || [];
obj.data_lxtj.xData = arr.map(v => v.zdmc);
obj.data_lxtj.list = [{ label: '总数', val: arr.map(v => v.count) }];
});
// 会商统计
qcckPost({}, '/mosty-gsxt/wshs/getWshyZttj').then(res => {
let arr = res || [];
obj.data_hstj.xData = arr.map(v => v.zdmc);
obj.data_hstj.list = [{ label: '总数', val: arr.map(v => v.count) }];
});
};
// 滚动加载 // 滚动加载
const changePage = (val) => { const changePage = (val) => {
console.log(val,'滚动加载'); list.value.forEach((item, index) => {
if(val == item.title && item.tableList.length < item.total) {
item.page++;
let params = { sszt: item.dm, pageNum: item.page, pageSize: 20, };
qcckPost(params, '/mosty-gsxt/qbcj/selectPage').then(res => {
let arr = res.records || [];
list.value[index].tableList = item.page == 1 ? arr : [...list.value[index].tableList, ...arr];
list.value[index].total = res.total;
item.keyCount++;
});
}
});
}; };
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.boxHeight = window.innerHeight - searchBox.value.offsetHeight - 250; pageData.boxHeight = window.innerHeight - searchBox.value.offsetHeight - 250
nextTick(() => { nextTick(() => {
pageData.tableHeight = listBoxRef.value[0].offsetHeight - 40; pageData.tableHeight = listBoxRef.value[0].offsetHeight - 40;
}); });
@ -172,6 +173,26 @@ const tabHeightFn = () => {
}; };
}; };
const handleGetList = () => {
list.value.forEach((item, index) => {
let params = { sszt: item.dm, pageNum: 1, pageSize: 20 };
qcckGet(params, '/mosty-gsxt/qbcj/selectPage').then(res => {
list.value[index].tableList = res.records || [];
list.value[index].total = res.total;
item.keyCount++;
});
});
};
watch(()=>D_BZ_SSZT.value, (val) => {
let zdlist = val || [];
list.value = zdlist.map(v => ({ title: v.zdmc,dm:v.dm,keyCount:0, tableList: [],page:1,total:0 }));
if(list.value.length > 0) handleGetList();
setTimeout(() => {
tabHeightFn();
}, 400);
}, { immediate: true });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -299,9 +320,6 @@ const tabHeightFn = () => {
margin-bottom:0 !important; margin-bottom:0 !important;
padding: 2px !important; padding: 2px !important;
} }
::v-deep .pageSearch .box .item {
width: 16%;
}
::v-deep .el-table .table_blue_row { ::v-deep .el-table .table_blue_row {
background: #fff !important; background: #fff !important;

View File

@ -87,7 +87,7 @@ const pageData = reactive({
pageSize: 20, pageSize: 20,
pageCurrent: 1 pageCurrent: 1
}, //分页 }, //分页
controlsWidth: 160, //操作栏宽度 controlsWidth: 150, //操作栏宽度
tableColumn: [ tableColumn: [
{ label: "标签名称", prop: "bqMc" }, { label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" }, { label: "标签代码", prop: "bqDm" },