更新api和路由

This commit is contained in:
2025-11-16 17:34:04 +08:00
parent 646d9d4e23
commit 5df3ec4da9
4 changed files with 342 additions and 7 deletions

View File

@@ -141,6 +141,126 @@
} }
}, },
"/api/v1/alarm/threshold/area": { "/api/v1/alarm/threshold/area": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "根据过滤条件和分页参数查询区域阈值告警列表",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"告警管理"
],
"summary": "批量查询区域阈值告警",
"parameters": [
{
"type": "integer",
"description": "按区域主控ID过滤",
"name": "area_controller_id",
"in": "query"
},
{
"enum": [
"Debug",
"Info",
"Warn",
"Error",
"DPanic",
"Panic",
"Fatal"
],
"type": "string",
"x-enum-varnames": [
"DebugLevel",
"InfoLevel",
"WarnLevel",
"ErrorLevel",
"DPanicLevel",
"PanicLevel",
"FatalLevel"
],
"description": "按告警等级过滤",
"name": "level",
"in": "query"
},
{
"type": "string",
"description": "排序字段,例如 \"id DESC\"",
"name": "order_by",
"in": "query"
},
{
"type": "integer",
"name": "page",
"in": "query"
},
{
"type": "integer",
"name": "page_size",
"in": "query"
},
{
"enum": [
"信号强度",
"电池电量",
"温度",
"湿度",
"重量"
],
"type": "string",
"x-enum-comments": {
"SensorTypeBatteryLevel": "电池电量",
"SensorTypeHumidity": "湿度",
"SensorTypeSignalMetrics": "信号强度",
"SensorTypeTemperature": "温度",
"SensorTypeWeight": "重量"
},
"x-enum-descriptions": [
"信号强度",
"电池电量",
"温度",
"湿度",
"重量"
],
"x-enum-varnames": [
"SensorTypeSignalMetrics",
"SensorTypeBatteryLevel",
"SensorTypeTemperature",
"SensorTypeHumidity",
"SensorTypeWeight"
],
"description": "按传感器类型过滤",
"name": "sensor_type",
"in": "query"
}
],
"responses": {
"200": {
"description": "成功获取区域阈值告警列表",
"schema": {
"allOf": [
{
"$ref": "#/definitions/controller.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.ListAreaThresholdAlarmResponse"
}
}
}
]
}
}
}
},
"post": { "post": {
"security": [ "security": [
{ {
@@ -302,6 +422,126 @@
} }
}, },
"/api/v1/alarm/threshold/device": { "/api/v1/alarm/threshold/device": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "根据过滤条件和分页参数查询设备阈值告警列表",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"告警管理"
],
"summary": "批量查询设备阈值告警",
"parameters": [
{
"type": "integer",
"description": "按设备ID过滤",
"name": "device_id",
"in": "query"
},
{
"enum": [
"Debug",
"Info",
"Warn",
"Error",
"DPanic",
"Panic",
"Fatal"
],
"type": "string",
"x-enum-varnames": [
"DebugLevel",
"InfoLevel",
"WarnLevel",
"ErrorLevel",
"DPanicLevel",
"PanicLevel",
"FatalLevel"
],
"description": "按告警等级过滤",
"name": "level",
"in": "query"
},
{
"type": "string",
"description": "排序字段,例如 \"id DESC\"",
"name": "order_by",
"in": "query"
},
{
"type": "integer",
"name": "page",
"in": "query"
},
{
"type": "integer",
"name": "page_size",
"in": "query"
},
{
"enum": [
"信号强度",
"电池电量",
"温度",
"湿度",
"重量"
],
"type": "string",
"x-enum-comments": {
"SensorTypeBatteryLevel": "电池电量",
"SensorTypeHumidity": "湿度",
"SensorTypeSignalMetrics": "信号强度",
"SensorTypeTemperature": "温度",
"SensorTypeWeight": "重量"
},
"x-enum-descriptions": [
"信号强度",
"电池电量",
"温度",
"湿度",
"重量"
],
"x-enum-varnames": [
"SensorTypeSignalMetrics",
"SensorTypeBatteryLevel",
"SensorTypeTemperature",
"SensorTypeHumidity",
"SensorTypeWeight"
],
"description": "按传感器类型过滤",
"name": "sensor_type",
"in": "query"
}
],
"responses": {
"200": {
"description": "成功获取设备阈值告警列表",
"schema": {
"allOf": [
{
"$ref": "#/definitions/controller.Response"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.ListDeviceThresholdAlarmResponse"
}
}
}
]
}
}
}
},
"post": { "post": {
"security": [ "security": [
{ {
@@ -5449,15 +5689,15 @@
"alarm_code": { "alarm_code": {
"$ref": "#/definitions/models.AlarmCode" "$ref": "#/definitions/models.AlarmCode"
}, },
"alarm_details": {
"type": "string"
},
"alarm_summary": { "alarm_summary": {
"type": "string" "type": "string"
}, },
"id": { "id": {
"type": "integer" "type": "integer"
}, },
"json_details": {
"type": "string"
},
"level": { "level": {
"$ref": "#/definitions/models.SeverityLevel" "$ref": "#/definitions/models.SeverityLevel"
}, },
@@ -5495,6 +5735,20 @@
} }
} }
}, },
"dto.ListAreaThresholdAlarmResponse": {
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.AreaThresholdAlarmDTO"
}
},
"pagination": {
"$ref": "#/definitions/dto.PaginationDTO"
}
}
},
"dto.ListDeviceCommandLogResponse": { "dto.ListDeviceCommandLogResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -5509,6 +5763,20 @@
} }
} }
}, },
"dto.ListDeviceThresholdAlarmResponse": {
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.DeviceThresholdAlarmDTO"
}
},
"pagination": {
"$ref": "#/definitions/dto.PaginationDTO"
}
}
},
"dto.ListFeedUsageRecordResponse": { "dto.ListFeedUsageRecordResponse": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@@ -58,6 +58,22 @@ import { Response, SeverityLevel, AlarmSourceType, Operator, AlarmCode, Notifica
* @property {number} thresholds * @property {number} thresholds
*/ */
/**
* @typedef {object} ListAreaThresholdAlarmResponse
* @property {Array<AreaThresholdAlarmDTO>} list
* @property {PaginationDTO} pagination
*/
/**
* @typedef {object} AreaThresholdAlarmsParams
* @property {number} [area_controller_id] - 按区域主控ID过滤
* @property {SeverityLevel} [level] - 按告警等级过滤
* @property {string} [order_by] - 排序字段,例如 "id DESC"
* @property {number} [page]
* @property {number} [page_size]
* @property {SensorType} [sensor_type] - 按传感器类型过滤
*/
/** /**
* @typedef {object} UpdateAreaThresholdAlarmDTO * @typedef {object} UpdateAreaThresholdAlarmDTO
* @property {Operator} operator - 新的操作符 * @property {Operator} operator - 新的操作符
@@ -84,6 +100,22 @@ import { Response, SeverityLevel, AlarmSourceType, Operator, AlarmCode, Notifica
* @property {number} thresholds * @property {number} thresholds
*/ */
/**
* @typedef {object} ListDeviceThresholdAlarmResponse
* @property {Array<DeviceThresholdAlarmDTO>} list
* @property {PaginationDTO} pagination
*/
/**
* @typedef {object} DeviceThresholdAlarmsParams
* @property {number} [device_id] - 按设备ID过滤
* @property {SeverityLevel} [level] - 按告警等级过滤
* @property {string} [order_by] - 排序字段,例如 "id DESC"
* @property {number} [page]
* @property {number} [page_size]
* @property {SensorType} [sensor_type] - 按传感器类型过滤
*/
/** /**
* @typedef {object} UpdateDeviceThresholdAlarmDTO * @typedef {object} UpdateDeviceThresholdAlarmDTO
* @property {Operator} operator - 新的操作符 * @property {Operator} operator - 新的操作符
@@ -147,6 +179,15 @@ export const getActiveAlarms = (params) => {
return http.get('/api/v1/alarm/threshold/active-alarms', { params }); return http.get('/api/v1/alarm/threshold/active-alarms', { params });
}; };
/**
* 根据过滤条件和分页参数查询区域阈值告警列表
* @param {AreaThresholdAlarmsParams} params - 查询参数
* @returns {Promise<ListAreaThresholdAlarmResponse>}
*/
export const getAreaThresholdAlarms = (params) => {
return http.get('/api/v1/alarm/threshold/area', { params });
};
/** /**
* 为指定的区域主控创建一个新的阈值告警规则 * 为指定的区域主控创建一个新的阈值告警规则
* @param {CreateAreaThresholdAlarmDTO} requestBody - 创建区域阈值告警请求体 * @param {CreateAreaThresholdAlarmDTO} requestBody - 创建区域阈值告警请求体
@@ -184,6 +225,15 @@ export const deleteAreaThresholdAlarm = (task_id) => {
return http.delete(`/api/v1/alarm/threshold/area/${task_id}`); return http.delete(`/api/v1/alarm/threshold/area/${task_id}`);
}; };
/**
* 根据过滤条件和分页参数查询设备阈值告警列表
* @param {DeviceThresholdAlarmsParams} params - 查询参数
* @returns {Promise<ListDeviceThresholdAlarmResponse>}
*/
export const getDeviceThresholdAlarms = (params) => {
return http.get('/api/v1/alarm/threshold/device', { params });
};
/** /**
* 为单个设备创建一个新的阈值告警规则 * 为单个设备创建一个新的阈值告警规则
* @param {CreateDeviceThresholdAlarmDTO} requestBody - 创建设备阈值告警请求体 * @param {CreateDeviceThresholdAlarmDTO} requestBody - 创建设备阈值告警请求体
@@ -252,10 +302,12 @@ export const snoozeAlarm = (id, requestBody) => {
export const AlarmApi = { export const AlarmApi = {
getActiveAlarms, getActiveAlarms,
getAreaThresholdAlarms,
createAreaThresholdAlarm, createAreaThresholdAlarm,
getAreaThresholdAlarmById, getAreaThresholdAlarmById,
updateAreaThresholdAlarm, updateAreaThresholdAlarm,
deleteAreaThresholdAlarm, deleteAreaThresholdAlarm,
getDeviceThresholdAlarms,
createDeviceThresholdAlarm, createDeviceThresholdAlarm,
getDeviceThresholdAlarmById, getDeviceThresholdAlarmById,
updateDeviceThresholdAlarm, updateDeviceThresholdAlarm,

View File

@@ -17,7 +17,7 @@
:collapse="isCollapse" :collapse="isCollapse"
:collapse-transition="false" :collapse-transition="false"
router router
:default-openeds="['/device-management', '/monitor', '/pms']" :default-openeds="['/device-management', '/monitor', '/pms', '/alarm']"
> >
<el-menu-item index="/"> <el-menu-item index="/">
<el-icon> <el-icon>
@@ -203,7 +203,18 @@
</el-icon> </el-icon>
<span>告警中心</span> <span>告警中心</span>
</template> </template>
<!-- 占位, 后续可添加告警管理和告警配置 --> <el-menu-item index="/alarms">
<el-icon>
<Warning />
</el-icon>
<template #title>告警管理</template>
</el-menu-item>
<el-menu-item index="/alarms/thresholds">
<el-icon>
<Setting />
</el-icon>
<template #title>阈值告警配置</template>
</el-menu-item>
</el-sub-menu> </el-sub-menu>
</el-menu> </el-menu>
@@ -344,7 +355,7 @@ export default {
const activeMenu = computed(() => { const activeMenu = computed(() => {
const path = route.path; const path = route.path;
if (path.startsWith('/monitor') || path.startsWith('/pms') || path.startsWith('/devices') || path.startsWith('/device-templates')) { if (path.startsWith('/monitor') || path.startsWith('/pms') || path.startsWith('/devices') || path.startsWith('/device-templates') || path.startsWith('/alarms')) {
return path; return path;
} }
return route.path; return route.path;
@@ -457,4 +468,4 @@ export default {
font-size: 14px; font-size: 14px;
border-top: 1px solid #eee; border-top: 1px solid #eee;
} }
</style> </style>

View File

@@ -24,12 +24,16 @@ import TaskExecutionLogsView from '../views/monitor/TaskExecutionLogsView.vue';
import UserActionLogsView from '../views/monitor/UserActionLogsView.vue'; import UserActionLogsView from '../views/monitor/UserActionLogsView.vue';
import WeighingBatchesView from '../views/monitor/WeighingBatchesView.vue'; import WeighingBatchesView from '../views/monitor/WeighingBatchesView.vue';
import WeighingRecordsView from '../views/monitor/WeighingRecordsView.vue'; import WeighingRecordsView from '../views/monitor/WeighingRecordsView.vue';
import AlarmList from '../views/alarm/AlarmList.vue';
import ThresholdAlarmList from '../views/alarm/ThresholdAlarmList.vue';
const routes = [ const routes = [
{path: '/', component: Home, meta: {requiresAuth: true, title: '系统首页'}}, {path: '/', component: Home, meta: {requiresAuth: true, title: '系统首页'}},
{path: '/devices', component: DeviceList, meta: {requiresAuth: true, title: '设备管理'}}, {path: '/devices', component: DeviceList, meta: {requiresAuth: true, title: '设备管理'}},
{path: '/device-templates', component: DeviceTemplateList, meta: {requiresAuth: true, title: '设备模板管理'}}, {path: '/device-templates', component: DeviceTemplateList, meta: {requiresAuth: true, title: '设备模板管理'}},
{path: '/plans', component: PlanList, meta: {requiresAuth: true, title: '计划管理'}}, {path: '/plans', component: PlanList, meta: {requiresAuth: true, title: '计划管理'}},
{path: '/alarms', component: AlarmList, meta: {requiresAuth: true, title: '告警管理'}},
{path: '/alarms/thresholds', component: ThresholdAlarmList, meta: {requiresAuth: true, title: '阈值告警配置'}},
{path: '/login', component: LoginForm}, {path: '/login', component: LoginForm},
{path: '/pms/farm-management', name: 'PigFarmManagement', component: PigFarmManagementView, meta: { requiresAuth: true, title: '栏舍管理' }}, {path: '/pms/farm-management', name: 'PigFarmManagement', component: PigFarmManagementView, meta: { requiresAuth: true, title: '栏舍管理' }},
{path: '/pms/batch-management', name: 'PigBatchManagement', component: PigBatchManagementView, meta: { requiresAuth: true, title: '猪群管理' }}, {path: '/pms/batch-management', name: 'PigBatchManagement', component: PigBatchManagementView, meta: { requiresAuth: true, title: '猪群管理' }},