123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- import { useEffect, useState } from 'react'
- import Taro from '@tarojs/taro'
- import withLayout from '@/layout'
- import { ScrollView, Image } from '@tarojs/components'
- import Disclaimer from '@/components/Disclaimer'
- import { getImgURL } from '@/utils/image'
- import { formateLeftTime } from '@/utils/tools'
- import { fetch } from '@/utils/request'
- import { API_SPECIAL_ROOM_LIST } from '@/constants/api'
- import '@/assets/css/iconfont.css'
- import './index.scss'
-
- const defaultRuleImage = 'https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/index-icon19.jpg'
-
- export default withLayout((props) => {
- const { city } = props
-
- const [PageList, setPageList] = useState([])
- const [IsPull, setPull] = useState(false)
- const [pageNumber, setPageNumber] = useState(1)
- const [HasNextPage, setHasNextPage] = useState(true)
-
- useEffect(() => {
- GetPageList()
- }, [pageNumber])
-
- const PageRefresh = () => { // 页面下拉刷新回调
- setPull(true)
- }
-
- const GetPageList = () => {
- setHasNextPage(false)
- fetch({ url: API_SPECIAL_ROOM_LIST, method: 'get', payload: { pageNumber, pageSize: 10, cityId: city?.id } }).then((res) => {
- setPageList(pageNumber === 1 ? res.records || [] : PageList.concat(res.records || []))
- setHasNextPage(res.current < res.pages)
- setPull(false)
- })
- }
-
- const PageLoadMore = () => { // 页面上拉加载更多
- if (HasNextPage) {
- setPageNumber(pageNumber + 1)
- }
- }
-
- useEffect(() => { // 下拉刷新触发
- if (IsPull) {
- if (pageNumber === 1) {
- GetPageList()
- } else {
- setPageNumber(1)
- }
- }
- }, [IsPull])
-
- const goto = (it) => {
- Taro.navigateTo({
- url: `/pages/index/buildingDetail/index?id=${it.buildingId}`
- })
- }
-
- return (
- <view className='Page specialPriceHouse'>
- <ScrollView scroll-y refresher-enabled refresher-triggered={IsPull} onrefresherrefresh={PageRefresh} onscrolltolower={PageLoadMore} refresher-background='#f8f8f8'>
- <view className='PageContent'>
-
- {/* 主图 */}
- <view className='MainPicture'>
- <Image mode='widthFix' src={defaultRuleImage}></Image>
- </view>
-
- {/* 列表 */}
- <view className='List'>
- {
- PageList.map((item, index) => {
- const mainImg = getImgURL(item?.buildingListImg?.length ? item.buildingListImg[0].url : null)
- const price = item.price || '价格待定'
- const shareNum = item.shareList?.total || 0
- const uvNum = item.uvList?.length || 0
-
- // 最多6个
- const tags = (item.buildingTag || []).map(x => x.tagName).slice(0, 6)
-
- //
- const specialRoomList = item.specialRoomList || []
-
- return (
- <view key={item.buildingId}>
- <view className='Title'>
- <view>
- <text className='iconfont icon-shoucang'></text>
- <text>{index + 1 > 9 ? index + 1 : `0${index + 1}`}</text>
- <text className='iconfont icon-shoucang'></text>
- </view>
- </view>
-
- <view className='InfoContent'>
- <view className='Img' onClick={() => goto(item)}>
- <Image mode='scaleToFill' src={mainImg} className='centerLabel'></Image>
- {
- item.panoramaList.length > 0 &&
- <Image mode='heightFix' className='Tips Vr' src={require('@/assets/index-icon18.png')} />
- }
- {
- item.videoUrl !== null &&
- <Image mode='heightFix' className='Tips Video' src={require('@/assets/index-icon19.png')} />
- }
- </view>
- <view className='Name flex-h' onClick={() => goto(item)}>
- <view className='flex-item'>
- <text>{item.buildingName}</text>
- </view>
- <text></text>
- <text>{price}</text>
- </view>
- <text className='Address' onClick={() => goto(item)}>{item.address}</text>
- <view className='Tag' onClick={() => goto(item)}>
- {
- tags.map((x) => (<text key={x}>{x}</text>))
- }
- </view>
- <view className='Views flex-h' onClick={() => goto(item)}>
- <view className='flex-item'>
- <text className='iconfont icon-fenxiang'></text>
- <text>{`${shareNum} 次分享`}</text>
- </view>
- {
- uvNum > 0 && (
- <view className='Icons'>
- {
- item.uvList.map((x) => (
- <view key={x.uvId}>
- <Image mode='scaleToFill' src={getImgURL(x.photoOravatar)} className='centerLabel'></Image>
- </view>
- ))
- }
- </view>
- )
- }
- <text>{`...${uvNum}人围观`}</text>
- </view>
- <view className='SpecialList'>
- <ScrollView scrollX>
- {
- specialRoomList.map((it) => {
- const unitPrice = it.area ? it.currentPrice / it.area : undefined
- const unitW = unitPrice ? `${Number(unitPrice).toFixed(0)}/㎡` : '单价待定'
- const currentW = it.currentPrice ? `${Number(it.currentPrice / 10000).toFixed(1)}万` : '待定'
- const originalW = it.originalPrice ? `${Number(it.originalPrice / 10000).toFixed(1)}万` : '待定'
- const thriftW = it.thriftPrice ? `省${Number(it.thriftPrice / 10000).toFixed(1)}万` : '待定'
- const leftTime = formateLeftTime(new Date(it.endTime) - new Date(), 'min');
-
- return (
- <view className='ListItem' key={it.specialRoomId}>
- <text className='Tips'>{thriftW}</text>
- <view className='Price'>
- <text>{currentW}</text>
- <text>{originalW}</text>
- </view>
- <text className='Time'>{`距结束 ${leftTime}`}</text>
- <text className='HouseType'>{`${it.unitType} ${unitW}`}</text>
- <text className='DoorNumber'>{it.roomName}</text>
- </view>
- )
- })
- }
- </ScrollView>
- </view>
- </view>
-
- </view>
- )
- })
- }
- </view>
-
- {/* <view className='Bottom'>
- <view>
- <view>
- <text className='iconfont icon-shengming'></text>
- <text>免责声明</text>
- </view>
- <view>
- <text>  以上价格仅供参考,具体一房一价的信息以售楼处展示为准。房屋位置交通、医疗、教育、商业等配套信息,来源于第三方不作为要约,仅供参考,双方具体权利义务应以法律规定及买卖合同约定为准。本平台对项目周边文化教育的介绍旨在提供相关信息1 意味着信息发布方对就学安排作出承诺。相关教育资首页信息存在调整的可能,应以政府教育主管部门门及办学颁布的政策规定为准。详情请仔细阅读</text>
- <text className='active'>《新联康使用免责条款》</text>
- </view>
- </view>
- </view> */}
-
- <Disclaimer />
-
- </view>
- </ScrollView>
- </view>
- )
- })
|