diff --git a/ui/console-src/modules/contents/pages/components/SinglePageSettingModal.vue b/ui/console-src/modules/contents/pages/components/SinglePageSettingModal.vue index a5099485b..f1d81b984 100644 --- a/ui/console-src/modules/contents/pages/components/SinglePageSettingModal.vue +++ b/ui/console-src/modules/contents/pages/components/SinglePageSettingModal.vue @@ -6,7 +6,7 @@ import { toDatetimeLocal, toISOString } from "@/utils/date"; import { randomUUID } from "@/utils/id"; import useSlugify from "@console/composables/use-slugify"; import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme"; -import { submitForm } from "@formkit/core"; +import { submitForm, type FormKitNode } from "@formkit/core"; import type { SinglePage } from "@halo-dev/api-client"; import { coreApiClient } from "@halo-dev/api-client"; import { @@ -266,6 +266,28 @@ const { handleGenerateSlug } = useSlugify( computed(() => !isUpdateMode), FormType.SINGLE_PAGE ); + +// fixme: check if slug is unique +// Finally, we need to check if the slug is unique in the database +async function slugUniqueValidation(node: FormKitNode) { + const value = node.value; + if (!value) { + return true; + } + + const fieldSelector = [`spec.slug=${value}`]; + + if (isUpdateMode) { + fieldSelector.push(`metadata.name!=${formState.value.metadata.name}`); + } + + const { data: pagesWithSameSlug } = + await coreApiClient.content.singlePage.listSinglePage({ + fieldSelector, + }); + + return !pagesWithSameSlug.total; +}