feat: Subscriber portal web — login, dashboard, invoices, tickets (FIBEROPS-243-246)

- New route group app/(portal)/ separate from admin app
- Minimal portal layout with FiberOps branding, no admin nav
- portal-auth-store.ts: Zustand store with portal_token in localStorage
- portal-api.ts: Axios instance using portal_token + X-Tenant-Slug
- Login page: tenant slug + account number + password form
- Dashboard: account info, subscription details, balance due, quick links
- Invoices page: table with status badges (PAID/PARTIAL/OVERDUE/SENT)
- Tickets page: ticket list + New Ticket modal (POST /portal/tickets)
- Client detail profile tab: Portal Access Enabled/Disabled field
- portalAccessEnabled added to Client type
This commit is contained in:
2026-04-01 00:36:10 +00:00
parent 45325b3e1b
commit eaa03c69e0
9 changed files with 759 additions and 0 deletions

View File

@@ -547,6 +547,15 @@ export default function ClientDetailPage() {
<dd className="mt-0.5 text-sm text-gray-900">{value}</dd>
</div>
))}
<div>
<dt className="text-xs font-medium text-gray-400 uppercase tracking-wide">Portal Access</dt>
<dd className="mt-0.5 text-sm">
{client.portalAccessEnabled
? <span className="text-green-600 font-medium">Enabled</span>
: <span className="text-gray-400">Disabled</span>
}
</dd>
</div>
</dl>
</CardContent>
</Card>