Commit Graph
186 Commits
Author SHA1 Message Date
H1d3rOne c8879fc04e feat: 创建自定义金币toast组件
- 添加coin-toast组件,- bazi.vue使用自定义toast
- 金币图标金色,数字金色加粗
2026-03-10 19:59:59 +08:00
H1d3rOne 064606fd0f feat: 使用金币emoji图标显示金币变化
- 测算成功:显示'测算成功 🪙-1'
- 测算失败:显示'测算失败 🪙-0'
- 使用emoji替代文字'金币'
2026-03-10 19:50:04 +08:00
H1d3rOne bd00bd1443 feat: 测算成功/失败时显示金币变化提示
- 测算成功:显示'测算成功,金币-1'
- 测算失败:显示'测算失败,金币-0'
- 修改所有测算模块:八字、紫微、占星、塔罗、奇门、六爻、梅花、大六壬
2026-03-10 18:29:56 +08:00
H1d3rOne e36195279a fix: 老用户登录时不更新用户名和头像
- loginOrRegister方法:老用户直接返回,不更新用户名和头像
- 只有新用户才使用微信传入的用户名和头像
- 保证用户修改后的信息不会被覆盖
2026-03-10 17:52:31 +08:00
H1d3rOne 25036a7761 fix: 退出登录时保留deviceId
- logout时先保存deviceId,清除缓存后恢复
- 确保同一设备退出登录后再次登录不会创建新用户
2026-03-10 17:29:25 +08:00
H1d3rOne 6574279fce fix: 添加deviceId作为登录备选方案
- 后端:微信API失败时使用deviceId作为openId
- 前端:生成并缓存唯一deviceId
- 确保同一设备登录时用户身份一致
2026-03-10 17:00:00 +08:00
H1d3rOne 7b6df6426c fix: 改进登录流程的错误处理和日志
- 添加详细的登录日志输出
- 获取openId失败时返回错误而非创建guest用户
- 避免重复创建用户账号
2026-03-10 16:39:18 +08:00
H1d3rOne f3b084a72f refactor: 始终上传头像到服务器
- 前端始终上传头像到服务器,不再判断是否为临时路径
- 后端移除downloadAvatar方法
- 数据库avatar_url始终存储服务器路径
2026-03-10 07:34:00 +08:00
H1d3rOne 8249514262 fix: 修复微信头像上传到服务器功能
- auth-modal.vue: 登录前先上传微信临时头像到服务器
- uploadAvatar接口支持临时上传(temp参数)
- 数据库avatar_url存储服务器路径而非临时路径
2026-03-10 07:25:24 +08:00
H1d3rOne 2667098632 refactor: 统一变量名为username
- login方法中将nickname变量改名为username
- 保持前端传入参数名不变(nickname)
- 后端统一使用username变量名
2026-03-10 07:20:38 +08:00
H1d3rOne 096c3e544c refactor: 删除nickname字段,统一使用username
- UserInfo实体类删除nickname字段
- UserInfoService.loginOrRegister使用username
- UserController删除nickname相关代码
- 前端所有页面统一使用username
- auth-modal.vue登录时使用username
2026-03-10 07:08:03 +08:00
H1d3rOne 41a959f298 fix: 修复头像和昵称同步更新问题
- mine.vue: 上传头像后正确处理URL
- account.vue: 加载用户信息时同步更新本地存储
- 确保我的页面和账号页面信息实时同步
2026-03-10 06:41:27 +08:00
H1d3rOne 492b337ddd feat: 头像文件存储到服务器
- 登录时自动下载微信头像到服务器
- 手动上传头像保存到服务器
- 数据库存储服务器上的头像路径
- 添加downloadAvatar方法处理头像下载
2026-03-10 06:34:28 +08:00
H1d3rOne 467895a9c0 fix: 修复金币操作时coins为null的问题
- consumeCoins方法处理coins为null的情况
- addCoins方法处理coins为null的情况
- deductCoins方法处理coins为null的情况
2026-03-10 06:02:34 +08:00
H1d3rOne 04882156c4 fix: 修改按钮放在头像内部,修复账号信息同步
- 修改按钮放在头像内部正下方,更小
- 修改用户名时同步更新nickname字段
- account.vue加载时处理头像URL
2026-03-10 05:47:32 +08:00
H1d3rOne 1a48452ccd feat: 添加头像下方修改按钮和头像上传功能
- mine.vue: 头像下方添加灰色修改按钮
- api.js: 添加getBaseUrl方法
- UserController.java: 添加uploadAvatar接口
- WebConfig.java: 配置静态文件服务
- 支持修改用户名和上传头像
2026-03-10 05:28:24 +08:00
H1d3rOne a10be4ca13 feat: 消费金币时保存消费记录
- UserInfoService.consumeCoins方法添加消费记录保存
- 记录包含:用户ID、消费金额、消费类型、描述、关联ID
- 消费详情页面可查看每次测算的金币消耗记录
2026-03-10 05:12:07 +08:00
H1d3rOne 98d63115a4 feat: 修改签到奖励金币数量
- 第1天: +2金币
- 第2天: +3金币
- 第3天: +4金币
- 第4天: +2金币
- 第5天: +2金币
- 第6天: +3金币
- 第7天: +10金币
2026-03-10 05:05:20 +08:00
H1d3rOne 365a01f5e8 feat: 签到中断或超过7天重置为第1天
- 签到中断时重置连续签到天数为1
- 连续签到超过7天时重置为第1天
- 优化签到进度显示逻辑
2026-03-10 04:59:35 +08:00
H1d3rOne df562f9a52 feat: 优化签到进度显示
- 连续签到几天,前几个图标变亮
- 下面的星期几显示对应签到日期的星期
- 添加currentStreak计算属性
2026-03-10 04:53:30 +08:00
H1d3rOne db22cd87a4 fix: 修复邀请好友分享功能
- 使用button组件的open-type=share触发分享
- 移除uni.showShareMenu调用
- 添加button样式重置
2026-03-10 04:46:58 +08:00
H1d3rOne 1f999b2ea8 fix: 修复recordId变量作用域问题
- qimen.vue: 将recordId移到try块外部
- daliuren.vue: 将recordId移到try块外部
- meihua.vue: 将recordId移到try块外部
- liuyao.vue: 将recordId移到try块外部
2026-03-10 04:37:34 +08:00
H1d3rOne fbb155643d fix: 修复记录页面和签到功能
- records.vue: 加载记录时传递userId参数
- coins.vue: 签到后同步金币数据到数据库
2026-03-10 04:30:36 +08:00
H1d3rOne 879eb05052 fix: 测算成功后才保存记录
- 所有测算页面添加测算结果验证
- 测算失败时不保存记录,不消耗金币
- 统一错误处理逻辑
2026-03-10 04:14:55 +08:00
H1d3rOne 4eb434b9ec feat: 注销账号时级联删除用户记录
- 注销账号时删除用户的所有测算记录
- 添加@Transactional注解确保事务一致性
2026-03-10 04:04:47 +08:00
H1d3rOne 9967e5008c fix: 未登录时提示用户先登录
- 在checkCoinsAndConsume中添加登录提示
- 未登录用户点击测算时弹出登录提示框
2026-03-10 03:57:36 +08:00
H1d3rOne 7950a087ed fix: 修复新用户金币默认值为3
- 在@PrePersist中设置coins默认值为3
- 确保新用户注册时获得3个金币
2026-03-10 03:35:56 +08:00
H1d3rOne 1508898cbf fix: 移除所有金币硬编码,改为API操作
- mine.vue: coins默认值改为0
- coins.vue: 添加API调用更新金币
- 新增addCoins API接口用于金币奖励
- 观看视频奖励通过API更新数据库
2026-03-10 03:26:08 +08:00
H1d3rOne f5f214a100 refactor: 金币默认值改为数据库层面设置
- UserInfo实体类coins字段添加默认值DEFAULT 3
- 移除前后端硬编码的金币默认值
- 新增consumeCoins API接口用于金币消耗
- coinUtils.js改为从服务器获取金币数据
- 所有测算页面checkCoinsAndConsume改为异步调用
- VIP用户测算不消耗金币
2026-03-10 03:19:40 +08:00
H1d3rOne b9a4a9150e fix: 修复测算模块金币消耗逻辑
- 修改coinUtils.js默认金币为3
- 所有测算页面添加recordId变量
- 测算成功后才消耗金币和保存记录
- 测算失败不消耗金币
- VIP用户测算不消耗金币
- 金币不足时弹出提示
2026-03-10 03:09:56 +08:00
H1d3rOne a101643de0 fix: 修改新用户默认金币为3个
- 修改UserInfo实体类@PrePersist中coins默认值为3
- 确保新注册用户获得3个金币
2026-03-10 02:42:46 +08:00
H1d3rOne c48517aeac fix: 修改数据库配置为create模式,确保新用户默认3金币
- 修改ddl-auto为create,每次启动重建表
- 修改BASE_URL为localhost进行本地测试
- 确保注销账号后重新登录获得3金币
2026-03-10 02:07:38 +08:00
H1d3rOne 6561e9034b feat: 完善微信授权登录功能
- 新增半屏授权登录窗口,从底部滑出
- 支持微信头像和昵称选择
- 新用户注册默认3个金币
- 新增注销账号功能,从数据库删除用户
- 删除旧的授权登录页面
- 退出登录和注销后跳转首页
- 优化登录交互体验
2026-03-10 01:37:24 +08:00
H1d3rOne 832f282ff9 实现全局点击拦截,未登录时任何点击都弹出提示框
功能实现:
1. 全局点击监听
   - 在App.vue的template最外层view添加@click事件
   - 监听所有点击操作
   - 未登录时立即弹出提示框

2. 智能拦截机制
   - 检查登录状态:使用authCheck.isLoggedIn()
   - 防止重复弹窗:使用isCheckingClick标志
   - 授权窗口打开时不拦截:检查showAuthModal状态

3. 用户交互流程
   - 用户点击屏幕任何位置
   - 未登录状态立即弹出"未登录"提示框
   - 提示框内容:"请先登录后再使用"
   - 点击"去登录":显示授权窗口
   - 点击"取消":关闭提示框

4. 优化体验
   - 已登录用户不受影响
   - 授权窗口打开时不重复拦截
   - 防止连续点击导致多次弹窗

特点:
- 全局统一拦截
- 即时响应
- 用户友好
- 无需在每个页面单独处理
2026-03-09 22:01:35 +08:00
H1d3rOne ea7752f554 优化全局未登录拦截,点击任何地方弹出登录窗口
功能改进:
1. 全局事件监听
   - App.vue添加setupGlobalListeners方法
   - 监听showAuthModal和hideAuthModal事件
   - 在onHide时移除监听器

2. 统一的登录拦截机制
   - authCheck.js使用uni.$emit触发全局事件
   - 点击"去登录"按钮触发showAuthModal事件
   - App.vue接收事件后显示授权窗口

3. 用户体验优化
   - 未登录时点击任何功能都会弹出提示
   - 提示框包含"去登录"按钮
   - 点击"去登录"后从底部滑出授权窗口
   - 授权窗口占据屏幕70%

工作流程:
1. 用户点击功能模块
2. 检查登录状态
3. 未登录弹出提示框
4. 点击"去登录"
5. 触发showAuthModal事件
6. App.vue显示授权窗口
7. 用户完成授权
8. 继续使用功能
2026-03-09 21:56:03 +08:00
H1d3rOne 0d30d40794 实现全局未登录拦截功能,覆盖所有tabBar页面
功能实现:
1. 首页(index.vue)
   - 所有测算功能模块添加登录检查
   - 未登录时弹出提示框
   - 引导用户完成登录

2. 记录页面(records.vue)
   - 页面显示时检查登录状态
   - 未登录时弹出提示框
   - 阻止未登录用户查看记录

3. 工具页面(tools.vue)
   - 所有工具项添加登录检查
   - 未登录时弹出提示框
   - 引导用户完成登录

4. 我的页面(mine.vue)
   - 页面显示时检查登录状态
   - 未登录时弹出提示框
   - 阻止未登录用户查看个人信息

实现方式:
- 导入authCheck工具
- 使用authCheck.requireLogin()检查登录状态
- 使用authCheck.isLoggedIn()判断是否已登录
- 未登录时弹出"未登录,无法使用"提示
- 提示框包含"去登录"按钮

特点:
- 全局统一的登录检查机制
- 友好的用户提示
- 引导用户完成登录流程
- 保护用户隐私和数据安全
2026-03-09 21:50:48 +08:00
H1d3rOne 6790df0f72 优化授权窗口样式和实现全局未登录拦截
问题:
1. 授权窗口只占屏幕一半,显示不够突出
2. 取消登录后点击功能模块没有弹出未登录提示

解决方案:
1. 优化授权窗口样式
   - 高度从auto改为70vh,占据屏幕70%
   - 使用flex布局,内容垂直居中
   - 增加header和content的padding
   - 整体更加美观和突出

2. 实现全局未登录拦截
   - 在首页index.vue中导入authCheck工具
   - 所有功能模块的点击方法添加登录检查
   - 未登录时弹出"未登录,无法使用"提示
   - 提示框包含"去登录"按钮
   - 点击"去登录"触发授权流程

改进:
- 授权窗口更加醒目
- 未登录用户无法使用功能
- 引导用户完成登录
- 提升用户体验
2026-03-09 21:43:33 +08:00
H1d3rOne a537fc0b23 修复chooseAvatar取消错误
问题:
- 用户点击取消选择头像时出现错误
- 错误信息:chooseAvatar:fail cancel

解决方案:
- 添加@error事件处理
- 新增onChooseAvatarError方法
- 区分用户取消和其他错误
- 用户取消时不显示错误提示
- 其他错误显示友好提示

改进:
- 更好的错误处理
- 避免控制台报错
- 提升用户体验
2026-03-09 21:37:44 +08:00
H1d3rOne ad47ee11e6 新增从顶部滑入的授权登录模态窗口组件
功能实现:
1. 模态窗口动画
   - 从顶部平滑滑入效果
   - 使用cubic-bezier缓动函数实现弹性动画
   - 背景遮罩淡入效果
   - 支持点击遮罩关闭

2. 微信授权流程
   - 集成微信chooseAvatar API
   - 点击按钮选择微信头像或从相册选择
   - 选择头像后弹出昵称输入框
   - 自动完成授权登录

3. 用户信息获取
   - 获取微信头像URL
   - 获取用户输入的昵称
   - 调用uni.login获取code
   - 后端生成唯一用户ID

4. 数据处理
   - 本地缓存:userId、userInfo、userCoins、vipLevel、username、userAvatar
   - 后端保存:通过API提交用户信息到数据库
   - 数据同步:确保前后端数据一致

5. 错误处理
   - 授权失败友好提示
   - 用户取消授权确认对话框
   - 网络错误处理
   - 详细日志记录

6. 安全性
   - 使用微信官方API
   - 符合微信开放平台安全规范
   - 不直接暴露敏感信息

7. 用户体验
   - 操作流程简洁直观
   - 状态反馈清晰
   - 授权成功自动关闭模态窗口
   - 支持取消登录操作

组件特点:
- 可复用的模态窗口组件
- 支持v-model双向绑定
- 提供success、cancel、error事件
- 优雅的动画效果
- 完善的错误处理
2026-03-09 17:29:13 +08:00
H1d3rOne d5ea80766f 简化授权登录页面, requires_approval 2026-03-09 17:19:45 +08:00
H1d3rOne 7eb1ae7f52 简化授权登录页面,一键授权获取微信昵称和头像
优化内容:
1. 简化页面布局
   - 移除复杂的步骤引导
   - 采用居中卡片式设计
   - 紫色渐变背景,更加美观

2. 精简交互流程
   - 头像选择:点击头像按钮直接选择
   - 昵称输入:点击输入框自动获取微信昵称
   - 一键授权:填写完成后点击按钮即可

3. 优化视觉效果
   - Logo图标:🔮水晶球
   - 应用名称:玄机排盘
   - 白色卡片配紫色渐变背景
   - 圆形头像带紫色边框

4. 简化代码
   - 移除冗余的提示文字
   - 精简样式代码
   - 优化错误处理逻辑

页面特点:
- 简洁美观的界面设计
- 一键授权的便捷流程
- 良好的用户体验
2026-03-09 17:11:54 +08:00
H1d3rOne e0446bffc8 修复微信小程序代码依赖分析错误
问题原因:
- 微信开发者工具的代码依赖分析功能会过滤无依赖文件
- 新增的auth页面可能被误判为无依赖文件
- 导致页面无法正常加载

解决方案:
1. 修改project.config.json
   - 添加editorSetting配置
   - 设置tabIndent和tabSize

2. 修改manifest.json
   - 添加ignoreDevUnusedFiles: false
   - 添加ignoreUploadUnusedFiles: false
   - 禁用开发者工具过滤无依赖文件功能

3. 确保auth页面正确注册
   - 在pages.json中注册auth页面
   - 设置正确的导航栏样式

解决方法:
- 在微信开发者工具中:设置 → 项目设置 → 取消勾选"过滤无依赖文件"
- 或在配置文件中设置ignoreDevUnusedFiles为false
2026-03-09 17:03:08 +08:00
H1d3rOne a7efc92f2a 修复首次打开小程序未自动跳转授权页面的问题
问题原因:
1. 授权页面pages/auth/auth未在pages.json中注册
2. uni.redirectTo无法跳转到未注册的页面
3. 缺少详细的日志输出

解决方案:
1. 在pages.json中添加授权页面配置
   - 路径:pages/auth/auth
   - 导航栏标题:授权登录
   - 导航栏背景色:#10B981(绿色)
   - 导航栏文字颜色:white

2. 优化App.vue跳转逻辑
   - 使用uni.navigateTo替代uni.redirectTo
   - 添加navigateTo失败后的redirectTo备用方案
   - 添加详细的console.log日志输出
   - 在跳转前设置hasShownAuth标记

3. 增强调试信息
   - 输出用户授权状态检查结果
   - 输出hasUserInfo和hasShownAuth的值
   - 输出跳转成功/失败的详细信息

测试要点:
- 首次打开小程序自动跳转到授权页面
- 授权页面正常显示
- 授权成功后跳转到首页
2026-03-09 16:51:04 +08:00
H1d3rOne 28848d541d 优化真机测试环境下的用户授权流程
问题分析:
1. 微信已废弃自动弹出授权框功能
2. 用户不清楚如何选择头像和昵称
3. 授权流程引导不清晰

解决方案:
1. 优化授权页面布局
   - 分步骤引导:第一步选择头像,第二步输入昵称
   - 添加清晰的步骤标签和提示文字
   - 头像选择后显示"已选择"状态
   - 昵称输入框添加提示文字

2. 增强交互体验
   - 选择头像成功后显示Toast提示
   - 按钮状态根据是否填写完整显示不同样式
   - 未填写完整时按钮半透明不可点击
   - 授权成功后延长Toast显示时间

3. 完善错误处理
   - 添加详细的错误提示信息
   - 区分头像和昵称为空的提示
   - 授权失败时显示具体原因

4. 优化提示说明
   - 更新授权说明内容
   - 说明如何获取微信昵称
   - 说明可以手动输入自定义昵称

测试要点:
- 首次使用自动跳转到授权页面
- 点击头像按钮可选择微信头像或相册图片
- 点击昵称输入框可自动填充微信昵称
- 授权成功后"我的"页面显示头像和昵称
2026-03-09 16:31:37 +08:00
xuan-bot 75d4901476 fix: 添加spring-boot-starter-validation依赖解决编译错误 2026-03-09 16:20:31 +08:00
H1d3rOne 04e858f6cf 后端API全面优化:添加参数验证、全局异常处理和金币增减方法
问题修复:
1. 参数验证问题
   - 创建DTO类:UpdateVipRequest、UpdateCoinsRequest、UpdatePhoneRequest
   - 使用@NotBlank、@NotNull、@Min、@Max、@Pattern注解验证参数
   - 防止NullPointerException和非法参数

2. 全局异常处理
   - 创建GlobalExceptionHandler全局异常处理器
   - 统一处理Exception、MethodArgumentNotValidException等异常
   - 返回友好的错误信息,避免暴露敏感信息
   - 添加日志记录

3. 统一响应格式
   - 创建ApiResponse统一响应类
   - 包含success、data、error、code、timestamp字段
   - 提供success()和error()静态方法

4. 金币增减方法
   - UserInfoService新增addCoins方法(增加金币)
   - UserInfoService新增deductCoins方法(扣除金币)
   - 添加参数验证和余额检查
   - 金币不足时抛出IllegalArgumentException

技术实现:
- 使用Spring @RestControllerAdvice实现全局异常处理
- 使用javax.validation注解进行参数验证
- 使用SLF4J记录日志
- 统一HTTP状态码和业务错误码
2026-03-09 16:00:58 +08:00
H1d3rOne 966d7269ba 完善用户认证与个人信息展示功能
功能实现:
1. 首次使用自动触发授权
   - App.vue onLaunch检查用户登录状态
   - 首次使用自动跳转到授权页面
   - 使用hasShownAuth标记避免重复跳转

2. 头像点击查看大图
   - 点击头像使用uni.previewImage查看大图
   - 编辑图标使用@click.stop阻止冒泡
   - 无头像时显示友好提示

3. 手机号格式优化
   - 手机号显示为138****5678格式
   - 添加formatPhone方法处理格式化
   - 兼容不同长度的手机号

4. 授权取消提示优化
   - 点击"暂不授权"弹出确认对话框
   - 提示用户稍后可在"我的"页面授权
   - 提供"去授权"和"稍后再说"两个选项

技术实现:
- 使用uni.previewImage查看大图
- 使用正则表达式格式化手机号
- 使用uni.showModal优化交互体验
- 完善错误处理和用户提示
2026-03-09 15:44:20 +08:00
H1d3rOne 2af29c604b 修改为微信官方推荐的新方式获取头像和昵称
问题:
- getUserProfile API已被微信废弃
- getUserInfo API无法获取用户信息
- 导致无法获取微信头像和昵称

解决方案:
- 使用button组件的open-type="chooseAvatar"获取头像
- 使用input组件的type="nickname"获取昵称
- 这是微信官方推荐的新方式

前端实现:
- 头像按钮:open-type="chooseAvatar" @chooseavatar事件
- 昵称输入框:type="nickname" 自动填充微信昵称
- 简化登录流程,移除getUserProfile调用
- 使用async/await优化代码结构

功能特点:
- 用户点击头像按钮选择微信头像
- 用户点击昵称输入框自动填充微信昵称
- 支持手动输入昵称
- 更符合微信小程序最新规范
2026-03-09 00:35:48 +08:00
H1d3rOne 7914781263 修复测算时金币未扣除的问题
问题原因:
- 所有测算模块调用consumeCoin()时未传递参数
- consumeCoin方法需要type、description、relatedId参数
- 导致金币扣除失败,消费记录未保存

修复内容:
- 八字测算:consumeCoin('bazi', '八字命理测算', recordId)
- 紫微斗数:consumeCoin('ziwei', '紫微斗数测算')
- 六爻占卜:consumeCoin('liuyao', '六爻占卜测算')
- 梅花易数:consumeCoin('meihua', '梅花易数测算')
- 奇门遁甲:consumeCoin('qimen', '奇门遁甲测算')
- 大六壬:consumeCoin('daliuren', '大六壬测算')
- 塔罗牌:consumeCoin('taluo', '塔罗牌测算')
- 西方占星:consumeCoin('zhanxing', '西方占星测算')

功能特点:
- 每次测算正确扣除1个金币
- 记录消费类型和描述
- 保存消费记录到coin_consume_record表
- 同步更新用户金币数到user_info表
2026-03-09 00:31:34 +08:00
H1d3rOne caac642120 实现微信登录功能,首次使用自动保存用户信息
前端实现:
- 修改auth.vue登录逻辑
- 使用getUserProfile获取微信用户信息
- 获取用户昵称和头像URL
- 调用uni.login获取code
- 将code和用户信息发送到后端
- 登录成功后保存完整用户信息到本地

后端实现:
- 修改UserController登录接口
- 接收code参数而不是openId
- 调用微信API jscode2session获取openId
- 使用RestTemplate调用微信接口
- 支持配置微信appid和secret
- 首次登录自动创建用户并保存到数据库

配置文件:
- application.properties新增微信配置项
- wechat.appid: 微信小程序AppID
- wechat.secret: 微信小程序AppSecret

功能特点:
- 首次使用小程序自动获取微信用户信息
- 用户信息保存到user_info表
- 支持游客模式(未配置微信参数时)
- 完整的错误处理和日志记录
2026-03-09 00:10:45 +08:00