Browse Source

fix:维权督察、审计监督相关前端问题消费(1、维权督办:筛选案件类型,过滤无需使用的维权案件。

2、维权列表:新增维权导出功能。
                      3、左右拉动的滚动轴加宽;审计监督台账-台账与附件压缩包顺序无法对应。
                      4、移动督察:督察问题编辑:涉及单位、问题来源展示错误,附件无法修改。
                      5、人员抽检-补充抽检人员:补充1位人员后原名单20人员不展示。
                      6、抽检人员:无法导出,提示数据库异常。)
master
pengwei 3 weeks ago
parent
commit
5b8e82b835
  1. 7
      src/api/rightsComfort/rights.ts
  2. 48
      src/components/mobileSupervise/police-sampling.vue
  3. 6
      src/views/books/Audit.vue
  4. 175
      src/views/rightsComfort/Rights.vue

7
src/api/rightsComfort/rights.ts

@ -9,6 +9,13 @@ export function listRights(query) {
} }
export function getInfringerData(id){
return request.get({
url:`/rights/getInfringerData/${id}`
})
}
export function delRights(id){ export function delRights(id){
return request.del({ return request.del({
url:`/rights/${id}` url:`/rights/${id}`

48
src/components/mobileSupervise/police-sampling.vue

@ -173,10 +173,7 @@ const query = ref({
departBranch: true departBranch: true
}); });
watch(() => props.departId, (val) => {
query.value.departId = val;
getList()
})
const total = ref(0); const total = ref(0);
const ableRef =ref(null) const ableRef =ref(null)
const treeData = catchSotre.getDepartsAll(); const treeData = catchSotre.getDepartsAll();
@ -186,7 +183,6 @@ function getList() {
loading.value = true loading.value = true
listPolice(query.value).then((data) => { listPolice(query.value).then((data) => {
polices.value = data.records; polices.value = data.records;
console.log('polices',polices)
setCheckFun(data.records) setCheckFun(data.records)
total.value = data.total; total.value = data.total;
loading.value = false loading.value = false
@ -195,11 +191,11 @@ function getList() {
const setCheckFun =(row)=>{ const setCheckFun =(row)=>{
console.log('checkPolices.value',checkPolices.value)
row.forEach((s)=>{ row.forEach((s)=>{
let data =checkPolices.value.find(x=> let data =checkPolices.value.find(x=>
x.empNo === s.empNo x.empNo === s.empNo
) )
if(data){ if(data){
nextTick(()=>{ nextTick(()=>{
ableRef.value.toggleRowSelection(s, true); ableRef.value.toggleRowSelection(s, true);
@ -212,7 +208,12 @@ const setCheckFun =(row)=>{
const checkPolices = ref([]); const checkPolices = ref([]);
const checkPolicesMap =ref([]) const checkPolicesMap =ref([])
function selectionChange(selectionRows) { function selectionChange(selectionRows) {
if(checkPolicesMap.value['key-0']){
//dataselect
const {intersection, filteredSource} = processIntersection( checkPolicesMap.value['key-0'],selectionRows,'empNo')
checkPolicesMap.value['key-0']=filteredSource;
checkPolicesMap.value['key'+query.value.current] = intersection;
}
if( checkPolicesMap.value['key'+query.value.current]){ if( checkPolicesMap.value['key'+query.value.current]){
let data = checkPolicesMap.value['key'+query.value.current]; let data = checkPolicesMap.value['key'+query.value.current];
@ -227,6 +228,22 @@ function selectionChange(selectionRows) {
} }
/**
* 获取两个对象数组的交集并从源数组中剔除交集数据
* @param {Array} sourceArr 源数组需要剔除交集的数组
* @param {Array} targetArr 目标数组
* @param {String} key 比较的键名默认'id'
* @returns {Object} { intersection: 交集数组, filteredSource: 剔除后的源数组 }
*/
const processIntersection = (sourceArr, targetArr, key = 'id') => {
//
const targetKeys = new Set(targetArr.map(item => item[key]));
const intersection = sourceArr.filter(item => targetKeys.has(item[key]));
//
const filteredSource = sourceArr.filter(item => !targetKeys.has(item[key]));
return { intersection, filteredSource };
}
const getCheckData = (data,selectionRows) =>{ const getCheckData = (data,selectionRows) =>{
selectionRows.forEach(item => { selectionRows.forEach(item => {
@ -263,8 +280,23 @@ function submit() {
emit('update:modelValue', checkPolices.value) emit('update:modelValue', checkPolices.value)
show.value = false show.value = false
} }
watch(()=>props.modelValue,()=>{ watch(() => props.departId, (val) => {
query.value.departId = val;
getList()
})
watch(() => show.value, (val) => {
if(val){
setCheckFun(polices.value)
}
})
watch(()=>props.modelValue,(val)=>{
checkPolices.value=props.modelValue checkPolices.value=props.modelValue
if(val){
checkPolicesMap.value['key-0']=getCheckData(val,props.modelValue);
if(polices.value){
setCheckFun(polices.value)
}
}
},{deep:true,immediate:true}) },{deep:true,immediate:true})

6
src/views/books/Audit.vue

@ -329,6 +329,12 @@ function reset() {
getList(); getList();
function handleExport() { function handleExport() {
if(query.value.discoveryTime == null){
delete query.value.discoveryTime;
}
if(query.value.crtTime== null){
delete query.value.crtTime;
}
window.open( window.open(
`${BASE_PATH}/negative/books/export/audit?` + `${BASE_PATH}/negative/books/export/audit?` +
new URLSearchParams(query.value).toString() new URLSearchParams(query.value).toString()

175
src/views/rightsComfort/Rights.vue

@ -30,10 +30,25 @@
<depart-tree-select v-model="query.departId" /> <depart-tree-select v-model="query.departId" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="案件类别">
<el-input v-model="query.caseCategory" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="侵权形式">
<el-select v-model="query.caseType" clearable >
<!-- row.caseType =='1'?'刑事案件':'民事案件'-->
<el-option label="刑事案件" value="1"></el-option>
<el-option label="民事案件" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="flex end"> <div class="flex end">
<div> <div>
<el-button type="primary" @click="handleExport">数据导出</el-button>
<el-button type="primary" @click="getList"> <el-button type="primary" @click="getList">
<template #icon> <template #icon>
<icon name="el-icon-Search" /> <icon name="el-icon-Search" />
@ -45,7 +60,7 @@
</div> </div>
</header> </header>
<div class="table-container"> <div class="table-container">
<el-table :data="list"> <el-table :data="list" v-loading="loading">
<el-table-column <el-table-column
label="申请人姓名" label="申请人姓名"
prop="applicantEmpName" prop="applicantEmpName"
@ -56,6 +71,25 @@
prop="applicantEmpNo" prop="applicantEmpNo"
width="100" width="100"
/> />
<el-table-column
label="申请时间"
prop="applyDate"
width="160"
></el-table-column>
<el-table-column
label="侵权形式"
prop="caseType"
width="120"
>
<template #default="{row}">
{{row.caseType =='1'?'刑事案件':'民事案件'}}
</template>
</el-table-column>
<el-table-column
label="案件类别"
prop="caseCategory"
width="120"
></el-table-column>
<el-table-column <el-table-column
label="事发时间" label="事发时间"
prop="happenTime" prop="happenTime"
@ -103,58 +137,97 @@
</div> </div>
</div> </div>
说明维权记录展示各单位申请的维权记录 说明维权记录展示各单位申请的维权记录
<el-dialog title="维权详情" v-model="show" width="50vw"> <el-dialog title="维权详情" v-model="show" width="50vw" @close="closeDialog">
<div class="dialog-container"> <div class="dialog-container">
<div class="row mt-10"> <el-row>
<div class="col col-12"> <el-col :span="12">
<label>申请人姓名</label> <el-form-item label="申请人姓名">
<span>{{ activeRow.applicantEmpName }}</span> {{ activeRow.applicantEmpName }}
</div> </el-form-item>
<div class="col col-12"> </el-col>
<label>申请人警号</label> <el-col :span="12">
<span>{{ activeRow.applicantEmpNo }}</span> <el-form-item label="申请人警号">
</div> {{ activeRow.applicantEmpNo }}
<div class="col col-12"> </el-form-item>
<label>事发时间</label> </el-col>
<span>{{ activeRow.happenTime }}</span> <el-col :span="12">
</div> <el-form-item label="事发时间">
<div class="col col-12"> {{ activeRow.happenTime }}
<label>案件编号</label> </el-form-item>
<span>{{ activeRow.caseNumber || '/' }}</span> </el-col>
</div> <el-col :span="12">
<div class="col col-12"> <el-form-item label="案件编号">
<label>状态</label> {{ activeRow.caseNumber || '/' }}
<span>{{ </el-form-item>
getDictLable( </el-col>
dict.comfortStatus, <el-col :span="12">
activeRow.rpcStatus <el-form-item label="案件编号">
) {{ getDictLable(
}}</span> dict.comfortStatus,
</div> activeRow.rpcStatus
) }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="案件经过">
{{ activeRow.factReason}}
</el-form-item>
</el-col>
</el-row>
<div v-if="activeRow.Infringers.length !== 0">
<hr color="#cccdd1" style="height: 1px;border: 0px"/>
<div class="flex v-center" style="height:20px;">
<h5>嫌疑人信息</h5>
</div> </div>
<div class="row mt-10" style="margin-bottom: 60px"> <div v-for="(infringer,key) in activeRow.Infringers">
<div class="col col-24"> <div class="flex v-center" style="height:30px;">
<label>案件经过</label> <h5>嫌疑人{{key + 1}}</h5>
<span>{{ activeRow.factReason }}</span> </div>
</div> <el-row>
<el-col :span="12">
<el-form-item label="姓名">
{{infringer.tortName}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号">
{{infringer.idCode}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="性别">
{{infringer.gender}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="打击处理情况">
{{ infringer.defendHandleWayName}}
</el-form-item>
</el-col>
</el-row>
</div> </div>
</div>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import moment from "moment"; import moment from "moment";
import { listRights,delRights } from "@/api/rightsComfort/rights"; import { listRights,delRights,getInfringerData } from "@/api/rightsComfort/rights";
import { delComfort } from "@/api/rightsComfort/comfort"; import { delComfort } from "@/api/rightsComfort/comfort";
import { listPolice } from "@/api/system/police"; import { listPolice } from "@/api/system/police";
import { getDictLable } from "@/utils/util"; import { getDictLable } from "@/utils/util";
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
import {BASE_PATH} from "@/api/request";
import useCatchStore from "@/stores/modules/catch"; import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore(); const catchStore = useCatchStore();
const dict = catchStore.getDicts([ const dict = catchStore.getDicts([
"comfortStatus" "comfortStatus","situation"
]); ]);
const list = ref([]); const list = ref([]);
@ -164,11 +237,20 @@ const query = ref({
code:'2' code:'2'
}); });
const total = ref(0); const total = ref(0);
const loading = ref(false);
function getList() { function getList() {
try{
loading.value=true;
listRights(query.value).then((data) => { listRights(query.value).then((data) => {
list.value = data.records; list.value = data.records;
total.value = data.total; total.value = data.total;
}); });
}catch (e){
console.log('e',e)
}finally {
loading.value=false;
}
} }
function reset() { function reset() {
@ -198,10 +280,27 @@ const handleDelete = async (row) => {
getList(); getList();
}; };
const closeDialog=()=>{
show.value=false
}
/**
* 导出数据
* */
function handleExport() {
window.open(`${BASE_PATH}/rights/export/result?` + new URLSearchParams(query.value).toString())
}
const activeRow = ref({}) const activeRow = ref({})
const show = ref(false) const show = ref(false)
const handleDetail = (row) => { const handleDetail =async (row) => {
activeRow.value = row activeRow.value = row
const res = await getInfringerData(row.rpcId)
console.log('res',res)
if(res){
activeRow.value.Infringers= res;
}
show.value = true show.value = true
}; };
</script> </script>

Loading…
Cancel
Save