123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
- import styles from './index.module.scss'
- import TopCom from '@/components/TopCom'
- import classNames from 'classnames'
- import { A4LookType } from '../type'
- type Props = {
- info: A4LookType
- closeFu: () => void
- }
- function A4look({ info, closeFu }: Props) {
- const [topArr, setTopArr] = useState<string[]>([])
- const [topAc, setTopAc] = useState('')
- useEffect(() => {
- setTimeout(() => {
- if (sollrRef.current) sollrRef.current.scrollTo({ top: 0, behavior: 'smooth' })
- }, 100)
- }, [topAc])
- const txtChange = useCallback((val: string, key: 'txt' | 'flag') => {
- if (key === 'txt') {
- let txt = ''
- if (val) {
- let obj = JSON.parse(val)
- txt = obj.txtArr[0].txt
- }
- return txt
- } else if (key === 'flag') {
- const obj = JSON.parse(val)
- return !obj.isTxtFlag as boolean
- }
- }, [])
- useEffect(() => {
- let { introRtf, teamRtf, infoRtf } = info
- let introRtfFlag = txtChange(introRtf, 'flag')
- let teamRtfFlag = txtChange(teamRtf, 'flag')
- let infoRtfFlag = txtChange(infoRtf, 'flag')
- let arr: string[] = []
- if (introRtfFlag) arr.push('课程简介')
- if (teamRtfFlag) arr.push('教师简介')
- if (infoRtfFlag) arr.push('预约须知')
- setTopArr(arr)
- if (introRtfFlag) setTopAc('课程简介')
- else if (teamRtfFlag) setTopAc('教师简介')
- else if (infoRtfFlag) setTopAc('预约须知')
- }, [info, txtChange])
- const sollrRef = useRef<HTMLDivElement>(null)
- const txtRes = useMemo(() => {
- const obj = {
- 课程简介: txtChange(info.introRtf, 'txt'),
- 教师简介: txtChange(info.teamRtf, 'txt'),
- 预约须知: txtChange(info.infoRtf, 'txt')
- }
- return Reflect.get(obj, topAc)
- }, [info, topAc, txtChange])
- return (
- <div id='openDom' className={styles.A4look}>
- <TopCom txt='课程详情' backFu={closeFu} />
- <div className='A4Lmain'>
- <div className='A4Ltop'>
- {topArr.map(item => (
- <div
- onClick={() => setTopAc(item)}
- className={classNames('A4Ltrow', topAc === item ? 'A4LtrowAc' : '')}
- key={item}
- >
- {item}
- </div>
- ))}
- </div>
- <div className='A4Ltxt'>
- {txtRes ? (
- <div
- className='myTextBox'
- dangerouslySetInnerHTML={{ __html: txtRes }}
- ref={sollrRef}
- ></div>
- ) : null}
- </div>
- </div>
- </div>
- )
- }
- const MemoA4look = React.memo(A4look)
- export default MemoA4look
|