Commit d60876f6 authored by 郭铭瑶's avatar 郭铭瑶 🤘

地理筛选对接接口

parent 0686eb66
...@@ -33,6 +33,7 @@ export default { ...@@ -33,6 +33,7 @@ export default {
COMMUNITY: '931687e6-b53a-4f2d-8ab9-83b4a7d5ea8f', COMMUNITY: '931687e6-b53a-4f2d-8ab9-83b4a7d5ea8f',
STREET: 'af3ce0b6-f32d-4914-a336-bb7f6398ff85', STREET: 'af3ce0b6-f32d-4914-a336-bb7f6398ff85',
BUILDING: 'e08e40c6-a15c-447d-8f9e-786216d93443', BUILDING: 'e08e40c6-a15c-447d-8f9e-786216d93443',
ROOM: '24b5403c-9b6e-4882-b049-51ef197e3aa7',
ATTACHMENT: '988fc63e-fa55-4729-851d-24c4355213f2', ATTACHMENT: '988fc63e-fa55-4729-851d-24c4355213f2',
TAG: '54344e11-c0d3-40d5-8f99-771066249328', TAG: '54344e11-c0d3-40d5-8f99-771066249328',
} }
...@@ -64,6 +64,13 @@ export async function useFetchBuilding(params: QueryProps) { ...@@ -64,6 +64,13 @@ export async function useFetchBuilding(params: QueryProps) {
}) })
return res && res.data && res.data.result return res && res.data && res.data.result
} }
export async function useFetchRoom(params: QueryProps) {
const res = await ajax.get({
url: api.ROOM,
params,
})
return res && res.data && res.data.result
}
export async function useFetchAttachment(params: QueryProps) { export async function useFetchAttachment(params: QueryProps) {
const res = await ajax.get({ const res = await ajax.get({
url: api.ATTACHMENT, url: api.ATTACHMENT,
......
...@@ -16,10 +16,10 @@ ...@@ -16,10 +16,10 @@
</div> </div>
</template> </template>
<div class="content"> <div class="content">
<p class="name">某某社区某某居委某某小区</p> <p class="name">{{ path.join('') }}</p>
<div v-if="showBuildingDetail" class="building"> <div v-if="showBuildingDetail" class="building">
<div class="nav"> <div class="nav">
<p>{{ curBuilding }}</p> <p>{{ curBuilding['小区名称'] + curBuilding['楼宇名称'] }}</p>
<span @click="showBuildingDetail = false"> <span @click="showBuildingDetail = false">
返回 返回
<n-icon size=".09rem"> <n-icon size=".09rem">
...@@ -58,11 +58,12 @@ ...@@ -58,11 +58,12 @@
:key="n" :key="n"
class="icon" class="icon"
size=".1rem" size=".1rem"
@click.prevent.stop="selectMember(m)"
> >
<svg-icon :data="member" original /> <svg-icon :data="member" original />
</n-icon> </n-icon>
</div> </div>
<p>{{ room.name }}</p> <p>{{ room['房间号'] }}</p>
</div> </div>
</div> </div>
</n-carousel> </n-carousel>
...@@ -74,14 +75,16 @@ ...@@ -74,14 +75,16 @@
<div <div
v-for="(item, i) in list" v-for="(item, i) in list"
:key="i" :key="i"
:class="{ on: curBuilding === item }" :class="{
on: (curBuilding && curBuilding['楼宇名称']) === item['楼宇名称'],
}"
@click="setBuilding(item)" @click="setBuilding(item)"
> >
<p> <p>
<n-icon class="dot" size=".08rem"> <n-icon class="dot" size=".08rem">
<svg-icon :data="dot" /> <svg-icon :data="dot" />
</n-icon> </n-icon>
{{ item }} {{ item['楼宇名称'] }}
</p> </p>
<span class="next" @click="buildingNext(item)"> <span class="next" @click="buildingNext(item)">
下一级 下一级
...@@ -97,97 +100,99 @@ ...@@ -97,97 +100,99 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed, onMounted, ref } from 'vue' import { computed, onMounted, PropType, ref } from 'vue'
import store from '@/store' import store from '@/store'
import dot from '@images/dot.svg' import dot from '@images/dot.svg'
import { ArrowForward, ArrowBack, ArrowDown } from '@vicons/ionicons5' import { ArrowForward, ArrowBack, ArrowDown } from '@vicons/ionicons5'
import member from '@images/member.svg' import member from '@images/member.svg'
import { useFetchRoom, useFetchMember } from '@/hooks/useFetch'
const props = defineProps({
list: {
type: Array as PropType<any[]>,
default: () => [],
},
path: {
type: Array as PropType<any[]>,
default: () => [],
},
})
const show = computed(() => store.state.showBuildingDrawer) const show = computed(() => store.state.showBuildingDrawer)
const back = () => store.commit('SET_BUILDING_DRAWER', false) const curBuilding = ref<string | null>(null)
const showBuildingDetail = ref(false)
const back = () => {
showBuildingDetail.value = false
curBuilding.value = null
store.commit('SET_BUILDING_DRAWER', false)
}
const closeDrawer = () => { const closeDrawer = () => {
back() back()
store.commit('SET_FILTER_DRAWER', false) store.commit('SET_FILTER_DRAWER', false)
} }
const curBuilding = ref<string | null>(null) const setBuilding = (building: any) => (curBuilding.value = building)
const showBuildingDetail = ref(false)
onMounted(() => (showBuildingDetail.value = false))
const setBuilding = (name: string) => (curBuilding.value = name)
const floors = ref<any[]>([]) const floors = ref<any[]>([])
const buildingNext = (name: string) => {
setBuilding(name) const getMembers = async (data: any) => {
floors.value = [ return Promise.all(
{ (
floor: 'XXF', await useFetchMember({
room: 4, q: `paths @ "所属小区" && string == "${data['所属小区']}", paths @ "所属楼宇" && string @ "${data['所属楼宇']}",paths @ "所属房间" && string == ${data['房间号']}`,
member: 3, })
rooms: [ ).map((item: any) => item.extra),
{ name: 'XXX', members: [1, 2, 3, 4, 5, 6] }, )
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, const getRooms = async (query: string) => {
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, return Promise.all(
], (
}, await useFetchRoom({
{ q: query,
floor: 'XXF', })
room: 4, ).map(async (item: any) => {
member: 3, return {
rooms: [ ...item.extra,
{ name: 'XXX', members: [1, 2, 3, 4, 5, 6] }, members: await getMembers(item.extra),
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }),
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, )
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }
], const getFloors = async (data: any) => {
}, return Promise.all(
{ (
floor: 'XXF', await useFetchRoom({
room: 4, a: 'id,count',
member: 3, keys: '层数',
rooms: [ q: `paths @ "所属小区" && string == "${data['小区名称']}", paths @ "所属楼宇" string @ "${data['号']}"`,
{ name: 'XXX', members: [1, 2, 3, 4, 5, 6] }, })
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, ).map(async (item: any) => {
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, const rooms = await getRooms(
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, `paths @ "所属小区" && string == "${data['小区名称']}", paths @ "所属楼宇" && string @ "${data['号']}",paths @ "层数" && number == ${item['层数']}`,
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, )
], let memberAmount = 0
}, rooms.forEach((item: any) => (memberAmount += item.members.length))
{ return {
floor: 'XXF', floor: `${item['层数']}F`,
room: 4, room: item.__aggregate__ || 0,
member: 3, member: memberAmount,
rooms: [ rooms,
{ name: 'XXX', members: [1, 2, 3, 4, 5, 6] }, }
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }),
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, )
{ name: 'XXX', members: [1, 2, 3, 4, 5] }, }
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
], const buildingNext = async (building: any) => {
}, floors.value = await getFloors(building)
{ setBuilding(building)
floor: 'XXF',
room: 4,
member: 3,
rooms: [
{ name: 'XXX', members: [1, 2, 3, 4, 5, 6] },
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
{ name: 'XXX', members: [1, 2, 3, 4, 5] },
],
},
]
showBuildingDetail.value = true showBuildingDetail.value = true
// TODO
} }
const list = [
'XX小区某1号楼', const selectMember = (data: any) => {
'XX小区某2号楼', console.log('点击了房间成员:', data)
'XX小区某3号楼', // TODO 展示详情
'XX小区某4号楼', }
'XX小区某5号楼',
]
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
</n-icon> </n-icon>
{{ item }} {{ item }}
</p> </p>
<span class="next" @click="areaNext(item)"> <span class="next" @click.stop="areaNext(item)">
下一级 下一级
<n-icon class="icon" size=".1rem" color="#dd505E"> <n-icon class="icon" size=".1rem" color="#dd505E">
<ArrowForward /> <ArrowForward />
...@@ -110,7 +110,7 @@ ...@@ -110,7 +110,7 @@
</n-tab-pane> </n-tab-pane>
<n-tab-pane name="居委" tab="居委" class="geo-list"> <n-tab-pane name="居委" tab="居委" class="geo-list">
<div <div
v-for="(item, i) in list2" v-for="(item, i) in committees"
:key="i" :key="i"
:class="{ on: curCommittee === item }" :class="{ on: curCommittee === item }"
@click="setCommittee(item)" @click="setCommittee(item)"
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
</n-icon> </n-icon>
{{ item }} {{ item }}
</p> </p>
<span class="next" @click="committeeNext(item)"> <span class="next" @click.stop="committeeNext(item)">
下一级 下一级
<n-icon class="icon" size=".1rem" color="#dd505E"> <n-icon class="icon" size=".1rem" color="#dd505E">
<ArrowForward /> <ArrowForward />
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
</n-tab-pane> </n-tab-pane>
<n-tab-pane name="小区" tab="小区" class="geo-list"> <n-tab-pane name="小区" tab="小区" class="geo-list">
<div <div
v-for="(item, i) in list3" v-for="(item, i) in communities"
:key="i" :key="i"
:class="{ on: curCommunity === item }" :class="{ on: curCommunity === item }"
@click="setCommunity(item)" @click="setCommunity(item)"
...@@ -142,7 +142,7 @@ ...@@ -142,7 +142,7 @@
</n-icon> </n-icon>
{{ item }} {{ item }}
</p> </p>
<span class="next" @click="communityNext(item)"> <span class="next" @click.stop="communityNext(item)">
下一级 下一级
<n-icon class="icon" size=".1rem" color="#dd505E"> <n-icon class="icon" size=".1rem" color="#dd505E">
<ArrowForward /> <ArrowForward />
...@@ -155,6 +155,7 @@ ...@@ -155,6 +155,7 @@
</div> </div>
</n-drawer-content> </n-drawer-content>
</n-drawer> </n-drawer>
<BuildingDrawer :list="buildingList" :path="curPath" />
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -165,8 +166,12 @@ import { ...@@ -165,8 +166,12 @@ import {
useFetchMember, useFetchMember,
useFetchTag, useFetchTag,
useFetchArea, useFetchArea,
useFetchCommittee,
useFetchCommunity,
useFetchBuilding,
} from '@/hooks/useFetch' } from '@/hooks/useFetch'
import useExportFile from '@/hooks/useExportFile' import useExportFile from '@/hooks/useExportFile'
import BuildingDrawer from './building-drawer.vue'
import dayjs from '@/util/dayjs' import dayjs from '@/util/dayjs'
import { CaretForward, ArrowBack, ArrowForward } from '@vicons/ionicons5' import { CaretForward, ArrowBack, ArrowForward } from '@vicons/ionicons5'
import exportIcon from '@images/export.svg' import exportIcon from '@images/export.svg'
...@@ -198,35 +203,49 @@ const getMemberTags = async () => { ...@@ -198,35 +203,49 @@ const getMemberTags = async () => {
} }
const areas = ref([]) const areas = ref([])
const list2 = [ const committees = ref([])
'某某居委1', const communities = ref([])
'某某居委2',
'某某居委3',
'某某居委4',
'某某居委5',
'某某居委6',
]
const list3 = [
'某某小区1',
'某某小区2',
'某某小区3',
'某某小区4',
'某某小区5',
'某某小区6',
]
const getAreas = async () => { const getAreas = async () => {
areas.value = ( areas.value = (
await useFetchArea({ await useFetchArea({
a: 'id,count', a: 'id,count',
keys: '所属社区', keys: '所属社区',
}) })
).map((item: any) => item['所属社区']) )
.map((item: any) => item['所属社区'])
.filter((item: string) => !!item)
}
const getCommittees = async (name?: string) => {
const query = name ? `paths @ "所属社区" && string == "${name}"` : undefined
committees.value = (
await useFetchCommittee({
a: 'id,count',
keys: '所属居委',
q: query,
})
)
.map((item: any) => item['所属居委'])
.filter((item: string) => !!item)
}
const getCommunities = async (name?: string) => {
const query = name ? `paths @ "所属居委" && string == "${name}"` : undefined
communities.value = (
await useFetchCommunity({
a: 'id,count',
keys: '居住区名称',
q: query,
})
)
.map((item: any) => item['居住区名称'])
.filter((item: string) => !!item)
} }
onMounted(() => { onMounted(() => {
getOrgTags() getOrgTags()
getMemberTags() getMemberTags()
getAreas() getAreas()
getCommittees()
getCommunities()
}) })
const getDetail = async (type: string, name: string) => { const getDetail = async (type: string, name: string) => {
...@@ -243,13 +262,11 @@ const getDetail = async (type: string, name: string) => { ...@@ -243,13 +262,11 @@ const getDetail = async (type: string, name: string) => {
dayjs().subtract(59, 'year').format('YYYY-MM-DD'), dayjs().subtract(59, 'year').format('YYYY-MM-DD'),
dayjs().subtract(50, 'year').format('YYYY-MM-DD'), dayjs().subtract(50, 'year').format('YYYY-MM-DD'),
] ]
console.log('---', date)
res = await useFetchMember({ res = await useFetchMember({
q: `paths @ "加入中共党组织日期" && string >= "${date[0]}",paths @ "加入中共党组织日期" && string <= "${date[1]}"`, q: `paths @ "加入中共党组织日期" && string >= "${date[0]}",paths @ "加入中共党组织日期" && string <= "${date[1]}"`,
}) })
} else if (name === '党心暖我心') { } else if (name === '党心暖我心') {
const date = dayjs().subtract(60, 'year').format('YYYY-MM-DD') const date = dayjs().subtract(60, 'year').format('YYYY-MM-DD')
res = await useFetchMember({ res = await useFetchMember({
q: `paths @ "加入中共党组织日期" && string <= "${date}"`, q: `paths @ "加入中共党组织日期" && string <= "${date}"`,
}) })
...@@ -305,20 +322,49 @@ const curArea = ref<string | null>(null) ...@@ -305,20 +322,49 @@ const curArea = ref<string | null>(null)
const curCommittee = ref<string | null>(null) const curCommittee = ref<string | null>(null)
const curCommunity = ref<string | null>(null) const curCommunity = ref<string | null>(null)
const setArea = (name: string) => { const setArea = (name: string) => {
curArea.value = name if (curArea.value === name) {
curArea.value = null
} else {
curArea.value = name
}
console.log(name, curArea.value) console.log(name, curArea.value)
} }
const setCommittee = (name: string) => (curCommittee.value = name) const setCommittee = (name: string) => {
const setCommunity = (name: string) => (curCommunity.value = name) if (curCommittee.value === name) {
const areaNext = (name: string) => { curCommittee.value = null
} else {
curCommittee.value = name
}
}
const setCommunity = (name: string) => {
if (curCommunity.value === name) {
curCommunity.value = null
} else {
curCommunity.value = name
}
}
const areaNext = async (name: string) => {
await getCommittees(name)
setArea(name) setArea(name)
curGeo.value = '居委' curGeo.value = '居委'
} }
const committeeNext = (name: string) => { const committeeNext = async (name: string) => {
await getCommunities(name)
setCommittee(name) setCommittee(name)
curGeo.value = '小区' curGeo.value = '小区'
} }
const communityNext = (name: string) => {
const buildingList = ref([])
const getBuildings = async (name: string) => {
buildingList.value = (
await useFetchBuilding({
q: `paths @ "小区名称" && string == "${name}"`,
})
).map((item: any) => item.extra)
}
const communityNext = async (name: string) => {
await getBuildings(name)
setCommunity(name) setCommunity(name)
store.commit('SET_BUILDING_DRAWER', true) store.commit('SET_BUILDING_DRAWER', true)
} }
...@@ -334,17 +380,41 @@ const toPreStep = () => { ...@@ -334,17 +380,41 @@ const toPreStep = () => {
return return
} }
} }
watch(
() => curGeo.value,
(cur) => {
if (cur === '居委') {
if (curArea.value) {
getCommittees(curArea.value)
} else {
getCommittees()
}
} else if (cur === '小区') {
if (curCommittee.value) {
getCommunities(curCommittee.value)
} else {
getCommunities()
}
}
},
)
const curPath = computed(() => { const curPath = computed(() => {
let result = '' if (curGeo.value === '社区') return [curArea.value || '社区']
curArea.value && (result += curArea.value) if (curGeo.value === '居委' && !curArea.value)
curArea.value && return [curCommittee.value || '居委']
(result += if (curGeo.value === '小区' && !curCommittee.value)
curGeo.value === '社区' ? '' : `/${curCommittee.value || '居委'}`) return [curCommunity.value || '小区']
curCommittee.value &&
(result += const result = []
curGeo.value === '居委' ? '' : `/${curCommunity.value || '小区'}`) curArea.value && result.push(curArea.value)
if (!result) return [] curCommittee.value
return result.split('/') ? result.push(curCommittee.value)
: curGeo.value === '居委' && result.push('居委')
curCommunity.value
? result.push(curCommunity.value)
: curGeo.value === '小区' && result.push('小区')
return result
}) })
</script> </script>
......
...@@ -96,7 +96,6 @@ ...@@ -96,7 +96,6 @@
@select="handleSelect" @select="handleSelect"
/> />
<FilterDrawer /> <FilterDrawer />
<BuildingDrawer />
<ActivityDrawer /> <ActivityDrawer />
<StructModal /> <StructModal />
</template> </template>
...@@ -109,7 +108,6 @@ import useDebounce from '@/hooks/useDebounce' ...@@ -109,7 +108,6 @@ import useDebounce from '@/hooks/useDebounce'
import SearchModal from './search-modal.vue' import SearchModal from './search-modal.vue'
import FilterDrawer from './filter-drawer.vue' import FilterDrawer from './filter-drawer.vue'
import ActivityDrawer from './activity-drawer.vue' import ActivityDrawer from './activity-drawer.vue'
import BuildingDrawer from './building-drawer.vue'
import StructModal from './struct-modal.vue' import StructModal from './struct-modal.vue'
import nav1 from '@images/nav1.svg' import nav1 from '@images/nav1.svg'
import nav2 from '@images/nav2.svg' import nav2 from '@images/nav2.svg'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment