Commit 67f4d8e76360539969a6d88bd16577684d29471b
1 parent
ab22fd7c
update Menu
update Menu
Showing
4 changed files
with
174 additions
and
174 deletions
Show diff stats
examples/routers/menu.vue
1 | -<!--<template>--> | |
2 | - <!--<div>--> | |
3 | - <!--<Menu mode="horizontal" :theme="theme1" active-name="1" @on-select="s">--> | |
4 | - <!--<Menu-item name="1">--> | |
5 | - <!--<Icon type="ios-paper"></Icon>--> | |
6 | - <!--内容管理--> | |
7 | - <!--</Menu-item>--> | |
8 | - <!--<Menu-item name="2">--> | |
9 | - <!--<Icon type="ios-people"></Icon>--> | |
10 | - <!--用户管理--> | |
11 | - <!--</Menu-item>--> | |
12 | - <!--<Submenu name="3">--> | |
13 | - <!--<template slot="title">--> | |
14 | - <!--<Icon type="stats-bars"></Icon>--> | |
15 | - <!--统计分析--> | |
16 | - <!--</template>--> | |
17 | - <!--<Menu-group title="使用">--> | |
18 | - <!--<Menu-item name="3-1">新增和启动</Menu-item>--> | |
19 | - <!--<Menu-item name="3-2">活跃分析</Menu-item>--> | |
20 | - <!--<Menu-item name="3-3">时段分析</Menu-item>--> | |
21 | - <!--</Menu-group>--> | |
22 | - <!--<Menu-group title="留存">--> | |
23 | - <!--<Menu-item name="3-4">用户留存</Menu-item>--> | |
24 | - <!--<Menu-item name="3-5">流失用户</Menu-item>--> | |
25 | - <!--</Menu-group>--> | |
26 | - <!--</Submenu>--> | |
27 | - <!--<Menu-item name="4">--> | |
28 | - <!--<Icon type="settings"></Icon>--> | |
29 | - <!--综合设置--> | |
30 | - <!--</Menu-item>--> | |
31 | - <!--</Menu>--> | |
32 | - <!--<br>--> | |
33 | - <!--<p>切换主题</p>--> | |
34 | - <!--<Radio-group v-model="theme1">--> | |
35 | - <!--<Radio label="light"></Radio>--> | |
36 | - <!--<Radio label="dark"></Radio>--> | |
37 | - <!--<Radio label="primary"></Radio>--> | |
38 | - <!--</Radio-group>--> | |
39 | - <!--</div>--> | |
40 | -<!--</template>--> | |
41 | -<!--<script>--> | |
42 | - <!--export default {--> | |
43 | - <!--data () {--> | |
44 | - <!--return {--> | |
45 | - <!--theme1: 'light'--> | |
46 | - <!--}--> | |
47 | - <!--},--> | |
48 | - <!--methods: {--> | |
49 | - <!--s (s) {--> | |
50 | - <!--console.log(s)--> | |
51 | - <!--}--> | |
52 | - <!--}--> | |
53 | - <!--}--> | |
54 | -<!--</script>--> | |
55 | - | |
56 | - | |
57 | 1 | <template> |
58 | 2 | <div> |
59 | - <Row> | |
60 | - <i-col span="8"> | |
61 | - <Menu :theme="theme2" @on-select="s"> | |
62 | - <Submenu name="1"> | |
63 | - <template slot="title"> | |
64 | - <Icon type="ios-paper"></Icon> | |
65 | - 内容管理 | |
66 | - </template> | |
67 | - <Menu-item name="1-1">文章管理</Menu-item> | |
68 | - <Menu-item name="1-2">评论管理</Menu-item> | |
69 | - <Menu-item name="1-3">举报管理</Menu-item> | |
70 | - </Submenu> | |
71 | - <Submenu name="2"> | |
72 | - <template slot="title"> | |
73 | - <Icon type="ios-people"></Icon> | |
74 | - 用户管理 | |
75 | - </template> | |
76 | - <Menu-item name="2-1">新增用户</Menu-item> | |
77 | - <Menu-item name="2-2">活跃用户</Menu-item> | |
78 | - </Submenu> | |
79 | - <Submenu name="3"> | |
80 | - <template slot="title"> | |
81 | - <Icon type="stats-bars"></Icon> | |
82 | - 统计分析 | |
83 | - </template> | |
84 | - <Menu-group title="使用"> | |
85 | - <Menu-item name="3-1">新增和启动</Menu-item> | |
86 | - <Menu-item name="3-2">活跃分析</Menu-item> | |
87 | - <Menu-item name="3-3">时段分析</Menu-item> | |
88 | - </Menu-group> | |
89 | - <Menu-group title="留存"> | |
90 | - <Menu-item name="3-4">用户留存</Menu-item> | |
91 | - <Menu-item name="3-5">流失用户</Menu-item> | |
92 | - </Menu-group> | |
93 | - </Submenu> | |
94 | - </Menu> | |
95 | - </i-col> | |
96 | - <i-col span="8"> | |
97 | - <Menu :theme="theme2" active-name="1-2" :open-names="['1']" @on-select="s"> | |
98 | - <Submenu name="1"> | |
99 | - <template slot="title"> | |
100 | - <Icon type="ios-paper"></Icon> | |
101 | - 内容管理 | |
102 | - </template> | |
103 | - <Menu-item name="1-1">文章管理</Menu-item> | |
104 | - <Menu-item name="1-2">评论管理</Menu-item> | |
105 | - <Menu-item name="1-3">举报管理</Menu-item> | |
106 | - </Submenu> | |
107 | - <Submenu name="2"> | |
108 | - <template slot="title"> | |
109 | - <Icon type="ios-people"></Icon> | |
110 | - 用户管理 | |
111 | - </template> | |
112 | - <Menu-item name="2-1">新增用户</Menu-item> | |
113 | - <Menu-item name="2-2">活跃用户</Menu-item> | |
114 | - </Submenu> | |
115 | - <Submenu name="3"> | |
116 | - <template slot="title"> | |
117 | - <Icon type="stats-bars"></Icon> | |
118 | - 统计分析 | |
119 | - </template> | |
120 | - <Menu-group title="使用"> | |
121 | - <Menu-item name="3-1">新增和启动</Menu-item> | |
122 | - <Menu-item name="3-2">活跃分析</Menu-item> | |
123 | - <Menu-item name="3-3">时段分析</Menu-item> | |
124 | - </Menu-group> | |
125 | - <Menu-group title="留存"> | |
126 | - <Menu-item name="3-4">用户留存</Menu-item> | |
127 | - <Menu-item name="3-5">流失用户</Menu-item> | |
128 | - </Menu-group> | |
129 | - </Submenu> | |
130 | - </Menu> | |
131 | - </i-col> | |
132 | - <i-col span="8"> | |
133 | - <Menu :theme="theme2" :open-names="['1']" accordion @on-select="s"> | |
134 | - <Submenu name="1"> | |
135 | - <template slot="title"> | |
136 | - <Icon type="ios-paper"></Icon> | |
137 | - 内容管理 | |
138 | - </template> | |
139 | - <Menu-item name="1-1">文章管理</Menu-item> | |
140 | - <Menu-item name="1-2">评论管理</Menu-item> | |
141 | - <Menu-item name="1-3">举报管理</Menu-item> | |
142 | - </Submenu> | |
143 | - <Submenu name="2"> | |
144 | - <template slot="title"> | |
145 | - <Icon type="ios-people"></Icon> | |
146 | - 用户管理 | |
147 | - </template> | |
148 | - <Menu-item name="2-1">新增用户</Menu-item> | |
149 | - <Menu-item name="2-2">活跃用户</Menu-item> | |
150 | - </Submenu> | |
3 | + <Menu mode="horizontal" :theme="theme1" active-name="1" @on-select="s"> | |
4 | + <Row type="flex" justify="center" align="middle"> | |
5 | + <i-col span="12"> | |
6 | + <Menu-item name="1"> | |
7 | + <Icon type="ios-paper"></Icon> | |
8 | + 内容管理 | |
9 | + </Menu-item> | |
10 | + <Menu-item name="2"> | |
11 | + <Icon type="ios-people"></Icon> | |
12 | + 用户管理 | |
13 | + </Menu-item> | |
151 | 14 | <Submenu name="3"> |
152 | 15 | <template slot="title"> |
153 | 16 | <Icon type="stats-bars"></Icon> |
... | ... | @@ -163,14 +26,19 @@ |
163 | 26 | <Menu-item name="3-5">流失用户</Menu-item> |
164 | 27 | </Menu-group> |
165 | 28 | </Submenu> |
166 | - </Menu> | |
167 | - </i-col> | |
168 | - </Row> | |
29 | + <Menu-item name="4"> | |
30 | + <Icon type="settings"></Icon> | |
31 | + 综合设置 | |
32 | + </Menu-item> | |
33 | + </i-col> | |
34 | + </Row> | |
35 | + </Menu> | |
169 | 36 | <br> |
170 | 37 | <p>切换主题</p> |
171 | - <Radio-group v-model="theme2"> | |
38 | + <Radio-group v-model="theme1"> | |
172 | 39 | <Radio label="light"></Radio> |
173 | 40 | <Radio label="dark"></Radio> |
41 | + <Radio label="primary"></Radio> | |
174 | 42 | </Radio-group> |
175 | 43 | </div> |
176 | 44 | </template> |
... | ... | @@ -178,13 +46,149 @@ |
178 | 46 | export default { |
179 | 47 | data () { |
180 | 48 | return { |
181 | - theme2: 'light' | |
49 | + theme1: 'light' | |
182 | 50 | } |
183 | 51 | }, |
184 | 52 | methods: { |
185 | 53 | s (s) { |
186 | - console.log(s); | |
54 | + console.log(s) | |
187 | 55 | } |
188 | 56 | } |
189 | 57 | } |
190 | 58 | </script> |
59 | + | |
60 | + | |
61 | +<!--<template>--> | |
62 | + <!--<div>--> | |
63 | + <!--<Row>--> | |
64 | + <!--<i-col span="8">--> | |
65 | + <!--<Menu :theme="theme2" @on-select="s">--> | |
66 | + <!--<Submenu name="1">--> | |
67 | + <!--<template slot="title">--> | |
68 | + <!--<Icon type="ios-paper"></Icon>--> | |
69 | + <!--内容管理--> | |
70 | + <!--</template>--> | |
71 | + <!--<Menu-item name="1-1">文章管理</Menu-item>--> | |
72 | + <!--<Menu-item name="1-2">评论管理</Menu-item>--> | |
73 | + <!--<Menu-item name="1-3">举报管理</Menu-item>--> | |
74 | + <!--</Submenu>--> | |
75 | + <!--<Submenu name="2">--> | |
76 | + <!--<template slot="title">--> | |
77 | + <!--<Icon type="ios-people"></Icon>--> | |
78 | + <!--用户管理--> | |
79 | + <!--</template>--> | |
80 | + <!--<Menu-item name="2-1">新增用户</Menu-item>--> | |
81 | + <!--<Menu-item name="2-2">活跃用户</Menu-item>--> | |
82 | + <!--</Submenu>--> | |
83 | + <!--<Submenu name="3">--> | |
84 | + <!--<template slot="title">--> | |
85 | + <!--<Icon type="stats-bars"></Icon>--> | |
86 | + <!--统计分析--> | |
87 | + <!--</template>--> | |
88 | + <!--<Menu-group title="使用">--> | |
89 | + <!--<Menu-item name="3-1">新增和启动</Menu-item>--> | |
90 | + <!--<Menu-item name="3-2">活跃分析</Menu-item>--> | |
91 | + <!--<Menu-item name="3-3">时段分析</Menu-item>--> | |
92 | + <!--</Menu-group>--> | |
93 | + <!--<Menu-group title="留存">--> | |
94 | + <!--<Menu-item name="3-4">用户留存</Menu-item>--> | |
95 | + <!--<Menu-item name="3-5">流失用户</Menu-item>--> | |
96 | + <!--</Menu-group>--> | |
97 | + <!--</Submenu>--> | |
98 | + <!--</Menu>--> | |
99 | + <!--</i-col>--> | |
100 | + <!--<i-col span="8">--> | |
101 | + <!--<Menu :theme="theme2" active-name="1-2" :open-names="['1']" @on-select="s">--> | |
102 | + <!--<Submenu name="1">--> | |
103 | + <!--<template slot="title">--> | |
104 | + <!--<Icon type="ios-paper"></Icon>--> | |
105 | + <!--内容管理--> | |
106 | + <!--</template>--> | |
107 | + <!--<Menu-item name="1-1">文章管理</Menu-item>--> | |
108 | + <!--<Menu-item name="1-2">评论管理</Menu-item>--> | |
109 | + <!--<Menu-item name="1-3">举报管理</Menu-item>--> | |
110 | + <!--</Submenu>--> | |
111 | + <!--<Submenu name="2">--> | |
112 | + <!--<template slot="title">--> | |
113 | + <!--<Icon type="ios-people"></Icon>--> | |
114 | + <!--用户管理--> | |
115 | + <!--</template>--> | |
116 | + <!--<Menu-item name="2-1">新增用户</Menu-item>--> | |
117 | + <!--<Menu-item name="2-2">活跃用户</Menu-item>--> | |
118 | + <!--</Submenu>--> | |
119 | + <!--<Submenu name="3">--> | |
120 | + <!--<template slot="title">--> | |
121 | + <!--<Icon type="stats-bars"></Icon>--> | |
122 | + <!--统计分析--> | |
123 | + <!--</template>--> | |
124 | + <!--<Menu-group title="使用">--> | |
125 | + <!--<Menu-item name="3-1">新增和启动</Menu-item>--> | |
126 | + <!--<Menu-item name="3-2">活跃分析</Menu-item>--> | |
127 | + <!--<Menu-item name="3-3">时段分析</Menu-item>--> | |
128 | + <!--</Menu-group>--> | |
129 | + <!--<Menu-group title="留存">--> | |
130 | + <!--<Menu-item name="3-4">用户留存</Menu-item>--> | |
131 | + <!--<Menu-item name="3-5">流失用户</Menu-item>--> | |
132 | + <!--</Menu-group>--> | |
133 | + <!--</Submenu>--> | |
134 | + <!--</Menu>--> | |
135 | + <!--</i-col>--> | |
136 | + <!--<i-col span="8">--> | |
137 | + <!--<Menu :theme="theme2" :open-names="['1']" accordion @on-select="s">--> | |
138 | + <!--<Submenu name="1">--> | |
139 | + <!--<template slot="title">--> | |
140 | + <!--<Icon type="ios-paper"></Icon>--> | |
141 | + <!--内容管理--> | |
142 | + <!--</template>--> | |
143 | + <!--<Menu-item name="1-1">文章管理</Menu-item>--> | |
144 | + <!--<Menu-item name="1-2">评论管理</Menu-item>--> | |
145 | + <!--<Menu-item name="1-3">举报管理</Menu-item>--> | |
146 | + <!--</Submenu>--> | |
147 | + <!--<Submenu name="2">--> | |
148 | + <!--<template slot="title">--> | |
149 | + <!--<Icon type="ios-people"></Icon>--> | |
150 | + <!--用户管理--> | |
151 | + <!--</template>--> | |
152 | + <!--<Menu-item name="2-1">新增用户</Menu-item>--> | |
153 | + <!--<Menu-item name="2-2">活跃用户</Menu-item>--> | |
154 | + <!--</Submenu>--> | |
155 | + <!--<Submenu name="3">--> | |
156 | + <!--<template slot="title">--> | |
157 | + <!--<Icon type="stats-bars"></Icon>--> | |
158 | + <!--统计分析--> | |
159 | + <!--</template>--> | |
160 | + <!--<Menu-group title="使用">--> | |
161 | + <!--<Menu-item name="3-1">新增和启动</Menu-item>--> | |
162 | + <!--<Menu-item name="3-2">活跃分析</Menu-item>--> | |
163 | + <!--<Menu-item name="3-3">时段分析</Menu-item>--> | |
164 | + <!--</Menu-group>--> | |
165 | + <!--<Menu-group title="留存">--> | |
166 | + <!--<Menu-item name="3-4">用户留存</Menu-item>--> | |
167 | + <!--<Menu-item name="3-5">流失用户</Menu-item>--> | |
168 | + <!--</Menu-group>--> | |
169 | + <!--</Submenu>--> | |
170 | + <!--</Menu>--> | |
171 | + <!--</i-col>--> | |
172 | + <!--</Row>--> | |
173 | + <!--<br>--> | |
174 | + <!--<p>切换主题</p>--> | |
175 | + <!--<Radio-group v-model="theme2">--> | |
176 | + <!--<Radio label="light"></Radio>--> | |
177 | + <!--<Radio label="dark"></Radio>--> | |
178 | + <!--</Radio-group>--> | |
179 | + <!--</div>--> | |
180 | +<!--</template>--> | |
181 | +<!--<script>--> | |
182 | + <!--export default {--> | |
183 | + <!--data () {--> | |
184 | + <!--return {--> | |
185 | + <!--theme2: 'light'--> | |
186 | + <!--}--> | |
187 | + <!--},--> | |
188 | + <!--methods: {--> | |
189 | + <!--s (s) {--> | |
190 | + <!--console.log(s);--> | |
191 | + <!--}--> | |
192 | + <!--}--> | |
193 | + <!--}--> | |
194 | +<!--</script>--> | ... | ... |
src/components/menu/menu.vue
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | <ul :class="classes" :style="styles"><slot></slot></ul> |
3 | 3 | </template> |
4 | 4 | <script> |
5 | - import { oneOf } from '../../utils/assist'; | |
5 | + import { oneOf, findComponentsDownward } from '../../utils/assist'; | |
6 | 6 | import Emitter from '../../mixins/emitter'; |
7 | 7 | |
8 | 8 | const prefixCls = 'ivu-menu'; |
... | ... | @@ -84,11 +84,13 @@ |
84 | 84 | } |
85 | 85 | }, |
86 | 86 | updateOpened () { |
87 | - this.$children.forEach(item => { | |
88 | - if (item.$options.name === 'Submenu') { | |
87 | + const items = findComponentsDownward(this, 'Submenu'); | |
88 | + | |
89 | + if (items.length) { | |
90 | + items.forEach(item => { | |
89 | 91 | if (this.openNames.indexOf(item.name) > -1) item.opened = true; |
90 | - } | |
91 | - }); | |
92 | + }); | |
93 | + } | |
92 | 94 | } |
93 | 95 | }, |
94 | 96 | mounted () { | ... | ... |
src/components/menu/submenu.vue
... | ... | @@ -17,7 +17,7 @@ |
17 | 17 | <script> |
18 | 18 | import Drop from '../select/dropdown.vue'; |
19 | 19 | import Icon from '../icon/icon.vue'; |
20 | - import { getStyle } from '../../utils/assist'; | |
20 | + import { getStyle, findComponentUpward } from '../../utils/assist'; | |
21 | 21 | import Emitter from '../../mixins/emitter'; |
22 | 22 | |
23 | 23 | const prefixCls = 'ivu-menu'; |
... | ... | @@ -41,7 +41,8 @@ |
41 | 41 | prefixCls: prefixCls, |
42 | 42 | active: false, |
43 | 43 | opened: false, |
44 | - dropWidth: parseFloat(getStyle(this.$el, 'width')) | |
44 | + dropWidth: parseFloat(getStyle(this.$el, 'width')), | |
45 | + parent: findComponentUpward(this, 'Menu') | |
45 | 46 | }; |
46 | 47 | }, |
47 | 48 | computed: { |
... | ... | @@ -56,12 +57,10 @@ |
56 | 57 | ]; |
57 | 58 | }, |
58 | 59 | mode () { |
59 | - // todo while | |
60 | - return this.$parent.mode; | |
60 | + return this.parent.mode; | |
61 | 61 | }, |
62 | 62 | accordion () { |
63 | - // todo while | |
64 | - return this.$parent.accordion; | |
63 | + return this.parent.accordion; | |
65 | 64 | }, |
66 | 65 | dropStyle () { |
67 | 66 | let style = {}; |
... | ... | @@ -77,8 +76,7 @@ |
77 | 76 | |
78 | 77 | clearTimeout(this.timeout); |
79 | 78 | this.timeout = setTimeout(() => { |
80 | - // todo while | |
81 | - this.$parent.updateOpenKeys(this.name); | |
79 | + this.parent.updateOpenKeys(this.name); | |
82 | 80 | this.opened = true; |
83 | 81 | }, 250); |
84 | 82 | }, |
... | ... | @@ -88,8 +86,7 @@ |
88 | 86 | |
89 | 87 | clearTimeout(this.timeout); |
90 | 88 | this.timeout = setTimeout(() => { |
91 | - // todo while | |
92 | - this.$parent.updateOpenKeys(this.name); | |
89 | + this.parent.updateOpenKeys(this.name); | |
93 | 90 | this.opened = false; |
94 | 91 | }, 150); |
95 | 92 | }, |
... | ... | @@ -98,14 +95,12 @@ |
98 | 95 | if (this.mode === 'horizontal') return; |
99 | 96 | const opened = this.opened; |
100 | 97 | if (this.accordion) { |
101 | - // todo while | |
102 | - this.$parent.$children.forEach(item => { | |
98 | + this.parent.$children.forEach(item => { | |
103 | 99 | if (item.$options.name === 'Submenu') item.opened = false; |
104 | 100 | }); |
105 | 101 | } |
106 | 102 | this.opened = !opened; |
107 | - // todo while | |
108 | - this.$parent.updateOpenKeys(this.name); | |
103 | + this.parent.updateOpenKeys(this.name); | |
109 | 104 | } |
110 | 105 | }, |
111 | 106 | watch: { | ... | ... |