周末修订
build / build-push (push) Successful in 3m59s

This commit is contained in:
chenxing
2026-09-15 23:41:34 +08:00
parent e4b843cf00
commit 1cb95225a6
52 changed files with 1250 additions and 3788 deletions
@@ -6,7 +6,8 @@
<!-- 事项指南页(事项库 §6.2 契约):item / attachments[] / relatedItems[] /
faqCategoryUrl·noticeCategoryUrl·ruleCategoryUrl(可空)/ applyUrl(可空,空则不渲染"我要办理")。
三个富文本字段已在保存期过 jsoup 白名单、渲染期补 URL 基准,此处允许 utext -->
三个富文本字段已在保存期过 jsoup 白名单、渲染期补 URL 基准,此处允许 utext。
svcUnavailable=true(P1-4 停机降级):只渲染骨架+空态,不渲染事项内容与"我要办理" -->
<main class="detail-main container" id="main-content">
<div class="page-card svc-guide">
<nav class="breadcrumb" aria-label="面包屑">
@@ -14,10 +15,16 @@
<span class="crumb-sep" aria-hidden="true">/</span>
<a th:href="${url.serviceList()}">服务中心</a>
<span class="crumb-sep" aria-hidden="true">/</span>
<span class="current" th:text="${item.title}">事项名称</span>
<span class="current" th:text="${svcUnavailable} ? '服务中心' : ${item.title}">事项名称</span>
</nav>
<article class="svc-guide-body">
<!-- P1-4 停机空态:svc-hall 不可达时降级渲染(200),不出 500 错误页 -->
<div class="empty-state svc-unavailable" th:if="${svcUnavailable}">
<p>事项服务暂时不可用,请稍后再试</p>
<p class="empty-hint">事项数据服务暂不可达,稍后刷新即可恢复</p>
</div>
<article class="svc-guide-body" th:if="${!svcUnavailable}">
<h1 class="article-title" th:text="${item.title}">事项名称</h1>
<div class="article-meta">
<span th:if="${!#strings.isEmpty(item.deptName)}"
@@ -102,7 +109,7 @@
</nav>
</article>
<aside class="svc-related" th:if="${!#lists.isEmpty(relatedItems)}">
<aside class="svc-related" th:if="${!svcUnavailable and !#lists.isEmpty(relatedItems)}">
<h2 class="section-title">相关服务</h2>
<ul class="svc-related-list">
<li th:each="rel : ${relatedItems}">
@@ -16,8 +16,14 @@
<h1 class="page-title">服务中心</h1>
<!-- P1-4 停机空态:svc-hall 不可达时降级渲染(200),不出 500 错误页 -->
<div class="empty-state svc-unavailable" th:if="${svcUnavailable}">
<p>事项服务暂时不可用,请稍后再试</p>
<p class="empty-hint">事项数据服务暂不可达,稍后刷新即可恢复</p>
</div>
<div class="svc-filters"
th:if="${!#lists.isEmpty(serviceFilters.objects) or !#lists.isEmpty(serviceFilters.categories) or !#lists.isEmpty(serviceFilters.depts)}">
th:if="${!svcUnavailable and (!#lists.isEmpty(serviceFilters.objects) or !#lists.isEmpty(serviceFilters.categories) or !#lists.isEmpty(serviceFilters.depts))}">
<div class="svc-filter-group" th:if="${!#lists.isEmpty(serviceFilters.objects)}">
<span class="svc-filter-label">服务对象</span>
<div class="svc-filter-options">
@@ -47,7 +53,7 @@
</div>
</div>
<div class="svc-toolbar">
<div class="svc-toolbar" th:if="${!svcUnavailable}">
<form class="svc-search" th:action="${url.serviceList()}" method="get" role="search">
<input type="search" name="q" th:value="${q}" placeholder="搜索事项名称 / 简介" maxlength="64">
<button type="submit">搜索</button>
@@ -55,7 +61,7 @@
<a class="svc-clear" th:if="${activeFilters.hasAny}" th:href="${activeFilters.clearUrl}">清除筛选</a>
</div>
<ul class="svc-list">
<ul class="svc-list" th:if="${!svcUnavailable}">
<li th:each="it : ${serviceList.items}">
<a class="svc-item" th:href="${url.serviceItem(it.id)}">
<span class="svc-item-cover" th:if="${it.coverImage != null}">
@@ -80,15 +86,15 @@
</a>
</li>
</ul>
<div class="empty-state" th:if="${#lists.isEmpty(serviceList.items)}">
<div class="empty-state" th:if="${!svcUnavailable and #lists.isEmpty(serviceList.items)}">
<p th:if="${activeFilters.hasAny}">未找到符合条件的服务事项</p>
<p th:if="${!activeFilters.hasAny}">服务中心暂未上架事项</p>
<p class="empty-hint" th:if="${activeFilters.hasAny}">换个筛选条件或关键词试试</p>
<p class="empty-hint" th:if="${!activeFilters.hasAny}">事项发布后将在此展示</p>
</div>
<!-- 分页:URL 由后端预生成(携带当前筛选,pageUrls[].active 标记当前页) -->
<nav class="pagination" th:if="${serviceList.totalPages > 1}" aria-label="分页">
<!-- 分页:URL 由后端预生成(携带当前筛选,pageUrls[].active 标记当前页);停机态 totalPages=0 自然隐藏 -->
<nav class="pagination" th:if="${!svcUnavailable and serviceList.totalPages > 1}" aria-label="分页">
<a th:each="p : ${serviceList.pageUrls}"
th:classappend="${p.active} ? 'active'"
th:href="${p.url}"