@agile-team/mach-report 1.2.2 → 2.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.
- package/README.md +62 -70
- package/dist/ReportPreview-Cr0IH1Rz.cjs +6 -0
- package/dist/ReportPreview-DwknBgsJ.js +1266 -0
- package/dist/defaults.d.ts +3 -7
- package/dist/format.d.ts +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +621 -758
- package/dist/layout/textwrap.d.ts +1 -1
- package/dist/pdf.cjs +1 -1
- package/dist/pdf.js +1 -1
- package/dist/plugin-Cj3c2wJc.cjs +1 -0
- package/dist/plugin-DJf_6_fl.js +18 -0
- package/dist/schema/render-plan.d.ts +1 -9
- package/dist/sql/expr.d.ts +3 -3
- package/dist/sql.d.cts +1 -1
- package/dist/sql.d.ts +1 -1
- package/dist/style-CFZ-HE2s.cjs +3 -0
- package/dist/{style-6ihHKVCM.js → style-DnmtG7Gl.js} +69 -81
- package/dist/style.css +1 -1
- package/dist/vue/ReportPreview.d.ts +3 -12
- package/dist/vue/adapters.d.ts +6 -12
- package/dist/vue/async.d.cts +7 -22
- package/dist/vue/async.d.ts +7 -22
- package/dist/vue/local-adapter.d.ts +1 -2
- package/dist/vue/plugin.d.ts +12 -34
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +6 -6
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +48 -48
- package/package.json +2 -12
- package/dist/ReportPreview-CJLvkTVn.cjs +0 -6
- package/dist/ReportPreview-mZiGtf0L.js +0 -1231
- package/dist/compat/jh4j-template.d.ts +0 -12
- package/dist/manager/api.d.ts +0 -45
- package/dist/manager/index.d.ts +0 -2
- package/dist/manager/types.d.ts +0 -50
- package/dist/manager.cjs +0 -1
- package/dist/manager.d.cts +0 -5
- package/dist/manager.d.ts +0 -5
- package/dist/manager.js +0 -104
- package/dist/plugin-C4qpbdMJ.cjs +0 -1
- package/dist/plugin-DcmAPK_K.js +0 -85
- package/dist/style-Xq08-IsV.cjs +0 -3
package/dist/vue/plugin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { App } from 'vue';
|
|
2
|
-
import { PlanFetcher
|
|
2
|
+
import { PlanFetcher } from './adapters';
|
|
3
3
|
import { PdfExporter } from './pdf-exporter';
|
|
4
4
|
import { MachReportConfig } from './config';
|
|
5
5
|
/**
|
|
@@ -8,14 +8,10 @@ import { MachReportConfig } from './config';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const MachReportPreview: {
|
|
10
10
|
new (...args: any[]): import('vue').CreateComponentPublicInstanceWithMixins<Readonly<import('vue').ExtractPropTypes<{
|
|
11
|
-
|
|
11
|
+
reportId: {
|
|
12
12
|
type: import('vue').PropType<string | string[] | null>;
|
|
13
13
|
default: null;
|
|
14
14
|
};
|
|
15
|
-
furnitureTempId: {
|
|
16
|
-
type: StringConstructor;
|
|
17
|
-
default: string;
|
|
18
|
-
};
|
|
19
15
|
params: {
|
|
20
16
|
type: import('vue').PropType<Record<string, string>>;
|
|
21
17
|
default: () => {};
|
|
@@ -95,14 +91,13 @@ export declare const MachReportPreview: {
|
|
|
95
91
|
height: string;
|
|
96
92
|
gapPx: number;
|
|
97
93
|
params: Record<string, string>;
|
|
98
|
-
furnitureTempId: string;
|
|
99
|
-
tempId: string | string[] | null;
|
|
100
94
|
debug: boolean;
|
|
101
95
|
showExport: boolean;
|
|
102
96
|
showPrint: boolean;
|
|
103
97
|
showPdfWindow: boolean;
|
|
104
98
|
showParams: boolean;
|
|
105
99
|
messages: Partial<import('./config').MachReportMessages>;
|
|
100
|
+
reportId: string | string[] | null;
|
|
106
101
|
autoLoad: boolean;
|
|
107
102
|
preset: string;
|
|
108
103
|
paramDefs: import('..').ReportParamDef[] | undefined;
|
|
@@ -119,14 +114,10 @@ export declare const MachReportPreview: {
|
|
|
119
114
|
M: {};
|
|
120
115
|
Defaults: {};
|
|
121
116
|
}, Readonly<import('vue').ExtractPropTypes<{
|
|
122
|
-
|
|
117
|
+
reportId: {
|
|
123
118
|
type: import('vue').PropType<string | string[] | null>;
|
|
124
119
|
default: null;
|
|
125
120
|
};
|
|
126
|
-
furnitureTempId: {
|
|
127
|
-
type: StringConstructor;
|
|
128
|
-
default: string;
|
|
129
|
-
};
|
|
130
121
|
params: {
|
|
131
122
|
type: import('vue').PropType<Record<string, string>>;
|
|
132
123
|
default: () => {};
|
|
@@ -199,14 +190,13 @@ export declare const MachReportPreview: {
|
|
|
199
190
|
height: string;
|
|
200
191
|
gapPx: number;
|
|
201
192
|
params: Record<string, string>;
|
|
202
|
-
furnitureTempId: string;
|
|
203
|
-
tempId: string | string[] | null;
|
|
204
193
|
debug: boolean;
|
|
205
194
|
showExport: boolean;
|
|
206
195
|
showPrint: boolean;
|
|
207
196
|
showPdfWindow: boolean;
|
|
208
197
|
showParams: boolean;
|
|
209
198
|
messages: Partial<import('./config').MachReportMessages>;
|
|
199
|
+
reportId: string | string[] | null;
|
|
210
200
|
autoLoad: boolean;
|
|
211
201
|
preset: string;
|
|
212
202
|
paramDefs: import('..').ReportParamDef[] | undefined;
|
|
@@ -216,14 +206,10 @@ export declare const MachReportPreview: {
|
|
|
216
206
|
__isTeleport?: never;
|
|
217
207
|
__isSuspense?: never;
|
|
218
208
|
} & import('vue').ComponentOptionsBase<Readonly<import('vue').ExtractPropTypes<{
|
|
219
|
-
|
|
209
|
+
reportId: {
|
|
220
210
|
type: import('vue').PropType<string | string[] | null>;
|
|
221
211
|
default: null;
|
|
222
212
|
};
|
|
223
|
-
furnitureTempId: {
|
|
224
|
-
type: StringConstructor;
|
|
225
|
-
default: string;
|
|
226
|
-
};
|
|
227
213
|
params: {
|
|
228
214
|
type: import('vue').PropType<Record<string, string>>;
|
|
229
215
|
default: () => {};
|
|
@@ -303,14 +289,13 @@ export declare const MachReportPreview: {
|
|
|
303
289
|
height: string;
|
|
304
290
|
gapPx: number;
|
|
305
291
|
params: Record<string, string>;
|
|
306
|
-
furnitureTempId: string;
|
|
307
|
-
tempId: string | string[] | null;
|
|
308
292
|
debug: boolean;
|
|
309
293
|
showExport: boolean;
|
|
310
294
|
showPrint: boolean;
|
|
311
295
|
showPdfWindow: boolean;
|
|
312
296
|
showParams: boolean;
|
|
313
297
|
messages: Partial<import('./config').MachReportMessages>;
|
|
298
|
+
reportId: string | string[] | null;
|
|
314
299
|
autoLoad: boolean;
|
|
315
300
|
preset: string;
|
|
316
301
|
paramDefs: import('..').ReportParamDef[] | undefined;
|
|
@@ -321,13 +306,7 @@ export declare const MachReportPreview: {
|
|
|
321
306
|
};
|
|
322
307
|
});
|
|
323
308
|
export interface MachReportPluginOptions {
|
|
324
|
-
/**
|
|
325
|
-
* 数据面(全部可选——零配置时用全局 fetch 同源直连):
|
|
326
|
-
* - request:宿主 http 客户端(axios 风格签名)
|
|
327
|
-
* - fetcher:完整 PlanFetcher(自定义数据面/本地模板,优先级最高)
|
|
328
|
-
*/
|
|
329
|
-
request?: HostRequest;
|
|
330
|
-
baseUrl?: string;
|
|
309
|
+
/** 报表数据源;也可直接传给 ReportPreview 的 fetcher prop */
|
|
331
310
|
fetcher?: PlanFetcher;
|
|
332
311
|
/** 应用级配置中心(defaults/presets/文案/主题),见 defineMachReportConfig */
|
|
333
312
|
config?: MachReportConfig;
|
|
@@ -339,15 +318,14 @@ export interface MachReportPluginOptions {
|
|
|
339
318
|
globalComponent?: boolean;
|
|
340
319
|
}
|
|
341
320
|
/**
|
|
342
|
-
* Vue
|
|
321
|
+
* Vue 插件:注册组件、配置和可选的数据源,不绑定任何后端接口。
|
|
343
322
|
*
|
|
344
323
|
* ```ts
|
|
345
|
-
* app.use(machReportPlugin
|
|
346
|
-
* app.use(machReportPlugin, {
|
|
347
|
-
* app.use(machReportPlugin, { request: axios, config: defineMachReportConfig({...}) })
|
|
324
|
+
* app.use(machReportPlugin, { fetcher })
|
|
325
|
+
* app.use(machReportPlugin, { config: defineMachReportConfig({...}) })
|
|
348
326
|
* ```
|
|
349
327
|
*
|
|
350
|
-
* 之后业务模板直接写 `<MachReportPreview
|
|
328
|
+
* 之后业务模板直接写 `<MachReportPreview report-id="X" />`。
|
|
351
329
|
*/
|
|
352
330
|
export declare const machReportPlugin: {
|
|
353
331
|
install(app: App, options?: MachReportPluginOptions): void;
|
package/dist/vue-async.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-Cj3c2wJc.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-Cr0IH1Rz.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview-Cr0IH1Rz.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,12 +1,12 @@
|
|
|
1
|
-
import { defineAsyncComponent as
|
|
2
|
-
import { m as
|
|
3
|
-
const r =
|
|
1
|
+
import { defineAsyncComponent as e } from "vue";
|
|
2
|
+
import { m as n } from "./plugin-DJf_6_fl.js";
|
|
3
|
+
const r = e(() => import("./ReportPreview-DwknBgsJ.js").then((t) => t.s));
|
|
4
4
|
function m() {
|
|
5
|
-
return import("./ReportPreview-
|
|
5
|
+
return import("./ReportPreview-DwknBgsJ.js").then((t) => t.s);
|
|
6
6
|
}
|
|
7
7
|
const p = {
|
|
8
|
-
install(t,
|
|
9
|
-
|
|
8
|
+
install(t, o = {}) {
|
|
9
|
+
n.install(t, o), t.component("MachReportPreview", r);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
export {
|
package/dist/vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview-Cr0IH1Rz.cjs"),E=require("@agile-team/mach-report"),r=require("./plugin-Cj3c2wJc.cjs"),c=require("vue");function p(i){return async({reportIds:t})=>{if(t.length===0)throw new e.PlanLoadError("缺少报表 ID");const a=[];for(const n of t){const o=i[n];if(!o)throw new e.PlanLoadError(`本地模板 ${n} 不存在`);const{plan:s,warnings:R}=E.paginateTemplate(o.template,o.datasets??{});R.length>0&&console.warn("[mach-report] 分页告警:",R),a.push(...s.pages)}return{schemaVersion:E.RENDER_PLAN_SCHEMA_VERSION,pages:a}}}function P(){return c.inject(r.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.PlanLoadError=e.PlanLoadError;exports.ReportParamPanel=e.ReportParamPanel;exports.ReportPreview=e.ReportPreview;exports.ReportToolbar=e.ReportToolbar;exports.SILENT_LOGGER=e.SILENT_LOGGER;exports.buildPrintDocument=e.buildPrintDocument;exports.buildWordHtml=e.buildWordHtml;exports.createDefaultPdfExporter=e.createDefaultPdfExporter;exports.createFetchRequest=e.createFetchRequest;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.joinReportIds=e.joinReportIds;exports.normalizeReportIds=e.normalizeReportIds;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.machReportPlugin=r.machReportPlugin;exports.createLocalFetcher=p;exports.useReportPreview=P;
|
package/dist/vue.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { P as s } from "./ReportPreview-DwknBgsJ.js";
|
|
2
|
+
import { D as d, a as g, M as T, R as C, b as w, c as O, S as A, d as D, e as L, f as H, g as F, h as S, i as N, j as b, n as v, p as x, k as I, r as G, t as K, l as Y, u as j, m as V, o as q, q as y } from "./ReportPreview-DwknBgsJ.js";
|
|
3
|
+
import { paginateTemplate as p, RENDER_PLAN_SCHEMA_VERSION as R } from "@agile-team/mach-report";
|
|
4
|
+
import { M as E } from "./plugin-DJf_6_fl.js";
|
|
5
|
+
import { a as W, b as k, c as z, d as X, m as Z } from "./plugin-DJf_6_fl.js";
|
|
6
|
+
import { inject as c } from "vue";
|
|
7
|
+
function u(n) {
|
|
8
|
+
return async ({ reportIds: a }) => {
|
|
9
|
+
if (a.length === 0) throw new s("缺少报表 ID");
|
|
9
10
|
const r = [];
|
|
10
11
|
for (const o of a) {
|
|
11
12
|
const e = n[o];
|
|
12
|
-
if (!e) throw new
|
|
13
|
-
const { plan: i, warnings:
|
|
14
|
-
|
|
13
|
+
if (!e) throw new s(`本地模板 ${o} 不存在`);
|
|
14
|
+
const { plan: i, warnings: t } = p(e.template, e.datasets ?? {});
|
|
15
|
+
t.length > 0 && console.warn("[mach-report] 分页告警:", t), r.push(...i.pages);
|
|
15
16
|
}
|
|
16
|
-
return { schemaVersion:
|
|
17
|
+
return { schemaVersion: R, pages: r };
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
20
|
+
function _() {
|
|
21
|
+
return c(E, null);
|
|
21
22
|
}
|
|
22
23
|
export {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
K as useZoom
|
|
24
|
+
d as DEFAULT_MESSAGES,
|
|
25
|
+
g as DEFAULT_THEME,
|
|
26
|
+
W as MACH_REPORT_CONFIG_KEY,
|
|
27
|
+
E as MACH_REPORT_CONTROLLER_KEY,
|
|
28
|
+
k as MACH_REPORT_FETCHER_KEY,
|
|
29
|
+
z as MACH_REPORT_PDF_EXPORTER_KEY,
|
|
30
|
+
T as MachReportError,
|
|
31
|
+
X as MachReportPreview,
|
|
32
|
+
s as PlanLoadError,
|
|
33
|
+
C as ReportParamPanel,
|
|
34
|
+
w as ReportPreview,
|
|
35
|
+
O as ReportToolbar,
|
|
36
|
+
A as SILENT_LOGGER,
|
|
37
|
+
D as buildPrintDocument,
|
|
38
|
+
L as buildWordHtml,
|
|
39
|
+
H as createDefaultPdfExporter,
|
|
40
|
+
F as createFetchRequest,
|
|
41
|
+
u as createLocalFetcher,
|
|
42
|
+
S as defineMachReportConfig,
|
|
43
|
+
N as defineMachReportPreset,
|
|
44
|
+
b as joinReportIds,
|
|
45
|
+
Z as machReportPlugin,
|
|
46
|
+
v as normalizeReportIds,
|
|
47
|
+
x as printPlans,
|
|
48
|
+
I as provideMachReportConfig,
|
|
49
|
+
G as resolveConfig,
|
|
50
|
+
K as themeToCssVars,
|
|
51
|
+
Y as toErrorDetail,
|
|
52
|
+
j as useMachReportConfig,
|
|
53
|
+
V as usePageWindow,
|
|
54
|
+
q as usePrintExport,
|
|
55
|
+
_ as useReportPreview,
|
|
56
|
+
y as useZoom
|
|
57
57
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agile-team/mach-report",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "独立的 TypeScript 报表引擎:模板分页、DOM/Canvas/PDF/Excel 输出与 Vue 3 预览组件",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"**/*.css",
|
|
@@ -40,16 +40,6 @@
|
|
|
40
40
|
"default": "./dist/sql.cjs"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"./manager": {
|
|
44
|
-
"import": {
|
|
45
|
-
"types": "./dist/manager.d.ts",
|
|
46
|
-
"default": "./dist/manager.js"
|
|
47
|
-
},
|
|
48
|
-
"require": {
|
|
49
|
-
"types": "./dist/manager.d.cts",
|
|
50
|
-
"default": "./dist/manager.cjs"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
43
|
"./vue": {
|
|
54
44
|
"import": {
|
|
55
45
|
"types": "./dist/vue/index.d.ts",
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";var ot=Object.create;var Pe=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var it=(t,n,l,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of at(n))!st.call(t,r)&&r!==l&&Pe(t,r,{get:()=>n[r],enumerable:!(a=rt(n,r))||a.enumerable});return t};var xe=(t,n,l)=>(l=t!=null?ot(lt(t)):{},it(n||!t||!t.__esModule?Pe(l,"default",{value:t,enumerable:!0}):l,t));const e=require("vue"),O=require("@agile-team/mach-report"),W=require("./plugin-C4qpbdMJ.cjs");function Be(t,n,l={}){const a=l.pxPerMm??3.7795275590551185,r=e.computed(()=>Math.max(0,e.unref(l.gapPx)??18)),o=e.ref(0),i=e.ref(800),p=e.computed(()=>(t.value?.pages??[]).map(P=>P.pageHeightMm*a)),c=e.computed(()=>{const P=t.value?.pages??[];let w=0,k=0;for(const C of P)w+=C.pageHeightMm*a+r.value,k=Math.max(k,C.pageWidthMm*a);return{w:k,h:w}}),f=e.computed(()=>O.computePageWindow({pageHeightsPx:p.value,viewportHeightPx:i.value/n.value,scrollTopPx:o.value/n.value,overscan:1,gapPx:r.value})),m=e.computed(()=>{const P=t.value;if(!P)return[];const{start:w,end:k}=f.value;return k<w?[]:P.pages.slice(w,k+1).map((C,R)=>({page:C,index:w+R}))});function v(P,w){let k=0;return C=>{k||(k=requestAnimationFrame(()=>{if(k=0,o.value=C.scrollTop,i.value=C.clientHeight||800,w.value<=0)return;const R=C.querySelectorAll(".mrp-page-holder");if(!R.length)return;const u=C.getBoundingClientRect().top+56;let h=1;R.forEach(d=>{d.getBoundingClientRect().top<=u&&(h=Number(d.dataset.page??1))}),P.value=Math.max(1,Math.min(w.value,h))}))}}return{contentSize:c,windowRange:f,visiblePages:m,makeScrollHandler:v,refreshViewport(P){P&&(i.value=P.clientHeight||800)}}}function $e(t){const n=e.ref(1),l=e.ref("fit");function a(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(n.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function r(o){o==="fit"?(l.value="fit",a()):(l.value="raw",n.value=o/100)}return{zoom:n,zoomMode:l,applyFitZoom:a,setZoom:r}}const _=8;function ee(){return new Promise(t=>setTimeout(t,0))}function Q(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function ce(t){const n=new Map;return t.pages.forEach(r=>{n.has(Q(r))||n.set(Q(r),r)}),`<!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
|
-
${[...n.values()].map(r=>`@page ${Q(r)}{size:${Math.round(r.pageWidthMm)}mm ${Math.round(r.pageHeightMm)}mm;margin:0;}`).join(`
|
|
5
|
-
`)}
|
|
6
|
-
body{margin:0;background:#fff;}`}</style></head><body>`}function de(t){const n=O.renderPage(t,96,{},document);return n.style.page=Q(t),n.outerHTML}function me(t){return{head:ce(t),pageChunks:t.pages.map(de)}}async function ut(t,n={}){const l={schemaVersion:"mach-report-batch-print",pages:t.flatMap(i=>i.pages)};if(l.pages.length===0)return;const a=ce(l),r=document.createElement("iframe");r.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(r);let o=!1;try{const i=r.contentDocument;i.open(),i.write(a);for(let p=0;p<l.pages.length;p++)i.write(de(l.pages[p])),p%_===_-1&&(n.onProgress?.(p+1,l.pages.length),await ee());i.write("</body></html>"),i.close(),await ee(),n.onProgress?.(l.pages.length,l.pages.length),o=!0,r.contentWindow?.focus(),r.contentWindow?.print()}catch(i){n.onError?.(i instanceof Error?`批量打印失败: ${i.message}`:"批量打印失败")}finally{o?setTimeout(()=>r.remove(),6e4):r.remove()}}function Me(t){const{head:n,pageChunks:l}=me(t);return{html:`${`<!doctype html><html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="utf-8"><!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom></w:WordDocument></xml><![endif]-->${n.replace(/^<!doctype html><html><head>/,"")}`}${l.join("")}</body></html>`,filename:"mach-report.doc"}}function Se(t,n){let l=null,a=!1,r=null,o=null,i=null;function p(){l?.remove(),l=null}function c(u,h){const d=URL.createObjectURL(u),g=document.createElement("a");g.href=d,g.download=h,g.click(),setTimeout(()=>URL.revokeObjectURL(d),1e4)}async function f(){if(a)return;const u=t.value;if(!u||u.pages.length===0)return;a=!0,p();const h=ce(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 d=l;try{const g=d.contentDocument;g.open(),g.write(h);for(let b=0;b<u.pages.length;b++)if(g.write(de(u.pages[b])),b%_===_-1&&await ee(),d!==l)return;g.write("</body></html>"),g.close(),await ee(),d.contentWindow?.focus(),d.contentWindow?.print()}catch{n.onError("调用打印失败,请改用导出 PDF")}finally{a=!1}}function m(u){if(r?.plan===u)return r.promise;const h=n.getPdfExporter()(u,n.onWarning).finally(()=>{r?.promise===h&&(r=null)});return r={plan:u,promise:h},h}async function v(){const u=t.value;if(!u||u.pages.length===0)return;if(o?.plan===u)return o.promise;n.onBusy?.("PDF");const h={},d=(async()=>{try{const g=await m(u);if(t.value!==u)return;c(new Blob([g],{type:"application/pdf"}),"mach-report.pdf")}catch(g){n.onError(g instanceof Error?`PDF 导出失败: ${g.message}`:"PDF 导出失败","pdf")}finally{n.onBusy?.(null),o?.token===h&&(o=null)}})();return o={plan:u,promise:d,token:h},d}async function P(){const u=t.value;if(!(!u||u.pages.length===0)){n.onBusy?.("Excel");try{const{renderPlanToXlsx:h}=await import("@agile-team/mach-report/xlsx"),{buffer:d,warnings:g}=await h(u);if(t.value!==u)return;g.length>0&&n.onWarning?.(`Excel 有 ${g.length} 处内容未导出:${g.slice(0,2).join(";")}`),c(new Blob([d],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),"mach-report.xlsx")}catch(h){n.onError(h instanceof Error?`Excel 导出失败: ${h.message}`:"Excel 导出失败","export")}finally{n.onBusy?.(null)}}}async function w(){const u=t.value;if(!u||u.pages.length===0)return;if(i?.plan===u)return i.promise;n.onBusy?.("图片");const h={},d=(async()=>{try{const{blobs:g}=await O.renderPlanToImages(u,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});if(t.value!==u)return;g.forEach((b,B)=>{c(b,g.length>1?`mach-report-page-${B+1}.png`:"mach-report.png")})}catch(g){n.onError(g instanceof Error?`图片导出失败: ${g.message}`:"图片导出失败","export")}finally{n.onBusy?.(null),i?.token===h&&(i=null)}})();return i={plan:u,promise:d,token:h},d}function k(){const u=t.value;if(!(!u||u.pages.length===0))try{const{html:h,filename:d}=Me(u);c(new Blob([h],{type:"application/msword;charset=utf-8"}),d)}catch(h){n.onError(h instanceof Error?`Word 导出失败: ${h.message}`:"Word 导出失败","export")}}function C(u){const h=t.value;if(!h||h.pages.length===0)return;if(u==="pdf"){v();return}if(u==="xlsx"||u==="excel"){P();return}if(u==="png"||u==="image"){w();return}if(u==="word"||u==="doc"){k();return}if(u!=="html"){n.onError(`不支持的导出格式:${u}`,"export");return}const{head:d,pageChunks:g}=me(h),b=`${d}${g.join("")}</body></html>`;c(new Blob([b],{type:"text/html;charset=utf-8"}),"mach-report.html")}function R(){const u=t.value;if(!u||u.pages.length===0)return;const h=window.open("","_blank");if(!h){n.onError("浏览器拦截了弹窗,请允许弹窗后重试");return}m(u).then(d=>{if(t.value!==u){h.close();return}const g=URL.createObjectURL(new Blob([d],{type:"application/pdf"})),b=h.document;b.title="PDF 预览",b.documentElement.style.height="100%",b.body.style.cssText="margin:0;height:100%;";const B=b.createElement("iframe");B.title="PDF 预览",B.style.cssText="display:block;width:100%;height:100%;border:0;",B.src=g,b.body.replaceChildren(B),setTimeout(()=>URL.revokeObjectURL(g),6e4)}).catch(d=>{h.close(),n.onError(d instanceof Error?`PDF 预览失败: ${d.message}`:"PDF 预览失败","pdf")})}return{print:f,exportAs:C,exportImages:w,exportWord:k,openPdfWindow:R,releasePrintFrame:p}}const Re="mrp-hit";function ct(t){t.querySelectorAll(`mark.${Re}`).forEach(l=>{const a=l.parentNode;if(a){for(;l.firstChild;)a.insertBefore(l.firstChild,l);l.remove(),a.normalize()}})}function dt(t,n){const l=n.trim();if(!l)return 0;const a=l.toLowerCase(),r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(p){const c=p.parentElement;return!c||c.closest("mark")||/^(SCRIPT|STYLE)$/.test(c.tagName)?NodeFilter.FILTER_REJECT:(p.nodeValue??"").toLowerCase().includes(a)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let p=r.nextNode();p;p=r.nextNode())o.push(p);let i=0;for(const p of o){const c=p.nodeValue??"",f=c.toLowerCase(),m=p.parentElement;if(!m)continue;const v=document.createDocumentFragment();let P=0,w=f.indexOf(a);for(;w>=0;){w>P&&v.appendChild(document.createTextNode(c.slice(P,w)));const k=document.createElement("mark");k.className=Re,k.textContent=c.slice(w,w+l.length),v.appendChild(k),i++,P=w+l.length,w=f.indexOf(a,P)}P<c.length&&v.appendChild(document.createTextNode(c.slice(P))),m.replaceChild(v,p)}return i}function ke(t,n){let l=0,a=t.toLowerCase().indexOf(n);for(;a>=0;)l++,a=t.toLowerCase().indexOf(n,a+n.length);return l}function mt(t){const{plan:n,gotoPage:l,highlight:a,clearHighlights:r}=t,o=t.debounceMs??200,i=e.ref(!1),p=e.ref(""),c=e.ref(""),f=e.ref(0);let m=null;const v=e.computed(()=>{const d=p.value.trim().toLowerCase(),g=n.value;if(!d||!g)return[];const b=[];return g.pages.forEach((B,G)=>{for(const D of B.components)if(D.grid){for(const z of D.grid.cells??[])for(const A of z??[])if(typeof A?.text=="string")for(let Z=0;Z<ke(A.text,d);Z++)b.push(G)}else if(D.kind==="text"&&typeof D.text=="string")for(let z=0;z<ke(D.text,d);z++)b.push(G)}),b}),P=e.computed(()=>v.value.length);function w(d){if(c.value=d,m&&clearTimeout(m),d.trim()===""){m=null,p.value="",f.value=0;return}m=setTimeout(()=>{m=null,p.value=c.value,f.value=0;const g=v.value[0];g!=null&&l(g+1)},o)}function k(d){const g=v.value.length;g!==0&&(f.value=(f.value+d+g)%g,l(v.value[f.value]+1))}function C(){i.value=!i.value}function R(d){const g=p.value.trim();g&&a(d,g)}function u(d){r(d)}function h(){c.value="",p.value="",f.value=0,m&&clearTimeout(m),m=null}return{visible:i,query:p,matchIndex:f,matchCount:P,toggle:C,onInput:w,onNav:k,apply:R,clear:u,reset:h}}function pt(t,n){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}}),a=e.computed(()=>!l.value||!n.plan.value?0:Math.round(JSON.stringify(n.plan.value).length/1024)),r=e.computed(()=>!l.value||!n.plan.value?null:{pages:n.pageCount.value,window:`${n.windowRange.value.start}-${n.windowRange.value.end}`,zoom:`${Math.round(n.zoom.value*100)}%`,loadMs:`${n.loadMs.value}ms`,planKB:a.value});return{enabled:l,debugStats:r}}function ft(t,n){const{thumbsRoot:l,visible:a,renderThumbCanvas:r}=n;let o=null;function i(f,m){if(!t.value||f.childElementCount>0)return;const v=r(m);v&&(v.style.width="100%",v.style.height="100%",v.style.display="block",f.appendChild(v))}return{schedule:()=>{!a.value||!t.value||!l.value||typeof IntersectionObserver>"u"||(o?.disconnect(),o=new IntersectionObserver(f=>{for(const m of f){if(!m.isIntersecting)continue;const v=m.target;i(v,Number(v.dataset.thumb??1)-1),o?.unobserve(v)}},{root:l.value,rootMargin:"200px"}),l.value.querySelectorAll("[data-thumb]").forEach(f=>{o.observe(f)}))},destroy:()=>{o?.disconnect(),o=null}}}function gt(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(n){t.value=n?Math.round(performance.now()-n):0}}}const vt={class:"mrp-toolbar"},ht={class:"mrp-title"},yt=["disabled"],wt={class:"mrp-pageinfo"},bt=["disabled"],Et={key:1,class:"mrp-search"},Pt=["placeholder","value"],xt={key:0,class:"mrp-search-count"},kt=["disabled"],Ct=["disabled"],Bt=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 n=t,l=e.ref(null);e.watch(()=>n.search.visible,r=>{r&&e.nextTick(()=>l.value?.focus())});function a(r,o,i){return r.replace("{cur}",String(o)).replace("{total}",String(i))}return(r,o)=>(e.openBlock(),e.createElementBlock("div",vt,[e.createElementVNode("span",ht,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]=i=>r.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,yt),e.createElementVNode("span",wt,e.toDisplayString(a(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]=i=>r.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,bt)],64)):e.createCommentVNode("",!0),o[17]||(o[17]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",Et,[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]=i=>r.$emit("search-input",i.target.value))},null,40,Pt),t.search.query?(e.openBlock(),e.createElementBlock("span",xt,e.toDisplayString(a(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]=i=>r.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,kt),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=i=>r.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,Ct)])):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]=i=>r.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=i=>r.$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]=i=>r.$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]=i=>r.$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]=i=>r.$emit("zoom",150))}," 150% ",2),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:2,class:"mrp-nav",type:"button",onClick:o[10]||(o[10]=i=>r.$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]=i=>r.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",onClick:o[12]||(o[12]=i=>r.$emit("export","xlsx"))},e.toDisplayString(t.messages.exportExcel),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=i=>r.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:6,class:"mrp-nav",type:"button",onClick:o[14]||(o[14]=i=>r.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:7,class:"mrp-nav",type:"button",onClick:o[15]||(o[15]=i=>r.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:8,class:"mrp-nav",type:"button",onClick:o[16]||(o[16]=i=>r.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),pe=(t,n)=>{const l=t.__vccOpts||t;for(const[a,r]of n)l[a]=r;return l},Te=pe(Bt,[["__scopeId","data-v-48cc0980"]]),$t={class:"mrp-params"},Mt={class:"mrp-params-title"},St={class:"mrp-params-grid"},Rt={class:"mrp-param-label"},Tt={key:0,class:"mrp-param-star"},Nt=["value","onChange"],Dt={value:"",disabled:"",hidden:""},Vt=["value"],Ft=["type","placeholder","value","onInput"],It={class:"mrp-params-actions"},Wt=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:n}){const l=t,a=n,r=e.ref({...l.modelValue});e.watch(()=>l.modelValue,c=>{r.value={...c}});const o=e.computed(()=>l.defs.map(c=>({def:c,label:c.label??c.field,value:r.value[c.field]??""})));function i(c,f){r.value={...r.value,[c]:f},a("update:modelValue",{...r.value})}function p(c){const f=l.defs.find(m=>m.field===c);return l.attempted&&f?.required===!0&&!(r.value[c]??"").trim()}return(c,f)=>(e.openBlock(),e.createElementBlock("div",$t,[e.createElementVNode("span",Mt,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",St,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>(e.openBlock(),e.createElementBlock("label",{key:m.def.field,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":p(m.def.field)}])},[e.createElementVNode("span",Rt,[e.createTextVNode(e.toDisplayString(m.label),1),m.def.required?(e.openBlock(),e.createElementBlock("i",Tt,"*")):e.createCommentVNode("",!0)]),(m.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:m.value,onChange:v=>i(m.def.field,v.target.value),onKeydown:f[0]||(f[0]=e.withKeys(v=>c.$emit("query"),["enter"]))},[e.createElementVNode("option",Dt,e.toDisplayString(m.def.placeholder??`请选择${m.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.def.options??[],v=>(e.openBlock(),e.createElementBlock("option",{key:v.value,value:v.value},e.toDisplayString(v.label),9,Vt))),128))],40,Nt)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:m.def.type==="number"?"number":m.def.type==="date"?"date":"text",placeholder:m.def.placeholder??`请输入${m.label}`,value:m.value,onInput:v=>i(m.def.field,v.target.value),onKeydown:f[1]||(f[1]=e.withKeys(v=>c.$emit("query"),["enter"]))},null,40,Ft))],2))),128))]),e.createElementVNode("div",It,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:f[2]||(f[2]=m=>c.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:f[3]||(f[3]=m=>c.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),Ne=pe(Wt,[["__scopeId","data-v-aafce92d"]]),De={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",exportExcel:"导出 Excel",exportImage:"导出图片",exportWord:"导出 Word",exporting:"正在生成 {format}…",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}"},Ve={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function zt(t){return t}function Lt(t){return t}const I={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},Ht={warn:()=>{},info:()=>{}};function Fe(t,n){const l=n?t?.presets?.[n]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,a={...t?.defaults,...l};return{showExport:a.showExport??I.showExport,showPrint:a.showPrint??I.showPrint,showPdfWindow:a.showPdfWindow??I.showPdfWindow,showParams:a.showParams??I.showParams,gapPx:a.gapPx??I.gapPx,pdfFontUrl:a.pdfFontUrl??I.pdfFontUrl,theme:{...Ve,...a.theme},messages:{...De,...a.messages},logger:a.logger??I.logger}}function Ie(t){const n={};return t.shellBg!=null&&(n["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(n["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(n["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(n["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(n["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(n["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(n["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(n["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(n["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(n["--mrp-btn-active-bg"]=t.btnActiveBg),n}function Ot(t){const n=e.inject(W.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const a=n?.value??null,r="defaults"in t&&"presets"in t?t:{defaults:t,presets:{}};return a?{defaults:{...a.defaults,...r.defaults},presets:{...a.presets,...r.presets},defaultPreset:r.defaultPreset??a.defaultPreset}:r});e.provide(W.MACH_REPORT_CONFIG_KEY,l)}function We(){return e.inject(W.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}function ze(t={fontUrl:"/simhei.ttf"}){let n=null;return async(l,a)=>{n||(n=await import("@agile-team/mach-report/pdf"));const r=t.fontUrl?await n.loadFontWithCache(t.fontUrl):null,{bytes:o,unsupportedTextCount:i,pageErrors:p,fidelityWarnings:c}=await n.renderPlanToPdf(l,r?{customFontBytes:r}:{});if(i>0)throw new Error(`PDF 中有 ${i} 行文字无法编码;请部署支持所用文字的字体并配置 pdfFontUrl`);if(p.length>0)throw new Error(`PDF 有 ${p.length} 页渲染失败:${p[0]}`);return c.length>0&&a?.(`PDF 有 ${c.length} 处版式降级:${c.slice(0,2).join(";")}`),o}}class j extends Error{constructor(n,l,a){super(l),this.name="MachReportError",this.code=n,this.cause=a}}function Le(t){return t instanceof j?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const At={class:"mrp-main"},qt={key:0,class:"mrp-state"},Ut={key:1,class:"mrp-state mrp-error"},Kt={key:2,class:"mrp-state"},jt=["data-page"],Gt=["onClick"],Zt=["data-thumb"],Yt={class:"mrp-thumb-no"},Jt={class:"mrp-overlay"},Xt={key:2,class:"mrp-debug","aria-hidden":"true"},X=96/25.4,Ce="mach-report:ui",Qt=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},paramDefs:{type:Array,default:void 0},showParams:{type:Boolean,default:void 0},fetcher:{type:Function,default:null}},emits:["loaded","error","warning"],setup(t,{expose:n,emit:l}){e.useCssVars(s=>({a2716f8c:C.value+"px"}));const a=t,r=l,o=e.shallowRef(null),i=e.ref(!1),p=e.ref(""),c=e.ref(null),f=e.ref(1),m=e.ref(null),v=e.ref(null),P=e.ref(null),w=e.ref(!1),k=gt(),C=e.computed(()=>Math.max(0,A.value)),R=e.inject(W.MACH_REPORT_FETCHER_KEY,null),u=e.inject(W.MACH_REPORT_PDF_EXPORTER_KEY,null),h=e.computed(()=>W.normalizeTempIds(a.tempId)),d=e.computed(()=>o.value?.pages.length??0),g=We(),b=e.computed(()=>Fe(g.value,a.preset)),B=e.computed(()=>({...b.value.messages,...a.messages})),G=e.computed(()=>a.showExport??b.value.showExport),D=e.computed(()=>a.showPrint??b.value.showPrint),z=e.computed(()=>a.showPdfWindow??b.value.showPdfWindow),A=e.computed(()=>a.gapPx??b.value.gapPx),Z=e.computed(()=>a.showParams??b.value.showParams);let fe=null,te=null;function Oe(){if(u)return u;const s=b.value.pdfFontUrl;return(!te||fe!==s)&&(fe=s,te=ze({fontUrl:s})),te}const V=e.computed(()=>a.paramDefs??[]),F=e.ref({}),ne=e.ref(!1);function Y(s){const y={};for(const E of s)y[E.field]=a.params[E.field]??E.defaultValue??"";F.value=y,ne.value=!1}Y(V.value),e.watch(V,s=>Y(s)),e.watch(()=>JSON.stringify(a.params),()=>Y(V.value));const Ae=e.computed(()=>{const s={...a.params};for(const[y,E]of Object.entries(F.value))E===""?delete s[y]:s[y]=E;return s});function qe(){return V.value.filter(s=>s.required===!0&&!(F.value[s.field]??"").trim())}function Ue(){ne.value=!0;const s=qe();if(s.length>0){const y=s[0].label??s[0].field,E=B.value.paramRequired.replace("{label}",y);p.value=E,r("error",E,{code:"param"});return}N()}function Ke(){Y(V.value)}const je=e.computed(()=>({height:a.height,...Ie(b.value.theme)})),{zoom:S,zoomMode:L,applyFitZoom:ge,setZoom:oe}=$e(()=>({viewport:v.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*X})),Ge=Be(o,S,{pxPerMm:X,gapPx:A}),{contentSize:re,windowRange:q,visiblePages:Ze,makeScrollHandler:Ye,refreshViewport:ve}=Ge,Je=Ye(f,d);function ae(s){L.value="raw",S.value=Math.min(3,Math.max(.3,s))}function le(){he(),o.value=null,f.value=1,$.reset()}let J=0;async function N(){const s=++J,y=a.fetcher??R;if(h.value.length===0){p.value="缺少报表模板 ID",le(),r("error",p.value,{code:"param"});return}if(!y){p.value="未提供渲染数据源 fetcher",le(),r("error",p.value,{code:"config"});return}i.value=!0,p.value="",c.value=null,le();const E=k.start();try{const x=await y({tempIds:h.value,furnitureTempId:a.furnitureTempId||void 0,params:{...Ae.value}});if(s!==J)return;const M=O.validateRenderPlan(x);if(!M.ok){const U=M.errors.slice(0,3).map(K=>`${K.path}: ${K.message}`).join("; ");throw new j("validate",`渲染计划校验失败(${M.errors.length} 处): ${U}`)}M.warnings.length>0&&b.value.logger.warn("[mach-report] 渲染计划告警:",M.warnings),o.value=x,f.value=1,k.end(E),v.value&&(v.value.scrollTop=0),L.value==="fit"&&ge(),r("loaded",x.pages.length)}catch(x){if(s!==J)return;const M=x instanceof j?x:new j("fetch",x instanceof Error?x.message:"预览加载失败",x);p.value=M.message,r("error",M.message,Le(M))}finally{s===J&&(i.value=!1)}}function T(s){if(d.value<=0)return;const y=Math.max(1,Math.min(d.value,s));f.value=y;const E=v.value;if(!E)return;let x=0;for(let M=0;M<y-1;M++)x+=(o.value?.pages[M]?.pageHeightMm??0)*X+C.value;E.scrollTop=x*S.value}const{print:se,exportAs:ie,openPdfWindow:ue,releasePrintFrame:he}=Se(o,{getPdfExporter:Oe,onError:(s,y)=>{c.value={kind:"error",message:s},r("error",s,{code:y??"print"})},onWarning:s=>{c.value={kind:"warning",message:s},r("warning",s)},onBusy:s=>{s?c.value={kind:"progress",message:B.value.exporting.replace("{format}",s)}:c.value?.kind==="progress"&&(c.value=null)}});function ye(s,y={}){F.value={...F.value,...s},y.reload!==!1&&N()}const Xe={reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:T,setParams:ye};e.provide(W.MACH_REPORT_CONTROLLER_KEY,Xe);const $=mt({plan:o,gotoPage:T,highlight:dt,clearHighlights:ct});function Qe(s){s.ctrlKey&&(s.preventDefault(),ae(S.value*(s.deltaY<0?1.1:1/1.1)))}function _e(s){if((s.ctrlKey||s.metaKey)&&s.key.toLowerCase()==="f"){s.preventDefault(),$.visible.value||$.toggle();return}switch(s.key){case"PageDown":s.preventDefault(),T(f.value+1);break;case"PageUp":s.preventDefault(),T(f.value-1);break;case"Home":s.preventDefault(),T(1);break;case"End":s.preventDefault(),T(d.value);break;case"+":case"=":s.preventDefault(),ae(S.value*1.1);break;case"-":s.preventDefault(),ae(S.value/1.1);break}}function et(){try{localStorage.setItem(Ce,JSON.stringify({zoomMode:L.value==="fit"?"fit":Math.round(S.value*100)}))}catch{}}e.watch([L,S],et),e.watchEffect(()=>{const s=o.value;if(!s)return;const y=m.value;if(!y)return;y.querySelectorAll(".mrp-page-holder").forEach(x=>{const M=Number(x.dataset.page??0)-1,U=s.pages[M];if(!U||x.childElementCount>0){if(x.firstElementChild){const Ee=x.firstElementChild;$.clear(Ee),$.apply(Ee)}return}x.style.width=`${U.pageWidthMm*X}px`;const K=O.renderPage(U,96,{},document);$.apply(K),x.appendChild(K)})},{flush:"post"}),e.watch(()=>$.query.value,s=>{s||m.value?.querySelectorAll(".mrp-page-holder").forEach(y=>{$.clear(y)})});const we=ft(o,{thumbsRoot:P,visible:w,renderThumbCanvas:s=>{try{const{canvases:y}=O.renderPlanToCanvas(o.value,{start:s,end:s,dpr:.2});return y[0]??null}catch{return null}}});e.watchEffect(()=>{we.schedule()},{flush:"post"});const tt=e.computed(()=>a.debug),{debugStats:H}=pt(tt,{plan:o,pageCount:d,windowRange:q,zoom:S,loadMs:k.loadMs});function be(){ve(v.value),L.value==="fit"&&ge()}function nt(){try{const s=JSON.parse(localStorage.getItem(Ce)??"{}");s.zoomMode==="fit"?oe("fit"):typeof s.zoomMode=="number"&&oe(s.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",be),ve(v.value),nt(),a.autoLoad&&N()}),e.onUnmounted(()=>{window.removeEventListener("resize",be),we.destroy(),$.reset(),he()}),e.watch(()=>[a.tempId,a.furnitureTempId,JSON.stringify(a.params)],()=>{a.autoLoad&&N()}),e.watch(()=>a.fetcher??R,()=>{a.autoLoad&&N()}),n({reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:T,setParams:ye}),(s,y)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(je.value)},[Z.value&&V.value.length>0?(e.openBlock(),e.createBlock(Ne,{key:0,defs:V.value,modelValue:F.value,"onUpdate:modelValue":y[0]||(y[0]=E=>F.value=E),messages:B.value,attempted:ne.value,onQuery:Ue,onReset:Ke},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(Te,{"page-count":d.value,"current-page":f.value,"zoom-mode":e.unref(L),zoom:e.unref(S),"show-export":G.value,"show-print":D.value,"show-pdf-window":z.value,messages:B.value,search:{visible:e.unref($).visible.value,query:e.unref($).query.value,matchIndex:e.unref($).matchIndex.value,matchCount:e.unref($).matchCount.value},"thumbs-visible":w.value,onGoto:T,onZoom:e.unref(oe),onExport:y[1]||(y[1]=E=>e.unref(ie)(E)),onPrint:e.unref(se),onPdfWindow:e.unref(ue),onSearchInput:e.unref($).onInput,onSearchNav:e.unref($).onNav,onSearchToggle:e.unref($).toggle,onThumbsToggle:y[2]||(y[2]=E=>w.value=!w.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"]),c.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["mrp-export-notice",`mrp-export-${c.value.kind}`]),role:"alert"},e.toDisplayString(c.value.message),3)):e.createCommentVNode("",!0),e.createElementVNode("div",At,[e.createElementVNode("div",{ref_key:"viewportRef",ref:v,class:"mrp-body",tabindex:"0",onWheel:Qe,onKeydown:_e,onScrollPassive:y[3]||(y[3]=E=>e.unref(Je)(E.target))},[i.value?(e.openBlock(),e.createElementBlock("div",qt,e.toDisplayString(B.value.loading),1)):p.value?(e.openBlock(),e.createElementBlock("div",Ut,[e.createTextVNode(e.toDisplayString(p.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:N},e.toDisplayString(B.value.retry),1)])):!o.value||d.value===0?(e.openBlock(),e.createElementBlock("div",Kt,e.toDisplayString(B.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(re).w*e.unref(S)}px`,height:`${e.unref(re).h*e.unref(S)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:m,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(S)})`,transformOrigin:"top left",width:`${e.unref(re).w}px`})},[e.unref(q).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(q).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Ze),E=>(e.openBlock(),e.createElementBlock("div",{key:E.index,class:"mrp-page-holder","data-page":E.index+1},null,8,jt))),128)),e.unref(q).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(q).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),w.value&&d.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:P,class:"mrp-thumbs"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value?.pages??[],(E,x)=>(e.openBlock(),e.createElementBlock("div",{key:x,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":x+1===f.value}]),onClick:M=>T(x+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":x+1,style:e.normalizeStyle({height:`${Math.round(E.pageHeightMm/E.pageWidthMm*116)}px`})},null,12,Zt),e.createElementVNode("span",Yt,e.toDisplayString(x+1),1)],10,Gt))),128))],512)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Jt,[e.renderSlot(s.$slots,"default",{},void 0,!0)]),e.unref(H)?(e.openBlock(),e.createElementBlock("div",Xt,[y[4]||(y[4]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(H).pages)+" | window: ["+e.toDisplayString(e.unref(H).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(H).zoom)+" | load: "+e.toDisplayString(e.unref(H).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(H).planKB)+"KB",1)])):e.createCommentVNode("",!0)],4))}}),He=pe(Qt,[["__scopeId","data-v-a0054844"]]),_t=Object.freeze(Object.defineProperty({__proto__:null,default:He},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=De;exports.DEFAULT_THEME=Ve;exports.MachReportError=j;exports.ReportParamPanel=Ne;exports.ReportPreview=He;exports.ReportPreview$1=_t;exports.ReportToolbar=Te;exports.SILENT_LOGGER=Ht;exports.buildPrintDocument=me;exports.buildWordHtml=Me;exports.createDefaultPdfExporter=ze;exports.defineMachReportConfig=zt;exports.defineMachReportPreset=Lt;exports.printPlans=ut;exports.provideMachReportConfig=Ot;exports.resolveConfig=Fe;exports.themeToCssVars=Ie;exports.toErrorDetail=Le;exports.useMachReportConfig=We;exports.usePageWindow=Be;exports.usePrintExport=Se;exports.useZoom=$e;
|