index.jsx 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import {useEffect, useState} from "react";
  2. import {isAndroid} from "@utils/helpers";
  3. import MuiDrawer from "@mui/material/Drawer";
  4. import styles from "./styles.module.scss";
  5. import img_hand from "@assets/shortcut/pointer.avif"
  6. const i18n=global.i18n;
  7. const objInfo={
  8. count:0,
  9. timer:null
  10. }
  11. const WShortcutGuide = () => {
  12. const [isShow, setIsShow] = useState(false);
  13. const [iconUrl, setIconUrl] = useState("");
  14. const show=()=>{
  15. setIsShow(true);
  16. }
  17. const hide=()=>{
  18. setIsShow(false);
  19. }
  20. const clearTimer=()=>{
  21. if (objInfo.timer!=null){
  22. clearInterval(objInfo.timer);
  23. objInfo.timer=null;
  24. objInfo.count=0;
  25. }
  26. }
  27. useEffect(()=>{
  28. const shortcutGuide={
  29. show,
  30. hide
  31. };
  32. global.shortcutGuide=shortcutGuide;
  33. if (window.progressier!=null){
  34. let iconUrl="";
  35. let initIconUrl=()=>{
  36. if (window.progressier.data!=null){
  37. let params=window.progressier.data.params;
  38. if (params!=null){
  39. // setIconUrl(params.icon180);
  40. iconUrl=params.icon180;
  41. }
  42. }
  43. }
  44. clearTimer();
  45. if (iconUrl==null||iconUrl===""){
  46. objInfo.timer=setInterval(()=>{
  47. if (objInfo.count>=10){
  48. clearTimer();
  49. return;
  50. }
  51. initIconUrl();
  52. if (iconUrl!=null&&iconUrl!==""){
  53. setIconUrl(iconUrl);
  54. clearTimer();
  55. }
  56. objInfo.count++;
  57. },200);
  58. }
  59. else
  60. {
  61. setIconUrl(iconUrl);
  62. }
  63. }
  64. return ()=>{
  65. clearTimer();
  66. }
  67. },[])
  68. const getMainDomain=()=>{
  69. // 获取完整的域名
  70. const fullDomain = window.location.hostname;
  71. // 将域名分割成部分
  72. const parts = fullDomain.split('.');
  73. // 如果域名部分少于2个,直接返回完整域名
  74. if (parts.length <= 2) {
  75. return parts[0]; // 返回第一个部分(如 localhost)
  76. }
  77. // 提取主域名并去除后缀(最后一部分)
  78. return parts.slice(-2, -1).join('');
  79. }
  80. const renderAndroidContent=()=>{
  81. let mainDomain = getMainDomain();
  82. if(mainDomain!=null)mainDomain=mainDomain.toUpperCase();
  83. return (
  84. <div className={styles.container}>
  85. <div className={styles.header}>
  86. <span className={styles.title}>
  87. {i18n.t("installBox.shortcut.title")}
  88. </span>
  89. </div>
  90. <div className={styles.content}>
  91. <span className={styles.sub_title}>{i18n.t("installBox.shortcut.sub_1")}</span>
  92. <div className={styles.android_op_1}>
  93. <span>{i18n.t("installBox.shortcut.android_op_1")}</span>
  94. <span>{i18n.t("installBox.shortcut.android_op_2")}</span>
  95. <span>{i18n.t("installBox.shortcut.android_op_3")}</span>
  96. <span>{i18n.t("installBox.shortcut.android_op_4")}</span>
  97. </div>
  98. <span className={styles.sub_title}>{i18n.t("installBox.shortcut.sub_2")}</span>
  99. <div className={styles.android_op_2}>
  100. <span className={styles.header}>{i18n.t("installBox.shortcut.title")}</span>
  101. <div className={styles.app_info_con}>
  102. <img className={styles.icon} src={iconUrl}/>
  103. <span>{mainDomain}</span>
  104. </div>
  105. <div className={styles.app_btns}>
  106. <span>{i18n.t("installBox.shortcut.cancel")}</span>
  107. <span>{i18n.t("installBox.shortcut.add")}</span>
  108. </div>
  109. </div>
  110. </div>
  111. <div className={styles.t_guide_con}>
  112. <img className={styles.t_hand} src={img_hand}/>
  113. </div>
  114. </div>
  115. )
  116. }
  117. const renderAndroid = () => {
  118. return (
  119. <MuiDrawer open={isShow}
  120. anchor={"top"}
  121. sx={{
  122. pointerEvents: 'auto',
  123. zIndex: 'var(--zindex-install)',
  124. "& .MuiDrawer-paper": {
  125. boxSizing: "border-box",
  126. overflow: 'visible !important',
  127. backgroundColor:'var(--standard);',
  128. boxShadow: 'var(--widget-shadow);',
  129. borderBottomLeftRadius: '0.71rem',
  130. borderBottomRightRadius: '0.71rem',
  131. padding: '1.42rem'
  132. },
  133. }}
  134. variant="temporary"
  135. onClose={()=>{
  136. setIsShow(false)
  137. }}>
  138. {renderAndroidContent()}
  139. </MuiDrawer>
  140. )
  141. }
  142. const renderIOSContent=()=>{
  143. let mainDomain = getMainDomain();
  144. if(mainDomain!=null)mainDomain=mainDomain.toUpperCase();
  145. const origin=window.location.origin;
  146. return (
  147. <div className={styles.container}>
  148. <div className={styles.header}>
  149. <span className={styles.title}>
  150. {i18n.t("installBox.shortcut.title")}
  151. </span>
  152. </div>
  153. <div className={styles.content}>
  154. <span className={styles.sub_title}>{i18n.t("installBox.shortcut.sub_1")}</span>
  155. <div className={styles.ios_op_1}>
  156. <span>{i18n.t("installBox.shortcut.ios_op_1")}</span>
  157. <span>{i18n.t("installBox.shortcut.ios_op_2")}</span>
  158. <span>{i18n.t("installBox.shortcut.ios_op_3")}</span>
  159. <span className={styles.bottom}>{i18n.t("installBox.shortcut.ios_op_4")}</span>
  160. </div>
  161. <span className={styles.sub_title}>{i18n.t("installBox.shortcut.sub_2")}</span>
  162. <div className={styles.ios_op_2}>
  163. <div className={styles.header}>
  164. <span className={styles.btn}>{i18n.t("installBox.shortcut.cancel")}</span>
  165. <span className={styles.title_1}>{i18n.t("installBox.shortcut.title")}</span>
  166. <span className={styles.btn}>{i18n.t("installBox.shortcut.add")}</span>
  167. </div>
  168. <div className={styles.appinfo_con}>
  169. <img className={styles.icon} src={iconUrl}/>
  170. <div className={styles.info_con}>
  171. <span className={styles.host}>{mainDomain}</span>
  172. <span className={styles.origin}>{origin}</span>
  173. </div>
  174. </div>
  175. <div className={styles.tips_con}>
  176. <span>{i18n.t("installBox.shortcut.tips_1")}</span>
  177. </div>
  178. </div>
  179. </div>
  180. <div className={styles.b_guide_con}>
  181. <img className={styles.b_hand} src={img_hand}/>
  182. </div>
  183. </div>
  184. )
  185. }
  186. const renderIOS = () => {
  187. return (
  188. <MuiDrawer open={isShow}
  189. anchor={"bottom"}
  190. sx={{
  191. pointerEvents: 'auto',
  192. zIndex: 'var(--zindex-install)',
  193. "& .MuiDrawer-paper": {
  194. boxSizing: "border-box",
  195. overflow: 'visible !important',
  196. backgroundColor:'var(--standard);',
  197. boxShadow: 'var(--widget-shadow);',
  198. borderTopLeftRadius: '0.71rem',
  199. borderTopRightRadius: '0.71rem',
  200. padding: '1.42rem'
  201. },
  202. }}
  203. variant="temporary"
  204. onClose={()=>{
  205. setIsShow(false)
  206. }}>
  207. {renderIOSContent()}
  208. </MuiDrawer>
  209. )
  210. }
  211. const renderGuide=()=>{
  212. if (isAndroid()){
  213. return renderAndroid();
  214. }
  215. else
  216. {
  217. return renderIOS();
  218. }
  219. }
  220. return (
  221. <>
  222. {renderGuide()}
  223. </>
  224. )
  225. }
  226. export default WShortcutGuide;