OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
94
app/Views/Templates/components/pdfPreview.blade.php
Normal file
94
app/Views/Templates/components/pdfPreview.blade.php
Normal file
@@ -0,0 +1,94 @@
|
||||
@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
|
||||
Reference in New Issue
Block a user