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

64 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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