居民审核
This commit is contained in:
195
packages/shandong/AppResident/AppResident.vue
Normal file
195
packages/shandong/AppResident/AppResident.vue
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
<template>
|
||||||
|
<section class="AppResident">
|
||||||
|
<ai-list v-if="!showDetail" isTabs>
|
||||||
|
<ai-title slot="title" title="居民档案" :instance="instance" :hideLevel="hideLevel-1" isShowArea
|
||||||
|
v-model="areaId"/>
|
||||||
|
<template #tabs>
|
||||||
|
<el-tabs v-model="activeName">
|
||||||
|
<el-tab-pane v-for="op in tabs" :key="op.value" :name="op.value" :label="op.label">
|
||||||
|
<component v-if="op.value==activeName" :is="op.comp" :areaId="areaId" :active="activeName" :instance="instance" :dict="dict" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</template>
|
||||||
|
</ai-list>
|
||||||
|
<component v-else :is="detailComponent" :instance="instance" :dict="dict" :permissions="permissions"/>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {mapState} from "vuex";
|
||||||
|
import localResident from "./localResident";
|
||||||
|
import ListTpl from "./listTpl";
|
||||||
|
import MobileResident from "./mobileResident";
|
||||||
|
import ResidentSta from "./residentSta";
|
||||||
|
import auditList from "./auditList";
|
||||||
|
import auditDetail from "./audtiDetail";
|
||||||
|
export default {
|
||||||
|
name: "AppResident",
|
||||||
|
label: "居民档案",
|
||||||
|
props: {
|
||||||
|
instance: Function,
|
||||||
|
dict: Object,
|
||||||
|
permissions: Function,
|
||||||
|
},
|
||||||
|
provide() {
|
||||||
|
return {
|
||||||
|
resident: this
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {ResidentSta, MobileResident, ListTpl, localResident, auditList, audtiDetail: auditDetail},
|
||||||
|
computed: {
|
||||||
|
...mapState(["user"]),
|
||||||
|
tabs() {
|
||||||
|
let details = {
|
||||||
|
"本地居民": localResident,
|
||||||
|
"流动人员": MobileResident,
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
...this.dict.getDict('residentType').map(e => ({
|
||||||
|
label: e.dictName,
|
||||||
|
value: e.dictValue,
|
||||||
|
comp: ListTpl,
|
||||||
|
detail: details[e.dictName]
|
||||||
|
})),
|
||||||
|
{label: "居民统计", value: "3", comp: ResidentSta},
|
||||||
|
{label: "居民档案审核", value: "4", comp: auditList, detail: auditDetail}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
hideLevel() {
|
||||||
|
return this.user.info.areaList?.length || 0
|
||||||
|
},
|
||||||
|
showDetail() {
|
||||||
|
this.activeName = this.activeName || this.$route.query?.type || 0
|
||||||
|
return !!this.$route.query?.type || !!this.$route.query?.id
|
||||||
|
},
|
||||||
|
detailComponent() {
|
||||||
|
return this.tabs.find(e => e.value == this.activeName)?.detail || ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
areaId: '',
|
||||||
|
activeName: "0",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.activeName = this.$route.query?.type
|
||||||
|
this.areaId = JSON.parse(JSON.stringify(this.user.info.areaId))
|
||||||
|
this.dict.load('residentType', "sex", "faithType", "fileStatus",
|
||||||
|
"legality",
|
||||||
|
"education",
|
||||||
|
"maritalStatus",
|
||||||
|
"politicsStatus",
|
||||||
|
"householdName",
|
||||||
|
"nation",
|
||||||
|
"liveReason",
|
||||||
|
"certificateType",
|
||||||
|
"job",
|
||||||
|
"militaryStatus",
|
||||||
|
"householdRelation",
|
||||||
|
"logoutReason",
|
||||||
|
"nation",
|
||||||
|
"registerStatus",
|
||||||
|
"residentTipType",
|
||||||
|
"liveCategory",
|
||||||
|
"livePeriod",
|
||||||
|
"language",
|
||||||
|
"nationality");
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.AppResident {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(243, 246, 249, 1);
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content-box {
|
||||||
|
padding: 16px 0;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: #f3f6f9;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: solid 1px #d8e0e8;
|
||||||
|
padding: 16px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
|
.searchBar {
|
||||||
|
padding: 8px 0;
|
||||||
|
|
||||||
|
.el-col {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: solid 1px #d0d4dc;
|
||||||
|
border-right: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.addClass {
|
||||||
|
height: 64px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataStatistic {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 16px;
|
||||||
|
padding: 0 16px 16px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.above {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.data-item {
|
||||||
|
width: 32%;
|
||||||
|
height: 380px;
|
||||||
|
background: rgba(255, 255, 255, 1);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
p {
|
||||||
|
position: absolute;
|
||||||
|
right: 16px;
|
||||||
|
top: 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
span:nth-of-type(1) {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
span:nth-of-type(2) {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
212
packages/shandong/AppResident/auditList.vue
Normal file
212
packages/shandong/AppResident/auditList.vue
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
<template>
|
||||||
|
<ai-list isTabs>
|
||||||
|
<template slot="content">
|
||||||
|
<ai-search-bar>
|
||||||
|
<template #left>
|
||||||
|
<ai-select
|
||||||
|
v-model="search.auditStatus"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择审核状态"
|
||||||
|
:selectList="dict.getDict('auditStatus')"
|
||||||
|
@change="search.current = 1, getList()">
|
||||||
|
</ai-select>
|
||||||
|
<el-date-picker
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
v-model="search.createTimeStart"
|
||||||
|
type="date"
|
||||||
|
size="small"
|
||||||
|
unlink-panels
|
||||||
|
placeholder="选择开始日期"
|
||||||
|
@change="search.current = 1, getList()"
|
||||||
|
/>
|
||||||
|
<el-date-picker
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
v-model="search.createTimeEnd"
|
||||||
|
type="date"
|
||||||
|
size="small"
|
||||||
|
unlink-panels
|
||||||
|
placeholder="选择结束日期"
|
||||||
|
@change="search.current = 1, getList()"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template #right>
|
||||||
|
<el-input
|
||||||
|
v-model="search.con"
|
||||||
|
size="small"
|
||||||
|
placeholder="姓名/身份证/联系方式"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="search.current = 1, getList()"
|
||||||
|
@clear="search.current = 1, search.con = '', getList()"
|
||||||
|
suffix-icon="iconfont iconSearch">
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
</ai-search-bar>
|
||||||
|
<ai-table
|
||||||
|
:tableData="tableData"
|
||||||
|
:col-configs="colConfigs"
|
||||||
|
:total="total"
|
||||||
|
style="margin-top: 6px;"
|
||||||
|
:current.sync="search.current"
|
||||||
|
:size.sync="search.size"
|
||||||
|
@getList="getList">
|
||||||
|
<el-table-column slot="options" width="160px" fixed="right" label="操作" align="center">
|
||||||
|
<template slot-scope="{ row }">
|
||||||
|
<div class="table-options">
|
||||||
|
<el-button type="text" @click="toAudit(row.id)" :disabled="row.auditStatus !== '0'">审批</el-button>
|
||||||
|
<el-button type="text" @click="toDetail(row.id)">详情</el-button>
|
||||||
|
<el-button type="text" @click="remove(row.id)" :disabled="row.auditStatus === '0'">删除</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</ai-table>
|
||||||
|
<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">
|
||||||
|
<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' ? true : false, message: '请输入审核意见' }]">
|
||||||
|
<el-input type="textarea" :rows="5" :maxlength="500" v-model="form.opinion" clearable placeholder="请输入审核意见" show-word-limit></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ai-dialog>
|
||||||
|
</template>
|
||||||
|
</ai-list>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState } from 'vuex'
|
||||||
|
export default {
|
||||||
|
name: 'auditList',
|
||||||
|
|
||||||
|
props: {
|
||||||
|
instance: Function,
|
||||||
|
dict: Object,
|
||||||
|
areaId: String
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
search: {
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
auditStatus: '',
|
||||||
|
con: '',
|
||||||
|
createTimeEnd: '',
|
||||||
|
createTimeStart: ''
|
||||||
|
},
|
||||||
|
isShow: false,
|
||||||
|
currIndex: -1,
|
||||||
|
areaList: [],
|
||||||
|
total: 10,
|
||||||
|
form: {
|
||||||
|
opinion: '',
|
||||||
|
pass: ''
|
||||||
|
},
|
||||||
|
id: '',
|
||||||
|
colConfigs: [
|
||||||
|
{ prop: 'name', label: '申请人', align: 'left' },
|
||||||
|
{ prop: 'createTime', label: '申请时间', align: 'center' },
|
||||||
|
{ prop: 'sex', label: '性别', align: 'center', formart: v => this.dict.getLabel('sex', v) },
|
||||||
|
{ prop: 'idNumber', label: '身份证号', align: 'center' },
|
||||||
|
{ prop: 'age', label: '年龄', align: 'center' },
|
||||||
|
{ prop: 'auditStatus', label: '审批结果', align: 'center', formart: v => this.dict.getLabel('auditStatus', v) },
|
||||||
|
{ prop: 'auditUserName', label: '审批人', align: 'center' },
|
||||||
|
{ prop: 'auditTime', label: '审批时间', align: 'center' }
|
||||||
|
],
|
||||||
|
tableData: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
...mapState(['user'])
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
areaId () {
|
||||||
|
this.search.current = 1
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
this.search.areaId = this.user.info.areaId
|
||||||
|
this.areaName = this.user.info.areaName
|
||||||
|
|
||||||
|
this.dict.load('auditStatus').then(() => {
|
||||||
|
this.getList()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
this.instance.post(`/app/appresident/list`, null, {
|
||||||
|
params: {
|
||||||
|
...this.search,
|
||||||
|
areaId: this.areaId
|
||||||
|
}
|
||||||
|
}).then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.tableData = res.data.records
|
||||||
|
this.total = res.data.total
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
toAudit (id) {
|
||||||
|
this.id = id
|
||||||
|
this.isShow = true
|
||||||
|
},
|
||||||
|
|
||||||
|
onClose () {
|
||||||
|
this.form.pass = ''
|
||||||
|
this.form.opinion = ''
|
||||||
|
this.id = ''
|
||||||
|
},
|
||||||
|
|
||||||
|
onConfirm () {
|
||||||
|
this.$refs.form.validate(v => {
|
||||||
|
if (v) {
|
||||||
|
this.instance.post('/app/appresident/examine', null, {
|
||||||
|
params: {
|
||||||
|
...this.form,
|
||||||
|
id: this.id
|
||||||
|
}
|
||||||
|
}).then(res => {
|
||||||
|
if (res?.code == 0) {
|
||||||
|
this.isShow = false
|
||||||
|
this.getList()
|
||||||
|
this.$message.success('审核成功!')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
remove(id) {
|
||||||
|
this.$confirm('确定删除该数据?').then(() => {
|
||||||
|
this.instance.post(`/app/appresident/delete?ids=${id}`).then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.$message.success('删除成功!')
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
toDetail (id) {
|
||||||
|
this.$router.push({query: {type: '4', id: id}})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
</style>
|
||||||
639
packages/shandong/AppResident/audtiDetail.vue
Normal file
639
packages/shandong/AppResident/audtiDetail.vue
Normal file
@@ -0,0 +1,639 @@
|
|||||||
|
<template>
|
||||||
|
<section class="addAborigines">
|
||||||
|
<ai-detail>
|
||||||
|
<ai-title slot="title" title="详情" isShowBack @onBackClick="$router.push({query:{}})" isShowBottomBorder></ai-title>
|
||||||
|
<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="处理结果">
|
||||||
|
<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">
|
||||||
|
<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' ? true : false, message: '请输入审核意见' }]">
|
||||||
|
<el-input type="textarea" :rows="5" :maxlength="500" 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('审核成功!')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
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>
|
||||||
|
.addAborigines {
|
||||||
|
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>
|
||||||
352
packages/shandong/AppResident/listTpl.vue
Normal file
352
packages/shandong/AppResident/listTpl.vue
Normal file
@@ -0,0 +1,352 @@
|
|||||||
|
<template>
|
||||||
|
<section class="listTpl">
|
||||||
|
<ai-list isTabs>
|
||||||
|
<template #content>
|
||||||
|
<ai-search-bar>
|
||||||
|
<template #left>
|
||||||
|
<ai-select placeholder="档案状态" v-model="search.fileStatus"
|
||||||
|
:selectList="resident.dict.getDict('fileStatus')"
|
||||||
|
@change="page.current=1,refreshTable()"/>
|
||||||
|
<ai-select placeholder="性别" v-model="search.sex"
|
||||||
|
:selectList="resident.dict.getDict('sex')"
|
||||||
|
@change="page.current=1,refreshTable()"/>
|
||||||
|
<ai-select placeholder="文化程度" v-model="search.education"
|
||||||
|
:selectList="resident.dict.getDict('education')"
|
||||||
|
@change="page.current=1,refreshTable()"/>
|
||||||
|
<ai-select placeholder="婚姻状况" v-model="search.maritalStatus"
|
||||||
|
:selectList="resident.dict.getDict('maritalStatus')"
|
||||||
|
@change="page.current=1,refreshTable()"/>
|
||||||
|
<ai-select placeholder="民族" v-model="search.nation"
|
||||||
|
:selectList="resident.dict.getDict('nation')"
|
||||||
|
@change="page.current=1,refreshTable()"/>
|
||||||
|
<el-date-picker
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
v-model="search.birthStart"
|
||||||
|
style="width:250px;border-radius:0;"
|
||||||
|
type="date"
|
||||||
|
size="small"
|
||||||
|
unlink-panels
|
||||||
|
placeholder="选择出生开始日期"
|
||||||
|
@change="page.current=1,refreshTable()"
|
||||||
|
/>
|
||||||
|
<el-date-picker
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
v-model="search.birthEnd"
|
||||||
|
style="width:250px;border-radius:0;"
|
||||||
|
type="date"
|
||||||
|
size="small"
|
||||||
|
placeholder="选择出生结束日期"
|
||||||
|
unlink-panels
|
||||||
|
@change="page.current=1,refreshTable()"
|
||||||
|
/>
|
||||||
|
<el-select
|
||||||
|
v-model="search.politicsStatus"
|
||||||
|
placeholder="政治面貌"
|
||||||
|
size="small"
|
||||||
|
@change="page.current=1,refreshTable()"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item,i) in resident.dict.getDict('politicsStatus')"
|
||||||
|
:key="i"
|
||||||
|
:label="item.dictName"
|
||||||
|
:value="item.dictValue"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
<el-select
|
||||||
|
v-model="search.householdName"
|
||||||
|
placeholder="是否户主"
|
||||||
|
size="small"
|
||||||
|
@change="page.current=1,refreshTable()"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item,i) in resident.dict.getDict('householdName')"
|
||||||
|
:key="i"
|
||||||
|
:label="item.dictName"
|
||||||
|
:value="item.dictValue"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
<el-select
|
||||||
|
v-model="search.faithType"
|
||||||
|
placeholder="宗教信仰"
|
||||||
|
@change="page.current=1,refreshTable()"
|
||||||
|
size="small"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item,i) in resident.dict.getDict('faithType')"
|
||||||
|
:key="i"
|
||||||
|
:label="item.dictName"
|
||||||
|
:value="item.dictValue"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
<template #right>
|
||||||
|
<el-input
|
||||||
|
size="small"
|
||||||
|
v-model="search.con"
|
||||||
|
placeholder="姓名/身份证/联系方式"
|
||||||
|
@keyup.enter.native="search.current = 1, refreshTable()"
|
||||||
|
@clear="search.current = 1, refreshTable()"
|
||||||
|
clearable
|
||||||
|
suffix-icon="iconfont iconSearch"/>
|
||||||
|
</template>
|
||||||
|
</ai-search-bar>
|
||||||
|
<ai-search-bar>
|
||||||
|
<template #left>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
type="primary"
|
||||||
|
icon="iconfont iconAdd"
|
||||||
|
@click="gotoAdd()"
|
||||||
|
v-if="$permissions('app_appresident_edit')">
|
||||||
|
添加
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
icon="iconfont iconDelete"
|
||||||
|
:disabled="multipleSelection.length<=0"
|
||||||
|
@click="beforeDelete()"
|
||||||
|
v-if="$permissions('app_appresident_del')">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
<template #right>
|
||||||
|
<ai-import :instance="resident.instance" :dict="resident.dict" type="appresident" name="居民档案"
|
||||||
|
:importParams="{residentType: active}" @success="refreshTable()">
|
||||||
|
<el-button icon="iconfont iconImport">导入</el-button>
|
||||||
|
</ai-import>
|
||||||
|
<ai-download :instance="resident.instance" :params="params" url="/app/appresident/export"
|
||||||
|
fileName="居民档案"/>
|
||||||
|
</template>
|
||||||
|
</ai-search-bar>
|
||||||
|
|
||||||
|
<ai-table :tableData="tableData" :col-configs="colConfigs" :dict="resident.dict"
|
||||||
|
:total="page.total" :current.sync="page.current" :size.sync="page.size"
|
||||||
|
@getList="refreshTable"
|
||||||
|
@selection-change="handleSelectionChange">
|
||||||
|
<el-table-column slot="idNumber" label="身份证号" show-overflow-tooltip align="center">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<ai-id mode="show" v-model="row.idNumber" :showEyes="false"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column slot="fileStatus" label="档案状态" show-overflow-tooltip align="center">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.fileStatus==0" style="color:rgba(46,162,34,1);">正常</span>
|
||||||
|
<span v-if="scope.row.fileStatus==1" style="color:rgba(153,153,153,1);">已注销</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column slot="options" label="操作" show-overflow-tooltip align="center">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div class="table-options">
|
||||||
|
<el-button
|
||||||
|
title="详情"
|
||||||
|
type="text"
|
||||||
|
v-if="$permissions('app_appresident_detail')"
|
||||||
|
@click="detailShow(scope.row)">
|
||||||
|
详情
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</ai-table>
|
||||||
|
</template>
|
||||||
|
</ai-list>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from "vuex";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "listTpl",
|
||||||
|
inject: ['resident'],
|
||||||
|
props: {
|
||||||
|
areaId: {default: ""},
|
||||||
|
active: {default: ""},//人员类型
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(["user"]),
|
||||||
|
params() {
|
||||||
|
let params = {
|
||||||
|
residentType: this.active
|
||||||
|
}
|
||||||
|
//导出搜索条件
|
||||||
|
if (this.deleteIds.length) {
|
||||||
|
params = {
|
||||||
|
...params,
|
||||||
|
areaId: this.areaId,
|
||||||
|
ids: this.deleteIds
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
params = {
|
||||||
|
areaId: this.areaId,
|
||||||
|
...params,
|
||||||
|
...this.search
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return params
|
||||||
|
},
|
||||||
|
colConfigs() {
|
||||||
|
return [
|
||||||
|
{type: "selection"},
|
||||||
|
{label: "姓名", prop: "name", align: "center"},
|
||||||
|
{label: "性别", prop: "sex", dict: 'sex', align: "center"},
|
||||||
|
{slot: "idNumber"},
|
||||||
|
{label: "年龄", prop: "age", align: "center"},
|
||||||
|
{label: "民族", prop: "nation", align: "center", dict: "nation"},
|
||||||
|
{label: "文化程度", prop: "education", align: "center", dict: "education"},
|
||||||
|
{label: "政治面貌", prop: "politicsStatus", align: "center", dict: "politicsStatus"},
|
||||||
|
{slot: "fileStatus"},
|
||||||
|
{slot: "options"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
areaId(v) {
|
||||||
|
v && this.refreshTable()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
page: {current: 1, size: 10, total: 0},
|
||||||
|
search: {
|
||||||
|
fileStatus: "",
|
||||||
|
sex: "",
|
||||||
|
nation: "",
|
||||||
|
education: "",
|
||||||
|
politicsStatus: "",
|
||||||
|
birthStart: "",
|
||||||
|
birthEnd: "",
|
||||||
|
faithType: "",
|
||||||
|
householdName: "",
|
||||||
|
con: "",
|
||||||
|
maritalStatus: ""
|
||||||
|
},
|
||||||
|
style: {},
|
||||||
|
tableData: [],
|
||||||
|
multipleSelection: [],
|
||||||
|
deleteIds: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleClick() {
|
||||||
|
this.tableData = [];
|
||||||
|
this.multipleSelection = [];
|
||||||
|
this.searchInit()
|
||||||
|
},
|
||||||
|
searchInit() {
|
||||||
|
let tempAreaId = this.search.areaId;
|
||||||
|
this.search = {
|
||||||
|
fileStatus: "",
|
||||||
|
sex: "",
|
||||||
|
nation: "",
|
||||||
|
education: "",
|
||||||
|
politicsStatus: "",
|
||||||
|
birth: [],
|
||||||
|
faithType: "",
|
||||||
|
householdName: "",
|
||||||
|
areaId: "",
|
||||||
|
con: "",
|
||||||
|
maritalStatus: ""
|
||||||
|
};
|
||||||
|
this.search.areaId = tempAreaId;
|
||||||
|
this.page = {current: 1, size: 10, total: 0};
|
||||||
|
this.refreshTable()
|
||||||
|
},
|
||||||
|
handleSelectionChange(val) {
|
||||||
|
this.deleteIds = [];
|
||||||
|
this.multipleSelection = val;
|
||||||
|
this.multipleSelection.forEach(e => {
|
||||||
|
this.deleteIds.push(e.id);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
exportrExcle() {
|
||||||
|
if (this.deleteIds.length == 0) {
|
||||||
|
if (this.search.birth) {
|
||||||
|
this.search.birth = this.search.birth.join(",");
|
||||||
|
}
|
||||||
|
this.resident.instance
|
||||||
|
.post(`/app/appresident/exportAll`, null, {
|
||||||
|
params: {
|
||||||
|
...this.search,
|
||||||
|
...this.page
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (res && res.code == 0) {
|
||||||
|
this.$message.success(res.data);
|
||||||
|
if (typeof this.search.birth == "string") {
|
||||||
|
this.search.birth = this.search.birth.split(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.resident.instance.post(`/app/appresident/exportByIds`, {
|
||||||
|
ids: this.deleteIds,
|
||||||
|
areaId: this.user.info.areaId
|
||||||
|
}).then(res => {
|
||||||
|
if (res?.code == 0) {
|
||||||
|
this.$message.success(res.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSizeChange(val) {
|
||||||
|
this.page.size = val;
|
||||||
|
this.refreshTable()
|
||||||
|
},
|
||||||
|
detailShow(row) {
|
||||||
|
this.$router.push({query: {type: this.active, id: row.id}})
|
||||||
|
},
|
||||||
|
gotoAdd() {
|
||||||
|
this.$router.push({query: {type: this.active}})
|
||||||
|
},
|
||||||
|
refreshTable() {
|
||||||
|
this.resident.instance.post(`/app/appresident/list`, null, {
|
||||||
|
params: {...this.search, ...this.page, areaId: this.areaId, residentType: this.active}
|
||||||
|
}).then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
this.tableData = res.data.records
|
||||||
|
this.page.total = res.data.total
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeDelete() {
|
||||||
|
this.$confirm("确定要执行删除操作吗?", {type: "error"})
|
||||||
|
.then(() => {
|
||||||
|
this.deletePersonFn();
|
||||||
|
this.deleteIds = [];
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deletePersonFn() {
|
||||||
|
this.resident.instance.post(`/app/appresident/deleteBody`, {
|
||||||
|
ids: this.deleteIds
|
||||||
|
}).then(res => {
|
||||||
|
if (res && res.code == 0) {
|
||||||
|
this.$message.success("删除成功");
|
||||||
|
if (
|
||||||
|
this.page.current == Math.ceil(this.page.total / this.page.size)
|
||||||
|
) {
|
||||||
|
this.page.total = this.page.total - this.deleteIds.length;
|
||||||
|
this.page.current = Math.ceil(this.page.total / this.page.size);
|
||||||
|
}
|
||||||
|
this.refreshTable();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.refreshTable()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.listTpl {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
1123
packages/shandong/AppResident/localResident.vue
Normal file
1123
packages/shandong/AppResident/localResident.vue
Normal file
File diff suppressed because it is too large
Load Diff
1116
packages/shandong/AppResident/mobileResident.vue
Normal file
1116
packages/shandong/AppResident/mobileResident.vue
Normal file
File diff suppressed because it is too large
Load Diff
445
packages/shandong/AppResident/residentSta.vue
Normal file
445
packages/shandong/AppResident/residentSta.vue
Normal file
@@ -0,0 +1,445 @@
|
|||||||
|
<template>
|
||||||
|
<section class="residentSta">
|
||||||
|
<div class="dataStatistic">
|
||||||
|
<div class="above">
|
||||||
|
<div class="data-item">
|
||||||
|
<div id="LocalResident" v-if="showStatis"/>
|
||||||
|
<ai-empty v-else/>
|
||||||
|
<h5 v-if="LocalResidentData">
|
||||||
|
更新时间:{{ statisticData.更新时间 }}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="data-item" style="width:66%;">
|
||||||
|
<div id="ResidentDistribution" v-if="showStatis"/>
|
||||||
|
<ai-empty v-else/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="above" style="margin-top:24px;">
|
||||||
|
<div class="data-item">
|
||||||
|
<div id="SexRatio" v-if="showStatis"/>
|
||||||
|
<ai-empty v-else/>
|
||||||
|
<div rightTop><i v-html="'有效数据:'"/> {{ LocalResidentData }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="data-item">
|
||||||
|
<div id="MaritalSta" v-if="showStatis"/>
|
||||||
|
<ai-empty v-else/>
|
||||||
|
<div rightTop><i v-html="'有效数据:'"/>{{ LocalResidentData }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="data-item">
|
||||||
|
<div id="AgeDistribution" v-if="showStatis"/>
|
||||||
|
<ai-empty v-else/>
|
||||||
|
<div rightTop><i v-html="'有效数据:'"/>{{ LocalResidentData }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as echarts from 'echarts'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "residentSta",
|
||||||
|
inject: ['resident'],
|
||||||
|
props: {
|
||||||
|
areaId: String
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
LocalResidentData() {
|
||||||
|
return this.statisticData?.总人数 || 0
|
||||||
|
},
|
||||||
|
AgeDistributionData() {
|
||||||
|
return this.statisticData?.年龄层次 || []
|
||||||
|
},
|
||||||
|
MaritalStaData() {
|
||||||
|
return this.statisticData?.婚姻状况 || []
|
||||||
|
},
|
||||||
|
SexRatioData() {
|
||||||
|
return this.statisticData?.男女比例 || []
|
||||||
|
},
|
||||||
|
ResidentDistributionData() {
|
||||||
|
return this.statisticData?.人口分布 || []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statisticData: {},
|
||||||
|
showStatis: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
areaId(v) {
|
||||||
|
v && this.getStaData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getStaData() {
|
||||||
|
this.resident.instance.post(`/app/appresident/queryCustInfoByAreaId`, null, {
|
||||||
|
params: {
|
||||||
|
areaId: this.areaId
|
||||||
|
}
|
||||||
|
}).then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
this.statisticData = res.data;
|
||||||
|
this.showStatis = this.LocalResidentData > 0;
|
||||||
|
this.showLocalResident();
|
||||||
|
this.showSexRatio();
|
||||||
|
this.showAgeDistribution();
|
||||||
|
this.showResidentDistribution();
|
||||||
|
this.showMaritalSta();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
showAgeDistribution() {
|
||||||
|
//年龄分布
|
||||||
|
let myChart = echarts.init(document.getElementById("AgeDistribution"));
|
||||||
|
if (!this.showStatis) {
|
||||||
|
return myChart.dispose();
|
||||||
|
}
|
||||||
|
myChart.setOption({
|
||||||
|
title: {
|
||||||
|
text: "年龄层次统计",
|
||||||
|
subtext: "",
|
||||||
|
x: "left"
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "vertical",
|
||||||
|
bottom: "bottom",
|
||||||
|
data: this.AgeDistributionData.map(e => e.v1)
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "年龄层次统计",
|
||||||
|
type: "pie",
|
||||||
|
radius: ["40%", "55%"],
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
data: this.AgeDistributionData.map(e => ({value: e.v2 * 1, name: e.v1})),
|
||||||
|
itemStyle: {
|
||||||
|
emphasis: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: "rgba(0, 0, 0, 0.5)"
|
||||||
|
},
|
||||||
|
normal: {
|
||||||
|
color: function (params) {
|
||||||
|
//自定义颜色
|
||||||
|
var colorList = [
|
||||||
|
"#FB3C3C",
|
||||||
|
"#fc5947",
|
||||||
|
"#81E84F",
|
||||||
|
"#3C76FF",
|
||||||
|
"#6995FF",
|
||||||
|
"#FFD500",
|
||||||
|
"#FEF517",
|
||||||
|
"#B1E598",
|
||||||
|
"#81E84F",
|
||||||
|
"#B1E598",
|
||||||
|
"#FEBB8E"
|
||||||
|
];
|
||||||
|
return colorList[params.dataIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
},
|
||||||
|
showLocalResident() {
|
||||||
|
//本地居民
|
||||||
|
let myChart = echarts.init(document.getElementById("LocalResident"));
|
||||||
|
if (!this.showStatis) {
|
||||||
|
return myChart.dispose();
|
||||||
|
}
|
||||||
|
let option = {
|
||||||
|
title: {
|
||||||
|
text: "本地居民",
|
||||||
|
subtext: "",
|
||||||
|
x: "left"
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{a} <br/>{b}: {c} ({d}%)"
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "本地居民",
|
||||||
|
type: "pie",
|
||||||
|
radius: ["50%", "65%"],
|
||||||
|
avoidLabelOverlap: false,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: true,
|
||||||
|
position: "center",
|
||||||
|
textStyle: {
|
||||||
|
fontSize: "40",
|
||||||
|
fontWeight: "normal",
|
||||||
|
color: "#333333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: true,
|
||||||
|
textStyle: {
|
||||||
|
fontSize: "40",
|
||||||
|
fontWeight: "normal",
|
||||||
|
color: "#333333"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
labelLine: {
|
||||||
|
normal: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: [{value: this.LocalResidentData, name: this.LocalResidentData}],
|
||||||
|
itemStyle: {
|
||||||
|
emphasis: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: "rgba(0, 0, 0, 0.5)"
|
||||||
|
},
|
||||||
|
normal: {
|
||||||
|
color: function (params) {
|
||||||
|
//自定义颜色
|
||||||
|
var colorList = ["#5088FF"];
|
||||||
|
return colorList[params.dataIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
myChart.setOption(option);
|
||||||
|
},
|
||||||
|
showMaritalSta() {
|
||||||
|
//婚姻状况
|
||||||
|
let myChart = echarts.init(document.getElementById("MaritalSta"));
|
||||||
|
if (!this.showStatis) {
|
||||||
|
return myChart.dispose();
|
||||||
|
}
|
||||||
|
let option = {
|
||||||
|
color: [
|
||||||
|
"#FB3C3C",
|
||||||
|
"#FC5947",
|
||||||
|
"#FE8B3F",
|
||||||
|
"#3C76FF",
|
||||||
|
"#6995FF",
|
||||||
|
"#FFD500",
|
||||||
|
"#FEF517",
|
||||||
|
"#B1E598",
|
||||||
|
"#81E84F",
|
||||||
|
"#B1E598",
|
||||||
|
"#FEBB8E"
|
||||||
|
],
|
||||||
|
backgroundColor: "#FFFFFF",
|
||||||
|
title: {
|
||||||
|
text: "婚姻状况统计",
|
||||||
|
x: "left"
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "vertical",
|
||||||
|
bottom: "bottom",
|
||||||
|
width: "auto",
|
||||||
|
height: 50,
|
||||||
|
data: this.MaritalStaData.map(e => e.v1)
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "婚姻状况",
|
||||||
|
type: "pie",
|
||||||
|
radius: ["40%", "55%"],
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
data: this.MaritalStaData.map(e => ({value: e.v2 * 1, name: e.v1})),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
myChart.setOption(option);
|
||||||
|
},
|
||||||
|
showResidentDistribution() {
|
||||||
|
//人口分布/居民分布
|
||||||
|
let myChart = echarts.init(document.getElementById("ResidentDistribution"));
|
||||||
|
if (!this.showStatis) {
|
||||||
|
return myChart.dispose();
|
||||||
|
}
|
||||||
|
let option = {
|
||||||
|
title: {
|
||||||
|
text: "人口分布统计",
|
||||||
|
subtext: "",
|
||||||
|
x: "left"
|
||||||
|
},
|
||||||
|
color: ["#5088FF"],
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
axisPointer: {
|
||||||
|
// 坐标轴指示器,坐标轴触发有效
|
||||||
|
type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
|
||||||
|
},
|
||||||
|
formatter: "{a} <br/>{b} : {c} "
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
left: "3%",
|
||||||
|
right: "4%",
|
||||||
|
bottom: "3%",
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
data: this.ResidentDistributionData.map(e => e.name),
|
||||||
|
axisTick: {
|
||||||
|
alignWithLabel: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: "value"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
|
id: "dataZoomX",
|
||||||
|
type: "slider",
|
||||||
|
xAxisIndex: [0],
|
||||||
|
filterMode: "filter"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "人口数量",
|
||||||
|
type: "bar",
|
||||||
|
barWidth: "16",
|
||||||
|
data: this.ResidentDistributionData.map(e => e.v1)
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
myChart.setOption(option);
|
||||||
|
},
|
||||||
|
showSexRatio() {
|
||||||
|
//男女比例
|
||||||
|
let myChart = echarts.init(document.getElementById("SexRatio"));
|
||||||
|
if (!this.showStatis) {
|
||||||
|
return myChart.dispose();
|
||||||
|
}
|
||||||
|
myChart.setOption({
|
||||||
|
title: {
|
||||||
|
text: "男女比例统计",
|
||||||
|
subtext: "",
|
||||||
|
x: "left"
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "item",
|
||||||
|
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: "vertical",
|
||||||
|
bottom: "bottom",
|
||||||
|
data: this.SexRatioData.map(e => e.v1)
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: "男女比例",
|
||||||
|
type: "pie",
|
||||||
|
radius: ["40%", "55%"],
|
||||||
|
center: ["50%", "50%"],
|
||||||
|
data: this.SexRatioData.map(e => ({value: e.v2 * 1, name: e.v1})),
|
||||||
|
itemStyle: {
|
||||||
|
emphasis: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: "rgba(0, 0, 0, 0.5)"
|
||||||
|
},
|
||||||
|
normal: {
|
||||||
|
color: function (params) {
|
||||||
|
//自定义颜色
|
||||||
|
let colorList = [
|
||||||
|
"#FB3C3C",
|
||||||
|
"#3C76FF",
|
||||||
|
"#3C76FF",
|
||||||
|
"#FC5947",
|
||||||
|
"#6995FF",
|
||||||
|
"#FB3C3C",
|
||||||
|
"#FE8B3F",
|
||||||
|
"#B1E598",
|
||||||
|
"#81E84F",
|
||||||
|
"#FEBB8E"
|
||||||
|
];
|
||||||
|
return colorList[params.dataIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getStaData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.residentSta {
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.dataStatistic {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 16px 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.above {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.data-item {
|
||||||
|
width: 32%;
|
||||||
|
height: 380px;
|
||||||
|
background: rgba(255, 255, 255, 1);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
div[rightTop] {
|
||||||
|
position: absolute;
|
||||||
|
right: 16px;
|
||||||
|
top: 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
& > i {
|
||||||
|
font-style: normal;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > h5 {
|
||||||
|
width: 100%;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#LocalResident, #MaritalSta, #ResidentDistribution, #SexRatio, #AgeDistribution {
|
||||||
|
width: 100%;
|
||||||
|
height: 95%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user