fix: rename assistant and gate exports behind collapsible switch
This commit is contained in:
+16
-8
@@ -4,7 +4,7 @@
|
||||
const core = window.QuestionBankCore;
|
||||
const store = window.YianBankStore;
|
||||
const matcher = window.YianAnswerMatcher;
|
||||
const config = { autoAnswer: false, allowCopy: true, autoExport: true, role: '', course: '' };
|
||||
const config = { autoAnswer: false, allowCopy: true, exportEnabled: false, role: '', course: '' };
|
||||
let snapshot = { records: [], counts: {}, total: 0, revision: '', storage: 'origin' };
|
||||
let loading = true, disposed = false, page = null, previous = null;
|
||||
let searchQuery = '', runKey = '', debounceTimer;
|
||||
@@ -61,7 +61,7 @@
|
||||
}
|
||||
function refreshPanel(extra) {
|
||||
panel.setState(Object.assign({ autoAnswer: config.autoAnswer, allowCopy: config.allowCopy,
|
||||
autoExport: config.autoExport, role: config.role, course: config.course, courses: courses(),
|
||||
exportEnabled: config.exportEnabled, role: config.role, course: config.course, courses: courses(),
|
||||
bankTotal: snapshot.total, roleCounts: snapshot.counts, storageMode: snapshot.storage, loading, metrics }, extra || {}));
|
||||
}
|
||||
function performSearch(query = searchQuery, options = {}) {
|
||||
@@ -106,6 +106,7 @@
|
||||
} finally { loading = false; refreshPanel(); performSearch(searchQuery, { quiet: true }); tick(); }
|
||||
}
|
||||
function exportCurrent(format = 'csv') {
|
||||
if (!config.exportEnabled) throw new Error('请先开启“导出题库”开关');
|
||||
const route = routeInfo();
|
||||
if (!route.practice) throw new Error('请先进入支持的练习页面');
|
||||
const bank = core.extract(document, route.sourceUrl);
|
||||
@@ -115,6 +116,13 @@
|
||||
+ ',' + bank.total + ' 题、' + bank.answered + ' 个答案。若没有文件,请点击导出按钮。', bank.complete ? 'success' : 'warning');
|
||||
return bank;
|
||||
}
|
||||
function setExportEnabled(enabled) {
|
||||
const opening = !!enabled && !config.exportEnabled;
|
||||
config.exportEnabled = !!enabled;
|
||||
// 用户主动重新开启可再次下载;同一开启期间只自动导出一次相同题库。
|
||||
if (opening) exported.clear();
|
||||
refreshPanel(); tick(); return config.exportEnabled;
|
||||
}
|
||||
const panel = window.YianAssistantPanel.create({
|
||||
onAutoChange: setAutoAnswer, onCopyChange: setCopy,
|
||||
onRoleChange: role => { setRole(role).catch(error => panel.setNotice(error.message, 'error')); },
|
||||
@@ -122,7 +130,7 @@
|
||||
onImport: files => { importFiles(files).catch(() => {}); }, onSearch: performSearch,
|
||||
onSelectionSearch: text => performSearch(text),
|
||||
onExport: format => { try { exportCurrent(format); } catch (error) { panel.setNotice(error.message, 'error'); } },
|
||||
onAutoExportChange: enabled => { config.autoExport = !!enabled; saveSetting('autoExport', config.autoExport); tick(); }
|
||||
onExportEnabledChange: setExportEnabled
|
||||
});
|
||||
|
||||
function tick() {
|
||||
@@ -160,11 +168,11 @@
|
||||
refreshPanel({ pageStatus: status, canExport: route.practice && !!bank.total,
|
||||
canAnswer: route.practice && !route.local && page.ready && !loading && !!config.role && !!snapshot.counts[config.role] });
|
||||
if (!route.practice || !page.ready || loading) { if (runner.running) runner.stop('等待兼容练习页面准备完成'); return; }
|
||||
if (config.autoExport && bank.complete) {
|
||||
if (config.exportEnabled && bank.complete) {
|
||||
const key = route.key + '|' + signature;
|
||||
if (!exported.has(key)) {
|
||||
try { exportCurrent('csv'); exported.add(key); }
|
||||
catch (error) { config.autoExport = false; refreshPanel(); panel.setNotice('自动下载失败:' + error.message, 'error'); }
|
||||
catch (error) { config.exportEnabled = false; refreshPanel(); panel.setNotice('自动下载失败:' + error.message, 'error'); }
|
||||
}
|
||||
}
|
||||
const nextRunKey = route.key + '|' + signature + '|' + config.role + '|' + snapshot.revision;
|
||||
@@ -188,13 +196,13 @@
|
||||
}
|
||||
const ready = (async () => {
|
||||
try {
|
||||
const values = await Promise.all([store.load(), store.getSetting('role', ''), store.getSetting('allowCopy', true), store.getSetting('autoExport', true)]);
|
||||
const values = await Promise.all([store.load(), store.getSetting('role', ''), store.getSetting('allowCopy', true)]);
|
||||
snapshot = values[0]; config.role = store.roles.includes(values[1]) ? values[1] : '';
|
||||
config.allowCopy = values[2] !== false; config.autoExport = values[3] !== false;
|
||||
config.allowCopy = values[2] !== false;
|
||||
} catch (error) { panel.setNotice('题库读取失败:' + error.message + '。可重新导入题库。', 'error'); }
|
||||
loading = false; copy.setEnabled(config.allowCopy); refreshPanel(); tick(); return snapshot;
|
||||
})();
|
||||
const api = Object.freeze({ ready, importFiles, setRole, setAutoAnswer, setCopy, search: performSearch, getContext,
|
||||
const api = Object.freeze({ ready, importFiles, setRole, setAutoAnswer, setCopy, setExportEnabled, search: performSearch, getContext,
|
||||
getSnapshot: () => snapshot, getState: () => ({ ...config, metrics, pageReady: !!page && page.ready }),
|
||||
exportCurrent, collectCurrent: () => core.extract(document, routeInfo().sourceUrl), stop: dispose });
|
||||
window.YianAssistant = api; window.YianQuestionBankExporter = api;
|
||||
|
||||
Reference in New Issue
Block a user