feat: Support Custom Start Page

This commit is contained in:
MystiPanda 2024-01-18 15:36:44 +08:00
parent 4bb88d8e44
commit c72479c4d6
7 changed files with 41 additions and 7 deletions

View File

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

View File

@ -27,7 +27,7 @@ import { LayoutViewer } from "./mods/layout-viewer";
import { UpdateViewer } from "./mods/update-viewer"; import { UpdateViewer } from "./mods/update-viewer";
import getSystem from "@/utils/get-system"; import getSystem from "@/utils/get-system";
import { portableFlag } from "@/pages/_layout"; import { portableFlag } from "@/pages/_layout";
import { routers } from "@/pages/_routers";
interface Props { interface Props {
onError?: (err: Error) => void; onError?: (err: Error) => void;
} }
@ -38,8 +38,14 @@ const SettingVerge = ({ onError }: Props) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { verge, patchVerge, mutateVerge } = useVerge(); const { verge, patchVerge, mutateVerge } = useVerge();
const { theme_mode, language, tray_event, env_type, startup_script } = const {
verge ?? {}; theme_mode,
language,
tray_event,
env_type,
startup_script,
start_page,
} = verge ?? {};
const configRef = useRef<DialogRef>(null); const configRef = useRef<DialogRef>(null);
const hotkeyRef = useRef<DialogRef>(null); const hotkeyRef = useRef<DialogRef>(null);
const miscRef = useRef<DialogRef>(null); const miscRef = useRef<DialogRef>(null);
@ -134,6 +140,23 @@ const SettingVerge = ({ onError }: Props) => {
</Select> </Select>
</GuardState> </GuardState>
</SettingItem> </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")}> <SettingItem label={t("Startup Script")}>
<GuardState <GuardState
value={startup_script ?? ""} value={startup_script ?? ""}

View File

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

View File

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

View File

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

View File

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

View File

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