Skip to content

Commit 4c46e75

Browse files
committed
add top-nav-menu
1 parent e97a10d commit 4c46e75

File tree

24 files changed

+620
-232
lines changed

24 files changed

+620
-232
lines changed

src/components/chart/Liquid.vue

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<template>
2+
<div>
3+
<v-chart :forceFit="true" :height="height" :width="width" :data="data" :scale="scale" :padding="0">
4+
<v-tooltip />
5+
<v-interval
6+
:shape="['liquid-fill-gauge']"
7+
position="transfer*value"
8+
color=""
9+
:v-style="{
10+
lineWidth: 10,
11+
opacity: 0.75
12+
}"
13+
:tooltip="[
14+
'transfer*value',
15+
(transfer, value) => {
16+
return {
17+
name: transfer,
18+
value,
19+
};
20+
},
21+
]"
22+
></v-interval>
23+
<v-guide
24+
v-for="(row, index) in data"
25+
:key="index"
26+
type="text"
27+
:top="true"
28+
:position="{
29+
gender: row.transfer,
30+
value: 45
31+
}"
32+
:content="row.value + '%'"
33+
:v-style="{
34+
fontSize: 100,
35+
textAlign: 'center',
36+
opacity: 0.75,
37+
}"
38+
/>
39+
</v-chart>
40+
</div>
41+
</template>
42+
43+
<script>
44+
export default {
45+
name: "Liquid",
46+
props: {
47+
height: {
48+
type: Number,
49+
default: 0
50+
},
51+
width: {
52+
type: Number,
53+
default: 0
54+
}
55+
}
56+
}
57+
</script>
58+
59+
<style scoped>
60+
61+
</style>

src/components/layouts/PageView.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<page-layout :desc="description" :title="getTitle" :link-list="linkList">
2+
<page-layout :desc="description" :title="getTitle" :link-list="linkList" :search="search" :tabs="tabs">
33
<div slot="extra" class="extra-img">
44
<img :src="extraImage"/>
55
</div>
@@ -23,7 +23,9 @@
2323
title: '',
2424
description: '',
2525
linkList: [],
26-
extraImage: ''
26+
extraImage: '',
27+
search: false,
28+
tabs: {}
2729
}
2830
},
2931
mounted () {
@@ -45,10 +47,13 @@
4547
this.title = this.$route.meta.title
4648
// 因为套用了一层 route-view 所以要取 ref 对象下的子节点的第一个对象
4749
const content = this.$refs.content && this.$refs.content.$children[0]
50+
4851
if (content) {
4952
this.description = content.description
5053
this.linkList = content.linkList
5154
this.extraImage = content.extraImage
55+
this.search = content.search == true ? true : false
56+
this.tabs = content.tabs
5257
}
5358
}
5459
}

src/components/menu/SideMenu.vue

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55
:collapsible="collapsible"
66
v-model="collapsed"
77
:trigger="null">
8-
<div class="logo">
9-
<router-link :to="{name:'dashboard'}">
10-
<img src="~@/assets/logo.svg" alt="logo">
11-
<h1>Ant Design Pro</h1>
12-
</router-link>
13-
</div>
8+
<logo />
149
<s-menu
1510
:collapsed="collapsed"
1611
:menu="menus"
@@ -24,12 +19,13 @@
2419

2520
<script>
2621
import ALayoutSider from "ant-design-vue/es/layout/Sider"
22+
import Logo from '../tools/Logo'
2723
import SMenu from './index'
2824
import { mapState } from 'vuex'
2925
3026
export default {
3127
name: "SideMenu",
32-
components: { ALayoutSider, SMenu },
28+
components: { ALayoutSider, Logo, SMenu },
3329
props: {
3430
mode: {
3531
type: String,

src/components/menu/index.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,14 @@ export default {
128128
} else {
129129
this.selectedKeys = [ routes.pop().path ]
130130
}
131+
131132
let openKeys = []
132-
routes.forEach((item) => {
133-
openKeys.push(item.path)
134-
})
133+
if (this.mode === 'inline') {
134+
routes.forEach((item) => {
135+
openKeys.push(item.path)
136+
})
137+
}
138+
135139
this.collapsed ? this.cachedOpenKeys = openKeys : this.openKeys = openKeys
136140
}
137141
},
@@ -142,7 +146,6 @@ export default {
142146
props: {
143147
theme: this.$props.theme,
144148
mode: this.$props.mode,
145-
inlineCollapsed: false,
146149
openKeys: this.openKeys,
147150
selectedKeys: this.selectedKeys
148151
},
Lines changed: 45 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<a-layout-header style="padding: 0px;">
3-
<div class="header">
3+
<div v-if="mode === 'sidemenu'" class="header">
44
<a-icon
55
v-if="device==='mobile'"
66
class="trigger"
@@ -12,57 +12,52 @@
1212
:type="collapsed ? 'menu-unfold' : 'menu-fold'"
1313
@click.native="toggle"/>
1414

15-
<div class="user-wrapper">
16-
<span class="action">
17-
<a-icon type="question-circle-o"></a-icon>
18-
</span>
19-
<header-notice class="action"/>
20-
<a-dropdown>
21-
<span class="action ant-dropdown-link user-dropdown-menu">
22-
<a-avatar class="avatar" size="small" :src="avatar()"/>
23-
<span>{{ nickname() }}</span>
24-
</span>
25-
<a-menu slot="overlay" class="user-dropdown-menu-wrapper">
26-
<a-menu-item key="0">
27-
<router-link :to="{ name: 'center' }">
28-
<a-icon type="user"/>
29-
<span>个人中心</span>
30-
</router-link>
31-
</a-menu-item>
32-
<a-menu-item key="1">
33-
<router-link :to="{ name: 'settings' }">
34-
<a-icon type="setting"/>
35-
<span>账户设置</span>
36-
</router-link>
37-
</a-menu-item>
38-
<a-menu-item key="2" disabled>
39-
<a-icon type="setting"/>
40-
<span>测试</span>
41-
</a-menu-item>
42-
<a-menu-divider/>
43-
<a-menu-item key="3">
44-
<a href="javascript:;" @click="handleLogout">
45-
<a-icon type="logout"/>
46-
<span>退出登录</span>
47-
</a>
48-
</a-menu-item>
49-
</a-menu>
50-
</a-dropdown>
15+
<user-menu></user-menu>
16+
</div>
17+
<div v-else :class="['top-nav-header-index', theme]">
18+
<div class="header-index-wide">
19+
<div class="header-index-left">
20+
<logo class="top-nav-header" />
21+
<s-menu
22+
mode="horizontal"
23+
:menu="menus"
24+
:theme="theme"
25+
></s-menu>
26+
</div>
27+
<user-menu class="header-index-right">
28+
29+
</user-menu>
5130
</div>
5231
</div>
32+
5333
</a-layout-header>
5434
</template>
5535

5636
<script>
57-
import HeaderNotice from './HeaderNotice'
58-
import {mapActions, mapGetters} from 'vuex'
37+
import UserMenu from '../tools/UserMenu'
38+
import SMenu from '../menu/'
39+
import Logo from '../tools/Logo'
40+
41+
import { mapState } from 'vuex'
5942
6043
export default {
6144
name: "LayoutHeader",
6245
components: {
63-
HeaderNotice
46+
UserMenu,
47+
SMenu,
48+
Logo
6449
},
6550
props: {
51+
mode: {
52+
type: String,
53+
// sidemenu, topmenu
54+
default: 'sidemenu'
55+
},
56+
theme: {
57+
type: String,
58+
required: false,
59+
default: 'dark'
60+
},
6661
collapsed: {
6762
type: Boolean,
6863
required: false,
@@ -75,41 +70,27 @@
7570
}
7671
},
7772
data() {
78-
return {}
73+
return {
74+
menus: [],
75+
}
7976
},
8077
created() {
81-
78+
this.menus = this.mainMenu.find((item) => item.path === '/').children
79+
},
80+
computed: {
81+
...mapState({
82+
mainMenu: state => state.permission.addRouters,
83+
}),
8284
},
8385
methods: {
84-
...mapActions(["Logout"]),
85-
...mapGetters(["nickname", "avatar"]),
86-
handleLogout() {
87-
const that = this
8886
89-
this.$confirm({
90-
title: '提示',
91-
content: '真的要注销登录吗 ?',
92-
onOk() {
93-
return that.Logout({}).then(() => {
94-
window.location.reload()
95-
}).catch(err => {
96-
that.$message.error({
97-
title: '错误',
98-
description: err.message
99-
})
100-
})
101-
},
102-
onCancel() {
103-
},
104-
});
105-
},
10687
toggle() {
10788
this.$emit('toggle')
10889
}
10990
}
11091
}
11192
</script>
11293

113-
<style scoped>
94+
<style lang="scss" scoped>
11495
11596
</style>

0 commit comments

Comments
 (0)