feat(admin): 添加后台域名可见性管理功能
在后台设置页面新增域名管理选项卡,允许管理员配置后台下拉框中显示的域名列表。通过拖拽或点击按钮可以移动域名,实现灵活的可视域名控制。当配置了可见域名时,LayoutView 将只显示指定的域名,否则显示全部域名。
This commit is contained in:
@@ -30,10 +30,15 @@ export const updateFeatureSettings = async (c: Context<{ Bindings: Bindings }>)
|
||||
const commentPlaceholder =
|
||||
rawCommentPlaceholder !== undefined ? rawCommentPlaceholder.trim() : undefined;
|
||||
|
||||
const visibleDomains = Array.isArray(body.visibleDomains)
|
||||
? (body.visibleDomains as string[])
|
||||
: undefined;
|
||||
|
||||
await saveFeatureSettings(c.env, {
|
||||
enableCommentLike,
|
||||
enableArticleLike,
|
||||
commentPlaceholder
|
||||
commentPlaceholder,
|
||||
visibleDomains
|
||||
});
|
||||
|
||||
return c.json({ message: '保存成功!' });
|
||||
|
||||
@@ -3,11 +3,13 @@ import { Bindings } from '../bindings';
|
||||
export const FEATURE_COMMENT_LIKE_KEY = 'comment_feature_comment_like';
|
||||
export const FEATURE_ARTICLE_LIKE_KEY = 'comment_feature_article_like';
|
||||
export const FEATURE_COMMENT_PLACEHOLDER_KEY = 'comment_feature_placeholder';
|
||||
export const FEATURE_VISIBLE_DOMAINS_KEY = 'admin_visible_domains';
|
||||
|
||||
export type FeatureSettings = {
|
||||
enableCommentLike: boolean;
|
||||
enableArticleLike: boolean;
|
||||
commentPlaceholder?: string;
|
||||
visibleDomains?: string[];
|
||||
};
|
||||
|
||||
export async function loadFeatureSettings(env: Bindings): Promise<FeatureSettings> {
|
||||
@@ -15,9 +17,14 @@ export async function loadFeatureSettings(env: Bindings): Promise<FeatureSetting
|
||||
'CREATE TABLE IF NOT EXISTS Settings (key TEXT PRIMARY KEY, value TEXT NOT NULL)'
|
||||
).run();
|
||||
|
||||
const keys = [FEATURE_COMMENT_LIKE_KEY, FEATURE_ARTICLE_LIKE_KEY, FEATURE_COMMENT_PLACEHOLDER_KEY];
|
||||
const keys = [
|
||||
FEATURE_COMMENT_LIKE_KEY,
|
||||
FEATURE_ARTICLE_LIKE_KEY,
|
||||
FEATURE_COMMENT_PLACEHOLDER_KEY,
|
||||
FEATURE_VISIBLE_DOMAINS_KEY
|
||||
];
|
||||
const { results } = await env.CWD_DB.prepare(
|
||||
'SELECT key, value FROM Settings WHERE key IN (?, ?, ?)'
|
||||
'SELECT key, value FROM Settings WHERE key IN (?, ?, ?, ?)'
|
||||
)
|
||||
.bind(...keys)
|
||||
.all<{ key: string; value: string }>();
|
||||
@@ -51,10 +58,21 @@ export async function loadFeatureSettings(env: Bindings): Promise<FeatureSetting
|
||||
|
||||
const commentPlaceholder = map.get(FEATURE_COMMENT_PLACEHOLDER_KEY);
|
||||
|
||||
let visibleDomains: string[] | undefined;
|
||||
const visibleDomainsRaw = map.get(FEATURE_VISIBLE_DOMAINS_KEY);
|
||||
if (visibleDomainsRaw) {
|
||||
try {
|
||||
visibleDomains = JSON.parse(visibleDomainsRaw);
|
||||
} catch (e) {
|
||||
// ignore error
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
enableCommentLike,
|
||||
enableArticleLike,
|
||||
commentPlaceholder
|
||||
commentPlaceholder,
|
||||
visibleDomains
|
||||
};
|
||||
}
|
||||
|
||||
@@ -88,6 +106,10 @@ export async function saveFeatureSettings(
|
||||
{
|
||||
key: FEATURE_COMMENT_PLACEHOLDER_KEY,
|
||||
value: settings.commentPlaceholder
|
||||
},
|
||||
{
|
||||
key: FEATURE_VISIBLE_DOMAINS_KEY,
|
||||
value: settings.visibleDomains ? JSON.stringify(settings.visibleDomains) : undefined
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user