- Change "结果展示" to "投票结果" in global controls
- Add program edit modal with name, team, performer, remark fields
- Add move up/down buttons for program reordering
- Add delete program with confirmation
- Add "添加节目" button for creating new programs
- Add responsive styles for mobile view
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add OnboardingTour component with step-by-step guidance
- Add useOnboarding composable for state management
- Reset onboarding on logout for re-viewing
- 4 steps: welcome, award selection, program voting, progress
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Left: username + logout button (stacked)
- Center: page title
- Right: larger progress ring (56px)
- Remove connection status (shown in WeChat navbar)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move username to top-left position
- Center the page title
- Move logout button to bottom-left
- Show connection status with latency on top-right
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Program and Award tables to Prisma schema
- Update program-config.service to support database with JSON fallback
- Update ProgramCard.vue display logic for dynamic teamName/performer
- Add seed script to import data from JSON config
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add wechat-mp.service.ts for MP web authorization
- Add wechat-mp.routes.ts with /api/mp endpoints
- Update EntryQRCode.vue to show H5 URL QR code
- Update HomeView.vue with WeChat auth detection
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- README.md: update scan login section to reflect WeChat OAuth flow
- DEPLOY.md: add WeChat environment variables configuration
- 联调测试方案.md: update test case A01 for new login flow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update mobile HomeView to show WeChat scan login instructions
- Remove manual name/department input form from mobile client
- Add firework particle effects to big screen background
- Remove department field from login flow types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Changes
### Docker Compose Configuration
- Add WECHAT_APP_ID environment variable to server service
- Add WECHAT_APP_SECRET environment variable to server service
- Add WECHAT_REDIRECT_URI environment variable to server service
## Purpose
Enable WeChat Open Platform QR code login functionality by passing
WeChat credentials from .env file to the server container.
## Testing
- All containers started successfully
- Server loaded configuration correctly
- WeChat login endpoints are now available
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add WeChat service for OAuth2 authentication flow
- Add WeChat routes (/api/wechat/login, /api/wechat/callback)
- Add WeChat types for login state and responses
- Update EntryQRCode component to support WeChat login
- Add WeChat config options (appId, appSecret, redirectUri)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Changes
### Program Configuration
- Update programs.json with actual program names:
- 节目一:青苹果乐园
- 节目二:五百年桑田沧海
- 节目三:我的中国心
- 节目四:萍聚
- 节目五:追光而行,共赴新程
- 节目六:粉红色的回忆
- 节目七:敬业狂想曲
### Dockerfile Update
- Add config directory copy to Dockerfile
- Ensure program configuration is included in production build
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
## Changes
### Database Integration
- Add MySQL 8.0 service to docker-compose.yml
- Configure DATABASE_URL environment variable for server
- Add health check for MySQL service
- Create mysql_data volume for data persistence
### Dockerfile Improvements
- Generate Prisma Client in builder stage
- Copy Prisma Client from correct pnpm workspace location
- Ensure Prisma Client is available in production container
### Client-Mobile Fixes
- Remove deprecated StampDock.vue component
- Fix voting store API usage in VotingPage.vue
- Add type assertion for userTickets in connection.ts
- Add remark property to AwardConfig interface in voting.ts
## Testing
- All containers start successfully
- Database connection established
- Redis connection working
- 94 participants restored from Redis
- Vote data synced (20 votes)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add emit('stateChange') to notify frontend clients when
lottery round is redrawn, so UI updates correctly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Convert stats-section to collapsible details element
- Add expand/collapse indicator (▶/▼)
- Save screen space on mobile devices
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add redrawCurrentRound() method to clear current round winners
- Add /api/admin/lottery/redraw API endpoint
- Rename "重置" to "重置本轮" (reset current round state only)
- Add "重抽本轮" button (clear winners and allow re-draw)
- Rename "紧急操作" to "数据管理" with clearer button labels
- Change "高级清理" to collapsible "开发者选项"
- Update confirmation modal text for clarity
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The default configuration was missing poolTag for all rounds,
causing the lottery to draw from all participants instead of
filtering by generation/zodiac tags when prizes.json fails to load.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Caddyfile with automatic HTTPS configuration
- Add Dockerfile.caddy for frontend build with Caddy
- Update docker-compose.yml to use Caddy service
- Update DEPLOY.md with simplified deployment instructions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>