diff --git a/management-ui/src/customcompometns/AdminDeviceDropdown.vue b/management-ui/src/customcompometns/AdminDeviceDropdown.vue index c45b3d8..3136ebe 100644 --- a/management-ui/src/customcompometns/AdminDeviceDropdown.vue +++ b/management-ui/src/customcompometns/AdminDeviceDropdown.vue @@ -6,6 +6,8 @@ import { } from '@/components/ui/dropdown-menu' import EditDeviceDialog from './EditDeviceDialog.vue' import DeleteDeviceDialog from './DeleteDeviceDialog.vue' +import DeviceCertificateDialog from './DeviceCertificateDialog.vue' +import DeviceTasksDialog from './DeviceTasksDialog.vue' import { Ellipsis } from 'lucide-vue-next' import type { Device } from '@/lib/interfaces' // import { api } from '@/lib/api' @@ -14,6 +16,8 @@ const props = defineProps<{ row: Device }>() // ← accept full row const isEditOpen = ref(false) const isDeleteOpen = ref(false) +const isTasksOpen = ref(false) +const itCertsOpen = ref(false) function onDeleteConfirmed() { // await api.delete(`/devices/${encodeURIComponent(props.row.guid)}`) @@ -22,6 +26,14 @@ function onDeleteConfirmed() { function onEditConfirm() { isEditOpen.value = false } + +function onTaskConfirm() { + isTasksOpen.value = false +} + +function onCertsConfirm() { + itCertsOpen.value = false +} diff --git a/management-ui/src/customcompometns/AssignDevice.vue b/management-ui/src/customcompometns/AssignDevice.vue index 8090cc4..0aa6e75 100644 --- a/management-ui/src/customcompometns/AssignDevice.vue +++ b/management-ui/src/customcompometns/AssignDevice.vue @@ -1,6 +1,6 @@ diff --git a/management-ui/src/customcompometns/DeviceCertificateDialog.vue b/management-ui/src/customcompometns/DeviceCertificateDialog.vue new file mode 100644 index 0000000..1b69d90 --- /dev/null +++ b/management-ui/src/customcompometns/DeviceCertificateDialog.vue @@ -0,0 +1,49 @@ + + \ No newline at end of file diff --git a/management-ui/src/customcompometns/DeviceDashboard.vue b/management-ui/src/customcompometns/DeviceDashboard.vue index d1621cd..dfceacc 100644 --- a/management-ui/src/customcompometns/DeviceDashboard.vue +++ b/management-ui/src/customcompometns/DeviceDashboard.vue @@ -32,7 +32,7 @@ const usrIDs = selectedUserIds.value Dashboard - +
diff --git a/management-ui/src/customcompometns/DeviceTasksDialog.vue b/management-ui/src/customcompometns/DeviceTasksDialog.vue new file mode 100644 index 0000000..39ec1bf --- /dev/null +++ b/management-ui/src/customcompometns/DeviceTasksDialog.vue @@ -0,0 +1,48 @@ + + \ No newline at end of file diff --git a/management-ui/src/customcompometns/EditDeviceDialog.vue b/management-ui/src/customcompometns/EditDeviceDialog.vue index fbc9202..61ece79 100644 --- a/management-ui/src/customcompometns/EditDeviceDialog.vue +++ b/management-ui/src/customcompometns/EditDeviceDialog.vue @@ -13,7 +13,7 @@ import { Label } from '@/components/ui/label' import { defineProps, defineEmits, ref, watch } from 'vue' import type { PropType } from 'vue' import AssignDevice from './AssignDevice.vue' -import type { Device } from '@/lib/interfaces' +import type { Device, Users } from '@/lib/interfaces' // 1) runtime props so Vue + TS agree const props = defineProps({ @@ -22,6 +22,8 @@ const props = defineProps({ required: true, }, device: { type: Object as PropType, required: false }, + allUsers: { type: Array as PropType, required: false }, + initialUserIds: { type: Array as PropType, required: false }, // <- if you have IDs already }) // 2) two emits: v-model and confirm @@ -31,11 +33,37 @@ const emit = defineEmits<{ }>() const name = ref('') +const selectedUserIds = ref([]) + +// helper: map usernames → ids when we only have a string of usernames +const usernameToId = (uname: string): string | null => { + const id = props.allUsers?.find(u => u.username === uname)?.id + return typeof id === 'number' ? String(id) : null +} + + // when device changes or dialog opens, update local value watch( () => props.device, (dev) => { + console.log(dev?.assigned_users) name.value = dev?.devicename ?? '' + if (props.initialUserIds && props.initialUserIds.length) { + selectedUserIds.value = [...props.initialUserIds] + return + } + const usernames = (dev?.assigned_users ?? '') + .split(',') + .map(s => s.trim()) + .filter(Boolean) + + if (usernames.length && props.allUsers?.length) { + selectedUserIds.value = usernames + .map(usernameToId) + .filter((x): x is string => !!x) + } else { + selectedUserIds.value = [] + } }, { immediate: true } ) @@ -52,7 +80,7 @@ function onSave() { :open="props.modelValue" @update:open="(v: boolean) => emit('update:modelValue', v)" > - + Edit device @@ -71,7 +99,7 @@ function onSave() {
- +