互助会地图交互完成
This commit is contained in:
@@ -36,7 +36,7 @@
|
|||||||
<div class="jumpBtn" slot="right" @click="handleJump">前往志愿者平台
|
<div class="jumpBtn" slot="right" @click="handleJump">前往志愿者平台
|
||||||
<div class="el-icon-position"/>
|
<div class="el-icon-position"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="staPanel simple flex mar-t10">
|
<div class="staPanel simple flex mar-t10" @click="getFraternityData">
|
||||||
<div class="fill" v-for="(v,k) in volunteers" :key="k">
|
<div class="fill" v-for="(v,k) in volunteers" :key="k">
|
||||||
<div v-text="k"/>
|
<div v-text="k"/>
|
||||||
<b v-text="v"/>
|
<b v-text="v"/>
|
||||||
@@ -116,6 +116,17 @@
|
|||||||
<b class="title mar-t14 mar-b12">订单列表</b>
|
<b class="title mar-t14 mar-b12">订单列表</b>
|
||||||
<dv-scroll-board :config="goodsConfig" style="height: 152px"/>
|
<dv-scroll-board :config="goodsConfig" style="height: 152px"/>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-else-if="detail.mapType=='fraternitySta'">
|
||||||
|
<el-input placeholder="请输入互助会名称..." class="areaPicker mar-b20" size="small"
|
||||||
|
v-model="fraternityFilter"/>
|
||||||
|
<dv-scroll-board :config="fraternityConfig" style="height: 380px"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="detail.mapType=='fraternity'">
|
||||||
|
<div class="flex normal">
|
||||||
|
<el-image class="fraternityImg" :src="detail.cover_url"/>
|
||||||
|
<div class="mar-l16 fill" v-html="detail.introduction"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<template v-else-if="detail.mapType=='area'">
|
<template v-else-if="detail.mapType=='area'">
|
||||||
<div class="staPanel area right mar-t12 mar-b24 grid c-4">
|
<div class="staPanel area right mar-t12 mar-b24 grid c-4">
|
||||||
<fd-item v-for="(v,k) in detail.sta" :key="k" :label="k"><b v-text="v"/></fd-item>
|
<fd-item v-for="(v,k) in detail.sta" :key="k" :label="k"><b v-text="v"/></fd-item>
|
||||||
@@ -173,7 +184,7 @@ const genderDict = {
|
|||||||
1: '男', 2: '女', 3: '未知', 0: '未知'
|
1: '男', 2: '女', 3: '未知', 0: '未知'
|
||||||
}
|
}
|
||||||
const getCluster = (points, options = {big: {}, normal: {}}, num = 10) => {
|
const getCluster = (points, options = {big: {}, normal: {}}, num = 10) => {
|
||||||
const big = [], {distance = 0.05} = options
|
const big = [], {distance = 0.03} = options
|
||||||
const pointInsideCircle = (point, circle, r) => {
|
const pointInsideCircle = (point, circle, r) => {
|
||||||
if (r === 0) return false
|
if (r === 0) return false
|
||||||
const dx = circle[0] - point[0]
|
const dx = circle[0] - point[0]
|
||||||
@@ -183,7 +194,7 @@ const getCluster = (points, options = {big: {}, normal: {}}, num = 10) => {
|
|||||||
return points.map(e => {
|
return points.map(e => {
|
||||||
e.coord = e.coord.map(c => Number(c))
|
e.coord = e.coord.map(c => Number(c))
|
||||||
if (big.length == 0 ||
|
if (big.length == 0 ||
|
||||||
!big.find(b => pointInsideCircle(e.coord, b, distance)) && big.length < num) {
|
!big.find(b => pointInsideCircle(e.coord, b, distance)) && big.length < num && e.introduction) {
|
||||||
big.push(e.coord)
|
big.push(e.coord)
|
||||||
return {
|
return {
|
||||||
...e,
|
...e,
|
||||||
@@ -333,6 +344,7 @@ export default {
|
|||||||
detail: {},
|
detail: {},
|
||||||
areaStaType: 'grid',
|
areaStaType: 'grid',
|
||||||
fraternities: [],
|
fraternities: [],
|
||||||
|
fraternityFilter: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -370,12 +382,20 @@ export default {
|
|||||||
data: v.detail.groupList?.map(e => [e.name, e.ownerName, e.memberCount])
|
data: v.detail.groupList?.map(e => [e.name, e.ownerName, e.memberCount])
|
||||||
},
|
},
|
||||||
volunteer: {
|
volunteer: {
|
||||||
header: ['互助会名称', '会长', '会员数'],
|
header: ['互助会类型', '互助会数量', '会员数'],
|
||||||
align: ['left', 'left', 'right'],
|
align: ['left', 'right', 'right'],
|
||||||
columnWidth: [250],
|
columnWidth: [250],
|
||||||
data: v.detail.volunteers?.map(e => [e.name, e.ownerName, e.memberCount])
|
data: v.detail.fraternities?.map(e => [e.type, e.number, e.member_number])
|
||||||
}
|
}
|
||||||
}[v.areaStaType]
|
}[v.areaStaType]
|
||||||
|
}),
|
||||||
|
fraternityConfig: v => ({
|
||||||
|
...tableConfigs,
|
||||||
|
header: ['互助会', '家长数量', '学生数量', '活动数量'],
|
||||||
|
columnWidth: [250],
|
||||||
|
align: ['left', 'right', 'right', 'right'],
|
||||||
|
rowNum: 9,
|
||||||
|
data: v.detail.list.map(e => [])
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -499,7 +519,7 @@ export default {
|
|||||||
getMapData(visibleId) {
|
getMapData(visibleId) {
|
||||||
const initMap = new Promise(resolve => {
|
const initMap = new Promise(resolve => {
|
||||||
const load = (c = 0) => {
|
const load = (c = 0) => {
|
||||||
if (this.map) {
|
if (this.map && this.$refs.map) {
|
||||||
resolve()
|
resolve()
|
||||||
} else if (c < 10) setTimeout(() => load(++c), 500)
|
} else if (c < 10) setTimeout(() => load(++c), 500)
|
||||||
}
|
}
|
||||||
@@ -513,11 +533,12 @@ export default {
|
|||||||
const {records} = res.data,
|
const {records} = res.data,
|
||||||
fraternities = this.fraternities.filter(e => !!e.longtitude)
|
fraternities = this.fraternities.filter(e => !!e.longtitude)
|
||||||
this.map.on('click', e => {
|
this.map.on('click', e => {
|
||||||
console.log(e)
|
|
||||||
if (e.data?.marker == 'store') {//点击店铺
|
if (e.data?.marker == 'store') {//点击店铺
|
||||||
this.getMapStore(e.data)
|
this.getMapStore(e.data)
|
||||||
} else if (e.data?.marker == 'fraternity') {//点击互助会
|
} else if (e.data?.marker == 'fraternity') {//点击互助会
|
||||||
this.getMapFraternityData(e.data)
|
this.dialog = true
|
||||||
|
const {fraternity_name, marker: mapType} = e.data
|
||||||
|
this.detail = {eventType: fraternity_name, mapType, ...e.data}
|
||||||
} else if (e.data?.unique_id) {//点击地区
|
} else if (e.data?.unique_id) {//点击地区
|
||||||
this.getMapArea(e.data)
|
this.getMapArea(e.data)
|
||||||
}
|
}
|
||||||
@@ -580,24 +601,35 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
getMapArea(area) {
|
getMapArea(area) {
|
||||||
this.instance.post("/app/fdDiy/mapAreaInfo", null, {params: {areaId: area.unique_id.padEnd(12, '0')}}).then(res => {
|
const area_code = this.transferAreaCode(area.unique_id)
|
||||||
if (res?.data) {
|
let info = {}, fraternity = {}
|
||||||
this.dialog = true
|
Promise.all([
|
||||||
const {村社区数量, 居民群数量, 居民数, 网格数, 群成员数量, 户数, 互助会 = 0, 会员数量 = 0} = res.data
|
this.instance.post("/app/fdDiy/mapAreaInfo", null, {params: {areaId: area.unique_id.padEnd(12, '0')}}).then(res => {
|
||||||
this.detail = {
|
if (res?.data) {
|
||||||
eventType: area.name,
|
return info = res.data
|
||||||
mapType: 'area', ...res.data,
|
|
||||||
sta: {村社区数量, 居民群数量, 居民数, 网格数, 群成员数量, 户数, 互助会, 会员数量}
|
|
||||||
}
|
}
|
||||||
|
}),
|
||||||
|
this.instance.get("/hzh/count-fraternity", {params: {area_code}}).then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
let 互助会 = 0, 会员数量 = 0
|
||||||
|
res.data.forEach(e => {
|
||||||
|
互助会 += e.number
|
||||||
|
会员数量 += e.member_number
|
||||||
|
})
|
||||||
|
return fraternity = {互助会, 会员数量, list: res.data}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]).then(() => {
|
||||||
|
this.dialog = true
|
||||||
|
const {村社区数量, 居民群数量, 居民数, 网格数, 群成员数量, 户数} = info,
|
||||||
|
{互助会 = 0, 会员数量 = 0} = fraternity
|
||||||
|
this.detail = {
|
||||||
|
eventType: area.name,
|
||||||
|
mapType: 'area', ...info, fraternities: fraternity.list,
|
||||||
|
sta: {村社区数量, 居民群数量, 居民数, 网格数, 群成员数量, 户数, 互助会, 会员数量}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
|
||||||
getMapFraternityData(area) {
|
|
||||||
console.log(area)
|
|
||||||
this.instance.get("/hzh/find-fraternity-detail", {params: {page_size: 999, area_code: undefined}}).then(res => {
|
|
||||||
if (res?.data) {
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
handleRealtimeEventDialog({rowIndex}) {
|
handleRealtimeEventDialog({rowIndex}) {
|
||||||
const row = this.realtimeEvents.meta[rowIndex]
|
const row = this.realtimeEvents.meta[rowIndex]
|
||||||
@@ -718,9 +750,19 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
transferAreaCode(code) {//与互助会地区编码互通
|
transferAreaCode(code) {//与互助会地区编码互通
|
||||||
const format = str => Number(str).toString().padStart(2, '0')
|
const format = str => Number(str).toString().padStart(3, '0'),
|
||||||
return code.substring(0, 6) + format(code.substring(6, 9))
|
last = /0{6}$/.test(code) ? '' : format(code.substring(6, 9))
|
||||||
}
|
return code.substring(0, 6) + last
|
||||||
|
},
|
||||||
|
getFraternityData() {
|
||||||
|
const area_code = this.transferAreaCode(this.areaId)
|
||||||
|
this.instance.get("/hzh/find-fraternity-member-detail", {params: {area_code}}).then(res => {
|
||||||
|
if (res?.data) {
|
||||||
|
this.dialog = true
|
||||||
|
this.detail = {eventType: "互助会信息", mapType: 'fraternitySta', list: res.data}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
Vue.use(scrollBoard)
|
Vue.use(scrollBoard)
|
||||||
@@ -1055,5 +1097,10 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fraternityImg {
|
||||||
|
width: 244px;
|
||||||
|
height: 268px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user