当前位置:   article > 正文

基于vue的可视化大屏_vue大屏可视化模板

vue大屏可视化模板

 

 要提前准备一个xinyang.json文件

可以在这个网站下载

DataV.GeoAtlas地理小工具系列 (aliyun.com)

 代码结构

总框架代码:

  1. <template>
  2. <div>
  3. <div class="center">
  4. <center-left />
  5. <center-map />
  6. <center-right />
  7. </div>
  8. <div class="bottom"></div>
  9. </div>
  10. </template>
  11. <script>
  12. import centerLeft from "./components/centerLeft.vue";
  13. import centerRight from "./components/centerRight.vue";
  14. import centerMap from "./components/centerMap.vue";
  15. export default {
  16. components: { centerMap, centerLeft, centerRight },
  17. };
  18. </script>
  19. <style lang="scss" scoped>
  20. .center {
  21. display: flex;
  22. justify-content: space-between;
  23. }
  24. .bottom {
  25. display: flex;
  26. justify-content: space-between;
  27. align-items: center;
  28. margin-top: 30px;
  29. }
  30. </style>

中心map,2D地图

模板部分(<template>

  • 整体布局使用了一个 div 元素 class="content" 作为容器。
  • 容器内包含一个 heat-map-echarts 组件,设置了高度为 580px,宽度为 680px
  • 接着是一个包含子元素的 div ,其中有一个自定义的 dv-border-box-7 组件,内部包含一个标题 h2 和一个 Echart 组件。

脚本部分(<script>

  • 导入了两个组件:Echart 和 heatMapEcharts
  • data 函数中定义了一个名为 options1 的对象,用于配置 Echart 组件的选项。
    • xAxis 配置了轴的类型和最大值。
    • yAxis 配置了轴的类型、数据、反转、动画时长和显示的最大条数。
    • series 配置了图表的类型为柱状图,数据、实时排序、标签等相关属性。
    • 还配置了图例、动画时长、缓动效果等。
  • 在 components 中注册了导入的两个组件。

样式部分(<style scoped>

  • 为 .content 类设置了 Flex 布局,使其内容在垂直和水平方向上居中。
  • 为 .title 类设置了上下边距。

总体来说,这段代码是一个 Vue 组件的模板、脚本和样式的组合,主要用于展示一个热图组件和一个柱状图组件,并对其进行了相应的配置和布局设置。

中心map

  1. <template>
  2. <div class="content"> <!-- 定义一个名为 content 的 div 容器 -->
  3. <heat-map-echarts height="580px" width="680px" /> <!-- 引入 heat-map-echarts 组件,并设置高度和宽度 -->
  4. <div> <!-- 内部的另一个 div -->
  5. <dv-border-box-7> <!-- 引入自定义的 dv-border-box-7 组件 -->
  6. <h2 class="title">人口排名前五的地区</h2> <!-- 标题元素,显示文本 -->
  7. <Echart :options="options1" height="350px" width="680px" /> <!-- 引入 Echart 组件,并传递 options1 配置,设置高度和宽度 -->
  8. </dv-border-box-7>
  9. </div>
  10. </div>
  11. </template>
  12. <script>
  13. import Echart from "@/common/echart/index.vue"; // 导入 Echart 组件
  14. import heatMapEcharts from "./echarts/heatMapEcharts.vue"; // 导入 heatMapEcharts 组件
  15. export default {
  16. data() { // 定义组件的数据
  17. return {
  18. options1: { // 定义 Echart 的配置选项对象 options1
  19. xAxis: { // x 轴的配置
  20. type: "value", // x 轴类型为数值型
  21. max: "dataMax", // x 轴的最大值设置为 "dataMax"
  22. },
  23. yAxis: { // y 轴的配置
  24. type: "category", // y 轴类型为分类
  25. data: ["平桥区", "浉河区区", "光山县", "罗山县", "新县", "固始县"], // y 轴的数据
  26. inverse: true, // 是否反转
  27. animationDuration: 300, // 动画持续时间
  28. animationDurationUpdate: 300, // 更新动画的持续时间
  29. max: 4, // 只显示最大的 4 个条
  30. },
  31. series: [ // 系列配置
  32. {
  33. realtimeSort: true, // 实时排序
  34. // name: '人口数', // 注释掉的系列名称
  35. type: "bar", // 图表类型为柱状图
  36. // data: [156, 48, 111, 58, 92, 219], // 注释掉的数据
  37. data: ["156", "48", "111", "58", "92", "219"], // 系列的数据
  38. label: { // 标签配置
  39. show: true, // 显示标签
  40. position: "right", // 标签位置在右侧
  41. valueAnimation: true, // 标签值的动画效果
  42. },
  43. },
  44. ],
  45. legend: { // 图例配置
  46. show: true, // 显示图例
  47. },
  48. animationDuration: 1000, // 动画持续时间
  49. animationDurationUpdate: 1000, // 更新动画的持续时间
  50. animationEasing: "linear", // 动画缓动效果为线性
  51. animationEasingUpdate: "linear", // 更新动画的缓动效果为线性
  52. },
  53. };
  54. },
  55. components: { // 注册组件
  56. Echart, // 注册 Echart 组件
  57. heatMapEcharts, // 注册 heatMapEcharts 组件
  58. },
  59. };
  60. </script>
  61. <style scoped>
  62. .content { // 为 content 类设置样式
  63. display: flex; // 启用 Flex 布局
  64. flex-direction: column; // 主轴方向为列
  65. align-items: center; // 水平居中
  66. justify-content: center; // 垂直居中
  67. }
  68. .title { // 为 title 类设置样式
  69. margin-top: 20px; // 顶部外边距 20 像素
  70. margin-bottom: -30px; // 底部外边距 -30 像素
  71. }
  72. </style>

 引入代码heatMapEcharts.vue

  1. <template>
  2. <div :id="id" :class="className" :style="{ height: height, width: width }" />
  3. </template>
  4. <script>
  5. import geoJson from "@/common/map/xinyang.json";
  6. import tdTheme from "@/common/echart/theme.json"; // 引入默认主题
  7. export default {
  8. name: "echart",
  9. props: {
  10. className: {
  11. type: String,
  12. default: "chart",
  13. },
  14. id: {
  15. type: String,
  16. default: "chart",
  17. },
  18. width: {
  19. type: String,
  20. default: "100%",
  21. },
  22. height: {
  23. type: String,
  24. default: "2.5rem",
  25. },
  26. },
  27. data() {
  28. return {
  29. chart: null,
  30. options: {
  31. title: {
  32. text: "信阳市人口密度图 (2024)",
  33. },
  34. tooltip: {
  35. trigger: "item",
  36. formatter: "{b}<br/>{c} (p / km2)",
  37. },
  38. toolbox: {
  39. show: true,
  40. orient: "vertical",
  41. left: "right",
  42. top: "center",
  43. feature: {
  44. dataView: { readOnly: false },
  45. restore: {},
  46. saveAsImage: {},
  47. },
  48. },
  49. visualMap: {
  50. min: 800,
  51. max: 50000,
  52. text: ["High", "Low"],
  53. realtime: false,
  54. calculable: true,
  55. inRange: {
  56. color: ["lightskyblue", "yellow", "orangered"],
  57. },
  58. },
  59. series: [
  60. {
  61. name: "信阳市人口密度",
  62. type: "map",
  63. map: "CQ",
  64. label: {
  65. show: true,
  66. },
  67. data: [
  68. { name: "平桥区", value: 20057.34 },
  69. { name: "浉河区", value: 15477.48 },
  70. { name: "罗山县", value: 31686.1 },
  71. { name: "息县", value: 6992.6 },
  72. { name: "光山县", value: 44045.49 },
  73. { name: "新县", value: 40689.64 },
  74. { name: "潢川县", value: 37659.78 },
  75. { name: "淮滨县", value: 45180.97 },
  76. { name: "商城县", value: 55204.26 },
  77. { name: "固始县", value: 21900.9 }
  78. ],
  79. // 自定义名称映射
  80. nameMap: {},
  81. },
  82. ],
  83. },
  84. };
  85. },
  86. watch: {
  87. options: {
  88. handler(options) {
  89. // 设置true清空echart缓存
  90. this.chart.setOption(options, true);
  91. },
  92. deep: true,
  93. },
  94. },
  95. mounted() {
  96. this.$echarts.registerTheme("tdTheme", tdTheme); // 覆盖默认主题
  97. this.initChart();
  98. },
  99. beforeDestroy() {
  100. this.chart.dispose();
  101. this.chart = null;
  102. },
  103. methods: {
  104. initChart() {
  105. // 初始化echart
  106. this.chart = this.$echarts.init(this.$el, "tdTheme");
  107. this.$echarts.registerMap("CQ", geoJson);
  108. this.chart.setOption(this.options, true);
  109. },
  110. },
  111. };
  112. </script>
  113. <style></style>

 左边left

  1. <template>
  2. <div> <!-- 最外层的 div 容器 -->
  3. <dv-border-box-6 style="padding-top: 20px"> <!-- 自定义的 dv-border-box-6 组件,并设置顶部内边距为 20 像素 -->
  4. <h2 class="title">2010-2024 年信阳市常住人口及增量</h2> <!-- 标题 1 -->
  5. <Echart :options="options1" height="500px" width="600px" /> <!-- 引入 Echart 组件 1,并传递 options1 配置,设置高度和宽度 -->
  6. <h2 class="title">2015-2024 年信阳市人口出生率、死亡率和自然增长率</h2> <!-- 标题 2 -->
  7. <Echart :options="options2" height="350px" width="600px" /> <!-- 引入 Echart 组件 2,并传递 options2 配置,设置高度和宽度 -->
  8. </dv-border-box-6>
  9. </div>
  10. </template>
  11. <script>
  12. import Echart from "@/common/echart/index.vue"; // 导入 Echart 组件
  13. export default {
  14. data() { // 定义组件的数据
  15. return {
  16. options1: { // 第一个 Echart 的配置选项对象 options1
  17. tooltip: { // 提示框配置
  18. trigger: "axis", // 触发类型为坐标轴
  19. axisPointer: { // 坐标轴指示器配置
  20. type: "cross", // 类型为十字准线
  21. crossStyle: { // 十字准线样式
  22. color: "#999", // 颜色为 #999
  23. },
  24. },
  25. },
  26. toolbox: { // 工具栏配置
  27. feature: { // 工具栏功能配置
  28. dataView: { show: true, readOnly: false }, // 数据视图,可显示和编辑
  29. magicType: { show: true, type: ["line", "bar"] }, // 图表类型切换
  30. restore: { show: true }, // 还原配置
  31. saveAsImage: { show: true }, // 保存为图片
  32. },
  33. },
  34. legend: { // 图例配置
  35. data: ["人口", "人口增长率"], // 图例数据
  36. },
  37. xAxis: [ // x 轴配置
  38. {
  39. type: "category", // 类型为分类
  40. data: [ // x 轴数据
  41. "2012",
  42. "2013",
  43. "2014",
  44. "2015",
  45. "2016",
  46. "2017",
  47. "2018",
  48. "2019",
  49. "2020",
  50. "2021",
  51. "2022",
  52. "2023",
  53. "2024",
  54. ],
  55. axisPointer: { // 坐标轴指示器配置
  56. type: "shadow", // 类型为阴影
  57. },
  58. },
  59. ],
  60. yAxis: [ // y 轴配置
  61. {
  62. type: "value", // 数值类型
  63. name: "万人", // y 轴名称
  64. min: 2700, // 最小值
  65. max: 3300, // 最大值
  66. interval: 100, // 间隔
  67. axisLabel: { // y 轴标签配置
  68. formatter: "{value}", // 格式化函数
  69. },
  70. },
  71. {
  72. type: "value", // 数值类型
  73. name: "万人", // y 轴名称
  74. min: 0, // 最小值
  75. max: 70, // 最大值
  76. interval: 10, // 间隔
  77. axisLabel: { // y 轴标签配置
  78. formatter: "{value}", // 格式化函数
  79. },
  80. },
  81. ],
  82. series: [ // 系列配置
  83. {
  84. name: "人口", // 系列名称
  85. type: "bar", // 图表类型为柱状图
  86. tooltip: { // 提示框配置
  87. valueFormatter: function (value) { // 值格式化函数
  88. return value + " 万"; // 返回值加上单位 "万"
  89. },
  90. },
  91. data: [ // 数据
  92. 2920, 2950, 2970, 3010, 3040, 3070, 3110, 3150, 3160, 3190, 3210,
  93. 3220, 3250,
  94. ],
  95. },
  96. {
  97. name: "人口增长率", // 系列名称
  98. type: "line", // 图表类型为折线图
  99. yAxisIndex: 1, // 使用第二个 y 轴
  100. tooltip: { // 提示框配置
  101. valueFormatter: function (value) { // 值格式化函数
  102. return value + " 万人"; // 返回值加上单位 "万人"
  103. },
  104. },
  105. data: [ // 数据
  106. 40.21, 59.81, 30.45, 36.15, 32.45, 26.54, 39.94, 33.55, 19.63,
  107. 24.7, 21.09, 3.5, 4.21,
  108. ],
  109. },
  110. ],
  111. },
  112. options2: { // 第二个 Echart 的配置选项对象 options2
  113. tooltip: { // 提示框配置
  114. trigger: "axis", // 触发类型为坐标轴
  115. },
  116. legend: { // 图例配置
  117. data: ["出生率", "死亡率", "自然增长率"], // 图例数据
  118. },
  119. grid: { // 网格配置
  120. left: "3%", // 左边距
  121. right: "4%", // 右边距
  122. bottom: "3%", // 下边距
  123. containLabel: true, // 包含标签
  124. },
  125. toolbox: { // 工具栏配置
  126. feature: { // 工具栏功能配置
  127. saveAsImage: {}, // 保存为图片
  128. },
  129. },
  130. xAxis: { // x 轴配置
  131. type: "category", // 类型为分类
  132. boundaryGap: false, // 两端不留空白
  133. data: [ // x 轴数据
  134. "2017",
  135. "2018",
  136. "2019",
  137. "2020",
  138. "2021",
  139. "2022",
  140. "2023",
  141. "2024",
  142. ],
  143. },
  144. yAxis: { // y 轴配置
  145. type: "value", // 数值类型
  146. min: -4, // 最小值
  147. max: 14, // 最大值
  148. interval: 2, // 间隔
  149. },
  150. series: [ // 系列配置
  151. {
  152. name: "出生率", // 系列名称
  153. type: "line", // 图表类型为折线图
  154. data: [10.8, 11.9, 11.6, 11.5, 10.5, 7.8, 6.5, 6.0], // 数据
  155. },
  156. {
  157. name: "死亡率", // 系列名称
  158. type: "line", // 图表类型为折线图
  159. data: [7.3, 7.3, 7.4, 7.8, 7.9, 7.9, 8.1, 8.2], // 数据
  160. },
  161. {
  162. name: "自然增长率", // 系列名称
  163. type: "line", // 图表类型为折线图
  164. data: [4, 4.4, 4, 3.8, 3.1, -1, -1.6, -2], // 数据
  165. },
  166. ],
  167. },
  168. };
  169. },
  170. components: { // 注册组件
  171. Echart, // 注册 Echart 组件
  172. },
  173. };
  174. </script>
  175. <style>
  176. .title { // 标题的样式
  177. display: flex; // 启用 Flex 布局
  178. justify-content: center; // 水平居中
  179. margin-bottom: 10px; // 底部外边距 10 像素
  180. }
  181. </style>

 

 右边right

  1. <template>
  2. <div> <!-- 最外层的 div 容器 -->
  3. <dv-border-box-6 style="padding-top: 20px"> <!-- 自定义组件 dv-border-box-6,并设置顶部内边距为 20 像素 -->
  4. <h2 class="title">2010 - 2024 年信阳市常住人口及增量</h2> <!-- 第一个标题 -->
  5. <Echart :options="options1" height="500px" width="600px" /> <!-- 引入 Echart 组件 1,并绑定 options1 配置,设置高度和宽度 -->
  6. <h2 class="title">2015 - 2024 年信阳市人口出生率、死亡率和自然增长率</h2> <!-- 第二个标题 -->
  7. <Echart :options="options2" height="350px" width="600px" /> <!-- 引入 Echart 组件 2,并绑定 options2 配置,设置高度和宽度 -->
  8. </dv-border-box-6>
  9. </div>
  10. </template>
  11. <script>
  12. import Echart from "@/common/echart/index.vue"; // 导入 Echart 组件
  13. export default {
  14. data() { // 定义组件的数据
  15. return {
  16. options1: { // 第一个 Echart 的配置对象
  17. tooltip: { // 提示框配置
  18. trigger: "axis", // 触发方式为坐标轴
  19. axisPointer: { // 坐标轴指针配置
  20. type: "cross", // 指针类型为十字线
  21. crossStyle: { // 十字线样式
  22. color: "#999", // 颜色为 #999
  23. },
  24. },
  25. },
  26. toolbox: { // 工具栏配置
  27. feature: { // 工具栏功能配置
  28. dataView: { show: true, readOnly: false }, // 数据视图功能,可显示且可编辑
  29. magicType: { show: true, type: ["line", "bar"] }, // 图表类型切换功能,可切换为折线图和柱状图
  30. restore: { show: true }, // 恢复功能
  31. saveAsImage: { show: true }, // 保存为图片功能
  32. },
  33. },
  34. legend: { // 图例配置
  35. data: ["人口", "人口增长率"], // 图例数据
  36. },
  37. xAxis: [ // x 轴配置
  38. {
  39. type: "category", // 类型为分类
  40. data: [ // x 轴数据
  41. "2012",
  42. "2013",
  43. "2014",
  44. "2015",
  45. "2016",
  46. "2017",
  47. "2018",
  48. "2019",
  49. "2020",
  50. "2021",
  51. "2022",
  52. "2023",
  53. "2024",
  54. ],
  55. axisPointer: { // 坐标轴指针配置
  56. type: "shadow", // 类型为阴影
  57. },
  58. },
  59. ],
  60. yAxis: [ // y 轴配置
  61. {
  62. type: "value", // 数值类型
  63. name: "万人", // y 轴名称
  64. min: 2700, // 最小值
  65. max: 3300, // 最大值
  66. interval: 100, // 间隔
  67. axisLabel: { // y 轴标签配置
  68. formatter: "{value}", // 格式化函数
  69. },
  70. },
  71. {
  72. type: "value", // 数值类型
  73. name: "万人", // y 轴名称
  74. min: 0, // 最小值
  75. max: 70, // 最大值
  76. interval: 10, // 间隔
  77. axisLabel: { // y 轴标签配置
  78. formatter: "{value}", // 格式化函数
  79. },
  80. },
  81. ],
  82. series: [ // 系列配置
  83. {
  84. name: "人口", // 系列名称
  85. type: "bar", // 图表类型为柱状图
  86. tooltip: { // 提示框配置
  87. valueFormatter: function (value) { // 值格式化函数
  88. return value + " 万"; // 返回值加上 " 万" 单位
  89. },
  90. },
  91. data: [ // 数据
  92. 2920, 2950, 2970, 3010, 3040, 3070, 3110, 3150, 3160, 3190, 3210,
  93. 3220, 3250,
  94. ],
  95. },
  96. {
  97. name: "人口增长率", // 系列名称
  98. type: "line", // 图表类型为折线图
  99. yAxisIndex: 1, // 使用第二个 y 轴
  100. tooltip: { // 提示框配置
  101. valueFormatter: function (value) { // 值格式化函数
  102. return value + " 万人"; // 返回值加上 " 万人" 单位
  103. },
  104. },
  105. data: [ // 数据
  106. 40.21, 59.81, 30.45, 36.15, 32.45, 26.54, 39.94, 33.55, 19.63,
  107. 24.7, 21.09, 3.5, 4.21,
  108. ],
  109. },
  110. ],
  111. },
  112. options2: { // 第二个 Echart 的配置对象
  113. tooltip: { // 提示框配置
  114. trigger: "axis", // 触发方式为坐标轴
  115. },
  116. legend: { // 图例配置
  117. data: ["出生率", "死亡率", "自然增长率"], // 图例数据
  118. },
  119. grid: { // 网格配置
  120. left: "3%", // 左边距为 3%
  121. right: "4%", // 右边距为 4%
  122. bottom: "3%", // 下边距为 3%
  123. containLabel: true, // 包含标签
  124. },
  125. toolbox: { // 工具栏配置
  126. feature: { // 工具栏功能配置
  127. saveAsImage: {}, // 保存为图片功能
  128. },
  129. },
  130. xAxis: { // x 轴配置
  131. type: "category", // 类型为分类
  132. boundaryGap: false, // 两端不留空白
  133. data: [ // x 轴数据
  134. "2017",
  135. "2018",
  136. "2019",
  137. "2020",
  138. "2021",
  139. "2022",
  140. "2023",
  141. "2024",
  142. ],
  143. },
  144. yAxis: { // y 轴配置
  145. type: "value", // 数值类型
  146. min: -4, // 最小值
  147. max: 14, // 最大值
  148. interval: 2, // 间隔
  149. },
  150. series: [ // 系列配置
  151. {
  152. name: "出生率", // 系列名称
  153. type: "line", // 图表类型为折线图
  154. data: [10.8, 11.9, 11.6, 11.5, 10.5, 7.8, 6.5, 6.0], // 数据
  155. },
  156. {
  157. name: "死亡率", // 系列名称
  158. type: "line", // 图表类型为折线图
  159. data: [7.3, 7.3, 7.4, 7.8, 7.9, 7.9, 8.1, 8.2], // 数据
  160. },
  161. {
  162. name: "自然增长率", // 系列名称
  163. type: "line", // 图表类型为折线图
  164. data: [4, 4.4, 4, 3.8, 3.1, -1, -1.6, -2], // 数据
  165. },
  166. ],
  167. },
  168. };
  169. },
  170. components: { // 注册组件
  171. Echart, // 注册 Echart 组件
  172. },
  173. };
  174. </script>
  175. <style>
  176. .title { // 标题的样式
  177. display: flex; // 使用 Flex 布局
  178. justify-content: center; // 水平居中
  179. margin-bottom: 10px; // 底部外边距 10 像素
  180. }
  181. </style>

 最后运行主代码就可以了:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/903906
推荐阅读
相关标签
  

闽ICP备14008679号