';
}
// Round management
var _rd = [];
function _rb() {
var c = document.getElementById('rc'); if (!c) return;
c.innerHTML = _rd.map(function(r,i) {
return '
'+
'R'+(r.round||i+1)+''+
''+
''+
''+
''+
''+
'
';
}).join('');
}
function addR() {
_rd.push({round:_rd.length+1, type:'修回', reviewer:'', date:'', notes:''});
_rb();
}
// ═══════════ SAVE ═══════════
function save() {
var data = load();
// Collect rounds
var rounds = [];
var divs = document.querySelectorAll('#rc > div');
divs.forEach(function(div, i) {
rounds.push({
round: i+1,
type: (div.querySelector('.rt')?.value || '修回'),
reviewer: (div.querySelector('.rr')?.value || ''),
date: (div.querySelector('.rd')?.value || ''),
notes: (div.querySelector('.rn')?.value || '')
});
});
var entry = {
journal: document.getElementById('f_j')?.value || '',
manuscriptId: document.getElementById('f_m')?.value || '',
title: document.getElementById('f_t')?.value || '',
status: document.getElementById('f_s')?.value || 'pending',
deadline: document.getElementById('f_d')?.value || '',
rounds: rounds,
notes: document.getElementById('f_n')?.value || '',
updatedAt: new Date().toISOString()
};
if (editId) {
var idx = data.findIndex(function(r){return r.id===editId;});
if (idx >= 0) { entry.id = editId; entry.createdAt = data[idx].createdAt; data[idx] = entry; }
} else {
entry.id = 'M' + String(Date.now()).slice(-6);
entry.createdAt = new Date().toISOString();
data.push(entry);
}
save(data); closeModal(); render(); toast('✅ 已保存');
}
function del(id) {
if (!confirm('确定删除?')) return;
var data = load().filter(function(r){return r.id!==id;});
save(data); render(); toast('🗑 已删除');
}
// ═══════════ IMPORT / EXPORT ═══════════
function exportData() {
var b = new Blob([JSON.stringify(load(),null,2)], {type:'application/json'});
var a = document.createElement('a');
a.href = URL.createObjectURL(b);
a.download = 'reviews-'+new Date().toISOString().slice(0,10)+'.json';
a.click(); toast('📥 已导出');
}
function importData() {
var inp = document.createElement('input');
inp.type = 'file'; inp.accept = '.json';
inp.onchange = function(e) {
var f = e.target.files[0]; if (!f) return;
var r = new FileReader();
r.onload = function(ev) {
try {
var d = JSON.parse(ev.target.result);
if (!Array.isArray(d)) throw 0;
if (!confirm('导入 '+d.length+' 条记录,覆盖当前数据?')) return;
save(d); render(); toast('📤 已导入 '+d.length+' 条');
} catch(x) { alert('格式错误'); }
};
r.readAsText(f);
};
inp.click();
}
// ═══════════ TOAST ═══════════
function toast(msg) {
var t = document.getElementById('toast');
t.textContent = msg; t.classList.add('on');
setTimeout(function(){ t.classList.remove('on'); }, 2000);
}
// Init
window.addEventListener('DOMContentLoaded', function() {
if (sessionStorage.getItem('mr_auth') === '1') render();
});