feat: 新增翻牌顺序追踪并重构翻牌/邀请码逻辑到 Manager,更新前端

- 在 CardFlipStatusOutput 与前端 types 添加 FlipOrderIndex 字段以记录牌在翻牌顺序中的位置
- 在域实体 CardFlipTaskAggregateRoot 增加 FlippedOrder(Json 列)以保存用户实际翻牌顺序
- 将 CardFlipService 重构为调用 CardFlipManager 与 InviteCodeManager,移除大量内聚的业务实现与常量(职责下沉到 Manager)
- 调整翻牌、使用邀请码和查询相关流程为 Manager 驱动,更新返回结构与提示文本
- 更新前端 CardFlipActivity 组件与 types,允许任意未翻的卡片被点击并显示翻牌顺序位置
- 若干文案、格式与日志细节修正
This commit is contained in:
chenchun
2025-10-27 21:57:26 +08:00
parent aec90ec9d6
commit a1395d9a33
9 changed files with 633 additions and 375 deletions

View File

@@ -19,6 +19,7 @@ export interface CardFlipRecord {
isWin: boolean; // 是否中奖
rewardAmount?: number; // 奖励金额token数
flipTypeDesc?: string; // 翻牌类型描述
flipOrderIndex: number; // 在翻牌顺序中的位置1-10表示第几个翻
}
// 翻牌输入

View File

@@ -35,7 +35,10 @@ async function fetchTaskStatus() {
// 翻牌
async function handleFlipCard(record: CardFlipRecord) {
if (!record.isFlipped && record.flipNumber === (taskData.value?.totalFlips || 0) + 1) {
// 检查是否可以翻牌(任何未翻过的牌都可以)
const canFlip = !record.isFlipped && (taskData.value?.canFlip || false);
if (canFlip) {
// 检查是否需要使用邀请码
if (record.flipNumber > 8 && (taskData.value?.remainingInviteFlips || 0) > 0) {
const usedInviteFlips = 2 - (taskData.value?.remainingInviteFlips || 2);
@@ -195,8 +198,8 @@ function getCardClass(record: CardFlipRecord): string[] {
classes.push('card-flipping');
}
// 可点击的卡片
if (!record.isFlipped && record.flipNumber === (taskData.value?.totalFlips || 0) + 1) {
// 可点击的卡片(任何未翻过的牌都可以点击)
if (!record.isFlipped && (taskData.value?.canFlip || false)) {
classes.push('card-clickable');
} else if (!record.isFlipped) {
classes.push('card-locked');