@agile-team/mach-report 1.2.1 → 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 +86 -255
- 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
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ReportTemplate } from '../layout/paginate';
|
|
2
|
-
export interface Jh4jImportResult {
|
|
3
|
-
template: ReportTemplate;
|
|
4
|
-
warnings: string[];
|
|
5
|
-
}
|
|
6
|
-
type Raw = Record<string, unknown>;
|
|
7
|
-
/**
|
|
8
|
-
* jh4j 模板 content(exportBackendPrintConfig 产物,见 docs/reverse-findings.md §6)
|
|
9
|
-
* → MachReport ReportTemplate。单向转换,未知结构降级 + 告警,绝不抛错。
|
|
10
|
-
*/
|
|
11
|
-
export declare function importJh4jTemplateContent(content: string | Raw): Jh4jImportResult;
|
|
12
|
-
export {};
|
package/dist/manager/api.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { DatasetRecord, ImportStrategy, PageResult, ParamRecord, ReportRecord, RequestFn } from './types';
|
|
2
|
-
export declare function createReportAdminClient(options: {
|
|
3
|
-
request: RequestFn;
|
|
4
|
-
baseUrl?: string;
|
|
5
|
-
}): {
|
|
6
|
-
/** 模板列表(分页) */
|
|
7
|
-
listReports(query?: {
|
|
8
|
-
current?: number;
|
|
9
|
-
size?: number;
|
|
10
|
-
directoryId?: string;
|
|
11
|
-
keyword?: string;
|
|
12
|
-
}): Promise<PageResult<ReportRecord>>;
|
|
13
|
-
/** 模板详情(content 为 jh4j 私有模板 JSON 字符串,可喂给 importJh4jTemplateContent) */
|
|
14
|
-
getReport(id: string): Promise<ReportRecord>;
|
|
15
|
-
/** 保存模板(jh4j:PUT,body {id, code, name, content}) */
|
|
16
|
-
updateReport(input: {
|
|
17
|
-
id: string;
|
|
18
|
-
code?: string;
|
|
19
|
-
name?: string;
|
|
20
|
-
content: string;
|
|
21
|
-
}): Promise<unknown>;
|
|
22
|
-
/** 导出模板定义包(body = ID 数组,返回 ZIP blob) */
|
|
23
|
-
exportDefinition(ids: string[]): Promise<unknown>;
|
|
24
|
-
/** 导入模板定义包(multipart: file + strategy) */
|
|
25
|
-
importDefinition(file: File | Blob, strategy: ImportStrategy): Promise<unknown>;
|
|
26
|
-
/** 数据集列表 */
|
|
27
|
-
listDatasets(reportId: string): Promise<PageResult<DatasetRecord>>;
|
|
28
|
-
/** 参数列表 */
|
|
29
|
-
listParams(reportId: string): Promise<PageResult<ParamRecord>>;
|
|
30
|
-
/** 模板锁:进入设计器前获取(40s 心跳由 holdLock 驱动) */
|
|
31
|
-
acquireLock(reportId: string): Promise<unknown>;
|
|
32
|
-
lockHeartbeat(reportId: string): Promise<unknown>;
|
|
33
|
-
releaseLock(reportId: string): Promise<unknown>;
|
|
34
|
-
/**
|
|
35
|
-
* 持锁执行:acquire → fn(期间自动心跳)→ release(finally)。
|
|
36
|
-
* 返回 fn 的结果;获取锁失败时抛 ReportAdminError。
|
|
37
|
-
* 心跳连续失败(默认 2 次)视为锁丢失:触发 onLockLost 回调并停止心跳,
|
|
38
|
-
* fn 继续执行(避免中途丢弃用户编辑),由调用方决定是否提示/中止。
|
|
39
|
-
*/
|
|
40
|
-
holdLock<T>(reportId: string, fn: () => Promise<T>, options?: {
|
|
41
|
-
onLockLost?: (reason: string) => void;
|
|
42
|
-
heartbeatFailLimit?: number;
|
|
43
|
-
}): Promise<T>;
|
|
44
|
-
};
|
|
45
|
-
export type ReportAdminClient = ReturnType<typeof createReportAdminClient>;
|
package/dist/manager/index.d.ts
DELETED
package/dist/manager/types.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
export interface ReportRecord {
|
|
2
|
-
id: string;
|
|
3
|
-
code?: string;
|
|
4
|
-
name?: string;
|
|
5
|
-
publishStatus?: string;
|
|
6
|
-
directoryId?: string;
|
|
7
|
-
updateTime?: string;
|
|
8
|
-
[key: string]: unknown;
|
|
9
|
-
}
|
|
10
|
-
export interface PageResult<T> {
|
|
11
|
-
records: T[];
|
|
12
|
-
total?: number;
|
|
13
|
-
current?: number;
|
|
14
|
-
size?: number;
|
|
15
|
-
}
|
|
16
|
-
export interface DatasetRecord {
|
|
17
|
-
id?: string;
|
|
18
|
-
reportId?: string;
|
|
19
|
-
code?: string;
|
|
20
|
-
name?: string;
|
|
21
|
-
type?: string;
|
|
22
|
-
datasourceCode?: string;
|
|
23
|
-
sqlText?: string;
|
|
24
|
-
apiUrl?: string;
|
|
25
|
-
fields?: unknown[];
|
|
26
|
-
[key: string]: unknown;
|
|
27
|
-
}
|
|
28
|
-
export interface ParamRecord {
|
|
29
|
-
id?: string;
|
|
30
|
-
reportId?: string;
|
|
31
|
-
name?: string;
|
|
32
|
-
defaultValue?: string;
|
|
33
|
-
[key: string]: unknown;
|
|
34
|
-
}
|
|
35
|
-
export type ImportStrategy = "overwrite" | "skip";
|
|
36
|
-
export type RequestFn = (config: {
|
|
37
|
-
url: string;
|
|
38
|
-
method: string;
|
|
39
|
-
params?: Record<string, unknown>;
|
|
40
|
-
data?: unknown;
|
|
41
|
-
}) => Promise<unknown>;
|
|
42
|
-
export interface ApiResponse<T = unknown> {
|
|
43
|
-
code?: number;
|
|
44
|
-
message?: string;
|
|
45
|
-
data?: T;
|
|
46
|
-
}
|
|
47
|
-
export declare class ReportAdminError extends Error {
|
|
48
|
-
readonly url: string;
|
|
49
|
-
constructor(message: string, url: string);
|
|
50
|
-
}
|
package/dist/manager.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class h extends Error{constructor(a,r){super(a),this.url=r,this.name="ReportAdminError"}}const o="/report/codePrintReport",d="/report/codePrintReportLock";function n(s,a){const r=s;if(r&&r.code!=null&&r.code!==200)throw new h(String(r.message||"请求失败"),a);return r?.data??r}function $(s){const{request:a}=s,r=s.baseUrl??"";return{async listReports(e={}){const t=`${r}${o}/list`;return n(await a({url:t,method:"get",params:{current:1,size:20,...e}}),t)},async getReport(e){const t=`${r}${o}/getById`;return n(await a({url:t,method:"get",params:{id:e}}),t)},async updateReport(e){const t=`${r}${o}/update`;return n(await a({url:t,method:"put",data:e}),t)},async exportDefinition(e){const t=`${r}${o}/exportDefinition`;return a({url:t,method:"post",data:e})},async importDefinition(e,t){const c=`${r}${o}/importDefinition`,i=new FormData;return i.append("file",e),i.append("strategy",t),a({url:c,method:"post",data:i})},async listDatasets(e){const t=`${r}${o}Ds/list`;return n(await a({url:t,method:"get",params:{reportId:e,current:1,size:999}}),t)},async listParams(e){const t=`${r}${o}Param/list`;return n(await a({url:t,method:"get",params:{reportId:e,current:1,size:999}}),t)},async acquireLock(e){const t=`${r}${d}/acquire`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async lockHeartbeat(e){const t=`${r}${d}/heartbeat`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async releaseLock(e){const t=`${r}${d}/release`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async holdLock(e,t,c={}){await this.acquireLock(e);const i=Math.max(1,c.heartbeatFailLimit??2);let l=0,m=!1;const p=setInterval(()=>{this.lockHeartbeat(e).then(()=>{l=0}).catch(u=>{l++,!m&&l>=i&&(m=!0,c.onLockLost?.(`模板锁心跳连续 ${l} 次失败(${u instanceof Error?u.message:String(u)}),锁可能已被释放`),clearInterval(p))})},4e4);try{return await t()}finally{clearInterval(p),await this.releaseLock(e).catch(()=>{})}}}}exports.ReportAdminError=h;exports.createReportAdminClient=$;
|
package/dist/manager.d.cts
DELETED
package/dist/manager.d.ts
DELETED
package/dist/manager.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
class h extends Error {
|
|
2
|
-
constructor(a, r) {
|
|
3
|
-
super(a), this.url = r, this.name = "ReportAdminError";
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
const o = "/report/codePrintReport", d = "/report/codePrintReportLock";
|
|
7
|
-
function n(s, a) {
|
|
8
|
-
const r = s;
|
|
9
|
-
if (r && r.code != null && r.code !== 200)
|
|
10
|
-
throw new h(String(r.message || "请求失败"), a);
|
|
11
|
-
return r?.data ?? r;
|
|
12
|
-
}
|
|
13
|
-
function $(s) {
|
|
14
|
-
const { request: a } = s, r = s.baseUrl ?? "";
|
|
15
|
-
return {
|
|
16
|
-
/** 模板列表(分页) */
|
|
17
|
-
async listReports(e = {}) {
|
|
18
|
-
const t = `${r}${o}/list`;
|
|
19
|
-
return n(
|
|
20
|
-
await a({ url: t, method: "get", params: { current: 1, size: 20, ...e } }),
|
|
21
|
-
t
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
/** 模板详情(content 为 jh4j 私有模板 JSON 字符串,可喂给 importJh4jTemplateContent) */
|
|
25
|
-
async getReport(e) {
|
|
26
|
-
const t = `${r}${o}/getById`;
|
|
27
|
-
return n(await a({ url: t, method: "get", params: { id: e } }), t);
|
|
28
|
-
},
|
|
29
|
-
/** 保存模板(jh4j:PUT,body {id, code, name, content}) */
|
|
30
|
-
async updateReport(e) {
|
|
31
|
-
const t = `${r}${o}/update`;
|
|
32
|
-
return n(await a({ url: t, method: "put", data: e }), t);
|
|
33
|
-
},
|
|
34
|
-
/** 导出模板定义包(body = ID 数组,返回 ZIP blob) */
|
|
35
|
-
async exportDefinition(e) {
|
|
36
|
-
const t = `${r}${o}/exportDefinition`;
|
|
37
|
-
return a({ url: t, method: "post", data: e });
|
|
38
|
-
},
|
|
39
|
-
/** 导入模板定义包(multipart: file + strategy) */
|
|
40
|
-
async importDefinition(e, t) {
|
|
41
|
-
const c = `${r}${o}/importDefinition`, i = new FormData();
|
|
42
|
-
return i.append("file", e), i.append("strategy", t), a({ url: c, method: "post", data: i });
|
|
43
|
-
},
|
|
44
|
-
/** 数据集列表 */
|
|
45
|
-
async listDatasets(e) {
|
|
46
|
-
const t = `${r}${o}Ds/list`;
|
|
47
|
-
return n(
|
|
48
|
-
await a({ url: t, method: "get", params: { reportId: e, current: 1, size: 999 } }),
|
|
49
|
-
t
|
|
50
|
-
);
|
|
51
|
-
},
|
|
52
|
-
/** 参数列表 */
|
|
53
|
-
async listParams(e) {
|
|
54
|
-
const t = `${r}${o}Param/list`;
|
|
55
|
-
return n(
|
|
56
|
-
await a({ url: t, method: "get", params: { reportId: e, current: 1, size: 999 } }),
|
|
57
|
-
t
|
|
58
|
-
);
|
|
59
|
-
},
|
|
60
|
-
/** 模板锁:进入设计器前获取(40s 心跳由 holdLock 驱动) */
|
|
61
|
-
async acquireLock(e) {
|
|
62
|
-
const t = `${r}${d}/acquire`;
|
|
63
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
64
|
-
},
|
|
65
|
-
async lockHeartbeat(e) {
|
|
66
|
-
const t = `${r}${d}/heartbeat`;
|
|
67
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
68
|
-
},
|
|
69
|
-
async releaseLock(e) {
|
|
70
|
-
const t = `${r}${d}/release`;
|
|
71
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
72
|
-
},
|
|
73
|
-
/**
|
|
74
|
-
* 持锁执行:acquire → fn(期间自动心跳)→ release(finally)。
|
|
75
|
-
* 返回 fn 的结果;获取锁失败时抛 ReportAdminError。
|
|
76
|
-
* 心跳连续失败(默认 2 次)视为锁丢失:触发 onLockLost 回调并停止心跳,
|
|
77
|
-
* fn 继续执行(避免中途丢弃用户编辑),由调用方决定是否提示/中止。
|
|
78
|
-
*/
|
|
79
|
-
async holdLock(e, t, c = {}) {
|
|
80
|
-
await this.acquireLock(e);
|
|
81
|
-
const i = Math.max(1, c.heartbeatFailLimit ?? 2);
|
|
82
|
-
let l = 0, m = !1;
|
|
83
|
-
const p = setInterval(() => {
|
|
84
|
-
this.lockHeartbeat(e).then(() => {
|
|
85
|
-
l = 0;
|
|
86
|
-
}).catch((u) => {
|
|
87
|
-
l++, !m && l >= i && (m = !0, c.onLockLost?.(
|
|
88
|
-
`模板锁心跳连续 ${l} 次失败(${u instanceof Error ? u.message : String(u)}),锁可能已被释放`
|
|
89
|
-
), clearInterval(p));
|
|
90
|
-
});
|
|
91
|
-
}, 4e4);
|
|
92
|
-
try {
|
|
93
|
-
return await t();
|
|
94
|
-
} finally {
|
|
95
|
-
clearInterval(p), await this.releaseLock(e).catch(() => {
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
export {
|
|
102
|
-
h as ReportAdminError,
|
|
103
|
-
$ as createReportAdminClient
|
|
104
|
-
};
|
package/dist/plugin-C4qpbdMJ.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const E=require("vue");function p(r){return r==null?[]:Array.isArray(r)?r.map(String).filter(e=>e!==""):String(r).split(",").map(e=>e.trim()).filter(e=>e!=="")}function O(r){return p(r).join(",")}class o extends Error{constructor(e){super(e),this.name="PlanLoadError"}}function m(r={}){const{baseUrl:e="",headers:i,credentials:c,timeoutMs:l=3e4}=r,h=e.replace(/\/+$/,"");return async({url:a,method:s,params:t})=>{const d=t&&Object.keys(t).length>0?`?${new URLSearchParams(t)}`:"",n=new AbortController,f=setTimeout(()=>n.abort(),l);let R;try{R=await fetch(`${h}${a}${d}`,{method:s.toUpperCase(),headers:{Accept:"application/json",...i},credentials:c,signal:n.signal})}catch(u){throw u instanceof DOMException&&u.name==="AbortError"?new o(`请求超时(${l}ms): ${a}`):new o(`请求失败(${a}): ${u instanceof Error?u.message:String(u)}`)}finally{clearTimeout(f)}if(!R.ok)throw new o(`HTTP ${R.status} ${a}`);return R.json()}}function P(r){const{request:e,baseUrl:i=""}=r,c=i.replace(/\/+$/,"");return async({tempIds:l,furnitureTempId:h,params:a})=>{if(l.length===0)throw new o("缺少报表模板 ID");const s={};for(const[n,f]of Object.entries(a||{}))n&&n!=="tempId"&&n!=="furnitureTempId"&&f!=null&&f!==""&&(s[n]=String(f));s.tempId=l.join(","),h&&(s.furnitureTempId=h);const t=await e({url:`${c}/report/codePrintReport/gridPlan`,method:"get",params:s});if(t&&t.code!=null&&t.code!==200)throw new o(String(t.message||"预览加载失败"));const d=t?.data?.pages;if(!Array.isArray(d))throw new o("预览响应缺少 pages 数组,请检查 gridPlan 接口契约");return{schemaVersion:"jh4j-compatible",pages:d}}}const _="mach-report/fetcher",g="mach-report/pdf-exporter",T="mach-report/config",C="mach-report/controller",w=E.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-CJLvkTVn.cjs")).then(r=>r.ReportPreview$1)),A={install(r,e={}){const i=e.fetcher??P({request:e.request??m(),baseUrl:e.baseUrl});r.provide(_,i),e.pdfExporter&&r.provide(g,e.pdfExporter),r.provide(T,E.computed(()=>{if(e.pdfFontUrl===void 0)return e.config??null;const c=e.config??{defaults:{},presets:{}};return{...c,defaults:{...c.defaults,pdfFontUrl:e.pdfFontUrl}}})),e.globalComponent!==!1&&r.component("MachReportPreview",w)}};exports.MACH_REPORT_CONFIG_KEY=T;exports.MACH_REPORT_CONTROLLER_KEY=C;exports.MACH_REPORT_FETCHER_KEY=_;exports.MACH_REPORT_PDF_EXPORTER_KEY=g;exports.MachReportPreview=w;exports.PlanLoadError=o;exports.createFetchRequest=m;exports.createJh4jGridPlanFetcher=P;exports.joinTempIds=O;exports.machReportPlugin=A;exports.normalizeTempIds=p;
|
package/dist/plugin-DcmAPK_K.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { defineAsyncComponent as m, computed as g } from "vue";
|
|
2
|
-
function E(r) {
|
|
3
|
-
return r == null ? [] : Array.isArray(r) ? r.map(String).filter((e) => e !== "") : String(r).split(",").map((e) => e.trim()).filter((e) => e !== "");
|
|
4
|
-
}
|
|
5
|
-
function y(r) {
|
|
6
|
-
return E(r).join(",");
|
|
7
|
-
}
|
|
8
|
-
class c extends Error {
|
|
9
|
-
constructor(e) {
|
|
10
|
-
super(e), this.name = "PlanLoadError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function R(r = {}) {
|
|
14
|
-
const { baseUrl: e = "", headers: i, credentials: o, timeoutMs: l = 3e4 } = r, d = e.replace(/\/+$/, "");
|
|
15
|
-
return async ({ url: a, method: s, params: t }) => {
|
|
16
|
-
const h = t && Object.keys(t).length > 0 ? `?${new URLSearchParams(t)}` : "", n = new AbortController(), f = setTimeout(() => n.abort(), l);
|
|
17
|
-
let p;
|
|
18
|
-
try {
|
|
19
|
-
p = await fetch(`${d}${a}${h}`, {
|
|
20
|
-
method: s.toUpperCase(),
|
|
21
|
-
headers: { Accept: "application/json", ...i },
|
|
22
|
-
credentials: o,
|
|
23
|
-
signal: n.signal
|
|
24
|
-
});
|
|
25
|
-
} catch (u) {
|
|
26
|
-
throw u instanceof DOMException && u.name === "AbortError" ? new c(`请求超时(${l}ms): ${a}`) : new c(`请求失败(${a}): ${u instanceof Error ? u.message : String(u)}`);
|
|
27
|
-
} finally {
|
|
28
|
-
clearTimeout(f);
|
|
29
|
-
}
|
|
30
|
-
if (!p.ok)
|
|
31
|
-
throw new c(`HTTP ${p.status} ${a}`);
|
|
32
|
-
return p.json();
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function w(r) {
|
|
36
|
-
const { request: e, baseUrl: i = "" } = r, o = i.replace(/\/+$/, "");
|
|
37
|
-
return async ({ tempIds: l, furnitureTempId: d, params: a }) => {
|
|
38
|
-
if (l.length === 0) throw new c("缺少报表模板 ID");
|
|
39
|
-
const s = {};
|
|
40
|
-
for (const [n, f] of Object.entries(a || {}))
|
|
41
|
-
n && n !== "tempId" && n !== "furnitureTempId" && f != null && f !== "" && (s[n] = String(f));
|
|
42
|
-
s.tempId = l.join(","), d && (s.furnitureTempId = d);
|
|
43
|
-
const t = await e({
|
|
44
|
-
url: `${o}/report/codePrintReport/gridPlan`,
|
|
45
|
-
method: "get",
|
|
46
|
-
params: s
|
|
47
|
-
});
|
|
48
|
-
if (t && t.code != null && t.code !== 200)
|
|
49
|
-
throw new c(String(t.message || "预览加载失败"));
|
|
50
|
-
const h = t?.data?.pages;
|
|
51
|
-
if (!Array.isArray(h))
|
|
52
|
-
throw new c("预览响应缺少 pages 数组,请检查 gridPlan 接口契约");
|
|
53
|
-
return {
|
|
54
|
-
schemaVersion: "jh4j-compatible",
|
|
55
|
-
pages: h
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
const P = "mach-report/fetcher", T = "mach-report/pdf-exporter", b = "mach-report/config", A = "mach-report/controller", _ = m(() => import("./ReportPreview-mZiGtf0L.js").then((r) => r.n)), j = {
|
|
60
|
-
install(r, e = {}) {
|
|
61
|
-
const i = e.fetcher ?? w({
|
|
62
|
-
// 网关前缀由 jh4j adapter 统一添加;内置 fetch 不再重复拼接。
|
|
63
|
-
request: e.request ?? R(),
|
|
64
|
-
baseUrl: e.baseUrl
|
|
65
|
-
});
|
|
66
|
-
r.provide(P, i), e.pdfExporter && r.provide(T, e.pdfExporter), r.provide(b, g(() => {
|
|
67
|
-
if (e.pdfFontUrl === void 0) return e.config ?? null;
|
|
68
|
-
const o = e.config ?? { defaults: {}, presets: {} };
|
|
69
|
-
return { ...o, defaults: { ...o.defaults, pdfFontUrl: e.pdfFontUrl } };
|
|
70
|
-
})), e.globalComponent !== !1 && r.component("MachReportPreview", _);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
export {
|
|
74
|
-
A as M,
|
|
75
|
-
c as P,
|
|
76
|
-
b as a,
|
|
77
|
-
P as b,
|
|
78
|
-
T as c,
|
|
79
|
-
_ as d,
|
|
80
|
-
R as e,
|
|
81
|
-
w as f,
|
|
82
|
-
y as j,
|
|
83
|
-
j as m,
|
|
84
|
-
E as n
|
|
85
|
-
};
|
package/dist/style-Xq08-IsV.cjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";const m="#333333",M="#000000",T="1.0.0-mach",A="mach-local",C="jh4j-compatible";function h(t=96){return t/25.4}function R(t,e=96){return(t||0)*h(e)}function I(t,e=96){return t/h(e)}function S(t,e=96){return t*e/72}function L(t,e){const r=10**e;return Math.round(t*r)/r}const x={a3:{widthMm:297,heightMm:420},a4:{widthMm:210,heightMm:297},a5:{widthMm:148,heightMm:210},b4:{widthMm:250,heightMm:353},b5:{widthMm:176,heightMm:250}},d=T;function H(t){if(t&&t.code!=null&&t.code!==200)throw new Error(String(t.message||"渲染计划加载失败"));const e=t?.data?.pages;return{schemaVersion:d,pages:Array.isArray(e)?e:[]}}function O(t){return(t.kind==="image"||t.kind==="barcode"||t.kind==="qrcode"||t.kind==="chart")&&!!t.imageData}function g(t){return t.kind==="text"&&Array.isArray(t.richParagraphs)&&t.richParagraphs.length>0}const l=/[\u3000-\u9fff\uff00-\uffef]/,f=new Uint8Array(128);{for(const t of"iljtf.,:;'`|!()[]")f[t.charCodeAt(0)]=1;for(const t of"mwMW@")f[t.charCodeAt(0)]=2;for(let t=48;t<=57;t++)f[t]=3;for(let t=65;t<=90;t++)f[t]=4;f[32]=5}const D=[.54,.26,.95,.59,.67,.3];function P(t){const e=t.charCodeAt(0);return e<128?D[f[e]]:l.test(t)?1:/[A-Z]/.test(t)?.67:.54}const a={measureMm(t,e){const{fontSizePt:r,bold:n=!1,letterSpacingPt:u=0}=e,c=25.4/72;let i=0;for(const o of t)i+=P(o);return n&&(i*=1.04),(i*r+u*t.length)*c}};function N(){return a}function w(t,e){return a.measureMm(t,e)}function F(t){let e;return{measureMm(r,n){if(e===void 0&&(e=t()),!e)return a.measureMm(r,n);const u=n.fontSizePt*96/72;return e.font=`${n.bold?"bold ":""}${u}px sans-serif`,e.measureText(r).width*25.4/96}}}function b(t,e,r){const n=[];let u="",c=0;const i=()=>{u&&(n.push({text:u,widthMm:c,cjk:!1}),u="",c=0)};for(const o of t){if(o===`
|
|
2
|
-
`){i(),n.push({text:`
|
|
3
|
-
`,widthMm:0,cjk:!1,br:!0});continue}if(o===" "){i(),n.push({text:o,widthMm:r.measureMm(o,e),cjk:!1,space:!0});continue}if(l.test(o)){i(),n.push({text:o,widthMm:r.measureMm(o,e),cjk:!0});continue}u+=o,c+=r.measureMm(o,e)}return i(),n}function k(t,e,r,n=a){if(!t)return[""];const u=[];let c="",i=0;const o=()=>{u.push(c),c="",i=0};for(const s of b(t,r,n)){if(s.br){o();continue}if(i+s.widthMm<=e){c+=s.text,i+=s.widthMm;continue}if(s.space){o();continue}if(s.cjk){c.length>0&&o(),c=s.text,i=s.widthMm;continue}if(c.length>0&&o(),s.widthMm<=e){c=s.text,i=s.widthMm;continue}for(const _ of s.text){const E=n.measureMm(_,r);i+E>e&&c.length>0&&o(),c+=_,i+=E}}return o(),u}function p(t,e=96,r=10.5){if(t?.fontSizePx!=null)return{fontSizePt:t.fontSizePx*72/e,fontSizePx:t.fontSizePx};const n=t?.fontSize??r;return{fontSizePt:n,fontSizePx:S(n,e)}}function v(t,e=m){return{color:t?.borderColor??t?.lineColor??e,widthPt:t?.lineWidthPt??.75}}function z(t,e=M){return t?.color??e}function U(t){return t?.lineHeight??1.35}function B(t){const e=t?.borderTop!==!1,r=t?.borderRight!==!1,n=t?.borderBottom!==!1,u=t?.borderLeft!==!1;return{top:e,right:r,bottom:n,left:u,inner:e||r||n||u}}exports.CSS_DPI=96;exports.DEFAULT_BORDER_PT=.75;exports.DEFAULT_FONT_PT=10.5;exports.DEFAULT_STROKE_COLOR=m;exports.DEFAULT_TEXT_COLOR=M;exports.LINE_HEIGHT=1.35;exports.MM_PER_INCH=25.4;exports.PAPER_SIZES=x;exports.RENDER_PLAN_SCHEMA_VERSION=d;exports.SCHEMA_VERSION_JH4J=C;exports.SCHEMA_VERSION_LOCAL=A;exports.SCHEMA_VERSION_MACH=T;exports.charWidthEm=P;exports.createCanvasMeasurer=F;exports.createHeuristicMeasurer=N;exports.heuristicMeasurer=a;exports.isImageBackedComponent=O;exports.isRichText=g;exports.measureTextMm=w;exports.mmToPx=R;exports.mmToPxFactor=h;exports.ptToPx=S;exports.pxToMm=I;exports.resolveBoxBorders=B;exports.resolveFontSize=p;exports.resolveLineHeight=U;exports.resolveStroke=v;exports.resolveTextColor=z;exports.round=L;exports.toRenderPlan=H;exports.wrapText=k;
|