|
@@ -1,13 +1,87 @@
|
|
|
-import React, { useCallback } from 'react'
|
|
|
+import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
import { Swiper } from 'antd-mobile'
|
|
|
-import { myInfo } from '@/utils/history'
|
|
|
+import { A1listType, myInfo } from '@/utils/history'
|
|
|
+import classNames from 'classnames'
|
|
|
+import { EyeOutlined } from '@ant-design/icons'
|
|
|
+
|
|
|
+import CountUp from 'react-countup'
|
|
|
+import { A1_APIgetNumList } from '@/store/action/A1list'
|
|
|
+
|
|
|
+type NumListRowType = {
|
|
|
+ num: string
|
|
|
+ showVisit: number
|
|
|
+}
|
|
|
+
|
|
|
function A1home() {
|
|
|
// 新窗口打开页面
|
|
|
const openPage = useCallback((url: string) => {
|
|
|
window.open(url, '_self')
|
|
|
}, [])
|
|
|
|
|
|
+ const [list, setList] = useState<A1listType[]>([])
|
|
|
+
|
|
|
+ const listRef = useRef<A1listType[]>([])
|
|
|
+ useEffect(() => {
|
|
|
+ listRef.current = list
|
|
|
+ }, [list])
|
|
|
+
|
|
|
+ // 获取全部访问量
|
|
|
+ const getNumListFu = useCallback(async (base?: boolean) => {
|
|
|
+ // 参数 base =》第一次进页面
|
|
|
+
|
|
|
+ const res = await A1_APIgetNumList()
|
|
|
+ if (res.code === 0) {
|
|
|
+ const arr: NumListRowType[] = res.data
|
|
|
+
|
|
|
+ const listTemp = [...myInfo.swArr]
|
|
|
+
|
|
|
+ arr.forEach(v1 => {
|
|
|
+ listTemp.forEach(v2 => {
|
|
|
+ if (v2.code === v1.num) {
|
|
|
+ if (!base) {
|
|
|
+ const listRefNum = listRef.current.find(c => c.code === v1.num)!.newNum
|
|
|
+ v2.oldNum = listRefNum
|
|
|
+ if (listRefNum !== v1.showVisit) v2.changeSta = true
|
|
|
+ }
|
|
|
+ v2.newNum = v1.showVisit
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ setList(listTemp)
|
|
|
+ }
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ getNumListFu(true)
|
|
|
+ }, [getNumListFu])
|
|
|
+
|
|
|
+ // 定时发送
|
|
|
+ const timeRef = useRef(-1)
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ clearInterval(timeRef.current)
|
|
|
+ timeRef.current = window.setInterval(() => {
|
|
|
+ getNumListFu()
|
|
|
+ }, 120000)
|
|
|
+ return () => {
|
|
|
+ clearInterval(timeRef.current)
|
|
|
+ }
|
|
|
+ }, [getNumListFu])
|
|
|
+
|
|
|
+ // 动画是否在进行中
|
|
|
+ const moveStaFu = useCallback(
|
|
|
+ (code: string) => {
|
|
|
+ const arr = [...list]
|
|
|
+ list.forEach(v => {
|
|
|
+ if (v.changeSta && v.code === code) v.changeSta = false
|
|
|
+ })
|
|
|
+ setList(arr)
|
|
|
+ },
|
|
|
+ [list]
|
|
|
+ )
|
|
|
+
|
|
|
return (
|
|
|
<div className={styles.A1home}>
|
|
|
<div className='A1top'>
|
|
@@ -25,20 +99,33 @@ function A1home() {
|
|
|
<div className='A1box1'>
|
|
|
<div className='A1tit'>展览精选</div>
|
|
|
<div className='A1_1list'>
|
|
|
- {myInfo.swArr.map(item => (
|
|
|
- <div className='A1_1row' key={item.id}>
|
|
|
- <img
|
|
|
- src={`./myData/img/${item.id}s.jpg`}
|
|
|
- alt=''
|
|
|
- onClick={() => openPage(item.link)}
|
|
|
- />
|
|
|
- <div className='A1_1row1'>{item.name}</div>
|
|
|
- <div className='A1_1row2'>{item.partOf}</div>
|
|
|
- </div>
|
|
|
- ))}
|
|
|
+ {list
|
|
|
+ .filter(v => v.loc === 1)
|
|
|
+ .map(item => (
|
|
|
+ <div className='A1_1row' key={item.id}>
|
|
|
+ <img
|
|
|
+ src={`./myData/img/${item.id}s.jpg`}
|
|
|
+ alt=''
|
|
|
+ onClick={() => openPage(item.link)}
|
|
|
+ />
|
|
|
+ <div className='A1_1row1'>{item.name}</div>
|
|
|
+ <div className='A1_1row2'>{item.partOf}</div>
|
|
|
+ <div
|
|
|
+ className={classNames('A1_1row3', item.changeSta ? 'A1_1row3Ac' : '')}
|
|
|
+ >
|
|
|
+ <EyeOutlined rev={undefined} />
|
|
|
+
|
|
|
+ <CountUp
|
|
|
+ onEnd={() => moveStaFu(item.code)}
|
|
|
+ start={item.oldNum}
|
|
|
+ end={item.newNum}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
+ {/* <div onClick={() => getNumListFu()}>15456465</div> */}
|
|
|
<div className='A1BottomTxt'>持续上新,敬请期待</div>
|
|
|
</div>
|
|
|
)
|