diff --git a/.superpowers/prototype/atoms.css b/.superpowers/prototype/atoms.css
index d33887a..dbd79f7 100644
--- a/.superpowers/prototype/atoms.css
+++ b/.superpowers/prototype/atoms.css
@@ -71,6 +71,11 @@ svg{fill:none; stroke:currentColor;}
/* ---- 状态徽章 ---- */
.badge{display:inline-flex; align-items:center; gap:5px; height:22px; padding:0 9px; border-radius:var(--r-pill); font-size:var(--fs-sm); font-weight:600;}
.badge::before{content:""; width:6px; height:6px; border-radius:50%; background:currentColor;}
+/* 徽章图标化(2026-07-04):.bi=代表性图标替代圆点(桌面);.ico=纯图标紧凑徽章(移动卡片) */
+.badge.bi::before, .badge.ico::before{content:none;}
+.badge .ic{width:12px; height:12px; stroke-width:2.2;}
+.badge.ico{width:22px; padding:0; justify-content:center; gap:0;}
+.badge.ico .ic{width:13px; height:13px;}
.b-在售{background:var(--success-bg); color:var(--success);}
.b-缺货{background:var(--danger-bg); color:var(--danger);}
.b-预警{background:var(--warn-bg); color:var(--warn);}
diff --git a/.superpowers/prototype/index.html b/.superpowers/prototype/index.html
index f3a5af8..ebc3b5f 100644
--- a/.superpowers/prototype/index.html
+++ b/.superpowers/prototype/index.html
@@ -377,6 +377,8 @@
KPI 卡
.kpi
diff --git a/.superpowers/prototype/screens/icons.js b/.superpowers/prototype/screens/icons.js
index 750f36e..66502dc 100644
--- a/.superpowers/prototype/screens/icons.js
+++ b/.superpowers/prototype/screens/icons.js
@@ -1,8 +1,8 @@
// 图标 sprite —— 单一真源(Lucide 官方图标,ISC 许可)
// 所有屏用
引用;改此处一个 symbol,全局生效。
-// 共 100 个:97 个源自 lucide-static,另有平台品牌图标 i-apple / i-android(simple-icons,填充式,path 自带 fill 覆盖描边样式)与 i-tablet-smartphone(lucide)。新增图标先在此登记 symbol,再用 use 引用。
+// 共 101 个:98 个源自 lucide-static,另有平台品牌图标 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 97875ae..b9b7df9 100644
--- a/.superpowers/prototype/screens/m-stock-in-list.html
+++ b/.superpowers/prototype/screens/m-stock-in-list.html
@@ -20,14 +20,22 @@
-
@@ -48,6 +56,10 @@ const OPS=['全部','王经理','李采购'];
const REVIEWERS=['全部','张主管','王经理'];
const DATES=['全部时间','近 7 天','近 30 天','本月'];
const state={q:'',status:'全部'};
+/* ---- 状态代表图标(徽章图标化 2026-07-04:移动纯图标 .ico / 桌面图标+文字 .bi) ---- */
+const STICON={'草稿':'i-ic06','待审核':'i-ic04','已审核':'i-check','已拒绝':'i-close','部分退单':'i-undo','已退单':'i-undo','待定价':'i-tag'};
+function icoB(v){ return `
`; }
+function biB(v){ return `
${v}`; }
/* ---- 详细搜索条件(与 Flutter _AdvSearchDialog 同一字段集,移动为竖排简化版) ---- */
const ADV_DEF={no:'',product:'',batch:'',party:'全部',series:'全部',spec:'全部',op:'全部',reviewer:'全部',status:'全部',date:'全部时间'};
let adv={...ADV_DEF};
@@ -75,7 +87,7 @@ function render(){
L.innerHTML=rows.map(o=>`
${o.no}
${o.party} · ${o.items} 项
-
${o.status}${o.ret?`${o.ret}`:''}${o.pending?'待定价':''}${o.amount}
+
${icoB(o.status)}${o.ret?icoB(o.ret):''}${o.pending?icoB('待定价'):''}
${o.amount}
@@ -121,11 +133,11 @@ function actions(o){
return '关闭
';
}
function openOrder(no){ const o=ORDERS.find(x=>x.no===no);
- const pendRow=o.pending?`成本含待定价
`:'';
+ const pendRow=o.pending?`成本${biB('待定价')}
`:'';
const confirmBtn=(o.pending&&o.status==='已审核')?`确认进价
`:'';
const lns=o.lines||[];
- const lineRows=lns.map((l,i)=>`${l.n}
${l.s} · ×${l.q}${l.pend?'待定价':l.a}
`).join('');
- openSheet('入库单详情', `单号${o.no}
供应商${o.party}
单据日期${o.date}
入库员${o.by}
审核员${o.auditor||'—'}
合计金额${o.amount}
${pendRow}状态${o.status}${o.ret?` ${o.ret}`:''}
+ const lineRows=lns.map((l,i)=>`${l.n}
${l.s} · ×${l.q}${l.pend?biB('待定价'):l.a}
`).join('');
+ openSheet('入库单详情', `单号${o.no}
供应商${o.party}
单据日期${o.date}
入库员${o.by}
审核员${o.auditor||'—'}
合计金额${o.amount}
${pendRow}状态${biB(o.status)}${o.ret?' '+biB(o.ret):''}
商品明细 · ${lns.length} 项
${lineRows}
${o.pending?'调货「先卖后定价」:进价待定,价格确定后点「确认进价」前向补齐成本与应付。
':''}
${confirmBtn}${actions(o)}
`);
diff --git a/.superpowers/prototype/screens/m-stock-out-list.html b/.superpowers/prototype/screens/m-stock-out-list.html
index 893077f..ca0d7e8 100644
--- a/.superpowers/prototype/screens/m-stock-out-list.html
+++ b/.superpowers/prototype/screens/m-stock-out-list.html
@@ -20,14 +20,22 @@
-
@@ -47,6 +55,10 @@ const OPS=['全部','王经理','李销售'];
const REVIEWERS=['全部','张主管','王经理'];
const DATES=['全部时间','近 7 天','近 30 天','本月'];
const state={q:'',status:'全部'};
+/* ---- 状态代表图标(徽章图标化 2026-07-04:移动纯图标 .ico / 桌面图标+文字 .bi) ---- */
+const STICON={'草稿':'i-ic06','待审核':'i-ic04','已审核':'i-check','已拒绝':'i-close','部分退单':'i-undo','已退单':'i-undo','待定价':'i-tag'};
+function icoB(v){ return ``; }
+function biB(v){ return `${v}`; }
/* ---- 详细搜索条件(与 Flutter _AdvancedSearchDialog 同一字段集,移动为竖排简化版) ---- */
const ADV_DEF={no:'',product:'',batch:'',party:'全部',series:'全部',spec:'全部',op:'全部',reviewer:'全部',status:'全部',date:'全部时间'};
let adv={...ADV_DEF};
@@ -74,7 +86,7 @@ function render(){
L.innerHTML=rows.map(o=>`
${o.no}
${o.party} · ${o.items} 项
-
${o.status}${o.ret?`${o.ret}`:''}${o.pending?'待定价':''}${o.amount}
+
${icoB(o.status)}${o.ret?icoB(o.ret):''}${o.pending?icoB('待定价'):''}
${o.amount}
@@ -120,11 +132,11 @@ function actions(o){
return '关闭
';
}
function openOrder(no){ const o=ORDERS.find(x=>x.no===no);
- const pendRow=o.pending?`售价含待定价
`:'';
+ const pendRow=o.pending?`售价${biB('待定价')}
`:'';
const confirmBtn=(o.pending&&o.status==='已审核')?`确认售价
`:'';
const lns=o.lines||[];
- const lineRows=lns.map((l,i)=>`${l.n}
${l.s} · ×${l.q}${l.pend?'待定价':l.a}
`).join('');
- openSheet('出库单详情', `单号${o.no}
客户${o.party}
单据日期${o.date}
出库员${o.by}
审核员${o.auditor||'—'}
合计金额${o.amount}
合计利润 · 管理员可见${o.profit}
${pendRow}状态${o.status}${o.ret?` ${o.ret}`:''}
+ const lineRows=lns.map((l,i)=>`${l.n}
${l.s} · ×${l.q}${l.pend?biB('待定价'):l.a}
`).join('');
+ openSheet('出库单详情', `单号${o.no}
客户${o.party}
单据日期${o.date}
出库员${o.by}
审核员${o.auditor||'—'}
合计金额${o.amount}
合计利润 · 管理员可见${o.profit}
${pendRow}状态${biB(o.status)}${o.ret?' '+biB(o.ret):''}
商品明细 · ${lns.length} 项
${lineRows}
${o.pending?'「先卖后定价」:售价待定,价格确定后点「确认售价」按售价×数量结算应收。
':''}
${confirmBtn}${actions(o)}
`);
diff --git a/.superpowers/prototype/screens/stock-in-list.html b/.superpowers/prototype/screens/stock-in-list.html
index 880ecec..6ce3e33 100644
--- a/.superpowers/prototype/screens/stock-in-list.html
+++ b/.superpowers/prototype/screens/stock-in-list.html
@@ -154,6 +154,9 @@ const PARTY_LABEL='供应商';
function money(n){ return '¥'+n.toLocaleString(); }
+/* ---- 状态代表图标(徽章图标化 2026-07-04:圆点 → .bi 图标徽章) ---- */
+const STICON={'草稿':'i-ic06','待审核':'i-ic04','已审核':'i-check','已拒绝':'i-close','部分退单':'i-undo','已退单':'i-undo','待定价':'i-tag'};
+function stBadge(v){ return `${v}`; }
function numf(n){ return (Number(n)||0).toLocaleString(); } /* 明细行内数字:去¥,缩一号(2026-07-03) */
function filtered(){ return ORDERS.filter(o=>{
if(state.status!=='全部'&&o.status!==state.status&&o.ret!==state.status)return false;
@@ -198,7 +201,7 @@ function render(){
document.getElementById('thead').innerHTML=''+cols.map(c=>{ const cls=(c.num?'num ':'')+(c.key==='act'?'act ':''); if(c.filter){const on=state.status!=='全部'; return `| ${c.label} | `;} return `${c.label} | `; }).join('')+'
';
const rows=filtered(); const start=(state.page-1)*state.perPage; const pageRows=rows.slice(start,start+state.perPage); const tb=document.getElementById('tbody');
if(rows.length===0){ tb.innerHTML=`没有匹配的入库单 · 试试调整筛选或搜索 |
`; }
- else { tb.innerHTML=pageRows.map(o=>{ const idx=ORDERS.indexOf(o); return ''+cols.map(c=>{ if(c.key==='no')return `| ${o.no} | `; if(c.key==='party')return `${o.party} | `; if(c.key==='wh')return `${o.wh} | `; if(c.key==='amount')return `${money(o.amount)} | `; if(c.key==='status')return `${o.status}${o.ret?` ${o.ret}`:''} | `; if(c.key==='op')return `${o.op} | `; if(c.key==='auditor')return `${o.auditor?o.auditor:'—'} | `; if(c.key==='act')return ` | `; return `${o[c.key]} | `; }).join('')+'
'; }).join(''); }
+ else { tb.innerHTML=pageRows.map(o=>{ const idx=ORDERS.indexOf(o); return ''+cols.map(c=>{ if(c.key==='no')return `| ${o.no} | `; if(c.key==='party')return `${o.party} | `; if(c.key==='wh')return `${o.wh} | `; if(c.key==='amount')return `${money(o.amount)} | `; if(c.key==='status')return `${stBadge(o.status)}${o.ret?' '+stBadge(o.ret):''} | `; if(c.key==='op')return `${o.op} | `; if(c.key==='auditor')return `${o.auditor?o.auditor:'—'} | `; if(c.key==='act')return ` | `; return `${o[c.key]} | `; }).join('')+'
'; }).join(''); }
document.getElementById('pagerInfo').textContent=`显示 ${rows.length?start+1:0}–${Math.min(start+state.perPage,rows.length)},共 ${rows.length}`;
const pages=Math.max(1,Math.ceil(rows.length/state.perPage)); let pg=``; for(let p=1;p<=pages;p++)pg+=``; pg+=``; document.getElementById('pager').innerHTML=pg;
document.getElementById('subInfo').textContent=`本月 ${rows.length} 笔入库单`;
@@ -306,7 +309,7 @@ function openDetail(idx){ const o=ORDERS[idx]; document.getElementById('dTitle')
o.lines.forEach(l=>{ const pi=PINFO[l.name]||{}; const pend=(l.price||0)<=0; const priceC=pend?'待定价':numf(l.price); const amtC=pend?'待定价':numf(l.qty*l.price); lh+=`${l.name}${pi.code||'—'}${pi.series||'—'}${pi.spec||''}${l.qty}${priceC}${amtC}
`; }); lh+='';
const pendCount=o.lines.filter(l=>(l.price||0)<=0).length;
const auditor=o.auditor?o.auditor:'
—';
- document.getElementById('drawerBody').innerHTML=`
单据日期${o.date}
${PARTY_LABEL}${o.party}
仓库${o.wh}
商品数${o.count}
入库员${o.op}
审核员${auditor}
状态${o.status}${o.ret?` ${o.ret}`:''}
${lh}
合计金额 ${money(o.amount)}
`+
+ document.getElementById('drawerBody').innerHTML=`
单据日期${o.date}
${PARTY_LABEL}${o.party}
仓库${o.wh}
商品数${o.count}
入库员${o.op}
审核员${auditor}
状态${stBadge(o.status)}${o.ret?' '+stBadge(o.ret):''}
${lh}
合计金额 ${money(o.amount)}
`+
`
${(o.status==='已审核'&&pendCount>0)?`
`:''}
`;
document.getElementById('drawer').classList.add('show'); document.getElementById('drawerMask').classList.add('show'); }
function closeDrawer(){ document.getElementById('drawer').classList.remove('show'); document.getElementById('drawerMask').classList.remove('show'); }
diff --git a/.superpowers/prototype/screens/stock-out-list.html b/.superpowers/prototype/screens/stock-out-list.html
index 5dd8c4b..3ec3658 100644
--- a/.superpowers/prototype/screens/stock-out-list.html
+++ b/.superpowers/prototype/screens/stock-out-list.html
@@ -153,6 +153,9 @@ const PARTY_LABEL='客户';
function money(n){ return '¥'+n.toLocaleString(); }
+/* ---- 状态代表图标(徽章图标化 2026-07-04:圆点 → .bi 图标徽章) ---- */
+const STICON={'草稿':'i-ic06','待审核':'i-ic04','已审核':'i-check','已拒绝':'i-close','部分退单':'i-undo','已退单':'i-undo','待定价':'i-tag'};
+function stBadge(v){ return `
${v}`; }
function numf(n){ return (Number(n)||0).toLocaleString(); } /* 明细行内数字:去¥,缩一号(2026-07-03) */
function filtered(){ return ORDERS.filter(o=>{
if(state.status!=='全部'&&o.status!==state.status&&o.ret!==state.status)return false;
@@ -197,7 +200,7 @@ function render(){
document.getElementById('thead').innerHTML='
'+cols.map(c=>{ const cls=(c.num?'num ':'')+(c.key==='act'?'act ':''); if(c.filter){const on=state.status!=='全部'; return `| ${c.label} | `;} return `${c.label} | `; }).join('')+'
';
const rows=filtered(); const start=(state.page-1)*state.perPage; const pageRows=rows.slice(start,start+state.perPage); const tb=document.getElementById('tbody');
if(rows.length===0){ tb.innerHTML=`
没有匹配的出库单 · 试试调整筛选或搜索 |
`; }
- else { tb.innerHTML=pageRows.map(o=>{ const idx=ORDERS.indexOf(o); return '
'+cols.map(c=>{ if(c.key==='no')return `| ${o.no} | `; if(c.key==='party')return `${o.party} | `; if(c.key==='wh')return `${o.wh} | `; if(c.key==='amount')return `${money(o.amount)} | `; if(c.key==='status')return `${o.status}${o.ret?` ${o.ret}`:''} | `; if(c.key==='op')return `${o.op} | `; if(c.key==='auditor')return `${o.auditor?o.auditor:'—'} | `; if(c.key==='act')return ` | `; return `${o[c.key]} | `; }).join('')+'
'; }).join(''); }
+ else { tb.innerHTML=pageRows.map(o=>{ const idx=ORDERS.indexOf(o); return '
'+cols.map(c=>{ if(c.key==='no')return `| ${o.no} | `; if(c.key==='party')return `${o.party} | `; if(c.key==='wh')return `${o.wh} | `; if(c.key==='amount')return `${money(o.amount)} | `; if(c.key==='status')return `${stBadge(o.status)}${o.ret?' '+stBadge(o.ret):''} | `; if(c.key==='op')return `${o.op} | `; if(c.key==='auditor')return `${o.auditor?o.auditor:'—'} | `; if(c.key==='act')return ` | `; return `${o[c.key]} | `; }).join('')+'
'; }).join(''); }
document.getElementById('pagerInfo').textContent=`显示 ${rows.length?start+1:0}–${Math.min(start+state.perPage,rows.length)},共 ${rows.length}`;
const pages=Math.max(1,Math.ceil(rows.length/state.perPage)); let pg=`
`; for(let p=1;p<=pages;p++)pg+=`
`; pg+=`
`; document.getElementById('pager').innerHTML=pg;
document.getElementById('subInfo').textContent=`本月 ${rows.length} 笔出库单`;
@@ -302,7 +305,7 @@ function openDetail(idx){ const o=ORDERS[idx]; document.getElementById('dTitle')
o.lines.forEach(l=>{ const pi=PINFO[l.name]||{}; const cost=l.cost!=null?l.cost:Math.round((l.price||0)*0.85); const pend=(l.price||0)<=0; const saleC=pend?'
待定价':numf(l.price); const profit=(l.price-cost)*l.qty; const profitC=pend?'
待定价':`
${numf(profit)}`; lh+=`
${l.name}${pi.code||'—'}${pi.series||'—'}${pi.spec||''}${l.qty}${numf(cost)}${saleC}${pend?'待定价':numf(l.qty*l.price)}${profitC}
`; }); lh+='
';
const pendCount=o.lines.filter(l=>(l.price||0)<=0).length;
const auditor=o.auditor?o.auditor:'