From 69f0a051a724454b9b7f0d956f06d4ef257f3d69 Mon Sep 17 00:00:00 2001 From: HotelSync Date: Fri, 27 Mar 2026 17:29:26 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20KKT=20dto=5Fdevice=5Fid=20=E2=80=94=20m?= =?UTF-8?q?ultiple=20KKTs=20per=20DTO=20instance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EquipmentPage: added "ID устройства в ДТО" field (config.dto_device_id), shown on device card as #1 - api.ts: typed config.dto_device_id in WorkstationDevice Co-Authored-By: Claude Sonnet 4.6 --- backend/src/routes/workstations.ts | 1 + src/lib/api.ts | 2 +- src/pages/EquipmentPage.tsx | 36 +++++++++++++++++++++--------- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/backend/src/routes/workstations.ts b/backend/src/routes/workstations.ts index 0824a65..b4f8df5 100644 --- a/backend/src/routes/workstations.ts +++ b/backend/src/routes/workstations.ts @@ -302,6 +302,7 @@ const workstationRoutes: FastifyPluginAsync = async (fastify) => { dto_port: device.dto_port, dto_user: device.config?.dto_user, dto_pass: device.config?.dto_pass, + dto_device_id: device.config?.dto_device_id, }, }) as { ok: boolean; error?: string; message?: string } return result diff --git a/src/lib/api.ts b/src/lib/api.ts index e58cf63..86f56be 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1006,7 +1006,7 @@ export interface WorkstationDevice { networkPort?: number comPort?: string purpose: 'fiscal' | 'kitchen' | 'bar' | 'receipt' | 'other' - config: Record + config: Record & { dto_user?: string; dto_pass?: string; dto_device_id?: string } fiscalMode?: boolean dtoPort?: number } diff --git a/src/pages/EquipmentPage.tsx b/src/pages/EquipmentPage.tsx index 4ead7c5..d10e148 100644 --- a/src/pages/EquipmentPage.tsx +++ b/src/pages/EquipmentPage.tsx @@ -203,6 +203,7 @@ function DeviceForm({ const [dtoPort, setDtoPort] = useState(String(initial?.dtoPort ?? 16732)) const [dtoUser, setDtoUser] = useState(String(initial?.config?.dto_user ?? '30')) const [dtoPass, setDtoPass] = useState(String(initial?.config?.dto_pass ?? '30')) + const [dtoDeviceId, setDtoDeviceId] = useState(String(initial?.config?.dto_device_id ?? '')) const [saving, setSaving] = useState(false) const [availablePorts, setAvailablePorts] = useState<{ port: string; description?: string }[] | null>(null) const [portsLoading, setPortsLoading] = useState(false) @@ -230,7 +231,7 @@ function DeviceForm({ purpose: purpose as WorkstationDevice['purpose'], fiscalMode: type === 'kkt' ? fiscalMode : undefined, dtoPort: type === 'kkt' && fiscalMode ? Number(dtoPort) : undefined, - config: type === 'kkt' && fiscalMode ? { dto_user: dtoUser, dto_pass: dtoPass } : undefined, + config: type === 'kkt' && fiscalMode ? { dto_user: dtoUser, dto_pass: dtoPass, dto_device_id: dtoDeviceId.trim() || undefined } : undefined, }) setSaving(false) } @@ -295,15 +296,27 @@ function DeviceForm({ {fiscalMode && (
-
- - setDtoPort(e.target.value)} - className="w-32 input text-sm font-mono" - placeholder="16732" - /> -

По умолчанию 16732. Для нескольких касс — разные порты.

+
+
+ + setDtoPort(e.target.value)} + className="w-full input text-sm font-mono" + placeholder="16732" + /> +

По умолчанию 16732

+
+
+ + setDtoDeviceId(e.target.value)} + className="w-full input text-sm font-mono" + placeholder="1" + /> +

Из /api/v2/devices

+
@@ -694,6 +707,9 @@ function WorkstationCard({ {device.type === 'kkt' && device.fiscalMode !== false && device.dtoPort && device.dtoPort !== 16732 && ( DTO:{device.dtoPort} )} + {device.type === 'kkt' && device.fiscalMode !== false && device.config?.dto_device_id && ( + #{device.config.dto_device_id} + )}