|
@@ -0,0 +1,172 @@
|
|
|
+import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
|
+import styles from './index.module.scss'
|
|
|
+
|
|
|
+import xiaImg from '@/assets/img/jiantou_w.png'
|
|
|
+import classNames from 'classnames'
|
|
|
+import LazyImg from '@/components/LazyImg'
|
|
|
+import { MyList1Type, MyObjRowType } from './data'
|
|
|
+
|
|
|
+type Props = {
|
|
|
+ setTopObj: (val: MyObjRowType) => void
|
|
|
+ isPageShow: boolean
|
|
|
+}
|
|
|
+
|
|
|
+function Bottom({ setTopObj, isPageShow = false }: Props) {
|
|
|
+ const srollRef = useRef<HTMLDivElement>(null)
|
|
|
+ const srollRef2 = useRef<HTMLDivElement>(null)
|
|
|
+ const mousemoveFu = useCallback((ev: any, dom: HTMLDivElement | null) => {
|
|
|
+ if (dom) {
|
|
|
+ const nowMove = dom.scrollLeft
|
|
|
+ // 滚轮
|
|
|
+ let num = 200
|
|
|
+ if (ev.deltaY < 0) num = -num
|
|
|
+ dom.scrollLeft = nowMove + num
|
|
|
+ }
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ // 获取数据
|
|
|
+ const [myObj, setMyObj] = useState({} as { any: MyObjRowType[] })
|
|
|
+
|
|
|
+ const [myList1, setMyList1] = useState([] as MyList1Type[])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (myList1[0] && myList1[0].children && myList1[0].children[0]) setAc1(myList1[0].children[0])
|
|
|
+ }, [myList1])
|
|
|
+
|
|
|
+ const getInfoFu = useCallback((data: any) => {
|
|
|
+ const myList1Temp = data.catalogRoot
|
|
|
+
|
|
|
+ const myObjTemp: any = {}
|
|
|
+ data.scenes.forEach((v: any) => {
|
|
|
+ myList1Temp.forEach((c: any) => {
|
|
|
+ if (c.children[0] === v.category) {
|
|
|
+ if (myObjTemp[c.children[0]]) myObjTemp[c.children[0]].push(v)
|
|
|
+ else myObjTemp[c.children[0]] = [v]
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ for (const key in myObjTemp) {
|
|
|
+ myObjTemp[key] = myObjTemp[key].sort(
|
|
|
+ (a: any, b: any) => Number(a.sceneTitle.split('-')[1]) - Number(b.sceneTitle.split('-')[1])
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ setMyList1([...KKlist1Temp, ...myList1Temp])
|
|
|
+ setMyObj({ ...KKobjTemp, ...myObjTemp })
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ // 待完善路径
|
|
|
+ fetch(`https://4dkk.4dage.com/720yun_fd_manage/${WKIDTEMP}/someData.json`)
|
|
|
+ .then(res => {
|
|
|
+ return res.json()
|
|
|
+ })
|
|
|
+ .then(data => {
|
|
|
+ getInfoFu(data)
|
|
|
+ })
|
|
|
+ }, [getInfoFu])
|
|
|
+
|
|
|
+ const [isShow, setIsShow] = useState(true)
|
|
|
+
|
|
|
+ // 一级别目录选中
|
|
|
+ const [ac1, setAc1] = useState('')
|
|
|
+
|
|
|
+ // 二级别code码
|
|
|
+
|
|
|
+ const [codeArr, setCodeArr] = useState<MyObjRowType[]>([])
|
|
|
+
|
|
|
+ const [code, setCode] = useState<{ type: 'kk' | 'qj'; mm: string }>({ type: 'kk', mm: '' })
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ console.log('code:', code)
|
|
|
+ }, [code])
|
|
|
+
|
|
|
+ // 第一级目录变化的时候
|
|
|
+ useEffect(() => {
|
|
|
+ if (ac1) {
|
|
|
+ const arr: MyObjRowType[] = Reflect.get(myObj, ac1) || []
|
|
|
+ setCode({ type: 'qj', mm: arr[0].sceneCode })
|
|
|
+ setCodeArr(arr)
|
|
|
+ setTopObj(arr[0])
|
|
|
+ setTimeout(() => {
|
|
|
+ if (srollRef.current) srollRef.current.scrollLeft = 0
|
|
|
+ }, 500)
|
|
|
+ }
|
|
|
+ // 这里忽略
|
|
|
+ // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
+ }, [ac1])
|
|
|
+
|
|
|
+ // 点击二级目录
|
|
|
+ const setAcObj = useCallback(
|
|
|
+ (info: MyObjRowType) => {
|
|
|
+ setTopObj(info)
|
|
|
+ setCode({ type: 'qj', mm: info.sceneCode })
|
|
|
+ },
|
|
|
+ [setTopObj]
|
|
|
+ )
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div hidden={isPageShow} className={classNames(styles.Bottom, isShow ? '' : styles.BottomHide)}>
|
|
|
+ <div className='B1box'>
|
|
|
+ <div
|
|
|
+ className='B1box_1 mySorrl'
|
|
|
+ ref={srollRef}
|
|
|
+ onWheel={e => mousemoveFu(e, srollRef.current)}
|
|
|
+ >
|
|
|
+ {codeArr.map(item => (
|
|
|
+ <div
|
|
|
+ onClick={() => setAcObj(item)}
|
|
|
+ key={item.id}
|
|
|
+ className={classNames(code.mm === item.sceneCode ? 'activeTxt' : '')}
|
|
|
+ >
|
|
|
+ {/* 图片路径待完善 */}
|
|
|
+ <LazyImg
|
|
|
+ src={
|
|
|
+ item.type === 'kk'
|
|
|
+ ? `https://4dkk.4dage.com/scene_view_data/${item.sceneCode}/user/thumb-2k.jpg`
|
|
|
+ : item.icon
|
|
|
+ }
|
|
|
+ />
|
|
|
+ <p>
|
|
|
+ {code.mm === item.sceneCode ? (
|
|
|
+ <div>
|
|
|
+ {item.sceneTitle}  {item.sceneTitle}  {item.sceneTitle}
|
|
|
+ </div>
|
|
|
+ ) : (
|
|
|
+ <span>{item.sceneTitle}</span>
|
|
|
+ )}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className='B1box2'>
|
|
|
+ <div
|
|
|
+ className='B1box2_1 mySorrl'
|
|
|
+ ref={srollRef2}
|
|
|
+ onWheel={e => mousemoveFu(e, srollRef2.current)}
|
|
|
+ >
|
|
|
+ {myList1.map(item => (
|
|
|
+ <div
|
|
|
+ className={classNames(ac1 === item.children[0] ? 'active' : '')}
|
|
|
+ onClick={() => setAc1(item.children[0])}
|
|
|
+ key={item.children[0]}
|
|
|
+ >
|
|
|
+ {item.name}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className='B3box' onClick={() => setIsShow(!isShow)}>
|
|
|
+ <img src={xiaImg} alt='' />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+const MemoBottom = React.memo(Bottom)
|
|
|
+
|
|
|
+export default MemoBottom
|