diff --git a/packages/napcat-core/tsconfig.json b/packages/napcat-core/tsconfig.json
index 48d3a03b..fd28287c 100644
--- a/packages/napcat-core/tsconfig.json
+++ b/packages/napcat-core/tsconfig.json
@@ -1,5 +1,8 @@
{
"extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "rootDir": ".."
+ },
"include": [
"*.ts",
"**/*.ts"
diff --git a/packages/napcat-framework/tsconfig.json b/packages/napcat-framework/tsconfig.json
index 48d3a03b..fd28287c 100644
--- a/packages/napcat-framework/tsconfig.json
+++ b/packages/napcat-framework/tsconfig.json
@@ -1,5 +1,8 @@
{
"extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "rootDir": ".."
+ },
"include": [
"*.ts",
"**/*.ts"
diff --git a/packages/napcat-shell/base.ts b/packages/napcat-shell/base.ts
index 1b935ff2..59b04ba3 100644
--- a/packages/napcat-shell/base.ts
+++ b/packages/napcat-shell/base.ts
@@ -492,7 +492,8 @@ async function handleLoginInner (context: { isLogined: boolean; }, logger: LogWr
try {
// 检查是否配置了自动登录账号,并尝试 WebUi 快速/密码回退登录。
// 这可以避免在已经有自动登录配置的情况下过早输出二维码。
- const hasAutoLogin = process.env['NAPCAT_QUICK_ACCOUNT'] || (WebUiDataRuntime.getQQQuickLoginList().length > 0); // 假如有历史登录列表
+ const quickLoginList = WebUiDataRuntime.getQQQuickLoginList() || [];
+ const hasAutoLogin = process.env['NAPCAT_QUICK_ACCOUNT'] || (quickLoginList.length > 0); // 假如有历史登录列表
if (hasAutoLogin || process.env['NAPCAT_QUICK_PASSWORD'] || process.env['NAPCAT_QUICK_PASSWORD_MD5']) {
hasAttemptedFallback = true;
}
diff --git a/packages/napcat-webui-frontend/src/pages/dashboard/config/backup.tsx b/packages/napcat-webui-frontend/src/pages/dashboard/config/backup.tsx
index f2129b4c..3a519d44 100644
--- a/packages/napcat-webui-frontend/src/pages/dashboard/config/backup.tsx
+++ b/packages/napcat-webui-frontend/src/pages/dashboard/config/backup.tsx
@@ -92,7 +92,7 @@ const BackupConfigCard: React.FC = () => {
onPress={handleExportConfig}
title='导出配置'
>
-
+
diff --git a/packages/napcat-webui-frontend/src/pages/dashboard/config/theme.tsx b/packages/napcat-webui-frontend/src/pages/dashboard/config/theme.tsx
index f8d7f3e6..c03a6191 100644
--- a/packages/napcat-webui-frontend/src/pages/dashboard/config/theme.tsx
+++ b/packages/napcat-webui-frontend/src/pages/dashboard/config/theme.tsx
@@ -436,15 +436,33 @@ const ThemeConfigCard = () => {
}
}
await FileManager.uploadWebUIFont(file);
- toast.success('上传成功,即将刷新页面');
+
+ // 先自动把选择的字体模式设置为 custom,并保存配置,避免刷新后又变成了旧的/没保存的模式
+ const updatedTheme = { ...theme, fontMode: 'custom' };
+ await WebUIManager.setThemeConfig(updatedTheme);
+ originalDataRef.current = updatedTheme;
+ updateFontCache('custom');
+ setHasUnsavedChanges(false);
+ loadTheme();
+
+ toast.success('上传并保存成功,即将刷新页面');
setTimeout(() => window.location.reload(), 1000);
} catch (error) {
- toast.error('上传失败: ' + (error as Error).message);
+ toast.error('上传或保存失败: ' + (error as Error).message);
}
}}
onDelete={async () => {
try {
await FileManager.deleteWebUIFont();
+ // 删除字体后,若当前选中的是自定义字体,则将其重置为系统默认(或其它)并保存,以防页面报错
+ if (theme.fontMode === 'custom') {
+ const updatedTheme = { ...theme, fontMode: 'system' };
+ await WebUIManager.setThemeConfig(updatedTheme);
+ originalDataRef.current = updatedTheme;
+ updateFontCache('system');
+ setHasUnsavedChanges(false);
+ loadTheme();
+ }
toast.success('删除成功,即将刷新页面');
setTimeout(() => window.location.reload(), 1000);
} catch (error) {