You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.6 KiB

4 weeks ago
  1. # 抽奖逻辑修改说明
  2. ## 修改概述
  3. 本次修改将抽奖逻辑从前端随机抽奖改为每轮抽奖都请求后端获取中奖数据。
  4. ## 主要修改内容
  5. ### 1. API接口修改 (`src/api/API.js`)
  6. 新增了 `drawLottery` 接口,用于每轮抽奖时请求后端:
  7. ```javascript
  8. export function drawLottery(data){
  9. return request({
  10. url: '/lottery/draw',
  11. method: 'post',
  12. data: {
  13. gradeName: data.gradeName, // 奖项名称
  14. prizeName: data.prizeName, // 奖品名称
  15. perWin: data.perWin, // 每轮抽奖人数
  16. round: data.round // 当前轮次
  17. }
  18. })
  19. }
  20. ```
  21. ### 2. 抽奖引擎修改 (`src/views/choujiang/lottery/lotteryEngine.js`)
  22. - 修改 `executeLottery` 函数,每轮抽奖都请求后端
  23. - 后端返回数据格式:`{ data: [{ jwcode: "5412", username: "猪八戒22" }, ...] }`
  24. - 添加了错误处理机制,如果后端请求失败会回退到前端随机抽奖
  25. ### 3. 数据管理器修改 (`src/views/choujiang/lottery/dataManager.js`)
  26. - 使用真实的用户数据替代假数据
  27. - 确保数据格式与后端返回格式兼容
  28. - 用户数据格式:`{ jwcode: "5412", username: "猪八戒22", company: "公司名称" }`
  29. ### 4. 3D显示组件修改 (`src/views/choujiang/lottery/Lottery3D.vue`)
  30. - 修改 `changeCard` 函数,适配新的数据格式
  31. - 支持显示 `jwcode``username` 字段
  32. ## 后端接口要求
  33. ### 抽奖接口 `/lottery/draw`
  34. **请求参数:**
  35. ```json
  36. {
  37. "gradeName": "一等奖",
  38. "prizeName": "iPhone 15",
  39. "perWin": 5,
  40. "round": 1
  41. }
  42. ```
  43. **返回数据格式:**
  44. ```json
  45. {
  46. "data": [
  47. {
  48. "jwcode": "5412",
  49. "username": "猪八戒22"
  50. },
  51. {
  52. "jwcode": "45125",
  53. "username": "宝玉"
  54. }
  55. ]
  56. }
  57. ```
  58. ## 工作流程
  59. 1. **初始化**:页面加载时获取奖品列表和用户列表
  60. 2. **开始抽奖**:用户点击抽奖按钮
  61. 3. **请求后端**:发送抽奖请求到后端,包含奖项信息和轮次
  62. 4. **获取结果**:后端返回中奖用户列表
  63. 5. **显示动画**:前端根据返回的中奖用户显示3D抽奖动画
  64. 6. **保存结果**:将中奖用户保存到本地状态
  65. ## 错误处理
  66. 如果后端抽奖接口请求失败,系统会自动回退到前端随机抽奖逻辑,确保抽奖功能不会中断。
  67. ## 兼容性
  68. 修改后的代码保持了与原有数据格式的兼容性,支持新旧两种数据格式:
  69. - 新格式:`{ jwcode: "5412", username: "猪八戒22" }`
  70. - 旧格式:`["5412", "猪八戒22", "PSST"]`