- 写文章页:可见性/类型/转载来源/创作声明/禁止转载 属性表单 - 类型切换联动(转载显示来源,原创显示禁止转载复选框) - 文章详情页:私密角标、置顶标记、创作声明横幅、转载来源 - 管理后台:置顶/取消置顶操作按钮 - PostService Create/Update 签名扩展接受文章属性 - DTO/接口同步更新
74 lines
3.3 KiB
JavaScript
74 lines
3.3 KiB
JavaScript
(function() {
|
|
// CSRF token 由 shared/utils.js 的 getCSRFToken() 统一提供
|
|
// showConfirm / showPrompt / escapeHtml 由 shared/utils.js 统一提供
|
|
// api 对象 (api.get/api.post/api.put) 由 admin/common.js 统一提供
|
|
|
|
function refreshPage() { window.location.reload(); }
|
|
|
|
function handleClick(sel, confirmMsg, actionFn) {
|
|
var btns = document.querySelectorAll(sel);
|
|
btns.forEach(function(btn) {
|
|
btn.addEventListener('click', async function() {
|
|
var id = btn.getAttribute('data-id');
|
|
if (confirmMsg) {
|
|
var ok = await showConfirm('确认', confirmMsg);
|
|
if (!ok) return;
|
|
}
|
|
actionFn(id);
|
|
});
|
|
});
|
|
}
|
|
|
|
// 审核通过
|
|
handleClick('.post-approve', '确定审核通过此文章吗?', function(id) {
|
|
api.post('/api/admin/posts/' + id + '/approve')
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
|
|
// 退回
|
|
handleClick('.post-reject', null, function(id) {
|
|
showPrompt('请输入退回理由(必填):').then(function(reason) {
|
|
if (!reason || !reason.trim()) return;
|
|
api.post('/api/admin/posts/' + id + '/reject', { reason: reason.trim() })
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
});
|
|
|
|
// 锁定
|
|
handleClick('.post-lock', null, function(id) {
|
|
showPrompt('请输入锁定理由(必填):').then(function(reason) {
|
|
if (!reason || !reason.trim()) return;
|
|
api.post('/api/admin/posts/' + id + '/lock', { reason: reason.trim() })
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
});
|
|
|
|
// 解锁
|
|
handleClick('.post-unlock', '确定解锁此文章吗?', function(id) {
|
|
api.post('/api/admin/posts/' + id + '/unlock')
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
|
|
// 置顶
|
|
document.querySelectorAll('.post-pin').forEach(function(btn) {
|
|
btn.addEventListener('click', function() {
|
|
var id = btn.getAttribute('data-id');
|
|
var pinType = btn.getAttribute('data-pin-type');
|
|
api.post('/api/admin/posts/' + id + '/pin', { pin_type: pinType })
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
});
|
|
|
|
// 取消置顶
|
|
handleClick('.post-unpin', '确定取消置顶吗?', function(id) {
|
|
api.post('/api/admin/posts/' + id + '/unpin')
|
|
.then(function(d) { if (d.success) refreshPage(); else showToast(d.message || '操作失败', 'error'); })
|
|
.catch(function() { showToast('操作失败', 'error'); });
|
|
});
|
|
})();
|