feat(前端界面): 统一前端界面文案
build.yaml / build (push) Successful in 35s

This commit is contained in:
2026-07-07 16:03:25 +08:00
parent 67eed80507
commit 73336bcc0e
3 changed files with 67 additions and 20 deletions
+16 -1
View File
@@ -645,10 +645,25 @@ body[data-hide-meta] .meta-panel {
}
.doc-font-detail {
overflow: hidden;
color: var(--text-muted);
font-size: 11px;
line-height: 1.35;
overflow-wrap: anywhere;
text-overflow: ellipsis;
white-space: nowrap;
}
.doc-font-result {
display: grid;
grid-template-columns: minmax(72px, 42%) minmax(0, 1fr);
gap: 8px;
}
.doc-font-result span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.font-list {
+44 -12
View File
@@ -1535,17 +1535,44 @@ function renderDocumentFonts() {
if (font.embedded && font.status !== "embedded") {
badges.append(fontBadge("内嵌", "embedded"));
}
const detail = document.createElement("div");
detail.className = "doc-font-detail";
detail.textContent = fontDetail(font);
const result = fontResult(font);
const metaText = fontMeta(font);
head.append(name, badges);
row.append(head, detail);
row.append(head);
appendFontResult(row, result);
appendFontDetail(row, metaText);
fragment.append(row);
}
el.docFontList.append(fragment);
}
function appendFontResult(row, result) {
if (!result.source && !result.detail) {
return;
}
const detail = document.createElement("div");
const source = document.createElement("span");
const text = document.createElement("span");
detail.className = "doc-font-detail doc-font-result";
source.textContent = result.source;
text.textContent = result.detail;
detail.title = [result.source, result.detail].filter((item) => item).join(" · ");
detail.append(source, text);
row.append(detail);
}
function appendFontDetail(row, text) {
if (!text) {
return;
}
const detail = document.createElement("div");
detail.className = "doc-font-detail";
detail.textContent = text;
detail.title = text;
row.append(detail);
}
function fontBadge(text, status) {
const badge = document.createElement("span");
badge.className = `font-badge ${status}`;
@@ -1582,7 +1609,18 @@ function statusText(status) {
}
}
function fontDetail(font) {
function fontResult(font) {
const result = { source: "", detail: "" };
if (font.matched) {
result.source = font.embedded || font.status === "embedded" ? `内嵌 ${font.matched}` : `匹配 ${font.matched}`;
}
if (font.detail) {
result.detail = font.detail;
}
return result;
}
function fontMeta(font) {
const parts = [];
if (font.familyName && font.familyName !== font.fontName) {
parts.push(`字体族 ${font.familyName}`);
@@ -1590,13 +1628,7 @@ function fontDetail(font) {
if (font.charset) {
parts.push(`字符集 ${font.charset}`);
}
if (font.matched) {
parts.push(font.embedded || font.status === "embedded" ? `内嵌 ${font.matched}` : `匹配 ${font.matched}`);
}
if (font.detail) {
parts.push(font.detail);
}
return parts.join(" · ") || "-";
return parts.join(" · ");
}
function fitWidth(updateStatus = true) {
+7 -7
View File
@@ -22,13 +22,13 @@ import (
)
const (
// FontStatusEmbedded 字体使用OFD内嵌字体
// FontStatusEmbedded 内嵌字体可用
FontStatusEmbedded = "embedded"
// FontStatusMatched 字体命中外部字体
// FontStatusMatched 外部字体匹配
FontStatusMatched = "matched"
// FontStatusFallback 字体使用外部字体回退
// FontStatusFallback 外部字体回退
FontStatusFallback = "fallback"
// FontStatusMissing 字体缺失
// FontStatusMissing 字体资源缺失
FontStatusMissing = "missing"
)
@@ -98,7 +98,7 @@ func (r *Renderer) FontInfos() ([]FontInfo, error) {
ID: id,
FontName: id,
Status: FontStatusMissing,
Detail: "未在OFD资源中声明",
Detail: "字体资源未被声明",
Used: used,
})
}
@@ -130,7 +130,7 @@ func (r *Renderer) fontInfo(font Font) FontInfo {
if _, err := r.Reader.ResData(font.FontFile); err == nil {
info.Status = FontStatusEmbedded
info.Matched = path.Base(font.FontFile)
info.Detail = "使用OFD内嵌字体"
info.Detail = "使用内嵌字体文件"
} else {
info.Status = FontStatusMissing
info.Detail = "内嵌字体文件缺失"
@@ -149,7 +149,7 @@ func (r *Renderer) fontInfo(font Font) FontInfo {
return info
}
info.Status = FontStatusMissing
info.Detail = "未找到可用字体"
info.Detail = "可用字体文件缺失"
return info
}