import {ImageHit} from "@/api/static/types" import {XY} from "fabric" import {ImageElement} from "./canvas" export const enum ElementNames { TEXTBOX = 'textbox', TEXT = 'text', ITEXT = 'i-text', INPUTTEXT = 'itext', ARCTEXT = 'arctext', VERTICALTEXT = 'verticaltext', IMAGE = 'image', SVGIMAGE = 'svgimage', CROPIMAGE = 'cropimage', MASK = 'mask', PATH = 'path', RECT = 'rect', LINE = 'line', ARROW = 'arrow', POLYLINE = 'polyline', ELLIPSE = 'ellipse', QRCODE = 'qrcode', BARCODE = 'barcode', GROUP = 'group', ACTIVE = 'activeselection', CIRCLE = 'circle', REFERENCELINE = 'referenceline', DOT = 'dot', } export const SupportEffects = [ 'group', 'activeselection', 'itext', 'text', 'textbox', 'image', ] export interface ColorStop { color: string offset: number opacity?: number } /** * 形状渐变 * * type: 渐变类型(径向、线性) * * color: 渐变颜色 * * rotate: 渐变角度(线性渐变) */ export interface PathGradient { type: 'linear' | 'radial' name: string color: string[] rotate: number } export type LinePoint = '' | 'arrow' | 'dot' export interface Mask extends ImageElement { src: string defaultColor: number } export interface LinePoolItem { path: string style: 'solid' | 'dashed' points: [LinePoint, LinePoint] data: XY[] isBroken?: boolean isCurve?: boolean isCubic?: boolean } export const enum ShapePathFormulasKeys { ROUND_RECT = 'roundRect', ROUND_RECT_DIAGONAL = 'roundRectDiagonal', ROUND_RECT_SINGLE = 'roundRectSingle', ROUND_RECT_SAMESIDE = 'roundRectSameSide', CUT_RECT_DIAGONAL = 'cutRectDiagonal', CUT_RECT_SINGLE = 'cutRectSingle', CUT_RECT_SAMESIDE = 'cutRectSameSide', MESSAGE = 'message', ROUND_MESSAGE = 'roundMessage', L = 'L', RING_RECT = 'ringRect', PLUS = 'plus', TRIANGLE = 'triangle', PARALLELOGRAM_LEFT = 'parallelogramLeft', PARALLELOGRAM_RIGHT = 'parallelogramRight', TRAPEZOID = 'trapezoid', BULLET = 'bullet', INDICATOR = 'indicator', } export interface PathPoolItem { viewBox: [number, number] path: string special?: boolean pathFormula?: ShapePathFormulasKeys outlined?: boolean } export interface PathListItem { type: string children: PathPoolItem[] } export interface verticalLine { x: number y1: number y2: number } export interface horizontalLine { y: number x1: number x2: number } // 边框矩形 export interface StrokeRect { x: number, y: number, w: number, h: number } export interface AngleRect { x: number y: number w: number h: number } export interface ElementStrokeRect { id: string strokeRect: StrokeRect } // 渐变背景填充坐标 export interface GradientCoords { x1: number y1: number x2: number y2: number, r1?: number, r2?: number } export interface PointElement { x: number, y: number } export const enum RightStates { ELEMENT_CANVAS = 'design', ELEMENT_TEXT = 'text', ELEMENT_SVG = 'path', ELEMENT_IMAGE = 'image', ELEMENT_CODE = 'code', ELEMENT_STYLE = 'style', ELEMENT_POSITION = 'position', ELEMENT_LAYER = 'layer', ELEMENT_EFFECT = 'effect', } // 底纹背景元素 export interface ShadingColorLib { title: string slug: string mode: string colors: number maxStroke: number maxScale: number maxSpacing: number[] width: number height: number vHeight: number tags?: string[] path: string } // 底纹背景填充 export interface ShadingBackground { id: number colors: string[] colorCounts: number stroke: number scale: number spacing: number[] angle: number join: number moveLeft: number moveTop: number } // 字体类型 export interface FontOption { label: string value: string } // 字体分组 export interface FontGroupOption { type: number label: string options: any[] } // 条形码参数 export interface BarCodeOption { format: string width?: number height?: number displayValue?: boolean // 是否在条形码显示文字 fontOptions?: string // 设置条形码文本的粗体和斜体样式 bold / italic / bold italic font?: string // 设置条形码显示文本的字体 fontSize?: number // 设置条形码文本的字体大小 textAlign?: string // 条形码文本的水平对齐方式,和css中的类似: left / center / right textPosition?: string // 条形码文本的位置 bottom / top textMargin?: string // 条形码文本 和 条形码之间的间隙大小 background?: string // 整个条形码容器的背景颜色 lineColor?: string // 条形码和文本的颜色 margin?: number // 整个条形码的外面距 marginTop?: number marginBottom?: number marginLeft?: number marginRight?: number } export const enum AlignCommand { LEFT = 'left', RIGHT = 'right', HORIZONTAL = 'horizontal', VERTICAL = 'vertical', CENTER = 'center', TOP = 'top', BOTTOM = 'bottom', } export const enum LayerCommand { UP = 'left', DOWN = 'right', TOP = 'top', BOTTOM = 'bottom', } export interface ImageCategoryData { id: number type: string name: string category: ImageHit[] total: ImageHit[] }