feat: 交付官方 Docker 运行时,外观改背景图并下线自定义 CSS/JS
站点/后台分轨背景与用户列表排序一并落地;生产 CORS 改走 SITE_URL,健康检查带版本号。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -677,10 +677,14 @@ export interface PublicSettings {
|
||||
attachment_max_count: number;
|
||||
/** 正文插图上限 MB;缺省 5 */
|
||||
image_max_mb: number;
|
||||
/** 全站自定义 CSS;空串=无 */
|
||||
custom_css: string;
|
||||
/** 全站自定义 JS;空串=无(保存后整页加载生效) */
|
||||
custom_js: string;
|
||||
/** 前台背景图 URL;空=默认画布 */
|
||||
bg_site_url: string;
|
||||
/** 前台铺放模式 */
|
||||
bg_site_mode: string;
|
||||
/** 后台背景图 URL;空=默认画布 */
|
||||
bg_admin_url: string;
|
||||
/** 后台铺放模式 */
|
||||
bg_admin_mode: string;
|
||||
}
|
||||
|
||||
/** 与后端 DefaultAttachmentExts 保持同步 */
|
||||
@@ -715,8 +719,10 @@ const DEFAULT_PUBLIC_SETTINGS: PublicSettings = {
|
||||
attachment_max_mb: 20,
|
||||
attachment_max_count: 10,
|
||||
image_max_mb: 5,
|
||||
custom_css: "",
|
||||
custom_js: "",
|
||||
bg_site_url: "",
|
||||
bg_site_mode: "cover",
|
||||
bg_admin_url: "",
|
||||
bg_admin_mode: "cover",
|
||||
};
|
||||
|
||||
function normalizeAttachmentExts(raw: unknown): string[] {
|
||||
@@ -786,8 +792,10 @@ function normalizePublicSettings(data: Partial<PublicSettings> | null | undefine
|
||||
attachment_max_mb: maxMB,
|
||||
attachment_max_count: maxCount,
|
||||
image_max_mb: imageMB,
|
||||
custom_css: typeof data?.custom_css === "string" ? data.custom_css : "",
|
||||
custom_js: typeof data?.custom_js === "string" ? data.custom_js : "",
|
||||
bg_site_url: typeof data?.bg_site_url === "string" ? data.bg_site_url : "",
|
||||
bg_site_mode: typeof data?.bg_site_mode === "string" ? data.bg_site_mode : "cover",
|
||||
bg_admin_url: typeof data?.bg_admin_url === "string" ? data.bg_admin_url : "",
|
||||
bg_admin_mode: typeof data?.bg_admin_mode === "string" ? data.bg_admin_mode : "cover",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1893,6 +1901,8 @@ export interface AdminUsersQuery {
|
||||
q?: string;
|
||||
role?: string;
|
||||
status?: string;
|
||||
sort?: string;
|
||||
order?: "asc" | "desc";
|
||||
}
|
||||
|
||||
function adminUsersParams(query: AdminUsersQuery): URLSearchParams {
|
||||
@@ -1902,6 +1912,9 @@ function adminUsersParams(query: AdminUsersQuery): URLSearchParams {
|
||||
if (query.q) params.set("q", query.q);
|
||||
if (query.role) params.set("role", query.role);
|
||||
if (query.status) params.set("status", query.status);
|
||||
if (query.sort && query.sort !== "id") params.set("sort", query.sort);
|
||||
if (query.order === "asc") params.set("order", "asc");
|
||||
else if (query.sort && query.sort !== "id") params.set("order", query.order || "desc");
|
||||
return params;
|
||||
}
|
||||
|
||||
@@ -2144,8 +2157,10 @@ export type UpdateSiteSettingsBody = {
|
||||
attachment_max_mb?: number;
|
||||
attachment_max_count?: number;
|
||||
image_max_mb?: number;
|
||||
custom_css?: string;
|
||||
custom_js?: string;
|
||||
bg_site_url?: string;
|
||||
bg_site_mode?: string;
|
||||
bg_admin_url?: string;
|
||||
bg_admin_mode?: string;
|
||||
timeline_git_import?: string;
|
||||
};
|
||||
|
||||
@@ -2161,6 +2176,24 @@ export async function apiUpdateSiteSettings(body: UpdateSiteSettingsBody): Promi
|
||||
return normalizePublicSettings(data as Partial<PublicSettings>);
|
||||
}
|
||||
|
||||
/** 上传站点背景并立即绑定前台或后台 */
|
||||
export async function apiUploadSiteBackground(
|
||||
surface: "site" | "admin",
|
||||
file: File
|
||||
): Promise<PublicSettings> {
|
||||
const form = new FormData();
|
||||
form.append("surface", surface);
|
||||
form.append("file", file, file.name || "background.jpg");
|
||||
const res = await fetchWithRefresh("/api/admin/upload/background", {
|
||||
method: "POST",
|
||||
headers: clientHeaders(),
|
||||
body: form,
|
||||
});
|
||||
const data = await res.json().catch(() => ({}));
|
||||
if (!res.ok) throw new Error(data.error || "上传背景图失败");
|
||||
return normalizePublicSettings(data as Partial<PublicSettings>);
|
||||
}
|
||||
|
||||
// ===== 板块(客户端,供角色授权弹窗勾选) =====
|
||||
|
||||
export async function apiListBoards(): Promise<{ boards: Board[] }> {
|
||||
|
||||
Reference in New Issue
Block a user