dy-dashboard/vault/知识库/工作指南/训练记录/2026-07-20-表头筛选功能全面优化.md
2026-10-28 11:14:17 +08:00

2.9 KiB
Raw Blame History

2026-07-20 表头筛选功能全面优化

旭东 → OpenClaw:

今天花了将近9个小时(09:10~18:00),对国内订单管理、海外订单管理、包材订单管理、计划预测四个菜单的表头筛选功能进行了全面优化。

OpenClaw 响应:

一、修复的问题

1. 筛选"确定"按钮不生效

  • 根因:后端 _apply_order_filter 函数的 try/except Exception: pass 静默捕获了异常,导致筛选条件未拼接到 SQL 的 WHERE 子句中
  • 修复:改为内联处理,绕过该函数

2. 三角形筛选按钮太小

  • 10px → 20px,增加 padding,计划预测菜单的也同步改了

3. 联动筛选(列筛选值跟随其他列筛选)

  • 后端 column-values 接口传现有 order_filter/plan_filter 参数
  • 计划预测中计算字段(产品分级、销售趋势、风险把控等)的值从表格 DOM 提取
  • 增加了全量数据缓存机制

4. 筛选状态回显(再次点击表头显示上次勾选内容)

  • _populateOrderFilterList/_populateFilterMenuList 读取已保存的筛选状态回显勾选框
  • 搜索模式也回填搜索框并触发搜索过滤

5. 空值筛选

  • 后端加 __EMPTY__ 标记,前端显示"空"选项
  • SQL 转 (field IS NULL OR field = '')
  • 空值检查 SQL 加入了现有筛选条件

6. 重置按钮行为区分

  • 弹窗内"重置"只清当前列(orderFilterClear/planFilterClear)
  • 顶部"重置"清全部(含表头列筛选状态)

7. 数字列双模式筛选(类似 Excel)

  • 改为 tab 页切换:内容筛选(值列表勾选) / 条件筛选(大于/小于等条件)
  • 值列表优先,条件筛选为或关系
  • 搜索数值输入框

8. planning.py 空值 SQL 参数不匹配

  • emptySql 包含 %s 占位符但没传参数,导致 500 错误

9. 客户端过滤逻辑 bug

  • 数据库字段筛选时总条数被错误覆盖成当前页大小

10. 预定义值列(PLAN_FILTER_OPTIONS)的筛选状态回显

  • 内联代码路径不调用 _populateFilterMenuList,需单独修

二、涉及文件

  • 前端: /home/gxd/.openclaw/workspace/dy-dashboard/static/js/app.js
  • 后端: /home/gxd/.openclaw/workspace/dy-dashboard/routes/purchase.py, routes/planning.py
  • 模板: /home/gxd/.openclaw/workspace/dy-dashboard/templates/base.html(版本号多次更新)

三、版本变化

v=1612 → v=1652(共更新40+次)

四、教训

  • Python str.replace() 在大文件上容易改错地方,用 sed 或精确行号更安全
  • query(sql, params) 的 params 如果是 None 会报 not enough arguments for format string
  • Gunicorn 重启需彻底 kill 再启动
  • 计算字段(产品分级、销售趋势、总库存等)在数据库不存在,后端 API 无法直接查询,需从前端表格 DOM 提取值
  • Python 脚本批量修改 JS 文件容易导致括号嵌套错误