Files
protoc-frontend/src/type/template.ts
2025-08-03 15:19:07 +03:00

108 lines
3.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Типы элементов интерфейса
// Импортируем ElementType из interface.ts
import type { ElementType } from '@/entity/element/model/interface'
export interface ElementOption {
value: string
label: string
}
// Реэкспортируем ElementType для удобства
export type { ElementType }
// Расширенный тип для ячейки с указанием листа
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 // показывать сетку
snapToGrid: 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
}
// Определение атрибута (глобальный атрибут из API)
export interface Attribute {
id: string
name: string
is_required: boolean
created_at: string
updated_at: string
deleted_at?: string | null
}
// Детальная информация об атрибуте шаблона (из API)
export interface TemplateAttributeDetail {
attribute_id: string
attribute_name: string
is_required: boolean
value: string | null
created_at: string
updated_at: string
}
// Группа шаблонов
export interface Group {
id: string
name: string
order: number
created_at: string
updated_at: string
deleted_at?: string | null
}
// Типы шаблонов
export interface Template {
id: string
name: string
description?: string
excelFile?: File
excelData?: Record<string, any> // данные из Excel
mergedCells?: MergedCell[] // информация об объединенных ячейках
elements: TemplateElement[]
layoutSettings?: FormLayoutSettings // настройки отображения формы
group_id?: string | null // ID группы к которой принадлежит шаблон
order?: number // порядок сортировки (float для гибкости)
createdAt: Date
updatedAt: Date
}