VIVIP.INFO

Hệ thống đối soát & tính toán đa tầng

{{ loginError }}
Đồng bộ tài khoản VIVIP.INFO · NAP APK Bảo mật đa tầng

Xin chào, {{ currentUser.displayName || currentUser.username }}

Tìm Kiếm Nhanh & Lọc Gói Xu
Lọc nhanh theo Gói Nạp: +{{ formatNum(historyTotalCoins) }} Xu/Stars ({{ formatNum(historyTotal) }} dòng)
Khoảng thời gian:
Đơn Nạp Mới Nhất ({{ formatNum(overview.kpi.totalOrders) }} đơn)
Tổng Xu kỳ này
+{{ formatNum(overview.kpi.totalCoins) }}
Pool Chờ TikTok (6h)
{{ formatNum(overview.tiktok.poolPending) }} đơn
Đơn hôm nay
+{{ formatNum(overview.kpi.todayOrders) }} đơn
Chưa có đơn nạp nào trong khoảng thời gian này.
{{ n.recipientCustomName || n.recipientAccount || ('Đơn #' + n.id) }}
{{ n.shopCode }} · @{{ n.username }} · {{ formatTime(n.capturedAt) }}
+{{ formatNum(n.coinsAmount) }} {{ n.platform === 'telegram' ? 'Stars' : 'Xu' }}
${{ Number(n.priceUsd || 0).toFixed(2) }}
TikTok TikTok Account
{{ accountWorkflowFilter ? ('Chưa có TikTok Account ở trạng thái "' + accountWorkflowFilter + '"') : 'Chưa có TikTok Account thuộc Shop trong bộ lọc hiện tại' }}
Hãy setup đơn pool từ Auto-XA cho đúng Shop.
TikTok
{{ ac.customName || ac.display || ac.handle }} {{ getCanonicalAccountStatus(ac) }} {{ ac.shopCode }} active auto_xa no pool US {{ ac.proxyShort }} ⚠️ Văng Cookie · Cần login lại
@{{ ac.username }} Ghi chú: {{ ac.note }}
Dư: {{ ac.currentBalance !== null && ac.currentBalance !== undefined ? formatNum(ac.currentBalance) : '—' }} Xu Pool 6h: {{ formatNum(ac.poolPending) }}
Đã nạp: +{{ formatNum(ac.coinsTotal) }} Xu ({{ formatNum(ac.ordersCount) }} đơn)
{{ ac.cookieExpired ? 'Số dư (Tạm tính)' : 'Số dư thực tế' }} ! Văng Cookie
{{ formatNum(ac.balanceBeforeLast) }} -> {{ formatNum(ac.balanceAfterLast) }}
Đã nạp (Kỳ)
+{{ formatNum(ac.coinsTotal) }} Xu
{{ formatNum(ac.ordersCount) }} đơn
Pool Đơn (6h)
{{ formatNum(ac.poolPending) }} chờ
{{ formatNum(ac.poolClaimed) }} giữ · {{ formatNum(ac.todayOrders) }} nay

Pool TikTok (FIFO 6h) {{ formatNum(poolStatusCounts.PENDING || overview.tiktok?.poolPending || 0) }} chờ cấp

Hàng đợi đơn TikTok US hạn 6 tiếng · Giới hạn 50 đơn/trang · Bấm vào nhãn màu bên dưới để lọc

Lọc trạng thái:
Trang {{ poolPage }}/{{ poolTotalPages }} · Hiển thị {{ poolPageStart }}–{{ poolPageEnd }} / {{ formatNum(poolEffectiveTotal) }} đơn
Không có đơn Pool nào khớp bộ lọc hiện tại ({{ poolStatusFilter }}).
PENDING {{ formatRemainingTtl(item.remainingSeconds) }} CLAIMED PURCHASED EXPIRED RELEASED {{ item.shopCode || 'SHOP_MAIN' }}
+{{ formatNum(item.coinsAmount) }} Xu
{{ item.recipientCustomName }} {{ item.recipientAccount || '—' }}
UID: {{ item.recipientUid }}
@{{ item.claimedByUsername }}
{{ formatTime(item.updatedAt || item.createdAt) }}
Hiển thị {{ formatNum(poolPageStart) }}–{{ formatNum(poolPageEnd) }} trong tổng số {{ formatNum(poolEffectiveTotal) }} đơn Pool (Giới hạn {{ poolPageSize }} đơn/trang)

Giao dịch app / Sổ Cái Đã Nạp

Đối soát thống kê gói nạp & lịch sử giao dịch TikTok US + Telegram

→
Thời gian: | Gói:
Shop: {{ selectedShopLabel }} {{ selectedOperatorDropdownLabel }} TK: {{ selectedAccountLabel }} SKU: {{ shortSkuLabel(filters.sku) }} TikTok: {{ formatNum(ledgerSummaryGroups.tiktok.ordersCount) }} đơn (+{{ formatNum(ledgerSummaryGroups.tiktok.coinsTotal) }} Xu) · Telegram: {{ formatNum(ledgerSummaryGroups.telegram.ordersCount) }} đơn (+{{ formatNum(ledgerSummaryGroups.telegram.starsTotal) }} Stars) · Tổng: ${{ formatUsd(ledgerSummaryGroups.grand.netUsd) }}
GAME TÊN GÓI ĐƠN GIÁ SỐ LƯỢNG ĐƠN TỔNG XU / STARS TỔNG TIỀN (USD) THAO TÁC
Chưa có dữ liệu gói nạp nào khớp với bộ lọc hiện tại.
Tổng cộng +{{ formatNum(ledgerSummaryGroups.tiktok.coinsTotal) }} Xu · +{{ formatNum(ledgerSummaryGroups.telegram.starsTotal) }} Stars {{ formatNum(ledgerSummaryGroups.grand.ordersCount) }} +{{ formatNum(ledgerSummaryGroups.tiktok.coinsTotal) }} Xu · +{{ formatNum(ledgerSummaryGroups.telegram.starsTotal) }} Stars 0 ${{ formatUsd(ledgerSummaryGroups.grand.netUsd) }}
Không có đơn nạp TikTok / Telegram nào khớp bộ lọc hiện tại.
{{ item.platform === 'telegram' ? 'Telegram' : 'TikTok US' }} {{ item.recipientCustomName }} {{ item.recipientAccount || item.recipientNickname || (item.platform === 'telegram' ? 'Kho Telegram Stars' : 'Chưa rõ tài khoản') }}
{{ formatTime(item.capturedAt) }} · @{{ item.username }} ({{ item.shopCode }})
+{{ formatNum(item.coinsAmount) }} {{ item.platform === 'telegram' ? 'Stars' : 'Xu' }}
{{ item.recipientNickname || 'Đã nạp vào Kho Stars' }} Warmup · Không cần về ví ($0.00) Đã nạp thành công
${{ Number(item.priceUsd || 0).toFixed(2) }} Chi tiết →
#ID Cửa Hàng (Shop) Phân Loại (SEED / REAL) Trạng Thái Gói Nạp
Kho dự trữ trống (0 đơn).
#{{ inv.id }} {{ inv.shopCode || ('SHOP#' + (inv.shopId || 1)) }} SEED (Mẫu khởi tạo) REAL (Đơn thật) Sẵn sàng {{ (inv.isSeed || !inv.isReal) ? '(SEED)' : '' }} Đã xuất (Drained) +{{ formatNum(inv.starsAmount) }} {{ inv.platform === 'telegram' ? 'Stars' : 'Xu' }} [SEED]
Hiển thị {{ formatNum(historyPageStart) }}–{{ formatNum(historyPageEnd) }} trong tổng số {{ formatNum(historyTotal) }} bản ghi (Trang {{ historyPage }}/{{ historyTotalPages }} · Giới hạn {{ historyPageSize }} đơn/trang)
Tổng Doanh Thu Thực Nhận ({{ filters.platform === 'telegram' ? 'Telegram Stars' : filters.platform === 'tiktok' ? 'TikTok US' : 'TikTok + Telegram' }}) Tháng {{ formatMonthLabel(filters.month) }}
{{ hideBalance ? '••••••••' : ('$' + formatUsd(netTotalUsd)) }}
{{ formatNum(overview.kpi.totalOrders) }} đơn · +{{ formatNum(overview.kpi.totalCoins) }} Xu/Stars
1. Tiền Nạp Vào Kho (Inflow) ${{ formatUsd((overview.tiktok?.totalUsd || 0) + (overview.telegram?.totalUsd || 0)) }}
TikTok US Đã Nạp
+{{ formatNum(overview.tiktok?.totalCoins || 0) }} Xu
{{ formatNum(overview.tiktok?.totalOrders || 0) }} đơn · ${{ formatUsd(overview.tiktok?.totalUsd || 0) }}
Telegram Nạp Vào Kho
+{{ formatNum(overview.telegram?.totalStars || 0) }} Stars
{{ formatNum(overview.telegram?.totalOrders || 0) }} đơn · ${{ formatUsd(overview.telegram?.totalUsd || 0) }}
2. Tiền Xả Ra & Tồn Kho (Outflow)
Đã xả: ${{ formatUsd((overview.tiktok?.totalUsd || 0) + (overview.telegram?.drainedUsd || 0)) }} Kho còn: {{ formatNum(overview.telegram?.inventoryAvailable || 0) }} đơn (${{ formatUsd(overview.telegram?.availableUsd || 0) }})
TikTok US Đã Xả
+{{ formatNum(overview.tiktok?.totalCoins || 0) }} Xu
{{ formatNum(overview.tiktok?.totalOrders || 0) }} đơn · ${{ formatUsd(overview.tiktok?.totalUsd || 0) }}
Telegram Đã Xả
+{{ formatNum(overview.telegram?.drainedStars || 0) }} Stars
{{ formatNum(overview.telegram?.drainedOrders ?? overview.telegram?.inventoryDrained ?? 0) }} đơn · ${{ formatUsd(overview.telegram?.drainedUsd || 0) }}
Tồn Kho Chờ Xả
+{{ formatNum(overview.telegram?.availableStars || 0) }} Stars
{{ formatNum(overview.telegram?.inventoryAvailable || 0) }} token · ${{ formatUsd(overview.telegram?.availableUsd || 0) }}
Kho Token Theo Shop: {{ sh.shopCode }}: Còn {{ formatNum(sh.availableTokens || 0) }} token (+{{ formatNum(sh.availableStars || 0) }}★ · ${{ formatUsd(sh.availableUsd || 0) }}) · Đã xả {{ formatNum(sh.drainedTokens) }} (${{ formatUsd(sh.drainedUsd || 0) }})
Biểu đồ
Chiết khấu (%):

{{ currentUser.role === 'super_admin' && donutMode === 'shops' ? 'Tỷ Trọng Các Shop' : 'Cơ Cấu Gói Nạp' }}

Bấm vào từng phần để lọc

{{ seg.label }}: ${{ formatUsd(seg.usd) }} ({{ seg.sharePct }}%)
{{ topDonutItem ? topDonutItem.label : 'Tổng' }} {{ topDonutItem ? topDonutItem.sharePct + '%' : '0%' }} ${{ formatUsd(overview.kpi.totalUsd) }}
Chưa có dữ liệu đơn nạp
Tổng đơn trong bộ lọc {{ formatNum(overview.kpi.totalOrders) }} đơn · ${{ formatUsd(overview.kpi.totalUsd) }}

{{ currentUser.role === 'super_admin' && earningBarMode === 'shops' ? 'Tính Tiền Theo Shop' : 'Tính Tiền Theo User' }}

Sau CK {{ calcConfig.discountPct || 0 }}% · Đơn vị USD ($)

Chưa có phát sinh doanh thu
{{ item.label }} ({{ item.orders }} đơn)
${{ formatUsd(item.netUsd) }}
{{ item.sharePct }}%
{{ item.sharePct }}%
Tổng thực nhận (Sau CK):
${{ formatUsd(netTotalUsd) }}

Biểu Đồ Dòng Tiền

{{ chartPeriodMode === 'month' ? 'Doanh số theo từng tháng' : 'Doanh số 10 ngày gần nhất' }}

{{ activeTrendPoint.fullLabel }}
+${{ formatUsd(applyDiscount(activeTrendPoint.usd)) }} · {{ activeTrendPoint.orders }} đơn
{{ pt.shortLabel }}
Bấm vào cột để lọc theo kỳ

Bảng Tính Toán Tiền Chi Tiết — {{ currentUser.role === 'super_admin' ? 'Tất Cả Cửa Hàng & User' : (currentUser.role === 'admin_con' ? ('Nhóm User của @' + currentUser.username + ' (' + currentUser.shopCode + ')') : (currentUser.role === 'user' ? ('Nạp Cá Nhân @' + currentUser.username) : ('Cửa Hàng ' + currentUser.shopCode))) }}

Đơn vị chuẩn: USD ($) & Xu / Stars · Chiết khấu: {{ calcConfig.discountPct || 0 }}% · Kỳ: Tháng {{ formatMonthLabel(filters.month) }}

Cửa Hàng (Shop) Đơn Đã Nạp Tổng Xu Đã Bơm Doanh Số Gốc (USD) Sau CK ({{ calcConfig.discountPct || 0 }}%) Tỷ Trọng Lọc Đơn Shop
{{ sh.shopCode }}
{{ sh.shopName }}
{{ formatNum(sh.totalOrders) }} đơn +{{ formatNum(sh.totalCoins) }} Xu ${{ formatUsd(sh.totalUsd) }} ${{ formatUsd(sh.netUsd) }}
{{ sh.sharePct }}%
Tài Khoản (User) Thuộc Shop Số Đơn Tổng Xu Đã Nạp Doanh Số Gốc (USD) Sau CK ({{ calcConfig.discountPct || 0 }}%) Lọc Đơn
Chưa có dữ liệu user trong bộ lọc này.
@{{ op.username }}
{{ op.displayName }}
{{ op.shopCode }} {{ formatNum(op.totalOrders) }} đơn +{{ formatNum(op.totalCoins) }} Xu ${{ formatUsd(op.totalUsd) }} ${{ formatUsd(op.netUsd) }}
Tên Gói & Mã SKU Mệnh Giá Gói Số Đơn Tổng Sản Lượng Tổng Tiền (USD) Lọc Gói Này
{{ sk.productName }}
{{ sk.sku }}
+{{ formatNum(sk.unitCoins) }} {{ sk.platform === 'telegram' ? 'Stars' : 'Xu' }} · ${{ formatUsd(sk.unitPriceUsd) }} {{ formatNum(sk.ordersCount) }} đơn +{{ formatNum(sk.coinsTotal) }} ${{ formatUsd(applyDiscount(sk.usdTotal)) }}

Quản Lý Các Cửa Hàng (Shops)

Phân bổ hạn mức tài khoản, số máy tối đa và cô lập luồng đơn nạp cho từng đại lý

Mã Shop Tên Cửa Hàng Trạng Thái User Thiết Bị Đơn & Sản Lượng Thao Tác
{{ s.shopCode }}
{{ s.shopName }}
{{ s.note }}
{{ s.status === 'active' ? 'Hoạt động' : 'Tạm ngưng' }} {{ s.activeUsers }} / ∞ {{ s.activeDevices }} / ∞ {{ formatNum(s.ordersCount) }} đơn · {{ formatNum(s.coinsTotal) }} Xu
GROUP REVENUE ANALYTICS {{ adminConGroupsData.summary.totalAdminCons || 0 }} Nhóm admin_con · {{ adminConGroupsData.summary.totalManagedUsers || 0 }} User trực thuộc

Quản Lý Doanh Thu Các Nhóm admin_con & User Trực Thuộc

Thống kê chi tiết doanh thu nạp (USD · Xu TikTok · Telegram Stars · Gói SKU) chia theo từng nhóm admin_con và toàn bộ các user do từng admin_con quản lý.

Shop:
→
Chiết khấu %:
Tổng Doanh Thu Các Nhóm admin_con
${{ Number(adminConGroupsData.summary.totalUsd || 0).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
Sau CK (-{{ adminConFilters.discountPct }}%): ${{ (Number(adminConGroupsData.summary.totalUsd || 0) * (1 - Number(adminConFilters.discountPct) / 100)).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
Hôm nay: ${{ Number(adminConGroupsData.summary.todayUsd || 0).toFixed(2) }} ({{ adminConGroupsData.summary.todayOrders || 0 }} đơn) Tổng: {{ formatNum(adminConGroupsData.summary.totalOrders || 0) }} đơn
Do User con nạp: ${{ Number(adminConGroupsData.summary.childrenUsd || 0).toFixed(2) }} Admin Con tự nạp: ${{ Number(adminConGroupsData.summary.adminOwnUsd || 0).toFixed(2) }}
Số Nhóm admin_con & User Con
{{ adminConGroupsData.summary.totalAdminCons || 0 }} Nhóm admin_con · {{ adminConGroupsData.summary.totalManagedUsers || 0 }} User con
User có doanh thu: {{ adminConGroupsData.summary.activeManagedUsers || 0 }}/{{ adminConGroupsData.summary.totalManagedUsers || 0 }} Máy APK Online: {{ adminConGroupsData.summary.totalActiveDevices || 0 }}
Doanh Thu TikTok US (Các Nhóm)
+{{ formatNum(adminConGroupsData.summary.tiktokCoins || 0) }} Xu
Số đơn TikTok: {{ formatNum(adminConGroupsData.summary.tiktokOrders || 0) }} Giá trị: ${{ Number(adminConGroupsData.summary.tiktokUsd || 0).toFixed(2) }}
Telegram Stars & Tỷ Trọng Shop
+{{ formatNum(adminConGroupsData.summary.telegramStars || 0) }} Stars (${{ Number(adminConGroupsData.summary.telegramUsd || 0).toFixed(2) }})
User trực tiếp Chủ Shop: {{ adminConGroupsData.summary.directUsersCount || 0 }} (${{ Number(adminConGroupsData.summary.directUsersUsd || 0).toFixed(2) }}) Toàn Shop: ${{ Number(adminConGroupsData.summary.shopGrandTotalUsd || 0).toFixed(2) }}

Bảng Tổng Hợp Doanh Thu Theo Từng Nhóm admin_con ({{ filteredAdminConGroups.length }} nhóm)

Bấm vào từng nhóm để xem chi tiết từng User con bên dưới hoặc lọc trực tiếp trên Sổ Cái.

Hạng / Nhóm admin_con Số User Con Máy Online Đơn Hôm Nay Tổng Đơn TikTok Xu Tele Stars Do User Con Nạp Tổng USD Nhóm Sau CK (-{{ adminConFilters.discountPct }}%) Tỷ Trọng Thao Tác
#{{ gIdx + 1 }}
@{{ grp.adminCon.username }} {{ grp.adminCon.shopCode }}
{{ grp.adminCon.displayName }}
{{ grp.managedUsersCount }} user ({{ grp.activeUsersCount }} có đơn) {{ grp.groupActiveDevices }}/{{ grp.groupTotalDevices }}
${{ Number(grp.todayUsd || 0).toFixed(2) }}
{{ grp.todayOrders || 0 }} đơn
{{ formatNum(grp.totalOrders || 0) }}
+{{ formatNum(grp.tiktokCoins || 0) }} Xu
${{ Number(grp.tiktokUsd || 0).toFixed(2) }}
+{{ formatNum(grp.telegramStars || 0) }} ★
${{ Number(grp.telegramUsd || 0).toFixed(2) }}
${{ Number(grp.childrenUsd || 0).toFixed(2) }}
+Admin: ${{ Number(grp.adminOwnUsd).toFixed(2) }}
${{ Number(grp.totalUsd || 0).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }} ${{ (Number(grp.totalUsd || 0) * (1 - Number(adminConFilters.discountPct) / 100)).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
{{ grp.sharePct || 0 }}%

{{ adminConFilters.q ? 'Không tìm thấy nhóm hoặc user khớp từ khóa' : 'Chưa có nhóm admin_con nào' }}

{{ adminConFilters.q ? 'Thử xóa từ khóa tìm kiếm hoặc chọn lại bộ lọc để xem toàn bộ các nhóm.' : 'Bạn có thể tạo tài khoản admin_con để phân nhóm quản lý các User nạp và theo dõi doanh thu riêng của từng nhóm tại đây.' }}

#{{ gIdx + 1 }}
Nhóm @{{ grp.adminCon.username }} ({{ grp.adminCon.displayName }}) admin_con Shop: {{ grp.adminCon.shopCode }} {{ grp.adminCon.status }}
Quản lý: {{ grp.managedUsersCount }} User con ({{ grp.activeUsersCount }} user có đơn) · Thiết bị Online: {{ grp.groupActiveDevices }}/{{ grp.groupTotalDevices }} · Tỷ trọng doanh thu: {{ grp.sharePct || 0 }}%
Tổng Doanh Thu Nhóm
${{ Number(grp.totalUsd || 0).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }} ({{ formatNum(grp.totalOrders || 0) }} đơn)
Thực thu (-{{ adminConFilters.discountPct }}%): ${{ (Number(grp.totalUsd || 0) * (1 - Number(adminConFilters.discountPct) / 100)).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
TikTok: +{{ formatNum(grp.tiktokCoins || 0) }} Xu ({{ grp.tiktokOrders || 0 }} đơn · ${{ Number(grp.tiktokUsd || 0).toFixed(2) }}) Telegram: +{{ formatNum(grp.telegramStars || 0) }} Stars ({{ grp.telegramOrders || 0 }} đơn · ${{ Number(grp.telegramUsd || 0).toFixed(2) }}) Do {{ grp.managedUsersCount }} User con nạp: ${{ Number(grp.childrenUsd || 0).toFixed(2) }} ({{ grp.childrenOrders || 0 }} đơn) Do @{{ grp.adminCon.username }} tự nạp: ${{ Number(grp.adminOwnUsd || 0).toFixed(2) }} ({{ grp.adminOwnOrders }} đơn)
Gói đã nạp: {{ sk.coins > 0 ? (formatNum(sk.coins) + (sk.platform === 'telegram' ? '★' : ' Xu')) : shortSkuLabel(sk.sku) }} × {{ sk.ordersCount }} (${{ Number(sk.totalUsd || 0).toFixed(2) }})
Thành Viên Trong Nhóm (@{{ grp.adminCon.username }}) Vai Trò Trạng Thái Máy APK Đơn Hôm Nay Tổng Đơn TikTok Xu Tele Stars Doanh Thu (USD) Sau CK (-{{ adminConFilters.discountPct }}%) % Trong Nhóm Thao Tác
@{{ grp.adminCon.username }}
{{ grp.adminCon.displayName }} (Trưởng nhóm tự nạp)
admin_con {{ grp.adminCon.status }} {{ grp.adminCon.activeDevices }}/{{ grp.adminCon.totalDevices }}
${{ Number(grp.adminCon.todayUsd || 0).toFixed(2) }}
{{ grp.adminCon.todayOrders || 0 }} đơn
{{ formatNum(grp.adminCon.totalOrders || 0) }}
+{{ formatNum(grp.adminCon.tiktokCoins || 0) }} Xu
${{ Number(grp.adminCon.tiktokUsd || 0).toFixed(2) }}
+{{ formatNum(grp.adminCon.telegramStars || 0) }} ★
${{ Number(grp.adminCon.telegramUsd || 0).toFixed(2) }}
${{ Number(grp.adminCon.totalUsd || 0).toFixed(2) }} ${{ (Number(grp.adminCon.totalUsd || 0) * (1 - Number(adminConFilters.discountPct) / 100)).toFixed(2) }} {{ grp.totalUsd > 0 ? Math.round((grp.adminCon.totalUsd / grp.totalUsd) * 1000) / 10 : 0 }}%
{{ uIdx + 1 }}
@{{ u.username }}
{{ u.displayName }}
{{ usk.coins > 0 ? (formatNum(usk.coins) + (usk.platform === 'telegram' ? '★' : ' Xu')) : shortSkuLabel(usk.sku) }}×{{ usk.ordersCount }}
user con {{ u.status }} {{ u.activeDevices }}/{{ u.totalDevices }}
${{ Number(u.todayUsd || 0).toFixed(2) }}
{{ u.todayOrders || 0 }} đơn
{{ formatNum(u.totalOrders || 0) }}
+{{ formatNum(u.tiktokCoins || 0) }} Xu
${{ Number(u.tiktokUsd || 0).toFixed(2) }}
+{{ formatNum(u.telegramStars || 0) }} ★
${{ Number(u.telegramUsd || 0).toFixed(2) }}
${{ Number(u.totalUsd || 0).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }} ${{ (Number(u.totalUsd || 0) * (1 - Number(adminConFilters.discountPct) / 100)).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) }}
{{ grp.totalUsd > 0 ? (Math.round((u.totalUsd / grp.totalUsd) * 1000) / 10) : 0 }}%
Nhóm @{{ grp.adminCon.username }} hiện chưa có User con nào.

User Trực Tiếp Của Chủ Shop (Chưa gán vào nhóm admin_con — {{ filteredDirectShopUsers.length }} user)

Các tài khoản user này hiện chưa thuộc nhóm admin_con nào. Bạn có thể bấm "Chọn & Gán Hàng Loạt Vào Admin Con" hoặc bấm "Gán vào nhóm admin_con" trên từng dòng.

Tổng doanh thu khối trực tiếp: ${{ Number(adminConGroupsData.directUsersGroup.totalUsd || 0).toFixed(2) }} ({{ formatNum(adminConGroupsData.directUsersGroup.totalOrders || 0) }} đơn)
User Trực Tiếp Trạng Thái Máy APK Đơn Hôm Nay Tổng Đơn TikTok Xu Tele Stars Doanh Thu (USD) Gán Nhóm / Thao Tác
@{{ du.username }} ({{ du.displayName }})
{{ dsk.coins > 0 ? (formatNum(dsk.coins) + (dsk.platform === 'telegram' ? '★' : ' Xu')) : shortSkuLabel(dsk.sku) }}×{{ dsk.ordersCount }}
{{ du.status }} {{ du.activeDevices }}/{{ du.totalDevices }} ${{ Number(du.todayUsd || 0).toFixed(2) }} ({{ du.todayOrders || 0 }}) {{ formatNum(du.totalOrders || 0) }} +{{ formatNum(du.tiktokCoins || 0) }} Xu +{{ formatNum(du.telegramStars || 0) }} ★ ${{ Number(du.totalUsd || 0).toFixed(2) }}

Quản Lý Tài Khoản ({{ usersList.length }})

Username Quyền (Role) & Quản Lý Shop Trạng Thái Thiết Bị Sản Lượng Đã Nạp Thao Tác
@{{ u.username }}
{{ u.role === 'admin_shop' ? 'admin_shop (Chủ Shop)' : u.role === 'admin_con' ? 'admin_con (Admin Con)' : u.role }} 👥 Quản lý: {{ u.managedUsersCount || 0 }} user con Nhóm @{{ u.createdByUsername }} Trực tiếp Chủ Shop
Quản lý bởi: @{{ u.createdByUsername }}
{{ u.shopCode }} {{ u.status }} {{ u.activeDevices }} / ∞
Máy cả nhóm
{{ formatNum(u.totalOrders ?? u.ordersCount ?? 0) }} đơn · {{ formatNum(u.totalCoins ?? u.coinsTotal ?? 0) }} Xu (${{ Number(u.totalUsd || 0).toFixed(2) }})
Tổng nhóm ({{ u.managedUsersCount || 0 }} user con)

Quản Lý Thiết Bị NAP APK ({{ devicesList.length }})

Danh sách điện thoại gắn với tài khoản nạp và kiểm soát khóa/gỡ thiết bị

Device ID Tên Máy / Model Tài Khoản Trạng Thái Thao Tác
Chưa có thiết bị nào được ghi nhận.
{{ shortId(d.deviceId, 16) }}
{{ d.deviceName || d.model || 'Android Device' }}
{{ d.manufacturer }} · Android {{ d.osVersion }}
@{{ d.username || '—' }} {{ d.isBlocked ? 'Đã khóa' : 'Hoạt động' }}
Telegram

Tài Khoản Telegram Kết Nối

{{ (tgDrain.sessions || []).length }} tài khoản

Kết nối qua MTProto API. Kho Stars của từng Shop có thể xả tự do vào bất kỳ tài khoản Telegram nào thuộc Shop đó.

Đăng Nhập & Lưu Phiên Telegram MTProto (OTP / 2FA)
Audit Logged
Telegram
Chưa có tài khoản Telegram nào được kết nối
Nhấn "Kết Nối Acc Telegram Mới" ở góc trên để đăng nhập bằng SĐT + OTP.
Telegram
{{ s.firstName || ('+' + s.phone) }} Đang chọn nhận xả
+{{ s.phone }} · @{{ s.tgUsername }} · ID: {{ s.tgUserId }}
{{ s.shopCode || currentUser.shopCode }}
Số dư Stars hiện tại
{{ s.lastStarsBalance !== null && s.lastStarsBalance !== undefined ? formatNum(s.lastStarsBalance) + ' Stars' : 'Chưa check' }}
{{ s.lastCheckedAt ? 'Check: ' + formatTime(s.lastCheckedAt) : 'Nhấn Check Stars để đồng bộ' }}
Đã xả vô Acc này
+{{ formatNum(s.totalDrainedStars || 0) }} Stars
{{ formatNum(s.totalDrainedOrders || 0) }} đơn · ${{ formatUsd(s.totalDrainedUsd || 0) }}
Trạng thái phiên API
{{ s.status === 'ACTIVE' ? 'MTProto Sẵn Sàng' : s.status }}
{{ s.lastDrainedAt ? 'Xả cuối: ' + formatTime(s.lastDrainedAt) : 'Sẵn sàng nhận Stars' }}
Tổng Trong Kho Còn Bao Nhiêu Kho Độc Lập · Xả Tự Do
Tổng Stars Khả Dụng Trong Kho
+{{ formatNum(tgDrain.warehouse.availableStars || 0) }} Stars
Đang có trong kho: {{ formatNum(tgDrain.warehouse.availableTokens || 0) }} token sẵn sàng · Giá trị: ${{ formatUsd(tgDrain.warehouse.availableUsd || 0) }}
Đã xả thành công
+{{ formatNum(tgDrain.warehouse.drainedStars || 0) }} Stars
{{ formatNum(tgDrain.warehouse.drainedTokens || 0) }} gói · ${{ formatUsd(tgDrain.warehouse.drainedUsd || 0) }}
Số token đang có trong kho theo gói Stars: Tổng {{ formatNum(tgDrain.warehouse.availableTokens || 0) }} token
{{ shortSkuLabel(sk.sku, sk.productName) }}: {{ formatNum(sk.availableCount || 0) }} token
Kho Token Telegram Theo Từng Shop (Super Admin · Bấm để chọn nguồn xả):
{{ sh.shopCode }} ({{ sh.shopName }}) Còn {{ formatNum(sh.availableTokens || 0) }} token
Khả dụng: +{{ formatNum(sh.availableStars || 0) }} Stars (${{ formatUsd(sh.availableUsd || 0) }}) Đã xả: {{ formatNum(sh.drainedTokens || 0) }} gói (${{ formatUsd(sh.drainedUsd || 0) }})
{{ k.starsPerToken }}★: {{ k.availableCount }}

Điều Khiển Xả Telegram Qua API & Realtime Progress Trackbar

Nạp thẳng Purchase Token trong kho vào tài khoản Telegram đã chọn qua payments.AssignPlayMarketTransaction.

Chọn nhanh Gói Stars cần xả:
{{ tgActiveJob ? tgActiveJob.status : 'READY (CHỜ LỆNH XẢ)' }} Acc nhận: {{ tgActiveJob.targetName || ('+' + tgActiveJob.phone) }} (@{{ tgActiveJob.targetUsername }}) Chọn tài khoản Telegram và nhấn "Bắt Đầu Xả Stars" để chạy realtime trackbar.
{{ tgActiveJob ? tgActiveJob.processed : 0 }} / {{ tgActiveJob ? tgActiveJob.total : 0 }} đơn {{ tgActiveJob ? tgActiveJob.percent : 0 }}%
Stars Đã Bơm Vô Acc
+{{ formatNum(tgActiveJob ? tgActiveJob.starsAdded : 0) }} Stars
${{ formatUsd(tgActiveJob ? tgActiveJob.usdAdded : 0) }}
Thành Công (SUCCESS)
{{ formatNum(tgActiveJob ? tgActiveJob.success : 0) }} đơn
Đã cộng Stars
Đã Xài / Lỗi
{{ formatNum(tgActiveJob ? tgActiveJob.alreadyUsed : 0) }} used · {{ formatNum(tgActiveJob ? tgActiveJob.failed : 0) }} lỗi
Tự động gạch kho
Số Dư Ví Telegram
Trước -> Sau xả
Tiến trình từng đơn realtime ({{ tgActiveJob.items.length }} đơn gần nhất) Job: {{ tgActiveJob.jobId }}
#{{ it.seq }} {{ it.shopCode }} {{ it.status }} +{{ formatNum(it.stars) }} Stars ({{ it.sku }})
Token: {{ it.tokenShort }} · {{ it.message }}

Bảng Phân Quyền Cấp Phép User Dùng "Xả Telegram" (Lưu Theo Shop)

Mặc định super_admin và admin_shop được cấp quyền xả. Bạn có thể cấp phép hoặc thu hồi quyền Xả Telegram cho bất kỳ admin_shop hay user nào theo từng Shop. User không có quyền sẽ bị khoá hoàn toàn khỏi tab Xả Telegram.

Cửa Hàng (Shop) Tài Khoản Vai Trò Quyền Xả Telegram Cấp / Thu Hồi Quyền
{{ u.shopCode }} · {{ u.shopName }} @{{ u.username }} ({{ u.displayName }}) {{ u.role }} {{ u.role === 'super_admin' ? 'Toàn quyền (Super Admin)' : 'Đã cấp phép Xả Telegram' }} Không có quyền (Bị chặn vào tab) Quyền mặc định

Lịch Sử Xả Telegram Đầy Đủ ({{ (tgDrain.history || []).length }} bản ghi)

Chưa có lịch sử xả Telegram nào.
{{ h.targetName || h.targetUsername || ('+' + h.phone) }} (@{{ h.targetUsername }})
{{ formatTime(h.drainedAt) }} · @{{ h.operatorUsername || 'system' }} ({{ h.shopCode || 'GLOBAL' }})
{{ h.status }}
+{{ formatNum(h.starsAmount) }} Stars · ${{ formatUsd(h.priceUsd) }}
Thiết Bị Đang Bị Tạm Khóa Anti-Scraping ({{ activeScrapeLocks.length }})
Device ID User / Shop Số Lần Nhả Đơn Còn Lại Mở Khóa
{{ lk.deviceId }} @{{ lk.username || '?' }} ({{ lk.shopCode || '?' }}) {{ lk.consecutiveReleases }} lần {{ lk.remainingSec }}s
Thời Gian Tác Nhân Hành Động Mục Tiêu Chi Tiết
Không có nhật ký nào.
{{ formatTime(l.createdAt) }} @{{ l.actorUsername }} {{ l.action }} {{ l.targetType }}:{{ shortId(l.targetId, 16) }} {{ l.detailJson }}
CHỈ SUPER ADMIN · AES-256-CBC {{ backupsData.config.autoBackupEnabled !== false ? 'Cron 6h/lần Active' : 'Cron Tự Động: TẮT' }}

Quản Lý Sao Lưu Dữ Liệu Hằng Ngày

Hệ thống tự động dump toàn bộ cơ sở dữ liệu MySQL (zwallet_c2) và kho tài khoản Auto-XA (auto_xa.db), nén và mã hóa chuẩn OpenSSL AES-256-CBC (PBKDF2) vào /var/backups/zwallet.

Bản lưu hiện có
{{ formatNum((backupsData.items || []).length) }} bản
Giữ {{ backupsData.config.retentionDays || 7 }} ngày gần nhất
Tổng dung lượng
{{ backupsData.config.totalSizeFormatted || '0 KB' }}
Đã nén & mã hóa
Bản mới nhất
{{ backupsData.config.latestBackupAt ? formatTime(backupsData.config.latestBackupAt) : 'Chưa có' }}
Tự động 00/06/12/18h
Tự động Sao Lưu (6h/lần)
{{ backupsData.config.autoBackupEnabled !== false ? 'Đang BẬT (Cron chạy mỗi 6 giờ)' : 'Đang TẮT (Chỉ sao lưu thủ công)' }}
Tự động dọn cũ > {{ backupsData.config.retentionDays || 7 }} ngày
{{ backupsData.config.autoCleanupEnabled !== false ? 'Đang BẬT (Tự xoá file > 7 ngày)' : 'Đang TẮT (Giữ toàn bộ file cũ)' }}

Trạng Thái Dữ Liệu Thực Tế Đang Sống (Live Database Snapshot)

Số lượng bản ghi thực tế trong MySQL zwallet_c2 & SQLite auto_xa.db ngay lúc này để đối chiếu với các bản sao lưu.

{{ backupsData.config.backupDir || '/var/backups/zwallet' }}
Đơn đã nạp (purchases)
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.purchases) || 0) }} dòng
Pool & Captures
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.captures) || 0) }} dòng
Kho Token (inventory)
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.inventory) || 0) }} token
Lịch sử xả Tele (drains)
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.drains) || 0) }} đơn
Tài khoản & Cửa hàng
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.users) || 0) }} Users · {{ formatNum((backupsData.liveSummary && backupsData.liveSummary.shops) || 0) }} Shops
Thiết bị APK (devices)
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.devices) || 0) }} máy
Nick TikTok & Tele
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.tiktok_accounts) || 0) }} TT · {{ formatNum((backupsData.liveSummary && backupsData.liveSummary.telegram_sessions) || 0) }} Tele
Nhật ký bảo mật (audit)
{{ formatNum((backupsData.liveSummary && backupsData.liveSummary.audit_logs) || 0) }} log
Chuẩn bảo mật: Phân quyền cứng Super Admin (RBAC + Anti-IDOR + Anti-Path-Traversal)
Lịch tự động: {{ backupsData.config.cronSchedule || '0 */6 * * *' }}

Danh Sách Bản Sao Lưu Hằng Ngày ({{ (backupsData.items || []).length }} bản ghi)

Bấm Kiểm Tra Toàn Vẹn để giải mã xác thực nội dung các bảng bên trong gói .tar.gz.enc hoặc tải về máy tính.

Thời Gian Sao Lưu Tên File Backup (.tar.gz.enc) Phân Loại Dung Lượng & SHA-256 Trạng Thái & Nội Dung Bên Trong Thao Tác (Super Admin)
{{ backupsLoading ? 'Đang tải danh sách bản sao lưu...' : 'Chưa có bản sao lưu nào trong /var/backups/zwallet.' }}
{{ bk.timeStr }} MỚI NHẤT
Ngày: {{ bk.dateKey }}
{{ bk.filename }}
{{ bk.note }}
THỦ CÔNG (@{{ bk.createdBy }}) TỰ ĐỘNG (CRON 6H)
{{ bk.sizeFormatted }}
SHA: {{ bk.sha256Short }}...
AES-256 Verified · SQL: {{ bk.sqlSizeFormatted || 'OK' }}
Nạp: {{ formatNum(bk.tableCounts.purchases || 0) }} · Pool: {{ formatNum(bk.tableCounts.captures || 0) }} · Kho: {{ formatNum(bk.tableCounts.inventory || 0) }} · Users: {{ formatNum(bk.tableCounts.users || 0) }} · TT Vault: {{ formatNum(bk.tableCounts.tiktok_accounts_vault || 0) }}
Đã mã hóa AES-256 (Bấm "Kiểm tra" để giải mã xem chi tiết)

Kho Chứa Nick TikTok (Nick Vault)

1-WAY SYNC AUTO-XA -> KHO Đang check Mail OAuth2 ({{ nickVault.summary.mailChecking }} nick)...

Hiển thị tối ưu 10 nick từ trên xuống (Ưu tiên Đã Link Auto-XA → Gần nhất trước). Chỉ tự động kiểm tra Mail/2FA 1 lần duy nhất lúc Import (thành công rồi giữ nguyên), hỗ trợ bấm Get 2FA / Đọc Mail theo từng nick, bulk nhiều nick đã chọn, hoặc Check 2FA & Đọc Mail Toàn Bộ.

Quản lý Toàn Cầu Super Admin — Xem toàn bộ nick của mọi Shop ({{ nickVaultGlobalTotalNicks }} nick trên {{ nickVaultShopList.length }} Shop): × Bỏ lọc Shop (Xem tất cả Shop)
Bộ lọc theo quy chuẩn màu sắc trạng thái (Bấm để lọc): Mail OAuth2: {{ formatNum(nickVault.summary.mailOauth2 || 0) }} · 2FA TOTP: {{ formatNum(nickVault.summary.totp2fa || 0) }}
TOP 10 ACC / TRANG Đang hiện {{ nickVault.items.length }} / {{ formatNum(nickVault.totalFiltered || 0) }} acc (Ưu tiên: Đã Link Auto-XA → Gần nhất trước)
Trang {{ nickVault.page || 1 }} / {{ nickVault.totalPages || 1 }}
Username TikTok & Pass (1-Click Copy) Mail OAuth2 / Mã 2FA 6 Số (Bấm Get Khi Cần) Cookie & Dòng Gốc Trạng Thái & Đồng Bộ 1 Chiều Auto-XA Note Auto-XA (1 Chiều) & Note Kho Thao Tác
{{ nickVaultLoading ? 'Đang tải dữ liệu Kho Chứa Nick...' : 'Chưa có nick nào khớp bộ lọc hiện tại.' }}
#{{ item.id }}
{{ item.shopCode }}
{{ item.accountFormat === '2FA_TOTP' ? '2FA TOTP' : 'MAIL OAUTH2' }}
Import: @{{ item.importedByUsername || 'admin' }} · {{ formatTime(item.createdAt) }}
Cookie OK {{ item.storeCountry ? ('· ' + item.storeCountry.toUpperCase()) : '' }}
sid: {{ shortId(item.sessionId, 14) }}
Không kèm Cookie
{{ item.visual ? item.visual.badgeText : 'Đã import' }} Đã ẩn với Chủ Shop
Auto-XA: {{ item.linkedCustomName || ('@' + item.usernameTiktok) }}
Số dư ví: {{ item.syncedDiamondCount !== null && item.syncedDiamondCount !== undefined ? (formatNum(item.syncedDiamondCount) + ' Xu') : 'Chưa check' }}
Chờ: {{ item.orderStats.pending || 0 }} Giữ: {{ item.orderStats.claimed || 0 }} Nạp: {{ item.orderStats.purchased || 0 }} (+{{ formatNum(item.orderStats.coins || 0) }} Xu)
Gói: {{ item.orderStats.skuBreakdown }}
Phát hiện trùng nick @{{ item.autoxaMatch.username }} trong Auto-XA (Status: {{ item.autoxaMatch.workflowStatus }})
* Chờ Super Admin bấm Confirm Link
Nick này từng được Link nhưng đã bị xóa trong Auto-XA (Xóa lần 1).
Bạn có thể bấm Xóa lần 2 bên phải để xóa vĩnh viễn khỏi Kho.
Note từ Auto-XA (1 chiều):
{{ item.syncedAutoxaNote }}
Ghi chú tại Kho:
{{ item.localNote || '—' }}
Giới hạn hiển thị 10 acc / trang (Ưu tiên Đã Link Auto-XA · Gần nhất trước)
Trang {{ nickVault.page || 1 }} / {{ nickVault.totalPages || 1 }}

Chi Tiết Đơn Đã Nạp

{{ selectedOrder.recipientCustomName || selectedOrder.recipientAccount || ('Đơn #' + selectedOrder.id) }} · {{ selectedOrder.orderId }}

Cửa hàng / User
{{ selectedOrder.shopCode }} · @{{ selectedOrder.username }}
Tên TK TikTok (Auto-XA)
{{ selectedOrder.recipientCustomName || selectedOrder.recipientNickname || selectedOrder.recipientAccount || 'Chưa đặt tên' }}
{{ selectedOrder.recipientAccount }}
Gói nạp
+{{ formatNum(selectedOrder.coinsAmount) }} {{ selectedOrder.platform === 'telegram' ? 'Stars' : 'Xu' }} (${{ Number(selectedOrder.priceUsd || 0).toFixed(2) }})
Tên tài khoản TikTok (Auto-XA): {{ selectedOrder.recipientCustomName || selectedOrder.recipientNickname || selectedOrder.recipientAccount || 'Chưa đặt tên trên Auto-XA' }}
Account nhận tiền: {{ selectedOrder.recipientAccount || '—' }} (UID: {{ selectedOrder.recipientUid }})
Gói SKU: {{ selectedOrder.sku }}
Mã GPA: {{ selectedOrder.orderId }}
Profile ID: {{ selectedOrder.obfuscatedProfileId || '—' }}
Account ID: {{ selectedOrder.obfuscatedAccountId || '—' }}
Device ID: {{ selectedOrder.deviceId || '—' }}
Thời gian: {{ formatTime(selectedOrder.capturedAt) }}

Đổi Mật Khẩu (@{{ currentUser.username }})

{{ userModalMode === 'create' ? (currentUser.role === 'admin_con' ? 'Tạo User Con Mới' : 'Tạo Tài Khoản Mới') : 'Chỉnh Sửa @' + userForm.username }}

Quyền mặc định: user · Trực thuộc quản lý của @{{ currentUser.username }} (Shop {{ currentUser.shopCode }})
Chọn User có sẵn trong Shop đưa vào Admin Con này ({{ (userForm.assignUserIds || []).length }} đã chọn)

Tích chọn các tài khoản user có sẵn để chuyển về dưới quyền quản lý của Admin Con này.

Chưa có tài khoản user nào trong Shop này.

Quản Lý User Nhóm @{{ manageAdminConModal.adminCon.username }}

Đang chọn: {{ manageAdminConModal.selectedUserIds.length }} User

Tích chọn các tài khoản user có sẵn trong Shop để thêm vào nhóm @{{ manageAdminConModal.adminCon.username }}, hoặc bỏ tích để gỡ khỏi nhóm (trả về Chủ Shop).

Đang chọn nhóm Admin Con:
Thao tác nhanh:
Không có tài khoản user nào khớp bộ lọc hiện tại.
Tổng thành viên sau khi lưu: {{ manageAdminConModal.selectedUserIds.length }} User

{{ shopModalMode === 'create' ? 'Tạo Cửa Hàng (Shop) Mới' : 'Cập Nhật ' + shopForm.shopCode }}

Tạo kèm tài khoản Chủ Shop (Tùy chọn)
NEW

{{ apkInfo.releaseTitle || ('Thông Báo Bản Cập Nhật APK v' + (apkInfo.versionName || '2.5.0')) }}

v{{ apkInfo.versionName || '2.5.0' }} Build #{{ apkInfo.buildNumber }}

Ứng dụng Android chính thức của hệ thống VIVIP.INFO · Tự động đồng bộ bản build mới nhất trên máy chủ

Phiên bản mới
v{{ apkInfo.versionName || '2.5.0' }}
Dung lượng
{{ apkInfo.sizeFormatted || '13.61 MB' }}
Cập nhật lúc
{{ apkInfo.updatedAt ? formatTime(apkInfo.updatedAt) : 'Mới nhất' }}
Mã toàn vẹn SHA-256
{{ apkInfo.sha256Short ? (apkInfo.sha256Short + '...') : 'Đã xác thực' }}
Bản cập nhật v{{ apkInfo.versionName || '2.5.0' }} có gì mới? (Release Notice)
{{ apkChangelogBullets.length }} nâng cấp
  • {{ idx + 1 }} {{ line }}
Lịch sử các bản Build & Cập nhật trên Server {{ apkInfo.releaseHistory.length }} bản ghi
v{{ rel.versionName || '2.5.0' }} #{{ rel.buildNumber }} HIỆN TẠI
{{ rel.sizeFormatted || '' }} · {{ rel.updatedAt ? formatTime(rel.updatedAt) : '' }}
{{ rel.releaseTitle }}
{{ rel.releaseNote }}
File: {{ apkInfo.downloadFileName || 'VIVIP.INFO-NAP.apk' }}

Quản Lý & Upload NAP APK (VIVIP.INFO)

CHỈ SUPER ADMIN

Tự động thế file cũ khi build/upload · Ghi chú bản cập nhật (Notice) hiển thị cho toàn bộ thành viên

Trạng thái gói NAP APK hiện hành
{{ apkInfo.mode === 'external_url' ? 'LINK NGOÀI (ĐÃ BẢO VỆ)' : (apkInfo.available ? 'FILE LOCAL SẴN SÀNG' : 'CHƯA CÓ FILE') }}
Phiên bản
v{{ apkInfo.versionName || '2.5.0' }} #{{ apkInfo.buildNumber }}
Dung lượng
{{ apkInfo.sizeFormatted || '0 KB' }}
SHA-256
{{ apkInfo.sha256Short ? (apkInfo.sha256Short + '...') : '—' }}
Cập nhật bởi
@{{ apkInfo.updatedBy || 'system' }}
Tên file tải về: {{ apkInfo.downloadFileName || 'VIVIP.INFO-NAP.apk' }} Cập nhật: {{ formatTime(apkInfo.updatedAt) }}
1. Upload Đè File NAP APK Mới (.apk) + Ghi Chú Bản Cập Nhật
Thế File Cũ + Phát Notice
Đang tải lên & xác thực cấu trúc APK... {{ apkUploadProgress }}%
* Tự động thế file APK cũ trên server và đẩy thông báo (Notice NEW) cho toàn bộ User.
2. Chỉnh Sửa Note Cập Nhật / Chế Độ Tải (Không cần up lại file)
ROOT

{{ adminApkInfo.releaseTitle || ('VIVIP Admin Sync APK v' + (adminApkInfo.versionName || '1.0.0')) }}

v{{ adminApkInfo.versionName || '1.0.0' }} Build #{{ adminApkInfo.buildNumber }}

Ứng dụng độc quyền SUPER_ADMIN · Đồng bộ Cookie TikTok US, Google Play SKU Tokens & Dọn Pool 1-Click

Phiên bản
v{{ adminApkInfo.versionName || '1.0.0' }}
Dung lượng
{{ adminApkInfo.sizeFormatted || '0 KB' }}
Cập nhật lúc
{{ adminApkInfo.updatedAt ? formatTime(adminApkInfo.updatedAt) : 'Mới nhất' }}
SHA-256
{{ adminApkInfo.sha256Short ? (adminApkInfo.sha256Short + '...') : 'Đã xác thực' }}
Tính năng & Nâng cấp trong bản v{{ adminApkInfo.versionName || '1.0.0' }}
SUPER_ADMIN ONLY
  • {{ idx + 1 }} {{ line }}

Quản Lý VIVIP Admin Sync APK (SuperAdmin)

Chỉ duy nhất SuperAdmin thấy và tải được ứng dụng đồng bộ này

Import Nick TikTok Vào Kho Chứa Nick

Hỗ trợ tự động nhận diện cả 2 định dạng: Mail OAuth2 + Cookie và 2FA TOTP (Mã 6 số)

Định dạng hỗ trợ (Mỗi nick 1 dòng, phân tách bằng dấu `|`):
1. Dạng Mail OAuth2 (+ Cookie):
username_tiktok|password_tiktok|email|pass_mail|oauth_refresh_token|client_id|recovery_mail|cookie_tiktok
2. Dạng 2FA TOTP (Tự động tính mã 6 số realtime):
username_tiktok|password_tiktok|2FA_SECRET_BASE32
Số dòng hợp lệ: {{ nickVaultImportLineCount }} dòng

Hộp Thư Mail OAuth2: {{ nickVaultInboxModal.item ? nickVaultInboxModal.item.email : '' }}

Nick TikTok: @{{ nickVaultInboxModal.item ? nickVaultInboxModal.item.usernameTiktok : '' }} · Trạng thái: {{ nickVaultInboxModal.result && nickVaultInboxModal.result.ok ? ('OK (' + (nickVaultInboxModal.result.strategy || 'Graph') + ' - Lần ' + (nickVaultInboxModal.result.attempts || 1) + '/3)') : 'Lỗi kết nối (3/3)' }}

Mã OTP 6 Số Mới Nhất Phát Hiện Trong Thư:
{{ nickVaultInboxModal.item.mailLastOtp }}
{{ msg.subject || '(Không tiêu đề)' }}
OTP: {{ msg.otp }}
Từ: {{ msg.from || '—' }} {{ msg.receivedAt || '' }}
{{ msg.preview || '(Không có nội dung xem trước)' }}
{{ (nickVaultInboxModal.result && nickVaultInboxModal.result.ok) ? 'Kết nối hộp thư thành công! Hiện chưa có email nào trong Inbox.' : ('Không thể đọc hộp thư: ' + ((nickVaultInboxModal.result && nickVaultInboxModal.result.error) || 'Lỗi OAuth2')) }}