171 lines
5.4 KiB
Markdown
171 lines
5.4 KiB
Markdown
# 积木报表重要约束
|
||
|
||
1. **数据集编码 `db_code` 不能重复且只支持英文字符** — 同一个报表内的多个数据集,每个的 `db_code` 必须唯一。编码只能使用英文字母、数字和下划线,不能包含中文或特殊字符。重复会导致数据覆盖或查询异常。
|
||
2. **`is_page` 分页只能有一个** — 一个报表中只能有一个数据集设置 `is_page=1`(启用分页),其余数据集必须为 `is_page=0`。多个数据集同时分页会导致分页冲突。
|
||
|
||
## 数据绑定语法
|
||
|
||
| 语法 | 说明 | 场景 |
|
||
|------|------|------|
|
||
| `${db.field}` | 单值绑定 | 主表字段、固定值 |
|
||
| `#{db.field}` | 列表绑定 | 明细行、循环数据 |
|
||
| `#{db.group(field)}` | 纵向分组 | 按字段分组汇总 |
|
||
| `#{db.groupRight(field)}` | 横向分组 | 按字段横向展开 |
|
||
| `#{db.dynamic(field)}` | 动态聚合 | 交叉表数据 |
|
||
| `#{db.customGroup(field)}` | 自定义分组 | 横向自定义展开 |
|
||
| `=SUM(D7)` | Excel 公式 | 列汇总 |
|
||
|
||
## 单元格属性
|
||
|
||
| 属性 | 说明 | 值 |
|
||
|------|------|-----|
|
||
| `merge` | 合并 | `[行数,列数]`,如 `[0,2]` 向右合并2列 |
|
||
| `style` | 样式索引 | 引用 `styles` 数组下标 |
|
||
| `loopBlock` | 循环块标记 | 1=属于循环块 |
|
||
| `zonedEdition` | 分版标记 | 1/2/... 分版编号 |
|
||
| `fixedHead` | 固定表头 | 1=固定 |
|
||
| `fixedTail` | 固定表尾 | 1=固定 |
|
||
| `aggregate` | 聚合类型 | 见下方分组配置 |
|
||
| `subtotal` | 小计配置 | 见下方分组配置 |
|
||
| `funcname` | 聚合函数 | 见下方分组配置 |
|
||
| `subtotalText` | 小计行文本 | `"合计"` / `"小计"` |
|
||
| `direction` | 展开方向 | 见下方分组配置 |
|
||
| `sort` | 排序 | 见下方分组配置 |
|
||
| `rendered` | 渲染标记 | `""` |
|
||
| `config` | 配置标记 | `""` |
|
||
| `decimalPlaces` | 小数位 | `"0"`/`"1"`/`"4"` |
|
||
| `display` | 显示格式 | 见下方 display 值表 |
|
||
| `fillForm` | 填报组件 | 组件配置对象 |
|
||
|
||
## 分组相关配置
|
||
|
||
### aggregate 聚合方式(polyWayList)
|
||
|
||
| 值 | 说明 |
|
||
|-----|------|
|
||
| `select` | 列表(普通列,不分组) |
|
||
| `group` | 分组(相同值合并单元格) |
|
||
|
||
### subtotal 是否启用小计
|
||
|
||
| 值 | 说明 |
|
||
|-----|------|
|
||
| `"-1"` | 否(不显示小计行) |
|
||
| `"groupField"` | 是(分组切换时显示小计/合计行) |
|
||
|
||
### funcname 聚合函数(aggregateList)
|
||
|
||
| 值 | 说明 | 用于 |
|
||
|-----|------|------|
|
||
| `"-1"` | 无(不计算,仅显示 subtotalText 文本) | 分组字段(地区、销售员等) |
|
||
| `"SUM"` | 求和 | 数值字段(金额、数量等) |
|
||
| `"MAX"` | 最大值 | 数值字段 |
|
||
| `"MIN"` | 最小值 | 数值字段 |
|
||
| `"AVERAGE"` | 平均值 | 数值字段 |
|
||
| `"COUNT"` | 计数 | 任意字段 |
|
||
|
||
### direction 展开方向(directionList)
|
||
|
||
| 值 | 说明 |
|
||
|-----|------|
|
||
| `"down"` | 纵向(默认) |
|
||
| `"right"` | 横向 |
|
||
|
||
### sort 排序(sortType)
|
||
|
||
| 值 | 说明 |
|
||
|-----|------|
|
||
| `"default"` | 默认(不排序) |
|
||
| `"asc"` | 正序 |
|
||
| `"desc"` | 倒序 |
|
||
|
||
### aggregate 高级模式(advancedList)
|
||
|
||
| 值 | 说明 |
|
||
|-----|------|
|
||
| `"default"` | 普通属性 |
|
||
| `"dynamic"` | 动态属性(交叉表) |
|
||
|
||
### 分组单元格配置示例
|
||
|
||
**分组字段(地区,一级分组 — 合计):**
|
||
```json
|
||
{
|
||
"text": "#{sales.group(region)}",
|
||
"style": 4,
|
||
"aggregate": "group",
|
||
"subtotal": "groupField",
|
||
"funcname": "-1",
|
||
"subtotalText": "合计",
|
||
"rendered": "",
|
||
"config": ""
|
||
}
|
||
```
|
||
|
||
**分组字段(销售员,二级分组 — 小计):**
|
||
```json
|
||
{
|
||
"text": "#{sales.group(salesman)}",
|
||
"style": 4,
|
||
"aggregate": "group",
|
||
"subtotal": "groupField",
|
||
"funcname": "-1",
|
||
"subtotalText": "小计"
|
||
}
|
||
```
|
||
|
||
**数值字段(销售额,小计/合计行自动求和):**
|
||
```json
|
||
{
|
||
"text": "#{sales.amount}",
|
||
"style": 4,
|
||
"funcname": "SUM",
|
||
"subtotal": "-1",
|
||
"display": "number",
|
||
"rendered": "",
|
||
"config": ""
|
||
}
|
||
```
|
||
|
||
**注意:** 数值字段的 `subtotal` 为 `"-1"`(不是 `"groupField"`),`funcname` 为 `"SUM"`。含义是:该字段不触发分组切换,但在分组切换产生的小计/合计行中自动按 SUM 聚合。
|
||
|
||
## display 显示格式(JmConst.CELL_FORMAT_*)
|
||
|
||
| display 值 | 说明 | 示例 |
|
||
|------------|------|------|
|
||
| `normal` | 默认文本 | — |
|
||
| `number` | 数值(数值类型字段默认) | 58000 |
|
||
| `percent` | 百分比 | 85% |
|
||
| `rmb` | 人民币 | ¥58,000.00 |
|
||
| `usd` | 美元 | $58,000.00 |
|
||
| `eur` | 欧元 | €58,000.00 |
|
||
| `date` | 日期 | 2026-03-20 |
|
||
| `date2` | 日期(斜杠) | 2026/03/20 |
|
||
| `time` | 时间 | 12:30:00 |
|
||
| `datetime` | 日期时间 | 2026-03-20 12:30:00 |
|
||
| `year` | 年 | 2026 |
|
||
| `month` | 月 | 03 |
|
||
| `base64Img` | Base64图片 | — |
|
||
| `img` | 图片 | — |
|
||
| `qrcode` | 二维码 | — |
|
||
| `barcode` | 条形码 | — |
|
||
| `richText` | 富文本 | — |
|
||
|
||
## 顶层配置
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `loopBlockList` | 循环块定义(含 `loopTime` 分栏次数) |
|
||
| `zonedEditionList` | 分版区域定义 |
|
||
| `fixedPrintHeadRows` | 固定打印表头 |
|
||
| `fixedPrintTailRows` | 固定打印表尾 |
|
||
| `groupField` | 分组字段 |
|
||
| `isGroup` | 是否启用分组 |
|
||
| `submitHandlers` | 填报提交处理器 |
|
||
| `background` | 背景图配置 |
|
||
| `imgList` | 图片列表 |
|
||
| `displayConfig` | 二维码/条码显示配置 |
|
||
| `dicts` | 引用的字典编码列表 |
|
||
| `printConfig` | 打印配置(纸张/方向/边距) |
|
||
| `merges` | 合并单元格列表(如 `"B1:H1"`) |
|