diff --git a/.superpowers/prototype/index.html b/.superpowers/prototype/index.html
index 8532fc1..9bc91c4 100644
--- a/.superpowers/prototype/index.html
+++ b/.superpowers/prototype/index.html
@@ -393,8 +393,8 @@
单据明细行(商品 / 系列规格分列)
.lines .lr · .lcell .ln/.lcode/.lser/.lspec
商品 · 编码系列 / 规格数量单价金额
diff --git a/.superpowers/prototype/screens/icons.js b/.superpowers/prototype/screens/icons.js
index 4a5b5e8..aab40b7 100644
--- a/.superpowers/prototype/screens/icons.js
+++ b/.superpowers/prototype/screens/icons.js
@@ -1,8 +1,8 @@
// 图标 sprite —— 单一真源(Lucide 官方图标,ISC 许可)
// 所有屏用
引用;改此处一个 symbol,全局生效。
-// 共 102 个:99 个源自 lucide-static,另有平台品牌图标 i-apple / i-android(simple-icons,填充式,path 自带 fill 覆盖描边样式)与 i-tablet-smartphone(lucide)。新增图标先在此登记 symbol,再用 use 引用。
+// 共 104 个:99 个源自 lucide-static,i-info/i-alert 为点改实心圆的清晰变体,,另有平台品牌图标 i-apple / i-android(simple-icons,填充式,path 自带 fill 覆盖描边样式)与 i-tablet-smartphone(lucide)。新增图标先在此登记 symbol,再用 use 引用。
(function(){
- var SPRITE='
';
+ var SPRITE='
';
function inject(){ if(document.getElementById('ym-icon-sprite'))return; var d=document.createElement('div'); d.id='ym-icon-sprite'; d.style.cssText='position:absolute;width:0;height:0'; d.innerHTML=SPRITE; document.body.insertBefore(d,document.body.firstChild); }
if(document.readyState!=='loading')inject(); else document.addEventListener('DOMContentLoaded',inject);
})();
diff --git a/.superpowers/prototype/screens/m-stock-in-list.html b/.superpowers/prototype/screens/m-stock-in-list.html
index 569d1e4..020443c 100644
--- a/.superpowers/prototype/screens/m-stock-in-list.html
+++ b/.superpowers/prototype/screens/m-stock-in-list.html
@@ -94,7 +94,7 @@ function render(){
${icoB(o.status)}${o.ret?icoB(o.ret):''}${o.pending?icoB('待定价'):''}
${o.amount}
-
+
`).join('');
}
function setSt(s){ state.status=s; render(); }
@@ -153,7 +153,7 @@ function openOrder(no){ const o=ORDERS.find(x=>x.no===no);
}
/* ---- 确认进价(对齐桌面 ovConfirm,简化为 sheet) ---- */
function openConfirm(no){ const o=ORDERS.find(x=>x.no===no); const pend=(o.lines||[]).filter(l=>l.pend);
- openSheet('确认进价', `
调货「先卖后定价」:填写真实进价后,系统前向补齐库存成本、已出库成本快照,并按差额补一条应付流水——不反审核、不影响售价 / 应收。
`
+ openSheet('确认进价', `
调货「先卖后定价」:填写真实进价后,系统前向补齐库存成本、已出库成本快照,并按差额补一条应付流水——不反审核、不影响售价 / 应收。
`
+pend.map(l=>`
`).join('')
+`
`);
}
@@ -165,7 +165,7 @@ function setRetQty(i,v,max){ retStage[i]=Math.min(Math.max(1,Math.floor(+v||0)),
function stageAllRet(){ const o=ORDERS.find(x=>x.no===retNo); (o.lines||[]).forEach((l,i)=>retStage[i]=l.q); drawReturn(); }
function drawReturnSummary(){ const el=document.getElementById('retSum'); if(!el)return; const keys=Object.keys(retStage); const qty=keys.reduce((s,k)=>s+(+retStage[k]||0),0); el.textContent=keys.length?`已退单 ${keys.length} 项 · 从库存移除 −${qty} 件`:'未选择退单明细'; }
function drawReturn(){ const o=ORDERS.find(x=>x.no===retNo);
- openSheet('退单', `
提交后,退单明细对应的库存将「从库存删除」。退单明细不会删除,以红色「已退单」标注,且不可撤销。
`
+ openSheet('退单', `
提交后,退单明细对应的库存将「从库存删除」。退单明细不会删除,以红色「已退单」标注,且不可撤销。
`
+(o.lines||[]).map((l,i)=>{ const st=retStage[i]!=null;
return `
`; }).join('')
+`
diff --git a/.superpowers/prototype/screens/m-stock-out-list.html b/.superpowers/prototype/screens/m-stock-out-list.html
index 2822a21..2cfd042 100644
--- a/.superpowers/prototype/screens/m-stock-out-list.html
+++ b/.superpowers/prototype/screens/m-stock-out-list.html
@@ -93,7 +93,7 @@ function render(){
${icoB(o.status)}${o.ret?icoB(o.ret):''}${o.pending?icoB('待定价'):''}
${o.amount}
-
+
`).join('');
}
function setSt(s){ state.status=s; render(); }
@@ -153,7 +153,7 @@ function openOrder(no){ const o=ORDERS.find(x=>x.no===no);
}
/* ---- 确认售价(对齐桌面 ovConfirmSale,简化为 sheet) ---- */
function openConfirm(no){ const o=ORDERS.find(x=>x.no===no); const pend=(o.lines||[]).filter(l=>l.pend);
- openSheet('确认售价', `
「先卖后定价」:填写真实售价后,系统按售价×数量结算应收并补应收流水——不反审核、不影响成本 / 应付。
`
+ openSheet('确认售价', `
「先卖后定价」:填写真实售价后,系统按售价×数量结算应收并补应收流水——不反审核、不影响成本 / 应付。
`
+pend.map(l=>`
`).join('')
+`
`);
}
@@ -165,7 +165,7 @@ function setRetQty(i,v,max){ retStage[i]=Math.min(Math.max(1,Math.floor(+v||0)),
function stageAllRet(){ const o=ORDERS.find(x=>x.no===retNo); (o.lines||[]).forEach((l,i)=>retStage[i]=l.q); drawReturn(); }
function drawReturnSummary(){ const el=document.getElementById('retSum'); if(!el)return; const keys=Object.keys(retStage); const qty=keys.reduce((s,k)=>s+(+retStage[k]||0),0); el.textContent=keys.length?`已退单 ${keys.length} 项 · 退回库存 +${qty} 件`:'未选择退单明细'; }
function drawReturn(){ const o=ORDERS.find(x=>x.no===retNo);
- openSheet('退单', `
提交后,退单明细的数量将「加回库存」。退单明细不会删除,以红色「已退单」标注,且不可撤销。
`
+ openSheet('退单', `
提交后,退单明细的数量将「加回库存」。退单明细不会删除,以红色「已退单」标注,且不可撤销。
`
+(o.lines||[]).map((l,i)=>{ const st=retStage[i]!=null;
return `
`; }).join('')
+`
diff --git a/.superpowers/prototype/screens/stock-in-list.html b/.superpowers/prototype/screens/stock-in-list.html
index 7818a52..2293431 100644
--- a/.superpowers/prototype/screens/stock-in-list.html
+++ b/.superpowers/prototype/screens/stock-in-list.html
@@ -82,7 +82,7 @@
退单
@@ -90,7 +90,7 @@
确认进价
-
调货「先卖后定价」:填写真实进价后,系统前向补齐库存成本、已出库成本快照,并按差额补一条应付流水——不反审核、不影响售价 / 应收。
+
调货「先卖后定价」:填写真实进价后,系统前向补齐库存成本、已出库成本快照,并按差额补一条应付流水——不反审核、不影响售价 / 应收。
diff --git a/.superpowers/prototype/screens/stock-out-list.html b/.superpowers/prototype/screens/stock-out-list.html
index b45840d..b49e1a3 100644
--- a/.superpowers/prototype/screens/stock-out-list.html
+++ b/.superpowers/prototype/screens/stock-out-list.html
@@ -111,7 +111,7 @@
退单
@@ -119,7 +119,7 @@
确认售价
-
「先出后定价」:填写真实售价后,系统据此结算应收(售价 × 数量)并补一条应收流水——不影响成本 / 库存,不反审核。
+
「先出后定价」:填写真实售价后,系统据此结算应收(售价 × 数量)并补一条应收流水——不影响成本 / 库存,不反审核。
diff --git a/web/_includes/icons.njk b/web/_includes/icons.njk
index 734279c..2e01292 100644
--- a/web/_includes/icons.njk
+++ b/web/_includes/icons.njk
@@ -1,3 +1,3 @@
{# 图标雪碧图 — 单一真相源:自 .superpowers/prototype/screens/icons.js 提取(lucide 同源),
页面用
引用;修改图标请先改原型再同步 #}
-
+