大屏开源项目go-view二次开发3----象形柱图控件(C#)

环境搭建参考:

大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客

要做的象形柱图控件最终效果如下图:

其实这个控件我前面的文章也介绍过,不过是用wpf做的,链接如下:

wpf利用Microsoft.Web.WebView2显示html代码(以Echarts的象形柱图Velocity of Christmas Reindeers为例)_webview集成echarts,formatter-CSDN博客

这一次是在上一篇博文大屏开源项目go-view二次开发2----半环形控件(C#)-CSDN博客

的基础上继续操作:

具体步骤如下:

1 首先,我们现在从这里抄该控件的option,链接如下:

Examples - Apache ECharts

2  在src\packages\components\Charts\Others(Others目录是上一篇博文新建的,具体请参考:大屏开源项目go-view二次开发2----半环形控件(C#)-CSDN博客)新增PictorialBar目录,然后从长得最像的控件BarCrossrange拷贝文件,拷贝src\packages\components\Charts\Bars\BarCrossrange目录下的5个文件到PictorialBar目录下,如下图:

3  编辑PictorialBar目录下的config.ts的文件如下:

import { echartOptionProfixHandle, PublicConfigClass } from '@/packages/public'
import { PictorialBar } 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']
export const seriesItem = {
  name: 'hill',
  type: 'pictorialBar',
  barCategoryGap: '-130%',
  symbol: 'path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z',
  itemStyle: {
    opacity: 0.5
  },
  emphasis: {
    itemStyle: {
      opacity: 1
    }
  },
  //data: [90, 60, 25, 18],
  z: 10,
  label: {
    show: true,
    position: 'top',
    color: '#e54035',
    fontSize: 20
  }
}
export const option = {
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'none'
    }
  },
  dataset: { ...dataJson },
  xAxis: {
    show: true,
    type: 'category',
    axisTick: { show: false },
    axisLine: { show: false },
    axisLabel: {
      color: '#e54035',
      fontSize: 20
    }
  },
  yAxis: {
    show: true,
    type: 'value',
    splitLine: { show: false },
    axisTick: { show: false },
    axisLine: { show: false },
    axisLabel: { 
      show: false,
      fontSize: 20
     }

  },

  color: ['#e54035'],
  series: [
    seriesItem
  ]

}

export default class Config extends PublicConfigClass implements CreateComponentType {
  public key = PictorialBar.key
  public chartConfig = cloneDeep(PictorialBar)
  // 图表配置项
  public option = echartOptionProfixHandle(option, includes)
}

从前面抄来的option就是放在这里的,我做了相应的调整,这个文件的具体功能已经在这篇博文做了详细的介绍:大屏开源项目go-view二次开发2----半环形控件(C#)-CSDN博客

4 编辑PictorialBar目录下的config.vue的文件如下:

<template>
    <!-- Echarts 全局设置 --> 
    <global-setting :optionData="optionData"></global-setting>

    <CollapseItem :name="`象形柱图`" :expanded="true">
        <SettingItemBox name="颜色">
            <SettingItem name="图形颜色">
              <n-color-picker
                size="small"
                :modes="['hex']"
                v-model:value="optionData.color">
              </n-color-picker>
            </SettingItem>
            <SettingItem name="label颜色">
                <n-color-picker
                  size="small"
                  :modes="['hex']"
                  v-model:value="seriesList[0].label.color">
                </n-color-picker>
            </SettingItem>
            <SettingItem name="X轴颜色">
              <template v-if="optionData.xAxis && optionData.xAxis.axisLabel">
                <n-color-picker
                  size="small"
                  :modes="['hex']"
                  v-model:value="optionData.xAxis.axisLabel.color">
                </n-color-picker>
              </template>
            </SettingItem>
         </SettingItemBox>

         <SettingItemBox name="字体大小">
            <SettingItem name="图例">
              <n-input-number
                  v-model:value="seriesList[0].label.fontSize"
                  size="small"
                  :min="1"
              ></n-input-number>
            </SettingItem>
            <SettingItem name="X轴">
              <template v-if="optionData.xAxis && optionData.xAxis.axisLabel">
                <n-input-number
                  v-model:value="optionData.xAxis.axisLabel.fontSize"
                  size="small"
                  :min="1"
              ></n-input-number>
              </template>
              
            </SettingItem>
            <SettingItem name="Y轴">
              <template v-if="optionData.yAxis && optionData.yAxis.axisLabel">
                <n-input-number
                  v-model:value="optionData.yAxis.axisLabel.fontSize"
                  size="small"
                  :min="1"
              ></n-input-number>
              </template>
            </SettingItem>
         </SettingItemBox>

    </CollapseItem>


  </template>
  
  <script setup lang="ts">
  import { PropType, computed } from 'vue'
  import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
  import { option } from './config'
  import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
  
  const props = defineProps({
    optionData: {
      type: Object as PropType<GlobalThemeJsonType>,
      required: true
    }
  })
  
  const seriesList = computed(() => {
  return props.optionData.series
})
  </script>
  

5  编辑PictorialBar目录下的data.json的文件如下:

{
    "dimensions": ["product", "data1"],
    "source": [
      {
        "product": "Mon",
        "data1": 120
      },
      {
        "product": "Tue",
        "data1": 200
      },
      {
        "product": "Wed",
        "data1": 150
      },
      {
        "product": "Thu",
        "data1": 80
      },
      {
        "product": "Fri",
        "data1": 70
      },
      {
        "product": "Sat",
        "data1": 110
      },
      {
        "product": "Sun",
        "data1": 130
      }
    ]
  }
  

6   编辑PictorialBar目录下的index.ts的文件如下:

import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'

export const PictorialBar: ConfigType = {
  key: 'PictorialBar',
  chartKey: 'VPictorialBar',
  conKey: 'VCPictorialBar',
  title: '象形柱图',
  category: ChatCategoryEnum.OTHERCHART,
  categoryName: ChatCategoryEnumName.OTHERCHART,
  package: PackagesCategoryEnum.CHARTS,
  chartFrame: ChartFrameEnum.ECHARTS,
  image: 'PictorialBar.png'
}

接着把该图片

下载后修改名称为PictorialBar.png,并放到src\assets\images\chart\charts目录下

7    编辑PictorialBar目录下的index.vue的文件如下:

<template>
    <v-chart
      ref="vChartRef"
      :init-options="initOptions"
      :theme="themeColor"
      :option="option"
      :update-options="{
        replaceMerge: replaceMergeArr
      }"
      autoresize
    ></v-chart>
  </template>
  
  <script setup lang="ts">
  import { ref, nextTick, computed, watch, PropType } from 'vue'
  import VChart from 'vue-echarts'
  import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
  import { use } from 'echarts/core'
  import { CanvasRenderer } from 'echarts/renderers'
  import {  PictorialBarChart } from 'echarts/charts'
  import { mergeTheme } from '@/packages/public/chart'
  import config, { includes, seriesItem } from './config'
  import { useChartDataFetch } from '@/hooks'
  import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
  import isObject from 'lodash/isObject'
  import cloneDeep from 'lodash/cloneDeep'
  
  const props = defineProps({
    themeSetting: {
      type: Object,
      required: true
    },
    themeColor: {
      type: Object,
      required: true
    },
    chartConfig: {
      type: Object as PropType<config>,
      required: true
    }
  })
  
  const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  
  use([DatasetComponent, CanvasRenderer,  PictorialBarChart, GridComponent, TooltipComponent, LegendComponent])
  
  const replaceMergeArr = ref<string[]>()
  
  const option = computed(() => {
    return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
  })
  
  // dataset 无法变更条数的补丁
  watch(
    () => props.chartConfig.option.dataset,
    (newData: { dimensions: any }, oldData) => {
      try {
        if (!isObject(newData) || !('dimensions' in newData)) return
        if (Array.isArray(newData?.dimensions)) {
          const seriesArr = []
          for (let i = 0; i < newData.dimensions.length - 1; i++) {
            seriesArr.push(cloneDeep(seriesItem))
          }
          replaceMergeArr.value = ['series']
          props.chartConfig.option.series = seriesArr
          nextTick(() => {
            replaceMergeArr.value = []
          })
        }
      } catch (error) {
        console.log(error)
      }
    },
    {
      deep: false
    }
  )
  
  const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => {
    props.chartConfig.option.dataset = newData
  })
  </script>
  

8  在src\packages\components\Charts\Others的文件index.ts新增配置如下:

9  运行C#后端程序(参考文章最前面给的链接大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客),并在前端输入npm run dev命令运行后,效果图如下:

源码可以从这里获取:

张祥裕/分享的资源名称 - Gitee.com

好了,本文的内容到此结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无刷电机的概念

无换向器电机 Brushless Direct Current Motor&#xff0c;BLDC 普通电机的转子就是中间旋转的线圈&#xff0c;定子就是两边的磁铁 和普通有刷相比&#xff0c;转子和定子互换材料。四周是通电的线圈&#xff0c;中间在转的是磁铁 负载工况决定额定电压&#xff0c;没有固定…

SLAAC如何工作?

SLAAC如何工作&#xff1f; IPv6无状态地址自动配置(SLAAC)-常见问题 - 苍然满关中 - 博客园 https://support.huawei.com/enterprise/zh/doc/EDOC1100323788?sectionj00shttps://www.zhihu.com/question/6691553243/answer/57023796400 主机在启动或接口UP后&#xff0c;发…

【机器学习】【集成学习——决策树、随机森林】从零起步:掌握决策树、随机森林与GBDT的机器学习之旅

这里写目录标题 一、引言机器学习中集成学习的重要性 二、决策树 (Decision Tree)2.1 基本概念2.2 组成元素2.3 工作原理分裂准则 2.4 决策树的构建过程2.5 决策树的优缺点&#xff08;1&#xff09;决策树的优点&#xff08;2&#xff09;决策树的缺点&#xff08;3&#xff0…

ubuntu+ros新手笔记(五):初探anaconda+cuda+pytorch

深度学习三件套&#xff1a;初探anacondacudapytorch 系统ubuntu22.04 ros2 humble 1.初探anaconda 1.1 安装 安装过程参照【详细】Ubuntu 下安装 Anaconda 1.2 创建和删除环境 创建新环境 conda create -n your_env_name pythonx.x比如我创建了一个名为“py312“的环境…

Diffusino Policy学习note

Diffusion Policy—基于扩散模型的机器人动作生成策略 - 知乎 建议看看&#xff0c;感觉普通实验室复现不了这种工作。复现了也没有太大扩展的意义。 Diffusion Policy 是监督学习吗 Diffusion Policy 通常被视为一种基于监督学习的方法&#xff0c;但它的实际训练过程可能结…

【Unity功能集】TextureShop纹理工坊(三)图层(下)

项目源码&#xff1a;在终章发布 索引 图层渲染绘画区域图层Shader 编辑器编辑模式新建图层设置当前图层上、下移动图层删除图层图层快照 图层 在PS中&#xff0c;图层的概念贯穿始终&#xff08;了解PS图层&#xff09;&#xff0c;他可以称作PS最基础也是最强大的特性之一。…

1、数据库概念和mysql表的管理

数据库概念 datebase&#xff1a;用来组织&#xff0c;存储&#xff0c;管理数据的仓库。 数据库的管理系统&#xff1a;DBMS&#xff08;用来实现对数据的有效组织、关系和存取的系统软件&#xff09; 关系型和非关系型数据库 关系型数据库&#xff1a;mysql、oracle 非关…

70 mysql 中事务的隔离级别

前言 mysql 隔离级别有四种 未提交读, 已提交读, 可重复度, 序列化执行 然后不同的隔离级别存在不同的问题 未提交读存在 脏读, 不可重复度, 幻觉读 等问题 已提交读存在 不可重复度, 幻觉读 等问题 可重复读存在 幻觉读 等问题 序列化执行 没有以上问题 然后 我们这里…

【FFmpeg】解封装 ① ( 封装与解封装流程 | 解封装函数简介 | 查找码流标号和码流参数信息 | 使用 MediaInfo 分析视频文件 )

文章目录 一、解封装1、封装与解封装流程2、解封装 常用函数 二、解封装函数简介1、avformat_alloc_context 函数2、avformat_free_context 函数3、avformat_open_input 函数4、avformat_close_input 函数5、avformat_find_stream_info 函数6、av_read_frame 函数7、avformat_s…

Nginx(Linux之Ubuntu)

1.1.什么是Nginx Nginx&#xff08;发音为"engine x"&#xff09;是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年&#xff0c;如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名&#xff0c;适用于…

使用Docker启用MySQL8.0.11

目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制&#xff08;COPY和ADD指令&#xff09; 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…

【微信小程序开发 - 3】:项目组成介绍

文章目录 项目组成介绍项目的基本组成结构小程序页面的组成部分JSON配置文件的作用app.json文件project.config.json文件sitemap.json文件页面的 .json 配置文件新建小程序页面修改项目首页 XWML模板XWML 和 HTML 的区别 WXSS样式WXSS 和 CSS 的区别 .js文件 项目组成介绍 项目…

springboot的项目创建和常用注解

创建springboot项目&#xff1a; 首先更改一下url&#xff0c;点击小齿轮改成https://start.aliyun.com/ 首先在选模块的时候选上SpringWeb&#xff0c;然后jdk1.8对应的springboot版本是2.6.13或者2.7.6 pom.xml: 用1.8的jdk&#xff0c;mybatis的包版本不能太高 <!-- …

flask_socketio 以继承 Namespace方式实现一个网页聊天应用

点击进入上一篇&#xff0c;可作为参考 实验环境 python 用的是3.11.11 其他环境可以通过这种方式一键安装&#xff1a; pip install flask3.1.0 Flask-SocketIO5.4.1 gevent-websocket0.10.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip list 详情如下&am…

笔记本重装系统教程【详细教程】

一、装机前说明 各位有装机需求的伙伴&#xff0c;请根据自己的电脑配置选择合适操作系统&#xff0c;可以实现自己装机的伙伴&#xff0c;相信大家这点可以确认好。 ———————————————————————— 我的配置&#xff1a; 我的电脑是联想拯救者lenovoY7000…

uniapp入门 01创建项目模版

0安装 hbuilder x 标准版 1.创建模版工程 2.创建官方 案例工程 index.uvuewen 文件解析 <!-- 模版 标签 --> <template><view></view></template><!-- 脚本 --> <script>export default {data() {return {}},onLoad() {},methods:…

ARCGIS国土超级工具集1.2更新说明

ARCGIS国土超级工具集V1.2版本&#xff0c;功能已增加至47 个。在V1.1的基础上修复了若干使用时发现的BUG&#xff0c;新增了"矢量分割工具"菜单&#xff0c;同时增加及更新了了若干功能&#xff0c;新工具使用说明如下&#xff1a; 一、勘测定界工具栏更新界址点成果…

Vue3源码笔记阅读1——Ref响应式原理

本专栏主要用于记录自己的阅读源码的过程,希望能够加深自己学习印象,也欢迎读者可以帮忙完善。接下来每一篇都会从定义、运用两个层面来进行解析 定义 运用 例子:模板中访问ref(1) <template><div>{{str}}</div> </template> <script> impo…

[react] 优雅解决typescript动态获取redux仓库的类型问题

store.getState()是可以获取总仓库的 先拿到函数的类型 再用ReturnType<T> 它是 TypeScript 中的一个内置条件类型&#xff0c;用于获取某个函数类型 T 的返回值类型 代码 // 先拿总仓库的函数类型type StatefuncType typeof store.getState;//再拿函数类型T的返回值类…

【Qt】QWidget中的常见属性及其功能(一)

目录 一、 enabled 例子&#xff1a; 二、geometry 例子&#xff1a; window fram 例子 &#xff1a; 四、windowTiltle 五、windowIcon 例子&#xff1a; qrc机制 创建qrc文件 例子&#xff1a; qt中的很多内置类都是继承自QWidget的&#xff0c;因此熟悉QWidget的…