mirror of https://github.com/halo-dev/halo
feat: add setup primary menu support (halo-dev/console#684)
#### 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: <img width="503" alt="image" src="https://user-images.githubusercontent.com/21301288/200283150-1292821e-ad4b-4909-865b-fcdba94ae4c2.png"> #### 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 菜单管理支持设置主菜单。 ```pull/3445/head
parent
aa7d302f05
commit
7c621c8afa
|
@ -8,6 +8,7 @@ import {
|
||||||
VStatusDot,
|
VStatusDot,
|
||||||
VEntity,
|
VEntity,
|
||||||
VEntityField,
|
VEntityField,
|
||||||
|
VTag,
|
||||||
} from "@halo-dev/components";
|
} from "@halo-dev/components";
|
||||||
import MenuEditingModal from "./MenuEditingModal.vue";
|
import MenuEditingModal from "./MenuEditingModal.vue";
|
||||||
import { onMounted, onUnmounted, ref } from "vue";
|
import { onMounted, onUnmounted, ref } from "vue";
|
||||||
|
@ -142,6 +143,44 @@ onMounted(async () => {
|
||||||
defineExpose({
|
defineExpose({
|
||||||
handleFetchMenus,
|
handleFetchMenus,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// primary menu
|
||||||
|
const primaryMenuName = ref<string>();
|
||||||
|
|
||||||
|
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);
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenuEditingModal
|
<MenuEditingModal
|
||||||
|
@ -175,7 +214,11 @@ defineExpose({
|
||||||
<VEntityField
|
<VEntityField
|
||||||
:title="menu.spec?.displayName"
|
:title="menu.spec?.displayName"
|
||||||
:description="`${menu.spec.menuItems?.length || 0} 个菜单项`"
|
:description="`${menu.spec.menuItems?.length || 0} 个菜单项`"
|
||||||
></VEntityField>
|
>
|
||||||
|
<template v-if="menu.metadata.name === primaryMenuName" #extra>
|
||||||
|
<VTag>主菜单</VTag>
|
||||||
|
</template>
|
||||||
|
</VEntityField>
|
||||||
</template>
|
</template>
|
||||||
<template #end>
|
<template #end>
|
||||||
<VEntityField v-if="menu.metadata.deletionTimestamp">
|
<VEntityField v-if="menu.metadata.deletionTimestamp">
|
||||||
|
@ -192,6 +235,14 @@ defineExpose({
|
||||||
v-close-popper
|
v-close-popper
|
||||||
block
|
block
|
||||||
type="secondary"
|
type="secondary"
|
||||||
|
@click="handleSetPrimaryMenu(menu)"
|
||||||
|
>
|
||||||
|
设置为主菜单
|
||||||
|
</VButton>
|
||||||
|
<VButton
|
||||||
|
v-close-popper
|
||||||
|
block
|
||||||
|
type="default"
|
||||||
@click="handleOpenEditingModal(menu)"
|
@click="handleOpenEditingModal(menu)"
|
||||||
>
|
>
|
||||||
修改
|
修改
|
||||||
|
|
|
@ -10,5 +10,5 @@
|
||||||
},
|
},
|
||||||
"apiVersion": "v1alpha1",
|
"apiVersion": "v1alpha1",
|
||||||
"kind": "Menu",
|
"kind": "Menu",
|
||||||
"metadata": { "name": "2f0ef354-6f8f-40b9-b41d-2163f3e51b4f" }
|
"metadata": { "name": "primary" }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue