Files
yanpeng200212 a8890c81e9 新增质量模块(工艺执行书 / 样茧试缫)与报表中心
质量模块:
- 11 张工艺执行书表:封面、试产、选剥茧(含混茧明细)、试缫与大样、煮茧(含分车间配温、副煮车间)、自动缫(含大样)、后缫
- 10 张样茧试缫表:原料小样/综合样主表 + 选茧、解舒、茧幅、切剖、清洁洁净、茧丝百回纤度
- 服务与接口、主控指针回写(列表 √ 标记)、封面编号自增、报表数据包
- 前端 8 张报表打印版式、7 类工艺单据与 6 类调查录入弹窗、字段驱动表单/表格组件
- 菜单种子新增「质量」目录,样茧子表增加 YjssType 判别列,避免原料小样与综合样自增 Id 重号串数据

报表中心:
- 报表模板管理、锐浪 grhtml5 加载与预览、全屏设计面板、数据源 Provider(落丝记录、职工花名册)

其他:同步工作进度 1-11 文档、开发数据库快照、.gitignore 忽略运行日志目录
2026-10-22 10:30:37 +08:00

6.9 KiB
Raw Permalink Blame History

工作进度-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 只包含报表参数(中文口径) ✅
报表头参数区正确显示值(含空日期、记录数、查询时间) ✅
查询条件不再进入模板,也不参与模板参数渲染 ✅
旧库模板/配置自动升级(限于我们生成的模板) ✅
日期范围参数默认「不限」,不再默认当天 ✅

六、遗留

  1. _WR7_ 模板无法反解参数:设计器模板的「报表参数」页为空,需点「识别明细列与报表参数」重新获取。
  2. 报表参数目前只读:如需要"某些参数不打印""参数排序",可在报表参数页加勾选/拖动。
  3. 合计/小计:Parameter_Data 已能承载汇总口径,但模板还没有 Groups + SummaryBox 合计区,下一步可加。
  4. 报表中心参数默认值语义:DefaultValue="不限" 是约定字符串,后续应改为显式的 DefaultValueType 字段。