From 0f1446b5d76bfa95e5e9f2a2eb0fe47c73237611 Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Thu, 12 Nov 2026 19:23:23 +0800 Subject: [PATCH] feat(web-admin): add useRouteEditIdOpen for deep-link edit dialogs Co-authored-by: Cursor --- .../src/composables/useRouteEditIdOpen.ts | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 web-admin/src/composables/useRouteEditIdOpen.ts diff --git a/web-admin/src/composables/useRouteEditIdOpen.ts b/web-admin/src/composables/useRouteEditIdOpen.ts new file mode 100644 index 000000000..1da016d32 --- /dev/null +++ b/web-admin/src/composables/useRouteEditIdOpen.ts @@ -0,0 +1,33 @@ +import { watch } from 'vue' +import { useRoute, useRouter } from 'vue-router' + +/** + * 监听 route.query.editId,调用 openById;结束后清除 editId,避免刷新重复弹窗。 + * openById 应自行处理加载失败提示。 + */ +export function useRouteEditIdOpen(openById: (id: string) => void | Promise) { + const route = useRoute() + const router = useRouter() + + async function consumeEditId() { + const raw = route.query.editId + const id = Array.isArray(raw) ? String(raw[0] || '') : String(raw || '') + if (!id.trim()) return + try { + await openById(id.trim()) + } finally { + if (route.query.editId == null) return + const query = { ...route.query } + delete query.editId + await router.replace({ path: route.path, query }) + } + } + + watch( + () => route.query.editId, + () => { + void consumeEditId() + }, + { immediate: true } + ) +}