index.jsx 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import { useState, useEffect, useCallback } from 'react'
  2. import { useSelector } from 'react-redux'
  3. import Taro from '@tarojs/taro'
  4. import { ScrollView } from '@tarojs/components'
  5. import withLayout from '@/layout'
  6. import ProjectListItem from '@/components/ProjectListItem/index'
  7. // import ShareToCircle from '@/components/ShareToCircle/index'
  8. import FirstScreen from '@/components/FirstScreen'
  9. import { fetch } from '@/utils/request'
  10. import { API_BANNER_LIST, API_INDEX_PROJECTS } from '@/constants/api'
  11. import useParams from '@/utils/hooks/useParams'
  12. import useShare from '@/utils/hooks/useShare'
  13. import useScreen from '@/utils/hooks/useScreen'
  14. import nav2Target from '@/utils/nav2Target'
  15. import ChatIcon from '@/components/ChatIcon/index'
  16. import { ROLE_CODE } from "@/constants/user";
  17. import Location from './components/Location/index'
  18. import Banner from './components/Banner/index'
  19. import Menu from './components/Menu/index'
  20. import HotRecommend from './components/HotRecommend/index'
  21. import NewestNnews from './components/NewestNnews/index'
  22. import LiveSale from './components/LiveSale/index'
  23. import ColumnTitle from './components/ColumnTitle/index'
  24. import useIndexShareContent from './useIndexShareContent'
  25. import './index.scss'
  26. export default withLayout((props) => {
  27. const { city, router, person, trackData, page, mode } = props
  28. const isSinglePage = mode === 'singlePage'
  29. // 本页面分享或者海报参数
  30. const paramsRef = useParams({person, from: `${page.type}_share`})
  31. const { miniApp } = useSelector(s => s.user.userInfo)
  32. const [BannerList, setBannerList] = useState([])
  33. const [ProjectList, setProjectList] = useState([])
  34. const [ShowHotRecommend, setShowHotRecommend] = useState(false)
  35. const [ShowNewestNnews, setShowNewestNnews] = useState(false)
  36. const [ShowLive, setShowLive] = useState(false)
  37. const shareContent = useIndexShareContent(miniApp, paramsRef, router)
  38. // 开屏广告
  39. const [screenInfo, screenVisible, toggleShowScreen] = useScreen(city.id, person)
  40. // 分享
  41. useShare(shareContent, trackData)
  42. const GetBanner = () => { // 获取banner
  43. fetch({ url: `${API_BANNER_LIST}/banner`, method: 'get', payload: { cityId: city.id, showPosition: 'index' } }).then((res) => {
  44. setBannerList(res || [])
  45. })
  46. }
  47. const GetProjectList = () => { // 获取项目列表
  48. fetch({ url: API_INDEX_PROJECTS, method: 'get', payload: { cityId: city.id, pageNum: 1, pageSize: 20 } }).then((res) => {
  49. setProjectList(res.records || [])
  50. })
  51. }
  52. const HotRecommendChange = (e) => {
  53. setShowHotRecommend(e)
  54. }
  55. const NewestNnewsChange = (e) => {
  56. setShowNewestNnews(e)
  57. }
  58. const LiveChange = (e) => {
  59. setShowLive(e)
  60. }
  61. const handleScreen = () => {
  62. toggleShowScreen()
  63. if(person.personType ===ROLE_CODE.BROKER){
  64. Taro.navigateTo({ url: screenInfo.linkPage })
  65. }else{
  66. nav2Target(screenInfo)
  67. }
  68. }
  69. useEffect(() => {
  70. if (city?.id) {
  71. GetBanner()
  72. GetProjectList()
  73. }
  74. }, [city?.id])
  75. const toBuilingList = useCallback(() => Taro.navigateTo({ url: `/pages/index/buildingList/index` }), [])
  76. return (
  77. <view className='Page Index'>
  78. <ChatIcon />
  79. {/* 开屏广告 */}
  80. <FirstScreen
  81. info={screenInfo}
  82. visible={screenVisible && !isSinglePage}
  83. onClick={handleScreen}
  84. onClose={toggleShowScreen}
  85. />
  86. <ScrollView scroll-y>
  87. <view className='PageContent'>
  88. {/* 定位 */}
  89. <view className='Location'>
  90. <Location></Location>
  91. </view>
  92. {/* banner */}
  93. <view className='Banner'>
  94. <view>
  95. <view>
  96. <Banner List={BannerList}></Banner>
  97. </view>
  98. </view>
  99. </view>
  100. {/* 菜单 */}
  101. <view className='Menu'>
  102. <Menu></Menu>
  103. </view>
  104. {/* 成交喜报 */}
  105. {person?.personType===ROLE_CODE.BROKER&&<view className='NewestNnews' style={{display: ShowNewestNnews ? 'block' : 'none'}}>
  106. {/* <ColumnTitle Name='热门推荐' Icon='icon-shoucang'></ColumnTitle> */}
  107. <NewestNnews change={NewestNnewsChange}></NewestNnews>
  108. </view>}
  109. {/* 热门推荐 */}
  110. <view className='HotRecommend' style={{display: ShowHotRecommend ? 'block' : 'none'}}>
  111. <ColumnTitle Name='热门推荐' Icon='icon-shoucang'></ColumnTitle>
  112. <HotRecommend change={HotRecommendChange}></HotRecommend>
  113. </view>
  114. {/* 直播购房 */}
  115. <view className='LiveSale' style={{display: ShowLive ? 'block' : 'none'}}>
  116. <ColumnTitle Name='直播购房' Icon='icon-yinpin' ShowMore ToMore={() => { Taro.switchTab({ url: `/pages/video/index` }) }}></ColumnTitle>
  117. <LiveSale change={LiveChange}></LiveSale>
  118. </view>
  119. {/* 全部项目 */}
  120. <view className='AllProject'>
  121. <ColumnTitle Name='推荐楼盘' Icon='icon-aixin' ShowMore ToMore={toBuilingList}></ColumnTitle>
  122. <view className='ProjectList'>
  123. {
  124. ProjectList.map((item, index) => (
  125. <ProjectListItem Data={item} key={`ProjectListItem-${index}`}></ProjectListItem>
  126. ))
  127. }
  128. </view>
  129. </view>
  130. {/* bottom */}
  131. <view className='PageBottom' onClick={toBuilingList}>
  132. <text>点击查看更多</text>
  133. </view>
  134. </view>
  135. </ScrollView>
  136. </view>
  137. )
  138. })