feat: integrate 3 order tables, split agency vs self-invest channels
This commit is contained in:
+11
-6
@@ -418,7 +418,8 @@
|
|||||||
<th>日预算</th>
|
<th>日预算</th>
|
||||||
<th>状态</th>
|
<th>状态</th>
|
||||||
<th>MMP</th>
|
<th>MMP</th>
|
||||||
<th>已铺投放渠道</th>
|
<th>代投渠道</th>
|
||||||
|
<th>平台自投渠道</th>
|
||||||
<th>数据来源</th>
|
<th>数据来源</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -482,7 +483,10 @@
|
|||||||
const active = orderData.filter(o => o.status === 'Active').length;
|
const active = orderData.filter(o => o.status === 'Active').length;
|
||||||
const products = new Set(orderData.map(o => o.product)).size;
|
const products = new Set(orderData.map(o => o.product)).size;
|
||||||
const allChannels = new Set();
|
const allChannels = new Set();
|
||||||
orderData.forEach(o => (o.channels || []).forEach(c => allChannels.add(c)));
|
orderData.forEach(o => {
|
||||||
|
(o.agency_channels || []).forEach(c => allChannels.add(c));
|
||||||
|
(o.self_channels || []).forEach(c => allChannels.add(c));
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('orderStats').innerHTML = `
|
document.getElementById('orderStats').innerHTML = `
|
||||||
<div class="summary-card">
|
<div class="summary-card">
|
||||||
@@ -509,11 +513,11 @@
|
|||||||
|
|
||||||
// Table
|
// Table
|
||||||
const tbody = document.querySelector('#orderTable tbody');
|
const tbody = document.querySelector('#orderTable tbody');
|
||||||
|
const chipList = (arr) => (arr && arr.length)
|
||||||
|
? arr.map(c => `<span class="channel-chip">${c}</span>`).join('')
|
||||||
|
: '<span class="no-channel">—</span>';
|
||||||
tbody.innerHTML = orderData.map(o => {
|
tbody.innerHTML = orderData.map(o => {
|
||||||
const statusClass = o.status === 'Active' ? 'status-active' : 'status-pause';
|
const statusClass = o.status === 'Active' ? 'status-active' : 'status-pause';
|
||||||
const channels = (o.channels && o.channels.length)
|
|
||||||
? o.channels.map(c => `<span class="channel-chip">${c}</span>`).join('')
|
|
||||||
: '<span class="no-channel">—</span>';
|
|
||||||
return `
|
return `
|
||||||
<tr>
|
<tr>
|
||||||
<td style="font-weight:600">${o.product}</td>
|
<td style="font-weight:600">${o.product}</td>
|
||||||
@@ -525,7 +529,8 @@
|
|||||||
<td class="num-cell">${o.budget}</td>
|
<td class="num-cell">${o.budget}</td>
|
||||||
<td><span class="status-badge ${statusClass}">${o.status}</span></td>
|
<td><span class="status-badge ${statusClass}">${o.status}</span></td>
|
||||||
<td>${o.mmp}</td>
|
<td>${o.mmp}</td>
|
||||||
<td style="max-width:260px;white-space:normal">${channels}</td>
|
<td style="max-width:220px;white-space:normal">${chipList(o.agency_channels)}</td>
|
||||||
|
<td style="max-width:180px;white-space:normal">${chipList(o.self_channels)}</td>
|
||||||
<td style="font-size:11px;color:#94a3b8">${o.source}</td>
|
<td style="font-size:11px;color:#94a3b8">${o.source}</td>
|
||||||
</tr>
|
</tr>
|
||||||
`;
|
`;
|
||||||
|
|||||||
+12
-12
@@ -1,14 +1,14 @@
|
|||||||
[
|
[
|
||||||
{"product":"Honor of Kings","pkg":"com.levelinfinite.sgameGlobal","platform":"Android","geo":"IN / PH","pay_mode":"CPI","price":"0.15","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"Campaign list"},
|
{"product":"Honor of Kings","pkg":"com.levelinfinite.sgameGlobal","platform":"Android","geo":"IN / PH","pay_mode":"CPI","price":"0.15","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":["Mintegral"],"source":"Campaign list + 平台自投"},
|
||||||
{"product":"IGG (Lords Mobile)","pkg":"com.igg.android.lordsmobile","platform":"Android","geo":"RU","pay_mode":"CPI","price":"0.5","budget":"$100/day","status":"Active","mmp":"AppsFlyer","channels":["Eagllwin-pubz","MediaGo","传音","PropellerAds代投"],"source":"Campaign list + 新一轮尝试"},
|
{"product":"IGG (Lords Mobile)","pkg":"com.igg.android.lordsmobile","platform":"Android","geo":"RU","pay_mode":"CPI","price":"0.5","budget":"$100/day","status":"Active","mmp":"AppsFlyer","agency_channels":["Eagllwin-pubz","MediaGo","传音","PropellerAds代投"],"self_channels":["Mintegral"],"source":"全部三表"},
|
||||||
{"product":"Shahid","pkg":"net.mbc.shahid","platform":"Android","geo":"SA","pay_mode":"CPA","price":"5.4","budget":"$100/day","status":"Active","mmp":"AppsFlyer","channels":["Eagllwin-pubz","MediaGo","传音","PropellerAds代投","Smartyads","Adsterra"],"source":"Campaign list + 新一轮尝试"},
|
{"product":"Shahid","pkg":"net.mbc.shahid","platform":"Android","geo":"SA","pay_mode":"CPA","price":"5.4","budget":"$100/day","status":"Active","mmp":"AppsFlyer","agency_channels":["Eagllwin-pubz","MediaGo","传音","PropellerAds代投","Smartyads","Adsterra"],"self_channels":["Mintegral"],"source":"全部三表"},
|
||||||
{"product":"灵犀互动","pkg":"com.sialiagames.xczyw.gp.tw","platform":"Android","geo":"TW","pay_mode":"CPI","price":"5","budget":"$150/day","status":"Active","mmp":"AppsFlyer","channels":["Eagllwin-pubz","MediaGo","Smartyads","Adsterra","RollerAds","PropellerAds代投"],"source":"Campaign list + 新一轮尝试"},
|
{"product":"Water Sort! Color Sort Puzzle","pkg":"water.sort.color.puzzle.offline.games","platform":"Android","geo":"US","pay_mode":"CPI","price":"-","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":["Mintegral"],"source":"Campaign list + 平台自投"},
|
||||||
{"product":"灵犀互动","pkg":"com.qookkagames.xczyw.gp.hk","platform":"Android","geo":"HK","pay_mode":"CPI","price":"5","budget":"$150/day","status":"Active","mmp":"AppsFlyer","channels":["Eagllwin-pubz","MediaGo","Smartyads","Adsterra","RollerAds","PropellerAds代投"],"source":"Campaign list + 新一轮尝试"},
|
{"product":"灵犀互动","pkg":"com.sialiagames.xczyw.gp.tw","platform":"Android","geo":"TW","pay_mode":"CPI","price":"5","budget":"$150/day","status":"Active","mmp":"AppsFlyer","agency_channels":["Eagllwin-pubz","MediaGo","Smartyads","Adsterra","RollerAds","PropellerAds代投"],"self_channels":["Mintegral","Kwai","Bigo"],"source":"全部三表"},
|
||||||
{"product":"Water Sort! Color Sort Puzzle","pkg":"water.sort.color.puzzle.offline.games","platform":"Android","geo":"US","pay_mode":"CPI","price":"-","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"Campaign list"},
|
{"product":"灵犀互动","pkg":"com.qookkagames.xczyw.gp.hk","platform":"Android","geo":"HK","pay_mode":"CPI","price":"5","budget":"$150/day","status":"Active","mmp":"AppsFlyer","agency_channels":["Eagllwin-pubz","MediaGo","Smartyads","Adsterra","RollerAds","PropellerAds代投"],"self_channels":["Mintegral","Kwai","Bigo"],"source":"全部三表"},
|
||||||
{"product":"Magalu_BR","pkg":"com.luizalabs.mlapp / id891130066","platform":"Android + iOS","geo":"BR","pay_mode":"CPI","price":"0.12","budget":"$36/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"Campaign list"},
|
{"product":"Magalu_BR","pkg":"com.luizalabs.mlapp / id891130066","platform":"Android + iOS","geo":"BR","pay_mode":"CPI","price":"0.12","budget":"$36/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":["Mintegral"],"source":"Campaign list + 平台自投"},
|
||||||
{"product":"Netshoes_BR","pkg":"br.com.netshoes.app / id886443637","platform":"Android + iOS","geo":"BR","pay_mode":"CPI","price":"0.12","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"Campaign list"},
|
{"product":"Netshoes_BR","pkg":"br.com.netshoes.app / id886443637","platform":"Android + iOS","geo":"BR","pay_mode":"CPI","price":"0.12","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":["Mintegral"],"source":"Campaign list + 平台自投"},
|
||||||
{"product":"AUTODOC","pkg":"de.autodoc.gmbh / id1014949597","platform":"Android + iOS","geo":"26个欧洲国家","pay_mode":"CPA","price":"20","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"Campaign list"},
|
{"product":"AUTODOC","pkg":"de.autodoc.gmbh / id1014949597","platform":"Android + iOS","geo":"26个欧洲国家","pay_mode":"CPA","price":"20","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":[],"source":"Campaign list + 平台自投"},
|
||||||
{"product":"Zombie","pkg":"com.ddup.zombiewaves.zw","platform":"Android","geo":"US","pay_mode":"CPI","price":"$1-2","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","channels":["Eagllwin-pubz","Newsbreak","Mintegral","Bigo"],"source":"新一轮尝试"},
|
{"product":"Zombie","pkg":"com.ddup.zombiewaves.zw","platform":"Android","geo":"US","pay_mode":"CPI","price":"$1-2","budget":"$100/day","status":"Pause","mmp":"AppsFlyer","agency_channels":["Eagllwin-pubz","Newsbreak","Mintegral","Bigo"],"self_channels":[],"source":"新一轮尝试"},
|
||||||
{"product":"Xena","pkg":"com.xparty.androidapp.IQ","platform":"Android","geo":"IQ","pay_mode":"CPI","price":"0.2","budget":"$30/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"新一轮尝试"},
|
{"product":"Xena","pkg":"com.xparty.androidapp.IQ","platform":"Android","geo":"IQ","pay_mode":"CPI","price":"0.2","budget":"$30/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":[],"source":"新一轮尝试"},
|
||||||
{"product":"Xena","pkg":"com.xparty.androidapp.EG","platform":"Android","geo":"EG","pay_mode":"CPI","price":"0.2","budget":"$30/day","status":"Pause","mmp":"AppsFlyer","channels":[],"source":"新一轮尝试"}
|
{"product":"Xena","pkg":"com.xparty.androidapp.EG","platform":"Android","geo":"EG","pay_mode":"CPI","price":"0.2","budget":"$30/day","status":"Pause","mmp":"AppsFlyer","agency_channels":[],"self_channels":[],"source":"新一轮尝试"}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user