feat: 可配置站点 URL 风格

- 新增 urlStyle 工具与测试:postPath/userPath/sitePagePath 统一生成链接
- 管理端新增 UrlStylePanel 设置面板,settings 服务与 handler 适配
- 全站路由链接与 JSON-LD/sitemap 切换为统一 URL 生成
- middleware 与相关组件适配
This commit is contained in:
2026-09-27 04:01:42 +08:00
parent 1d862a0dd3
commit 7a44c1f2cf
64 changed files with 1183 additions and 200 deletions

View File

@@ -4590,11 +4590,13 @@ a.j13-mention-token:hover {
}
#settings-identity .admin-settings-actions,
#settings-brand .admin-settings-actions,
#settings-url-style .admin-settings-actions,
#settings-footer .admin-settings-actions {
grid-template-columns: minmax(0, 1fr);
}
#settings-identity .admin-settings-actions-inner,
#settings-brand .admin-settings-actions-inner,
#settings-url-style .admin-settings-actions-inner,
#settings-footer .admin-settings-actions-inner {
grid-column: 1;
}
@@ -4860,6 +4862,71 @@ a.j13-mention-token:hover {
}
}
/* 链接风格(伪静态)三选卡 */
.admin-url-style-card {
display: flex;
flex-direction: column;
align-items: stretch;
padding: 0.8rem 0.85rem;
border-radius: 12px;
border: 1px solid var(--line);
background: var(--panel);
text-align: left;
cursor: pointer;
font: inherit;
color: inherit;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.admin-url-style-card.is-on {
border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 45%, transparent);
}
.admin-url-style-card:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 1px;
}
.admin-url-style-dot {
width: 0.85rem;
height: 0.85rem;
border-radius: 999px;
border: 1px solid var(--line-2);
background: var(--panel-2);
flex-shrink: 0;
}
.admin-url-style-dot.is-on {
border-color: var(--accent);
background: radial-gradient(circle, var(--accent) 0 42%, transparent 46%);
}
.admin-url-style-examples {
display: flex;
flex-direction: column;
gap: 0.25rem;
margin-top: 0.6rem;
padding: 0.55rem 0.6rem;
border-radius: 8px;
background: var(--panel-2);
}
.admin-url-style-example {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 0.6rem;
font-size: 11px;
}
.admin-url-style-example code {
font-size: 11px;
color: var(--ink-2);
overflow-wrap: anywhere;
}
.admin-url-style-notes {
list-style: disc;
padding-left: 1.1rem;
display: flex;
flex-direction: column;
gap: 0.2rem;
color: var(--ink-3);
}
@container settings-page (max-width: 1039px) {
.admin-settings-work {
grid-template-columns: minmax(0, 1fr);