243 lines
5.6 KiB
TypeScript
243 lines
5.6 KiB
TypeScript
import {
|
|
BaseEvent,
|
|
EventLife,
|
|
InteractEvents,
|
|
InteractEventOn,
|
|
InteractActionsType,
|
|
} from '@/enums/eventEnum';
|
|
import type { GlobalThemeJsonType } from '@/settings/chartThemes/index';
|
|
import type { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d';
|
|
|
|
export enum ChartFrameEnum {
|
|
// 支持 dataset 的 echarts 框架
|
|
ECHARTS = 'echarts',
|
|
// VChart 框架
|
|
VCHART = 'VChart',
|
|
// UI 组件框架
|
|
NAIVE_UI = 'naiveUI',
|
|
// 自定义带数据组件
|
|
COMMON = 'common',
|
|
// 无数据变更
|
|
STATIC = 'static',
|
|
}
|
|
|
|
// 组件配置
|
|
export type ConfigType = {
|
|
// 组件 key
|
|
key: string;
|
|
// 画布组件 key
|
|
chartKey: string;
|
|
// 右侧设置面板组件 key
|
|
conKey: string;
|
|
// 标题
|
|
title: string;
|
|
// 分类
|
|
category: string;
|
|
// 分类名称
|
|
categoryName: string;
|
|
// 所属包
|
|
package: string;
|
|
// 归类
|
|
chartFrame?: ChartFrameEnum;
|
|
// 预览图
|
|
image: string;
|
|
// 从指定路径创建创建该组件
|
|
redirectComponent?: string;
|
|
// 组件预设的 dataset 值(图片/图标)
|
|
dataset?: any;
|
|
// 禁用 拖拽或双击生成组件
|
|
disabled?: boolean;
|
|
// 图标
|
|
icon?: string;
|
|
// 事件
|
|
configEvents?: { [T: string]: Function };
|
|
};
|
|
|
|
// 数据请求
|
|
interface requestConfig {
|
|
request: RequestConfigType;
|
|
}
|
|
|
|
// Echarts 数据类型
|
|
interface EchartsDataType {
|
|
dimensions: string[];
|
|
source: any[];
|
|
}
|
|
|
|
// 组件状态
|
|
export interface StatusType {
|
|
lock: boolean;
|
|
hide: boolean;
|
|
}
|
|
|
|
// 滤镜/变换枚举
|
|
export enum FilterEnum {
|
|
// 是否启用
|
|
FILTERS_SHOW = 'filterShow',
|
|
|
|
// 透明度
|
|
OPACITY = 'opacity',
|
|
// 饱和度
|
|
SATURATE = 'saturate',
|
|
// 对比度
|
|
CONTRAST = 'contrast',
|
|
// 色相
|
|
HUE_ROTATE = 'hueRotate',
|
|
// 亮度
|
|
BRIGHTNESS = 'brightness',
|
|
|
|
// 旋转
|
|
ROTATE_Z = 'rotateZ',
|
|
ROTATE_X = 'rotateX',
|
|
ROTATE_Y = 'rotateY',
|
|
|
|
// 倾斜
|
|
SKEW_X = 'skewX',
|
|
SKEW_Y = 'skewY',
|
|
|
|
// 混合模式
|
|
BLEND_MODE = 'blendMode',
|
|
}
|
|
|
|
export const BlendModeEnumList = [
|
|
{ label: '正常', value: 'normal' },
|
|
{ label: '正片叠底', value: 'multiply' },
|
|
{ label: '叠加', value: 'overlay' },
|
|
{ label: '滤色', value: 'screen' },
|
|
{ label: '变暗', value: 'darken' },
|
|
{ label: '变亮', value: 'lighten' },
|
|
{ label: '颜色减淡', value: 'color-dodge' },
|
|
{ label: '颜色加深', value: 'color-burn;' },
|
|
{ label: '强光', value: 'hard-light' },
|
|
{ label: '柔光', value: 'soft-light' },
|
|
{ label: '差值', value: 'difference' },
|
|
{ label: '排除', value: 'exclusion' },
|
|
{ label: '色相', value: 'hue' },
|
|
{ label: '饱和度', value: 'saturation' },
|
|
{ label: '颜色', value: 'color' },
|
|
{ label: '亮度', value: 'luminosity' },
|
|
];
|
|
|
|
// 组件实例类
|
|
export interface PublicConfigType {
|
|
id: string;
|
|
isGroup: boolean;
|
|
attr: {
|
|
x: number;
|
|
y: number;
|
|
w: number;
|
|
h: number;
|
|
zIndex: number;
|
|
offsetX: number;
|
|
offsetY: number;
|
|
};
|
|
styles: {
|
|
[FilterEnum.FILTERS_SHOW]: boolean;
|
|
[FilterEnum.OPACITY]: number;
|
|
[FilterEnum.SATURATE]: number;
|
|
[FilterEnum.CONTRAST]: number;
|
|
[FilterEnum.HUE_ROTATE]: number;
|
|
[FilterEnum.BRIGHTNESS]: number;
|
|
|
|
[FilterEnum.ROTATE_Z]: number;
|
|
[FilterEnum.ROTATE_X]: number;
|
|
[FilterEnum.ROTATE_Y]: number;
|
|
|
|
[FilterEnum.SKEW_X]: number;
|
|
[FilterEnum.SKEW_Y]: number;
|
|
[FilterEnum.BLEND_MODE]: string;
|
|
// 动画
|
|
animations: string[];
|
|
};
|
|
preview?: {
|
|
// 预览超出隐藏
|
|
overFlowHidden?: boolean;
|
|
};
|
|
filter?: string;
|
|
status: StatusType;
|
|
interactActions?: InteractActionsType[];
|
|
events: {
|
|
baseEvent: {
|
|
[K in BaseEvent]?: string;
|
|
};
|
|
advancedEvents: {
|
|
[K in EventLife]?: string;
|
|
};
|
|
interactEvents: {
|
|
[InteractEvents.INTERACT_ON]: InteractEventOn | undefined;
|
|
[InteractEvents.INTERACT_COMPONENT_ID]: string | undefined;
|
|
[InteractEvents.INTERACT_FN]: { [name: string]: string };
|
|
}[];
|
|
interactConfigEvents: {}[];
|
|
};
|
|
}
|
|
|
|
export interface CreateComponentType extends PublicConfigType, requestConfig {
|
|
key: string;
|
|
chartConfig: ConfigType;
|
|
option: GlobalThemeJsonType;
|
|
groupList?: Array<CreateComponentType>;
|
|
}
|
|
|
|
// 组件成组实例类
|
|
export interface CreateComponentGroupType extends CreateComponentType {
|
|
groupList: Array<CreateComponentType>;
|
|
}
|
|
|
|
// 获取组件实例类中某个key对应value类型的方法
|
|
export type PickCreateComponentType<T extends keyof CreateComponentType> = Pick<
|
|
CreateComponentType,
|
|
T
|
|
>[T];
|
|
|
|
// 包分类枚举
|
|
export enum PackagesCategoryEnum {
|
|
CHARTS = 'Charts',
|
|
VCHART = 'VChart',
|
|
TABLES = 'Tables',
|
|
INFORMATIONS = 'Informations',
|
|
PHOTOS = 'Photos',
|
|
ICONS = 'Icons',
|
|
DECORATES = 'Decorates',
|
|
CUSTOM = 'Custom',
|
|
DIY = 'Diy',
|
|
UNITS = 'Units',
|
|
ZHIGAN = 'Zhigan',
|
|
}
|
|
|
|
// 包分类名称
|
|
export enum PackagesCategoryName {
|
|
CHARTS = '图表',
|
|
VCHART = 'VChart',
|
|
TABLES = '列表',
|
|
INFORMATIONS = '信息',
|
|
PHOTOS = '图片',
|
|
ICONS = '图标',
|
|
DECORATES = '小组件',
|
|
CUSTOM = '预警信息',
|
|
DIY = 'DIY',
|
|
UNITS = '组件',
|
|
ZHIGAN = '智感',
|
|
}
|
|
|
|
// 获取组件
|
|
export enum FetchComFlagType {
|
|
VIEW,
|
|
CONFIG,
|
|
}
|
|
|
|
// 图表包类型
|
|
export type PackagesType = {
|
|
[PackagesCategoryEnum.CHARTS]: ConfigType[];
|
|
[PackagesCategoryEnum.VCHART]: ConfigType[];
|
|
[PackagesCategoryEnum.INFORMATIONS]: ConfigType[];
|
|
[PackagesCategoryEnum.TABLES]: ConfigType[];
|
|
[PackagesCategoryEnum.PHOTOS]: ConfigType[];
|
|
[PackagesCategoryEnum.ICONS]: ConfigType[];
|
|
[PackagesCategoryEnum.DECORATES]: ConfigType[];
|
|
[PackagesCategoryEnum.CUSTOM]: ConfigType[];
|
|
[PackagesCategoryEnum.DIY]: ConfigType[];
|
|
[PackagesCategoryEnum.UNITS]: ConfigType[];
|
|
[PackagesCategoryEnum.ZHIGAN]: ConfigType[];
|
|
};
|