diff --git a/index.html b/index.html index 840e62f..647b6a0 100644 --- a/index.html +++ b/index.html @@ -504,8 +504,7 @@ summary.append( kpi('Valid Clicks', nf.format(data.meta.valid_clicks), `${nf.format(data.meta.rows)} 条明细`), kpi('Postback Installs', nf.format(data.meta.installs), `安装率 ${data.meta.install_rate === null ? '-' : percent(data.meta.install_rate)}`), - kpi('Cost', money(data.meta.cost), `${nf.format(data.meta.matched_order_rows)} 条已关联订单`), - kpi('ROAS', data.meta.roas === null ? '-' : percent(data.meta.roas), `${nf.format(data.meta.unmatched_order_rows)} 条未关联订单`) + kpi('Cost', money(data.meta.cost), `${nf.format(data.meta.matched_order_rows)} 条已关联订单`) ); summary.style.marginBottom = '16px'; @@ -522,7 +521,6 @@ ['cost-desc','Cost:高到低'], ['cost-asc','Cost:低到高'], ['valid_clicks-desc','Clicks:高到低'], ['valid_clicks-asc','Clicks:低到高'], ['installs-desc','Installs:高到低'], ['installs-asc','Installs:低到高'], - ['roas-desc','ROAS:高到低'], ['roas-asc','ROAS:低到高'], ['adpingid-asc','Adping ID:升序'], ['pkg-asc','Pkg:A-Z'] ].forEach(([value,label]) => sort.append(new Option(`排序 · ${label}`, value))); const exportButton = el('button', 'button', '导出 MTG 数据'); @@ -617,10 +615,8 @@ const rows = mtgState.filtered.slice(start, start + PAGE_SIZE); const clicks = mtgState.filtered.reduce((sum, row) => sum + row.valid_clicks, 0); const installs = mtgState.filtered.reduce((sum, row) => sum + row.installs, 0); - const revenue = mtgState.filtered.reduce((sum, row) => sum + row.revenue, 0); const cost = mtgState.filtered.reduce((sum, row) => sum + row.cost, 0); const matchedRows = mtgState.filtered.filter(row => row.order_match).length; - const unmatchedRows = mtgState.filtered.length - matchedRows; const cards = panel.querySelectorAll('.kpi'); const setCard = (index, value, sub) => { cards[index].querySelector('.value').textContent = value; @@ -629,7 +625,6 @@ setCard(0, nf.format(clicks), `${nf.format(mtgState.filtered.length)} 条筛选明细`); setCard(1, nf.format(installs), `安装率 ${clicks ? percent(installs / clicks) : '-'}`); setCard(2, money(cost), `${nf.format(matchedRows)} 条已关联订单`); - setCard(3, cost ? percent(revenue / cost) : '-', `${nf.format(unmatchedRows)} 条未关联订单`); const meta = panel.querySelector('.result-meta'); meta.textContent = ''; @@ -642,12 +637,12 @@ wrap.textContent = ''; const table = el('table'); const thead = el('thead'); const header = el('tr'); - ['Adping ID', 'Pkg', '国家', 'Valid Clicks', 'Postback Installs', '安装率', 'Cost', 'ROAS', '订单关联', 'TaurusxDSP 状态'] + ['Adping ID', 'Pkg', '国家', 'Valid Clicks', 'Postback Installs', '安装率', 'Cost', '订单关联', 'TaurusxDSP 状态'] .forEach(label => header.append(el('th', '', label))); thead.append(header); table.append(thead); const tbody = el('tbody'); if (!rows.length) { - const cell = el('td', 'empty', '没有符合当前条件的 MTG 记录'); cell.colSpan = 10; + const cell = el('td', 'empty', '没有符合当前条件的 MTG 记录'); cell.colSpan = 9; const row = el('tr'); row.append(cell); tbody.append(row); } rows.forEach(record => { @@ -666,7 +661,6 @@ el('td', '', nf.format(record.installs)), el('td', '', record.install_rate === null ? '-' : percent(record.install_rate)), el('td', '', money(record.cost)), - el('td', '', record.roas === null ? '-' : percent(record.roas)), orderStatus, targetStatus ); @@ -684,7 +678,7 @@ } function exportMtgCsv() { - const headers = ['Adping ID', 'Pkg', '国家', 'Valid Clicks', 'Postback Installs', '安装率', 'Cost', 'ROAS', '订单关联', 'TaurusxDSP状态']; + const headers = ['Adping ID', 'Pkg', '国家', 'Valid Clicks', 'Postback Installs', '安装率', 'Cost', '订单关联', 'TaurusxDSP状态']; const rows = [headers, ...mtgState.filtered.map(record => [ record.adpingid, record.pkg, @@ -693,7 +687,6 @@ record.installs, record.install_rate === null ? '' : record.install_rate, record.cost, - record.roas === null ? '' : record.roas, record.order_match ? (record.adpingid_match ? 'ID已匹配' : '仅Pkg_国家匹配') : '未关联', mtgMatchStatus(record).label ])];