# 2026-07-14 测试问题菜单全面优化与生产部署 ### 1. 修复测试问题数据为空 **旭东 → OpenClaw:** > 测试问题里,审核问题数据空了,反馈问题数据也空了 **OpenClaw 响应:** 发现 `feedback_list()` 函数只写了获取参数和拼接 WHERE 条件的开头部分,后面完整的 SQL 查询(分类筛选、搜索、排序、分页)以及 return 语句全部缺失,前端调用 API 时返回 None。补全了完整的查询逻辑。 ### 2. 调整数据流程:待处理→待审核 **旭东 → OpenClaw:** > 我需要把反馈问题tab页下边,待处理里面的39条数据挪到审核问题tab页下边,只有审核完毕之后,才会同步跳转到待处理下边 **OpenClaw 响应:** 将 39 条 `status='active'` 改为 `status='pending'`,流程变为:提交→待审核(审核问题)→审核通过→待处理(反馈问题)→标记完成→已完成。 ### 3. 审核问题添加分页 **旭东 → OpenClaw:** > 审核问题tab页下边做分页处理,一页显示10条 **OpenClaw 响应:** 将审核问题列表每页显示条数从 50 改为 10。 ### 4. 修复删除按钮Bug + 自定义确认弹窗 **旭东 → OpenClaw:** > 我点击删除,提示参数错误,并且浏览器一直会跳出不允许192.168.8.186:18888再次向您提示 **OpenClaw 响应:** 两个问题:1) 删除按钮参数传错,`deleteFbItem(this, item.id)` 中 this 被当成 id 传给 API,导致返回"参数错误";2) 浏览器原生 confirm() 弹多次后被自动屏蔽,返回 undefined 导致操作无响应。将所有原生 confirm() 替换为自定义模态弹窗。 ### 5. 审核/反馈问题按钮布局调整 **旭东 → OpenClaw:** > 1、反馈问题里面,每个问题保留标记完成、删除两个按钮功能 > 2、审核问题里面,每个问题保留审核、编辑、删除三个按钮功能 **OpenClaw 响应:** 审核问题每项增加审核(仅超级管理员)、编辑、删除三个按钮;反馈问题左侧列表只显示问题信息,点击后在右侧详情面板显示标记完成/删除按钮。 ### 6. 新增反馈按钮移到顶部 **旭东 → OpenClaw:** > 新增反馈按钮从反馈问题里面挪出来,放到测试问题大标题的右侧 **OpenClaw 响应:** "新增反馈"按钮从反馈问题标签页内移到测试问题大标题右侧,三个标签页均可见。 ### 7. 代码同步到生产环境 **旭东 → OpenClaw:** > 生产环境198.168.11.79:18888打开失败了 **OpenClaw 响应:** 生产环境 feedback.py 第49行语法错误(括号缺失),导致 Gunicorn 启动失败。同步修复后的文件后重启,服务恢复正常。 ### 8. 设置SSH反向隧道 + 共用数据库 **旭东 → OpenClaw:** > 我需要两个系统保持一致,测试环境可以看到正式环境里面提的问题,反之亦然 **OpenClaw 响应:** 利用已有的 SSH 反向隧道(测试3306→生产127.0.0.1:3307),修改生产环境 feedback.py 路由使用 `_fb_query()` 连接 3307 端口(指向测试库),实现两边 feedback 表数据实时共享。隧道保活脚本 keep_tunnel.sh 每分钟检查,断开自动重连。 ### 9. 视图总览新增人员统计看板 **旭东 → OpenClaw:** > 视图总览界面下,做一个看板,是对反馈问题tab页下边7-13号开始提出的问题进行分类汇总,分类维度有人员,条数 **OpenClaw 响应:** 新增 `/api/feedback/user_stats` 接口,视图总览4张概览卡片下方增加人员统计表格(排名/人员/条数/占比进度条),含合计行。 ### 10. 删除权限限制为仅超级管理员 **旭东 → OpenClaw:** > 测试问题里面所有的删除功能只有超级管理员甘旭东用户才可以操作 **OpenClaw 响应:** 后端 `feedback_delete()` 检查改为 `role != 'super_admin'`,前端删除按钮仅超级管理员可见。同步到生产环境。 ### 11. 供应商管理保存/删除弹窗修复 **旭东 → OpenClaw:** > 正式环境里面,我登陆张莹纯管理员账号,在供应商管理界面,点击编辑更改信息之后,无法点击保存,并且点击删除无反应了 **OpenClaw 响应:** 供应商管理保存和删除操作也用了原生 `confirm()`,被浏览器屏蔽后返回 undefined 导致操作跳过。替换为自定义模态弹窗,修复了选择器 `[style*="z-index:99999"]` 因浏览器自动加空格匹配不到的问题(改用 class 选择)。