eg-art/up_fail2
0
1<!DOCTYPE html>2<html lang="ru">3<head>4 <meta charset="UTF-8">5 <meta name="viewport" content="width=device-width, initial-scale=1.0">6 <title>GreenBuilderGRM</title>7 8 9<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>10<script src="https://unpkg.com/@vkontakte/vk-bridge/dist/browser.min.js"></script>11<script type="text/javascript" src="https://vk.com/js/api/openapi.js?169"></script>12<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">13<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>14<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/js%20/sheetjs/xlsx.full.min.js"></script>15 16 17 18<!-- Подключение стилей Notyf -->19<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/notyf/notyf.min.css">20 21<!-- Подключение скрипта Notyf -->22<script src="https://cdn.jsdelivr.net/npm/notyf/notyf.min.js"></script>23 24 25 26 27 28 29 30 31 32 33<link href="https://unpkg.com/tabulator-tables@6.2.1/dist/css/tabulator.min.css" rel="stylesheet">34<script type="text/javascript" src="https://unpkg.com/tabulator-tables@6.2.1/dist/js/tabulator.min.js"></script>35 36 37 38<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> 39 <style>40body {41 font-family: Arial, sans-serif;42 text-align: center;43 background-color: #f0f0f0;44 margin: 0;45 padding: 0;46}47h1 {48 background-color: #4CAF50;49 color: white;50 padding: 20px;51 margin: 0;52 border-bottom: 2px solid #388E3C;53 font-size: 28px;54 text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);55}56button, #filter-clear, #download-json, #take-for-yourself {57 color: white;58 background-color: #4CAF50;59 border: none;60 cursor: pointer;61 padding: 10px 20px;62 font-size: 16px;63 border-radius: 5px;64 margin: 5px;65 transition: background-color 0.3s ease;66}67button:hover, #filter-clear:hover, #download-json:hover, #take-for-yourself:hover {68 background-color: #388E3C;69}70#filter-field, #filter-type, #filter-value, #filter-field2, #filter-value2 {71 padding: 10px;72 font-size: 16px;73 margin: 5px;74 border-radius: 5px;75 border: 1px solid #ccc;76 background-color: #f0f0f0;77 transition: border-color 0.3s ease, box-shadow 0.3s ease;78}79#filter-field:focus, #filter-type:focus, #filter-value:focus, #filter-field2:focus, #filter-value2:focus {80 border-color: #4CAF50;81 box-shadow: 0 0 5px rgba(76, 175, 80, 0.5);82}83#filter-field option, #filter-type option, #filter-field2 option {84 background-color: #f0f0f0;85 color: #333;86}87#filter-field:hover, #filter-type:hover, #filter-value:hover, #filter-field2:hover, #filter-value2:hover {88 border-color: #4CAF50;89}90#mediaContainer {91 margin-top: 20px;92 display: flex;93 justify-content: center;94 align-items: center;95 flex-direction: column;96 max-width: 100%;97 height: auto;98 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);99 border-radius: 10px;100 padding: 20px;101 background-color: white;102}103#mediaContainer img, #mediaContainer video {104 max-width: 100%;105 height: auto;106 object-fit: contain;107 border-radius: 10px;108}109#imageUrl {110 margin-top: 20px;111 font-size: 16px;112 color: #333;113 cursor: pointer;114 text-decoration: underline;115 transition: color 0.3s ease;116}117#imageUrl:hover {118 color: #4CAF50;119}120#progressBarContainer {121 width: 80%;122 margin: 20px auto;123 background-color: #ddd;124 border-radius: 13px;125 padding: 3px;126 box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);127}128#progressBar {129 width: 0%;130 height: 20px;131 background-color: #4CAF50;132 border-radius: 10px;133 text-align: center;134 line-height: 20px;135 color: white;136 transition: width 0.3s ease;137}138.swal-button-custom {139 background-color: #4CAF50;140 font-size: 16px;141 padding: 10px 20px;142}143.swal-title-custom {144 font-size: 24px;145 color: #333;146}147.swal-content-custom {148 font-size: 16px;149 color: #666;150}151 /* Переопределение стилей Notyf */152 .notyf__toast {153 background-color: #4CAF50 !important; /* Зеленый фон */154 color: #ffffff !important; /* Белый текст */155 font-size: 16px;156 }157 .notyf__toast--success {158 background-color: #4CAF50 !important; /* Зеленый фон для успешного уведомления */159 }160 .notyf__toast--error {161 background-color: #d9534f !important; /* Красный фон для ошибок (по желанию) */162 } 163 164 165#download-rass, #take-for-yourself {166 display: none;167} 168</style>169</head>170 171<body>172 <div id="header">173 <h1>GreenBuilderGRM</h1>174 </div>175 <div>176 <select id="filter-field">177 <option></option>178 <option value="id">Номер в списке</option>179 <option value="name">Имя</option>180 <option value="phone">WhatsApp</option>181 <option value="email">Email</option>182 <option value="b_mess">Реплики</option> 183 <option value="curator">Куратор</option>184 <option value="shop_st">Статус покупки</option>185 <option value="gc_url">Ссылка на пользователя в GC</option>186 <option value="vk_id">Идентификатор VK</option>187 <option value="chat_id">Ссылка на Tg</option>188 <option value="ws_stop">Стутус подписки</option>189 <option value="web_st">Вебинары</option>190 <option value="fin_prog">Прогрес по воронке</option>191 <option value="bonus">Бонусы</option>192 <option value="shop_status">Статус покупки</option>193 <option value="pr3">Доступы</option>194 <option value="canal">Канал трафика</option>195 <option value="key_pr">Ключ PR</option>196 <option value="utm_source">utm_source</option>197 <option value="utm_medium">utm_medium</option>198 <option value="utm_campaign">utm_campaign</option>199 <option value="utm_term">utm_term</option>200 <option value="utm_content">utm_content</option>201 <option value="data_on">Дата - Последнее действие</option>202 <option value="data_t">Дата - Вход</option>203 </select>204 205 <select id="filter-type">206 <option value="=">=</option>207 <option value="<"><</option>208 <option value="<="><=</option>209 <option value=">">></option>210 <option value=">=">>=</option>211 <option value="!=">!=</option>212 <option value="like">like</option>213 </select>214 215 <input id="filter-value" type="text" placeholder="Значение фильтра">216 <button id="filter-clear">Очистить фильтр</button>217 <button id="download-xlsx">Скачать XLSX</button>218 <button id="download-json">Скачать JSON</button>219 <button id="download-rass">Рассылка по выбранным</button>220 <button id="take-for-yourself">Взять себе</button>221 </div>222 <div id="example-table"></div>223 224<script>225 vkBridge.send('VKWebAppInit');226 document.addEventListener('DOMContentLoaded', function() {227 fetch('https://eg-art-up-fail2.hf.space/data_gc_tab_out?api_sys=fasSd345D')228 .then(response => response.json())229 .then(data => {230 console.log('Data received:', data); // Логирование данных231 data.reverse(); // Переворачиваем массив данных232 var linkFormatter = function(cell, formatterParams, onRendered) {233 var curator = cell.getValue();234 var curatorLink = cell.getData().curator_link;235 return `<a href="${curatorLink}" target="_blank">${curator}</a>`;236 };237 var table = new Tabulator("#example-table", {238 data: data, // set table data239 layout: "fitColumns", // fit columns to width of table240 pagination: "local", // enable local pagination241 paginationSize: 50, // number of rows per page242 selectable: true, // enable row selection243 columns: [244 {title:"Номер в списке", field:"id"},245 {title:"Имя", field:"name", width:85},246 {title:"Город", field:"b_city", width:85}, 247 {title:"Email", field:"email", width:85},248 {title:"WhatsApp", field:"phone", formatter: function(cell, formatterParams, onRendered) {249 var phone = cell.getValue();250 var ws_stop = cell.getData().ws_stop; 251 var ws_st = cell.getData().ws_st; 252 var imageUrl1 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_whatsapp-1.png"; 253 var imageUrl2 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_whatsapp-2.png"; 254 var imageUrl3 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_whatsapp-3.png"; 255 var link = `<a href="https://web.whatsapp.com/send?phone=${phone}" target="_blank">`;256 // Проверка условий257 if (ws_stop !== "1" && ws_st === "1") {258 console.log("Первая переменная не равна единице, вторая равна единице");259 return link + `<img src="${imageUrl2}" alt="WhatsApp" style="width: 98px; height: 14px;">`;260 } else if (ws_stop === "1" && ws_st === "1") {261 console.log("Обе переменные равны единице");262 return link + `<img src="${imageUrl3}" alt="WhatsApp" style="width: 98px; height: 14px;">`;263 } else {264 console.log("Остальные случаи");265 return link + `<img src="${imageUrl1}" alt="WhatsApp" style="width: 98px; height: 14px;">`;266 }267 }}, 268 {title:"ВКонтакте", field:"vk_id", formatter: function(cell, formatterParams, onRendered) {269 var vk_id = cell.getValue();270 var imageUrlvk1 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_vk-1.png"; 271 var imageUrlvk2 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_vk-2.png"; 272 var link1 = `<a href="https://vk.com" target="_blank">`; 273 var link2 = `<a href="https://vk.com/id${vk_id}" target="_blank">`; 274 // Проверка условий275 if (vk_id === "0" || vk_id === "") {276 // Если vk_id равен "0" или пуст277 return link1 + `<img src="${imageUrlvk1}" alt="Image" style="width: 98px; height: 14px;">`;278 } else {279 // Если vk_id не пуст и не равен "0"280 return link2 + `<img src="${imageUrlvk2}" alt="Image" style="width: 98px; height: 14px;">`;281 }282 }},283 {title:"Телеграм", field:"chat_id", formatter: function(cell, formatterParams, onRendered) {284 var chat_id = cell.getValue();285 var imageUrltg1 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_tg-1.png";286 var imageUrlntg2 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_tg-2.png";287 var linktg1 = `<a href="https://t.me" target="_blank">`; 288 var linktg2 = `<a href="https://t.me/${chat_id}" target="_blank">`; 289 if (chat_id === "0" || chat_id === "") {290 return linktg1 + `<img src="${imageUrltg1}" alt="Image" style="width: 98px; height: 14px;">`;291 } else {292 return linktg2 + `<img src="${imageUrlntg2}" alt="Image" style="width: 98px; height: 14px;">`;293 }294 }},295 {title:"GetCurse", field:"gc_url", formatter: function(cell, formatterParams, onRendered) {296 var gc_url = cell.getValue();297 var imageUrlvkgc1 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_gk-1.png";298 var imageUrlvkgc2 = "https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/ic_gk-2.png";299 var linkgc1 = `<a href="https://vk.com/getcourseru" target="_blank">`; 300 var linkgc2 = `<a href="${gc_url}" target="_blank">`; 301 if (gc_url === "0" || gc_url === "") {302 return linkgc1 + `<img src="${imageUrlvkgc1}" alt="Image" style="width: 98px; height: 14px;">`;303 } else {304 return linkgc2 + `<img src="${imageUrlvkgc2}" alt="Image" style="width: 98px; height: 14px;">`;305 }306 }},307 {title:"Реплики", field:"b_mess", width:95, cellClick:function(e, cell){308 var data = cell.getData();309 const notyf = new Notyf({310 duration: 10000,311 position: {312 x: 'right',313 y: 'top',314 },315 });316 const message = `317 Имя: ${data.name}\n318 WhatsApp: ${data.phone}\n319 Реплики: ${data.b_mess}320 `;321 notyf.open({322 type: 'info',323 message: message,324 });325 }},326 {title:"Куратор", field:"curator", formatter: linkFormatter}, 327 {title:"Статус покупки", field:"shop_status", formatter: function(cell, formatterParams, onRendered) {328 var status = cell.getValue();329 var color;330 switch (status) {331 case 'green':332 color = 'green';333 break;334 case 'red':335 color = 'red';336 break;337 case 'yellow':338 color = 'yellow';339 break;340 default:341 color = 'gray';342 }343 return `<div style="width: 20px; height: 20px; background-color: ${color};"></div>`;344 }},345 {title:"Вебинары-присутствовал", field:"web_st", formatter:"star", formatterParams:{stars:7}, hozAlign:"center", width:90},346 {title:"Вебинары-досмотрел до конца", field:"b_fin", formatter:function(cell, formatterParams, onRendered){347 var value = cell.getValue();348 var icon;349 if (value === 'True') {350 icon = ' <img src="https://cdn.jsdelivr.net/gh/MackorLab/Green_Build@main/icon_tab/do_konca.png" width="98" height="14" />';351 } else {352 icon = '';353 }354 return icon;355 }},356 {title:"Прогрес по воронке", field:"fin_prog", formatter:"progress", formatterParams:{color:["#ff0000", "orange", "#00dd00"]}, sorter:"number", width:100},357 {title:"Бонусы", field:"bonus"},358 {title:"Опросы", field:"pr2", cellClick:function(e, cell){359 var data = cell.getData();360 const notyf = new Notyf({361 duration: 5000,362 position: {363 x: 'right',364 y: 'top',365 },366 types: [367 {368 duration: 10000,369 message: 'Опросы: ' + data.pr2,370 }371 ]372 });373 notyf.open({374 type: 'warning',375 message: 'Опросы: ' + data.pr2376 });377 }}, 378 {title:"Доступы", field:"orders", width:95, cellClick:function(e, cell){379 var data = cell.getData();380 const notyf = new Notyf({381 duration: 10000,382 position: {383 x: 'right',384 y: 'top',385 },386 });387 388 // Парсим JSON из поля "orders"389 let ordersJson;390 try {391 ordersJson = JSON.parse(data.orders);392 } catch (e) {393 notyf.open({394 type: 'error',395 message: 'Ошибка при парсинге JSON',396 });397 return;398 }399 400 // Формируем сообщение с парами ключ-значение401 let message = '';402 for (let key in ordersJson) {403 if (ordersJson.hasOwnProperty(key)) {404 message += `${key}: ${ordersJson[key]}\n`;405 }406 }407 408 // Выводим сообщение в уведомлении409 notyf.open({410 type: 'info',411 message: message,412 });413}},414 {title:"Канал трафика", field:"canal"},415 {title:"Robokassa", field:"rkassa"},416 {title:"utm_source", field:"utm_source"},417 {title:"utm_medium", field:"utm_medium"},418 {title:"utm_campaign", field:"utm_campaign"},419 {title:"utm_term", field:"utm_term"},420 {title:"utm_content", field:"utm_content"},421 {title:"Дата - Последнее действие", field:"data_on"},422 {title:"Дата - Вход", field:"data_t"},423 ],424 });425 var fieldEl = document.getElementById("filter-field");426 var typeEl = document.getElementById("filter-type");427 var valueEl = document.getElementById("filter-value");428 function updateFilter() {429 var filterVal = fieldEl.value;430 var typeVal = typeEl.value;431 var valueVal = valueEl.value;432 if (filterVal) {433 table.setFilter(filterVal, typeVal, valueVal);434 }435 }436 fieldEl.addEventListener("change", updateFilter);437 typeEl.addEventListener("change", updateFilter);438 valueEl.addEventListener("keyup", updateFilter);439 document.getElementById('filter-clear').addEventListener('click', function() {440 fieldEl.value = "";441 typeEl.value = "=";442 valueEl.value = "";443 table.clearFilter();444 });445 document.getElementById("download-json").addEventListener("click", function() {446 table.download("json", "data.json");447 });448 document.getElementById("download-xlsx").addEventListener("click", function() {449 table.download("xlsx", "data.xlsx", {sheetName:"My Data"});450 });451 document.getElementById("download-rass").addEventListener("click", function() {452 var tableData = table.getData("active");453 var jsonData = JSON.stringify(tableData, null, 2);454 console.log("Данные для рассылки:", jsonData);455 });456 document.getElementById("take-for-yourself").addEventListener("click", function() {457 var tableData = table.getData("active");458 var jsonData = JSON.stringify(tableData, null, 2);459 console.log("Данные для себя:", jsonData);460 });461 })462 .catch(error => console.error('Error fetching data:', error));463 });464</script>465</body>466 467</html>