207 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 大屏数据模拟接口系统
 | ||
| 
 | ||
| ## 概述
 | ||
| 
 | ||
| 本项目实现了一个完整的大屏数据模拟接口系统,用于替代硬编码的数据,实现数据的动态获取和更新。
 | ||
| 
 | ||
| ## 文件结构
 | ||
| 
 | ||
| ```
 | ||
| src/
 | ||
| ├── api/
 | ||
| │   └── dashboard.ts          # 模拟接口定义和数据
 | ||
| └── views/screen/
 | ||
|     └── mainScreenV1.vue      # 主大屏组件
 | ||
| ```
 | ||
| 
 | ||
| ## 核心功能
 | ||
| 
 | ||
| ### 1. 模拟接口 (`src/api/dashboard.ts`)
 | ||
| 
 | ||
| #### 数据类型定义
 | ||
| - `DashboardData`: 完整的大屏数据结构
 | ||
| - 包含总计数量、园区统计、风险统计、告警数据、超时工单、隐患治理等
 | ||
| 
 | ||
| #### 主要接口
 | ||
| - `getDashboardData()`: 获取初始大屏数据
 | ||
| - `updateDashboardData()`: 获取更新的随机数据(用于动画演示)
 | ||
| - `getAlertDetails(type)`: 获取告警详情数据
 | ||
| - `getParkStatistics()`: 获取园区统计数据
 | ||
| - `getRiskStatistics()`: 获取风险统计数据
 | ||
| - `getHiddenDangerData()`: 获取隐患治理数据
 | ||
| 
 | ||
| ### 2. 主组件集成 (`src/views/screen/mainScreenV1.vue`)
 | ||
| 
 | ||
| #### 数据管理
 | ||
| - 使用 `dashboardData` ref 存储从API获取的完整数据
 | ||
| - 通过 `initDashboardData()` 初始化数据
 | ||
| - 通过 `updateDashboardDataFromAPI()` 定期更新数据
 | ||
| 
 | ||
| #### 图表集成
 | ||
| - 所有图表数据都从 `dashboardData` 获取
 | ||
| - 支持数据更新后的图表自动刷新
 | ||
| - 保持原有的动画效果
 | ||
| 
 | ||
| ## 使用方法
 | ||
| 
 | ||
| ### 1. 初始化数据
 | ||
| 
 | ||
| ```typescript
 | ||
| // 在组件挂载时初始化
 | ||
| onMounted(async () => {
 | ||
|   try {
 | ||
|     await initDashboardData()
 | ||
|     // 初始化图表等其他操作
 | ||
|   } catch (error) {
 | ||
|     console.error('初始化失败:', error)
 | ||
|   }
 | ||
| })
 | ||
| ```
 | ||
| 
 | ||
| ### 2. 定期更新数据
 | ||
| 
 | ||
| ```typescript
 | ||
| // 设置定时器,定期从API获取新数据
 | ||
| setInterval(async () => {
 | ||
|   await updateDashboardDataFromAPI()
 | ||
| }, 15000) // 每15秒更新一次
 | ||
| ```
 | ||
| 
 | ||
| ### 3. 数据绑定
 | ||
| 
 | ||
| ```vue
 | ||
| <template>
 | ||
|   <!-- 使用可选链操作符安全访问数据 -->
 | ||
|   <span>{{ dashboardData?.totalCount || 0 }}</span>
 | ||
|   <span>{{ dashboardData?.alertData.total || 0 }}</span>
 | ||
| </template>
 | ||
| ```
 | ||
| 
 | ||
| ## 数据结构
 | ||
| 
 | ||
| ### DashboardData 接口
 | ||
| 
 | ||
| ```typescript
 | ||
| interface DashboardData {
 | ||
|   totalCount: number                    // 总计数量
 | ||
|   formalEmployeeCount: number           // 正式员工数量
 | ||
|   externalStaffCount: number            // 外协人员数量
 | ||
|   visitorCount: number                  // 访客数量
 | ||
|   
 | ||
|   parkStatistics: {                     // 园区统计
 | ||
|     name: string
 | ||
|     formal: number
 | ||
|     external: number
 | ||
|     visitor: number
 | ||
|   }[]
 | ||
|   
 | ||
|   riskStatistics: {                     // 风险统计
 | ||
|     overdue: number                      // 已逾期
 | ||
|     processed: number                    // 已处理
 | ||
|     pending: number                      // 待排查
 | ||
|     processing: number                   // 处理中
 | ||
|     other: number                        // 其他
 | ||
|   }
 | ||
|   
 | ||
|   alertData: {                          // 告警数据
 | ||
|     total: number
 | ||
|     processed: number
 | ||
|     pending: number
 | ||
|     details: AlertItem[]
 | ||
|   }
 | ||
|   
 | ||
|   timeoutWorkOrders: {                  // 超时工单
 | ||
|     total: number
 | ||
|     details: AlertItem[]
 | ||
|   }
 | ||
|   
 | ||
|   hiddenDangerData: {                   // 隐患治理数据
 | ||
|     general: number                      // 一般隐患
 | ||
|     major: number                        // 重大隐患
 | ||
|     progress: {                          // 处理进度
 | ||
|       overdue: number
 | ||
|       processed: number
 | ||
|       pending: number
 | ||
|       processing: number
 | ||
|     }
 | ||
|     top3Types: {                         // Top3隐患类型
 | ||
|       access: number                     // 门禁
 | ||
|       consumption: number                // 消费
 | ||
|       inspection: number                 // 巡检
 | ||
|     }
 | ||
|     safetyIndex: number                  // 安全指数
 | ||
|   }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ## 优势
 | ||
| 
 | ||
| ### 1. 数据解耦
 | ||
| - 将数据逻辑从组件中分离
 | ||
| - 便于后续替换为真实API
 | ||
| 
 | ||
| ### 2. 类型安全
 | ||
| - 完整的TypeScript类型定义
 | ||
| - 编译时错误检查
 | ||
| 
 | ||
| ### 3. 模拟真实环境
 | ||
| - 模拟网络延迟
 | ||
| - 随机数据生成
 | ||
| - 错误处理机制
 | ||
| 
 | ||
| ### 4. 易于扩展
 | ||
| - 可以轻松添加新的数据字段
 | ||
| - 支持多种数据更新策略
 | ||
| 
 | ||
| ## 替换为真实API
 | ||
| 
 | ||
| 当需要连接真实API时,只需要:
 | ||
| 
 | ||
| 1. 修改 `src/api/dashboard.ts` 中的接口调用
 | ||
| 2. 将模拟数据替换为真实的HTTP请求
 | ||
| 3. 保持接口签名不变
 | ||
| 4. 组件代码无需修改
 | ||
| 
 | ||
| ## 注意事项
 | ||
| 
 | ||
| 1. **数据加载状态**: 建议添加loading状态管理
 | ||
| 2. **错误处理**: 完善错误处理和用户提示
 | ||
| 3. **数据缓存**: 考虑添加数据缓存机制
 | ||
| 4. **性能优化**: 避免频繁的API调用
 | ||
| 
 | ||
| ## 示例
 | ||
| 
 | ||
| ### 添加新的数据字段
 | ||
| 
 | ||
| ```typescript
 | ||
| // 在 DashboardData 接口中添加
 | ||
| interface DashboardData {
 | ||
|   // ... 现有字段
 | ||
|   newField: string
 | ||
| }
 | ||
| 
 | ||
| // 在模拟数据中添加
 | ||
| const mockData: DashboardData = {
 | ||
|   // ... 现有数据
 | ||
|   newField: '示例值'
 | ||
| }
 | ||
| 
 | ||
| // 在组件中使用
 | ||
| <span>{{ dashboardData?.newField || '' }}</span>
 | ||
| ```
 | ||
| 
 | ||
| ### 添加新的API接口
 | ||
| 
 | ||
| ```typescript
 | ||
| // 在 dashboard.ts 中添加
 | ||
| export const getNewData = async (): Promise<string> => {
 | ||
|   await delay(200)
 | ||
|   return '新数据'
 | ||
| }
 | ||
| 
 | ||
| // 在组件中调用
 | ||
| const newData = await getNewData()
 | ||
| ```
 | ||
| 
 | ||
| 这个模拟接口系统为后续的真实API集成提供了良好的基础,同时保持了代码的可维护性和扩展性。
 |