x-print-designer 0.4.7 → 0.4.8

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.
@@ -12,6 +12,9 @@ import type {
12
12
  LocalPrinterCaps,
13
13
  RemoteClientInfo
14
14
  } from './composables/usePrintSettings';
15
+ import type { Page } from './types';
16
+ import type { LoopExpandContext } from './utils/loopExpand';
17
+ import type { DefineComponent } from 'vue';
15
18
 
16
19
  export type EndpointConfig = string | {
17
20
  url: string;
@@ -88,9 +91,17 @@ export interface PrintDesignerElement extends HTMLElement {
88
91
  refreshTemplates(options?: { includeData?: boolean }): Promise<Array<{ id: string; name: string; updatedAt: number } | any>>;
89
92
  getTemplate(id: string): any | null;
90
93
  upsertTemplate(template: { id?: string; name: string; data?: any; updatedAt?: number; [key: string]: any }, options?: { setCurrent?: boolean }): Promise<string | null>;
91
- setTemplates(templates: Array<{ id: string; name: string; data?: any; updatedAt?: number; [key: string]: any }>, options?: { currentTemplateId?: string }): void;
94
+ /**
95
+ * 写入模板列表并加载 currentTemplateId 对应模板。
96
+ * 返回的 Promise 在 pages 填充完成后 resolve,调用方可据此消除时序竞态。
97
+ */
98
+ setTemplates(templates: Array<{ id: string; name: string; data?: any; updatedAt?: number; [key: string]: any }>, options?: { currentTemplateId?: string }): Promise<void>;
92
99
  deleteTemplate(id: string, options?: { confirm?: boolean }): Promise<void>;
93
- loadTemplate(id: string): boolean;
100
+ /**
101
+ * 加载指定模板并填充画布。
102
+ * @returns Promise<boolean>,resolve 时 pages 已填充;false 表示因前置条件未触发。
103
+ */
104
+ loadTemplate(id: string): Promise<boolean>;
94
105
 
95
106
  getCustomElements(options?: { includeElement?: boolean }): Array<{ id: string; name: string } | any>;
96
107
  refreshCustomElements(options?: { includeElement?: boolean }): Promise<Array<{ id: string; name: string } | any>>;
@@ -104,8 +115,21 @@ export interface PrintDesignerElement extends HTMLElement {
104
115
  setTemplateTagResolver(resolver: DesignerTemplateTagResolver): void;
105
116
  clearTemplateTagResolver(): void;
106
117
 
107
- setCrudMode(mode: 'local' | 'remote'): void;
118
+ setCrudMode(mode: 'local' | 'remote', options?: { skipAutoLoad?: boolean }): void;
108
119
  setCrudEndpoints(endpoints: CrudEndpoints, options?: { baseUrl?: string; headers?: Record<string, string>; fetcher?: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> }): void;
120
+
121
+ /**
122
+ * 循环页展开:按 page.loopDataVariable + ctx 数组数据,把 1 个模板页展开成 N 个渲染页。
123
+ * 不传 ctx 时默认使用当前 store 的 testData/variables(按导出语义解析)。
124
+ */
125
+ expandLoopPages(pages: Page[], ctx?: LoopExpandContext): Page[];
126
+ /** 判断页面数组中是否含循环页(任一 page 带 loopDataVariable) */
127
+ hasLoopPage(pages: Page[] | undefined | null): boolean;
128
+ /**
129
+ * 折叠已展开的循环页,还原为带 loopDataVariable 的单个模板页。
130
+ * 适用于报告模式保存前还原模板结构。
131
+ */
132
+ collapseLoopPages(currentPages: Page[], originalTemplatePages: Page[]): Page[];
109
133
  }
110
134
 
111
135
  declare global {
@@ -114,4 +138,33 @@ declare global {
114
138
  }
115
139
  }
116
140
 
141
+ // ============================================================
142
+ // 独立命名导出(src/index.ts)
143
+ // 允许宿主 `import { PreviewPage, expandLoopPages, ... } from 'x-print-designer'`
144
+ // 作为普通 Vue 组件 / 纯函数使用,无需挂载完整 Web Component。
145
+ // ============================================================
146
+
147
+ /** 轻量预览组件:接收 pages + testData + variables,渲染只读预览(含循环页展开 + report 表格分页) */
148
+ export const PreviewPage: DefineComponent<{
149
+ autoRender?: boolean;
150
+ pages?: any[];
151
+ canvasSize?: { width: number; height: number };
152
+ canvasBackground?: string;
153
+ testData?: Record<string, any>;
154
+ variables?: Record<string, any>;
155
+ watermark?: any;
156
+ autoRenderTrigger?: number;
157
+ mode?: 'template' | 'report';
158
+ headerHeight?: number;
159
+ footerHeight?: number;
160
+ showHeaderLine?: boolean;
161
+ showFooterLine?: boolean;
162
+ pageSpacingY?: number;
163
+ }>;
164
+
165
+ // 循环页展开 / 折叠纯函数
166
+ export function expandLoopPages(pages: Page[], ctx: LoopExpandContext): Page[];
167
+ export function collapseLoopPages(currentPages: Page[], originalTemplatePages: Page[]): Page[];
168
+ export function hasLoopPage(pages: Page[] | undefined | null): boolean;
169
+
117
170
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "x-print-designer",
3
3
  "private": false,
4
- "version": "0.4.7",
4
+ "version": "0.4.8",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
7
7
  "main": "dist/print-designer.umd.js",