开发指南

news/2025/11/26 21:45:11/文章来源:https://www.cnblogs.com/znlgis/p/19274734

Vue3 大屏可视化平台开发指南

一、自定义开发

1. 添加新图表

步骤一:创建图表组件

src/components/charts/ 目录下创建新组件:

<!-- src/components/charts/MyChart.vue -->
<template><div ref="chartRef" class="my-chart"></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import * as echarts from 'echarts'
import { getCommonChartOption } from '@/utils'const chartRef = ref(null)
let chartInstance = nullconst initChart = () => {if (!chartRef.value) returnchartInstance = echarts.init(chartRef.value)const option = {...getCommonChartOption(),xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: 'bar'}]}chartInstance.setOption(option)
}onMounted(() => {initChart()window.addEventListener('resize', chartInstance.resize)
})onUnmounted(() => {window.removeEventListener('resize', chartInstance.resize)chartInstance?.dispose()
})
</script><style scoped>
.my-chart {width: 100%;height: 300px;
}
</style>

步骤二:在页面中使用

<script setup>
import MyChart from '@/components/charts/MyChart.vue'
</script><template><ChartCard title="我的图表"><MyChart /></ChartCard>
</template>

2. 修改主题样式

修改主题配色

编辑 src/config/theme.config.js

export const THEME_CONFIG = {primaryColor: '#2C58A6',      // 主色调backgroundColor: '#001d58',    // 背景色cardBgColor: '#034c6a',       // 卡片背景色borderColor: '#2C58A6',       // 边框颜色textColor: '#ffffff',         // 文字颜色chartColors: [                // 图表颜色系列'#5490CB', '#63B2EE', '#76DA91', '#F8CB7F', '#F89588', '#7CD6CF','#9192AB', '#7898E1', '#EFA666']
}

修改全局样式

编辑 src/assets/styles/global.scss

// 自定义变量
$primary-color: #2C58A6;
$background-color: #001d58;// 全局样式
body {background-color: $background-color;color: #ffffff;
}// 卡片样式
.card {background-color: rgba(3, 76, 106, 0.8);border: 1px solid $primary-color;border-radius: 4px;
}

3. 添加新功能模块

创建 Composable

// src/composables/useMyFeature.js
import { ref, onMounted, onUnmounted } from 'vue'export function useMyFeature() {const data = ref([])const loading = ref(false)const error = ref(null)let timer = nullconst fetchData = async () => {loading.value = truetry {// 获取数据逻辑const response = await fetch('/api/data')data.value = await response.json()} catch (e) {error.value = e} finally {loading.value = false}}const startAutoUpdate = (interval = 5000) => {timer = setInterval(fetchData, interval)}const stopAutoUpdate = () => {if (timer) {clearInterval(timer)timer = null}}onMounted(() => {fetchData()startAutoUpdate()})onUnmounted(() => {stopAutoUpdate()})return {data,loading,error,fetchData,startAutoUpdate,stopAutoUpdate}
}

在组件中使用

<script setup>
import { useMyFeature } from '@/composables/useMyFeature'const { data, loading, error, fetchData } = useMyFeature()
</script><template><div v-if="loading">加载中...</div><div v-else-if="error">{{ error.message }}</div><div v-else><!-- 显示数据 --></div>
</template>

二、接入真实数据

1. 创建 API 服务

// src/api/index.js
import axios from 'axios'const api = axios.create({baseURL: import.meta.env.VITE_API_BASE_URL || '/api',timeout: 10000
})// 请求拦截器
api.interceptors.request.use(config => {// 添加 token 等const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}return config
})// 响应拦截器
api.interceptors.response.use(response => response.data,error => {console.error('API Error:', error)return Promise.reject(error)}
)export default api// 具体接口
export const getStatistics = () => api.get('/statistics')
export const getPersonnelList = () => api.get('/personnel')
export const getChartData = (type) => api.get(`/chart/${type}`)

2. 替换模拟数据

修改 src/views/Dashboard.vue

<script setup>
import { ref, onMounted } from 'vue'
import { getStatistics, getChartData } from '@/api'const statistics = ref([])
const chartData = ref({})onMounted(async () => {// 替换 mock 数据为真实 API 调用statistics.value = await getStatistics()chartData.value = await getChartData('monthly')
})
</script>

3. 配置环境变量

创建 .env.local 文件:

VITE_API_BASE_URL=http://your-api-server.com/api

三、扩展地图功能

1. 添加自定义图层

// 添加标注图层
const addMarkerLayer = (map, markers) => {markers.forEach(marker => {const markerObj = new T.Marker(new T.LngLat(marker.lng, marker.lat),{icon: new T.Icon({iconUrl: marker.iconUrl,iconSize: new T.Point(24, 24)})})// 添加点击事件markerObj.addEventListener('click', () => {handleMarkerClick(marker)})map.addOverLay(markerObj)})
}

2. 添加信息窗口

const showInfoWindow = (map, position, content) => {const infoWindow = new T.InfoWindow(content, {closeButton: true,autoPan: true})map.openInfoWindow(infoWindow, new T.LngLat(position.lng, position.lat))
}

3. 添加绘制功能

// 绘制多边形
const drawPolygon = (map, points) => {const polygon = new T.Polygon(points.map(p => new T.LngLat(p.lng, p.lat)),{color: '#2C58A6',weight: 2,opacity: 0.8,fillColor: '#2C58A6',fillOpacity: 0.3})map.addOverLay(polygon)return polygon
}

四、测试与调试

1. 性能调试

// 使用性能监控
import { usePerformanceMonitor } from '@/composables/usePerformanceMonitor'const { fps, memoryUsage, performanceWarnings, getPerformanceReport } = usePerformanceMonitor()// 打印性能报告
console.log(getPerformanceReport())

2. 日志调试

import { logDebug, logInfo, PerformanceTimer } from '@/utils/logger'// 详细日志(仅开发环境)
logDebug('详细调试信息', someData)// 性能计时
const timer = new PerformanceTimer('数据处理')
// ... 处理逻辑
timer.end() // 输出耗时

3. 关闭生产环境日志

src/config/dashboard.config.js 中配置:

logging: {enableConsoleLog: import.meta.env.DEV,  // 仅开发环境启用logLevel: import.meta.env.DEV ? 'debug' : 'error'
}

五、最佳实践

1. 组件设计原则

  • 单一职责 - 每个组件只负责一个功能
  • 可复用性 - 通过 props 和 events 实现组件复用
  • 解耦合 - 使用 Composables 分离业务逻辑

2. 性能优化建议

  • 使用 v-show 替代频繁切换的 v-if
  • 大列表使用虚拟滚动
  • 图表组件按需销毁
  • 合理使用缓存

3. 代码规范

  • 使用 ESLint 进行代码检查
  • 遵循 Vue3 官方风格指南
  • 组件命名使用 PascalCase
  • 文件命名使用 kebab-case 或 PascalCase

六、学习资源

  • Vue 3 官方文档
  • Element Plus 组件库
  • ECharts 图表库
  • Vite 构建工具
  • 天地图 API
  • 和风天气 API

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day25CSS精灵

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

解码JSON

JSON 核心概念 JSON(JavaScript Object Notation)是 “JavaScript 对象表示法” 的简称,是一种轻量级数据交换文本格式,不依赖任何编程语言。它具有简洁清晰的层次结构,易于人类阅读编写,同时便于机器解析和生成…

项目启动

Vue3 大屏可视化平台项目启动 快速启动 开发模式 npm run dev启动后访问 http://localhost:3000 使用脚本快速启动(Windows): # 使用批处理文件 start.bat# 或使用 PowerShell start.ps1生产构建 npm run build构建…

11/26

今天满课,好累

2025-11-26

CF 构造(1300) Problem - 1867C - Codeforces(交互) #include <bits/stdc++.h> using namespace std; #define LL long long const LL mod = 998244353; const int N=2e5+10; int a[N];void solve() {int n;…

关于生育问题的初步看法

生育问题,即现代社会面对的,结婚率、生育率逐渐或断崖式下降的现象。 个人看法,生育问题已经涉及到现代社会的根基,即资本。 无论是工业时代的工业化、还是现代社会金融爆发,本质都是资本的不断升级,而资本升级能…

游戏立项games-stats,查询游戏tag的销量,以卡牌游戏举例

有这样一个网站叫,https://games-stats.com/ 这个网站可以查询steam上面的不同的游戏tag,他们的中位数销量是如何的 进去这个网站,然后按照如图的点击方式 首先 Games Count 数量是小于1000的,就不用看了,一般是一…

深入解析:Vue2.x + Webpack + ES6仿懂球帝足球项目实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月砝码,无磁不锈钢砝码,定制砝码厂家推荐:行业权威盘点与品质红榜发布

引言在全球工业生产与科研实验中,砝码作为重要的计量器具,其精度和质量直接影响着测量结果的准确性。为了能为广大用户筛选出优质的砝码厂家,国际知名的计量协会开展了一场全面且严格的测评活动。本次测评综合考量了…

2025年11月不锈钢砝码,无磁不锈钢砝码,挂钩砝码厂家推荐,高精度与可靠性兼具的优质品牌

引言在全球工业生产、科研实验以及质量检测等众多领域,砝码作为重要的计量器具,其精度和质量至关重要。为了能给广大用户筛选出优质的砝码厂家,国际知名的计量协会开展了一场严谨且全面的测评活动。该协会采用了多维…

上下文无关文法序列

import torch import torch.nn as nn import torch.optim as optim import numpy as np def generate_data(num_samples): data = [] for _ in range(num_samples): n = 30 # 固定n为30 seq = [0]n + [1]n data.appen…

生产事故救火指南:Kafka 消息积压了怎么办?如何保证数据一条不丢?

生产事故救火指南:Kafka 消息积压了怎么办?如何保证数据一条不丢?生产事故救火指南:Kafka 消息积压了怎么办?如何保证数据一条不丢?摘要:在大数据与微服务架构中,消息队列(MQ)是血管,数据是血液。但血管会堵…

ARCGIS Pro 绘图技巧——水文站的尖尖垂直于河流的水流方向

一、目标:把水文站的图标设置为随河流流向变化二、实现方法思路 1、把河流截断成尽量短的河段 2、计算各小河段的“线段平均方向” 3、对水文站、各小河段进行空间邻近分析,进行就近匹配 4、根据匹配结果进行属性表链…

优美的字符串

Problem Description 小X对字符串十分感兴趣。 对于一个只有0和1的字符串S,小X称其为优美的,当且仅当这个字符串最终可以通过不断的做下面的操 作变成"1":选择一个奇数 \(i(3 \le i \le |S|)\)。 将字符串…

【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 31 章 WIFI 实验-华为 IoTDA 设备接入 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月不锈钢砝码,铸铁砝码,定制砝码厂家推荐,实力品牌深度解析采购无忧之选!

引言在全球工业生产与科研实验领域,砝码作为关键的计量器具,其精度与质量直接影响着各类测量结果的准确性。为了给全球用户提供客观、公正的砝码厂家参考,国际权威计量协会开展了一项全面的测评活动。该协会联合了多…

OpenHarmony与ArkUI-X的跨平台开发环境搭建细节版

OpenHarmony与ArkUI-X的跨平台开发环境搭建细节版 安装所有一切东西, 尽可能安装在英文路径位置下, 尽可能使用默认路径位置, 尽可能使用英文账户名,这样默认安装时,路径就符合上述要求,可以避免奇奇怪怪的问题 正…

五分钟教你学会MarkDown语法 - echo

MarkDown语法 推荐文本编辑器:Typora 文件后缀 xxx.md 标题 使用一个#号加空格就是一级标题 一级标题 使用两个#号加空格是二级标题 二级标题 以此类推三个#号就是三级标题甚至更多 字体样式使用 * 号可以实现字体的加…

Linux命令行与Shell脚本编程大全笔记

Linux命令行与Shell脚本编程大全笔记Linux Linux可划分为四部分: 1. Linux内核 2. GNU工具 3. 图形化桌面环境 4. 应用软件 Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件, 并根…

OpenHarmony与ArkUI-X的跨平台开发环境搭建速通版

OpenHarmony与ArkUI-X的跨平台开发环境搭建速通版 ‍ 该文档于时间20251125编写, 是Windows端, 特定版本的OpenHarmony使用ArkUI-X框架跨平台开发 默认会了一些基础常识,直接操作不解释,有需要看详细版 默认会了一…