PageMenu.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { css } from "@linaria/core";
  2. import { Menu } from "ant-design-vue";
  3. import { useCategory } from "@/modules/admin";
  4. import { defineComponent } from "vue";
  5. import { useRouter } from "vue-router";
  6. export default defineComponent({
  7. setup() {
  8. const router = useRouter();
  9. const categoryStore = useCategory();
  10. const MenuRender = (item: CategoryItem) => {
  11. if (item.children) {
  12. return (
  13. <Menu.SubMenu key={item._id} title={item.name}>
  14. {item.children.map((subItem: any) => {
  15. return MenuRender(subItem);
  16. })}
  17. </Menu.SubMenu>
  18. );
  19. } else {
  20. return (
  21. <Menu.Item key={`/detail/${item._id}`}>
  22. <router-link to={`/detail/${item._id}`}>{item.name}</router-link>
  23. </Menu.Item>
  24. );
  25. }
  26. };
  27. return () => (
  28. <div class={MenuRoot}>
  29. <Menu
  30. mode="inline"
  31. inlineIndent={12}
  32. selectedKeys={[router.currentRoute.value.path]}
  33. >
  34. <Menu.Item key={"/banner"}>
  35. <router-link to={"/banner"}>首页轮播</router-link>
  36. </Menu.Item>
  37. <Menu.Item key={"/category"}>
  38. <router-link to={"/category"}>菜单管理</router-link>
  39. </Menu.Item>
  40. {categoryStore.categoryTree.map((item: any) => {
  41. return MenuRender(item);
  42. })}
  43. </Menu>
  44. </div>
  45. );
  46. },
  47. });
  48. const MenuRoot = css`
  49. a {
  50. display: block;
  51. }
  52. `;