chart.api 10.4 KB
syntax = "v1"

info(
	title: "天联字库图表模板"
	desc: "图表模板"
	author: "小火箭"
	email: "email"
	version: "v1"
)

@server(
	prefix: v1
	group: chart
	jwt: JwtAuth
	//middleware: Authority
)
service Core {
	@doc "保存图表"
	@handler saveChart
	post /chart (ChartSaveRequest) returns (ChartSaveResponse)
	@doc "图表另存为"
	@handler saveAsChart
	post /chart/saveas (ChartSaveAsRequest) returns (ChartSaveAsResponse)
	@doc "删除图表"
	@handler deleteChart
	delete /chart/:id (ChartDeleteRequest) returns (ChartDeleteResponse)
	@doc "更新图表(配置)"
	@handler updateChart
	put /chart/:id (ChartUpdateRequest) returns (ChartUpdateResponse)
	@doc "搜索图表"
	@handler searchChart
	post /chart/search (ChartSearchRequest) returns (ChartSearchResponse)
	@doc "移动图表"
	@handler updateChartSort
	post /chart/move (ChartUpdateSortRequest) returns (ChartUpdateSortResponse)
	@doc "重命名图表"
	@handler renameChartSort
	post /chart/rename (ChartRenameRequest) returns (ChartRenameResponse)

	@doc "搜索图表组件"
	@handler searchChartComponents
	post /chart/components/search(ChartComponentSearchRequest)returns(ChartComponentSearchResponse)
}

@server(
	prefix: v1
	group: chart
)
service Core {
	@doc "加载图表数据"
	@handler loadChartData
	post /chart/load-data (LoadChartDataRequest) returns (LoadChartDataResponse)
	@doc "获取图表详情"
	@handler getChart
	get /chart/:id (ChartGetRequest) returns (ChartGetResponse)
}

type (
	ChartGetRequest {
		Id int64 `path:"id"`
	}
	ChartGetResponse {
		Chart ChartItem `json:"chart"`
	}

	ChartSaveRequest {
		Pid           int64         `json:"pid,optional"`   // 父级ID
		Type          string        `json:"type"`           // 类型 report:报表  group:分组 chart:图表
		Name          string        `json:"name,optional"`  // 名称
		ChartType     string        `json:"chartType"`      // 图表类型
		Cover         string        `json:"cover,optional"` // 封面
		ChartProperty ChartProperty `json:"property"`       // 图表属性
	}
	ChartSaveResponse {
		Chart ChartItem `json:"chart"`
	}

	ChartSaveAsRequest {
		ChartId int64  `json:"chartId"` // 图表Id
		Name    string `json:"name"`    // 名称
	}
	ChartSaveAsResponse {
		Chart ChartItem `json:"chart"`
	}

	ChartDeleteRequest {
		Id int64 `path:"id"`
	}
	ChartDeleteResponse struct{}

	ChartUpdateRequest {
		Id            int64         `path:"id"`
		Cover         string        `json:"cover,optional"` // 封面
		ChartProperty ChartProperty `json:"property"`       // 图表属性
	}
	ChartUpdateResponse struct{}

	ChartSearchRequest {
		IncludeTypes []string `json:"includeTypes,optional"` //包含的类型: 类型 report:报表  group:分组 chart:图表(未指定返回所有)
		DataStyle    string   `json:"dataStyle,optional"`    // 数据样式  tree:树形 flat:平铺
	}
	ChartSearchResponse {
		List  []ChartItem `json:"list"`
		Total int64       `json:"total"`
	}
	ChartUpdateSortRequest {
		Id    int64 `json:"id"`
		Pid   int64 `json:"pid"`
		Index int   `json:"index"` // 元素下标
	}
	ChartUpdateSortResponse struct{}
	ChartRenameRequest      {
		Id   int64  `json:"id"`
		Name string `json:"name"` // 名称
	}
	ChartRenameResponse struct{}
	ChartItem           {
		Id            int64          `json:"id,optional"`                 // ID
		Pid           int64          `json:"pid,optional"`                // 父级ID
		Type          string         `json:"type,optional"`               // 类型 report:报表  group:分组 chart:图表
		Sort          int64          `json:"sort,optional"`               // 排序
		Name          string         `json:"name,optional"`               // 名称
		Cover         string         `json:"cover,optional"`              // 封面
		ChartType     string         `json:"chartType,optional"`          // 图表类型
		UpdatedAt     int            `json:"updatedAt,optional"`          // 更新时间
		ChartProperty *ChartProperty `json:"property,optional,omitempty"` //属性
	}
	LoadChartDataRequest {
		ChartId int64 `json:"chartId"`
	}
	LoadChartDataResponse {
	}
)

type (
	ChartComponentSearchRequest {
		Name string `json:"name,optional"`
	}
	ChartComponentSearchResponse {
		List  []ChartComponentItem `json:"list"`
		Total int64                `json:"total"`
	}
	ChartComponentItem {
		Name  string `json:"name,optional"`  // 名称
		Code  string `json:"code,optional"`  // 编码
		Cover string `json:"cover,optional"` // 封面
		Desc  string `json:"desc,optional"`  // 描述
	}
)

type (
	ChartProperty {
		Title        Title        `json:"title,optional"`  // 标题
		TableAbility TableAbility `json:"table,optional"`  // 表筛选功能
		Series       []Series     `json:"series,optional"` // 系列(数据源)
		Other        Other        `json:"other,optional"`  // 其他额外配置
	}
	Other {
		Quarter *Quarter `json:"quarter,optional,omitempty"` // 四分图
		Divider *Divider `json:"divider,optional,omitempty"` // 分割线
		Rank    *Rank    `json:"rank,optional,omitempty"`    // 排名图
	}
	Quarter {
		XAxisLabel       string          `json:"xAxisLabel"`                          // x轴标签名
		XAxisFirstLabel  string          `json:"xAxisFirstLabel"`                     // 签名1
		XAxisSecondLabel string          `json:"xAxisSecondLabel"`                    // 签名2
		XAxisFirstColor  string          `json:"xAxisFirstColor,optional,omitempty"`  // x轴标签1默认颜色
		XAxisSecondColor string          `json:"xAxisSecondColor,optional,omitempty"` // x轴标签2默认颜色
		YAxisLabel       string          `json:"yAxisLabel"`                          // y轴标签名
		YAxisFirstLabel  string          `json:"yAxisFirstLabel"`                     // y标签1
		YAxisSecondLabel string          `json:"yAxisSecondLabel"`                    // y标签2
		YAxisFirstColor  string          `json:"yAxisFirstColor,optional,omitempty"`  // y轴标签1默认颜色
		YAxisSecondColor string          `json:"yAxisSecondColor,optional,omitempty"` // y轴标签2默认颜色
		Area             string          `json:"area"`                                // 图形面积
		AreaColor        bool            `json:"areaColor"`                           // 颜色
		SeriesList       []QuarterSeries `json:"seriesList"`                          // 图形系列
		TableSwitch      bool            `json:"tableSwitch"`                         // 是否展示记录型表格
	}
	QuarterSeries {
		SeriesValue string `json:"seriesValue"`
	}
	Divider {
		SelectedIdx string `json:"selectedIdx,optional,omitempty"` // 选择的分割线样式
		TextSwitch  bool   `json:"textSwitch,optional,omitempty"`  // 是否展示组件文本
		Text        string `json:"text"`                           // 组件文本内容
	}
	Rank {
		FirstLine    []RankLine `json:"firstLine,optional,omitempty"`    // 第一名设置
		SecondLine   []RankLine `json:"secondLine,optional,omitempty"`   // 第二名设置
		SortBySwitch bool       `json:"sortBySwitch,optional,omitempty"` // 排序开关
		SortBySeries string     `json:"sortBySeries,optional,omitempty"` // 排序依据
		SortByArrow  string     `json:"sortByArrow,optional,omitempty"`  // 排序方向 1-降序 2-升序
	}
	RankLine {
		SeriesValue string `json:"seriesValue"` // 排名图序列值
		LabelSwitch bool   `json:"labelSwitch"` // 标签开关
		Label       string `json:"label"`       // 标签
		ArrowSwitch bool   `json:"arrowSwitch"` // 箭头开关
		Unit        string `json:"unit"`        // 单位
	}
	Title {
		TitleSwitch     bool   `json:"titleSwitch,optional"`                      // 组件标题开关
		IntroduceSwitch bool   `json:"introduceSwitch,optional"`                  // 组件说明开关
		TitleType       string `json:"titleType"`                                 // 标题类型
		Heading         string `json:"heading,optional"`                          // 主标题
		SubTitle        string `json:"subTitle,optional"`                         // 副标题
		ExplainType     string `json:"explainType,optional,options=[text,,file]"` // text file  ,options=text||file
		ExplainTxt      string `json:"explainTxt,optional"`                       // 文字说明
		FileName        string `json:"fileName,optional"`                         // 文件名
		FileUrl         string `json:"fileUrl,optional"`                          // 组件图片/视频
		Align           string `json:"align,optional"`                            // 废弃 文本对齐方式 left center right
		HeadingAlign    string `json:"headingAlign,optional"`                     // 主标题 文本对齐方式 left center right
		SubAlign        string `json:"subAlign,optional"`                         // 副标题 文本对齐方式 left center right
	}
	TableAbility {
		FilterSwitch  bool            `json:"filterSwitch,optional"`  // 表筛选功能开关
		DimensionList []Dimension     `json:"dimensionList,optional"` // 维度列表
		CardSwitch    bool            `json:"cardSwitch,optional"`    // 顺序标识开关
		CardIdent     string          `json:"cardIdent,optional"`     // 顺序标识
		CardOrderList []CardOrderItem `json:"cardOrderList,optional"` // 卡片列表顺序
	}
	CardOrderItem {
		CardId string `json:"cardId,optional"`
	}
	Series { // 图表类型 (记录型表格:RecordTable-1 总体指标:MetricsCard-1 容器卡片:ContainerCard-1 四分图:QuarterChart-1)
		Name             string       `json:"name"`                                // 名称 (例如 指标1、指标2)
		SourceFrom       string       `json:"from,options=[ByteBank,User]"`        // 数据源类型 ByteBank:字库  User:用户自定义
		DataSourceId     int64        `json:"dataSourceId,optional,omitempty"`     // 数据源ID(from值为ByteBank时有值)
		CustomText       string       `json:"customText,optional,omitempty"`       // 自定义数据文本(from值为User时有值)
		MatchExpressions []Expression `json:"matchExpressions,optional,omitempty"` // 条件匹配表达式(总体指标)
		TargetText       string       `json:"targetText,optional,omitempty"`       // 指标名文本
		TargetNum        string       `json:"targetNum,optional,omitempty"`        // 指标数值
		TargetUnit       string       `json:"targetUnit,optional,omitempty"`       // 指标单位
	}
	Expression {
		Operator     string `json:"operator"`     // 操作符号 <,>,==,<>,<=,>=
		CompareValue string `json:"compareValue"` // 比较值
		ToValue      string `json:"toValue"`      // 显示值(转为)
	}
	Dimension {
		Name  string `json:"name,optional,omitempty"`
		Value string `json:"dimensionVal,optional"`
	}
)