feat(前端界面): 支持单文件拖拽打开,统一前端提示文案
build.yaml / build (push) Successful in 35s

This commit is contained in:
xiaoqidun committed 2026-09-10 17:05:33 +08:00
1 parent c4632b3418
commit f361c61dcc
1 file changed
+31 -5
+31 -5
View File
@@ -157,6 +157,13 @@ el.viewerPanel.addEventListener("scroll", () => {
schedulePageSync();
});
el.viewerPanel.addEventListener("dblclick", openOFDFromViewer);
document.addEventListener("dragover", (event) => {
if (event.dataTransfer.types.includes("Files")) {
event.preventDefault();
event.dataTransfer.dropEffect = document.body.hasAttribute("aria-busy") ? "none" : "copy";
}
});
document.addEventListener("drop", openOFDFromDrop);
if (fontChannel) {
fontChannel.onmessage = scheduleFontSync;
}
@@ -191,6 +198,25 @@ async function openOFDFromViewer() {
await openOFDFile();
}
async function openOFDFromDrop(event) {
if (!event.dataTransfer.types.includes("Files")) {
return;
}
event.preventDefault();
if (document.body.hasAttribute("aria-busy")) {
return;
}
if (event.dataTransfer.files.length > 1) {
setStatus("仅支持单文件拖入");
return;
}
const file = event.dataTransfer.files[0];
if (file && isOFDFile(file)) {
await requestLocalFontsBeforeOpen();
}
await openOFD(file);
}
function openFontFile(input) {
if (document.body.hasAttribute("aria-busy")) {
return;
@@ -357,7 +383,7 @@ async function refreshApplication() {
return;
}
const temporaryFonts = state.userFonts.some((font) => font.source === "upload");
const message = temporaryFonts ? "刷新后需重新打开文件和添加未保存字体,是否继续?" : "刷新后需重新打开文件,是否继续?";
const message = temporaryFonts ? "刷新后文件需重新打开,未保存字体需重新添加" : "刷新后文件需重新打开";
if ((state.ofdBytes || temporaryFonts) && !window.confirm(message)) {
return;
}
@@ -700,7 +726,7 @@ async function loadLocalFonts() {
await nextFrame();
const available = await queryLocalFonts();
if (!state.doc) {
setStatus(available.length ? `已授权 ${available.length} 个系统字体` : "未读取到系统字体");
setStatus(available.length ? `系统字体已授权 ${available.length} 个` : "未读取到系统字体");
return;
}
if (await loadDocumentLocalFonts(available)) {
@@ -724,7 +750,7 @@ async function requestLocalFontsBeforeOpen() {
setBusy(true, "正在请求授权", 12, "正在请求授权");
try {
const available = await queryLocalFonts();
setStatus(available.length ? `已授权 ${available.length} 个系统字体` : "未读取到系统字体");
setStatus(available.length ? `系统字体已授权 ${available.length} 个` : "未读取到系统字体");
} catch (err) {
if (err && err.name === "NotAllowedError") {
setStatus("系统字体未授权");
@@ -814,7 +840,7 @@ async function loadDocumentLocalFonts(available, openSeq = state.openSeq) {
return false;
}
state.localFonts = fonts;
setStatus(fonts.length ? `已加载 ${fonts.length} 个系统字体` : emptyStatus);
setStatus(fonts.length ? `系统字体已加载 ${fonts.length} 个` : emptyStatus);
updateFontSummary();
renderFontList();
return fonts.length > 0;
@@ -2182,7 +2208,7 @@ async function focusSignatureStamp(stamp) {
await renderPage(pageIndex, { fit: false, scroll: false });
await nextFrame();
highlightSignatureStamp(stamp);
setStatus(`已定位签名 第 ${stamp.page} 页`);
setStatus(`签名已定位 第 ${stamp.page} 页`);
}
function highlightSignatureStamp(stamp) {