本轮全部为前端改动,版本号保持 1.9.0: - CSS 加载顺序调整为 app.css → bootstrap,让 Bootstrap 覆盖表格/按钮/表单/卡片等基础组件,日历/热屏等自定义组件类不受影响 - 主题切换同时写 data-theme 与 data-bs-theme,Bootstrap 组件跟随亮/暗 - 登录页、初始化页重写为 Bootstrap card + form-control + btn-primary,垂直居中 - 客户列表搜索框加 form-control 验证: - 无头 Chrome 实拍登录、客户列表、套餐、设置四页(shots/bs2-*.png) - 数据库与业务逻辑零改动 后续:第 3 轮日历抽屉/追加面板/客户月历,第 4 轮大屏内部与收尾
55 lines
3.9 KiB
HTML
55 lines
3.9 KiB
HTML
{{define "layout"}}<!doctype html>
|
|
<html lang="zh-CN" data-bs-theme="{{if eq .Theme "dark"}}dark{{else}}light{{end}}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{{.Title}} · 代打台</title>
|
|
<link rel="icon" href="/static/favicon.svg" type="image/svg+xml">
|
|
<link rel="stylesheet" href="/static/app.css?v={{.Version}}">
|
|
<link rel="stylesheet" href="/static/vendor/bootstrap.min.css?v={{.Version}}">
|
|
</head>
|
|
<body class="bg-body-tertiary">
|
|
{{if .User}}
|
|
<nav class="navbar navbar-expand-lg bg-body border-bottom sticky-top">
|
|
<div class="container-fluid">
|
|
<a class="navbar-brand fw-bold text-success" href="/calendar">代打台</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav"><span class="navbar-toggler-icon"></span></button>
|
|
<div class="collapse navbar-collapse" id="mainNav">
|
|
<ul class="navbar-nav me-auto">
|
|
<li class="nav-item"><a class="nav-link{{if eq .Nav "calendar"}} active{{end}}" href="/calendar">日历</a></li>
|
|
<li class="nav-item"><a class="nav-link{{if eq .Nav "customers"}} active{{end}}" href="/customers">客户</a></li>
|
|
<li class="nav-item"><a class="nav-link{{if eq .Nav "subscriptions"}} active{{end}}" href="/subscriptions">订阅</a></li>
|
|
<li class="nav-item"><a class="nav-link{{if eq .Nav "packages"}} active{{end}}" href="/packages">套餐</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="/screen" target="_blank" rel="noopener">大屏 ↗</a></li>
|
|
</ul>
|
|
<form class="d-flex me-2" role="search" action="/customers" method="get">
|
|
<input class="form-control form-control-sm" type="search" name="q" value="{{.Query}}" placeholder="手机尾号 / 姓名 / 游戏名" aria-label="搜索客户" data-search>
|
|
</form>
|
|
<div class="d-flex align-items-center gap-2">
|
|
<a class="badge text-bg-danger text-decoration-none" href="/subscriptions?state=due_today">今日到期 {{.DueToday}}</a>
|
|
<a class="badge text-bg-warning text-decoration-none" href="/subscriptions?state=due3">3 天内 {{.Due3}}</a>
|
|
<a class="badge text-bg-secondary text-decoration-none" href="/subscriptions?state=due7">7 天内 {{.Due7}}</a>
|
|
<button class="btn btn-sm btn-outline-secondary" type="button" data-theme-toggle aria-label="切换亮色/暗色"><span class="ic-moon">☾</span><span class="ic-sun">☀</span></button>
|
|
<div class="dropdown">
|
|
<button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown">{{if .User.DisplayName}}{{.User.DisplayName}}{{else}}{{.User.Username}}{{end}}</button>
|
|
<ul class="dropdown-menu dropdown-menu-end">
|
|
<li><a class="dropdown-item" href="/settings">设置</a></li>
|
|
<li><a class="dropdown-item" href="/logs">操作日志</a></li>
|
|
<li><hr class="dropdown-divider"></li>
|
|
<li><form method="post" action="/logout"><button class="dropdown-item text-danger" type="submit">退出登录</button></form></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
{{end}}
|
|
{{if .Flash}}<div class="alert alert-success alert-dismissible fade show m-3" role="alert" data-flash>{{.Flash}}<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>{{end}}
|
|
{{if .Error}}<div class="alert alert-danger m-3" role="alert">{{.Error}}</div>{{end}}
|
|
<main class="{{if .User}}container-fluid py-3{{end}}">{{template "content" .}}</main>
|
|
{{if .User}}<footer class="container-fluid text-secondary small border-top py-3 mt-4">代打台 v{{.Version}} · <a href="/logs">操作日志</a> · <a href="/settings">设置</a> · <a href="/screen" target="_blank" rel="noopener">大屏</a></footer>{{end}}
|
|
<script src="/static/vendor/bootstrap.bundle.min.js?v={{.Version}}" defer></script>
|
|
<script src="/static/app.js?v={{.Version}}" defer></script>
|
|
</body>
|
|
</html>{{end}}
|