fix bugs
Docker Build and Push / build-image (push) Successful in 3m2s

This commit is contained in:
cheney
2026-08-06 17:43:21 +08:00
parent f2e53df25b
commit 6bacda05f8
6 changed files with 86 additions and 9 deletions
+9 -5
View File
@@ -51,17 +51,21 @@ export default function MonitorPage() {
)
}
// 主机监控列表模块级缓存: 切走再进入时先展示上次数据, 拉取成功后再静默更新
let cachedServers = null
// 主机监控: komari 实时节点列表 (30s 轮询, 静默刷新)
function ServerView() {
const [items, setItems] = useState(null) // null = 加载中
const [items, setItems] = useState(cachedServers) // 有缓存直接先展示, 无缓存为 null 进入加载态
const [err, setErr] = useState('')
const navigate = useNavigate()
const load = useCallback((silent) => {
if (!silent) { setErr(''); setItems(null) }
if (!silent && cachedServers === null) setItems(null) // 仅无缓存时显示加载中
if (!silent) setErr('')
api('/servers')
.then((data) => { setErr(''); setItems(data.items || []) })
.catch((e) => { if (!silent) { setErr(e.message); setItems([]) } })
.then((data) => { cachedServers = data.items || []; setErr(''); setItems(data.items || []) })
.catch((e) => { if (!silent) { setErr(e.message); if (cachedServers === null) setItems([]) } })
}, [])
useEffect(() => {
@@ -76,7 +80,7 @@ function ServerView() {
{err && (
<div className="error-banner">
{err}
<span className="retry-link" onClick={load}>重试</span>
<span className="retry-link" onClick={() => load(false)}>重试</span>
</div>
)}
{items !== null && !err && items.length === 0 && <Empty description="暂无主机" />}
+13 -1
View File
@@ -13,6 +13,18 @@ function fmtDate(s) {
return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate())
}
// 正文规范化: 数据源(妙想 MCP)的段落间用全角空格 \u3000 连接而非换行,
// 这里统一转为换行, 保证详情页有段落感; 换行本身存储/传输是完好的
function normalizeContent(s) {
if (!s) return s
return s
.replace(/\u3000+/g, '\n') // 连续全角空格(段落分隔) → 换行
.replace(/\u00a0/g, ' ') // 不换行空格 → 普通空格
.replace(/[ \t]+\n/g, '\n') // 行尾多余空白
.replace(/\n{3,}/g, '\n\n') // 压缩连续空行
.trim()
}
export default function NewsDetail() {
const { id } = useParams()
const navigate = useNavigate()
@@ -46,7 +58,7 @@ export default function NewsDetail() {
)}
</div>
<div className="news-content">
{item.content ? item.content : item.summary}
{normalizeContent(item.content ? item.content : item.summary)}
{!item.content && <div className="news-content-empty">(本条暂无全文,仅摘要)</div>}
</div>
</div>