欢迎加入开源鸿蒙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 技术成果

成功实现了一个完整的奶茶大数据运维平台,包含:

  1. 实时数据监控:关键指标实时更新
  2. 可视化图表:销售趋势柱状图
  3. 订单管理:实时订单状态追踪
  4. 库存预警:智能库存监控系统
  5. 门店对比:多门店业绩排行
  6. 系统运维:服务器指标监控

10.2 技术价值

  • 提升运营效率:实时数据辅助决策
  • 优化库存管理:智能预警避免缺货
  • 数据可视化:直观展示业务状况
  • 跨平台支持:适配多种设备

10.3 未来展望

后续可扩展功能:

  • 数据导出与报表生成
  • 数据分析与预测
  • 用户行为分析
  • 移动端App

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐