Jelajahi Sumber

更新下载模式

gavin.chen 1 tahun lalu
induk
melakukan
ce836e4d90

+ 95 - 0
package-lock.json

@@ -9,6 +9,7 @@
         "@radix-ui/react-icons": "^1.3.0",
         "@radix-ui/react-popover": "^1.0.6",
         "@radix-ui/react-select": "^1.2.2",
+        "@radix-ui/react-tabs": "^1.0.4",
         "@radix-ui/react-toast": "^1.1.4",
         "antd": "^5.5.2",
         "classnames": "^2.3.2",
@@ -3442,6 +3443,37 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-roving-focus": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz",
+      "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.13.10",
+        "@radix-ui/primitive": "1.0.1",
+        "@radix-ui/react-collection": "1.0.3",
+        "@radix-ui/react-compose-refs": "1.0.1",
+        "@radix-ui/react-context": "1.0.1",
+        "@radix-ui/react-direction": "1.0.1",
+        "@radix-ui/react-id": "1.0.1",
+        "@radix-ui/react-primitive": "1.0.3",
+        "@radix-ui/react-use-callback-ref": "1.0.1",
+        "@radix-ui/react-use-controllable-state": "1.0.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0",
+        "react-dom": "^16.8 || ^17.0 || ^18.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-select": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz",
@@ -3503,6 +3535,36 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-tabs": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz",
+      "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==",
+      "dependencies": {
+        "@babel/runtime": "^7.13.10",
+        "@radix-ui/primitive": "1.0.1",
+        "@radix-ui/react-context": "1.0.1",
+        "@radix-ui/react-direction": "1.0.1",
+        "@radix-ui/react-id": "1.0.1",
+        "@radix-ui/react-presence": "1.0.1",
+        "@radix-ui/react-primitive": "1.0.3",
+        "@radix-ui/react-roving-focus": "1.0.4",
+        "@radix-ui/react-use-controllable-state": "1.0.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0",
+        "react-dom": "^16.8 || ^17.0 || ^18.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-toast": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.4.tgz",
@@ -20974,6 +21036,23 @@
         "@radix-ui/react-slot": "1.0.2"
       }
     },
+    "@radix-ui/react-roving-focus": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz",
+      "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==",
+      "requires": {
+        "@babel/runtime": "^7.13.10",
+        "@radix-ui/primitive": "1.0.1",
+        "@radix-ui/react-collection": "1.0.3",
+        "@radix-ui/react-compose-refs": "1.0.1",
+        "@radix-ui/react-context": "1.0.1",
+        "@radix-ui/react-direction": "1.0.1",
+        "@radix-ui/react-id": "1.0.1",
+        "@radix-ui/react-primitive": "1.0.3",
+        "@radix-ui/react-use-callback-ref": "1.0.1",
+        "@radix-ui/react-use-controllable-state": "1.0.1"
+      }
+    },
     "@radix-ui/react-select": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz",
@@ -21012,6 +21091,22 @@
         "@radix-ui/react-compose-refs": "1.0.1"
       }
     },
+    "@radix-ui/react-tabs": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz",
+      "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==",
+      "requires": {
+        "@babel/runtime": "^7.13.10",
+        "@radix-ui/primitive": "1.0.1",
+        "@radix-ui/react-context": "1.0.1",
+        "@radix-ui/react-direction": "1.0.1",
+        "@radix-ui/react-id": "1.0.1",
+        "@radix-ui/react-presence": "1.0.1",
+        "@radix-ui/react-primitive": "1.0.3",
+        "@radix-ui/react-roving-focus": "1.0.4",
+        "@radix-ui/react-use-controllable-state": "1.0.1"
+      }
+    },
     "@radix-ui/react-toast": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.4.tgz",

+ 1 - 0
package.json

@@ -5,6 +5,7 @@
     "@radix-ui/react-icons": "^1.3.0",
     "@radix-ui/react-popover": "^1.0.6",
     "@radix-ui/react-select": "^1.2.2",
+    "@radix-ui/react-tabs": "^1.0.4",
     "@radix-ui/react-toast": "^1.1.4",
     "antd": "^5.5.2",
     "classnames": "^2.3.2",

+ 97 - 146
src/components/home/SectionDownload.jsx

@@ -2,12 +2,11 @@ import React, { useEffect, useState } from 'react';
 import PropTypes from 'prop-types';
 import { PaperPlaneIcon } from '@radix-ui/react-icons';
 import Spacer from '../public/Spacer';
+import * as Tabs from '@radix-ui/react-tabs';
 // assets
 import download_bg from '../../assets/imgs/download_bg.png';
 import download_qrcode from '../../assets/imgs/qr_codes/download_qrcode.png';
-import AppleIcon from '../svg/AppleIcon';
-import AndroidIcon from '../svg/AndroidIcon';
-import WindowsIcon from '../svg/WindowsIcon';
+import SVGIcon from '../svg/SVGIcon';
 
 const SectionDownload = ({ t, isCN }) => {
   const [config, setConfig] = useState({});
@@ -37,56 +36,23 @@ const SectionDownload = ({ t, isCN }) => {
     window.open(url);
   };
 
-  const _buildSVGLogo = (altString) => {
-    switch (altString) {
-      case 'apple':
-        return (
-          <AppleIcon
-            className={
-              'h-full object-contain group-hover:fill-blue-500 fill-white'
-            }
-          />
-        );
-      case 'android':
-        return (
-          <AndroidIcon
-            className={
-              'h-full object-contain group-hover:fill-blue-500 fill-white'
-            }
-          />
-        );
-      case 'windows':
-        return (
-          <WindowsIcon
-            className={
-              'h-full object-contain group-hover:fill-blue-500 fill-white'
-            }
-          />
-        );
-      default:
-        return '';
-    }
-  };
-
-  const _buildIconButton = ({ altString, buttonString, onClick }) => {
-    const iconImage = _buildSVGLogo(altString);
+  const _buildPCDownloadButton = ({ platformType, buttonString, onClick }) => {
     return (
       <div
         onClick={onClick}
-        className='group hover:bg-gray-100 duration-300 cursor-pointer w-[200px] h-[40px] p-2 flex flex-row items-center justify-center rounded-full border'>
-        {iconImage}
+        className='group hover:bg-gray-100 duration-300 cursor-pointer w-full h-[80px] p-6 flex flex-row items-center justify-center rounded border'>
+        <SVGIcon type={platformType} />
         <div className='ml-3 font-thin text-white group-hover:text-blue-500 duration-300 tracking-widest-cn'>
           {buttonString}
         </div>
       </div>
     );
   };
-
   const _buildTextButton = ({ buttonString, onClick }) => {
     return (
       <div
         onClick={onClick}
-        className='group hover:bg-gray-100 duration-300 cursor-pointer w-[200px] h-[40px] p-2 flex flex-row items-center justify-center rounded-full border'>
+        className='group hover:bg-gray-100 duration-300 cursor-pointer w-full h-[80px] p-6 flex flex-row items-center justify-center rounded border'>
         <div className='font-thin text-white group-hover:text-blue-500 duration-300 tracking-widest-cn'>
           {buttonString}
         </div>
@@ -98,8 +64,8 @@ const SectionDownload = ({ t, isCN }) => {
     return (
       <div
         onClick={onClick}
-        className='group hover:bg-gray-100 duration-300 cursor-pointer w-[200px] h-[40px] p-2 flex flex-row items-center justify-center rounded-full border'>
-        <PaperPlaneIcon className='h-full w-5 text-white group-hover:text-blue-500' />
+        className='group hover:bg-gray-100 duration-300 cursor-pointer w-full h-[80px] p-6 flex flex-row items-center justify-center rounded border'>
+        <PaperPlaneIcon className='h-full w-10 text-white group-hover:text-blue-500' />
         <div className='ml-3 font-thin text-white group-hover:text-blue-500 duration-300 tracking-widest-cn'>
           {t('直接登录')}
         </div>
@@ -107,25 +73,95 @@ const SectionDownload = ({ t, isCN }) => {
     );
   };
 
-  const _buildHeadText = ({ textString }) => {
-    return (
-      <div className='w-[200px] h-[40px] p-2 flex flex-row items-center justify-end'>
-        <div className='font-bold text-white duration-300 tracking-widest-cn'>
-          {textString}
+  const TabsDemo = () => (
+    <Tabs.Root
+      className='flex flex-col px-3 w-full md:w-1/2 shadow-[0_2px_10px] shadow-blackA4'
+      defaultValue='tab1'>
+      <Tabs.List
+        className='shrink-0 flex border-b border-mauve6'
+        aria-label='Manage your account'>
+        <Tabs.Trigger
+          className='backdrop-blur-sm bg-white bg-opacity-30 data-[state=active]:font-bold data-[state=active]:bg-opacity-90 px-5 h-20 flex-1 flex items-center justify-center text-xl tracking-widest-cn text-gray-300 select-none first:rounded-tl-md last:rounded-tr-md hover:text-gray-100 data-[state=active]:text-blue-500 data-[state=active]:shadow-[inset_0_-3px_0_0,0_1px_0_0] data-[state=active]:shadow-white data-[state=active]:focus:relative outline-none cursor-pointer'
+          value='tab1'>
+          {t('正式版')}
+        </Tabs.Trigger>
+        <Tabs.Trigger
+          className='backdrop-blur-sm bg-white bg-opacity-30 data-[state=active]:font-bold data-[state=active]:bg-opacity-90 px-5 h-20 flex-1 flex items-center justify-center text-xl tracking-widest-cn text-gray-300 select-none first:rounded-tl-md last:rounded-tr-md hover:text-gray-100 data-[state=active]:text-blue-500 data-[state=active]:shadow-[inset_0_-3px_0_0,0_1px_0_0] data-[state=active]:shadow-white data-[state=active]:focus:relative outline-none cursor-pointer'
+          value='tab2'>
+          {t('预览版')}
+        </Tabs.Trigger>
+      </Tabs.List>
+      <Tabs.Content
+        className='grow p-5 backdrop-blur-sm bg-white bg-opacity-20 rounded-b-md outline-none'
+        value='tab1'>
+        <div className='grid grid-cols-1 md:grid-cols-2 gap-6'>
+          <_buildPCDownloadButton
+            platformType='android'
+            buttonString={t('Android 客户端下载')}
+            onClick={() =>
+              _handleWindowOpen(config.OLD_FLYINSONO_ANDROID_DOWNLOAD_URL)
+            }
+          />
+          <_buildPCDownloadButton
+            platformType='apple'
+            buttonString={t('iOS 客户端下载')}
+            onClick={() =>
+              _handleWindowOpen(config.OLD_FLYINSONO_IOS_DOWNLOAD_URL)
+            }
+          />
+          <div className='hidden md:block'>
+            <_buildPCDownloadButton
+              platformType='windows'
+              buttonString={t('Windows 客户端下载')}
+              onClick={() =>
+                _handleWindowOpen(config.OLD_FLYINSONO_WINDOWS_DOWNLOAD_URL)
+              }
+            />
+          </div>
+          <div className='hidden md:block'>
+            <_buildTextButton
+              buttonString={t('Sonopost 配置工具')}
+              onClick={() =>
+                _handleWindowOpen(config.SONOPOST_TOOL_DOWNLOAD_URL)
+              }
+            />
+          </div>
         </div>
-      </div>
-    );
-  };
-
-  const _buildCenterText = ({ textString }) => {
-    return (
-      <div className='w-[200px] h-[40px] p-2 flex flex-row items-center justify-center'>
-        <div className='font-bold text-white duration-300 tracking-widest-cn'>
-          {textString}
+      </Tabs.Content>
+      <Tabs.Content
+        className='grow p-5 backdrop-blur-sm bg-white bg-opacity-20 rounded-b-md outline-none'
+        value='tab2'>
+        <div className='grid grid-cols-1 md:grid-cols-2 gap-6'>
+          <_buildPCDownloadButton
+            platformType='android'
+            buttonString={t('Android 客户端下载')}
+            onClick={() =>
+              _handleWindowOpen(config.FLYINSONO_ANDROID_DOWNLOAD_URL)
+            }
+          />
+          <_buildPCDownloadButton
+            platformType='apple'
+            buttonString={t('iOS 客户端下载')}
+            onClick={() => _handleWindowOpen(config.FLYINSONO_IOS_DOWNLOAD_URL)}
+          />
+          <div className='hidden md:block'>
+            <_buildPCDownloadButton
+              platformType='windows'
+              buttonString={t('Windows 客户端下载')}
+              onClick={() =>
+                _handleWindowOpen(config.FLYINSONO_WINDOWS_DOWNLOAD_URL)
+              }
+            />
+          </div>
+          <div className='hidden md:block'>
+            <_buildLoginButton
+              onClick={() => _handleWindowOpen(config.FLYINSONO_WEB_APP_URL)}
+            />
+          </div>
         </div>
-      </div>
-    );
-  };
+      </Tabs.Content>
+    </Tabs.Root>
+  );
 
   return (
     <>
@@ -145,99 +181,14 @@ const SectionDownload = ({ t, isCN }) => {
           <img
             src={download_qrcode}
             alt='download_qrcode'
-            className='w-[150px] h-[150px] object-cover hover:w-[350px] hover:h-[350px] duration-300 cursor-pointer'
+            className='w-[150px] h-[150px] object-cover hover:w-[300px] hover:h-[300px] duration-300 cursor-pointer'
           />
           <Spacer height={'20px'} />
           <div className='font-thin text-white text-xl duration-300 tracking-widest-cn'>
             {t('扫描二维码下载手机客户端')}
           </div>
         </div>
-        {/* PC端 */}
-        <div className='hidden md:grid mt-10 grid-cols-5 gap-6'>
-          <_buildHeadText textString={t('新版本')} />
-          <_buildIconButton
-            altString='android'
-            buttonString={t('安卓客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.FLYINSONO_ANDROID_DOWNLOAD_URL)
-            }
-          />
-          <_buildIconButton
-            altString='apple'
-            buttonString={t('iOS客户端下载')}
-            onClick={() => _handleWindowOpen(config.FLYINSONO_IOS_DOWNLOAD_URL)}
-          />
-          <_buildIconButton
-            altString='windows'
-            buttonString={t('PC客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.FLYINSONO_WINDOWS_DOWNLOAD_URL)
-            }
-          />
-          <_buildLoginButton
-            onClick={() => _handleWindowOpen(config.FLYINSONO_WEB_APP_URL)}
-          />
-          <_buildHeadText textString={t('旧版本')} />
-          <_buildIconButton
-            altString='android'
-            buttonString={t('安卓客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.OLD_FLYINSONO_ANDROID_DOWNLOAD_URL)
-            }
-          />
-          <_buildIconButton
-            altString='apple'
-            buttonString={t('iOS客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.OLD_FLYINSONO_IOS_DOWNLOAD_URL)
-            }
-          />
-          <_buildIconButton
-            altString='windows'
-            buttonString={t('PC客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.OLD_FLYINSONO_WINDOWS_DOWNLOAD_URL)
-            }
-          />
-          <_buildTextButton
-            buttonString={t('Sonopost 配置工具')}
-            onClick={() => _handleWindowOpen(config.SONOPOST_TOOL_DOWNLOAD_URL)}
-          />
-        </div>
-        {/* 移动端 */}
-        <div className='md:hidden flex flex-col'>
-          <_buildCenterText textString={t('新版本')} />
-          <_buildIconButton
-            altString='android'
-            buttonString={t('安卓客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.FLYINSONO_ANDROID_DOWNLOAD_URL)
-            }
-          />
-          <Spacer height={'10px'} />
-          <_buildIconButton
-            altString='apple'
-            buttonString={t('iOS客户端下载')}
-            onClick={() => _handleWindowOpen(config.FLYINSONO_IOS_DOWNLOAD_URL)}
-          />
-          <Spacer height={'20px'} />
-          <_buildCenterText textString={t('旧版本')} />
-          <_buildIconButton
-            altString='android'
-            buttonString={t('安卓客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.OLD_FLYINSONO_ANDROID_DOWNLOAD_URL)
-            }
-          />
-          <Spacer height={'10px'} />
-          <_buildIconButton
-            altString='apple'
-            buttonString={t('iOS客户端下载')}
-            onClick={() =>
-              _handleWindowOpen(config.OLD_FLYINSONO_IOS_DOWNLOAD_URL)
-            }
-          />
-        </div>
+        <TabsDemo />
       </div>
     </>
   );

+ 0 - 5
src/components/public/ScrollSpy.jsx

@@ -100,11 +100,6 @@ const ScrollSpy = ({
         const changeHighlightedItemId = useChild.id;
         if (prevIdTracker.current === changeHighlightedItemId) return;
         prevIdTracker.current = changeHighlightedItemId;
-        console.log(
-          '%c Line:103 🌶 changeHighlightedItemId',
-          'color:#93c0a4',
-          changeHighlightedItemId,
-        );
         onUpdateCallback && onUpdateCallback(changeHighlightedItemId);
         break;
       }

+ 42 - 0
src/components/svg/SVGIcon.jsx

@@ -0,0 +1,42 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import AppleIcon from './AppleIcon';
+import AndroidIcon from './AndroidIcon';
+import WindowsIcon from './WindowsIcon';
+
+const SVGIcon = ({ type }) => {
+  switch (type) {
+    case 'apple':
+      return (
+        <AppleIcon
+          className={
+            'h-full object-contain group-hover:fill-blue-500 fill-white'
+          }
+        />
+      );
+    case 'android':
+      return (
+        <AndroidIcon
+          className={
+            'h-full object-contain group-hover:fill-blue-500 fill-white'
+          }
+        />
+      );
+    case 'windows':
+      return (
+        <WindowsIcon
+          className={
+            'h-full object-contain group-hover:fill-blue-500 fill-white'
+          }
+        />
+      );
+    default:
+      return '';
+  }
+};
+
+SVGIcon.propTypes = {
+  type: PropTypes.string,
+};
+
+export default SVGIcon;

+ 5 - 16
src/i18n/en.json

@@ -1,19 +1,15 @@
 {
   "translation": {
+    "Android 客户端下载": "Android Client",
     "CN": "CN",
     "EN": "EN",
     "More than Ultrasound": "More than Ultrasound",
-    "PC客户端下载": "PC Client",
     "Sonopost 配置工具": "Sonopost Config Tool",
-    "android": "android",
+    "Windows 客户端下载": "Windows Client",
     "copyright": "@2017 Vinno Corporation. All rights reserved.",
-    "iOS客户端下载": "iOS Client",
-    "ios": "ios",
-    "mac": "mac",
+    "iOS 客户端下载": "iOS Client",
     "sale_email": "vinno@vinno.com",
     "service_email": "vinnoservice@vinno.com",
-    "web": "web",
-    "win": "win",
     "• 专家实时在线,远程指导": "• Expert real-time remote guidance",
     "• 形式多样的课程,助力医生知识技能提升": "• __TRANSLATION__",
     "• 影像数据云端存储,方便随时调阅": "• Diagnosis process can be traced images be stored in the cloud and can be obtained anytime, anywhere",
@@ -26,31 +22,23 @@
     "• 突破空间限制,促进优质医疗下沉": "• Promote the sinking of high-quality resources into community clinic",
     "• 超声机软件在线升级,故障在线排查,工程师足不出户即可远程解决问题,无需等待工程师日程安排": "• Engineers remotely troubleshoot faults, update and upgrade software",
     "• 降低患者就诊成本,提升就诊体验": "• One-station experience for the patient",
-    "中文": "Chinese",
     "关于": "About",
     "关于杏聆荟": "About Flyinsono",
     "分时诊断": "Remote Diagnosis",
     "地址:苏州工业园区新发路27号A栋5F": "Building A, 5th Floor, No.27 Xinfa Road, Suzhou Industrial Park",
     "地址:苏州工业园区新发路27号A栋5F / 邮编:215123 / 电话:400-8873860": "Building A, 5th Floor, No.27 Xinfa Road, Suzhou Industrial Park / Postal Code: 215123 / Telephone: 400-8873860",
-    "安卓客户端下载": "Android Client",
     "实时会诊": "Remote Consultation",
     "客服邮箱:": "Customer Service Email: ",
-    "平台": "platform",
     "应用场景": "Use Cases",
     "扫描二维码下载手机客户端": "Scan QR code to download mobile client",
-    "新版本": "New Version",
-    "旧版本": "Old Version",
     "智能超声 · 一触即达": "Intelligent Sonic · Instant Reach",
     "智能超控": "Remote Control",
-    "杏聆荟": "Flyinsono",
     "杏聆荟是一个专注于整合医疗资源,针对超声医疗资源分布不均、治疗效率低下、特殊情况无法灵活应对等问题,为医患提供一站式远程超声解决方案的平台。": "Flyinsono is a platform that focuses on integrating medical resources to address issues such as uneven distribution of ultrasound medical resources, low treatment efficiency, and the inability to flexibly respond to special situations. It provides a one-stop remote ultrasound solution for medical professionals and patients.",
+    "正式版": "Stable",
     "特色功能": "Features",
     "直接登录": "Login Now",
     "立即体验": "Get Started",
     "苏 ICP 备 12062591 号": "Su  ICP No.12062591",
-    "英文": "english",
-    "语言": "language",
-    "调试用路由表": "routers for debug",
     "软件下载": "Downloads",
     "远程会诊": "Remote Consultation",
     "远程协助": "Remote Assistance",
@@ -58,6 +46,7 @@
     "远程质控": "Remote Quality Control",
     "邮编:215123 / 电话:400-8873860": "Postal Code: 215123 / Telephone: 400-8873860",
     "销售邮箱:": "Sales Email: ",
+    "预览版": "Preview",
     "飞依诺科技股份有限公司": "VINNO Technology (Suzhou)Co., Ltd.",
     "首页": "Home"
   }

+ 6 - 17
src/i18n/zh.json

@@ -1,19 +1,15 @@
 {
   "translation": {
+    "Android 客户端下载": "Android 客户端下载",
     "CN": "CN",
     "EN": "EN",
     "More than Ultrasound": "More than Ultrasound",
-    "PC客户端下载": "PC客户端下载",
     "Sonopost 配置工具": "Sonopost 配置工具",
-    "android": "android",
+    "Windows 客户端下载": "Windows 客户端下载",
     "copyright": "@2017 Vinno Corporation. All rights reserved.",
-    "iOS客户端下载": "iOS客户端下载",
-    "ios": "ios",
-    "mac": "mac",
+    "iOS 客户端下载": "iOS 客户端下载",
     "sale_email": "vinno@vinno.com",
     "service_email": "vinnoservice@vinno.com",
-    "web": "web",
-    "win": "win",
     "• 专家实时在线,远程指导": "• 专家实时在线,远程指导",
     "• 形式多样的课程,助力医生知识技能提升": "• 形式多样的课程,助力医生知识技能提升",
     "• 影像数据云端存储,方便随时调阅": "• 影像数据云端存储,方便随时调阅",
@@ -26,31 +22,23 @@
     "• 突破空间限制,促进优质医疗下沉": "• 突破空间限制,促进优质医疗下沉",
     "• 超声机软件在线升级,故障在线排查,工程师足不出户即可远程解决问题,无需等待工程师日程安排": "• 超声机软件在线升级,故障在线排查,工程师足不出户即可远程解决问题,无需等待工程师日程安排",
     "• 降低患者就诊成本,提升就诊体验": "• 降低患者就诊成本,提升就诊体验",
-    "中文": "中文",
     "关于": "关于",
     "关于杏聆荟": "关于杏聆荟",
     "分时诊断": "分时诊断",
     "地址:苏州工业园区新发路27号A栋5F": "地址:苏州工业园区新发路27号A栋5F",
     "地址:苏州工业园区新发路27号A栋5F / 邮编:215123 / 电话:400-8873860": "地址:苏州工业园区新发路27号A栋5F / 邮编:215123 / 电话:400-8873860",
-    "安卓客户端下载": "安卓客户端下载",
     "实时会诊": "实时会诊",
     "客服邮箱:": "客服邮箱:",
-    "平台": "平台",
     "应用场景": "应用场景",
     "扫描二维码下载手机客户端": "扫描二维码下载手机客户端",
-    "新版本": "新版本",
-    "旧版本": "旧版本",
     "智能超声 · 一触即达": "智能超声 · 一触即达",
     "智能超控": "智能超控",
-    "杏聆荟": "杏聆荟",
     "杏聆荟是一个专注于整合医疗资源,针对超声医疗资源分布不均、治疗效率低下、特殊情况无法灵活应对等问题,为医患提供一站式远程超声解决方案的平台。": "杏聆荟是一个专注于整合医疗资源,针对超声医疗资源分布不均、治疗效率低下、特殊情况无法灵活应对等问题,为医患提供一站式远程超声解决方案的平台。",
+    "正式版": "正式版",
     "特色功能": "特色功能",
     "直接登录": "直接登录",
     "立即体验": "立即体验",
     "苏 ICP 备 12062591 号": "苏 ICP 备 12062591 号",
-    "英文": "英文",
-    "语言": "语言",
-    "调试用路由表": "调试用路由表",
     "软件下载": "软件下载",
     "远程会诊": "远程会诊",
     "远程协助": "远程协助",
@@ -58,7 +46,8 @@
     "远程质控": "远程质控",
     "邮编:215123 / 电话:400-8873860": "邮编:215123 / 电话:400-8873860",
     "销售邮箱:": "销售邮箱:",
+    "预览版": "预览版",
     "飞依诺科技股份有限公司": "飞依诺科技股份有限公司",
     "首页": "首页"
   }
-}
+}

+ 0 - 2
src/pages/HomePage.jsx

@@ -171,9 +171,7 @@ export default function HomePage() {
     if (elementId.includes('feature')) {
       elementId = 'feature-a';
     }
-    console.log('%c Line:171 🍖 elementId', 'color:#42b983', elementId);
     const index = routers.findIndex((e) => e.value === elementId);
-    console.log('%c Line:173 🍺 index', 'color:#ea7e5c', index);
     setRouterIndex(index);
   };