diff --git a/package.json b/package.json index b3a8e5bf2..f79bf06f3 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@formkit/themes": "^1.0.0-beta.12", "@formkit/utils": "^1.0.0-beta.12", "@formkit/vue": "^1.0.0-beta.12", - "@halo-dev/api-client": "^0.0.56", + "@halo-dev/api-client": "^0.0.58", "@halo-dev/components": "workspace:*", "@halo-dev/console-shared": "workspace:*", "@halo-dev/richtext-editor": "^0.0.0-alpha.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c40938ac9..71ea42bf7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: '@formkit/themes': ^1.0.0-beta.12 '@formkit/utils': ^1.0.0-beta.12 '@formkit/vue': ^1.0.0-beta.12 - '@halo-dev/api-client': ^0.0.56 + '@halo-dev/api-client': ^0.0.58 '@halo-dev/components': workspace:* '@halo-dev/console-shared': workspace:* '@halo-dev/richtext-editor': ^0.0.0-alpha.16 @@ -104,7 +104,7 @@ importers: '@formkit/themes': 1.0.0-beta.12-e579559_tailwindcss@3.2.4 '@formkit/utils': 1.0.0-beta.12-e579559 '@formkit/vue': 1.0.0-beta.12-e579559_ior6jr3fpijijuwpr34w2i25va - '@halo-dev/api-client': 0.0.56 + '@halo-dev/api-client': 0.0.58 '@halo-dev/components': link:packages/components '@halo-dev/console-shared': link:packages/shared '@halo-dev/richtext-editor': 0.0.0-alpha.16_vue@3.2.45 @@ -1962,8 +1962,8 @@ packages: - windicss dev: false - /@halo-dev/api-client/0.0.56: - resolution: {integrity: sha512-Htwyk+pFNVGRrOLcabyNTPc5RQS/RwdUizrGWxRErBCXj4NIQyMYv3owcNS1lOMtsKXyfG1NX/cJKIw3g9y1WQ==} + /@halo-dev/api-client/0.0.58: + resolution: {integrity: sha512-CGDsHYrtVXD47Lt3S+KYJkyFZsrO85KE8wcuVb2y1iFLspTkKAPxD20Fuhf4TJYS/FVfjEi/esvU4sptTdLVjQ==} dev: false /@halo-dev/richtext-editor/0.0.0-alpha.16_vue@3.2.45: diff --git a/src/modules/interface/menus/components/MenuItemEditingModal.vue b/src/modules/interface/menus/components/MenuItemEditingModal.vue index aac5f9fd0..22e79e7ab 100644 --- a/src/modules/interface/menus/components/MenuItemEditingModal.vue +++ b/src/modules/interface/menus/components/MenuItemEditingModal.vue @@ -2,7 +2,7 @@ import { VButton, VModal, VSpace } from "@halo-dev/components"; import SubmitButton from "@/components/button/SubmitButton.vue"; import { computed, ref, watch } from "vue"; -import type { Menu, MenuItem } from "@halo-dev/api-client"; +import type { Menu, MenuItem, Ref } from "@halo-dev/api-client"; import { apiClient } from "@/utils/api-client"; import { reset } from "@formkit/core"; import cloneDeep from "lodash.clonedeep"; @@ -56,19 +56,15 @@ const handleSaveMenuItem = async () => { try { saving.value = true; - const menuItemSource = menuItemSources.find( - (source) => source.value === selectedMenuItemSource.value + const menuItemRef = menuItemRefs.find( + (ref) => ref.ref?.kind === selectedRefKind.value ); - if (menuItemSource) { - const { ref } = menuItemSource; - if (ref) { - formState.value.spec[ref] = { - version: "content.halo.run/v1alpha1", - kind: menuItemSource.kind, - name: selectedRef.value as string, - }; - } + if (menuItemRef) { + formState.value.spec.targetRef = { + ...menuItemRef.ref, + name: selectedRefName.value, + }; } if (isUpdateMode.value) { @@ -123,8 +119,8 @@ const onVisibleChange = (visible: boolean) => { const handleResetForm = () => { formState.value = cloneDeep(initialFormState); - selectedMenuItemSource.value = menuItemSources[0].value; - selectedRef.value = ""; + selectedRefKind.value = ""; + selectedRefName.value = ""; selectedParentMenuItem.value = ""; reset("menuitem-form"); }; @@ -137,7 +133,7 @@ watch( setFocus("displayNameInput"); if (!props.menuItem) { - selectedRef.value = ""; + selectedRefName.value = ""; } } else { handleResetForm(); @@ -152,79 +148,88 @@ watch( formState.value = cloneDeep(menuItem); // Set Ref related - const { postRef, categoryRef, tagRef, singlePageRef } = - formState.value.spec; + const { targetRef } = formState.value.spec; - if (postRef) { - selectedMenuItemSource.value = "post"; - selectedRef.value = postRef.name; + if (!targetRef) { + return; } - if (categoryRef) { - selectedMenuItemSource.value = "category"; - selectedRef.value = categoryRef.name; - } - - if (tagRef) { - selectedMenuItemSource.value = "tag"; - selectedRef.value = tagRef.name; - } - - if (singlePageRef) { - selectedMenuItemSource.value = "singlePage"; - selectedRef.value = singlePageRef.name; - } + selectedRefName.value = targetRef.name; + selectedRefKind.value = targetRef.kind as string; } else { handleResetForm(); } } ); -// MenuItem Ref -interface MenuItemSource { +interface MenuItemRef { label: string; - value: string; - ref?: "postRef" | "categoryRef" | "tagRef" | "singlePageRef"; - kind?: "Post" | "Category" | "Tag" | "SinglePage"; + inputType?: string; + ref?: Ref; } -const menuItemSources: MenuItemSource[] = [ +const baseRef: Ref = { + group: "content.halo.run", + version: "v1alpha1", + name: "", +}; + +const menuItemRefs: MenuItemRef[] = [ { label: "自定义链接", - value: "custom", }, { label: "文章", - value: "post", - ref: "postRef", - kind: "Post", + inputType: "postSelect", + ref: { + ...baseRef, + kind: "Post", + }, }, { label: "自定义页面", - value: "singlePage", - ref: "singlePageRef", - kind: "SinglePage", + inputType: "singlePageSelect", + ref: { + ...baseRef, + kind: "SinglePage", + }, }, { label: "分类", - value: "category", - ref: "categoryRef", - kind: "Post", + inputType: "categorySelect", + ref: { + ...baseRef, + kind: "Category", + }, }, { label: "标签", - value: "tag", - ref: "tagRef", - kind: "Tag", + inputType: "tagSelect", + ref: { + ...baseRef, + kind: "Tag", + }, }, ]; -const selectedMenuItemSource = ref(menuItemSources[0].value); +const menuItemRefsMap = menuItemRefs.map((menuItemRef) => { + return { + label: menuItemRef.label, + value: menuItemRef.ref?.kind, + }; +}); -const selectedRef = ref(""); +const selectedRef = computed(() => { + return menuItemRefs.find( + (menuItemRef) => menuItemRef.ref?.kind === selectedRefKind.value + ); +}); + +const selectedRefKind = ref(""); +const selectedRefName = ref(""); const onMenuItemSourceChange = () => { - selectedRef.value = ""; + selectedRefName.value = ""; };