Browse Source

涉访涉诉--信件查重

master
buaixuexideshitongxue 1 month ago
parent
commit
167518ff85
  1. 10
      src/api/data/complaintCollection.ts
  2. 232
      src/components/data/complaintformdialog.vue

10
src/api/data/complaintCollection.ts

@ -44,3 +44,13 @@ export function watchDetail(body) {
body
});
}
/**
*
*/
export function maileRepeatt(body) {
return request.post({
url: `/data/complaintCollection/maileRepeatt`,
body
});
}

232
src/components/data/complaintformdialog.vue

@ -110,23 +110,33 @@
</el-col>
<el-col :span="12">
<el-form-item label="身份证号码" prop="responderIdCode">
<el-input
v-model="model.responderIdCode"
:placeholder="model.responderIdCodeSkip ? '无' : '请输入身份证号码'"
<div style="display: flex; align-items: flex-start; gap: 8px;">
<el-form-item label="身份证号码" prop="responderIdCode" style="flex: 1; margin-bottom: 0;">
<el-input
v-model="model.responderIdCode"
:placeholder="model.responderIdCodeSkip ? '无' : '请输入身份证号码'"
:disabled="model.responderIdCodeSkip"
>
<template #append>
<el-checkbox
v-model="model.responderIdCodeSkip"
@change="(v) => v && (model.responderIdCode = '')"
>
</el-checkbox>
</template>
</el-input>
</el-form-item>
<el-button
type="primary"
:loading="duplicateLoading"
:disabled="model.responderIdCodeSkip"
@click="onCheckDuplicate"
>
<template #append>
<el-checkbox
v-model="model.responderIdCodeSkip"
@change="(v) => v && (model.responderIdCode = '')"
>
</el-checkbox>
</template>
</el-input>
</el-form-item>
查重
</el-button>
</div>
</el-col>
</el-row>
@ -245,11 +255,101 @@
</el-button>
</div>
</template>
<!-- 重复件提示抽屉 -->
<el-drawer
v-model="duplicateDrawerVisible"
direction="rtl"
size="40%"
class="duplicate-drawer"
>
<template #header>
<div class="drawer-header danger">
<el-icon size="22">
<WarningFilled />
</el-icon>
<div class="title-group">
<div class="title">身份证重复件风险提醒</div>
</div>
</div>
</template>
<!-- 内容区域 -->
<div class="drawer-body">
<!-- 顶部风险提示 -->
<el-alert
type="warning"
show-icon
:closable="false"
class="drawer-alert"
>
<template #title>
系统检测到该身份证号可能存在重复登记记录
</template>
</el-alert>
<!-- 当前身份证号高亮 -->
<div class="id-highlight">
当前身份证号
<span>{{ model.responderIdCode }}</span>
</div>
<!-- 无数据 -->
<el-empty
v-if="duplicateList.length === 0"
description="暂无重复数据"
/>
<!-- 重复件表格 -->
<el-table
v-else
:data="duplicateList"
stripe
style="width: 100%"
>
<el-table-column
prop="originId"
label="编号"
width="140"
/>
<el-table-column
prop="sourceTablePath"
label="来源"
width="180"
/>
<el-table-column
prop="responderName"
label="姓名"
width="120"
/>
<el-table-column
prop="responderIdCode"
label="身份证号"
/>
<el-table-column
prop="discoveryTime"
label="登记/受理时间"
width="180"
>
<template #default="{ row }">
{{
row.discoveryTime
? dayjs(row.discoveryTime).format('YYYY-MM-DD HH:mm:ss')
: '-'
}}
</template>
</el-table-column>
</el-table>
</div>
</el-drawer>
</el-dialog>
</template>
<script setup>
import { computed, ref, watch } from "vue";
import {computed, ref, watch} from "vue";
import {maileRepeatt} from "@/api/data/complaintCollection.ts";
import { WarningFilled } from '@element-plus/icons-vue'
import dayjs from "dayjs";
import feedback from "@/utils/feedback.ts";
const props = defineProps({
modelValue: Boolean, //
@ -306,6 +406,35 @@ async function onSubmit() {
// await formRef.value.validate();
emit("submit");
}
//
const duplicateDrawerVisible = ref(false)
const duplicateList = ref([])
const duplicateLoading = ref(false)
const onCheckDuplicate = async () => {
if (!props.model.responderIdCode) return
duplicateLoading.value = true
duplicateList.value = []
try {
const body = {
responderIdCode: props.model.responderIdCode,
}
const res = await maileRepeatt(body)
const list = res?.complaintCollectionPageDTOS || []
if (list.length > 0) {
duplicateList.value = list
duplicateDrawerVisible.value = true
} else {
feedback.msgSuccess("未发现重复登记记录");
}
} catch (error) {
feedback.msgError('查重失败')
} finally {
duplicateLoading.value = false
}
}
</script>
<style>
@ -317,4 +446,75 @@ async function onSubmit() {
padding: 16px 24px 24px;
}
/* 重复件抽屉整体 */
.duplicate-drawer {
--el-drawer-padding-primary: 20px;
}
/* 抽屉标题 */
.drawer-header {
display: flex;
align-items: center;
gap: 8px;
font-size: 18px;
font-weight: 600;
color: #d46b08;
}
/* 内容区域 */
.drawer-body {
padding-top: 8px;
}
/* 顶部提示 */
.drawer-alert {
margin-bottom: 16px;
}
/* 身份证号高亮 */
.id-highlight {
margin-bottom: 20px;
padding: 12px 16px;
background: #fafafa;
border-left: 4px solid #faad14;
font-size: 14px;
line-height: 22px;
}
.id-highlight span {
margin-left: 8px;
font-weight: 600;
color: #d4380d;
}
.drawer-header {
display: flex;
align-items: center;
gap: 12px;
padding: 4px 0;
}
.drawer-header.danger {
color: #0d73ee;
}
.drawer-header .title-group {
display: flex;
flex-direction: column;
}
.drawer-header .title {
font-size: 20px;
font-weight: 600;
line-height: 1.2;
}
.drawer-header .sub-title {
font-size: 13px;
color: #8c8c8c;
margin-top: 2px;
}
</style>

Loading…
Cancel
Save