diff --git a/frontend/src/pages/clients/ClientFormModal.vue b/frontend/src/pages/clients/ClientFormModal.vue index fca8a8ab..725e3521 100644 --- a/frontend/src/pages/clients/ClientFormModal.vue +++ b/frontend/src/pages/clients/ClientFormModal.vue @@ -128,7 +128,16 @@ async function onSubmit() { try { let msg; if (isEdit.value) { - msg = await props.save(clientPayload, { isEdit: true, id: props.client.id }); + const original = new Set(props.attachedIds || []); + const next = new Set(form.inboundIds || []); + const toAttach = [...next].filter((id) => !original.has(id)); + const toDetach = [...original].filter((id) => !next.has(id)); + msg = await props.save(clientPayload, { + isEdit: true, + id: props.client.id, + attach: toAttach, + detach: toDetach, + }); } else { msg = await props.save( { client: clientPayload, inboundIds: form.inboundIds }, @@ -215,7 +224,8 @@ async function onSubmit() { - + diff --git a/frontend/src/pages/clients/ClientsPage.vue b/frontend/src/pages/clients/ClientsPage.vue index 8569056e..1b221ae7 100644 --- a/frontend/src/pages/clients/ClientsPage.vue +++ b/frontend/src/pages/clients/ClientsPage.vue @@ -32,6 +32,8 @@ const { create, update, remove, + attach, + detach, resetTraffic, } = useClients(); @@ -125,10 +127,21 @@ function onShowQr(row) { } async function onSave(payload, meta) { - if (meta?.isEdit) { - return update(meta.id, payload); + if (!meta?.isEdit) { + return create(payload); } - return create(payload); + const id = meta.id; + const updateMsg = await update(id, payload); + if (!updateMsg?.success) return updateMsg; + if (Array.isArray(meta.attach) && meta.attach.length > 0) { + const r = await attach(id, meta.attach); + if (!r?.success) return r; + } + if (Array.isArray(meta.detach) && meta.detach.length > 0) { + const r = await detach(id, meta.detach); + if (!r?.success) return r; + } + return updateMsg; } function trafficLabel(row) {