644 lines
20 KiB
Vue
644 lines
20 KiB
Vue
<template>
|
||
<section class="auditDetail">
|
||
<ai-detail>
|
||
<ai-title slot="title" title="详情" isShowBack @onBackClick="$router.push({query:{}})" isShowBottomBorder/>
|
||
<template #content>
|
||
<ai-card title="基本信息">
|
||
<div slot="content">
|
||
<el-row type="flex">
|
||
<div class="detail-info fill">
|
||
<h3 class="name">{{ baseInfo.name || '-' }}</h3>
|
||
<div class="detail-left fill">
|
||
<div class="info">
|
||
<span class="label">性别:</span>
|
||
<span class="value">{{ dict.getLabel('sex', baseInfo.sex) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">出生日期:</span>
|
||
<span class="value">{{ birthday ? birthday.substring(0, 10) : '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">籍贯:</span>
|
||
<span class="value">{{ baseInfo.birthplaceAreaName || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">文化程度:</span>
|
||
<span class="value">{{ dict.getLabel('education', baseInfo.education) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">政治面貌:</span>
|
||
<span
|
||
class="value"
|
||
>{{ dict.getLabel('politicsStatus', baseInfo.politicsStatus) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">宗教信仰:</span>
|
||
<span class="value">{{ dict.getLabel('faithType', baseInfo.faithType) || '-' }}</span>
|
||
</div>
|
||
</div>
|
||
<div class="detail-right fill">
|
||
<div class="info">
|
||
<span class="label">身份证号:</span>
|
||
<span class="value">
|
||
<ai-id mode="show" v-model="baseInfo.idNumber" right-btn class="line-center"></ai-id>
|
||
</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">年龄:</span>
|
||
<span class="value">{{ baseInfo.age }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">民族:</span>
|
||
<span class="value">{{ dict.getLabel('nation', baseInfo.nation) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">婚姻状况:</span>
|
||
<span
|
||
class="value"
|
||
>{{ dict.getLabel('maritalStatus', baseInfo.maritalStatus) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">兵役状况:</span>
|
||
<span
|
||
class="value"
|
||
>{{ dict.getLabel('militaryStatus', baseInfo.militaryStatus) || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">职业:</span>
|
||
<span class="value">{{ dict.getLabel('job', baseInfo.job) || '-' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<ai-avatar v-model="baseInfo.photo" :editable="false"/>
|
||
</el-row>
|
||
</div>
|
||
</ai-card>
|
||
|
||
<ai-card title="联络信息">
|
||
<div slot="content" style="margin-top: 16px;margin-bottom:24px">
|
||
<div class="info" style="margin-bottom:8px">
|
||
<span class="label">联系方式:</span>
|
||
<span class="value">{{ baseInfo.phone || '-' }}</span>
|
||
</div>
|
||
<div class="info">
|
||
<span class="label">现住址:</span>
|
||
<span class="value">{{ baseInfo.currentAreaName + baseInfo.currentAddress || "-" }}</span>
|
||
</div>
|
||
</div>
|
||
</ai-card>
|
||
|
||
<ai-card title="户籍信息">
|
||
<div slot="content" style="margin-top: 16px;margin-bottom:24px">
|
||
<div class="detail-info">
|
||
<div class="detail-left fill">
|
||
<div class="info">
|
||
<span class="label">是否户主:</span>
|
||
<span class="value">{{ dict.getLabel('householdName', baseInfo.householdName) || '-' }}</span>
|
||
</div>
|
||
</div>
|
||
<div class="info fill" v-if="baseInfo.householdName==0">
|
||
<span class="label">与户主关系:</span>
|
||
<span class="value">{{ dict.getLabel('householdRelation', baseInfo.householdRelation) || '-' }}</span>
|
||
</div>
|
||
<div class="info fill" v-if="baseInfo.householdName==0">
|
||
<span class="label">户主身份证号:</span>
|
||
<span class="value">
|
||
<ai-id mode="show" v-model="baseInfo.householdIdNumber" right-btn></ai-id>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<div class="detail-info-p info">
|
||
<span class="label">户籍地:</span>
|
||
<span class="value">
|
||
{{ baseInfo.householdAreaName + (baseInfo.householdAddress ? baseInfo.householdAddress : "") }}
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</ai-card>
|
||
|
||
<ai-card title="家庭成员">
|
||
<div slot="content">
|
||
<el-table
|
||
border
|
||
ref="multipleTable"
|
||
:data="family"
|
||
style="margin-top:8px;"
|
||
|
||
header-cell-class-name="table-header"
|
||
tooltip-effect="light"
|
||
row-class-name="table-row"
|
||
cell-class-name="table-cell"
|
||
>
|
||
<el-table-column align="center" prop="name" label="与户主关系">
|
||
<template slot-scope="scope">
|
||
<span>{{
|
||
scope.row.householdRelation ? dict.getLabel('householdRelation', scope.row.householdRelation) : "户主"
|
||
}}</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column prop="name" label="姓名" align="center" show-overflow-tooltip></el-table-column>
|
||
<el-table-column prop="idNumber" label="性别" align="center" show-overflow-tooltip>
|
||
<template slot-scope="scope">
|
||
<span>{{ parseInt(scope.row.idNumber.substr(16, 1)) % 2 == 1 ? '男' : '女' }}</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column prop="age" label="年龄" align="center" show-overflow-tooltip></el-table-column>
|
||
<el-table-column
|
||
prop="idNumber"
|
||
label="身份证号"
|
||
align="center"
|
||
width="200"
|
||
show-overflow-tooltip>
|
||
<template slot-scope="{row}">
|
||
<ai-id mode="show" v-model="row.idNumber" :showEyes="false"/>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column prop="address" label="操作" align="center" show-overflow-tooltip>
|
||
<template slot-scope="scope">
|
||
<el-button type="text" title="查看详情" class="dict-list-operation" @click="showFamily(scope.row)">详情</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
<div slot="empty" class="no-data" style="height:160px;"/>
|
||
</el-table>
|
||
</div>
|
||
</ai-card>
|
||
<ai-card title="处理结果" v-if="baseInfo.auditStatus > '0'">
|
||
<div slot="content" style="margin-top: 16px;margin-bottom:24px">
|
||
<div class="detail-info">
|
||
<div class="detail-left fill">
|
||
<div class="info">
|
||
<span class="label">审核结果:</span>
|
||
<span class="value">{{ baseInfo.auditStatus === '1' ? '通过' : '拒绝' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="detail-info">
|
||
<div class="info fill">
|
||
<span class="label">审核意见:</span>
|
||
<span class="value">{{ baseInfo.auditOpinion || '-' }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</ai-card>
|
||
<ai-dialog
|
||
:visible.sync="isShow"
|
||
width="800px"
|
||
@close="onClose"
|
||
title="事件审核"
|
||
@onConfirm="onConfirm">
|
||
<el-form class="ai-form" label-width="120px" :model="form" ref="form">
|
||
<el-form-item label="是否通过审核" prop="pass" style="width: 100%;" :rules="[{ required: true, message: '请选择是否通过审核' }]">
|
||
<el-radio-group v-model="form.pass" @change="onStatusChange">
|
||
<el-radio label="0">否</el-radio>
|
||
<el-radio label="1">是</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
<el-form-item label="审核意见" prop="opinion" style="width: 100%;" :rules="[{ required: form.pass === '0', message: '请输入审核意见' }]">
|
||
<el-input type="textarea" :rows="5" :maxlength="200" v-model="form.opinion" clearable placeholder="请输入审核意见" show-word-limit></el-input>
|
||
</el-form-item>
|
||
</el-form>
|
||
</ai-dialog>
|
||
</template>
|
||
<template #footer >
|
||
<el-button @click="cancelFn()">取消</el-button>
|
||
<el-button type="primary" @click="isShow = true" v-if="baseInfo.auditStatus === '0'">审核</el-button>
|
||
</template>
|
||
</ai-detail>
|
||
|
||
<el-dialog class="deleteStyle" :visible.sync="familyDialog" width="720px" title="家庭成员信息" top="30vh">
|
||
<el-row type="flex" justify="space-between">
|
||
<ul>
|
||
<li>
|
||
<span>姓名:</span>
|
||
<p>{{ familyInfo.name }}</p>
|
||
</li>
|
||
<li>
|
||
<span>身份证号:</span>
|
||
<p>
|
||
<ai-id mode="show" v-model="familyInfo.idNumber" right-btn class="line-center"></ai-id>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<span>性别:</span>
|
||
<p>{{ dict.getLabel('sex', familyInfo.sex) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>年龄:</span>
|
||
<p>{{ familyInfo.age }}</p>
|
||
</li>
|
||
<li>
|
||
<span>联系方式:</span>
|
||
<p>{{ familyInfo.phone }}</p>
|
||
</li>
|
||
<li>
|
||
<span>民族:</span>
|
||
<p>{{ dict.getLabel('nation', familyInfo.nation) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>籍贯:</span>
|
||
<p>{{ familyInfo.birthplaceAreaName }}</p>
|
||
</li>
|
||
<li>
|
||
<span>文化程度:</span>
|
||
<p>{{ dict.getLabel('education', familyInfo.education) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>婚姻状况:</span>
|
||
<p>{{ dict.getLabel('maritalStatus', familyInfo.maritalStatus) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>政治面貌:</span>
|
||
<p>{{ dict.getLabel('politicsStatus', familyInfo.politicsStatus) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>兵役状况:</span>
|
||
<p>{{ dict.getLabel('militaryStatus', familyInfo.militaryStatus) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>宗教信仰:</span>
|
||
<p>{{ dict.getLabel('faithType', familyInfo.faithType) }}</p>
|
||
</li>
|
||
<li>
|
||
<span>职业:</span>
|
||
<p>{{ dict.getLabel('job', familyInfo.job) }}</p>
|
||
</li>
|
||
<li style="width:100%;">
|
||
<span>现住址:</span>
|
||
<p>{{ familyInfo.currentAreaName + familyInfo.currentAddress }}</p>
|
||
</li>
|
||
</ul>
|
||
<div class="img_block">
|
||
<ai-avatar v-model="familyInfo.imgUrl" :editable="false"/>
|
||
</div>
|
||
</el-row>
|
||
<div slot="footer" style="text-align: center;">
|
||
<el-button style="width:92px" size="small" @click="familyDialog = false">关闭
|
||
</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
</section>
|
||
</template>
|
||
<script>
|
||
import {mapState} from "vuex";
|
||
|
||
export default {
|
||
name: "audtiDetail",
|
||
props: {
|
||
instance: Function,
|
||
dict: Object,
|
||
permissions: Function,
|
||
detail: Object,
|
||
active: String
|
||
},
|
||
data() {
|
||
return {
|
||
buildingCascader: true,
|
||
houseCascader: true,
|
||
navId: 0,
|
||
form: {
|
||
opinion: '',
|
||
pass: ''
|
||
},
|
||
isShow: false,
|
||
baseInfo: {
|
||
registerStatus: "",
|
||
tips: [],
|
||
age: "",
|
||
birthplaceAreaId: "",
|
||
currentAddress: "",
|
||
currentAreaId: "",
|
||
education: "",
|
||
faithType: "",
|
||
fileStatus: "",
|
||
householdAddress: "",
|
||
householdAreaId: "",
|
||
householdIdNumber: "",
|
||
householdName: "",
|
||
householdRelation: "",
|
||
id: "",
|
||
idNumber: "",
|
||
job: "",
|
||
logoutDescription: "",
|
||
logoutReason: "",
|
||
logoutTime: "",
|
||
logoutUserId: "",
|
||
maritalStatus: "",
|
||
militaryStatus: "",
|
||
name: "",
|
||
nation: "",
|
||
phone: "",
|
||
photo: "",
|
||
politicsStatus: "",
|
||
sex: ""
|
||
},
|
||
family: [],
|
||
familyDialog: false,
|
||
familyInfo: {},
|
||
writeoffDialog: false,
|
||
writeInfo: {
|
||
id: "",
|
||
logoutReason: "",
|
||
logoutDescription: "",
|
||
fileStatus: "1"
|
||
},
|
||
birthday: "",
|
||
imgUrl: "",
|
||
fileList: [],
|
||
showEdit1: false,
|
||
showEdit2: false,
|
||
showEdit3: false,
|
||
showEdit4: false,
|
||
disabledLevel: 0
|
||
};
|
||
},
|
||
computed: {
|
||
...mapState(["user"]),
|
||
showDetail() {
|
||
return !!this.$route.query?.id
|
||
},
|
||
tipOps() {
|
||
return this.dict.getDict("residentTipType") || []
|
||
}
|
||
},
|
||
methods: {
|
||
householdRelationChange() {
|
||
this.baseInfo.householdIdNumber = "";
|
||
this.baseInfo.householdRelation = "";
|
||
},
|
||
|
||
onConfirm () {
|
||
this.$refs.form.validate(v => {
|
||
if (v) {
|
||
this.instance.post('/app/appresident/examine', null, {
|
||
params: {
|
||
...this.form,
|
||
id: this.$route.query.id
|
||
}
|
||
}).then(res => {
|
||
if (res?.code == 0) {
|
||
this.isShow = false
|
||
this.searchDetail(this.$route.query.id)
|
||
this.$message.success('审核成功!')
|
||
}
|
||
})
|
||
}
|
||
})
|
||
},
|
||
|
||
onStatusChange () {
|
||
this.$refs.form.clearValidate()
|
||
},
|
||
|
||
onClose () {
|
||
this.form.pass = ''
|
||
this.form.opinion = ''
|
||
this.id = ''
|
||
},
|
||
|
||
cancelFn() {
|
||
this.$refs.ruleForm?.resetFields()
|
||
this.$router.push({query: {}});
|
||
},
|
||
|
||
searchDetail(id, type) {
|
||
this.instance.post(`/app/appresident/detail`, null, {
|
||
params: {id}
|
||
}).then(res => {
|
||
if (res?.data) {
|
||
let {currentHouseList, householdHouseList, tips} = res.data.resident
|
||
this.baseInfo = {
|
||
...res.data.resident,
|
||
currentHouseList: currentHouseList?.split("|"),
|
||
householdHouseList: householdHouseList?.split("|"),
|
||
tips: tips ? tips.split("|") : [],
|
||
};
|
||
this.family = res.data.family;
|
||
this.IdCard(this.baseInfo.idNumber);
|
||
if (type == "family") {
|
||
this.familyDialog = false;
|
||
}
|
||
}
|
||
});
|
||
},
|
||
showFamily(row) {
|
||
this.familyInfo = row;
|
||
if (this.familyInfo.photo) {
|
||
this.familyInfo.imgUrl = this.familyInfo.photo.split(";")[0];
|
||
} else {
|
||
this.familyInfo.imgUrl = "";
|
||
}
|
||
this.familyDialog = true;
|
||
},
|
||
beforeWriteOff() {
|
||
this.writeoffDialog = true;
|
||
},
|
||
idChange(val) {
|
||
if (val.length == 18) {
|
||
this.IdCard(val);
|
||
}
|
||
},
|
||
IdCard(UUserCard) {
|
||
if (UUserCard) {
|
||
let arr = [];
|
||
//获取出生日期
|
||
let birth =
|
||
UUserCard.substring(6, 10) +
|
||
"-" +
|
||
UUserCard.substring(10, 12) +
|
||
"-" +
|
||
UUserCard.substring(12, 14) +
|
||
" 00:00:00";
|
||
arr.push(birth);
|
||
|
||
if (parseInt(UUserCard.substr(16, 1)) % 2 == 1) {
|
||
//男
|
||
arr.push("1");
|
||
} else {
|
||
//女
|
||
arr.push("0");
|
||
}
|
||
//获取年龄
|
||
const myDate = new Date();
|
||
const month = myDate.getMonth() + 1;
|
||
const day = myDate.getDate();
|
||
let age = myDate.getFullYear() - UUserCard.substring(6, 10) - 1;
|
||
if (
|
||
UUserCard.substring(10, 12) < month ||
|
||
(UUserCard.substring(10, 12) == month &&
|
||
UUserCard.substring(12, 14) <= day)
|
||
) {
|
||
age++;
|
||
}
|
||
arr.push(age);
|
||
this.baseInfo.sex = arr[1];
|
||
this.baseInfo.age = arr[2];
|
||
this.birthday = arr[0];
|
||
}
|
||
}
|
||
},
|
||
created() {
|
||
this.searchDetail(this.$route.query.id);
|
||
}
|
||
};
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.auditDetail {
|
||
height: 100%;
|
||
font-size: 14px;
|
||
|
||
.el-form-item {
|
||
margin-bottom: 10px;
|
||
|
||
.el-form-item {
|
||
margin-top: 10px;
|
||
}
|
||
|
||
.el-cascader, .el-select, .el-date-editor {
|
||
width: 100%;
|
||
}
|
||
}
|
||
|
||
::v-deep .el-form-item__error {
|
||
position: static;
|
||
}
|
||
|
||
::v-deep .content-right {
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 10px;
|
||
padding-bottom: 80px;
|
||
|
||
.ailist-title {
|
||
padding: 0;
|
||
}
|
||
|
||
.above {
|
||
width: 100%;
|
||
overflow: hidden;
|
||
|
||
.left {
|
||
width: 380px;
|
||
float: left;
|
||
}
|
||
|
||
.right {
|
||
width: 380px;
|
||
float: left;
|
||
|
||
.pictrue {
|
||
display: flex;
|
||
height: 120px;
|
||
|
||
img {
|
||
width: 104px;
|
||
height: 120px;
|
||
border-radius: 2px;
|
||
border: solid 1px #d0d4dc;
|
||
}
|
||
|
||
.upload-demo {
|
||
padding: 0 15px;
|
||
}
|
||
|
||
.el-button {
|
||
width: 104px;
|
||
height: 32px;
|
||
background-color: #ffffff;
|
||
border-radius: 2px;
|
||
border: solid 1px #8899bb;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
ul {
|
||
flex: 1;
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
padding: 0;
|
||
margin: 0;
|
||
|
||
li {
|
||
display: flex;
|
||
align-items: center;
|
||
min-height: 32px;
|
||
width: 50%;
|
||
|
||
span {
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
p {
|
||
margin: 0
|
||
}
|
||
}
|
||
}
|
||
|
||
.img_block {
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.detail-info {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
|
||
h3 {
|
||
width: 100%;
|
||
flex-shrink: 0
|
||
}
|
||
|
||
}
|
||
|
||
.info {
|
||
display: flex;
|
||
align-items: center;
|
||
line-height: 1.4;
|
||
margin-bottom: 16px;
|
||
|
||
.label {
|
||
flex-shrink: 0;
|
||
width: 100px;
|
||
margin-right: 40px;
|
||
text-align: right;
|
||
color: #888;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.value {
|
||
color: #222;
|
||
font-size: 14px;
|
||
word-break: break-all;
|
||
}
|
||
}
|
||
|
||
.fill {
|
||
flex: 1;
|
||
min-width: 50%;
|
||
}
|
||
|
||
.el-checkbox-group {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 10px;
|
||
|
||
.el-checkbox {
|
||
margin: 0 !important;
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
::v-deep .el-checkbox__label {
|
||
font-size: 14px;
|
||
}
|
||
}
|
||
}
|
||
|
||
.tags {
|
||
gap: 10px;
|
||
flex-wrap: wrap;
|
||
}
|
||
}
|
||
</style>
|