קבצים ותוכנות לשימוש במערכות ימות המשיח
-
@אA כתב בקבצים ותוכנות לשימוש במערכות ימות המשיח:
קובץ לצפייה בדוחות של קבלת נתונים
הקובץ הזה הוא לא איי איי איי
אולי בונים ממשק חדש ויציב, לצפייה בנתונים בזמן אמת, עם אפשרות ריענון אוטמטי.
-
@מה
בעז"ה בלנ"ד. -
ניהול קבלת נתונים מקצועי + כולל ריענון אוטומטי
הקוד
<!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8"> <title>מערכת ניהול - ימות המשיח</title> <link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css"> <style> body { font-family: 'Segoe UI', sans-serif; background: #f8f9fa; padding: 20px; } .main-card { background: white; padding: 20px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); overflow-x: auto; } .toolbar { display: flex; gap: 15px; margin-bottom: 20px; align-items: center; } .btn { padding: 8px 16px; cursor: pointer; background: #3b82f6; color: white; border: none; border-radius: 6px; font-weight: 600; } #data-table { font-size: 12px; width: 100% !important; table-layout: auto; } #data-table th, #data-table td { text-align: right !important; padding: 6px !important; white-space: nowrap; } table.dataTable thead .sorting:before, table.dataTable thead .sorting:after { display: none !important; } .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background: white; min-width: 200px; box-shadow: 0 8px 16px rgba(0,0,0,0.2); z-index: 1000; padding: 15px; border-radius: 8px; border: 1px solid #ddd; } .show { display: block; } .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 2000; } .modal-content { background: white; width: 400px; margin: 100px auto; padding: 25px; border-radius: 12px; } .token-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px; } </style> </head> <body> <div class="main-card"> <div class="toolbar"> <div class="dropdown"> <button class="btn" onclick="document.getElementById('settingsDrop').classList.toggle('show')">הגדרות ⚙️</button> <div id="settingsDrop" class="dropdown-content"> <button style="width:100%; background:none; border:none; text-align:right; cursor:pointer;" onclick="openModal('token-modal')">ניהול טוקנים</button> <button style="width:100%; background:none; border:none; text-align:right; cursor:pointer;" onclick="openModal('col-modal')">ניהול עמודות</button> <div style="margin-top:10px; cursor:pointer; font-size:14px;" onclick="toggleAutoRefresh()"> רענון אוטומטי <span id="refresh-check" style="display:none; color:green;">✔</span> </div> </div> </div> <input type="text" id="path-input" placeholder="נתיב (למשל: 1)" style="padding: 9px; width: 300px; border: 1px solid #ddd; border-radius: 6px;"> <button class="btn" onclick="initialLoad()">טען נתונים</button> </div> <table id="data-table" class="display"> <thead><tr id="table-head"></tr></thead> <tbody></tbody> </table> </div> <div id="token-modal" class="modal"><div class="modal-content"><h3>ניהול טוקנים</h3><div id="token-list"></div><div style="margin-top:15px;"><input type="text" id="new-token" placeholder="טוקן חדש"><button class="btn" onclick="addToken()">הוסף</button></div><button class="btn" style="background:#64748b; margin-top:10px;" onclick="closeModal('token-modal')">סגור</button></div></div> <div id="col-modal" class="modal"><div class="modal-content"><h3>בחירת עמודות</h3><div id="col-list"></div><button class="btn" style="margin-top:15px;" onclick="closeModal('col-modal')">סגור</button></div></div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script> <script> let activeToken = localStorage.getItem('activeToken') || ''; let refreshInterval = null; let knownData = new Set(); function openModal(id) { document.getElementById(id).style.display = 'block'; document.getElementById('settingsDrop').classList.remove('show'); } function closeModal(id) { document.getElementById(id).style.display = 'none'; } window.onclick = (e) => { if (!e.target.matches('.btn')) document.getElementById('settingsDrop').classList.remove('show'); }; function renderTokens() { const list = document.getElementById('token-list'); const tokens = JSON.parse(localStorage.getItem('myTokens') || '[]'); list.innerHTML = tokens.map((t, i) => ` <div class="token-item"> <span onclick="activeToken='${t}'; localStorage.setItem('activeToken', '${t}'); renderTokens()" style="cursor:pointer; ${t===activeToken ? 'font-weight:bold; color:#3b82f6;' : ''}">${t.substring(0,10)}...</span> <button onclick="deleteToken(${i})" style="color:red; background:none; border:none; cursor:pointer;">X</button> </div>`).join(''); } function addToken() { const val = document.getElementById('new-token').value.trim(); if (!val) return; let tokens = JSON.parse(localStorage.getItem('myTokens') || '[]'); tokens.push(val); localStorage.setItem('myTokens', JSON.stringify(tokens)); document.getElementById('new-token').value = ''; renderTokens(); } function deleteToken(i) { let tokens = JSON.parse(localStorage.getItem('myTokens') || '[]'); tokens.splice(i, 1); localStorage.setItem('myTokens', JSON.stringify(tokens)); renderTokens(); } function toggleAutoRefresh() { const check = document.getElementById('refresh-check'); if (refreshInterval) { clearInterval(refreshInterval); refreshInterval = null; check.style.display = 'none'; } else { refreshInterval = setInterval(fetchData, 10000); check.style.display = 'inline'; } } async function initialLoad() { knownData.clear(); await fetchData(true); } async function fetchData(isFullLoad = false) { if (!activeToken) return; const path = document.getElementById('path-input').value; const fullPath = `ivr2:${path}/ApprovalAll.ymgr`; const pathIni = `ivr2:${path}/ApprovalAll.ini`; try { const [resYmgr, resIni] = await Promise.all([ fetch(`https://www.call2all.co.il/ym/api/DownloadFile?token=${activeToken}&path=${encodeURIComponent(fullPath)}`), fetch(`https://www.call2all.co.il/ym/api/DownloadFile?token=${activeToken}&path=${encodeURIComponent(pathIni)}`) ]); const textYmgr = await resYmgr.text(); const textIni = await resIni.ok ? await resIni.text() : ""; const headersMap = {}; textIni.split('\n').forEach(line => { const [k, v] = line.split('='); if(k) headersMap[k.trim()] = v ? v.trim() : k.trim(); }); if (isFullLoad) { if ($.fn.DataTable.isDataTable('#data-table')) $('#data-table').DataTable().destroy(); $('#table-head').empty(); $('#data-table tbody').empty(); $('#col-list').empty(); } const lines = textYmgr.split('\n').filter(l => l.trim()); const firstRowParts = lines[0].split('%').map(p => p.split('#')[0]); if (isFullLoad) { firstRowParts.forEach((k, i) => { if(k && !['Status','Folder','DID','IncomingDID'].includes(k)) { $('#table-head').append(`<th>${headersMap[k] || k}</th>`); $('#col-list').append(`<div><input type="checkbox" checked onchange="toggleCol(${i}, this.checked)"> ${headersMap[k] || k}</div>`); } }); $('#data-table').DataTable({ language: { url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/he.json' }, ordering: false, paging: true }); } const table = $('#data-table').DataTable(); lines.forEach(line => { if (!knownData.has(line)) { knownData.add(line); const rowDataObj = {}; line.split('%').forEach(part => { const [k, v] = part.split('#'); rowDataObj[k] = v; }); let rowArr = []; firstRowParts.forEach(k => { if(!['Status','Folder','DID','IncomingDID'].includes(k)) rowArr.push(rowDataObj[k] || ''); }); table.row.add(rowArr).draw(false); } }); } catch (e) { console.log("שגיאה:", e.message); } } function toggleCol(idx, visible) { $('#data-table').DataTable().column(idx).visible(visible); } renderTokens(); </script> </body> </html> -
@מה
העלתי את הקובץ שרצית, ובעז"ה נוסיף לו תיקונים.
אשמח להערות ממך ומאחרים כדי לדעת מה נצרך לכזה קובץ. -
בינתיים לא עובד הכפתור טען נתונים, כמו"כ התצוגה של החלון מוסטת כלפי מעלה.
-
@מה
אצלי עובד.
הכנסת טוקן?
אם לא, כנס להגדרות ניהול טוקנים הכנס טוקן. -
@אA
כן הכנסתי טוקן

-
@מה
והכנסת נתיב?
וזה לא מעלה את הנתונים? -
-
מצורף צילו"מ

-
@מה
אתה מתכוון לשלוחת קבלת נתונים כן?
זה מחולק אצלך לפי חודשים/או חלוקה אחרת? -
@אA
קבלת נתונים רגילה, בשלוחה רגילה,
אני חושב שהכפתור טען לא עובד -
@מה
ממש מוזר.
אצלי עובד חלק.
הטוקן ודאי תקין?! -
@אA כתב בקבצים ותוכנות לשימוש במערכות ימות המשיח:
הטוקן ודאי תקין?!
כן
אולי לא העלית את הגירסה הסופית של הקוד?
-
עובד ב"ה
עשיתי קובץ HTML חדש ועובד.
עכשיו אני עובר על השיפורים שאפשר לשדרגתודה!
-
@מה
לא.
זו הגירסא הסופית.
גם לקחתי את מה שהעלתי ופתחתי שוב ועבד מצויין. -
@מה
בשמחה!
יישר כח. -
קוד משוכלל למעקב אחר נתוני האזנה של התלמידים במרחב הקולי
https://f2.freeivr.co.il/post/176080 -
באג:
כשמסמנים או מסירים סימון מעמודות, השינויים חלים על עמודות אחרות (לדוג' אני מוריד סימון מעמודה 050, והעמודה 052 נמחקה)שדרוגים:
- טבלאות סיכום בצד שמאל של העמוד- כמו 'טבלת צירים' בגוגל שיטס, Pivot Table באקסל
- אשפרות צפייה באותו ממשק, בנתונים של 2 שלוחות ויותר,
- גלילת השורות ללא סוף - בלי לחלק לדפים נפרדים
- אפשרות הורדה לאקסל
- קרדיט למפתח התוכנה....
-
עוד דבר אחד נחוץ ששכחתי:
שיתוף חבירים לצפות ברשימה.
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות