|
@@ -1,13 +1,296 @@
|
|
|
-import React from 'react'
|
|
|
+import React, { useCallback, useEffect, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
-function AAAAA() {
|
|
|
+import LeftTopLogo from '@/components/LeftTopLogo'
|
|
|
+
|
|
|
+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 { baseURL } from '@/utils/http'
|
|
|
+import { GoodsRow } from '@/types'
|
|
|
+import { getGoodsList } from '@/store/action/all'
|
|
|
+import { nameObj } from './data'
|
|
|
+
|
|
|
+// 图片导入
|
|
|
+import iconSImg from '@/assets/img/goods/iconS.png'
|
|
|
+import nullImg from '@/assets/img/goods/null.png'
|
|
|
+import A3look from './A3look'
|
|
|
+
|
|
|
+function A3goods() {
|
|
|
+ const [dataAll1, setDataAll1] = useState<GoodsRow[]>([])
|
|
|
+ const [dataAll2, setDataAll2] = useState<GoodsRow[]>([])
|
|
|
+ const [dataAll3, setDataAll3] = useState<GoodsRow[]>([])
|
|
|
+ const [loding, setLoding] = useState(false)
|
|
|
+
|
|
|
+ const getDataAll = useCallback(async () => {
|
|
|
+ const res = await getGoodsList({ dictId: '', pageNum: 1, pageSize: 99999, searchKey: '' })
|
|
|
+
|
|
|
+ if (res.code === 0) {
|
|
|
+ setLoding(true)
|
|
|
+ const dataZong: GoodsRow[] = res.data.records || []
|
|
|
+ const type1 = dataZong.filter(v => v.fileType === 'img')
|
|
|
+ const type2 = dataZong.filter(v => v.fileType === 'model')
|
|
|
+ const type3 = dataZong.filter(v => v.fileType === 'video')
|
|
|
+
|
|
|
+ setDataAll1(type1)
|
|
|
+ setDataAll2(type2)
|
|
|
+ setDataAll3(type3)
|
|
|
+
|
|
|
+ setData1(type1)
|
|
|
+ setData2(type2)
|
|
|
+ setData3(type3)
|
|
|
+
|
|
|
+ const types1 = type1.map(v => v.dictName)
|
|
|
+ setrowArr1(['全部', ...Array.from(new Set(types1))])
|
|
|
+
|
|
|
+ const types2 = type2.map(v => v.dictName)
|
|
|
+ setrowArr2(['全部', ...Array.from(new Set(types2))])
|
|
|
+
|
|
|
+ const types3 = type3.map(v => v.dictName)
|
|
|
+ setrowArr3(['全部', ...Array.from(new Set(types3))])
|
|
|
+ }
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ getDataAll()
|
|
|
+ }, [getDataAll])
|
|
|
+
|
|
|
+ const [data1, setData1] = useState<GoodsRow[]>([])
|
|
|
+ const [ac1, setAc1] = useState('全部')
|
|
|
+ const [rowArr1, setrowArr1] = useState<string[]>([])
|
|
|
+ const [txt1, setTxt1] = useState('')
|
|
|
+ const [txtFlag1, setTxtFlag1] = useState(false)
|
|
|
+
|
|
|
+ const [data2, setData2] = useState<GoodsRow[]>([])
|
|
|
+ const [ac2, setAc2] = useState('全部')
|
|
|
+ const [rowArr2, setrowArr2] = useState<string[]>([])
|
|
|
+ const [txt2, setTxt2] = useState('')
|
|
|
+ const [txtFlag2, setTxtFlag2] = useState(false)
|
|
|
+
|
|
|
+ const [data3, setData3] = useState<GoodsRow[]>([])
|
|
|
+ const [ac3, setAc3] = useState('全部')
|
|
|
+ const [rowArr3, setrowArr3] = useState<string[]>([])
|
|
|
+ const [txt3, setTxt3] = useState('')
|
|
|
+ const [txtFlag3, setTxtFlag3] = useState(false)
|
|
|
+
|
|
|
+ // 滚动到顶部
|
|
|
+ const sollrTop = useCallback((classKey: string) => {
|
|
|
+ const dom: HTMLDivElement = document.querySelector('.' + classKey)!
|
|
|
+ if (dom) dom.scrollTop = 0
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (loding) {
|
|
|
+ }
|
|
|
+ }, [loding])
|
|
|
+
|
|
|
+ // 切换顶部
|
|
|
+ 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 ? dataAll1 : index === 2 ? dataAll2 : dataAll3
|
|
|
+
|
|
|
+ let resData: GoodsRow[] = []
|
|
|
+
|
|
|
+ if (name === '全部') resData = dataAll
|
|
|
+ else resData = dataAll.filter(v => v.dictName === name)
|
|
|
+
|
|
|
+ index === 1 ? setData1(resData) : index === 2 ? setData2(resData) : setData3(resData)
|
|
|
+
|
|
|
+ sollrTop(classKey)
|
|
|
+ },
|
|
|
+ [dataAll1, dataAll2, dataAll3, sollrTop]
|
|
|
+ )
|
|
|
+
|
|
|
+ // 点击搜索
|
|
|
+ const searchFu = useCallback(
|
|
|
+ (val: string, acTxt: string, index: 1 | 2 | 3, classKey: string) => {
|
|
|
+ const dataAllTemp = index === 1 ? dataAll1 : index === 2 ? dataAll2 : dataAll3
|
|
|
+
|
|
|
+ const dataAll = acTxt === '全部' ? dataAllTemp : dataAllTemp.filter(v => v.dictName === 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)
|
|
|
+ },
|
|
|
+ [dataAll1, dataAll2, dataAll3, sollrTop]
|
|
|
+ )
|
|
|
+
|
|
|
+ // // 打开详情
|
|
|
+ // const [opInfo, setOpInfo] = useState({} as GoodsRow)
|
|
|
+ // const [opType, setOpType] = useState<any>('')
|
|
|
+
|
|
|
+ const rowBox = useCallback(
|
|
|
+ (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>{Reflect.get(nameObj, index).name}</h1> {Reflect.get(nameObj, index).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={() => setLookId(v.id)}
|
|
|
+ key={v.id}
|
|
|
+ title={v.name}
|
|
|
+ >
|
|
|
+ <div className='A2Irow1'>
|
|
|
+ <LazyImg src={baseURL + v.thumb} />
|
|
|
+ </div>
|
|
|
+ <div className='A2Irow2'>
|
|
|
+ {v.name}
|
|
|
+ <img src={iconSImg} alt='' />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </>
|
|
|
+ ) : (
|
|
|
+ <div className='A2IrowNull' hidden={!loding}>
|
|
|
+ <img src={nullImg} 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>
|
|
|
+ )
|
|
|
+ },
|
|
|
+ [
|
|
|
+ rowArr1,
|
|
|
+ rowArr2,
|
|
|
+ rowArr3,
|
|
|
+ ac1,
|
|
|
+ ac2,
|
|
|
+ ac3,
|
|
|
+ data1,
|
|
|
+ data2,
|
|
|
+ data3,
|
|
|
+ txtFlag1,
|
|
|
+ txtFlag2,
|
|
|
+ txtFlag3,
|
|
|
+ loding,
|
|
|
+ txt1,
|
|
|
+ txt2,
|
|
|
+ txt3,
|
|
|
+ topCut,
|
|
|
+ searchFu
|
|
|
+ ]
|
|
|
+ )
|
|
|
+
|
|
|
+ const [lookId, setLookId] = useState(0)
|
|
|
+
|
|
|
return (
|
|
|
- <div className={styles.AAAAA}>
|
|
|
- <h1>AAAAA</h1>
|
|
|
+ <div className={styles.A3goods}>
|
|
|
+ <LeftTopLogo />
|
|
|
+
|
|
|
+ <div className='A2main' hidden={!!lookId}>
|
|
|
+ {rowBox(1)}
|
|
|
+ {rowBox(2)}
|
|
|
+ {rowBox(3)}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {lookId ? <A3look id={lookId} closeFu={() => setLookId(0)} /> : null}
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
|
|
|
-const MemoAAAAA = React.memo(AAAAA)
|
|
|
+const MemoA3goods = React.memo(A3goods)
|
|
|
|
|
|
-export default MemoAAAAA
|
|
|
+export default MemoA3goods
|