feat(announcement): 新增首页弹窗公告功能并完成弹窗UI视觉重构
- 数据库与后端:announcements 表增加 is_popup 字段及迁移脚本,提供前台弹窗接口与多公告优先级选取,补全选优单测 - 管理后台:总后台与分销后台公告编辑新增「弹窗公告」开关与列表标签展示 - 前台交互:前台 PC/移动端首页引入 AnnouncementPopup,支持同一用户同一天同一公告仅弹一次的关闭记录 - 视觉优化:重构弹窗结构,顶栏镶嵌品牌橙流光细条与浅暖橙通知徽标,中间内嵌浅灰舒适阅读卡片,底部搭配大锤橙实心主操作按钮 - 验证方式:后端 announcement 单测通过,前端 npm run build 编译无报错,浏览器实机截图验证
This commit is contained in:
@@ -672,6 +672,8 @@ export interface SiteAnnouncement {
|
||||
priority: number
|
||||
is_pinned: boolean
|
||||
is_important: boolean
|
||||
/** 弹窗公告:本站首页弹出且需用户手动关闭,同一天只弹一次 */
|
||||
is_popup: boolean
|
||||
view_count: number
|
||||
status: string
|
||||
published_at: string | null
|
||||
@@ -693,6 +695,7 @@ export interface SiteAnnouncementPayload {
|
||||
priority: number
|
||||
is_pinned: boolean
|
||||
is_important: boolean
|
||||
is_popup: boolean
|
||||
}
|
||||
|
||||
export async function listSiteAnnouncements(
|
||||
|
||||
@@ -69,6 +69,7 @@ const EMPTY_FORM: SiteAnnouncementPayload = {
|
||||
priority: 0,
|
||||
is_pinned: false,
|
||||
is_important: false,
|
||||
is_popup: false,
|
||||
}
|
||||
|
||||
function formatTime(value?: string | null) {
|
||||
@@ -181,6 +182,7 @@ export default function Announcements() {
|
||||
priority: row.priority,
|
||||
is_pinned: row.is_pinned,
|
||||
is_important: row.is_important,
|
||||
is_popup: row.is_popup,
|
||||
})
|
||||
setModalOpen(true)
|
||||
}
|
||||
@@ -324,6 +326,7 @@ export default function Announcements() {
|
||||
重要
|
||||
</Tag>
|
||||
)}
|
||||
{row.is_popup && <Tag color="blue">弹窗公告</Tag>}
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
@@ -440,6 +443,13 @@ export default function Announcements() {
|
||||
<Form.Item name="is_important" valuePropName="checked">
|
||||
<Checkbox>标记重要</Checkbox>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="is_popup"
|
||||
valuePropName="checked"
|
||||
tooltip="本站首页弹出,用户必须手动关闭;同一天同一条只弹一次"
|
||||
>
|
||||
<Checkbox>弹窗公告</Checkbox>
|
||||
</Form.Item>
|
||||
</Space>
|
||||
{!editing && (
|
||||
<Alert
|
||||
|
||||
Reference in New Issue
Block a user