баг при смене страницы

This commit is contained in:
2025-07-24 15:39:44 +03:00
parent a13bbc7a68
commit f9e7905d55
16 changed files with 2356 additions and 9 deletions

View File

@@ -0,0 +1,332 @@
# API для элемента "Условия поверки"
## Базовый URL
```
/api/v1/verification-conditions
```
## Эндпоинты
### 1. Лаборатории
#### GET /laboratories
Получить список всех лабораторий
```json
Response 200:
[
{
"id": 1,
"name": "Лаборатория температуры",
"code": "TEMP_LAB",
"description": "Лаборатория поверки температурных приборов",
"address": "ул. Примерная, 1",
"conditionTypes": [
{
"id": 1,
"name": "Температура",
"unit": "°C",
"isRequired": true,
"defaultValue": "20",
"minValue": 15,
"maxValue": 30
}
]
}
]
```
#### GET /laboratories/:id
Получить лабораторию по ID с настройками условий
#### POST /laboratories
Создать новую лабораторию
```json
Request:
{
"name": "Новая лаборатория",
"code": "NEW_LAB",
"description": "Описание",
"address": "Адрес"
}
```
#### PUT /laboratories/:id
Обновить лабораторию
#### DELETE /laboratories/:id
Удалить лабораторию
### 2. Типы условий
#### GET /condition-types
Получить все доступные типы условий
```json
Response 200:
[
{
"id": 1,
"name": "Температура",
"unit": "°C",
"dataType": "number",
"description": "Температура окружающей среды"
}
]
```
#### POST /condition-types
Создать новый тип условия
```json
Request:
{
"name": "Новое условие",
"unit": "единица",
"dataType": "number",
"description": "Описание"
}
```
### 3. Настройка условий для лабораторий
#### GET /laboratories/:labId/condition-types
Получить настроенные типы условий для лаборатории
#### POST /laboratories/:labId/condition-types
Добавить тип условия к лаборатории
```json
Request:
{
"conditionTypeId": 1,
"isRequired": true,
"defaultValue": "20",
"minValue": 15,
"maxValue": 30
}
```
#### PUT /laboratories/:labId/condition-types/:typeId
Обновить настройки типа условия для лаборатории
#### DELETE /laboratories/:labId/condition-types/:typeId
Удалить тип условия из лаборатории
### 4. Условия по дням (основная функциональность)
#### GET /daily-conditions
Получить условия по дням с фильтрацией
```
Query параметры:
- laboratoryId: ID лаборатории
- dateFrom: дата начала (YYYY-MM-DD)
- dateTo: дата окончания (YYYY-MM-DD)
- date: конкретная дата (YYYY-MM-DD)
Примеры:
GET /daily-conditions?laboratoryId=1&dateFrom=2024-01-01&dateTo=2024-01-31
GET /daily-conditions?laboratoryId=1&date=2024-01-15
```
```json
Response 200:
[
{
"id": 1,
"laboratoryId": 1,
"date": "2024-01-15",
"conditions": {
"temperature": 23.5,
"humidity": 45.2,
"atmosphericPressure": 101.3
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z",
"createdBy": "user@example.com"
}
]
```
#### GET /daily-conditions/:id
Получить условия для конкретного дня по ID
#### POST /daily-conditions
Создать/обновить условия для дня
```json
Request:
{
"laboratoryId": 1,
"date": "2024-01-15",
"conditions": {
"temperature": 23.5,
"humidity": 45.2,
"atmosphericPressure": 101.3
}
}
```
#### PUT /daily-conditions/:id
Обновить условия для дня
#### DELETE /daily-conditions/:id
Удалить запись условий
### 5. Специальные эндпоинты для элемента
#### GET /daily-conditions/for-element
Получить условия для использования в элементе формы
```
Query параметры:
- laboratoryId: ID лаборатории (обязательный)
- date: дата (обязательный, YYYY-MM-DD)
```
```json
Response 200:
{
"laboratoryId": 1,
"laboratoryName": "Лаборатория температуры",
"date": "2024-01-15",
"conditions": [
{
"typeId": 1,
"typeName": "Температура",
"unit": "°C",
"value": 23.5,
"isRequired": true,
"minValue": 15,
"maxValue": 30
},
{
"typeId": 2,
"typeName": "Влажность",
"unit": "%",
"value": 45.2,
"isRequired": true,
"minValue": 30,
"maxValue": 80
}
],
"hasUnsavedChanges": false
}
```
#### POST /daily-conditions/save-for-element
Сохранить условия из элемента формы
```json
Request:
{
"laboratoryId": 1,
"date": "2024-01-15",
"conditions": {
"temperature": 23.5,
"humidity": 45.2,
"atmosphericPressure": 101.3
}
}
Response 200:
{
"id": 1,
"success": true,
"message": "Условия сохранены"
}
```
## Типы данных TypeScript
```typescript
interface Laboratory {
id: number
name: string
code: string
description?: string
address?: string
conditionTypes?: LaboratoryConditionType[]
createdAt: string
updatedAt: string
}
interface ConditionType {
id: number
name: string
unit?: string
dataType: 'number' | 'string' | 'boolean'
description?: string
createdAt: string
}
interface LaboratoryConditionType {
id: number
laboratoryId: number
conditionTypeId: number
conditionType?: ConditionType
isRequired: boolean
defaultValue?: string
minValue?: number
maxValue?: number
createdAt: string
}
interface DailyConditions {
id: number
laboratoryId: number
laboratory?: Laboratory
date: string // YYYY-MM-DD
conditions: Record<string, any> // JSON объект
createdAt: string
updatedAt: string
createdBy?: string
}
interface ConditionValue {
typeId: number
typeName: string
unit?: string
value: any
isRequired: boolean
minValue?: number
maxValue?: number
}
interface ElementConditionsData {
laboratoryId: number
laboratoryName: string
date: string
conditions: ConditionValue[]
hasUnsavedChanges: boolean
}
```
## Коды ошибок
- `400` - Неверные параметры запроса
- `404` - Лаборатория/условия не найдены
- `409` - Конфликт (условия для этой даты уже существуют)
- `422` - Ошибка валидации (значения не в допустимом диапазоне)
- `500` - Внутренняя ошибка сервера