|
@@ -5,26 +5,56 @@ import IconCircle from "./images/icon_circle@2x.png";
|
|
|
import "./index.scss";
|
|
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
|
import classNames from "classnames";
|
|
|
+import { getGoodsDetailApi } from "../../api";
|
|
|
+import { useParams } from "react-router-dom";
|
|
|
|
|
|
const INFO_LIST = [
|
|
|
{
|
|
|
label: "厂家",
|
|
|
- key: "航天八院",
|
|
|
+ key: "company",
|
|
|
},
|
|
|
{
|
|
|
label: "尺寸",
|
|
|
- key: "3.22m×2.87m×4.12m",
|
|
|
+ key: "size",
|
|
|
},
|
|
|
{
|
|
|
label: "简介",
|
|
|
- key: "风云四号气象卫星是我国第二代静止轨道气象卫星,获取地球表面和云的多光谱、高精度定量观测数据和图像,全面提高对地球表面和大气物理参数的多光谱、高频次、定量探测能力;实现大气温度和湿度参数垂直结构观测,提高探测精度;实现观测区内闪电成像观测;监测空间高能粒子、空间充放电效应、地磁场强度等空间环境。",
|
|
|
+ key: "description",
|
|
|
},
|
|
|
];
|
|
|
|
|
|
const ModelInfoPage = () => {
|
|
|
+ const route = useParams();
|
|
|
// 控制模型放大缩小和复位
|
|
|
const ifrBoxRef = useRef<HTMLIFrameElement>(null);
|
|
|
const [isFullScreen, setIsFullScreen] = useState(false);
|
|
|
+ const [info, setInfo] = useState<{
|
|
|
+ name: string;
|
|
|
+ company: string;
|
|
|
+ size: string;
|
|
|
+ description: string;
|
|
|
+ dagePath: string;
|
|
|
+ } | null>(null);
|
|
|
+
|
|
|
+ const getGoodsDetail = useCallback(async () => {
|
|
|
+ const {
|
|
|
+ data: { entity, file },
|
|
|
+ } = await getGoodsDetailApi(route.id as string);
|
|
|
+
|
|
|
+ const dage = file.find((i: any) => i.type === "model");
|
|
|
+
|
|
|
+ setInfo({
|
|
|
+ name: entity.name,
|
|
|
+ company: entity.company,
|
|
|
+ size: entity.size,
|
|
|
+ description: entity.description,
|
|
|
+ dagePath: dage ? dage.filePath : "",
|
|
|
+ });
|
|
|
+ }, [route]);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ getGoodsDetail();
|
|
|
+ }, [getGoodsDetail]);
|
|
|
|
|
|
useEffect(() => {
|
|
|
const init = (e: MessageEvent<any>) => {
|
|
@@ -55,39 +85,47 @@ const ModelInfoPage = () => {
|
|
|
<div
|
|
|
className={classNames("model-info-page", isFullScreen && "fullscreen")}
|
|
|
>
|
|
|
- <div className="model-info-page-header">
|
|
|
- <span>风云四号模型</span>
|
|
|
- <img className="border" src={HeaderBdImage} alt="" />
|
|
|
- </div>
|
|
|
+ {info ? (
|
|
|
+ <>
|
|
|
+ <div className="model-info-page-header">
|
|
|
+ <span>{info.name}</span>
|
|
|
+ <img className="border" src={HeaderBdImage} alt="" />
|
|
|
+ </div>
|
|
|
|
|
|
- {/* 模型 */}
|
|
|
- <div className="model-info-page-iframe">
|
|
|
- <iframe
|
|
|
- ref={ifrBoxRef}
|
|
|
- title="模型"
|
|
|
- src="model.html?m=/goods/base/model/hnbwy263.4dage"
|
|
|
- />
|
|
|
- </div>
|
|
|
+ {/* 模型 */}
|
|
|
+ <div className="model-info-page-iframe">
|
|
|
+ {info.dagePath && (
|
|
|
+ <iframe
|
|
|
+ ref={ifrBoxRef}
|
|
|
+ title="模型"
|
|
|
+ src={"model.html?m=" + info.dagePath}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
|
|
|
- <img
|
|
|
- className="model-info-page__btn"
|
|
|
- src={isFullScreen ? IconScreen : IconFullScreen}
|
|
|
- alt={isFullScreen ? "缩小" : "放大"}
|
|
|
- onClick={handleScreen}
|
|
|
- />
|
|
|
+ <img
|
|
|
+ className="model-info-page__btn"
|
|
|
+ src={isFullScreen ? IconScreen : IconFullScreen}
|
|
|
+ alt={isFullScreen ? "缩小" : "放大"}
|
|
|
+ onClick={handleScreen}
|
|
|
+ />
|
|
|
|
|
|
- {!isFullScreen && (
|
|
|
- <div className="model-info-page-info">
|
|
|
- {INFO_LIST.map((item) => (
|
|
|
- <div key={item.key} className="model-info-page-info__line">
|
|
|
- <img src={IconCircle} alt="" />
|
|
|
- <span>
|
|
|
- {item.label}:{item.key}
|
|
|
- </span>
|
|
|
+ {!isFullScreen && (
|
|
|
+ <div className="model-info-page-info">
|
|
|
+ {INFO_LIST.map((item) => (
|
|
|
+ <div key={item.key} className="model-info-page-info__line">
|
|
|
+ <img src={IconCircle} alt="" />
|
|
|
+ <div>
|
|
|
+ <span>
|
|
|
+ {item.label}:{info[item.key as keyof typeof info]}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
</div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- )}
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
</div>
|
|
|
);
|
|
|
};
|