feat: 新增邀请翻牌验证及相关文案与界面调整
- CardFlipManager:注入 InviteCodeManager,新增对 Invite 类型翻牌的邀请校验(未使用邀请码则抛出异常),防止未被邀请的用户使用邀请类型翻牌。 - CardFlipService:调整提示文案,统一使用“本周”前缀,并在邀请解锁提示中强调必定中奖且每次中奖最大额度翻倍。 - 前端: - CardFlipActivity.vue:注释掉翻牌失败的全局提示,调整统计文案为“本周已翻/本周剩余/本周邀请”,并在邀请弹窗文案中说明必定中奖且奖励翻倍。 - Avatar.vue:更新菜单项标签为“每日任务(限时)”和“每周邀请(限时)”。
This commit is contained in:
@@ -241,16 +241,16 @@ public class CardFlipService : ApplicationService, ICardFlipService
|
||||
|
||||
if (status.RemainingFreeFlips > 0)
|
||||
{
|
||||
return $"还有{status.RemainingFreeFlips}次免费翻牌机会";
|
||||
return $"本周您还有{status.RemainingFreeFlips}次免费翻牌机会";
|
||||
}
|
||||
else if (status.RemainingInviteFlips > 0)
|
||||
{
|
||||
if (status.TotalFlips >= 7)
|
||||
{
|
||||
return $"使用邀请码可解锁{status.RemainingInviteFlips}次翻牌,必中大奖!";
|
||||
return $"本周使用他人邀请码可解锁{status.RemainingInviteFlips}次翻牌,且必中大奖!每次中奖最大额度将翻倍!";
|
||||
}
|
||||
|
||||
return $"使用邀请码可解锁{status.RemainingInviteFlips}次翻牌";
|
||||
return $"本周使用他人邀请码可解锁{status.RemainingInviteFlips}次翻牌,必中大奖!每次中奖最大额度将翻倍!";
|
||||
}
|
||||
|
||||
return "继续加油!";
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace Yi.Framework.AiHub.Domain.Managers;
|
||||
public class CardFlipManager : DomainService
|
||||
{
|
||||
private readonly ISqlSugarRepository<CardFlipTaskAggregateRoot> _cardFlipTaskRepository;
|
||||
private readonly InviteCodeManager _inviteCodeManager;
|
||||
private readonly ILogger<CardFlipManager> _logger;
|
||||
|
||||
// 翻牌规则配置
|
||||
@@ -32,9 +33,11 @@ public class CardFlipManager : DomainService
|
||||
|
||||
public CardFlipManager(
|
||||
ISqlSugarRepository<CardFlipTaskAggregateRoot> cardFlipTaskRepository,
|
||||
InviteCodeManager inviteCodeManager,
|
||||
ILogger<CardFlipManager> logger)
|
||||
{
|
||||
_cardFlipTaskRepository = cardFlipTaskRepository;
|
||||
_inviteCodeManager = inviteCodeManager;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -107,6 +110,16 @@ public class CardFlipManager : DomainService
|
||||
throw new UserFriendlyException(GetFlipTypeErrorMessage(flipType));
|
||||
}
|
||||
|
||||
// 如果是邀请类型翻牌,必须验证用户已使用过邀请码
|
||||
if (flipType == FlipType.Invite)
|
||||
{
|
||||
var isInvited = await _inviteCodeManager.IsUserInvitedAsync(userId);
|
||||
if (!isInvited)
|
||||
{
|
||||
throw new UserFriendlyException("需要使用他人邀请码才能解锁更多翻牌次数");
|
||||
}
|
||||
}
|
||||
|
||||
// 计算翻牌结果(基于当前是第几次翻牌,而不是卡片序号)
|
||||
var flipCount = task.TotalFlips + 1; // 当前这次翻牌是第几次
|
||||
var result = CalculateFlipResult(flipCount);
|
||||
|
||||
@@ -128,7 +128,7 @@ async function handleFlipCard(record: CardFlipRecord) {
|
||||
}
|
||||
}
|
||||
catch (error: any) {
|
||||
ElMessage.error(error?.message || '翻牌失败');
|
||||
// ElMessage.error(error?.message || '翻牌失败');
|
||||
// 如果请求失败,移除翻牌动画
|
||||
flippingCards.value.delete(record.flipNumber);
|
||||
}
|
||||
@@ -341,7 +341,7 @@ function toggleInviteSection() {
|
||||
{{ taskData?.totalFlips || 0 }}/10
|
||||
</div>
|
||||
<div class="stat-label">
|
||||
已翻
|
||||
本周已翻
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -355,7 +355,7 @@ function toggleInviteSection() {
|
||||
{{ taskData ? 10 - taskData.totalFlips : 10 }}
|
||||
</div>
|
||||
<div class="stat-label">
|
||||
剩余
|
||||
本周剩余
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -369,7 +369,7 @@ function toggleInviteSection() {
|
||||
{{ taskData?.invitedCount || 0 }}
|
||||
</div>
|
||||
<div class="stat-label">
|
||||
邀请
|
||||
本周邀请
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -455,7 +455,7 @@ function toggleInviteSection() {
|
||||
>
|
||||
<div class="invite-dialog-content">
|
||||
<p class="dialog-tip">
|
||||
请输入好友的邀请码,解锁最后3次翻牌机会
|
||||
请输入好友的邀请码,可解锁最后3次翻牌机会,必定中奖每次奖励最大额度翻倍!
|
||||
</p>
|
||||
<el-input
|
||||
v-model="inputInviteCode"
|
||||
|
||||
@@ -72,8 +72,8 @@ const navItems = [
|
||||
{ name: 'rechargeLog', label: '充值记录', icon: 'Document' },
|
||||
{ name: 'usageStatistics', label: '用量统计', icon: 'Histogram' },
|
||||
{ name: 'premiumService', label: '尊享服务', icon: 'ColdDrink' },
|
||||
{ name: 'dailyTask', label: '每日任务', icon: 'Trophy' },
|
||||
{ name: 'cardFlip', label: '翻牌活动', icon: 'Present' }
|
||||
{ name: 'dailyTask', label: '每日任务(限时)', icon: 'Trophy' },
|
||||
{ name: 'cardFlip', label: '每周邀请(限时)', icon: 'Present' }
|
||||
// { name: 'usageStatistics2', label: '用量统计2', icon: 'Histogram' },
|
||||
];
|
||||
function openDialog() {
|
||||
|
||||
Reference in New Issue
Block a user