@agile-team/mach-report 0.9.1 → 0.10.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.
@@ -63,6 +63,14 @@ export declare const MachReportPreview: {
63
63
  type: BooleanConstructor;
64
64
  default: boolean;
65
65
  };
66
+ paramDefs: {
67
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
68
+ default: undefined;
69
+ };
70
+ showParams: {
71
+ type: BooleanConstructor;
72
+ default: undefined;
73
+ };
66
74
  fetcher: {
67
75
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
68
76
  default: null;
@@ -95,9 +103,11 @@ export declare const MachReportPreview: {
95
103
  showExport: boolean;
96
104
  showPrint: boolean;
97
105
  showPdfWindow: boolean;
106
+ showParams: boolean;
98
107
  messages: Partial<import('./config').MachReportMessages>;
99
108
  autoLoad: boolean;
100
109
  preset: string;
110
+ paramDefs: import('..').ReportParamDef[] | undefined;
101
111
  fetcher: import('./adapters').PlanFetcher | null;
102
112
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
103
113
  viewportRef: HTMLDivElement;
@@ -159,6 +169,14 @@ export declare const MachReportPreview: {
159
169
  type: BooleanConstructor;
160
170
  default: boolean;
161
171
  };
172
+ paramDefs: {
173
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
174
+ default: undefined;
175
+ };
176
+ showParams: {
177
+ type: BooleanConstructor;
178
+ default: undefined;
179
+ };
162
180
  fetcher: {
163
181
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
164
182
  default: null;
@@ -185,9 +203,11 @@ export declare const MachReportPreview: {
185
203
  showExport: boolean;
186
204
  showPrint: boolean;
187
205
  showPdfWindow: boolean;
206
+ showParams: boolean;
188
207
  messages: Partial<import('./config').MachReportMessages>;
189
208
  autoLoad: boolean;
190
209
  preset: string;
210
+ paramDefs: import('..').ReportParamDef[] | undefined;
191
211
  fetcher: import('./adapters').PlanFetcher | null;
192
212
  }>;
193
213
  __isFragment?: never;
@@ -242,6 +262,14 @@ export declare const MachReportPreview: {
242
262
  type: BooleanConstructor;
243
263
  default: boolean;
244
264
  };
265
+ paramDefs: {
266
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
267
+ default: undefined;
268
+ };
269
+ showParams: {
270
+ type: BooleanConstructor;
271
+ default: undefined;
272
+ };
245
273
  fetcher: {
246
274
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
247
275
  default: null;
@@ -274,9 +302,11 @@ export declare const MachReportPreview: {
274
302
  showExport: boolean;
275
303
  showPrint: boolean;
276
304
  showPdfWindow: boolean;
305
+ showParams: boolean;
277
306
  messages: Partial<import('./config').MachReportMessages>;
278
307
  autoLoad: boolean;
279
308
  preset: string;
309
+ paramDefs: import('..').ReportParamDef[] | undefined;
280
310
  fetcher: import('./adapters').PlanFetcher | null;
281
311
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
282
312
  $slots: {
@@ -63,6 +63,14 @@ export declare const MachReportPreview: {
63
63
  type: BooleanConstructor;
64
64
  default: boolean;
65
65
  };
66
+ paramDefs: {
67
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
68
+ default: undefined;
69
+ };
70
+ showParams: {
71
+ type: BooleanConstructor;
72
+ default: undefined;
73
+ };
66
74
  fetcher: {
67
75
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
68
76
  default: null;
@@ -95,9 +103,11 @@ export declare const MachReportPreview: {
95
103
  showExport: boolean;
96
104
  showPrint: boolean;
97
105
  showPdfWindow: boolean;
106
+ showParams: boolean;
98
107
  messages: Partial<import('./config').MachReportMessages>;
99
108
  autoLoad: boolean;
100
109
  preset: string;
110
+ paramDefs: import('..').ReportParamDef[] | undefined;
101
111
  fetcher: import('./adapters').PlanFetcher | null;
102
112
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
103
113
  viewportRef: HTMLDivElement;
@@ -159,6 +169,14 @@ export declare const MachReportPreview: {
159
169
  type: BooleanConstructor;
160
170
  default: boolean;
161
171
  };
172
+ paramDefs: {
173
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
174
+ default: undefined;
175
+ };
176
+ showParams: {
177
+ type: BooleanConstructor;
178
+ default: undefined;
179
+ };
162
180
  fetcher: {
163
181
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
164
182
  default: null;
@@ -185,9 +203,11 @@ export declare const MachReportPreview: {
185
203
  showExport: boolean;
186
204
  showPrint: boolean;
187
205
  showPdfWindow: boolean;
206
+ showParams: boolean;
188
207
  messages: Partial<import('./config').MachReportMessages>;
189
208
  autoLoad: boolean;
190
209
  preset: string;
210
+ paramDefs: import('..').ReportParamDef[] | undefined;
191
211
  fetcher: import('./adapters').PlanFetcher | null;
192
212
  }>;
193
213
  __isFragment?: never;
@@ -242,6 +262,14 @@ export declare const MachReportPreview: {
242
262
  type: BooleanConstructor;
243
263
  default: boolean;
244
264
  };
265
+ paramDefs: {
266
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
267
+ default: undefined;
268
+ };
269
+ showParams: {
270
+ type: BooleanConstructor;
271
+ default: undefined;
272
+ };
245
273
  fetcher: {
246
274
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
247
275
  default: null;
@@ -274,9 +302,11 @@ export declare const MachReportPreview: {
274
302
  showExport: boolean;
275
303
  showPrint: boolean;
276
304
  showPdfWindow: boolean;
305
+ showParams: boolean;
277
306
  messages: Partial<import('./config').MachReportMessages>;
278
307
  autoLoad: boolean;
279
308
  preset: string;
309
+ paramDefs: import('..').ReportParamDef[] | undefined;
280
310
  fetcher: import('./adapters').PlanFetcher | null;
281
311
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
282
312
  $slots: {
@@ -31,6 +31,12 @@ export interface MachReportMessages {
31
31
  nextMatch: string;
32
32
  /** 缩略图侧栏开关 */
33
33
  thumbnails: string;
34
+ /** 参数面板 */
35
+ paramsTitle: string;
36
+ query: string;
37
+ reset: string;
38
+ /** 必填缺失提示({label} 占位) */
39
+ paramRequired: string;
34
40
  }
35
41
  export declare const DEFAULT_MESSAGES: MachReportMessages;
36
42
  /** 主题变量(组件外壳注入的 --mrp-* CSS 自定义属性) */
@@ -54,6 +60,8 @@ export interface MachReportDefaults {
54
60
  showExport?: boolean;
55
61
  showPrint?: boolean;
56
62
  showPdfWindow?: boolean;
63
+ /** 参数面板显隐(有参数定义且未显式关闭时显示;缺省 true) */
64
+ showParams?: boolean;
57
65
  /** 页间距 px */
58
66
  gapPx?: number;
59
67
  /** PDF 导出中文字体 URL */
@@ -74,7 +82,7 @@ export interface MachReportConfig {
74
82
  export declare function defineMachReportConfig(config: MachReportConfig): MachReportConfig;
75
83
  /** 类型化 preset 声明 */
76
84
  export declare function defineMachReportPreset(preset: MachReportPreset): MachReportPreset;
77
- export type ResolvedConfig = Required<Pick<MachReportDefaults, "showExport" | "showPrint" | "showPdfWindow" | "gapPx">> & {
85
+ export type ResolvedConfig = Required<Pick<MachReportDefaults, "showExport" | "showPrint" | "showPdfWindow" | "showParams" | "gapPx">> & {
78
86
  pdfFontUrl: string;
79
87
  theme: MachReportTheme;
80
88
  messages: MachReportMessages;
@@ -1,5 +1,6 @@
1
1
  export { default as ReportPreview } from './ReportPreview';
2
2
  export { default as ReportToolbar } from './ReportToolbar';
3
+ export { default as ReportParamPanel } from './ReportParamPanel';
3
4
  export * from './adapters';
4
5
  export * from './local-adapter';
5
6
  export * from './injection-keys';
@@ -1,5 +1,6 @@
1
1
  export { default as ReportPreview } from './ReportPreview';
2
2
  export { default as ReportToolbar } from './ReportToolbar';
3
+ export { default as ReportParamPanel } from './ReportParamPanel';
3
4
  export * from './adapters';
4
5
  export * from './local-adapter';
5
6
  export * from './injection-keys';
@@ -56,6 +56,14 @@ export declare const MachReportPreview: {
56
56
  type: BooleanConstructor;
57
57
  default: boolean;
58
58
  };
59
+ paramDefs: {
60
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
61
+ default: undefined;
62
+ };
63
+ showParams: {
64
+ type: BooleanConstructor;
65
+ default: undefined;
66
+ };
59
67
  fetcher: {
60
68
  type: import('vue').PropType<PlanFetcher | null>;
61
69
  default: null;
@@ -88,9 +96,11 @@ export declare const MachReportPreview: {
88
96
  showExport: boolean;
89
97
  showPrint: boolean;
90
98
  showPdfWindow: boolean;
99
+ showParams: boolean;
91
100
  messages: Partial<import('./config').MachReportMessages>;
92
101
  autoLoad: boolean;
93
102
  preset: string;
103
+ paramDefs: import('..').ReportParamDef[] | undefined;
94
104
  fetcher: PlanFetcher | null;
95
105
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
96
106
  viewportRef: HTMLDivElement;
@@ -152,6 +162,14 @@ export declare const MachReportPreview: {
152
162
  type: BooleanConstructor;
153
163
  default: boolean;
154
164
  };
165
+ paramDefs: {
166
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
167
+ default: undefined;
168
+ };
169
+ showParams: {
170
+ type: BooleanConstructor;
171
+ default: undefined;
172
+ };
155
173
  fetcher: {
156
174
  type: import('vue').PropType<PlanFetcher | null>;
157
175
  default: null;
@@ -178,9 +196,11 @@ export declare const MachReportPreview: {
178
196
  showExport: boolean;
179
197
  showPrint: boolean;
180
198
  showPdfWindow: boolean;
199
+ showParams: boolean;
181
200
  messages: Partial<import('./config').MachReportMessages>;
182
201
  autoLoad: boolean;
183
202
  preset: string;
203
+ paramDefs: import('..').ReportParamDef[] | undefined;
184
204
  fetcher: PlanFetcher | null;
185
205
  }>;
186
206
  __isFragment?: never;
@@ -235,6 +255,14 @@ export declare const MachReportPreview: {
235
255
  type: BooleanConstructor;
236
256
  default: boolean;
237
257
  };
258
+ paramDefs: {
259
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
260
+ default: undefined;
261
+ };
262
+ showParams: {
263
+ type: BooleanConstructor;
264
+ default: undefined;
265
+ };
238
266
  fetcher: {
239
267
  type: import('vue').PropType<PlanFetcher | null>;
240
268
  default: null;
@@ -267,9 +295,11 @@ export declare const MachReportPreview: {
267
295
  showExport: boolean;
268
296
  showPrint: boolean;
269
297
  showPdfWindow: boolean;
298
+ showParams: boolean;
270
299
  messages: Partial<import('./config').MachReportMessages>;
271
300
  autoLoad: boolean;
272
301
  preset: string;
302
+ paramDefs: import('..').ReportParamDef[] | undefined;
273
303
  fetcher: PlanFetcher | null;
274
304
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
275
305
  $slots: {
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-Dh1exwdD.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-D-Us9mrX.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview-D-Us9mrX.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){i.machReportPlugin.install(e,o),e.component("MachReportPreview",r)}};exports.MachReportPreview=r;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-gftml2ST.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview--ElcAKoi.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview--ElcAKoi.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){i.machReportPlugin.install(e,o),e.component("MachReportPreview",r)}};exports.MachReportPreview=r;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=c;
package/dist/vue-async.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { defineAsyncComponent as e } from "vue";
2
- import { m as n } from "./plugin-Bo8QqzCz.js";
3
- const r = e(() => import("./ReportPreview-VCx59rSt.js").then((t) => t.k));
2
+ import { m as n } from "./plugin-QjAiSBP6.js";
3
+ const r = e(() => import("./ReportPreview-C6b5TOzz.js").then((t) => t.l));
4
4
  function m() {
5
- return import("./ReportPreview-VCx59rSt.js").then((t) => t.k);
5
+ return import("./ReportPreview-C6b5TOzz.js").then((t) => t.l);
6
6
  }
7
7
  const p = {
8
8
  install(t, o = {}) {
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview-D-Us9mrX.cjs"),r=require("./plugin-Dh1exwdD.cjs"),c=require("@agile-team/mach-report"),s=require("vue");function p(E){return async({tempIds:t})=>{if(t.length===0)throw new r.PlanLoadError("缺少报表模板 ID");const a=[];for(const n of t){const o=E[n];if(!o)throw new r.PlanLoadError(`本地模板 ${n} 不存在`);const{plan:R,warnings:i}=c.paginateTemplate(o.template,o.datasets??{});i.length>0&&console.warn("[mach-report] 分页告警:",i),a.push(...R.pages)}return{schemaVersion:"mach-local",pages:a}}}function P(){return s.inject(r.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.ReportPreview=e.ReportPreview;exports.ReportToolbar=e.ReportToolbar;exports.SILENT_LOGGER=e.SILENT_LOGGER;exports.buildPrintDocument=e.buildPrintDocument;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.printPlans=e.printPlans;exports.provideMachReportConfig=e.provideMachReportConfig;exports.resolveConfig=e.resolveConfig;exports.themeToCssVars=e.themeToCssVars;exports.toErrorDetail=e.toErrorDetail;exports.useMachReportConfig=e.useMachReportConfig;exports.usePageWindow=e.usePageWindow;exports.usePrintExport=e.usePrintExport;exports.useZoom=e.useZoom;exports.MACH_REPORT_CONFIG_KEY=r.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=r.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=r.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=r.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=r.MachReportPreview;exports.PlanLoadError=r.PlanLoadError;exports.createDefaultPdfExporter=r.createDefaultPdfExporter;exports.createFetchRequest=r.createFetchRequest;exports.createJh4jGridPlanFetcher=r.createJh4jGridPlanFetcher;exports.joinTempIds=r.joinTempIds;exports.machReportPlugin=r.machReportPlugin;exports.normalizeTempIds=r.normalizeTempIds;exports.createLocalFetcher=p;exports.useReportPreview=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview--ElcAKoi.cjs"),r=require("./plugin-gftml2ST.cjs"),c=require("@agile-team/mach-report"),s=require("vue");function P(R){return async({tempIds:t})=>{if(t.length===0)throw new r.PlanLoadError("缺少报表模板 ID");const a=[];for(const n of t){const o=R[n];if(!o)throw new r.PlanLoadError(`本地模板 ${n} 不存在`);const{plan:E,warnings:i}=c.paginateTemplate(o.template,o.datasets??{});i.length>0&&console.warn("[mach-report] 分页告警:",i),a.push(...E.pages)}return{schemaVersion:"mach-local",pages:a}}}function p(){return s.inject(r.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.ReportParamPanel=e.ReportParamPanel;exports.ReportPreview=e.ReportPreview;exports.ReportToolbar=e.ReportToolbar;exports.SILENT_LOGGER=e.SILENT_LOGGER;exports.buildPrintDocument=e.buildPrintDocument;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.printPlans=e.printPlans;exports.provideMachReportConfig=e.provideMachReportConfig;exports.resolveConfig=e.resolveConfig;exports.themeToCssVars=e.themeToCssVars;exports.toErrorDetail=e.toErrorDetail;exports.useMachReportConfig=e.useMachReportConfig;exports.usePageWindow=e.usePageWindow;exports.usePrintExport=e.usePrintExport;exports.useZoom=e.useZoom;exports.MACH_REPORT_CONFIG_KEY=r.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=r.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=r.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=r.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=r.MachReportPreview;exports.PlanLoadError=r.PlanLoadError;exports.createDefaultPdfExporter=r.createDefaultPdfExporter;exports.createFetchRequest=r.createFetchRequest;exports.createJh4jGridPlanFetcher=r.createJh4jGridPlanFetcher;exports.joinTempIds=r.joinTempIds;exports.machReportPlugin=r.machReportPlugin;exports.normalizeTempIds=r.normalizeTempIds;exports.createLocalFetcher=P;exports.useReportPreview=p;
package/dist/vue.js CHANGED
@@ -1,9 +1,9 @@
1
- import { D as T, a as _, M as g, R as M, b as d, S as C, c as w, d as O, e as D, p as F, f as L, r as A, t as H, g as j, u as v, h as x, i as G, j as S } from "./ReportPreview-VCx59rSt.js";
2
- import { P as t, M as c } from "./plugin-Bo8QqzCz.js";
3
- import { a as I, b as K, c as Y, d as N, e as y, f as U, g as V, j as q, m as z, n as J } from "./plugin-Bo8QqzCz.js";
1
+ import { D as T, a as _, M as g, R as M, b as d, c as C, S as w, d as O, e as D, f as F, p as L, g as A, r as H, t as j, h as v, u as x, i as G, j as S, k as b } from "./ReportPreview-C6b5TOzz.js";
2
+ import { P as t, M as c } from "./plugin-QjAiSBP6.js";
3
+ import { a as K, b as Y, c as N, d as y, e as U, f as V, g as k, j as q, m as z, n as J } from "./plugin-QjAiSBP6.js";
4
4
  import { paginateTemplate as p } from "@agile-team/mach-report";
5
- import { inject as E } from "vue";
6
- function h(n) {
5
+ import { inject as R } from "vue";
6
+ function P(n) {
7
7
  return async ({ tempIds: a }) => {
8
8
  if (a.length === 0) throw new t("缺少报表模板 ID");
9
9
  const r = [];
@@ -16,40 +16,41 @@ function h(n) {
16
16
  return { schemaVersion: "mach-local", pages: r };
17
17
  };
18
18
  }
19
- function m() {
20
- return E(c, null);
19
+ function h() {
20
+ return R(c, null);
21
21
  }
22
22
  export {
23
23
  T as DEFAULT_MESSAGES,
24
24
  _ as DEFAULT_THEME,
25
- I as MACH_REPORT_CONFIG_KEY,
25
+ K as MACH_REPORT_CONFIG_KEY,
26
26
  c as MACH_REPORT_CONTROLLER_KEY,
27
- K as MACH_REPORT_FETCHER_KEY,
28
- Y as MACH_REPORT_PDF_EXPORTER_KEY,
27
+ Y as MACH_REPORT_FETCHER_KEY,
28
+ N as MACH_REPORT_PDF_EXPORTER_KEY,
29
29
  g as MachReportError,
30
- N as MachReportPreview,
30
+ y as MachReportPreview,
31
31
  t as PlanLoadError,
32
- M as ReportPreview,
33
- d as ReportToolbar,
34
- C as SILENT_LOGGER,
35
- w as buildPrintDocument,
36
- y as createDefaultPdfExporter,
37
- U as createFetchRequest,
38
- V as createJh4jGridPlanFetcher,
39
- h as createLocalFetcher,
40
- O as defineMachReportConfig,
41
- D as defineMachReportPreset,
32
+ M as ReportParamPanel,
33
+ d as ReportPreview,
34
+ C as ReportToolbar,
35
+ w as SILENT_LOGGER,
36
+ O as buildPrintDocument,
37
+ U as createDefaultPdfExporter,
38
+ V as createFetchRequest,
39
+ k as createJh4jGridPlanFetcher,
40
+ P as createLocalFetcher,
41
+ D as defineMachReportConfig,
42
+ F as defineMachReportPreset,
42
43
  q as joinTempIds,
43
44
  z as machReportPlugin,
44
45
  J as normalizeTempIds,
45
- F as printPlans,
46
- L as provideMachReportConfig,
47
- A as resolveConfig,
48
- H as themeToCssVars,
49
- j as toErrorDetail,
50
- v as useMachReportConfig,
51
- x as usePageWindow,
52
- G as usePrintExport,
53
- m as useReportPreview,
54
- S as useZoom
46
+ L as printPlans,
47
+ A as provideMachReportConfig,
48
+ H as resolveConfig,
49
+ j as themeToCssVars,
50
+ v as toErrorDetail,
51
+ x as useMachReportConfig,
52
+ G as usePageWindow,
53
+ S as usePrintExport,
54
+ h as useReportPreview,
55
+ b as useZoom
55
56
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-report",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "MachReport 报表引擎单包:RenderPlan 模型 + 分页 + DOM/Canvas/PDF 渲染 + 动态 SQL + 管理端 API + Vue 3 契约组件(零运行时依赖;./vue 为框架子路径,vue 为可选 peer)",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -114,6 +114,15 @@
114
114
  },
115
115
  "license": "SEE LICENSE IN LICENSE",
116
116
  "author": "ChenyCHENYU (Agile Team)",
117
+ "repository": {
118
+ "type": "git",
119
+ "url": "git+https://github.com/ChenyCHENYU/MachReport.git",
120
+ "directory": "packages/mach-report"
121
+ },
122
+ "homepage": "https://github.com/ChenyCHENYU/MachReport#readme",
123
+ "bugs": {
124
+ "url": "https://github.com/ChenyCHENYU/MachReport/issues"
125
+ },
117
126
  "scripts": {
118
127
  "build": "vite build && node scripts/copy-dcts.mjs",
119
128
  "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\""
@@ -1,6 +0,0 @@
1
- "use strict";const e=require("vue"),U=require("@agile-team/mach-report"),T=require("./plugin-Dh1exwdD.cjs");function pe(t,r,l={}){const n=l.pxPerMm??3.7795275590551185,a=l.gapPx??18,o=e.ref(0),s=e.ref(800),i=e.computed(()=>(t.value?.pages??[]).map(c=>c.pageHeightMm*n)),m=e.computed(()=>{const c=t.value?.pages??[];let p=0,f=0;for(const b of c)p+=b.pageHeightMm*n+a,f=Math.max(f,b.pageWidthMm*n);return{w:f,h:p}}),h=e.computed(()=>U.computePageWindow({pageHeightsPx:i.value,viewportHeightPx:s.value/r.value,scrollTopPx:o.value/r.value,overscan:1,gapPx:a})),g=e.computed(()=>{const c=t.value;if(!c)return[];const{start:p,end:f}=h.value;return f<p?[]:c.pages.slice(p,f+1).map((b,E)=>({page:b,index:p+E}))});function u(c,p){let f=0;return b=>{f||(f=requestAnimationFrame(()=>{if(f=0,o.value=b.scrollTop,s.value=b.clientHeight||800,p.value<=0)return;const E=b.querySelectorAll(".mrp-page-holder");if(!E.length)return;const B=b.getBoundingClientRect().top+56;let $=1;E.forEach(w=>{w.getBoundingClientRect().top<=B&&($=Number(w.dataset.page??1))}),c.value=Math.max(1,Math.min(p.value,$))}))}}return{contentSize:m,windowRange:h,visiblePages:g,makeScrollHandler:u,refreshViewport(c){c&&(s.value=c.clientHeight||800)}}}function fe(t){const r=e.ref(1),l=e.ref("fit");function n(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(r.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function a(o){o==="fit"?(l.value="fit",n()):(l.value="raw",r.value=o/100)}return{zoom:r,zoomMode:l,applyFitZoom:n,setZoom:a}}const X=8;function Q(){return new Promise(t=>setTimeout(t,0))}function Z(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function j(t){const r=new Map;t.pages.forEach(s=>{r.has(Z(s))||r.set(Z(s),s)});const a=`<!doctype html><html><head><meta charset="utf-8"><style>${`.mr-page{margin:0 auto;page-break-after:always;}
2
- .mr-page tr{break-inside:avoid;page-break-inside:avoid;}
3
- .mr-comp{break-inside:avoid;page-break-inside:avoid;}
4
- ${[...r.values()].map(s=>`@page ${Z(s)}{size:${Math.round(s.pageWidthMm)}mm ${Math.round(s.pageHeightMm)}mm;margin:0;}`).join(`
5
- `)}
6
- body{margin:0;background:#fff;}`}</style></head><body>`,o=t.pages.map(s=>{const i=U.renderPage(s,96,{},document);return i.style.page=Z(s),i.outerHTML});return{head:a,pageChunks:o}}async function Ve(t,r={}){const l={pages:t.flatMap(i=>i.pages)};if(l.pages.length===0)return;const{head:n,pageChunks:a}=j(l),o=document.createElement("iframe");o.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(o);let s=!1;try{const i=o.contentDocument;i.open(),i.write(n);for(let m=0;m<a.length;m++)i.write(a[m]),m%X===X-1&&(r.onProgress?.(m+1,a.length),await Q());i.write("</body></html>"),i.close(),await Q(),r.onProgress?.(a.length,a.length),s=!0,o.contentWindow?.focus(),o.contentWindow?.print()}catch(i){r.onError?.(i instanceof Error?`批量打印失败: ${i.message}`:"批量打印失败")}finally{s?setTimeout(()=>o.remove(),6e4):o.remove()}}function ge(t,r){let l=null,n=!1,a=null;function o(){l?.remove(),l=null}function s(u,c){const p=URL.createObjectURL(u),f=document.createElement("a");f.href=p,f.download=c,f.click(),setTimeout(()=>URL.revokeObjectURL(p),1e4)}async function i(){if(n)return;const u=t.value;if(!u||u.pages.length===0)return;n=!0,o();const{head:c,pageChunks:p}=j(u);l=document.createElement("iframe"),l.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(l);const f=l;try{const b=f.contentDocument;b.open(),b.write(c);for(let E=0;E<p.length;E++)if(b.write(p[E]),E%X===X-1&&await Q(),f!==l)return;b.write("</body></html>"),b.close(),await Q(),f.contentWindow?.focus(),f.contentWindow?.print()}catch{r.onError("调用打印失败,请改用导出 PDF")}finally{n=!1}}async function m(){if(a)return a;const u=t.value;if(!(!u||u.pages.length===0))return a=(async()=>{try{const c=await r.getPdfExporter()(u);s(new Blob([c],{type:"application/pdf"}),"mach-report.pdf")}catch(c){r.onError(c instanceof Error?`PDF 导出失败: ${c.message}`:"PDF 导出失败")}finally{a=null}})(),a}function h(u){const c=t.value;if(!c||c.pages.length===0)return;if(u==="pdf"){m();return}const{head:p,pageChunks:f}=j(c),b=`${p}${f.join("")}</body></html>`;s(new Blob([b],{type:"text/html;charset=utf-8"}),`mach-report.${u==="html"?"html":u}`)}function g(){const u=t.value;if(!u||u.pages.length===0)return;const{head:c,pageChunks:p}=j(u),f=`${c}${p.join("")}</body></html>`,b=new Blob([f],{type:"text/html;charset=utf-8"}),E=URL.createObjectURL(b),B=window.open(E,"_blank");if(!B){r.onError("浏览器拦截了弹窗,请允许弹窗后重试"),URL.revokeObjectURL(E);return}setTimeout(()=>B.print(),400),setTimeout(()=>URL.revokeObjectURL(E),1e4)}return{print:i,exportAs:h,openPdfWindow:g,releasePrintFrame:o}}const he="mrp-hit";function Le(t){t.querySelectorAll(`mark.${he}`).forEach(l=>{const n=l.parentNode;if(n){for(;l.firstChild;)n.insertBefore(l.firstChild,l);l.remove(),n.normalize()}})}function Oe(t,r){const l=r.trim();if(!l)return 0;const n=l.toLowerCase(),a=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(i){const m=i.parentElement;return!m||m.closest("mark")||/^(SCRIPT|STYLE)$/.test(m.tagName)?NodeFilter.FILTER_REJECT:(i.nodeValue??"").toLowerCase().includes(n)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let i=a.nextNode();i;i=a.nextNode())o.push(i);let s=0;for(const i of o){const m=i.nodeValue??"",h=m.toLowerCase(),g=i.parentElement;if(!g)continue;const u=document.createDocumentFragment();let c=0,p=h.indexOf(n);for(;p>=0;){p>c&&u.appendChild(document.createTextNode(m.slice(c,p)));const f=document.createElement("mark");f.className=he,f.textContent=m.slice(p,p+l.length),u.appendChild(f),s++,c=p+l.length,p=h.indexOf(n,c)}c<m.length&&u.appendChild(document.createTextNode(m.slice(c))),g.replaceChild(u,i)}return s}function de(t,r){let l=0,n=t.toLowerCase().indexOf(r);for(;n>=0;)l++,n=t.toLowerCase().indexOf(r,n+r.length);return l}function He(t){const{plan:r,gotoPage:l,highlight:n,clearHighlights:a}=t,o=t.debounceMs??200,s=e.ref(!1),i=e.ref(""),m=e.ref(""),h=e.ref(0);let g=null;const u=e.computed(()=>{const w=i.value.trim().toLowerCase(),x=r.value;if(!w||!x)return[];const R=[];return x.pages.forEach((F,K)=>{for(const N of F.components)if(N.grid){for(const D of N.grid.cells??[])for(const O of D??[])if(typeof O?.text=="string")for(let G=0;G<de(O.text,w);G++)R.push(K)}else if(N.kind==="text"&&typeof N.text=="string")for(let D=0;D<de(N.text,w);D++)R.push(K)}),R}),c=e.computed(()=>u.value.length);function p(w){if(m.value=w,g&&clearTimeout(g),w.trim()===""){g=null,i.value="",h.value=0;return}g=setTimeout(()=>{g=null,i.value=m.value,h.value=0;const x=u.value[0];x!=null&&l(x+1)},o)}function f(w){const x=u.value.length;x!==0&&(h.value=(h.value+w+x)%x,l(u.value[h.value]+1))}function b(){s.value=!s.value}function E(w){const x=i.value.trim();x&&n(w,x)}function B(w){a(w)}function $(){m.value="",i.value="",h.value=0,g&&clearTimeout(g),g=null}return{visible:s,query:i,matchIndex:h,matchCount:c,toggle:b,onInput:p,onNav:f,apply:E,clear:B,reset:$}}function We(t,r){const l=e.computed(()=>{if(t.value)return!0;if(typeof location>"u")return!1;try{return new URLSearchParams(location.search).get("mrp-debug")==="1"}catch{return!1}}),n=e.computed(()=>!l.value||!r.plan.value?0:Math.round(JSON.stringify(r.plan.value).length/1024)),a=e.computed(()=>!l.value||!r.plan.value?null:{pages:r.pageCount.value,window:`${r.windowRange.value.start}-${r.windowRange.value.end}`,zoom:`${Math.round(r.zoom.value*100)}%`,loadMs:`${r.loadMs.value}ms`,planKB:n.value});return{enabled:l,debugStats:a}}function Ae(t,r){const{thumbsRoot:l,visible:n,renderThumbCanvas:a}=r;let o=null;function s(h,g){if(!t.value||h.childElementCount>0)return;const u=a(g);u&&(u.style.width="100%",u.style.height="100%",u.style.display="block",h.appendChild(u))}return{schedule:()=>{!n.value||!t.value||!l.value||typeof IntersectionObserver>"u"||(o?.disconnect(),o=new IntersectionObserver(h=>{for(const g of h){if(!g.isIntersecting)continue;const u=g.target;s(u,Number(u.dataset.thumb??1)-1),o?.unobserve(u)}},{root:l.value,rootMargin:"200px"}),l.value.querySelectorAll("[data-thumb]").forEach(h=>{o.observe(h)}))},destroy:()=>{o?.disconnect(),o=null}}}function Ue(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(r){t.value=r?Math.round(performance.now()-r):0}}}const je={class:"mrp-toolbar"},qe={class:"mrp-title"},Ke=["disabled"],Ge={class:"mrp-pageinfo"},Ye=["disabled"],Ze={key:1,class:"mrp-search"},Je=["placeholder","value"],Xe={key:0,class:"mrp-search-count"},Qe=["disabled"],_e=["disabled"],et=e.defineComponent({__name:"ReportToolbar",props:{pageCount:{},currentPage:{},zoomMode:{},zoom:{},showExport:{type:Boolean},showPrint:{type:Boolean},showPdfWindow:{type:Boolean},messages:{},search:{},thumbsVisible:{type:Boolean}},emits:["goto","zoom","export","print","pdf-window","search-input","search-nav","search-toggle","thumbs-toggle"],setup(t){const r=t,l=e.ref(null);e.watch(()=>r.search.visible,a=>{a&&e.nextTick(()=>l.value?.focus())});function n(a,o,s){return a.replace("{cur}",String(o)).replace("{total}",String(s))}return(a,o)=>(e.openBlock(),e.createElementBlock("div",je,[e.createElementVNode("span",qe,e.toDisplayString(t.messages.title),1),t.pageCount>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage<=1,onClick:o[0]||(o[0]=s=>a.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,Ke),e.createElementVNode("span",Ge,e.toDisplayString(n(t.messages.pageInfo,t.currentPage,t.pageCount)),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage>=t.pageCount,onClick:o[1]||(o[1]=s=>a.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,Ye)],64)):e.createCommentVNode("",!0),o[14]||(o[14]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",Ze,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:l,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,value:t.search.query,onInput:o[2]||(o[2]=s=>a.$emit("search-input",s.target.value))},null,40,Je),t.search.query?(e.openBlock(),e.createElementBlock("span",Xe,e.toDisplayString(n(t.messages.matchInfo,t.search.matchIndex+1,t.search.matchCount)),1)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[3]||(o[3]=s=>a.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,Qe),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=s=>a.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,_e)])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.search.visible}]),type:"button",title:"Ctrl+F",onClick:o[5]||(o[5]=s=>a.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=s=>a.$emit("thumbs-toggle"))}," ▦ "+e.toDisplayString(t.messages.thumbnails),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="fit"}]),type:"button",onClick:o[7]||(o[7]=s=>a.$emit("zoom","fit"))},e.toDisplayString(t.messages.fitWidth),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===100}]),type:"button",onClick:o[8]||(o[8]=s=>a.$emit("zoom",100))}," 100% ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===150}]),type:"button",onClick:o[9]||(o[9]=s=>a.$emit("zoom",150))}," 150% ",2),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:2,class:"mrp-nav",type:"button",onClick:o[10]||(o[10]=s=>a.$emit("export","html"))},e.toDisplayString(t.messages.exportHtml),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:3,class:"mrp-nav",type:"button",onClick:o[11]||(o[11]=s=>a.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",onClick:o[12]||(o[12]=s=>a.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=s=>a.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),ve=(t,r)=>{const l=t.__vccOpts||t;for(const[n,a]of r)l[n]=a;return l},be=ve(et,[["__scopeId","data-v-f50c26e8"]]),we={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图"},ye={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function tt(t){return t}function ot(t){return t}const L={showExport:!0,showPrint:!0,showPdfWindow:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},nt={warn:()=>{},info:()=>{}};function Ee(t,r){const l=r?t?.presets?.[r]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,n={...t?.defaults,...l};return{showExport:n.showExport??L.showExport,showPrint:n.showPrint??L.showPrint,showPdfWindow:n.showPdfWindow??L.showPdfWindow,gapPx:n.gapPx??L.gapPx,pdfFontUrl:n.pdfFontUrl??L.pdfFontUrl,theme:{...ye,...n.theme},messages:{...we,...n.messages},logger:n.logger??L.logger}}function Pe(t){const r={};return t.shellBg!=null&&(r["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(r["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(r["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(r["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(r["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(r["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(r["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(r["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(r["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(r["--mrp-btn-active-bg"]=t.btnActiveBg),r}function rt(t){const r=e.inject(T.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const n=r?.value??null,a="defaults"in t&&"presets"in t?t:{defaults:t,presets:{}};return n?{defaults:{...n.defaults,...a.defaults},presets:{...n.presets,...a.presets},defaultPreset:a.defaultPreset??n.defaultPreset}:a});e.provide(T.MACH_REPORT_CONFIG_KEY,l)}function ke(){return e.inject(T.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}class q extends Error{constructor(r,l,n){super(l),this.name="MachReportError",this.code=r,this.cause=n}}function Ce(t){return t instanceof q?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const at={class:"mrp-main"},lt={key:0,class:"mrp-state"},st={key:1,class:"mrp-state mrp-error"},it={key:2,class:"mrp-state"},ut=["data-page"],ct=["onClick"],dt=["data-thumb"],mt={class:"mrp-thumb-no"},pt={class:"mrp-overlay"},ft={key:0,class:"mrp-debug","aria-hidden":"true"},J=96/25.4,me="mach-report:ui",gt=e.defineComponent({__name:"ReportPreview",props:{tempId:{type:[String,Array],default:null},furnitureTempId:{type:String,default:""},params:{type:Object,default:()=>({})},height:{type:String,default:"100vh"},autoLoad:{type:Boolean,default:!0},showExport:{type:Boolean,default:void 0},showPrint:{type:Boolean,default:void 0},showPdfWindow:{type:Boolean,default:void 0},gapPx:{type:Number,default:void 0},messages:{type:Object,default:void 0},preset:{type:String,default:void 0},debug:{type:Boolean,default:!1},fetcher:{type:Function,default:null}},emits:["loaded","error"],setup(t,{expose:r,emit:l}){e.useCssVars(d=>({v3c509574:f.value+"px"}));const n=t,a=l,o=e.shallowRef(null),s=e.ref(!1),i=e.ref(""),m=e.ref(1),h=e.ref(null),g=e.ref(null),u=e.ref(null),c=e.ref(!1),p=Ue(),f=e.computed(()=>Math.max(0,O.value)),b=e.inject(T.MACH_REPORT_FETCHER_KEY,null),B=e.inject(T.MACH_REPORT_PDF_EXPORTER_KEY,null)??T.createDefaultPdfExporter({fontUrl:"/simhei.ttf"}),$=e.computed(()=>T.normalizeTempIds(n.tempId)),w=e.computed(()=>o.value?.pages.length??0),x=ke(),R=e.computed(()=>Ee(x.value,n.preset)),F=e.computed(()=>({...R.value.messages,...n.messages})),K=e.computed(()=>n.showExport??R.value.showExport),N=e.computed(()=>n.showPrint??R.value.showPrint),D=e.computed(()=>n.showPdfWindow??R.value.showPdfWindow),O=e.computed(()=>n.gapPx??R.value.gapPx),G=e.computed(()=>({height:n.height,...Pe(R.value.theme)})),{zoom:M,zoomMode:z,applyFitZoom:le,setZoom:_}=fe(()=>({viewport:g.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*J})),Me=pe(o,M,{pxPerMm:J,gapPx:O.value}),{contentSize:ee,windowRange:H,visiblePages:Re,makeScrollHandler:Se,refreshViewport:se}=Me,Be=Se(m,w);function te(d){z.value="raw",M.value=Math.min(3,Math.max(.3,d))}function oe(){o.value=null,m.value=1,P.reset()}let Y=0;async function I(){const d=++Y,y=n.fetcher??b;if($.value.length===0){i.value="缺少报表模板 ID",oe(),a("error",i.value,{code:"param"});return}if(!y){i.value="未提供渲染数据源 fetcher",oe(),a("error",i.value,{code:"config"});return}s.value=!0,i.value="",oe();const k=p.start();try{const v=await y({tempIds:$.value,furnitureTempId:n.furnitureTempId||void 0,params:{...n.params}});if(d!==Y)return;const C=U.validateRenderPlan(v);if(!C.ok){const W=C.errors.slice(0,3).map(A=>`${A.path}: ${A.message}`).join("; ");throw new q("validate",`渲染计划校验失败(${C.errors.length} 处): ${W}`)}C.warnings.length>0&&R.value.logger.warn("[mach-report] 渲染计划告警:",C.warnings),o.value=v,m.value=1,p.end(k),g.value&&(g.value.scrollTop=0),z.value==="fit"&&le(),a("loaded",v.pages.length)}catch(v){if(d!==Y)return;const C=v instanceof q?v:new q("fetch",v instanceof Error?v.message:"预览加载失败",v);i.value=C.message,a("error",C.message,Ce(C))}finally{d===Y&&(s.value=!1)}}function S(d){if(w.value<=0)return;const y=Math.max(1,Math.min(w.value,d));m.value=y;const k=g.value;if(!k)return;let v=0;for(let C=0;C<y-1;C++)v+=(o.value?.pages[C]?.pageHeightMm??0)*J+f.value;k.scrollTop=v*M.value}const{print:ne,exportAs:re,openPdfWindow:ae,releasePrintFrame:Te}=ge(o,{getPdfExporter:()=>B,onError:d=>a("error",d,{code:"print"})}),$e={reload:I,print:ne,exportAs:re,openPdfWindow:ae,gotoPage:S};e.provide(T.MACH_REPORT_CONTROLLER_KEY,$e);const P=He({plan:o,gotoPage:S,highlight:Oe,clearHighlights:Le});function Ne(d){d.ctrlKey&&(d.preventDefault(),te(M.value*(d.deltaY<0?1.1:1/1.1)))}function Fe(d){if((d.ctrlKey||d.metaKey)&&d.key.toLowerCase()==="f"){d.preventDefault(),P.visible.value||P.toggle();return}switch(d.key){case"PageDown":d.preventDefault(),S(m.value+1);break;case"PageUp":d.preventDefault(),S(m.value-1);break;case"Home":d.preventDefault(),S(1);break;case"End":d.preventDefault(),S(w.value);break;case"+":case"=":d.preventDefault(),te(M.value*1.1);break;case"-":d.preventDefault(),te(M.value/1.1);break}}function De(){try{localStorage.setItem(me,JSON.stringify({zoomMode:z.value==="fit"?"fit":Math.round(M.value*100)}))}catch{}}e.watch([z,M],De),e.watchEffect(()=>{const d=o.value;if(!d)return;const y=h.value;if(!y)return;y.querySelectorAll(".mrp-page-holder").forEach(v=>{const C=Number(v.dataset.page??0)-1,W=d.pages[C];if(!W||v.childElementCount>0){if(v.firstElementChild){const ce=v.firstElementChild;P.clear(ce),P.apply(ce)}return}v.style.width=`${W.pageWidthMm*J}px`;const A=U.renderPage(W,96,{},document);P.apply(A),v.appendChild(A)})},{flush:"post"}),e.watch(()=>P.query.value,d=>{d||h.value?.querySelectorAll(".mrp-page-holder").forEach(y=>{P.clear(y)})});const ie=Ae(o,{thumbsRoot:u,visible:c,renderThumbCanvas:d=>{try{const{canvases:y}=U.renderPlanToCanvas(o.value,{start:d,end:d,dpr:.2});return y[0]??null}catch{return null}}});e.watchEffect(()=>{ie.schedule()},{flush:"post"});const ze=e.computed(()=>n.debug),{debugStats:V}=We(ze,{plan:o,pageCount:w,windowRange:H,zoom:M,loadMs:p.loadMs});function ue(){se(g.value),z.value==="fit"&&le()}function Ie(){try{const d=JSON.parse(localStorage.getItem(me)??"{}");d.zoomMode==="fit"?_("fit"):typeof d.zoomMode=="number"&&_(d.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",ue),se(g.value),Ie(),n.autoLoad&&I()}),e.onUnmounted(()=>{window.removeEventListener("resize",ue),ie.destroy(),P.reset(),Te()}),e.watch(()=>[n.tempId,n.furnitureTempId,JSON.stringify(n.params)],()=>{n.autoLoad&&I()}),e.watch(()=>n.fetcher??b,()=>{n.autoLoad&&I()}),r({reload:I,print:ne,exportAs:re,openPdfWindow:ae,gotoPage:S}),(d,y)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(G.value)},[e.createVNode(be,{"page-count":w.value,"current-page":m.value,"zoom-mode":e.unref(z),zoom:e.unref(M),"show-export":K.value,"show-print":N.value,"show-pdf-window":D.value,messages:F.value,search:{visible:e.unref(P).visible.value,query:e.unref(P).query.value,matchIndex:e.unref(P).matchIndex.value,matchCount:e.unref(P).matchCount.value},"thumbs-visible":c.value,onGoto:S,onZoom:e.unref(_),onExport:y[0]||(y[0]=k=>e.unref(re)(k)),onPrint:e.unref(ne),onPdfWindow:e.unref(ae),onSearchInput:e.unref(P).onInput,onSearchNav:e.unref(P).onNav,onSearchToggle:e.unref(P).toggle,onThumbsToggle:y[1]||(y[1]=k=>c.value=!c.value)},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","messages","search","thumbs-visible","onZoom","onPrint","onPdfWindow","onSearchInput","onSearchNav","onSearchToggle"]),e.createElementVNode("div",at,[e.createElementVNode("div",{ref_key:"viewportRef",ref:g,class:"mrp-body",tabindex:"0",onWheel:Ne,onKeydown:Fe,onScrollPassive:y[2]||(y[2]=k=>e.unref(Be)(k.target))},[s.value?(e.openBlock(),e.createElementBlock("div",lt,e.toDisplayString(F.value.loading),1)):i.value?(e.openBlock(),e.createElementBlock("div",st,[e.createTextVNode(e.toDisplayString(i.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:I},e.toDisplayString(F.value.retry),1)])):!o.value||w.value===0?(e.openBlock(),e.createElementBlock("div",it,e.toDisplayString(F.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(ee).w*e.unref(M)}px`,height:`${e.unref(ee).h*e.unref(M)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:h,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(M)})`,transformOrigin:"top left",width:`${e.unref(ee).w}px`})},[e.unref(H).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(H).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Re),k=>(e.openBlock(),e.createElementBlock("div",{key:k.index,class:"mrp-page-holder","data-page":k.index+1},null,8,ut))),128)),e.unref(H).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(H).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),c.value&&w.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:u,class:"mrp-thumbs"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value?.pages??[],(k,v)=>(e.openBlock(),e.createElementBlock("div",{key:v,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":v+1===m.value}]),onClick:C=>S(v+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":v+1,style:e.normalizeStyle({height:`${Math.round(k.pageHeightMm/k.pageWidthMm*116)}px`})},null,12,dt),e.createElementVNode("span",mt,e.toDisplayString(v+1),1)],10,ct))),128))],512)):e.createCommentVNode("",!0)]),e.createElementVNode("div",pt,[e.renderSlot(d.$slots,"default",{},void 0,!0)]),e.unref(V)?(e.openBlock(),e.createElementBlock("div",ft,[y[3]||(y[3]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(V).pages)+" | window: ["+e.toDisplayString(e.unref(V).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(V).zoom)+" | load: "+e.toDisplayString(e.unref(V).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(V).planKB)+"KB",1)])):e.createCommentVNode("",!0)],4))}}),xe=ve(gt,[["__scopeId","data-v-2e98692a"]]),ht=Object.freeze(Object.defineProperty({__proto__:null,default:xe},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=we;exports.DEFAULT_THEME=ye;exports.MachReportError=q;exports.ReportPreview=xe;exports.ReportPreview$1=ht;exports.ReportToolbar=be;exports.SILENT_LOGGER=nt;exports.buildPrintDocument=j;exports.defineMachReportConfig=tt;exports.defineMachReportPreset=ot;exports.printPlans=Ve;exports.provideMachReportConfig=rt;exports.resolveConfig=Ee;exports.themeToCssVars=Pe;exports.toErrorDetail=Ce;exports.useMachReportConfig=ke;exports.usePageWindow=pe;exports.usePrintExport=ge;exports.useZoom=fe;