Explorar o código

feat: Support Custom Start Page

MystiPanda hai 1 ano
pai
achega
15e8894614

+ 4 - 0
src-tauri/src/config/verge.rs

@@ -25,6 +25,8 @@ pub struct IVerge {
     /// copy env type
     pub env_type: Option<String>,
 
+    /// start page
+    pub start_page: Option<String>,
     /// startup script path
     pub startup_script: Option<String>,
 
@@ -153,6 +155,7 @@ impl IVerge {
             env_type: Some("bash".into()),
             #[cfg(target_os = "windows")]
             env_type: Some("powershell".into()),
+            start_page: Some("/".into()),
             traffic_graph: Some(true),
             enable_memory_usage: Some(true),
             enable_auto_launch: Some(false),
@@ -192,6 +195,7 @@ impl IVerge {
         patch!(theme_mode);
         patch!(tray_event);
         patch!(env_type);
+        patch!(start_page);
         patch!(startup_script);
         patch!(traffic_graph);
         patch!(enable_memory_usage);

+ 26 - 3
src/components/setting/setting-verge.tsx

@@ -27,7 +27,7 @@ import { LayoutViewer } from "./mods/layout-viewer";
 import { UpdateViewer } from "./mods/update-viewer";
 import getSystem from "@/utils/get-system";
 import { portableFlag } from "@/pages/_layout";
-
+import { routers } from "@/pages/_routers";
 interface Props {
   onError?: (err: Error) => void;
 }
@@ -38,8 +38,14 @@ const SettingVerge = ({ onError }: Props) => {
   const { t } = useTranslation();
 
   const { verge, patchVerge, mutateVerge } = useVerge();
-  const { theme_mode, language, tray_event, env_type, startup_script } =
-    verge ?? {};
+  const {
+    theme_mode,
+    language,
+    tray_event,
+    env_type,
+    startup_script,
+    start_page,
+  } = verge ?? {};
   const configRef = useRef<DialogRef>(null);
   const hotkeyRef = useRef<DialogRef>(null);
   const miscRef = useRef<DialogRef>(null);
@@ -134,6 +140,23 @@ const SettingVerge = ({ onError }: Props) => {
           </Select>
         </GuardState>
       </SettingItem>
+
+      <SettingItem label={t("Start Page")}>
+        <GuardState
+          value={start_page ?? "/"}
+          onCatch={onError}
+          onFormat={(e: any) => e.target.value}
+          onChange={(e) => onChangeData({ start_page: e })}
+          onGuard={(e) => patchVerge({ start_page: e })}
+        >
+          <Select size="small" sx={{ width: 140, "> div": { py: "7.5px" } }}>
+            {routers.map((page: { label: string; link: string }) => {
+              return <MenuItem value={page.link}>{t(page.label)}</MenuItem>;
+            })}
+          </Select>
+        </GuardState>
+      </SettingItem>
+
       <SettingItem label={t("Startup Script")}>
         <GuardState
           value={startup_script ?? ""}

+ 1 - 0
src/locales/en.json

@@ -101,6 +101,7 @@
   "Theme Mode": "Theme Mode",
   "Tray Click Event": "Tray Click Event",
   "Copy Env Type": "Copy Env Type",
+  "Start Page": "Start Page",
   "Startup Script": "Startup Script",
   "Browse": "Browse",
   "Show Main Window": "Show Main Window",

+ 1 - 0
src/locales/ru.json

@@ -92,6 +92,7 @@
   "Current System Proxy": "Текущий системный прокси",
   "Theme Mode": "Режим темы",
   "Tray Click Event": "Событие щелчка в лотке",
+  "Start Page": "Главная страница",
   "Copy Env Type": "Скопировать тип Env",
   "Startup Script": "Скрипт запуска",
   "Browse": "Просмотреть",

+ 1 - 0
src/locales/zh.json

@@ -101,6 +101,7 @@
   "Theme Mode": "主题模式",
   "Tray Click Event": "托盘点击事件",
   "Copy Env Type": "复制环境变量类型",
+  "Start Page": "启动页面",
   "Startup Script": "启动脚本",
   "Browse": "浏览",
   "Show Main Window": "显示主窗口",

+ 7 - 4
src/pages/_layout.tsx

@@ -23,7 +23,7 @@ import getSystem from "@/utils/get-system";
 import "dayjs/locale/ru";
 import "dayjs/locale/zh-cn";
 import { getPortableFlag } from "@/services/cmds";
-
+import { useNavigate } from "react-router-dom";
 export let portableFlag = false;
 
 dayjs.extend(relativeTime);
@@ -36,8 +36,8 @@ const Layout = () => {
   const { theme } = useCustomTheme();
 
   const { verge } = useVerge();
-  const { language } = verge || {};
-
+  const { language, start_page } = verge || {};
+  const navigate = useNavigate();
   const location = useLocation();
 
   useEffect(() => {
@@ -88,7 +88,10 @@ const Layout = () => {
       dayjs.locale(language === "zh" ? "zh-cn" : language);
       i18next.changeLanguage(language);
     }
-  }, [language]);
+    if (start_page) {
+      navigate(start_page);
+    }
+  }, [language, start_page]);
 
   return (
     <SWRConfig value={{ errorRetryCount: 3 }}>

+ 1 - 0
src/services/types.d.ts

@@ -184,6 +184,7 @@ interface IVergeConfig {
   tray_event?: "main_window" | "system_proxy" | "tun_mode" | string;
   env_type?: "bash" | "cmd" | "powershell" | string;
   startup_script?: string;
+  start_page?: string;
   clash_core?: string;
   theme_mode?: "light" | "dark" | "system";
   traffic_graph?: boolean;