表格支持

This commit is contained in:
iqudoo
2026-06-13 13:50:42 +08:00
parent 318569c757
commit 38b17c7589
10 changed files with 1933 additions and 56 deletions

View File

@@ -400,11 +400,11 @@ export const DEFAULT_PAPER_CONFIG: PaperConfig = {
/** 补全模板默认排版字段,剥离已废弃的数据源字段 */
export function normalizeTemplate(tmpl: LabelTemplate): LabelTemplate {
const { dataSource, dataSourceMeta, showPdfCutLines, exportRange: _exportRange, ...rest } = tmpl;
const { ...rest } = tmpl;
const cutLine: CutLineConfig = {
...DEFAULT_CUT_LINE_CONFIG,
...rest.cutLine,
enabled: rest.cutLine?.enabled ?? showPdfCutLines !== false,
enabled: rest.cutLine?.enabled ?? true,
width:
typeof rest.cutLine?.width === 'number' && rest.cutLine.width > 0
? rest.cutLine.width
@@ -495,6 +495,24 @@ export function resolveElementBackgroundFill(
return color;
}
/** 从元素内容(含表格单元格)提取变量名 */
export function extractVariablesFromElement(elem: TemplateElement): string[] {
const vars = new Set<string>();
for (const v of extractVariablesFromContent(elem.content)) {
vars.add(v);
}
if (elem.type === 'table' && elem.tableCells) {
for (const cell of Object.values(elem.tableCells)) {
if (cell.content) {
for (const v of extractVariablesFromContent(cell.content)) {
vars.add(v);
}
}
}
}
return Array.from(vars);
}
/** 从模板汇总全部变量(声明列表 + 内容 + 显示控制) */
export function extractTemplateVariables(template: {
variableList?: string[];
@@ -502,7 +520,7 @@ export function extractTemplateVariables(template: {
}): string[] {
const vars = new Set<string>(template.variableList ?? []);
for (const elem of template.elements) {
for (const v of extractVariablesFromContent(elem.content)) {
for (const v of extractVariablesFromElement(elem)) {
vars.add(v);
}
for (const rule of resolveVisibilityRules(elem)) {
@@ -517,7 +535,7 @@ export function extractTemplateVariables(template: {
export function getUsedTemplateVariables(template: { elements: TemplateElement[] }): string[] {
const vars = new Set<string>();
for (const elem of template.elements) {
for (const v of extractVariablesFromContent(elem.content)) {
for (const v of extractVariablesFromElement(elem)) {
vars.add(v);
}
for (const rule of resolveVisibilityRules(elem)) {