## 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 文件容易导致括号嵌套错误