4 changed files with 789 additions and 0 deletions
@ -0,0 +1,26 @@ |
|||||||
|
import request from '@/utils/request' |
||||||
|
|
||||||
|
export function getReport(query: any) { |
||||||
|
return request.get({ url: '/report/list',query }) |
||||||
|
} |
||||||
|
|
||||||
|
export function getReportDetail(params: Record<string, any>) { |
||||||
|
return request.get({ url: '/report/detail?',params}) |
||||||
|
} |
||||||
|
export function addIntoMail(body) { |
||||||
|
return request.post({ url: '/report/addIntoMail', body}) |
||||||
|
} |
||||||
|
export function addIntoBadMail(body) { |
||||||
|
return request.post({ url: '/report/addIntoBadMail', body}) |
||||||
|
} |
||||||
|
export function typelist() { |
||||||
|
return request.get({ url: '/report/typelist'}) |
||||||
|
} |
||||||
|
|
||||||
|
export function naturelist() { |
||||||
|
return request.get({ url: '/report/naturelist'}) |
||||||
|
} |
||||||
|
|
||||||
|
export function unitlist() { |
||||||
|
return request.get({ url: '/report/unitlist'}) |
||||||
|
} |
||||||
@ -0,0 +1,63 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog width="50vw" title="不纳入信件" > |
||||||
|
<el-form |
||||||
|
label-position="top" |
||||||
|
:model="form" |
||||||
|
:rules="rules" |
||||||
|
ref="formRef" |
||||||
|
style="height: 50vh" |
||||||
|
> |
||||||
|
<el-form-item label="不纳入信件理由" prop="reason"> |
||||||
|
<el-input |
||||||
|
v-model="form.reason" |
||||||
|
type="textarea" |
||||||
|
:rows="3" |
||||||
|
:placeholder=" |
||||||
|
'请输入不纳入信件理由' |
||||||
|
" |
||||||
|
></el-input> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<footer class="flex end"> |
||||||
|
<el-button type="primary" size="large" @click="submit" |
||||||
|
>提交</el-button |
||||||
|
> |
||||||
|
</footer> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
const form = reactive({}); |
||||||
|
const rules = { |
||||||
|
reason: [ |
||||||
|
{ |
||||||
|
required: true, |
||||||
|
message: "请填写不纳入信件原因", |
||||||
|
}, |
||||||
|
], |
||||||
|
}; |
||||||
|
const formRef = ref(); |
||||||
|
|
||||||
|
const props = defineProps({ |
||||||
|
data: { |
||||||
|
type: Object, |
||||||
|
default: {}, |
||||||
|
}, |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
const emits = defineEmits(["update:data", "submit", "close"]); |
||||||
|
|
||||||
|
function submit() { |
||||||
|
formRef.value.validate((valid) => { |
||||||
|
if (valid) { |
||||||
|
// 提交审批逻辑 |
||||||
|
const data = { ...form }; |
||||||
|
emits("update:data", data); |
||||||
|
emits("submit", "returnSubmit"); |
||||||
|
emits("close"); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,521 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog |
||||||
|
v-model="visible" |
||||||
|
:show-close="false" |
||||||
|
width="84vw" |
||||||
|
top="2vh" |
||||||
|
class="dialog-header-nopadding" |
||||||
|
style="--el-dialog-padding-primary: 10px; margin-bottom: 2vh" |
||||||
|
> |
||||||
|
<template #header="{ close, titleId, titleClass }"> |
||||||
|
<header class="flex between v-center dialog-header"> |
||||||
|
<div class="ml-16"> |
||||||
|
<span class="mr-8 second">{{report.contactName}} 的110举报投诉</span> |
||||||
|
</div> |
||||||
|
<div class="flex"> |
||||||
|
<!-- #FA8695 --> |
||||||
|
<el-button |
||||||
|
link |
||||||
|
circle |
||||||
|
size="large" |
||||||
|
@click="close" |
||||||
|
class="close-btn" |
||||||
|
> |
||||||
|
<template #icon> |
||||||
|
<icon |
||||||
|
name="el-icon-close" |
||||||
|
:size="26" |
||||||
|
:color="'#fff'" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
</template> |
||||||
|
<main v-loading="loading"> |
||||||
|
<el-row :gutter="20" style="height: 100%"> |
||||||
|
<el-col :span="8" style="height: 100%"> |
||||||
|
<div class="left-container h100"> |
||||||
|
</div> |
||||||
|
</el-col> |
||||||
|
<el-col :span="16" style="height: 100%"> |
||||||
|
<el-scrollbar max-height="100%" class="main-container"> |
||||||
|
<div> |
||||||
|
<div class="ml-20 mt-20 mt-15 mr-20 report-card"> |
||||||
|
<el-row > |
||||||
|
<h3>报警信息</h3> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2" > |
||||||
|
<span>电话机主</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>报警电话</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.contactPhone}}</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>摘机时间</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>话终时间</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.hzsj}}</span></el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>报警类型</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.jjlxdmms}}</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>报警坐标</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.bjzb}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>案发地址</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.afdd}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>报警人名</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.contactName}}</span></el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>性别</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>身份</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>联系电话</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.bjrlxdh}}</span></el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>警情标签</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>结警性质</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>接警性质</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.ysjqxzmc}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow"> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>管辖单位</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.gxdwmc}}</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>所属警区</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>乡镇街道</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item"></span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<el-row class="my-cow" > |
||||||
|
<el-col :span="2"> |
||||||
|
<span>警情级别</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.jqjbms}}</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="2"> |
||||||
|
<span>警情阶段</span> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<span class="span-item">{{report.jjdztms}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</div> |
||||||
|
<div class="ml-20 mt-20 mt-15 mr-20 report-card"> |
||||||
|
<el-row > |
||||||
|
<h3>报警内容</h3> |
||||||
|
</el-row> |
||||||
|
<el-row class="cow-content" > |
||||||
|
<el-col :span="20"> |
||||||
|
<span class="span-item">{{report.content}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</div> |
||||||
|
<div class="ml-20 mt-20 mt-15 mr-20 report-card"> |
||||||
|
<el-row > |
||||||
|
<h3>反馈结警</h3> |
||||||
|
</el-row> |
||||||
|
<el-row class="cow-content"> |
||||||
|
<el-col :span="20"> |
||||||
|
<span class="span-item">{{report.xchfnr}}</span> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div style="height: 20px"></div> |
||||||
|
</el-scrollbar> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</main> |
||||||
|
<footer class="flex between"> |
||||||
|
<div></div> |
||||||
|
<div style="margin-left: auto;"> |
||||||
|
<el-button |
||||||
|
type="danger" |
||||||
|
size="large" |
||||||
|
@click="addIntoBad" |
||||||
|
>不纳入信件</el-button |
||||||
|
> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
size="large" |
||||||
|
@click="addInto" |
||||||
|
>纳入信件</el-button |
||||||
|
> |
||||||
|
</div> |
||||||
|
</footer> |
||||||
|
|
||||||
|
</el-dialog> |
||||||
|
<Message ref="messageRef" /> |
||||||
|
<IntoBad |
||||||
|
v-model="returnShow" |
||||||
|
v-model:data="requestData" |
||||||
|
@submit="submitAction()" |
||||||
|
@close="returnShow = false" |
||||||
|
/> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import IntoBad from "./IntoBad.vue"; |
||||||
|
import { useDictData } from "@/hooks/useDictOptions"; |
||||||
|
import feedback from "@/utils/feedback"; |
||||||
|
import { timeDiffSeconds, formatTimeText, getDictLable } from "@/utils/util"; |
||||||
|
import { getReportDetail,addIntoMail,addIntoBadMail } from "@/api/report"; |
||||||
|
const loading = ref(false); |
||||||
|
const messageRef = ref(); |
||||||
|
|
||||||
|
const emits = defineEmits(["update:show", "update"]); |
||||||
|
const props = defineProps({ |
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
reportId: { |
||||||
|
type: String, |
||||||
|
default: "", |
||||||
|
}, |
||||||
|
}); |
||||||
|
const returnShow = ref(false); |
||||||
|
const visible = ref(props.show); |
||||||
|
const requestData = ref({}); |
||||||
|
watch(visible, (val) => { |
||||||
|
emits("update:show", val); |
||||||
|
}); |
||||||
|
watch( |
||||||
|
() => props.show, |
||||||
|
(val) => { |
||||||
|
visible.value = val; |
||||||
|
} |
||||||
|
); |
||||||
|
const report = ref({}); |
||||||
|
async function getDetail() { |
||||||
|
loading.value = true; |
||||||
|
// 信件详情 |
||||||
|
let data; |
||||||
|
data = await getReportDetail({id : props.reportId}); |
||||||
|
loading.value = false; |
||||||
|
report.value = data; |
||||||
|
} |
||||||
|
|
||||||
|
function addInto() { |
||||||
|
loading.value = true; |
||||||
|
addIntoMail({id : props.reportId}).then(() => { |
||||||
|
messageRef.value.showMessage("已成功纳入信件"); |
||||||
|
visible.value = false; |
||||||
|
emits("update"); |
||||||
|
loading.value = false; |
||||||
|
return; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function addIntoBad() { |
||||||
|
returnShow.value = true; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
function submitAction() { |
||||||
|
loading.value = true; |
||||||
|
returnShow.value = false; |
||||||
|
addIntoBadMail({id:props.reportId,reason:requestData.value.reason}).then(() => { |
||||||
|
messageRef.value.showMessage("不纳入信件成功"); |
||||||
|
emits("update"); |
||||||
|
visible.value = false; |
||||||
|
loading.value = false; |
||||||
|
return; |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
watch( |
||||||
|
() => props.reportId, |
||||||
|
(val) => { |
||||||
|
getDetail(); |
||||||
|
} |
||||||
|
); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
|
||||||
|
|
||||||
|
.cow-content{ |
||||||
|
margin-left: 20px; |
||||||
|
margin-bottom: 8px; |
||||||
|
} |
||||||
|
.my-cow{ |
||||||
|
margin-left: 100px; |
||||||
|
margin-bottom: 15px; |
||||||
|
} |
||||||
|
.span-item{ |
||||||
|
color: #333333; |
||||||
|
} |
||||||
|
.report-card{ |
||||||
|
border-bottom: 1px solid #F0F0F0; |
||||||
|
} |
||||||
|
.dialog-header { |
||||||
|
--dialog-header-font-color: #acb7ff; |
||||||
|
--dialog-header-font-size: 16px; |
||||||
|
background-color: var(--primary-color); |
||||||
|
color: #fff; |
||||||
|
padding: 1em; |
||||||
|
font-size: var(--dialog-header-font-size); |
||||||
|
.second { |
||||||
|
color: var(--dialog-header-font-color); |
||||||
|
} |
||||||
|
.step-box { |
||||||
|
.step { |
||||||
|
--setp-background-color: #3a4dc1; |
||||||
|
--setp-border-color: #4b60e4; |
||||||
|
--setp-font-color: var(--dialog-header-font-color); |
||||||
|
--setp-font-size: var(--dialog-header-font-size); |
||||||
|
padding-left: 30px; |
||||||
|
padding-right: 16px; |
||||||
|
&::after { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
&:first-child { |
||||||
|
padding-left: 16px; |
||||||
|
} |
||||||
|
&[active="true"] { |
||||||
|
--setp-background-color: #ff4242; |
||||||
|
--setp-border-color: #ff7474; |
||||||
|
--setp-font-color: #fff; |
||||||
|
} |
||||||
|
.bloder { |
||||||
|
font-size: 24px; |
||||||
|
font-weight: 700; |
||||||
|
margin-right: 8px; |
||||||
|
} |
||||||
|
span { |
||||||
|
z-index: 2; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.fav-btn { |
||||||
|
--el-font-size-base: 18px; |
||||||
|
--el-button-bg-color: #283aac; |
||||||
|
--el-button-hover-bg-color: #c20921; |
||||||
|
--el-button-hover-border-color: #fa8695; |
||||||
|
&.active { |
||||||
|
--el-button-bg-color: #c20921; |
||||||
|
} |
||||||
|
&:focus { |
||||||
|
background-color: var(--el-button-bg-color); |
||||||
|
} |
||||||
|
} |
||||||
|
.close-btn:hover { |
||||||
|
:deep() { |
||||||
|
.el-icon { |
||||||
|
color: #c20921; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.left-container { |
||||||
|
padding: 0 20px 0 40px; |
||||||
|
} |
||||||
|
.timer { |
||||||
|
--large-font-color: var(--primary-color); |
||||||
|
--default-font-color: #999; |
||||||
|
color: var(--default-font-color); |
||||||
|
.error { |
||||||
|
--large-font-color: #fff; |
||||||
|
--default-font-color: #fff; |
||||||
|
background: linear-gradient(180deg, #ff7158 0%, #f40000 100%); |
||||||
|
border: 4px solid #ffcdcd; |
||||||
|
border-radius: 11px; |
||||||
|
box-sizing: border-box; |
||||||
|
margin-bottom: 20px; |
||||||
|
height: 190px; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.timer-box { |
||||||
|
height: 210px; |
||||||
|
} |
||||||
|
.flow { |
||||||
|
.flow-header { |
||||||
|
background: #f5f6ff; |
||||||
|
padding: 8px; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
.flow-container { |
||||||
|
background-color: #eff0f5; |
||||||
|
padding: 12px 8px; |
||||||
|
min-height: 120px; |
||||||
|
font-size: 12px; |
||||||
|
.second { |
||||||
|
color: #999; |
||||||
|
} |
||||||
|
.primary { |
||||||
|
color: var(--primary-color); |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.flow-time { |
||||||
|
display: inline-flex; |
||||||
|
padding: 6px; |
||||||
|
margin-left: 6px; |
||||||
|
background-color: #f5f6ff; |
||||||
|
border-left: 2px solid #00d050; |
||||||
|
padding-left: 20px; |
||||||
|
&[danger="true"] { |
||||||
|
border-color: #ff0000; |
||||||
|
span { |
||||||
|
color: #ff0000; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.flow-info { |
||||||
|
position: relative; |
||||||
|
padding-left: 20px; |
||||||
|
&::before { |
||||||
|
display: block; |
||||||
|
content: ""; |
||||||
|
width: 10px; |
||||||
|
height: 10px; |
||||||
|
border-radius: 50%; |
||||||
|
background-color: #bfbfbf; |
||||||
|
position: absolute; |
||||||
|
left: 0; |
||||||
|
top: 50%; |
||||||
|
transform: translateY(-50%); |
||||||
|
} |
||||||
|
} |
||||||
|
& > div:first-child .flow-info::before { |
||||||
|
width: 12px; |
||||||
|
height: 12px; |
||||||
|
background-color: var(--primary-color); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
main { |
||||||
|
height: calc(96vh - 180px); |
||||||
|
} |
||||||
|
.main-container { |
||||||
|
margin-top: -30px; |
||||||
|
padding: 0 20px; |
||||||
|
} |
||||||
|
footer { |
||||||
|
padding: 10px 20px 0; |
||||||
|
} |
||||||
|
:deep() { |
||||||
|
h2 { |
||||||
|
font-size: 24px; |
||||||
|
font-weight: 500; |
||||||
|
color: var(--primary-color); |
||||||
|
margin: 12px 0; |
||||||
|
} |
||||||
|
h3 { |
||||||
|
font-size: 16px; |
||||||
|
font-weight: 500; |
||||||
|
color: var(--primary-color); |
||||||
|
} |
||||||
|
.content { |
||||||
|
font-size: 15px; |
||||||
|
padding: 8px; |
||||||
|
color: #333; |
||||||
|
white-space: pre-wrap; |
||||||
|
} |
||||||
|
|
||||||
|
.file-box { |
||||||
|
img { |
||||||
|
width: 80px; |
||||||
|
height: 80px; |
||||||
|
} |
||||||
|
} |
||||||
|
.el-button.is-disabled { |
||||||
|
--el-button-disabled-bg-color: #b0b0b0; |
||||||
|
--el-button-disabled-border-color: #b0b0b0; |
||||||
|
--el-button-disabled-text-color: #fff; |
||||||
|
} |
||||||
|
.card-info { |
||||||
|
background: #f4f5ff; |
||||||
|
border: 1px solid rgba(195, 202, 245, 1); |
||||||
|
padding: 12px 20px; |
||||||
|
} |
||||||
|
span[danger="true"] { |
||||||
|
color: var(--danger-color); |
||||||
|
} |
||||||
|
.timer-box .el-progress-circle { |
||||||
|
height: 240px !important; |
||||||
|
width: 240px !important; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,179 @@ |
|||||||
|
<template> |
||||||
|
<div class="container"> |
||||||
|
<header> |
||||||
|
<el-form :label-width="120"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="报警电话"> |
||||||
|
<el-input |
||||||
|
v-model="query.contactPhone" |
||||||
|
placeholder="请输入报警电话" |
||||||
|
clearable |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="话终时间"> |
||||||
|
<el-date-picker v-model="query.searchTime" value-format="YYYY-MM-DD HH:mm:ss" |
||||||
|
type="datetimerange" format="YYYY-MM-DD HH:mm:ss" range-separator="~" |
||||||
|
start-placeholder="开始日期" end-placeholder="结束日期" @change="handleMailTimeQuery" /> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="报警类型"> |
||||||
|
<el-select v-model="query.type" placeholder="请选择层级" clearable filterable> |
||||||
|
<el-option v-for="item in optionsData.type" :key="item.id" :label="item.labelName" |
||||||
|
:value="item.labelName" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="报警人名"> |
||||||
|
<el-input |
||||||
|
v-model="query.contactName" |
||||||
|
placeholder="请输入报警人名" |
||||||
|
clearable |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="接警性质"> |
||||||
|
<el-select v-model="query.nature" placeholder="请选择层级" clearable filterable> |
||||||
|
<el-option v-for="item in optionsData.nature" :key="item.id" :label="item.labelName" |
||||||
|
:value="item.labelName" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<el-form-item label="管辖单位"> |
||||||
|
<el-input |
||||||
|
v-model="query.unit" |
||||||
|
placeholder="请输入管辖单位" |
||||||
|
clearable |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
<div class="flex end mb-20"> |
||||||
|
<el-button type="primary" @click="getList">查询</el-button> |
||||||
|
<el-button @click="reset">重置</el-button> |
||||||
|
</div> |
||||||
|
</el-form> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
|
||||||
|
<div class="table-container"> |
||||||
|
<el-table :data="report" style="width: 100%" > |
||||||
|
<el-table-column prop="contactPhone" label="报警电话" align="center" width="160" /> |
||||||
|
<el-table-column prop="hzsj" label="话终时间" align="center" width="160" /> |
||||||
|
<el-table-column prop="contactName" label="报警人名" align="center" /> |
||||||
|
<el-table-column prop="jjlxdmms" label="报警类型" align="center"/> |
||||||
|
<el-table-column prop="ysjqxzmc" label="接警性质" align="center"/> |
||||||
|
<el-table-column prop="gxdwmc" label="管辖单位" align="center"/> |
||||||
|
<el-table-column prop="content" show-overflow-tooltip label="报警内容" align="center"/> |
||||||
|
<el-table-column prop="xchfnr" show-overflow-tooltip label="反馈结警" align="center"/> |
||||||
|
<el-table-column label="操作" fixed="right" align="center"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleMail(row)" |
||||||
|
>立即处理</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<div class="flex mt-4 end"> |
||||||
|
<el-pagination @size-change="getList" @current-change="getList" :current-page="query.current" |
||||||
|
:page-sizes="[10, 20, 50]" :page-size="query.size" v-model:current-page="query.current" |
||||||
|
layout="total,sizes, prev, pager, next, jumper" :total="totalSize.total"> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<ReportDialog v-model:show="showModel" :disabled="true" :reportId="activeReportId" |
||||||
|
@update="getList" /> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import ReportDialog from "./ReportDialog.vue"; |
||||||
|
import { getReport,naturelist,typelist } from '@/api/report' |
||||||
|
import { ref, reactive, watchEffect } from "vue"; |
||||||
|
import { useDictOptions } from '@/hooks/useDictOptions' |
||||||
|
|
||||||
|
const activeReportId = ref(""); |
||||||
|
const query = ref({ |
||||||
|
size: 10, |
||||||
|
current: 1 |
||||||
|
}); |
||||||
|
const totalSize = reactive({ |
||||||
|
total: 0, |
||||||
|
pages: 0 |
||||||
|
}) |
||||||
|
const activeTab = ref('table1'); |
||||||
|
const report = ref([]); |
||||||
|
const showModel = ref(false); |
||||||
|
function handleMail(row) { |
||||||
|
showModel.value = true; |
||||||
|
activeReportId.value = row.id; |
||||||
|
} |
||||||
|
function getList() { |
||||||
|
getReport(query.value).then((data) => { |
||||||
|
console.log("dddddddddddddddddddddddddddddddddddddddd") |
||||||
|
report.value = data.records; |
||||||
|
totalSize.total = data.total; |
||||||
|
totalSize.pages = data.pages; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function reset() { |
||||||
|
query.value = {} |
||||||
|
getList() |
||||||
|
} |
||||||
|
|
||||||
|
getList() |
||||||
|
|
||||||
|
const handleMailTimeQuery = (val: any) => { |
||||||
|
if (val) { |
||||||
|
query.value.searchStartTime = val[0]; |
||||||
|
query.value.searchEndTime = val[1]; |
||||||
|
} else { |
||||||
|
delete query.value.searchStartTime |
||||||
|
delete query.value.searchEndTime |
||||||
|
} |
||||||
|
} |
||||||
|
const { optionsData } = useDictOptions<{ |
||||||
|
type: any[] |
||||||
|
nature:any[] |
||||||
|
}>({ |
||||||
|
type: { |
||||||
|
api: typelist |
||||||
|
}, |
||||||
|
nature: { |
||||||
|
api: naturelist |
||||||
|
}, |
||||||
|
}) |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
.success { |
||||||
|
padding: 0 8px; |
||||||
|
height: 24px; |
||||||
|
line-height: 24px; |
||||||
|
text-align: center; |
||||||
|
|
||||||
|
.text { |
||||||
|
color: #128009; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.error { |
||||||
|
background-color: #ff0000; |
||||||
|
color: #fff; |
||||||
|
padding: 0 8px; |
||||||
|
height: 24px; |
||||||
|
line-height: 24px; |
||||||
|
border-radius: 20px; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
</style> |
||||||
Loading…
Reference in new issue