xinli/二维码功能修复说明-最终版.md

5.8 KiB
Raw Blame History

二维码功能修复说明(最终版)

修复时间

2025年1月

修复内容

一、删除快速生成功能

修改内容

  1. 删除前端"快速生成"按钮和相关方法
  2. 删除后端快速生成接口(/quick/register/quick/login
  3. 删除前端API调用方法

说明:用户可以通过"新增"按钮手动创建注册和登录二维码。

二、修复本地环境二维码URL生成问题

问题:扫描二维码后显示的地址是 localhost:30081,这会导致手机无法访问。

原因分析

  • 本地环境前端运行在80端口后端运行在30081端口
  • 二维码URL应该使用前端地址localhost80端口而不是后端地址localhost:30081
  • 之前的逻辑在某些情况下仍然会生成包含30081端口的URL

修复方案

  1. 优化 buildServerAddress() 方法,确保在本地环境下正确识别前端地址
  2. 如果检测到后端端口30081自动改为前端端口80不显示端口号
  3. 优先从 Referer 头获取前端地址,如果失败则使用请求的服务器地址并转换端口

修复后的URL格式

  • 本地环境:http://localhost/psychology/qrcode/scan/xxx不包含端口号默认80端口
  • 生产环境:http://1.15.149.240/psychology/qrcode/scan/xxx不包含端口号默认80端口

三、二维码功能实现方式说明

当前实现方式

  1. 手动创建二维码:通过"新增"按钮创建二维码,选择类型(测评、查看报告、注册、登录)
  2. 二维码生成系统自动生成二维码编码和Base64图片
  3. 扫码跳转:扫描二维码后自动跳转到对应页面

本地环境使用建议

  1. 使用本机IP地址:如果需要在手机上扫码,建议:

    • 获取本机IP地址192.168.1.100
    • 在浏览器中通过 http://192.168.1.100 访问前端页面
    • 这样生成的二维码URL会是 http://192.168.1.100/psychology/qrcode/scan/xxx
    • 手机和电脑在同一局域网内,可以正常扫码访问
  2. 使用localhost:如果只在电脑上测试:

    • 使用 http://localhost 访问前端页面
    • 生成的二维码URL会是 http://localhost/psychology/qrcode/scan/xxx
    • 只能在电脑上访问,手机无法访问

新的实现方式建议(可选): 如果需要更好的本地开发体验,可以考虑:

  1. 配置前端地址:在 application.yml 中添加前端地址配置
  2. 使用环境变量:通过环境变量区分开发环境和生产环境
  3. 使用配置文件:在配置文件中明确指定前端和后端地址

测试步骤

1. 重启后端服务

重要:修改代码后必须重启后端服务才能生效。

2. 测试二维码生成

  1. 登录管理系统
  2. 进入"二维码管理"页面
  3. 点击"新增"按钮
  4. 选择二维码类型(如:注册、登录、测评、查看报告)
  5. 填写相关信息
  6. 保存后应成功生成二维码

3. 测试二维码扫码功能

  1. 使用手机扫描生成的二维码
  2. 应能正常打开扫码页面
  3. 根据二维码类型自动跳转到对应页面:
    • 注册二维码 → 跳转到注册页面
    • 登录二维码 → 跳转到登录页面
    • 测评二维码 → 跳转到测评开始页面
    • 报告二维码 → 跳转到报告详情页面

4. 检查二维码URL

生成的二维码URL应该

  • 不包含30081端口:应该是 http://localhost/...http://192.168.1.100/...
  • 使用前端地址指向前端页面80端口而不是后端API30081端口
  • 手机可以访问如果使用本机IP地址手机在同一局域网内可以正常访问

关键代码位置

后端

  • Controllerry-xinli-admin/src/main/java/com/ddnai/web/controller/psychology/PsyQrcodeController.java

    • buildServerAddress() - 构建服务器地址(已修复,确保使用前端地址)
    • enrichQrcodeWithBase64() - 为二维码添加Base64图片
    • scan() - 扫码接口
    • buildRedirectUrl() - 构建跳转地址
  • Servicery-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyQrcodeServiceImpl.java

    • generateQrcode() - 生成二维码Base64
    • buildQrcodeContent() - 构建二维码内容URL

前端

  • 页面

    • xinli-ui/src/views/psychology/qrcode/index.vue - 二维码管理页面(已删除快速生成功能)
    • xinli-ui/src/views/psychology/qrcode/scan.vue - 扫码页面
  • APIxinli-ui/src/api/psychology/qrcode.js(已删除快速生成相关方法)

注意事项

  1. 必须重启后端服务:修改代码后必须重启后端服务才能生效
  2. 本地环境测试
    • 如果需要在手机上扫码使用本机IP地址访问前端页面
    • 如果只在电脑上测试使用localhost即可
  3. 端口配置前端运行在80端口后端运行在30081端口
  4. 二维码URL生成的二维码URL会自动使用前端地址80端口不包含30081端口

如果仍有问题

  1. 检查二维码URL

    • 查看生成的二维码URL是否包含30081端口
    • 如果包含,说明 buildServerAddress() 方法没有正确工作
    • 检查后端日志查看实际生成的URL
  2. 检查Referer头

    • 在浏览器开发者工具的Network面板中查看请求的Referer头
    • 确保Referer头包含正确的前端地址
  3. 本地环境测试

    • 如果使用localhost只能在电脑上访问
    • 如果需要在手机上扫码使用本机IP地址192.168.1.100
  4. 检查网络

    • 确保手机和电脑在同一局域网内
    • 确保防火墙没有阻止访问

修复完成

所有问题已修复完成:

  • 删除快速生成功能
  • 修复本地环境二维码URL生成确保使用前端地址不包含30081端口
  • 完善扫码跳转功能