3.1客户分类日报:T-4~T-1表头改为实际日期(动态)

This commit is contained in:
2026-09-11 17:26:27 +08:00
parent 2b2bd4891b
commit f213e8153c
+23 -20
View File
@@ -104,18 +104,7 @@
<div class="card">
<h2>3.1 客户分类日报</h2>
<div class="sub-note">DoD=T-1−T-2,DoD%=T-1/T-2−1。波动原因可编辑(暂存本浏览器)。</div>
<div class="scroll"><table id="tCustDaily"><thead><tr>
<th class="txt cd-sort" data-k="cat" data-ty="str">客户分类<span class="arw"></span></th>
<th class="cd-sort" data-k="idsp" data-ty="num">iDSP个数<span class="arw"></span></th>
<th class="cd-sort" data-k="base" data-ty="num">base daily revenue<span class="arw"></span></th>
<th class="cd-sort" data-k="t4" data-ty="num">T-4收入<span class="arw"></span></th>
<th class="cd-sort" data-k="t3" data-ty="num">T-3收入<span class="arw"></span></th>
<th class="cd-sort" data-k="t2" data-ty="num">T-2收入<span class="arw"></span></th>
<th class="cd-sort" data-k="t1" data-ty="num">T-1收入<span class="arw"></span></th>
<th class="cd-sort" data-k="dod" data-ty="num">DoD<span class="arw"></span></th>
<th class="cd-sort" data-k="dodp" data-ty="num">DoD%<span class="arw"></span></th>
<th class="txt">波动原因</th>
</tr></thead><tbody></tbody></table></div>
<div class="scroll"><table id="tCustDaily"><thead></thead><tbody></tbody></table></div>
</div>
<div class="card">
<h2>3.2 客户明细 <span class="tag">保留14天</span></h2>
@@ -358,6 +347,20 @@ function renderCustDaily(){
return (va<vb?-1:va>vb?1:0)*dir;
});
}
// 动态表头:用实际日期替代 T-4~T-1
function dLbl(dt){ return dt? dt : '—'; }
var thead=document.querySelector('#tCustDaily thead');
thead.innerHTML='<tr>'
+'<th class="txt cd-sort" data-k="cat" data-ty="str">客户分类<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="idsp" data-ty="num">iDSP个数<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="base" data-ty="num">base daily revenue<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="t4" data-ty="num">'+dLbl(t4)+'<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="t3" data-ty="num">'+dLbl(t3)+'<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="t2" data-ty="num">'+dLbl(t2)+'<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="t1" data-ty="num">'+dLbl(t1)+'<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="dod" data-ty="num">DoD('+dLbl(t1)+'−'+dLbl(t2)+')<span class="arw"></span></th>'
+'<th class="cd-sort" data-k="dodp" data-ty="num">DoD%<span class="arw"></span></th>'
+'<th class="txt">波动原因</th></tr>';
var body=rows.map(function(r){
var dc=r.dod==null?'':(r.dod>=0?'pos':'neg');
return '<tr><td class="txt">'+r.cat+'</td><td>'+(r.idsp||'')+'</td><td>'+n2(r.base)+'</td>'
@@ -368,7 +371,14 @@ function renderCustDaily(){
+reasonCell('cust_daily', r.cat)+'</tr>';
}).join('');
document.querySelector('#tCustDaily tbody').innerHTML=body;
// 表头动态生成后重新绑定排序点击 + 箭头
document.querySelectorAll('#tCustDaily th.cd-sort').forEach(function(th){
th.style.cursor='pointer';
th.onclick=function(){
var k=th.getAttribute('data-k'), ty=th.getAttribute('data-ty');
if(CD_SORT.k===k){ CD_SORT.dir=(CD_SORT.dir==='asc'?'desc':'asc'); } else { CD_SORT.k=k; CD_SORT.ty=ty; CD_SORT.dir='desc'; }
renderCustDaily();
};
th.classList.remove('asc','desc');
if(th.getAttribute('data-k')===CD_SORT.k) th.classList.add(CD_SORT.dir);
});
@@ -416,14 +426,7 @@ function renderCustDetail(){
// 3.1/3.2 表头排序绑定
function bindCustSort(){
document.querySelectorAll('#tCustDaily th.cd-sort').forEach(function(th){
th.style.cursor='pointer';
th.onclick=function(){
var k=th.getAttribute('data-k'), ty=th.getAttribute('data-ty');
if(CD_SORT.k===k){ CD_SORT.dir=(CD_SORT.dir==='asc'?'desc':'asc'); } else { CD_SORT.k=k; CD_SORT.ty=ty; CD_SORT.dir='desc'; }
renderCustDaily();
};
});
// 3.1 的表头排序绑定在 renderCustDaily 内部动态处理(表头是动态生成的)
document.querySelectorAll('#tCustDetail th.de-sort').forEach(function(th){
th.style.cursor='pointer';
th.onclick=function(){