# ActivityRankingModal 实现计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 创建 `ActivityRankingModal.vue` 弹窗组件,从 `ThemeBanner` 点击触发,显示单活动的排名数据
**Architecture:** 复用 `RankingModal.vue` 的现有样式主题和数据转换逻辑,创建专用于活动排名的简化弹窗组件
**Tech Stack:** Vue 3 Composition API, uni-app, 复用现有 RankingModal/TOP3Card/RankingListItem 组件
---
## 文件结构
```
frontend/pages/support-activity/
├── components/
│ ├── ActivityRankingModal.vue ← 新建
│ ├── ThemeBanner.vue ← 修改:添加点击事件触发弹窗
│ ├── TOP3Card.vue ← 复用(来自 pages/components/)
│ └── RankingListItem.vue ← 复用(来自 pages/components/)
└── index.vue ← 修改:引入并使用 ActivityRankingModal
frontend/utils/api.js ← 无需修改(getActivityRankingApi 已存在)
docs/superpowers/specs/2026-05-14-activity-ranking-modal-design.md ← 已存在
```
---
## 任务分解
### Task 1: 创建 ActivityRankingModal.vue 组件
**文件:**
- 创建: `frontend/pages/support-activity/components/ActivityRankingModal.vue`
- [ ] **Step 1: 创建基础模板和样式结构**
```vue
加载中...
{{ errorMessage }}
暂无排名数据
加载中...
{{ formatPopularityScore(currentUserInfo.popularityScore) }}
{{ formatCurrentUserRank(currentUserInfo.rank) }}
```
- [ ] **Step 2: 实现 script 部分**
```vue
```
- [ ] **Step 3: 添加样式**
```vue
```
---
### Task 2: 修改 ThemeBanner.vue 添加点击事件
**文件:**
- 修改: `frontend/pages/support-activity/components/ThemeBanner.vue:1-36`(template 部分)
- [ ] **Step 1: 在 banner-content 上添加点击事件**
在 `` 上添加 `@tap="handleBannerClick"`
- [ ] **Step 2: 添加 emit 定义**
在 script 部分添加:
```javascript
const emit = defineEmits(['tap'])
// 添加点击处理函数
const handleBannerClick = () => {
emit('tap')
}
```
---
### Task 3: 修改 support-activity/index.vue 引入和使用组件
**文件:**
- 修改: `frontend/pages/support-activity/index.vue:14-21`(template)
- 修改: `frontend/pages/support-activity/index.vue:105-122`(script import)
- [ ] **Step 1: 引入 ActivityRankingModal**
```javascript
import ActivityRankingModal from './components/ActivityRankingModal.vue'
```
- [ ] **Step 2: 添加弹窗状态和引用**
```javascript
const rankingModalVisible = ref(false)
const currentActivityTitle = ref('')
```
- [ ] **Step 3: 在 template 中添加组件**
```vue
```
- [ ] **Step 4: 添加打开弹窗方法**
```javascript
const openRankingModal = () => {
currentActivityTitle.value = config.value?.title || '活动排名'
rankingModalVisible.value = true
}
```
---
### Task 4: 提交代码
- [ ] **Step 1: 提交所有更改**
```bash
git add frontend/pages/support-activity/components/ActivityRankingModal.vue \
frontend/pages/support-activity/components/ThemeBanner.vue \
frontend/pages/support-activity/index.vue
git commit -m "feat: 添加 ActivityRankingModal 活动榜单弹窗组件"
```
---
## 验证步骤
1. 启动开发服务器:`cd frontend && npm run dev`
2. 进入活动页面,点击 ThemeBanner 区域
3. 验证弹窗正常显示TOP3和排名列表
4. 验证下拉刷新和滚动加载更多功能
5. 验证当前用户栏正确显示
---
## 依赖项
- `TOP3Card.vue` - 来自 `frontend/pages/components/TOP3Card.vue`
- `RankingListItem.vue` - 来自 `frontend/pages/components/RankingListItem.vue`
- `getActivityRankingApi` - 来自 `frontend/utils/api.js`