|
@@ -1,272 +1,13 @@
|
|
|
-import React, { useCallback, useEffect, useState } from 'react'
|
|
|
+import React from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
-import LeftTopLogo from '@/components/LeftTopLogo'
|
|
|
-import { baseURL, myData } from '@/utils/history'
|
|
|
-import { GoodsInfo, GoodsRow } from '@/types'
|
|
|
-import { SearchOutline } from 'antd-mobile-icons'
|
|
|
-
|
|
|
-import { Swiper, SwiperSlide } from 'swiper/react'
|
|
|
-
|
|
|
-import { FreeMode, Mousewheel } from 'swiper'
|
|
|
-// Import Swiper styles
|
|
|
-import 'swiper/css'
|
|
|
-import 'swiper/css/free-mode'
|
|
|
-import 'swiper/css/mousewheel'
|
|
|
-
|
|
|
-import classNames from 'classnames'
|
|
|
-import LazyImg from '@/components/LazyImg'
|
|
|
-import { Input } from 'antd-mobile'
|
|
|
-import LookGood from '@/components/LookGood'
|
|
|
-
|
|
|
-function A3goods() {
|
|
|
- const [data1, setData1] = useState(myData.goods.img.rowArr)
|
|
|
- const [ac1, setAc1] = useState('全部')
|
|
|
- const [rowArr1, setrowArr1] = useState<string[]>([])
|
|
|
- const [txt1, setTxt1] = useState('')
|
|
|
- const [txtFlag1, setTxtFlag1] = useState(false)
|
|
|
-
|
|
|
- const [data2, setData2] = useState(myData.goods.model.rowArr)
|
|
|
- const [ac2, setAc2] = useState('全部')
|
|
|
- const [rowArr2, setrowArr2] = useState<string[]>([])
|
|
|
- const [txt2, setTxt2] = useState('')
|
|
|
- const [txtFlag2, setTxtFlag2] = useState(false)
|
|
|
-
|
|
|
- const [data3, setData3] = useState(myData.goods.video.rowArr)
|
|
|
- const [ac3, setAc3] = useState('全部')
|
|
|
- const [rowArr3, setrowArr3] = useState<string[]>([])
|
|
|
- const [txt3, setTxt3] = useState('')
|
|
|
- const [txtFlag3, setTxtFlag3] = useState(false)
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- const types1 = myData.goods.img.rowArr.map(v => v.type)
|
|
|
- setrowArr1(['全部', ...Array.from(new Set(types1))])
|
|
|
-
|
|
|
- const types2 = myData.goods.model.rowArr.map(v => v.type)
|
|
|
- setrowArr2(['全部', ...Array.from(new Set(types2))])
|
|
|
-
|
|
|
- const types3 = myData.goods.video.rowArr.map(v => v.type)
|
|
|
- setrowArr3(['全部', ...Array.from(new Set(types3))])
|
|
|
- }, [])
|
|
|
-
|
|
|
- // 滚动到顶部
|
|
|
- const sollrTop = useCallback((classKey: string) => {
|
|
|
- const dom: HTMLDivElement = document.querySelector('.' + classKey)!
|
|
|
- if (dom) dom.scrollTop = 0
|
|
|
- }, [])
|
|
|
-
|
|
|
- // 切换顶部
|
|
|
- const topCut = useCallback(
|
|
|
- (name: string, acTxt: string, index: 1 | 2 | 3, classKey: string) => {
|
|
|
- if (name === acTxt) return
|
|
|
- index === 1 ? setAc1(name) : index === 2 ? setAc2(name) : setAc3(name)
|
|
|
-
|
|
|
- index === 1 ? setTxt1('') : index === 2 ? setTxt2('') : setTxt3('')
|
|
|
-
|
|
|
- const dataAll =
|
|
|
- index === 1
|
|
|
- ? myData.goods.img.rowArr
|
|
|
- : index === 2
|
|
|
- ? myData.goods.model.rowArr
|
|
|
- : myData.goods.video.rowArr
|
|
|
-
|
|
|
- let resData: GoodsRow[] = []
|
|
|
-
|
|
|
- if (name === '全部') resData = dataAll
|
|
|
- else resData = dataAll.filter(v => v.type === name)
|
|
|
-
|
|
|
- index === 1 ? setData1(resData) : index === 2 ? setData2(resData) : setData3(resData)
|
|
|
-
|
|
|
- sollrTop(classKey)
|
|
|
- },
|
|
|
- [sollrTop]
|
|
|
- )
|
|
|
-
|
|
|
- // 点击搜索
|
|
|
- const searchFu = useCallback(
|
|
|
- (val: string, acTxt: string, index: 1 | 2 | 3, classKey: string) => {
|
|
|
- const dataAllTemp =
|
|
|
- index === 1
|
|
|
- ? myData.goods.img.rowArr
|
|
|
- : index === 2
|
|
|
- ? myData.goods.model.rowArr
|
|
|
- : myData.goods.video.rowArr
|
|
|
-
|
|
|
- const dataAll = acTxt === '全部' ? dataAllTemp : dataAllTemp.filter(v => v.type === acTxt)
|
|
|
-
|
|
|
- let resData: GoodsRow[] = []
|
|
|
-
|
|
|
- if (val === '') resData = dataAll
|
|
|
- else resData = dataAll.filter(v => v.name.includes(val))
|
|
|
-
|
|
|
- index === 1 ? setData1(resData) : index === 2 ? setData2(resData) : setData3(resData)
|
|
|
-
|
|
|
- sollrTop(classKey)
|
|
|
- },
|
|
|
- [sollrTop]
|
|
|
- )
|
|
|
-
|
|
|
- // 打开详情
|
|
|
- const [opInfo, setOpInfo] = useState({} as GoodsRow)
|
|
|
- const [opType, setOpType] = useState<any>('')
|
|
|
-
|
|
|
- const rowBox = useCallback(
|
|
|
- (info: GoodsInfo, index: 1 | 2 | 3) => {
|
|
|
- const rowArr = index === 1 ? rowArr1 : index === 2 ? rowArr2 : rowArr3
|
|
|
- const acTxt = index === 1 ? ac1 : index === 2 ? ac2 : ac3
|
|
|
- const data = index === 1 ? data1 : index === 2 ? data2 : data3
|
|
|
- const txtFlag = index === 1 ? txtFlag1 : index === 2 ? txtFlag2 : txtFlag3
|
|
|
-
|
|
|
- return (
|
|
|
- <div>
|
|
|
- <div className='A2top'>
|
|
|
- <div className='A2top1'>
|
|
|
- <h1>{info.name}</h1> {info.name2}
|
|
|
- </div>
|
|
|
- <div className='A2top2'>
|
|
|
- <Swiper
|
|
|
- modules={[FreeMode, Mousewheel]}
|
|
|
- className='appSw'
|
|
|
- spaceBetween={0}
|
|
|
- slidesPerView='auto'
|
|
|
- freeMode={true}
|
|
|
- mousewheel={true}
|
|
|
- // onSlideChange={(e) => console.log("slide change", e)}
|
|
|
- // onSwiper={(swiper) => (mySwiperRef.current = swiper)}
|
|
|
- >
|
|
|
- {rowArr.map(v => (
|
|
|
- <SwiperSlide key={v}>
|
|
|
- <div
|
|
|
- onClick={() => topCut(v, acTxt, index, 'A2Sorrl' + index)}
|
|
|
- className={classNames('topRow', acTxt === v ? 'active' : '')}
|
|
|
- >
|
|
|
- <span>{v}</span>
|
|
|
- </div>
|
|
|
- </SwiperSlide>
|
|
|
- ))}
|
|
|
- </Swiper>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className='A2info'>
|
|
|
- <div className={classNames('mySorrl', 'A2Sorrl' + index)}>
|
|
|
- {data.length ? (
|
|
|
- <>
|
|
|
- {data.map(v => (
|
|
|
- <div
|
|
|
- className='A2Irow'
|
|
|
- onClick={() => {
|
|
|
- setOpInfo(v)
|
|
|
- setOpType(index === 1 ? 'img' : index === 2 ? 'model' : 'video')
|
|
|
- }}
|
|
|
- key={v.name + v.type}
|
|
|
- title={v.name}
|
|
|
- >
|
|
|
- <div className='A2Irow1'>
|
|
|
- <LazyImg src={baseURL + v.coveImg} />
|
|
|
- </div>
|
|
|
- <div className='A2Irow2'>
|
|
|
- {v.name}
|
|
|
- <img src={baseURL + 'goods/iconS.png'} alt='' />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </>
|
|
|
- ) : (
|
|
|
- <div className='A2IrowNull'>
|
|
|
- <img src={baseURL + 'goods/null.png'} alt='' />
|
|
|
- <p>暂时没有数据</p>
|
|
|
- <p>请试一下其他关键字</p>
|
|
|
- </div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- {/* 底部搜索 */}
|
|
|
- <div className='A2Search'>
|
|
|
- {txtFlag ? (
|
|
|
- <Input
|
|
|
- onEnterPress={() =>
|
|
|
- searchFu(
|
|
|
- index === 1 ? txt1 : index === 2 ? txt2 : txt3,
|
|
|
- acTxt,
|
|
|
- index,
|
|
|
- 'A2Sorrl' + index
|
|
|
- )
|
|
|
- }
|
|
|
- placeholder='请输入搜索内容'
|
|
|
- value={index === 1 ? txt1 : index === 2 ? txt2 : txt3}
|
|
|
- onChange={value => {
|
|
|
- const txtRes = value.replace(/\s+/g, '')
|
|
|
- index === 1 ? setTxt1(txtRes) : index === 2 ? setTxt2(txtRes) : setTxt3(txtRes)
|
|
|
- }}
|
|
|
- />
|
|
|
- ) : null}
|
|
|
-
|
|
|
- <div
|
|
|
- className='A2SearchIcon'
|
|
|
- onClick={() => {
|
|
|
- if (!txtFlag) {
|
|
|
- index === 1
|
|
|
- ? setTxtFlag1(true)
|
|
|
- : index === 2
|
|
|
- ? setTxtFlag2(true)
|
|
|
- : setTxtFlag3(true)
|
|
|
- } else
|
|
|
- searchFu(
|
|
|
- index === 1 ? txt1 : index === 2 ? txt2 : txt3,
|
|
|
- acTxt,
|
|
|
- index,
|
|
|
- 'A2Sorrl' + index
|
|
|
- )
|
|
|
- }}
|
|
|
- >
|
|
|
- <SearchOutline />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- )
|
|
|
- },
|
|
|
- [
|
|
|
- ac1,
|
|
|
- ac2,
|
|
|
- ac3,
|
|
|
- data1,
|
|
|
- data2,
|
|
|
- data3,
|
|
|
- searchFu,
|
|
|
- rowArr1,
|
|
|
- rowArr2,
|
|
|
- rowArr3,
|
|
|
- topCut,
|
|
|
- txt1,
|
|
|
- txt2,
|
|
|
- txt3,
|
|
|
- txtFlag1,
|
|
|
- txtFlag2,
|
|
|
- txtFlag3
|
|
|
- ]
|
|
|
- )
|
|
|
-
|
|
|
+function AAAAA() {
|
|
|
return (
|
|
|
- <div
|
|
|
- className={styles.A3goods}
|
|
|
- style={{ backgroundImage: `url(${baseURL + myData.goods.bg})` }}
|
|
|
- >
|
|
|
- <LeftTopLogo />
|
|
|
-
|
|
|
- <div className='A2main' hidden={!!opInfo.name}>
|
|
|
- {rowBox(myData.goods.img, 1)}
|
|
|
- {rowBox(myData.goods.model, 2)}
|
|
|
- {rowBox(myData.goods.video, 3)}
|
|
|
- </div>
|
|
|
-
|
|
|
- {opInfo.name ? (
|
|
|
- <LookGood info={opInfo} closeFu={() => setOpInfo({} as GoodsRow)} type={opType} />
|
|
|
- ) : null}
|
|
|
+ <div className={styles.AAAAA}>
|
|
|
+ <h1>AAAAA</h1>
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
|
|
|
-const MemoA3goods = React.memo(A3goods)
|
|
|
+const MemoAAAAA = React.memo(AAAAA)
|
|
|
|
|
|
-export default MemoA3goods
|
|
|
+export default MemoAAAAA
|