奶茶大数据运维表 - 鸿蒙PC Electron框架技术实现详解
开源鸿蒙PC社区奶茶大数据运维表项目摘要 该项目基于Electron和OpenHarmony技术栈,构建了一个奶茶店运营监控平台,具备实时数据可视化、库存预警和跨设备适配能力。核心功能包括:销售趋势分析、热销排行展示、订单状态追踪、智能库存管理及多门店对比。技术实现采用模块化设计,通过JavaScript动态渲染图表(如柱状图展示时段销售数据),并每5秒自动更新。项目特色在于响应式界面、状态标签可
·
欢迎加入开源鸿蒙PC社区:
https://harmonypc.csdn.net/
atomgit仓库地址: https://atomgit.com/ai_lingshi/naichabigdata


一、项目概述
奶茶大数据运维表是一个专业的奶茶店运营监控平台,旨在帮助奶茶店管理者实时掌握销售数据、订单状态、库存情况和系统运行状态。
1.1 功能定位
| 功能模块 | 核心能力 | 业务价值 |
|---|---|---|
| 数据概览 | 实时展示关键指标 | 快速掌握业务状况 |
| 销售趋势 | 可视化销售数据 | 分析销售高峰时段 |
| 热销排行 | 饮品销量排名 | 优化产品策略 |
| 订单监控 | 实时订单追踪 | 提升服务效率 |
| 库存预警 | 智能库存管理 | 避免缺货损失 |
| 门店排行 | 多门店对比 | 优化资源配置 |
| 系统运维 | 服务器监控 | 保障系统稳定 |
1.2 技术目标
- 实时性:数据每5秒自动更新
- 可视化:直观的数据展示图表
- 响应式:适配多种设备屏幕
- 易用性:简洁清晰的操作界面
🛠️ 技术栈
- 跨平台框架:Electron(桌面端)+ OpenHarmony(鸿蒙系统)
- 前端框架:原生 HTML5 + CSS3 + JavaScript
- Web Engine:Web组件嵌入鸿蒙应用
- 响应式设计:支持移动端和桌面端
二、技术架构设计
2.1 整体架构
┌─────────────────────────────────────────────────────────────┐
│ 表示层 (UI) │
│ 数据卡片、图表、表格、预警面板、运维指标 │
├─────────────────────────────────────────────────────────────┤
│ 业务逻辑层 │
│ MilkTeaDashboard类:数据管理、图表渲染、实时更新 │
├─────────────────────────────────────────────────────────────┤
│ 数据层 │
│ 模拟数据:销售数据、订单数据、库存数据、门店数据 │
└─────────────────────────────────────────────────────────────┘
2.2 核心类设计
class MilkTeaDashboard {
constructor() {
this.salesData = this.getSalesData(); // 销售数据
this.drinkRanking = this.getDrinkRanking(); // 饮品排名
this.orders = this.getOrdersData(); // 订单数据
this.inventoryWarnings = this.getInventoryWarnings(); // 库存预警
this.storeRanking = this.getStoreRanking(); // 门店排名
this.init();
}
// 核心方法
init() {} // 初始化
renderSalesChart() {} // 渲染销售图表
renderDrinkRanking() {} // 渲染饮品排行
renderOrdersTable() {} // 渲染订单表格
renderInventoryWarnings() {} // 渲染库存预警
renderStoreRanking() {} // 渲染门店排行
startRealTimeUpdate() {} // 启动实时更新
}
三、核心代码实现
3.1 数据模型设计
getSalesData() {
return [
{ hour: '08:00', sales: 1200 },
{ hour: '10:00', sales: 3500 },
{ hour: '12:00', sales: 8200 },
{ hour: '14:00', sales: 5600 },
{ hour: '16:00', sales: 6800 },
{ hour: '18:00', sales: 9200 },
{ hour: '20:00', sales: 7500 },
{ hour: '22:00', sales: 3200 }
];
}
getDrinkRanking() {
return [
{ name: '珍珠奶茶', sales: 3256, change: '+12.5%', icon: '🧋' },
{ name: '芋泥波波', sales: 2891, change: '+8.3%', icon: '🫘' },
{ name: '杨枝甘露', sales: 2567, change: '+15.2%', icon: '🥭' },
// ... 更多数据
];
}
设计要点:
- 使用对象数组存储结构化数据
- 包含图标字段增强视觉效果
- 变化率字段展示趋势信息
3.2 销售图表渲染
renderSalesChart() {
const chartContainer = document.getElementById('salesChart');
const maxSales = Math.max(...this.salesData.map(d => d.sales));
let barsHTML = '<div class="chart-bars">';
this.salesData.forEach((data, index) => {
const heightPercent = (data.sales / maxSales) * 100;
barsHTML += `
<div class="chart-bar" style="height: ${heightPercent}%; animation-delay: ${index * 0.1}s;">
<span>¥${(data.sales/1000).toFixed(1)}k</span>
</div>
`;
});
barsHTML += '</div>';
let labelsHTML = '<div class="chart-labels">';
this.salesData.forEach(data => {
labelsHTML += `<span>${data.hour}</span>`;
});
labelsHTML += '</div>';
chartContainer.innerHTML = barsHTML + labelsHTML;
}
实现原理:
- 计算最大销售额作为基准
- 按比例计算每个柱状图高度
- 添加动画延迟实现顺序动画效果
- 动态生成时间标签
3.3 订单表格渲染
renderOrdersTable() {
const tableBody = document.getElementById('ordersTableBody');
tableBody.innerHTML = this.orders.map(order => `
<tr>
<td>${order.id}</td>
<td>${order.drink}</td>
<td>${order.quantity}杯</td>
<td>¥${order.amount}</td>
<td><span class="status-badge ${order.status}">${this.getStatusText(order.status)}</span></td>
<td>${order.time}</td>
</tr>
`).join('');
}
getStatusText(status) {
const statusMap = {
pending: '待接单',
preparing: '制作中',
completed: '已完成'
};
return statusMap[status] || status;
}
设计亮点:
- 使用模板字符串动态生成表格行
- 状态标签使用CSS类实现不同样式
- 状态映射函数提高可维护性
3.4 实时数据更新
startRealTimeUpdate() {
setInterval(() => {
this.updateStats();
}, 5000);
}
updateStats() {
const sales = document.getElementById('totalSales');
const orders = document.getElementById('totalOrders');
const customers = document.getElementById('activeCustomers');
const currentSales = parseInt(sales.textContent.replace(/[^0-9]/g, ''));
const currentOrders = parseInt(orders.textContent.replace(/[^0-9]/g, ''));
const currentCustomers = parseInt(customers.textContent.replace(/[^0-9]/g, ''));
const salesIncrease = Math.floor(Math.random() * 100);
const ordersIncrease = Math.floor(Math.random() * 5);
const customersIncrease = Math.floor(Math.random() * 20);
sales.textContent = '¥ ' + (currentSales + salesIncrease).toLocaleString();
orders.textContent = (currentOrders + ordersIncrease).toLocaleString();
customers.textContent = (currentCustomers + customersIncrease).toLocaleString();
}
技术要点:
- 使用
setInterval定时更新数据 - 正则表达式提取数字
- 随机增量模拟真实业务增长
toLocaleString()格式化数字
四、样式设计
4.1 主题色彩方案
body {
background: linear-gradient(135deg, #FFF5E6 0%, #FFE4C4 30%, #FFDAB9 60%, #FFE4E1 100%);
}
.header h1 {
background: linear-gradient(135deg, #8B4513 0%, #D2691E 50%, #CD853F 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
色彩心理学:
- 米色/橙色渐变营造温暖氛围
- 棕色系文字体现奶茶主题
- 整体风格温馨舒适
4.2 数据卡片设计
.stat-card {
background: rgba(255, 255, 255, 0.95);
border-radius: 20px;
padding: 25px;
display: flex;
align-items: center;
gap: 20px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
border-left: 5px solid;
transition: transform 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
}
.stat-card.sales { border-left-color: #FF6B6B; }
.stat-card.orders { border-left-color: #4ECDC4; }
.stat-card.inventory { border-left-color: #FFE66D; }
.stat-card.customers { border-left-color: #95E1D3; }
设计特点:
- 毛玻璃效果背景
- 左侧彩色边框区分类型
- 悬停动画提升交互体验
4.3 图表动画
.chart-bar {
width: 30px;
background: linear-gradient(180deg, #FF6B6B 0%, #FF8E8E 100%);
border-radius: 10px 10px 0 0;
animation: grow 0.5s ease-out forwards;
}
@keyframes grow {
from { height: 0; }
}
动画效果:
- 柱状图从底部向上增长
- 渐变色增强视觉层次
- 错开的动画延迟营造流动感
五、响应式设计
5.1 断点设置
@media (max-width: 768px) {
.stats-grid { grid-template-columns: 1fr; }
.panels { grid-template-columns: 1fr; }
.stat-card { flex-direction: column; text-align: center; }
}
@media (max-width: 480px) {
.header h1 { font-size: 1.6rem; }
.stat-value { font-size: 1.5rem; }
}
5.2 布局适配策略
| 设备类型 | 屏幕宽度 | 布局策略 |
|---|---|---|
| 桌面端 | >768px | 多列网格布局 |
| 平板端 | 480-768px | 单列/双列布局 |
| 移动端 | <480px | 单列布局,字体缩小 |
六、功能模块详解
6.1 库存预警系统
getInventoryWarnings() {
return [
{ item: '珍珠', current: 58, min: 100, level: 'danger', icon: '⚡' },
{ item: '芋泥', current: 72, min: 80, level: 'warning', icon: '⚠️' },
// ... 更多预警项
];
}
renderInventoryWarnings() {
const warningContainer = document.getElementById('inventoryWarning');
warningContainer.innerHTML = this.inventoryWarnings.map(item => `
<div class="warning-item">
<div class="warning-icon">${item.icon}</div>
<div class="warning-info">
<div class="warning-title">${item.item}库存不足</div>
<div class="warning-desc">当前: ${item.current}份 / 最低: ${item.min}份</div>
</div>
<span class="warning-level ${item.level}">${item.level === 'danger' ? '紧急' : '警告'}</span>
</div>
`).join('');
}
预警等级:
- danger(紧急):库存低于最低阈值,需要立即补货
- warning(警告):库存接近最低阈值,建议近期补货
6.2 门店业绩排行
getStoreRanking() {
return [
{ name: '中心广场店', sales: 35680, rank: 1, icon: '🏆' },
{ name: '万达广场店', sales: 28920, rank: 2, icon: '🥈' },
{ name: '银泰城店', sales: 25670, rank: 3, icon: '🥉' },
// ... 更多门店
];
}
排名展示:
- 使用奖牌图标展示前三名
- 销售额格式化显示为万元
- 排名数字突出显示
6.3 系统运维指标
<div class="metrics-grid">
<div class="metric-item">
<span class="metric-label">CPU使用率</span>
<div class="metric-bar">
<div class="metric-fill" style="width: 45%;"></div>
</div>
<span class="metric-value">45%</span>
</div>
<!-- 更多指标 -->
</div>
指标类型:
| 指标 | 状态 | 颜色 |
|---|---|---|
| CPU使用率 | 正常(45%) | 红色渐变 |
| 内存使用率 | 警告(72%) | 橙色渐变 |
| 网络延迟 | 优秀(15ms) | 绿色渐变 |
| 服务可用性 | 优秀(99.9%) | 绿色渐变 |
七、性能优化
7.1 DOM操作优化
// 使用innerHTML一次性插入
renderSalesChart() {
let barsHTML = '<div class="chart-bars">';
this.salesData.forEach((data, index) => {
barsHTML += `<div class="chart-bar">...</div>`;
});
barsHTML += '</div>';
chartContainer.innerHTML = barsHTML;
}
优化原理:
- 避免多次DOM操作
- 先构建完整HTML字符串再一次性插入
- 减少浏览器重排重绘次数
7.2 事件监听管理
startRealTimeUpdate() {
setInterval(() => {
this.updateStats();
}, 5000);
}
定时任务设计:
- 合理的更新间隔(5秒)
- 避免过于频繁的更新
- 只更新必要的数据
八、数据统计
8.1 销售数据分析
| 时段 | 销售额 | 占比 |
|---|---|---|
| 08:00 | ¥1,200 | 3.1% |
| 10:00 | ¥3,500 | 9.1% |
| 12:00 | ¥8,200 | 21.3% |
| 14:00 | ¥5,600 | 14.5% |
| 16:00 | ¥6,800 | 17.7% |
| 18:00 | ¥9,200 | 23.9% |
| 20:00 | ¥7,500 | 19.5% |
| 22:00 | ¥3,200 | 8.3% |
8.2 热销饮品TOP5
| 排名 | 饮品 | 销量 | 增长率 |
|---|---|---|---|
| 1 | 珍珠奶茶 | 3,256杯 | +12.5% |
| 2 | 芋泥波波 | 2,891杯 | +8.3% |
| 3 | 杨枝甘露 | 2,567杯 | +15.2% |
| 4 | 芝士奶盖 | 2,134杯 | -2.1% |
| 5 | 抹茶拿铁 | 1,892杯 | +6.8% |
九、扩展功能建议
9.1 数据导出功能
exportData() {
const data = {
sales: this.salesData,
ranking: this.drinkRanking,
orders: this.orders,
timestamp: new Date().toISOString()
};
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `milk_tea_data_${new Date().getTime()}.json`;
a.click();
URL.revokeObjectURL(url);
}
9.2 数据筛选功能
filterOrders(status) {
const filtered = this.orders.filter(order => order.status === status);
this.renderOrdersTable(filtered);
}
9.3 图表类型切换
switchChartType(type) {
if (type === 'bar') {
this.renderBarChart();
} else if (type === 'line') {
this.renderLineChart();
}
}
十、总结
10.1 技术成果
成功实现了一个完整的奶茶大数据运维平台,包含:
- 实时数据监控:关键指标实时更新
- 可视化图表:销售趋势柱状图
- 订单管理:实时订单状态追踪
- 库存预警:智能库存监控系统
- 门店对比:多门店业绩排行
- 系统运维:服务器指标监控
10.2 技术价值
- 提升运营效率:实时数据辅助决策
- 优化库存管理:智能预警避免缺货
- 数据可视化:直观展示业务状况
- 跨平台支持:适配多种设备
10.3 未来展望
后续可扩展功能:
- 数据导出与报表生成
- 数据分析与预测
- 用户行为分析
- 移动端App
更多推荐
所有评论(0)