// ─────────────────────────────────────────────────────────── // Huio Control Panel — System & DB View (cp-system-view.jsx) // ─────────────────────────────────────────────────────────── if (!window.CP_STYLES) throw new Error('[cp-system-view] window.CP_STYLES not loaded'); function renderSystem({ lang = 'vi', t: rawT, appStyles: rawAppStyles, dbStats = [], auctionStreakAlerts = [], bankIntegrations = [], setIsSyncDocModalOpen, handleBankPause, handleBankResume, }) { const appStyles = rawAppStyles || window.CP_STYLES || {}; const t = typeof rawT === 'function' ? rawT : (k) => k; const statsList = Array.isArray(dbStats) ? dbStats : []; const streakList = Array.isArray(auctionStreakAlerts) ? auctionStreakAlerts : []; const bankList = Array.isArray(bankIntegrations) ? bankIntegrations : []; // Safe clipboard helper with browser fallback const handleCopyWebhook = (url) => { if (!url) return; if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') { navigator.clipboard.writeText(url) .then(() => alert(lang === 'vi' ? 'Đã sao chép Webhook URL!' : lang === 'en' ? 'Webhook URL copied!' : 'Webhook URL скопирован!')) .catch(() => { prompt(lang === 'vi' ? 'Sao chép URL:' : lang === 'en' ? 'Copy URL:' : 'Скопируйте URL:', url); }); } else { prompt(lang === 'vi' ? 'Sao chép URL:' : lang === 'en' ? 'Copy URL:' : 'Скопируйте URL:', url); } }; return (
{t('db.sub')}
| {t('db.col.table')} | {t('db.col.rows')} | {t('db.col.rls')} |
|---|---|---|
| {lang === 'vi' ? 'Chưa có thông tin bảng CSDL.' : lang === 'en' ? 'No database statistics available.' : 'Нет данных таблиц БД.'} | ||
| {tableName} | {rowCount} | {isRlsActive ? t('db.rls.active') : t('db.rls.inactive')} |
{lang === 'vi' ? 'Đồng bộ hóa cơ sở dữ liệu vector (embeddings) cho Chatbot hỗ trợ người dùng.' : lang === 'en' ? 'Synchronize vector database embeddings for the user-facing AI support chatbot.' : 'Синхронизация векторной базы знаний (эмбеддингов) для пользовательского ИИ-ассистента.'}
{lang === 'vi' ? 'Dây có cùng hội viên hốt ≥3 kỳ liên tiếp (chỉ cảnh báo, không chặn).' : lang === 'en' ? 'Groups where the same member won ≥3 consecutive periods (alert only, no block).' : 'Кассы, где один участник выиграл ≥3 периода подряд (только предупреждение).'}
| {lang === 'vi' ? 'Dây' : 'Group'} | {lang === 'vi' ? 'Hội viên' : 'Member'} | {lang === 'vi' ? 'Chuỗi' : 'Streak'} | {lang === 'vi' ? 'Kỳ gần nhất' : 'Last period'} |
|---|---|---|---|
| {a.groupName || a.groupId || '—'} | {a.winnerName || a.winnerMemberId || '—'} | {a.streak ?? 0} | {a.lastPeriod ? `K${a.lastPeriod}` : '—'} |
{lang === 'vi' ? 'Cấu hình Webhook, theo dõi trạng thái HMAC, tạm dừng hoặc khôi phục kết nối.' : lang === 'en' ? 'Configure Webhook URL, monitor HMAC status, pause/resume connections.' : 'Настройка Webhook, статус HMAC, пауза/возобновление интеграции.'}