build / build-push (push) Successful in 51s
线上 10027 首页配了 home_layout 后走 themes/common 通用骨架,派生皮肤只换了页头页脚, 正文仍是骨架内置蓝灰卡(外加 cherry-bloom 的粉紫配色),用户判定"完全不能用"。 - 新增 academic-navy(学府藏蓝,an-)/campus-azure(青蓝校园,cz-):以 scholar-blue 为基座, 各自自带 fragments/home-blocks.html 与 home.html 分发,news_grid/media_focus/compact/ image_wall/card/ticker/gallery/links 八种区块形态全部由皮肤渲染,未知类型才回落通用骨架 - 两套皮肤 :root 把私有变量别名到 --primary/--text/--card-bg/--border/--radius 契约变量; 中文行锁 nowrap+min-width:0+ellipsis,grid 轨道用 minmax(0,1fr) 防窄视口压塌 - 新闻背景带 .an-sec-bg/.cz-sec-bg 压 z-index:0、卡片抬到 1:绝对定位层默认画在普通流之上, 不抬起会整张卡片泛成底图色(无头截图实测) - common 骨架空态守卫改包 th:block(th:replace 优先级 100 先于 th:if 300) - 删除 cherry-bloom/violet-iris;sql/upgrade_theme_academic_skins.sql 幂等改指存量站点 (站点缓存 CacheNames.SITE TTL 30 分钟,改库后需重启或在管理端重存站点) - 测试:AcademicSkinContractTest(区块自带/分发/CJK 行/变量别名/主色必须学术蓝/背景带层级/ 预览图不得沿用基座)、HomeBlocksCssContractTest、PortalHomeLayoutIT 端到端断言零 plb- 输出; 全量 383 项通过
60 lines
3.1 KiB
HTML
60 lines
3.1 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns:th="http://www.thymeleaf.org">
|
|
<!-- academic-navy 公共页脚:深蓝渐变底 + 同心圆环纹理(CSS 绘制) + 三栏(品牌/联系备案/友链分组) + 底条校名。
|
|
数据绑定与 default 契约一致(linkGroups/contact/copyright/beian/logo/schName),仅换皮。 -->
|
|
<footer class="an-footer" th:fragment="footer">
|
|
<i class="an-ring an-ring--1" aria-hidden="true"></i>
|
|
<i class="an-ring an-ring--2" aria-hidden="true"></i>
|
|
<i class="an-ring an-ring--3" aria-hidden="true"></i>
|
|
|
|
<div class="an-footer-inner">
|
|
<!-- 品牌栏 -->
|
|
<div class="an-footer-brand">
|
|
<span class="an-footer-badge" th:if="${site.config['logo'] != null}">
|
|
<img class="an-footer-logo" th:src="${url.upload(site.config['logo'])}" th:alt="${site.name}">
|
|
</span>
|
|
<span class="an-footer-badge an-footer-badge--plain" th:if="${site.config['logo'] == null}" aria-hidden="true">
|
|
<svg viewBox="0 0 24 24" width="30" height="30" focusable="false">
|
|
<path d="M12 2l2.4 4.9 5.4.8-3.9 3.8.9 5.4L12 14.4 7.2 16.9l.9-5.4L4.2 7.7l5.4-.8L12 2z"
|
|
fill="currentColor"></path>
|
|
</svg>
|
|
</span>
|
|
<span class="an-footer-site" th:text="${site.name}">站点名称</span>
|
|
</div>
|
|
|
|
<!-- 联系/版权/备案 -->
|
|
<div class="an-footer-info">
|
|
<p class="an-footer-line" th:if="${site.config['contact'] != null}">
|
|
<i class="an-dot" aria-hidden="true"></i><span th:text="${site.config['contact']}">联系方式</span>
|
|
</p>
|
|
<p class="an-footer-line" th:if="${site.config['copyright'] != null}">
|
|
<i class="an-dot" aria-hidden="true"></i><span th:text="${site.config['copyright']}">版权信息</span>
|
|
</p>
|
|
<p class="an-footer-line" th:if="${site.config['beian'] != null}">
|
|
<i class="an-dot" aria-hidden="true"></i><span th:text="${site.config['beian']}">备案号</span>
|
|
</p>
|
|
</div>
|
|
|
|
<!-- 友情链接(分组渲染;无分组整栏不渲染) -->
|
|
<div class="an-footer-links" th:if="${!#lists.isEmpty(site.linkGroups)}">
|
|
<div class="an-links-group" th:each="group : ${site.linkGroups}"
|
|
th:if="${!#lists.isEmpty(group.links)}">
|
|
<span class="an-group-name" th:text="${group.groupName}">分组</span>
|
|
<p class="an-links-row">
|
|
<a th:each="link : ${group.links}" th:href="${link.linkUrl}" target="_blank" rel="noopener">
|
|
<img th:if="${link.logoUrl != null and !#strings.isEmpty(link.logoUrl)}" class="link-logo"
|
|
th:src="${url.upload(link.logoUrl)}" th:alt="${link.name}" loading="lazy">
|
|
<span th:text="${link.name}">链接</span>
|
|
</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="an-footer-bottom">
|
|
<p th:if="${site.schName != null and !#strings.isEmpty(site.schName)}"
|
|
th:text="${site.schName}">学校名称</p>
|
|
</div>
|
|
</footer>
|
|
</html>
|