mixdashboards 1.0.12 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +230 -51
- package/dist/mixdashboards.cjs +252 -252
- package/dist/mixdashboards.css +1 -1
- package/dist/mixdashboards.js +69369 -67840
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/mixdashboards)
|
|
6
6
|
[](https://github.com/mixlinker/mixdashboards/blob/main/LICENSE)
|
|
7
7
|
|
|
8
|
-
MixDashboards -
|
|
8
|
+
**MixDashboards** - 新一代企业级可视化大屏组件库
|
|
9
9
|
|
|
10
10
|
专为工业物联网和数据可视化场景设计的 Vue 3 组件库
|
|
11
11
|
|
|
@@ -15,12 +15,13 @@ MixDashboards - 新一代企业级可视化组件库
|
|
|
15
15
|
|
|
16
16
|
## ✨ 特性
|
|
17
17
|
|
|
18
|
-
- 🎯 **开箱即用** -
|
|
18
|
+
- 🎯 **开箱即用** - 内置 70+ 图表和可视化组件
|
|
19
19
|
- 🚀 **实时数据** - 基于 WebSocket 的实时数据推送
|
|
20
20
|
- 🎨 **高度可定制** - 灵活的配置系统,满足各种业务需求
|
|
21
|
-
- 📱 **响应式设计** -
|
|
21
|
+
- 📱 **响应式设计** - 完美适配桌面和大屏展示(自动缩放)
|
|
22
22
|
- 🔧 **Vue 3 + TypeScript** - 基于最新技术栈构建
|
|
23
23
|
- 🌐 **多场景支持** - Pro、Show、App、Pad 四种展示模式
|
|
24
|
+
- 📦 **图层系统** - 支持多图层叠加,灵活控制组件层级
|
|
24
25
|
|
|
25
26
|
---
|
|
26
27
|
|
|
@@ -28,24 +29,29 @@ MixDashboards - 新一代企业级可视化组件库
|
|
|
28
29
|
|
|
29
30
|
```bash
|
|
30
31
|
# 使用 npm
|
|
31
|
-
npm install mixdashboards
|
|
32
|
+
npm install mixdashboards
|
|
32
33
|
|
|
33
34
|
# 使用 pnpm
|
|
34
|
-
pnpm add mixdashboards
|
|
35
|
+
pnpm add mixdashboards
|
|
35
36
|
|
|
36
37
|
# 使用 yarn
|
|
37
|
-
yarn add mixdashboards
|
|
38
|
+
yarn add mixdashboards
|
|
38
39
|
```
|
|
39
40
|
|
|
40
|
-
###
|
|
41
|
+
### 必需的依赖
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
- Element Plus 2.11+
|
|
43
|
+
mixdashboards 需要以下 peer dependencies:
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install vue@^3.5.0
|
|
46
|
+
npm install vue@^3.5.0 echarts@^5.6.0 three@^0.180.0
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
| 依赖 | 版本 | 说明 |
|
|
50
|
+
|------|------|------|
|
|
51
|
+
| `vue` | ^3.5.0 | Vue 3 核心框架 |
|
|
52
|
+
| `echarts` | ^5.6.0 | 图表渲染引擎 |
|
|
53
|
+
| `three` | ^0.180.0 | 3D 可视化支持 |
|
|
54
|
+
|
|
49
55
|
---
|
|
50
56
|
|
|
51
57
|
## 🚀 快速开始
|
|
@@ -145,12 +151,84 @@ app.mount('#app')
|
|
|
145
151
|
|
|
146
152
|
---
|
|
147
153
|
|
|
148
|
-
###
|
|
154
|
+
### MixDesignShow - 大屏展示版 ⭐
|
|
155
|
+
|
|
156
|
+
全屏只读展示模式,专为大屏展示场景设计。**自动缩放适配任意分辨率屏幕**。
|
|
149
157
|
|
|
150
|
-
|
|
158
|
+
**Props**
|
|
159
|
+
|
|
160
|
+
| 属性 | 类型 | 默认值 | 必填 | 说明 |
|
|
161
|
+
|------|------|--------|------|------|
|
|
162
|
+
| `script` | `Object` | - | ✅ | 仪表盘配置对象 |
|
|
163
|
+
| `uid` | `String` | - | ❌ | 唯一标识符 |
|
|
164
|
+
| `enableWebSocket` | `Boolean` | `true` | ❌ | 是否启用 WebSocket 实时数据 |
|
|
165
|
+
|
|
166
|
+
**完整使用示例**
|
|
151
167
|
|
|
152
168
|
```vue
|
|
153
|
-
<
|
|
169
|
+
<template>
|
|
170
|
+
<MixDesignShow :script="dashboardData" />
|
|
171
|
+
</template>
|
|
172
|
+
|
|
173
|
+
<script setup>
|
|
174
|
+
import { MixDesignShow } from 'mixdashboards'
|
|
175
|
+
import 'mixdashboards/style'
|
|
176
|
+
|
|
177
|
+
const dashboardData = {
|
|
178
|
+
"dashboard": [{
|
|
179
|
+
"name": "生产监控大屏",
|
|
180
|
+
"id": "SHOW001",
|
|
181
|
+
"type": "show",
|
|
182
|
+
"version": "3.0.0",
|
|
183
|
+
"sheets": [{
|
|
184
|
+
"name": "主页面",
|
|
185
|
+
"id": "sheet_001",
|
|
186
|
+
"col": 100,
|
|
187
|
+
"screenWidth": 1920,
|
|
188
|
+
"screenHeight": 1080,
|
|
189
|
+
"background": "defaultBg1",
|
|
190
|
+
"layers": [
|
|
191
|
+
{
|
|
192
|
+
"id": "layer_001",
|
|
193
|
+
"name": "图层 1",
|
|
194
|
+
"visible": true,
|
|
195
|
+
"opacity": 100,
|
|
196
|
+
"order": 0,
|
|
197
|
+
"components": [
|
|
198
|
+
{
|
|
199
|
+
"x": 4, "y": 8, "w": 39, "h": 48,
|
|
200
|
+
"i": "001",
|
|
201
|
+
"type": "pie",
|
|
202
|
+
"id": "pie_001",
|
|
203
|
+
"name": "饼状图",
|
|
204
|
+
"options": {
|
|
205
|
+
"titleColor": "#111",
|
|
206
|
+
"bgColor": "#fff"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"id": "layer_002",
|
|
213
|
+
"name": "图层 2",
|
|
214
|
+
"visible": true,
|
|
215
|
+
"opacity": 100,
|
|
216
|
+
"order": 1,
|
|
217
|
+
"components": [
|
|
218
|
+
{
|
|
219
|
+
"x": 50, "y": 30, "w": 45, "h": 50,
|
|
220
|
+
"i": "002",
|
|
221
|
+
"type": "circleBar",
|
|
222
|
+
"id": "circleBar_002",
|
|
223
|
+
"name": "环形图"
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
}]
|
|
229
|
+
}]
|
|
230
|
+
}
|
|
231
|
+
</script>
|
|
154
232
|
```
|
|
155
233
|
|
|
156
234
|
---
|
|
@@ -219,32 +297,84 @@ localStorage.setItem('user', JSON.stringify({
|
|
|
219
297
|
}
|
|
220
298
|
```
|
|
221
299
|
|
|
222
|
-
## 配置结构
|
|
300
|
+
## 📋 配置结构
|
|
301
|
+
|
|
302
|
+
### 完整配置示例
|
|
223
303
|
|
|
224
304
|
```typescript
|
|
225
305
|
interface DashboardConfig {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
306
|
+
dashboard: [{
|
|
307
|
+
name: string // 仪表盘名称
|
|
308
|
+
id: string // 唯一ID
|
|
309
|
+
type: 'pro' | 'show' // 类型:pro=专业版, show=展示版
|
|
310
|
+
version: string // 版本号
|
|
311
|
+
sheets: Sheet[] // 页面列表
|
|
312
|
+
currentPage?: number // 当前页码
|
|
313
|
+
}]
|
|
231
314
|
}
|
|
232
315
|
|
|
233
316
|
interface Sheet {
|
|
234
|
-
name: string
|
|
235
|
-
|
|
236
|
-
|
|
317
|
+
name: string // 页面名称
|
|
318
|
+
id: string // 页面ID
|
|
319
|
+
col: number // 列数(推荐 100)
|
|
320
|
+
screenWidth: number // 设计宽度(如 1920)
|
|
321
|
+
screenHeight: number // 设计高度(如 1080)
|
|
322
|
+
background?: string // 背景:颜色值或 'defaultBg1'/'defaultBg2'
|
|
323
|
+
layers: Layer[] // 图层列表
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
interface Layer {
|
|
327
|
+
id: string // 图层ID
|
|
328
|
+
name: string // 图层名称
|
|
329
|
+
visible: boolean // 是否可见
|
|
330
|
+
opacity: number // 透明度 0-100
|
|
331
|
+
order: number // 层级顺序(数字越大越靠上)
|
|
332
|
+
locked?: boolean // 是否锁定
|
|
333
|
+
components: Component[] // 该图层的组件列表
|
|
237
334
|
}
|
|
238
335
|
|
|
239
336
|
interface Component {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
337
|
+
x: number // X 坐标(网格单位)
|
|
338
|
+
y: number // Y 坐标(网格单位)
|
|
339
|
+
w: number // 宽度(网格单位)
|
|
340
|
+
h: number // 高度(网格单位)
|
|
341
|
+
i: string // 唯一标识
|
|
342
|
+
id: string // 组件ID
|
|
343
|
+
type: string // 组件类型(如 'bar', 'line', 'pie' 等)
|
|
344
|
+
name: string // 组件名称
|
|
345
|
+
options?: object // 组件配置项
|
|
346
|
+
data?: DataItem[] // 数据配置
|
|
347
|
+
common?: CommonConfig // 通用配置(数据源)
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
interface DataItem {
|
|
351
|
+
fv: string // 字段变量名
|
|
352
|
+
name: string // 显示名称
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
interface CommonConfig {
|
|
356
|
+
object_id: string // 数据对象ID
|
|
245
357
|
}
|
|
246
358
|
```
|
|
247
359
|
|
|
360
|
+
### 图层系统说明
|
|
361
|
+
|
|
362
|
+
图层按 `order` 值从小到大渲染,`order` 值大的图层显示在上层:
|
|
363
|
+
|
|
364
|
+
```
|
|
365
|
+
┌─────────────────────────────┐
|
|
366
|
+
│ 图层2 (order: 1) - 最上层 │
|
|
367
|
+
│ ┌─────────────────┐ │
|
|
368
|
+
│ │ 环形图 │ │
|
|
369
|
+
│ └─────────────────┘ │
|
|
370
|
+
├─────────────────────────────┤
|
|
371
|
+
│ 图层1 (order: 0) - 底层 │
|
|
372
|
+
│ ┌─────────────────┐ │
|
|
373
|
+
│ │ 饼状图 │ │
|
|
374
|
+
│ └─────────────────┘ │
|
|
375
|
+
└─────────────────────────────┘
|
|
376
|
+
```
|
|
377
|
+
|
|
248
378
|
---
|
|
249
379
|
|
|
250
380
|
## 💡 开发模式
|
|
@@ -265,18 +395,50 @@ interface Component {
|
|
|
265
395
|
|
|
266
396
|
---
|
|
267
397
|
|
|
268
|
-
## 🎨
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
398
|
+
## 🎨 支持的组件类型
|
|
399
|
+
|
|
400
|
+
### 📊 图表类组件
|
|
401
|
+
|
|
402
|
+
| 类型 | 名称 | 说明 |
|
|
403
|
+
|------|------|------|
|
|
404
|
+
| `bar` | 柱状图 | 横向/纵向柱状图 |
|
|
405
|
+
| `line` | 折线图 | 单线/多线趋势图 |
|
|
406
|
+
| `pie` | 饼图 | 饼图/扇形图 |
|
|
407
|
+
| `circleBar` | 环形图 | 环形进度图 |
|
|
408
|
+
| `gauge` | 仪表盘 | 仪表盘图表 |
|
|
409
|
+
| `scatter` | 散点图 | 散点分布图 |
|
|
410
|
+
| `radar` | 雷达图 | 多维数据对比 |
|
|
411
|
+
| `funnel` | 漏斗图 | 转化率分析 |
|
|
412
|
+
| `raceBar` | 竞赛条图 | 动态排名图 |
|
|
413
|
+
|
|
414
|
+
### 🔢 数据展示组件
|
|
415
|
+
|
|
416
|
+
| 类型 | 名称 | 说明 |
|
|
417
|
+
|------|------|------|
|
|
418
|
+
| `number` | 数字 | 大数字展示 |
|
|
419
|
+
| `table` | 表格 | 数据表格 |
|
|
420
|
+
| `list` | 列表 | 滚动列表 |
|
|
421
|
+
| `progress` | 进度条 | 进度展示 |
|
|
422
|
+
| `rank` | 排名 | 排行榜 |
|
|
423
|
+
|
|
424
|
+
### 🎥 媒体组件
|
|
425
|
+
|
|
426
|
+
| 类型 | 名称 | 说明 |
|
|
427
|
+
|------|------|------|
|
|
428
|
+
| `video` | 视频 | 视频播放/RTMP推流 |
|
|
429
|
+
| `audio` | 音频 | 音频播放器 |
|
|
430
|
+
| `image` | 图片 | 图片展示 |
|
|
431
|
+
| `fileViewer` | 文件查看器 | PDF/Office 预览 |
|
|
432
|
+
|
|
433
|
+
### �️ 其他组件
|
|
434
|
+
|
|
435
|
+
| 类型 | 名称 | 说明 |
|
|
436
|
+
|------|------|------|
|
|
437
|
+
| `clock` | 时钟 | 时间显示 |
|
|
438
|
+
| `text` | 文本 | 富文本展示 |
|
|
439
|
+
| `border` | 边框 | 装饰边框 |
|
|
440
|
+
| `map` | 地图 | 地理数据可视化 |
|
|
441
|
+
| `model3d` | 3D模型 | Three.js 3D展示 |
|
|
280
442
|
|
|
281
443
|
---
|
|
282
444
|
|
|
@@ -287,34 +449,51 @@ interface Component {
|
|
|
287
449
|
确保导入了样式文件:
|
|
288
450
|
|
|
289
451
|
```typescript
|
|
452
|
+
import 'mixdashboards/style'
|
|
453
|
+
// 或者
|
|
290
454
|
import 'mixdashboards/dist/mixdashboards.css'
|
|
291
|
-
import 'element-plus/dist/index.css'
|
|
292
455
|
```
|
|
293
456
|
|
|
294
|
-
### 2.
|
|
457
|
+
### 2. ECharts 报错 "Can't get DOM width or height"?
|
|
458
|
+
|
|
459
|
+
这是因为容器在 ECharts 初始化时还没有尺寸。MixDesignShow 组件已内置处理,确保:
|
|
460
|
+
- 父容器有明确的宽高
|
|
461
|
+
- 或者使用 MixDesignShow(会自动全屏)
|
|
462
|
+
|
|
463
|
+
### 3. WebSocket 连接失败?
|
|
295
464
|
|
|
296
465
|
检查以下几点:
|
|
297
466
|
1. 确保设置了 `enableWebSocket="true"`
|
|
298
|
-
2. 确保 localStorage 中有用户 token
|
|
299
|
-
|
|
467
|
+
2. 确保 localStorage 中有用户 token:
|
|
468
|
+
```javascript
|
|
469
|
+
localStorage.setItem('user', JSON.stringify({ token: 'xxx' }))
|
|
470
|
+
```
|
|
471
|
+
3. 检查后端 WebSocket 服务是否正常
|
|
300
472
|
|
|
301
|
-
###
|
|
473
|
+
### 4. 图表不显示数据?
|
|
302
474
|
|
|
303
475
|
确保配置中包含:
|
|
304
476
|
- `common.object_id` - 数据对象ID
|
|
305
477
|
- `data[].fv` - 数据字段名
|
|
306
478
|
|
|
307
|
-
###
|
|
308
|
-
|
|
309
|
-
可以通过 CSS 变量覆盖默认样式:
|
|
479
|
+
### 5. 大屏显示比例不对?
|
|
310
480
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
481
|
+
检查 Sheet 配置中的 `screenWidth` 和 `screenHeight` 是否正确设置:
|
|
482
|
+
```javascript
|
|
483
|
+
{
|
|
484
|
+
"screenWidth": 1920,
|
|
485
|
+
"screenHeight": 1080,
|
|
486
|
+
"col": 100
|
|
315
487
|
}
|
|
316
488
|
```
|
|
317
489
|
|
|
490
|
+
### 6. 缺少依赖报错?
|
|
491
|
+
|
|
492
|
+
确保安装了所有必需的 peer dependencies:
|
|
493
|
+
```bash
|
|
494
|
+
npm install vue echarts three
|
|
495
|
+
```
|
|
496
|
+
|
|
318
497
|
---
|
|
319
498
|
|
|
320
499
|
## 🔗 相关链接
|