feat: Support Custom Start Page

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

View File

@ -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);

View File

@ -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 ?? ""}

View File

@ -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",

View File

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

View File

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

View File

@ -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 }}>

View File

@ -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;