|
@@ -1,54 +1,115 @@
|
|
|
import { css } from "@linaria/core";
|
|
|
+import { Dropdown, Menu } from "ant-design-vue";
|
|
|
import { defineComponent } from "vue";
|
|
|
+import { RouterLink } from "vue-router";
|
|
|
import { any } from "vue-types";
|
|
|
-const menuConfig = [
|
|
|
- {
|
|
|
- title: "学院概述",
|
|
|
- url: "",
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: "学院简介",
|
|
|
- url: "",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "学院领导",
|
|
|
- url: "",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "历史沿革",
|
|
|
- url: "",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "组织机构",
|
|
|
- url: "",
|
|
|
- },
|
|
|
- ],
|
|
|
- },
|
|
|
- { title: "党建工作", url: "" },
|
|
|
- { title: "新闻公告", url: "" },
|
|
|
- { title: "专业建设", url: "" },
|
|
|
- { title: "师资队伍", url: "" },
|
|
|
- { title: "人才培养", url: "" },
|
|
|
- { title: "招生就业", url: "" },
|
|
|
- { title: "学科建设", url: "" },
|
|
|
- { title: "科研创作", url: "" },
|
|
|
- { title: "学生工作", url: "" },
|
|
|
-];
|
|
|
+import { HeaderMenuConfig } from "./MenuConfig";
|
|
|
export default defineComponent({
|
|
|
- stup() {
|
|
|
+ setup() {
|
|
|
return () => (
|
|
|
<div class={MenuLayout}>
|
|
|
- {menuConfig.map((e) => {
|
|
|
- return <MenuItem data={e} />;
|
|
|
+ {HeaderMenuConfig.map((e: LayoutMenu) => {
|
|
|
+ return <Menus data={e} />;
|
|
|
})}
|
|
|
</div>
|
|
|
);
|
|
|
},
|
|
|
});
|
|
|
-const MenuItem = defineComponent({
|
|
|
+const Menus = defineComponent({
|
|
|
props: {
|
|
|
data: any(),
|
|
|
},
|
|
|
- setup() {},
|
|
|
+ setup(props) {
|
|
|
+ const menuRender = (dropUrls: any) => {
|
|
|
+ return (
|
|
|
+ <Menu class={DropMenu}>
|
|
|
+ {dropUrls.map((e: LayoutMenu) => {
|
|
|
+ return (
|
|
|
+ <Menu.Item>
|
|
|
+ <RouterLink to={e.url}>{e.title}</RouterLink>
|
|
|
+ </Menu.Item>
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </Menu>
|
|
|
+ );
|
|
|
+ };
|
|
|
+
|
|
|
+ return () => {
|
|
|
+ const menu = props.data;
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ {menu.children && menu.children.length > 0 ? (
|
|
|
+ <Dropdown overlay={menuRender(menu.children)}>
|
|
|
+ <RouterLink to={menu.url}>{menu.title}</RouterLink>
|
|
|
+ </Dropdown>
|
|
|
+ ) : (
|
|
|
+ <RouterLink to={menu.url}>{menu.title}</RouterLink>
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ };
|
|
|
+ },
|
|
|
});
|
|
|
-const MenuLayout = css``;
|
|
|
+const MenuLayout = css`
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ a {
|
|
|
+ flex: 1;
|
|
|
+ position: relative;
|
|
|
+ margin-top: 14px;
|
|
|
+ padding-bottom: 24px;
|
|
|
+ font-size: 16px;
|
|
|
+ text-align: center;
|
|
|
+ color: rgba(255, 255, 255, 0.8);
|
|
|
+ &:hover {
|
|
|
+ color: rgba(255, 255, 255, 1);
|
|
|
+ &::before {
|
|
|
+ width: 24px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &::before {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ bottom: 10px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ width: 0;
|
|
|
+ height: 2px;
|
|
|
+ background-color: rgba(255, 255, 255, 1);
|
|
|
+ transition: width 0.2s ease-in-out;
|
|
|
+ }
|
|
|
+ &::after {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ height: 16px;
|
|
|
+ border-right: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
+ transform: skewX(-15deg);
|
|
|
+ }
|
|
|
+ &:last-child {
|
|
|
+ &::after {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+`;
|
|
|
+const DropMenu = css`
|
|
|
+ &.ant-dropdown-menu {
|
|
|
+ padding: 10px 0;
|
|
|
+ border-radius: 0;
|
|
|
+ .ant-dropdown-menu-item {
|
|
|
+ padding: 0;
|
|
|
+ &:hover {
|
|
|
+ a {
|
|
|
+ color: var(--vt-c-primary);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ a {
|
|
|
+ padding: 8px 12px;
|
|
|
+ display: block;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+`;
|