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}`
}