feat(admin): 登录改页内弹窗 + P1 站点设置(页头/侧栏)

- 登录:LoginDialog(Modal)替代 /login 页面;/login 重定向回首页
- 设置接口:GET /api/settings 公开读、PATCH 需登录 + version 乐观锁(409/400)
- setting 表存 site JSON:页头(启用/速度/条目+标签+色调)、侧栏(hidden/order)
- /admin:Tabs 页头/侧栏,条目增删与上下移,保存后首页生效
- 首页应用设置:ticker 文本占位符与速度、侧栏顺序与显隐
- 测试 42 passed(settings 5 例)
This commit is contained in:
stash
2026-10-29 12:52:29 +08:00
parent dea7781b86
commit 9ae5a455c5
14 changed files with 1205 additions and 195 deletions
+62 -18
View File
@@ -773,36 +773,80 @@
white-space: nowrap;
}
/* ---------- 登录页 ---------- */
/* ---------- 设置页 ---------- */
.login-page {
display: grid;
place-items: center;
.admin-page {
min-height: 100vh;
min-height: 100dvh;
padding: var(--su-space-6);
background-color: var(--su-bg-page);
}
.login-card {
.admin-topbar {
display: flex;
flex-direction: column;
gap: var(--su-space-4);
width: min(380px, 100%);
}
.login-brand {
align-items: center;
justify-content: space-between;
gap: var(--su-space-4);
height: 64px;
padding: 0 var(--su-space-6);
border-bottom: 1px solid var(--su-border);
background-color: var(--su-bg-card);
}
.login-back {
font-size: var(--su-font-size-sm);
color: var(--su-text-muted);
text-align: center;
.admin-main {
width: min(880px, calc(100% - 48px));
margin: 0 auto;
padding: var(--su-space-8) 0 var(--su-space-10);
}
.login-back:hover {
color: var(--su-color-primary);
.admin-locked {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--su-space-4);
margin-top: var(--su-space-5);
padding: var(--su-space-4);
border: 1px dashed var(--su-border-strong);
border-radius: var(--su-radius-md);
}
.admin-form {
margin-top: var(--su-space-5);
}
.admin-row {
display: flex;
align-items: center;
gap: var(--su-space-3);
}
.admin-item-row {
display: grid;
grid-template-columns: minmax(0, 1fr) 160px 120px auto;
align-items: center;
gap: var(--su-space-2);
}
.admin-item-row > :first-child:not(.admin-item-title) {
grid-column: span 1;
}
.admin-item-title {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.admin-nav-row {
grid-template-columns: auto minmax(0, 1fr) auto;
}
.admin-item-actions {
display: flex;
justify-content: flex-end;
}
.admin-item-row .su-switch {
justify-self: start;
}
/* ---------- 响应式 ---------- */