BUG 29777

This commit is contained in:
aixianling
2022-05-30 15:07:25 +08:00
parent 69509c43f1
commit c17018ae9d

View File

@@ -10,36 +10,36 @@
<el-button size="small" :disabled="!ids.length" icon="iconfont iconDelete" @click="removeAll">批量删除</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-select size="small" style="width: 200px;" v-model="search.girdId" placeholder="所属网格" clearable @change="getListInit()">
<el-option <el-option
v-for="(item,i) in girdList" v-for="(item,i) in girdList"
:key="i" :key="i"
:label="item.girdName" :label="item.girdName"
:value="item.id" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
<template #right> <template #right>
<el-input <el-input
v-model="search.name" v-model="search.name"
class="search-input" class="search-input"
size="small" size="small"
v-throttle="() => {search.current = 1, getList()}" v-throttle="() => {search.current = 1, getList()}"
placeholder="姓名/身份证/联系方式" placeholder="姓名/身份证/联系方式"
clearable clearable
@clear="search.current = 1, search.name = '', getList()" @clear="search.current = 1, search.name = '', getList()"
suffix-icon="iconfont iconSearch"> suffix-icon="iconfont iconSearch">
</el-input> </el-input>
</template> </template>
</ai-search-bar> </ai-search-bar>
<ai-table <ai-table
:tableData="tableData" :tableData="tableData"
:col-configs="colConfigs" :col-configs="colConfigs"
:total="total" :total="total"
style="margin-top: 6px;" style="margin-top: 6px;"
:current.sync="search.current" :current.sync="search.current"
:size.sync="search.size" :size.sync="search.size"
@handleSelectionChange="handleSelectionChange" @handleSelectionChange="handleSelectionChange"
@getList="getList"> @getList="getList">
<el-table-column slot="options" width="100px" fixed="right" label="操作" align="center"> <el-table-column slot="options" width="100px" fixed="right" label="操作" align="center">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<div class="table-options"> <div class="table-options">
@@ -49,449 +49,209 @@
</el-table-column> </el-table-column>
</ai-table> </ai-table>
<ai-dialog <ai-dialog
:visible.sync="isShow" :visible.sync="isShow"
width="890px" width="1100px"
@close="closeDialog" @close="closeDialog"
title="添加户主" title="添加户主"
@onConfirm="onConfirm"> @onConfirm="onConfirm">
<ai-area-select clearable always-show :instance="instance" v-model="areaId" @change="search.current = 1, getUserList()"></ai-area-select> <el-form ref="DialogForm" size="small" label-width="0">
<span style="margin-top:16px;"><span style="color:#f46;margin-right:4px;">*</span>网格</span> <el-form-item>
<el-select size="small" style="width: 280px;margin-top:16px;" v-model="girdId" placeholder="请选择网格" clearable> <ai-area-select clearable always-show :instance="instance" v-model="areaId" :disabled-level="disabledLevel"/>
<el-option </el-form-item>
v-for="(item,i) in girdList" <el-form-item label="网格:" required label-width="80px">
:key="i" <el-select size="small" v-model="girdId" placeholder="请选择网格" clearable>
:label="item.girdName" <el-option v-for="(item,i) in girdList" :key="i" :label="item.girdName" :value="item.id"/>
:value="item.id" </el-select>
> </el-form-item>
</el-option> <el-form-item>
</el-select> <ai-table-select :instance="instance" :action="`/app/appresident/list?householdName=1&areaId=${areaId}`"
<div class="AiWechatSelecter-container"> @select="v=>chooseUser=v" multiple/>
<div class="AiWechatSelecter-container__left" v-loading="isLoading"> </el-form-item>
<div class="AiWechatSelecter-header"> </el-form>
<div class="AiWechatSelecter-header__left">
<h2>户主信息列表</h2>
</div>
<el-input
class="search-input"
size="mini"
placeholder="请输入姓名/身份证号"
v-model="name"
clearable
@keyup.enter.native="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> </ai-dialog>
</template> </template>
</ai-list> </ai-list>
</template> </template>
<script> <script>
import { mapState } from 'vuex' import {mapState} from 'vuex'
export default {
name: 'Family',
props: { export default {
instance: Function, name: 'Family',
dict: Object,
params: Object
},
data() { props: {
return { instance: Function,
search: { dict: Object,
current: 1, params: Object
size: 10, },
name: '',
girdId: ''
},
isLoading: false,
form: {
}, data() {
userList: [], return {
search: {
current: 1,
size: 10,
name: '', name: '',
chooseUser: [], girdId: ''
isShow: false, },
total: 10, isLoading: false,
colConfigs: [ form: {},
{ type: 'selection', label: '' }, userList: [],
{ prop: 'name', label: '户主姓名', align: 'left', width: '200px' }, name: '',
{ prop: 'idNumber', label: '身份证号', align: 'center' }, chooseUser: [],
{ prop: 'phone', label: '联系方式', align: 'center' }, isShow: false,
{ prop: 'girdName', label: '所属网格', align: 'center' }, total: 10,
{ prop: 'createTime', label: '添加时间', align: 'center' }, colConfigs: [
{ slot: 'options', label: '操作', align: 'center' } {type: 'selection', label: ''},
], {prop: 'name', label: '户主姓名', align: 'left', width: '200px'},
tableData: [], {prop: 'idNumber', label: '身份证号', align: 'center'},
areaId: '', {prop: 'phone', label: '联系方式', align: 'center'},
ids: [], {prop: 'girdName', label: '所属网格', align: 'center'},
disabledLevel: 0, {prop: 'createTime', label: '添加时间', align: 'center'},
girdList: [], {slot: 'options', label: '操作', align: 'center'}
girdId: '', ],
} tableData: [],
}, areaId: '',
ids: [],
disabledLevel: 0,
girdList: [],
girdId: '',
}
},
computed: { computed: {
...mapState(['user']) ...mapState(['user'])
}, },
created() { created() {
this.dict.load('epidemicDangerousAreaLevel').then(() => { this.dict.load('epidemicDangerousAreaLevel').then(() => {
this.getGirdList() this.getGirdList()
this.getList() this.getList()
this.getUserList() 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/appgirdmemberresident/listByGirdMember`, null, {
params: {
...this.search,
girdMemberId: this.params.id,
searchAreaId: this.areaId
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
}
}) })
}, },
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/appgirdmemberresident/listByGirdMember`, null, {
params: {
...this.search,
girdMemberId: this.params.id,
searchAreaId: this.areaId
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
}
})
},
removeAll() { removeAll() {
if (!this.ids) { if (!this.ids) {
return this.$message.error('请选择户主') return this.$message.error('请选择户主')
}
this.remove(this.ids.join(','))
},
handleSelectionChange(e) {
this.ids = e.map(v => v.gmrId)
},
clearAll () {
this.chooseUser = []
},
onConfirm () {
if(!this.girdId) {
return this.$message.error('请选择网格')
}
if (!this.chooseUser.length) {
return this.$message.error('请选择户主')
}
const residentList = this.chooseUser.map(v => {
return {
girdMemberId: this.params.id,
name: v.split('~')[0],
residentId: v.split('~')[1],
girdId: this.girdId
}
})
this.instance.post(`/app/appgirdmemberresident/add`, {
residentList
}).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/appresident/list`, null, {
params: {
current: 1,
size: 200,
con: this.name,
householdName: 1,
searchAreaId: 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()
}
})
})
} }
this.remove(this.ids.join(','))
},
handleSelectionChange(e) {
this.ids = e.map(v => v.gmrId)
},
clearAll() {
this.chooseUser = []
},
onConfirm() {
if (!this.girdId) {
return this.$message.error('请选择网格')
}
if (!this.chooseUser.length) {
return this.$message.error('请选择户主')
}
const residentList = this.chooseUser.map(v => {
return {
girdMemberId: this.params.id,
name: v.name,
residentId: v.id,
girdId: this.girdId
}
})
this.instance.post(`/app/appgirdmemberresident/add`, {
residentList
}).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/appresident/list`, null, {
params: {
current: 1,
size: 200,
con: this.name,
householdName: 1,
searchAreaId: 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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.Family { .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> </style>