123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- import { useState, useEffect } from 'react'
- import withLayout from '@/layout'
- import { ScrollView } from '@tarojs/components'
- import Disclaimer from '@/components/Disclaimer'
- import Poster from '@/components/Poster'
- import { fetch } from '@/utils/request'
- import { API_ITEMS_DETAIL } from '@/constants/api'
- import useParams from '@/utils/hooks/useParams'
- import useShare from '@/utils/hooks/useShare'
- import usePoster from '@/utils/hooks/usePoster'
- import { savePoint } from '@/services/common'
- import { addItemUv } from '@/services/item'
- import DetailBottom from './components/DetailBottom/index'
- import BuildingDetailBanner from './components/BuildingDetailBanner/index'
- import BasicInfo from './components/BasicInfo/index'
- import SpecialPriceHouse from './components/SpecialPriceHouse/index'
- import ProjectDynamic from './components/ProjectDynamic/index'
- import PropertyConsultant from './components/PropertyConsultant/index'
- import Periphery from './components/Periphery/index'
- import HouseTypeIntro from './components/HouseTypeIntro/index'
- import MarketingActivity from './components/MarketingActivity/index'
- import LivingActivity from './components/LivingActivity/index'
- import News from './components/News/index'
- import Pictures from './components/Pictures/index'
-
- import './index.scss'
-
- export default withLayout((props) => {
- const { router, person, shareContent, trackData, page, setNavigationBarTitle } = props
- const { id } = router.params
-
- const [showPoster, setShowPoster] = useState(false)
- const [DetailInfo, setDetailInfo] = useState({})
- const [PictureList, setPictureList] = useState([])
-
- // 本页面分享或者海报参数
- const paramsRef = useParams({id, buildingId: id, person, from: `${page.type}_share`})
-
- const fullTrackData = { ...trackData, buildingId: id }
-
- // 分享
- useShare({
- title: shareContent.shareContentTitle || DetailInfo?.buildingName,
- path: `${router.path}?${paramsRef.current}`,
- image: shareContent.shareContentImg,
- },
- fullTrackData,
- )
-
- useEffect(() => {
- if(trackData.eventType && DetailInfo.buildingId) {
- savePoint({
- ...trackData,
- event: 'detail',
- eventType: 'building',
- buildingId: id,
- targetType: 'building'
- })
- addItemUv(id)
- }
- }, [trackData, DetailInfo])
-
- // 海报
- const posterData = usePoster(person, DetailInfo?.poster, router, paramsRef)
-
- useEffect(() => {
- // 获取楼盘信息
- fetch({ url: `${API_ITEMS_DETAIL}/${id}`, spin: true }).then((res) => {
- setDetailInfo(res || {})
- setNavigationBarTitle(res?.buildingName)
-
- if (res?.buildingApartment) {
- const List = res.buildingApartment.filter(item => item.apartmentType === 'photo')
- setPictureList(List.filter(item => item.buildingImgList.length > 0))
- }
-
- }).catch((err) => {
- console.error(err)
- })
-
- }, [id])
-
- // 户型图
- const houseTypeImages = (DetailInfo?.buildingApartment || []).filter(x => x.apartmentType === 'apart')
-
- return (
- <view className='Page buildingDetail flex-v'>
- <view className='flex-item'>
- <view>
- <ScrollView scroll-y>
- <view className='PageContent'>
-
- {/* banner */}
- <view className='BannerContainer'>
- <view>
- <view>
- {
- !!DetailInfo.buildingName &&
- <BuildingDetailBanner Info={DetailInfo}></BuildingDetailBanner>
- }
- </view>
- </view>
- </view>
-
- {/* content */}
- <view className='DetailContent'>
-
- {/* 基本信息 */}
- <view className='BasicInfo'>
- <BasicInfo Info={DetailInfo} trackData={fullTrackData}></BasicInfo>
- </view>
-
- {/* 特价房源 */}
- {
- (DetailInfo?.specialRoomList || []).length > 0 &&
- <view className='SpecialPriceHouse' style={{minHeight: 0}}>
- <SpecialPriceHouse List={DetailInfo?.specialRoomList}></SpecialPriceHouse>
- </view>
- }
-
- {/* 项目动态 */}
- {
- (DetailInfo?.trendList || []).length > 0 &&
- <view className='ProjectDynamic' style={{minHeight: 0}}>
- <ProjectDynamic List={DetailInfo?.trendList}></ProjectDynamic>
- </view>
- }
-
- {/* 置业顾问 */}
- {
- (DetailInfo?.consultants || []).length > 0 &&
- <view className='PropertyConsultant' style={{minHeight: 0}}>
- <PropertyConsultant Info={DetailInfo}></PropertyConsultant>
- </view>
- }
-
- {/* 位置及周边 */}
- <view className='Periphery' style={{minHeight: 0}}>
- <Periphery Info={DetailInfo}></Periphery>
- </view>
-
- {/* 户型介绍 */}
- {
- (houseTypeImages.length || []) > 0 &&
- <view className='HouseTypeIntro' style={{minHeight: 0}}>
- <HouseTypeIntro Info={houseTypeImages}></HouseTypeIntro>
- </view>
- }
-
- {/* 营销活动 */}
- <view className='MarketingActivity' style={{minHeight: 0}}>
- <MarketingActivity Info={DetailInfo}></MarketingActivity>
- </view>
-
- {/* 直播活动 */}
- {
- (DetailInfo?.liveActivityList || []).length > 0 &&
- <view className='LivingActivity' style={{minHeight: 0}}>
- <LivingActivity Info={DetailInfo}></LivingActivity>
- </view>
- }
-
- {/* 新鲜资讯 */}
- <view className='News' style={{minHeight: 0}}>
- <News Info={DetailInfo}></News>
- </view>
-
- {/* 相册 */}
- {
- (PictureList || []).length > 0 &&
- <view className='Pictures'>
- <Pictures List={PictureList}></Pictures>
- </view>
- }
-
- {/* 免责声明 */}
- <Disclaimer />
- </view>
-
- </view>
- </ScrollView>
- </view>
- </view>
-
- <view className='PageBottom'>
- <DetailBottom Info={DetailInfo} onPoster={() => setShowPoster(true)}></DetailBottom>
- </view>
-
- <Poster
- show={showPoster}
- dataSource={posterData}
- onClose={() => setShowPoster(false)}
- onSuccess={() => setShowPoster(false)}
- />
- </view>
- )
- })
|