Skip to content

Commit

Permalink
[Core] [DataSet] [Chart] Support word cloud diagram (close #614)
Browse files Browse the repository at this point in the history
  • Loading branch information
qianmoQ committed Feb 4, 2024
1 parent 593cf98 commit eeb1f4b
Show file tree
Hide file tree
Showing 9 changed files with 185 additions and 2 deletions.
1 change: 1 addition & 0 deletions core/datacap-web/src/components/visual/Type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ export enum Type
AREA = ('AREA'),
PIE = ('PIE'),
HISTOGRAM = ('HISTOGRAM'),
WORDCLOUD= ('WORDCLOUD'),
}
7 changes: 6 additions & 1 deletion core/datacap-web/src/components/visual/VisualEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
:configuration="configuration"
@commitOptions="handlerCommit">
</VisualHistogram>
<VisualWordCloud v-else-if="configuration.type === Type.WORDCLOUD"
:configuration="configuration"
@commitOptions="handlerCommit">
</VisualWordCloud>
</div>
</div>
</template>
Expand All @@ -49,6 +53,7 @@ import VisualBar from "@/components/visual/components/VisualBar.vue";
import VisualArea from "@/components/visual/components/VisualArea.vue";
import VisualPie from "@/components/visual/components/VisualPie.vue";
import VisualHistogram from "@/components/visual/components/VisualHistogram.vue";
import VisualWordCloud from "@/components/visual/components/VisualWordCloud.vue";
export default {
name: 'VisualEditor',
Expand All @@ -58,7 +63,7 @@ export default {
return Type
}
},
components: {VisualHistogram, VisualPie, VisualArea, VisualBar, VisualLine, VisualTable},
components: {VisualWordCloud, VisualHistogram, VisualPie, VisualArea, VisualBar, VisualLine, VisualTable},
props: {
configuration: {
type: Configuration
Expand Down
9 changes: 8 additions & 1 deletion core/datacap-web/src/components/visual/VisualView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@
:width="width"
:height="height">
</VisualHistogram>
<VisualWordCloud v-else-if="configuration.type === Type.WORDCLOUD"
:configuration="localConfiguration"
:submitted="false"
:width="width"
:height="height">
</VisualWordCloud>
</div>
</div>
</template>
Expand All @@ -55,6 +61,7 @@ import CircularLoading from "@/components/loading/CircularLoading.vue";
import VisualArea from "@/components/visual/components/VisualArea.vue";
import VisualPie from "@/components/visual/components/VisualPie.vue";
import VisualHistogram from "@/components/visual/components/VisualHistogram.vue";
import VisualWordCloud from "@/components/visual/components/VisualWordCloud.vue";
export default {
name: 'VisualView',
Expand All @@ -64,7 +71,7 @@ export default {
return Type
}
},
components: {VisualHistogram, VisualPie, VisualArea, CircularLoading, VisualBar, VisualLine, VisualTable},
components: {VisualWordCloud, VisualHistogram, VisualPie, VisualArea, CircularLoading, VisualBar, VisualLine, VisualTable},
props: {
configuration: {
type: Configuration
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<template>
<div>
<div ref="content"
:style="{width: width, height: height}">
</div>
</div>
</template>
<script lang="ts">
import {Configuration} from "@/components/visual/Configuration"
import VChart from '@visactor/vchart'
import {cloneDeep} from "lodash";
let instance: VChart
export default {
name: 'VisualWordCloud',
props: {
configuration: {
type: Configuration
},
submitted: {
type: Boolean,
default: true
},
width: {
type: String,
default: () => '100%'
},
height: {
type: String,
default: () => '400px'
}
},
watch: {
configuration: {
handler: 'handlerReset',
deep: true
}
},
created()
{
this.handlerInitialize(false)
},
methods: {
handlerInitialize(reset: boolean)
{
setTimeout(() => {
try {
const options = {
type: 'wordCloud',
data: {values: this.configuration.columns},
nameField: this.configuration.chartConfigure.xAxis,
valueField: this.configuration.chartConfigure.yAxis,
seriesField: this.configuration.chartConfigure.series
}
if (!reset) {
instance = new VChart(options, {dom: this.$refs.content})
instance.renderAsync()
}
else {
instance.updateSpec(options, true)
}
if (this.submitted) {
const cloneOptions = cloneDeep(this.configuration)
cloneOptions.headers = []
cloneOptions.columns = []
this.$emit('commitOptions', cloneOptions)
}
}
catch (e) {
console.warn(e)
}
})
},
handlerReset()
{
this.handlerInitialize(true)
}
}
}
</script>
2 changes: 2 additions & 0 deletions core/datacap-web/src/fontawesome.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import {
faUpload
} from '@fortawesome/free-solid-svg-icons'
import {faChartSimple} from "@fortawesome/free-solid-svg-icons/faChartSimple";
import {faCloud} from "@fortawesome/free-solid-svg-icons/faCloud";

/**
* Creates icons for the given app.
Expand All @@ -65,6 +66,7 @@ import {faChartSimple} from "@fortawesome/free-solid-svg-icons/faChartSimple";
const createIcons = (app: any) => {
library.add(faArrowRight,
faPen,
faCloud,
faChartSimple,
faCirclePlus,
faCirclePlay,
Expand Down
1 change: 1 addition & 0 deletions core/datacap-web/src/i18n/langs/en/dataset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export default {
visualTypeArea: 'Area',
visualTypePie: 'Pie',
visualTypeHistogram: 'Histogram',
visualTypeWordCloud: 'Word Cloud',
visualConfigure: 'Visual Configure',
visualConfigureNotSpecified: 'No configuration items are available',
visualConfigureXAxis: 'X Axis',
Expand Down
1 change: 1 addition & 0 deletions core/datacap-web/src/i18n/langs/zhCn/dataset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export default {
visualTypeArea: '面积图',
visualTypePie: '饼图',
visualTypeHistogram: '直方图',
visualTypeWordCloud: '词云图',
visualConfigure: '可视化配置',
visualConfigureNotSpecified: '暂无可用配置项',
visualConfigureXAxis: 'X轴',
Expand Down
14 changes: 14 additions & 0 deletions core/datacap-web/src/views/admin/dataset/DatasetAdhoc.vue
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,14 @@
</FontAwesomeIcon>
</Tooltip>
</Radio>
<Radio :label="Type.WORDCLOUD">
<Tooltip transfer
:content="$t('dataset.visualTypeWordCloud')">
<FontAwesomeIcon icon="cloud"
size="2x">
</FontAwesomeIcon>
</Tooltip>
</Radio>
</Row>
</RadioGroup>
<Divider orientation="left"
Expand All @@ -248,6 +256,10 @@
:columns="configuration.headers"
@commit="handlerCommit">
</DatasetVisualConfigureHistogram>
<DatasetVisualConfigureWordCloud v-else-if="configuration.type === Type.WORDCLOUD"
:columns="configuration.headers"
@commit="handlerCommit">
</DatasetVisualConfigureWordCloud>
<Result v-else>
<template #desc>
{{ $t('dataset.visualConfigureNotSpecified') }}
Expand Down Expand Up @@ -311,6 +323,7 @@ import ReportService from "@/services/admin/ReportService";
import DatasetVisualConfigureArea from "@/views/admin/dataset/components/adhoc/DatasetVisualConfigureArea.vue";
import DatasetVisualConfigurePie from "@/views/admin/dataset/components/adhoc/DatasetVisualConfigurePie.vue";
import DatasetVisualConfigureHistogram from "@/views/admin/dataset/components/adhoc/DatasetVisualConfigureHistogram.vue";
import DatasetVisualConfigureWordCloud from "@/views/admin/dataset/components/adhoc/DatasetVisualConfigureWordCloud.vue";
export default {
name: 'DatasetAdhoc',
Expand All @@ -325,6 +338,7 @@ export default {
}
},
components: {
DatasetVisualConfigureWordCloud,
DatasetVisualConfigureHistogram,
DatasetVisualConfigurePie,
DatasetVisualConfigureArea,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<template>
<div>
<Form :model="formState"
:label-width="60">
<FormItem prop="xAxis"
:label="$t('dataset.visualConfigureCategoryField')">
<Select v-model="formState.xAxis">
<Option v-for="item in columns"
:key="item"
:value="item">
{{ item }}
</Option>
</Select>
</FormItem>
<FormItem prop="yAxis"
:label="$t('dataset.visualConfigureValueField')">
<Select v-model="formState.yAxis">
<Option v-for="item in columns"
:key="item"
:value="item">
{{ item }}
</Option>
</Select>
</FormItem>
<FormItem prop="series"
:label="$t('dataset.visualConfigureSeriesField')">
<Select v-model="formState.series">
<Option v-for="item in columns"
:key="item"
:value="item">
{{ item }}
</Option>
</Select>
</FormItem>
</Form>
</div>
</template>
<script lang="ts">
export default {
name: 'DatasetVisualConfigureWordCloud',
props: {
columns: {
type: Array,
default: () => []
}
},
watch: {
formState: {
handler: 'handlerCommit',
deep: true
}
},
data()
{
return {
formState: {
xAxis: null,
yAxis: null,
series: null
}
}
},
methods: {
handlerCommit()
{
this.$emit('commit', this.formState)
}
}
};
</script>

0 comments on commit eeb1f4b

Please sign in to comment.