feat(admin): 在评论列表中显示管理员标识
- 从数据库设置中获取管理员邮箱配置 - 在评论作者名字旁添加管理员图标标识 - 优化数据库查询,使用 Promise.all 并行获取配置
This commit is contained in:
@@ -35,7 +35,10 @@
|
||||
:alt="item.name"
|
||||
/>
|
||||
<div class="cell-author-main">
|
||||
<div class="cell-author-name">{{ item.name }}</div>
|
||||
<div class="cell-author-name">
|
||||
{{ item.name }}
|
||||
<span v-if="item.isAdmin" class="cell-admin-tag"><svg viewBox="0 0 22 22" aria-label="网站管理员" role="img" class="cwd-admin-icon" style="width:15px;height:15px;fill:currentColor;color:#db850d;vertical-align:-0.15em;"><g><path d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"></path></g></svg></span>
|
||||
</div>
|
||||
<div class="cell-author-email">
|
||||
<span
|
||||
class="cell-email-text"
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Bindings } from '../../bindings';
|
||||
import { getCravatar } from '../../utils/getAvatar';
|
||||
|
||||
const COMMENT_AVATAR_PREFIX_KEY = 'comment_avatar_prefix';
|
||||
const COMMENT_ADMIN_EMAIL_KEY = 'comment_admin_email';
|
||||
|
||||
export const listComments = async (c: Context<{ Bindings: Bindings }>) => {
|
||||
const page = parseInt(c.req.query('page') || '1');
|
||||
@@ -35,10 +36,16 @@ export const listComments = async (c: Context<{ Bindings: Bindings }>) => {
|
||||
await c.env.CWD_DB.prepare(
|
||||
'CREATE TABLE IF NOT EXISTS Settings (key TEXT PRIMARY KEY, value TEXT NOT NULL)'
|
||||
).run();
|
||||
const avatarRow = await c.env.CWD_DB.prepare('SELECT value FROM Settings WHERE key = ?')
|
||||
.bind(COMMENT_AVATAR_PREFIX_KEY)
|
||||
.first<{ value: string }>();
|
||||
const [avatarRow, adminEmailRow] = await Promise.all([
|
||||
c.env.CWD_DB.prepare('SELECT value FROM Settings WHERE key = ?')
|
||||
.bind(COMMENT_AVATAR_PREFIX_KEY)
|
||||
.first<{ value: string }>(),
|
||||
c.env.CWD_DB.prepare('SELECT value FROM Settings WHERE key = ?')
|
||||
.bind(COMMENT_ADMIN_EMAIL_KEY)
|
||||
.first<{ value: string }>()
|
||||
]);
|
||||
const avatarPrefix = avatarRow?.value || null;
|
||||
const adminEmail = adminEmailRow?.value || null;
|
||||
|
||||
const data = await Promise.all(
|
||||
results.map(async (row: any) => ({
|
||||
@@ -53,9 +60,13 @@ export const listComments = async (c: Context<{ Bindings: Bindings }>) => {
|
||||
contentHtml: row.content_html,
|
||||
status: row.status,
|
||||
priority: row.priority,
|
||||
likes: typeof row.likes === 'number' && Number.isFinite(row.likes) && row.likes >= 0 ? row.likes : 0,
|
||||
likes:
|
||||
typeof row.likes === 'number' && Number.isFinite(row.likes) && row.likes >= 0
|
||||
? row.likes
|
||||
: 0,
|
||||
ua: row.ua,
|
||||
avatar: await getCravatar(row.email, avatarPrefix || undefined)
|
||||
avatar: await getCravatar(row.email, avatarPrefix || undefined),
|
||||
isAdmin: adminEmail && row.email === adminEmail
|
||||
}))
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user