let currentPage = 1;
let claimModal, completeModal, detailModal;
$(document).ready(function() {
// 初始化模态框
claimModal = new bootstrap.Modal(document.getElementById('claimModal'));
completeModal = new bootstrap.Modal(document.getElementById('completeModal'));
detailModal = new bootstrap.Modal(document.getElementById('detailModal'));
// 加载任务列表
loadTasks();
});
// 加载任务列表
function loadTasks(page = 1) {
const status = $('#filter-status').val();
const scope = $('#filter-scope').val();
let params = {
page: page,
per_page: 20
};
if (status) {
params.status = status;
}
if (scope === 'my') {
const user = JSON.parse(localStorage.getItem('current_user'));
params.user_id = user.id;
}
$.ajax({
url: '/api/groups/1/tasks',
method: 'GET',
data: params,
success: function(response) {
renderTasks(response.tasks);
renderPagination(response.page, response.pages);
currentPage = page;
},
error: handleAjaxError
});
}
// 渲染任务列表
function renderTasks(tasks) {
const tbody = $('#task-list');
tbody.empty();
if (tasks.length === 0) {
tbody.append('
| 暂无数据 |
');
return;
}
const currentUser = JSON.parse(localStorage.getItem('current_user'));
tasks.forEach(function(task) {
const priorityClass = getPriorityClass(task.priority);
let actions = '';
// 待认领状态 - 所有人可认领
if (task.status === 'pending') {
actions = ``;
}
// 已认领状态 - 认领人可完成或取消
if (task.status === 'claimed' && task.claimed_by_id === currentUser.id) {
actions = `
`;
}
// 查看详情按钮
actions += ` `;
// 管理员可删除
if (currentUser.role === 'admin') {
actions += ` `;
}
const row = `
| ${task.id} |
${task.series_link ?
`${task.series_name}` :
task.series_name
}
|
${formatDate(task.series_date)} |
${task.priority || '-'} |
${getStatusBadge(task.status)} |
${task.claimed_by || '-'} |
${task.torrent_id || '-'} |
${formatDateTime(task.created_at)} |
${actions} |
`;
tbody.append(row);
});
}
// 渲染分页
function renderPagination(current, total) {
const pagination = $('#pagination');
pagination.empty();
if (total <= 1) return;
// 上一页
pagination.append(`
上一页
`);
// 页码
for (let i = 1; i <= total; i++) {
if (i === 1 || i === total || (i >= current - 2 && i <= current + 2)) {
pagination.append(`
${i}
`);
} else if (i === current - 3 || i === current + 3) {
pagination.append('...');
}
}
// 下一页
pagination.append(`
下一页
`);
}
// 打开认领模态框
function openClaimModal(taskId) {
$('#claim-task-id').val(taskId);
$('#claim-note').val('');
claimModal.show();
}
// 提交认领
function submitClaim() {
const taskId = $('#claim-task-id').val();
const note = $('#claim-note').val();
$.ajax({
url: `/api/tasks/${taskId}/claim`,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify({
claim_note: note
}),
success: function() {
claimModal.hide();
showSuccess('认领成功!');
loadTasks(currentPage);
},
error: handleAjaxError
});
}
// 打开完成模态框
function openCompleteModal(taskId) {
$('#complete-task-id').val(taskId);
$('#torrent-id').val('');
$('#complete-note').val('');
completeModal.show();
}
// 提交完成
function submitComplete() {
const taskId = $('#complete-task-id').val();
const torrentId = $('#torrent-id').val();
const note = $('#complete-note').val();
if (!torrentId) {
alert('请填写种子ID');
return;
}
$.ajax({
url: `/api/tasks/${taskId}/complete`,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify({
torrent_id: torrentId,
complete_note: note
}),
success: function() {
completeModal.hide();
showSuccess('任务完成!');
loadTasks(currentPage);
},
error: handleAjaxError
});
}
// 取消认领
function cancelClaim(taskId) {
if (!confirm('确定要取消认领吗?')) {
return;
}
$.ajax({
url: `/api/tasks/${taskId}/cancel-claim`,
method: 'POST',
success: function() {
showSuccess('已取消认领');
loadTasks(currentPage);
},
error: handleAjaxError
});
}
// 查看详情
function viewDetail(taskId) {
$.ajax({
url: `/api/tasks/${taskId}`,
method: 'GET',
success: function(task) {
const html = `
- 任务ID
- ${task.id}
- 剧集名称
- ${task.series_name}
- 剧集链接
-
${task.series_link ?
`${task.series_link}` :
'-'
}
- 更新日期
- ${formatDate(task.series_date)}
- 优先级
- ${task.priority || '-'}
- 状态
- ${getStatusBadge(task.status)}
- 创建人
- ${task.creator}
- 创建时间
- ${formatDateTime(task.created_at)}
${task.claimed_by ? `
- 认领人
- ${task.claimed_by}
- 认领时间
- ${formatDateTime(task.claimed_at)}
- 认领备注
- ${task.claim_note || '-'}
` : ''}
${task.torrent_id ? `
- 种子ID
- ${task.torrent_id}
- 完成时间
- ${formatDateTime(task.completed_at)}
- 完成备注
- ${task.complete_note || '-'}
` : ''}
`;
$('#task-detail').html(html);
detailModal.show();
},
error: handleAjaxError
});
}
// 删除任务
function deleteTask(taskId) {
if (!confirm('确定要删除这个任务吗?此操作不可恢复!')) {
return;
}
$.ajax({
url: `/api/tasks/${taskId}`,
method: 'DELETE',
success: function() {
showSuccess('任务已删除');
loadTasks(currentPage);
},
error: handleAjaxError
});
}
// 重置筛选器
function resetFilters() {
$('#filter-status').val('');
$('#filter-scope').val('all');
loadTasks(1);
}