完善角色与消息权限:收紧板管内容处置,彻底删除仅站长,并统一管理删帖/评弹窗。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,7 +21,7 @@ import {
|
||||
} from "@/lib/api";
|
||||
import { authCookieHeader } from "@/lib/cookies";
|
||||
import { getMeCached } from "@/lib/serverData";
|
||||
import { canModerateAny, isSuperOrOwner, isAdminOrAbove } from "@/lib/roles";
|
||||
import { canModerateAny, isSuperOrOwner, isAdminOrAbove, ROLES } from "@/lib/roles";
|
||||
import { AdminPageHeader, AdminStatCard } from "@/components/admin";
|
||||
import DashboardClient from "./DashboardClient";
|
||||
|
||||
@@ -115,9 +115,12 @@ export default async function AdminDashboardPage() {
|
||||
const canMod = canModerateAny(me.user);
|
||||
const canUsers = isSuperOrOwner(me.user?.role);
|
||||
const canEconomy = isAdminOrAbove(me.user?.role);
|
||||
const boardScoped = me.user?.role === ROLES.BOARD_ADMIN;
|
||||
|
||||
const [overview, pendingCounts, analytics] = await Promise.all([
|
||||
fetchOverview(cookie).catch(() => null),
|
||||
boardScoped
|
||||
? Promise.resolve(null)
|
||||
: fetchOverview(cookie).catch(() => null),
|
||||
canMod
|
||||
? fetchAdminPendingCounts(cookie).catch(() => ({ posts: 0, comments: 0 }))
|
||||
: Promise.resolve(null),
|
||||
@@ -133,7 +136,15 @@ export default async function AdminDashboardPage() {
|
||||
}).format(now);
|
||||
|
||||
const stats = overview?.stats;
|
||||
const newUsers = overview?.new_users ?? [];
|
||||
const newUsers = boardScoped ? [] : overview?.new_users ?? [];
|
||||
|
||||
// 板管:今日内容用授权板 analytics 序列今日点;隐藏全站注册/在线卡的误导数字
|
||||
const todayPosts = boardScoped
|
||||
? analytics.posts_series[analytics.posts_series.length - 1]?.count ?? 0
|
||||
: stats?.today_posts ?? 0;
|
||||
const todayComments = boardScoped
|
||||
? analytics.comments_series[analytics.comments_series.length - 1]?.count ?? 0
|
||||
: stats?.today_comments ?? 0;
|
||||
|
||||
return (
|
||||
<div>
|
||||
@@ -155,30 +166,34 @@ export default async function AdminDashboardPage() {
|
||||
<AdminStatCard
|
||||
label="今日 PV"
|
||||
value={fmt(analytics.today_pv)}
|
||||
hint={`独立访客 UV ${fmt(analytics.today_uv)}`}
|
||||
hint={boardScoped ? "仅全站可见(板管不展示)" : `独立访客 UV ${fmt(analytics.today_uv)}`}
|
||||
icon={<Eye size={16} />}
|
||||
/>
|
||||
<AdminStatCard
|
||||
label="今日 UV"
|
||||
value={fmt(analytics.today_uv)}
|
||||
hint="独立访客"
|
||||
hint={boardScoped ? "板管仪表盘不含全站 UV" : "独立访客"}
|
||||
icon={<Users size={16} />}
|
||||
color="var(--ok)"
|
||||
soft="var(--ok-soft)"
|
||||
/>
|
||||
<AdminStatCard
|
||||
label="今日内容"
|
||||
value={fmt(stats?.today_posts ?? 0)}
|
||||
value={fmt(todayPosts)}
|
||||
sub="帖"
|
||||
hint={`评论 ${fmt(stats?.today_comments ?? 0)} · 注册 ${fmt(stats?.today_users ?? 0)}`}
|
||||
hint={
|
||||
boardScoped
|
||||
? `评论 ${fmt(todayComments)} · 授权板块`
|
||||
: `评论 ${fmt(todayComments)} · 注册 ${fmt(stats?.today_users ?? 0)}`
|
||||
}
|
||||
icon={<FileText size={16} />}
|
||||
color="var(--gold)"
|
||||
soft="var(--gold-soft)"
|
||||
/>
|
||||
<AdminStatCard
|
||||
label="在线"
|
||||
value={fmt(stats?.online ?? 0)}
|
||||
hint={`峰值 ${fmt(stats?.peak_online ?? 0)}`}
|
||||
value={boardScoped ? "—" : fmt(stats?.online ?? 0)}
|
||||
hint={boardScoped ? "板管不展示全站在线" : `峰值 ${fmt(stats?.peak_online ?? 0)}`}
|
||||
icon={<Activity size={16} />}
|
||||
color="var(--clay)"
|
||||
soft="var(--clay-soft)"
|
||||
|
||||
Reference in New Issue
Block a user