diff --git a/zhican/admin/src/views/business-flow/index.vue b/zhican/admin/src/views/business-flow/index.vue
index 923859a..d373b9b 100644
--- a/zhican/admin/src/views/business-flow/index.vue
+++ b/zhican/admin/src/views/business-flow/index.vue
@@ -8,6 +8,7 @@
供应链主线
关联矩阵
模块详情
+ 业务闭环
@@ -39,6 +40,7 @@
{{ node.label }}
{{ node.badge }}
+ {{ node.dataSource }}
→
@@ -221,6 +223,29 @@
+
+
+
+
+
+
+ {{ loop.desc }}
+
+
+
+ {{ step.detail }}
+ {{ step.source }}
+
+
+
+
+
+
+
+
+
@@ -229,7 +254,7 @@ import { ref, computed } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
-const viewMode = ref<'chain' | 'matrix' | 'detail'>('chain')
+const viewMode = ref<'chain' | 'matrix' | 'detail' | 'loop'>('chain')
const activeStage = ref('green')
const hoveredNode = ref('')
const hoverCell = ref('')
@@ -247,49 +272,49 @@ const supplyChain = [
{
id: 'green', name: '绿色种采', icon: '🌱', color: '#52c41a',
nodes: [
- { key: 'land-env', label: '土地环境' },
- { key: 'planting-monitor', label: '种养监控' },
- { key: 'harvest-storage', label: '收成入库', badge: '出' },
- { key: 'supplier-mgmt', label: '供商管理' },
- { key: 'procurement-mgmt', label: '采供管理', badge: '出' },
+ { key: 'land-env', label: '土地环境', dataSource: '传感器' },
+ { key: 'planting-monitor', label: '种养监控', dataSource: '传感器' },
+ { key: 'harvest-storage', label: '收成入库', badge: '出', dataSource: '智能秤' },
+ { key: 'supplier-mgmt', label: '供商管理', dataSource: '人工录入' },
+ { key: 'procurement-mgmt', label: '采购管理', badge: '出', dataSource: '系统生成' },
],
},
{
id: 'hygiene', name: '卫生供应', icon: '🧪', color: '#1890ff',
nodes: [
- { key: 'hygiene-test', label: '卫生检测', badge: '验' },
- { key: 'raw-storage', label: '毛菜入库', badge: '入' },
- { key: 'clean-process', label: '净菜加工' },
- { key: 'clean-storage', label: '净菜入库' },
- { key: 'clean-internal', label: '净菜内供', badge: '出' },
- { key: 'clean-external', label: '净菜外售', badge: '出' },
+ { key: 'hygiene-test', label: '卫生检测', badge: '验', dataSource: '设备检测' },
+ { key: 'raw-storage', label: '毛菜管理', badge: '入', dataSource: '智能秤' },
+ { key: 'clean-process', label: '净菜加工', dataSource: '智能秤' },
+ { key: 'clean-storage', label: '净菜入库', dataSource: '智能秤' },
+ { key: 'clean-internal', label: '净菜内供', badge: '出', dataSource: '系统计算' },
+ { key: 'clean-external', label: '净菜外售', badge: '出', dataSource: '人工录入' },
],
},
{
id: 'health', name: '健康生产', icon: '👨🍳', color: '#faad14',
nodes: [
- { key: 'food-safety', label: '食安监控', badge: '验' },
- { key: 'recipe-plan', label: '食谱规划' },
- { key: 'clean-order', label: '净菜订单', badge: '入' },
- { key: 'clean-cabinet', label: '净菜进柜' },
- { key: 'clean-assemble', label: '净菜组配' },
- { key: 'cook-by-order', label: '按单烹制' },
- { key: 'serving-monitor', label: '上餐监控', badge: '出' },
- { key: 'surplus-disposal', label: '余量处置' },
- { key: 'production-stats', label: '生产统计' },
+ { key: 'food-safety', label: '食安监控', badge: '验', dataSource: 'AI视频' },
+ { key: 'recipe-plan', label: '食谱规划', dataSource: '系统计算' },
+ { key: 'clean-order', label: '净菜订单', badge: '入', dataSource: '系统生成' },
+ { key: 'clean-cabinet', label: '净菜进柜', dataSource: '智能秤' },
+ { key: 'clean-assemble', label: '净菜组配', dataSource: '人工录入' },
+ { key: 'cook-by-order', label: '按单烹制', dataSource: '智能秤' },
+ { key: 'serving-monitor', label: '上餐监控', badge: '出', dataSource: '传感器' },
+ { key: 'surplus-disposal', label: '余量处置', dataSource: '智能秤' },
+ { key: 'production-stats', label: '生产统计', dataSource: '系统计算' },
],
},
{
id: 'nutrition', name: '营养用餐', icon: '🍽️', color: '#722ed1',
nodes: [
- { key: 'nutrition-test', label: '营养检验', badge: '验' },
- { key: 'food-composition', label: '食物成分' },
- { key: 'dish-inventory', label: '餐品总库' },
- { key: 'recipe-mgmt', label: '食谱管理' },
- { key: 'nutrition-order', label: '营养点餐' },
- { key: 'pickup-mgmt', label: '取餐管理' },
- { key: 'consumption-mgmt', label: '消费管理' },
- { key: 'nutrition-mgmt', label: '营养管理' },
+ { key: 'nutrition-test', label: '营养检验', badge: '验', dataSource: '设备检测' },
+ { key: 'food-composition', label: '食物成分', dataSource: '人工录入' },
+ { key: 'dish-inventory', label: '餐品总库', dataSource: '人工录入' },
+ { key: 'recipe-mgmt', label: '食谱管理', dataSource: '人工录入' },
+ { key: 'nutrition-order', label: '营养点餐', dataSource: '系统计算' },
+ { key: 'pickup-mgmt', label: '取餐管理', dataSource: '硬件自动' },
+ { key: 'consumption-mgmt', label: '消费管理', dataSource: '系统计算' },
+ { key: 'nutrition-mgmt', label: '营养管理', dataSource: '系统计算' },
],
},
]
@@ -519,6 +544,53 @@ const moduleDetails: Record = {
}
const selectedModuleData = computed(() => moduleDetails[selectedModule.value])
+
+function dataSourceColor(source: string) {
+ const map: Record = { '硬件自动': 'blue', '设备检测': 'purple', '人工录入': 'orange', '系统计算': 'cyan', '系统生成': 'cyan', 'AI视频': 'red', '智能秤': 'blue', '传感器': 'blue' }
+ return map[source] || 'default'
+}
+
+const businessLoops = [
+ {
+ title: '闭环1:食谱驱动反向采购',
+ color: '#1890ff',
+ desc: '基于食谱规划自动反算原料需求,生成采购订单,校验到货量,确保数据一致',
+ steps: [
+ { name: '食谱规划', detail: '编排周/日食谱,系统反算净菜/毛菜需求', source: '系统计算' },
+ { name: '生成采购订单', detail: '自动生成净菜采购订单推送加工端', source: '系统生成' },
+ { name: '净菜进柜校验', detail: '智能秤校验订单量 vs 实收量', source: '智能秤' },
+ { name: '库存动态表', detail: '送多少、用多少、产多少数据一致', source: '系统计算' },
+ ],
+ pages: ['recipe-plan', 'clean-order', 'clean-cabinet', 'clean-assemble'],
+ },
+ {
+ title: '闭环2:按单烹饪与熟重计量',
+ color: '#52c41a',
+ desc: '从生重到熟重全链路追踪,结合AI视频解析工艺动作',
+ steps: [
+ { name: '生重称重', detail: '锅具上秤即采,自动记录生重', source: '智能秤' },
+ { name: '调料时间点', detail: '采集放盐/油/花椒时刻', source: '传感器' },
+ { name: '工艺动作识别', detail: '翻炒/颠勺/正反转等动作识别', source: 'AI视频' },
+ { name: '熟重称重', detail: '烹饪完成自动称重', source: '智能秤' },
+ { name: '上餐+温度衰减', detail: '记录上餐时间,监控温度衰减', source: '传感器' },
+ { name: '开餐/加餐流转', detail: '效期预警,加餐自动触发', source: '系统计算' },
+ ],
+ pages: ['cook-by-order', 'serving-monitor'],
+ },
+ {
+ title: '闭环3:餐线调度与取餐治理',
+ color: '#722ed1',
+ desc: '以秤编号为单位,实时统计取餐量,智能补餐和双模识别',
+ steps: [
+ { name: '秤绑定菜品序列', detail: '记录全天菜品更换序列', source: '智能秤' },
+ { name: '取餐量实时统计', detail: '各时段取餐量自动汇总', source: '智能秤' },
+ { name: '补餐阈值触发', detail: '存量<1/5自动触发补餐提醒', source: '系统计算' },
+ { name: '时间过滤', detail: '可配置禁加餐时间', source: '系统计算' },
+ { name: '双模取餐识别', detail: '人脸识别+RFID夹子绑定', source: '硬件自动' },
+ ],
+ pages: ['meal-line', 'pickup-mgmt', 'consumption-mgmt'],
+ },
+]
\ No newline at end of file
+.trace-overview {
+ padding: 0;
+}
+.trace-title {
+ font-weight: 600;
+ margin-bottom: 6px;
+}
+.ingredient-item {
+ margin-top: 8px;
+ padding: 8px 12px;
+ background: #fafafa;
+ border-radius: 6px;
+}
+
diff --git a/zhican/admin/src/views/nutrition-dining/meal-line/index.vue b/zhican/admin/src/views/nutrition-dining/meal-line/index.vue
index 6461872..d4d5f9a 100644
--- a/zhican/admin/src/views/nutrition-dining/meal-line/index.vue
+++ b/zhican/admin/src/views/nutrition-dining/meal-line/index.vue
@@ -21,24 +21,37 @@
{{ statusMap[line.status]?.text }}
-
+
-
+
+
+
+
{{ line.canteen }}
- {{ line.capacity }}
+
+
+
+
+
+ {{ line.stockPercent < 20 ? '需补餐' : '正常' }}
+
+ 禁加餐
+
{{ line.manager }}
- {{ line.equipment }}
+
@@ -49,9 +62,14 @@