Multi-select (Ctrl/Cmd+click toggle, Shift+click range, right-click the
active selection for bulk actions - same conventions as a native file
manager):
- Print Labels (N) / Export CSV (N) for any mix of individually-picked
assets and whole folders. Labels/export now take asset_ids/folder_ids
instead of a single asset_id/folder_id.
- Edit Status..., Check Out..., Duplicate, Move to..., and Delete, bulk
versions of the existing single-asset actions. Checkout/Move modals
were generalized to accept an array of ids instead of just one; status
editing got its own lightweight POST /app/assets/{id}/status endpoint
(assets.SetStatus) so a bulk status change doesn't need to resend every
other field the way a full PATCH would.
Labels:
- Choose QR (a /scan/<tag> URL, for a phone camera) or Code128 barcode
(the bare Asset ID, for a USB scanner typing into the search box) via a
format selector on the print page. New barcodeDataURI using
github.com/boombuler/barcode alongside the existing QR generator.
- "Start at #" lets printing resume partway into an already-used sheet
instead of wasting it on a fresh one.
- Added the Avery 5260 label template (same grid as 5160, rounded
corners, so it isn't flagged approximate).
Also: the configured Site Name now shows on the login page too, not just
the authenticated navbar.
44 lines
1.9 KiB
HTML
44 lines
1.9 KiB
HTML
{{define "login"}}<!doctype html>
|
|
<html lang="en" data-bs-theme="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Sign in · {{siteName}}</title>
|
|
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
|
|
<link rel="stylesheet" href="/static/icons/bootstrap-icons.css">
|
|
<link rel="stylesheet" href="/static/css/app.css">
|
|
</head>
|
|
<body class="login-body d-flex align-items-center">
|
|
<div class="container">
|
|
<div class="row justify-content-center">
|
|
<div class="col-11 col-sm-8 col-md-5 col-lg-4">
|
|
<div class="text-center mb-4">
|
|
<div class="display-6"><i class="bi bi-diagram-3-fill"></i></div>
|
|
<h1 class="h4 mt-2 mb-0">{{siteName}}</h1>
|
|
<div class="text-body-secondary small">IT asset inventory</div>
|
|
</div>
|
|
<div class="card shadow-sm">
|
|
<div class="card-body p-4">
|
|
{{if .Error}}<div class="alert alert-danger py-2">{{.Error}}</div>{{end}}
|
|
<form method="post" action="/login">
|
|
<input type="hidden" name="next" value="{{.Next}}">
|
|
<div class="mb-3">
|
|
<label class="form-label" for="username">Username</label>
|
|
<input class="form-control" type="text" id="username" name="username" autofocus required autocomplete="username">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label" for="password">Password</label>
|
|
<input class="form-control" type="password" id="password" name="password" required autocomplete="current-password">
|
|
</div>
|
|
<button type="submit" class="btn btn-primary w-100">Sign in</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<p class="text-center text-body-secondary small mt-3">Default login: admin / admin</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|