529 lines
23 KiB
HTML
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=20260624-manager-badge-country"></script>
|
|
</body>
|
|
</html>
|