|
@@ -30,6 +30,9 @@ import { baseURL } from "@/utils/http";
|
|
|
import ImageLazy from "@/components/ImageLazy";
|
|
|
import R_leftImg from "@/assets/img/goods/R_left.png";
|
|
|
import R_rightImg from "@/assets/img/goods/R_right.png";
|
|
|
+import { gsap } from "gsap";
|
|
|
+import Tab4Msg from "../Tab4Msg";
|
|
|
+import Tab4S3 from "../Tab4S3";
|
|
|
|
|
|
type Props = {
|
|
|
isOpen: boolean;
|
|
@@ -52,9 +55,10 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
|
|
|
// 音频
|
|
|
const [right1, setRight1] = useState({ show: false, url: "" });
|
|
|
+ const audioUrlRef = useRef("");
|
|
|
|
|
|
- // 留言板(默认显示),传递 doneIn 到二级页面 看看是否开启了 留言到后端的 功能
|
|
|
- const [right2, setRight2] = useState({ done: true, doneIn: false });
|
|
|
+ // 留言板(默认显示),传递 到二级页面 看看是否开启了 留言到后端的 功能
|
|
|
+ const [right2, setRight2] = useState(false);
|
|
|
|
|
|
//问答
|
|
|
const [right3, setRight3] = useState(false);
|
|
@@ -102,7 +106,7 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
}, [id, right7]);
|
|
|
|
|
|
// 留言-知识-问答 弹窗的选中状态(打开)
|
|
|
- const [leftAc, setLeftAc] = useState(1);
|
|
|
+ const [rightPageAc, setRightPageAc] = useState<0 | 2 | 3 | 4>(0);
|
|
|
|
|
|
// 问答数组
|
|
|
const [question, setQuestion] = useState<A2QuestionType[]>([]);
|
|
@@ -180,8 +184,8 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
setRight5({ show: true, done: true });
|
|
|
}
|
|
|
|
|
|
- // 文物的弹幕留言开关 和总 弹幕开关都开启了
|
|
|
- if (info.isBarrage) setRight2({ done: true, doneIn: true });
|
|
|
+ // 文物的弹幕留言开关 和总 弹幕开关都开启了(可以在二级页面发送接口留言)
|
|
|
+ if (info.isBarrage) setRight2(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -204,7 +208,8 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
// 有上传音频
|
|
|
const isAudioObj = file.find((v) => v.type === "audio");
|
|
|
if (isAudioObj) {
|
|
|
- setRight1({ show: isOpen ? true : false, url: isAudioObj.filePath });
|
|
|
+ setRight1({ show: !isOpen, url: isAudioObj.filePath });
|
|
|
+ audioUrlRef.current = isAudioObj.filePath;
|
|
|
}
|
|
|
|
|
|
setInfo(info);
|
|
@@ -229,6 +234,35 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
[isOpen]
|
|
|
);
|
|
|
|
|
|
+ // 有关音频
|
|
|
+ useEffect(() => {
|
|
|
+ if (right1.url) {
|
|
|
+ // 如果是从 文物 详情 进来---直接播放音频
|
|
|
+ window.setTimeout(() => {
|
|
|
+ const dom: HTMLAudioElement | null = document.querySelector("#myAudio");
|
|
|
+
|
|
|
+ if (dom) {
|
|
|
+ dom.onended = () => {
|
|
|
+ // console.log("-------音频播放结束");
|
|
|
+ setRight1({ show: false, url: audioUrlRef.current });
|
|
|
+ };
|
|
|
+ // 音频的状态
|
|
|
+ if (!isOpen) dom.play();
|
|
|
+ }
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ }, [isOpen, right1.url]);
|
|
|
+
|
|
|
+ // 打开和关闭音频
|
|
|
+ const audioCutFu = useCallback((val: boolean) => {
|
|
|
+ const dom: HTMLAudioElement | null = document.querySelector("#myAudio");
|
|
|
+ if (dom) {
|
|
|
+ if (!val) dom.play();
|
|
|
+ else dom.pause();
|
|
|
+ setRight1({ show: !val, url: audioUrlRef.current });
|
|
|
+ }
|
|
|
+ }, []);
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
getDataFu(id);
|
|
|
return () => {
|
|
@@ -256,6 +290,13 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
return arr;
|
|
|
}, [fileList]);
|
|
|
|
|
|
+ // 当前默认展示什么模块(优先级按照 模型-视频-图片)
|
|
|
+ useEffect(() => {
|
|
|
+ if (fileList.model.length) setType("model");
|
|
|
+ else if (fileList.video.length) setType("video");
|
|
|
+ else setType("img");
|
|
|
+ }, [fileList]);
|
|
|
+
|
|
|
// 在页面展示的数组
|
|
|
const list = useMemo(() => {
|
|
|
return fileList[type];
|
|
@@ -263,7 +304,6 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
|
|
|
// 当前显示的 索引
|
|
|
const [showInd, setShowInd] = useState(0);
|
|
|
-
|
|
|
const cutIndFu = useCallback(
|
|
|
(num: number) => {
|
|
|
setShowInd(showInd + num);
|
|
@@ -271,47 +311,16 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
[showInd]
|
|
|
);
|
|
|
|
|
|
- // 底部的 文字展示信息集合
|
|
|
- const tstS = useMemo(() => {
|
|
|
- let txt = "";
|
|
|
- if (info.dictTexture)
|
|
|
- txt += (
|
|
|
- <>
|
|
|
- <span>类别:</span>
|
|
|
- {info.dictTexture} 
|
|
|
- </>
|
|
|
- );
|
|
|
- if (info.dictAge)
|
|
|
- txt += (
|
|
|
- <>
|
|
|
- <span>年代:</span>
|
|
|
- {info.dictAge} 
|
|
|
- </>
|
|
|
- );
|
|
|
- if (info.dictLevel)
|
|
|
- txt += (
|
|
|
- <>
|
|
|
- <span>级别:</span>
|
|
|
- {info.dictLevel} 
|
|
|
- </>
|
|
|
- );
|
|
|
- if (info.description)
|
|
|
- txt += (
|
|
|
- <>
|
|
|
- <span>简介:</span>
|
|
|
- {info.description} 
|
|
|
- </>
|
|
|
- );
|
|
|
- console.log(132, txt);
|
|
|
-
|
|
|
- return txt;
|
|
|
- }, [info.description, info.dictAge, info.dictLevel, info.dictTexture]);
|
|
|
-
|
|
|
return (
|
|
|
<div
|
|
|
className={styles.Tab4Info}
|
|
|
style={{ backgroundImage: `url(${envUrl}/goods/bac.jpg)` }}
|
|
|
>
|
|
|
+ {/* 音频控件 */}
|
|
|
+ {right1.url ? (
|
|
|
+ <audio hidden src={baseURL + right1.url} controls id="myAudio"></audio>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
{/* 返回按钮 */}
|
|
|
<div className="t4ItoBack" onClick={closePage}>
|
|
|
<img src={toBackImg} alt="" />
|
|
@@ -389,7 +398,142 @@ function Tab4Info({ isOpen, id, closePage }: Props) {
|
|
|
</div>
|
|
|
|
|
|
{/* 底部文字介绍集合 */}
|
|
|
- <div className="t4ITxts">{tstS}</div>
|
|
|
+ <div className="t4ITxts myscroll">
|
|
|
+ {info.dictTexture ? (
|
|
|
+ <>
|
|
|
+ <span>类别:</span>
|
|
|
+ {info.dictTexture} 
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {info.dictAge ? (
|
|
|
+ <>
|
|
|
+ <span>年代:</span>
|
|
|
+ {info.dictAge} 
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
+ {info.dictLevel ? (
|
|
|
+ <>
|
|
|
+ <span>级别:</span>
|
|
|
+ {info.dictLevel} 
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
+ {info.description ? (
|
|
|
+ <>
|
|
|
+ <span>简介:</span>
|
|
|
+ {info.description} 
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 右侧所有按钮图标 */}
|
|
|
+ <div className="rightIconBox">
|
|
|
+ {/* 音频 */}
|
|
|
+ {right1.url ? (
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => audioCutFu(right1.show)}
|
|
|
+ title={right1.show ? "关闭音频" : "打开音频"}
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src={`${envUrl}/goods/icon1${right1.show ? "Ac" : ""}.png`}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {/* 留言板 */}
|
|
|
+ <div
|
|
|
+ hidden={barrage.length<=0}
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => setRightPageAc(2)}
|
|
|
+ title="留言板"
|
|
|
+ >
|
|
|
+ <img src={`${envUrl}/goods/icon2.png`} alt="" />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 问答 */}
|
|
|
+ {right3 ? (
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => setRightPageAc(3)}
|
|
|
+ title="问答"
|
|
|
+ >
|
|
|
+ <img src={`${envUrl}/goods/icon3.png`} alt="" />
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {/* 知识 */}
|
|
|
+ {right4 ? (
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => setRightPageAc(4)}
|
|
|
+ title="知识"
|
|
|
+ >
|
|
|
+ <img src={`${envUrl}/goods/icon4.png`} alt="" />
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {/* 弹幕 */}
|
|
|
+ {right5.done ? (
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ title={right5.show ? "关闭弹幕" : "开启弹幕"}
|
|
|
+ onClick={() => setRight5({ show: !right5.show, done: true })}
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src={`${envUrl}/goods/icon5${right5.show ? "Ac" : ""}.png`}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {/* 点赞 */}
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => likeClickFu()}
|
|
|
+ title="点赞"
|
|
|
+ >
|
|
|
+ <img src={`${envUrl}/goods/icon6${right6 ? "Ac" : ""}.png`} alt="" />
|
|
|
+ <div className="moveImg" hidden={!right6}>
|
|
|
+ +1
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 分享 */}
|
|
|
+
|
|
|
+ <div
|
|
|
+ className="rightIconRow"
|
|
|
+ onClick={() => fenXClickFu()}
|
|
|
+ title="分享"
|
|
|
+ >
|
|
|
+ <img src={`${envUrl}/goods/icon7${right7 ? "Ac" : ""}.png`} alt="" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 弹幕的盒子 */}
|
|
|
+ {barrageAll.length ? (
|
|
|
+ <div className="barrMove" ref={barrMoveRef} hidden={!right5.show}>
|
|
|
+ <h3>{barrageAll[barrInd].name}</h3>
|
|
|
+ <p>
|
|
|
+ {barrageAll[barrInd].authorName}
|
|
|
+ {barrageAll[barrInd].createTime}
|
|
|
+ 观 [{barrageAll[barrInd].goodsName}] 有感
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ {/* 留言板 - 知识 - 问答 */}
|
|
|
+ {rightPageAc === 2 ? (
|
|
|
+ <Tab4Msg
|
|
|
+ btnOkFlag={right2}
|
|
|
+ barrageList={barrage}
|
|
|
+ goodsId={id}
|
|
|
+ closeFu={() => setRightPageAc(0)}
|
|
|
+ />
|
|
|
+ ) : rightPageAc === 3 ? (
|
|
|
+ <Tab4S3 closeFu={() => setRightPageAc(0)} questionList={question}/>
|
|
|
+ ) : null}
|
|
|
</div>
|
|
|
);
|
|
|
}
|