@zhouchangju/standard-chart
Version:
标准范式组件
126 lines (125 loc) • 4.69 kB
TypeScript
import Model from 'echarts/lib/model/Model';
import SeriesModel from 'echarts/lib/model/Series';
import type SeriesData from 'echarts/lib/data/SeriesData';
import Tree, { TreeNode, default as TreeType } from 'echarts/lib/data/Tree';
import { TreeSeriesLeavesOption } from 'echarts/lib/chart/tree/TreeSeries';
import type { SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin, ZRColor } from 'echarts/lib/util/types';
import { BoundingRect } from 'echarts/lib/util/graphic';
import { graphic } from 'echarts';
import { Path, PathProps, TextProps, Line, LineProps, PolygonProps } from 'zrender';
import { ECSymbol } from 'echarts/lib/util/symbol';
export type RelationTreeNode = TreeNode & {
index: number;
open?: boolean;
nodeElGroup: graphic.Group;
lineElGroup?: graphic.Group;
};
export interface GroupNodeArray {
[key: number | string]: RelationTreeNode[];
}
type RenderOption = {
text?: {
style?: {
text: string;
};
};
attachment?: {
style?: {
text?: string;
};
}[];
logo?: string;
};
export interface RelationshipDiagramSeriesNodeItemOption {
type?: string;
/** 优先级 */
priority?: number;
/** 节点名字 */
name?: string;
/** 水印 */
watermark?: string;
/** 节点背景颜色 */
backgroundColor?: string[];
/** 渲染配置 */
render?: RenderOption | RenderOption[];
/** 孩子节点 */
children?: RelationshipDiagramSeriesNodeItemOption[];
/** 是否折叠节点 */
collapsed?: boolean;
/** 父节点id */
parentId?: string | number;
/** 默认的主树 */
__treeIndex?: number;
}
export interface RelationshipDiagramSeriesOption extends SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin {
type?: 'dvRelationshipDiagram';
data?: RelationshipDiagramSeriesNodeItemOption[];
/** 初始展开的树深度(根节点的深度可认为为 0) */
initialTreeDepth?: number;
/** 是否折叠节点 */
collapsed?: boolean;
/** 背景颜色 */
dvBackground?: {
show?: boolean;
color?: string[];
padding?: number[];
};
/** 节点渲染方法 */
dvNodeRender?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, createEl?: (elOption: {
type: string;
}) => Path<PathProps>, group?: graphic.Group, createSymbol?: (symbolType: string, x: number, y: number, w: number, h: number, color?: ZRColor, keepAspect?: boolean) => ECSymbol, node?: RelationTreeNode) => graphic.Group;
dvLineRender?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, createEl?: (elOption: {
type: string;
}) => Path<PathProps>, group?: graphic.Group, node?: RelationTreeNode) => graphic.Group;
/** 节点的间距 */
dvNodeGap?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, node?: RelationTreeNode, spaceArray?: number[], widthArray?: number[]) => void;
/** 水印 */
dvWatermark?: {
show?: boolean;
watermark?: TextProps[];
};
/** 同级分支线 */
dvLevelLine?: {
show?: boolean;
padding?: (originNodeData?: RelationshipDiagramSeriesNodeItemOption, node?: RelationTreeNode) => number[];
style?: Line;
};
/** 每一级节点竖直方向的间距 */
dvVerticalSpacingBetweenNode?: number[];
/** 首屏自适应 */
dvAdapt?: boolean;
/** 导向线 */
dvToNextTreeLine?: {
show?: boolean;
lineStyle?: LineProps & {
lineWidth: number;
stroke: string;
};
arrowStyle: PolygonProps & {
lineWidth: number;
fill: string;
scale: number;
};
};
leaves?: TreeSeriesLeavesOption;
}
export type RelationshipDiagramSeriesModelClazz = RelationshipDiagramSeriesModel;
export default class RelationshipDiagramSeriesModel extends SeriesModel<RelationshipDiagramSeriesOption> {
static readonly type = "series.dvRelationshipDiagram";
readonly type = "series.dvRelationshipDiagram";
static defaultOption: RelationshipDiagramSeriesOption;
/**
* Prevent from auto set z, zlevel, z2 by the framework.
*/
preventAutoZ: boolean;
maxDepth: number;
treesLength: number;
groupNodeArray: GroupNodeArray;
treeMaxX: number[];
treeMaxY: number[];
layoutInfo: BoundingRect;
trees: TreeType<RelationshipDiagramSeriesModelClazz>[];
getInitialData(this: RelationshipDiagramSeriesModelClazz, option: RelationshipDiagramSeriesOption): SeriesData;
createRelationTree(root: RelationshipDiagramSeriesNodeItemOption, leavesModel: Model<TreeSeriesLeavesOption>): Tree<this, any>;
}
export {};