@agile-team/mach-report 0.9.1 → 1.0.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;
@@ -79,6 +87,9 @@ export declare const MachReportPreview: {
79
87
  exportAs: (format: string) => void;
80
88
  openPdfWindow: () => void;
81
89
  gotoPage: (n: number) => void;
90
+ setParams: (values: Record<string, string>, opts?: {
91
+ reload?: boolean;
92
+ }) => void;
82
93
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
83
94
  error: (message: string, detail?: {
84
95
  code: string;
@@ -95,9 +106,11 @@ export declare const MachReportPreview: {
95
106
  showExport: boolean;
96
107
  showPrint: boolean;
97
108
  showPdfWindow: boolean;
109
+ showParams: boolean;
98
110
  messages: Partial<import('./config').MachReportMessages>;
99
111
  autoLoad: boolean;
100
112
  preset: string;
113
+ paramDefs: import('..').ReportParamDef[] | undefined;
101
114
  fetcher: import('./adapters').PlanFetcher | null;
102
115
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
103
116
  viewportRef: HTMLDivElement;
@@ -159,6 +172,14 @@ export declare const MachReportPreview: {
159
172
  type: BooleanConstructor;
160
173
  default: boolean;
161
174
  };
175
+ paramDefs: {
176
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
177
+ default: undefined;
178
+ };
179
+ showParams: {
180
+ type: BooleanConstructor;
181
+ default: undefined;
182
+ };
162
183
  fetcher: {
163
184
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
164
185
  default: null;
@@ -175,6 +196,9 @@ export declare const MachReportPreview: {
175
196
  exportAs: (format: string) => void;
176
197
  openPdfWindow: () => void;
177
198
  gotoPage: (n: number) => void;
199
+ setParams: (values: Record<string, string>, opts?: {
200
+ reload?: boolean;
201
+ }) => void;
178
202
  }, {}, {}, {}, {
179
203
  height: string;
180
204
  gapPx: number;
@@ -185,9 +209,11 @@ export declare const MachReportPreview: {
185
209
  showExport: boolean;
186
210
  showPrint: boolean;
187
211
  showPdfWindow: boolean;
212
+ showParams: boolean;
188
213
  messages: Partial<import('./config').MachReportMessages>;
189
214
  autoLoad: boolean;
190
215
  preset: string;
216
+ paramDefs: import('..').ReportParamDef[] | undefined;
191
217
  fetcher: import('./adapters').PlanFetcher | null;
192
218
  }>;
193
219
  __isFragment?: never;
@@ -242,6 +268,14 @@ export declare const MachReportPreview: {
242
268
  type: BooleanConstructor;
243
269
  default: boolean;
244
270
  };
271
+ paramDefs: {
272
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
273
+ default: undefined;
274
+ };
275
+ showParams: {
276
+ type: BooleanConstructor;
277
+ default: undefined;
278
+ };
245
279
  fetcher: {
246
280
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
247
281
  default: null;
@@ -258,6 +292,9 @@ export declare const MachReportPreview: {
258
292
  exportAs: (format: string) => void;
259
293
  openPdfWindow: () => void;
260
294
  gotoPage: (n: number) => void;
295
+ setParams: (values: Record<string, string>, opts?: {
296
+ reload?: boolean;
297
+ }) => void;
261
298
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
262
299
  error: (message: string, detail?: {
263
300
  code: string;
@@ -274,9 +311,11 @@ export declare const MachReportPreview: {
274
311
  showExport: boolean;
275
312
  showPrint: boolean;
276
313
  showPdfWindow: boolean;
314
+ showParams: boolean;
277
315
  messages: Partial<import('./config').MachReportMessages>;
278
316
  autoLoad: boolean;
279
317
  preset: string;
318
+ paramDefs: import('..').ReportParamDef[] | undefined;
280
319
  fetcher: import('./adapters').PlanFetcher | null;
281
320
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
282
321
  $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;
@@ -79,6 +87,9 @@ export declare const MachReportPreview: {
79
87
  exportAs: (format: string) => void;
80
88
  openPdfWindow: () => void;
81
89
  gotoPage: (n: number) => void;
90
+ setParams: (values: Record<string, string>, opts?: {
91
+ reload?: boolean;
92
+ }) => void;
82
93
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
83
94
  error: (message: string, detail?: {
84
95
  code: string;
@@ -95,9 +106,11 @@ export declare const MachReportPreview: {
95
106
  showExport: boolean;
96
107
  showPrint: boolean;
97
108
  showPdfWindow: boolean;
109
+ showParams: boolean;
98
110
  messages: Partial<import('./config').MachReportMessages>;
99
111
  autoLoad: boolean;
100
112
  preset: string;
113
+ paramDefs: import('..').ReportParamDef[] | undefined;
101
114
  fetcher: import('./adapters').PlanFetcher | null;
102
115
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
103
116
  viewportRef: HTMLDivElement;
@@ -159,6 +172,14 @@ export declare const MachReportPreview: {
159
172
  type: BooleanConstructor;
160
173
  default: boolean;
161
174
  };
175
+ paramDefs: {
176
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
177
+ default: undefined;
178
+ };
179
+ showParams: {
180
+ type: BooleanConstructor;
181
+ default: undefined;
182
+ };
162
183
  fetcher: {
163
184
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
164
185
  default: null;
@@ -175,6 +196,9 @@ export declare const MachReportPreview: {
175
196
  exportAs: (format: string) => void;
176
197
  openPdfWindow: () => void;
177
198
  gotoPage: (n: number) => void;
199
+ setParams: (values: Record<string, string>, opts?: {
200
+ reload?: boolean;
201
+ }) => void;
178
202
  }, {}, {}, {}, {
179
203
  height: string;
180
204
  gapPx: number;
@@ -185,9 +209,11 @@ export declare const MachReportPreview: {
185
209
  showExport: boolean;
186
210
  showPrint: boolean;
187
211
  showPdfWindow: boolean;
212
+ showParams: boolean;
188
213
  messages: Partial<import('./config').MachReportMessages>;
189
214
  autoLoad: boolean;
190
215
  preset: string;
216
+ paramDefs: import('..').ReportParamDef[] | undefined;
191
217
  fetcher: import('./adapters').PlanFetcher | null;
192
218
  }>;
193
219
  __isFragment?: never;
@@ -242,6 +268,14 @@ export declare const MachReportPreview: {
242
268
  type: BooleanConstructor;
243
269
  default: boolean;
244
270
  };
271
+ paramDefs: {
272
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
273
+ default: undefined;
274
+ };
275
+ showParams: {
276
+ type: BooleanConstructor;
277
+ default: undefined;
278
+ };
245
279
  fetcher: {
246
280
  type: import('vue').PropType<import('./adapters').PlanFetcher | null>;
247
281
  default: null;
@@ -258,6 +292,9 @@ export declare const MachReportPreview: {
258
292
  exportAs: (format: string) => void;
259
293
  openPdfWindow: () => void;
260
294
  gotoPage: (n: number) => void;
295
+ setParams: (values: Record<string, string>, opts?: {
296
+ reload?: boolean;
297
+ }) => void;
261
298
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
262
299
  error: (message: string, detail?: {
263
300
  code: string;
@@ -274,9 +311,11 @@ export declare const MachReportPreview: {
274
311
  showExport: boolean;
275
312
  showPrint: boolean;
276
313
  showPdfWindow: boolean;
314
+ showParams: boolean;
277
315
  messages: Partial<import('./config').MachReportMessages>;
278
316
  autoLoad: boolean;
279
317
  preset: string;
318
+ paramDefs: import('..').ReportParamDef[] | undefined;
280
319
  fetcher: import('./adapters').PlanFetcher | null;
281
320
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
282
321
  $slots: {
@@ -1,11 +1,12 @@
1
1
  import { Ref } from 'vue';
2
2
  import { RenderPlan } from '@agile-team/mach-report';
3
3
  /**
4
- * 预览搜索:计划全文索引 → 跳页导航 → 命中页高亮。
4
+ * 预览交互 composables 集合(本文件包含四件):
5
5
  *
6
- * - 输入防抖(默认 200ms):避免逐键触发 O(全计划) 扫描与页面跳转抖动
7
- * - matchIndex 循环导航(‹/›),每次导航 gotoPage 到命中所在页
8
- * - 高亮由页面挂载方调用 apply/clear(虚拟化窗口外的页随窗口重建自然清理)
6
+ * - useReportSearch:搜索(防抖索引 → 跳页导航 → 命中页高亮)
7
+ * - useDebugPanel:调试面板(?mrp-debug=1;planKB 按 plan 引用缓存)
8
+ * - useThumbs:缩略图侧栏(IntersectionObserver 懒渲染小画布)
9
+ * - useLoadTiming:加载耗时计时(performance 不可用时降级为 0)
9
10
  */
10
11
  export interface ReportSearchState {
11
12
  visible: Ref<boolean>;
@@ -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,6 +1,6 @@
1
1
  /**
2
2
  * ReportPreview 的编程式控制器(与组件 ref 方法同面):
3
- * reload / print / exportAs / openPdfWindow / gotoPage。
3
+ * reload / print / exportAs / openPdfWindow / gotoPage / setParams。
4
4
  */
5
5
  export interface MachReportController {
6
6
  reload(): Promise<void>;
@@ -8,6 +8,10 @@ export interface MachReportController {
8
8
  exportAs(format: "html" | "pdf" | string): void;
9
9
  openPdfWindow(): void;
10
10
  gotoPage(page: number): void;
11
+ /** 编程式设置参数并查询(合并进面板值;opts.reload=false 仅设值不重载) */
12
+ setParams(values: Record<string, string>, opts?: {
13
+ reload?: boolean;
14
+ }): void;
11
15
  }
12
16
  /**
13
17
  * 在 ReportPreview 的任意后代组件中获取控制器(免模板 ref):
@@ -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;
@@ -72,6 +80,9 @@ export declare const MachReportPreview: {
72
80
  exportAs: (format: string) => void;
73
81
  openPdfWindow: () => void;
74
82
  gotoPage: (n: number) => void;
83
+ setParams: (values: Record<string, string>, opts?: {
84
+ reload?: boolean;
85
+ }) => void;
75
86
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
76
87
  error: (message: string, detail?: {
77
88
  code: string;
@@ -88,9 +99,11 @@ export declare const MachReportPreview: {
88
99
  showExport: boolean;
89
100
  showPrint: boolean;
90
101
  showPdfWindow: boolean;
102
+ showParams: boolean;
91
103
  messages: Partial<import('./config').MachReportMessages>;
92
104
  autoLoad: boolean;
93
105
  preset: string;
106
+ paramDefs: import('..').ReportParamDef[] | undefined;
94
107
  fetcher: PlanFetcher | null;
95
108
  }, true, {}, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {
96
109
  viewportRef: HTMLDivElement;
@@ -152,6 +165,14 @@ export declare const MachReportPreview: {
152
165
  type: BooleanConstructor;
153
166
  default: boolean;
154
167
  };
168
+ paramDefs: {
169
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
170
+ default: undefined;
171
+ };
172
+ showParams: {
173
+ type: BooleanConstructor;
174
+ default: undefined;
175
+ };
155
176
  fetcher: {
156
177
  type: import('vue').PropType<PlanFetcher | null>;
157
178
  default: null;
@@ -168,6 +189,9 @@ export declare const MachReportPreview: {
168
189
  exportAs: (format: string) => void;
169
190
  openPdfWindow: () => void;
170
191
  gotoPage: (n: number) => void;
192
+ setParams: (values: Record<string, string>, opts?: {
193
+ reload?: boolean;
194
+ }) => void;
171
195
  }, {}, {}, {}, {
172
196
  height: string;
173
197
  gapPx: number;
@@ -178,9 +202,11 @@ export declare const MachReportPreview: {
178
202
  showExport: boolean;
179
203
  showPrint: boolean;
180
204
  showPdfWindow: boolean;
205
+ showParams: boolean;
181
206
  messages: Partial<import('./config').MachReportMessages>;
182
207
  autoLoad: boolean;
183
208
  preset: string;
209
+ paramDefs: import('..').ReportParamDef[] | undefined;
184
210
  fetcher: PlanFetcher | null;
185
211
  }>;
186
212
  __isFragment?: never;
@@ -235,6 +261,14 @@ export declare const MachReportPreview: {
235
261
  type: BooleanConstructor;
236
262
  default: boolean;
237
263
  };
264
+ paramDefs: {
265
+ type: import('vue').PropType<import('..').ReportParamDef[] | undefined>;
266
+ default: undefined;
267
+ };
268
+ showParams: {
269
+ type: BooleanConstructor;
270
+ default: undefined;
271
+ };
238
272
  fetcher: {
239
273
  type: import('vue').PropType<PlanFetcher | null>;
240
274
  default: null;
@@ -251,6 +285,9 @@ export declare const MachReportPreview: {
251
285
  exportAs: (format: string) => void;
252
286
  openPdfWindow: () => void;
253
287
  gotoPage: (n: number) => void;
288
+ setParams: (values: Record<string, string>, opts?: {
289
+ reload?: boolean;
290
+ }) => void;
254
291
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
255
292
  error: (message: string, detail?: {
256
293
  code: string;
@@ -267,9 +304,11 @@ export declare const MachReportPreview: {
267
304
  showExport: boolean;
268
305
  showPrint: boolean;
269
306
  showPdfWindow: boolean;
307
+ showParams: boolean;
270
308
  messages: Partial<import('./config').MachReportMessages>;
271
309
  autoLoad: boolean;
272
310
  preset: string;
311
+ paramDefs: import('..').ReportParamDef[] | undefined;
273
312
  fetcher: PlanFetcher | null;
274
313
  }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
275
314
  $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-qyCLVA7E.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-B3auzZDn.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview-B3auzZDn.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-D3QAPZ-7.js";
3
+ const r = e(() => import("./ReportPreview-BZ0GyQHJ.js").then((t) => t.l));
4
4
  function m() {
5
- return import("./ReportPreview-VCx59rSt.js").then((t) => t.k);
5
+ return import("./ReportPreview-BZ0GyQHJ.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-B3auzZDn.cjs"),r=require("./plugin-qyCLVA7E.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-BZ0GyQHJ.js";
2
+ import { P as t, M as c } from "./plugin-D3QAPZ-7.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-D3QAPZ-7.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": "1.0.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;