1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

add websockets support

This commit is contained in:
MoonTestUse1
2025-01-05 01:28:50 +06:00
parent 7997184442
commit 3ccd6c1e96
2 changed files with 44 additions and 20 deletions

View File

@@ -44,16 +44,25 @@ async def create_request(
db_request = requests.create_request(db, request, current_employee["id"])
# Отправляем уведомление в Telegram
await notify_new_request(db_request.id)
# Получаем полные данные о заявке для отправки через WebSocket
request_data = {
"id": db_request.id,
"title": db_request.title,
"description": db_request.description,
"status": db_request.status,
"priority": db_request.priority,
"request_type": db_request.request_type,
"department": db_request.department,
"employee_id": current_employee["id"],
"employee_name": current_employee.get("full_name", ""),
"created_at": db_request.created_at.isoformat()
}
# Отправляем уведомление через WebSocket всем админам
await notification_manager.broadcast_to_admins({
"type": "new_request",
"data": {
"id": db_request.id,
"employee_id": current_employee["id"],
"status": db_request.status,
"priority": db_request.priority,
"created_at": db_request.created_at.isoformat()
}
"data": request_data
})
return db_request

View File

@@ -93,22 +93,37 @@ const fetchData = async () => {
}
// Обработчик WebSocket сообщений
const handleWebSocketMessage = (data: any) => {
const handleWebSocketMessage = async (data: any) => {
if (data.type === 'new_request') {
// Обновляем статистику при получении новой заявки
statistics.value.total++
statistics.value.by_status.NEW = (statistics.value.by_status.NEW || 0) + 1
// Добавляем новую заявку в начало списка
requests.value.unshift(data.data)
try {
// Получаем актуальную статистику
const statsResponse = await axios.get('/api/requests/statistics')
statistics.value = statsResponse.data
// Получаем детали новой заявки
const requestResponse = await axios.get(`/api/requests/admin?limit=1`)
if (requestResponse.data && requestResponse.data.length > 0) {
const newRequest = requestResponse.data[0]
// Добавляем новую заявку в начало списка
requests.value = [newRequest, ...requests.value]
}
} catch (error) {
console.error('Error updating data:', error)
}
} else if (data.type === 'status_update') {
// Обновляем статус заявки в списке
const request = requests.value.find(r => r.id === data.data.id)
if (request) {
const oldStatus = request.status
request.status = data.data.status
// Обновляем статистику
statistics.value.by_status[oldStatus]--
statistics.value.by_status[data.data.status] = (statistics.value.by_status[data.data.status] || 0) + 1
try {
// Получаем актуальную статистику
const statsResponse = await axios.get('/api/requests/statistics')
statistics.value = statsResponse.data
// Обновляем статус заявки в списке
const request = requests.value.find(r => r.id === data.data.id)
if (request) {
request.status = data.data.status
}
} catch (error) {
console.error('Error updating status:', error)
}
}
}