This commit is contained in:
liuye
2022-08-16 13:54:29 +08:00
21 changed files with 873 additions and 474 deletions

View File

@@ -10,12 +10,10 @@
</div>
</AiPagePicker>
<div class="grid-input">
<img src="./img/back-icon.png" alt="" class="back-icon" v-if="name && show" @click="show=false">
<img src="./img/search-icon-w.png" alt="" class="search-icon" v-else>
<input type="text" class="input" placeholder="请输入姓名、房屋信息" v-model="name" maxlength="10" confirm-type="search"
@confirm="search"/>
<img src="./img/search-icon-w.png" class="search-icon">
<input class="input" placeholder="请输入网格名称" v-model="girdName" maxlength="20" confirm-type="search" @confirm="search"/>
<div class="clear-btn">
<img src="./img/del-icon.png" alt="" class="del-icon" v-if="name" @click="clear">
<img src="./img/del-icon.png" class="del-icon" v-if="girdName" @click="girdName = ''">
</div>
</div>
</div>
@@ -48,6 +46,20 @@
</scroll-view>
</div>
</u-popup>
<u-popup v-model="isShowGrid" mode="bottom" border-radius="14" height="60%">
<div class="grid-wrapper">
<div class="title">请选择网格</div>
<scroll-view scroll-y="true" class="grid-info">
<div
class="grid-item"
v-for="(item, index) in girdList"
@click="form.girdName = item.girdName, getGridList(item.id)"
:key="index">
{{ item.girdName }}
</div>
</scroll-view>
</div>
</u-popup>
</div>
</template>
@@ -64,18 +76,20 @@ export default {
show: false,
form: {girdName: '', id: ''},
treeList: [],
name: '',
girdName: '',
showSelect: false,
editor: null,
polygons: [],
labels: [],
latLngCenter: [], //中心点
latLngCenter: [],
isShowGrid: false,
girdList: []
}
},
computed: {...mapState(['user'])},
created() {
this.areaId = this.user.areaId
this.getLeafNodes()
uni.$on('goback', e => {
this.form.girdName = e.girdName
this.getGridList(e.id, true)
@@ -91,6 +105,21 @@ export default {
url: './SelectGird?isFormMap=1'
})
},
search () {
this.$loading()
this.$http.post(`/app/appgirdinfo/list?size=100&girdName=${this.girdName}`).then((res) => {
if (res.code === 0) {
if (res.data.records.length) {
this.girdList = res.data.records
this.isShowGrid = true
} else {
this.$u.toast('未查询到网格')
}
}
})
},
getLeafNodes() {
this.$http.post(`/app/appgirdinfo/queryGirdMemberGirdsById`).then((res) => {
if (res?.data) {
@@ -112,7 +141,6 @@ export default {
getGridList(id) {
this.$loading()
this.$http.post(`/app/appgirdinfo/queryChildGirdInfoByGirdId?girdId=${id}`).then((res) => {
this.$hideLoading()
if (res?.data) {
const arr = []
res.data.map(v => {
@@ -135,6 +163,7 @@ export default {
if (!arr.filter(v => v.points).length) {
return this.$u.toast('该网格还未标会')
}
this.isShowGrid = false
this.renderGridMap(arr.filter(v => v.points))
}
@@ -285,6 +314,46 @@ export default {
box-sizing: border-box;
}
.grid-wrapper {
height: 100%;
overflow: hidden;
.title {
height: 80px;
line-height: 80px;
text-align: center;
color: #333;
font-size: 32px;
font-weight: 800;
}
scroll-view {
height: calc(100% - 80px);
}
.grid-item {
height: 80px;
line-height: 80px;
padding: 0 24px;
text-align: center;
color: #333;
font-size: 28px;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
border-bottom: 1px solid #eee;
&:last-child {
border: none;
}
&:active {
background: #eee;
}
}
}
.top {
display: flex;
position: fixed;

View File

@@ -1,14 +1,6 @@
<template>
<div class="searchMap">
<div class="top">
<AiPagePicker class="left" type="custom" @select="handleSelectGird"
:ops="{url:'./SelectGird',label: 'girdName'}">
<div class="gird-content">
<image src="./img/gird--select-icon.png" class="avatras"/>
<div class="label">{{ form.girdName || '网格选择' }}</div>
<u-icon name="arrow-right" color="#cccccc" size="26" style="margin-left:4px;"></u-icon>
</div>
</AiPagePicker>
<div class="grid-input">
<img src="./img/back-icon.png" alt="" class="back-icon" v-if="name && show" @click="show=false">
<img src="./img/search-icon-w.png" alt="" class="search-icon" v-else>
@@ -19,18 +11,6 @@
</div>
</div>
</div>
<div class="search-list" v-if="show">
<div class="title border">
<img src="./img/search-icon.png" alt="" class="search-icon">{{ name }}
</div>
<div class="item border" v-for="(item, index) in buildList" :key="index" @click="getBuildingInfo(item)">
<img src="./img/user-icon.png" alt="" class="search-icon user-icon">
<div class="item-content">
<h3>{{ item.residentName }}</h3>
<p>{{ item.areaName || '' }}{{ item.createAddress }}</p>
</div>
</div>
</div>
<div class="build-btn" @click="toList()">
<img src="./img/build-icon.png" alt=""> 楼栋<br/>列表
</div>
@@ -120,6 +100,24 @@
</div>
<div class="popup-btn" @click="toDetail(building.id)">查看楼栋模型</div>
</u-popup>
<u-popup v-model="show" mode="bottom" border-radius="14" height="70%">
<div class="grid-wrapper">
<div class="title">请选择居民</div>
<scroll-view scroll-y="true" class="grid-info">
<div
class="grid-item"
v-for="(item, index) in buildList"
@click="getBuildingInfo(item)"
:key="index">
<image src="./img/user-icon.png" />
<div class="right">
<h3>{{ item.residentName }}</h3>
<p>{{ item.areaName || '' }}{{ item.createAddress }}</p>
</div>
</div>
</scroll-view>
</div>
</u-popup>
</div>
</template>
@@ -149,6 +147,7 @@ export default {
showPop: false,
retryMapCount: 0,
building: {},
isShowGrid: false,
buildPopup: false
}
},
@@ -318,7 +317,8 @@ export default {
},
search() {
this.buildList = []
this.$http.post('/app/appcommunityhouseinfo/queryHouseByName', null, {
this.$loading()
this.$http.post('/app/appcommunityhouseinfo/queryHouseByNameBySize', null, {
params: {
current: 1,
size: 20,
@@ -353,8 +353,7 @@ export default {
this.detailInfo = {...res.data}
console.log(this.detailInfo)
if(this.detailInfo.build.appGirdInfo.girdMemberNames && this.detailInfo.build.appGirdInfo.girdMemberNames) {
if(this.detailInfo.build.appGirdInfo && this.detailInfo.build.appGirdInfo.girdMemberNames && this.detailInfo.build.appGirdInfo.girdMemberNames) {
this.detailInfo.build.appGirdInfo.girdMemberNames = this.detailInfo.build.appGirdInfo.girdMemberNames.split(',')
}
this.show = false
@@ -383,6 +382,72 @@ export default {
box-sizing: border-box;
}
.grid-wrapper {
height: 100%;
overflow: hidden;
.title {
height: 80px;
line-height: 80px;
text-align: center;
color: #333;
font-size: 32px;
font-weight: 800;
}
scroll-view {
height: calc(100% - 80px);
}
.grid-item {
display: flex;
align-items: center;
padding: 20px 24px;
color: #333;
font-size: 28px;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
border-bottom: 1px solid #eee;
image {
width: 50px;
height: 50px;
margin-right: 16px;
}
.right {
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
h2 {
margin-bottom: 12px;
color: #333;
font-size: 30px;
font-weight: 600;
}
p {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #666;
}
}
&:last-child {
border: none;
}
&:active {
background: #eee;
}
}
}
.top {
display: flex;
position: fixed;
@@ -425,7 +490,7 @@ export default {
.grid-input {
display: flex;
align-items: center;
width: 460px;
width: 100%;
height: 64px;
background: #F5F5F5;
border-radius: 32px;

View File

@@ -1,5 +1,5 @@
<template>
<div class="detail">
<div class="detail" v-if="pageShow">
<AiTopFixed>
<div class="select-flex" @click="showSelect=true">
<span class="name" v-text="cellName"/>
@@ -148,6 +148,7 @@ export default {
renter: [],
live: []
},
pageShow: false,
numInfo: {},
showSelect: false,
selectList: [],
@@ -166,8 +167,9 @@ export default {
onShow() {
document.title = "楼栋模型"
this.$dict.load('householdRelation', 'houselivingStatus', 'houseLeaseSituation', 'houseUseStatus',
'isFilingCertificateStatus', 'communityBuildingType', 'yesOrNo', 'BulidResidentType')
this.getBuilding()
'isFilingCertificateStatus', 'communityBuildingType', 'yesOrNo', 'BulidResidentType').then(() => {
this.getBuilding()
})
uni.$on('changeHouseInfo', res => {
this.getHouseDetail(this.houseInfo.id)
})
@@ -196,6 +198,7 @@ export default {
},
getBuilding() {
//获取楼栋信息
this.$loading()
let {id} = this.$route.query
this.$http.post(`/app/appcommunitybuildinginfo/queryDetailById`, null, {
params: {id}
@@ -203,6 +206,8 @@ export default {
if (res?.data) {
this.detail = res.data
this.getSelectList(res.data.communityId)
this.pageShow = true
}
})
},

View File

@@ -84,7 +84,7 @@
<div class="border">
<span class="label">现住址</span>
<span class="value">
<AiAreaPicker ref="address" class="aiArea" :fullName.sync="form.currentAreaName" :value="form.currentAreaId" mode="custom" all @select="onCurrentAreaChange">
<AiAreaPicker ref="address" :fullName.sync="form.currentAreaName" :value="form.currentAreaId" mode="custom" all @select="onCurrentAreaChange">
<div class="aiArea">
<span class="label" v-if="form.currentAreaName">{{ form.currentAreaName }}</span>
<span v-else class="color-999">请选择</span>
@@ -94,20 +94,6 @@
</span>
</div>
</div>
<div class="item">
<span class="tips">*</span>
<div class="border">
<!-- <div class="border item-right"> -->
<span class="label">居民标签</span>
<span class="value" @click="toChooseTags">
<span class="color-999">请选择</span>
<img src="./components/img/right-icon.png" alt="">
</span>
<!-- <div class="tag-list" @click="toChooseTags">
<div class="tag" v-for="(item, index) in 10" :key="index">残疾人</div>
</div> -->
</div>
</div>
<div class="item mar-b0">
<span class="tips"></span>
<div class="border not-border">
@@ -122,7 +108,7 @@
<div class="border">
<span class="label">户籍地址</span>
<span class="value">
<AiAreaPicker ref="address" class="aiArea" :fullName.sync="form.householdAreaName" :value="form.householdAreaId" mode="custom" all @select="onHouseAreaChange">
<AiAreaPicker ref="address" :fullName.sync="form.householdAreaName" :value="form.householdAreaId" mode="custom" all @select="onHouseAreaChange">
<div class="aiArea">
<span class="label" v-if="form.householdAreaName">{{ form.householdAreaName }}</span>
<span v-else class="color-999">请选择</span>
@@ -141,6 +127,19 @@
<div class="text-area">
<textarea placeholder="请输入" maxlength="30" v-model="form.householdAddress"></textarea>
</div>
<div class="item">
<div class="border" :class="[form.residentLabelList.length ? 'item-right' : '']">
<!-- <div class="border item-right"> -->
<span class="label">居民标签</span>
<div class="tag-list" @click="toChooseTags" v-if="form.residentLabelList.length">
<div class="tag" v-for="(item, index) in form.residentLabelList" :key="index">{{ item.labelName }}</div>
</div>
<span class="value" @click="toChooseTags" v-else>
<span class="color-999">请选择</span>
<img src="./components/img/right-icon.png" alt="">
</span>
</div>
</div>
<div class="pad-b152"></div>
<div class="add-btn" @click="submit">
<div>保存</div>
@@ -174,7 +173,8 @@ export default {
householdAreaName: '',
householdAddress: '',
residentType: '',
age: ''
age: '',
residentLabelList: []
},
showSelect: false,
formName: '',
@@ -191,6 +191,16 @@ export default {
this.form.residentType = options.type
}
this.$dict.load('yesOrNo', 'sex', 'householdRelation', 'nation', 'education', 'maritalStatus', 'politicsStatus', 'militaryStatus', 'faithType')
uni.$on('onChecked', e => {
console.log(e)
this.form.residentLabelList = e.map(v => {
return {
labelId: v.id,
labelName: v.labelName
}
})
})
},
computed: {
...mapState(['user']),
@@ -246,7 +256,9 @@ export default {
},
toChooseTags () {
uni.navigateTo({url: `./Tags`})
uni.navigateTo({
url: `./Tags?ids=${this.form.residentLabelList.map(v => v.labelId).join(',')}`
})
},
confirmSelect(e) {
@@ -302,6 +314,15 @@ export default {
<style scoped lang="scss">
.add {
::v-deep .aiArea {
display: flex;
align-items: center;
justify-content: flex-end;
.label {
width: 100%!important;
}
}
.item{
width: 100%;
padding-left: 14px;

View File

@@ -24,8 +24,8 @@
<div class="right">
<div class="rightTop">
<span class="name">{{ item.name }}</span>
<!-- <span class="btn" v-if="item.doRight == 1"> -->
<span class="btn">
<span class="btn" v-if="item.doRight == 1">
<!-- <span class="btn"> -->
<img src="./components/img/edit-icon.png" alt="" @click.stop="edit(item.id)">
<img src="./components/img/del-icon.png" alt="" @click.stop="del(item.id)">
</span>

View File

@@ -7,18 +7,12 @@
<div class="top-right__top">
<div class="left">
<h2>{{ resident.name }}</h2>
<i>已注销</i>
<i v-if="resident.fileStatus === '1'">已注销</i>
</div>
<span>户主</span>
<span v-if="resident.householdName === '1'">户主</span>
</div>
<div class="top-right__bottom">
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<div class="top-right__bottom" v-if="resident.residentLabelList">
<span v-for="(item, index) in resident.residentLabelList" :key="index">{{ item.labelName }}</span>
</div>
</div>
</div>

View File

@@ -7,18 +7,12 @@
<div class="top-right__top">
<div class="left">
<h2>{{ resident.name }}</h2>
<i>已注销</i>
<i v-if="resident.fileStatus === '1'">已注销</i>
</div>
<span>户主</span>
<span v-if="resident.householdName === '1'">户主</span>
</div>
<div class="top-right__bottom">
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<span>退役军人</span>
<div class="top-right__bottom" v-if="resident.residentLabelList">
<span v-for="(item, index) in resident.residentLabelList" :key="index">{{ item.labelName }}</span>
</div>
</div>
</div>

View File

@@ -1,9 +1,15 @@
<template>
<div class="tags">
<div class="tags-group" v-for="(label, i) in 2" :key="i">
<h2>年龄段</h2>
<div class="tags-group">
<h2>标签列表</h2>
<div class="tags-list">
<div class="item" v-for="(item, index) in 20" :class="[currIndex === index ? 'active' : '']" :key="index">婴儿</div>
<div class="item"
v-for="(item, index) in list"
:class="[checked.includes(item.id) ? 'active' : '']"
:key="index"
@click="onClick(item.id)">
{{ item.labelName }}
</div>
</div>
</div>
<div class="add-btn" @click="submit">
@@ -18,16 +24,53 @@
data () {
return {
currIndex: 0
currIndex: 0,
list: [],
checked: []
}
},
onLoad () {
onLoad (query) {
this.getList()
if (query.ids) {
this.checked = query.ids.split(',')
}
},
methods: {
getList() {
this.$loading()
this.$http.post('/app/appresidentlabelinfo/list?size=1000').then((res) => {
if (res.code == 0) {
this.list = res.data.records
}
})
},
onClick (id) {
const index = this.checked.indexOf(id)
if (index === -1) {
this.checked.push(id)
} else {
this.checked.splice(index, 1)
}
},
submit () {
if (!this.checked.length) {
return this.$u.toast('请选择标签')
}
const list = this.list.filter(v => {
return this.checked.includes(v.id)
})
uni.$emit('onChecked', list)
uni.navigateBack()
}
}
}
</script>