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:
@@ -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
|
||||
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user