From e51e895d375d608ce902ad568eaf598c4771dd81 Mon Sep 17 00:00:00 2001 From: dv Date: Fri, 10 Apr 2026 11:28:17 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/ObjectDetail.tsx | 100 ++++++++++++---------------- 1 file changed, 44 insertions(+), 56 deletions(-) diff --git a/frontend/src/pages/ObjectDetail.tsx b/frontend/src/pages/ObjectDetail.tsx index cb44858..ec282a1 100644 --- a/frontend/src/pages/ObjectDetail.tsx +++ b/frontend/src/pages/ObjectDetail.tsx @@ -38,7 +38,6 @@ import { useNavigate, useParams } from 'react-router-dom' import { useDeleteDevice, useDeleteAllDevices, - useForceDeleteObject, useDiscoverObject, useDevices, useObject, @@ -130,6 +129,20 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: const [mode, setMode] = useState(defaultMode) const [editMode, setEditMode] = useState(false) + const toggleMode = () => setMode((m) => (m === 'inventory' ? 'work' : 'inventory')) + + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + const tag = (e.target as HTMLElement).tagName + if (e.code === 'Space' && tag !== 'INPUT' && tag !== 'TEXTAREA') { + e.preventDefault() + toggleMode() + } + } + document.addEventListener('keydown', handleKeyDown) + return () => document.removeEventListener('keydown', handleKeyDown) + }, []) + const { data: obj, isLoading: objLoading } = useObject(objId) const { data: devices, isLoading: devLoading } = useDevices(objId) const { data: racks } = useRacks(objId) @@ -144,7 +157,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: const createZone = useCreateZone(objId) const deleteZone = useDeleteZone(objId) const deleteAllDevices = useDeleteAllDevices(objId) - const forceDeleteObject = useForceDeleteObject() const createTask = useCreateTask() const [deviceModal, setDeviceModal] = useState(false) @@ -196,24 +208,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: } } - const handleDeleteObject = () => { - Modal.confirm({ - title: `Удалить объект «${obj?.name}»?`, - content: `Будут удалены все устройства (${devices?.length ?? 0} шт.) и сам объект. Это действие необратимо.`, - okText: 'Удалить', - cancelText: 'Отмена', - okButtonProps: { danger: true }, - onOk: async () => { - try { - await forceDeleteObject.mutateAsync(objId) - message.success('Объект удалён') - navigate('/inventory/objects') - } catch { - message.error('Ошибка при удалении объекта') - } - }, - }) - } const openTaskModal = (scope: object, title: string) => { setTaskModal({ scope, title }) @@ -319,9 +313,8 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: if (servers.length > 0) { addGroup('Серверная инфраструктура', '__servers__', servers, { - type: 'category', - object_id: objId, - category: 'main_server', + type: 'device_list', + ids: servers.map((d) => d.id), }) } @@ -594,14 +587,16 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: - }, - { label: 'Работа', value: 'work', icon: }, - ]} - onChange={(val) => setMode(val as Mode)} - /> +
+ }, + { label: 'Работа', value: 'work', icon: }, + ]} + onChange={() => {}} + /> +
@@ -630,9 +625,24 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: - + + + ) : ( @@ -678,28 +688,6 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: )} - {mode === 'inventory' && editMode && ( - - - - - - )}