标签改双组独立设计: 时间组×级别组自由组合(今日+推荐/有效等), 互不顶掉
This commit is contained in:
+21
-14
@@ -111,13 +111,19 @@ tr.today:hover td{background:#fde68a!important}
|
||||
<section class="pane">
|
||||
<div class="panel">
|
||||
<h3>候选人</h3>
|
||||
<div class="tabs" id="quickTabs">
|
||||
<button class="tab on" data-q="" onclick="quickTab('')">全部</button>
|
||||
<button class="tab" data-q="today" onclick="quickTab('today')">☀️ 今日</button>
|
||||
<button class="tab" data-q="valid" onclick="quickTab('valid')">✅ 有效人员</button>
|
||||
<button class="tab" data-q="rec" onclick="quickTab('rec')">推荐</button>
|
||||
<button class="tab" data-q="maybe" onclick="quickTab('maybe')">待定</button>
|
||||
<button class="tab" data-q="greeted" onclick="quickTab('greeted')">已打招呼</button>
|
||||
<div class="tabs" id="timeTabs">
|
||||
<span style="color:var(--sub);font-size:12px;align-self:center">时间:</span>
|
||||
<button class="tab on" data-q="" onclick="timeTab('')">全部时间</button>
|
||||
<button class="tab" data-q="today" onclick="timeTab('today')">☀️ 今日</button>
|
||||
<span style="color:var(--sub);font-size:12px;align-self:center;margin-left:10px">或选日期区间 ↓</span>
|
||||
</div>
|
||||
<div class="tabs" id="levelTabs">
|
||||
<span style="color:var(--sub);font-size:12px;align-self:center">级别:</span>
|
||||
<button class="tab on" data-q="" onclick="levelTab('')">全部</button>
|
||||
<button class="tab" data-q="valid" onclick="levelTab('valid')">✅ 有效人员</button>
|
||||
<button class="tab" data-q="rec" onclick="levelTab('rec')">推荐</button>
|
||||
<button class="tab" data-q="maybe" onclick="levelTab('maybe')">待定</button>
|
||||
<button class="tab" data-q="greeted" onclick="levelTab('greeted')">已打招呼</button>
|
||||
</div>
|
||||
<div class="filters">
|
||||
<select id="q_level"><option value="">全部级别</option><option value="有效">有效(推荐+待定)</option><option>推荐</option><option>待定</option><option>不推荐</option><option>不相关</option></select>
|
||||
@@ -275,16 +281,17 @@ function renderCharts(s){
|
||||
}
|
||||
window.addEventListener('resize',()=>charts.forEach(c=>c.resize()));
|
||||
let qToday=0;
|
||||
function quickTab(which){
|
||||
qToday=which==='today'?1:0;
|
||||
$('q_level').value=which==='valid'?'有效':(which==='rec'?'推荐':(which==='maybe'?'待定':''));
|
||||
$('q_greeted').value=which==='greeted'?'1':'';
|
||||
if(which!==''){$('q_from').value='';$('q_to').value=''}
|
||||
function timeTab(t){qToday=t==='today'?1:0;if(qToday){$('q_from').value='';$('q_to').value=''}loadList(1)}
|
||||
function levelTab(l){
|
||||
$('q_level').value=l==='valid'?'有效':(l==='rec'?'推荐':(l==='maybe'?'待定':''));
|
||||
$('q_greeted').value=l==='greeted'?'1':'';
|
||||
loadList(1);
|
||||
}
|
||||
function syncTabs(){
|
||||
const which=qToday?'today':($('q_level').value==='有效'?'valid':$('q_level').value==='推荐'?'rec':$('q_level').value==='待定'?'maybe':($('q_greeted').value==='1'?'greeted':''));
|
||||
document.querySelectorAll('#quickTabs .tab').forEach(b=>b.classList.toggle('on',b.dataset.q===which));
|
||||
document.querySelectorAll('#timeTabs .tab').forEach(b=>b.classList.toggle('on',(b.dataset.q==='today')===!!qToday));
|
||||
const lv=$('q_level').value,gr=$('q_greeted').value;
|
||||
const which=gr==='1'?'greeted':(lv==='有效'?'valid':(lv==='推荐'?'rec':(lv==='待定'?'maybe':'')));
|
||||
document.querySelectorAll('#levelTabs .tab').forEach(b=>b.classList.toggle('on',b.dataset.q===which));
|
||||
}
|
||||
function qs(){return `?level=${$('q_level').value}&greeted=${$('q_greeted').value}&account=${$('q_account').value}&today=${qToday}&date_from=${$('q_from').value}&date_to=${$('q_to').value}&q=${encodeURIComponent($('q_kw').value.trim())}`}
|
||||
async function loadList(p){
|
||||
|
||||
+13
-6
@@ -61,16 +61,23 @@ const sleep = (ms) => new Promise(r => setTimeout(r, ms));
|
||||
const kwOk = await p.evaluate(() => document.querySelectorAll('#tbody tr').length >= 0);
|
||||
ok('关键词筛选不报错', kwOk);
|
||||
|
||||
console.log('== 4b. 快捷标签页 ==');
|
||||
await p.evaluate(() => quickTab('valid')); await sleep(700);
|
||||
console.log('== 4b. 组合标签(时间×级别) ==');
|
||||
await p.evaluate(() => levelTab('valid')); await sleep(700);
|
||||
const validOk = await p.evaluate(() => {
|
||||
const rows = [...document.querySelectorAll('#tbody tr')];
|
||||
return rows.length > 0 && rows.every(tr => tr.textContent.includes('推荐') || tr.textContent.includes('待定'));
|
||||
});
|
||||
ok('"有效人员"页全部为推荐/待定', validOk);
|
||||
const todayRows = await p.evaluate(async () => { quickTab('today'); await new Promise(r => setTimeout(r, 600)); return document.querySelectorAll('#tbody tr.today').length; });
|
||||
ok(`"今日"页当天高亮行(${todayRows})`, todayRows >= 0);
|
||||
await p.evaluate(() => quickTab('')); await sleep(500);
|
||||
ok('"有效人员"全部为推荐/待定', validOk);
|
||||
await p.evaluate(() => timeTab('today')); await sleep(700);
|
||||
const combo = await p.evaluate(() => {
|
||||
const rows = [...document.querySelectorAll('#tbody tr')];
|
||||
const allToday = rows.every(tr => tr.classList.contains('today'));
|
||||
const allValid = rows.every(tr => tr.textContent.includes('推荐') || tr.textContent.includes('待定'));
|
||||
const tabs = [document.querySelector('#timeTabs .tab.on')?.dataset.q, document.querySelector('#levelTabs .tab.on')?.dataset.q];
|
||||
return { n: rows.length, allToday, allValid, tabs: tabs.join('+') };
|
||||
});
|
||||
ok(`组合"今日+有效"正确(${combo.n}行, 标签=${combo.tabs})`, (combo.n === 0 || combo.allToday) && (combo.n === 0 || combo.allValid) && combo.tabs === 'today+valid');
|
||||
await p.evaluate(() => { timeTab(''); levelTab(''); }); await sleep(500);
|
||||
|
||||
console.log('== 5. 候选人详情弹窗 ==');
|
||||
await p.evaluate(() => document.querySelector('#tbody tr')?.click()); await sleep(800);
|
||||
|
||||
Reference in New Issue
Block a user