index.tsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /* eslint-disable jsx-a11y/iframe-has-title */
  2. import React, { useEffect, useRef, useState } from "react";
  3. import styles from "./index.module.scss";
  4. import { baseUrl } from "@/index";
  5. import history from "@/utils/history";
  6. import classNames from "classnames";
  7. import { InfoRowType } from "@/types";
  8. const iconArr = [
  9. { id: 2, name: "放大" },
  10. { id: 3, name: "缩小" },
  11. { id: 4, name: "复位" },
  12. ];
  13. type Props = {
  14. info: InfoRowType;
  15. type: "C2ArchitecInfo" | "D2BuildInfo";
  16. };
  17. function ArcOrBuildInfo({ info, type }: Props) {
  18. // 模型的ref
  19. const ifrRefNew = useRef<any>(null);
  20. const modelChangeFu = (val: number) => {
  21. const dom = ifrRefNew.current;
  22. if (dom && dom.contentWindow && dom.contentWindow.webview) {
  23. if (val === 2) dom.contentWindow.webview.zoomIn(); // 放大
  24. else if (val === 3) dom.contentWindow.webview.zoomOut(); // 缩小
  25. else dom.contentWindow.webview.resetView(); // 复位
  26. }
  27. };
  28. // 点击对比
  29. const [oldShow, setOldShow] = useState(false);
  30. useEffect(() => {
  31. if (oldShow) setOldFlag(true);
  32. }, [oldShow]);
  33. const [oldFlag, setOldFlag] = useState(false);
  34. // 点击全屏
  35. const [full, setFull] = useState(false);
  36. return (
  37. <div
  38. className={styles.ArcOrBuildInfo}
  39. style={{ backgroundImage: `url(${baseUrl}/C2ArchitecInfo/pc/bg.jpg)` }}
  40. >
  41. {/* 左下方的按钮 */}
  42. <div className="C2leftBtn">
  43. <div className="C2lRow" onClick={() => history.go(-1)}>
  44. 返回
  45. </div>
  46. {info.isBuild ? (
  47. <>
  48. {info.isBuild.map((v) => (
  49. <div
  50. className="C2lRow"
  51. key={v.id}
  52. onClick={() => history.push(`/buildInfo?id=${v.id}`)}
  53. >
  54. {v.name}
  55. </div>
  56. ))}
  57. </>
  58. ) : null}
  59. </div>
  60. {/* 左边信息 */}
  61. <div className="C2left">
  62. <div className="C2left1">{info.name}</div>
  63. <div
  64. className="C2left2"
  65. dangerouslySetInnerHTML={{ __html: info.txt }}
  66. ></div>
  67. </div>
  68. {/* 右边模型 */}
  69. <div
  70. className={classNames("C2right", full ? "C2rightAc" : "")}
  71. style={{
  72. backgroundImage: full
  73. ? `url(${baseUrl}/C2ArchitecInfo/pc/bg.jpg)`
  74. : "",
  75. }}
  76. >
  77. <iframe
  78. ref={ifrRefNew}
  79. src={`/model.html?m=${info.id}&n=new&r=${type}`}
  80. frameBorder="0"
  81. ></iframe>
  82. {/* 进入室内按钮 */}
  83. {type === "C2ArchitecInfo"&&info.code ? (
  84. <div
  85. hidden={full}
  86. className="C2rToScene"
  87. onClick={() => history.push(`/scene?id=${info.code}`)}
  88. >
  89. 进入室内
  90. </div>
  91. ) : null}
  92. {/* 右侧的功能按钮 */}
  93. <div className="C2rBtn">
  94. {/* 是否有对比 */}
  95. {info.isOld ? (
  96. <div
  97. hidden={full}
  98. onClick={() => setOldShow(!oldShow)}
  99. className={classNames(
  100. "C2rBtnRow",
  101. "C2rBtnRow1",
  102. oldShow ? "C2rBtnRow1Ac" : ""
  103. )}
  104. title={oldShow ? "退出对比" : "对比"}
  105. ></div>
  106. ) : null}
  107. {iconArr.map((v) => (
  108. <div
  109. onClick={() => modelChangeFu(v.id)}
  110. className={classNames("C2rBtnRow", "C2rBtnRow" + v.id)}
  111. key={v.id}
  112. title={v.name}
  113. ></div>
  114. ))}
  115. {/* 全屏 */}
  116. <div
  117. onClick={() => {
  118. const dom = ifrRefNew.current;
  119. if (dom && dom.contentWindow && dom.contentWindow.modelLoding)
  120. setFull(!full);
  121. }}
  122. className={classNames(
  123. "C2rBtnRow",
  124. "C2rBtnRow5",
  125. full ? "C2rBtnRow5Ac" : ""
  126. )}
  127. title={full ? "退出全屏" : "全屏"}
  128. ></div>
  129. </div>
  130. </div>
  131. {/* 点击对比打开的元素 */}
  132. {oldFlag ? (
  133. <div
  134. className={classNames(
  135. "C2openOld",
  136. oldShow ? "C2openOldShow" : "",
  137. info.isOld && info.isOld.loc === "横" ? "C2openOldShu" : ""
  138. )}
  139. >
  140. <div className="C2openOldMain">
  141. {info.isOld ? (
  142. <>
  143. <div className="C2openTit">{info.isOld.name}</div>
  144. {/* 线 */}
  145. <div className="C2openLine"></div>
  146. {/* 模型或者图片 */}
  147. {info.isOld.type === "model" ? (
  148. <iframe
  149. src={`/model.html?m=${info.id}&n=old&r=${type}`}
  150. frameBorder="0"
  151. ></iframe>
  152. ) : (
  153. <img src={`${baseUrl}/${type}/${info.id}/old.png`} alt="" />
  154. )}
  155. </>
  156. ) : null}
  157. </div>
  158. <div className="C2openClose" onClick={() => setOldShow(false)}></div>
  159. </div>
  160. ) : null}
  161. </div>
  162. );
  163. }
  164. const MemoArcOrBuildInfo = React.memo(ArcOrBuildInfo);
  165. export default MemoArcOrBuildInfo;