AI 聊天与积分充值系统
创建于 2025 年 9 月 19 日
核心功能
积分中心首页。 src/views/index.vue 将若依默认的框架介绍页整体替换为 <PointsCenter />:顶部是用户信息卡(头像、昵称、脱敏 ID、当前积分、累计积分、按等级配色的 el-progress 进度条与升级引导),中部三行功能模块卡片——任务列表 / 积分兑换 / 积分明细、会员权限 / 积分充值 / AI 聊天、快速充值(10 元起充)/ 立即对话 / 我的信息,点击卡片通过 this.$router.push('/index?page=xxx') 在 SPA 内切换子页面,无需新增路由表。页面还内置了”我的信息”弹窗与”积分不足一键跳转充值”的联动引导。
每日登录自动送积分。 这是对若依登录链路的侵入式扩展,代码写在 SysLoginService.login 成功路径的末尾:
// 更新登录 IP / 时间后
handleDailyLoginReward(userId);
private void handleDailyLoginReward(Long userId) {
// 当天已领过则直接返回,保证幂等
if (pointsRecordService.checkTodayLoginReward(userId)) {
return;
}
int rewardPoints = 10;
int currentPoints = user.getPoints() != null ? user.getPoints() : 0;
int totalPoints = user.getTotalPoints() != null ? user.getTotalPoints() : 0;
// 更新当前积分与累计积分
user.setPoints(currentPoints + rewardPoints);
user.setTotalPoints(totalPoints + rewardPoints);
// 同步重算会员等级
String newLevel = calculateMemberLevel(user.getTotalPoints());
user.setMemberLevel(newLevel);
userService.updateUser(user);
// 落流水:task 类型,变动前后余额快照
pointsRecordService.addPointsRecord(userId, rewardPoints, "task",
"完成每日登录任务,获得积分", beforePoints, user.getPoints());
}
积分兑换 AI 服务。 exchange.vue 从 /system/points/goods 拉取”文生图 100 分 / 图生图 150 分 / AI 对话半小时 200 分”三档商品,支持多选并实时汇总总价;前端先校验余额,不足时弹”积分不足,是否前往充值?“确认框跳充值页。后端 purchase 对 goodsIds 用 switch 重新计算总价(二次校验防篡改),余额不足直接返回错误,扣减后调用 recordPointsChange 落 exchange 流水,前端购买成功提示 1.5 秒后自动 goToChat 跳入聊天页——“消费 → 服务”的转化路径非常顺滑。
三模式 AI 聊天页。 chat.vue 是 967 行的重头页面,深色渐变底(#667eea → #764ba2)配顶部毛玻璃导航,顶部实时显示”剩余积分”。底部功能选择器可切换智能对话 / 文本创作 / 图片生成三种模式,输入框支持 Ctrl+Enter 发送与图片上传(FileReader 转 Base64,before-upload 返回 false 阻止自动上传)。发送时统一调 POST /system/points/chat,后端按 functionType 分流:image 模式走 generateImagePrompt 生成图片描述提示词,writing 模式给消息包一层”请提供高质量、结构清晰的文本内容,包括引言、主体和结论”的创作提示,其余走 chatWithAI 直连 DeepSeek。异常链路做了多级兜底:网络超时返回”网络连接超时”、401 返回”API 密钥验证失败”、429 返回”请求过于频繁”,generateImagePrompt 失败还有按”风景/人物/建筑/动物”关键词本地拼装的降级提示词,前端再兜一层”AI 服务暂时不可用”的降级回复;/ai/status 接口可用一句话测试连接是否正常。
积分明细与会员体系。 detail.vue 拉取 /system/points/records 以时间倒序渲染流水表格(变动分值、类型、原因、变动前后余额、时间),无真实数据时后端补三条示例记录。member.vue 展示七级会员阶梯:每个等级卡片带积分区间、升级所需积分与”当前等级”高亮,等级颜色(青铜 #CD7F32、白银 #C0C0C0、黄金 #FFD700、白金 #E5E4E2、钻石 #B9F2FF)贯穿首页进度条、充值页与会员页三处 UI。
功能截图
暂无运行截图。