feat: manage owner usage history records

This commit is contained in:
Wyndham ARR
2026-08-03 16:43:27 +08:00
parent 393b841023
commit 84443d5dba
17 changed files with 798 additions and 102 deletions

View File

@@ -6,7 +6,7 @@
<meta name="description" content="Condo owner annual stay privilege management prototype" />
<title>Condo</title>
<link rel="icon" href="favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="styles.css?v=20260802-history" />
<link rel="stylesheet" href="styles.css?v=20260803-accounts-fill-1" />
</head>
<body>
<section class="login-screen" id="loginScreen" aria-labelledby="loginTitle" data-auth-state="checking">
@@ -106,6 +106,14 @@
</button>
</nav>
<div class="sidebar-session">
<button class="session-logout sidebar-logout" id="logoutButton" type="button" aria-label="Sign out" data-i18n-aria-label="signOut">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M10 5H5v14h5M14 8l4 4-4 4M18 12H9"/></svg>
<span data-i18n="signOut">Sign out</span>
</button>
<span class="session-error" id="sessionError" role="alert" hidden></span>
</div>
</aside>
<div class="language-dock">
@@ -130,21 +138,6 @@
<button class="icon-button mobile-menu" id="menuButton" type="button" aria-label="Open navigation" aria-controls="sidebar" aria-expanded="false" data-i18n-aria-label="openNavigation">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7h16M4 12h16M4 17h16" /></svg>
</button>
<div class="period-display" role="status" aria-label="Current period 2026" data-i18n-aria-label="currentPeriodAria">
<span data-i18n="currentPeriod">Current period</span>
<strong>2026</strong>
</div>
<div class="session-area">
<div class="session-identity">
<span data-i18n="signedInAs">Signed in as</span>
<strong id="sessionUsername"></strong>
</div>
<button class="session-logout" id="logoutButton" type="button" aria-label="Sign out" data-i18n-aria-label="signOut">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M10 5H5v14h5M14 8l4 4-4 4M18 12H9"/></svg>
<span data-i18n="signOut">Sign out</span>
</button>
<span class="session-error" id="sessionError" role="alert" hidden></span>
</div>
</header>
<main class="content">
@@ -158,14 +151,11 @@
</section>
<section class="page active" id="page-dashboard" data-page-content="dashboard">
<div class="page-heading dashboard-heading">
<div>
<div class="metric-grid dashboard-overview-grid">
<article class="dashboard-title-card">
<span class="eyebrow" data-i18n="dashboardDate">WEDNESDAY, JULY 29</span>
<h1>Condon</h1>
</div>
</div>
<div class="metric-grid">
</article>
<article class="metric-card">
<div class="metric-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 20V8.5L12 4l8 4.5V20M8 20v-7h8v7M3 20h18"/></svg></div>
<span data-i18n="ownerRooms">Owner rooms</span>
@@ -244,12 +234,16 @@
<select id="roomTypeFilter" aria-label="Filter by purchased room type" data-i18n-aria-label="purchasedTypeFilterAria"><option value="" data-i18n="allRoomTypes">All room types</option><option>RM2</option><option>RM3</option><option>AC2</option></select>
<span class="toolbar-count" id="ownerCount">190 accounts shown</span>
</div>
<div class="table-wrap">
<div class="table-wrap" id="ownerTableWrap">
<table class="owner-table">
<thead><tr><th data-i18n="no">No</th><th data-i18n="transferDate">Transfer Date</th><th data-i18n="name">Name</th><th data-i18n="roomNo">Room No.</th><th data-i18n="roomType">Room Type</th><th data-i18n="unitNo">Unit No.</th><th data-i18n="memberNo">Member No.</th><th class="align-right" data-i18n="remainingStayPrivileges">Remaining stay privileges</th><th></th></tr></thead>
<thead><tr><th data-i18n="no">No</th><th data-i18n="name">Name</th><th data-i18n="roomNo">Room No.</th><th data-i18n="roomType">Room Type</th><th data-i18n="unitNo">Unit No.</th><th data-i18n="memberNo">Member No.</th><th data-i18n="transferDate">Transfer Date</th><th class="align-right" data-i18n="remainingStayPrivileges">Remaining stay privileges</th><th></th></tr></thead>
<tbody id="ownerTableBody"></tbody>
</table>
</div>
<nav class="table-pagination" id="ownerPagination" aria-label="Owner account pages" data-i18n-aria-label="ownerPaginationAria" hidden>
<span class="pagination-status" id="ownerPageStatus" role="status" aria-live="polite"></span>
<div class="pagination-pages" id="ownerPageNumbers" role="group" aria-label="Page numbers" data-i18n-aria-label="pageNumbersAria"></div>
</nav>
</article>
</section>
<section class="owner-workspace-view" id="ownerUsagePanel" role="tabpanel" aria-labelledby="usageTab" data-owner-view-panel="usage" hidden>
@@ -261,7 +255,7 @@
</div>
<div class="table-wrap">
<table class="usage-table">
<thead><tr><th data-i18n="confirmationNo">Confirmation No.</th><th data-i18n="ownerRoom">Owner / room</th><th data-i18n="checkIn">Check-in</th><th data-i18n="checkOut">Check-out</th><th data-i18n="night">Night</th><th data-i18n="use">Use</th><th data-i18n="balance">Balance</th><th data-i18n="usedRoomType">Used Room Type</th><th data-i18n="remark">Remark</th><th></th></tr></thead>
<thead><tr><th data-i18n="confirmationNo">Confirmation No.</th><th data-i18n="ownerRoom">Owner / room</th><th data-i18n="checkIn">Check-in</th><th data-i18n="checkOut">Check-out</th><th data-i18n="night">Night</th><th data-i18n="use">Use</th><th data-i18n="balance">Balance</th><th data-i18n="usedRoomType">Used Room Type</th><th data-i18n="remark">Remark</th><th><span class="sr-only" data-i18n="actions">Actions</span></th></tr></thead>
<tbody id="stayTableBody"></tbody>
</table>
</div>
@@ -276,6 +270,19 @@
<div class="mobile-scrim" id="mobileScrim" hidden></div>
<div class="drawer-scrim" id="drawerScrim" hidden></div>
<div class="confirm-scrim" id="confirmScrim" hidden></div>
<section class="confirm-dialog" id="confirmDialog" role="alertdialog" aria-modal="true" aria-labelledby="confirmDialogTitle" aria-describedby="confirmDialogMessage" aria-hidden="true" hidden>
<div class="confirm-dialog-header">
<div class="confirm-dialog-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M5 7h14M9 7V4h6v3M8 7l1 13h6l1-13M10 11v6M14 11v6"/></svg></div>
<div><span class="eyebrow" data-i18n="confirmAction">CONFIRM ACTION</span><h2 id="confirmDialogTitle" data-i18n="deleteUsageTitle">Delete usage record</h2></div>
</div>
<p class="confirm-dialog-message" id="confirmDialogMessage"></p>
<div class="confirm-dialog-summary"><span data-i18n="confirmationNo">Confirmation No.</span><strong id="confirmDialogRecord"></strong></div>
<div class="confirm-dialog-footer">
<button class="secondary-button" id="cancelConfirmDialog" type="button" data-i18n="cancel">Cancel</button>
<button class="primary-button confirm-danger-button" id="confirmDialogAction" type="button" data-i18n="delete">Delete</button>
</div>
</section>
<aside class="drawer wide-drawer stay-drawer" id="stayDrawer" role="dialog" aria-modal="true" aria-labelledby="drawerTitle" aria-hidden="true">
<div class="drawer-header">
<div><span class="eyebrow" data-i18n="newUsage">NEW USAGE</span><h2 id="drawerTitle">Add usage record</h2><p id="drawerSubtitle">Review the deduction before saving.</p></div>
@@ -326,6 +333,6 @@
<script src="runtime-config.js?v=20260802-login"></script>
<script src="owners-data.js"></script>
<script src="api-client.js?v=20260802-login"></script>
<script src="app.js?v=20260802-history"></script>
<script src="app.js?v=20260803-accounts-fill-1"></script>
</body>
</html>