xinli/二维码功能修复说明.md

5.5 KiB
Raw Blame History

二维码功能修复说明

修复时间

2025年1月

修复内容

一、修复快速生成接口404问题

问题快速生成注册和登录二维码时前端返回404错误。

原因分析

  1. Spring Boot路径映射可能存在冲突
  2. 路径变量 /{qrcodeId} 可能优先匹配 /generate/register/generate/login

修复方案

  1. /generate/register/generate/login 方法移到其他 /generate/* 方法附近,保持一致性
  2. @PostMapping 注解中添加 produces = "application/json;charset=UTF-8",明确指定响应类型
  3. 确保 /{qrcodeId} 路径变量方法放在所有具体路径之后

修复后的接口路径

  • POST /psychology/qrcode/generate/register - 快速生成注册二维码
  • POST /psychology/qrcode/generate/login - 快速生成登录二维码

二、修复二维码URL生成问题

问题生成的二维码URL使用后端地址和端口http://1.15.149.240:30081但前端页面运行在80端口导致手机扫码无法访问。

修复方案

  1. 优化 buildServerAddress() 方法,优先从 Referer 头提取前端地址
  2. 如果检测到后端端口30081自动改为前端端口80不显示端口号
  3. 生成的二维码URL现在指向前端页面而不是后端API

修复后的URL格式

  • 本地开发:http://localhost/psychology/qrcode/scan/xxx
  • 生产环境:http://1.15.149.240/psychology/qrcode/scan/xxx

三、完善扫码跳转逻辑

功能说明

  1. 扫码接口GET /psychology/qrcode/scan/{qrcodeCode}(公开接口,使用 @Anonymous 注解)

  2. 跳转地址映射

    • test(测评)→ /psychology/assessment/start?scaleId={id}/psychology/questionnaire/start?questionnaireId={id}
    • view_report(查看报告)→ /psychology/report/detail?reportId={id}/psychology/report/detail?assessmentId={id}
    • register(注册)→ /register
    • login(登录)→ /login
  3. 前端扫码页面scan.vue

    • 自动解析URL和查询参数
    • 使用Vue Router进行内部跳转
    • 支持完整URL的外部跳转
    • 提供错误提示和重试机制

测试步骤

1. 重启后端服务

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

2. 测试快速生成功能

  1. 登录管理系统
  2. 进入"二维码管理"页面
  3. 点击"快速生成" → "注册二维码"
  4. 应成功生成二维码并显示预览
  5. 点击"快速生成" → "登录二维码"
  6. 应成功生成二维码并显示预览

3. 测试二维码扫码功能

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

4. 检查二维码URL

生成的二维码URL应该

  • 使用前端地址80端口而不是后端地址30081端口
  • 格式为:http://{host}/psychology/qrcode/scan/{qrcodeCode}
  • 手机可以正常访问

关键代码位置

后端

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

    • generateRegisterQrcode() - 快速生成注册二维码
    • generateLoginQrcode() - 快速生成登录二维码
    • scan() - 扫码接口
    • buildServerAddress() - 构建服务器地址
    • buildRedirectUrl() - 构建跳转地址
  • Servicery-xinli-system/src/main/java/com/ddnai/system/service/impl/psychology/PsyQrcodeServiceImpl.java

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

前端

  • APIxinli-ui/src/api/psychology/qrcode.js

    • generateRegisterQrcode() - 调用快速生成注册二维码接口
    • generateLoginQrcode() - 调用快速生成登录二维码接口
    • scanQrcode() - 调用扫码接口
  • 页面

    • xinli-ui/src/views/psychology/qrcode/index.vue - 二维码管理页面
    • xinli-ui/src/views/psychology/qrcode/scan.vue - 扫码页面
  • 路由xinli-ui/src/router/index.js

    • /psychology/qrcode/scan/:qrcodeCode - 扫码页面路由
    • /register - 注册页面路由
    • /login - 登录页面路由

注意事项

  1. 必须重启后端服务:修改代码后必须重启后端服务才能生效
  2. 权限检查:快速生成接口需要 psychology:qrcode:add 权限
  3. 扫码接口:扫码接口使用 @Anonymous 注解,不需要登录即可访问
  4. URL生成二维码URL会根据请求的 Referer 头自动识别前端地址
  5. 端口配置前端运行在80端口后端运行在30081端口

如果仍有问题

  1. 检查后端日志:查看是否有路径映射错误或权限错误
  2. 检查浏览器控制台查看实际请求的URL和错误信息
  3. 检查网络请求在浏览器开发者工具的Network面板中查看请求详情
  4. 确认服务状态确保后端服务已正确启动并运行在30081端口
  5. 确认权限:确保当前用户有 psychology:qrcode:add 权限

修复完成

所有二维码相关功能已修复完成,包括:

  • 快速生成注册二维码
  • 快速生成登录二维码
  • 二维码URL生成指向前端页面
  • 扫码跳转功能
  • 测评二维码扫码
  • 报告二维码扫码