feat: add complete company management UI

- Create companies list page with stats (total, verified, active, vendor count)
- Add company creation form with owner account generation
- Implement companies.js with full CRUD operations (list, create, edit, delete)
- Add Companies menu item to admin sidebar (desktop + mobile)
- Create company admin page routes (/admin/companies, /admin/companies/create)
- Register companies API router in admin __init__.py

Features:
- List all companies with pagination
- Create company with automatic owner user creation
- Display temporary password for new owner accounts
- Edit company information
- Delete company (only if no vendors)
- Toggle active/verified status
- Show vendor count per company

UI Components:
- Stats cards (total companies, verified, active, total vendors)
- Company table with status badges
- Create form with validation
- Success/error messaging
- Responsive design with dark mode support
This commit is contained in:
2025-12-01 21:50:20 +01:00
parent 4ca738dc7f
commit 801510ecc6
6 changed files with 1045 additions and 13 deletions

View File

@@ -17,6 +17,7 @@ Routes:
- GET /vendors/{vendor_code} → Vendor details (auth required)
- GET /vendors/{vendor_code}/edit → Edit vendor form (auth required)
- GET /vendors/{vendor_code}/domains → Vendor domains management (auth required)
- GET /vendor-themes → Vendor themes selection page (auth required)
- GET /vendors/{vendor_code}/theme → Vendor theme editor (auth required)
- GET /users → User management page (auth required)
- GET /imports → Import history page (auth required)
@@ -109,6 +110,48 @@ async def admin_dashboard_page(
)
# ============================================================================
# COMPANY MANAGEMENT ROUTES
# ============================================================================
@router.get("/companies", response_class=HTMLResponse, include_in_schema=False)
async def admin_companies_list_page(
request: Request,
current_user: User = Depends(get_current_admin_from_cookie_or_header),
db: Session = Depends(get_db),
):
"""
Render companies management page.
Shows list of all companies with stats.
"""
return templates.TemplateResponse(
"admin/companies.html",
{
"request": request,
"user": current_user,
},
)
@router.get("/companies/create", response_class=HTMLResponse, include_in_schema=False)
async def admin_company_create_page(
request: Request,
current_user: User = Depends(get_current_admin_from_cookie_or_header),
db: Session = Depends(get_db),
):
"""
Render company creation form.
"""
return templates.TemplateResponse(
"admin/company-create.html",
{
"request": request,
"user": current_user,
},
)
# ============================================================================
# VENDOR MANAGEMENT ROUTES
# ============================================================================
@@ -231,6 +274,25 @@ async def admin_vendor_domains_page(
# ============================================================================
@router.get("/vendor-themes", response_class=HTMLResponse, include_in_schema=False)
async def admin_vendor_themes_page(
request: Request,
current_user: User = Depends(get_current_admin_from_cookie_or_header),
db: Session = Depends(get_db),
):
"""
Render vendor themes selection page.
Allows admins to select a vendor to customize their theme.
"""
return templates.TemplateResponse(
"admin/vendor-themes.html",
{
"request": request,
"user": current_user,
},
)
@router.get(
"/vendors/{vendor_code}/theme", response_class=HTMLResponse, include_in_schema=False
)
@@ -302,6 +364,25 @@ async def admin_imports_page(
)
@router.get("/marketplace", response_class=HTMLResponse, include_in_schema=False)
async def admin_marketplace_page(
request: Request,
current_user: User = Depends(get_current_admin_from_cookie_or_header),
db: Session = Depends(get_db),
):
"""
Render marketplace import management page.
Allows admins to import products for any vendor and monitor all imports.
"""
return templates.TemplateResponse(
"admin/marketplace.html",
{
"request": request,
"user": current_user,
},
)
# ============================================================================
# SETTINGS ROUTES
# ============================================================================
@@ -326,6 +407,25 @@ async def admin_settings_page(
)
@router.get("/logs", response_class=HTMLResponse, include_in_schema=False)
async def admin_logs_page(
request: Request,
current_user: User = Depends(get_current_admin_from_cookie_or_header),
db: Session = Depends(get_db),
):
"""
Render admin logs viewer page.
View database and file logs with filtering and search.
"""
return templates.TemplateResponse(
"admin/logs.html",
{
"request": request,
"user": current_user,
},
)
# ============================================================================
# CONTENT MANAGEMENT SYSTEM (CMS) ROUTES
# ============================================================================