质量模块: - 11 张工艺执行书表:封面、试产、选剥茧(含混茧明细)、试缫与大样、煮茧(含分车间配温、副煮车间)、自动缫(含大样)、后缫 - 10 张样茧试缫表:原料小样/综合样主表 + 选茧、解舒、茧幅、切剖、清洁洁净、茧丝百回纤度 - 服务与接口、主控指针回写(列表 √ 标记)、封面编号自增、报表数据包 - 前端 8 张报表打印版式、7 类工艺单据与 6 类调查录入弹窗、字段驱动表单/表格组件 - 菜单种子新增「质量」目录,样茧子表增加 YjssType 判别列,避免原料小样与综合样自增 Id 重号串数据 报表中心: - 报表模板管理、锐浪 grhtml5 加载与预览、全屏设计面板、数据源 Provider(落丝记录、职工花名册) 其他:同步工作进度 1-11 文档、开发数据库快照、.gitignore 忽略运行日志目录
6.9 KiB
6.9 KiB
工作进度-7:报表参数与查询条件分离(概念校准 + 参数区修复)
时间:2026-10-20(承接工作进度-6) 触发:用户指出「
Parameter_Data里的这些才是参数,Config.Parms的 q_* 是查询条件,不是报表参数」
一、问题
之前的模板生成把 查询条件(Config.Parms 的 q_date_start / q_dep…)直接写进了模板的 Parameter 节点与报表头,导致:
- 模板参数变成
q_date_start, q_date_end, q_dep(业务上毫无意义的内部键) - 报表头显示的是"查询条件的名字",不是"本次查询的统计口径"
- 日期参数空值被默认成"今天",报表默认只查当天
正确的分层:
| 概念 | 代码位置 | 用途 | 示例 |
|---|---|---|---|
| 查询条件 | Config.Parms(q_*) |
渲染查询面板,值随请求传给后端 | q_date_start / q_dep / q_like |
| 报表参数 | 后端 DataSource.Parameter_Data |
查询执行后返回,供模板头/合计区展示 | 开始日期 / 车间 / 记录数 / 查询时间 |
二、后端
2.1 探测结果带回报表参数(数据驱动,不是硬编码)
ReportScaffoldDtos.cs 新增:
public class ReportParamValueDto { public string Name; public string Value; }
// ReportProbeResultDto 增加 List<ReportParamValueDto> Parameters
ReportService.FillFromProviderAsync:
var paramDatum = dataSource.Report_Data.FirstOrDefault(kv => kv.Value?.Parameter_Data != null);
result.Parameters = ToNameValueDict(paramDatum.Value.Parameter_Data)
.Select(kv => new ReportParamValueDto { Name = kv.Key, Value = kv.Value?.ToString() ?? "" })
.ToList();
仍然遵守进度-6 的结论:Provider 不声明元数据,参数与列都从查询结果里取。
2.2 内置模板 lsjl.grf
- 参数绑定由
"Parameter": "开始日期"改为文本标记"Text": "开始日期:[#{开始日期}#]" - 控件类型必须是 MemoBox(实测见第五节)
- 顶层
Parameter声明为 7 个报表参数:开始日期 / 结束日期 / 车间 / 机组 / 庄口 / 记录数 / 查询时间
2.3 种子自愈(DbSeeder.SeedLsjlReport)
旧库里的模板/配置会被自动升级,且不会覆盖用户手工配置:
| 判定 | 行为 |
|---|---|
Config.Parms 为空,或所有 Label 都为空(程序生成的占位配置) |
重写为规范的 6 个查询条件(中文标签、日期默认值「不限」) |
模板是我们生成的(Author = F9 报表中心)且含 "Parameter": "开始日期" |
替换为内置模板 |
模板是我们生成的且 Parameter 里出现 q_*(查询条件混入) |
替换为内置模板 |
模板是我们生成的且存在 StaticBox + [#{...}#](渲染不解析) |
替换为内置模板 |
用户自己设计/上传的模板(_WR7_ 或 Author 不是我们)一律不动。
三、前端(ReportEditor.vue)
3.1 左栏 tab 拆分
从「配置 / 参数 / 明细字段」改为:
| tab | 内容 |
|---|---|
| 配置 | 编号、名称、分组、数据源、数据 SQL、备注 |
| 查询条件 (n) | Config.Parms:参数名 / 标签 / 控件类型 / 默认值 / 提示,附说明"不进入模板" |
| 报表参数 (n) | 只读列表:后端 Parameter_Data 的键与当前值,附说明"来自后端 Parameter_Data" |
| 明细字段 (n) | 列名 / 列标题 / 列宽,可生成模板 |
3.2 模板生成改用报表参数
// 之前:parms.value(查询条件)→ 模板 Parameter + Parameter 属性绑定
// 现在:reportParams.value(报表参数)→ 模板 Parameter + MemoBox 文本 [#{名称}#]
Parameter: reportParams.value.map((p) => ({ Name: p.name, DataType: 'String' }))
Text: `${p.name}:[#{${p.name}}#]` // 控件 Type = MemoBox
- 识别数据源时(
/scaffold)同步填充报表参数 - 点「刷新预览」后用
/preview返回的Parameter覆盖一次,保证与真实查询口径一致 - 编辑已有报表时从模板
Parameter节点反解(_WR7_无法反解,显示提示)
四、验证记录
4.1 接口
POST /sys/report/scaffold { dsName: RepDt_Prod_Lsjl }
FIELDS=13 PARAMS=7
开始日期 = ""
结束日期 = ""
车间 = (全部)
机组 = (全部)
庄口 = (全部)
记录数 = 3
查询时间 = 2026-10-20 15:52:47
4.2 报表中心渲染(GR7 HTML5)
落丝记录
开始日期: 结束日期: 车间:(全部) 机组:(全部) 庄口:(全部)
记录数:3 查询时间:2026-10-20 15:52:47
日期 车间 机组 庄口 回数 颜色 半车 落丝时间 缫丝桶数
2026-09-09 前缫车间 1 … 16:21:32 20
2026-10-20 前缫车间 1 … 14:16:35 20
2026-10-20 前缫一车间 2 … 14:30:06 20
4.3 报表管理页(新建 → 识别 → 生成模板)
TABS=配置, 查询条件 (0), 报表参数 (7), 明细字段 (13)
报表参数 = 开始日期— / 结束日期— / 车间(全部) / 机组(全部) / 庄口(全部) / 记录数3 / 查询时间…
生成模板后入库:
TPL_PARAMS=开始日期,结束日期,车间,机组,庄口,记录数,查询时间
HEADER_TEXT=开始日期:[#{开始日期}#] | … | 查询时间:[#{查询时间}#]
4.4 关键实测:[#{参数名}#] 只在 MemoBox 生效
用两张最小模板对照渲染(同一份数据 { Parameter: [{ 车间: "(全部)" }] }):
| 模板 | 控件 | 写法 | 渲染结果 |
|---|---|---|---|
| A1 | StaticBox | [#{车间}#] |
A1-[#{车间}#](原样,未替换) |
| A2 | MemoBox | [#{车间}#] |
A2-(全部) ✅ |
| B1 | StaticBox | [#车间#](无花括号) |
B1-[#车间#](不替换) |
| B2 | StaticBox | Parameter 属性 |
(全部) ✅(旧方式仍可用) |
结论:参数显示控件必须用 MemoBox + [#{参数名}#];StaticBox 只认 Parameter 属性。
五、当前状态
| 项 | 状态 |
|---|---|
| 「查询条件」与「报表参数」在 UI/模板/接口上彻底分开 | ✅ |
模板 Parameter 只包含报表参数(中文口径) |
✅ |
| 报表头参数区正确显示值(含空日期、记录数、查询时间) | ✅ |
| 查询条件不再进入模板,也不参与模板参数渲染 | ✅ |
| 旧库模板/配置自动升级(限于我们生成的模板) | ✅ |
| 日期范围参数默认「不限」,不再默认当天 | ✅ |
六、遗留
_WR7_模板无法反解参数:设计器模板的「报表参数」页为空,需点「识别明细列与报表参数」重新获取。- 报表参数目前只读:如需要"某些参数不打印""参数排序",可在报表参数页加勾选/拖动。
- 合计/小计:
Parameter_Data已能承载汇总口径,但模板还没有Groups+SummaryBox合计区,下一步可加。 - 报表中心参数默认值语义:
DefaultValue="不限"是约定字符串,后续应改为显式的DefaultValueType字段。