87 lines
3.0 KiB
TypeScript
87 lines
3.0 KiB
TypeScript
// Типы элементов интерфейса
|
||
export type ElementType =
|
||
| 'text'
|
||
| 'select'
|
||
| 'radio'
|
||
| 'checkbox'
|
||
| 'number'
|
||
| 'textarea'
|
||
| 'date'
|
||
| 'standards'
|
||
| 'calibration-conditions'
|
||
| 'button-group'
|
||
|
||
export interface ElementOption {
|
||
value: string
|
||
label: string
|
||
}
|
||
|
||
// Расширенный тип для ячейки с указанием листа
|
||
export interface CellTarget {
|
||
sheet: string // название листа, например "L" или "R"
|
||
cell: string // адрес ячейки, например "A2" или "B4"
|
||
displayName?: string // отображаемое имя для пользователя
|
||
}
|
||
|
||
// Позиция и размеры элемента в визуальном редакторе
|
||
export interface ElementLayout {
|
||
x: number // позиция по X в пикселях
|
||
y: number // позиция по Y в пикселях
|
||
width: number // ширина в пикселях
|
||
height: number // высота в пикселях
|
||
zIndex?: number // Z-index для наложения элементов
|
||
}
|
||
|
||
// Настройки отображения элементов в форме
|
||
export interface FormLayoutSettings {
|
||
gridSize: number // размер сетки для привязки (в пикселях)
|
||
showGrid: boolean // показывать сетку
|
||
}
|
||
|
||
export interface TemplateElement {
|
||
id: string
|
||
type: ElementType
|
||
name: string
|
||
label: string
|
||
targetCells: CellTarget[] // множественные ячейки вместо одной targetCell
|
||
options?: ElementOption[] // для select и radio
|
||
required?: boolean
|
||
defaultValue?: string
|
||
placeholder?: string
|
||
order?: number // порядок отображения в форме
|
||
layout?: ElementLayout // позиция и размеры в визуальном редакторе
|
||
}
|
||
|
||
// Информация об объединенных ячейках
|
||
export interface MergedCell {
|
||
from: string // начальная ячейка (например, "A1")
|
||
to: string // конечная ячейка (например, "C3")
|
||
value: any // значение объединенной ячейки
|
||
// Координаты диапазона (0-based), необходимые для рендера
|
||
startRow: number
|
||
startCol: number
|
||
endRow: number
|
||
endCol: number
|
||
}
|
||
|
||
// Типы шаблонов
|
||
export interface Template {
|
||
id: string
|
||
name: string
|
||
description?: string
|
||
excelFile?: File
|
||
excelData?: Record<string, any> // данные из Excel
|
||
mergedCells?: MergedCell[] // информация об объединенных ячейках
|
||
elements: TemplateElement[]
|
||
layoutSettings?: FormLayoutSettings // настройки отображения формы
|
||
createdAt: Date
|
||
updatedAt: Date
|
||
}
|
||
|
||
// Типы для работы с данными
|
||
export interface TemplateData {
|
||
templateId: string
|
||
values: Record<string, any> // elementId -> value
|
||
calculatedCells?: Record<string, any> // cellName -> value
|
||
}
|