等待后端更新接口
This commit is contained in:
+75
-29
@@ -181,6 +181,10 @@
|
||||
else root.location.href = 'login.html';
|
||||
}
|
||||
|
||||
function isForbidden(error) {
|
||||
return Number(error && (error.status || error.code)) === 403;
|
||||
}
|
||||
|
||||
function getFormValues(form) {
|
||||
var values = {};
|
||||
|
||||
@@ -190,10 +194,35 @@
|
||||
return values;
|
||||
}
|
||||
|
||||
function setStatus(message) {
|
||||
function setApiState(target, type, message) {
|
||||
if (!target) return;
|
||||
if (root.ProfileUI && root.ProfileUI.setApiState && type) {
|
||||
root.ProfileUI.setApiState(target, type, message);
|
||||
return;
|
||||
}
|
||||
target.textContent = message || '';
|
||||
}
|
||||
|
||||
function setStatus(type, message) {
|
||||
var status = root.document && root.document.querySelector('[data-feedback-status]');
|
||||
|
||||
if (status) status.textContent = message || '';
|
||||
setApiState(status, type, message);
|
||||
}
|
||||
|
||||
function setFeedbackList(list, items, detailPage) {
|
||||
if (!list) return;
|
||||
if (!items.length) {
|
||||
setApiState(list, 'empty', '当前没有反馈记录。');
|
||||
return;
|
||||
}
|
||||
list.innerHTML = renderFeedbackList(items, { detailPage: detailPage || 'ticket-detail.html' });
|
||||
}
|
||||
|
||||
function setPendingButton(button, pending, label) {
|
||||
if (!button) return;
|
||||
if (!button.dataset.defaultLabel) button.dataset.defaultLabel = button.textContent;
|
||||
button.disabled = pending;
|
||||
button.textContent = pending ? label : button.dataset.defaultLabel;
|
||||
}
|
||||
|
||||
async function readMyFeedback(api) {
|
||||
@@ -225,24 +254,32 @@
|
||||
var items;
|
||||
|
||||
if (!list) return [];
|
||||
setStatus('正在读取反馈记录…');
|
||||
setApiState(list, 'loading', '正在读取反馈记录…');
|
||||
setStatus('loading', '正在读取反馈记录…');
|
||||
try {
|
||||
items = await readMyFeedback(api);
|
||||
list.innerHTML = renderFeedbackList(items, { detailPage: 'ticket-detail.html' });
|
||||
setStatus('');
|
||||
setFeedbackList(list, items, 'ticket-detail.html');
|
||||
setStatus('', '');
|
||||
return items;
|
||||
} catch (error) {
|
||||
if (shouldRedirectToLogin(api, error)) {
|
||||
redirectToLogin(api);
|
||||
return [];
|
||||
}
|
||||
list.innerHTML = '<div class="api-empty">读取反馈记录失败</div>';
|
||||
setStatus(error.message || '读取反馈记录失败,请稍后重试');
|
||||
setApiState(list, isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看反馈记录。' : '读取反馈记录失败,请稍后重试。');
|
||||
setStatus(isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看反馈记录。' : (error.message || '读取反馈记录失败,请稍后重试。'));
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
if (refresh) refresh.addEventListener('click', loadList);
|
||||
if (refresh) refresh.addEventListener('click', async function () {
|
||||
setPendingButton(refresh, true, '正在刷新…');
|
||||
try {
|
||||
await loadList();
|
||||
} finally {
|
||||
setPendingButton(refresh, false, '正在刷新…');
|
||||
}
|
||||
});
|
||||
form.addEventListener('submit', async function (event) {
|
||||
var body;
|
||||
var validation;
|
||||
@@ -255,12 +292,12 @@
|
||||
body = buildFeedbackBody(getFormValues(form));
|
||||
validation = validateFeedbackBody(body);
|
||||
if (validation) {
|
||||
setStatus(validation);
|
||||
setStatus('error', validation);
|
||||
return;
|
||||
}
|
||||
writePending = true;
|
||||
if (button) button.disabled = true;
|
||||
setStatus('正在提交反馈…');
|
||||
setPendingButton(button, true, '正在提交…');
|
||||
setStatus('loading', '正在提交反馈…');
|
||||
try {
|
||||
created = normalizeFeedback(await api.submitFeedback(body));
|
||||
if (!created) throw new Error('提交响应缺少有效反馈信息');
|
||||
@@ -272,18 +309,18 @@
|
||||
if (root.location) root.location.href = buildFeedbackDetailUrl(created.feedbackId);
|
||||
return;
|
||||
}
|
||||
if (list) list.innerHTML = renderFeedbackList(refreshed, { detailPage: 'ticket-detail.html' });
|
||||
setFeedbackList(list, refreshed, 'ticket-detail.html');
|
||||
form.reset();
|
||||
setStatus('反馈已提交');
|
||||
setStatus('', '反馈已提交');
|
||||
} catch (error) {
|
||||
if (shouldRedirectToLogin(api, error)) {
|
||||
redirectToLogin(api);
|
||||
return;
|
||||
}
|
||||
setStatus(error.message || '提交反馈失败,请稍后重试');
|
||||
setStatus(isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限提交反馈。' : (error.message || '提交反馈失败,请稍后重试。'));
|
||||
} finally {
|
||||
writePending = false;
|
||||
if (button) button.disabled = false;
|
||||
setPendingButton(button, false, '正在提交…');
|
||||
}
|
||||
});
|
||||
await loadList();
|
||||
@@ -303,22 +340,28 @@
|
||||
|
||||
async function loadList() {
|
||||
try {
|
||||
setStatus('正在读取反馈记录…');
|
||||
list.innerHTML = renderFeedbackList(await readMyFeedback(api), {
|
||||
detailPage: 'ticket-detail.html'
|
||||
});
|
||||
setStatus('');
|
||||
setApiState(list, 'loading', '正在读取反馈记录…');
|
||||
setStatus('loading', '正在读取反馈记录…');
|
||||
setFeedbackList(list, await readMyFeedback(api), 'ticket-detail.html');
|
||||
setStatus('', '');
|
||||
} catch (error) {
|
||||
if (shouldRedirectToLogin(api, error)) {
|
||||
redirectToLogin(api);
|
||||
return;
|
||||
}
|
||||
list.innerHTML = '<div class="api-empty">读取反馈记录失败</div>';
|
||||
setStatus(error.message || '读取反馈记录失败,请稍后重试');
|
||||
setApiState(list, isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看反馈记录。' : '读取反馈记录失败,请稍后重试。');
|
||||
setStatus(isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看反馈记录。' : (error.message || '读取反馈记录失败,请稍后重试。'));
|
||||
}
|
||||
}
|
||||
|
||||
if (refresh) refresh.addEventListener('click', loadList);
|
||||
if (refresh) refresh.addEventListener('click', async function () {
|
||||
setPendingButton(refresh, true, '正在刷新…');
|
||||
try {
|
||||
await loadList();
|
||||
} finally {
|
||||
setPendingButton(refresh, false, '正在刷新…');
|
||||
}
|
||||
});
|
||||
await loadList();
|
||||
}
|
||||
|
||||
@@ -331,7 +374,7 @@
|
||||
|
||||
if (!page || !detail) return;
|
||||
if (!feedbackId) {
|
||||
detail.innerHTML = '<div class="api-empty">反馈记录不存在或无权查看</div>';
|
||||
setApiState(detail, 'empty', '反馈记录不存在或无权查看。');
|
||||
return;
|
||||
}
|
||||
if (shouldRedirectToLogin(api)) {
|
||||
@@ -339,17 +382,19 @@
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setStatus('正在读取反馈详情…');
|
||||
setApiState(detail, 'loading', '正在读取反馈详情…');
|
||||
setStatus('loading', '正在读取反馈详情…');
|
||||
item = findFeedbackById(await api.myFeedback(), feedbackId);
|
||||
detail.innerHTML = renderFeedbackDetail(item);
|
||||
setStatus(item ? '' : '反馈记录不存在或无权查看');
|
||||
if (item) detail.innerHTML = renderFeedbackDetail(item);
|
||||
else setApiState(detail, 'empty', '反馈记录不存在或无权查看。');
|
||||
setStatus('', item ? '' : '反馈记录不存在或无权查看。');
|
||||
} catch (error) {
|
||||
if (shouldRedirectToLogin(api, error)) {
|
||||
redirectToLogin(api);
|
||||
return;
|
||||
}
|
||||
detail.innerHTML = '<div class="api-empty">反馈详情读取失败</div>';
|
||||
setStatus(error.message || '反馈详情读取失败,请稍后重试');
|
||||
setApiState(detail, isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看该反馈详情。' : '反馈详情读取失败,请稍后重试。');
|
||||
setStatus(isForbidden(error) ? 'forbidden' : 'error', isForbidden(error) ? '暂无权限查看该反馈详情。' : (error.message || '反馈详情读取失败,请稍后重试。'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -377,6 +422,7 @@
|
||||
buildFeedbackDetailUrl: buildFeedbackDetailUrl,
|
||||
renderFeedbackList: renderFeedbackList,
|
||||
renderFeedbackDetail: renderFeedbackDetail,
|
||||
isForbidden: isForbidden,
|
||||
initFeedbackFormPage: initFeedbackFormPage,
|
||||
initFeedbackListPage: initFeedbackListPage,
|
||||
initFeedbackDetailPage: initFeedbackDetailPage,
|
||||
|
||||
Reference in New Issue
Block a user