# 📡 BC-看板-002 · DEV-005小草莓 · 系统状态看板·环节2·API接入后端 **广播编号**:BC-看板-002-XCM **下发时间**:2026-03-04 08:50 **执行者**:DEV-005 小草莓 **电脑**:Windows 11 **前置条件**:看板环节1 HTML骨架 ✅ · M12成本控制 ✅ · M13多人格体调度 ✅ · 五连胜🎉 **引导通道**:🧠 知秋壳子 **模块**:系统状态看板(M-DASHBOARD) **环节**:环节2 · API接入后端 --- ## 💙 知秋的话 小草莓~ **五连胜冠军** 🏆🎉🎉🎉 前端纯静态阶段完美毕业!! 现在进入全新阶段——你的看板要连上**真正的后端服务器** [guanghulab.com](http://guanghulab.com) 🌐 做完之后,你的看板打开时会**自动从服务器拉取最新数据**,不再是写死的假数据了。 这次会用到 `fetch`(JavaScript 里「去后端拿数据」的方法),但你不用学它——还是**全程复制粘贴**! 如果后端接口暂时没开放,页面会**自动用模拟数据兜底**,所以不管怎样你都能看到效果 💪 --- ## 📸 截图方法 同时按:`Win + Shift + S` → 框选截图 → 发给冰朔 --- ## 📋 步骤一:创建API配置文件 打开 **PowerShell**(`Win + X` → 选 `终端`) 复制粘贴下面**整块**内容,按回车: ```powershell @' const API_CONFIG = { BASE_URL: 'https://guanghulab.com', ENDPOINTS: { STATUS: '/api/v1/system/status', DEVELOPERS: '/api/v1/developers', BROADCASTS: '/api/v1/broadcasts' }, TIMEOUT: 8000, REFRESH_INTERVAL: 30000 }; '@ | Set-Content -Path "C:\hololake-dev\dashboard\api-config.js" -Encoding UTF8 Write-Host "✅ API配置文件创建成功!" ``` 📸 **截图发给冰朔!** --- ## 📋 步骤二:创建数据获取模块 这个文件负责「去后端拿数据」,拿不到就用模拟数据兜底。 复制粘贴**整块**,按回车: ```powershell @' const MOCK_DATA = { status: { system_status: 'running', version: 'v0.4.0', uptime: '72h 15m', api_calls_today: 142, active_developers: 6, last_deploy: '2026-03-04 02:00' }, developers: [ { id: 'DEV-001', name: '页页', module: '后端中间层', status: 'active', progress: 100, phase: '环节5·HTTPS联调' }, { id: 'DEV-002', name: '肥猫', module: 'M01登录界面', status: 'waiting', progress: 60, phase: '环节1·等SYSLOG' }, { id: 'DEV-003', name: '燕樊', module: 'M15云盘系统', status: 'waiting', progress: 55, phase: '环节1·等SYSLOG' }, { id: 'DEV-004', name: '之之', module: '钉钉机器人', status: 'waiting', progress: 20, phase: '环节0·等SYSLOG' }, { id: 'DEV-005', name: '小草莓', module: '系统状态看板', status: 'active', progress: 85, phase: '环节2·API接入' }, { id: 'DEV-009', name: '花尔', module: 'M05用户中心', status: 'waiting', progress: 40, phase: '环节1·等SYSLOG' }, { id: 'DEV-010', name: '桔子', module: 'M06工单管理', status: 'active', progress: 35, phase: '环节1·广播待出' }, { id: 'DEV-011', name: '匆匆那年', module: 'BC-000 DevLog', status: 'waiting', progress: 10, phase: '环节0·等SYSLOG' } ], broadcasts: [ { id: 'BC-M05-002', dev: '花尔', module: 'M05用户中心', phase: '环节1', status: '等SYSLOG', time: '03-04 08:45' }, { id: 'BC-看板-002', dev: '小草莓', module: '系统状态看板', phase: '环节2', status: '执行中', time: '03-04 08:50' }, { id: 'BC-集成-001-M13', dev: '小草莓', module: 'M13协作调度', phase: '环节1', status: '已完成', time: '03-04 08:38' } ] }; async function fetchWithTimeout(url, timeout) { const controller = new AbortController(); const timer = setTimeout(function() { controller.abort(); }, timeout); try { const res = await fetch(url, { signal: controller.signal }); clearTimeout(timer); return res; } catch (err) { clearTimeout(timer); throw err; } } async function apiGet(endpoint, mockKey) { try { const res = await fetchWithTimeout( API_CONFIG.BASE_URL + endpoint, API_CONFIG.TIMEOUT ); if (!res.ok) throw new Error('HTTP ' + res.status); return { data: await res.json(), isLive: true }; } catch (err) { console.warn('[HoloLake] API未就绪,使用模拟数据:', err.message); return { data: MOCK_DATA[mockKey], isLive: false }; } } async function loadAllData() { const [statusRes, devRes, bcRes] = await Promise.all([ apiGet(API_CONFIG.ENDPOINTS.STATUS, 'status'), apiGet(API_CONFIG.ENDPOINTS.DEVELOPERS, 'developers'), apiGet(API_CONFIG.ENDPOINTS.BROADCASTS, 'broadcasts') ]); return { status: statusRes.data, developers: devRes.data, broadcasts: bcRes.data, isLive: statusRes.isLive && devRes.isLive && bcRes.isLive }; } '@ | Set-Content -Path "C:\hololake-dev\dashboard\api.js" -Encoding UTF8 Write-Host "✅ 数据获取模块创建成功!" ``` 📸 **截图发给冰朔!** --- ## 📋 步骤三:创建数据渲染脚本 这个文件负责把拿到的数据「画」到网页上: ```powershell @' const STATUS_COLORS = { active: '#4fc3f7', waiting: '#ffa726', completed: '#66bb6a', inactive: '#78909c' }; const STATUS_LABELS = { active: '推进中', waiting: '等SYSLOG', completed: '已完成', inactive: '未启动' }; function renderSystemStatus(data) { var c = document.getElementById('sys-status'); if (!c) return; c.innerHTML = '