diff --git a/.scratch/ui-consistency/issues/08-campaigns.md b/.scratch/ui-consistency/issues/08-campaigns.md
index a2bcb81..2660aae 100644
--- a/.scratch/ui-consistency/issues/08-campaigns.md
+++ b/.scratch/ui-consistency/issues/08-campaigns.md
@@ -5,9 +5,9 @@
**Blocked by:** 07
**Acceptance criteria:**
-- [ ] 创建/编辑活动表单统一 FormDrawer
-- [ ] 删除/取消活动 Popconfirm;探索派发等独特交互不变
-- [ ] 空态 Empty、20 行分页阈值
-- [ ] 文件体量显著下降(重复模式收敛到共享件),不强制目标行数
-- [ ] `tsc --noEmit` 通过
+- [x] 创建/编辑活动表单统一 FormDrawer(width 920 保留双栏布局;报告抽屉为只读展示+导出按钮,保留 Drawer)
+- [x] 删除/取消活动 Popconfirm;探索派发等独特交互不变(取消已有 Popconfirm,无删除入口)
+- [x] 空态 Empty、20 行分页阈值(活动表 + 报告子运行表)
+- [x] 文件体量:重复的抽屉页脚模式收敛到 FormDrawer(不强制目标行数)
+- [x] `tsc --noEmit` 通过
- [ ] t480 走查:活动 CRUD + 时间线 + 探索区 + 报告 golden path
diff --git a/frontend/web/src/pages/Campaigns.tsx b/frontend/web/src/pages/Campaigns.tsx
index 0ceee33..8e49662 100644
--- a/frontend/web/src/pages/Campaigns.tsx
+++ b/frontend/web/src/pages/Campaigns.tsx
@@ -11,6 +11,7 @@ import {
RobotOutlined, SwapOutlined, CompassOutlined,
} from '@ant-design/icons'
import { Line, Bar } from '@ant-design/charts'
+import FormDrawer from '../components/FormDrawer'
import PageWrapper from '../components/PageWrapper'
import StatCard from '../components/StatCard'
import {
@@ -698,7 +699,7 @@ export default function CampaignsPage() {
loading={loading}
dataSource={campaigns}
columns={columns}
- pagination={false}
+ pagination={campaigns.length > 20 ? { pageSize: 20, showTotal: (t) => `共 ${t} 个` } : false}
expandable={{
expandedRowKeys: expandedIds,
onExpand: onExpandRow,
@@ -709,20 +710,14 @@ export default function CampaignsPage() {
{/* 创建活动 */}
- setCreateOpen(false)}
+ onSubmit={submitCreate}
+ submitting={submitting}
+ okText="创建并开始调度"
width={920}
- destroyOnClose
- footer={
-
-
-
-
- }
>
-
+
{/* 周期报告 */}
20 ? { pageSize: 20, showTotal: (t) => `共 ${t} 个` } : false}
dataSource={reportRuns}
columns={runColumns}
locale={{ emptyText: }}