Files
protoc-frontend/src/type/template.ts

115 lines
3.9 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 '@/entitiy/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 // показывать сетку
}
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 type CategoryField = Attribute
export type CategoryFieldType = 'text' | 'select' | 'number' | 'textarea'
export interface CategoryFieldOption {
id: string
value: string
label: string
}
export interface CategoryFieldValue {
fieldId: string
value: string | 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
}