2026-07-05 01:55:38 +08:00

529 lines
23 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"
/>
<title>Control Panel</title>
<link rel="stylesheet" href="../../common/theme.css?v=20260608" />
<link rel="stylesheet" href="../common/center.css?v=20260608" />
<link
rel="stylesheet"
href="./style.css?v=20260618-manager-permissions"
/>
</head>
<body>
<div class="manager-center" aria-label="Control Panel">
<div class="hero-bg" aria-hidden="true"></div>
<nav class="title-bar">
<button
class="back-button"
id="backButton"
type="button"
aria-label="Back"
data-i18n-aria="manager_center.back"
>
<svg viewBox="0 0 32 32" aria-hidden="true">
<path d="M20 8 12 16l8 8" />
</svg>
</button>
<h1 data-i18n="manager_center.title">Control Panel</h1>
<div class="language-switcher">
<button
class="language-button"
type="button"
aria-label="Change language"
aria-expanded="false"
data-language-toggle
data-current-lang
data-i18n-aria="manager_center.change_language"
>
EN
</button>
<div class="language-menu" data-language-menu hidden>
<button type="button" data-lang-option="en">EN</button>
<button type="button" data-lang-option="ar">AR</button>
<button type="button" data-lang-option="tr">TR</button>
<button type="button" data-lang-option="es">ES</button>
<button type="button" data-lang-option="zh">ZH</button>
<button type="button" data-lang-option="id">ID</button>
</div>
</div>
</nav>
<main class="content">
<section class="card manager-panel">
<div class="manager-grid" aria-label="Manager tools">
<button
class="manager-tile"
type="button"
data-action="send-frame"
>
<span
class="tile-icon frame-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path d="M10 10h28v28H10Z" />
<path d="M16 16h16v16H16Z" />
<path
d="M10 18h6M32 18h6M10 30h6M32 30h6"
/>
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.send_frame"
>Send Frame</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="send-car"
>
<span class="tile-icon car-icon" aria-hidden="true">
<svg viewBox="0 0 48 48">
<path d="M9 28h30l-4-10H13Z" />
<path d="M13 28v7M35 28v7" />
<path
d="M15 35a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"
/>
<path
d="M33 35a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"
/>
<path d="M18 18h12" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.send_car"
>Send Car</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="send-badge"
>
<span
class="tile-icon badge-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 7 37 13v10c0 9-5.2 15-13 18-7.8-3-13-9-13-18V13Z"
/>
<path
d="m24 16 2.5 5.1 5.6.8-4.1 4 .9 5.7-4.9-2.7-4.9 2.7.9-5.7-4.1-4 5.6-.8Z"
/>
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.send_badge"
>Send Badge</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="send-vip"
>
<span class="tile-icon vip-icon" aria-hidden="true">
<svg viewBox="0 0 48 48">
<path
d="m9 18 8 8 7-14 7 14 8-8-4 20H13Z"
/>
<path d="M13 38h22" />
<path d="M20 29h8" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.send_vip"
>Send VIP</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="update-user-level"
>
<span
class="tile-icon level-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 7a10 10 0 1 0 0 20 10 10 0 0 0 0-20Z"
/>
<path
d="M8 42c2.4-8 8.2-12 16-12s13.6 4 16 12"
/>
<path d="M35 10v7M31.5 13.5h7" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.update_user_level"
>Update User Level</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="add-bd-leader"
>
<span
class="tile-icon bd-leader-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 7a9 9 0 1 0 0 18 9 9 0 0 0 0-18Z"
/>
<path
d="M9 42c2.3-8 7.4-12 15-12s12.7 4 15 12"
/>
<path d="M36 8v10M31 13h10" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.add_bd_leader"
>Add BD Leader</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="add-admin"
>
<span
class="tile-icon admin-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 7a9 9 0 1 0 0 18 9 9 0 0 0 0-18Z"
/>
<path
d="M9 42c2.3-8 7.4-12 15-12s12.7 4 15 12"
/>
<path
d="m35 9 2.2 4.4 4.8.7-3.5 3.4.8 4.8-4.3-2.3-4.3 2.3.8-4.8-3.5-3.4 4.8-.7Z"
/>
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.add_admin"
>Add Admin</span
>
</button>
<button
class="manager-tile"
type="button"
data-action="add-superadmin"
>
<span
class="tile-icon superadmin-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 7a9 9 0 1 0 0 18 9 9 0 0 0 0-18Z"
/>
<path
d="M9 42c2.3-8 7.4-12 15-12s12.7 4 15 12"
/>
<path
d="m34 8 2.5 5 5.5.8-4 3.9.9 5.5-4.9-2.6-4.9 2.6.9-5.5-4-3.9 5.5-.8Z"
/>
<path d="M34 12v8M30 16h8" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.add_superadmin"
>Add Superadmin</span
>
</button>
<button
class="manager-tile manager-tile-wide"
type="button"
data-action="transfer-user-country"
>
<span
class="tile-icon country-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M24 42c8-8 13-15 13-23A13 13 0 1 0 11 19c0 8 5 15 13 23Z"
/>
<path d="M18 19h12" />
<path d="M24 13v12" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.transfer_user_country"
>Transfer User Country</span
>
</button>
<button
class="manager-tile manager-tile-wide"
type="button"
data-action="block-user"
>
<span
class="tile-icon block-icon"
aria-hidden="true"
>
<svg viewBox="0 0 48 48">
<path
d="M18 22a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z"
/>
<path
d="M5 42c1.8-9.2 6.2-13.8 13-13.8 4.3 0 7.6 1.8 10 5.3"
/>
<path
d="M35 23a9 9 0 1 0 0 18 9 9 0 0 0 0-18Z"
/>
<path d="m29 29 12 12" />
</svg>
</span>
<span
class="tile-title"
data-i18n="manager_center.block_user"
>Block User</span
>
</button>
</div>
</section>
</main>
<div
class="block-modal level-modal"
id="levelModal"
aria-hidden="true"
hidden
>
<button
class="block-backdrop"
id="levelBackdrop"
type="button"
aria-label="Close update level dialog"
></button>
<section
class="block-dialog"
role="dialog"
aria-modal="true"
aria-labelledby="levelDialogTitle"
>
<div class="block-dialog-header">
<h2 id="levelDialogTitle">Update User Level</h2>
<button
class="block-close"
id="levelCloseButton"
type="button"
aria-label="Close"
>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M6 6l12 12M18 6 6 18" />
</svg>
</button>
</div>
<div class="block-dialog-body">
<div class="block-field">
<label for="levelSearchInput">User ID</label>
<div class="block-search-row">
<input
id="levelSearchInput"
type="text"
inputmode="numeric"
autocomplete="off"
placeholder="Enter user ID"
/>
<button id="levelSearchButton" type="button">
Search
</button>
</div>
</div>
<div
class="block-search-result"
id="levelSearchResult"
aria-live="polite"
></div>
<div class="level-panel" id="levelPanel" hidden>
<div class="block-section-title">
Select user level
</div>
<div
class="level-grid"
id="levelGrid"
aria-label="Select user level"
></div>
<button
class="confirm-level-button"
id="confirmLevelButton"
type="button"
disabled
>
Confirm Update
</button>
</div>
</div>
</section>
</div>
<div class="block-modal" id="blockModal" aria-hidden="true" hidden>
<button
class="block-backdrop"
id="blockBackdrop"
type="button"
aria-label="Close block user dialog"
></button>
<section
class="block-dialog"
role="dialog"
aria-modal="true"
aria-labelledby="blockDialogTitle"
>
<div class="block-dialog-header">
<h2 id="blockDialogTitle">Block User</h2>
<button
class="block-close"
id="blockCloseButton"
type="button"
aria-label="Close"
>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M6 6l12 12M18 6 6 18" />
</svg>
</button>
</div>
<div class="block-dialog-body">
<div class="block-field">
<label for="blockSearchInput">User ID</label>
<div class="block-search-row">
<input
id="blockSearchInput"
type="text"
inputmode="numeric"
autocomplete="off"
placeholder="Enter user ID"
/>
<button id="blockSearchButton" type="button">
Search
</button>
</div>
</div>
<div
class="block-search-result"
id="blockSearchResult"
aria-live="polite"
></div>
<div
class="block-duration-panel"
id="blockDurationPanel"
hidden
>
<div class="block-section-title">
Select block duration
</div>
<div class="duration-grid" id="durationGrid">
<button
type="button"
data-duration-ms="3600000"
data-duration-label="1 hour"
>
1 hour
</button>
<button
type="button"
data-duration-ms="86400000"
data-duration-label="1 day"
>
1 day
</button>
<button
type="button"
data-duration-ms="604800000"
data-duration-label="7 days"
>
7 days
</button>
<button
type="button"
data-duration-ms="2592000000"
data-duration-label="30 days"
>
30 days
</button>
<button
type="button"
data-duration-ms="0"
data-duration-label="Permanent"
>
Permanent
</button>
</div>
<button
class="confirm-block-button"
id="confirmBlockButton"
type="button"
disabled
>
Confirm Block
</button>
</div>
<div class="block-list-header">
<div class="block-section-title">Blocked Users</div>
<div class="block-list-count" id="blockListCount">
0
</div>
</div>
<div
class="blocked-list"
id="blockedList"
aria-live="polite"
></div>
</div>
</section>
</div>
<div class="home-indicator" aria-hidden="true"></div>
</div>
<script src="../../common/toast.js"></script>
<script src="../../common/api.js?v=20260624-manager-badge-country"></script>
<script src="../../common/params.js?v=20260608-manager-real"></script>
<script src="../../common/jsbridge.js"></script>
<script src="../../common/i18n.js?v=20260608"></script>
<script src="./script.js?v=20260705-manager-vip-permission"></script>
</body>
</html>