feat: 修改柱状图 & 折线图文件位置和名称,格式化内容

This commit is contained in:
奔跑的面条 2023-08-11 22:20:32 +08:00
parent 6b9e993599
commit 541ce8a083
12 changed files with 151 additions and 147 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,75 @@
import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
import { BarLineConfig } from './index'
import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
// 柱状折线组合图 分别定义series
// 写死name可以定义legend显示的名称
export const barSeriesItem = {
type: 'bar',
barWidth: 15,
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
itemStyle: {
color: null,
borderRadius: 2
}
}
export const lineSeriesItem = {
type: 'line',
symbol: 'circle',
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
symbolSize: 5, //设定实心点的大小
itemStyle: {
color: '#FFE47A',
borderWidth: 1
},
lineStyle: {
type: 'solid',
width: 3,
color: null
}
}
export const option = {
tooltip: {
show: true,
trigger: 'axis',
axisPointer: {
show: true,
type: 'shadow'
}
},
legend: {
data: null
},
xAxis: {
show: true,
type: 'category'
},
yAxis: {
show: true,
type: 'value'
},
dataset: { ...dataJson },
series: [barSeriesItem, lineSeriesItem]
}
export default class Config extends PublicConfigClass implements CreateComponentType {
public key = BarLineConfig.key
public chartConfig = cloneDeep(BarLineConfig)
// 图表配置项
public option = echartOptionProfixHandle(option, includes)
}

View File

@ -1,43 +1,48 @@
<template> <template>
<!-- Echarts 全局设置 --> <!-- Echarts 全局设置 -->
<global-setting :optionData="optionData"></global-setting> <global-setting :optionData="optionData"></global-setting>
<CollapseItem v-for="(item, index) in seriesList" :key="index" :name="`${item.type=='bar' ? '柱状图' : '折线图'}`" :expanded="true"> <CollapseItem
<SettingItemBox name="图形" v-if="item.type=='bar'"> v-for="(item, index) in seriesList"
:key="index"
:name="`${item.type == 'bar' ? '柱状图' : '折线图'}`"
:expanded="true"
>
<SettingItemBox name="图形" v-if="item.type == 'bar'">
<SettingItem name="宽度"> <SettingItem name="宽度">
<n-input-number <n-input-number
v-model:value="item.barWidth" v-model:value="item.barWidth"
:min="1" :min="1"
:max="100" :max="100"
size="small" size="small"
placeholder="自动计算" placeholder="自动计算"
></n-input-number> ></n-input-number>
</SettingItem> </SettingItem>
<SettingItem name="圆角"> <SettingItem name="圆角">
<n-input-number v-model:value="item.itemStyle.borderRadius" :min="0" size="small"></n-input-number> <n-input-number v-model:value="item.itemStyle.borderRadius" :min="0" size="small"></n-input-number>
</SettingItem> </SettingItem>
</SettingItemBox> </SettingItemBox>
<SettingItemBox name="线条" v-if="item.type=='line'"> <SettingItemBox name="线条" v-if="item.type == 'line'">
<SettingItem name="宽度"> <SettingItem name="宽度">
<n-input-number <n-input-number
v-model:value="item.lineStyle.width" v-model:value="item.lineStyle.width"
:min="1" :min="1"
:max="100" :max="100"
size="small" size="small"
placeholder="自动计算" placeholder="自动计算"
></n-input-number> ></n-input-number>
</SettingItem> </SettingItem>
<SettingItem name="类型"> <SettingItem name="类型">
<n-select v-model:value="item.lineStyle.type" size="small" :options="lineConf.lineStyle.type"></n-select> <n-select v-model:value="item.lineStyle.type" size="small" :options="lineConf.lineStyle.type"></n-select>
</SettingItem> </SettingItem>
</SettingItemBox> </SettingItemBox>
<SettingItemBox name="实心点" v-if="item.type=='line'"> <SettingItemBox name="实心点" v-if="item.type == 'line'">
<SettingItem name="大小"> <SettingItem name="大小">
<n-input-number <n-input-number
v-model:value="item.symbolSize" v-model:value="item.symbolSize"
:min="1" :min="1"
:max="100" :max="100"
size="small" size="small"
placeholder="自动计算" placeholder="自动计算"
></n-input-number> ></n-input-number>
</SettingItem> </SettingItem>
</SettingItemBox> </SettingItemBox>
@ -56,8 +61,8 @@
</setting-item> </setting-item>
<setting-item name="位置"> <setting-item name="位置">
<n-select <n-select
v-model:value="item.label.position" v-model:value="item.label.position"
:options="[ :options="[
{ label: 'top', value: 'top' }, { label: 'top', value: 'top' },
{ label: 'left', value: 'left' }, { label: 'left', value: 'left' },
{ label: 'right', value: 'right' }, { label: 'right', value: 'right' },
@ -83,7 +88,6 @@ const props = defineProps({
}) })
const seriesList = computed(() => { const seriesList = computed(() => {
console.log(props.optionData);
return props.optionData.series return props.optionData.series
}) })
</script> </script>

View File

@ -0,0 +1,16 @@
// 公共类型声明
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
// 当前[信息模块]分类声明
import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
export const BarLineConfig: ConfigType = {
key: 'BarLine',
chartKey: 'VBarLine',
conKey: 'VCBarLine',
title: '柱状图 & 折线图',
category: ChatCategoryEnum.BAR,
categoryName: ChatCategoryEnumName.BAR,
package: PackagesCategoryEnum.CHARTS,
chartFrame: ChartFrameEnum.ECHARTS,
image: 'bar_line.png'
}

View File

@ -1,10 +1,16 @@
<template> <template>
<v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" <v-chart
autoresize></v-chart> ref="vChartRef"
:init-options="initOptions"
:theme="themeColor"
:option="option"
:manual-update="isPreview()"
autoresize
></v-chart>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {ref, computed, watch, PropType, nextTick} from 'vue' import { ref, computed, watch, PropType, nextTick } from 'vue'
import VChart from 'vue-echarts' import VChart from 'vue-echarts'
import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook' import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core' import { use } from 'echarts/core'
@ -44,25 +50,24 @@ const option = computed(() => {
}) })
watch( watch(
() => props.chartConfig.option.dataset, () => props.chartConfig.option.dataset,
(newData, oldData) => { (newData, oldData) => {
if (newData.dimensions.length !== oldData.dimensions.length) { if (newData.dimensions.length !== oldData.dimensions.length) {
const seriesArr = [] const seriesArr = []
for (let i = 0; i < newData.dimensions.length - 1; i++) { for (let i = 0; i < newData.dimensions.length - 1; i++) {
seriesArr.push(barSeriesItem, lineSeriesItem) seriesArr.push(barSeriesItem, lineSeriesItem)
}
replaceMergeArr.value = ['series']
props.chartConfig.option.series = seriesArr
nextTick(() => {
replaceMergeArr.value = []
})
} }
}, replaceMergeArr.value = ['series']
{ props.chartConfig.option.series = seriesArr
deep: false nextTick(() => {
replaceMergeArr.value = []
})
} }
},
{
deep: false
}
) )
const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore) const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
</script> </script>

View File

@ -1,5 +1,6 @@
import { BarCommonConfig } from './BarCommon/index' import { BarCommonConfig } from './BarCommon/index'
import { BarCrossrangeConfig } from './BarCrossrange/index' import { BarCrossrangeConfig } from './BarCrossrange/index'
import { CapsuleChartConfig } from './CapsuleChart/index' import { CapsuleChartConfig } from './CapsuleChart/index'
import { BarLineConfig } from './BarLine/index'
export default [BarCommonConfig, BarCrossrangeConfig, CapsuleChartConfig]
export default [BarCommonConfig, BarCrossrangeConfig, BarLineConfig, CapsuleChartConfig]

View File

@ -1,76 +0,0 @@
import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
import { BarLineConfig } from './index'
import { CreateComponentType } from '@/packages/index.d'
import cloneDeep from 'lodash/cloneDeep'
import dataJson from './data.json'
export const includes = ['legend', 'xAxis', 'yAxis', 'grid']
// 柱状折线组合图 分别定义series
// 写死name可以定义legend显示的名称
export const barSeriesItem = {
type: 'bar',
barWidth: 15,
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
itemStyle: {
color: null,
borderRadius: 2
}
}
export const lineSeriesItem = {
type: 'line',
symbol: "circle",
label: {
show: true,
position: 'top',
color: '#fff',
fontSize: 12
},
symbolSize: 5, //设定实心点的大小
itemStyle: {
color: '#FFE47A',
borderWidth: 1
},
lineStyle: {
type: 'solid',
width: 3,
color: null
}
}
export const option = {
tooltip: {
show: true,
trigger: 'axis',
axisPointer: {
show: true,
type: 'shadow'
}
},
legend: {
data:null
},
xAxis: {
show: true,
type: 'category'
},
yAxis: {
show: true,
type: 'value'
},
dataset: { ...dataJson },
series: [barSeriesItem, lineSeriesItem]
}
export default class Config extends PublicConfigClass implements CreateComponentType {
public key = BarLineConfig.key
public chartConfig = cloneDeep(BarLineConfig)
// 图表配置项
public option = echartOptionProfixHandle(option, includes)
}

View File

@ -1,16 +0,0 @@
// 公共类型声明
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
// 当前[信息模块]分类声明
import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
export const BarLineConfig: ConfigType = {
key: 'BarLine',
chartKey: 'VBarLine',
conKey: 'VCBarLine',
title: '柱状加折线图',
category: ChatCategoryEnum.COMBINATIONS,
categoryName: ChatCategoryEnumName.COMBINATION,
package: PackagesCategoryEnum.CHARTS,
chartFrame: ChartFrameEnum.ECHARTS,
image: 'bar_x.png'
}

View File

@ -1,3 +0,0 @@
import { BarLineConfig } from './BarLine/index'
export default [BarLineConfig]

View File

@ -5,7 +5,6 @@ export enum ChatCategoryEnum {
LINE = 'Lines', LINE = 'Lines',
SCATTER = 'Scatters', SCATTER = 'Scatters',
MAP = 'Maps', MAP = 'Maps',
COMBINATIONS = 'COMBINATIONS',
MORE = 'Mores' MORE = 'Mores'
} }

View File

@ -3,7 +3,6 @@ import Pies from './Pies'
import Lines from './Lines' import Lines from './Lines'
import Scatters from './Scatters' import Scatters from './Scatters'
import Mores from './Mores' import Mores from './Mores'
import COMBINATIONS from "./COMBINATIONS";
import Maps from './Maps' import Maps from './Maps'
export const ChartList = [...Bars, ...Lines, ...Pies, ...Scatters, ...Maps,...COMBINATIONS, ...Mores] export const ChartList = [...Bars, ...Lines, ...Pies, ...Scatters, ...Maps, ...Mores]