@@ -60,12 +60,22 @@ yh:
|
||||
# UserBase 注册后分配(进白名单),与 yh.open 保持一致;生产由 projman 注入
|
||||
app-key: 100005
|
||||
app-secret: 2c7885de594742cc840b8762910b2d2e
|
||||
# 入站验签白名单:办事大厅 svc-hall(站点目录 /oapi/site/list 消费方,appKey=100018;
|
||||
# P0-1 修复)。secret 与 svc-hall application.yml yh.app-auth.app-secret 逐字一致(联调态),
|
||||
# 生产两侧由 projman/Nacos 注入同一密钥对
|
||||
trusted-apps:
|
||||
"100018": "svc-hall-dev-secret-100018"
|
||||
open:
|
||||
enabled: true
|
||||
base-host: http://base.yunhaixingtong.com
|
||||
base-path: /userbase
|
||||
app-key: 100005
|
||||
app-secret: 2c7885de594742cc840b8762910b2d2e
|
||||
# 办事大厅(svc-hall)对接(V2.0 Part C.3):门户 service/guide 数据源。
|
||||
# 双向信任:CMS 出站签名用 yh.app-auth 身份(appKey=100005,办事大厅侧 trusted-apps 须含 100005);
|
||||
# 入站收 svc-hall 站点目录调用(appKey=100018,见上方 trusted-apps)。
|
||||
svchall:
|
||||
base-url: http://localhost:8086
|
||||
# env-config 管理端运行时配置(免登录 GET /api/env-config?target=admin,数据源见
|
||||
# config/PropertyEnvConfigSource:聚合 starter 自动装配,有 bean 即注册端点)。
|
||||
# 本地无需配值(前端 dev 走 .env.dev);线上值经环境变量 YH_ENV_CONFIG_SOURCE_ADMIN
|
||||
@@ -87,6 +97,13 @@ cms:
|
||||
# 含 context-path,如 https://base.yunhaixingtong.com/cms;生产由 projman 注入。
|
||||
# 为空(本地开发默认)时按当前请求派生(反代下经 ForwardedHeaderFilter 修正 scheme/port,B-2)。
|
||||
base-origin: ""
|
||||
svc:
|
||||
item:
|
||||
# 【V2.0 拆分遗留说明】事项库已迁独立"办事大厅"应用(svc-hall),CMS 侧 SvcItemQuery
|
||||
# 由 SvcItemRemoteQuery 经 oapi 调办事大厅;本配置已废弃(部门口径归办事大厅
|
||||
# svchall.item.dept-group-type)。保留注释防误解。
|
||||
dept-group-type: 7
|
||||
|
||||
|
||||
logging:
|
||||
level:
|
||||
|
||||
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user