feat: add bd center page

This commit is contained in:
170-carry 2026-04-29 00:04:58 +08:00
parent f146dfdcab
commit 5b640318ec
5 changed files with 2518 additions and 7 deletions

View File

@ -0,0 +1,131 @@
<!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>BD Center</title>
<link rel="stylesheet" href="./style.css?v=20260429-0100" />
</head>
<body>
<div class="bd-center" aria-label="BD Center" data-i18n-aria="page_label" data-loading="true">
<div class="hero-bg" aria-hidden="true"></div>
<header class="status-bar" aria-hidden="true">
<span class="status-time">9:41</span>
<span class="status-icons">
<span class="cellular"><i></i><i></i><i></i><i></i></span>
<span class="wifi"><i></i><i></i><i></i></span>
<span class="battery"><i></i></span>
</span>
</header>
<nav class="title-bar">
<button class="back-button" type="button" aria-label="Back" data-i18n-aria="back">
<svg viewBox="0 0 32 32" aria-hidden="true">
<path d="M20 8 12 16l8 8" />
</svg>
</button>
<h1 data-i18n="title">BD Center</h1>
<div class="language-switcher">
<button class="language-button" type="button" aria-label="Change language" data-i18n-aria="language_button_aria" aria-expanded="false">EN</button>
<div class="language-menu" hidden>
<button type="button" data-lang="en">EN</button>
<button type="button" data-lang="ar">AR</button>
<button type="button" data-lang="tr">TR</button>
<button type="button" data-lang="id">ID</button>
</div>
</div>
</nav>
<main class="content">
<section class="card profile-card">
<div class="avatar-shell">
<img class="avatar-image" id="profileAvatar" alt="" hidden />
<span class="avatar-fallback" id="profileAvatarFallback">B</span>
</div>
<div class="profile-copy">
<div class="role-pill" data-i18n="role">BD</div>
<div class="name" id="profileName">-</div>
<div class="meta" id="profileUid">UID: -</div>
</div>
</section>
<section class="card salary-card">
<div class="salary-head">
<div>
<div class="salary-label" data-i18n="my_available_salary">Salary</div>
</div>
<button class="text-link" type="button" data-route="/hyapp/withdraw-exchange/index.html?identity=BD&salaryType=BD_SALARY" data-i18n="details">Withdraw/Exchange</button>
</div>
<div class="salary-value">
<span aria-hidden="true">$</span>
<strong id="availableBalance">0.00</strong>
</div>
</section>
<section class="card menu-card">
<button class="menu-row" type="button" data-action="invite-agent">
<span class="menu-left">
<span class="menu-icon invite-icon" aria-hidden="true">
<svg viewBox="0 0 28 28"><path d="M11 13a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM4 24c1-5.5 3.5-8 7-8 2 0 3.7.8 5 2.5M21 10v10M16 15h10" /></svg>
</span>
<span data-i18n="invite_become_agent">Invite Agent</span>
</span>
<span class="chevron">&rsaquo;</span>
</button>
</section>
<section class="card team-list-card">
<div class="team-list-tabs is-single" role="tablist" aria-label="Team lists">
<button class="team-list-tab is-active" type="button" role="tab" aria-selected="true" data-list-tab="agency" data-i18n="agency_list_link">Agency List</button>
</div>
<div class="team-list-summary" id="teamListSummary"></div>
<div class="team-list-content" id="teamListContent">
<div class="empty-state" data-i18n="loading_data">Loading...</div>
</div>
</section>
</main>
<div class="invite-modal" id="inviteModal" hidden>
<div class="invite-backdrop" data-close-invite></div>
<section class="invite-dialog" role="dialog" aria-modal="true" aria-labelledby="inviteModalTitle">
<div class="invite-head">
<h2 id="inviteModalTitle">Invite Agent</h2>
<button class="invite-close" type="button" aria-label="Close" data-i18n-aria="close" data-close-invite>&times;</button>
</div>
<div class="invite-body">
<form class="invite-search-form" id="inviteSearchForm" autocomplete="off">
<label class="invite-field">
<span data-i18n="enter_user_id">Enter User ID</span>
<div class="invite-search-control">
<input id="inviteSearchInput" type="text" inputmode="text" data-i18n-placeholder="enter_user_id" placeholder="Enter User ID" />
<button id="inviteSearchButton" type="submit" data-i18n="search">Search</button>
</div>
</label>
</form>
<div class="invite-status" id="inviteStatus" role="status" hidden></div>
<div class="invite-list" id="inviteList"></div>
<div class="invite-empty" id="inviteEmpty" data-i18n="no_users_found">No users found</div>
</div>
</section>
</div>
<div class="home-indicator" aria-hidden="true"></div>
<div class="loading-mask" id="loadingMask" role="status" aria-live="polite" aria-busy="true">
<div class="runner-stick" aria-hidden="true">
<span class="runner-head"></span>
<span class="runner-body"></span>
<span class="runner-arm runner-arm-front"></span>
<span class="runner-arm runner-arm-back"></span>
<span class="runner-leg runner-leg-front"></span>
<span class="runner-leg runner-leg-back"></span>
<span class="runner-ground"></span>
</div>
<div class="loading-copy">loading....</div>
</div>
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
</div>
<script src="./script.js?v=20260429-0100" defer></script>
</body>
</html>

1114
h5/hyapp/bd-center/script.js Normal file

File diff suppressed because it is too large Load Diff

1269
h5/hyapp/bd-center/style.css Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
<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>BD Leader Center</title>
<link rel="stylesheet" href="./style.css?v=20260429-0010" />
<link rel="stylesheet" href="./style.css?v=20260429-0100" />
</head>
<body>
<div class="bd-leader-center" aria-label="BD Leader Center" data-i18n-aria="page_label" data-loading="true">
@ -54,7 +54,6 @@
<div class="salary-head">
<div>
<div class="salary-label" data-i18n="my_available_salary">Salary</div>
<div class="salary-period" id="billTitle">-</div>
</div>
<button class="text-link" type="button" data-route="/hyapp/withdraw-exchange/index.html?identity=BD_LEADER&salaryType=BD_LEADER_SALARY" data-i18n="details">Withdraw/Exchange</button>
</div>
@ -97,7 +96,7 @@
<section class="card team-list-card">
<div class="team-list-tabs" role="tablist" aria-label="Team lists">
<button class="team-list-tab is-active" type="button" role="tab" aria-selected="true" data-list-tab="bd" data-i18n="bd_list_link">BD List</button>
<button class="team-list-tab" type="button" role="tab" aria-selected="false" data-list-tab="agency" data-i18n="agency_list_link">Agency list</button>
<button class="team-list-tab" type="button" role="tab" aria-selected="false" data-list-tab="agency" data-i18n="agency_list_link">Agency List</button>
</div>
<div class="team-list-summary" id="teamListSummary"></div>
<div class="team-list-content" id="teamListContent">
@ -179,6 +178,6 @@
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
</div>
<script src="./script.js?v=20260429-0020" defer></script>
<script src="./script.js?v=20260429-0100" defer></script>
</body>
</html>

View File

@ -22,7 +22,7 @@
bd_number: "BD number",
team_salary: "Team salary",
bd_leader_history: "Salary History",
agency_list_link: "Agency list",
agency_list_link: "Agency List",
bd_list_link: "BD List",
invite_become_agent: "Invite Agent",
invite_become_bd: "Invite BD",
@ -465,10 +465,8 @@
function renderBill() {
const bill = state.bill || {};
const members = Array.isArray(bill.memberBillList) ? bill.memberBillList : [];
const billTitle = document.querySelector("#billTitle");
const bdNumber = document.querySelector("#bdNumber");
const teamSalary = document.querySelector("#teamSalary");
if (billTitle) billTitle.textContent = bill.billTitle || "-";
if (bdNumber) bdNumber.textContent = formatCount(bill.memberCount ?? bill.bdNumber ?? members.length);
if (teamSalary) teamSalary.textContent = formatMoney(bill.totalSalary ?? bill.teamSalary ?? 0);
renderMembers(members);