🏢 食堂后台管理系统

完整的食堂运营管理解决方案

📊 食堂后台入口 · 管理主页主菜单(/pages/home/indx.html)

📋 今天待办

日常工作任务和待办事项管理系统,支持任务分类、优先级设置和状态跟踪。

文件位置: /pages/home/todo/
查看功能详情

🍽️ 套餐录入

完整的菜单录入、编辑和管理系统,包含厨房出品、团餐录菜、社餐录菜、当日菜单和菜单日历功能。

功能文件位置: /pages/home/menu-input/

子功能对应JS文件:
厨房出品menu-output.js
团餐录菜group-input.js
社餐录菜public-input.js
当日菜单menu-daily.js
菜单日历menu-calendar.js
查看功能详情

🛒 采购管理

食材采购、供应商管理和库存预警系统,支持采购流程全生命周期管理。

文件位置: /pages/home/purchase/
查看功能详情

📦 库存管理

食材库存、出入库管理和盘点系统,提供实时库存监控和预警功能。

文件位置: /pages/home/inventory/
查看功能详情

🌍 全局菜单

系统级菜单数据管理和共享功能,为其他模块提供标准化的菜单数据接口。

文件位置: /pages/home/globalmeal/

数据库访问API:
  • /api/mealoutput - 厨房出品数据API
  • /api/db/groupmeal - 团餐数据API
  • /api/publicmeal - 社餐数据API
数据来源: 统一从 daily_dishes 表读取数据
查询条件: 使用 menu_date 参数(如"20250501")作为查询条件
查看功能详情
🔍 厨房出品模块编码规范分析

📁 主页面结构

主文件: /pages/home/index.html index.html 有一个主调度 Js 当你按了子菜单, 交互区就交给 子菜单功能 JS , 同时 主调度 js 把 发送绑到 子功能 , 当切到下一个子菜单, 主调度解绑, 再绑新 JS

主页面包含以下核心区域, 是各子菜单的功能承载区

🏠 home.js 对浮动按钮的处理机制

现在 home.js 遵循了正确的浮动按钮管理流程:

正确的浮动按钮管理流程:
  1. home.js切换菜单时:
    • 调用当前模块的 cleanup() 函数
    • 调用新模块的 init()/handleXxx() 函数
  2. 子功能模块在初始化函数中:
    • 显示浮动按钮、绑定事件和显示交互区内容
  3. 子功能模块在清理函数中:
    • 隐藏按钮和解绑事件
  4. 框架层解耦:
    • home.js不再知晓具体模块名称,只调用通用接口

这样的设计确保了:

子功能菜单编码规范

✅ 功能菜单 JS 基本函数规范

home js 在子菜单切换时,通过 home_callChildMenuHandler 函数中 switch 的对应关系,找到对应的子功能 js (如:menuOutput_handleKitchenOutput),初始化交互区的交互操作,使交互由子功能 JS 完成。 HOME (如:menuOutput_setSendButtonForKitchenOutput)重新给主页绑定命令发送框按钮,使命令交互给新的子功能 js 处理。

子菜单切换时清理机制:

所有子菜单点击都是由 home_setupEventListeners 函数中设置的事件监听器统一响应,通过事件委托机制确保可靠绑定。当用户点击子菜单时,home js 调用各子功能的初始化函数来设置交互区内容和命令处理逻辑。

home js 调用各子功能的初始化函数:

🎯 正确的浮动按钮管理流程

浮动按钮应该采用"子功能模块自主管理"的设计原则,避免框架层过度干预:

正确的流程应该是:
  1. home.js 切换菜单时:
    • 调用当前模块的 cleanup() 函数
    • 调用新模块的 init() 或 handleXxx() 函数
  2. 子功能模块在自己的初始化函数中:
    • 显示自己的浮动按钮(display = 'block')
    • 绑定按钮事件
    • 显示交互区内容
  3. 子功能模块在自己的清理函数中:
    • 隐藏自己的浮动按钮(display = 'none')
    • 解绑按钮事件

设计优势:

🔄 交互机制

系统采用模块化的交互设计:

🔧 子菜单清理机制规范

确保在切换子菜单时,前一个模块的界面内容和事件监听器被正确清理,避免内容"停在页面上"的问题:

清理调用流程:
  1. 子菜单切换触发home_selectChildMenu()
  2. 清理当前模块home_notifyActiveModuleCleanup()
  3. 恢复默认按钮home_restoreDefaultSendButton()
  4. 调用新模块home_callChildMenuHandler()
  5. 模块自行清理 → 各模块的 cleanup() 函数

关键要点:

🎯 浮动按钮设计最佳实践

🔄 浮动按钮设计方法

子功能的浮动按钮采用"静态定义,动态控制"的设计理念:

设计原则:
  • 静态定义: 浮动按钮在HTML中静态定义
  • 动态控制: 通过CSS的display属性控制显示/隐藏
  • 直接清理: 清理时直接移除DOM元素
<div id="menuOutput_saveButton" class="menuOutput_save-button" style="display: none; position: fixed; bottom: 20px; right: 20px;" onclick="menuOutputMenuOutput.menuOutput_saveData()"> 保存 </div> // 显示按钮 menuOutput_enableSaveButton: function() { const saveButton = document.getElementById('menuOutput_saveButton'); if (saveButton) { saveButton.style.display = 'block'; } } // 清理按钮 menuOutput_cleanup: function() { const saveButton = document.getElementById('menuOutput_saveButton'); if (saveButton) { saveButton.remove(); } }

设计优势:

🎯 主框架控制函数(home.js中)

🔄 浮动按钮显示开关控制函数

主框架通过以下核心函数实现浮动按钮的模块化显示控制:

1. floatingButtonManager.switchModule(moduleName)
  • 功能:模块切换时的总调度函数
  • 处理:先隐藏当前模块按钮,再显示新模块按钮
  • 调用时机:每次子菜单切换时
2. floatingButtonManager.showModuleButtons(moduleName)
  • 功能:显示指定模块的浮动按钮
  • 处理:根据模块名显示对应的按钮组,并绑定事件
  • 支持模块:group-meal(团餐)、todo(待办)
3. floatingButtonManager.hideModuleButtons(moduleName)
  • 功能:隐藏指定模块的浮动按钮
  • 处理:隐藏按钮组并清理事件监听器
4. home_callChildMenuHandler(parentMenu, childMenu)
  • 功能:子菜单切换的主入口
  • 处理:调用floatingButtonManager进行按钮状态切换
  • 逻辑:menu-input+group-meal时显示团餐按钮,todo+todo时显示待办按钮

设计原则:

🔧 各子功能JS函数浮动按钮控制

🔄 浮动按钮函数分工体系

系统采用分层设计,主框架统一调度,各模块负责具体功能实现:

### 主框架控制函数(home.js中)

1. floatingButtonManager.switchModule(moduleName)
  • 功能:模块切换时的总调度函数
  • 处理:先隐藏当前模块按钮,再显示新模块按钮
  • 调用时机:每次子菜单切换时
2. floatingButtonManager.showModuleButtons(moduleName)
  • 功能:显示指定模块的浮动按钮
  • 处理:根据模块名显示对应的按钮组,并绑定事件
  • 支持模块:group-meal(团餐)、todo(待办)
3. floatingButtonManager.hideModuleButtons(moduleName)
  • 功能:隐藏指定模块的浮动按钮
  • 处理:隐藏按钮组并清理事件监听器
4. home_callChildMenuHandler(parentMenu, childMenu)
  • 功能:子菜单切换的主入口
  • 处理:调用floatingButtonManager进行按钮状态切换
  • 逻辑:menu-input+group-meal时显示团餐按钮,todo+todo时显示待办按钮

### 模块级函数(各模块JS中)

5. groupInput_bindFloatingButtonEvents() (团餐模块)
  • 功能:绑定团餐按钮的点击和拖拽事件
  • 注意:只负责功能逻辑,不控制显示
6. groupInput_cleanup() (团餐模块)
  • 功能:清理团餐按钮的事件监听器
  • 注意:只负责清理,不控制隐藏
7. todo_bindFloatingButtonEvents() (待办模块)
  • 功能:绑定待办按钮的事件(如果未来需要)

### 状态管理函数

8. home_cleanupFloatingButtons(parentMenu, childMenu)
  • 功能:根据菜单条件清理浮动按钮
  • 处理:隐藏所有按钮组,然后按条件显示特定按钮
9. 全局状态变量
  • home_currentActiveModule:记录当前活动模块
  • floatingButtonManager.currentModule:记录当前显示的按钮模块

设计优势:

食堂后台管理系统 © 2025 - 专业餐饮管理解决方案