Commit Graph
143 Commits
Author SHA1 Message Date
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
H1d3rOne 5c8fcce387 实现用户信息修改同步到数据库功能
后端实现:
- UserInfoService新增updateUsername和updateAvatarUrl方法
- UserController新增/updateUsername和/updateAvatar接口
- 支持修改用户名和头像URL
- 数据同步保存到user_info表

前端实现:
- api.js新增updateUsername和updateAvatar方法
- “我的”页面editUsername方法改为调用后端API
- 修改成功后同步更新本地缓存
- 错误处理更友好

功能特点:
- 修改用户名实时同步到数据库
- 更新本地缓存确保数据一致性
- “我的账号”页面自动加载最新用户信息
- 所有页面数据来源统一
2026-03-08 23:17:41 +08:00
H1d3rOne aa0e7403d6 我的页面数据与数据库同步,保持一致性
问题:
- “我的”页面用户数据从本地存储获取
- 与“我的账号”页面数据来源不一致
- 可能导致数据不同步

解决方案:
- 修改mine.vue页面
- loadUserData方法改为从后端API获取数据
- 新增loadLocalData方法作为备用
- 数据来源与account.vue保持一致

功能特点:
- 页面显示时从后端获取最新用户数据
- 数据与user_info表保持同步
- 更新本地缓存确保一致性
- 错误时使用本地数据兜底
- 优化判断条件,避免0值被误判

数据字段:
- coins: 金币数
- vipLevel: VIP等级
- username: 用户名
- avatar: 头像URL
- userId: 用户ID
2026-03-08 23:06:18 +08:00
H1d3rOne a4496effae 我的账号页面数据与数据库同步,前后端API联调
后端实现:
- UserController已有/user/info接口,返回用户完整信息
- 包含userId、username、nickname、phone、avatarUrl等字段
- 数据与user_info表对应

前端实现:
- 修改account.vue页面
- loadUserInfo方法改为从后端API获取数据
- 添加更多用户字段:nickname、vipLevel、coins、streakDays
- 绑定手机号后同步更新本地存储
- 优化用户名显示逻辑:优先username,其次nickname

API优化:
- api.js新增userApi.getInfo方法
- 与getUserInfo方法功能相同

功能特点:
- 页面显示时从后端获取最新用户数据
- 数据与数据库保持同步
- 绑定手机号后更新本地缓存
- 错误处理更友好
2026-03-08 22:52:18 +08:00
H1d3rOne 52131ca4a5 修复我的账号页面排版问题,添加完整样式
问题:
- 我的账号页面缺少样式,排版混乱
- 用户信息卡片没有样式
- 菜单项排版不美观

解决方案:
- 添加完整的页面样式
- 用户信息卡片:绿色渐变背景,圆角设计
- 头像:圆形,带白色边框
- 菜单项:白色背景,圆角卡片设计
- 图标:渐变背景,区分普通/警告/危险类型
- 文字:不同颜色区分功能类型
- 添加阴影和边框效果

样式特点:
- 绿色主题渐变背景
- 卡片式布局,圆角设计
- 图标背景渐变效果
- 警告项黄色,危险项红色
- 整体风格统一美观
2026-03-08 22:45:29 +08:00
H1d3rOne cb769b338e 修复消费详情页面路径错误
- 在pages.json中添加消费详情页面配置
- 页面路径:pages/mine/consume-details
- 设置金黄色导航栏样式
- 修复页面未找到的错误
2026-03-08 22:18:38 +08:00
H1d3rOne 14b209bf85 新增消费详情功能,记录金币使用明细
后端实现:
- 新增CoinConsumeRecord实体类,记录消费明细
- 新增CoinConsumeRecordRepository和CoinConsumeRecordService
- 新增CoinConsumeController,提供消费记录API
- 支持分页查询和按类型查询

前端实现:
- 新增消费详情页面consume-details.vue
- 显示累计消费和消费次数统计
- 展示消费记录列表,包含类型、描述、时间、金额
- 支持分页加载

功能集成:
- 在“我的”页面“金币任务”下方添加“消费详情”入口
- 修改coinUtils.js,consumeCoin方法增加参数
- 金币消耗时自动记录消费明细
- 记录消费类型、描述、关联ID等信息

API接口:
- POST /api/coin-consume/save - 保存消费记录
- GET /api/coin-consume/list - 分页查询消费记录
- GET /api/coin-consume/all - 查询所有消费记录
- GET /api/coin-consume/type - 按类型查询消费记录
2026-03-08 22:12:49 +08:00
H1d3rOne 1d76df3ead 修复金币用完后重置为10的问题
问题原因:
- coinUtils.js中使用 if (!coins) 判断金币是否存在
- 当金币为0时,0被当作falsy值,导致重新设置为10
- 用户金币用完后会自动重置,无法真正耗尽

解决方案:
- 修改判断条件为 if (coins === null || coins === undefined || coins === '')
- 只有当金币未初始化时才设置为初始值10
- 0金币不会被误判为未初始化状态
- 首次初始化时保存到storage

优化内容:
- 金币不足时提示更友好,引导用户获取金币
- 修复代码缩进格式
- 确保金币消耗逻辑正确
2026-03-08 22:04:54 +08:00
H1d3rOne a0dc5d4602 修复删除选中功能的类型转换问题
问题原因:
- 后端deleteBatch方法直接强制类型转换导致错误
- 前端传递的ID数组可能是Integer或Long类型
- 后端接收时类型不匹配

解决方案:
- 优化deleteBatch方法的类型转换逻辑
- 支持多种ID类型(Number、String、Object)
- 添加空列表检查和错误处理
- 新增ArrayList导入

修复内容:
- 使用List<?>接收ID列表
- 遍历列表进行安全的类型转换
- 支持Number、String等多种类型
- 添加空列表验证
2026-03-08 21:55:44 +08:00
H1d3rOne 9845f0f369 记录页面优化:修复删除选中功能和添加搜索清除按钮
功能修复:
- 修复删除选中功能的报错问题
- 确保批量删除功能正常运行

功能新增:
- 搜索输入框添加清除按钮(×)
- 点击清除按钮清空搜索关键词并刷新列表
- 清除按钮仅在有关键词时显示

UI优化:
- 清除按钮采用圆形设计,蓝色半透明背景
- 输入框右侧预留清除按钮空间
- 优化搜索交互体验
2026-03-08 21:45:23 +08:00
H1d3rOne 85da52ffb9 修复测算记录重复保存问题
问题分析:
- 用户测算一次可能产生多条重复记录
- 原因:没有去重机制,每次调用保存接口都创建新记录

解决方案:
- 后端添加去重逻辑:DeductRecordService.saveRecord()
- 根据userId + type + inputData判断是否已存在相同记录
- 如果存在则更新记录,不存在则创建新记录
- 新增Repository方法:findByUserIdAndTypeAndInputData()

去重机制:
- 相同用户、相同测算类型、相同输入数据视为重复
- 重复记录只更新结果数据和AI分析
- 避免数据库中产生大量重复记录
2026-03-08 21:27:44 +08:00
H1d3rOne f48eae3332 去掉记录页每条记录的删除按钮
- 移除每条记录项上的删除按钮
- 保留箭头指示符,优化界面简洁性
- 删除功能统一通过管理模式的批量操作实现
2026-03-08 21:19:25 +08:00
H1d3rOne bc3bf1a85c 记录页面添加管理按钮,优化编辑模式交互
功能改进:
- 新增管理按钮:点击管理按钮进入编辑模式
- 编辑模式切换:管理/取消按钮切换
- 条件显示:全选、复选框、一键清空仅在编辑模式下显示
- 优化交互:编辑模式下点击记录项选中/取消选中
- 隐藏删除按钮:编辑模式下隐藏单条删除按钮
- 自动清理:退出编辑模式时自动清空选中项

UI优化:
- 管理按钮样式:白底蓝边框,与搜索按钮区分
- 按钮布局:搜索栏三按钮并排,间距合理
- 状态提示:按钮文字动态切换(管理/取消)
2026-03-08 20:55:13 +08:00
H1d3rOne 6d80277220 记录页面优化:添加管理按钮和模式切换
功能改进:
- 新增管理按钮,点击进入管理模式
- 管理模式下显示全选、复选框和一键清空
- 非管理模式隐藏管理功能,界面更简洁
- 点击记录卡片:管理模式下选中/取消,普通模式下查看详情
- 取消管理时自动清空已选择的记录

UI优化:
- 管理按钮样式:白底蓝边框,与搜索按钮区分
- 管理模式下隐藏删除按钮和箭头,避免误操作
- 复选框仅在管理模式下显示
2026-03-08 20:50:37 +08:00
H1d3rOne 16624fa189 记录页面添加分页、搜索、全选和一键清理功能
后端实现:
- RecordController:添加分页和搜索参数支持
- DeductRecordService:新增findByUserIdWithSearch方法
- DeductRecordRepository:添加分页查询和关键词搜索方法
- 新增deleteBatch批量删除接口

前端实现:
- 搜索栏:支持按姓名或事项搜索
- 分页功能:上一页/下一页按钮,显示页码信息
- 全选功能:复选框全选/取消全选
- 批量删除:选中多条记录后可批量删除
- 一键清空:清空所有测算记录
- UI优化:添加操作栏、复选框样式

API接口:
- GET /api/records/list - 支持分页和搜索参数
- POST /api/records/deleteBatch - 批量删除记录
- POST /api/records/clear - 清空所有记录
2026-03-08 20:43:14 +08:00
H1d3rOne 03535c831f 实现所有模块分享功能的前后端API联调
后端实现:
- 新增ShareController控制器
- 提供8个模块的分享API接口(八字、紫微、占星、塔罗、梅花、六爻、奇门、大六壬)
- 每个接口生成格式化的分享文本内容

前端实现:
- 更新api.js,新增各模块分享API调用方法
- 占星术结果页改为调用后端API
- 添加loading提示和错误处理
- 分享内容通过后端生成,确保格式统一

API接口:
- POST /api/share/bazi - 八字分享
- POST /api/share/ziwei - 紫微斗数分享
- POST /api/share/zhanxing - 占星术分享
- POST /api/share/taluo - 塔罗牌分享
- POST /api/share/meihua - 梅花易数分享
- POST /api/share/liuyao - 六爻分享
- POST /api/share/qimen - 奇门遁甲分享
- POST /api/share/daliuren - 大六壬分享
2026-03-08 20:06:50 +08:00
H1d3rOne 5dd2c1ac90 为占星术、塔罗牌、梅花易数结果页添加分享功能
- 占星术结果页:添加分享功能,包含星座信息和命理解读
- 塔罗牌结果页:添加分享功能,包含抽牌结果和综合解读
- 梅花易数结果页:添加分享功能,包含卦象信息和卦辞
- 所有分享按钮固定在页面底部,样式统一
- 添加渐变背景和阴影效果
- 优化页面底部padding,避免内容被遮挡
- 分享内容自动复制到剪贴板
2026-03-08 19:52:12 +08:00
H1d3rOne 869ffb58c6 紫微斗数结果页分享功能样式优化
- 参考八字结果页的分享功能样式
- 分享按钮固定在页面底部
- 添加渐变背景和阴影效果
- 优化页面底部padding,避免内容被遮挡
2026-03-08 19:23:08 +08:00
H1d3rOne 24eab9cb67 feat: 首页顶部固定效果
- 实现首页顶部标题区域固定定位
- 向下滑动时顶部保持不动
- 添加渐变背景优化视觉效果
- 调整内容区域padding适配固定头部
2026-03-08 10:29:13 +08:00
H1d3rOne b39a14ae71 feat: 优化测算模块功能和UI
- 统一梅花易数结果页色系为绿色系
- 统一奇门遁甲和大六壬结果页公历显示格式(不显示秒)
- 添加测算记录保存功能到所有测算模块
- 优化记录删除功能,添加详细调试日志
- 后端添加不显示秒的公历格式方法
2026-03-08 10:15:56 +08:00
H1d3rOne b1ba066267 feat: 所有测算模块添加金币消耗功能,每次测算消耗1金币 2026-03-08 10:07:27 +08:00
H1d3rOne d6d86c4401 fix: 梅花易数结果页改为绿色系,与meihua.vue保持一致 2026-03-08 09:49:06 +08:00
H1d3rOne 6a9e508d66 fix: 统一梅花易数结果页header色系 2026-03-08 09:43:37 +08:00
H1d3rOne 6ac2220099 refactor: 梅花易数结果页使用独立命名和统一色系
- 将liuYaoData改为yaoData(避免和六爻混淆)
- 将'六爻详盘'改为'爻象详盘'
- 将所有liuyao-开头的样式类改为yao-开头
- 统一所有元素使用粉紫色主题(#f093fb)
- 所有卡片背景、圆角、阴影保持一致
- 所有强调色统一使用#f093fb
- 提升代码可读性和维护性
2026-03-08 09:37:20 +08:00
H1d3rOne 43721c0859 feat: 统一梅花易数结果页色系
- 使用粉紫色渐变主题(#f093fb 到 #f5576c)
- 统一所有卡片背景为半透明白色
- 统一所有强调色为粉紫色(#f093fb)
- 统一所有卡片圆角和阴影效果
- 添加公历时间格式化(只显示到分钟)
- 添加数组安全检查
- 优化整体视觉效果,提升用户体验
2026-03-08 09:31:54 +08:00
H1d3rOne b9ea8335d6 fix: 修复六爻结果页数组访问错误
- 添加数组类型检查
- 添加数组元素访问的安全检查
- 防止访问undefined数组的元素时报错
2026-03-08 09:24:56 +08:00
H1d3rOne d4c54ecbe5 fix: 添加梅花易数API接口
- 在api.js中添加meihuaApi
- 支持梅花易数排盘API调用
- 修复梅花易数模块点击测算报错问题
2026-03-08 09:21:33 +08:00
H1d3rOne 3d091a89d7 fix: 六爻结果页公历时间只显示到分钟
- 参考紫微斗数结果页的实现
- 使用formatSolarTime计算属性格式化公历时间
- 支持多种时间格式:YYYY-MM-DD HH:mm:ss、中文秒等
- 移除秒数显示,只保留年月日时分
2026-03-08 09:18:24 +08:00
H1d3rOne 8442584d4f fix: 六爻结果页公历时间只显示到分钟
- 添加formatSolar计算属性格式化公历时间
- 移除秒数显示,只保留年月日时分
- 提升用户体验,时间显示更简洁
2026-03-08 09:05:00 +08:00
H1d3rOne 572b318e97 feat: 优化测算模块功能和UI
- 移除所有测算模块的金币逻辑
- 删除权限相关页面和功能
- 统一奇门遁甲、大六壬、六爻结果页色系
- 修复六爻结果页数据加载问题
- 添加调试日志便于排查问题
2026-03-08 08:57:53 +08:00
H1d3rOne 146a9472a2 debug: 重新添加调试显示区域 2026-03-08 07:19:40 +08:00
H1d3rOne 1657463d05 debug: 添加金币检查部分的调试日志 2026-03-08 07:09:17 +08:00
H1d3rOne fb41aabca8 debug: 添加更详细的调试日志排查数据传递问题 2026-03-08 07:04:40 +08:00
H1d3rOne bad21f1a58 debug: 添加调试显示区域排查数据显示问题 2026-03-08 07:00:50 +08:00
H1d3rOne 292d3708a7 debug: 添加详细调试日志排查数据解析问题 2026-03-08 06:54:37 +08:00
xuan-bot ce84410a7e debug: 添加前端调试日志帮助诊断结果页数据问题 2026-03-08 06:44:42 +08:00
H1d3rOne dfb1fdd73c fix: 修复测算结果页面数据不显示的问题
- 修复后端API返回数据格式问题
- 所有测算页面保存结果时使用 result.data || result
- 确保结果页面能正确获取测算数据
2026-03-08 06:25:36 +08:00
H1d3rOne e56af6feb5 fix: 修复测算页面金币检查逻辑
- 恢复api.js文件并添加userApi
- 修复coinUtils.js导入api模块
- 更新所有测算页面添加金币检查逻辑:
  - 八字测算
  - 紫微斗数
  - 六爻占卜
  - 奇门遁甲
  - 大六壬
  - 梅花易数
  - 占星术
2026-03-08 06:20:50 +08:00
H1d3rOne 624afe92e0 fix: 修复api.js文件,恢复测算结果页面数据
- 恢复api.js文件并添加userApi
- 更新测算页面添加金币检查逻辑
2026-03-08 06:15:42 +08:00
xuan-bot e3f2f5f149 fix: 修复UserController中Map.of()方法兼容Java 8 2026-03-08 06:05:03 +08:00
H1d3rOne b05650860e feat: 添加用户登录授权和金币消耗功能
后端:
- 创建UserInfo实体类和数据库表
- 创建UserInfoRepository和UserInfoService
- 创建UserController处理用户登录、信息更新等API

前端:
- 创建登录授权页面(auth.vue)
- 创建金币检查工具函数(coinUtils.js)
- 更新api.js添加用户API
- 更新测算页面(bazi.vue, ziwei.vue)添加金币检查逻辑
- 更新我的账号页面显示用户信息
- 更新个人信息与权限使用记录页面

功能:
- 首次使用需要授权登录
- 自动生成随机用户名和用户ID
- 每次测算消耗1金币
- 金币不足时弹出提示
- 会员用户无需消耗金币
2026-03-08 06:00:39 +08:00
H1d3rOne 15ee012d76 style: 调整设置页面菜单顺序,清理缓存移到第二位 2026-03-08 05:36:30 +08:00
H1d3rOne 757ae7c55f feat: 更新设置页面菜单项
- 删除用户协议和隐私政策菜单项
- 新增小程序已获取的信息页面(显示位置、相机、相册、通知权限状态)
- 新增个人信息与权限使用记录页面
- 支持管理授权设置
2026-03-08 05:35:00 +08:00
H1d3rOne 8b68b302e5 feat: 设置页面增加个人信息和权限展示
- 删除用户协议和隐私政策菜单项
- 增加小程序获取的个人信息展示(昵称、头像、地区)
- 增加小程序已获取权限展示(用户信息、位置信息、相机、相册)
- 使用uni.getSetting获取权限状态
2026-03-08 05:28:45 +08:00