@agile-team/mach-report 2.8.3 → 2.9.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 +28 -10
- package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +1 -0
- package/dist/ExcelBindingWizard-RLJIXKKG.js +816 -0
- package/dist/{ReportPreview-DRBAUkxj.js → ReportPreview-B5ZNEasW.js} +23 -22
- package/dist/ReportPreview-DRtVPUYo.cjs +6 -0
- package/dist/RuleEditor-N4qnMZ-Z.cjs +1 -0
- package/dist/RuleEditor-ynnUEK0s.js +1575 -0
- package/dist/TemplateReviewPanel-C_Lmzis6.cjs +1 -0
- package/dist/TemplateReviewPanel-Cn32OY4_.js +173 -0
- package/dist/{_plugin-vue_export-helper-DPbiz14D.js → _plugin-vue_export-helper-8SL1F89S.js} +2 -2
- package/dist/analytics.cjs +1 -1
- package/dist/analytics.d.cts +188 -5
- package/dist/analytics.d.ts +188 -5
- package/dist/analytics.js +68 -202
- package/dist/{assets-B9qJku3V.js → assets-DDsfEi8R.js} +3 -3
- package/dist/{assets-RZan7EyL.cjs → assets-ahTRUXRk.cjs} +1 -1
- package/dist/binding-preview-B5834rml.cjs +2 -0
- package/dist/binding-preview-ChXjN5L5.js +649 -0
- package/dist/{capabilities-joSutDF8.js → capabilities-Cm9hZ3uV.js} +5 -5
- package/dist/{capabilities-xGTpnPjJ.cjs → capabilities-DYzWL7KS.cjs} +1 -1
- package/dist/dataset-BkRmwgeJ.cjs +1 -0
- package/dist/dataset-H5pFuQGU.js +121 -0
- package/dist/defaults-DXhiM1ZD.js +10 -0
- package/dist/defaults-xhmcLLrf.cjs +1 -0
- package/dist/designer.cjs +2 -1
- package/dist/designer.d.cts +1391 -6
- package/dist/designer.d.ts +1391 -6
- package/dist/designer.js +2636 -673
- package/dist/grid-geometry-BNptEcMm.js +65 -0
- package/dist/grid-geometry-CZ_cYB6O.cjs +1 -0
- package/dist/import-template-CNMLJSQw.js +23030 -0
- package/dist/import-template-CpxunKVp.cjs +29 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +202 -3
- package/dist/index.d.ts +202 -3
- package/dist/index.js +554 -535
- package/dist/matrix-CNPDJxED.js +745 -0
- package/dist/matrix-Div9Ilh3.cjs +1 -0
- package/dist/pdf.cjs +46 -46
- package/dist/pdf.d.cts +2 -0
- package/dist/pdf.d.ts +2 -0
- package/dist/pdf.js +17 -16
- package/dist/{plugin-BurDDMcd.js → plugin-BWwIgZXV.js} +1 -1
- package/dist/{plugin-DSFu51Ua.cjs → plugin-Dg-J1Rbm.cjs} +1 -1
- package/dist/progress-7OSZbFok.js +39 -0
- package/dist/progress-BnLiS5eH.cjs +1 -0
- package/dist/render-plan-7xpGrCEl.cjs +1 -0
- package/dist/render-plan-Ck6koX9L.js +13 -0
- package/dist/server/node.d.cts +62 -0
- package/dist/server/node.d.ts +62 -0
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +373 -145
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +311 -0
- package/dist/server.d.ts +311 -0
- package/dist/server.js +590 -186
- package/dist/{style-Dv5o_x6b.js → style-CQ1PK8ZB.js} +5 -5
- package/dist/style-UgIJSA1F.cjs +1 -0
- package/dist/style.css +1 -1
- package/dist/template-registry-CHMYZ7SD.cjs +1 -0
- package/dist/template-registry-R61AMCr0.js +433 -0
- package/dist/template-review-hvWWQFsi.js +1027 -0
- package/dist/template-review-jEcOfmGr.cjs +1 -0
- package/dist/textwrap-CWHyzkBH.cjs +4 -0
- package/dist/{textwrap-DOl04hCQ.js → textwrap-DE1kgcJB.js} +1 -1
- package/dist/{validate-DfHPD8wX.cjs → validate-BDiMqkJC.cjs} +1 -1
- package/dist/{validate-S6CgIm5d.js → validate-DWPF7icl.js} +13 -13
- package/dist/vue/async.d.cts +186 -0
- package/dist/vue/async.d.ts +186 -0
- package/dist/vue/index.d.cts +271 -3
- package/dist/vue/index.d.ts +271 -3
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +4 -4
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +2 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +1 -1
- package/dist/xlsx.cjs +2 -30
- package/dist/xlsx.d.cts +268 -0
- package/dist/xlsx.d.ts +268 -0
- package/dist/xlsx.js +220 -23440
- package/package.json +1 -1
- package/dist/ReportPreview-DjGeWHY-.cjs +0 -6
- package/dist/progress-DD964VAB.js +0 -102
- package/dist/progress-KvhwXZ1Q.cjs +0 -1
- package/dist/render-plan-CckPEQyf.cjs +0 -1
- package/dist/render-plan-uzZYYSy1.js +0 -19
- package/dist/report-source-BXHNy_AD.js +0 -755
- package/dist/report-source-CCAvFE3t.cjs +0 -1
- package/dist/style-CpwiOPyB.cjs +0 -1
- package/dist/template-registry-DWExx0gU.cjs +0 -1
- package/dist/template-registry-NpOakidD.js +0 -354
- package/dist/textwrap-CnGsEum6.cjs +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as l } from "./progress-
|
|
2
|
-
import {
|
|
1
|
+
import { a as l } from "./progress-7OSZbFok.js";
|
|
2
|
+
import { a as S, i as w } from "./render-plan-Ck6koX9L.js";
|
|
3
3
|
function E(e, t) {
|
|
4
4
|
l(t.signal);
|
|
5
5
|
try {
|
|
@@ -13,13 +13,13 @@ class O extends Error {
|
|
|
13
13
|
super(`Output contains ${t.length} known fidelity issue(s): ${t[0]?.code}`), this.diagnostics = t, this.code = "output-fidelity", this.name = "OutputFidelityError";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
const
|
|
16
|
+
const $ = /* @__PURE__ */ new Set(["text", "rect", "line", "ellipse"]), b = /* @__PURE__ */ new Set(["image", "chart", "barcode", "qrcode"]);
|
|
17
17
|
function N(e, t) {
|
|
18
18
|
if (!e.grid) {
|
|
19
19
|
if (w(e))
|
|
20
20
|
return t === "xlsx" ? { code: "unsupported-component", message: "XLSX data export omits image-backed components; use PDF or PNG for visual output." } : t === "pdf" && !/^data:image\/(png|jpe?g);base64,/i.test(e.imageData) ? { code: "unsupported-image-format", message: "PDF accepts PNG or JPEG data URLs; convert this image before exporting." } : void 0;
|
|
21
|
-
if (
|
|
22
|
-
if (
|
|
21
|
+
if (b.has(e.kind)) return { code: "missing-image", message: `${e.kind} requires imageData or a renderer adapter before output.` };
|
|
22
|
+
if (!$.has(e.kind)) return { code: "unsupported-component", message: `Unsupported component kind: ${e.kind}.` };
|
|
23
23
|
if (t === "xlsx" && e.kind !== "text") return { code: "unsupported-component", message: `XLSX data export omits ${e.kind} geometry.` };
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const l=require("./progress-
|
|
1
|
+
"use strict";const l=require("./progress-BnLiS5eH.cjs"),y=require("./render-plan-7xpGrCEl.cjs");function v(e,t){l.assertOutputActive(t.signal);try{t.onDiagnostic?.(e)}catch{}l.assertOutputActive(t.signal)}class D extends Error{constructor(t){super(`Output contains ${t.length} known fidelity issue(s): ${t[0]?.code}`),this.diagnostics=t,this.code="output-fidelity",this.name="OutputFidelityError"}}const b=new Set(["text","rect","line","ellipse"]),$=new Set(["image","chart","barcode","qrcode"]);function C(e,t){if(!e.grid){if(y.isImageBackedComponent(e))return t==="xlsx"?{code:"unsupported-component",message:"XLSX data export omits image-backed components; use PDF or PNG for visual output."}:t==="pdf"&&!/^data:image\/(png|jpe?g);base64,/i.test(e.imageData)?{code:"unsupported-image-format",message:"PDF accepts PNG or JPEG data URLs; convert this image before exporting."}:void 0;if($.has(e.kind))return{code:"missing-image",message:`${e.kind} requires imageData or a renderer adapter before output.`};if(!b.has(e.kind))return{code:"unsupported-component",message:`Unsupported component kind: ${e.kind}.`};if(t==="xlsx"&&e.kind!=="text")return{code:"unsupported-component",message:`XLSX data export omits ${e.kind} geometry.`}}}function u(e,t,i,s,n){return{...n,severity:"warning",format:t,pageIndex:i,componentIndex:s,kind:e.kind,nid:e.nid}}function h(e,t){if(!e||t==="dom")return;const i=[];return e.rotateDeg&&i.push("rotateDeg"),e.opacity!==void 0&&e.opacity!==1&&i.push("opacity"),t!=="xlsx"&&e.align==="justify"&&i.push("justify"),t==="canvas"&&e.underline&&i.push("underline"),t==="xlsx"&&e.letterSpacing&&i.push("letterSpacing"),i.length?`${t} does not preserve these styles: ${i.join(", ")}.`:void 0}function O(e,t,i,s,n,r,o){if(o.has(e))return;const k=new Set(o).add(e),p=C(e,t);p&&r.push({...u(e,t,i,s,p),componentPath:n});const g=h(e.style,t);g&&r.push({...u(e,t,i,s,{code:"unsupported-style",message:g}),componentPath:n}),y.isRichText(e)&&t!=="dom"&&r.push(u(e,t,i,s,{code:"rich-text-flattened",message:"Rich text is exported as plain text; inline styles are not preserved."}));for(const[d,S]of(e.grid?.cells??[]).entries())for(const[c,a]of S.entries()){const f=h(a?.style,t);if(f&&r.push({...u(e,t,i,s,{code:"unsupported-style",message:f}),componentPath:[...n,d,c]}),a?.children?.length&&t!=="dom")r.push({...u(e,t,i,s,{code:"nested-components-omitted",message:"Nested grid components are omitted; cell text is preserved."}),componentPath:[...n,d,c]});else if(t==="dom")for(const[w,E]of(a?.children??[]).entries())O(E,t,i,s,[...n,d,c,w],r,k)}}function x(e,t){const i=[];return e.pages.forEach((s,n)=>s.components.forEach((r,o)=>O(r,t,n,o,[],i,new Set))),i}function F(e,t,i){l.assertOutputActive(i.signal);const s=x(e,t);if(s.forEach(n=>v(n,i)),i.fidelity==="strict"&&s.length)throw new D(s);return s}exports.OutputFidelityError=D;exports.inspectOutputCapabilities=x;exports.notifyOutputDiagnostic=v;exports.reportOutputDiagnostics=F;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const c=["text","number","boolean","date","decimal"],p=new Set(["__proto__","prototype","constructor"]);function i(e){throw new Error(`数据契约无效:${e}`)}function g(e){(!e||!Array.isArray(e.fields)||!e.fields.length||e.fields.length>2048)&&i("fields 应包含 1–2048 个字段");const n=new Set;for(const t of e.fields)(!t||typeof t.field!="string"||!t.field.trim()||p.has(t.field)||n.has(t.field))&&i("字段名应安全、非空且唯一"),n.add(t.field),c.includes(t.type)||i(`未知字段类型 ${t.type}`),x(t),l(t),d(t);b(e,n)}function d(e){e.enum!==void 0&&(!Array.isArray(e.enum)||!e.enum.length||e.enum.some(n=>!f(n,e.type)))&&i("enum 应为匹配字段类型的非空标量数组")}function b(e,n){e.rowKey!==void 0&&((typeof e.rowKey!="string"||!e.rowKey.trim()||!n.has(e.rowKey))&&i("rowKey 应为引用已声明字段的非空字符串"),e.fields.find(t=>t.field===e.rowKey)?.type==="boolean"&&i("布尔字段不能作为业务主键"))}function l(e){for(const n of["label","unit"])e[n]!==void 0&&typeof e[n]!="string"&&i(`${n} 应为字符串`);for(const n of["required","nullable"])e[n]!==void 0&&typeof e[n]!="boolean"&&i(`${n} 应为布尔值`);e.semanticRole!==void 0&&!["identifier","dimension","measure","date","text"].includes(e.semanticRole)&&i("未知字段语义")}function x(e){for(const n of["min","max","minLength","maxLength"]){const t=e[n];t!==void 0&&(!Number.isFinite(t)||n.includes("Length")&&(!Number.isInteger(t)||t<0))&&i(`${n} 无效`)}e.min!==void 0&&e.max!==void 0&&e.min>e.max&&i("min 不能超过 max"),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&i("minLength 不能超过 maxLength"),e.type!=="number"&&(e.min!==void 0||e.max!==void 0)&&i("min/max 仅适用于 number,精确小数文本需业务校验"),["number","boolean"].includes(e.type)&&(e.minLength!==void 0||e.maxLength!==void 0)&&i("长度约束仅适用于文本类型")}function w(e){const n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!n)return!1;const t=Number(n[1]),r=Number(n[2]),s=Number(n[3]),m=t%4===0&&(t%100!==0||t%400===0);return t>0&&r>=1&&r<=12&&s>=1&&s<=[31,m?29:28,31,30,31,30,31,31,30,31,30,31][r-1]}function f(e,n){return n==="number"?typeof e=="number"&&Number.isFinite(e):n==="boolean"?typeof e=="boolean":typeof e!="string"?!1:n==="date"?w(e):n==="decimal"?e.length<=1e4&&/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e):!0}function L(e,n){if(e==null)return n.required||e===null&&n.nullable===!1?{code:"required",message:"缺少必需字段值"}:void 0;if(!f(e,n.type))return{code:"type",message:`值应为 ${n.type},不会自动转换原始值`};if(n.enum&&!n.enum.includes(e))return{code:"enum",message:"值不在允许的枚举中"};if(typeof e=="number"&&(n.min!==void 0&&e<n.min||n.max!==void 0&&e>n.max))return{code:"range",message:"数值超出范围"};if(typeof e=="string"&&!v(e,n))return{code:"range",message:"文本长度超出范围"}}function v(e,n){if(n.minLength===void 0&&n.maxLength===void 0)return!0;let t=0;for(const r of e)t++;return(n.minLength===void 0||t>=n.minLength)&&(n.maxLength===void 0||t<=n.maxLength)}function h(e,n){const t=e??n;if(!Number.isInteger(t)||t<1)throw new Error("数据校验预算应为正整数");return t}function $(e,n,t){const r=Object.prototype.hasOwnProperty.call(e,n)?e[n]:void 0;if((typeof r!="string"||!r.trim())&&!(typeof r=="number"&&Number.isFinite(r)))return"业务主键应为非空字符串或有限数字";const s=JSON.stringify([typeof r,r]);if(t.has(s))return"业务主键重复";t.add(s)}function K(e,n,t={}){g(n);const r=t.path??"$.rows",s=[],m=h(t.maxIssues,100);if(!Array.isArray(e))return{ok:!1,issues:[{code:"row",path:r,message:"数据集应为对象数组"}]};if(e.length>h(t.maxRows,1e5)||e.length*n.fields.length>h(t.maxCells,2e6))return{ok:!1,issues:[{code:"budget",path:r,message:"数据校验超出行数或单元格预算"}]};const u=new Set;for(let o=0;o<e.length&&s.length<m;o++){const a=e[o];if(!a||typeof a!="object"||Array.isArray(a)){s.push({code:"row",path:`${r}[${o}]`,rowIndex:o,message:"行应为对象"});continue}k(a,n,o,r,u,s,m)}return{ok:s.length===0,issues:s}}function k(e,n,t,r,s,m,u){for(const o of n.fields){if(m.length>=u)return;const a=L(Object.prototype.hasOwnProperty.call(e,o.field)?e[o.field]:void 0,o);a&&m.push({...a,rowIndex:t,field:o.field,path:`${r}[${t}].${o.field}`})}if(n.rowKey&&m.length<u){const o=$(e,n.rowKey,s);o&&m.push({code:"row-key",path:`${r}[${t}].${n.rowKey}`,message:o,rowIndex:t,field:n.rowKey})}}function S(e){return g(e),{$schema:"https://json-schema.org/draft/2020-12/schema",type:"array",items:{type:"object",properties:Object.fromEntries(e.fields.map(t=>[t.field,N(t,t.field===e.rowKey)])),required:e.fields.filter(t=>t.required||t.field===e.rowKey).map(t=>t.field),additionalProperties:!0},...e.rowKey?{"x-report-rowKey":e.rowKey}:{}}}function N(e,n){const t=!n&&e.nullable!==!1&&!e.required;return{type:t?[y(e.type),"null"]:y(e.type),...e.label?{title:e.label}:{},...e.type==="date"?{format:"date"}:{},...e.type==="decimal"?{pattern:"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$"}:{},...e.enum?{enum:t?[...e.enum,null]:[...e.enum]}:{},...e.min===void 0?{}:{minimum:e.min},...e.max===void 0?{}:{maximum:e.max},...R(e,n),...n&&e.type==="text"?{pattern:"\\S"}:{},...e.unit?{"x-report-unit":e.unit}:{},...e.semanticRole?{"x-report-semanticRole":e.semanticRole}:{}}}function R(e,n){const t={};return(e.minLength!==void 0||n&&e.type!=="number")&&(t.minLength=Math.max(e.minLength??0,n?1:0)),e.type==="decimal"?t.maxLength=Math.min(e.maxLength??1e4,1e4):e.maxLength!==void 0&&(t.maxLength=e.maxLength),t}function y(e){return e==="text"||e==="date"||e==="decimal"?"string":e}exports.datasetJsonSchema=S;exports.validateDatasetRows=K;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
const c = ["text", "number", "boolean", "date", "decimal"], p = /* @__PURE__ */ new Set(["__proto__", "prototype", "constructor"]);
|
|
2
|
+
function i(e) {
|
|
3
|
+
throw new Error(`数据契约无效:${e}`);
|
|
4
|
+
}
|
|
5
|
+
function g(e) {
|
|
6
|
+
(!e || !Array.isArray(e.fields) || !e.fields.length || e.fields.length > 2048) && i("fields 应包含 1–2048 个字段");
|
|
7
|
+
const n = /* @__PURE__ */ new Set();
|
|
8
|
+
for (const t of e.fields)
|
|
9
|
+
(!t || typeof t.field != "string" || !t.field.trim() || p.has(t.field) || n.has(t.field)) && i("字段名应安全、非空且唯一"), n.add(t.field), c.includes(t.type) || i(`未知字段类型 ${t.type}`), l(t), x(t), d(t);
|
|
10
|
+
b(e, n);
|
|
11
|
+
}
|
|
12
|
+
function d(e) {
|
|
13
|
+
e.enum !== void 0 && (!Array.isArray(e.enum) || !e.enum.length || e.enum.some((n) => !f(n, e.type))) && i("enum 应为匹配字段类型的非空标量数组");
|
|
14
|
+
}
|
|
15
|
+
function b(e, n) {
|
|
16
|
+
e.rowKey !== void 0 && ((typeof e.rowKey != "string" || !e.rowKey.trim() || !n.has(e.rowKey)) && i("rowKey 应为引用已声明字段的非空字符串"), e.fields.find((t) => t.field === e.rowKey)?.type === "boolean" && i("布尔字段不能作为业务主键"));
|
|
17
|
+
}
|
|
18
|
+
function x(e) {
|
|
19
|
+
for (const n of ["label", "unit"]) e[n] !== void 0 && typeof e[n] != "string" && i(`${n} 应为字符串`);
|
|
20
|
+
for (const n of ["required", "nullable"]) e[n] !== void 0 && typeof e[n] != "boolean" && i(`${n} 应为布尔值`);
|
|
21
|
+
e.semanticRole !== void 0 && !["identifier", "dimension", "measure", "date", "text"].includes(e.semanticRole) && i("未知字段语义");
|
|
22
|
+
}
|
|
23
|
+
function l(e) {
|
|
24
|
+
for (const n of ["min", "max", "minLength", "maxLength"]) {
|
|
25
|
+
const t = e[n];
|
|
26
|
+
t !== void 0 && (!Number.isFinite(t) || n.includes("Length") && (!Number.isInteger(t) || t < 0)) && i(`${n} 无效`);
|
|
27
|
+
}
|
|
28
|
+
e.min !== void 0 && e.max !== void 0 && e.min > e.max && i("min 不能超过 max"), e.minLength !== void 0 && e.maxLength !== void 0 && e.minLength > e.maxLength && i("minLength 不能超过 maxLength"), e.type !== "number" && (e.min !== void 0 || e.max !== void 0) && i("min/max 仅适用于 number,精确小数文本需业务校验"), ["number", "boolean"].includes(e.type) && (e.minLength !== void 0 || e.maxLength !== void 0) && i("长度约束仅适用于文本类型");
|
|
29
|
+
}
|
|
30
|
+
function w(e) {
|
|
31
|
+
const n = /^(\d{4})-(\d{2})-(\d{2})$/.exec(e);
|
|
32
|
+
if (!n) return !1;
|
|
33
|
+
const t = Number(n[1]), r = Number(n[2]), s = Number(n[3]), m = t % 4 === 0 && (t % 100 !== 0 || t % 400 === 0);
|
|
34
|
+
return t > 0 && r >= 1 && r <= 12 && s >= 1 && s <= [31, m ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][r - 1];
|
|
35
|
+
}
|
|
36
|
+
function f(e, n) {
|
|
37
|
+
return n === "number" ? typeof e == "number" && Number.isFinite(e) : n === "boolean" ? typeof e == "boolean" : typeof e != "string" ? !1 : n === "date" ? w(e) : n === "decimal" ? e.length <= 1e4 && /^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e) : !0;
|
|
38
|
+
}
|
|
39
|
+
function L(e, n) {
|
|
40
|
+
if (e == null)
|
|
41
|
+
return n.required || e === null && n.nullable === !1 ? { code: "required", message: "缺少必需字段值" } : void 0;
|
|
42
|
+
if (!f(e, n.type)) return { code: "type", message: `值应为 ${n.type},不会自动转换原始值` };
|
|
43
|
+
if (n.enum && !n.enum.includes(e)) return { code: "enum", message: "值不在允许的枚举中" };
|
|
44
|
+
if (typeof e == "number" && (n.min !== void 0 && e < n.min || n.max !== void 0 && e > n.max)) return { code: "range", message: "数值超出范围" };
|
|
45
|
+
if (typeof e == "string" && !v(e, n)) return { code: "range", message: "文本长度超出范围" };
|
|
46
|
+
}
|
|
47
|
+
function v(e, n) {
|
|
48
|
+
if (n.minLength === void 0 && n.maxLength === void 0) return !0;
|
|
49
|
+
let t = 0;
|
|
50
|
+
for (const r of e) t++;
|
|
51
|
+
return (n.minLength === void 0 || t >= n.minLength) && (n.maxLength === void 0 || t <= n.maxLength);
|
|
52
|
+
}
|
|
53
|
+
function h(e, n) {
|
|
54
|
+
const t = e ?? n;
|
|
55
|
+
if (!Number.isInteger(t) || t < 1) throw new Error("数据校验预算应为正整数");
|
|
56
|
+
return t;
|
|
57
|
+
}
|
|
58
|
+
function $(e, n, t) {
|
|
59
|
+
const r = Object.prototype.hasOwnProperty.call(e, n) ? e[n] : void 0;
|
|
60
|
+
if ((typeof r != "string" || !r.trim()) && !(typeof r == "number" && Number.isFinite(r))) return "业务主键应为非空字符串或有限数字";
|
|
61
|
+
const s = JSON.stringify([typeof r, r]);
|
|
62
|
+
if (t.has(s)) return "业务主键重复";
|
|
63
|
+
t.add(s);
|
|
64
|
+
}
|
|
65
|
+
function S(e, n, t = {}) {
|
|
66
|
+
g(n);
|
|
67
|
+
const r = t.path ?? "$.rows", s = [], m = h(t.maxIssues, 100);
|
|
68
|
+
if (!Array.isArray(e)) return { ok: !1, issues: [{ code: "row", path: r, message: "数据集应为对象数组" }] };
|
|
69
|
+
if (e.length > h(t.maxRows, 1e5) || e.length * n.fields.length > h(t.maxCells, 2e6)) return { ok: !1, issues: [{ code: "budget", path: r, message: "数据校验超出行数或单元格预算" }] };
|
|
70
|
+
const u = /* @__PURE__ */ new Set();
|
|
71
|
+
for (let o = 0; o < e.length && s.length < m; o++) {
|
|
72
|
+
const a = e[o];
|
|
73
|
+
if (!a || typeof a != "object" || Array.isArray(a)) {
|
|
74
|
+
s.push({ code: "row", path: `${r}[${o}]`, rowIndex: o, message: "行应为对象" });
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
K(a, n, o, r, u, s, m);
|
|
78
|
+
}
|
|
79
|
+
return { ok: s.length === 0, issues: s };
|
|
80
|
+
}
|
|
81
|
+
function K(e, n, t, r, s, m, u) {
|
|
82
|
+
for (const o of n.fields) {
|
|
83
|
+
if (m.length >= u) return;
|
|
84
|
+
const a = L(Object.prototype.hasOwnProperty.call(e, o.field) ? e[o.field] : void 0, o);
|
|
85
|
+
a && m.push({ ...a, rowIndex: t, field: o.field, path: `${r}[${t}].${o.field}` });
|
|
86
|
+
}
|
|
87
|
+
if (n.rowKey && m.length < u) {
|
|
88
|
+
const o = $(e, n.rowKey, s);
|
|
89
|
+
o && m.push({ code: "row-key", path: `${r}[${t}].${n.rowKey}`, message: o, rowIndex: t, field: n.rowKey });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function A(e) {
|
|
93
|
+
return g(e), { $schema: "https://json-schema.org/draft/2020-12/schema", type: "array", items: { type: "object", properties: Object.fromEntries(e.fields.map((t) => [t.field, k(t, t.field === e.rowKey)])), required: e.fields.filter((t) => t.required || t.field === e.rowKey).map((t) => t.field), additionalProperties: !0 }, ...e.rowKey ? { "x-report-rowKey": e.rowKey } : {} };
|
|
94
|
+
}
|
|
95
|
+
function k(e, n) {
|
|
96
|
+
const t = !n && e.nullable !== !1 && !e.required;
|
|
97
|
+
return {
|
|
98
|
+
type: t ? [y(e.type), "null"] : y(e.type),
|
|
99
|
+
...e.label ? { title: e.label } : {},
|
|
100
|
+
...e.type === "date" ? { format: "date" } : {},
|
|
101
|
+
...e.type === "decimal" ? { pattern: "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$" } : {},
|
|
102
|
+
...e.enum ? { enum: t ? [...e.enum, null] : [...e.enum] } : {},
|
|
103
|
+
...e.min === void 0 ? {} : { minimum: e.min },
|
|
104
|
+
...e.max === void 0 ? {} : { maximum: e.max },
|
|
105
|
+
...N(e, n),
|
|
106
|
+
...n && e.type === "text" ? { pattern: "\\S" } : {},
|
|
107
|
+
...e.unit ? { "x-report-unit": e.unit } : {},
|
|
108
|
+
...e.semanticRole ? { "x-report-semanticRole": e.semanticRole } : {}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function N(e, n) {
|
|
112
|
+
const t = {};
|
|
113
|
+
return (e.minLength !== void 0 || n && e.type !== "number") && (t.minLength = Math.max(e.minLength ?? 0, n ? 1 : 0)), e.type === "decimal" ? t.maxLength = Math.min(e.maxLength ?? 1e4, 1e4) : e.maxLength !== void 0 && (t.maxLength = e.maxLength), t;
|
|
114
|
+
}
|
|
115
|
+
function y(e) {
|
|
116
|
+
return e === "text" || e === "date" || e === "decimal" ? "string" : e;
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
A as d,
|
|
120
|
+
S as v
|
|
121
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const T='"Microsoft YaHei", sans-serif';const _="#333333",E="#000000",L="1.0.0-mach";exports.DEFAULT_BORDER_PT=.75;exports.DEFAULT_FONT_FAMILY=T;exports.DEFAULT_FONT_PT=10.5;exports.DEFAULT_STROKE_COLOR=_;exports.DEFAULT_TEXT_COLOR=E;exports.LINE_HEIGHT=1.35;exports.SCHEMA_VERSION_MACH=L;
|
package/dist/designer.cjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),Q=require("@agile-team/mach-report/vue"),I=require("./_plugin-vue_export-helper-BLmdZLlg.cjs"),E=require("@agile-team/mach-report");function Z(c,k,u,y){const m=e.ref(0),o=e.ref(""),b=e.ref([]),C=e.computed(()=>c.value.template.pages.flatMap((i,a)=>i.components.flatMap((r,d)=>r.kind==="list"?[{component:r,pageIndex:a,componentIndex:d}]:[]))),S=e.computed(()=>C.value[m.value]?.component),v=e.computed(()=>{const i=S.value;if(!i)return[];const a=i.columns.map(r=>r.headerStyle?.align??r.headerAlign??i.headerStyle?.align??i.headerAlign??r.style?.align??"center");if(i.headerGrid&&k())for(const r of E.resolveGridLayout(i.headerGrid,i.widthMm,100).cells)for(let d=r.ci;d<r.ci+(r.cell.colSpan??1);d++)a[d]=r.cell.style?.align??"left";return a}),f=e.computed(()=>{const i=o.value.trim().toLocaleLowerCase().split(/\s+/).filter(Boolean);return(S.value?.columns??[]).flatMap((a,r)=>{const d=`${a.header} ${a.field}`.toLocaleLowerCase();return i.every(V=>d.includes(V))?[{column:a,index:r}]:[]})});function h(i,a){b.value=a?[...new Set([...b.value,i])]:b.value.filter(r=>r!==i)}function _(i){for(const a of f.value)h(a.index,i)}function p(){b.value=[]}function T(i,a,r){if(!u())return;const d=S.value?.columns[i];d&&(Object.assign(d,{[a]:a==="widthMm"?Number(r):r}),a==="header"&&x(i,String(r)),a==="headerAlign"&&D(i,r),a==="widthMm"&&P(),y())}function P(){const i=C.value[m.value];if(!i)return;const a=i.component,r=c.value.template.pages[i.pageIndex],d=a.columns.map(V=>V.widthMm);a.headerGrid&&(a.headerGrid.colWidthsMm=d),r.layout==="wide"&&d.every(V=>Number.isFinite(V)&&V>0)&&(a.widthMm=d.reduce((V,t)=>V+t,0),r.widthMm=Math.max(...r.components.map(V=>V.leftMm+V.widthMm))+(r.marginRightMm??0))}function x(i,a){const r=S.value;if(!r?.headerGrid)return;const V=E.resolveGridLayout(r.headerGrid,r.widthMm,100).cells.filter(({ci:t,cell:w})=>t<=i&&t+(w.colSpan??1)>i).slice(-1)[0];V&&(Object.assign(V.cell,{text:a,rawText:a,value:a}),r.columns.slice(V.ci,V.ci+(V.cell.colSpan??1)).forEach(t=>{t.header=a}))}function D(i,a){const r=S.value,d=r?.columns[i];if(d?.headerStyle?.align!==void 0&&(d.headerStyle={...d.headerStyle,align:a}),!r?.headerGrid)return;const t=E.resolveGridLayout(r.headerGrid,r.widthMm,100).cells.filter(({ci:w,cell:B})=>w<=i&&w+(B.colSpan??1)>i).slice(-1)[0];t&&(t.cell.style={...t.cell.style,align:a},r.columns.slice(t.ci,t.ci+(t.cell.colSpan??1)).forEach(w=>{w.headerAlign=a,w.headerStyle?.align!==void 0&&(w.headerStyle={...w.headerStyle,align:a})}))}function M(i,a){if(!(!u()||i==="headerAlign"&&a==="auto")){for(const r of b.value){const d=S.value?.columns[r];d&&(Object.assign(d,{[i]:a}),i==="headerAlign"&&D(r,a))}y()}}return{selected:m,query:o,selectedColumns:b,lists:C,activeList:S,headerAlignments:v,visibleColumns:f,toggleColumn:h,selectVisible:_,clearSelection:p,setColumn:T,alignColumns:M}}function ee(c,k={entries:100,bytes:16*1024*1024}){const u=e.ref([c]),y=e.ref(0),m=e.computed(()=>y.value>0),o=e.computed(()=>y.value+1<u.value.length),b=e.computed(()=>u.value[y.value]);function C(f){u.value=[f],y.value=0}function S(f){if(u.value[y.value]===f)return;const h=u.value.slice(0,y.value+1);h.push(f);let _=h.reduce((p,T)=>p+T.length*2,0);for(;h.length>1&&(h.length>k.entries||_>k.bytes);)_-=h.shift().length*2;u.value=h,y.value=u.value.length-1}function v(f){if(!(f<0?!m.value:!o.value))return y.value+=f,u.value[y.value]}return{canUndo:m,canRedo:o,current:b,reset:C,record:S,move:v}}function te(c){const k=e.shallowRef(null),u=e.ref(!1);let y,m=0;function o(S){y?.(S),y=void 0,k.value=null}function b(){m++,o(!1),u.value=!1}async function C(S){b();const v=m,f=c();u.value=!0;try{const h=await new Promise((_,p)=>{if(y=_,!f){k.value=S;return}Promise.resolve().then(()=>m===v?f(S):!1).then(T=>{m===v&&o(T===!0)},T=>{m===v&&(y=void 0,k.value=null,p(T))})});return m===v&&h===!0}finally{m===v&&(u.value=!1)}}return e.onBeforeUnmount(b),{confirmation:k,pending:u,decide:o,request:C,cancel:b}}const ne={title:"报表模板属性编辑器",heading:"模板属性",unpublished:"未发布",dirty:"有未保存修改",reset:"恢复草稿",saving:"正在保存…",save:"保存草稿",name:"模板名称",description:"说明",area:"明细区域",page:"页",header:"表头",field:"业务字段",width:"列宽(mm)",semantic:"字段语义",identifier:"编号",dimension:"分类",measure:"数值",date:"日期",text:"文本",bodyAlign:"正文对齐",headerAlign:"表头对齐",auto:"按字段语义",left:"居左",center:"居中",right:"居右",justify:"两端对齐",editable:"允许编辑",json:"完整模板 JSON",applyJson:"校验并应用 JSON",note:"字段映射应与数据源契约一致。此编辑器维护模板属性;保存由接入方提供的版本服务处理。",invalid:"请先修正模板错误,再预览或保存。"},le={undo:"撤销",redo:"重做",columnsSearch:"搜索列名或字段",columnsSelected:"已选列",selectVisible:"选择当前结果",clearSelection:"清除选择",noColumns:"没有匹配的列",batchBody:"批量正文对齐",batchHeader:"批量表头对齐",chooseAlignment:"选择对齐方式",discardTitle:"保留当前修改?",discardDescription:"当前包含未保存的属性或尚未应用的 JSON,继续将丢弃这些修改。",keepEditing:"继续编辑",discard:"丢弃修改并继续",jsonPending:"JSON 尚未应用。请先校验并应用,或撤销 JSON 修改后继续属性编辑与保存。",fieldsSection:"字段",templateSection:"模板",advancedSection:"高级",sectionsLabel:"模板设置分区",columnDirectory:"字段目录",columnProperties:"字段属性",selectColumn:"选择字段",clearSearch:"清除搜索",fieldsCount:"个字段",templateDetails:"模板信息",advancedTitle:"完整配置",advancedDescription:"用于批量迁移或配置复杂模板。应用前会校验;未应用的内容会受到草稿保护。",templateIdentity:"模板标识",templateRevision:"当前修订",readonly:"只读",ready:"可编辑",previewTitle:"实时预览"},Y={...ne,...le};function oe(c,k){const u=e.ref(E.parseReportTemplate(c.modelValue)),y=e.ref(E.serializeReportTemplate(u.value)),m=e.ref(E.serializeReportTemplate(u.value)),o=e.ref(""),b=e.ref(!1),C=e.computed(()=>({...Y,...c.messages})),S=e.computed(()=>({showExport:!1,showPrint:!1,showPdfWindow:!1,...c.preview,theme:{shellBg:"#f1f5f9",shellFg:"#334155",toolbarBg:"#ffffff",toolbarBorder:"#e2e8f0",toolbarFg:"#334155",btnFg:"#475569",btnBorder:"#cbd5e1",btnHoverBg:"#eff6ff",btnHoverFg:"#1d4ed8",btnActiveBg:"#2563eb",...c.preview?.theme}}));Q.provideMachReportConfig({get defaults(){return S.value}});let v,f=0;const h=e.computed(()=>E.validateReportTemplateDocument(u.value)),_=e.computed(()=>{try{return E.serializeReportTemplate(u.value)!==y.value}catch{return!0}}),p=e.ref(m.value),T=e.computed(()=>m.value!==p.value),P=e.computed(()=>_.value||m.value!==p.value),x=()=>JSON.stringify({document:u.value,json:m.value,appliedJson:p.value}),D=ee(x()),M=te(()=>c.beforeDiscard),i=e.computed(()=>b.value||M.pending.value),a=()=>!c.readonly&&!i.value&&!T.value,r=Z(u,()=>h.value.ok,a,O),{selected:d,lists:V,activeList:t,headerAlignments:w,setColumn:B}=r;e.watch(d,()=>r.clearSelection());const $=e.computed(()=>h.value.ok?Q.createLocalFetcher({draft:{template:u.value.template,datasets:c.datasets??{},params:[]}}):void 0);function N(){f++,v?.abort(),v=void 0,b.value=!1}let A=0;async function R(s="replace",l){if(!P.value)return!0;const n=x();try{return await M.request({reason:s,document:JSON.parse(JSON.stringify(u.value)),replacement:l?E.parseReportTemplate(l):void 0,pendingLocalChanges:!0})&&n===x()}catch(g){return o.value=g instanceof Error?g.message:String(g),!1}}function H(s){N(),u.value=s,y.value=E.serializeReportTemplate(s),m.value=y.value,p.value=m.value,o.value="",d.value=0,r.clearSelection(),D.reset(x())}e.watch(()=>c.modelValue,async s=>{let l;try{l=E.parseReportTemplate(s)}catch(g){o.value=g instanceof Error?g.message:String(g);return}try{if(E.serializeReportTemplate(l)===E.serializeReportTemplate(u.value))return}catch{}const n=++A;if(N(),!await R("replace",l)){n===A&&h.value.ok&&k("update:modelValue",E.parseReportTemplate(u.value));return}n===A&&H(l)}),e.onBeforeUnmount(()=>{A++,N()});function O(){M.cancel(),o.value="",h.value.ok&&(m.value=E.serializeReportTemplate(u.value),p.value=m.value,k("update:modelValue",E.parseReportTemplate(u.value))),D.record(x())}function q(s){a()&&(u.value.name=s,O())}function z(s){a()&&(u.value.description=s,O())}function J(){if(!(c.readonly||i.value))try{const s=E.parseReportTemplate(m.value);if(s.id!==u.value.id)throw new Error("属性编辑不允许更换模板 ID,请另存为新模板");if(s.revision!==u.value.revision)throw new Error("修订号由保存服务管理,不能在 JSON 中修改");u.value=s,d.value=0,r.clearSelection(),O()}catch(s){o.value=s instanceof Error?s.message:String(s)}}async function j(){i.value||c.readonly||!await R("reset")||(H(E.parseReportTemplate(y.value)),k("update:modelValue",E.parseReportTemplate(u.value)))}function F(s){if(i.value||c.readonly)return;D.record(x());const l=D.move(s);if(!l)return;M.cancel();const n=JSON.parse(l);u.value=n.document,m.value=n.json,p.value=n.appliedJson,o.value="",d.value=0,r.clearSelection(),h.value.ok&&k("update:modelValue",E.parseReportTemplate(u.value))}async function U(){if(!c.save||!a()||!h.value.ok)return;const s=++f;v=new AbortController,b.value=!0,o.value="";const l=E.parseReportTemplate(u.value);try{const n=E.parseReportTemplate(await c.save(l,{expectedRevision:l.revision,signal:v.signal}));if(s!==f)return;if(n.id!==l.id)throw new Error("保存服务返回了其他模板的文档");u.value=n,y.value=E.serializeReportTemplate(n),m.value=y.value,p.value=m.value,D.reset(x()),k("saved",E.parseReportTemplate(n)),k("update:modelValue",E.parseReportTemplate(n))}catch(n){s===f&&(o.value=n instanceof Error?n.message:String(n))}finally{s===f&&(b.value=!1,v=void 0)}}const K=e.computed(()=>D.canUndo.value||x()!==D.current.value),W=e.computed(()=>D.canRedo.value&&x()===D.current.value);return{...r,canUndo:K,canRedo:W,undo:()=>F(-1),redo:()=>F(1),pendingLocalChanges:P,jsonPending:T,blocked:i,confirmation:M.confirmation,decideDiscard:M.decide,guardChanges:R,draft:u,json:m,selected:d,error:o,saving:b,dirty:_,validation:h,lists:V,activeList:t,headerAlignments:w,previewOptions:S,fetcher:$,messages:C,setName:q,setDescription:z,setColumn:B,applyJson:J,reset:j,save:U}}function re(c,k,u,y){const m=e.ref("fields"),o=e.ref(c.value[0]?.index??-1),b=e.computed(()=>{const v=u.value?.columns[o.value];return v?{column:v,index:o.value}:void 0});e.watch(y,()=>{c.value.some(v=>v.index===o.value)||(o.value=c.value[0]?.index??-1)}),e.watch(k,()=>{o.value=c.value[0]?.index??-1}),e.watch(u,v=>{v?.columns[o.value]||(o.value=c.value[0]?.index??-1)});function C(v){c.value.some(f=>f.index===v)&&(o.value=v)}function S(v){const f=c.value;if(!f.length)return;const h=Math.max(0,f.findIndex(T=>T.index===o.value)),p={ArrowDown:Math.min(h+1,f.length-1),ArrowUp:Math.max(h-1,0),Home:0,End:f.length-1}[v];if(p!==void 0)return o.value=f[p].index,o.value}return{section:m,activeIndex:o,activeColumn:b,activate:C,moveColumn:S}}const ae=["aria-label","aria-busy"],ie={class:"mr-designer-bar"},se={class:"mr-designer-heading"},ue={class:"mr-designer-actions"},ce={class:"mr-designer-history"},de=["aria-label","title","disabled"],me=["aria-label","title","disabled"],fe=["disabled"],pe=["disabled"],ve=["aria-label"],ge={class:"mr-designer-body"},ye={class:"mr-designer-inspector"},he=["aria-label"],be=["id","aria-selected","aria-controls","tabindex","onClick"],Ee=["id","aria-labelledby"],Se={key:0,class:"mr-designer-area"},Ve=["value"],Ne={key:1,class:"mr-designer-columns"},ke={class:"mr-designer-directory-heading"},_e={class:"mr-designer-search"},De=["aria-label","placeholder"],Ce=["aria-label","title"],Te={class:"mr-designer-column-tools"},we=["disabled"],Be={key:1,role:"status"},xe={key:2},Re=["aria-label"],Me=["aria-label","checked","disabled","onChange"],Ae=["data-column-index","aria-pressed","tabindex","onClick"],je={class:"mr-designer-column-number"},Le={class:"mr-designer-column-name"},$e={key:0,role:"status",class:"mr-designer-empty"},Oe={key:0,class:"mr-designer-batch"},Ie=["aria-label","disabled"],Pe={value:""},Je={value:"auto"},ze={value:"left"},Fe={value:"center"},Ge={value:"right"},He={value:"justify"},qe=["aria-label","disabled"],Ue={value:""},Ke={value:"left"},We={value:"center"},Qe={value:"right"},Xe={value:"justify"},Ye=["disabled"],Ze=["value"],et=["value"],tt=["value"],nt=["value"],lt={value:"identifier"},ot={value:"dimension"},rt={value:"measure"},at={value:"date"},it={value:"text"},st=["value"],ut={value:"auto"},ct={value:"left"},dt={value:"center"},mt={value:"right"},ft={value:"justify"},pt=["value"],vt={value:"left"},gt={value:"center"},yt={value:"right"},ht={value:"justify"},bt={class:"mr-designer-toggle"},Et=["checked"],St={key:2,role:"status",class:"mr-designer-empty"},Vt={class:"mr-designer-stacked"},Nt=["value","disabled"],kt={class:"mr-designer-stacked"},_t=["value","disabled"],Dt={class:"mr-designer-identity"},Ct={class:"mr-designer-note"},Tt={class:"mr-designer-note"},wt={class:"mr-designer-stacked"},Bt=["aria-label","disabled"],xt=["disabled"],Rt={key:3,role:"status",class:"mr-designer-note mr-designer-pending"},Mt=["aria-label"],At={key:0,role:"alert",class:"mr-designer-error"},jt={key:1,role:"alert",class:"mr-designer-error"},Lt={key:3,class:"mr-designer-note mr-designer-invalid"},$t=e.defineComponent({__name:"ReportTemplateEditor",props:{modelValue:{},datasets:{},readonly:{type:Boolean},messages:{},preview:{},beforeDiscard:{type:Function},save:{type:Function}},emits:["update:modelValue","saved"],setup(c,{expose:k,emit:u}){const y=c,m=u,o=oe(y,(s,l)=>{m(s==="saved"?"saved":"update:modelValue",l)}),{draft:b,json:C,selected:S,error:v,saving:f,pendingLocalChanges:h,jsonPending:_,blocked:p,confirmation:T,canUndo:P,canRedo:x,validation:D,lists:M,activeList:i,visibleColumns:a,query:r,selectedColumns:d,fetcher:V,messages:t}=o,w=re(a,S,i,r),{section:B,activeIndex:$,activeColumn:N}=w,A=`mr-designer-${e.getCurrentInstance()?.uid??0}`,R=["fields","template","advanced"],H=e.computed(()=>f.value?t.value.saving:y.readonly?t.value.readonly:h.value?t.value.dirty:t.value.ready),O=e.ref(null),q=e.ref(null),z=e.ref(null);e.watch(B,async s=>{if(await e.nextTick(),z.value&&(z.value.scrollTop=0),s!=="fields")return;const l=q.value,n=l?.querySelector(`button[data-column-index="${$.value}"]`);if(!l||!n)return;const g=l.getBoundingClientRect(),L=n.getBoundingClientRect(),G=g.top+l.clientTop,X=G+l.clientHeight;L.top<G?l.scrollTop+=L.top-G:L.bottom>X&&(l.scrollTop+=L.bottom-X)});let J=null;e.watch(T,async s=>{s?(J=document.activeElement,await e.nextTick(),O.value?.focus()):(await e.nextTick(),J?.isConnected&&J.focus(),J=null)}),k({get pendingLocalChanges(){return h.value},get saving(){return f.value},get blocked(){return p.value},guardChanges:o.guardChanges,reset:o.reset,save:o.save});function j(s){return s.target.value}function F(s){return s.target.checked}function U(s,l){const n=s.target;o.alignColumns(l,n.value),n.value=""}async function K(s){const l=w.moveColumn(s.key);if(l===void 0)return;s.preventDefault();const n=s.currentTarget.closest(".mr-designer-column-list");await e.nextTick();const g=n?.querySelector(`button[data-column-index="${l}"]`);g?.focus({preventScroll:!0}),g?.scrollIntoView({block:"nearest"})}async function W(s){const n={ArrowRight:1,ArrowLeft:-1,Home:-R.length,End:R.length}[s.key];if(n===void 0)return;s.preventDefault();const g=R.indexOf(B.value),L=s.key==="Home"?0:s.key==="End"?R.length-1:(g+n+R.length)%R.length;B.value=R[L];const G=s.currentTarget.parentElement;await e.nextTick(),G?.querySelector(`#${A}-tab-${B.value}`)?.focus()}return(s,l)=>(e.openBlock(),e.createElementBlock("section",{class:"mr-designer","aria-label":e.unref(t).title,"aria-busy":e.unref(f)},[e.createElementVNode("header",ie,[e.createElementVNode("div",se,[e.createVNode(I._sfc_main,{name:"columns",size:18}),e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).heading),1),e.createElementVNode("span",{class:e.normalizeClass({"mr-designer-dirty":e.unref(h)})},e.toDisplayString(H.value),3)])]),e.createElementVNode("div",ue,[e.createElementVNode("div",ce,[e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(t).undo,title:e.unref(t).undo,disabled:c.readonly||e.unref(p)||!e.unref(P),onClick:l[0]||(l[0]=(...n)=>e.unref(o).undo&&e.unref(o).undo(...n))},[...l[25]||(l[25]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},[e.createElementVNode("path",{d:"M4 10h10a6 6 0 0 1 0 12M4 10l5-5M4 10l5 5"})],-1)])],8,de),e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(t).redo,title:e.unref(t).redo,disabled:c.readonly||e.unref(p)||!e.unref(x),onClick:l[1]||(l[1]=(...n)=>e.unref(o).redo&&e.unref(o).redo(...n))},[...l[26]||(l[26]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},[e.createElementVNode("path",{d:"M20 10H10a6 6 0 0 0 0 12m10-12-5-5m5 5-5 5"})],-1)])],8,me)]),e.createElementVNode("button",{type:"button",class:"mr-designer-reset",disabled:c.readonly||e.unref(p)||!e.unref(h),onClick:l[2]||(l[2]=(...n)=>e.unref(o).reset&&e.unref(o).reset(...n))},e.toDisplayString(e.unref(t).reset),9,fe),c.save?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mr-designer-save",disabled:c.readonly||e.unref(p)||e.unref(_)||!e.unref(D).ok||!e.unref(h),onClick:l[3]||(l[3]=(...n)=>e.unref(o).save&&e.unref(o).save(...n))},[e.createVNode(I._sfc_main,{name:"file",size:14}),e.createTextVNode(e.toDisplayString(e.unref(f)?e.unref(t).saving:e.unref(t).save),1)],8,pe)):e.createCommentVNode("",!0)])]),e.unref(T)?(e.openBlock(),e.createElementBlock("div",{key:0,role:"alertdialog","aria-label":e.unref(t).discardTitle,class:"mr-designer-confirm",onKeydown:l[6]||(l[6]=e.withKeys(e.withModifiers(n=>e.unref(o).decideDiscard(!1),["prevent"]),["esc"]))},[e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).discardTitle),1),e.createElementVNode("p",null,e.toDisplayString(e.unref(t).discardDescription),1)]),e.createElementVNode("div",null,[e.createElementVNode("button",{ref_key:"keepButton",ref:O,type:"button",onClick:l[4]||(l[4]=n=>e.unref(o).decideDiscard(!1))},e.toDisplayString(e.unref(t).keepEditing),513),e.createElementVNode("button",{type:"button",onClick:l[5]||(l[5]=n=>e.unref(o).decideDiscard(!0))},e.toDisplayString(e.unref(t).discard),1)])],40,ve)):e.createCommentVNode("",!0),e.createElementVNode("div",ge,[e.createElementVNode("aside",ye,[e.createElementVNode("nav",{class:"mr-designer-tabs",role:"tablist","aria-label":e.unref(t).sectionsLabel},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(R,n=>e.createElementVNode("button",{id:`${A}-tab-${n}`,key:n,type:"button",role:"tab","aria-selected":e.unref(B)===n,"aria-controls":`${A}-panel-${n}`,tabindex:e.unref(B)===n?0:-1,onClick:g=>B.value=n,onKeydown:W},e.toDisplayString(e.unref(t)[`${n}Section`]),41,be)),64))],8,he),e.createElementVNode("div",{ref_key:"inspectorPanel",ref:z,id:`${A}-panel-${e.unref(B)}`,class:"mr-designer-panel",role:"tabpanel","aria-labelledby":`${A}-tab-${e.unref(B)}`},[e.unref(B)==="fields"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.unref(M).length>1?(e.openBlock(),e.createElementBlock("label",Se,[e.createTextVNode(e.toDisplayString(e.unref(t).area),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":l[7]||(l[7]=n=>e.isRef(S)?S.value=n:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(M),(n,g)=>(e.openBlock(),e.createElementBlock("option",{key:g,value:g},e.toDisplayString(n.pageIndex+1)+" "+e.toDisplayString(e.unref(t).page)+" · "+e.toDisplayString(n.component.title||n.component.dataset),9,Ve))),128))],512),[[e.vModelSelect,e.unref(S)]])])):e.createCommentVNode("",!0),e.unref(i)?(e.openBlock(),e.createElementBlock("div",Ne,[e.createElementVNode("div",ke,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).columnDirectory),1),e.createElementVNode("span",null,e.toDisplayString(e.unref(i).columns.length)+" "+e.toDisplayString(e.unref(t).fieldsCount),1)]),e.createElementVNode("div",_e,[e.createVNode(I._sfc_main,{name:"search",size:15}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[8]||(l[8]=n=>e.isRef(r)?r.value=n:null),type:"search","aria-label":e.unref(t).columnsSearch,placeholder:e.unref(t).columnsSearch},null,8,De),[[e.vModelText,e.unref(r)]]),e.unref(r)?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mr-designer-icon-button","aria-label":e.unref(t).clearSearch,title:e.unref(t).clearSearch,onClick:l[9]||(l[9]=n=>r.value="")},[e.createVNode(I._sfc_main,{name:"close",size:14})],8,Ce)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Te,[e.createElementVNode("button",{type:"button",disabled:c.readonly||e.unref(p)||e.unref(_)||!e.unref(a).length,onClick:l[10]||(l[10]=n=>e.unref(o).selectVisible(!0))},e.toDisplayString(e.unref(t).selectVisible),9,we),e.unref(d).length?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",onClick:l[11]||(l[11]=(...n)=>e.unref(o).clearSelection&&e.unref(o).clearSelection(...n))},e.toDisplayString(e.unref(t).clearSelection),1)):e.createCommentVNode("",!0),e.unref(d).length?(e.openBlock(),e.createElementBlock("span",Be,e.toDisplayString(e.unref(t).columnsSelected)+" "+e.toDisplayString(e.unref(d).length),1)):(e.openBlock(),e.createElementBlock("span",xe,e.toDisplayString(e.unref(a).length)+" / "+e.toDisplayString(e.unref(i).columns.length),1))]),e.createElementVNode("div",{ref_key:"columnList",ref:q,class:"mr-designer-column-list","aria-label":e.unref(t).columnDirectory,role:"group"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),({column:n,index:g})=>(e.openBlock(),e.createElementBlock("div",{key:g,class:e.normalizeClass(["mr-designer-column-row",{"is-active":e.unref($)===g}])},[e.createElementVNode("input",{type:"checkbox","aria-label":`${e.unref(t).selectColumn} ${n.header}`,checked:e.unref(d).includes(g),disabled:c.readonly||e.unref(p)||e.unref(_),onChange:L=>e.unref(o).toggleColumn(g,F(L))},null,40,Me),e.createElementVNode("button",{type:"button","data-column-index":g,"aria-pressed":e.unref($)===g,tabindex:e.unref($)===g?0:-1,onClick:L=>e.unref(w).activate(g),onKeydown:K},[e.createElementVNode("span",je,e.toDisplayString(g+1),1),e.createElementVNode("span",Le,[e.createElementVNode("strong",null,e.toDisplayString(n.header),1),e.createElementVNode("small",null,e.toDisplayString(n.field),1)]),e.unref($)===g?(e.openBlock(),e.createBlock(I._sfc_main,{key:0,name:"chevron-right",size:14})):e.createCommentVNode("",!0)],40,Ae)],2))),128)),e.unref(a).length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",$e,[e.createVNode(I._sfc_main,{name:"search",size:20}),e.createTextVNode(e.toDisplayString(e.unref(t).noColumns),1)]))],8,Re),e.unref(d).length?(e.openBlock(),e.createElementBlock("div",Oe,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).batchBody),1),e.createElementVNode("select",{"aria-label":e.unref(t).batchBody,disabled:c.readonly||e.unref(p)||e.unref(_),onChange:l[12]||(l[12]=n=>U(n,"align"))},[e.createElementVNode("option",Pe,e.toDisplayString(e.unref(t).chooseAlignment),1),e.createElementVNode("option",Je,e.toDisplayString(e.unref(t).auto),1),e.createElementVNode("option",ze,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",Fe,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Ge,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",He,e.toDisplayString(e.unref(t).justify),1)],40,Ie)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).batchHeader),1),e.createElementVNode("select",{"aria-label":e.unref(t).batchHeader,disabled:c.readonly||e.unref(p)||e.unref(_),onChange:l[13]||(l[13]=n=>U(n,"headerAlign"))},[e.createElementVNode("option",Ue,e.toDisplayString(e.unref(t).chooseAlignment),1),e.createElementVNode("option",Ke,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",We,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Qe,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",Xe,e.toDisplayString(e.unref(t).justify),1)],40,qe)])])):e.createCommentVNode("",!0),e.unref(N)?(e.openBlock(),e.createElementBlock("fieldset",{key:1,class:"mr-designer-properties",disabled:c.readonly||e.unref(p)||e.unref(_)},[e.createElementVNode("legend",null,[e.createTextVNode(e.toDisplayString(e.unref(t).columnProperties)+" ",1),e.createElementVNode("span",null,e.toDisplayString(e.unref(N).index+1)+" · "+e.toDisplayString(e.unref(N).column.header),1)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).header),1),e.createElementVNode("input",{value:e.unref(N).column.header,onInput:l[14]||(l[14]=n=>e.unref(o).setColumn(e.unref(N).index,"header",j(n)))},null,40,Ze)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).field),1),e.createElementVNode("input",{value:e.unref(N).column.field,onChange:l[15]||(l[15]=n=>e.unref(o).setColumn(e.unref(N).index,"field",j(n)))},null,40,et)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).width),1),e.createElementVNode("input",{type:"number",min:"0.1",step:"0.5",value:e.unref(N).column.widthMm,onChange:l[16]||(l[16]=n=>e.unref(o).setColumn(e.unref(N).index,"widthMm",j(n)))},null,40,tt)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).semantic),1),e.createElementVNode("select",{value:e.unref(N).column.semanticRole||"text",onChange:l[17]||(l[17]=n=>e.unref(o).setColumn(e.unref(N).index,"semanticRole",j(n)))},[e.createElementVNode("option",lt,e.toDisplayString(e.unref(t).identifier),1),e.createElementVNode("option",ot,e.toDisplayString(e.unref(t).dimension),1),e.createElementVNode("option",rt,e.toDisplayString(e.unref(t).measure),1),e.createElementVNode("option",at,e.toDisplayString(e.unref(t).date),1),e.createElementVNode("option",it,e.toDisplayString(e.unref(t).text),1)],40,nt)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).bodyAlign),1),e.createElementVNode("select",{value:e.unref(N).column.align??e.unref(N).column.style?.align??e.unref(i).align??"left",onChange:l[18]||(l[18]=n=>e.unref(o).setColumn(e.unref(N).index,"align",j(n)))},[e.createElementVNode("option",ut,e.toDisplayString(e.unref(t).auto),1),e.createElementVNode("option",ct,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",dt,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",mt,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",ft,e.toDisplayString(e.unref(t).justify),1)],40,st)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).headerAlign),1),e.createElementVNode("select",{value:e.unref(o).headerAlignments.value[e.unref(N).index],onChange:l[19]||(l[19]=n=>e.unref(o).setColumn(e.unref(N).index,"headerAlign",j(n)))},[e.createElementVNode("option",vt,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",gt,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",yt,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",ht,e.toDisplayString(e.unref(t).justify),1)],40,pt)]),e.createElementVNode("label",bt,[e.createTextVNode(e.toDisplayString(e.unref(t).editable),1),e.createElementVNode("input",{type:"checkbox",checked:e.unref(N).column.editable===!0,onChange:l[20]||(l[20]=n=>e.unref(o).setColumn(e.unref(N).index,"editable",F(n)))},null,40,Et)])],8,Ye)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("p",St,e.toDisplayString(e.unref(t).noColumns),1))],64)):e.unref(B)==="template"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("h3",null,e.toDisplayString(e.unref(t).templateDetails),1),e.createElementVNode("label",Vt,[e.createTextVNode(e.toDisplayString(e.unref(t).name),1),e.createElementVNode("input",{value:e.unref(b).name,disabled:c.readonly||e.unref(p)||e.unref(_),onInput:l[21]||(l[21]=n=>e.unref(o).setName(j(n)))},null,40,Nt)]),e.createElementVNode("label",kt,[e.createTextVNode(e.toDisplayString(e.unref(t).description),1),e.createElementVNode("textarea",{rows:"4",value:e.unref(b).description,disabled:c.readonly||e.unref(p)||e.unref(_),onInput:l[22]||(l[22]=n=>e.unref(o).setDescription(j(n)))},null,40,_t)]),e.createElementVNode("dl",Dt,[e.createElementVNode("dt",null,e.toDisplayString(e.unref(t).templateIdentity),1),e.createElementVNode("dd",null,e.toDisplayString(e.unref(b).id),1),e.createElementVNode("dt",null,e.toDisplayString(e.unref(t).templateRevision),1),e.createElementVNode("dd",null,e.toDisplayString(e.unref(b).revision||e.unref(t).unpublished),1)]),e.createElementVNode("p",Ct,e.toDisplayString(e.unref(t).note),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("h3",null,e.toDisplayString(e.unref(t).advancedTitle),1),e.createElementVNode("p",Tt,e.toDisplayString(e.unref(t).advancedDescription),1),e.createElementVNode("label",wt,[e.createTextVNode(e.toDisplayString(e.unref(t).json),1),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":l[23]||(l[23]=n=>e.isRef(C)?C.value=n:null),class:"mr-designer-json","aria-label":e.unref(t).json,disabled:c.readonly||e.unref(p),spellcheck:"false"},null,8,Bt),[[e.vModelText,e.unref(C)]])]),e.createElementVNode("button",{type:"button",class:"mr-designer-apply-json",disabled:c.readonly||e.unref(p),onClick:l[24]||(l[24]=(...n)=>e.unref(o).applyJson&&e.unref(o).applyJson(...n))},e.toDisplayString(e.unref(t).applyJson),9,xt)],64)),e.unref(_)?(e.openBlock(),e.createElementBlock("p",Rt,e.toDisplayString(e.unref(t).jsonPending),1)):e.createCommentVNode("",!0)],8,Ee)]),e.createElementVNode("div",{class:"mr-designer-preview","aria-label":e.unref(t).previewTitle},[e.unref(v)?(e.openBlock(),e.createElementBlock("div",At,e.toDisplayString(e.unref(v)),1)):e.createCommentVNode("",!0),e.unref(D).ok?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("ul",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(D).errors,n=>(e.openBlock(),e.createElementBlock("li",{key:n.path},e.toDisplayString(n.path)+":"+e.toDisplayString(n.message),1))),128))])),e.unref(V)&&e.unref(D).ok?(e.openBlock(),e.createBlock(e.unref(Q.ReportPreview),{key:2,"report-id":"draft",fetcher:e.unref(V),"show-params":!1,editable:!1,"excel-import":!1,height:"100%"},null,8,["fetcher"])):(e.openBlock(),e.createElementBlock("p",Lt,e.toDisplayString(e.unref(t).invalid),1))],8,Mt)])],8,ae))}}),Ot=I._export_sfc($t,[["__scopeId","data-v-c4eab8e7"]]);exports.ReportTemplateEditor=Ot;exports.TEMPLATE_EDITOR_MESSAGES=Y;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),fe=require("@agile-team/mach-report/vue"),T=require("@agile-team/mach-report"),H=require("./_plugin-vue_export-helper-BLmdZLlg.cjs"),ve=require("./style-UgIJSA1F.cjs"),Pe=96/25.4;function ye(t){return t.kind==="list"?Math.max(16,(t.headerGrid?.rowHeightsMm?.reduce((s,l)=>s+l,0)??8)+(t.rowHeightMm??8)*3):t.heightMm}function le(t){return{leftMm:t.leftMm,topMm:t.topMm,widthMm:t.widthMm,heightMm:ye(t)}}function pe(t,s){return s?t.template.pages[s.pageIndex]?.components[s.componentIndex]:void 0}function Fe(t,s="detail"){const l={leftMm:10,topMm:10,widthMm:60,heightMm:10};return t==="list"?{kind:t,leftMm:10,topMm:30,widthMm:90,dataset:s,columns:[{header:"字段",field:"field",widthMm:45},{header:"数值",field:"value",widthMm:45}],border:!0,headerBackgroundColor:"#eaf2fc",headerAlign:"center"}:t==="text"?{...l,kind:t,text:"文本",style:{fontSize:12,color:"#233c5c"}}:t==="rect"?{...l,kind:t,style:{borderColor:"#cbd5e1",lineWidthPt:.75,backgroundColor:"#eff6ff"}}:{...l,kind:t,widthMm:48,heightMm:24,imageData:`data:image/svg+xml;charset=utf-8,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" width="180" height="90" viewBox="0 0 180 90"><rect width="180" height="90" rx="5" fill="#eff6ff"/><path d="m25 68 32-32 25 23 27-35 45 44" fill="none" stroke="#94b8e5" stroke-width="3"/><circle cx="45" cy="24" r="7" fill="#bfd5ef"/></svg>')}`}}function ge(t,s,l=!1){const r=Math.max(2,Math.min(s.widthMm,t.widthMm)),n=Math.max(2,Math.min(s.heightMm,t.heightMm));return{leftMm:Math.max(0,Math.min(s.widthMm-r,t.leftMm)),topMm:Math.max(0,Math.min(s.heightMm-(l?2:n),t.topMm)),widthMm:r,heightMm:n}}function Ve(t,s){const l=t.widthMm;if(Object.assign(t,{leftMm:s.leftMm,topMm:s.topMm,widthMm:s.widthMm}),t.kind!=="list")t.heightMm=s.heightMm;else if(l>0&&s.widthMm!==l){const r=s.widthMm/l;t.columns.forEach(n=>{n.widthMm=Math.round(n.widthMm*r*100)/100}),t.widthMm=t.columns.reduce((n,v)=>n+v.widthMm,0),t.headerGrid&&(t.headerGrid.colWidthsMm=t.columns.map(n=>n.widthMm))}}function ze(t,s,l){if(s===l||!t.columns[s]||!t.columns[l])return!1;if(t.headerGrid){if(T.resolveGridLayout(t.headerGrid,t.widthMm,100).cells.some(({cell:v})=>(v.colSpan??1)>1))throw new Error("请先拆分跨列合并表头,再调整列顺序,避免改变业务分组。");const n=ce(t);n.forEach(v=>{v.splice(l,0,v.splice(s,1)[0])}),t.headerGrid=de(n,t.columns.map(v=>v.widthMm),t.headerGrid.rowHeightsMm??n.map(()=>8))}return t.columns.splice(l,0,t.columns.splice(s,1)[0]),t.headerGrid&&(t.headerGrid.colWidthsMm=t.columns.map(r=>r.widthMm)),!0}function ce(t){if(!t.headerGrid)return[t.columns.map(l=>({text:l.header}))];const s=Array.from({length:t.headerGrid.cells.length},()=>Array.from({length:t.columns.length},()=>null));for(const{cell:l,ri:r,ci:n}of T.resolveGridLayout(t.headerGrid,t.widthMm,100).cells)s[r][n]=l;return s}function de(t,s,l){const r=new Set;return{cells:t.map((v,d)=>v.flatMap((E,i)=>{if(r.has(`${d}:${i}`))return[];if(!E)return[null];for(let g=d;g<d+(E.rowSpan??1);g++)for(let k=i;k<i+(E.colSpan??1);k++)(g!==d||k!==i)&&r.add(`${g}:${k}`);return[E]})),colWidthsMm:s,rowHeightsMm:l}}function He(t){const s=ce(t),l=t.headerGrid?.rowHeightsMm??s.map(()=>8);s.unshift(t.columns.map(()=>({text:"分组",style:{align:"center",backgroundColor:"#eaf2fc",bold:!0}}))),t.headerGrid=de(s,t.columns.map(r=>r.widthMm),[8,...l])}function je(t,s,l,r){if(l>=r||l<0||r>=t.columns.length)throw new Error("请选择同一行的至少两个连续表头。");const n=ce(t),v=n[s];if(!v)throw new Error("表头行不存在。");const d=v.slice(l,r+1);if(d.some(i=>!i||(i.colSpan??1)!==1||(i.rowSpan??1)!==1))throw new Error("选择包含合并区域,请先拆分,再重新合并。");const E=d[0];v[l]={...E,colSpan:r-l+1};for(let i=l+1;i<=r;i++)v[i]=null;t.headerGrid=de(n,t.columns.map(i=>i.widthMm),t.headerGrid?.rowHeightsMm??[8])}function Oe(t,s,l){if(!t.headerGrid)return;const n=T.resolveGridLayout(t.headerGrid,t.widthMm,100).cells.find(({ri:g,ci:k,cell:V})=>s>=g&&s<g+(V.rowSpan??1)&&l>=k&&l<k+(V.colSpan??1));if(!n)return;const v=ce(t),{ri:d,ci:E,cell:i}=n;for(let g=d;g<d+(i.rowSpan??1);g++)for(let k=E;k<E+(i.colSpan??1);k++){const V={...i,text:g===v.length-1?t.columns[k].header:i.text};delete V.colSpan,delete V.rowSpan,v[g][k]=V}t.headerGrid=de(v,t.columns.map(g=>g.widthMm),t.headerGrid.rowHeightsMm??v.map(()=>8))}function Ne(t,s,l){const r=t.filter(n=>n!==s).flatMap(n=>{const v=n[l],d=l==="leftMm"?n.widthMm:ye(n);return[v,v+d/2,v+d]});return[...new Set(r)].sort((n,v)=>n-v)}function Ue(t,s){if(!t.length)return;let l=0,r=t.length;for(;l<r;){const d=l+r>>>1;t[d]<s?l=d+1:r=d}const n=t[Math.max(0,l-1)],v=t[Math.min(t.length-1,l)];return Math.abs(n-s)<Math.abs(v-s)?n:v}function xe(t,s,l,r){let n=1/0,v={value:Math.round(t*2)/2};for(const d of[0,s/2,s]){const E=Ue(l,t+d);if(E===void 0)continue;const i=Math.abs(E-t-d);i<=r&&i<n&&(n=i,v={value:E-d,guide:E})}return v}function Je(t){let s;function l(r,n,v=!1){if(t.disabled()||r.button!==0)return;r.preventDefault(),r.stopPropagation(),s?.();const d=r.currentTarget.closest("[data-canvas-component]"),E=le(n),i=r.clientX,g=r.clientY;let k=E,V=0;const _=t.scale.value,x=d.parentElement;let p,f;const N=()=>{for(const[B,L]of[["x",p],["y",f]])x.style.setProperty(`--mr-canvas-guide-${B}-display`,L===void 0?"none":"block"),L!==void 0&&x.style.setProperty(`--mr-canvas-guide-${B}`,`${L*_}px`)},h=()=>{V=0,N(),d.style.left=`${k.leftMm*_}px`,d.style.top=`${k.topMm*_}px`,d.style.width=`${k.widthMm*_}px`,d.style.height=`${k.heightMm*_}px`},w={leftMm:Ne(t.page().components,n,"leftMm"),topMm:Ne(t.page().components,n,"topMm")},c=B=>{const L=(B.clientX-i)/_,O=(B.clientY-g)/_,o=xe(E.leftMm+L,E.widthMm,w.leftMm,5/_),z=xe(E.topMm+O,E.heightMm,w.topMm,5/_);p=v?void 0:o.guide,f=v?void 0:z.guide,k=ge(v?{...E,widthMm:Math.round((E.widthMm+L)*2)/2,heightMm:Math.round((E.heightMm+O)*2)/2}:{...E,leftMm:o.value,topMm:z.value},t.page(),n.kind==="list"),V||(V=requestAnimationFrame(h))},y=B=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",b),window.removeEventListener("keydown",C),V&&cancelAnimationFrame(V),k=B?k:E,p=void 0,f=void 0,h(),s=void 0,B&&JSON.stringify(k)!==JSON.stringify(E)&&t.commit(k)},m=()=>y(!0),b=()=>y(!1),C=B=>{B.key==="Escape"&&(B.preventDefault(),b())};window.addEventListener("pointermove",c),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",b),window.addEventListener("keydown",C),s=b}return e.watch(t.disabled,r=>{r&&s?.()}),e.watch(t.page,()=>s?.()),e.onBeforeUnmount(()=>s?.()),{start:l}}const Ke={title:"报表模板设计器",heading:"模板设计",unpublished:"未发布",dirty:"有未保存修改",reset:"恢复草稿",saving:"正在保存…",save:"保存草稿",name:"模板名称",description:"说明",area:"明细区域",page:"页",header:"表头",field:"业务字段",width:"列宽(mm)",semantic:"字段语义",identifier:"编号",dimension:"分类",measure:"数值",date:"日期",text:"文本",bodyAlign:"正文对齐",headerAlign:"表头对齐",auto:"按字段语义",left:"居左",center:"居中",right:"居右",justify:"两端对齐",editable:"允许编辑",json:"完整模板 JSON",applyJson:"校验并应用 JSON",note:"字段映射应与数据源契约一致。此编辑器维护模板属性;保存由接入方提供的版本服务处理。",invalid:"请先修正模板错误,再预览或保存。"},We={repeatPage:"每页重复",repeatNone:"不重复",repeatHeader:"页眉",repeatFooter:"页脚",textFormat:"文字样式",fontSize:"字号(pt)",fontBold:"加粗",textColor:"文字颜色",backgroundColor:"背景颜色",canvasGridLimited:"设计窗口仅显示前 2000 个单元格;最终预览与导出保留完整内容。",design:"设计",preview:"预览",componentSection:"组件",toolsSection:"工具",component:"组件",components:"组件目录",canvasHint:"点击选择 · 拖动移动 · 方向键微调 · Shift 加速 · Esc 取消",zoom:"缩放",sampleRows:"数据预览区域",resizeComponent:"调整组件尺寸",resizeColumn:"调整列宽",insertComponent:"添加组件",insertText:"文本",insertList:"明细表",insertImage:"图片",insertRect:"矩形",removeComponent:"删除组件",duplicateComponent:"复制组件",forward:"向上移动层级",backward:"向下移动层级",positionGroup:"位置与尺寸 · mm",componentContent:"组件内容",componentText:"文本内容",imageSource:"图片地址或 data URI",imageUpload:"上传图片",imageBudget:"图片不超过 4 MB,支持 PNG/JPEG/WebP/SVG",leftPosition:"左侧",topPosition:"顶部",componentWidth:"宽度",componentHeight:"高度",noComponent:"在画布或目录选择组件",listDataset:"数据集",columnOrder:"列结构",moveColumnLeft:"向前移动列",moveColumnRight:"向后移动列",columnVisible:"显示此列",headerStructure:"多层表头",addHeaderRow:"添加分组行",mergeHeader:"合并所选表头",splitHeader:"拆分表头",headerRow:"表头行",headerFirst:"开始列",headerLast:"结束列",excelTool:"Excel 绑定",rulesTool:"计算与规则",reviewTool:"发布检查",toolsDescription:"按需绑定数据、定义规则并验证模板。",rulesNeedList:"请先在字段区域选择明细表。",undo:"撤销",redo:"重做",columnsSearch:"搜索列名或字段",columnsSelected:"已选列",selectVisible:"选择当前结果",clearSelection:"清除选择",noColumns:"没有匹配的列",batchBody:"批量正文对齐",batchHeader:"批量表头对齐",chooseAlignment:"选择对齐方式",discardTitle:"保留当前修改?",discardDescription:"当前包含未保存的属性或尚未应用的 JSON,继续将丢弃这些修改。",keepEditing:"继续编辑",discard:"丢弃修改并继续",jsonPending:"JSON 尚未应用。请先校验并应用,或撤销 JSON 修改后继续属性编辑与保存。",fieldsSection:"字段",templateSection:"模板",advancedSection:"高级",sectionsLabel:"模板设置分区",columnDirectory:"字段目录",columnProperties:"字段属性",selectColumn:"选择字段",clearSearch:"清除搜索",fieldsCount:"个字段",templateDetails:"模板信息",advancedTitle:"完整配置",advancedDescription:"用于批量迁移或配置复杂模板。应用前会校验;未应用的内容会受到草稿保护。",templateIdentity:"模板标识",templateRevision:"当前修订",readonly:"只读",ready:"可编辑",previewTitle:"实时预览",contentGroup:"内容",formatGroup:"格式",autoShort:"自动",previousColumn:"上一字段",nextColumn:"下一字段",closeDirectory:"关闭字段目录",technicalDetails:"标识与修订",fieldPosition:"当前字段",previewFieldDirectory:"定位字段"},ae={...Ke,...We},qe={class:"mr-canvas"},Xe={class:"mr-canvas-heading"},Ye={class:"mr-canvas-scroll"},Qe=["data-canvas-component","aria-label","aria-pressed","tabindex","onFocus","onPointerdown","onClick","onKeydown"],Ze={class:"mr-canvas-table"},et={key:1,class:"mr-canvas-table-row is-header"},tt=["onPointerdown"],nt={key:2,class:"mr-canvas-placeholder"},ot=["aria-label","onPointerdown"],lt={key:1,class:"mr-canvas-static-grid"},at={key:0,class:"mr-canvas-grid-limit"},rt=["src"],it=["aria-label","onPointerdown"],st=e.defineComponent({__name:"TemplateDesignCanvas",props:{document:{},selection:{},pageIndex:{},datasets:{},disabled:{type:Boolean},messages:{}},emits:["select","geometry","column","width"],setup(t,{emit:s}){const l=t,r=s,n=e.computed(()=>({...ae,...l.messages})),v=e.ref(.8),d=e.computed(()=>v.value*Pe),E=e.computed(()=>l.document.template.pages[l.pageIndex]),i=Je({scale:d,page:()=>E.value,disabled:()=>l.disabled===!0,commit:h=>r("geometry",h)});function g(h){return l.selection?.pageIndex===l.pageIndex&&l.selection.componentIndex===h}function k(h){const w=E.value.components[h];return{left:`${w.leftMm*d.value}px`,top:`${w.topMm*d.value}px`,width:`${w.widthMm*d.value}px`,height:`${ye(w)*d.value}px`}}function V(h,w){const c=E.value.components[w];if(l.disabled||!g(w))return;const y={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]},m=y[h.key];if(!m)return;h.preventDefault(),h.stopPropagation();const b=le(c),C=h.shiftKey?5:.5;b.leftMm+=m[0]*C,b.topMm+=m[1]*C,r("geometry",b)}function _(h){let w=0;return h.columns.map(c=>(w+=c.widthMm,w))}function x(h){return h.grid?T.resolveGridLayout(h.grid,h.widthMm,h.heightMm).cells.slice(0,2e3):[]}function p(h){return h.headerGrid?T.resolveGridLayout(h.headerGrid,h.widthMm,h.headerGrid.rowHeightsMm?.reduce((w,c)=>w+c,0)??h.headerGrid.cells.length*8).cells:[]}let f;e.watch(()=>l.disabled,h=>{h&&f?.()}),e.watch(()=>l.document,()=>f?.()),e.onBeforeUnmount(()=>f?.());function N(h,w,c){if(l.disabled||h.button!==0)return;h.preventDefault(),h.stopPropagation(),f?.();const y=h.clientX,m=w.columns[c].widthMm;let b=m;const C=h.currentTarget,B=S=>{b=Math.max(2,Math.round((m+(S.clientX-y)/d.value)*2)/2),C.style.transform=`translateX(${(b-m)*d.value}px)`},L=()=>{window.removeEventListener("pointermove",B),window.removeEventListener("pointerup",O),window.removeEventListener("pointercancel",o),window.removeEventListener("keydown",z),C.style.transform="",f=void 0},O=()=>{L(),b!==m&&r("width",c,b)},o=()=>L(),z=S=>{S.key==="Escape"&&(S.preventDefault(),o())};window.addEventListener("pointermove",B),window.addEventListener("pointerup",O),window.addEventListener("pointercancel",o),window.addEventListener("keydown",z),f=o}return(h,w)=>(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",Xe,[e.createElementVNode("span",null,e.toDisplayString(n.value.canvasHint),1),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.zoom),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":w[0]||(w[0]=c=>v.value=c)},[...w[1]||(w[1]=[e.createElementVNode("option",{value:.5},"50%",-1),e.createElementVNode("option",{value:.8},"80%",-1),e.createElementVNode("option",{value:1},"100%",-1),e.createElementVNode("option",{value:1.25},"125%",-1)])],512),[[e.vModelSelect,v.value,void 0,{number:!0}]])])]),e.createElementVNode("div",Ye,[e.createElementVNode("div",{class:"mr-canvas-paper",style:e.normalizeStyle({width:`${E.value.widthMm*d.value}px`,height:`${E.value.heightMm*d.value}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value.components,(c,y)=>(e.openBlock(),e.createElementBlock("div",{key:y,class:e.normalizeClass(["mr-canvas-component",{"is-selected":g(y)}]),"data-canvas-component":y,style:e.normalizeStyle(k(y)),role:"button","aria-label":`${n.value.component} ${y+1} ${c.kind}`,"aria-pressed":g(y),tabindex:g(y)?0:-1,onFocus:m=>r("select",{pageIndex:t.pageIndex,componentIndex:y}),onPointerdown:m=>{r("select",{pageIndex:t.pageIndex,componentIndex:y}),e.unref(i).start(m,c)},onClick:m=>r("select",{pageIndex:t.pageIndex,componentIndex:y}),onKeydown:m=>V(m,y)},[c.kind==="list"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",Ze,[c.headerGrid?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mr-canvas-merged",style:e.normalizeStyle({height:`${(c.headerGrid.rowHeightsMm?.reduce((m,b)=>m+b,0)??c.headerGrid.cells.length*8)*d.value}px`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p(c),(m,b)=>(e.openBlock(),e.createElementBlock("div",{key:b,style:e.normalizeStyle({left:`${m.xMm*d.value}px`,top:`${m.yMm*d.value}px`,width:`${m.widthMm*d.value}px`,height:`${m.heightMm*d.value}px`,textAlign:m.cell.style?.align??"center"})},e.toDisplayString(m.cell.text),5))),128))],4)):(e.openBlock(),e.createElementBlock("div",et,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.columns,(m,b)=>(e.openBlock(),e.createElementBlock("div",{key:b,style:e.normalizeStyle({width:`${m.widthMm*d.value}px`,opacity:m.hidden?.35:1}),onPointerdown:e.withModifiers(C=>{r("select",{pageIndex:t.pageIndex,componentIndex:y}),r("column",b)},["stop"])},e.toDisplayString(m.header),45,tt))),128))])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList((t.datasets?.[c.dataset]??[]).slice(0,3),(m,b)=>(e.openBlock(),e.createElementBlock("div",{key:b,class:"mr-canvas-table-row"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.columns,(C,B)=>(e.openBlock(),e.createElementBlock("div",{key:B,style:e.normalizeStyle({width:`${C.widthMm*d.value}px`,opacity:C.hidden?.35:1})},e.toDisplayString(m[C.field]??"—"),5))),128))]))),128)),t.datasets?.[c.dataset]?.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",nt,e.toDisplayString(c.dataset)+" · "+e.toDisplayString(n.value.sampleRows),1))]),g(y)&&!t.disabled?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_(c),(m,b)=>(e.openBlock(),e.createElementBlock("span",{key:b,class:"mr-canvas-column-handle","aria-label":`${n.value.resizeColumn} ${c.columns[b]?.header}`,role:"separator","aria-orientation":"vertical",style:e.normalizeStyle({left:`${m*d.value}px`}),onPointerdown:C=>N(C,c,b)},null,44,ot))),128)):e.createCommentVNode("",!0)],64)):c.grid?(e.openBlock(),e.createElementBlock("div",lt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x(c),(m,b)=>(e.openBlock(),e.createElementBlock("div",{key:b,style:e.normalizeStyle({left:`${m.xMm*d.value}px`,top:`${m.yMm*d.value}px`,width:`${m.widthMm*d.value}px`,height:`${m.heightMm*d.value}px`,backgroundColor:m.cell.style?.backgroundColor,color:m.cell.style?.color,fontWeight:m.cell.style?.bold?"700":"400",fontSize:`${e.unref(ve.resolveFontSize)(m.cell.style).fontSizePx*v.value}px`,textAlign:m.cell.style?.align??"left"})},e.toDisplayString(m.cell.text),5))),128)),c.grid.cells.reduce((m,b)=>m+b.length,0)>2e3?(e.openBlock(),e.createElementBlock("span",at,e.toDisplayString(n.value.canvasGridLimited),1)):e.createCommentVNode("",!0)])):c.imageData?(e.openBlock(),e.createElementBlock("img",{key:2,src:c.imageData,alt:"",draggable:"false"},null,8,rt)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mr-canvas-content",style:e.normalizeStyle({color:c.style?.color,backgroundColor:c.style?.backgroundColor,fontWeight:c.style?.bold?"700":"400",fontSize:`${e.unref(ve.resolveFontSize)(c.style).fontSizePx*v.value}px`,textAlign:c.style?.align})},e.toDisplayString(c.text??c.fallbackText??(c.kind==="rect"?"":c.kind)),5)),g(y)&&!t.disabled?(e.openBlock(),e.createElementBlock("span",{key:4,class:"mr-canvas-resize","aria-label":n.value.resizeComponent,role:"separator",onPointerdown:m=>e.unref(i).start(m,c,!0)},null,40,it)):e.createCommentVNode("",!0)],46,Qe))),128))],4)])]))}}),ct=H._export_sfc(st,[["__scopeId","data-v-0b2669dc"]]),dt=["aria-label"],ut=["data-align","aria-label","title","aria-checked","tabindex","onClick","onKeydown"],mt={key:0},pt={key:1,viewBox:"0 0 20 20",fill:"none","aria-hidden":"true"},ft={key:0,d:"M3 4h14M3 8h9M3 12h14M3 16h9"},vt={key:1,d:"M3 4h14M6 8h8M3 12h14M6 16h8"},gt={key:2,d:"M3 4h14M8 8h9M3 12h14M8 16h9"},ht={key:3,d:"M3 4h14M3 8h14M3 12h14M3 16h14"},yt=e.defineComponent({__name:"AlignmentControl",props:{modelValue:{},label:{},labels:{},autoLabel:{},allowAuto:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:s}){const l=t,r=s,n=()=>l.allowAuto?["auto","left","center","right","justify"]:["left","center","right","justify"];async function v(d,E){if(!["ArrowLeft","ArrowRight","Home","End"].includes(d.key))return;d.preventDefault();const g=n(),k=g.indexOf(E),V=d.key==="Home"?0:d.key==="End"?g.length-1:(k+(d.key==="ArrowRight"?1:-1)+g.length)%g.length;r("update:modelValue",g[V]);const _=d.currentTarget.parentElement;await e.nextTick(),_?.querySelector(`[data-align="${g[V]}"]`)?.focus()}return(d,E)=>(e.openBlock(),e.createElementBlock("div",{class:"mr-designer-alignment",role:"radiogroup","aria-label":t.label},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n(),i=>(e.openBlock(),e.createElementBlock("button",{key:i,type:"button",role:"radio","data-align":i,"aria-label":t.labels[i],title:t.labels[i],"aria-checked":t.modelValue===i,tabindex:t.modelValue===i?0:-1,onClick:g=>r("update:modelValue",i),onKeydown:g=>v(g,i)},[i==="auto"?(e.openBlock(),e.createElementBlock("span",mt,e.toDisplayString(t.autoLabel),1)):(e.openBlock(),e.createElementBlock("svg",pt,[i==="left"?(e.openBlock(),e.createElementBlock("path",ft)):i==="center"?(e.openBlock(),e.createElementBlock("path",vt)):i==="right"?(e.openBlock(),e.createElementBlock("path",gt)):(e.openBlock(),e.createElementBlock("path",ht))]))],40,ut))),128))],8,dt))}}),he=H._export_sfc(yt,[["__scopeId","data-v-c85770c4"]]),kt=["disabled"],bt={class:"mr-component-dimensions"},Et=["min","value","onChange"],wt={key:0},St=["value"],Vt={value:""},Nt={value:"header"},xt={value:"footer"},Ct={key:1},Bt=["value"],Mt=["value"],Dt={class:"mr-component-upload"},_t=["aria-label"],Tt={key:0,role:"alert"},$t={key:3,class:"mr-component-type"},Rt={class:"mr-component-dimensions"},It=["value"],Lt=["checked"],At={class:"mr-component-dimensions"},Gt=["value"],Pt=["value"],Ft={key:4},zt=["value"],Ht=e.defineComponent({__name:"CanvasComponentInspector",props:{component:{},disabled:{type:Boolean},messages:{}},emits:["geometry","patch"],setup(t,{emit:s}){const l=t,r=s,n=e.computed(()=>({...ae,...l.messages})),v=e.ref(""),d=["leftMm","topMm","widthMm","heightMm"],E=e.computed(()=>[n.value.leftPosition,n.value.topPosition,n.value.componentWidth,n.value.componentHeight]);function i(x,p){const f=Number(p.target.value);Number.isFinite(f)&&r("geometry",{...le(l.component),[x]:f})}function g(x,p){if(l.component.kind==="list")return;const f={...l.component.style,[x]:p};x==="fontSize"&&delete f.fontSizePx,r("patch",{style:f})}const k=e.computed(()=>({auto:n.value.auto,left:n.value.left,center:n.value.center,right:n.value.right,justify:n.value.justify}));function V(x){return x.target.value}async function _(x){const p=x.target,f=p.files?.[0];if(!f)return;v.value="";const N=l.component;try{if(f.size>4*1024*1024||!["image/png","image/jpeg","image/webp","image/svg+xml"].includes(f.type))throw new Error(n.value.imageBudget);const h=new FileReader,w=await new Promise((c,y)=>{h.onload=()=>c(String(h.result)),h.onerror=()=>y(h.error),h.readAsDataURL(f)});!l.disabled&&l.component===N&&r("patch",{imageData:w})}catch(h){v.value=h instanceof Error?h.message:String(h)}finally{p.value=""}}return(x,p)=>(e.openBlock(),e.createElementBlock("fieldset",{class:"mr-component-properties",disabled:t.disabled},[e.createElementVNode("h3",null,e.toDisplayString(n.value.positionGroup),1),e.createElementVNode("div",bt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.filter(f=>t.component.kind!=="list"||f!=="heightMm"),(f,N)=>(e.openBlock(),e.createElementBlock("label",{key:f},[e.createTextVNode(e.toDisplayString(E.value[N]),1),e.createElementVNode("input",{type:"number",step:"0.5",min:f==="widthMm"||f==="heightMm"?2:0,value:e.unref(le)(t.component)[f],onChange:h=>i(f,h)},null,40,Et)]))),128))]),t.component.kind!=="list"?(e.openBlock(),e.createElementBlock("label",wt,[e.createTextVNode(e.toDisplayString(n.value.repeatPage),1),e.createElementVNode("select",{value:t.component.pageAnchor??"",onChange:p[0]||(p[0]=f=>r("patch",{pageAnchor:V(f)||void 0}))},[e.createElementVNode("option",Vt,e.toDisplayString(n.value.repeatNone),1),e.createElementVNode("option",Nt,e.toDisplayString(n.value.repeatHeader),1),e.createElementVNode("option",xt,e.toDisplayString(n.value.repeatFooter),1)],40,St)])):e.createCommentVNode("",!0),e.createElementVNode("h3",null,e.toDisplayString(n.value.componentContent),1),t.component.kind==="text"?(e.openBlock(),e.createElementBlock("label",Ct,[e.createTextVNode(e.toDisplayString(n.value.componentText),1),e.createElementVNode("textarea",{rows:"4",value:t.component.text,onChange:p[1]||(p[1]=f=>r("patch",{text:V(f)}))},null,40,Bt)])):e.createCommentVNode("",!0),t.component.kind==="image"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.imageSource),1),e.createElementVNode("textarea",{rows:"2",value:t.component.imageData,onChange:p[2]||(p[2]=f=>r("patch",{imageData:V(f)}))},null,40,Mt)]),e.createElementVNode("label",Dt,[e.createTextVNode(e.toDisplayString(n.value.imageUpload),1),e.createElementVNode("input",{type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml","aria-label":n.value.imageUpload,onChange:_},null,40,_t)]),v.value?(e.openBlock(),e.createElementBlock("p",Tt,e.toDisplayString(v.value),1)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),t.component.kind==="text"?(e.openBlock(),e.createElementBlock("div",$t,[e.createElementVNode("h3",null,e.toDisplayString(n.value.textFormat),1),e.createElementVNode("div",Rt,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.fontSize),1),e.createElementVNode("input",{type:"number",min:"1",max:"200",value:e.unref(ve.resolveFontSize)(t.component.style).fontSizePt,onChange:p[3]||(p[3]=f=>g("fontSize",Number(V(f))))},null,40,It)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.fontBold),1),e.createElementVNode("input",{type:"checkbox",checked:t.component.style?.bold===!0,onChange:p[4]||(p[4]=f=>g("bold",f.target.checked))},null,40,Lt)])]),e.createVNode(he,{"model-value":t.component.style?.align??"left",label:n.value.bodyAlign,labels:k.value,"auto-label":n.value.autoShort,"onUpdate:modelValue":p[5]||(p[5]=f=>g("align",f))},null,8,["model-value","label","labels","auto-label"]),e.createElementVNode("div",At,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.textColor),1),e.createElementVNode("input",{type:"color",value:t.component.style?.color??"#233c5c",onChange:p[6]||(p[6]=f=>g("color",V(f)))},null,40,Gt)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.backgroundColor),1),e.createElementVNode("input",{type:"color",value:t.component.style?.backgroundColor??"#ffffff",onChange:p[7]||(p[7]=f=>g("backgroundColor",V(f)))},null,40,Pt)])])])):e.createCommentVNode("",!0),t.component.kind==="list"?(e.openBlock(),e.createElementBlock("label",Ft,[e.createTextVNode(e.toDisplayString(n.value.listDataset),1),e.createElementVNode("input",{value:t.component.dataset,onChange:p[8]||(p[8]=f=>r("patch",{dataset:V(f)}))},null,40,zt)])):e.createCommentVNode("",!0)],8,kt))}}),jt=H._export_sfc(Ht,[["__scopeId","data-v-2dcbd9cb"]]),Ot={class:"mr-header-editor"},Ut=["disabled"],Jt=["value"],Kt=["value"],Wt=["value"],qt=["disabled"],Xt=e.defineComponent({__name:"HeaderStructureEditor",props:{list:{},disabled:{type:Boolean},messages:{}},emits:["command"],setup(t,{emit:s}){const l=t,r=s,n=e.computed(()=>({...ae,...l.messages})),v=e.ref(0),d=e.ref(0),E=e.ref(Math.min(1,l.list.columns.length-1));return e.watch(()=>l.list.columns.length,i=>{d.value=Math.min(d.value,i-1),E.value=Math.min(E.value,i-1)}),(i,g)=>(e.openBlock(),e.createElementBlock("details",Ot,[e.createElementVNode("summary",null,[e.createTextVNode(e.toDisplayString(n.value.headerStructure),1),e.createElementVNode("span",null,e.toDisplayString(t.list.headerGrid?.cells.length??1)+" "+e.toDisplayString(n.value.headerRow),1)]),e.createElementVNode("fieldset",{disabled:t.disabled},[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.headerRow),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":g[0]||(g[0]=k=>v.value=k)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.list.headerGrid?.cells.length??1,k=>(e.openBlock(),e.createElementBlock("option",{key:k,value:k-1},e.toDisplayString(k),9,Jt))),128))],512),[[e.vModelSelect,v.value,void 0,{number:!0}]])]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.headerFirst),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":g[1]||(g[1]=k=>d.value=k)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.list.columns,(k,V)=>(e.openBlock(),e.createElementBlock("option",{key:V,value:V},e.toDisplayString(V+1)+" · "+e.toDisplayString(k.header),9,Kt))),128))],512),[[e.vModelSelect,d.value,void 0,{number:!0}]])]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(n.value.headerLast),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":g[2]||(g[2]=k=>E.value=k)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.list.columns,(k,V)=>(e.openBlock(),e.createElementBlock("option",{key:V,value:V},e.toDisplayString(V+1)+" · "+e.toDisplayString(k.header),9,Wt))),128))],512),[[e.vModelSelect,E.value,void 0,{number:!0}]])]),e.createElementVNode("div",null,[e.createElementVNode("button",{type:"button",onClick:g[3]||(g[3]=k=>r("command",{action:"add",row:v.value,first:d.value,last:E.value}))},e.toDisplayString(n.value.addHeaderRow),1),e.createElementVNode("button",{type:"button",disabled:d.value>=E.value,onClick:g[4]||(g[4]=k=>r("command",{action:"merge",row:v.value,first:d.value,last:E.value}))},e.toDisplayString(n.value.mergeHeader),9,qt),e.createElementVNode("button",{type:"button",onClick:g[5]||(g[5]=k=>r("command",{action:"split",row:v.value,first:d.value,last:E.value}))},e.toDisplayString(n.value.splitHeader),1)])],8,Ut)]))}}),Yt=H._export_sfc(Xt,[["__scopeId","data-v-acd607ef"]]);function Qt(t,s){const l=e.ref("preview"),r=e.ref(),n=e.ref(0),v=e.computed(()=>pe(t.value,r.value));e.watch(t,()=>{v.value||(r.value=void 0),t.value.template.pages[n.value]||(n.value=0)});function d(x){r.value=x,n.value=x.pageIndex}function E(x){const p=r.value;return p?s(f=>{const N=pe(f,p);N&&x(N,f)}):!1}function i(x){E((p,f)=>{const N=f.template.pages[r.value.pageIndex];Ve(p,ge(x,N,p.kind==="list"))})}function g(x){let p=-1;const f=n.value;s(N=>{const h=N.template.pages[f].components;h.push(Fe(x)),p=h.length-1})&&d({pageIndex:f,componentIndex:p})}function k(){const x=r.value;x&&s(p=>{p.template.pages[x.pageIndex].components.splice(x.componentIndex,1)})&&(r.value=void 0)}function V(){const x=r.value;if(!x)return;let p=-1;s(f=>{const N=f.template.pages[x.pageIndex],h=structuredClone(pe(f,x)),w=le(h);w.leftMm+=4,w.topMm+=4,Ve(h,ge(w,N,h.kind==="list")),h.kind==="list"?delete h.id:(delete h.nid,delete h.rkey),N.components.push(h),p=N.components.length-1})&&d({pageIndex:x.pageIndex,componentIndex:p})}function _(x){const p=r.value;if(!p)return;const f=p.componentIndex+x;t.value.template.pages[p.pageIndex]?.components[f]&&s(N=>{const h=N.template.pages[p.pageIndex].components;h.splice(f,0,h.splice(p.componentIndex,1)[0])})&&d({pageIndex:p.pageIndex,componentIndex:f})}return{mode:l,selection:r,pageIndex:n,active:v,select:d,mutate:E,geometry:i,insert:g,remove:k,duplicate:V,reorder:_}}function Zt(t,s,l){const{draft:r,lists:n,selected:v,activeList:d,blocked:E,jsonPending:i,error:g}=t,{section:k,activeIndex:V}=s,_=Qt(r,t.transaction),{mode:x,selection:p,pageIndex:f,active:N}=_,h=e.ref("excel"),w=e.ref(new Set);e.watch([k,h],()=>{k.value==="tools"&&(w.value=new Set([...w.value,h.value]))}),e.watch(p,S=>{if(!S)return;const M=n.value.findIndex(D=>D.pageIndex===S.pageIndex&&D.componentIndex===S.componentIndex);M>=0&&(v.value=M)});const c=e.computed(()=>t.editingReadonly.value||E.value||i.value),y=e.computed(()=>l()?.[d.value?.dataset??""]);function m(S){x.value=S,k.value==="tools"&&(k.value=S==="design"?"component":"fields")}function b(S){if(!r.value.template.pages[S.pageIndex]?.components[S.componentIndex])return;if(_.select(S),r.value.template.pages[S.pageIndex]?.components[S.componentIndex]?.kind==="list"){const D=n.value.findIndex($=>$.pageIndex===S.pageIndex&&$.componentIndex===S.componentIndex);D>=0&&(v.value=D),k.value="fields"}else k.value="component"}function C(S){const M=S.target;M.value&&(_.insert(M.value),x.value="design",k.value="component",M.value="")}function B(S){_.mutate((M,D)=>{if(M.kind!=="list"&&S.pageAnchor!==M.pageAnchor){const P=D.template.pages[p.value.pageIndex];S.pageAnchor==="header"&&(M.topMm=P.marginTopMm??0),S.pageAnchor==="footer"&&(M.topMm=Math.max(0,P.heightMm-(P.marginBottomMm??0)-M.heightMm))}const $=M;for(const[P,q]of Object.entries(S))q===void 0?delete $[P]:$[P]=q})}function L(S){const M=n.value[v.value];M&&t.transaction(D=>{D.template.pages[M.pageIndex].components[M.componentIndex]=S})}function O(S){const M=d.value;if(!M)return;const D=JSON.parse(JSON.stringify(M));try{ze(D,V.value,V.value+S)&&(L(D),s.activate(V.value+S))}catch($){g.value=$ instanceof Error?$.message:String($)}}function o(S){const M=n.value[v.value];M&&t.transaction(D=>{const $=D.template.pages[M.pageIndex].components[M.componentIndex];$?.kind==="list"&&(S.action==="add"?He($):S.action==="merge"?je($,S.row,S.first,S.last):Oe($,S.row,S.first))})}function z(S){const M=/\.pages\[(\d+)\]\.components\[(\d+)\]/.exec(S.path??""),D=S.pageIndex??(M?Number(M[1]):void 0),$=S.componentIndex??(M?Number(M[2]):void 0);if(!(D===void 0||$===void 0)&&(x.value="design",b({pageIndex:D,componentIndex:$}),S.field)){const P=d.value?.columns.findIndex(q=>q.field===S.field);P!==void 0&&P>=0&&s.activate(P)}}return{mode:x,setMode:m,canvasSelection:p,canvasPage:f,canvasActive:N,tool:h,visitedTools:w,editDisabled:c,dataSchema:y,chooseCanvas:b,insertComponent:C,patchCanvas:B,changeList:L,moveColumn:O,headerCommand:o,locateReview:z,canvas:_}}function en(t,s,l){if(!t.length)return;const r=Math.max(0,t.indexOf(s)),v={ArrowDown:Math.min(r+1,t.length-1),ArrowUp:Math.max(r-1,0),Home:0,End:t.length-1}[l];return v===void 0?void 0:t[v]}function tn(t,s,l){const r=e.ref(!1),n=e.ref(t.activeIndex.value),v=e.ref(null),d=e.ref(null),E=e.ref(null),i=e.ref(null);function g(w=!1){const c=i.value,y=c?.querySelector(`button[data-column-index="${n.value}"]`);if(!c||!y)return;w&&y.focus({preventScroll:!0});const m=c.getBoundingClientRect(),b=y.getBoundingClientRect(),C=m.top+c.clientTop,B=C+c.clientHeight;b.top<C?c.scrollTop+=b.top-C:b.bottom>B&&(c.scrollTop+=b.bottom-B)}async function k(w=!1){r.value&&(r.value=!1,w&&(await e.nextTick(),v.value?.focus({preventScroll:!0})))}async function V(){if(r.value)return k(!0);const w=l.value.map(c=>c.index);n.value=w.includes(t.activeIndex.value)?t.activeIndex.value:w[0]??-1,r.value=!0,await e.nextTick(),E.value?.focus({preventScroll:!0}),g()}function _(w){t.activate(w),k(!0)}function x(w){r.value&&(w.preventDefault(),w.stopPropagation(),k(!0))}async function p(w){const c=en(l.value.map(y=>y.index),n.value,w.key);c!==void 0&&(n.value=c,w.preventDefault(),await e.nextTick(),g(!0))}async function f(w){if(!["ArrowDown","ArrowUp","Enter"].includes(w.key))return;w.preventDefault(),w.stopPropagation();const c=l.value.map(y=>y.index);if(c.length){if(w.key==="Enter"){c.includes(n.value)&&_(n.value);return}w.key==="ArrowUp"&&(n.value=c.at(-1)),await e.nextTick(),g(!0)}}function N(w){const c=w.target;!r.value||d.value?.contains(c)||v.value?.contains(c)||k()}function h(w){const c=w.relatedTarget;!c||d.value?.contains(c)||v.value?.contains(c)||k()}return e.watch(l,w=>{w.some(c=>c.index===n.value)||(n.value=w[0]?.index??-1)}),e.watch(s,()=>{k()}),e.onMounted(()=>document.addEventListener("pointerdown",N)),e.onBeforeUnmount(()=>document.removeEventListener("pointerdown",N)),{open:r,cursor:n,trigger:v,panel:d,search:E,list:i,toggle:V,close:k,choose:_,escape:x,navigate:p,searchKeydown:f,leave:h}}function nn(t,s,l,r){const n=e.ref(0),v=e.ref(""),d=e.ref([]),E=e.computed(()=>t.value.template.pages.flatMap((c,y)=>c.components.flatMap((m,b)=>m.kind==="list"?[{component:m,pageIndex:y,componentIndex:b}]:[]))),i=e.computed(()=>E.value[n.value]?.component),g=e.computed(()=>{const c=i.value;if(!c)return[];const y=c.columns.map(m=>m.headerStyle?.align??m.headerAlign??c.headerStyle?.align??c.headerAlign??m.style?.align??"center");if(c.headerGrid&&s())for(const m of T.resolveGridLayout(c.headerGrid,c.widthMm,100).cells)for(let b=m.ci;b<m.ci+(m.cell.colSpan??1);b++)y[b]=m.cell.style?.align??"left";return y}),k=e.computed(()=>{const c=v.value.trim().toLocaleLowerCase().split(/\s+/).filter(Boolean);return(i.value?.columns??[]).flatMap((y,m)=>{const b=`${y.header} ${y.field}`.toLocaleLowerCase();return c.every(C=>b.includes(C))?[{column:y,index:m}]:[]})});function V(c,y){d.value=y?[...new Set([...d.value,c])]:d.value.filter(m=>m!==c)}function _(c){for(const y of k.value)V(y.index,c)}function x(){d.value=[]}function p(c,y,m){if(!l())return;const b=i.value?.columns[c];b&&(y==="hidden"&&m===!0&&!i.value?.columns.some((C,B)=>B!==c&&!C.hidden)||(Object.assign(b,{[y]:y==="widthMm"?Number(m):m}),y==="header"&&N(c,String(m)),y==="headerAlign"&&h(c,m),y==="widthMm"&&f(),r()))}function f(){const c=E.value[n.value];if(!c)return;const y=c.component,m=t.value.template.pages[c.pageIndex],b=y.columns.map(C=>C.widthMm);y.headerGrid&&(y.headerGrid.colWidthsMm=b),m.layout==="wide"&&b.every(C=>Number.isFinite(C)&&C>0)&&(y.widthMm=b.reduce((C,B)=>C+B,0),m.widthMm=Math.max(...m.components.map(C=>C.leftMm+C.widthMm))+(m.marginRightMm??0))}function N(c,y){const m=i.value;if(!m?.headerGrid)return;const C=T.resolveGridLayout(m.headerGrid,m.widthMm,100).cells.filter(({ci:B,cell:L})=>B<=c&&B+(L.colSpan??1)>c).slice(-1)[0];C&&(Object.assign(C.cell,{text:y,rawText:y,value:y}),m.columns.slice(C.ci,C.ci+(C.cell.colSpan??1)).forEach(B=>{B.header=y}))}function h(c,y){const m=i.value,b=m?.columns[c];if(b?.headerStyle?.align!==void 0&&(b.headerStyle={...b.headerStyle,align:y}),!m?.headerGrid)return;const B=T.resolveGridLayout(m.headerGrid,m.widthMm,100).cells.filter(({ci:L,cell:O})=>L<=c&&L+(O.colSpan??1)>c).slice(-1)[0];B&&(B.cell.style={...B.cell.style,align:y},m.columns.slice(B.ci,B.ci+(B.cell.colSpan??1)).forEach(L=>{L.headerAlign=y,L.headerStyle?.align!==void 0&&(L.headerStyle={...L.headerStyle,align:y})}))}function w(c,y){if(!(!l()||c==="headerAlign"&&y==="auto")){for(const m of d.value){const b=i.value?.columns[m];b&&(Object.assign(b,{[c]:y}),c==="headerAlign"&&h(m,y))}r()}}return{selected:n,query:v,selectedColumns:d,lists:E,activeList:i,headerAlignments:g,visibleColumns:k,toggleColumn:V,selectVisible:_,clearSelection:x,setColumn:p,alignColumns:w}}function ee(t){return t.kind==="snapshot"?t.value.length*2:(t.removed.length+t.inserted.length)*2+16}function on(t,s,l=!1){const r={kind:"snapshot",value:s};if(l)return r;let n=0;const v=Math.min(t.length,s.length);for(;n<v&&t.charCodeAt(n)===s.charCodeAt(n);)n++;let d=t.length,E=s.length;for(;d>n&&E>n&&t.charCodeAt(d-1)===s.charCodeAt(E-1);)d--,E--;const i={kind:"patch",start:n,removed:t.slice(n,d),inserted:s.slice(n,E)};return ee(i)<ee(r)?i:r}function se(t,s,l=!1){if(s.kind==="snapshot")return s.value;const r=l?s.inserted:s.removed,n=l?s.removed:s.inserted;return t.slice(0,s.start)+n+t.slice(s.start+r.length)}function ln(t,s={entries:100,bytes:16*1024*1024}){if(![s.entries,s.bytes].every(p=>Number.isSafeInteger(p)&&p>0))throw new RangeError("History budgets must be positive safe integers");const l=e.shallowRef([{kind:"snapshot",value:t}]),r=e.ref(0),n=e.ref(t),v=e.computed(()=>r.value>0),d=e.computed(()=>r.value+1<l.value.length),E=e.computed(()=>n.value),i=e.computed(()=>l.value.reduce((p,f)=>p+ee(f),0));function g(p){l.value=[{kind:"snapshot",value:p}],r.value=0,n.value=p}function k(p){let f=p;for(;f>0&&l.value[f].kind!=="snapshot";)f--;let N="";for(;f<=p;f++)N=se(N,l.value[f]);return N}function V(p){let f=p.reduce((N,h)=>N+ee(h),0);for(;p.length>1&&(p.length>s.entries||f>s.bytes);){const N=p[0],h=p[1],w={kind:"snapshot",value:se(N.value,h)};f+=ee(w)-ee(N)-ee(h),p.splice(0,2,w)}return p}function _(p){if(n.value===p)return;const f=l.value.slice(0,r.value+1);f.push(on(n.value,p,f.length%20===0)),l.value=V(f),r.value=l.value.length-1,n.value=p}function x(p){if(p<0?!v.value:!d.value)return;const f=l.value[r.value];return p<0&&f.kind==="patch"?n.value=se(n.value,f,!0):p>0?n.value=se(n.value,l.value[r.value+1]):n.value=k(r.value-1),r.value+=p,n.value}return{canUndo:v,canRedo:d,current:E,retainedBytes:i,reset:g,record:_,move:x}}function an(t){const s=e.shallowRef(null),l=e.ref(!1);let r,n=0;function v(i){r?.(i),r=void 0,s.value=null}function d(){n++,v(!1),l.value=!1}async function E(i){d();const g=n,k=t();l.value=!0;try{const V=await new Promise((_,x)=>{if(r=_,!k){s.value=i;return}Promise.resolve().then(()=>n===g?k(i):!1).then(p=>{n===g&&v(p===!0)},p=>{n===g&&(r=void 0,s.value=null,x(p))})});return n===g&&V===!0}finally{n===g&&(l.value=!1)}}return e.onBeforeUnmount(d),{confirmation:s,pending:l,decide:v,request:E,cancel:d}}function rn(t,s){const l=e.ref(T.parseReportTemplate(t.modelValue)),r=e.ref(T.serializeReportTemplate(l.value)),n=e.ref(T.serializeReportTemplate(l.value)),v=e.ref(""),d=e.ref(!1),E=e.computed(()=>({...ae,...t.messages})),i=e.computed(()=>({showExport:!1,showPrint:!1,showPdfWindow:!1,...t.preview,theme:{shellBg:"#f1f5f9",shellFg:"#334155",toolbarBg:"#ffffff",toolbarBorder:"#e2e8f0",toolbarFg:"#334155",btnFg:"#475569",btnBorder:"#cbd5e1",btnHoverBg:"#eff6ff",btnHoverFg:"#1d4ed8",btnActiveBg:"#2563eb",...t.preview?.theme}}));fe.provideMachReportConfig({get defaults(){return i.value}});let g,k=0;const V=e.computed(()=>T.validateReportTemplateDocument(l.value)),_=e.computed(()=>{try{return T.serializeReportTemplate(l.value)!==r.value}catch{return!0}}),x=e.ref(n.value),p=e.computed(()=>n.value!==x.value),f=e.computed(()=>_.value||n.value!==x.value),N=()=>JSON.stringify({document:l.value,json:n.value,appliedJson:x.value}),h=ln(N()),w=an(()=>t.beforeDiscard),c=e.computed(()=>d.value||w.pending.value),y=()=>!t.readonly&&!c.value&&!p.value,m=nn(l,()=>V.value.ok,y,$),{selected:b,lists:C,activeList:B,headerAlignments:L,setColumn:O}=m;e.watch(b,()=>m.clearSelection());const o=e.computed(()=>V.value.ok?fe.createLocalFetcher({draft:{template:l.value.template,datasets:t.datasets??{},params:[]}}):void 0);function z(){k++,g?.abort(),g=void 0,d.value=!1}let S=0;async function M(R="replace",I){if(!f.value)return!0;const G=N();try{return await w.request({reason:R,document:JSON.parse(JSON.stringify(l.value)),replacement:I?T.parseReportTemplate(I):void 0,pendingLocalChanges:!0})&&G===N()}catch(U){return v.value=U instanceof Error?U.message:String(U),!1}}function D(R){z(),l.value=R,r.value=T.serializeReportTemplate(R),n.value=r.value,x.value=n.value,v.value="",b.value=0,m.clearSelection(),h.reset(N())}e.watch(()=>t.modelValue,async R=>{let I;try{I=T.parseReportTemplate(R)}catch(U){v.value=U instanceof Error?U.message:String(U);return}try{if(T.serializeReportTemplate(I)===T.serializeReportTemplate(l.value))return}catch{}const G=++S;if(z(),!await M("replace",I)){G===S&&V.value.ok&&s("update:modelValue",T.parseReportTemplate(l.value));return}G===S&&D(I)}),e.onBeforeUnmount(()=>{S++,z()});function $(){w.cancel(),v.value="",V.value.ok&&(n.value=T.serializeReportTemplate(l.value),x.value=n.value,s("update:modelValue",T.parseReportTemplate(l.value))),h.record(N())}function P(R){if(!y())return!1;try{const I=T.parseReportTemplate(l.value);R(I);const G=T.validateReportTemplateDocument(I);if(!G.ok)throw new Error(G.errors.map(U=>`${U.path}: ${U.message}`).join(`
|
|
2
|
+
`));return l.value=I,$(),!0}catch(I){return v.value=I instanceof Error?I.message:String(I),!1}}async function q(R){if(!y())return!1;try{const I=T.parseReportTemplate(R);return!await M("replace",I)||!y()?!1:(l.value=I,b.value=0,m.clearSelection(),$(),!0)}catch(I){return v.value=I instanceof Error?I.message:String(I),!1}}function oe(R){y()&&(l.value.name=R,$())}function re(R){y()&&(l.value.description=R,$())}function Y(){if(!(t.readonly||c.value))try{const R=T.parseReportTemplate(n.value);if(R.id!==l.value.id)throw new Error("属性编辑不允许更换模板 ID,请另存为新模板");if(R.revision!==l.value.revision)throw new Error("修订号由保存服务管理,不能在 JSON 中修改");l.value=R,b.value=0,m.clearSelection(),$()}catch(R){v.value=R instanceof Error?R.message:String(R)}}async function K(){c.value||t.readonly||!await M("reset")||(D(T.parseReportTemplate(r.value)),s("update:modelValue",T.parseReportTemplate(l.value)))}function W(R){if(c.value||t.readonly)return;h.record(N());const I=h.move(R);if(!I)return;w.cancel();const G=JSON.parse(I);l.value=G.document,n.value=G.json,x.value=G.appliedJson,v.value="",b.value=0,m.clearSelection(),V.value.ok&&s("update:modelValue",T.parseReportTemplate(l.value))}async function Q(){if(!t.save||!y()||!V.value.ok)return;const R=++k;g=new AbortController,d.value=!0,v.value="";const I=T.parseReportTemplate(l.value);try{const G=T.parseReportTemplate(await t.save(I,{expectedRevision:I.revision,signal:g.signal}));if(R!==k)return;if(G.id!==I.id)throw new Error("保存服务返回了其他模板的文档");l.value=G,r.value=T.serializeReportTemplate(G),n.value=r.value,x.value=n.value,h.reset(N()),s("saved",T.parseReportTemplate(G)),s("update:modelValue",T.parseReportTemplate(G))}catch(G){R===k&&(v.value=G instanceof Error?G.message:String(G))}finally{R===k&&(d.value=!1,g=void 0)}}const te=e.computed(()=>h.canUndo.value||N()!==h.current.value),J=e.computed(()=>h.canRedo.value&&N()===h.current.value);return{...m,editingReadonly:e.computed(()=>t.readonly===!0),transaction:P,replaceDocument:q,originalDocument:e.computed(()=>T.parseReportTemplate(r.value)),canUndo:te,canRedo:J,undo:()=>W(-1),redo:()=>W(1),pendingLocalChanges:f,jsonPending:p,blocked:c,confirmation:w.confirmation,decideDiscard:w.decide,guardChanges:M,draft:l,json:n,selected:b,error:v,saving:d,dirty:_,validation:V,lists:C,activeList:B,headerAlignments:L,previewOptions:i,fetcher:o,messages:E,setName:oe,setDescription:re,setColumn:O,applyJson:Y,reset:K,save:Q}}function sn(t,s){const l=e.ref("fields"),r=()=>s.value?.columns.length?0:-1,n=e.ref(r()),v=e.computed(()=>{const i=s.value?.columns[n.value];return i?{column:i,index:n.value}:void 0});e.watch(t,()=>{n.value=r()}),e.watch(s,i=>{i?.columns[n.value]||(n.value=r())});function d(i){s.value?.columns[i]&&(n.value=i)}function E(i){const g=s.value?.columns.length??0;g&&(n.value=Math.max(0,Math.min(g-1,n.value+i)))}return{section:l,activeIndex:n,activeColumn:v,activate:d,stepColumn:E}}const cn=["aria-label","aria-busy"],dn={class:"mr-designer-bar"},un={class:"mr-designer-heading"},mn=["aria-label"],pn=["id","aria-selected","aria-controls","tabindex","onClick"],fn=["aria-label"],vn=["aria-pressed"],gn=["aria-pressed"],hn={class:"mr-designer-actions"},yn={class:"mr-designer-history"},kn=["aria-label","title","disabled"],bn=["aria-label","title","disabled"],En=["disabled"],wn=["disabled"],Sn=["aria-label"],Vn={key:0,class:"mr-designer-tools"},Nn=["aria-label"],xn=["aria-pressed","onClick"],Cn={class:"mr-designer-tool-content"},Bn={key:2,class:"mr-designer-rule-workspace"},Mn={key:0},Dn=["value"],_n={key:2,class:"mr-designer-note"},Tn={key:1,class:"mr-designer-inspector"},$n=["id","aria-labelledby"],Rn={key:0,class:"mr-designer-area"},In=["value"],Ln={class:"mr-designer-current"},An=["aria-expanded","aria-controls"],Gn={class:"mr-designer-current-name"},Pn={class:"mr-designer-directory-entry"},Fn={class:"mr-designer-field-position"},zn=["aria-label"],Hn=["aria-label","title","disabled"],jn=["aria-label","title","disabled"],On=["disabled","aria-label"],Un={class:"mr-designer-property-group"},Jn=["value"],Kn=["value","list"],Wn=["id"],qn=["value"],Xn={class:"mr-designer-property-group"},Yn={class:"mr-designer-format-pair"},Qn={class:"mr-designer-stacked"},Zn=["value"],eo={class:"mr-designer-stacked"},to=["value"],no={value:"identifier"},oo={value:"dimension"},lo={value:"measure"},ao={value:"date"},ro={value:"text"},io={class:"mr-designer-control-row"},so={class:"mr-designer-control-row"},co={class:"mr-designer-toggle"},uo=["checked"],mo={class:"mr-designer-column-structure"},po=["aria-label","title","disabled"],fo=["aria-label","title","disabled"],vo=["checked","disabled"],go=["id","aria-label"],ho={class:"mr-designer-directory-heading"},yo=["aria-label"],ko={class:"mr-designer-search"},bo=["aria-label","placeholder"],Eo=["aria-label","title"],wo={class:"mr-designer-column-tools"},So=["disabled"],Vo={key:1,role:"status"},No={key:2},xo=["aria-label"],Co=["aria-label","checked","disabled","onChange"],Bo=["data-column-index","aria-pressed","tabindex","onClick"],Mo={class:"mr-designer-column-number"},Do={class:"mr-designer-column-name"},_o={key:0,role:"status",class:"mr-designer-empty"},To={key:0,class:"mr-designer-batch"},$o=["aria-label","disabled"],Ro={value:""},Io={value:"auto"},Lo={value:"left"},Ao={value:"center"},Go={value:"right"},Po={value:"justify"},Fo=["aria-label","disabled"],zo={value:""},Ho={value:"left"},jo={value:"center"},Oo={value:"right"},Uo={value:"justify"},Jo={key:2,role:"status",class:"mr-designer-empty"},Ko={class:"mr-designer-object-tools"},Wo=["aria-label","disabled"],qo={value:""},Xo={value:"text"},Yo={value:"list"},Qo={value:"image"},Zo={value:"rect"},el=["title","aria-label","disabled"],tl=["title","aria-label","disabled"],nl={key:0},ol=["value"],ll={class:"mr-designer-stacked"},al=["value"],rl={value:-1,disabled:""},il=["value"],sl={class:"mr-designer-layer-tools"},cl=["disabled"],dl=["disabled"],ul={key:2,class:"mr-designer-empty"},ml={class:"mr-designer-stacked"},pl=["value","disabled"],fl={class:"mr-designer-stacked"},vl=["value","disabled"],gl={class:"mr-designer-technical"},hl={class:"mr-designer-identity"},yl={class:"mr-designer-stacked mr-designer-json-label"},kl=["aria-label","disabled"],bl=["disabled"],El={key:4,role:"status",class:"mr-designer-note mr-designer-pending"},wl=["aria-label"],Sl={key:0,role:"alert",class:"mr-designer-error"},Vl={key:1,role:"alert",class:"mr-designer-error"},Nl={key:4,class:"mr-designer-note mr-designer-invalid"},xl=e.defineComponent({__name:"ReportTemplateEditor",props:{modelValue:{},datasets:{},dataSchemas:{},bindingDatasets:{},bindingSession:{},readonly:{type:Boolean},messages:{},preview:{},beforeDiscard:{type:Function},save:{type:Function}},emits:["update:modelValue","saved","excel-bound"],setup(t,{expose:s,emit:l}){const r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ExcelBindingWizard-DiaxvWpQ.cjs"))),n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./RuleEditor-N4qnMZ-Z.cjs"))),v=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./TemplateReviewPanel-C_Lmzis6.cjs"))),d=t,E=l,i=rn(d,(F,u)=>{E(F==="saved"?"saved":"update:modelValue",u)}),{draft:g,json:k,selected:V,error:_,saving:x,pendingLocalChanges:p,jsonPending:f,blocked:N,confirmation:h,canUndo:w,canRedo:c,validation:y,lists:m,activeList:b,visibleColumns:C,query:B,selectedColumns:L,fetcher:O,messages:o}=i,z=sn(V,b),{section:S,activeIndex:M,activeColumn:D}=z,$=`mr-designer-${e.getCurrentInstance()?.uid??0}`,P=["fields","component","template","tools","advanced"],q=Zt(i,z,()=>d.dataSchemas),{mode:oe,setMode:re,canvasSelection:Y,canvasPage:K,canvasActive:W,tool:Q,visitedTools:te,editDisabled:J,dataSchema:R,chooseCanvas:I,insertComponent:G,patchCanvas:U,changeList:Ce,moveColumn:ke,headerCommand:Be,locateReview:Me,canvas:X}=q,De=e.computed(()=>x.value?o.value.saving:d.readonly?o.value.readonly:p.value?o.value.dirty:o.value.ready),be=e.ref(null),ue=e.ref(null),j=tn(z,S,C),{open:Ee,cursor:_e,trigger:Te,panel:$e,search:Re,list:Ie}=j;e.watch(S,async()=>{await e.nextTick(),ue.value&&(ue.value.scrollTop=0)});const we=e.computed(()=>({auto:o.value.auto,left:o.value.left,center:o.value.center,right:o.value.right,justify:o.value.justify}));let ie=null;e.watch(h,async F=>{F?(ie=document.activeElement,await e.nextTick(),be.value?.focus()):(await e.nextTick(),ie?.isConnected&&ie.focus(),ie=null)}),s({get pendingLocalChanges(){return p.value},get saving(){return x.value},get blocked(){return N.value},guardChanges:i.guardChanges,reset:i.reset,save:i.save});async function Le(F){const u={...F.document,id:g.value.id};if(g.value.revision===void 0?delete u.revision:u.revision=g.value.revision,!await i.replaceDocument(u))return;const a=T.parseReportTemplate(i.draft.value);E("excel-bound",{...F,document:a,session:{...F.session,identity:{id:a.id,name:a.name}}})}function Z(F){return F.target.value}function me(F){return F.target.checked}function Se(F,u){const a=F.target;i.alignColumns(u,a.value),a.value=""}async function Ae(F){const a={ArrowRight:1,ArrowLeft:-1,Home:-P.length,End:P.length}[F.key];if(a===void 0)return;F.preventDefault();const A=P.indexOf(S.value),ne=F.key==="Home"?0:F.key==="End"?P.length-1:(A+a+P.length)%P.length;S.value=P[ne];const Ge=F.currentTarget.parentElement;await e.nextTick(),Ge?.querySelector(`#${$}-tab-${S.value}`)?.focus()}return(F,u)=>(e.openBlock(),e.createElementBlock("section",{class:"mr-designer","aria-label":e.unref(o).title,"aria-busy":e.unref(x)},[e.createElementVNode("header",dn,[e.createElementVNode("div",un,[e.createVNode(H._sfc_main,{name:"columns",size:15}),e.createElementVNode("strong",null,e.toDisplayString(e.unref(o).heading),1),e.createElementVNode("span",{class:e.normalizeClass({"mr-designer-dirty":e.unref(p)})},e.toDisplayString(De.value),3)]),e.createElementVNode("nav",{class:"mr-designer-tabs",role:"tablist","aria-label":e.unref(o).sectionsLabel},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(P,a=>e.createElementVNode("button",{id:`${$}-tab-${a}`,key:a,type:"button",role:"tab","aria-selected":e.unref(S)===a,"aria-controls":`${$}-panel-${a}`,tabindex:e.unref(S)===a?0:-1,onClick:A=>S.value=a,onKeydown:Ae},e.toDisplayString(e.unref(o)[`${a}Section`]),41,pn)),64))],8,mn),e.createElementVNode("div",{class:"mr-designer-mode",role:"group","aria-label":e.unref(o).design},[e.createElementVNode("button",{type:"button","aria-pressed":e.unref(oe)==="design",onClick:u[0]||(u[0]=a=>e.unref(re)("design"))},e.toDisplayString(e.unref(o).design),9,vn),e.createElementVNode("button",{type:"button","aria-pressed":e.unref(oe)==="preview",onClick:u[1]||(u[1]=a=>e.unref(re)("preview"))},e.toDisplayString(e.unref(o).preview),9,gn)],8,fn),e.createElementVNode("div",hn,[e.createElementVNode("div",yn,[e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).undo,title:e.unref(o).undo,disabled:t.readonly||e.unref(N)||!e.unref(w),onClick:u[2]||(u[2]=(...a)=>e.unref(i).undo&&e.unref(i).undo(...a))},[...u[48]||(u[48]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},[e.createElementVNode("path",{d:"M4 10h10a6 6 0 0 1 0 12M4 10l5-5M4 10l5 5"})],-1)])],8,kn),e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).redo,title:e.unref(o).redo,disabled:t.readonly||e.unref(N)||!e.unref(c),onClick:u[3]||(u[3]=(...a)=>e.unref(i).redo&&e.unref(i).redo(...a))},[...u[49]||(u[49]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},[e.createElementVNode("path",{d:"M20 10H10a6 6 0 0 0 0 12m10-12-5-5m5 5-5 5"})],-1)])],8,bn)]),e.createElementVNode("button",{type:"button",class:"mr-designer-reset",disabled:t.readonly||e.unref(N)||!e.unref(p),onClick:u[4]||(u[4]=(...a)=>e.unref(i).reset&&e.unref(i).reset(...a))},e.toDisplayString(e.unref(o).reset),9,En),t.save?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mr-designer-save",disabled:t.readonly||e.unref(N)||e.unref(f)||!e.unref(y).ok||!e.unref(p),onClick:u[5]||(u[5]=(...a)=>e.unref(i).save&&e.unref(i).save(...a))},[e.createVNode(H._sfc_main,{name:"file",size:13}),e.createTextVNode(e.toDisplayString(e.unref(x)?e.unref(o).saving:e.unref(o).save),1)],8,wn)):e.createCommentVNode("",!0)])]),e.unref(h)?(e.openBlock(),e.createElementBlock("div",{key:0,role:"alertdialog","aria-label":e.unref(o).discardTitle,class:"mr-designer-confirm",onKeydown:u[8]||(u[8]=e.withKeys(e.withModifiers(a=>e.unref(i).decideDiscard(!1),["prevent","stop"]),["esc"]))},[e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(o).discardTitle),1),e.createElementVNode("p",null,e.toDisplayString(e.unref(o).discardDescription),1)]),e.createElementVNode("div",null,[e.createElementVNode("button",{ref_key:"keepButton",ref:be,type:"button",onClick:u[6]||(u[6]=a=>e.unref(i).decideDiscard(!1))},e.toDisplayString(e.unref(o).keepEditing),513),e.createElementVNode("button",{type:"button",onClick:u[7]||(u[7]=a=>e.unref(i).decideDiscard(!0))},e.toDisplayString(e.unref(o).discard),1)])],40,Sn)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["mr-designer-body",{"is-tools":e.unref(S)==="tools"}])},[e.unref(te).size?e.withDirectives((e.openBlock(),e.createElementBlock("div",Vn,[e.createElementVNode("nav",{class:"mr-designer-tool-tabs","aria-label":e.unref(o).toolsSection},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["excel","rules","review"],a=>e.createElementVNode("button",{key:a,type:"button","aria-pressed":e.unref(Q)===a,onClick:A=>Q.value=a},e.toDisplayString(e.unref(o)[`${a}Tool`]),9,xn)),64)),e.createElementVNode("span",null,e.toDisplayString(e.unref(o).toolsDescription),1)],8,Nn),e.createElementVNode("div",Cn,[e.unref(te).has("excel")?e.withDirectives((e.openBlock(),e.createBlock(e.unref(r),{key:0,datasets:t.bindingDatasets??[],session:t.bindingSession,identity:{id:e.unref(g).id,name:e.unref(g).name},"lock-id":"",readonly:e.unref(J),onApply:Le},null,8,["datasets","session","identity","readonly"])),[[e.vShow,e.unref(Q)==="excel"]]):e.createCommentVNode("",!0),e.unref(te).has("review")?e.withDirectives((e.openBlock(),e.createBlock(e.unref(v),{key:1,document:e.unref(g),previous:e.unref(i).originalDocument.value,datasets:t.datasets,"data-schemas":t.dataSchemas,onLocate:e.unref(Me)},null,8,["document","previous","datasets","data-schemas","onLocate"])),[[e.vShow,e.unref(Q)==="review"]]):e.createCommentVNode("",!0),e.unref(te).has("rules")?e.withDirectives((e.openBlock(),e.createElementBlock("div",Bn,[e.unref(m).length>1?(e.openBlock(),e.createElementBlock("label",Mn,[e.createTextVNode(e.toDisplayString(e.unref(o).area),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[9]||(u[9]=a=>e.isRef(V)?V.value=a:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(m),(a,A)=>(e.openBlock(),e.createElementBlock("option",{key:A,value:A},e.toDisplayString(a.component.title||a.component.dataset),9,Dn))),128))],512),[[e.vModelSelect,e.unref(V)]])])):e.createCommentVNode("",!0),e.unref(b)?(e.openBlock(),e.createBlock(e.unref(n),{key:1,list:e.unref(b),datasets:t.datasets,"dataset-schema":e.unref(R),"dataset-schemas":t.dataSchemas,readonly:e.unref(J),onChange:e.unref(Ce)},null,8,["list","datasets","dataset-schema","dataset-schemas","readonly","onChange"])):(e.openBlock(),e.createElementBlock("p",_n,e.toDisplayString(e.unref(o).rulesNeedList),1))],512)),[[e.vShow,e.unref(Q)==="rules"]]):e.createCommentVNode("",!0)])],512)),[[e.vShow,e.unref(S)==="tools"]]):e.createCommentVNode("",!0),e.unref(S)!=="tools"?(e.openBlock(),e.createElementBlock("aside",Tn,[e.createElementVNode("div",{ref_key:"inspectorPanel",ref:ue,id:`${$}-panel-${e.unref(S)}`,class:e.normalizeClass(["mr-designer-panel",{"is-advanced":e.unref(S)==="advanced"}]),role:"tabpanel","aria-labelledby":`${$}-tab-${e.unref(S)}`},[e.unref(S)==="fields"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.unref(m).length>1?(e.openBlock(),e.createElementBlock("label",Rn,[e.createTextVNode(e.toDisplayString(e.unref(o).area),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[10]||(u[10]=a=>e.isRef(V)?V.value=a:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(m),(a,A)=>(e.openBlock(),e.createElementBlock("option",{key:A,value:A},e.toDisplayString(a.pageIndex+1)+" "+e.toDisplayString(e.unref(o).page)+" · "+e.toDisplayString(a.component.title||a.component.dataset),9,In))),128))],512),[[e.vModelSelect,e.unref(V)]])])):e.createCommentVNode("",!0),e.unref(b)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Ln,[e.createElementVNode("button",{ref_key:"directoryTrigger",ref:Te,type:"button",class:"mr-designer-field-trigger","aria-expanded":e.unref(Ee),"aria-controls":`${$}-directory`,"aria-haspopup":"dialog",onClick:u[11]||(u[11]=(...a)=>e.unref(j).toggle&&e.unref(j).toggle(...a)),onKeydown:u[12]||(u[12]=e.withKeys((...a)=>e.unref(j).escape&&e.unref(j).escape(...a),["esc"]))},[e.createElementVNode("span",Gn,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(D)?.column.header||e.unref(o).noColumns),1),e.createElementVNode("small",null,e.toDisplayString(e.unref(D)?.column.field||"—"),1)]),e.createElementVNode("span",Pn,[e.createTextVNode(e.toDisplayString(e.unref(o).columnDirectory)+" ",1),e.createElementVNode("b",null,e.toDisplayString(e.unref(b).columns.length),1),e.createVNode(H._sfc_main,{name:"chevron-down",size:13})])],40,An),e.createElementVNode("div",Fn,[e.createElementVNode("span",{"aria-label":e.unref(o).fieldPosition},[e.createTextVNode(e.toDisplayString(e.unref(M)>=0?e.unref(M)+1:0),1),u[50]||(u[50]=e.createElementVNode("i",null,"/",-1)),e.createTextVNode(e.toDisplayString(e.unref(b).columns.length),1)],8,zn),e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).previousColumn,title:e.unref(o).previousColumn,disabled:e.unref(M)<=0,onClick:u[13]||(u[13]=a=>e.unref(z).stepColumn(-1))},[e.createVNode(H._sfc_main,{name:"chevron-left",size:14})],8,Hn),e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).nextColumn,title:e.unref(o).nextColumn,disabled:e.unref(M)>=e.unref(b).columns.length-1,onClick:u[14]||(u[14]=a=>e.unref(z).stepColumn(1))},[e.createVNode(H._sfc_main,{name:"chevron-right",size:14})],8,jn)])]),e.unref(D)?(e.openBlock(),e.createElementBlock("fieldset",{key:0,class:"mr-designer-properties",disabled:t.readonly||e.unref(N)||e.unref(f),"aria-label":e.unref(o).columnProperties},[e.createElementVNode("div",Un,[e.createElementVNode("h3",null,e.toDisplayString(e.unref(o).contentGroup),1),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(o).header),1),e.createElementVNode("input",{value:e.unref(D).column.header,onInput:u[15]||(u[15]=a=>e.unref(i).setColumn(e.unref(D).index,"header",Z(a)))},null,40,Jn)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(o).field),1),e.createElementVNode("input",{value:e.unref(D).column.field,list:e.unref(R)?`${$}-fields`:void 0,onChange:u[16]||(u[16]=a=>e.unref(i).setColumn(e.unref(D).index,"field",Z(a)))},null,40,Kn)]),e.unref(R)?(e.openBlock(),e.createElementBlock("datalist",{key:0,id:`${$}-fields`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(R).fields,a=>(e.openBlock(),e.createElementBlock("option",{key:a.field,value:a.field},e.toDisplayString(a.label)+" · "+e.toDisplayString(a.type)+" "+e.toDisplayString(a.unit),9,qn))),128))],8,Wn)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Xn,[e.createElementVNode("h3",null,e.toDisplayString(e.unref(o).formatGroup),1),e.createElementVNode("div",Yn,[e.createElementVNode("label",Qn,[e.createTextVNode(e.toDisplayString(e.unref(o).width),1),e.createElementVNode("input",{type:"number",min:"0.1",step:"0.5",value:e.unref(D).column.widthMm,onChange:u[17]||(u[17]=a=>e.unref(i).setColumn(e.unref(D).index,"widthMm",Z(a)))},null,40,Zn)]),e.createElementVNode("label",eo,[e.createTextVNode(e.toDisplayString(e.unref(o).semantic),1),e.createElementVNode("select",{value:e.unref(D).column.semanticRole||"text",onChange:u[18]||(u[18]=a=>e.unref(i).setColumn(e.unref(D).index,"semanticRole",Z(a)))},[e.createElementVNode("option",no,e.toDisplayString(e.unref(o).identifier),1),e.createElementVNode("option",oo,e.toDisplayString(e.unref(o).dimension),1),e.createElementVNode("option",lo,e.toDisplayString(e.unref(o).measure),1),e.createElementVNode("option",ao,e.toDisplayString(e.unref(o).date),1),e.createElementVNode("option",ro,e.toDisplayString(e.unref(o).text),1)],40,to)])]),e.createElementVNode("div",io,[e.createElementVNode("span",null,e.toDisplayString(e.unref(o).bodyAlign),1),e.createVNode(he,{"model-value":e.unref(D).column.align??e.unref(D).column.style?.align??e.unref(b).align??"left",label:e.unref(o).bodyAlign,labels:we.value,"auto-label":e.unref(o).autoShort,"allow-auto":"","onUpdate:modelValue":u[19]||(u[19]=a=>e.unref(i).setColumn(e.unref(D).index,"align",a))},null,8,["model-value","label","labels","auto-label"])]),e.createElementVNode("div",so,[e.createElementVNode("span",null,e.toDisplayString(e.unref(o).headerAlign),1),e.createVNode(he,{"model-value":e.unref(i).headerAlignments.value[e.unref(D).index]||"left",label:e.unref(o).headerAlign,labels:we.value,"auto-label":e.unref(o).autoShort,"onUpdate:modelValue":u[20]||(u[20]=a=>e.unref(i).setColumn(e.unref(D).index,"headerAlign",a))},null,8,["model-value","label","labels","auto-label"])])]),e.createElementVNode("label",co,[e.createTextVNode(e.toDisplayString(e.unref(o).editable),1),e.createElementVNode("input",{type:"checkbox",role:"switch",checked:e.unref(D).column.editable===!0,onChange:u[21]||(u[21]=a=>e.unref(i).setColumn(e.unref(D).index,"editable",me(a)))},null,40,uo)]),e.createElementVNode("div",mo,[e.createElementVNode("span",null,e.toDisplayString(e.unref(o).columnOrder),1),e.createElementVNode("button",{type:"button","aria-label":e.unref(o).moveColumnLeft,title:e.unref(o).moveColumnLeft,disabled:e.unref(M)<=0,onClick:u[22]||(u[22]=a=>e.unref(ke)(-1))},[e.createVNode(H._sfc_main,{name:"chevron-left",size:13})],8,po),e.createElementVNode("button",{type:"button","aria-label":e.unref(o).moveColumnRight,title:e.unref(o).moveColumnRight,disabled:e.unref(M)>=e.unref(b).columns.length-1,onClick:u[23]||(u[23]=a=>e.unref(ke)(1))},[e.createVNode(H._sfc_main,{name:"chevron-right",size:13})],8,fo),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(o).columnVisible),1),e.createElementVNode("input",{type:"checkbox",checked:e.unref(D).column.hidden!==!0,disabled:e.unref(D).column.hidden!==!0&&e.unref(b).columns.filter(a=>!a.hidden).length===1,onChange:u[24]||(u[24]=a=>e.unref(i).setColumn(e.unref(D).index,"hidden",!me(a)))},null,40,vo)])])],8,On)):e.createCommentVNode("",!0),e.unref(Ee)?(e.openBlock(),e.createElementBlock("div",{key:1,id:`${$}-directory`,ref_key:"directoryPanel",ref:$e,role:"dialog","aria-label":e.unref(o).columnDirectory,class:"mr-designer-directory",onKeydown:u[34]||(u[34]=e.withKeys((...a)=>e.unref(j).escape&&e.unref(j).escape(...a),["esc"])),onFocusout:u[35]||(u[35]=(...a)=>e.unref(j).leave&&e.unref(j).leave(...a))},[e.createElementVNode("div",ho,[e.createElementVNode("strong",null,[e.createTextVNode(e.toDisplayString(e.unref(o).columnDirectory)+" ",1),e.createElementVNode("span",null,e.toDisplayString(e.unref(b).columns.length),1)]),e.createElementVNode("button",{type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).closeDirectory,onClick:u[25]||(u[25]=a=>e.unref(j).close(!0))},[e.createVNode(H._sfc_main,{name:"close",size:15})],8,yo)]),e.createElementVNode("div",ko,[e.createVNode(H._sfc_main,{name:"search",size:14}),e.withDirectives(e.createElementVNode("input",{ref_key:"directorySearch",ref:Re,"onUpdate:modelValue":u[26]||(u[26]=a=>e.isRef(B)?B.value=a:null),type:"search","aria-label":e.unref(o).columnsSearch,placeholder:e.unref(o).columnsSearch,onKeydown:u[27]||(u[27]=(...a)=>e.unref(j).searchKeydown&&e.unref(j).searchKeydown(...a))},null,40,bo),[[e.vModelText,e.unref(B)]]),e.unref(B)?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mr-designer-icon-button","aria-label":e.unref(o).clearSearch,title:e.unref(o).clearSearch,onClick:u[28]||(u[28]=a=>B.value="")},[e.createVNode(H._sfc_main,{name:"close",size:13})],8,Eo)):e.createCommentVNode("",!0)]),e.createElementVNode("div",wo,[e.createElementVNode("button",{type:"button",disabled:t.readonly||e.unref(N)||e.unref(f)||!e.unref(C).length,onClick:u[29]||(u[29]=a=>e.unref(i).selectVisible(!0))},e.toDisplayString(e.unref(o).selectVisible),9,So),e.unref(L).length?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",onClick:u[30]||(u[30]=(...a)=>e.unref(i).clearSelection&&e.unref(i).clearSelection(...a))},e.toDisplayString(e.unref(o).clearSelection),1)):e.createCommentVNode("",!0),e.unref(L).length?(e.openBlock(),e.createElementBlock("span",Vo,e.toDisplayString(e.unref(o).columnsSelected)+" "+e.toDisplayString(e.unref(L).length),1)):(e.openBlock(),e.createElementBlock("span",No,e.toDisplayString(e.unref(C).length)+" / "+e.toDisplayString(e.unref(b).columns.length),1))]),e.createElementVNode("div",{ref_key:"columnList",ref:Ie,class:"mr-designer-column-list","aria-label":e.unref(o).columnDirectory,role:"group"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(C),({column:a,index:A})=>(e.openBlock(),e.createElementBlock("div",{key:A,class:e.normalizeClass(["mr-designer-column-row",{"is-active":e.unref(M)===A}])},[e.createElementVNode("input",{type:"checkbox","aria-label":`${e.unref(o).selectColumn} ${a.header}`,checked:e.unref(L).includes(A),disabled:t.readonly||e.unref(N)||e.unref(f),onChange:ne=>e.unref(i).toggleColumn(A,me(ne))},null,40,Co),e.createElementVNode("button",{type:"button","data-column-index":A,"aria-pressed":e.unref(M)===A,tabindex:e.unref(_e)===A?0:-1,onClick:ne=>e.unref(j).choose(A),onKeydown:u[31]||(u[31]=(...ne)=>e.unref(j).navigate&&e.unref(j).navigate(...ne))},[e.createElementVNode("span",Mo,e.toDisplayString(A+1),1),e.createElementVNode("span",Do,[e.createElementVNode("strong",null,e.toDisplayString(a.header),1),e.createElementVNode("small",null,e.toDisplayString(a.field),1)]),e.unref(M)===A?(e.openBlock(),e.createBlock(H._sfc_main,{key:0,name:"chevron-right",size:13})):e.createCommentVNode("",!0)],40,Bo)],2))),128)),e.unref(C).length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",_o,[e.createVNode(H._sfc_main,{name:"search",size:20}),e.createTextVNode(e.toDisplayString(e.unref(o).noColumns),1)]))],8,xo),e.unref(L).length?(e.openBlock(),e.createElementBlock("div",To,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(o).batchBody),1),e.createElementVNode("select",{"aria-label":e.unref(o).batchBody,disabled:t.readonly||e.unref(N)||e.unref(f),onChange:u[32]||(u[32]=a=>Se(a,"align"))},[e.createElementVNode("option",Ro,e.toDisplayString(e.unref(o).chooseAlignment),1),e.createElementVNode("option",Io,e.toDisplayString(e.unref(o).auto),1),e.createElementVNode("option",Lo,e.toDisplayString(e.unref(o).left),1),e.createElementVNode("option",Ao,e.toDisplayString(e.unref(o).center),1),e.createElementVNode("option",Go,e.toDisplayString(e.unref(o).right),1),e.createElementVNode("option",Po,e.toDisplayString(e.unref(o).justify),1)],40,$o)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(o).batchHeader),1),e.createElementVNode("select",{"aria-label":e.unref(o).batchHeader,disabled:t.readonly||e.unref(N)||e.unref(f),onChange:u[33]||(u[33]=a=>Se(a,"headerAlign"))},[e.createElementVNode("option",zo,e.toDisplayString(e.unref(o).chooseAlignment),1),e.createElementVNode("option",Ho,e.toDisplayString(e.unref(o).left),1),e.createElementVNode("option",jo,e.toDisplayString(e.unref(o).center),1),e.createElementVNode("option",Oo,e.toDisplayString(e.unref(o).right),1),e.createElementVNode("option",Uo,e.toDisplayString(e.unref(o).justify),1)],40,Fo)])])):e.createCommentVNode("",!0)],40,go)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("p",Jo,e.toDisplayString(e.unref(o).noColumns),1))],64)):e.unref(S)==="component"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Ko,[e.createElementVNode("select",{"aria-label":e.unref(o).insertComponent,disabled:e.unref(J),onChange:u[36]||(u[36]=(...a)=>e.unref(G)&&e.unref(G)(...a))},[e.createElementVNode("option",qo,e.toDisplayString(e.unref(o).insertComponent),1),e.createElementVNode("option",Xo,e.toDisplayString(e.unref(o).insertText),1),e.createElementVNode("option",Yo,e.toDisplayString(e.unref(o).insertList),1),e.createElementVNode("option",Qo,e.toDisplayString(e.unref(o).insertImage),1),e.createElementVNode("option",Zo,e.toDisplayString(e.unref(o).insertRect),1)],40,Wo),e.createElementVNode("button",{type:"button",title:e.unref(o).duplicateComponent,"aria-label":e.unref(o).duplicateComponent,disabled:e.unref(J)||!e.unref(W),onClick:u[37]||(u[37]=(...a)=>e.unref(X).duplicate&&e.unref(X).duplicate(...a))}," + ",8,el),e.createElementVNode("button",{type:"button",title:e.unref(o).removeComponent,"aria-label":e.unref(o).removeComponent,disabled:e.unref(J)||!e.unref(W),onClick:u[38]||(u[38]=(...a)=>e.unref(X).remove&&e.unref(X).remove(...a))},[e.createVNode(H._sfc_main,{name:"close",size:14})],8,tl)]),e.unref(g).template.pages.length>1?(e.openBlock(),e.createElementBlock("label",nl,[e.createTextVNode(e.toDisplayString(e.unref(o).page),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[39]||(u[39]=a=>e.isRef(K)?K.value=a:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g).template.pages,(a,A)=>(e.openBlock(),e.createElementBlock("option",{key:A,value:A},e.toDisplayString(A+1),9,ol))),128))],512),[[e.vModelSelect,e.unref(K),void 0,{number:!0}]])])):e.createCommentVNode("",!0),e.createElementVNode("label",ll,[e.createTextVNode(e.toDisplayString(e.unref(o).components),1),e.createElementVNode("select",{value:e.unref(Y)?.pageIndex===e.unref(K)?e.unref(Y).componentIndex:-1,onChange:u[40]||(u[40]=a=>e.unref(I)({pageIndex:e.unref(K),componentIndex:Number(Z(a))}))},[e.createElementVNode("option",rl,e.toDisplayString(e.unref(o).noComponent),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g).template.pages[e.unref(K)]?.components,(a,A)=>(e.openBlock(),e.createElementBlock("option",{key:A,value:A},e.toDisplayString(A+1)+" · "+e.toDisplayString(a.kind==="list"?a.title||a.dataset:a.text||a.kind),9,il))),128))],40,al)]),e.unref(W)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",sl,[e.createElementVNode("button",{type:"button",disabled:e.unref(J)||e.unref(Y)?.componentIndex===0,onClick:u[41]||(u[41]=a=>e.unref(X).reorder(-1))},e.toDisplayString(e.unref(o).backward),9,cl),e.createElementVNode("button",{type:"button",disabled:e.unref(J)||e.unref(Y)?.componentIndex===(e.unref(g).template.pages[e.unref(K)]?.components.length??0)-1,onClick:u[42]||(u[42]=a=>e.unref(X).reorder(1))},e.toDisplayString(e.unref(o).forward),9,dl)]),e.createVNode(jt,{component:e.unref(W),disabled:e.unref(J),messages:e.unref(o),onGeometry:e.unref(X).geometry,onPatch:e.unref(U)},null,8,["component","disabled","messages","onGeometry","onPatch"]),e.unref(W).kind==="list"?(e.openBlock(),e.createBlock(Yt,{key:0,list:e.unref(W),disabled:e.unref(J),messages:e.unref(o),onCommand:e.unref(Be)},null,8,["list","disabled","messages","onCommand"])):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock("p",ul,e.toDisplayString(e.unref(o).noComponent),1))],64)):e.unref(S)==="template"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("h3",null,e.toDisplayString(e.unref(o).templateDetails),1),e.createElementVNode("label",ml,[e.createTextVNode(e.toDisplayString(e.unref(o).name),1),e.createElementVNode("input",{value:e.unref(g).name,disabled:t.readonly||e.unref(N)||e.unref(f),onInput:u[43]||(u[43]=a=>e.unref(i).setName(Z(a)))},null,40,pl)]),e.createElementVNode("label",fl,[e.createTextVNode(e.toDisplayString(e.unref(o).description),1),e.createElementVNode("textarea",{rows:"2",value:e.unref(g).description,disabled:t.readonly||e.unref(N)||e.unref(f),onInput:u[44]||(u[44]=a=>e.unref(i).setDescription(Z(a)))},null,40,vl)]),e.createElementVNode("details",gl,[e.createElementVNode("summary",null,e.toDisplayString(e.unref(o).technicalDetails),1),e.createElementVNode("dl",hl,[e.createElementVNode("dt",null,e.toDisplayString(e.unref(o).templateIdentity),1),e.createElementVNode("dd",null,e.toDisplayString(e.unref(g).id),1),e.createElementVNode("dt",null,e.toDisplayString(e.unref(o).templateRevision),1),e.createElementVNode("dd",null,e.toDisplayString(e.unref(g).revision||e.unref(o).unpublished),1)])])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h3",null,e.toDisplayString(e.unref(o).advancedTitle),1),e.createElementVNode("label",yl,[e.createTextVNode(e.toDisplayString(e.unref(o).json),1),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":u[45]||(u[45]=a=>e.isRef(k)?k.value=a:null),class:"mr-designer-json","aria-label":e.unref(o).json,disabled:t.readonly||e.unref(N),spellcheck:"false"},null,8,kl),[[e.vModelText,e.unref(k)]])]),e.createElementVNode("button",{type:"button",class:"mr-designer-apply-json",disabled:t.readonly||e.unref(N),onClick:u[46]||(u[46]=(...a)=>e.unref(i).applyJson&&e.unref(i).applyJson(...a))},e.toDisplayString(e.unref(o).applyJson),9,bl)],64)),e.unref(f)?(e.openBlock(),e.createElementBlock("p",El,e.toDisplayString(e.unref(o).jsonPending),1)):e.createCommentVNode("",!0)],10,$n)])):e.createCommentVNode("",!0),e.unref(S)!=="tools"?(e.openBlock(),e.createElementBlock("div",{key:2,class:"mr-designer-preview","aria-label":e.unref(o).previewTitle},[e.unref(_)?(e.openBlock(),e.createElementBlock("div",Sl,e.toDisplayString(e.unref(_)),1)):e.createCommentVNode("",!0),e.unref(y).ok?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("ul",Vl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y).errors,a=>(e.openBlock(),e.createElementBlock("li",{key:a.path},e.toDisplayString(a.path)+":"+e.toDisplayString(a.message),1))),128))])),e.unref(oe)==="design"&&e.unref(y).ok?(e.openBlock(),e.createBlock(ct,{key:2,document:e.unref(g),selection:e.unref(Y),"page-index":e.unref(K),datasets:t.datasets,disabled:e.unref(J),messages:e.unref(o),onSelect:e.unref(I),onGeometry:e.unref(X).geometry,onColumn:e.unref(z).activate,onWidth:u[47]||(u[47]=(a,A)=>e.unref(i).setColumn(a,"widthMm",String(A)))},null,8,["document","selection","page-index","datasets","disabled","messages","onSelect","onGeometry","onColumn"])):e.unref(O)&&e.unref(y).ok?(e.openBlock(),e.createBlock(e.unref(fe.ReportPreview),{key:3,"report-id":"draft",fetcher:e.unref(O),messages:{title:e.unref(o).previewTitle,columnDirectory:e.unref(o).previewFieldDirectory},"show-params":!1,editable:!1,"excel-import":!1,height:"100%"},null,8,["fetcher","messages"])):(e.openBlock(),e.createElementBlock("p",Nl,e.toDisplayString(e.unref(o).invalid),1))],8,wl)):e.createCommentVNode("",!0)],2)],8,cn))}}),Cl=H._export_sfc(xl,[["__scopeId","data-v-9e22163e"]]),Bl={title:"变更与验收",run:"运行检查",running:"检查中…",samples:"验收样例",none:"仅检查结构",first20:"每个数据集前 20 行",first100:"每个数据集前 100 行",all:"全部当前数据(总计 ≤1000 行)",changes:"模板变更",issues:"待处理项",results:"样例结果",noChanges:"与基线一致",noIssues:"本次检查未发现问题",empty:"选择验收样例后运行,检查字段映射、排版与输出能力。",baseline:"未提供上一版本,仅检查当前模板。",errors:"错误",warnings:"提示",locate:"定位",before:"修改前",after:"修改后",breaking:"影响兼容性",acknowledge:"已确认字段与结构变更",truncated:"变更较多,仅展示前 500 项;兼容检查仍包含全部变更。",pages:"页",rows:"行",checked:"检查结果对应本次样例,不代替服务端发布权限与全量数据校验。",categories:{metadata:"信息",structure:"结构",binding:"字段",calculation:"计算",format:"样式"},kinds:{added:"新增",removed:"删除",modified:"修改",moved:"调序"}},Ml={title:"Excel 业务绑定",intro:"保留模板版式,明确数据来源",upload:"选择 Excel 模板",replace:"更换文件",loading:"正在解析模板…",cancel:"取消解析",source:"原始模板",sourceHint:"点击行号选择,Shift 点击扩展;选择整行区域后标记用途。",sourceOnly:"来源样例仅供设计,应用时将全部替换为接口数据。",sheet:"工作表",dataset:"业务数据集",chooseDataset:"选择数据集契约",rowKey:"稳定业务主键",chooseRowKey:"选择业务主键",titleRegion:"标题",headerRegion:"多层表头",detailRegion:"样例明细",footerRegion:"静态尾页",optional:"可选",selectRegion:"标记选中行",clear:"清除",mapping:"逐列映射",coverage:"映射覆盖",physical:"Excel 列",business:"业务字段",chooseField:"选择已声明字段",selected:"已选行",previousRows:"上一组行",nextRows:"下一组行",previousColumns:"上一组列",nextColumns:"下一组列",rowStart:"预览起始行",columnStart:"预览起始列",apply:"校验并使用模板",check:"校验绑定",identity:"新模板",templateId:"模板标识",templateName:"模板名称",issues:"请先修正绑定",ready:"绑定校验通过",noSource:"导入 .xlsx,开始绑定业务数据",noContract:"请由接入方提供数据集字段契约,再配置业务绑定。",fieldType:"类型",precision:"位小数",sample:"契约样例",unnamed:"未标记",applied:"模板已生成,等待接入方确认",readonly:"当前只读",invalidFile:"请选择未加密的 .xlsx 文件",emptySelection:"请先在原始模板中选择行",footerHint:"静态尾页保留为独立页面,不随明细重复;不是每页页脚。",inspectWarning:"来源兼容性提示",session:"绑定会话可随草稿保存,再次传入即可恢复",decimals:"精确小数按原文本保留",selectionLabel:"选择源行",regionLegend:"区域用途",summary:"绑定摘要",stepSource:"选模板",stepRegions:"标区域",stepFields:"绑字段",stepValidate:"校验应用",errors:"项问题",sourceError:"模板解析失败",dimensions:"原始范围",mappedTo:"绑定到",sampleOnly:"仅契约样例",schemaOnly:"契约字段,不执行接口查询"},Dl={detail:"主从",matrix:"矩阵",measureLabel:"显示名称",childDataset:"明细数据集",parentKey:"主表关联键",foreignKey:"明细外键",rowKey:"明细业务主键",noRowKey:"只读明细,不绑定编辑身份",childColumns:"明细展示字段",title:"明细标题",unmatched:"未关联明细",ignore:"显式忽略",childHeader:"展示明细表头",rowFields:"行维度",columnFields:"列维度",totals:"原始样本总计",widthSettings:"动态列宽 · mm",dimensionWidth:"维度列宽",measureWidth:"度量列宽",detailHint:"以业务键关联宿主提供的数据集。应用主从布局将替换矩阵配置。",matrixHint:"查询时按维度生成动态列。应用矩阵将替换普通分组、主从和总计;可撤销恢复。",computations:"计算",groups:"分组",conditions:"条件",target:"结果字段",newField:"新增计算字段",select:"选择字段",row:"当前行",group:"当前组",dataset:"整个数据集",scope:"计算范围",numeric:"数值模式",number:"普通数值",decimal:"精确小数",digits:"小数位",groupFields:"分组依据",field:"字段",constant:"常量",operation:"运算",aggregate:"聚合",text:"文本",boolean:"布尔",null:"空值",true:"是",false:"否",add:"相加",subtract:"相减",multiply:"相乘",divide:"相除",coalesce:"首个非空值",sum:"求和",count:"计数",avg:"平均值",min:"最小值",max:"最大值",weightedAvg:"加权平均",subtotalLabel:"小计",weight:"权重字段",argument:"参数",addArgument:"添加参数",remove:"移除",apply:"应用规则",check:"样例验算",addGroup:"添加分组",noGroups:"尚未配置分组",header:"组头模板",footer:"组尾标签",repeat:"跨页重复组头",orphan:"组头与首行保持同页",outer:"外层",inner:"内层",addAggregate:"添加聚合",measure:"度量字段",output:"输出字段",condition:"条件字段",comparison:"比较方式",threshold:"比较值",effect:"效果",style:"条件样式",cell:"单元格可见",rowVisibility:"明细行可见",color:"文字颜色",background:"背景颜色",bold:"加粗",column:"目标列",newCondition:"新增条件样式",removeCondition:"移除此规则",advanced:"计算边界",nulls:"空值处理",propagate:"保留为空",error:"报告错误",division:"除零处理",dependencies:"计算顺序",noData:"尚无样例数据",sample:"样例前 1000 行 · 仅验算,不修改来源",preview:"计算结果",existing:"已有规则",ready:"规则已通过结构校验",allRows:"全部行",noFields:"当前数据集尚无字段",resultType:"常量类型",settings:"规则设置",moveUp:"向外移动",moveDown:"向内移动",missingTarget:"请选择或填写结果字段",noSelection:"请先选择列",countHint:"留空度量字段可统计行数",decimalHint:"精确小数以文本保存,避免大数精度丢失。",readonly:"只读",formatMode:"条件规则",rule:"规则",sampleError:"验算未通过",new:"新增",enabled:"启用"},_l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./TemplateReviewPanel-C_Lmzis6.cjs"))),Tl=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ExcelBindingWizard-DiaxvWpQ.cjs"))),$l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./RuleEditor-N4qnMZ-Z.cjs")));exports.EXCEL_BINDING_MESSAGES=Ml;exports.ExcelBindingWizard=Tl;exports.RULE_EDITOR_MESSAGES=Dl;exports.ReportTemplateEditor=Cl;exports.RuleEditor=$l;exports.TEMPLATE_EDITOR_MESSAGES=ae;exports.TEMPLATE_REVIEW_MESSAGES=Bl;exports.TemplateReviewPanel=_l;
|