① 生鲜类抽检不合格汇总(检索 + 分析)
类别分布
风险等级
来源(监管局)TOP15
月度趋势
高频不合格商品 TOP15
高频不合格项目 TOP15
② 全品类抽检不合格汇总(检索 + 分析)
类别分布
风险等级
来源(监管局)TOP15
月度趋势
高频不合格商品 TOP15
高频不合格项目 TOP15
③ 每周汇总(突出当周)
当周 · 类别分布
当周 · 来源(监管局)
当周新增不合格记录(按风险高亮)
④ 联华专项分析(逐条详细 + 举一反三 + 后续建议)
联华 · 按风险等级
联华 · 按类别
联华 · 按门店(被抽样单位)
'+x.l+'
'+
''+
''+x.v+'
';
el.appendChild(row);
});
}
function donut(el, arr){
el.innerHTML='';
const tot = arr.reduce((s,x)=>s+x.v,0)||1;
const box = el.firstChild;
arr.forEach(x=>{
const s=document.createElement('span');
s.style.width=(x.v/tot*100)+'%'; s.style.background=RISKCOLOR[x.l]||'#95a5a6';
s.title=x.l+': '+x.v; box.appendChild(s);
});
const lg=document.createElement('div'); lg.className='legend';
arr.forEach(x=>{
lg.innerHTML += ''+x.l+' '+x.v+'';
});
el.appendChild(lg);
}
function trend(el, recs){
const m={};
recs.forEach(r=>{ if(r.date&&r.date.length>=7){ const k=r.date.slice(0,7); m[k]=(m[k]||0)+1; } });
const keys=Object.keys(m).sort();
const arr=keys.map(k=>({l:k, v:m[k]}));
bars(el, arr);
}
// ---------- 表格 ----------
function tableHTML(recs, cols){
let h='| '+c.t+' | ').join('')+'
|---|
无匹配记录
'; return h; }
recs.forEach((r,i)=>{
h+=''+n+'
'+l+'
'+(i+1)+'. '+esc(r.name)+ ' '+r.risk+'
'+ ''+ '不合格项目:'+esc(r.proj)+'
'+
(r.maker&&r.maker!=='无'?'标称生产单位:'+esc(r.maker)+'
':'')+
'🔍 举一反三:
'+r.fan+'
'+
''+r.fan+'
✅ 后续建议举措:
'+r.adv+'
'+
''+r.adv+'