From 90107b33d35931c3d2cdde5e683ad69109413919 Mon Sep 17 00:00:00 2001 From: wzclm <2855471171@qq.com> Date: Sun, 23 Feb 2025 15:30:58 +0800 Subject: [PATCH] Add delete functionality for patrol events, tasks, and plans - Implement single and batch delete methods for events, tasks, and plans - Add delete API endpoints in respective modules - Update Vue components with delete buttons and confirmation dialogs - Implement validation to prevent deleting tasks/plans with active status or related records - Enhance user experience with clear error messages and selective deletion --- src/api/monitor/observation.js | 40 ++ src/api/patrol/event.js | 18 + src/api/patrol/plan.js | 14 + src/api/patrol/task.js | 32 ++ src/layout/AdminLayout.vue | 1 + src/router/index.js | 5 + src/views/monitor/environment/index.vue | 4 +- src/views/monitor/observations/index.vue | 485 ++++++++++++++++++ src/views/patrol/events/index.vue | 112 ++++- src/views/patrol/plans/index.vue | 602 +++++++++++++++++------ src/views/patrol/tasks/index.vue | 438 ++++++++++++++++- src/views/system/carousel/index.vue | 4 +- src/views/system/data/index.vue | 4 +- 13 files changed, 1580 insertions(+), 179 deletions(-) create mode 100644 src/api/monitor/observation.js create mode 100644 src/views/monitor/observations/index.vue diff --git a/src/api/monitor/observation.js b/src/api/monitor/observation.js new file mode 100644 index 0000000..3267cf2 --- /dev/null +++ b/src/api/monitor/observation.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 查询观察记录列表 +export function getObservationList(query) { + return request.get('/api/admin/observations', { params: query }) +} + +// 获取观察记录详细信息 +export function getObservation(id) { + return request.get(`/api/admin/observations/${id}`) +} + +// 创建观察记录 +export function createObservation(data) { + return request.post('/api/admin/observations', data) +} + +// 更新观察记录 +export function updateObservation(id, data) { + return request.put(`/api/admin/observations/${id}`, data) +} + +// 更新观察记录状态(审核) +export function reviewObservation(id, data) { + return request.put(`/api/admin/observations/${id}/status`, data) +} + +// 删除观察记录 +export function deleteObservation(id) { + return request.delete(`/api/admin/observations/${id}`) +} + +// 导出观察记录 +export function exportObservation(query) { + return request({ + url: '/monitor/observation/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/src/api/patrol/event.js b/src/api/patrol/event.js index 4582f6c..098984d 100644 --- a/src/api/patrol/event.js +++ b/src/api/patrol/event.js @@ -114,4 +114,22 @@ export function batchExportEvents(ids) { */ export function getEventStatistics() { return request.get('/api/admin/patrol/events/statistics/overview') +} + +/** + * 删除单个事件 + * @param {string|number} id - 事件ID + * @returns {Promise} 返回删除结果 + */ +export function deleteEvent(id) { + return request.delete(`/api/admin/patrol/events/${id}`) +} + +/** + * 批量删除事件 + * @param {Array} ids - 事件ID列表 + * @returns {Promise} 返回批量删除结果 + */ +export function batchDeleteEvents(ids) { + return request.post('/api/admin/patrol/events/batch/delete', { ids }) } \ No newline at end of file diff --git a/src/api/patrol/plan.js b/src/api/patrol/plan.js index 254f0cf..ec0210a 100644 --- a/src/api/patrol/plan.js +++ b/src/api/patrol/plan.js @@ -91,6 +91,13 @@ export function checkPlanName(name, excludeId) { /** * 删除巡护计划 + * 只能删除以下状态的计划: + * - 未开始的计划 + * - 已完成的计划 + * - 已取消的计划 + * 不能删除: + * - 进行中的计划 + * - 已有关联巡护任务的计划 * @param {string|number} id - 计划ID * @returns {Promise} 返回删除结果 */ @@ -100,6 +107,13 @@ export function deletePlan(id) { /** * 批量删除巡护计划 + * 只能删除以下状态的计划: + * - 未开始的计划 + * - 已完成的计划 + * - 已取消的计划 + * 不能删除: + * - 进行中的计划 + * - 已有关联巡护任务的计划 * @param {Array} ids - 计划ID列表 * @returns {Promise} 返回批量删除结果 */ diff --git a/src/api/patrol/task.js b/src/api/patrol/task.js index 2d2e4af..1416ae7 100644 --- a/src/api/patrol/task.js +++ b/src/api/patrol/task.js @@ -90,4 +90,36 @@ export function getExecutorTasks(executorId, params = {}) { */ export function cancelTask(id, data = {}) { return request.post(`/api/admin/patrol/tasks/${id}/cancel`, data) +} + +/** + * 删除巡护任务 + * 只能删除以下状态的任务: + * - 未开始的任务 + * - 已完成的任务 + * - 已取消的任务 + * 不能删除: + * - 进行中的任务 + * - 已有巡护记录的任务 + * @param {string|number} id - 任务ID + * @returns {Promise} 返回删除结果 + */ +export function deleteTask(id) { + return request.delete(`/api/admin/patrol/tasks/${id}`) +} + +/** + * 批量删除巡护任务 + * 只能删除以下状态的任务: + * - 未开始的任务 + * - 已完成的任务 + * - 已取消的任务 + * 不能删除: + * - 进行中的任务 + * - 已有巡护记录的任务 + * @param {Array} ids - 任务ID列表 + * @returns {Promise} 返回批量删除结果 + */ +export function batchDeleteTasks(ids) { + return request.post('/api/admin/patrol/tasks/batch/delete', { ids }) } \ No newline at end of file diff --git a/src/layout/AdminLayout.vue b/src/layout/AdminLayout.vue index 5b8b3a9..9ffd0dc 100644 --- a/src/layout/AdminLayout.vue +++ b/src/layout/AdminLayout.vue @@ -124,6 +124,7 @@ const handleLogout = () => { 物种监测 环境监测 + 观测管理 diff --git a/src/router/index.js b/src/router/index.js index ca9f0fe..d3e1389 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -59,6 +59,11 @@ const router = createRouter({ name: 'EnvironmentMonitor', component: () => import('../views/monitor/environment/index.vue') }, + { + path: 'monitor/observations', + name: 'ObservationsMonitor', + component: () => import('../views/monitor/observations/index.vue') + }, { path: 'patrol/tasks', name: 'PatrolTasks', diff --git a/src/views/monitor/environment/index.vue b/src/views/monitor/environment/index.vue index 4eb4fe1..00e6798 100644 --- a/src/views/monitor/environment/index.vue +++ b/src/views/monitor/environment/index.vue @@ -452,8 +452,8 @@ onMounted(() => { - Excel - CSV + Excel + CSV diff --git a/src/views/monitor/observations/index.vue b/src/views/monitor/observations/index.vue new file mode 100644 index 0000000..6a7abfc --- /dev/null +++ b/src/views/monitor/observations/index.vue @@ -0,0 +1,485 @@ + + + + + diff --git a/src/views/patrol/events/index.vue b/src/views/patrol/events/index.vue index b2da67e..4151a52 100644 --- a/src/views/patrol/events/index.vue +++ b/src/views/patrol/events/index.vue @@ -1,8 +1,8 @@ \ No newline at end of file diff --git a/src/views/patrol/tasks/index.vue b/src/views/patrol/tasks/index.vue index 0d2eeec..141229f 100644 --- a/src/views/patrol/tasks/index.vue +++ b/src/views/patrol/tasks/index.vue @@ -1,7 +1,7 @@ @@ -1068,6 +1461,15 @@ const getUserNames = (ids) => { } } +.operation-btns { + padding: 16px 0; + display: flex; + justify-content: flex-end; + gap: 12px; + border-bottom: 1px solid $border-color; + margin-bottom: 16px; +} + .mt-20 { margin-top: 20px; } diff --git a/src/views/system/carousel/index.vue b/src/views/system/carousel/index.vue index 0ec3b3f..8d7fb4c 100644 --- a/src/views/system/carousel/index.vue +++ b/src/views/system/carousel/index.vue @@ -394,8 +394,8 @@ onMounted(() => { - 输入图片地址 - 上传图片 + 输入图片地址 + 上传图片