593 lines
32 KiB
HTML
593 lines
32 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<meta name="theme-color" content="#f3efe6" />
|
||
<title>Check List PoC — Admin</title>
|
||
<link rel="manifest" href="/manifest.webmanifest" />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" />
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
|
||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||
<link rel="stylesheet" href="/styles.css" />
|
||
</head>
|
||
<body>
|
||
<div class="d-flex vh-100">
|
||
<!-- Sidebar -->
|
||
<aside class="sidebar-bs d-flex flex-column border-end bg-light" style="width:260px;min-width:260px;">
|
||
<div class="p-3 border-bottom">
|
||
<p class="text-uppercase text-muted small fw-semibold mb-0">Hybrid Inspection Reporting</p>
|
||
<h5 class="fw-bold mb-0">Check List</h5>
|
||
<small class="text-muted">Administration console</small>
|
||
</div>
|
||
|
||
<div class="p-3 border-bottom">
|
||
<span id="connectionBadge" class="badge bg-secondary">Checking…</span>
|
||
</div>
|
||
|
||
<!-- Navigation -->
|
||
<nav id="adminNav" class="flex-grow-1 overflow-auto p-2">
|
||
<!-- Settings -->
|
||
<div class="admin-nav-cat is-open mb-1">
|
||
<button class="admin-nav-cat-btn btn btn-sm btn-light w-100 text-start d-flex justify-content-between align-items-center" type="button">
|
||
<span><i class="bi bi-gear me-1"></i>Settings</span><span class="nav-arrow">▾</span>
|
||
</button>
|
||
<div class="admin-nav-sub ms-3 mt-1">
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100 is-active" type="button" data-panel="settings-policies">Image Policy</button>
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="settings-template">Template</button>
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="settings-task">Task</button>
|
||
</div>
|
||
</div>
|
||
<!-- Users -->
|
||
<div class="admin-nav-cat mb-1">
|
||
<button class="admin-nav-cat-btn btn btn-sm btn-light w-100 text-start d-flex justify-content-between align-items-center" type="button">
|
||
<span><i class="bi bi-people me-1"></i>Users</span><span class="nav-arrow">▸</span>
|
||
</button>
|
||
<div class="admin-nav-sub ms-3 mt-1">
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="users">Users</button>
|
||
</div>
|
||
</div>
|
||
<!-- Sites -->
|
||
<div class="admin-nav-cat mb-1">
|
||
<button class="admin-nav-cat-btn btn btn-sm btn-light w-100 text-start d-flex justify-content-between align-items-center" type="button">
|
||
<span><i class="bi bi-building me-1"></i>Sites</span><span class="nav-arrow">▸</span>
|
||
</button>
|
||
<div class="admin-nav-sub ms-3 mt-1">
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="sites">Sites</button>
|
||
</div>
|
||
</div>
|
||
<!-- Check Lists -->
|
||
<div class="admin-nav-cat mb-1">
|
||
<button class="admin-nav-cat-btn btn btn-sm btn-light w-100 text-start d-flex justify-content-between align-items-center" type="button">
|
||
<span><i class="bi bi-list-check me-1"></i>Check Lists</span><span class="nav-arrow">▸</span>
|
||
</button>
|
||
<div class="admin-nav-sub ms-3 mt-1">
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="cl-templates">Templates</button>
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="cl-records">Records</button>
|
||
</div>
|
||
</div>
|
||
<!-- Reports -->
|
||
<div class="admin-nav-cat mb-1">
|
||
<button class="admin-nav-cat-btn btn btn-sm btn-light w-100 text-start d-flex justify-content-between align-items-center" type="button">
|
||
<span><i class="bi bi-file-earmark-text me-1"></i>Reports</span><span class="nav-arrow">▸</span>
|
||
</button>
|
||
<div class="admin-nav-sub ms-3 mt-1">
|
||
<button class="admin-nav-item btn btn-sm btn-link text-start w-100" type="button" data-panel="reports">Tasks</button>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="p-3 border-top">
|
||
<a class="btn btn-outline-secondary btn-sm w-100 mb-1" href="/user">User area</a>
|
||
<a class="btn btn-secondary btn-sm w-100 mb-1" href="/admin">Admin area</a>
|
||
<a class="btn btn-outline-secondary btn-sm w-100" href="/">Back to portal</a>
|
||
</div>
|
||
</aside>
|
||
|
||
<!-- Main content area -->
|
||
<main class="flex-grow-1 overflow-auto p-4 bg-white">
|
||
|
||
<!-- SETTINGS > IMAGE POLICY -->
|
||
<section id="panel-settings-policies" class="admin-panel admin-panel-active">
|
||
<div class="d-flex justify-content-between align-items-start mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Settings › Image Policy</p>
|
||
<h3 class="fw-bold">Image Policy Editor</h3>
|
||
<p class="text-muted">Update centrally managed image requirements.</p>
|
||
</div>
|
||
<span id="adminSyncState" class="badge bg-secondary">Server-backed</span>
|
||
</div>
|
||
|
||
<div class="row">
|
||
<div class="col-lg-8">
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<form id="adminImageRulesForm">
|
||
<div class="mb-3">
|
||
<label class="form-label fw-semibold">Allowed MIME types</label>
|
||
<div id="adminMimeCheckboxes" class="row g-2">
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/jpeg" id="mime-jpeg"><label class="form-check-label" for="mime-jpeg">image/jpeg</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/png" id="mime-png"><label class="form-check-label" for="mime-png">image/png</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/webp" id="mime-webp"><label class="form-check-label" for="mime-webp">image/webp</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/gif" id="mime-gif"><label class="form-check-label" for="mime-gif">image/gif</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/bmp" id="mime-bmp"><label class="form-check-label" for="mime-bmp">image/bmp</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/tiff" id="mime-tiff"><label class="form-check-label" for="mime-tiff">image/tiff</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/svg+xml" id="mime-svg"><label class="form-check-label" for="mime-svg">image/svg+xml</label></div></div>
|
||
<div class="col-6 col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="mimeType" value="image/heic" id="mime-heic"><label class="form-check-label" for="mime-heic">image/heic</label></div></div>
|
||
</div>
|
||
</div>
|
||
<div class="row g-3 mb-3">
|
||
<div class="col-md-4">
|
||
<label for="adminMaxFileSizeKb" class="form-label">Max file size (KB)</label>
|
||
<input id="adminMaxFileSizeKb" class="form-control" type="number" min="1" step="1" />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="adminMaxWidthPx" class="form-label">Max width (px)</label>
|
||
<input id="adminMaxWidthPx" class="form-control" type="number" min="1" step="1" />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="adminMaxHeightPx" class="form-label">Max height (px)</label>
|
||
<input id="adminMaxHeightPx" class="form-control" type="number" min="1" step="1" />
|
||
</div>
|
||
</div>
|
||
<div class="row g-3 mb-3">
|
||
<div class="col-md-6">
|
||
<label for="adminImageQuality" class="form-label">Image quality (%)</label>
|
||
<input id="adminImageQuality" class="form-control" type="number" min="1" max="100" step="1" />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="adminOversizeBehavior" class="form-label">Oversize behavior</label>
|
||
<select id="adminOversizeBehavior" class="form-select">
|
||
<option value="auto_optimize">Auto optimize</option>
|
||
<option value="warn_then_optimize">Warn then optimize</option>
|
||
<option value="block">Block oversized files</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex gap-2">
|
||
<button id="saveImageRulesButton" class="btn btn-primary" type="submit">Save image policy</button>
|
||
<button id="resetImageRulesButton" class="btn btn-outline-secondary" type="button">Reset form</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-lg-4">
|
||
<div class="card">
|
||
<div class="card-header fw-semibold">Live Preview</div>
|
||
<div class="card-body">
|
||
<dl class="mb-0">
|
||
<dt class="small text-muted">Allowed types</dt>
|
||
<dd id="adminPolicyMimeTypes" class="mb-2">-</dd>
|
||
<dt class="small text-muted">Max file size</dt>
|
||
<dd id="adminPolicyFileSize" class="mb-2">-</dd>
|
||
<dt class="small text-muted">Optimization</dt>
|
||
<dd id="adminPolicyOptimization" class="mb-2">-</dd>
|
||
<dt class="small text-muted">Limits</dt>
|
||
<dd id="adminPolicyLimits" class="mb-0">-</dd>
|
||
</dl>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- SETTINGS > TEMPLATE -->
|
||
<section id="panel-settings-template" class="admin-panel">
|
||
<div class="mb-3">
|
||
<p class="text-muted small mb-0">Settings › Template</p>
|
||
<h3 class="fw-bold">Record Dropdown Configuration</h3>
|
||
<p class="text-muted">Define dropdown values for checklist record forms.</p>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<!-- Categories -->
|
||
<h6 class="fw-semibold">Categories</h6>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<input id="tsCatInput" class="form-control" type="text" placeholder="Add category…" />
|
||
<button type="button" class="btn btn-outline-primary" data-ts-action="add-cat">Add</button>
|
||
</div>
|
||
<div id="tsCatList" class="mb-4"></div>
|
||
|
||
<!-- Sub Categories -->
|
||
<h6 class="fw-semibold">Sub Categories</h6>
|
||
<p class="text-muted small">Parent category is mandatory.</p>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<select id="tsSubCatParent" class="form-select" style="max-width:180px"><option value="">Parent…</option></select>
|
||
<input id="tsSubCatInput" class="form-control" type="text" placeholder="Add sub category…" />
|
||
<button type="button" class="btn btn-outline-primary" data-ts-action="add-subcat">Add</button>
|
||
</div>
|
||
<div id="tsSubCatList" class="mb-4"></div>
|
||
|
||
<!-- Severities -->
|
||
<h6 class="fw-semibold">Severities</h6>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<input id="tsSevInput" class="form-control" type="text" placeholder="Add severity…" />
|
||
<button type="button" class="btn btn-outline-primary" data-ts-action="add-sev">Add</button>
|
||
</div>
|
||
<div id="tsSevList" class="mb-4"></div>
|
||
|
||
<!-- Statuses -->
|
||
<h6 class="fw-semibold">Statuses</h6>
|
||
<div class="input-group input-group-sm mb-1">
|
||
<input id="tsStatusInput" class="form-control" type="text" placeholder="Add status…" />
|
||
<button type="button" class="btn btn-outline-primary" data-ts-action="add-status">Add</button>
|
||
</div>
|
||
<div class="form-check form-check-inline small mb-2">
|
||
<input class="form-check-input" type="checkbox" id="tsStatusReqHandled" />
|
||
<label class="form-check-label" for="tsStatusReqHandled">Handled By required</label>
|
||
</div>
|
||
<div class="form-check form-check-inline small mb-2">
|
||
<input class="form-check-input" type="checkbox" id="tsStatusReqComment" />
|
||
<label class="form-check-label" for="tsStatusReqComment">Comment required</label>
|
||
</div>
|
||
<div id="tsStatusList" class="mb-4"></div>
|
||
|
||
<!-- Handled By -->
|
||
<h6 class="fw-semibold">Handled By</h6>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<input id="tsHandledInput" class="form-control" type="text" placeholder="Add handler…" />
|
||
<button type="button" class="btn btn-outline-primary" data-ts-action="add-handled">Add</button>
|
||
</div>
|
||
<div id="tsHandledList"></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- SETTINGS > TASK -->
|
||
<section id="panel-settings-task" class="admin-panel">
|
||
<div class="mb-3">
|
||
<p class="text-muted small mb-0">Settings › Task</p>
|
||
<h3 class="fw-bold">Task Dropdown Configuration</h3>
|
||
<p class="text-muted">Define Project and Process values for task assignment.</p>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-body">
|
||
<!-- Projects -->
|
||
<h6 class="fw-semibold">Projects</h6>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<input id="tkProjInput" class="form-control" type="text" placeholder="Add project…" />
|
||
<button type="button" class="btn btn-outline-primary" data-tk-action="add-proj">Add</button>
|
||
</div>
|
||
<div id="tkProjList" class="mb-4"></div>
|
||
|
||
<!-- Processes -->
|
||
<h6 class="fw-semibold">Processes</h6>
|
||
<p class="text-muted small">Parent project is mandatory.</p>
|
||
<div class="input-group input-group-sm mb-2">
|
||
<select id="tkProcParent" class="form-select" style="max-width:180px"><option value="">Parent project…</option></select>
|
||
<input id="tkProcInput" class="form-control" type="text" placeholder="Add process…" />
|
||
<button type="button" class="btn btn-outline-primary" data-tk-action="add-proc">Add</button>
|
||
</div>
|
||
<div id="tkProcList"></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- USERS -->
|
||
<section id="panel-users" class="admin-panel">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Users</p>
|
||
<h3 class="fw-bold mb-0">Manage Users</h3>
|
||
</div>
|
||
<button id="showUserFormBtn" class="btn btn-primary btn-sm" type="button"><i class="bi bi-plus-lg me-1"></i>Add User</button>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-body p-0">
|
||
<div id="userListContainer"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="userFormSection" class="card" style="display:none">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<h6 id="userFormHeading" class="mb-0 fw-semibold">Add User</h6>
|
||
</div>
|
||
<div class="card-body">
|
||
<form id="userForm">
|
||
<div class="row g-3">
|
||
<div class="col-md-6">
|
||
<label for="userEmail" class="form-label">Email</label>
|
||
<input id="userEmail" class="form-control" type="email" required />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="userPassword" class="form-label">Password</label>
|
||
<input id="userPassword" class="form-control" type="password" required />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="userName" class="form-label">Name</label>
|
||
<input id="userName" class="form-control" type="text" required />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="userFamilyName" class="form-label">Family Name</label>
|
||
<input id="userFamilyName" class="form-control" type="text" required />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="userCompany" class="form-label">Company</label>
|
||
<input id="userCompany" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="userRole" class="form-label">Role</label>
|
||
<select id="userRole" class="form-select" required>
|
||
<option value="">— Select —</option>
|
||
<option value="CW">CW</option>
|
||
<option value="ANT">ANT</option>
|
||
<option value="CW/ANT">CW/ANT</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="mt-3 d-flex gap-2">
|
||
<button class="btn btn-primary btn-sm" type="submit">Save User</button>
|
||
<button id="cancelUserBtn" class="btn btn-outline-secondary btn-sm" type="button">Cancel</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- SITES -->
|
||
<section id="panel-sites" class="admin-panel">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Sites</p>
|
||
<h3 class="fw-bold mb-0">Manage Sites</h3>
|
||
</div>
|
||
<button id="showSiteFormBtn" class="btn btn-primary btn-sm" type="button"><i class="bi bi-plus-lg me-1"></i>Add Site</button>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-body p-0">
|
||
<div id="siteListContainer"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="siteFormSection" class="card" style="display:none">
|
||
<div class="card-header"><h6 id="siteFormHeading" class="mb-0 fw-semibold">Add Site</h6></div>
|
||
<div class="card-body">
|
||
<form id="siteForm">
|
||
<div class="row g-3">
|
||
<div class="col-md-6">
|
||
<label for="siteSiteCode" class="form-label">Site Code</label>
|
||
<input id="siteSiteCode" class="form-control" type="text" required />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="siteHost" class="form-label">Host</label>
|
||
<select id="siteHost" class="form-select">
|
||
<option value="">— Select —</option>
|
||
<option value="OBE">OBE</option>
|
||
<option value="PXS">PXS</option>
|
||
</select>
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="siteObe" class="form-label">OBE Site Code</label>
|
||
<input id="siteObe" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="sitePxs" class="form-label">PXS Site Code</label>
|
||
<input id="sitePxs" class="form-control" type="text" />
|
||
</div>
|
||
</div>
|
||
<div class="mt-3 d-flex gap-2">
|
||
<button class="btn btn-primary btn-sm" type="submit">Save Site</button>
|
||
<button id="cancelSiteBtn" class="btn btn-outline-secondary btn-sm" type="button">Cancel</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CHECK LISTS > TEMPLATES -->
|
||
<section id="panel-cl-templates" class="admin-panel">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Check Lists › Templates</p>
|
||
<h3 class="fw-bold mb-0">Manage Templates</h3>
|
||
</div>
|
||
<button id="showClTplFormBtn" class="btn btn-primary btn-sm" type="button"><i class="bi bi-plus-lg me-1"></i>Add Template</button>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<span class="fw-semibold">Template List</span>
|
||
<span id="clTplCount" class="badge bg-secondary">0</span>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<div id="clTemplateListContainer"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="clTplFormSection" class="card" style="display:none">
|
||
<div class="card-header"><h6 id="clTplFormHeading" class="mb-0 fw-semibold">Add Template</h6></div>
|
||
<div class="card-body">
|
||
<form id="clTemplateForm">
|
||
<div class="row g-3 mb-3">
|
||
<div class="col-12">
|
||
<label for="clTplName" class="form-label">Template Name</label>
|
||
<input id="clTplName" class="form-control" type="text" required />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="clTplScope" class="form-label">Scope</label>
|
||
<select id="clTplScope" class="form-select">
|
||
<option value="">— Select —</option>
|
||
<option value="CW">CW</option>
|
||
<option value="ANT">ANT</option>
|
||
<option value="ANT_CPsite">ANT_CPsite</option>
|
||
</select>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="clTplVersion" class="form-label">Version</label>
|
||
<input id="clTplVersion" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-4"></div>
|
||
<div class="col-md-6">
|
||
<label for="clTplValidFrom" class="form-label">Valid From</label>
|
||
<input id="clTplValidFrom" class="form-control" type="date" />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="clTplValidTill" class="form-label">Valid Till</label>
|
||
<input id="clTplValidTill" class="form-control" type="date" />
|
||
</div>
|
||
</div>
|
||
<h6 class="fw-semibold">Include Records</h6>
|
||
<p class="text-muted small">Select records to include in this template.</p>
|
||
<div id="clTplRecordSelection" class="mb-3"></div>
|
||
<div class="d-flex gap-2">
|
||
<button class="btn btn-primary btn-sm" type="submit">Save Template</button>
|
||
<button id="cancelClTplBtn" class="btn btn-outline-secondary btn-sm" type="button">Cancel</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CHECK LISTS > RECORDS -->
|
||
<section id="panel-cl-records" class="admin-panel">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Check Lists › Records</p>
|
||
<h3 class="fw-bold mb-0">Manage Records</h3>
|
||
</div>
|
||
<button id="showClRecFormBtn" class="btn btn-primary btn-sm" type="button"><i class="bi bi-plus-lg me-1"></i>Add Record</button>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<span class="fw-semibold">Record List</span>
|
||
<span id="clRecCount" class="badge bg-secondary">0</span>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<div id="clRecordListContainer"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="clRecFormSection" class="card" style="display:none">
|
||
<div class="card-header"><h6 id="clRecFormHeading" class="mb-0 fw-semibold">Add Record</h6></div>
|
||
<div class="card-body">
|
||
<form id="clRecordForm">
|
||
<div class="row g-3 mb-3">
|
||
<div class="col-md-3">
|
||
<label for="clRecSort" class="form-label">Sort</label>
|
||
<input id="clRecSort" class="form-control" type="number" min="1" step="1" required />
|
||
<div class="form-text">Unique number.</div>
|
||
</div>
|
||
<div class="col-md-3">
|
||
<label for="clRecCategory" class="form-label">Category</label>
|
||
<select id="clRecCategory" class="form-select"></select>
|
||
</div>
|
||
<div class="col-md-3">
|
||
<label for="clRecSubCategory" class="form-label">Sub Category</label>
|
||
<select id="clRecSubCategory" class="form-select"></select>
|
||
</div>
|
||
<div class="col-md-3">
|
||
<label for="clRecSeverity" class="form-label">Severity</label>
|
||
<select id="clRecSeverity" class="form-select"></select>
|
||
</div>
|
||
<div class="col-12">
|
||
<div class="form-check">
|
||
<input id="clRecImageRequired" class="form-check-input" type="checkbox" />
|
||
<label class="form-check-label" for="clRecImageRequired">Image Required — user must attach image</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-12">
|
||
<label for="clRecDescEN" class="form-label">Description EN</label>
|
||
<input id="clRecDescEN" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="clRecDescFR" class="form-label">Description FR</label>
|
||
<input id="clRecDescFR" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="clRecDescNL" class="form-label">Description NL</label>
|
||
<input id="clRecDescNL" class="form-control" type="text" />
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="clRecStatus" class="form-label">Status <span class="badge bg-warning text-dark">PLACEHOLDER</span></label>
|
||
<select id="clRecStatus" class="form-select" disabled></select>
|
||
<div class="form-text">Set by user at runtime.</div>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="clRecHandledBy" class="form-label">Handled By <span class="badge bg-warning text-dark">PLACEHOLDER</span></label>
|
||
<select id="clRecHandledBy" class="form-select" disabled></select>
|
||
<div class="form-text">Set by user at runtime.</div>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="clRecComment" class="form-label">Comment <span class="badge bg-warning text-dark">PLACEHOLDER</span></label>
|
||
<textarea id="clRecComment" class="form-control" rows="2" disabled></textarea>
|
||
<div class="form-text">Filled by user at runtime.</div>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex gap-2">
|
||
<button class="btn btn-primary btn-sm" type="submit">Save Record</button>
|
||
<button id="cancelClRecBtn" class="btn btn-outline-secondary btn-sm" type="button">Cancel</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- REPORTS -->
|
||
<section id="panel-reports" class="admin-panel">
|
||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||
<div>
|
||
<p class="text-muted small mb-0">Reports</p>
|
||
<h3 class="fw-bold mb-0">Task Management</h3>
|
||
</div>
|
||
<button id="showTaskFormBtn" class="btn btn-primary btn-sm" type="button"><i class="bi bi-plus-lg me-1"></i>Add Task</button>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-body p-0">
|
||
<div id="taskListContainer"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="taskFormSection" class="card" style="display:none">
|
||
<div class="card-header"><h6 id="taskFormHeading" class="mb-0 fw-semibold">Create Task Assignment</h6></div>
|
||
<div class="card-body">
|
||
<form id="taskForm">
|
||
<div class="row g-3">
|
||
<div class="col-md-6">
|
||
<label for="taskUser" class="form-label">User</label>
|
||
<select id="taskUser" class="form-select" required></select>
|
||
</div>
|
||
<div class="col-md-6">
|
||
<label for="taskSite" class="form-label">Site</label>
|
||
<select id="taskSite" class="form-select" required></select>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="taskTemplate" class="form-label">Template</label>
|
||
<select id="taskTemplate" class="form-select" required></select>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="taskProject" class="form-label">Project</label>
|
||
<select id="taskProject" class="form-select"></select>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<label for="taskProcess" class="form-label">Process</label>
|
||
<select id="taskProcess" class="form-select"></select>
|
||
</div>
|
||
</div>
|
||
<div class="mt-3 d-flex gap-2">
|
||
<button class="btn btn-primary btn-sm" type="submit">Assign Task</button>
|
||
<button id="cancelTaskBtn" class="btn btn-outline-secondary btn-sm" type="button">Cancel</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
</main>
|
||
</div>
|
||
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||
<script type="module" src="/admin-app.js"></script>
|
||
</body>
|
||
</html>
|