三、模板管理
模板管理页是打印中心的入口页,对应菜单「自定义打印」,页面路径 /custom-print/template。
3.1 页面布局
┌──────────────┬──────────────────────────────────────────┐
│ 单据类型树 │ 查询栏:模板名称 / 状态 │
│ (按模块分组, │ [新增模板] │
│ 支持关键字过滤,│ ──────────────────────────────── │
│ 顶部有"全部 │ 模板列表表格 │
│ 模板"入口) │ 行操作:设计 / 设默认 / 复制 / 删除 │
└──────────────┴──────────────────────────────────────────┘- 左侧树:来自 BD 基础数据的单据类型分组(FIN 财务、ERP 采购/销售/库存、OA 单据、MES 生产、AMS 资产),点叶子节点右侧列表只显示该 billType 的模板;点「全部模板」显示所有;
- 列表列:模板名称、单据类型、模式(简单配置/HTML 标签)、纸张、默认、状态、备注、创建时间。
3.2 新增模板弹窗
| 字段 | 必填 | 说明 |
|---|---|---|
| 单据类型 | 是 | 树形下拉,只能选已注册的叶子类型(如「记账凭证」) |
| 模板名称 | 是 | 建议「单据名-版式名」命名,如「采购订单-客户联」 |
| 模板模式 | 是 | 简单配置(勾选字段):零代码,见第四章;HTML 模板(源码):自由排版,见第五章 |
| 纸张 | 是 | A4(默认)/ A5 / 自定义;选自定义出现宽×高输入(宽 50~500mm、高 30~1500mm),切过去自动预填 210×99(即 1/3 A4 穿孔纸) |
| 圆孔效果 | 否 | 开启后按针式两边圆孔穿孔纸排版(左右各留 10mm 孔区,预览可见孔位) |
底部两个按钮:
- 【创建并进入设计】:保存后自动跳转到模板设计器新页签(推荐);
- 【取 消】:关闭弹窗。
新模板默认:纸张 A4、份数 1、状态启用、非默认。创建后仍可在设计器「基本信息」里修改名称、纸张、份数、状态、备注。
3.3 行操作
| 操作 | 权限 | 说明 |
|---|---|---|
| 设计 | infra:print-template:update | 新页签打开模板设计器修改版式 |
| 设默认 | infra:print-template:update | 设为该单据类型的默认模板。同一 billType 仅一个默认,设置后原默认自动取消 |
| 复制 | infra:print-template:create | 复制整套模板:编码自动生成 tpl_xxxxxxxx,名称追加「-副本」,默认标记清除。适合基于预置模板改造时保留原件 |
| 删除 | infra:print-template:delete | 逻辑删除,删除前请确认没有业务依赖(删除默认模板后该类型若无其他模板将回落到兜底版式) |
补充规则:
- 停用模板:进设计器把「状态」改为停用,打印时不再出现在可选列表;
- 默认模板不可换单据类型:需要换类型时请复制一份新建;
- 模板编码(templateCode)同单据类型内唯一,重复保存会报「模板编码已存在」。
3.4 打印时的模板选择逻辑
业务页点【打印】后,系统按以下优先级取模板:
URL 显式指定 templateId
→ 默认模板(is_default)
→ 第一个启用模板
→ 兜底版式(无任何模板时)只有 1 个启用模板时不弹窗直接进预览;多个模板才弹「选择打印模板」。
3.5 菜单与权限
菜单结构(初始化 SQL 自动创建,幂等):
| 层级 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 根目录 | 自定义打印 | 目录 | 路径 /custom-print,图标 ep:printer |
| 菜单 | 自定义打印 | 菜单 | 组件 infra/printTemplate/index,权限 infra:print-template:query |
| 按钮 | 模板查询 | 按钮 | infra:print-template:query |
| 按钮 | 模板新增 | 按钮 | infra:print-template:create |
| 按钮 | 模板修改 | 按钮 | infra:print-template:update |
| 按钮 | 模板删除 | 按钮 | infra:print-template:delete |
给配置员授权:系统管理 → 角色管理 → 菜单权限,勾选「自定义打印」目录 + 菜单 + 所需按钮。
打印数据接口(
/infra/print/data等)登录即可访问,数据范围由各业务模块自身的查询逻辑控制;模板管理接口才需要上表权限。
3.6 多租户说明
模板表带租户隔离(tenant_id),每个租户各自维护模板,互不可见。SaaS 场景下各公司可按需定制自己的版式;初始化脚本预置的模板归属租户 1。
