Подсказка external_id из уже увиденных устройств при добавлении

Поле External ID при создании/изменении устройства теперь input+datalist:
можно вписать значение вручную (как раньше) или выбрать из подсказок —
идентификаторы устройств, от которых device-control-service уже
получал MQTT-телеметрию/ack (Redis-множество devices:known), но
которые ещё не зарегистрированы в Postgres. Уже зарегистрированные
id из списка подсказок исключаются.

DeviceShadow::knownExternalIds() — новый read-метод (SMEMBERS
devices:known), зеркалит то же множество, что Go-сервисы уже читают/
пишут для health-check/online-детекции.
This commit is contained in:
2026-08-18 03:08:53 +05:00
parent 2c542fe097
commit a7d61b9fcc
6 changed files with 61 additions and 7 deletions
@@ -6,6 +6,7 @@ const props = defineProps({
device: { type: Object, default: null },
zones: { type: Array, required: true },
deviceTypes: { type: Array, required: true },
unregisteredExternalIds: { type: Array, default: () => [] },
});
const isEdit = !!props.device;
@@ -76,9 +77,17 @@ function submit() {
id="external_id"
v-model="form.external_id"
type="text"
list="unregistered-external-ids"
required
placeholder="можно ввести вручную или выбрать увиденное устройство"
class="mt-1 block w-full font-mono border-gray-300 focus:border-indigo-500 focus:ring-indigo-500 rounded-md shadow-sm"
>
<datalist id="unregistered-external-ids">
<option v-for="id in unregisteredExternalIds" :key="id" :value="id" />
</datalist>
<p v-if="unregisteredExternalIds.length" class="mt-1 text-xs text-gray-400">
От {{ unregisteredExternalIds.length }} {{ unregisteredExternalIds.length === 1 ? 'устройства' : 'устройств' }} уже приходил сигнал, но они ещё не зарегистрированы начните вводить, чтобы увидеть подсказки.
</p>
<div v-if="form.errors.external_id" class="mt-2 text-sm text-red-600">{{ form.errors.external_id }}</div>
</div>