diff --git a/src/api/mock/index.ts b/src/api/mock/index.ts index 43890d4e..9f639513 100644 --- a/src/api/mock/index.ts +++ b/src/api/mock/index.ts @@ -19,6 +19,7 @@ export const capsuleUrl = '/mock/capsule' export const wordCloudUrl = '/mock/wordCloud' export const treemapUrl = '/mock/treemap' export const threeEarth01Url = '/mock/threeEarth01Data' +export const sankeyUrl = '/mock/sankey' export const graphUrl = '/mock/graphData' const mockObject: MockMethod[] = [ @@ -104,6 +105,11 @@ const mockObject: MockMethod[] = [ method: RequestHttpEnum.GET, response: () => test.threeEarth01Data }, + { + url: sankeyUrl, + method: RequestHttpEnum.GET, + response: () => test.fetchSankey + }, { url: graphUrl, method: RequestHttpEnum.GET, diff --git a/src/api/mock/sankey.json b/src/api/mock/sankey.json new file mode 100644 index 00000000..269c6b39 --- /dev/null +++ b/src/api/mock/sankey.json @@ -0,0 +1,86 @@ +{ + "label": [ + { + "name": "a" + }, + { + "name": "b" + }, + { + "name": "a1" + }, + { + "name": "a2" + }, + { + "name": "b1" + }, + { + "name": "b2" + } + ], + "links": [ + { + "source": "a", + "target": "a1", + "value": "@integer(0, 10)" + }, + { + "source": "a", + "target": "a2", + "value": "@integer(0, 10)" + }, + { + "source": "b", + "target": "b1", + "value": "@integer(0, 10)" + }, + { + "source": "a", + "target": "b1", + "value": "@integer(0, 10)" + }, + { + "source": "b1", + "target": "a1", + "value": "@integer(0, 10)" + }, + { + "source": "b1", + "target": "b2", + "value": "@integer(0, 10)" + } + ], + "levels": [ + { + "depth": 0, + "itemStyle": { + "color": "#decbe4" + }, + "lineStyle": { + "color": "source", + "opacity": 0.9 + } + }, + { + "depth": 1, + "itemStyle": { + "color": "#b3cde3" + }, + "lineStyle": { + "color": "source", + "opacity": 0.6 + } + }, + { + "depth": 2, + "itemStyle": { + "color": "#ccebc5" + }, + "lineStyle": { + "color": "source", + "opacity": 0.6 + } + } + ] +} diff --git a/src/api/mock/test.mock.ts b/src/api/mock/test.mock.ts index c4f6e9c5..f5c56004 100644 --- a/src/api/mock/test.mock.ts +++ b/src/api/mock/test.mock.ts @@ -2,6 +2,7 @@ import heatmapJson from './heatMapData.json' import scatterJson from './scatter.json' import mapJson from './map.json' import tTreemapJson from './treemap.json' +import sankeyJson from './sankey.json' import graphDataJson from './graph.json' export default { @@ -221,6 +222,13 @@ export default { } ] }, + // 桑基图 + fetchSankey: { + code: 0, + status: 200, + msg: '请求成功', + data: sankeyJson + }, // 关系图 graphData: { code: 0, diff --git a/src/assets/images/chart/charts/sankey.png b/src/assets/images/chart/charts/sankey.png new file mode 100644 index 00000000..1ab374e9 Binary files /dev/null and b/src/assets/images/chart/charts/sankey.png differ diff --git a/src/packages/components/Charts/Mores/Sankey/config.ts b/src/packages/components/Charts/Mores/Sankey/config.ts new file mode 100644 index 00000000..cab0ff7d --- /dev/null +++ b/src/packages/components/Charts/Mores/Sankey/config.ts @@ -0,0 +1,43 @@ +import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public' +import { SankeyConfig } from './index' +import { CreateComponentType } from '@/packages/index.d' +import cloneDeep from 'lodash/cloneDeep' +import dataJson from './data.json' + +export const includes = ['legend'] + +// 图表方向 +export const orientList = [ + { label: '水平', value: 'horizontal' }, + { label: '垂直', value: 'vertical' } +] + +// 标签展示 +export const toolTipSwitch = [ + { label: '开启', value: 1 }, + { label: '关闭', value: 0 } +] + +export const option = { + dataset: { ...dataJson }, + tooltip: { + show: 1, + trigger: 'item', + triggerOn: 'mousemove' + }, + series: { + type: 'sankey', + layout: 'none', + orient:'horizontal', + data: dataJson.label, + links: dataJson.links, + levels: dataJson.levels + } +}; + +export default class Config extends PublicConfigClass implements CreateComponentType { + public key = SankeyConfig.key + public chartConfig = cloneDeep(SankeyConfig) + // 图表配置项 + public option = echartOptionProfixHandle(option, includes) +} diff --git a/src/packages/components/Charts/Mores/Sankey/config.vue b/src/packages/components/Charts/Mores/Sankey/config.vue new file mode 100644 index 00000000..fcb23e7e --- /dev/null +++ b/src/packages/components/Charts/Mores/Sankey/config.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/packages/components/Charts/Mores/Sankey/data.json b/src/packages/components/Charts/Mores/Sankey/data.json new file mode 100644 index 00000000..e1f81b79 --- /dev/null +++ b/src/packages/components/Charts/Mores/Sankey/data.json @@ -0,0 +1,86 @@ +{ + "label": [ + { + "name": "a" + }, + { + "name": "b" + }, + { + "name": "a1" + }, + { + "name": "a2" + }, + { + "name": "b1" + }, + { + "name": "b2" + } + ], + "links": [ + { + "source": "a", + "target": "a1", + "value": 5 + }, + { + "source": "a", + "target": "a2", + "value": 3 + }, + { + "source": "b", + "target": "b1", + "value": 8 + }, + { + "source": "a", + "target": "b1", + "value": 3 + }, + { + "source": "b1", + "target": "a1", + "value": 1 + }, + { + "source": "b1", + "target": "b2", + "value": 2 + } + ], + "levels": [ + { + "depth": 0, + "itemStyle": { + "color": "#decbe4" + }, + "lineStyle": { + "color": "source", + "opacity": 0.9 + } + }, + { + "depth": 1, + "itemStyle": { + "color": "#b3cde3" + }, + "lineStyle": { + "color": "source", + "opacity": 0.6 + } + }, + { + "depth": 2, + "itemStyle": { + "color": "#ccebc5" + }, + "lineStyle": { + "color": "source", + "opacity": 0.6 + } + } + ] +} diff --git a/src/packages/components/Charts/Mores/Sankey/index.ts b/src/packages/components/Charts/Mores/Sankey/index.ts new file mode 100644 index 00000000..71992944 --- /dev/null +++ b/src/packages/components/Charts/Mores/Sankey/index.ts @@ -0,0 +1,14 @@ +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' + +export const SankeyConfig: ConfigType = { + key: 'Sankey', + chartKey: 'VSankey', + conKey: 'VCSankey', + title: '桑基图', + category: ChatCategoryEnum.MORE, + categoryName: ChatCategoryEnumName.MORE, + package: PackagesCategoryEnum.CHARTS, + chartFrame: ChartFrameEnum.COMMON, + image: 'sankey.png' +} diff --git a/src/packages/components/Charts/Mores/Sankey/index.vue b/src/packages/components/Charts/Mores/Sankey/index.vue new file mode 100644 index 00000000..a8cdb09b --- /dev/null +++ b/src/packages/components/Charts/Mores/Sankey/index.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/packages/components/Charts/Mores/index.ts b/src/packages/components/Charts/Mores/index.ts index 6a2ec675..d13eb446 100644 --- a/src/packages/components/Charts/Mores/index.ts +++ b/src/packages/components/Charts/Mores/index.ts @@ -4,6 +4,7 @@ import { FunnelConfig } from './Funnel/index' import { HeatmapConfig } from './Heatmap/index' import { WaterPoloConfig } from './WaterPolo/index' import { TreeMapConfig } from './TreeMap/index' +import { SankeyConfig } from './Sankey/index' import { GraphConfig } from './Graph/index' -export default [ProcessConfig, RadarConfig, FunnelConfig, HeatmapConfig, WaterPoloConfig, TreeMapConfig, GraphConfig] +export default [ProcessConfig, RadarConfig, FunnelConfig, HeatmapConfig, WaterPoloConfig, TreeMapConfig, GraphConfig, SankeyConfig] diff --git a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue index c980385a..d7d58273 100644 --- a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue +++ b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue @@ -81,7 +81,8 @@ import { capsuleUrl, wordCloudUrl, treemapUrl, - threeEarth01Url + threeEarth01Url, + sankeyUrl } from '@/api/mock' const props = defineProps({ @@ -144,6 +145,9 @@ const apiList = [ { value: `【三维地球】${threeEarth01Url}` }, + { + value: `【桑基图】${sankeyUrl}` + }, { value: `【关系图】${graphUrl}` }