fix: keystore

This commit is contained in:
hashbro
2026-09-20 06:15:26 +08:00
parent 2625707aed
commit 2a41a29310
29 changed files with 1972 additions and 66 deletions
@@ -30,6 +30,9 @@
</div>
</form>
<div class="layui-card-body">
<div style="margin-bottom:10px;">
<button class="layui-btn layui-btn-normal" id="LAY-session-export"><i class="layui-icon layui-icon-export"></i>导出 ZIP</button>
</div>
<table id="LAY-session-list" lay-filter="LAY-session-list"></table>
<script type="text/html" id="LAY-session-ops">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="payload">参数</a>
@@ -97,6 +100,41 @@ layui.use(['table', 'form', 'layer'], function () {
return false;
});
// Bulk export: build a query string from the current search form and
// trigger a download via a hidden <a>. The server streams a ZIP from disk.
document.getElementById('LAY-session-export').addEventListener('click', function () {
var params = new URLSearchParams();
params.set('kind', isWhatsApp ? '2' : '1');
var formEl = document.querySelector('form[lay-filter="LAY-session-search"]');
if (formEl) {
var fd = new FormData(formEl);
fd.forEach(function (v, k) { if (v) params.set(k, v); });
}
var url = @json(route($portal.'.sessions.export')) + '?' + params.toString();
var load = layer.load(1, { shade: 0.1 });
// Use fetch so we can detect JSON error responses (422) vs the ZIP blob.
fetch(url, { credentials: 'same-origin' })
.then(function (res) {
layer.close(load);
var ct = res.headers.get('Content-Type') || '';
if (!res.ok || ct.indexOf('application/json') !== -1) {
return res.json().then(function (b) { throw new Error(b.msg || '导出失败'); });
}
return res.blob().then(function (blob) {
var a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = (isWhatsApp ? 'ws' : 'tg') + '-sessions.zip';
document.body.appendChild(a);
a.click();
setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000);
});
})
.catch(function (e) {
layer.close(load);
layer.msg(e.message || '导出失败');
});
});
table.on('tool(LAY-session-list)', function (obj) {
if (obj.event === 'payload') {
var url = obj.data.payload_url;