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集成提供了良好的基础,同时保持了代码的可维护性和扩展性。 |