@agile-team/mach-report 2.11.2 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/THIRD_PARTY_NOTICES.md +270 -0
- package/dist/{ExcelBindingWizard-LWX6G1A2.js → ExcelBindingWizard-CeAf4QSE.js} +2 -2
- package/dist/{ExcelBindingWizard-a4kslPHF.cjs → ExcelBindingWizard-y0mT-AHR.cjs} +1 -1
- package/dist/{RuleEditor-C2QsOHOs.cjs → RuleEditor-ChRzNQuF.cjs} +1 -1
- package/dist/{RuleEditor-D9wQHrkf.js → RuleEditor-DzAmW5YH.js} +1 -1
- package/dist/analytics.d.cts +28 -0
- package/dist/analytics.d.ts +28 -0
- package/dist/assets-C2U-e-Sz.cjs +4 -0
- package/dist/assets-Q0wUwNrV.js +217 -0
- package/dist/code-options-BKXXY7NI.js +18 -0
- package/dist/code-options-BUTChiZZ.cjs +1 -0
- package/dist/codes.cjs +9 -0
- package/dist/codes.d.cts +223 -0
- package/dist/codes.d.ts +223 -0
- package/dist/codes.js +26917 -0
- package/dist/designer.cjs +2 -2
- package/dist/designer.d.cts +267 -0
- package/dist/designer.d.ts +267 -0
- package/dist/designer.js +2737 -1941
- package/dist/grid-strokes-Cr7DwUux.cjs +1 -0
- package/dist/grid-strokes-DyyG1q_o.js +53 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +80 -1
- package/dist/index.d.ts +80 -1
- package/dist/index.js +404 -374
- package/dist/pdf.cjs +76 -59
- package/dist/pdf.d.cts +51 -0
- package/dist/pdf.d.ts +51 -0
- package/dist/pdf.js +32128 -32048
- package/dist/record-bindings-By_UKZ2g.cjs +1 -0
- package/dist/{list-cell-ClFra1zS.js → record-bindings-D-5jQlTj.js} +67 -44
- package/dist/{region-binding-workflow-DhQvu1co.cjs → region-binding-workflow-BzfbxRiR.cjs} +1 -1
- package/dist/{region-binding-workflow-CXDmt9Bs.js → region-binding-workflow-CcUq8W2Q.js} +1 -1
- package/dist/server/node.d.cts +52 -1
- package/dist/server/node.d.ts +52 -1
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +239 -210
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +95 -3
- package/dist/server.d.ts +95 -3
- package/dist/server.js +456 -433
- package/dist/style.css +1 -1
- package/dist/{template-registry-WNXdkiET.js → template-registry-BjE1VS6g.js} +221 -157
- package/dist/template-registry-D3SjENi6.cjs +1 -0
- package/dist/template-review-BfCC8Ng9.cjs +2 -0
- package/dist/{template-review-BdcXSYbx.js → template-review-BzpcI-tR.js} +772 -666
- package/dist/validate-BJ5HIWY8.cjs +1 -0
- package/dist/validate-DbgEM1Hh.js +163 -0
- package/dist/vue/async.d.cts +121 -2
- package/dist/vue/async.d.ts +121 -2
- package/dist/vue/index.d.cts +114 -6
- package/dist/vue/index.d.ts +114 -6
- package/dist/{workbook-session-BKOTwcoq.js → workbook-session-BPb3TMnT.js} +1 -1
- package/dist/{workbook-session-CLYLhZWu.cjs → workbook-session-DNa2RHNG.cjs} +1 -1
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +52 -1
- package/dist/worker.d.ts +52 -1
- package/dist/worker.js +2 -2
- package/dist/xlsx.cjs +1 -1
- package/dist/xlsx.d.cts +40 -0
- package/dist/xlsx.d.ts +40 -0
- package/dist/xlsx.js +3 -3
- package/package.json +16 -3
- package/dist/assets-Bu6UohJx.cjs +0 -1
- package/dist/assets-DegqDNqY.js +0 -160
- package/dist/list-cell-BuYn4tGF.cjs +0 -1
- package/dist/template-registry-ukBGlm8N.cjs +0 -1
- package/dist/template-review-BXp2oyqg.cjs +0 -1
- package/dist/textwrap-CWHyzkBH.cjs +0 -4
- package/dist/textwrap-DE1kgcJB.js +0 -110
- package/dist/validate-7s0yn6ii.js +0 -148
- package/dist/validate-DsRiNw8h.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const v=require("./code-options-BUTChiZZ.cjs");function g(e,s,i){e.editable!==void 0&&typeof e.editable!="boolean"&&i.push({path:`${s}.editable`,message:"编辑控制应为布尔值"}),e.valueType!==void 0&&!["text","number","boolean"].includes(e.valueType)&&i.push({path:`${s}.valueType`,message:"编辑类型应为 text、number 或 boolean"})}function A(e,s,i){g(e,s,i),e.indentMm!==void 0&&(typeof e.indentMm!="number"||!Number.isFinite(e.indentMm)||e.indentMm<0)&&i.push({path:`${s}.indentMm`,message:"单元格缩进应为有限非负数"}),e.derived!==void 0&&typeof e.derived!="boolean"&&i.push({path:`${s}.derived`,message:"派生结果标记应为布尔值"}),m(e.source,`${s}.source`,i,!0),e.formula!==void 0&&typeof e.formula!="string"&&i.push({path:`${s}.formula`,message:"单元格公式应为字符串"})}function m(e,s,i,n=!1){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e)){i.push({path:s,message:"业务来源应为对象"});return}const t=e;for(const a of["datasetId",...n?["field"]:[]])(typeof t[a]!="string"||!t[a].trim())&&i.push({path:`${s}.${a}`,message:"业务标识应为非空字符串"});for(const a of["rowKey","revision"]){const o=t[a];o===void 0&&!(n&&a==="rowKey")||typeof o!="string"&&!(typeof o=="number"&&Number.isFinite(o))&&i.push({path:`${s}.${a}`,message:"业务键及修订号应为字符串或有限数字"})}t.sourceToken!==void 0&&typeof t.sourceToken!="string"&&i.push({path:`${s}.sourceToken`,message:"来源令牌应为字符串"})}const b=new Set(["text","image","barcode","qrcode","chart","line","rect","ellipse"]);function d(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function M(e,s,i,n){const t=e[s];(typeof t!="number"||!Number.isFinite(t))&&n.push({path:`${i}.${s}`,message:`应为有限数字,实际 ${JSON.stringify(t)}`})}function w(e,s,i){if(e!==void 0){const n=`${s}.table`;if(!d(e))i.push({path:n,message:"逻辑表来源应为对象"});else{m(e.source,`${n}.source`,i),(typeof e.id!="string"||!e.id.trim())&&i.push({path:`${n}.id`,message:"逻辑表 ID 应为非空字符串"});const t=e.role;["header","body","group-header","subtotal","grand-total"].includes(t)||i.push({path:`${n}.role`,message:"未知逻辑表行角色"});const a=e.rowIndex;(typeof a!="number"||!Number.isInteger(a)||(t==="header"?a!==-1:a<0))&&i.push({path:`${n}.rowIndex`,message:"表头索引应为 -1,内容行索引应为非负整数"}),(!Array.isArray(e.columnKeys)||e.columnKeys.some(o=>typeof o!="string"))&&i.push({path:`${n}.columnKeys`,message:"逻辑列字段应为字符串数组"}),e.layout!==void 0&&e.layout!=="page"&&e.layout!=="wide"&&i.push({path:`${n}.layout`,message:"布局应为 page 或 wide"}),e.title!==void 0&&typeof e.title!="string"&&i.push({path:`${n}.title`,message:"逻辑表名称应为字符串"})}}}function k(e,s,i,n){if(e!==void 0)if(!d(e)||!Array.isArray(e.cells))i.push({path:`${s}.grid.cells`,message:"grid.cells 应为二维数组"});else{const t=e.paddingMm;t!==void 0&&(typeof t!="number"||!Number.isFinite(t)||t<0)&&i.push({path:`${s}.grid.paddingMm`,message:"单元格内距应为有限非负数"}),e.cells.forEach((a,o)=>{if(!Array.isArray(a)){i.push({path:`${s}.grid.cells.${o}`,message:"行应为数组"});return}a.forEach((u,f)=>{if(u==null)return;const r=`${s}.grid.cells.${o}.${f}`;if(!d(u)){i.push({path:r,message:"网格单元格应为对象或 null"});return}A(u,r,i),Array.isArray(u.children)&&u.children.forEach((y,$)=>{h(y,`${s}.grid.cells.${o}.${f}.children.${$}`,i,n)})})})}}function N(e,s,i){e!==void 0&&(Array.isArray(e)?e.forEach((n,t)=>{(!d(n)||!Array.isArray(n.segments))&&i.push({path:`${s}.richParagraphs.${t}`,message:"段落缺少 segments 数组"})}):i.push({path:`${s}.richParagraphs`,message:"richParagraphs 应为数组"}))}function h(e,s,i,n=[]){if(!d(e)){i.push({path:s,message:"组件应为对象"});return}const t=e.kind;typeof t!="string"?i.push({path:`${s}.kind`,message:"组件缺少 kind 字符串"}):b.has(t)||n.push({path:`${s}.kind`,message:`未知组件类型 ${JSON.stringify(t)},将以兜底方式渲染`});for(const a of["leftMm","topMm","widthMm","heightMm"])M(e,a,s,i);typeof e.leftMm=="number"&&e.leftMm<-100&&i.push({path:`${s}.leftMm`,message:"几何数值异常(leftMm<-100)"});for(const a of["widthMm","heightMm"])typeof e[a]=="number"&&e[a]<0&&i.push({path:`${s}.${a}`,message:"组件尺寸不能为负数"});w(e.table,s,i),E(e.code,t,s,i),e.pageAnchor!==void 0&&!["header","footer"].includes(e.pageAnchor)&&i.push({path:`${s}.pageAnchor`,message:"页面锚点应为 header 或 footer"}),e.lineDirection!==void 0&&!["down","up"].includes(e.lineDirection)&&i.push({path:`${s}.lineDirection`,message:"线段方向应为 down 或 up"}),k(e.grid,s,i,n),N(e.richParagraphs,s,i)}function E(e,s,i,n){if(e!==void 0)for(const t of v.codeOptionIssues(e,s))n.push({path:`${i}.code${t.path?`.${t.path}`:""}`,message:t.message})}function p(e,s,i){if(!d(e))return;e.binding!==void 0&&i.push({path:`${s}.binding`,message:"渲染计划不允许未解析字段绑定"});const n=e.grid;!d(n)||!Array.isArray(n.cells)||n.cells.forEach((t,a)=>{Array.isArray(t)&&t.forEach((o,u)=>{!d(o)||!Array.isArray(o.children)||o.children.forEach((f,r)=>p(f,`${s}.grid.cells.${a}.${u}.children.${r}`,i))})})}function c(e,s,i,n=[]){if(!d(e)){i.push({path:s,message:"页应为对象"});return}const t=e.pageWidthMm,a=e.pageHeightMm;(typeof t!="number"||!Number.isFinite(t)||t<=0)&&i.push({path:`${s}.pageWidthMm`,message:`页宽非法: ${JSON.stringify(t)}`}),(typeof a!="number"||!(a>0&&a<5e3))&&i.push({path:`${s}.pageHeightMm`,message:`页高非法: ${JSON.stringify(a)}`}),e.layout!==void 0&&e.layout!=="page"&&e.layout!=="wide"&&i.push({path:`${s}.layout`,message:"布局应为 page 或 wide"});const o=e.components;Array.isArray(o)?Array.isArray(o)&&o.forEach((u,f)=>{h(u,`${s}.components.${f}`,i,n),p(u,`${s}.components.${f}`,i)}):i.push({path:`${s}.components`,message:"components 应为数组"})}function l(e){const s=[],i=[],n=d(e)?e.pages:void 0;if(d(e)&&e.requiresRecalculation!==void 0&&typeof e.requiresRecalculation!="boolean"&&s.push({path:"$.requiresRecalculation",message:"重算能力要求应为布尔值"}),!Array.isArray(n))s.push({path:"$.pages",message:e==null?"渲染计划为空":"渲染计划缺少 pages 数组"});else{n.forEach((a,o)=>c(a,`$.pages.${o}`,s,i)),n.length>2e3&&i.push({path:"$.pages",message:`页数异常大(${n.length} 页),渲染与打印耗时可能显著增加`});const t=n.reduce((a,o)=>a+(d(o)&&Array.isArray(o.components)?o.components.length:0),0);t>5e4&&i.push({path:"$.pages",message:`组件总数异常大(${t} 个),可能触发浏览器性能限制`})}return{ok:s.length===0,errors:s,warnings:i}}function P(e){const s=l(e);if(!s.ok){const i=s.errors.slice(0,3).map(n=>`${n.path}: ${n.message}`).join("; ");throw new Error(`渲染计划校验失败(${s.errors.length} 处): ${i}`)}return e.pages}exports.assertRenderPlan=P;exports.validateComponent=h;exports.validateEditableMetadata=g;exports.validatePage=c;exports.validateRenderPlan=l;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { c as y } from "./code-options-BKXXY7NI.js";
|
|
2
|
+
function $(e, s, i) {
|
|
3
|
+
e.editable !== void 0 && typeof e.editable != "boolean" && i.push({ path: `${s}.editable`, message: "编辑控制应为布尔值" }), e.valueType !== void 0 && !["text", "number", "boolean"].includes(e.valueType) && i.push({ path: `${s}.valueType`, message: "编辑类型应为 text、number 或 boolean" });
|
|
4
|
+
}
|
|
5
|
+
function l(e, s, i) {
|
|
6
|
+
$(e, s, i), e.indentMm !== void 0 && (typeof e.indentMm != "number" || !Number.isFinite(e.indentMm) || e.indentMm < 0) && i.push({ path: `${s}.indentMm`, message: "单元格缩进应为有限非负数" }), e.derived !== void 0 && typeof e.derived != "boolean" && i.push({ path: `${s}.derived`, message: "派生结果标记应为布尔值" }), h(e.source, `${s}.source`, i, !0), e.formula !== void 0 && typeof e.formula != "string" && i.push({ path: `${s}.formula`, message: "单元格公式应为字符串" });
|
|
7
|
+
}
|
|
8
|
+
function h(e, s, i, t = !1) {
|
|
9
|
+
if (e === void 0) return;
|
|
10
|
+
if (!e || typeof e != "object" || Array.isArray(e)) {
|
|
11
|
+
i.push({ path: s, message: "业务来源应为对象" });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const n = e;
|
|
15
|
+
for (const a of ["datasetId", ...t ? ["field"] : []])
|
|
16
|
+
(typeof n[a] != "string" || !n[a].trim()) && i.push({ path: `${s}.${a}`, message: "业务标识应为非空字符串" });
|
|
17
|
+
for (const a of ["rowKey", "revision"]) {
|
|
18
|
+
const o = n[a];
|
|
19
|
+
o === void 0 && !(t && a === "rowKey") || typeof o != "string" && !(typeof o == "number" && Number.isFinite(o)) && i.push({ path: `${s}.${a}`, message: "业务键及修订号应为字符串或有限数字" });
|
|
20
|
+
}
|
|
21
|
+
n.sourceToken !== void 0 && typeof n.sourceToken != "string" && i.push({ path: `${s}.sourceToken`, message: "来源令牌应为字符串" });
|
|
22
|
+
}
|
|
23
|
+
const v = /* @__PURE__ */ new Set([
|
|
24
|
+
"text",
|
|
25
|
+
"image",
|
|
26
|
+
"barcode",
|
|
27
|
+
"qrcode",
|
|
28
|
+
"chart",
|
|
29
|
+
"line",
|
|
30
|
+
"rect",
|
|
31
|
+
"ellipse"
|
|
32
|
+
]);
|
|
33
|
+
function f(e) {
|
|
34
|
+
return typeof e == "object" && e !== null && !Array.isArray(e);
|
|
35
|
+
}
|
|
36
|
+
function A(e, s, i, t) {
|
|
37
|
+
const n = e[s];
|
|
38
|
+
(typeof n != "number" || !Number.isFinite(n)) && t.push({ path: `${i}.${s}`, message: `应为有限数字,实际 ${JSON.stringify(n)}` });
|
|
39
|
+
}
|
|
40
|
+
function b(e, s, i) {
|
|
41
|
+
if (e !== void 0) {
|
|
42
|
+
const t = `${s}.table`;
|
|
43
|
+
if (!f(e)) i.push({ path: t, message: "逻辑表来源应为对象" });
|
|
44
|
+
else {
|
|
45
|
+
h(e.source, `${t}.source`, i), (typeof e.id != "string" || !e.id.trim()) && i.push({ path: `${t}.id`, message: "逻辑表 ID 应为非空字符串" });
|
|
46
|
+
const n = e.role;
|
|
47
|
+
["header", "body", "group-header", "subtotal", "grand-total"].includes(n) || i.push({ path: `${t}.role`, message: "未知逻辑表行角色" });
|
|
48
|
+
const a = e.rowIndex;
|
|
49
|
+
(typeof a != "number" || !Number.isInteger(a) || (n === "header" ? a !== -1 : a < 0)) && i.push({ path: `${t}.rowIndex`, message: "表头索引应为 -1,内容行索引应为非负整数" }), (!Array.isArray(e.columnKeys) || e.columnKeys.some((o) => typeof o != "string")) && i.push({ path: `${t}.columnKeys`, message: "逻辑列字段应为字符串数组" }), e.layout !== void 0 && e.layout !== "page" && e.layout !== "wide" && i.push({ path: `${t}.layout`, message: "布局应为 page 或 wide" }), e.title !== void 0 && typeof e.title != "string" && i.push({ path: `${t}.title`, message: "逻辑表名称应为字符串" });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function M(e, s, i, t) {
|
|
54
|
+
if (e !== void 0)
|
|
55
|
+
if (!f(e) || !Array.isArray(e.cells))
|
|
56
|
+
i.push({ path: `${s}.grid.cells`, message: "grid.cells 应为二维数组" });
|
|
57
|
+
else {
|
|
58
|
+
const n = e.paddingMm;
|
|
59
|
+
n !== void 0 && (typeof n != "number" || !Number.isFinite(n) || n < 0) && i.push({ path: `${s}.grid.paddingMm`, message: "单元格内距应为有限非负数" }), e.cells.forEach((a, o) => {
|
|
60
|
+
if (!Array.isArray(a)) {
|
|
61
|
+
i.push({ path: `${s}.grid.cells.${o}`, message: "行应为数组" });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
a.forEach((u, d) => {
|
|
65
|
+
if (u == null) return;
|
|
66
|
+
const r = `${s}.grid.cells.${o}.${d}`;
|
|
67
|
+
if (!f(u)) {
|
|
68
|
+
i.push({ path: r, message: "网格单元格应为对象或 null" });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
l(u, r, i), Array.isArray(u.children) && u.children.forEach((p, c) => {
|
|
72
|
+
g(p, `${s}.grid.cells.${o}.${d}.children.${c}`, i, t);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function w(e, s, i) {
|
|
79
|
+
e !== void 0 && (Array.isArray(e) ? e.forEach((t, n) => {
|
|
80
|
+
(!f(t) || !Array.isArray(t.segments)) && i.push({ path: `${s}.richParagraphs.${n}`, message: "段落缺少 segments 数组" });
|
|
81
|
+
}) : i.push({ path: `${s}.richParagraphs`, message: "richParagraphs 应为数组" }));
|
|
82
|
+
}
|
|
83
|
+
function g(e, s, i, t = []) {
|
|
84
|
+
if (!f(e)) {
|
|
85
|
+
i.push({ path: s, message: "组件应为对象" });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const n = e.kind;
|
|
89
|
+
typeof n != "string" ? i.push({ path: `${s}.kind`, message: "组件缺少 kind 字符串" }) : v.has(n) || t.push({
|
|
90
|
+
path: `${s}.kind`,
|
|
91
|
+
message: `未知组件类型 ${JSON.stringify(n)},将以兜底方式渲染`
|
|
92
|
+
});
|
|
93
|
+
for (const a of ["leftMm", "topMm", "widthMm", "heightMm"])
|
|
94
|
+
A(e, a, s, i);
|
|
95
|
+
typeof e.leftMm == "number" && e.leftMm < -100 && i.push({ path: `${s}.leftMm`, message: "几何数值异常(leftMm<-100)" });
|
|
96
|
+
for (const a of ["widthMm", "heightMm"])
|
|
97
|
+
typeof e[a] == "number" && e[a] < 0 && i.push({ path: `${s}.${a}`, message: "组件尺寸不能为负数" });
|
|
98
|
+
b(e.table, s, i), k(e.code, n, s, i), e.pageAnchor !== void 0 && !["header", "footer"].includes(e.pageAnchor) && i.push({ path: `${s}.pageAnchor`, message: "页面锚点应为 header 或 footer" }), e.lineDirection !== void 0 && !["down", "up"].includes(e.lineDirection) && i.push({ path: `${s}.lineDirection`, message: "线段方向应为 down 或 up" }), M(e.grid, s, i, t), w(e.richParagraphs, s, i);
|
|
99
|
+
}
|
|
100
|
+
function k(e, s, i, t) {
|
|
101
|
+
if (e !== void 0)
|
|
102
|
+
for (const n of y(e, s)) t.push({ path: `${i}.code${n.path ? `.${n.path}` : ""}`, message: n.message });
|
|
103
|
+
}
|
|
104
|
+
function m(e, s, i) {
|
|
105
|
+
if (!f(e)) return;
|
|
106
|
+
e.binding !== void 0 && i.push({ path: `${s}.binding`, message: "渲染计划不允许未解析字段绑定" });
|
|
107
|
+
const t = e.grid;
|
|
108
|
+
!f(t) || !Array.isArray(t.cells) || t.cells.forEach((n, a) => {
|
|
109
|
+
Array.isArray(n) && n.forEach((o, u) => {
|
|
110
|
+
!f(o) || !Array.isArray(o.children) || o.children.forEach((d, r) => m(d, `${s}.grid.cells.${a}.${u}.children.${r}`, i));
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function N(e, s, i, t = []) {
|
|
115
|
+
if (!f(e)) {
|
|
116
|
+
i.push({ path: s, message: "页应为对象" });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const n = e.pageWidthMm, a = e.pageHeightMm;
|
|
120
|
+
(typeof n != "number" || !Number.isFinite(n) || n <= 0) && i.push({ path: `${s}.pageWidthMm`, message: `页宽非法: ${JSON.stringify(n)}` }), (typeof a != "number" || !(a > 0 && a < 5e3)) && i.push({ path: `${s}.pageHeightMm`, message: `页高非法: ${JSON.stringify(a)}` }), e.layout !== void 0 && e.layout !== "page" && e.layout !== "wide" && i.push({ path: `${s}.layout`, message: "布局应为 page 或 wide" });
|
|
121
|
+
const o = e.components;
|
|
122
|
+
Array.isArray(o) ? Array.isArray(o) && o.forEach((u, d) => {
|
|
123
|
+
g(u, `${s}.components.${d}`, i, t), m(u, `${s}.components.${d}`, i);
|
|
124
|
+
}) : i.push({ path: `${s}.components`, message: "components 应为数组" });
|
|
125
|
+
}
|
|
126
|
+
function E(e) {
|
|
127
|
+
const s = [], i = [], t = f(e) ? e.pages : void 0;
|
|
128
|
+
if (f(e) && e.requiresRecalculation !== void 0 && typeof e.requiresRecalculation != "boolean" && s.push({ path: "$.requiresRecalculation", message: "重算能力要求应为布尔值" }), !Array.isArray(t))
|
|
129
|
+
s.push({
|
|
130
|
+
path: "$.pages",
|
|
131
|
+
message: e == null ? "渲染计划为空" : "渲染计划缺少 pages 数组"
|
|
132
|
+
});
|
|
133
|
+
else {
|
|
134
|
+
t.forEach((a, o) => N(a, `$.pages.${o}`, s, i)), t.length > 2e3 && i.push({
|
|
135
|
+
path: "$.pages",
|
|
136
|
+
message: `页数异常大(${t.length} 页),渲染与打印耗时可能显著增加`
|
|
137
|
+
});
|
|
138
|
+
const n = t.reduce(
|
|
139
|
+
(a, o) => a + (f(o) && Array.isArray(o.components) ? o.components.length : 0),
|
|
140
|
+
0
|
|
141
|
+
);
|
|
142
|
+
n > 5e4 && i.push({
|
|
143
|
+
path: "$.pages",
|
|
144
|
+
message: `组件总数异常大(${n} 个),可能触发浏览器性能限制`
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return { ok: s.length === 0, errors: s, warnings: i };
|
|
148
|
+
}
|
|
149
|
+
function I(e) {
|
|
150
|
+
const s = E(e);
|
|
151
|
+
if (!s.ok) {
|
|
152
|
+
const i = s.errors.slice(0, 3).map((t) => `${t.path}: ${t.message}`).join("; ");
|
|
153
|
+
throw new Error(`渲染计划校验失败(${s.errors.length} 处): ${i}`);
|
|
154
|
+
}
|
|
155
|
+
return e.pages;
|
|
156
|
+
}
|
|
157
|
+
export {
|
|
158
|
+
I as a,
|
|
159
|
+
N as b,
|
|
160
|
+
E as c,
|
|
161
|
+
$ as d,
|
|
162
|
+
g as v
|
|
163
|
+
};
|
package/dist/vue/async.d.cts
CHANGED
|
@@ -36,6 +36,39 @@ declare interface AssetRenderOptions extends OutputDiagnosticOptions {
|
|
|
36
36
|
assetFailure?: "throw" | "placeholder";
|
|
37
37
|
signal?: AbortSignal;
|
|
38
38
|
}
|
|
39
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
40
|
+
declare interface CodeOptions {
|
|
41
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
42
|
+
value?: string;
|
|
43
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
44
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
45
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
46
|
+
quietZoneModules?: number;
|
|
47
|
+
/** Human-readable content below a linear barcode. */
|
|
48
|
+
showText?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
51
|
+
declare interface CodeOptions_2 {
|
|
52
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
53
|
+
value?: string;
|
|
54
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
55
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
56
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
57
|
+
quietZoneModules?: number;
|
|
58
|
+
/** Human-readable content below a linear barcode. */
|
|
59
|
+
showText?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
62
|
+
declare interface CodeOptions_3 {
|
|
63
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
64
|
+
value?: string;
|
|
65
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
66
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
67
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
68
|
+
quietZoneModules?: number;
|
|
69
|
+
/** Human-readable content below a linear barcode. */
|
|
70
|
+
showText?: boolean;
|
|
71
|
+
}
|
|
39
72
|
/**
|
|
40
73
|
* 列值格式化(声明式、JSON 可序列化)。
|
|
41
74
|
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
@@ -80,6 +113,52 @@ declare type ColumnFormat_2 = {
|
|
|
80
113
|
kind: "date";
|
|
81
114
|
pattern?: string;
|
|
82
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* 列值格式化(声明式、JSON 可序列化)。
|
|
118
|
+
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
119
|
+
* 三后端(DOM/Canvas/PDF)零改动。
|
|
120
|
+
*
|
|
121
|
+
* 语义约定(v0.9 固化):
|
|
122
|
+
* - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
|
|
123
|
+
* - number.thousands 默认 false(千分位显式开启)
|
|
124
|
+
* - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
|
|
125
|
+
* 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
|
|
126
|
+
*/
|
|
127
|
+
declare type ColumnFormat_3 = {
|
|
128
|
+
kind: "number";
|
|
129
|
+
thousands?: boolean;
|
|
130
|
+
digits?: number;
|
|
131
|
+
} | {
|
|
132
|
+
kind: "percent";
|
|
133
|
+
digits?: number;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "date";
|
|
136
|
+
pattern?: string;
|
|
137
|
+
};
|
|
138
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
139
|
+
declare interface ComponentBinding {
|
|
140
|
+
field: string;
|
|
141
|
+
format?: ValueFormat;
|
|
142
|
+
prefix?: string;
|
|
143
|
+
suffix?: string;
|
|
144
|
+
emptyText?: string;
|
|
145
|
+
}
|
|
146
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
147
|
+
declare interface ComponentBinding_2 {
|
|
148
|
+
field: string;
|
|
149
|
+
format?: ValueFormat_2;
|
|
150
|
+
prefix?: string;
|
|
151
|
+
suffix?: string;
|
|
152
|
+
emptyText?: string;
|
|
153
|
+
}
|
|
154
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
155
|
+
declare interface ComponentBinding_3 {
|
|
156
|
+
field: string;
|
|
157
|
+
format?: ValueFormat_3;
|
|
158
|
+
prefix?: string;
|
|
159
|
+
suffix?: string;
|
|
160
|
+
emptyText?: string;
|
|
161
|
+
}
|
|
83
162
|
declare interface ComponentImageContext {
|
|
84
163
|
readonly component: Readonly<PlanComponent>;
|
|
85
164
|
readonly pageIndex: number;
|
|
@@ -394,7 +473,7 @@ declare interface ListColumn_2 {
|
|
|
394
473
|
/** 独立的表头样式,优先于列表级表头样式。 */
|
|
395
474
|
headerStyle?: ComponentStyle_3;
|
|
396
475
|
/** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
|
|
397
|
-
format?:
|
|
476
|
+
format?: ColumnFormat_3;
|
|
398
477
|
/** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
|
|
399
478
|
rules?: StyleRule_2[];
|
|
400
479
|
/** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
|
|
@@ -1007,6 +1086,10 @@ declare interface PdfFontCheckResult {
|
|
|
1007
1086
|
/** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
|
|
1008
1087
|
declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
|
|
1009
1088
|
declare interface PlanComponent {
|
|
1089
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1090
|
+
code?: CodeOptions;
|
|
1091
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1092
|
+
binding?: ComponentBinding;
|
|
1010
1093
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1011
1094
|
pageAnchor?: "header" | "footer";
|
|
1012
1095
|
kind: ComponentKind;
|
|
@@ -1031,6 +1114,10 @@ declare interface PlanComponent {
|
|
|
1031
1114
|
fallbackText?: string;
|
|
1032
1115
|
}
|
|
1033
1116
|
declare interface PlanComponent_2 {
|
|
1117
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1118
|
+
code?: CodeOptions_2;
|
|
1119
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1120
|
+
binding?: ComponentBinding_2;
|
|
1034
1121
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1035
1122
|
pageAnchor?: "header" | "footer";
|
|
1036
1123
|
kind: ComponentKind_2;
|
|
@@ -1055,6 +1142,10 @@ declare interface PlanComponent_2 {
|
|
|
1055
1142
|
fallbackText?: string;
|
|
1056
1143
|
}
|
|
1057
1144
|
declare interface PlanComponent_3 {
|
|
1145
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1146
|
+
code?: CodeOptions_3;
|
|
1147
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1148
|
+
binding?: ComponentBinding_3;
|
|
1058
1149
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1059
1150
|
pageAnchor?: "header" | "footer";
|
|
1060
1151
|
kind: ComponentKind_3;
|
|
@@ -1626,7 +1717,7 @@ declare interface ReportSaveResult {
|
|
|
1626
1717
|
declare interface ReportTaskEvent {
|
|
1627
1718
|
taskId: string;
|
|
1628
1719
|
correlationId?: string;
|
|
1629
|
-
stage: "query" | "validate" | "layout" | "encode";
|
|
1720
|
+
stage: "query" | "validate" | "layout" | "assets" | "encode";
|
|
1630
1721
|
status: "started" | "completed" | "failed";
|
|
1631
1722
|
reportId?: string;
|
|
1632
1723
|
completed?: number;
|
|
@@ -1642,12 +1733,16 @@ declare interface ReportTemplate {
|
|
|
1642
1733
|
schemaVersion?: string;
|
|
1643
1734
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1644
1735
|
params?: ReportParamDef[];
|
|
1736
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1737
|
+
repeat?: ReportTemplateRepeat;
|
|
1645
1738
|
pages: TemplatePage[];
|
|
1646
1739
|
}
|
|
1647
1740
|
declare interface ReportTemplate_2 {
|
|
1648
1741
|
schemaVersion?: string;
|
|
1649
1742
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1650
1743
|
params?: ReportParamDef_2[];
|
|
1744
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1745
|
+
repeat?: ReportTemplateRepeat_2;
|
|
1651
1746
|
pages: TemplatePage_2[];
|
|
1652
1747
|
}
|
|
1653
1748
|
/** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
|
|
@@ -1669,6 +1764,24 @@ declare interface ReportTemplateProvider {
|
|
|
1669
1764
|
signal?: AbortSignal;
|
|
1670
1765
|
}): Promise<ReportTemplateDocument | undefined>;
|
|
1671
1766
|
}
|
|
1767
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1768
|
+
declare interface ReportTemplateRepeat {
|
|
1769
|
+
dataset: string;
|
|
1770
|
+
rowKey?: string;
|
|
1771
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1772
|
+
copies?: number | {
|
|
1773
|
+
field: string;
|
|
1774
|
+
};
|
|
1775
|
+
}
|
|
1776
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1777
|
+
declare interface ReportTemplateRepeat_2 {
|
|
1778
|
+
dataset: string;
|
|
1779
|
+
rowKey?: string;
|
|
1780
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1781
|
+
copies?: number | {
|
|
1782
|
+
field: string;
|
|
1783
|
+
};
|
|
1784
|
+
}
|
|
1672
1785
|
declare type ReportTemplateSummary = Omit<ReportTemplateDocument, "template">;
|
|
1673
1786
|
declare interface RichParagraph {
|
|
1674
1787
|
segments: RichSegment[];
|
|
@@ -1822,6 +1935,12 @@ declare interface TreeTableOptions_2 {
|
|
|
1822
1935
|
/** Bounded leaf-to-ancestor aggregate work; default one million. */
|
|
1823
1936
|
maxAggregationVisits?: number;
|
|
1824
1937
|
}
|
|
1938
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1939
|
+
declare type ValueFormat = ColumnFormat;
|
|
1940
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1941
|
+
declare type ValueFormat_2 = ColumnFormat_2;
|
|
1942
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1943
|
+
declare type ValueFormat_3 = ColumnFormat_3;
|
|
1825
1944
|
declare interface XlsxImageOptions {
|
|
1826
1945
|
/** Decoded bytes per unique embedded image; default 16 MiB. */
|
|
1827
1946
|
maxImageBytes?: number;
|
package/dist/vue/async.d.ts
CHANGED
|
@@ -36,6 +36,39 @@ declare interface AssetRenderOptions extends OutputDiagnosticOptions {
|
|
|
36
36
|
assetFailure?: "throw" | "placeholder";
|
|
37
37
|
signal?: AbortSignal;
|
|
38
38
|
}
|
|
39
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
40
|
+
declare interface CodeOptions {
|
|
41
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
42
|
+
value?: string;
|
|
43
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
44
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
45
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
46
|
+
quietZoneModules?: number;
|
|
47
|
+
/** Human-readable content below a linear barcode. */
|
|
48
|
+
showText?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
51
|
+
declare interface CodeOptions_2 {
|
|
52
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
53
|
+
value?: string;
|
|
54
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
55
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
56
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
57
|
+
quietZoneModules?: number;
|
|
58
|
+
/** Human-readable content below a linear barcode. */
|
|
59
|
+
showText?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
62
|
+
declare interface CodeOptions_3 {
|
|
63
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
64
|
+
value?: string;
|
|
65
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
66
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
67
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
68
|
+
quietZoneModules?: number;
|
|
69
|
+
/** Human-readable content below a linear barcode. */
|
|
70
|
+
showText?: boolean;
|
|
71
|
+
}
|
|
39
72
|
/**
|
|
40
73
|
* 列值格式化(声明式、JSON 可序列化)。
|
|
41
74
|
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
@@ -80,6 +113,52 @@ declare type ColumnFormat_2 = {
|
|
|
80
113
|
kind: "date";
|
|
81
114
|
pattern?: string;
|
|
82
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* 列值格式化(声明式、JSON 可序列化)。
|
|
118
|
+
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
119
|
+
* 三后端(DOM/Canvas/PDF)零改动。
|
|
120
|
+
*
|
|
121
|
+
* 语义约定(v0.9 固化):
|
|
122
|
+
* - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
|
|
123
|
+
* - number.thousands 默认 false(千分位显式开启)
|
|
124
|
+
* - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
|
|
125
|
+
* 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
|
|
126
|
+
*/
|
|
127
|
+
declare type ColumnFormat_3 = {
|
|
128
|
+
kind: "number";
|
|
129
|
+
thousands?: boolean;
|
|
130
|
+
digits?: number;
|
|
131
|
+
} | {
|
|
132
|
+
kind: "percent";
|
|
133
|
+
digits?: number;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "date";
|
|
136
|
+
pattern?: string;
|
|
137
|
+
};
|
|
138
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
139
|
+
declare interface ComponentBinding {
|
|
140
|
+
field: string;
|
|
141
|
+
format?: ValueFormat;
|
|
142
|
+
prefix?: string;
|
|
143
|
+
suffix?: string;
|
|
144
|
+
emptyText?: string;
|
|
145
|
+
}
|
|
146
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
147
|
+
declare interface ComponentBinding_2 {
|
|
148
|
+
field: string;
|
|
149
|
+
format?: ValueFormat_2;
|
|
150
|
+
prefix?: string;
|
|
151
|
+
suffix?: string;
|
|
152
|
+
emptyText?: string;
|
|
153
|
+
}
|
|
154
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
155
|
+
declare interface ComponentBinding_3 {
|
|
156
|
+
field: string;
|
|
157
|
+
format?: ValueFormat_3;
|
|
158
|
+
prefix?: string;
|
|
159
|
+
suffix?: string;
|
|
160
|
+
emptyText?: string;
|
|
161
|
+
}
|
|
83
162
|
declare interface ComponentImageContext {
|
|
84
163
|
readonly component: Readonly<PlanComponent>;
|
|
85
164
|
readonly pageIndex: number;
|
|
@@ -394,7 +473,7 @@ declare interface ListColumn_2 {
|
|
|
394
473
|
/** 独立的表头样式,优先于列表级表头样式。 */
|
|
395
474
|
headerStyle?: ComponentStyle_3;
|
|
396
475
|
/** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
|
|
397
|
-
format?:
|
|
476
|
+
format?: ColumnFormat_3;
|
|
398
477
|
/** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
|
|
399
478
|
rules?: StyleRule_2[];
|
|
400
479
|
/** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
|
|
@@ -1007,6 +1086,10 @@ declare interface PdfFontCheckResult {
|
|
|
1007
1086
|
/** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
|
|
1008
1087
|
declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
|
|
1009
1088
|
declare interface PlanComponent {
|
|
1089
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1090
|
+
code?: CodeOptions;
|
|
1091
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1092
|
+
binding?: ComponentBinding;
|
|
1010
1093
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1011
1094
|
pageAnchor?: "header" | "footer";
|
|
1012
1095
|
kind: ComponentKind;
|
|
@@ -1031,6 +1114,10 @@ declare interface PlanComponent {
|
|
|
1031
1114
|
fallbackText?: string;
|
|
1032
1115
|
}
|
|
1033
1116
|
declare interface PlanComponent_2 {
|
|
1117
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1118
|
+
code?: CodeOptions_2;
|
|
1119
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1120
|
+
binding?: ComponentBinding_2;
|
|
1034
1121
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1035
1122
|
pageAnchor?: "header" | "footer";
|
|
1036
1123
|
kind: ComponentKind_2;
|
|
@@ -1055,6 +1142,10 @@ declare interface PlanComponent_2 {
|
|
|
1055
1142
|
fallbackText?: string;
|
|
1056
1143
|
}
|
|
1057
1144
|
declare interface PlanComponent_3 {
|
|
1145
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1146
|
+
code?: CodeOptions_3;
|
|
1147
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1148
|
+
binding?: ComponentBinding_3;
|
|
1058
1149
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1059
1150
|
pageAnchor?: "header" | "footer";
|
|
1060
1151
|
kind: ComponentKind_3;
|
|
@@ -1626,7 +1717,7 @@ declare interface ReportSaveResult {
|
|
|
1626
1717
|
declare interface ReportTaskEvent {
|
|
1627
1718
|
taskId: string;
|
|
1628
1719
|
correlationId?: string;
|
|
1629
|
-
stage: "query" | "validate" | "layout" | "encode";
|
|
1720
|
+
stage: "query" | "validate" | "layout" | "assets" | "encode";
|
|
1630
1721
|
status: "started" | "completed" | "failed";
|
|
1631
1722
|
reportId?: string;
|
|
1632
1723
|
completed?: number;
|
|
@@ -1642,12 +1733,16 @@ declare interface ReportTemplate {
|
|
|
1642
1733
|
schemaVersion?: string;
|
|
1643
1734
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1644
1735
|
params?: ReportParamDef[];
|
|
1736
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1737
|
+
repeat?: ReportTemplateRepeat;
|
|
1645
1738
|
pages: TemplatePage[];
|
|
1646
1739
|
}
|
|
1647
1740
|
declare interface ReportTemplate_2 {
|
|
1648
1741
|
schemaVersion?: string;
|
|
1649
1742
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1650
1743
|
params?: ReportParamDef_2[];
|
|
1744
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1745
|
+
repeat?: ReportTemplateRepeat_2;
|
|
1651
1746
|
pages: TemplatePage_2[];
|
|
1652
1747
|
}
|
|
1653
1748
|
/** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
|
|
@@ -1669,6 +1764,24 @@ declare interface ReportTemplateProvider {
|
|
|
1669
1764
|
signal?: AbortSignal;
|
|
1670
1765
|
}): Promise<ReportTemplateDocument | undefined>;
|
|
1671
1766
|
}
|
|
1767
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1768
|
+
declare interface ReportTemplateRepeat {
|
|
1769
|
+
dataset: string;
|
|
1770
|
+
rowKey?: string;
|
|
1771
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1772
|
+
copies?: number | {
|
|
1773
|
+
field: string;
|
|
1774
|
+
};
|
|
1775
|
+
}
|
|
1776
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1777
|
+
declare interface ReportTemplateRepeat_2 {
|
|
1778
|
+
dataset: string;
|
|
1779
|
+
rowKey?: string;
|
|
1780
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1781
|
+
copies?: number | {
|
|
1782
|
+
field: string;
|
|
1783
|
+
};
|
|
1784
|
+
}
|
|
1672
1785
|
declare type ReportTemplateSummary = Omit<ReportTemplateDocument, "template">;
|
|
1673
1786
|
declare interface RichParagraph {
|
|
1674
1787
|
segments: RichSegment[];
|
|
@@ -1822,6 +1935,12 @@ declare interface TreeTableOptions_2 {
|
|
|
1822
1935
|
/** Bounded leaf-to-ancestor aggregate work; default one million. */
|
|
1823
1936
|
maxAggregationVisits?: number;
|
|
1824
1937
|
}
|
|
1938
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1939
|
+
declare type ValueFormat = ColumnFormat;
|
|
1940
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1941
|
+
declare type ValueFormat_2 = ColumnFormat_2;
|
|
1942
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1943
|
+
declare type ValueFormat_3 = ColumnFormat_3;
|
|
1825
1944
|
declare interface XlsxImageOptions {
|
|
1826
1945
|
/** Decoded bytes per unique embedded image; default 16 MiB. */
|
|
1827
1946
|
maxImageBytes?: number;
|