fix(ui): 登录页页脚被当纯文本显示(html/template 转义)+ 三处页脚统一
用户发现登录页出现 `<div class="navi-footer">…` 这串标记文字。 ① 根因:auth.go 把 beianFooter() 的字符串塞进 Go html/template(map[string]string), 模板自动转义整段 HTML → 页面上直接显示标记源码。 修法:改用 map[string]any + template.HTML(beianFooter 内部已对备案号做 html.EscapeString, 注入合法)。 ② 登录页与门户页此前**都无视**后台的「页脚」自定义字段(后台提示语写的是"填写后以这里为准")。 新增统一入口 siteFooter(info):自定义 footer 优先,否则按 icp/gongan/座右铭生成; pages.go(门户页)与 auth.go(登录页)都改走它。 ③ 页脚座右铭此前只由 navi.js 在 Dashy 页客户端注入 → 登录页/门户页永远没有。 新增 pageInfo 字段 motto(换行或 | 分行,留空用内置默认), footerMarkup() 生成时一并输出 .navi-quote 两行;navi.js 已有幂等判断不会重复注入。 后台「站点信息」新增座右铭输入框,并登记进 /api/schema。 ④ 登录页 / 门户页补页脚样式:左列两行备案号、右列两行座右铭;窄屏退化为居中单列。
This commit is contained in:
@ -160,7 +160,15 @@ input{width:100%;padding:11px 13px;border:1px solid var(--inbd);border-radius:10
|
||||
input:focus{border-color:var(--ac);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
|
||||
button[type=submit]{width:100%;margin-top:18px;padding:11px;border:0;border-radius:10px;background:var(--ac);color:#fff;font:inherit;font-weight:750;cursor:pointer}
|
||||
.err{padding:9px 11px;border-radius:9px;background:var(--errbg);color:var(--errtx);font-size:13px;margin-bottom:14px}
|
||||
.foot{text-align:center;margin-top:22px;font-size:11px;color:var(--tx2)}.foot a{color:inherit;text-decoration:none}
|
||||
.foot{margin-top:22px;font-size:11px;color:var(--tx2)}
|
||||
.foot a{color:inherit;text-decoration:none}
|
||||
/* 页脚:左列两行备案号 / 右列两行座右铭(与主站一致)。
|
||||
登录卡片只有 400px,窄到放不下两列时退化为居中单列,避免挤压换行。 */
|
||||
.foot .navi-footer{display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;grid-auto-flow:column;gap:2px 12px;justify-content:space-between;align-items:center;text-align:left}
|
||||
.foot .navi-footer-sep{display:none}
|
||||
.foot .navi-quote{grid-column:2;justify-self:end;opacity:.85}
|
||||
@media(max-width:430px){.foot .navi-footer{grid-template-columns:auto;grid-auto-flow:row;justify-content:center;text-align:center;gap:2px}
|
||||
.foot .navi-quote{grid-column:1;justify-self:center}}
|
||||
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
|
||||
</style></head><body><main class="card">
|
||||
<button class="theme" type="button" onclick="(function(){var n=document.documentElement.getAttribute('data-theme')==='dark'?'light':'dark';document.documentElement.setAttribute('data-theme',n);localStorage.setItem('theme',n)})()" title="切换深浅色" aria-label="切换深浅色">◐</button>
|
||||
@ -172,11 +180,14 @@ button[type=submit]{width:100%;margin-top:18px;padding:11px;border:0;border-radi
|
||||
func renderPortalLogin(w http.ResponseWriter, redirect, errText string) {
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
title, subtitle, logo, icp, gongan := authPageInfo()
|
||||
_ = portalLoginTemplate.Execute(w, map[string]string{
|
||||
title, subtitle, logo, _, _ := authPageInfo()
|
||||
// 关键:页脚是一段 HTML,必须用 template.HTML 交给模板。
|
||||
// 此前用 map[string]string,html/template 会把整段标记转义成文本,
|
||||
// 页面直接显示 <div class="navi-footer">… 源码(线上实测)。
|
||||
_ = portalLoginTemplate.Execute(w, map[string]any{
|
||||
"Redirect": url.QueryEscape(redirect), "Error": errText,
|
||||
"Title": title, "Subtitle": subtitle, "Logo": logo,
|
||||
"Footer": beianFooter(icp, gongan),
|
||||
"Footer": template.HTML(siteFooter(pageInfoMap())),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user