优化付款交货待办展示并支持列表快捷登记
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/* Reuse server forms and existing permissions; keep edits on the current list. */
|
||||
(function () {
|
||||
'use strict';
|
||||
var dialog = document.getElementById('tracking-dialog');
|
||||
if (!dialog || typeof dialog.showModal !== 'function' || !window.fetch) return;
|
||||
var content = document.getElementById('tracking-dialog-content');
|
||||
var errorBox = document.getElementById('tracking-dialog-error');
|
||||
var reload = document.getElementById('tracking-reload');
|
||||
var close = dialog.querySelector('[data-tracking-close]');
|
||||
var editorUrl = '', serial = 0, saving = false, opener;
|
||||
|
||||
function showError(message) {
|
||||
errorBox.textContent = message;
|
||||
errorBox.hidden = false;
|
||||
reload.hidden = false;
|
||||
}
|
||||
function errorText(html) {
|
||||
var doc = new DOMParser().parseFromString(html, 'text/html');
|
||||
var message = doc.querySelector('.wrap .card p, body > p');
|
||||
return message ? message.textContent : '暂时无法完成操作,请重新读取当前状态后再试。';
|
||||
}
|
||||
async function loadEditor() {
|
||||
var current = ++serial;
|
||||
errorBox.hidden = reload.hidden = true;
|
||||
content.textContent = '正在读取最新状态…';
|
||||
try {
|
||||
var response = await fetch(editorUrl + '?fragment=1', {cache: 'no-store', credentials: 'same-origin'});
|
||||
var html = await response.text();
|
||||
if (current !== serial || !dialog.open) return;
|
||||
if (response.redirected) { window.location.assign(response.url); return; }
|
||||
if (!response.ok) { content.textContent = ''; showError(errorText(html)); return; }
|
||||
content.innerHTML = html;
|
||||
var field = content.querySelector('select, input:not([type=hidden])');
|
||||
if (field) field.focus();
|
||||
} catch (error) {
|
||||
if (current === serial && dialog.open) { content.textContent = ''; showError('读取失败,请检查连接后重试。'); }
|
||||
}
|
||||
}
|
||||
document.addEventListener('click', function (event) {
|
||||
var link = event.target.closest('[data-quick-tracking]');
|
||||
if (!link || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;
|
||||
event.preventDefault();
|
||||
opener = link;
|
||||
editorUrl = link.href;
|
||||
dialog.showModal();
|
||||
loadEditor();
|
||||
});
|
||||
close.addEventListener('click', function () { if (!saving) dialog.close(); });
|
||||
dialog.addEventListener('cancel', function (event) { if (saving) event.preventDefault(); });
|
||||
dialog.addEventListener('close', function () {
|
||||
++serial;
|
||||
content.textContent = '';
|
||||
if (opener) opener.focus();
|
||||
});
|
||||
reload.addEventListener('click', loadEditor);
|
||||
dialog.addEventListener('submit', async function (event) {
|
||||
var form = event.target;
|
||||
event.preventDefault();
|
||||
if (saving) return;
|
||||
var data = new FormData(form);
|
||||
var submit = form.querySelector('[type=submit]');
|
||||
saving = true;
|
||||
close.disabled = reload.disabled = submit.disabled = true;
|
||||
errorBox.hidden = reload.hidden = true;
|
||||
var retry = true;
|
||||
try {
|
||||
var response = await fetch(form.action, {method: 'POST', body: data,
|
||||
credentials: 'same-origin', headers: {'X-Tracking-Modal': '1'}});
|
||||
if (response.redirected) { window.location.assign(response.url); return; }
|
||||
if (response.ok && (response.headers.get('Content-Type') || '').indexOf('application/json') >= 0) {
|
||||
var result = await response.json();
|
||||
if (result.ok) { window.location.reload(); return; }
|
||||
}
|
||||
retry = response.status === 400;
|
||||
showError(errorText(await response.text()));
|
||||
} catch (error) {
|
||||
retry = false;
|
||||
showError('连接中断,无法确认是否保存成功。请重新读取当前状态,核对后再操作。');
|
||||
} finally {
|
||||
saving = false;
|
||||
close.disabled = reload.disabled = false;
|
||||
submit.disabled = !retry;
|
||||
}
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user