bindbox-game/.trae/documents/修复“添加奖品弹出批量抽奖”与奖品列表优化计划.md
邹方成 6ee627139c
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat: 新增支付测试小程序与微信支付集成
feat(pay): 添加支付API基础结构
feat(miniapp): 创建支付测试小程序页面与配置
feat(wechatpay): 配置微信支付参数与证书
fix(guild): 修复成员列表查询条件
docs: 更新代码规范文档与需求文档
style: 统一前后端枚举显示与注释格式
refactor(admin): 重构用户奖励发放接口参数处理
test(title): 添加称号效果参数验证测试
2025-11-17 00:42:08 +08:00

2.8 KiB
Raw Blame History

问题定位

  • 奖品页 web/admin/src/views/activity/rewards/index.vue 在工具栏下方无条件渲染了批量抽奖对话框:<BatchDrawDialog :activity="currentActivity" />
  • 该子组件内部以 props.activity !== null 控制 v-model,而当前页的 currentActivity 始终返回对象(非 null导致对话框初始即打开表现为点击“新增奖励”时出现“批量抽奖”。

修复方案

  • 直接移除奖品页中的 BatchDrawDialog 渲染(该页仅做奖励 CRUD模拟批量抽奖逻辑属于活动管理页/模拟页)。
  • 若保留(备选):使用受控显示状态,改为 <BatchDrawDialog v-model="showBatchDrawDialog" :activity="showBatchDrawDialog ? currentActivity : null" />,并提供单独按钮触发。默认 showBatchDrawDialog=false
  • 采用“移除”方案,影响文件:web/admin/src/views/activity/rewards/index.vue(删除组件引用与相关变量)。

奖品列表优化

  • 新增展示:
    • “剩余/总量”列:quantity / original_qty
    • “期望概率”列:基于总权重 sumWeight 本地计算 weight/sumWeight*100,保留两位小数。
    • Boss 标签保持但列名更明确为“Boss”。
  • 汇总信息:表头上方显示“奖品总数 / 总权重”。
  • 交互优化:
    • 编辑校验完善(名称、商品、权重、数量、原始数量、等级为必填/大于零)。
    • 删除增加二次确认弹窗。
  • 过滤与排序(前端本地):
    • 过滤项名称模糊、等级S/A/B/C、是否 Boss。
    • 默认排序按等级S→C+ sort
  • 数据加载优化:商品列表一次加载并缓存,避免重复请求。

具体改动

  • 修改文件:web/admin/src/views/activity/rewards/index.vue
    • 删除 <BatchDrawDialog :activity="currentActivity" /> 与相关 currentActivity 计算属性。
    • columns 增加 剩余/总量期望概率 两列(期望概率通过本地计算得到)。
    • 在顶部新增汇总区域(使用 computed 基于 data 计算)。
    • 增加简单的本地过滤控件(ElInput/ElSelect),对展示数据做 computed 过滤与排序。
    • 删除与批量抽奖相关的无用状态(如 showSimDialog)。
    • 删除按钮文案更明确:批量新增奖励新增奖励
  • 不改后端接口;所有优化为前端表现层。

验收

  • 进入“奖励”页,点击“新增奖励”只弹奖励编辑对话框,不再出现批量抽奖对话框。
  • 列表显示“剩余/总量”、“期望概率”,汇总信息正确;过滤与排序生效。
  • 构建通过,交互校验正常,删除有确认提示。

风险与回滚

  • 风险低,仅前端视图改动;如需回滚,保留原组件引用并恢复初始布局即可。