From 7c621c8afacb2719b3a5e797bf952bbed2d10fd2 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 10 Nov 2022 10:34:09 +0800 Subject: [PATCH] feat: add setup primary menu support (halo-dev/console#684) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind feature /milestone 2.0 #### What this PR does / why we need it: 支持设置主菜单。 适配 https://github.com/halo-dev/halo/pull/2667 #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/2533 #### Screenshots: image #### Special notes for your reviewer: /cc @halo-dev/sig-halo-console 测试方式: 1. Halo 需要使用 https://github.com/halo-dev/halo/pull/2667 分支。 2. 在 Console 的菜单管理新建若干个菜单。 3. 选择一个菜单点击更多按钮,再点击设置为主菜单按钮,检查是否生效。 #### Does this PR introduce a user-facing change? ```release-note 菜单管理支持设置主菜单。 ``` --- .../interface/menus/components/MenuList.vue | 53 ++++++++++++++++++- src/views/system/setup-data/menu.json | 2 +- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/modules/interface/menus/components/MenuList.vue b/src/modules/interface/menus/components/MenuList.vue index 74f4be205..dacd6e35f 100644 --- a/src/modules/interface/menus/components/MenuList.vue +++ b/src/modules/interface/menus/components/MenuList.vue @@ -8,6 +8,7 @@ import { VStatusDot, VEntity, VEntityField, + VTag, } from "@halo-dev/components"; import MenuEditingModal from "./MenuEditingModal.vue"; import { onMounted, onUnmounted, ref } from "vue"; @@ -142,6 +143,44 @@ onMounted(async () => { defineExpose({ handleFetchMenus, }); + +// primary menu +const primaryMenuName = ref(); + +const handleFetchPrimaryMenuName = async () => { + const { data } = await apiClient.extension.configMap.getv1alpha1ConfigMap({ + name: "system", + }); + + if (!data.data?.menu) { + return; + } + + const menuConfig = JSON.parse(data.data.menu); + + primaryMenuName.value = menuConfig.primary; +}; + +const handleSetPrimaryMenu = async (menu: Menu) => { + const { data: systemConfigMap } = + await apiClient.extension.configMap.getv1alpha1ConfigMap({ + name: "system", + }); + + if (systemConfigMap.data) { + const menuConfigToUpdate = JSON.parse(systemConfigMap.data?.menu || "{}"); + menuConfigToUpdate.primary = menu.metadata.name; + systemConfigMap.data["menu"] = JSON.stringify(menuConfigToUpdate); + + await apiClient.extension.configMap.updatev1alpha1ConfigMap({ + name: "system", + configMap: systemConfigMap, + }); + } + await handleFetchPrimaryMenuName(); +}; + +onMounted(handleFetchPrimaryMenuName);