diff --git a/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.ts b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.ts new file mode 100644 index 0000000..98b7082 --- /dev/null +++ b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.ts @@ -0,0 +1,148 @@ +import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public' +import { EnergyConsumptionTrendConfig } from './index' +import { CreateComponentType } from '@/packages/index.d' +import cloneDeep from 'lodash/cloneDeep' +import dataJson from './data.json' + +export const includes = ['title', 'grid3D', 'xAxis3D', 'yAxis3D', 'zAxis3D'] +// 基于准备好的dom,初始化echarts实例 +// var myChart = echarts.init(document.getElementById('main')); + +// 从图片中估算的数据 +const months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']; +const values = [88, 54, 66, 54, 89, 67, 54, 89, 54, 89, 54, 67]; + +// 将数据转换为 bar3D 需要的格式 [x, y, z] +const data = values.map((item, index) => { + // x 对应 xAxis3D 的类目索引,y 对应 yAxis3D 的类目索引,z 对应 zAxis3D 的数值 + return [index, 0, item]; +}); + + +const option = { + // 图表标题,用于显示左上角的单位 + title: { + text: '单位:万kWh', + left: '2%', // 调整位置 + top: '2%', + textStyle: { + color: '#e0e0e0', // 使用稍亮的颜色以适应深色背景 + fontSize: 16 + } + }, + // 背景色,使用线性渐变模拟图片效果 + backgroundColor: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, color: '#0f375f' // 起始颜色 + }, { + offset: 1, color: '#000918' // 结束颜色 + }], + global: false + }, + // 3D笛卡尔坐标系配置 + grid3D: { + boxWidth: 200, + boxDepth: 80, + // 视角控制,用于调整图表的观察角度 + viewControl: { + distance: 250, // 初始视角距离 + alpha: 15, // 俯视角度 + beta: 25, // 旋转角度 + autoRotate: false, // 禁止自动旋转 + minAlpha: 5, // 最小俯视角度 + maxAlpha: 90, // 最大俯视角度 + }, + axisPointer: { + show: false // 不显示坐标轴指示器 + }, + // 光照配置,这是实现立体感和阴影的关键 + light: { + // 主光源 + main: { + intensity: 1.2, // 光照强度 + shadow: true, // 开启阴影 + shadowQuality: 'ultra', // 更高的阴影质量 + alpha: 55, // 控制光源的水平角度,使其从右侧照射,从而在左侧形成阴影 + beta: 40 // 控制光源的垂直角度,使其从上方照射 + }, + // 环境光,用于整体提亮 + ambient: { + intensity: 0.3 + } + } + }, + // X轴(类目轴) + xAxis3D: { + type: 'category', + data: months, + axisLabel: { + color: '#d0d0d0', + fontSize: 14 + }, + axisLine: { + lineStyle: { + color: '#d0d0d0' + } + } + }, + // Y轴(在图中是隐藏的,但 bar3D 渲染需要此轴) + yAxis3D: { + type: 'category', + show: false // 不显示Y轴 + }, + // Z轴(数值轴) + zAxis3D: { + type: 'value', + min: 0, + max: 100, + interval: 25, // 刻度间隔 + axisLabel: { + color: '#d0d0d0', + fontSize: 12 + }, + axisLine: { + lineStyle: { + color: '#d0d0d0' + } + }, + splitLine: { + show: true, + lineStyle: { + color: 'rgba(255, 255, 255, 0.15)' // 分割线颜色 + } + } + }, + // 系列列表 + series: [{ + type: 'bar3D', + data: data, + barSize: 15, // 柱子在 X, Y 轴上的尺寸 + // 柱状图的着色效果 + shading: 'lambert', // 使用 Lambert 光照模型,能更好地表现光照和阴影 + // 柱子的样式 + itemStyle: { + color: '#4bebf3' // 柱子的基础颜色,光照会在此基础上计算最终颜色 + }, + // 鼠标悬浮时的高亮状态 + emphasis: { + label: { + show: false + } + } + }] +}; + +// 使用刚指定的配置项和数据显示图表。 +// myChart.setOption(option); + +export default class Config extends PublicConfigClass implements CreateComponentType { + public key: string = EnergyConsumptionTrendConfig.key + public chartConfig = cloneDeep(EnergyConsumptionTrendConfig) + // 图表配置项 + public option = echartOptionProfixHandle(option, includes) +} diff --git a/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.vue b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.vue new file mode 100644 index 0000000..9bcaaeb --- /dev/null +++ b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/config.vue @@ -0,0 +1,16 @@ + + diff --git a/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/data.json b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/data.json new file mode 100644 index 0000000..e69de29 diff --git a/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.ts b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.ts new file mode 100644 index 0000000..f0e201c --- /dev/null +++ b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.ts @@ -0,0 +1,14 @@ +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' + +export const EnergyConsumptionTrendConfig: ConfigType = { + key: 'EnergyConsumptionTrend', + chartKey: 'VEnergyConsumptionTrend', + conKey: 'VCEnergyConsumptionTrend', + title: '能耗趋势', + category: ChatCategoryEnum.IntegratedEnergy, + categoryName: ChatCategoryEnumName.IntegratedEnergy, + package: PackagesCategoryEnum.CHARTS, + chartFrame: ChartFrameEnum.ECHARTS, + image: 'EnergyConsumptionTrend.png' +} \ No newline at end of file diff --git a/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.vue b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.vue new file mode 100644 index 0000000..b2023a2 --- /dev/null +++ b/src/packages/components/Charts/IntegratedEnergy/EnergyConsumptionTrend/index.vue @@ -0,0 +1,213 @@ + + + \ No newline at end of file diff --git a/src/packages/components/Charts/IntegratedEnergy/index.ts b/src/packages/components/Charts/IntegratedEnergy/index.ts index 70f73b7..62bb595 100644 --- a/src/packages/components/Charts/IntegratedEnergy/index.ts +++ b/src/packages/components/Charts/IntegratedEnergy/index.ts @@ -1,4 +1,5 @@ import { EnergyOverviewConfig } from "./EnergyOverview" +import { EnergyConsumptionTrendConfig } from "./EnergyConsumptionTrend" export default [ - EnergyOverviewConfig + EnergyOverviewConfig, EnergyConsumptionTrendConfig ] \ No newline at end of file