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