Files
Leantime/app/Views/Templates/components/pdfPreview.blade.php

95 lines
4.0 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@once
@push('scripts')
<script>
(function () {
if (window.__onebotPdfPreviewInit) { return; }
window.__onebotPdfPreviewInit = true;
// 注入弹窗样式(内联,不依赖前端构建)
var css = ''
+ '.ob-pdf-overlay{position:fixed;inset:0;background:rgba(15,23,42,0.66);z-index:99990;display:flex;align-items:center;justify-content:center;padding:24px;animation:obPdfFade .15s ease;}'
+ '.ob-pdf-modal{position:relative;width:min(1100px,96vw);height:min(820px,92vh);background:#fff;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,0.4);display:flex;flex-direction:column;overflow:hidden;}'
+ '.ob-pdf-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid #e5e7eb;background:#f8fafc;}'
+ '.ob-pdf-title{font-size:14px;font-weight:600;color:#0f172a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}'
+ '.ob-pdf-close{flex:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:6px;cursor:pointer;color:#475569;font-size:18px;line-height:1;text-decoration:none;}'
+ '.ob-pdf-close:hover{background:#e2e8f0;color:#0f172a;}'
+ '.ob-pdf-frame{flex:1;width:100%;border:0;background:#fff;}'
+ '@keyframes obPdfFade{from{opacity:0;}to{opacity:1;}}';
var styleEl = document.createElement('style');
styleEl.textContent = css;
document.head.appendChild(styleEl);
function param(name, url) {
var m = new RegExp('[?&]' + name + '=([^&]*)').exec(url || '');
return m ? decodeURIComponent(m[1]) : '';
}
function openPdf(url, title) {
var overlay = document.createElement('div');
overlay.className = 'ob-pdf-overlay';
var modal = document.createElement('div');
modal.className = 'ob-pdf-modal';
var header = document.createElement('div');
header.className = 'ob-pdf-header';
var t = document.createElement('span');
t.className = 'ob-pdf-title';
t.textContent = title || 'PDF';
var close = document.createElement('a');
close.className = 'ob-pdf-close';
close.setAttribute('role', 'button');
close.setAttribute('aria-label', 'Close');
close.innerHTML = '<i class="fa-solid fa-xmark"></i>';
header.appendChild(t);
header.appendChild(close);
var frame = document.createElement('iframe');
frame.className = 'ob-pdf-frame';
frame.setAttribute('src', url);
frame.setAttribute('title', title || 'PDF');
modal.appendChild(header);
modal.appendChild(frame);
overlay.appendChild(modal);
document.body.appendChild(overlay);
function closeModal() {
overlay.remove();
document.removeEventListener('keydown', onKey);
}
function onKey(e) {
if (e.key === 'Escape') { closeModal(); }
}
overlay.addEventListener('click', function (e) {
if (e.target === overlay) { closeModal(); }
});
close.addEventListener('click', closeModal);
document.addEventListener('keydown', onKey);
}
// capture 阶段拦截,确保先于 nyroModal/colorbox 等其它绑定执行
document.addEventListener('click', function (e) {
var a = e.target && e.target.closest ? e.target.closest('a[href*="files/get"]') : null;
if (!a) { return; }
var href = a.getAttribute('href') || '';
if (!/[?&]ext=pdf/i.test(href)) { return; }
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
var title = a.getAttribute('title')
|| param('realName', href)
|| (a.querySelector('.filename') ? a.querySelector('.filename').textContent.trim() : '')
|| 'PDF';
openPdf(href, title);
}, true);
// 暴露给其它模块(如 BOM 附件点击预览 PDF复用
window.__onebotOpenPdf = openPdf;
})();
</script>
@endpush
@endonce