@yuwenovo/ocr-result-view 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/ocr-result-view.css +1 -1
- package/dist/ocr-result-view.js +335 -299
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ Vue 3 OCR 文档比对结果查看器。传入两份文档的页面图片和差
|
|
|
4
4
|
|
|
5
5
|
组件负责展示与交互;OCR 识别、文档比对、接口请求和审阅保存由接入项目负责。默认只读,无需 Vue Router、Pinia、Axios 或 Tailwind。
|
|
6
6
|
|
|
7
|
+
预览区提供默认关闭的“同步滚动”开关。开启时以最近滚动的一侧为基准(初始为标准文档),按可滚动距离的百分比同步另一侧;滚动任意一侧或使用分页按钮均可联动。两份文档页数不同时仍按整体进度同步,不表示内容逐段对应。点击差异仍分别定位两侧的实际标注,关闭开关后恢复独立滚动。
|
|
8
|
+
|
|
7
9
|
## 1. 安装
|
|
8
10
|
|
|
9
11
|
在 Vue 3.5+ 项目中安装:
|
package/dist/ocr-result-view.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[data-v-7344a999],[data-v-7344a999]:before,[data-v-7344a999]:after{box-sizing:border-box}button[data-v-7344a999]{font:inherit;color:inherit;background:0 0;border:0;padding:0}h2[data-v-7344a999],h3[data-v-7344a999],p[data-v-7344a999]{margin:0}svg[data-v-7344a999]{vertical-align:middle;display:inline-block}.diff-cards[data-v-7344a999]{flex-direction:column;gap:10px;display:flex}.diff-card[data-v-7344a999]{--change-color:var(--diff-modify-dot,#f80);border:1px solid var(--viewer-border,#ffffff17);background:var(--diff-card-bg,#ffffff09);border-radius:12px;flex-shrink:0;min-width:0;padding:10px 12px;transition:border-color .15s,box-shadow .15s}.diff-card--insert[data-v-7344a999]{--change-color:var(--diff-insert-dot,#00a870)}.diff-card--delete[data-v-7344a999]{--change-color:var(--diff-delete-dot,#e34d59)}.diff-card[data-v-7344a999]:hover{border-color:color-mix(in srgb, var(--viewer-card-text,#cbd5e1) 30%, transparent)}.diff-card.is-active[data-v-7344a999]{border-color:var(--diff-active-border,#38bdf899);box-shadow:0 0 0 2px color-mix(in srgb, var(--diff-active-border,#38bdf899) 10%, transparent)}.diff-card.is-ignored[data-v-7344a999]{--change-color:var(--ui-text-subtle,#64748b)}.card-heading[data-v-7344a999]{align-items:center;gap:6px;display:flex}.card-select[data-v-7344a999]{text-align:left;cursor:pointer;flex:1;align-items:center;gap:8px;min-width:0;display:flex}.type-icon[data-v-7344a999]{width:24px;height:24px;color:var(--change-color);background:color-mix(in srgb, var(--change-color) 10%, transparent);border-radius:7px;flex-shrink:0;place-items:center;display:grid}.type-icon svg[data-v-7344a999],.card-action svg[data-v-7344a999]{width:14px;height:14px}.card-type[data-v-7344a999]{color:var(--viewer-card-title,#e2e8f0);font-size:12px;font-weight:600}.card-number[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:10px}.card-action[data-v-7344a999]{width:28px;height:28px;color:var(--ui-text-subtle,#64748b);cursor:pointer;border-radius:7px;flex-shrink:0;place-items:center;display:grid}.card-action[data-v-7344a999]:hover{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09)}.card-action[data-v-7344a999]:disabled{opacity:.35;cursor:wait}.card-action[data-v-7344a999]:focus-visible,.card-select[data-v-7344a999]:focus-visible{outline:2px solid var(--diff-active-border,#38bdf899);outline-offset:3px;border-radius:6px}.ignored-label[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);white-space:nowrap;font-size:10px}.card-content[data-v-7344a999]{cursor:pointer}.text-row[data-v-7344a999]{background:var(--viewer-card,#ffffff09);border-radius:7px;align-items:flex-start;gap:10px;margin-top:8px;padding:8px 10px;display:flex}.text-row--single[data-v-7344a999]{background:color-mix(in srgb, var(--change-color) 6%, transparent)}.text-label[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);flex-shrink:0;padding-top:1px;font-size:10px;line-height:20px}.card-text[data-v-7344a999]{min-width:0;color:var(--viewer-card-text,#cbd5e1);overflow-wrap:anywhere;white-space:pre-wrap;font-size:13px;line-height:1.65}.change-mark[data-v-7344a999]{background:color-mix(in srgb, var(--change-color) 16%, transparent);border-radius:2px;font-weight:600}.card-location[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);margin:8px 0 0;font-size:10px;line-height:14px}[data-v-c1f84581],[data-v-c1f84581]:before,[data-v-c1f84581]:after{box-sizing:border-box}button[data-v-c1f84581]{font:inherit;color:inherit;background:0 0;border:0;padding:0}h2[data-v-c1f84581],h3[data-v-c1f84581],p[data-v-c1f84581]{margin:0}svg[data-v-c1f84581]{vertical-align:middle;display:inline-block}.ocr-result-view[data-v-c1f84581]{flex-direction:column;height:100%;min-height:0;display:flex}.page-btn svg[data-v-c1f84581]{width:14px;height:14px}.ocr-diff-viewer[data-v-c1f84581]{min-height:0;color:var(--viewer-card-text,#cbd5e1);background:var(--viewer-bg,#0b1220);flex:1;font-family:Segoe UI,Microsoft YaHei,system-ui,sans-serif;display:flex}.viewer-main[data-v-c1f84581]{flex-direction:column;flex:1;min-width:0;display:flex}.compare-row[data-v-c1f84581]{background:var(--viewer-workspace,#080f1c);box-sizing:border-box;flex:1;gap:12px;min-height:0;padding:12px;display:flex;position:relative}.canvas-col[data-v-c1f84581]{border:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-panel,#111827);border-radius:10px;flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.canvas-info-bar[data-v-c1f84581]{height:45px;color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-toolbar,#111a2b);border-bottom:1px solid var(--viewer-border,#ffffff17);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:flex;overflow:hidden}.canvas-info-bar-left[data-v-c1f84581]{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.canvas-info-bar-right[data-v-c1f84581]{flex-shrink:0;align-items:center;gap:4px;margin-left:8px;display:flex}.page-num[data-v-c1f84581]{color:var(--ui-text-muted,#94a3b8);text-align:center;-webkit-user-select:none;user-select:none;min-width:50px;font-size:12px}.page-btn[data-v-c1f84581]{border:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-card,#ffffff09);width:24px;height:24px;color:var(--ui-text-muted,#94a3b8);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:10px;line-height:1;transition:background .15s,border-color .15s;display:flex}.page-btn[data-v-c1f84581]:hover:not(:disabled){color:#bfdbfe;background:#3b82f61f;border-color:#60a5fa52}.page-btn[data-v-c1f84581]:disabled{opacity:.35;cursor:default}.canvas-info-bar-left-tag[data-v-c1f84581]{color:#fff;background-color:#10b9812e;border:1px solid #34d39940;border-radius:6px;padding:2px 7px;font-size:12px;line-height:20px}.canvas-info-bar-left-tag.gray[data-v-c1f84581]{color:var(--viewer-card-text,#cbd5e1);background-color:#94a3b824;border-color:#94a3b833}.canvas-info-bar-left-filename[data-v-c1f84581]{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.canvas-scroll[data-v-c1f84581]{background:var(--viewer-scroll,#1a2230);flex:1;min-height:0;position:relative;overflow-y:scroll}.canvas-scroll--flip[data-v-c1f84581]{direction:rtl}.virtual-spacer[data-v-c1f84581]{direction:ltr;width:100%;position:relative}.viewport-canvas-stack[data-v-c1f84581]{direction:ltr;width:100%;position:sticky;top:0}.compare-canvas[data-v-c1f84581],.annotation-canvas[data-v-c1f84581]{width:100%;display:block;position:absolute;inset:0}.compare-canvas[data-v-c1f84581]{pointer-events:none}.annotation-canvas[data-v-c1f84581]{z-index:1}.line-svg[data-v-c1f84581]{pointer-events:none;position:absolute;top:0;left:0}.side-panel[data-v-c1f84581]{border-left:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-side,#0d1626);flex-direction:column;flex-shrink:0;width:clamp(300px,23vw,360px);min-height:0;display:flex;overflow:hidden}.review-header[data-v-c1f84581]{flex-shrink:0;padding:18px 16px 12px}.review-title-row[data-v-c1f84581]{justify-content:space-between;align-items:center;gap:12px;display:flex}.review-title-row h2[data-v-c1f84581]{color:var(--viewer-card-title,#e2e8f0);align-items:center;gap:8px;font-size:14px;font-weight:650;display:flex}.review-title-row svg[data-v-c1f84581]{width:16px;height:16px;color:var(--ui-text-subtle,#64748b)}.review-total[data-v-c1f84581]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:11px}.review-segments[data-v-c1f84581]{background:var(--viewer-card,#ffffff09);border-radius:9px;gap:3px;margin-top:16px;padding:3px;display:flex}.review-segments button[data-v-c1f84581]{min-width:0;color:var(--ui-text-subtle,#64748b);white-space:nowrap;cursor:pointer;border-radius:7px;flex:1;justify-content:center;align-items:center;gap:6px;padding:7px 4px;font-size:12px;transition:background .15s,color .15s;display:flex}.review-segments button[aria-pressed=true][data-v-c1f84581]{background:var(--viewer-side,#0d1626);color:var(--viewer-card-title,#e2e8f0);font-weight:600;box-shadow:0 1px 4px #00000014}.review-segments span[data-v-c1f84581]{font-variant-numeric:tabular-nums;opacity:.65;font-size:10px}.review-types[data-v-c1f84581]{border-bottom:1px solid var(--viewer-border,#ffffff17);flex-shrink:0;align-items:center;gap:4px;padding:0 12px 12px;display:flex}.review-type[data-v-c1f84581]{color:var(--ui-text-subtle,#64748b);white-space:nowrap;cursor:pointer;border-radius:6px;flex:1;justify-content:center;align-items:center;gap:4px;padding:5px 3px;font-size:11px;display:flex}.review-type span[data-v-c1f84581]{opacity:.65;font-variant-numeric:tabular-nums;font-size:10px}.review-type[data-v-c1f84581]:hover,.review-type[aria-pressed=true][data-v-c1f84581]{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09)}.review-type[aria-pressed=true][data-v-c1f84581]{font-weight:600}.side-panel[data-v-c1f84581] .diff-cards{overscroll-behavior:contain;scrollbar-gutter:stable;background:color-mix(in srgb, var(--viewer-card,#ffffff09) 38%, var(--viewer-side,#0d1626));flex:1;min-height:0;padding:14px 12px 16px;overflow-y:auto}.review-footer[data-v-c1f84581]{border-top:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-side,#0d1626);flex-shrink:0;align-items:center;gap:8px;padding:12px;display:flex}.review-footer button[data-v-c1f84581]{cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:7px;min-width:0;padding:9px 10px;font-size:12px;transition:background .15s;display:flex}.review-footer svg[data-v-c1f84581]{flex-shrink:0;width:14px;height:14px}.batch-ignore[data-v-c1f84581]{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09);flex:1}.batch-ignore span[data-v-c1f84581]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:10px}.batch-restore[data-v-c1f84581]{color:var(--ui-text-subtle,#64748b)}.review-footer button[data-v-c1f84581]:hover:not(:disabled){background:var(--diff-card-hover,#3b82f611);color:var(--viewer-card-title,#e2e8f0)}.review-footer button[data-v-c1f84581]:disabled{opacity:.35;cursor:default}.side-panel button[data-v-c1f84581]:focus-visible{outline:2px solid var(--diff-active-border,#38bdf899);outline-offset:2px}.review-empty[data-v-c1f84581]{text-align:center;min-height:0;color:var(--ui-text-subtle,#64748b);flex:1;padding:42px 20px;overflow-y:auto}.empty-symbol[data-v-c1f84581]{background:var(--viewer-card,#ffffff09);border-radius:14px;place-items:center;width:44px;height:44px;margin:0 auto 14px;display:grid}.empty-symbol svg[data-v-c1f84581]{width:22px;height:22px}.empty-symbol.is-passed[data-v-c1f84581]{color:var(--diff-insert-dot,#00a870);background:var(--diff-insert-bg,#34d3991a)}.review-empty h3[data-v-c1f84581]{color:var(--viewer-card-title,#e2e8f0);font-size:14px;font-weight:600}.review-empty p[data-v-c1f84581]{margin-top:8px;font-size:12px;line-height:1.6}.review-empty button[data-v-c1f84581]{color:var(--viewer-card-text,#cbd5e1);cursor:pointer;text-underline-offset:4px;margin-top:20px;font-size:12px;text-decoration:underline}.page-loading[data-v-c1f84581]{height:200px;color:var(--ui-text-muted,#94a3b8);justify-content:center;align-items:center;font-size:13px;display:flex}
|
|
1
|
+
[data-v-7344a999],[data-v-7344a999]:before,[data-v-7344a999]:after{box-sizing:border-box}button[data-v-7344a999]{font:inherit;color:inherit;background:0 0;border:0;padding:0}h2[data-v-7344a999],h3[data-v-7344a999],p[data-v-7344a999]{margin:0}svg[data-v-7344a999]{vertical-align:middle;display:inline-block}.diff-cards[data-v-7344a999]{flex-direction:column;gap:10px;display:flex}.diff-card[data-v-7344a999]{--change-color:var(--diff-modify-dot,#f80);border:1px solid var(--viewer-border,#ffffff17);background:var(--diff-card-bg,#ffffff09);border-radius:12px;flex-shrink:0;min-width:0;padding:10px 12px;transition:border-color .15s,box-shadow .15s}.diff-card--insert[data-v-7344a999]{--change-color:var(--diff-insert-dot,#00a870)}.diff-card--delete[data-v-7344a999]{--change-color:var(--diff-delete-dot,#e34d59)}.diff-card[data-v-7344a999]:hover{border-color:color-mix(in srgb, var(--viewer-card-text,#cbd5e1) 30%, transparent)}.diff-card.is-active[data-v-7344a999]{border-color:var(--diff-active-border,#38bdf899);box-shadow:0 0 0 2px color-mix(in srgb, var(--diff-active-border,#38bdf899) 10%, transparent)}.diff-card.is-ignored[data-v-7344a999]{--change-color:var(--ui-text-subtle,#64748b)}.card-heading[data-v-7344a999]{align-items:center;gap:6px;display:flex}.card-select[data-v-7344a999]{text-align:left;cursor:pointer;flex:1;align-items:center;gap:8px;min-width:0;display:flex}.type-icon[data-v-7344a999]{width:24px;height:24px;color:var(--change-color);background:color-mix(in srgb, var(--change-color) 10%, transparent);border-radius:7px;flex-shrink:0;place-items:center;display:grid}.type-icon svg[data-v-7344a999],.card-action svg[data-v-7344a999]{width:14px;height:14px}.card-type[data-v-7344a999]{color:var(--viewer-card-title,#e2e8f0);font-size:12px;font-weight:600}.card-number[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:10px}.card-action[data-v-7344a999]{width:28px;height:28px;color:var(--ui-text-subtle,#64748b);cursor:pointer;border-radius:7px;flex-shrink:0;place-items:center;display:grid}.card-action[data-v-7344a999]:hover{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09)}.card-action[data-v-7344a999]:disabled{opacity:.35;cursor:wait}.card-action[data-v-7344a999]:focus-visible,.card-select[data-v-7344a999]:focus-visible{outline:2px solid var(--diff-active-border,#38bdf899);outline-offset:3px;border-radius:6px}.ignored-label[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);white-space:nowrap;font-size:10px}.card-content[data-v-7344a999]{cursor:pointer}.text-row[data-v-7344a999]{background:var(--viewer-card,#ffffff09);border-radius:7px;align-items:flex-start;gap:10px;margin-top:8px;padding:8px 10px;display:flex}.text-row--single[data-v-7344a999]{background:color-mix(in srgb, var(--change-color) 6%, transparent)}.text-label[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);flex-shrink:0;padding-top:1px;font-size:10px;line-height:20px}.card-text[data-v-7344a999]{min-width:0;color:var(--viewer-card-text,#cbd5e1);overflow-wrap:anywhere;white-space:pre-wrap;font-size:13px;line-height:1.65}.change-mark[data-v-7344a999]{background:color-mix(in srgb, var(--change-color) 16%, transparent);border-radius:2px;font-weight:600}.card-location[data-v-7344a999]{color:var(--ui-text-subtle,#64748b);margin:8px 0 0;font-size:10px;line-height:14px}[data-v-9aa39b2f],[data-v-9aa39b2f]:before,[data-v-9aa39b2f]:after{box-sizing:border-box}button[data-v-9aa39b2f]{font:inherit;color:inherit;background:0 0;border:0;padding:0}h2[data-v-9aa39b2f],h3[data-v-9aa39b2f],p[data-v-9aa39b2f]{margin:0}svg[data-v-9aa39b2f]{vertical-align:middle;display:inline-block}.ocr-result-view[data-v-9aa39b2f]{flex-direction:column;height:100%;min-height:0;display:flex}.page-btn svg[data-v-9aa39b2f]{width:14px;height:14px}.ocr-diff-viewer[data-v-9aa39b2f]{min-height:0;color:var(--viewer-card-text,#cbd5e1);background:var(--viewer-bg,#0b1220);flex:1;font-family:Segoe UI,Microsoft YaHei,system-ui,sans-serif;display:flex}.viewer-main[data-v-9aa39b2f]{flex-direction:column;flex:1;min-width:0;display:flex}.preview-toolbar[data-v-9aa39b2f]{background:var(--viewer-workspace,#080f1c);flex-shrink:0;justify-content:flex-end;padding:8px 12px 0;display:flex}.sync-scroll-toggle[data-v-9aa39b2f]{cursor:pointer;align-items:center;gap:8px;min-height:28px;font-size:12px;display:inline-flex}.sync-scroll-toggle[data-v-9aa39b2f]:focus-visible{outline:2px solid var(--viewer-accent,#60a5fa);outline-offset:4px;border-radius:4px}.sync-scroll-track[data-v-9aa39b2f]{background:var(--ui-text-muted,#64748b);border-radius:9px;align-items:center;width:30px;height:18px;padding:2px;display:inline-flex}.sync-scroll-track>span[data-v-9aa39b2f]{background:#fff;border-radius:50%;width:14px;height:14px}.sync-scroll-toggle[aria-checked=true] .sync-scroll-track[data-v-9aa39b2f]{background:var(--viewer-accent,#3b82f6)}.sync-scroll-toggle[aria-checked=true] .sync-scroll-track>span[data-v-9aa39b2f]{transform:translate(12px)}.compare-row[data-v-9aa39b2f]{background:var(--viewer-workspace,#080f1c);box-sizing:border-box;flex:1;gap:12px;min-height:0;padding:12px;display:flex;position:relative}.canvas-col[data-v-9aa39b2f]{border:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-panel,#111827);border-radius:10px;flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.canvas-info-bar[data-v-9aa39b2f]{height:45px;color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-toolbar,#111a2b);border-bottom:1px solid var(--viewer-border,#ffffff17);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:flex;overflow:hidden}.canvas-info-bar-left[data-v-9aa39b2f]{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.canvas-info-bar-right[data-v-9aa39b2f]{flex-shrink:0;align-items:center;gap:4px;margin-left:8px;display:flex}.page-num[data-v-9aa39b2f]{color:var(--ui-text-muted,#94a3b8);text-align:center;-webkit-user-select:none;user-select:none;min-width:50px;font-size:12px}.page-btn[data-v-9aa39b2f]{border:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-card,#ffffff09);width:24px;height:24px;color:var(--ui-text-muted,#94a3b8);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:10px;line-height:1;transition:background .15s,border-color .15s;display:flex}.page-btn[data-v-9aa39b2f]:hover:not(:disabled){color:#bfdbfe;background:#3b82f61f;border-color:#60a5fa52}.page-btn[data-v-9aa39b2f]:disabled{opacity:.35;cursor:default}.canvas-info-bar-left-tag[data-v-9aa39b2f]{color:#fff;background-color:#10b9812e;border:1px solid #34d39940;border-radius:6px;padding:2px 7px;font-size:12px;line-height:20px}.canvas-info-bar-left-tag.gray[data-v-9aa39b2f]{color:var(--viewer-card-text,#cbd5e1);background-color:#94a3b824;border-color:#94a3b833}.canvas-info-bar-left-filename[data-v-9aa39b2f]{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.canvas-scroll[data-v-9aa39b2f]{background:var(--viewer-scroll,#1a2230);flex:1;min-height:0;position:relative;overflow-y:scroll}.canvas-scroll--flip[data-v-9aa39b2f]{direction:rtl}.virtual-spacer[data-v-9aa39b2f]{direction:ltr;width:100%;position:relative}.viewport-canvas-stack[data-v-9aa39b2f]{direction:ltr;width:100%;position:sticky;top:0}.compare-canvas[data-v-9aa39b2f],.annotation-canvas[data-v-9aa39b2f]{width:100%;display:block;position:absolute;inset:0}.compare-canvas[data-v-9aa39b2f]{pointer-events:none}.annotation-canvas[data-v-9aa39b2f]{z-index:1}.line-svg[data-v-9aa39b2f]{pointer-events:none;position:absolute;top:0;left:0}.side-panel[data-v-9aa39b2f]{border-left:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-side,#0d1626);flex-direction:column;flex-shrink:0;width:clamp(300px,23vw,360px);min-height:0;display:flex;overflow:hidden}.review-header[data-v-9aa39b2f]{flex-shrink:0;padding:18px 16px 12px}.review-title-row[data-v-9aa39b2f]{justify-content:space-between;align-items:center;gap:12px;display:flex}.review-title-row h2[data-v-9aa39b2f]{color:var(--viewer-card-title,#e2e8f0);align-items:center;gap:8px;font-size:14px;font-weight:650;display:flex}.review-title-row svg[data-v-9aa39b2f]{width:16px;height:16px;color:var(--ui-text-subtle,#64748b)}.review-total[data-v-9aa39b2f]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:11px}.review-segments[data-v-9aa39b2f]{background:var(--viewer-card,#ffffff09);border-radius:9px;gap:3px;margin-top:16px;padding:3px;display:flex}.review-segments button[data-v-9aa39b2f]{min-width:0;color:var(--ui-text-subtle,#64748b);white-space:nowrap;cursor:pointer;border-radius:7px;flex:1;justify-content:center;align-items:center;gap:6px;padding:7px 4px;font-size:12px;transition:background .15s,color .15s;display:flex}.review-segments button[aria-pressed=true][data-v-9aa39b2f]{background:var(--viewer-side,#0d1626);color:var(--viewer-card-title,#e2e8f0);font-weight:600;box-shadow:0 1px 4px #00000014}.review-segments span[data-v-9aa39b2f]{font-variant-numeric:tabular-nums;opacity:.65;font-size:10px}.review-types[data-v-9aa39b2f]{border-bottom:1px solid var(--viewer-border,#ffffff17);flex-shrink:0;align-items:center;gap:4px;padding:0 12px 12px;display:flex}.review-type[data-v-9aa39b2f]{color:var(--ui-text-subtle,#64748b);white-space:nowrap;cursor:pointer;border-radius:6px;flex:1;justify-content:center;align-items:center;gap:4px;padding:5px 3px;font-size:11px;display:flex}.review-type span[data-v-9aa39b2f]{opacity:.65;font-variant-numeric:tabular-nums;font-size:10px}.review-type[data-v-9aa39b2f]:hover,.review-type[aria-pressed=true][data-v-9aa39b2f]{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09)}.review-type[aria-pressed=true][data-v-9aa39b2f]{font-weight:600}.side-panel[data-v-9aa39b2f] .diff-cards{overscroll-behavior:contain;scrollbar-gutter:stable;background:color-mix(in srgb, var(--viewer-card,#ffffff09) 38%, var(--viewer-side,#0d1626));flex:1;min-height:0;padding:14px 12px 16px;overflow-y:auto}.review-footer[data-v-9aa39b2f]{border-top:1px solid var(--viewer-border,#ffffff17);background:var(--viewer-side,#0d1626);flex-shrink:0;align-items:center;gap:8px;padding:12px;display:flex}.review-footer button[data-v-9aa39b2f]{cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:7px;min-width:0;padding:9px 10px;font-size:12px;transition:background .15s;display:flex}.review-footer svg[data-v-9aa39b2f]{flex-shrink:0;width:14px;height:14px}.batch-ignore[data-v-9aa39b2f]{color:var(--viewer-card-title,#e2e8f0);background:var(--viewer-card,#ffffff09);flex:1}.batch-ignore span[data-v-9aa39b2f]{color:var(--ui-text-subtle,#64748b);font-variant-numeric:tabular-nums;font-size:10px}.batch-restore[data-v-9aa39b2f]{color:var(--ui-text-subtle,#64748b)}.review-footer button[data-v-9aa39b2f]:hover:not(:disabled){background:var(--diff-card-hover,#3b82f611);color:var(--viewer-card-title,#e2e8f0)}.review-footer button[data-v-9aa39b2f]:disabled{opacity:.35;cursor:default}.side-panel button[data-v-9aa39b2f]:focus-visible{outline:2px solid var(--diff-active-border,#38bdf899);outline-offset:2px}.review-empty[data-v-9aa39b2f]{text-align:center;min-height:0;color:var(--ui-text-subtle,#64748b);flex:1;padding:42px 20px;overflow-y:auto}.empty-symbol[data-v-9aa39b2f]{background:var(--viewer-card,#ffffff09);border-radius:14px;place-items:center;width:44px;height:44px;margin:0 auto 14px;display:grid}.empty-symbol svg[data-v-9aa39b2f]{width:22px;height:22px}.empty-symbol.is-passed[data-v-9aa39b2f]{color:var(--diff-insert-dot,#00a870);background:var(--diff-insert-bg,#34d3991a)}.review-empty h3[data-v-9aa39b2f]{color:var(--viewer-card-title,#e2e8f0);font-size:14px;font-weight:600}.review-empty p[data-v-9aa39b2f]{margin-top:8px;font-size:12px;line-height:1.6}.review-empty button[data-v-9aa39b2f]{color:var(--viewer-card-text,#cbd5e1);cursor:pointer;text-underline-offset:4px;margin-top:20px;font-size:12px;text-decoration:underline}.page-loading[data-v-9aa39b2f]{height:200px;color:var(--ui-text-muted,#94a3b8);justify-content:center;align-items:center;font-size:13px;display:flex}
|
|
2
2
|
/*$vite$:1*/
|
package/dist/ocr-result-view.js
CHANGED
|
@@ -61,13 +61,13 @@ function ae(e, t) {
|
|
|
61
61
|
var k = d({
|
|
62
62
|
name: "lucide-plus",
|
|
63
63
|
render: ae
|
|
64
|
-
}),
|
|
64
|
+
}), oe = {
|
|
65
65
|
viewBox: "0 0 24 24",
|
|
66
66
|
width: "1.2em",
|
|
67
67
|
height: "1.2em"
|
|
68
68
|
};
|
|
69
|
-
function
|
|
70
|
-
return g(), i("svg",
|
|
69
|
+
function se(e, t) {
|
|
70
|
+
return g(), i("svg", oe, [...t[0] ||= [a("path", {
|
|
71
71
|
fill: "none",
|
|
72
72
|
stroke: "currentColor",
|
|
73
73
|
"stroke-linecap": "round",
|
|
@@ -76,16 +76,16 @@ function j(e, t) {
|
|
|
76
76
|
d: "M5 12h14"
|
|
77
77
|
}, null, -1)]]);
|
|
78
78
|
}
|
|
79
|
-
var
|
|
79
|
+
var A = d({
|
|
80
80
|
name: "lucide-minus",
|
|
81
|
-
render:
|
|
82
|
-
}),
|
|
81
|
+
render: se
|
|
82
|
+
}), j = {
|
|
83
83
|
viewBox: "0 0 24 24",
|
|
84
84
|
width: "1.2em",
|
|
85
85
|
height: "1.2em"
|
|
86
86
|
};
|
|
87
|
-
function
|
|
88
|
-
return g(), i("svg",
|
|
87
|
+
function M(e, t) {
|
|
88
|
+
return g(), i("svg", j, [...t[0] ||= [a("path", {
|
|
89
89
|
fill: "none",
|
|
90
90
|
stroke: "currentColor",
|
|
91
91
|
"stroke-linecap": "round",
|
|
@@ -94,28 +94,28 @@ function N(e, t) {
|
|
|
94
94
|
d: "M8 3L4 7l4 4M4 7h16m-4 14l4-4l-4-4m4 4H4"
|
|
95
95
|
}, null, -1)]]);
|
|
96
96
|
}
|
|
97
|
-
var
|
|
97
|
+
var ce = d({
|
|
98
98
|
name: "lucide-arrow-left-right",
|
|
99
|
-
render:
|
|
100
|
-
}),
|
|
99
|
+
render: M
|
|
100
|
+
}), N = ["data-diff-index"], P = { class: "card-heading" }, le = [
|
|
101
101
|
"aria-label",
|
|
102
102
|
"aria-pressed",
|
|
103
103
|
"onClick"
|
|
104
|
-
],
|
|
104
|
+
], ue = {
|
|
105
105
|
class: "type-icon",
|
|
106
106
|
"aria-hidden": "true"
|
|
107
|
-
},
|
|
107
|
+
}, de = { class: "card-type" }, fe = { class: "card-number" }, pe = {
|
|
108
108
|
key: 0,
|
|
109
109
|
class: "ignored-label"
|
|
110
|
-
},
|
|
110
|
+
}, F = [
|
|
111
111
|
"disabled",
|
|
112
112
|
"title",
|
|
113
113
|
"aria-label",
|
|
114
114
|
"onClick"
|
|
115
|
-
],
|
|
115
|
+
], I = ["onClick"], me = { class: "text-row" }, L = { class: "card-text" }, R = { class: "text-row" }, he = { class: "card-text" }, ge = {
|
|
116
116
|
key: 1,
|
|
117
117
|
class: "text-row text-row--single"
|
|
118
|
-
},
|
|
118
|
+
}, _e = { class: "card-text" }, ve = { class: "card-location" }, ye = /*@__PURE__*/ l({
|
|
119
119
|
__name: "DiffCards",
|
|
120
120
|
props: {
|
|
121
121
|
diffDetail: {},
|
|
@@ -202,18 +202,18 @@ var se = d({
|
|
|
202
202
|
ignore: (e) => {
|
|
203
203
|
!l.readonly && !o.busy && u("ignore", c.data.diffId, e);
|
|
204
204
|
}
|
|
205
|
-
}, () => [a("div",
|
|
205
|
+
}, () => [a("div", P, [
|
|
206
206
|
a("button", {
|
|
207
207
|
class: "card-select",
|
|
208
208
|
"aria-label": `定位第 ${c.idx + 1} 处差异,${te(c.data)}`,
|
|
209
209
|
"aria-pressed": o.activeIndex === c.idx,
|
|
210
210
|
onClick: (e) => u("select", c.idx)
|
|
211
211
|
}, [
|
|
212
|
-
a("span",
|
|
213
|
-
a("span",
|
|
214
|
-
a("span",
|
|
215
|
-
], 8,
|
|
216
|
-
c.data.ignored ? (g(), i("span",
|
|
212
|
+
a("span", ue, [c.type === "insert" ? (g(), n(x(k), { key: 0 })) : c.type === "delete" ? (g(), n(x(A), { key: 1 })) : (g(), n(x(ce), { key: 2 }))]),
|
|
213
|
+
a("span", de, b(f(c.data, c.type === "modify" ? "修改" : c.type === "delete" ? "删除" : "新增")), 1),
|
|
214
|
+
a("span", fe, b(String(c.idx + 1).padStart(2, "0")), 1)
|
|
215
|
+
], 8, le),
|
|
216
|
+
c.data.ignored ? (g(), i("span", pe, "已忽略")) : r("", !0),
|
|
217
217
|
l.readonly ? r("", !0) : (g(), i("button", {
|
|
218
218
|
key: 1,
|
|
219
219
|
class: "card-action",
|
|
@@ -227,29 +227,29 @@ var se = d({
|
|
|
227
227
|
})) : (g(), n(x(re), {
|
|
228
228
|
key: 1,
|
|
229
229
|
"aria-hidden": "true"
|
|
230
|
-
}))], 8,
|
|
230
|
+
}))], 8, F))
|
|
231
231
|
]), a("div", {
|
|
232
232
|
class: "card-content",
|
|
233
233
|
onClick: (e) => u("select", c.idx)
|
|
234
|
-
}, [c.data.type === "modify" ? (g(), i(e, { key: 0 }, [a("div",
|
|
234
|
+
}, [c.data.type === "modify" ? (g(), i(e, { key: 0 }, [a("div", me, [s[0] ||= a("span", { class: "text-label" }, "标准", -1), a("span", L, [(g(!0), i(e, null, v(S(c.data.delChars, c.data.sourceChangeRanges), (e, t) => (g(), i("span", {
|
|
235
235
|
key: t,
|
|
236
236
|
class: p({ "change-mark": e.changed })
|
|
237
|
-
}, b(e.text), 3))), 128))])]), a("div",
|
|
237
|
+
}, b(e.text), 3))), 128))])]), a("div", R, [s[1] ||= a("span", { class: "text-label" }, "比对", -1), a("span", he, [(g(!0), i(e, null, v(S(c.data.insChars, c.data.targetChangeRanges), (e, t) => (g(), i("span", {
|
|
238
238
|
key: t,
|
|
239
239
|
class: p({ "change-mark": e.changed })
|
|
240
|
-
}, b(e.text), 3))), 128))])])], 64)) : (g(), i("div",
|
|
240
|
+
}, b(e.text), 3))), 128))])])], 64)) : (g(), i("div", ge, [a("span", _e, b(c.data.chars || "表格结构变更"), 1)])), a("p", ve, b(te(c.data)), 1)], 8, I)], !0)], 10, N))), 128))], 512));
|
|
241
241
|
}
|
|
242
242
|
}), z = (e, t) => {
|
|
243
243
|
let n = e.__vccOpts || e;
|
|
244
244
|
for (let [e, r] of t) n[e] = r;
|
|
245
245
|
return n;
|
|
246
|
-
}, be = /*#__PURE__*/ z(ye, [["__scopeId", "data-v-7344a999"]]),
|
|
246
|
+
}, be = /*#__PURE__*/ z(ye, [["__scopeId", "data-v-7344a999"]]), B = {
|
|
247
247
|
viewBox: "0 0 24 24",
|
|
248
248
|
width: "1.2em",
|
|
249
249
|
height: "1.2em"
|
|
250
250
|
};
|
|
251
|
-
function
|
|
252
|
-
return g(), i("svg",
|
|
251
|
+
function xe(e, t) {
|
|
252
|
+
return g(), i("svg", B, [...t[0] ||= [a("path", {
|
|
253
253
|
fill: "none",
|
|
254
254
|
stroke: "currentColor",
|
|
255
255
|
"stroke-linecap": "round",
|
|
@@ -258,16 +258,16 @@ function Se(e, t) {
|
|
|
258
258
|
d: "M20 6L9 17l-5-5"
|
|
259
259
|
}, null, -1)]]);
|
|
260
260
|
}
|
|
261
|
-
var
|
|
261
|
+
var Se = d({
|
|
262
262
|
name: "lucide-check",
|
|
263
|
-
render:
|
|
264
|
-
}),
|
|
263
|
+
render: xe
|
|
264
|
+
}), Ce = {
|
|
265
265
|
viewBox: "0 0 24 24",
|
|
266
266
|
width: "1.2em",
|
|
267
267
|
height: "1.2em"
|
|
268
268
|
};
|
|
269
|
-
function
|
|
270
|
-
return g(), i("svg",
|
|
269
|
+
function we(e, t) {
|
|
270
|
+
return g(), i("svg", Ce, [...t[0] ||= [a("path", {
|
|
271
271
|
fill: "none",
|
|
272
272
|
stroke: "currentColor",
|
|
273
273
|
"stroke-linecap": "round",
|
|
@@ -276,16 +276,16 @@ function V(e, t) {
|
|
|
276
276
|
d: "M2 5h20M6 12h12m-9 7h6"
|
|
277
277
|
}, null, -1)]]);
|
|
278
278
|
}
|
|
279
|
-
var
|
|
279
|
+
var Te = d({
|
|
280
280
|
name: "lucide-list-filter",
|
|
281
|
-
render:
|
|
282
|
-
}),
|
|
281
|
+
render: we
|
|
282
|
+
}), Ee = {
|
|
283
283
|
viewBox: "0 0 24 24",
|
|
284
284
|
width: "1.2em",
|
|
285
285
|
height: "1.2em"
|
|
286
286
|
};
|
|
287
|
-
function
|
|
288
|
-
return g(), i("svg",
|
|
287
|
+
function V(e, t) {
|
|
288
|
+
return g(), i("svg", Ee, [...t[0] ||= [a("path", {
|
|
289
289
|
fill: "none",
|
|
290
290
|
stroke: "currentColor",
|
|
291
291
|
"stroke-linecap": "round",
|
|
@@ -294,16 +294,16 @@ function Te(e, t) {
|
|
|
294
294
|
d: "m11 17l-5-5l5-5m7 10l-5-5l5-5"
|
|
295
295
|
}, null, -1)]]);
|
|
296
296
|
}
|
|
297
|
-
var
|
|
297
|
+
var De = d({
|
|
298
298
|
name: "lucide-chevrons-left",
|
|
299
|
-
render:
|
|
300
|
-
}),
|
|
299
|
+
render: V
|
|
300
|
+
}), H = {
|
|
301
301
|
viewBox: "0 0 24 24",
|
|
302
302
|
width: "1.2em",
|
|
303
303
|
height: "1.2em"
|
|
304
304
|
};
|
|
305
|
-
function
|
|
306
|
-
return g(), i("svg",
|
|
305
|
+
function U(e, t) {
|
|
306
|
+
return g(), i("svg", H, [...t[0] ||= [a("path", {
|
|
307
307
|
fill: "none",
|
|
308
308
|
stroke: "currentColor",
|
|
309
309
|
"stroke-linecap": "round",
|
|
@@ -312,16 +312,16 @@ function W(e, t) {
|
|
|
312
312
|
d: "m15 18l-6-6l6-6"
|
|
313
313
|
}, null, -1)]]);
|
|
314
314
|
}
|
|
315
|
-
var
|
|
315
|
+
var Oe = d({
|
|
316
316
|
name: "lucide-chevron-left",
|
|
317
|
-
render:
|
|
318
|
-
}),
|
|
317
|
+
render: U
|
|
318
|
+
}), ke = {
|
|
319
319
|
viewBox: "0 0 24 24",
|
|
320
320
|
width: "1.2em",
|
|
321
321
|
height: "1.2em"
|
|
322
322
|
};
|
|
323
|
-
function
|
|
324
|
-
return g(), i("svg",
|
|
323
|
+
function W(e, t) {
|
|
324
|
+
return g(), i("svg", ke, [...t[0] ||= [a("path", {
|
|
325
325
|
fill: "none",
|
|
326
326
|
stroke: "currentColor",
|
|
327
327
|
"stroke-linecap": "round",
|
|
@@ -332,13 +332,13 @@ function ke(e, t) {
|
|
|
332
332
|
}
|
|
333
333
|
var Ae = d({
|
|
334
334
|
name: "lucide-chevron-right",
|
|
335
|
-
render:
|
|
335
|
+
render: W
|
|
336
336
|
}), G = {
|
|
337
337
|
viewBox: "0 0 24 24",
|
|
338
338
|
width: "1.2em",
|
|
339
339
|
height: "1.2em"
|
|
340
340
|
};
|
|
341
|
-
function
|
|
341
|
+
function je(e, t) {
|
|
342
342
|
return g(), i("svg", G, [...t[0] ||= [a("path", {
|
|
343
343
|
fill: "none",
|
|
344
344
|
stroke: "currentColor",
|
|
@@ -348,32 +348,35 @@ function K(e, t) {
|
|
|
348
348
|
d: "m6 17l5-5l-5-5m7 10l5-5l-5-5"
|
|
349
349
|
}, null, -1)]]);
|
|
350
350
|
}
|
|
351
|
-
var
|
|
351
|
+
var Me = d({
|
|
352
352
|
name: "lucide-chevrons-right",
|
|
353
|
-
render:
|
|
354
|
-
}),
|
|
353
|
+
render: je
|
|
354
|
+
}), Ne = { class: "ocr-result-view" }, Pe = { class: "ocr-diff-viewer" }, Fe = { class: "viewer-main" }, Ie = {
|
|
355
|
+
key: 0,
|
|
356
|
+
class: "preview-toolbar"
|
|
357
|
+
}, Le = ["aria-checked"], Re = { class: "canvas-col" }, ze = {
|
|
355
358
|
key: 0,
|
|
356
359
|
class: "canvas-info-bar"
|
|
357
|
-
},
|
|
360
|
+
}, Be = { class: "canvas-info-bar-left" }, Ve = { class: "canvas-info-bar-left-filename" }, He = { class: "canvas-info-bar-right" }, Ue = ["disabled"], We = ["disabled"], Ge = { class: "page-num" }, Ke = ["disabled"], qe = ["disabled"], Je = { class: "canvas-col" }, Ye = {
|
|
358
361
|
key: 0,
|
|
359
362
|
class: "canvas-info-bar"
|
|
360
|
-
},
|
|
361
|
-
key:
|
|
363
|
+
}, Xe = { class: "canvas-info-bar-left" }, Ze = { class: "canvas-info-bar-left-filename" }, Qe = { class: "canvas-info-bar-right" }, $e = ["disabled"], et = ["disabled"], tt = { class: "page-num" }, nt = ["disabled"], rt = ["disabled"], it = {
|
|
364
|
+
key: 2,
|
|
362
365
|
class: "page-loading"
|
|
363
|
-
},
|
|
366
|
+
}, at = {
|
|
364
367
|
class: "side-panel",
|
|
365
368
|
"aria-label": "差异审阅"
|
|
366
|
-
},
|
|
369
|
+
}, ot = { class: "review-header" }, st = { class: "review-title-row" }, ct = { class: "review-total" }, lt = {
|
|
367
370
|
class: "review-segments",
|
|
368
371
|
"aria-label": "差异处理状态"
|
|
369
|
-
},
|
|
372
|
+
}, ut = ["aria-pressed", "onClick"], dt = { key: 0 }, ft = {
|
|
370
373
|
class: "review-types",
|
|
371
374
|
"aria-label": "差异类型"
|
|
372
|
-
},
|
|
375
|
+
}, pt = ["aria-pressed", "onClick"], mt = {
|
|
373
376
|
key: 0,
|
|
374
377
|
class: "review-empty",
|
|
375
378
|
role: "status"
|
|
376
|
-
},
|
|
379
|
+
}, ht = { class: "empty-symbol is-passed" }, gt = { class: "empty-symbol" }, _t = ["aria-busy"], vt = ["disabled"], yt = { key: 0 }, bt = ["disabled"], xt = 5, St = 16, Ct = 4, wt = /*#__PURE__*/ z(/* @__PURE__ */ l({
|
|
377
380
|
__name: "OcrDiffViewer",
|
|
378
381
|
props: {
|
|
379
382
|
diffDetail: {},
|
|
@@ -401,7 +404,10 @@ var je = d({
|
|
|
401
404
|
"image-error"
|
|
402
405
|
],
|
|
403
406
|
setup(l, { expose: d, emit: p }) {
|
|
404
|
-
let w = l, T = p, E = t(() => w.review), D = _("pending"), O = t(() => ne(w.diffDetail,
|
|
407
|
+
let w = l, T = p, E = t(() => w.review), D = _("pending"), O = t(() => ne(w.diffDetail, M.value, D.value)), ae = t(() => new Set(O.value.map((e) => e.idx))), k = _(!1), oe = "src", se = {
|
|
408
|
+
src: null,
|
|
409
|
+
tgt: null
|
|
410
|
+
}, A = t(() => {
|
|
405
411
|
let e = [], t = [], n = 0, r = 0, i = 0;
|
|
406
412
|
for (let a = 0; a < w.diffDetail.length; a++) {
|
|
407
413
|
let o = w.diffDetail[a];
|
|
@@ -486,13 +492,13 @@ var je = d({
|
|
|
486
492
|
insertCount: r,
|
|
487
493
|
modifyCount: i
|
|
488
494
|
};
|
|
489
|
-
}),
|
|
490
|
-
all:
|
|
491
|
-
modify:
|
|
492
|
-
delete:
|
|
493
|
-
insert:
|
|
494
|
-
})),
|
|
495
|
-
function
|
|
495
|
+
}), j = _(0), M = _("all"), ce = t(() => ({
|
|
496
|
+
all: A.value.deleteCount + A.value.insertCount + A.value.modifyCount,
|
|
497
|
+
modify: A.value.modifyCount,
|
|
498
|
+
delete: A.value.deleteCount,
|
|
499
|
+
insert: A.value.insertCount
|
|
500
|
+
})), N = _(0), P = _(0), le = _(), ue = _(), de = _(), fe = _(), pe = _(), F = _(), I = _(), me = _(), L = _([]), R = _([]), he = _(1), ge = _(1), _e = _(1), ve = _(1), ye = Math.SQRT2, z = /* @__PURE__ */ new Map(), B = /* @__PURE__ */ new Map(), xe = /* @__PURE__ */ new Map(), Ce = /* @__PURE__ */ new Set(), we = [], Ee = [], V = 0, H = 0, U = 0, ke = 0, W = 0, G = null, je = !1, wt = !1, Tt, K = !1, Et = [];
|
|
501
|
+
function Dt(e) {
|
|
496
502
|
let t = /* @__PURE__ */ new Map();
|
|
497
503
|
for (let n of e) {
|
|
498
504
|
let e = t.get(n.pageIndex);
|
|
@@ -500,34 +506,34 @@ var je = d({
|
|
|
500
506
|
}
|
|
501
507
|
return t;
|
|
502
508
|
}
|
|
503
|
-
let
|
|
509
|
+
let Ot = t(() => Dt(A.value.srcBoxes)), kt = t(() => Dt(A.value.tgtBoxes));
|
|
504
510
|
function q(e) {
|
|
505
511
|
return e === "src" ? w.sourcePages : w.targetPages;
|
|
506
512
|
}
|
|
507
513
|
function J(e) {
|
|
508
|
-
return e === "src" ?
|
|
514
|
+
return e === "src" ? L.value : R.value;
|
|
509
515
|
}
|
|
510
516
|
function Y(e) {
|
|
511
|
-
return e === "src" ?
|
|
512
|
-
}
|
|
513
|
-
function Tt(e) {
|
|
514
|
-
return e === "src" ? ce.value : le.value;
|
|
517
|
+
return e === "src" ? F.value : I.value;
|
|
515
518
|
}
|
|
516
|
-
function
|
|
519
|
+
function At(e) {
|
|
517
520
|
return e === "src" ? ue.value : de.value;
|
|
518
521
|
}
|
|
519
|
-
function
|
|
520
|
-
|
|
522
|
+
function jt(e) {
|
|
523
|
+
return e === "src" ? fe.value : pe.value;
|
|
524
|
+
}
|
|
525
|
+
function Mt(e) {
|
|
526
|
+
let t = z.get(e.imageUrl);
|
|
521
527
|
if (t) return t;
|
|
522
528
|
if (e.width && e.height) return {
|
|
523
529
|
width: e.width,
|
|
524
530
|
height: e.height
|
|
525
531
|
};
|
|
526
532
|
}
|
|
527
|
-
function
|
|
528
|
-
let n = e.map(
|
|
533
|
+
function Nt(e, t) {
|
|
534
|
+
let n = e.map(Mt).find(Boolean), r = n ? n.height / n.width : ye, i = [], a = 0;
|
|
529
535
|
for (let n of e) {
|
|
530
|
-
let e =
|
|
536
|
+
let e = Mt(n), o = e ? e.height / e.width : r, s = Math.max(1, Math.round(t * o));
|
|
531
537
|
i.push({
|
|
532
538
|
top: a,
|
|
533
539
|
width: t,
|
|
@@ -535,17 +541,17 @@ var je = d({
|
|
|
535
541
|
naturalWidth: e?.width ?? t,
|
|
536
542
|
naturalHeight: e?.height ?? s,
|
|
537
543
|
measured: !!e
|
|
538
|
-
}), a += s +
|
|
544
|
+
}), a += s + xt;
|
|
539
545
|
}
|
|
540
546
|
return i;
|
|
541
547
|
}
|
|
542
|
-
function
|
|
548
|
+
function Pt(e, t) {
|
|
543
549
|
if (e.length === 0) return 0;
|
|
544
550
|
let n = 0, r = e.length - 1;
|
|
545
551
|
for (; n <= r;) {
|
|
546
552
|
let i = Math.floor((n + r) / 2), a = e[i];
|
|
547
553
|
if (t < a.top) r = i - 1;
|
|
548
|
-
else if (t >= a.top + a.height +
|
|
554
|
+
else if (t >= a.top + a.height + xt) n = i + 1;
|
|
549
555
|
else return i;
|
|
550
556
|
}
|
|
551
557
|
return Math.max(0, Math.min(e.length - 1, n));
|
|
@@ -553,104 +559,104 @@ var je = d({
|
|
|
553
559
|
function X(e, t = !1) {
|
|
554
560
|
let n = Y(e);
|
|
555
561
|
if (!n || n.clientWidth <= 0) return;
|
|
556
|
-
let r = J(e), i = n.scrollTop, a = r.length > 0 ?
|
|
557
|
-
if (e === "src" ? (
|
|
558
|
-
let
|
|
562
|
+
let r = J(e), i = n.scrollTop, a = r.length > 0 ? Pt(r, i) : 0, o = r[a], s = o ? Math.max(0, Math.min(1, (i - o.top) / o.height)) : 0, c = Nt(q(e), n.clientWidth), l = c.length > 0 ? c[c.length - 1].top + c[c.length - 1].height : 1;
|
|
563
|
+
if (e === "src" ? (L.value = c, he.value = l, _e.value = Math.max(1, n.clientHeight)) : (R.value = c, ge.value = l, ve.value = Math.max(1, n.clientHeight)), t && o && c[a]) {
|
|
564
|
+
let t = c[a].top + c[a].height * s;
|
|
559
565
|
f(() => {
|
|
560
|
-
|
|
566
|
+
Yt(e, t);
|
|
561
567
|
});
|
|
562
568
|
}
|
|
563
569
|
Q(e);
|
|
564
570
|
}
|
|
565
|
-
function
|
|
566
|
-
for (;
|
|
571
|
+
function Ft() {
|
|
572
|
+
for (; H < Ct && Et.length > 0;) Et.shift()?.();
|
|
567
573
|
}
|
|
568
|
-
function
|
|
574
|
+
function It(e) {
|
|
569
575
|
for (let t of ["src", "tgt"]) {
|
|
570
|
-
let n = q(t), r =
|
|
576
|
+
let n = q(t), r = Vt(t);
|
|
571
577
|
if (r) {
|
|
572
578
|
let t = Math.max(0, r.start - 1), i = Math.min(n.length - 1, r.end + 1);
|
|
573
579
|
for (let r = t; r <= i; r++) if (n[r]?.imageUrl === e) return !0;
|
|
574
580
|
}
|
|
575
581
|
}
|
|
576
|
-
let t = w.diffDetail[
|
|
582
|
+
let t = w.diffDetail[j.value];
|
|
577
583
|
return !(!t || w.sourcePages[t.srcPage]?.imageUrl !== e && w.targetPages[t.tgtPage]?.imageUrl !== e);
|
|
578
584
|
}
|
|
579
|
-
function
|
|
585
|
+
function Lt(e) {
|
|
580
586
|
return new Promise((t, n) => {
|
|
581
|
-
|
|
582
|
-
if (!
|
|
587
|
+
Et.push(() => {
|
|
588
|
+
if (!It(e)) {
|
|
583
589
|
let t = /* @__PURE__ */ Error(`已取消非可见页面加载: ${e}`);
|
|
584
590
|
t.name = "AbortError", n(t);
|
|
585
591
|
return;
|
|
586
592
|
}
|
|
587
|
-
if (
|
|
593
|
+
if (H++, w.imageLoader) {
|
|
588
594
|
Promise.resolve().then(() => w.imageLoader(e)).then(t, (t) => {
|
|
589
595
|
K || T("image-error", e), n(t);
|
|
590
596
|
}).finally(() => {
|
|
591
|
-
|
|
597
|
+
H--, Ft();
|
|
592
598
|
});
|
|
593
599
|
return;
|
|
594
600
|
}
|
|
595
601
|
let r = new Image();
|
|
596
602
|
w.imageCrossOrigin !== null && (r.crossOrigin = w.imageCrossOrigin), r.onload = () => {
|
|
597
|
-
r.onload = null, r.onerror = null,
|
|
603
|
+
r.onload = null, r.onerror = null, H--, Ft(), t(r);
|
|
598
604
|
}, r.onerror = () => {
|
|
599
|
-
r.onload = null, r.onerror = null,
|
|
605
|
+
r.onload = null, r.onerror = null, H--, Ft(), K || T("image-error", e), n(/* @__PURE__ */ Error(`图片加载失败: ${e}`));
|
|
600
606
|
}, r.src = e;
|
|
601
|
-
}),
|
|
607
|
+
}), Ft();
|
|
602
608
|
});
|
|
603
609
|
}
|
|
604
|
-
function
|
|
605
|
-
let t =
|
|
606
|
-
if (t?.image) return t.lastUsed = ++
|
|
610
|
+
function Rt(e) {
|
|
611
|
+
let t = B.get(e);
|
|
612
|
+
if (t?.image) return t.lastUsed = ++V, Promise.resolve(t.image);
|
|
607
613
|
if (t?.promise) return t.promise;
|
|
608
|
-
if (
|
|
609
|
-
let n = { lastUsed: ++
|
|
610
|
-
return n.promise =
|
|
611
|
-
throw
|
|
612
|
-
}),
|
|
614
|
+
if (Ce.has(e)) return Promise.reject(/* @__PURE__ */ Error(`图片加载失败: ${e}`));
|
|
615
|
+
let n = { lastUsed: ++V };
|
|
616
|
+
return n.promise = Lt(e).then((e) => (n.image = e, n.promise = void 0, n.lastUsed = ++V, e)).catch((t) => {
|
|
617
|
+
throw B.delete(e), t instanceof Error && t.name !== "AbortError" && Ce.add(e), t;
|
|
618
|
+
}), B.set(e, n), n.promise;
|
|
613
619
|
}
|
|
614
|
-
function
|
|
615
|
-
let e = [...
|
|
616
|
-
for (;
|
|
620
|
+
function zt() {
|
|
621
|
+
let e = [...B.entries()].filter(([, e]) => e.image).sort((e, t) => e[1].lastUsed - t[1].lastUsed);
|
|
622
|
+
for (; B.size > St && e.length > 0;) {
|
|
617
623
|
let [t, n] = e.shift();
|
|
618
|
-
n.image.src = "",
|
|
624
|
+
n.image.src = "", B.delete(t);
|
|
619
625
|
}
|
|
620
626
|
}
|
|
621
|
-
function
|
|
627
|
+
function Bt(e, t) {
|
|
622
628
|
let n = q(e)[t];
|
|
623
629
|
if (!n) return Promise.resolve();
|
|
624
|
-
let r =
|
|
625
|
-
if (r && i) return
|
|
626
|
-
let a = `${e}:${t}:${n.imageUrl}`, o =
|
|
630
|
+
let r = B.get(n.imageUrl)?.image, i = z.get(n.imageUrl);
|
|
631
|
+
if (r && i) return B.get(n.imageUrl).lastUsed = ++V, Promise.resolve();
|
|
632
|
+
let a = `${e}:${t}:${n.imageUrl}`, o = xe.get(a);
|
|
627
633
|
if (o) return o;
|
|
628
|
-
let s =
|
|
634
|
+
let s = Rt(n.imageUrl).then((r) => {
|
|
629
635
|
if (K || q(e)[t]?.imageUrl !== n.imageUrl) return;
|
|
630
|
-
let i =
|
|
631
|
-
|
|
636
|
+
let i = z.get(n.imageUrl), a = i?.width !== r.naturalWidth || i?.height !== r.naturalHeight;
|
|
637
|
+
z.set(n.imageUrl, {
|
|
632
638
|
width: r.naturalWidth,
|
|
633
639
|
height: r.naturalHeight
|
|
634
|
-
}), a ? X(e, !0) : Q(e),
|
|
640
|
+
}), a ? X(e, !0) : Q(e), zt();
|
|
635
641
|
}).catch(() => void 0).finally(() => {
|
|
636
|
-
|
|
642
|
+
xe.delete(a);
|
|
637
643
|
});
|
|
638
|
-
return
|
|
644
|
+
return xe.set(a, s), s;
|
|
639
645
|
}
|
|
640
|
-
function
|
|
646
|
+
function Vt(e) {
|
|
641
647
|
let t = Y(e), n = J(e);
|
|
642
648
|
if (t && n.length !== 0) return {
|
|
643
|
-
start:
|
|
644
|
-
end:
|
|
649
|
+
start: Pt(n, t.scrollTop),
|
|
650
|
+
end: Pt(n, t.scrollTop + t.clientHeight)
|
|
645
651
|
};
|
|
646
652
|
}
|
|
647
|
-
function
|
|
653
|
+
function Ht(e, t, n) {
|
|
648
654
|
let r = Math.min(window.devicePixelRatio || 1, 2), i = Math.max(1, Math.round(t * r)), a = Math.max(1, Math.round(n * r));
|
|
649
655
|
(e.width !== i || e.height !== a) && (e.width = i, e.height = a), e.style.width = `${t}px`, e.style.height = `${n}px`;
|
|
650
656
|
let o = e.getContext("2d");
|
|
651
657
|
return o.setTransform(r, 0, 0, r, 0, 0), o.clearRect(0, 0, t, n), o;
|
|
652
658
|
}
|
|
653
|
-
let
|
|
659
|
+
let Ut = {
|
|
654
660
|
gray: {
|
|
655
661
|
fill: "rgba(148,163,184,0.12)",
|
|
656
662
|
stroke: "#94a3b8",
|
|
@@ -672,32 +678,32 @@ var je = d({
|
|
|
672
678
|
pulse: "rgba(255,136,0,0.7)"
|
|
673
679
|
}
|
|
674
680
|
};
|
|
675
|
-
function
|
|
681
|
+
function Wt(e) {
|
|
676
682
|
return e < .3 ? Math.sin(e / .3 * Math.PI) : e >= .38 && e < .7 ? .85 * Math.sin((e - .38) / .32 * Math.PI) : 0;
|
|
677
683
|
}
|
|
678
684
|
function Z(e) {
|
|
679
|
-
let t =
|
|
685
|
+
let t = jt(e), n = Y(e), r = Vt(e);
|
|
680
686
|
if (!t || !n || n.clientWidth <= 0 || n.clientHeight <= 0) return;
|
|
681
|
-
let i =
|
|
687
|
+
let i = Ht(t, n.clientWidth, n.clientHeight);
|
|
682
688
|
if (!r) {
|
|
683
|
-
e === "src" ?
|
|
689
|
+
e === "src" ? we = [] : Ee = [];
|
|
684
690
|
return;
|
|
685
691
|
}
|
|
686
|
-
let a = J(e), o = e === "src" ?
|
|
692
|
+
let a = J(e), o = e === "src" ? Ot.value : kt.value, s = [], c;
|
|
687
693
|
for (let e = r.start; e <= r.end; e++) {
|
|
688
694
|
let t = a[e];
|
|
689
695
|
if (!t?.measured) continue;
|
|
690
696
|
let r = t.width / t.naturalWidth;
|
|
691
697
|
for (let a of o.get(e) ?? []) {
|
|
692
|
-
if (a.isGap && a.pairIndex !==
|
|
693
|
-
let e = Math.round(a.x * r), o = Math.round(t.top - n.scrollTop + a.y * r), l = Math.max(1, Math.round(a.w * r)), u = Math.max(1, Math.round(a.h * r)), d =
|
|
698
|
+
if (a.isGap && a.pairIndex !== j.value) continue;
|
|
699
|
+
let e = Math.round(a.x * r), o = Math.round(t.top - n.scrollTop + a.y * r), l = Math.max(1, Math.round(a.w * r)), u = Math.max(1, Math.round(a.h * r)), d = Ut[a.color];
|
|
694
700
|
i.fillStyle = d.fill, i.fillRect(e, o, l, u), i.strokeStyle = d.stroke, i.lineWidth = 1, i.strokeRect(e, o, l, u), s.push({
|
|
695
701
|
x: e,
|
|
696
702
|
y: o,
|
|
697
703
|
w: l,
|
|
698
704
|
h: u,
|
|
699
705
|
pairIndex: a.pairIndex
|
|
700
|
-
}), a.pairIndex ===
|
|
706
|
+
}), a.pairIndex === j.value && (c = {
|
|
701
707
|
x: e,
|
|
702
708
|
y: o,
|
|
703
709
|
w: l,
|
|
@@ -706,16 +712,16 @@ var je = d({
|
|
|
706
712
|
});
|
|
707
713
|
}
|
|
708
714
|
}
|
|
709
|
-
if (c &&
|
|
710
|
-
let e =
|
|
711
|
-
e > 0 && (i.save(), i.globalAlpha = e, i.strokeStyle =
|
|
715
|
+
if (c && G !== null) {
|
|
716
|
+
let e = Wt(G);
|
|
717
|
+
e > 0 && (i.save(), i.globalAlpha = e, i.strokeStyle = Ut[c.color].pulse, i.lineWidth = 1 + e * 4, i.shadowColor = Ut[c.color].pulse, i.shadowBlur = e * 8, i.strokeRect(c.x, c.y, c.w, c.h), i.restore());
|
|
712
718
|
}
|
|
713
|
-
e === "src" ?
|
|
719
|
+
e === "src" ? we = s : Ee = s;
|
|
714
720
|
}
|
|
715
|
-
function
|
|
716
|
-
let t =
|
|
721
|
+
function Gt(e) {
|
|
722
|
+
let t = At(e), n = Y(e), r = Vt(e);
|
|
717
723
|
if (!t || !n || n.clientWidth <= 0 || n.clientHeight <= 0) return;
|
|
718
|
-
let i =
|
|
724
|
+
let i = Ht(t, n.clientWidth, n.clientHeight);
|
|
719
725
|
if (i.fillStyle = "#eef0f3", i.fillRect(0, 0, n.clientWidth, n.clientHeight), !r) {
|
|
720
726
|
Z(e);
|
|
721
727
|
return;
|
|
@@ -724,27 +730,27 @@ var je = d({
|
|
|
724
730
|
for (let t = r.start; t <= r.end; t++) {
|
|
725
731
|
let r = o[t], s = a[t], c = s.top - n.scrollTop;
|
|
726
732
|
i.fillStyle = "#fff", i.fillRect(0, c, s.width, s.height);
|
|
727
|
-
let l =
|
|
728
|
-
l?.image ? (l.lastUsed = ++
|
|
733
|
+
let l = B.get(r.imageUrl);
|
|
734
|
+
l?.image ? (l.lastUsed = ++V, i.drawImage(l.image, 0, c, s.width, s.height)) : (i.fillStyle = "#8a9099", i.font = "14px Segoe UI, Microsoft YaHei, sans-serif", i.textAlign = "center", i.fillText(`第 ${t + 1} 页加载中…`, s.width / 2, c + Math.min(48, s.height / 2)), Bt(e, t));
|
|
729
735
|
}
|
|
730
736
|
let s = Math.max(0, r.start - 1), c = Math.min(o.length - 1, r.end + 1);
|
|
731
|
-
for (let t = s; t <= c; t++) (t < r.start || t > r.end) &&
|
|
737
|
+
for (let t = s; t <= c; t++) (t < r.start || t > r.end) && Bt(e, t);
|
|
732
738
|
Z(e);
|
|
733
739
|
}
|
|
734
740
|
function Q(e) {
|
|
735
|
-
(!e || e === "src") && (
|
|
736
|
-
|
|
737
|
-
let e =
|
|
738
|
-
|
|
741
|
+
(!e || e === "src") && (je = !0), (!e || e === "tgt") && (wt = !0), !U && (U = requestAnimationFrame(() => {
|
|
742
|
+
U = 0;
|
|
743
|
+
let e = je, t = wt;
|
|
744
|
+
je = !1, wt = !1, e && Gt("src"), t && Gt("tgt"), $t(), Jt();
|
|
739
745
|
}));
|
|
740
746
|
}
|
|
741
|
-
function
|
|
742
|
-
|
|
743
|
-
|
|
747
|
+
function Kt() {
|
|
748
|
+
ke ||= requestAnimationFrame(() => {
|
|
749
|
+
ke = 0, X("src", !0), X("tgt", !0);
|
|
744
750
|
});
|
|
745
751
|
}
|
|
746
|
-
function
|
|
747
|
-
let t = (e === "src" ?
|
|
752
|
+
function qt(e) {
|
|
753
|
+
let t = (e === "src" ? A.value.srcBoxes : A.value.tgtBoxes).find((e) => e.pairIndex === j.value), n = Y(e), r = t ? J(e)[t.pageIndex] : void 0;
|
|
748
754
|
if (!t || !n || !r?.measured) return;
|
|
749
755
|
let i = r.width / r.naturalWidth;
|
|
750
756
|
return {
|
|
@@ -753,14 +759,14 @@ var je = d({
|
|
|
753
759
|
color: t.color
|
|
754
760
|
};
|
|
755
761
|
}
|
|
756
|
-
function
|
|
757
|
-
if (!
|
|
758
|
-
let e =
|
|
762
|
+
function Jt() {
|
|
763
|
+
if (!me.value || !le.value || !F.value || !I.value || !fe.value || !pe.value) return;
|
|
764
|
+
let e = me.value, t = e.querySelector("path"), n = qt("src"), r = qt("tgt");
|
|
759
765
|
if (!n || !r) {
|
|
760
766
|
t?.remove();
|
|
761
767
|
return;
|
|
762
768
|
}
|
|
763
|
-
let i =
|
|
769
|
+
let i = le.value.getBoundingClientRect(), a = F.value.getBoundingClientRect(), o = I.value.getBoundingClientRect(), s = fe.value.getBoundingClientRect(), c = pe.value.getBoundingClientRect(), l = a.top - i.top, u = a.left - i.left, d = o.right - a.left, f = a.height, p = (t, n) => {
|
|
764
770
|
let r = `${n}px`;
|
|
765
771
|
e.style[t] !== r && (e.style[t] = r);
|
|
766
772
|
}, m = (e, t, n) => {
|
|
@@ -768,245 +774,275 @@ var je = d({
|
|
|
768
774
|
};
|
|
769
775
|
p("top", l), p("left", u), p("width", d), p("height", f), m(e, "width", String(d)), m(e, "height", String(f));
|
|
770
776
|
let h = s.left - a.left, ee = c.left - a.left, te = h + n.x, g = n.y, _ = ee + r.x, v = r.y, y = s.right - a.left, b = ee, x = y + (b - y) / 2, S = `M${te},${g} L${y},${g} C${x},${g} ${x},${v} ${b},${v} L${_},${v}`, C = t ?? document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
771
|
-
m(C, "d", S), m(C, "fill", "none"), m(C, "stroke",
|
|
777
|
+
m(C, "d", S), m(C, "fill", "none"), m(C, "stroke", Ut[n.color].stroke), m(C, "stroke-width", "2"), m(C, "stroke-dasharray", "6 4"), t || e.appendChild(C);
|
|
772
778
|
}
|
|
773
|
-
function
|
|
779
|
+
function Yt(e, t) {
|
|
780
|
+
let n = Y(e);
|
|
781
|
+
if (!n) return;
|
|
782
|
+
let r = n.scrollTop;
|
|
783
|
+
n.scrollTop = t, n.scrollTop !== r && (se[e] = n.scrollTop), Q(e);
|
|
784
|
+
}
|
|
785
|
+
function Xt(e) {
|
|
786
|
+
if (!k.value) return;
|
|
787
|
+
let t = e === "src" ? "tgt" : "src", n = Y(e), r = Y(t);
|
|
788
|
+
if (!n || !r) return;
|
|
789
|
+
let i = n.scrollHeight - n.clientHeight, a = Math.max(0, r.scrollHeight - r.clientHeight);
|
|
790
|
+
i <= 0 || Yt(t, Math.max(0, Math.min(1, n.scrollTop / i)) * a);
|
|
791
|
+
}
|
|
792
|
+
function Zt(e) {
|
|
774
793
|
Q(e);
|
|
794
|
+
let t = se[e];
|
|
795
|
+
se[e] = null;
|
|
796
|
+
let n = Y(e);
|
|
797
|
+
!n || t !== null && Math.abs(n.scrollTop - t) < 1 || (oe = e, Xt(e));
|
|
775
798
|
}
|
|
776
|
-
function
|
|
777
|
-
|
|
799
|
+
function Qt() {
|
|
800
|
+
k.value = !k.value, k.value && Xt(oe);
|
|
778
801
|
}
|
|
779
|
-
function
|
|
802
|
+
function $t() {
|
|
803
|
+
F.value && L.value.length > 0 && (N.value = Pt(L.value, F.value.scrollTop)), I.value && R.value.length > 0 && (P.value = Pt(R.value, I.value.scrollTop));
|
|
804
|
+
}
|
|
805
|
+
function en(e, t) {
|
|
780
806
|
let n = q(e), r = Y(e), i = J(e)[t];
|
|
781
|
-
t < 0 || t >= n.length || !r || !i || (e === "src" ?
|
|
782
|
-
|
|
807
|
+
t < 0 || t >= n.length || !r || !i || (e === "src" ? N.value = t : P.value = t, f(() => {
|
|
808
|
+
Yt(e, i.top), oe = e, Xt(e);
|
|
783
809
|
}));
|
|
784
810
|
}
|
|
785
|
-
function
|
|
786
|
-
|
|
811
|
+
function tn(e) {
|
|
812
|
+
en("src", e);
|
|
787
813
|
}
|
|
788
|
-
function
|
|
789
|
-
|
|
814
|
+
function nn(e) {
|
|
815
|
+
en("tgt", e);
|
|
790
816
|
}
|
|
791
|
-
function
|
|
817
|
+
function rn(e, t, n) {
|
|
792
818
|
let r = q(e), i = Y(e), a = J(e)[n];
|
|
793
819
|
if (n < 0 || n >= r.length || !i || !a) return;
|
|
794
|
-
let o = (e === "src" ?
|
|
795
|
-
e === "src" ?
|
|
820
|
+
let o = (e === "src" ? A.value.srcBoxes : A.value.tgtBoxes).find((e) => e.pairIndex === t);
|
|
821
|
+
e === "src" ? N.value = n : P.value = n, f(() => {
|
|
796
822
|
let t = J(e)[n];
|
|
797
823
|
if (!t) return;
|
|
798
824
|
let r = o ? t.top + (o.y + o.h / 2) * (t.width / t.naturalWidth) - i.clientHeight / 2 : t.top, a = Math.max(0, i.scrollHeight - i.clientHeight);
|
|
799
|
-
|
|
825
|
+
Yt(e, Math.max(0, Math.min(a, r)));
|
|
800
826
|
});
|
|
801
827
|
}
|
|
802
|
-
function
|
|
828
|
+
function an(e) {
|
|
803
829
|
let t = w.diffDetail[e];
|
|
804
|
-
t && (
|
|
830
|
+
t && (rn("src", e, t.srcPage), rn("tgt", e, t.tgtPage));
|
|
805
831
|
}
|
|
806
|
-
function
|
|
807
|
-
if (
|
|
808
|
-
|
|
832
|
+
function on() {
|
|
833
|
+
if (W && cancelAnimationFrame(W), window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
|
|
834
|
+
W = 0, G = null, Z("src"), Z("tgt");
|
|
809
835
|
return;
|
|
810
836
|
}
|
|
811
837
|
let e = performance.now(), t = (n) => {
|
|
812
|
-
|
|
838
|
+
G = Math.min(1, (n - e) / 720), Z("src"), Z("tgt"), G < 1 ? W = requestAnimationFrame(t) : (W = 0, G = null, Z("src"), Z("tgt"));
|
|
813
839
|
};
|
|
814
|
-
|
|
840
|
+
W = requestAnimationFrame(t);
|
|
815
841
|
}
|
|
816
|
-
async function
|
|
842
|
+
async function sn(e) {
|
|
817
843
|
let t = w.diffDetail[e];
|
|
818
|
-
t && (await Promise.all([
|
|
844
|
+
t && (await Promise.all([Bt("src", t.srcPage), Bt("tgt", t.tgtPage)]), !(K || j.value !== e) && (an(e), Q(), on()));
|
|
819
845
|
}
|
|
820
|
-
let
|
|
846
|
+
let cn = _(null);
|
|
821
847
|
function $(e, t = !0) {
|
|
822
|
-
K || (T("select", w.diffDetail[e] ?? null, e),
|
|
823
|
-
!K &&
|
|
824
|
-
}),
|
|
848
|
+
K || (T("select", w.diffDetail[e] ?? null, e), j.value = e, t && f(() => {
|
|
849
|
+
!K && j.value === e && cn.value?.scrollToCard(e);
|
|
850
|
+
}), an(e), Q(), sn(e));
|
|
825
851
|
}
|
|
826
|
-
function
|
|
827
|
-
let n =
|
|
852
|
+
function ln(e, t) {
|
|
853
|
+
let n = jt(t), r = Y(t);
|
|
828
854
|
if (!n || !r) return;
|
|
829
|
-
let i = n.getBoundingClientRect(), a = (e.clientX - i.left) * r.clientWidth / i.width, o = (e.clientY - i.top) * r.clientHeight / i.height, s = t === "src" ?
|
|
855
|
+
let i = n.getBoundingClientRect(), a = (e.clientX - i.left) * r.clientWidth / i.width, o = (e.clientY - i.top) * r.clientHeight / i.height, s = t === "src" ? we : Ee;
|
|
830
856
|
for (let e = s.length - 1; e >= 0; e--) {
|
|
831
857
|
let t = s[e];
|
|
832
858
|
if (a >= t.x - 3 && a <= t.x + t.w + 3 && o >= t.y - 3 && o <= t.y + t.h + 3) return t.pairIndex;
|
|
833
859
|
}
|
|
834
860
|
}
|
|
835
|
-
function
|
|
836
|
-
let n =
|
|
861
|
+
function un(e, t) {
|
|
862
|
+
let n = ln(e, t);
|
|
837
863
|
n !== void 0 && $(n);
|
|
838
864
|
}
|
|
839
|
-
function
|
|
865
|
+
function dn(e, t) {
|
|
840
866
|
let n = e.currentTarget;
|
|
841
|
-
n.style.cursor =
|
|
867
|
+
n.style.cursor = ln(e, t) === void 0 ? "default" : "pointer";
|
|
842
868
|
}
|
|
843
|
-
let
|
|
844
|
-
function
|
|
845
|
-
|
|
869
|
+
let fn = t(() => O.value[0]?.idx ?? -1);
|
|
870
|
+
function pn() {
|
|
871
|
+
L.value = [], R.value = [], he.value = 1, ge.value = 1, we = [], Ee = [], Ce.clear();
|
|
846
872
|
}
|
|
847
873
|
te(async () => {
|
|
848
|
-
K = !1, await f(), X("src"), X("tgt"), await f(), $(
|
|
874
|
+
K = !1, await f(), X("src"), X("tgt"), await f(), $(fn.value), Tt = new ResizeObserver(Kt), F.value && Tt.observe(F.value), I.value && Tt.observe(I.value);
|
|
849
875
|
}), S(() => [w.sourcePages, w.targetPages], async () => {
|
|
850
|
-
|
|
851
|
-
}, { deep: !0 }), S([
|
|
852
|
-
T("filter-change",
|
|
876
|
+
pn(), await f(), X("src"), X("tgt"), await f(), $(fn.value);
|
|
877
|
+
}, { deep: !0 }), S([M, D], () => {
|
|
878
|
+
T("filter-change", M.value, D.value), $(fn.value);
|
|
853
879
|
}), S(() => w.diffDetail, () => {
|
|
854
|
-
let e =
|
|
880
|
+
let e = j.value;
|
|
855
881
|
$((O.value.find((t) => t.idx >= e) ?? O.value[O.value.length - 1])?.idx ?? -1);
|
|
856
882
|
}), ee(() => {
|
|
857
|
-
K = !0,
|
|
858
|
-
for (let e of
|
|
859
|
-
|
|
883
|
+
K = !0, Tt?.disconnect(), U && cancelAnimationFrame(U), ke && cancelAnimationFrame(ke), W && cancelAnimationFrame(W);
|
|
884
|
+
for (let e of B.values()) e.image && (e.image.src = "");
|
|
885
|
+
B.clear();
|
|
860
886
|
});
|
|
861
|
-
async function
|
|
887
|
+
async function mn(e) {
|
|
862
888
|
let t = typeof e == "string" ? w.diffDetail.findIndex((t) => t.diffId === e) : e;
|
|
863
|
-
return !Number.isInteger(t) || !w.diffDetail[t] || K ? !1 : (ae.value.has(t) || (
|
|
889
|
+
return !Number.isInteger(t) || !w.diffDetail[t] || K ? !1 : (ae.value.has(t) || (M.value = "all", D.value = "all", await f()), $(t), !0);
|
|
864
890
|
}
|
|
865
|
-
function
|
|
866
|
-
let t = O.value.findIndex((e) => e.idx ===
|
|
891
|
+
function hn(e) {
|
|
892
|
+
let t = O.value.findIndex((e) => e.idx === j.value), n = O.value[t + e];
|
|
867
893
|
return n ? ($(n.idx), !0) : !1;
|
|
868
894
|
}
|
|
869
|
-
function
|
|
895
|
+
function gn(e, t) {
|
|
870
896
|
let n = e === "source" ? "src" : "tgt";
|
|
871
|
-
return !Number.isInteger(t) || t < 0 || t >= q(n).length ? !1 : (
|
|
897
|
+
return !Number.isInteger(t) || t < 0 || t >= q(n).length ? !1 : (en(n, t), !0);
|
|
872
898
|
}
|
|
873
|
-
function
|
|
874
|
-
|
|
899
|
+
function _n(e, t = D.value) {
|
|
900
|
+
M.value = e, D.value = t;
|
|
875
901
|
}
|
|
876
|
-
function
|
|
877
|
-
|
|
902
|
+
function vn() {
|
|
903
|
+
Ce.clear(), Q();
|
|
878
904
|
}
|
|
879
|
-
return S(
|
|
880
|
-
selectDiff:
|
|
881
|
-
nextDiff: () =>
|
|
882
|
-
previousDiff: () =>
|
|
883
|
-
goToPage:
|
|
884
|
-
setFilter:
|
|
885
|
-
resize:
|
|
886
|
-
retryImages:
|
|
887
|
-
}), (t, d) => (g(), i("div",
|
|
905
|
+
return S(N, (e) => T("page-change", "source", e)), S(P, (e) => T("page-change", "target", e)), d({
|
|
906
|
+
selectDiff: mn,
|
|
907
|
+
nextDiff: () => hn(1),
|
|
908
|
+
previousDiff: () => hn(-1),
|
|
909
|
+
goToPage: gn,
|
|
910
|
+
setFilter: _n,
|
|
911
|
+
resize: Kt,
|
|
912
|
+
retryImages: vn
|
|
913
|
+
}), (t, d) => (g(), i("div", Ne, [
|
|
888
914
|
y(t.$slots, "toolbar", {
|
|
889
|
-
activeIndex:
|
|
890
|
-
selectDiff:
|
|
891
|
-
setFilter:
|
|
915
|
+
activeIndex: j.value,
|
|
916
|
+
selectDiff: mn,
|
|
917
|
+
setFilter: _n
|
|
892
918
|
}, void 0, !0),
|
|
893
|
-
a("div",
|
|
894
|
-
|
|
919
|
+
a("div", Pe, [a("div", Fe, [w.sourcePages.length && w.targetPages.length ? (g(), i("div", Ie, [a("button", {
|
|
920
|
+
type: "button",
|
|
921
|
+
class: "sync-scroll-toggle",
|
|
922
|
+
role: "switch",
|
|
923
|
+
"aria-checked": k.value,
|
|
924
|
+
title: "开启后,两侧预览按文档滚动进度同步",
|
|
925
|
+
onClick: Qt
|
|
926
|
+
}, [...d[19] ||= [a("span", {
|
|
927
|
+
class: "sync-scroll-track",
|
|
928
|
+
"aria-hidden": "true"
|
|
929
|
+
}, [a("span")], -1), s(" 同步滚动 ", -1)]], 8, Le)])) : r("", !0), w.sourcePages.length > 0 || w.targetPages.length > 0 ? (g(), i("div", {
|
|
930
|
+
key: 1,
|
|
895
931
|
ref_key: "containerRef",
|
|
896
|
-
ref:
|
|
932
|
+
ref: le,
|
|
897
933
|
class: "compare-row"
|
|
898
934
|
}, [
|
|
899
|
-
a("div",
|
|
935
|
+
a("div", Re, [w.sourcePages.length ? (g(), i("div", ze, [a("div", Be, [d[20] ||= a("div", { class: "canvas-info-bar-left-tag" }, "标准文档", -1), a("div", Ve, [y(t.$slots, "source-title", { filename: w.sourceFilename }, () => [s(b(w.sourceFilename || "标准文档"), 1)], !0)])]), a("div", He, [
|
|
900
936
|
a("button", {
|
|
901
937
|
class: "page-btn",
|
|
902
|
-
disabled:
|
|
938
|
+
disabled: N.value <= 0,
|
|
903
939
|
title: "第一页",
|
|
904
940
|
"aria-label": "标准文档第一页",
|
|
905
|
-
onClick: d[0] ||= (e) =>
|
|
906
|
-
}, [c(x(
|
|
941
|
+
onClick: d[0] ||= (e) => tn(0)
|
|
942
|
+
}, [c(x(De), { "aria-hidden": "true" })], 8, Ue),
|
|
907
943
|
a("button", {
|
|
908
944
|
class: "page-btn",
|
|
909
|
-
disabled:
|
|
945
|
+
disabled: N.value <= 0,
|
|
910
946
|
title: "上一页",
|
|
911
947
|
"aria-label": "标准文档上一页",
|
|
912
|
-
onClick: d[1] ||= (e) =>
|
|
913
|
-
}, [c(x(
|
|
914
|
-
a("span",
|
|
948
|
+
onClick: d[1] ||= (e) => tn(N.value - 1)
|
|
949
|
+
}, [c(x(Oe), { "aria-hidden": "true" })], 8, We),
|
|
950
|
+
a("span", Ge, b(N.value + 1) + " / " + b(w.sourcePages.length), 1),
|
|
915
951
|
a("button", {
|
|
916
952
|
class: "page-btn",
|
|
917
|
-
disabled:
|
|
953
|
+
disabled: N.value >= w.sourcePages.length - 1,
|
|
918
954
|
title: "下一页",
|
|
919
955
|
"aria-label": "标准文档下一页",
|
|
920
|
-
onClick: d[2] ||= (e) =>
|
|
921
|
-
}, [c(x(Ae), { "aria-hidden": "true" })], 8,
|
|
956
|
+
onClick: d[2] ||= (e) => tn(N.value + 1)
|
|
957
|
+
}, [c(x(Ae), { "aria-hidden": "true" })], 8, Ke),
|
|
922
958
|
a("button", {
|
|
923
959
|
class: "page-btn",
|
|
924
|
-
disabled:
|
|
960
|
+
disabled: N.value >= w.sourcePages.length - 1,
|
|
925
961
|
title: "最后一页",
|
|
926
962
|
"aria-label": "标准文档最后一页",
|
|
927
|
-
onClick: d[3] ||= (e) =>
|
|
928
|
-
}, [c(x(
|
|
963
|
+
onClick: d[3] ||= (e) => tn(w.sourcePages.length - 1)
|
|
964
|
+
}, [c(x(Me), { "aria-hidden": "true" })], 8, qe)
|
|
929
965
|
])])) : r("", !0), a("div", {
|
|
930
966
|
ref_key: "srcScrollRef",
|
|
931
|
-
ref:
|
|
967
|
+
ref: F,
|
|
932
968
|
class: "canvas-scroll",
|
|
933
|
-
onScroll: d[6] ||= (e) =>
|
|
969
|
+
onScroll: d[6] ||= (e) => Zt("src")
|
|
934
970
|
}, [a("div", {
|
|
935
971
|
class: "virtual-spacer",
|
|
936
|
-
style: h({ height: `${
|
|
972
|
+
style: h({ height: `${he.value}px` })
|
|
937
973
|
}, [a("div", {
|
|
938
974
|
class: "viewport-canvas-stack",
|
|
939
|
-
style: h({ height: `${
|
|
975
|
+
style: h({ height: `${_e.value}px` })
|
|
940
976
|
}, [a("canvas", {
|
|
941
977
|
ref_key: "srcCanvasRef",
|
|
942
|
-
ref:
|
|
978
|
+
ref: ue,
|
|
943
979
|
class: "compare-canvas"
|
|
944
980
|
}, null, 512), a("canvas", {
|
|
945
981
|
ref_key: "srcAnnotationCanvasRef",
|
|
946
|
-
ref:
|
|
982
|
+
ref: fe,
|
|
947
983
|
class: "annotation-canvas",
|
|
948
|
-
onClick: d[4] ||= (e) =>
|
|
949
|
-
onMousemove: d[5] ||= (e) =>
|
|
984
|
+
onClick: d[4] ||= (e) => un(e, "src"),
|
|
985
|
+
onMousemove: d[5] ||= (e) => dn(e, "src")
|
|
950
986
|
}, null, 544)], 4)], 4)], 544)]),
|
|
951
|
-
a("div",
|
|
987
|
+
a("div", Je, [w.targetPages.length ? (g(), i("div", Ye, [a("div", Xe, [d[21] ||= a("div", { class: "canvas-info-bar-left-tag gray" }, "对比文档", -1), a("div", Ze, [y(t.$slots, "target-title", { filename: w.targetFilename }, () => [s(b(w.targetFilename || "对比文档"), 1)], !0)])]), a("div", Qe, [
|
|
952
988
|
a("button", {
|
|
953
989
|
class: "page-btn",
|
|
954
|
-
disabled:
|
|
990
|
+
disabled: P.value <= 0,
|
|
955
991
|
title: "第一页",
|
|
956
992
|
"aria-label": "对比文档第一页",
|
|
957
|
-
onClick: d[7] ||= (e) =>
|
|
958
|
-
}, [c(x(
|
|
993
|
+
onClick: d[7] ||= (e) => nn(0)
|
|
994
|
+
}, [c(x(De), { "aria-hidden": "true" })], 8, $e),
|
|
959
995
|
a("button", {
|
|
960
996
|
class: "page-btn",
|
|
961
|
-
disabled:
|
|
997
|
+
disabled: P.value <= 0,
|
|
962
998
|
title: "上一页",
|
|
963
999
|
"aria-label": "对比文档上一页",
|
|
964
|
-
onClick: d[8] ||= (e) =>
|
|
965
|
-
}, [c(x(
|
|
966
|
-
a("span",
|
|
1000
|
+
onClick: d[8] ||= (e) => nn(P.value - 1)
|
|
1001
|
+
}, [c(x(Oe), { "aria-hidden": "true" })], 8, et),
|
|
1002
|
+
a("span", tt, b(P.value + 1) + " / " + b(w.targetPages.length), 1),
|
|
967
1003
|
a("button", {
|
|
968
1004
|
class: "page-btn",
|
|
969
|
-
disabled:
|
|
1005
|
+
disabled: P.value >= w.targetPages.length - 1,
|
|
970
1006
|
title: "下一页",
|
|
971
1007
|
"aria-label": "对比文档下一页",
|
|
972
|
-
onClick: d[9] ||= (e) =>
|
|
973
|
-
}, [c(x(Ae), { "aria-hidden": "true" })], 8,
|
|
1008
|
+
onClick: d[9] ||= (e) => nn(P.value + 1)
|
|
1009
|
+
}, [c(x(Ae), { "aria-hidden": "true" })], 8, nt),
|
|
974
1010
|
a("button", {
|
|
975
1011
|
class: "page-btn",
|
|
976
|
-
disabled:
|
|
1012
|
+
disabled: P.value >= w.targetPages.length - 1,
|
|
977
1013
|
title: "最后一页",
|
|
978
1014
|
"aria-label": "对比文档最后一页",
|
|
979
|
-
onClick: d[10] ||= (e) =>
|
|
980
|
-
}, [c(x(
|
|
1015
|
+
onClick: d[10] ||= (e) => nn(w.targetPages.length - 1)
|
|
1016
|
+
}, [c(x(Me), { "aria-hidden": "true" })], 8, rt)
|
|
981
1017
|
])])) : r("", !0), a("div", {
|
|
982
1018
|
ref_key: "tgtScrollRef",
|
|
983
|
-
ref:
|
|
1019
|
+
ref: I,
|
|
984
1020
|
class: "canvas-scroll canvas-scroll--flip",
|
|
985
|
-
onScroll: d[13] ||= (e) =>
|
|
1021
|
+
onScroll: d[13] ||= (e) => Zt("tgt")
|
|
986
1022
|
}, [a("div", {
|
|
987
1023
|
class: "virtual-spacer",
|
|
988
|
-
style: h({ height: `${
|
|
1024
|
+
style: h({ height: `${ge.value}px` })
|
|
989
1025
|
}, [a("div", {
|
|
990
1026
|
class: "viewport-canvas-stack",
|
|
991
|
-
style: h({ height: `${
|
|
1027
|
+
style: h({ height: `${ve.value}px` })
|
|
992
1028
|
}, [a("canvas", {
|
|
993
1029
|
ref_key: "tgtCanvasRef",
|
|
994
|
-
ref:
|
|
1030
|
+
ref: de,
|
|
995
1031
|
class: "compare-canvas"
|
|
996
1032
|
}, null, 512), a("canvas", {
|
|
997
1033
|
ref_key: "tgtAnnotationCanvasRef",
|
|
998
|
-
ref:
|
|
1034
|
+
ref: pe,
|
|
999
1035
|
class: "annotation-canvas",
|
|
1000
|
-
onClick: d[11] ||= (e) =>
|
|
1001
|
-
onMousemove: d[12] ||= (e) =>
|
|
1036
|
+
onClick: d[11] ||= (e) => un(e, "tgt"),
|
|
1037
|
+
onMousemove: d[12] ||= (e) => dn(e, "tgt")
|
|
1002
1038
|
}, null, 544)], 4)], 4)], 544)]),
|
|
1003
1039
|
(g(), i("svg", {
|
|
1004
1040
|
ref_key: "svgRef",
|
|
1005
|
-
ref:
|
|
1041
|
+
ref: me,
|
|
1006
1042
|
class: "line-svg"
|
|
1007
1043
|
}, null, 512))
|
|
1008
|
-
], 512)) : (g(), i("div",
|
|
1009
|
-
a("header",
|
|
1044
|
+
], 512)) : (g(), i("div", it, [y(t.$slots, "empty", {}, () => [d[22] ||= s("暂无可展示的页面数据", -1)], !0)]))]), a("aside", at, [
|
|
1045
|
+
a("header", ot, [a("div", st, [a("h2", null, [c(x(Te), { "aria-hidden": "true" }), d[23] ||= s("差异审阅", -1)]), a("span", ct, "共 " + b(E.value?.total_difference_count ?? w.diffDetail.length) + " 处", 1)]), a("div", lt, [(g(), i(e, null, v([
|
|
1010
1046
|
"pending",
|
|
1011
1047
|
"ignored",
|
|
1012
1048
|
"all"
|
|
@@ -1014,8 +1050,8 @@ var je = d({
|
|
|
1014
1050
|
key: e,
|
|
1015
1051
|
"aria-pressed": D.value === e,
|
|
1016
1052
|
onClick: (t) => D.value = e
|
|
1017
|
-
}, [s(b(e === "pending" ? "未忽略" : e === "ignored" ? "已忽略" : "全部") + " ", 1), E.value && e !== "all" ? (g(), i("span",
|
|
1018
|
-
a("div",
|
|
1053
|
+
}, [s(b(e === "pending" ? "未忽略" : e === "ignored" ? "已忽略" : "全部") + " ", 1), E.value && e !== "all" ? (g(), i("span", dt, b(e === "pending" ? E.value.remaining_difference_count : E.value.ignored_difference_count), 1)) : r("", !0)], 8, ut)), 64))])]),
|
|
1054
|
+
a("div", ft, [(g(), i(e, null, v([
|
|
1019
1055
|
"all",
|
|
1020
1056
|
"modify",
|
|
1021
1057
|
"delete",
|
|
@@ -1023,16 +1059,16 @@ var je = d({
|
|
|
1023
1059
|
], (e) => a("button", {
|
|
1024
1060
|
key: e,
|
|
1025
1061
|
class: "review-type",
|
|
1026
|
-
"aria-pressed":
|
|
1027
|
-
onClick: (t) =>
|
|
1028
|
-
}, [s(b(e === "all" ? "所有类型" : e === "modify" ? "修改" : e === "delete" ? "删除" : "新增") + " ", 1), a("span", null, b(
|
|
1062
|
+
"aria-pressed": M.value === e,
|
|
1063
|
+
onClick: (t) => M.value = e
|
|
1064
|
+
}, [s(b(e === "all" ? "所有类型" : e === "modify" ? "修改" : e === "delete" ? "删除" : "新增") + " ", 1), a("span", null, b(ce.value[e]), 1)], 8, pt)), 64))]),
|
|
1029
1065
|
O.value.length ? (g(), n(be, {
|
|
1030
1066
|
key: 1,
|
|
1031
1067
|
ref_key: "diffCardsRef",
|
|
1032
|
-
ref:
|
|
1068
|
+
ref: cn,
|
|
1033
1069
|
"diff-detail": w.diffDetail,
|
|
1034
|
-
"active-index":
|
|
1035
|
-
"active-tab":
|
|
1070
|
+
"active-index": j.value,
|
|
1071
|
+
"active-tab": M.value,
|
|
1036
1072
|
"review-filter": D.value,
|
|
1037
1073
|
busy: l.reviewBusy,
|
|
1038
1074
|
readonly: w.readonly,
|
|
@@ -1049,18 +1085,18 @@ var je = d({
|
|
|
1049
1085
|
"review-filter",
|
|
1050
1086
|
"busy",
|
|
1051
1087
|
"readonly"
|
|
1052
|
-
])) : (g(), i("div",
|
|
1053
|
-
a("span",
|
|
1054
|
-
d[
|
|
1088
|
+
])) : (g(), i("div", mt, [E.value?.comparison_passed && D.value === "pending" ? (g(), i(e, { key: 0 }, [
|
|
1089
|
+
a("span", ht, [c(x(Se), { "aria-hidden": "true" })]),
|
|
1090
|
+
d[24] ||= a("h3", null, "比对通过", -1),
|
|
1055
1091
|
a("p", null, b(E.value.total_difference_count ? "全部差异已标记为忽略" : "两个文档未发现差异"), 1),
|
|
1056
1092
|
E.value.ignored_difference_count ? (g(), i("button", {
|
|
1057
1093
|
key: 0,
|
|
1058
1094
|
onClick: d[14] ||= (e) => D.value = "ignored"
|
|
1059
1095
|
}, " 查看已忽略的差异 ")) : r("", !0)
|
|
1060
1096
|
], 64)) : (g(), i(e, { key: 1 }, [
|
|
1061
|
-
a("span",
|
|
1062
|
-
d[
|
|
1063
|
-
d[
|
|
1097
|
+
a("span", gt, [c(x(Te), { "aria-hidden": "true" })]),
|
|
1098
|
+
d[25] ||= a("h3", null, "暂无差异", -1),
|
|
1099
|
+
d[26] ||= a("p", null, "当前筛选下没有差异项", -1)
|
|
1064
1100
|
], 64))])),
|
|
1065
1101
|
!w.readonly && E.value ? (g(), i("footer", {
|
|
1066
1102
|
key: 2,
|
|
@@ -1074,22 +1110,22 @@ var je = d({
|
|
|
1074
1110
|
onClick: d[17] ||= (e) => T("ignore", null, !0)
|
|
1075
1111
|
}, [
|
|
1076
1112
|
c(x(re), { "aria-hidden": "true" }),
|
|
1077
|
-
d[
|
|
1078
|
-
E.value.remaining_difference_count ? (g(), i("span",
|
|
1079
|
-
], 8,
|
|
1113
|
+
d[27] ||= s("忽略全部 ", -1),
|
|
1114
|
+
E.value.remaining_difference_count ? (g(), i("span", yt, b(E.value.remaining_difference_count), 1)) : r("", !0)
|
|
1115
|
+
], 8, vt), a("button", {
|
|
1080
1116
|
class: "batch-restore",
|
|
1081
1117
|
disabled: l.reviewBusy || !E.value.ignored_difference_count,
|
|
1082
1118
|
title: "撤销整个任务的所有忽略,包含当前筛选之外的差异",
|
|
1083
1119
|
"aria-label": "撤销整个任务的所有差异忽略",
|
|
1084
1120
|
onClick: d[18] ||= (e) => T("ignore", null, !1)
|
|
1085
|
-
}, [c(x(ie), { "aria-hidden": "true" }), d[
|
|
1121
|
+
}, [c(x(ie), { "aria-hidden": "true" }), d[28] ||= s("全部撤销 ", -1)], 8, bt)], 8, _t)) : r("", !0)
|
|
1086
1122
|
])]),
|
|
1087
1123
|
y(t.$slots, "footer", {
|
|
1088
|
-
activeIndex:
|
|
1124
|
+
activeIndex: j.value,
|
|
1089
1125
|
review: E.value
|
|
1090
1126
|
}, void 0, !0)
|
|
1091
1127
|
]));
|
|
1092
1128
|
}
|
|
1093
|
-
}), [["__scopeId", "data-v-
|
|
1129
|
+
}), [["__scopeId", "data-v-9aa39b2f"]]);
|
|
1094
1130
|
//#endregion
|
|
1095
|
-
export {
|
|
1131
|
+
export { wt as OcrResultView };
|