chore: sync before memory update
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
- `health-consult/` — 专家咨询管理(50+ 页)✅
|
||||
- `emergency-dispatch/` — 应急就医管理(含 admin + operator 子模块,70+ 页)✅
|
||||
- `health-checkup/` — 健康体检管理 ✅
|
||||
- `nutrition/` — 营养管理(55 页:溯源、档案、种采、供应、生产、用餐、异常)🔨 设计中
|
||||
- `nutrition/` — 营养管理(70+ 页:溯源、档案、种采、供应、生产、用餐、异常、食堂、数据、模型、终端、字典)🔨 设计中
|
||||
- `health-monitor/` — 健康监测管理(65 页)🔨 设计中
|
||||
- `wearable/` — 穿戴监测(8 页:设备管理/绑定记录/用户数据/部门报告/部门统计/个人统计/异常事件/通知配置)
|
||||
- `weight/` — 体重监测(20 页:体重秤/蓝牙秤/体脂仪/运动器械各含设备管理+监测+明细+新增,员工数据/部门统计/员工统计)
|
||||
|
||||
@@ -130,6 +130,39 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
/* 复选框列 */
|
||||
.th-checkbox,.td-checkbox{width:40px;text-align:center;}
|
||||
.td-checkbox input[disabled]{opacity:0.35;cursor:not-allowed;}
|
||||
/* 餐品选择触发区域 */
|
||||
.dish-picker__trigger{min-height:36px;border:1px dashed var(--border);border-radius:var(--radius-sm);padding:8px 12px;cursor:pointer;display:flex;flex-wrap:wrap;gap:6px;align-items:center;transition:border-color .2s;background:#FAFAFA;}
|
||||
.dish-picker__trigger:hover{border-color:var(--primary);}
|
||||
.dish-picker__placeholder{color:var(--text-placeholder);font-size:var(--font-sm);display:flex;align-items:center;gap:4px;}
|
||||
.dish-picker__tag{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;background:var(--primary-light);border-radius:12px;font-size:var(--font-xs);color:var(--primary);}
|
||||
.dish-picker__tag-del{cursor:pointer;font-size:13px;opacity:0.6;line-height:1;}.dish-picker__tag-del:hover{opacity:1;color:var(--danger);}
|
||||
/* 餐品选择弹窗 */
|
||||
.dish-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:1100;display:none;align-items:center;justify-content:center;}
|
||||
.dish-modal-overlay.show{display:flex;}
|
||||
.dish-modal{background:#fff;border-radius:var(--radius-lg);width:540px;max-height:70vh;display:flex;flex-direction:column;box-shadow:0 8px 24px rgba(0,0,0,0.18);}
|
||||
.dish-modal__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);}
|
||||
.dish-modal__title{font-size:var(--font-base);font-weight:600;color:var(--text-primary);}
|
||||
.dish-modal__close{width:28px;height:28px;border:none;background:none;cursor:pointer;font-size:18px;color:var(--text-secondary);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;}
|
||||
.dish-modal__close:hover{background:#F0F0F0;color:var(--text-primary);}
|
||||
.dish-modal__search{padding:12px 20px;border-bottom:1px solid var(--border);}
|
||||
.dish-modal__search input{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px 0 32px;font-size:var(--font-sm);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none'%3E%3Ccircle cx='6' cy='6' r='4.5' stroke='%23999' stroke-width='1.2'/%3E%3Cpath d='M9.5 9.5L12.5 12.5' stroke='%23999' stroke-width='1.2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat 10px center;}
|
||||
.dish-modal__search input:focus{border-color:var(--primary);}
|
||||
.dish-modal__list{flex:1;overflow-y:auto;padding:8px 0;}
|
||||
.dish-item{display:flex;align-items:center;gap:10px;padding:10px 20px;cursor:pointer;transition:background .1s;}
|
||||
.dish-item:hover{background:#F8FBFF;}
|
||||
.dish-item.selected{background:var(--primary-light);}
|
||||
.dish-item__check{width:18px;height:18px;border:1.5px solid var(--border);border-radius:3px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .15s;}
|
||||
.dish-item.selected .dish-item__check{background:var(--primary);border-color:var(--primary);}
|
||||
.dish-item.selected .dish-item__check::after{content:'';display:block;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px);}
|
||||
.dish-item__info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;}
|
||||
.dish-item__name{font-size:var(--font-sm);color:var(--text-primary);}
|
||||
.dish-item__cat{font-size:var(--font-xs);color:var(--text-placeholder);}
|
||||
.dish-item__nutri{display:flex;gap:8px;margin-top:2px;}
|
||||
.dish-item__nutri span{font-size:var(--font-xs);color:var(--text-secondary);white-space:nowrap;}
|
||||
.dish-item__nutri span em{font-style:normal;color:var(--text-primary);font-weight:500;}
|
||||
.dish-modal__footer{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;border-top:1px solid var(--border);}
|
||||
.dish-modal__count{font-size:var(--font-sm);color:var(--text-secondary);}
|
||||
.dish-modal__actions{display:flex;gap:8px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -500,6 +533,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="form-item"><label>人群特征</label><input placeholder="如:年轻成人为主"></div>
|
||||
<div class="form-item"><label>日期</label><input type="date"></div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-item full">
|
||||
<label>餐品选择</label>
|
||||
<div class="dish-picker__trigger" id="dishPickerTrigger" onclick="openGroupDishModal()">
|
||||
<span class="dish-picker__placeholder" id="dishPickerPlaceholder">+ 点击选择餐品</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-item full"><label>备注说明</label><input placeholder="请输入备注(可选)"></div>
|
||||
</div>
|
||||
@@ -511,7 +552,157 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 团体订单 - 餐品选择弹窗 -->
|
||||
<div class="dish-modal-overlay" id="groupDishOverlay">
|
||||
<div class="dish-modal">
|
||||
<div class="dish-modal__header">
|
||||
<span class="dish-modal__title">选择餐品</span>
|
||||
<button class="dish-modal__close" id="groupDishClose">×</button>
|
||||
</div>
|
||||
<div class="dish-modal__search">
|
||||
<input type="text" id="groupDishSearch" placeholder="搜索餐品名称...">
|
||||
</div>
|
||||
<div class="dish-modal__list" id="groupDishList"></div>
|
||||
<div class="dish-modal__footer">
|
||||
<span class="dish-modal__count" id="groupDishCount">已选 0 项</span>
|
||||
<div class="dish-modal__actions">
|
||||
<button class="btn btn-default" id="groupDishCancel">取消</button>
|
||||
<button class="btn btn-primary" id="groupDishConfirm">确认</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/* ========== 团体订单 - 餐品选择 ========== */
|
||||
(function(){
|
||||
var DISHES=[
|
||||
{id:1,name:'白米饭',cat:'主食/米饭',kcal:116,protein:2.6,carb:25.9,fat:0.3},
|
||||
{id:2,name:'杂粮饭',cat:'主食/米饭',kcal:135,protein:4.1,carb:28.2,fat:1.0},
|
||||
{id:3,name:'馒头',cat:'主食/面点',kcal:221,protein:7.0,carb:44.2,fat:1.1},
|
||||
{id:4,name:'花卷',cat:'主食/面点',kcal:214,protein:6.4,carb:42.8,fat:1.3},
|
||||
{id:5,name:'小米粥',cat:'主食/粥品',kcal:46,protein:1.4,carb:8.4,fat:0.7},
|
||||
{id:6,name:'皮蛋瘦肉粥',cat:'主食/粥品',kcal:89,protein:5.2,carb:11.6,fat:2.4},
|
||||
{id:7,name:'红烧肉',cat:'荤菜/猪肉',kcal:286,protein:14.2,carb:6.8,fat:22.5},
|
||||
{id:8,name:'糖醋排骨',cat:'荤菜/猪肉',kcal:264,protein:16.8,carb:14.2,fat:15.6},
|
||||
{id:9,name:'清蒸鲈鱼',cat:'荤菜/水产',kcal:105,protein:18.6,carb:0.8,fat:3.2},
|
||||
{id:10,name:'宫保鸡丁',cat:'荤菜/禽类',kcal:198,protein:19.4,carb:8.6,fat:10.2},
|
||||
{id:11,name:'西红柿炒蛋',cat:'素菜/蛋类',kcal:126,protein:7.8,carb:5.4,fat:8.2},
|
||||
{id:12,name:'清炒时蔬',cat:'素菜/叶菜',kcal:62,protein:2.8,carb:4.6,fat:3.8},
|
||||
{id:13,name:'麻婆豆腐',cat:'素菜/豆制品',kcal:142,protein:9.6,carb:5.2,fat:9.4},
|
||||
{id:14,name:'凉拌黄瓜',cat:'凉菜/蔬菜',kcal:32,protein:1.2,carb:3.8,fat:1.4},
|
||||
{id:15,name:'酸辣土豆丝',cat:'素菜/根茎',kcal:96,protein:2.4,carb:16.2,fat:3.0},
|
||||
{id:16,name:'紫菜蛋花汤',cat:'汤品/蛋汤',kcal:38,protein:3.2,carb:2.4,fat:1.8},
|
||||
{id:17,name:'冬瓜排骨汤',cat:'汤品/肉汤',kcal:72,protein:5.6,carb:3.2,fat:4.0},
|
||||
{id:18,name:'水果拼盘',cat:'甜品/水果',kcal:56,protein:0.8,carb:13.2,fat:0.2},
|
||||
{id:19,name:'绿豆汤',cat:'甜品/糖水',kcal:68,protein:2.4,carb:14.8,fat:0.3},
|
||||
{id:20,name:'煎饺',cat:'主食/面点',kcal:198,protein:8.6,carb:22.4,fat:8.2}
|
||||
];
|
||||
|
||||
var overlay=document.getElementById('groupDishOverlay');
|
||||
var listEl=document.getElementById('groupDishList');
|
||||
var searchInput=document.getElementById('groupDishSearch');
|
||||
var countEl=document.getElementById('groupDishCount');
|
||||
var confirmBtn=document.getElementById('groupDishConfirm');
|
||||
var cancelBtn=document.getElementById('groupDishCancel');
|
||||
var closeBtn=document.getElementById('groupDishClose');
|
||||
var trigger=document.getElementById('dishPickerTrigger');
|
||||
var placeholder=document.getElementById('dishPickerPlaceholder');
|
||||
|
||||
// 已确认选中的餐品ID列表
|
||||
var confirmedDishes=[];
|
||||
// 弹窗内临时选中
|
||||
var tempSelected=[];
|
||||
|
||||
window.openGroupDishModal=function(){
|
||||
tempSelected=confirmedDishes.slice();
|
||||
searchInput.value='';
|
||||
renderList('');
|
||||
updateCount();
|
||||
overlay.classList.add('show');
|
||||
};
|
||||
|
||||
function closeDishModal(){overlay.classList.remove('show');}
|
||||
|
||||
function renderList(keyword){
|
||||
var kw=keyword.trim().toLowerCase();
|
||||
var html='';
|
||||
DISHES.forEach(function(d){
|
||||
if(kw&&d.name.toLowerCase().indexOf(kw)===-1) return;
|
||||
var sel=tempSelected.indexOf(d.id)!==-1;
|
||||
html+='<div class="dish-item'+(sel?' selected':'')+'" data-id="'+d.id+'">'
|
||||
+'<span class="dish-item__check"></span>'
|
||||
+'<span class="dish-item__info">'
|
||||
+'<span class="dish-item__name">'+d.name+'</span>'
|
||||
+'<span class="dish-item__cat">'+d.cat+'</span>'
|
||||
+'<div class="dish-item__nutri">'
|
||||
+'<span>热量 <em>'+d.kcal+'</em>kcal</span>'
|
||||
+'<span>蛋白质 <em>'+d.protein+'</em>g</span>'
|
||||
+'<span>碳水 <em>'+d.carb+'</em>g</span>'
|
||||
+'<span>脂肪 <em>'+d.fat+'</em>g</span>'
|
||||
+'</div></span></div>';
|
||||
});
|
||||
if(!html) html='<div style="padding:24px;text-align:center;color:#999;font-size:13px;">无匹配餐品</div>';
|
||||
listEl.innerHTML=html;
|
||||
}
|
||||
|
||||
function updateCount(){countEl.textContent='已选 '+tempSelected.length+' 项';}
|
||||
|
||||
// 列表点击选择/取消
|
||||
listEl.addEventListener('click',function(e){
|
||||
var item=e.target.closest('.dish-item');if(!item) return;
|
||||
var id=parseInt(item.getAttribute('data-id'));
|
||||
var idx=tempSelected.indexOf(id);
|
||||
if(idx===-1) tempSelected.push(id); else tempSelected.splice(idx,1);
|
||||
item.classList.toggle('selected');
|
||||
updateCount();
|
||||
});
|
||||
|
||||
// 搜索过滤
|
||||
searchInput.addEventListener('input',function(){renderList(this.value);});
|
||||
|
||||
// 确认选择
|
||||
confirmBtn.addEventListener('click',function(){
|
||||
confirmedDishes=tempSelected.slice();
|
||||
renderPickerTags();
|
||||
closeDishModal();
|
||||
});
|
||||
|
||||
// 渲染触发区域的已选标签
|
||||
function renderPickerTags(){
|
||||
// 清除旧标签
|
||||
trigger.querySelectorAll('.dish-picker__tag').forEach(function(t){t.remove();});
|
||||
if(confirmedDishes.length===0){
|
||||
placeholder.style.display='';
|
||||
return;
|
||||
}
|
||||
placeholder.style.display='none';
|
||||
confirmedDishes.forEach(function(id){
|
||||
var d=DISHES.find(function(x){return x.id===id;});
|
||||
if(!d) return;
|
||||
var tag=document.createElement('span');
|
||||
tag.className='dish-picker__tag';
|
||||
tag.innerHTML=d.name+'<span class="dish-picker__tag-del" data-id="'+d.id+'">×</span>';
|
||||
trigger.appendChild(tag);
|
||||
});
|
||||
}
|
||||
|
||||
// 点击标签删除按钮移除餐品
|
||||
trigger.addEventListener('click',function(e){
|
||||
var del=e.target.closest('.dish-picker__tag-del');
|
||||
if(!del) return;
|
||||
e.stopPropagation();
|
||||
var id=parseInt(del.getAttribute('data-id'));
|
||||
confirmedDishes=confirmedDishes.filter(function(v){return v!==id;});
|
||||
renderPickerTags();
|
||||
});
|
||||
|
||||
// 关闭弹窗
|
||||
cancelBtn.addEventListener('click',closeDishModal);
|
||||
closeBtn.addEventListener('click',closeDishModal);
|
||||
overlay.addEventListener('click',function(e){if(e.target===overlay)closeDishModal();});
|
||||
})();
|
||||
|
||||
/* ========== Tab 切换 ========== */
|
||||
function switchTab(idx){
|
||||
document.querySelectorAll('.page-tab').forEach((t,i)=>t.classList.toggle('active',i===idx));
|
||||
|
||||
Reference in New Issue
Block a user