DmitrMakeev commited on
Commit
920ac0d
·
verified ·
1 Parent(s): 0da4705

Update bas_vk_tab.html

Browse files
Files changed (1) hide show
  1. bas_vk_tab.html +131 -154
bas_vk_tab.html CHANGED
@@ -193,7 +193,7 @@
193
 
194
  <body>
195
  <div id="header">
196
- <h1>WhatsCRM - Автопилот + Tilda + Бизон 365 + GetCurse</h1>
197
  </div>
198
  <div>
199
  <select id="filter-field">
@@ -201,19 +201,17 @@
201
  <option value="id">Номер в списке</option>
202
  <option value="name">Имя</option>
203
  <option value="phone">WhatsApp</option>
 
 
 
 
204
  <option value="email">Email</option>
205
  <option value="b_mess">Реплики</option>
206
  <option value="curator">Куратор</option>
207
  <option value="shop_st">Статус покупки</option>
208
- <option value="ad_url">Ссылка на пользователя в GC</option>
209
- <option value="vk_id">Ссылка на VK</option>
210
- <option value="chat_id">Ссылка на Tg</option>
211
- <option value="ws_stop">Стутус подписки</option>
212
  <option value="web_st">Вебинары</option>
213
- <option value="fin_prog">Прогрес по воронке</option>
214
- <option value="pr1">pr1</option>
215
- <option value="pr2">pr2</option>
216
- <option value="pr3">pr3</option>
217
  <option value="pr4">Канал трафика</option>
218
  <option value="pr5">Дата</option>
219
  <option value="key_pr">Ключ PR</option>
@@ -234,162 +232,141 @@
234
  <input id="filter-value" type="text" placeholder="Значение фильтра">
235
 
236
  <button id="filter-clear">Очистить фильтр</button>
237
-
238
- <button id="download-json">Рассылка по выбранным</button>
239
- <button id="take-for-yourself">Взять себе</button> <!-- Добавлена вторая кнопка -->
240
  </div>
241
  <div id="example-table"></div>
242
 
 
 
 
 
 
 
 
243
 
 
 
 
 
 
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
 
 
 
 
246
 
247
- <script>
248
- vkBridge.send('VKWebAppInit');
249
- document.addEventListener('DOMContentLoaded', function() {
250
- fetch('https://dmtuit-gcapirabiz.hf.space/data_gc_tab_out?api_sys=fasSd345D')
251
- .then(response => response.json())
252
- .then(data => {
253
- console.log('Data received:', data); // Логирование данных
254
- // Переворачиваем массив данных
255
- data.reverse();
256
- var linkFormatter = function(cell, formatterParams, onRendered) {
257
- var curator = cell.getValue();
258
- var curatorLink = cell.getData().curator_link;
259
- return `<a href="${curatorLink}" target="_blank">${curator}</a>`;
260
- };
261
- var table = new Tabulator("#example-table", {
262
- data: data, // set table data
263
- layout: "fitColumns", // fit columns to width of table
264
- pagination: "local", // enable local pagination
265
- paginationSize: 50, // number of rows per page
266
- selectable: true, // enable row selection
267
- columns: [
268
- {title:"Номер в списке", field:"id"},
269
- {title:"Имя", field:"name", width:100},
270
- {title:"WhatsApp", field:"phone", formatter: function(cell, formatterParams, onRendered) {
271
- var phone = cell.getValue();
272
- return `<a href="https://web.whatsapp.com/send?phone=${phone}" target="_blank">${phone}</a>`;
273
- }, width:120},
274
- {title:"Город", field:"b_city", width:110},
275
- {title:"Email", field:"email", width:110},
276
- {title:"Реплики", field:"b_mess", width:95, cellClick:function(e, cell){
277
- var data = cell.getData();
278
- Swal.fire({
279
- title: 'Детали пользователя',
280
- html: `
281
- <strong>Имя:</strong> ${data.name}<br>
282
- <strong>WhatsApp:</strong> <a href="https://web.whatsapp.com/send?phone=${data.phone}" target="_blank">${data.phone}</a><br>
283
- <strong>Реплики:</strong> ${data.b_mess}
284
- `,
285
- icon: 'success',
286
- confirmButtonText: 'Закрыть',
287
- confirmButtonColor: '#4CAF50',
288
- customClass: {
289
- confirmButton: 'button is-success',
290
- title: 'title-custom',
291
- content: 'content-custom'
292
- }
293
- });
294
- }},
295
- {title:"Куратор", field:"curator", formatter: linkFormatter},
296
- {title:"Статус покупки", field:"shop_st", formatter: function(cell, formatterParams, onRendered) {
297
- var status = cell.getValue();
298
- var color;
299
- switch (status) {
300
- case 'green':
301
- color = 'green';
302
- break;
303
- case 'red':
304
- color = 'red';
305
- break;
306
- case 'yellow':
307
- color = 'yellow';
308
- break;
309
- default:
310
- color = 'gray';
311
- }
312
- return `<div style="width: 20px; height: 20px; background-color: ${color};"></div>`;
313
- }},
314
- {title:"Ссылка на пользователя в GC", field:"ad_url", formatter: function(cell, formatterParams, onRendered) {
315
- var ad_url = cell.getValue();
316
- return `<a href="${ad_url}" target="_blank">${ad_url}</a>`;
317
- }},
318
- {title:"Ссылка на VK", field:"vk_id", formatter: function(cell, formatterParams, onRendered) {
319
- var vk_id = cell.getValue();
320
- return `<a href="https://vk.com/id${vk_id}" target="_blank">${vk_id}</a>`;
321
- }},
322
- {title:"Ссылка на Tg", field:"chat_id", formatter: function(cell, formatterParams, onRendered) {
323
- var chatId = cell.getValue();
324
- if (chatId.startsWith('@')) {
325
- chatId = chatId.substring(1); // Удаление символа @ в начале
326
- }
327
- return `<a href="https://t.me/${chatId}" target="_blank">${chatId}</a>`;
328
- }},
329
- {title:"Статус WhatsApp", field:"ws_st"},
330
- {title:"Стутус подписки", field:"ws_stop"},
331
- {title:"Вебинары-присутствовал", field:"web_st", formatter:"star", formatterParams:{stars:7}, hozAlign:"center", width:120},
332
- {title:"Вебинары-досмотрел до конца", field:"b_fin", formatter:function(cell, formatterParams, onRendered){
333
- var value = cell.getValue();
334
- var icon;
335
- if (value === 'True') {
336
- icon = ' <img src="https://mrbeliever-background-remover.hf.space/--replicas/dv2tz/file=/tmp/gradio/2da6c3c9a4c2ee2ce9460af207d56dbade620115/image.png" width="30" height="14" />'; // Иконка для активного статуса
337
- } else {
338
- icon = ''; // Пустая строка для неактивного статуса или если значение не определено
339
- }
340
- return icon;
341
- }, width:100},
342
-
343
- {title:"Прогрес по воронке", field:"fin_prog", formatter:"progress", formatterParams:{color:["#00dd00", "orange", "rgb(255,0,0)"]}, sorter:"number", width:100},
344
- {title:"pr1", field:"pr1"},
345
- {title:"pr2", field:"pr2"},
346
- {title:"pr3", field:"pr3"},
347
- {title:"Канал трафика", field:"pr4"},
348
- {title:"Дата", field:"pr5"},
349
- {title:"Ключ PR", field:"key_pr"},
350
- {title:"Канал", field:"canal"},
351
- {title:"Дата", field:"data_t", width:150}
352
- ],
353
- });
354
- var fieldEl = document.getElementById("filter-field");
355
- var typeEl = document.getElementById("filter-type");
356
- var valueEl = document.getElementById("filter-value");
357
- function updateFilter() {
358
- var filterVal = fieldEl.options[fieldEl.selectedIndex].value;
359
- var typeVal = typeEl.options[typeEl.selectedIndex].value;
360
- if (filterVal) {
361
- table.setFilter(filterVal, typeVal, valueEl.value);
362
  }
363
- }
364
- document.getElementById("filter-field").addEventListener("change", updateFilter);
365
- document.getElementById("filter-type").addEventListener("change", updateFilter);
366
- document.getElementById("filter-value").addEventListener("keyup", updateFilter);
367
- document.getElementById("filter-clear").addEventListener("click", function() {
368
- fieldEl.value = "";
369
- typeEl.value = "=";
370
- valueEl.value = "";
371
- table.clearFilter();
372
- });
373
- function handleDownloadJson() {
374
- var tableData = table.getData("active");
375
- var jsonData = JSON.stringify(tableData, null, 2);
376
- console.log("Данные для рассылки:", jsonData);
377
- }
378
- function handleTakeForYourself() {
379
- var tableData = table.getData("active");
380
- var jsonData = JSON.stringify(tableData, null, 2);
381
- console.log("Данные для себя:", jsonData);
382
- }
383
- document.getElementById("download-json").addEventListener("click", handleDownloadJson);
384
- document.getElementById("take-for-yourself").addEventListener("click", handleTakeForYourself);
385
- })
386
- .catch(error => console.error('Error fetching data:', error));
387
- });
388
- </script>
389
 
 
 
 
390
 
 
 
 
 
 
 
391
 
392
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
393
  </body>
394
 
395
  </html>
 
193
 
194
  <body>
195
  <div id="header">
196
+ <h1>WhatsMasterCRM</h1>
197
  </div>
198
  <div>
199
  <select id="filter-field">
 
201
  <option value="id">Номер в списке</option>
202
  <option value="name">Имя</option>
203
  <option value="phone">WhatsApp</option>
204
+ <option value="vk_id">Ссылка на VK</option>
205
+ <option value="chat_id">Ссылка на Tg</option>
206
+ <option value="gc_url">Ссылка на пользователя в GC</option>
207
+ <option value="b_city">Город</option>
208
  <option value="email">Email</option>
209
  <option value="b_mess">Реплики</option>
210
  <option value="curator">Куратор</option>
211
  <option value="shop_st">Статус покупки</option>
212
+ <option value="ws_stop">Статус подписки</option>
 
 
 
213
  <option value="web_st">Вебинары</option>
214
+ <option value="fin_prog">Прогресс по воронке</option>
 
 
 
215
  <option value="pr4">Канал трафика</option>
216
  <option value="pr5">Дата</option>
217
  <option value="key_pr">Ключ PR</option>
 
232
  <input id="filter-value" type="text" placeholder="Значение фильтра">
233
 
234
  <button id="filter-clear">Очистить фильтр</button>
235
+ <button id="download-xlsx">Скачать в XLSX</button>
236
+ <button id="download-json">Скачать JSON</button>
237
+ <button id="take-for-yourself">Взять себе</button>
238
  </div>
239
  <div id="example-table"></div>
240
 
241
+ <script>
242
+ document.addEventListener('DOMContentLoaded', function() {
243
+ fetch('https://dmtuit-psy2.hf.space/data_gc_tab_out?api_sys=fasSd345D')
244
+ .then(response => response.json())
245
+ .then(data => {
246
+ console.log('Data received:', data); // Логирование данных
247
+ data.reverse(); // Переворачиваем массив данных
248
 
249
+ var linkFormatter = function(cell, formatterParams, onRendered) {
250
+ var curator = cell.getValue();
251
+ var curatorLink = cell.getData().curator_link;
252
+ return `<a href="${curatorLink}" target="_blank">${curator}</a>`;
253
+ };
254
 
255
+ var table = new Tabulator("#example-table", {
256
+ data: data, // set table data
257
+ layout: "fitColumns", // fit columns to width of table
258
+ pagination: "local", // enable local pagination
259
+ paginationSize: 50, // number of rows per page
260
+ selectable: true, // enable row selection
261
+ columns: [
262
+ {title:"Номер в списке", field:"id"},
263
+ {title:"Имя", field:"name", width:120},
264
+ {title:"WhatsApp", field:"phone", formatter: function(cell, formatterParams, onRendered) {
265
+ var phone = cell.getValue();
266
+ return `<a href="https://web.whatsapp.com/send?phone=${phone}" target="_blank">${phone}</a>`;
267
+ }, width:120},
268
+ {title:"Город", field:"b_city", width:120},
269
+ {title:"Email", field:"email", width:120},
270
+ {title:"Куратор", field:"curator", formatter: linkFormatter},
271
+ {title:"Статус покупки", field:"shop_st", formatter: function(cell, formatterParams, onRendered) {
272
+ var status = cell.getValue();
273
+ var color;
274
+ switch (status) {
275
+ case 'green':
276
+ color = 'green';
277
+ break;
278
+ case 'red':
279
+ color = 'red';
280
+ break;
281
+ case 'yellow':
282
+ color = 'yellow';
283
+ break;
284
+ default:
285
+ color = 'gray';
286
+ }
287
+ return `<div style="width: 20px; height: 20px; background-color: ${color};"></div>`;
288
+ }},
289
+ {title:"Ссылка на пользователя в GC", field:"ad_url", formatter: function(cell, formatterParams, onRendered) {
290
+ var ad_url = cell.getValue();
291
+ return `<a href="${ad_url}" target="_blank">${ad_url}</a>`;
292
+ }},
293
+ {title:"Ссылка на VK", field:"vk_id", formatter: function(cell, formatterParams, onRendered) {
294
+ var vk_id = cell.getValue();
295
+ return `<a href="https://vk.com/id${vk_id}" target="_blank">${vk_id}</a>`;
296
+ }},
297
+ {title:"Ссылка на Tg", field:"chat_id", formatter: function(cell, formatterParams, onRendered) {
298
+ var chatId = cell.getValue();
299
+ if (chatId.startsWith('@')) {
300
+ chatId = chatId.substring(1); // Удаление символа @ в начале
301
+ }
302
+ return `<a href="https://t.me/${chatId}" target="_blank">${chatId}</a>`;
303
+ }},
304
+ {title:"Статус WhatsApp", field:"ws_st"},
305
+ {title:"Стутус подписки", field:"ws_stop"},
306
+ {title:"Вебинары", field:"web_st", formatter:"star", formatterParams:{stars:7}, hozAlign:"center", width:120},
307
+ {title:"Прогрес по воронке", field:"fin_prog", formatter:"progress", formatterParams:{color:["#00dd00", "orange", "rgb(255,0,0)"]}, sorter:"number", width:100},
308
+ {title:"pr1", field:"b_mess"},
309
+ {title:"pr2", field:"pr2"},
310
+ {title:"pr3", field:"pr3"},
311
+ {title:"Канал трафика", field:"pr4"},
312
+ {title:"Дата", field:"pr5"},
313
+ {title:"Ключ PR", field:"key_pr"},
314
+ {title:"Канал", field:"canal"},
315
+ {title:"Дата", field:"data_t"}
316
+ ],
317
+ });
318
 
319
+ var fieldEl = document.getElementById("filter-field");
320
+ var typeEl = document.getElementById("filter-type");
321
+ var valueEl = document.getElementById("filter-value");
322
 
323
+ function updateFilter() {
324
+ var filterVal = fieldEl.options[fieldEl.selectedIndex].value;
325
+ var typeVal = typeEl.options[typeEl.selectedIndex].value;
326
+ if (filterVal) {
327
+ table.setFilter(filterVal, typeVal, valueEl.value);
328
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
 
331
+ document.getElementById("filter-field").addEventListener("change", updateFilter);
332
+ document.getElementById("filter-type").addEventListener("change", updateFilter);
333
+ document.getElementById("filter-value").addEventListener("keyup", updateFilter);
334
 
335
+ document.getElementById("filter-clear").addEventListener("click", function() {
336
+ fieldEl.value = "";
337
+ typeEl.value = "=";
338
+ valueEl.value = "";
339
+ table.clearFilter();
340
+ });
341
 
342
+ // Скачать в формате XLSX
343
+ document.getElementById("download-xlsx").addEventListener("click", function() {
344
+ table.download("xlsx", "data.xlsx");
345
+ });
346
+
347
+ // Скачать в формате JSON
348
+ document.getElementById("download-json").addEventListener("click", function() {
349
+ var selectedRows = table.getSelectedData(); // Получаем выбранные строки
350
+ var jsonData = JSON.stringify(selectedRows, null, 2);
351
+ var blob = new Blob([jsonData], {type: "application/json"});
352
+ var url = URL.createObjectURL(blob);
353
+ var a = document.createElement("a");
354
+ a.href = url;
355
+ a.download = "data.json";
356
+ a.click();
357
+ URL.revokeObjectURL(url);
358
+ });
359
+
360
+ // Взять себе (тоже скачивание JSON, если требуется)
361
+ document.getElementById("take-for-yourself").addEventListener("click", function() {
362
+ var selectedRows = table.getSelectedData(); // Получаем выбранные строки
363
+ var jsonData = JSON.stringify(selectedRows, null, 2);
364
+ console.log("Данные для себя:", jsonData); // Можно заменить на другую логику
365
+ });
366
+ })
367
+ .catch(error => console.error('Error fetching data:', error));
368
+ });
369
+ </script>
370
  </body>
371
 
372
  </html>