|
|
|
@ -1,16 +1,20 @@ |
|
|
|
|
import {FC, useCallback, useEffect, useRef, useState} from "react"; |
|
|
|
|
import {ScrollView, View} from "@tarojs/components"; |
|
|
|
|
import {FC, useCallback, useEffect, useState} from "react"; |
|
|
|
|
import {Image, ScrollView, View} from "@tarojs/components"; |
|
|
|
|
import styles from './list.module.scss' |
|
|
|
|
import Taro from "@tarojs/taro"; |
|
|
|
|
import Empty from "@/components/empty/empty"; |
|
|
|
|
import Spinner from "@/components/spinner"; |
|
|
|
|
import Img from "@/components/image/image"; |
|
|
|
|
import { SearchApi } from "@/api/search"; |
|
|
|
|
import { AtLoadMore } from 'taro-ui' |
|
|
|
|
import {rfc33392time} from "@/utils/day"; |
|
|
|
|
import play from "@/static/img/play.png"; |
|
|
|
|
|
|
|
|
|
type Props = { |
|
|
|
|
name:string |
|
|
|
|
clear:boolean |
|
|
|
|
} |
|
|
|
|
const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
const SearchList: FC<Props> = ({name,clear}) => { |
|
|
|
|
console.log(name,'name') |
|
|
|
|
const globalData = Taro.getApp().globalData |
|
|
|
|
const [page, setPage] = useState(1) |
|
|
|
|
const [brands, setBrands] = useState<any[]>([]) |
|
|
|
@ -19,12 +23,19 @@ const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
const [loading, setLoading] = useState(true) |
|
|
|
|
|
|
|
|
|
useEffect(()=>{ |
|
|
|
|
if(!clear){ |
|
|
|
|
setBrands([]) |
|
|
|
|
setLoading(true) |
|
|
|
|
} |
|
|
|
|
},[clear]) |
|
|
|
|
useEffect(() => { |
|
|
|
|
if(name && clear){ |
|
|
|
|
getData() |
|
|
|
|
}, [page,name]) |
|
|
|
|
} |
|
|
|
|
}, [page,name,clear]) |
|
|
|
|
|
|
|
|
|
const getData = useCallback(async () => { |
|
|
|
|
try { |
|
|
|
|
console.log(name) |
|
|
|
|
const data = await SearchApi.list(page, 10,name) |
|
|
|
|
if (page === 1) { |
|
|
|
|
if (data.data.length < 10) { |
|
|
|
@ -32,19 +43,24 @@ const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
} else { |
|
|
|
|
setText('上拉加载更多~') |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
setTotal(data.total) |
|
|
|
|
setBrands([ |
|
|
|
|
...data.data |
|
|
|
|
]) |
|
|
|
|
}else{ |
|
|
|
|
setBrands([ |
|
|
|
|
...brands, |
|
|
|
|
...data.data |
|
|
|
|
]) |
|
|
|
|
} |
|
|
|
|
setTotal(data.total) |
|
|
|
|
|
|
|
|
|
} catch (e) { |
|
|
|
|
} |
|
|
|
|
setLoading(false) |
|
|
|
|
}, [page,name]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function jumpInfo(id: number,type:string) { |
|
|
|
|
function jumpInfo(id: number,type:string,health:any) { |
|
|
|
|
console.log(type,'type') |
|
|
|
|
let url = '' |
|
|
|
|
switch (type){ |
|
|
|
@ -57,8 +73,10 @@ const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
case 'article': |
|
|
|
|
url = '/pages/preview/illness/article/article' |
|
|
|
|
break |
|
|
|
|
case 'video_record': |
|
|
|
|
url = '/pages/preview/videoFull/videoFull' |
|
|
|
|
case 'video_records': |
|
|
|
|
return Taro.navigateTo({url: `/pages/preview/videoFull/videoFull?url=${health.resources.url}&poster=${health.url_path}&title=${health.title}`}) |
|
|
|
|
case 'courses': |
|
|
|
|
url = '/pages/business/videoInfo/videoInfo' |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
Taro.navigateTo({url: `${url}?id=${id}`}) |
|
|
|
@ -66,13 +84,12 @@ const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function onScrollToLower(){ |
|
|
|
|
useCallback(() => { |
|
|
|
|
if (brands?.length < total) { |
|
|
|
|
setPage(page + 1) |
|
|
|
|
getData().then() |
|
|
|
|
} else { |
|
|
|
|
setText('没有更多了~') |
|
|
|
|
} |
|
|
|
|
}, [total, brands]) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
@ -80,24 +97,68 @@ const SearchList: FC<{name:string}> = ({name}:Props) => { |
|
|
|
|
className='scrollview' |
|
|
|
|
scrollY |
|
|
|
|
scrollWithAnimation |
|
|
|
|
style={{height:`${globalData.windowHeight-60}px`}} |
|
|
|
|
style={{height:`${globalData.windowHeight-60}px`,backgroundColor:`#f5f5f5`}} |
|
|
|
|
onScrollToLower={onScrollToLower} |
|
|
|
|
> |
|
|
|
|
<Spinner enable={loading} overlay/> |
|
|
|
|
{ loading && <AtLoadMore status={'loading'}/>} |
|
|
|
|
{ |
|
|
|
|
brands.length ? |
|
|
|
|
brands.length >= 1 && !loading && |
|
|
|
|
<> |
|
|
|
|
{brands.map((d) => |
|
|
|
|
<View onClick={() => jumpInfo(d.data.id,d.data.table,d.data['@data'])} className={styles.box} key={d.data.id}> |
|
|
|
|
{ |
|
|
|
|
d.data.table === 'brand' && |
|
|
|
|
<> |
|
|
|
|
{brands.map((d) => <View onClick={() => jumpInfo(d.data.id,d.data.table)} className={styles.box} key={d.data.id}> |
|
|
|
|
<Img width={128} height={128} src={d.data['@data'].logo} mode='aspectFill' className={styles.image}/> |
|
|
|
|
<View className={styles.rightBox}> |
|
|
|
|
<View className='font-weight mb-2 font-28'>{d.data.title}</View> |
|
|
|
|
<View className={styles.desc}>{d.graphic_introduction}</View> |
|
|
|
|
<View className={styles.desc}>{d.data.content || '暂无品牌简介'}</View> |
|
|
|
|
</View> |
|
|
|
|
</> |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
d.data.table === 'article' && |
|
|
|
|
<> |
|
|
|
|
<View className={styles.articleLeftBox}> |
|
|
|
|
<View className='font-weight mb-2 font-28 lh-40'>{d.data['@data'].title}</View> |
|
|
|
|
<View className={styles.desc}>{rfc33392time(d.data['@data'].created_at)} {d.data['@data'].page_view}阅读</View> |
|
|
|
|
</View> |
|
|
|
|
</View>) |
|
|
|
|
<Img width={172} height={128} src={d.data['@data'].logo} mode='aspectFill' className={styles.image}/> |
|
|
|
|
</> |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
d.data.table === 'video_records' && |
|
|
|
|
<> |
|
|
|
|
<Img width={192} height={192} src={d.data['@data'].url_path} mode='aspectFill' className={styles.image}/> |
|
|
|
|
<Image src={play} className={styles.play} mode='aspectFit'/> |
|
|
|
|
<View className={styles.videoRightBox}> |
|
|
|
|
<View className='font-weight mb-2 font-28 lh-40'>{d.data['@data'].title}</View> |
|
|
|
|
<View className={styles.desc}>{d.data['@data'].introduction}</View> |
|
|
|
|
<View className={`${styles.desc} mt-2`}>播放量: {d.data['@data'].video_view}</View> |
|
|
|
|
</View> |
|
|
|
|
</> |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
d.data.table === 'courses' && |
|
|
|
|
<> |
|
|
|
|
<Img width={192} height={138} src={d.data['@data'].thumb} mode='aspectFill' className={styles.image}/> |
|
|
|
|
<View className={styles.articleLeftBox}> |
|
|
|
|
<View className='font-weight mb-2 font-28 lh-40'>{d.data['@data'].title}</View> |
|
|
|
|
<View className={styles.desc}>课时:{d.data['@data'].class_hour}节 销量:{d.data['@data'].charge}</View> |
|
|
|
|
</View> |
|
|
|
|
</> |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</View> |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
<View style={{width: '710rpx', textAlign: 'center', color: '#999'}} className="font-28 mt-3">{text}</View> |
|
|
|
|
</> : <Empty name='空空如也'/> |
|
|
|
|
<View style={{width: '750rpx', textAlign: 'center', color: '#999'}} className="font-28 mt-3 mb-3">{text}</View> |
|
|
|
|
</> |
|
|
|
|
} |
|
|
|
|
{ !loading && brands.length === 0 && <Empty name='空空如也'/>} |
|
|
|
|
</ScrollView> |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|