502 lines
12 KiB
Vue
502 lines
12 KiB
Vue
<template>
|
||
<ai-list class="Family">
|
||
<template slot="title">
|
||
<ai-title title="监测对象" isShowBack isShowBottomBorder @onBackClick="onBack"></ai-title>
|
||
</template>
|
||
<template slot="content">
|
||
<ai-search-bar class="search-bar">
|
||
<template #left>
|
||
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="isShow = true">添加</el-button>
|
||
<el-button size="small" :disabled="!ids.length" icon="iconfont iconDelete" @click="removeAll">批量删除</el-button>
|
||
<el-select size="small" style="width: 200px;" v-model="search.girdId" placeholder="所属网格" clearable
|
||
@change="getListInit()">
|
||
<el-option
|
||
v-for="(item,i) in girdList"
|
||
:key="i"
|
||
:label="item.girdName"
|
||
:value="item.id"
|
||
>
|
||
</el-option>
|
||
</el-select>
|
||
</template>
|
||
<template #right>
|
||
<el-input
|
||
v-model="search.name"
|
||
class="search-input"
|
||
size="small"
|
||
v-throttle="() => {search.current = 1, getList()}"
|
||
placeholder="姓名/身份证/联系方式"
|
||
clearable
|
||
@clear="search.current = 1, search.name = '', 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"
|
||
@handleSelectionChange="handleSelectionChange"
|
||
@getList="getList">
|
||
<el-table-column slot="options" width="100px" fixed="right" label="操作" align="center">
|
||
<template slot-scope="{ row }">
|
||
<div class="table-options">
|
||
<el-button type="text" @click="remove(row.gmrId)">删除</el-button>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
</ai-table>
|
||
<ai-dialog
|
||
:visible.sync="isShow"
|
||
width="890px"
|
||
@close="closeDialog"
|
||
title="添加户主"
|
||
@onConfirm="onConfirm">
|
||
<ai-area-select clearable always-show :instance="instance" v-model="areaId" :disabled-level="disabledLevel"
|
||
@change="search.current = 1, getUserList()"></ai-area-select>
|
||
<span style="margin-top:16px;"><span style="color:#f46;margin-right:4px;">*</span>网格:</span>
|
||
<el-select size="small" style="width: 280px;margin-top:16px;" v-model="girdId" placeholder="请选择网格" clearable>
|
||
<el-option
|
||
v-for="(item,i) in girdList"
|
||
:key="i"
|
||
:label="item.girdName"
|
||
:value="item.id"
|
||
>
|
||
</el-option>
|
||
</el-select>
|
||
<div class="AiWechatSelecter-container">
|
||
<div class="AiWechatSelecter-container__left" v-loading="isLoading">
|
||
<div class="AiWechatSelecter-header">
|
||
<div class="AiWechatSelecter-header__left">
|
||
<h2>户主信息列表</h2>
|
||
</div>
|
||
<el-input
|
||
class="search-input"
|
||
size="mini"
|
||
placeholder="请输入姓名/身份证号"
|
||
v-model="name"
|
||
clearable
|
||
v-throttle="getUserList"
|
||
@clear="name = '', getUserList()"
|
||
suffix-icon="iconfont iconSearch">
|
||
</el-input>
|
||
</div>
|
||
<el-scrollbar class="AiWechatSelecter-list">
|
||
<el-checkbox-group v-model="chooseUser">
|
||
<el-checkbox
|
||
:label="`${item.name}~${item.id}`"
|
||
v-for="(item, index) in userList"
|
||
:key="index">
|
||
{{ item.name }}-{{ item.idNumber }}
|
||
</el-checkbox>
|
||
</el-checkbox-group>
|
||
<AiEmpty v-if="!this.userList.length"></AiEmpty>
|
||
</el-scrollbar>
|
||
</div>
|
||
<div class="AiWechatSelecter-container__right">
|
||
<div class="AiWechatSelecter-header AiWechatSelecter-header__right">
|
||
<h2>已选择</h2>
|
||
<el-button size="mini" icon="el-icon-delete" @click="clearAll">清空</el-button>
|
||
</div>
|
||
<el-scrollbar class="AiWechatSelecter-list">
|
||
<div class="tags-wrapper">
|
||
<el-tag
|
||
v-for="(item, index) in chooseUser"
|
||
:key="index"
|
||
closable
|
||
@close="del(item)"
|
||
size="small"
|
||
type="info">
|
||
{{ item.split('~')[0] }}
|
||
</el-tag>
|
||
</div>
|
||
</el-scrollbar>
|
||
</div>
|
||
</div>
|
||
</ai-dialog>
|
||
</template>
|
||
</ai-list>
|
||
</template>
|
||
|
||
<script>
|
||
import {mapState} from 'vuex'
|
||
|
||
export default {
|
||
name: 'Family',
|
||
|
||
props: {
|
||
instance: Function,
|
||
dict: Object,
|
||
params: Object
|
||
},
|
||
|
||
data() {
|
||
return {
|
||
search: {
|
||
current: 1,
|
||
size: 10,
|
||
name: '',
|
||
girdId: ''
|
||
},
|
||
isLoading: false,
|
||
form: {},
|
||
userList: [],
|
||
name: '',
|
||
chooseUser: [],
|
||
isShow: false,
|
||
total: 10,
|
||
colConfigs: [
|
||
{type: 'selection', label: ''},
|
||
{prop: 'name', label: '户主姓名', align: 'left', width: '200px'},
|
||
{prop: 'idNumber', label: '身份证号', align: 'center'},
|
||
{prop: 'phone', label: '联系方式', align: 'center'},
|
||
{prop: 'girdName', label: '所属网格', align: 'center'},
|
||
{prop: 'createTime', label: '添加时间', align: 'center'},
|
||
{slot: 'options', label: '操作', align: 'center'}
|
||
],
|
||
tableData: [],
|
||
areaId: '',
|
||
ids: [],
|
||
disabledLevel: 0,
|
||
girdList: [],
|
||
girdId: '',
|
||
}
|
||
},
|
||
|
||
computed: {
|
||
...mapState(['user'])
|
||
},
|
||
|
||
created() {
|
||
this.areaId = this.user.info.areaId
|
||
this.disabledLevel = this.user.info.areaList.length
|
||
this.dict.load('epidemicDangerousAreaLevel').then(() => {
|
||
this.getGirdList()
|
||
this.getList()
|
||
this.getUserList()
|
||
})
|
||
},
|
||
|
||
methods: {
|
||
getGirdList() {
|
||
this.instance.post(`/app/appgirdmemberinfo/queryMyGirdListByLevel2?girdMemberId=${this.params.id}`).then(res => {
|
||
if (res.code == 0) {
|
||
this.girdList = res.data
|
||
}
|
||
})
|
||
},
|
||
getListInit() {
|
||
this.search.current = 1
|
||
this.getList()
|
||
},
|
||
getList() {
|
||
this.instance.post(`/app/appgirdmemberpoverty/listByGirdMemberByWeb`, null, {
|
||
params: {
|
||
...this.search,
|
||
girdMemberId: this.params.id,
|
||
}
|
||
}).then(res => {
|
||
if (res.code == 0) {
|
||
this.tableData = res.data.records
|
||
this.total = res.data.total
|
||
}
|
||
})
|
||
},
|
||
|
||
removeAll() {
|
||
if (!this.ids) {
|
||
return this.$message.error('请选择户主')
|
||
}
|
||
this.remove(this.ids.join(','))
|
||
},
|
||
handleSelectionChange(e) {
|
||
this.ids = e.map(v => v.gmpId)
|
||
},
|
||
|
||
clearAll() {
|
||
this.chooseUser = []
|
||
},
|
||
|
||
onConfirm() {
|
||
if (!this.girdId) {
|
||
return this.$message.error('请选择网格')
|
||
}
|
||
|
||
if (!this.chooseUser.length) {
|
||
return this.$message.error('请选择户主')
|
||
}
|
||
|
||
const povertyList = this.chooseUser.map(v => {
|
||
return {
|
||
girdMemberId: this.params.id,
|
||
name: v.split('~')[0],
|
||
girdId: this.girdId,
|
||
povertyId: v.split('~')[1]
|
||
}
|
||
})
|
||
this.instance.post(`/app/appgirdmemberpoverty/add`, {
|
||
povertyList
|
||
}).then(res => {
|
||
if (res.code == 0) {
|
||
this.current = 1
|
||
this.getList()
|
||
this.$message.success('添加成功')
|
||
this.closeDialog()
|
||
}
|
||
})
|
||
},
|
||
closeDialog() {
|
||
this.isShow = false
|
||
this.chooseUser = []
|
||
this.girdId = ''
|
||
this.name = ''
|
||
this.areaId = this.user.info.areaId
|
||
this.getUserList()
|
||
},
|
||
|
||
del(e) {
|
||
this.chooseUser.splice(this.chooseUser.indexOf(e), 1)
|
||
},
|
||
|
||
getUserList() {
|
||
this.isLoading = true
|
||
this.instance.post(`/app/apppreventionreturntopoverty/list`, null, {
|
||
params: {
|
||
current: 1,
|
||
size: 200,
|
||
con: this.name,
|
||
isHousehold: 1,
|
||
areaId: this.areaId
|
||
}
|
||
}).then(res => {
|
||
if (res.code == 0) {
|
||
this.userList = res.data.records
|
||
}
|
||
|
||
this.isLoading = false
|
||
})
|
||
},
|
||
|
||
onBack() {
|
||
this.$emit('change', {
|
||
type: 'list'
|
||
})
|
||
},
|
||
|
||
remove(id) {
|
||
this.$confirm('确定删除该数据?').then(() => {
|
||
this.instance.post(`/app/appgirdmemberresident/delete?ids=${id}`).then(res => {
|
||
if (res.code == 0) {
|
||
this.$message.success('删除成功!')
|
||
this.getList()
|
||
}
|
||
})
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.Family {
|
||
.AiWechatSelecter-container {
|
||
display: flex;
|
||
height: 380px;
|
||
margin-top: 20px;
|
||
|
||
::v-deep {
|
||
.el-icon-circle-close {
|
||
display: inline-block !important;
|
||
}
|
||
}
|
||
|
||
.tree-container {
|
||
& > span {
|
||
display: block;
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.tree-user__item {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
|
||
&:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
}
|
||
|
||
img {
|
||
width: 27px;
|
||
height: 27px;
|
||
margin-right: 10px;
|
||
}
|
||
}
|
||
|
||
::v-deep .el-tree {
|
||
background: transparent;
|
||
|
||
.el-tree-node {
|
||
margin-bottom: 8px;
|
||
|
||
&:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
}
|
||
|
||
.el-tree-node__content {
|
||
height: auto;
|
||
margin-top: 2px;
|
||
// align-items: inherit;
|
||
}
|
||
|
||
.el-tree-node__expand-icon {
|
||
height: 24px;
|
||
}
|
||
}
|
||
|
||
.mask-btn__wrapper {
|
||
position: relative;
|
||
}
|
||
|
||
.mask-btn {
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
z-index: 1;
|
||
}
|
||
|
||
.userlist-item {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
margin-bottom: 8px;
|
||
padding: 0 17px;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
|
||
::v-deep .el-checkbox__label {
|
||
display: none;
|
||
}
|
||
|
||
.userlist-item__left {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
span {
|
||
color: #222222;
|
||
font-size: 14px;
|
||
}
|
||
|
||
img {
|
||
width: 40px;
|
||
height: 40px;
|
||
margin-right: 8px;
|
||
}
|
||
}
|
||
}
|
||
|
||
& > div {
|
||
width: 280px;
|
||
background: #FCFCFC;
|
||
border: 1px solid #D0D4DC;
|
||
}
|
||
|
||
.AiWechatSelecter-list {
|
||
height: calc(100% - 40px);
|
||
padding: 8px 0;
|
||
|
||
::v-deep .el-scrollbar__wrap {
|
||
margin-bottom: 0 !important;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
::v-deep .el-checkbox-group {
|
||
padding: 0 8px;
|
||
|
||
.el-checkbox {
|
||
display: block;
|
||
margin-right: 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
.AiWechatSelecter-container__left {
|
||
flex: 1;
|
||
}
|
||
|
||
.AiWechatSelecter-container__right {
|
||
flex: 1;
|
||
margin-left: 20px;
|
||
|
||
.AiWechatSelecter-list {
|
||
.tags-wrapper {
|
||
padding: 0 8px;
|
||
}
|
||
|
||
.el-tag {
|
||
margin: 0 8px 8px 0px;
|
||
color: #222222;
|
||
font-size: 14px;
|
||
}
|
||
}
|
||
}
|
||
|
||
.AiWechatSelecter-header {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
height: 40px;
|
||
padding: 0 8px 0 0;
|
||
border-bottom: 1px solid #D0D4DC;
|
||
background: #F5F7FA;
|
||
|
||
.AiWechatSelecter-header__left {
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 0 8px;
|
||
|
||
h2 {
|
||
height: 100%;
|
||
line-height: 40px;
|
||
color: #222222;
|
||
font-size: 14px;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
border-bottom: 2px solid transparent;
|
||
|
||
&.active {
|
||
color: #2266FF;
|
||
border-color: #2266FF;
|
||
}
|
||
}
|
||
}
|
||
|
||
.el-button {
|
||
height: 28px;
|
||
padding: 7px 5px;
|
||
}
|
||
|
||
.el-input {
|
||
width: 160px;
|
||
}
|
||
}
|
||
|
||
.AiWechatSelecter-header__right {
|
||
padding: 0 8px;
|
||
|
||
h2 {
|
||
color: #222222;
|
||
font-size: 14px;
|
||
text-align: center;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|