Add comprehensive patrol event management module

- Implement event API for creating, retrieving, updating, and exporting patrol events
- Create detailed Vue component with advanced features:
  * Event statistics dashboard
  * Comprehensive search and filtering
  * Image and video preview
  * Event processing and status management
  * Export functionality for individual and batch events
- Add support for event lifecycle management and detailed event tracking
This commit is contained in:
wzclm 2025-02-22 20:28:59 +08:00
parent b1931cc8c9
commit 1972b43dec
3 changed files with 1158 additions and 6 deletions

117
src/api/patrol/event.js Normal file
View File

@ -0,0 +1,117 @@
import request from '@/utils/request'
/**
* 创建安防事件
* @param {Object} data - 事件数据
* @param {string} data.event_type - 事件类型非法捕捞/环境破坏/设施损坏/其他事件
* @param {number} data.event_level - 事件级别1-轻微 2-中等 3-严重
* @param {string} data.location_description - 位置描述
* @param {string} data.description - 事件描述
* @param {Array} [data.image_urls] - 图片地址列表
* @param {Array} [data.video_urls] - 视频地址列表
* @param {string} [data.reporter_name] - 上报人姓名
* @param {string} [data.reporter_phone] - 上报人电话
* @param {string} [data.remark] - 备注信息
* @returns {Promise} 返回创建结果
*/
export function createEvent(data) {
return request.post('/api/admin/patrol/events', data)
}
/**
* 获取安防事件列表
* @param {Object} params - 查询参数
* @param {number} [params.page=1] - 页码
* @param {number} [params.pageSize=10] - 每页条数
* @param {string} [params.keyword] - 搜索关键词
* @param {string} [params.event_type] - 事件类型
* @param {number} [params.event_level] - 事件级别
* @param {number} [params.handling_status] - 处理状态
* @param {string} [params.start_date] - 开始日期
* @param {string} [params.end_date] - 结束日期
* @returns {Promise} 返回事件列表数据
*/
export function getEventList(params = {}) {
return request.get('/api/admin/patrol/events', {
params: {
page: params.page || 1,
page_size: params.pageSize || 10,
keyword: params.keyword || undefined,
event_type: params.event_type || undefined,
event_level: params.event_level || undefined,
handling_status: params.handling_status || undefined,
start_date: params.start_date || undefined,
end_date: params.end_date || undefined
}
})
}
/**
* 获取安防事件详情
* @param {string|number} id - 事件ID
* @returns {Promise} 返回事件详情数据
*/
export function getEventDetail(id) {
return request.get(`/api/admin/patrol/events/${id}`)
}
/**
* 更新事件处理状态
* @param {string|number} id - 事件ID
* @param {Object} data - 更新数据
* @param {number} data.handling_status - 处理状态0-待处理 1-处理中 2-已处理 3-已关闭
* @param {string} [data.handling_description] - 处理描述
* @returns {Promise} 返回更新结果
*/
export function updateEventStatus(id, data) {
return request.put(`/api/admin/patrol/events/${id}/status`, {
handling_status: data.handling_status,
handling_description: data.handling_description || '',
updated_by: 1 // 默认管理员ID
})
}
/**
* 导出事件列表
* @param {Object} params - 导出参数
* @param {string} [params.event_type] - 事件类型
* @param {number} [params.event_level] - 事件级别
* @param {number} [params.handling_status] - 处理状态
* @param {string} [params.start_date] - 开始日期
* @param {string} [params.end_date] - 结束日期
* @returns {Promise} 返回二进制文件流
*/
export function exportEvents(params = {}) {
return request.get('/api/admin/patrol/events/export/list', {
params,
responseType: 'blob',
headers: {
'Accept': 'application/vnd.ms-excel'
}
})
}
/**
* 批量导出事件
* @param {Array<string|number>} ids - 事件ID列表
* @returns {Promise} 返回二进制文件流
*/
export function batchExportEvents(ids) {
return request.post('/api/admin/patrol/events/export/batch',
{ ids },
{
responseType: 'blob',
headers: {
'Accept': 'application/vnd.ms-excel'
}
}
)
}
/**
* 获取事件统计信息
* @returns {Promise} 返回统计数据
*/
export function getEventStatistics() {
return request.get('/api/admin/patrol/events/statistics/overview')
}

File diff suppressed because it is too large Load Diff

View File

@ -240,6 +240,7 @@ const initTrendChart = () => {
type: 'dashed'
}
},
minInterval: 1,
axisLabel: {
formatter: '{value} 次',
margin: 10