108 lines
3.7 KiB
TypeScript
108 lines
3.7 KiB
TypeScript
// Типы элементов интерфейса
|
||
|
||
// Импортируем 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
|
||
}
|