';
addRow.parentNode.insertBefore(tr,addRow);
}
function confirmSpec(btn){
@@ -745,21 +759,35 @@ function confirmSpec(btn){
var gramInput=group.querySelector('input[type="number"]');
var sel=group.querySelector('select');
var priceInput=row.querySelectorAll('input[type="number"]')[1];
- var cleanMarginInput=row.querySelectorAll('input[type="number"]')[2];
- var cleanPriceInput=row.querySelectorAll('input[type="number"]')[3];
var portion=sel?sel.value:'';
var gram=gramInput?gramInput.value.trim():'';
var price=priceInput?priceInput.value.trim():'';
- var cleanMargin=cleanMarginInput?cleanMarginInput.value.trim():'';
- var cleanPrice=cleanPriceInput?cleanPriceInput.value.trim():'';
if(!portion||portion==='请选择'||!gram||!price){alert('请填写完整信息');return;}
- var cleanMarginText = cleanMargin ? parseFloat(cleanMargin).toFixed(1)+'%' : '—';
- var cleanPriceText = cleanPrice ? parseFloat(cleanPrice).toFixed(2) : '—';
var saleActive = !!row.querySelector('.sale-toggle.active');
var saleHtml = '
'+(saleActive?'上架':'下架')+'
';
var specViewHtml='
'+parseFloat(gram)+'g/'+portion+'
';
row.className='';
- row.innerHTML='
'+specViewHtml+'
'+parseFloat(price).toFixed(2)+'
'+cleanMarginText+'
'+cleanPriceText+'
'+saleHtml+'
默认
';
+ row.innerHTML='
'+specViewHtml+'
'+parseFloat(price).toFixed(2)+'
'+saleHtml+'
默认
';
+}
+function confirmCleanSpec(btn){
+ var row=btn.closest('tr');
+ var group=row.querySelector('.spec-input-group');
+ var gramInput=group.querySelector('input[type="number"]');
+ var sel=group.querySelector('select');
+ var cleanMarginInput=row.querySelectorAll('input[type="number"]')[1];
+ var cleanPriceInput=row.querySelectorAll('input[type="number"]')[2];
+ var portion=sel?sel.value:'';
+ var gram=gramInput?gramInput.value.trim():'';
+ var cleanMargin=cleanMarginInput?cleanMarginInput.value.trim():'';
+ var cleanPrice=cleanPriceInput?cleanPriceInput.value.trim():'';
+ if(!portion||portion==='请选择'||!gram||!cleanMargin||!cleanPrice){alert('请填写完整信息');return;}
+ var cleanMarginText = parseFloat(cleanMargin).toFixed(1)+'%';
+ var cleanPriceText = parseFloat(cleanPrice).toFixed(2);
+ var saleActive = !!row.querySelector('.sale-toggle.active');
+ var saleHtml = '
'+(saleActive?'上架':'下架')+'
';
+ var specViewHtml='
'+parseFloat(gram)+'g/'+portion+'
';
+ row.className='';
+ row.innerHTML='
'+specViewHtml+'
'+cleanMarginText+'
'+cleanPriceText+'
'+saleHtml+'
默认
';
}
function toggleCleanSale(el){
var active = el.classList.toggle('active');
@@ -1011,13 +1039,13 @@ function recalcAfterIngredientChange(){
}
function cancelSpec(btn){btn.closest('tr').remove();}
function toggleDefault(el){
- var tbody=document.getElementById('specBody');
+ var tbody=el.closest('tbody');
if(tbody){tbody.querySelectorAll('.spec-toggle').forEach(function(t){t.classList.remove('active');});}
el.classList.add('active');
}
function removeSpec(btn){
- var row=btn.closest('tr');var wasDefault=row.querySelector('.spec-toggle.active');row.remove();
- if(wasDefault){var first=document.querySelector('#specBody tr:not(.spec-add-row):not(.spec-edit-row) .spec-toggle');if(first)first.classList.add('active');}
+ var row=btn.closest('tr');var tbody=row.closest('tbody');var wasDefault=row.querySelector('.spec-toggle.active');row.remove();
+ if(wasDefault){var first=tbody.querySelector('tr:not(.spec-add-row):not(.spec-edit-row) .spec-toggle');if(first)first.classList.add('active');}
}
/* 食材清单数据:每个食材含 code + 多个净菜(netName 净菜形式,本身可含-分隔符) + 净菜规格别名(aliases 多规格时需先选净菜再选规格) */
@@ -1251,7 +1279,8 @@ var EDIT_DATA = {
pricing:{basePrice:'6.00',ingredientCost:4.80,per100gCost:2.40,profitRate:150,suggestedPrice:'6.00'},
promoVideos:[{title:'红烧肉宣传片',duration:'1分30秒',size:'48MB',enabled:true},{title:'制作工艺展示',duration:'2分15秒',size:'72MB',enabled:false}],
crowd:[{name:'成人',level:'推荐'},{name:'高血脂人群',level:'慎食'},{name:'高血压人群',level:'适量'}],
- specs:[{portion:'标准份',baseGram:200,unit:'份',price:12,cleanMargin:55.0,cleanPrice:9,cleanSale:false,isDefault:true},{portion:'小份',baseGram:120,unit:'份',price:8,cleanMargin:50.0,cleanPrice:6,cleanSale:false,isDefault:false},{portion:'大份',baseGram:300,unit:'份',price:18,cleanMargin:58.0,cleanPrice:13,cleanSale:false,isDefault:false}],
+ specs:[{portion:'标准份',baseGram:200,unit:'份',price:12,sale:true,isDefault:true},{portion:'小份',baseGram:120,unit:'份',price:8,sale:true,isDefault:false},{portion:'大份',baseGram:300,unit:'份',price:18,sale:false,isDefault:false}],
+ cleanSpecs:[{portion:'标准份',baseGram:200,unit:'份',cleanMargin:55.0,cleanPrice:9,cleanSale:false,cleanDefault:true},{portion:'小份',baseGram:120,unit:'份',cleanMargin:50.0,cleanPrice:6,cleanSale:false,cleanDefault:false},{portion:'大份',baseGram:300,unit:'份',cleanMargin:58.0,cleanPrice:13,cleanSale:false,cleanDefault:false}],
cookedWeight:200,
composition:[{code:'YQ-001',name:'猪五花肉',netName:'红烧块',amount:150,type:'主材'},{code:'YQ-023',name:'冰糖',netName:'糖浆',amount:20,type:'调料'},{code:'YQ-017',name:'生抽',netName:'调味汁',amount:15,type:'调料'},{code:'YQ-020',name:'料酒',netName:'料酒汁',amount:10,type:'调料'}],
cook:{mainMethod:'炖',subMethod:'煎',heat:'中火→小火',duration:45,temp:100,steps:6,desc:'1.五花肉切块焯水;2.锅中煎至金黄;3.加冰糖炒色;4.加酱油料酒;5.加水小火炖40分钟;6.大火收汁'},
@@ -1294,7 +1323,8 @@ if(pageMode==='convert' && INNOV){
EDIT_DATA.tag = INNOV.tag;
EDIT_DATA.status = '上架';
EDIT_DATA.crowd = [];
- EDIT_DATA.specs = [{portion:'标准份',baseGram:350,unit:'份',price:15,cleanMargin:52.0,cleanPrice:10,cleanSale:false,isDefault:true},{portion:'小份',baseGram:200,unit:'份',price:10,cleanMargin:48.0,cleanPrice:7,cleanSale:false,isDefault:false}];
+ EDIT_DATA.specs = [{portion:'标准份',baseGram:350,unit:'份',price:15,sale:true,isDefault:true},{portion:'小份',baseGram:200,unit:'份',price:10,sale:false,isDefault:false}];
+ EDIT_DATA.cleanSpecs = [{portion:'标准份',baseGram:350,unit:'份',cleanMargin:52.0,cleanPrice:10,cleanSale:false,cleanDefault:true},{portion:'小份',baseGram:200,unit:'份',cleanMargin:48.0,cleanPrice:7,cleanSale:false,cleanDefault:false}];
EDIT_DATA.cookedWeight = INNOV.cookedWeight || 200;
EDIT_DATA.composition = INNOV.composition;
EDIT_DATA.cook = INNOV.cook;
@@ -1422,19 +1452,33 @@ function fillEditData(){
if(inputs[1]) inputs[1].value = d.pricing.profitRate||'';
if(inputs[2]) inputs[2].value = (d.pricing.ingredientCost||0).toFixed(2);
}
- // 预填规格表
+ // 预填餐品规格表
var specBody = container.querySelector('#specTable tbody');
if(specBody){
specBody.innerHTML = '';
- d.specs.forEach(function(s){
+ (d.specs||[]).forEach(function(s){
+ var tr = document.createElement('tr');
+ var saleActive = s.sale === true;
+ var saleHtml = '
'+(saleActive?'上架':'下架')+'
';
+ var portionVal = s.portion || s.spec || '';
+ var gramVal = s.baseGram!==undefined?s.baseGram:(s.weight!==undefined?s.weight:'');
+ tr.innerHTML = '
'+saleHtml+'
删除
';
+ specBody.appendChild(tr);
+ });
+ }
+ // 预填餐品净菜包规格表
+ var cleanSpecBody = container.querySelector('#cleanSpecTable tbody');
+ if(cleanSpecBody){
+ cleanSpecBody.innerHTML = '';
+ (d.cleanSpecs||[]).forEach(function(s){
var tr = document.createElement('tr');
var saleActive = s.cleanSale === true;
var saleHtml = '
'+(saleActive?'上架':'下架')+'
';
var portionVal = s.portion || s.spec || '';
var gramVal = s.baseGram!==undefined?s.baseGram:(s.weight!==undefined?s.weight:'');
var cleanMarginVal = s.cleanMargin!==undefined?s.cleanMargin:'';
- tr.innerHTML = '