feat: add template type definitions
This commit is contained in:
parent
ac7248ec07
commit
72b1d357e8
109
src/types/template.ts
Normal file
109
src/types/template.ts
Normal file
@ -0,0 +1,109 @@
|
||||
// 对齐方式
|
||||
export type Align = 'left' | 'center' | 'right';
|
||||
|
||||
// 字体大小
|
||||
export type FontSize = 'small' | 'normal' | 'large' | 'xlarge';
|
||||
|
||||
// 条码格式
|
||||
export type BarcodeFormat = 'CODE128' | 'QR' | 'EAN13';
|
||||
|
||||
// 基础样式
|
||||
export interface BlockStyle {
|
||||
align?: Align;
|
||||
fontSize?: FontSize;
|
||||
bold?: boolean;
|
||||
italic?: boolean;
|
||||
underline?: boolean;
|
||||
lineHeight?: number;
|
||||
marginTop?: number;
|
||||
marginBottom?: number;
|
||||
}
|
||||
|
||||
// 列定义
|
||||
export interface Column {
|
||||
content?: string;
|
||||
align?: Align;
|
||||
width?: string | number;
|
||||
bold?: boolean;
|
||||
header?: string;
|
||||
}
|
||||
|
||||
// Block 类型
|
||||
export interface TextBlock extends BlockStyle {
|
||||
type: 'text';
|
||||
content: string;
|
||||
}
|
||||
|
||||
export interface RowBlock extends BlockStyle {
|
||||
type: 'row';
|
||||
columns: Column[];
|
||||
}
|
||||
|
||||
export interface TableBlock extends BlockStyle {
|
||||
type: 'table';
|
||||
columns: Column[];
|
||||
data: string; // mustache expression
|
||||
}
|
||||
|
||||
export interface ListBlock extends BlockStyle {
|
||||
type: 'list';
|
||||
data: string; // mustache expression
|
||||
itemTemplate: Block[];
|
||||
}
|
||||
|
||||
export interface DividerBlock extends BlockStyle {
|
||||
type: 'divider';
|
||||
char?: string;
|
||||
}
|
||||
|
||||
export interface ImageBlock extends BlockStyle {
|
||||
type: 'image';
|
||||
src: string; // mustache expression or URL
|
||||
maxWidth?: number;
|
||||
}
|
||||
|
||||
export interface BarcodeBlock extends BlockStyle {
|
||||
type: 'barcode';
|
||||
format: BarcodeFormat;
|
||||
data: string; // mustache expression
|
||||
height?: number;
|
||||
}
|
||||
|
||||
export interface SpaceBlock extends BlockStyle {
|
||||
type: 'space';
|
||||
lines?: number;
|
||||
}
|
||||
|
||||
export type Block =
|
||||
| TextBlock
|
||||
| RowBlock
|
||||
| TableBlock
|
||||
| ListBlock
|
||||
| DividerBlock
|
||||
| ImageBlock
|
||||
| BarcodeBlock
|
||||
| SpaceBlock;
|
||||
|
||||
// 页面设置
|
||||
export interface PageConfig {
|
||||
marginTop?: number;
|
||||
marginBottom?: number;
|
||||
}
|
||||
|
||||
// 默认样式
|
||||
export interface DefaultStyle {
|
||||
fontSize?: FontSize;
|
||||
lineHeight?: number;
|
||||
marginBottom?: number;
|
||||
}
|
||||
|
||||
// 完整模板
|
||||
export interface Template {
|
||||
id: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
width: string; // e.g., "80mm"
|
||||
page?: PageConfig;
|
||||
defaults?: DefaultStyle;
|
||||
blocks: Block[];
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user