lw-cdp-ui 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +5 -5
  2. package/dist/components/lwForm/index.vue +312 -312
  3. package/dist/components/lwIconSelect/iconSelect.js +288 -288
  4. package/dist/components/lwIconSelect/index.vue +142 -142
  5. package/dist/components/lwLayout/components/NavMenu.vue +36 -36
  6. package/dist/components/lwLayout/components/aside.vue +291 -295
  7. package/dist/components/lwLayout/components/bu.vue +72 -70
  8. package/dist/components/lwLayout/components/iframeView.vue +57 -57
  9. package/dist/components/lwLayout/components/lang.vue +76 -76
  10. package/dist/components/lwLayout/components/setting.vue +80 -80
  11. package/dist/components/lwLayout/components/sideM.vue +137 -136
  12. package/dist/components/lwLayout/components/tags.vue +329 -329
  13. package/dist/components/lwLayout/components/topbar.vue +70 -70
  14. package/dist/components/lwLayout/components/userbar.vue +210 -209
  15. package/dist/components/lwLayout/index.vue +399 -398
  16. package/dist/components/lwLogin/index.vue +446 -383
  17. package/dist/components/lwSearch/date/date.vue +110 -110
  18. package/dist/components/lwSearch/dateRange/dateRange.vue +110 -110
  19. package/dist/components/lwSearch/dates/dates.vue +366 -366
  20. package/dist/components/lwSearch/index.vue +636 -636
  21. package/dist/components/lwSearch/input/input.vue +54 -54
  22. package/dist/components/lwSearch/locale/en-us.js +10 -10
  23. package/dist/components/lwSearch/locale/zh-cn.js +10 -10
  24. package/dist/components/lwSearch/select/select.vue +57 -57
  25. package/dist/components/lwSvgIcon/index.vue +28 -28
  26. package/dist/components/lwTable/index.js +425 -425
  27. package/dist/components/lwTable/index.scss +229 -229
  28. package/dist/components/lwTable/index.vue +225 -226
  29. package/dist/components/lwTable/locale/en-US.js +26 -26
  30. package/dist/components/lwTable/locale/zh-CN.js +26 -26
  31. package/dist/components/lwTable/useFullscreen.js +73 -73
  32. package/dist/components/lwTableSelect/index.vue +254 -254
  33. package/dist/components/lwTableSelect/tableSelect.js +23 -23
  34. package/dist/components/lwUpload/index.vue +365 -365
  35. package/dist/en-US-YCjgxjEt.js.map +1 -1
  36. package/dist/en-us-CziFtIQi.js.map +1 -1
  37. package/dist/lw-cdp-ui.esm.js +1484 -1459
  38. package/dist/lw-cdp-ui.esm.js.map +1 -1
  39. package/dist/lw-cdp-ui.umd.js +9 -9
  40. package/dist/lw-cdp-ui.umd.js.map +1 -1
  41. package/dist/style.css +1 -1
  42. package/dist/zh-CN-BdDNsX4e.js.map +1 -1
  43. package/dist/zh-cn-DJpQp_O7.js.map +1 -1
  44. package/package.json +45 -45
@@ -1,398 +1,399 @@
1
- <template>
2
- <!-- 通栏布局 -->
3
- <template v-if="layout=='header'">
4
- <header class="adminui-header">
5
- <div class="adminui-header-left">
6
- <div class="logo-bar">
7
- <img class="logo"
8
- src="/images/logo.jpg">
9
- <span>{{ $config.APP_NAME }}</span>
10
- </div>
11
- <ul v-if="!ismobile"
12
- class="nav">
13
- <li v-for="item in menu"
14
- :key="item"
15
- :class="pmenu.path==item.path?'active':''"
16
- @click="showMenu(item)">
17
- <el-icon>
18
- <component :is="item.meta.icon || 'el-icon-menu'" />
19
- </el-icon>
20
- <span>{{ item.meta.title }}</span>
21
- </li>
22
- </ul>
23
- </div>
24
- <div class="adminui-header-right">
25
- <userbar :isShowBu="isShowBu"
26
- :isInitialized="isInitialized"></userbar>
27
- </div>
28
- </header>
29
- <section class="aminui-wrapper">
30
- <div v-if="!ismobile && nextMenu.length>0 || !pmenu.component"
31
- :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
32
- <div v-if="!menuIsCollapse"
33
- class="adminui-side-top">
34
- <h2>{{ pmenu.meta.title }}</h2>
35
- </div>
36
- <div class="adminui-side-scroll">
37
- <el-scrollbar>
38
- <el-menu :default-active="active"
39
- router
40
- :collapse="menuIsCollapse"
41
- :unique-opened="$config.MENU_UNIQUE_OPENED">
42
- <NavMenu :navMenus="nextMenu"></NavMenu>
43
- </el-menu>
44
- </el-scrollbar>
45
- </div>
46
- <div class="adminui-side-bottom"
47
- @click="$store.commit('TOGGLE_menuIsCollapse')">
48
- <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
49
- v-else /></el-icon>
50
- </div>
51
- </div>
52
- <Side-m v-if="ismobile"></Side-m>
53
- <div class="aminui-body el-container">
54
- <Topbar v-if="!ismobile"></Topbar>
55
- <Tags v-if="!ismobile && layoutTags"></Tags>
56
- <div class="adminui-main"
57
- id="adminui-main">
58
- <slot name="routerView">
59
- <router-view v-slot="{ Component }">
60
- <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
61
- <component :is="Component"
62
- :key="$route.fullPath"
63
- v-if="$store.state.keepAlive.routeShow" />
64
- </keep-alive>
65
- </router-view>
66
- </slot>
67
- <iframe-view></iframe-view>
68
- </div>
69
- </div>
70
- </section>
71
- </template>
72
-
73
- <!-- 经典布局 -->
74
- <template v-else-if="layout=='menu'">
75
- <section class="aminui-body-menu">
76
- <div class="aminui-side-split-left">
77
- <Aside></Aside>
78
- </div>
79
-
80
- <section class="aminui-wrapper">
81
- <div v-if="!ismobile"
82
- :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
83
- <div class="adminui-side-scroll">
84
-
85
- <el-scrollbar>
86
- <div class="title-name">
87
- {{ menuIsCollapse ? $config.APP_NAME.charAt(0) : $config.APP_NAME }}
88
- </div>
89
- <el-menu :default-active="active"
90
- router
91
- :collapse="menuIsCollapse"
92
- :unique-opened="$config.MENU_UNIQUE_OPENED">
93
- <NavMenu :navMenus="menu"></NavMenu>
94
- </el-menu>
95
- </el-scrollbar>
96
- </div>
97
- <div class="adminui-side-bottom"
98
- @click="$store.commit('TOGGLE_menuIsCollapse')">
99
- <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
100
- v-else /></el-icon>
101
- </div>
102
- </div>
103
- <Side-m v-if="ismobile"></Side-m>
104
- <div class="aminui-body el-container">
105
- <div class="aminui-body-menu-top">
106
- <div class="top-bar-title">
107
- <span class="title">{{$t("layout.topbar")}}:</span>
108
- <Topbar v-if="!ismobile"></Topbar>
109
- </div>
110
- <userbar :isShowBu="isShowBu"
111
- :isInitialized="isInitialized"></userbar>
112
- </div>
113
- <Tags v-if="!ismobile && layoutTags"></Tags>
114
- <div class="adminui-main"
115
- id="adminui-main">
116
- <slot name="routerView">
117
- <router-view v-slot="{ Component }">
118
- <keep-alive
119
- :include="this.$store.state.keepAlive.keepLiveRoute">
120
- <component :is="Component"
121
- :key="$route.fullPath"
122
- v-if="$store.state.keepAlive.routeShow" />
123
- </keep-alive>
124
- </router-view>
125
- </slot>
126
- <iframe-view></iframe-view>
127
- </div>
128
- </div>
129
- </section>
130
- </section>
131
- </template>
132
-
133
- <!-- 功能坞布局 -->
134
- <template v-else-if="layout=='dock'">
135
- <header class="adminui-header">
136
- <div class="adminui-header-left">
137
- <div class="logo-bar">
138
- <img class="logo"
139
- src="/images/logo.jpg">
140
- <span>{{ $config.APP_NAME }}</span>
141
- </div>
142
- </div>
143
- <div class="adminui-header-right">
144
- <div v-if="!ismobile"
145
- class="adminui-header-menu">
146
- <el-menu mode="horizontal"
147
- :default-active="active"
148
- router
149
- background-color="#222b45"
150
- text-color="#fff"
151
- active-text-color="var(--el-color-primary)">
152
- <NavMenu :navMenus="menu"></NavMenu>
153
- </el-menu>
154
- </div>
155
- <Side-m v-if="ismobile"></Side-m>
156
- <userbar :isShowBu="isShowBu"
157
- :isInitialized="isInitialized"></userbar>
158
- </div>
159
- </header>
160
- <section class="aminui-wrapper">
161
- <div class="aminui-body el-container">
162
- <Tags v-if="!ismobile && layoutTags"></Tags>
163
- <div class="adminui-main"
164
- id="adminui-main">
165
- <slot name="routerView">
166
- <router-view v-slot="{ Component }">
167
- <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
168
- <component :is="Component"
169
- :key="$route.fullPath"
170
- v-if="$store.state.keepAlive.routeShow" />
171
- </keep-alive>
172
- </router-view>
173
- </slot>
174
- <iframe-view></iframe-view>
175
- </div>
176
- </div>
177
- </section>
178
- </template>
179
-
180
- <!-- 默认布局 -->
181
- <template v-else>
182
- <section class="aminui-wrapper">
183
- <div v-if="!ismobile"
184
- class="aminui-side-split">
185
- <div class="aminui-side-split-top">
186
- <Aside></Aside>
187
- </div>
188
-
189
- <div class="adminui-side-split-scroll">
190
- <el-scrollbar>
191
- <ul>
192
- <li v-for="item in menu"
193
- :key="item"
194
- :class="pmenu.path==item.path?'active':''"
195
- @click="showMenu(item)">
196
- <el-icon>
197
- <component :is="item.meta.icon || el-icon-menu" />
198
- </el-icon>
199
- <p>{{ item.meta.title }}</p>
200
- </li>
201
- </ul>
202
- </el-scrollbar>
203
- </div>
204
- </div>
205
- <div v-if="!ismobile && nextMenu.length>0 || !pmenu.component"
206
- :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
207
- <div v-if="!menuIsCollapse"
208
- class="adminui-side-top">
209
- <h2>{{ pmenu.meta.title }}</h2>
210
- </div>
211
- <div class="adminui-side-scroll">
212
- <el-scrollbar>
213
- <el-menu :default-active="active"
214
- router
215
- :collapse="menuIsCollapse"
216
- :unique-opened="$config.MENU_UNIQUE_OPENED">
217
- <NavMenu :navMenus="nextMenu"></NavMenu>
218
- </el-menu>
219
- </el-scrollbar>
220
- </div>
221
- <div class="adminui-side-bottom"
222
- @click="$store.commit('TOGGLE_menuIsCollapse')">
223
- <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
224
- v-else /></el-icon>
225
- </div>
226
- </div>
227
- <Side-m v-if="ismobile"></Side-m>
228
- <div class="aminui-body el-container">
229
- <Topbar>
230
- <userbar :isShowBu="isShowBu"
231
- :isInitialized="isInitialized"></userbar>
232
- </Topbar>
233
- <Tags v-if="!ismobile && layoutTags"></Tags>
234
- <div class="adminui-main"
235
- id="adminui-main">
236
- <slot name="routerView">
237
- <router-view v-slot="{ Component }">
238
- <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
239
- <component :is="Component"
240
- :key="$route.fullPath"
241
- v-if="$store.state.keepAlive.routeShow" />
242
- </keep-alive>
243
- </router-view>
244
- </slot>
245
- <iframe-view></iframe-view>
246
- </div>
247
- </div>
248
- </section>
249
- </template>
250
-
251
- <div class="main-maximize-exit"
252
- @click="exitMaximize"><el-icon><el-icon-close /></el-icon></div>
253
-
254
- <div class="layout-setting"
255
- @click="openSetting"><el-icon><el-icon-brush-filled /></el-icon></div>
256
-
257
- <el-drawer title="布局实时演示"
258
- v-model="settingDialog"
259
- :size="400"
260
- append-to-body
261
- destroy-on-close>
262
- <setting></setting>
263
- </el-drawer>
264
- </template>
265
-
266
- <script>
267
- import SideM from './components/sideM.vue';
268
- import Aside from './components/aside.vue';
269
- import Topbar from './components/topbar.vue';
270
- import Tags from './components/tags.vue';
271
- import NavMenu from './components/NavMenu.vue';
272
- import userbar from './components/userbar.vue';
273
- import setting from './components/setting.vue';
274
- import iframeView from './components/iframeView.vue';
275
-
276
- export default {
277
- name: 'lwLayout',
278
- props: {
279
- isShowBu: {
280
- type: Boolean,
281
- default: true
282
- },
283
- // 是否要校验初始化
284
- isInitialized: {
285
- type: Boolean,
286
- default: true
287
- },
288
- },
289
- components: {
290
- Aside,
291
- SideM,
292
- Topbar,
293
- Tags,
294
- NavMenu,
295
- userbar,
296
- setting,
297
- iframeView
298
- },
299
- data() {
300
- return {
301
- settingDialog: false,
302
- menu: [],
303
- nextMenu: [],
304
- pmenu: {},
305
- active: ''
306
- }
307
- },
308
- computed: {
309
- ismobile() {
310
- return this.$store.state.global.ismobile
311
- },
312
- layout() {
313
- return this.$store.state.global.layout
314
- },
315
- layoutTags() {
316
- return this.$store.state.global.layoutTags
317
- },
318
- menuIsCollapse() {
319
- return this.$store.state.global.menuIsCollapse
320
- }
321
- },
322
- created() {
323
- this.onLayoutResize();
324
- window.addEventListener('resize', this.onLayoutResize);
325
- var menu = this.$router.sc_getMenu();
326
- this.menu = this.filterUrl(menu);
327
- this.showThis()
328
- this.$store.commit("LOAD_USER_FROM_LOCAL_STORAGE")
329
- },
330
- watch: {
331
- $route() {
332
- this.showThis()
333
- var menu = this.$router.sc_getMenu();
334
- this.menu = this.filterUrl(menu);
335
- },
336
- '$i18n.locale'() {
337
- var menu = this.$router.sc_getMenu();
338
- this.menu = this.filterUrl(menu);
339
- },
340
- layout: {
341
- handler(val) {
342
- document.body.setAttribute('data-layout', val)
343
- },
344
- immediate: true,
345
- },
346
-
347
- },
348
- methods: {
349
- openSetting() {
350
- this.settingDialog = true;
351
- },
352
- onLayoutResize() {
353
- this.$store.commit("SET_ismobile", document.body.clientWidth < 992)
354
- },
355
- //路由监听高亮
356
- showThis() {
357
- this.pmenu = this.$route.meta.breadcrumb ? this.$route.meta.breadcrumb[0] : {}
358
- this.nextMenu = this.filterUrl(this.pmenu.children);
359
- this.$nextTick(() => {
360
- this.active = this.$route.meta.active || this.$route.fullPath;
361
- })
362
- },
363
- //点击显示
364
- showMenu(route) {
365
- this.pmenu = route;
366
- this.nextMenu = this.filterUrl(route.children);
367
- if ((!route.children || route.children.length == 0) && route.component) {
368
- this.$router.push({ path: route.path })
369
- }
370
- },
371
- //转换外部链接的路由
372
- filterUrl(map) {
373
- var newMap = []
374
- map && map.forEach(item => {
375
- item.meta = item.meta ? item.meta : {};
376
- //处理隐藏
377
- if (item.meta.hidden || item.meta.type == "button") {
378
- return false
379
- }
380
- //处理http
381
- if (item.meta.type == 'iframe') {
382
- item.path = `/i/${item.name}`;
383
- }
384
- //递归循环
385
- if (item.children && item.children.length > 0) {
386
- item.children = this.filterUrl(item.children)
387
- }
388
- newMap.push(item)
389
- })
390
- return newMap;
391
- },
392
- //退出最大化
393
- exitMaximize() {
394
- document.getElementById('app').classList.remove('main-maximize')
395
- }
396
- }
397
- }
398
- </script>
1
+ <template>
2
+ <!-- 通栏布局 -->
3
+ <template v-if="layout=='header'">
4
+ <header class="adminui-header">
5
+ <div class="adminui-header-left">
6
+ <div class="logo-bar">
7
+ <img class="logo"
8
+ :src="logo">
9
+ <span>{{ $config.APP_NAME }}</span>
10
+ </div>
11
+ <ul v-if="!ismobile"
12
+ class="nav">
13
+ <li v-for="item in menu"
14
+ :key="item"
15
+ :class="pmenu.path==item.path?'active':''"
16
+ @click="showMenu(item)">
17
+ <el-icon>
18
+ <component :is="item.meta.icon || 'el-icon-menu'" />
19
+ </el-icon>
20
+ <span>{{ item.meta.title }}</span>
21
+ </li>
22
+ </ul>
23
+ </div>
24
+ <div class="adminui-header-right">
25
+ <userbar :isShowBu="isShowBu"
26
+ :isInitialized="isInitialized"></userbar>
27
+ </div>
28
+ </header>
29
+ <section class="aminui-wrapper">
30
+ <div v-if="!ismobile && nextMenu.length>0 || !pmenu.component"
31
+ :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
32
+ <div v-if="!menuIsCollapse"
33
+ class="adminui-side-top">
34
+ <h2>{{ pmenu.meta.title }}</h2>
35
+ </div>
36
+ <div class="adminui-side-scroll">
37
+ <el-scrollbar>
38
+ <el-menu :default-active="active"
39
+ router
40
+ :collapse="menuIsCollapse"
41
+ :unique-opened="$config.MENU_UNIQUE_OPENED">
42
+ <NavMenu :navMenus="nextMenu"></NavMenu>
43
+ </el-menu>
44
+ </el-scrollbar>
45
+ </div>
46
+ <div class="adminui-side-bottom"
47
+ @click="$store.commit('TOGGLE_menuIsCollapse')">
48
+ <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
49
+ v-else /></el-icon>
50
+ </div>
51
+ </div>
52
+ <Side-m v-if="ismobile"></Side-m>
53
+ <div class="aminui-body el-container">
54
+ <Topbar v-if="!ismobile"></Topbar>
55
+ <Tags v-if="!ismobile && layoutTags"></Tags>
56
+ <div class="adminui-main"
57
+ id="adminui-main">
58
+ <slot name="routerView">
59
+ <router-view v-slot="{ Component }">
60
+ <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
61
+ <component :is="Component"
62
+ :key="$route.fullPath"
63
+ v-if="$store.state.keepAlive.routeShow" />
64
+ </keep-alive>
65
+ </router-view>
66
+ </slot>
67
+ <iframe-view></iframe-view>
68
+ </div>
69
+ </div>
70
+ </section>
71
+ </template>
72
+
73
+ <!-- 经典布局 -->
74
+ <template v-else-if="layout=='menu'">
75
+ <section class="aminui-body-menu">
76
+ <div class="aminui-side-split-left">
77
+ <Aside></Aside>
78
+ </div>
79
+
80
+ <section class="aminui-wrapper">
81
+ <div v-if="!ismobile"
82
+ :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
83
+ <div class="adminui-side-scroll">
84
+
85
+ <el-scrollbar>
86
+ <div class="title-name">
87
+ {{ menuIsCollapse ? $config.APP_NAME.charAt(0) : $config.APP_NAME }}
88
+ </div>
89
+ <el-menu :default-active="active"
90
+ router
91
+ :collapse="menuIsCollapse"
92
+ :unique-opened="$config.MENU_UNIQUE_OPENED">
93
+ <NavMenu :navMenus="menu"></NavMenu>
94
+ </el-menu>
95
+ </el-scrollbar>
96
+ </div>
97
+ <div class="adminui-side-bottom"
98
+ @click="$store.commit('TOGGLE_menuIsCollapse')">
99
+ <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
100
+ v-else /></el-icon>
101
+ </div>
102
+ </div>
103
+ <Side-m v-if="ismobile"></Side-m>
104
+ <div class="aminui-body el-container">
105
+ <div class="aminui-body-menu-top">
106
+ <div class="top-bar-title">
107
+ <span class="title">{{$t("layout.topbar")}}:</span>
108
+ <Topbar v-if="!ismobile"></Topbar>
109
+ </div>
110
+ <userbar :isShowBu="isShowBu"
111
+ :isInitialized="isInitialized"></userbar>
112
+ </div>
113
+ <Tags v-if="!ismobile && layoutTags"></Tags>
114
+ <div class="adminui-main"
115
+ id="adminui-main">
116
+ <slot name="routerView">
117
+ <router-view v-slot="{ Component }">
118
+ <keep-alive
119
+ :include="this.$store.state.keepAlive.keepLiveRoute">
120
+ <component :is="Component"
121
+ :key="$route.fullPath"
122
+ v-if="$store.state.keepAlive.routeShow" />
123
+ </keep-alive>
124
+ </router-view>
125
+ </slot>
126
+ <iframe-view></iframe-view>
127
+ </div>
128
+ </div>
129
+ </section>
130
+ </section>
131
+ </template>
132
+
133
+ <!-- 功能坞布局 -->
134
+ <template v-else-if="layout=='dock'">
135
+ <header class="adminui-header">
136
+ <div class="adminui-header-left">
137
+ <div class="logo-bar">
138
+ <img class="logo"
139
+ :src="logo">
140
+ <span>{{ $config.APP_NAME }}</span>
141
+ </div>
142
+ </div>
143
+ <div class="adminui-header-right">
144
+ <div v-if="!ismobile"
145
+ class="adminui-header-menu">
146
+ <el-menu mode="horizontal"
147
+ :default-active="active"
148
+ router
149
+ background-color="#222b45"
150
+ text-color="#fff"
151
+ active-text-color="var(--el-color-primary)">
152
+ <NavMenu :navMenus="menu"></NavMenu>
153
+ </el-menu>
154
+ </div>
155
+ <Side-m v-if="ismobile"></Side-m>
156
+ <userbar :isShowBu="isShowBu"
157
+ :isInitialized="isInitialized"></userbar>
158
+ </div>
159
+ </header>
160
+ <section class="aminui-wrapper">
161
+ <div class="aminui-body el-container">
162
+ <Tags v-if="!ismobile && layoutTags"></Tags>
163
+ <div class="adminui-main"
164
+ id="adminui-main">
165
+ <slot name="routerView">
166
+ <router-view v-slot="{ Component }">
167
+ <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
168
+ <component :is="Component"
169
+ :key="$route.fullPath"
170
+ v-if="$store.state.keepAlive.routeShow" />
171
+ </keep-alive>
172
+ </router-view>
173
+ </slot>
174
+ <iframe-view></iframe-view>
175
+ </div>
176
+ </div>
177
+ </section>
178
+ </template>
179
+
180
+ <!-- 默认布局 -->
181
+ <template v-else>
182
+ <section class="aminui-wrapper">
183
+ <div v-if="!ismobile"
184
+ class="aminui-side-split">
185
+ <div class="aminui-side-split-top">
186
+ <Aside></Aside>
187
+ </div>
188
+
189
+ <div class="adminui-side-split-scroll">
190
+ <el-scrollbar>
191
+ <ul>
192
+ <li v-for="item in menu"
193
+ :key="item"
194
+ :class="pmenu.path==item.path?'active':''"
195
+ @click="showMenu(item)">
196
+ <el-icon>
197
+ <component :is="item.meta.icon || el-icon-menu" />
198
+ </el-icon>
199
+ <p>{{ item.meta.title }}</p>
200
+ </li>
201
+ </ul>
202
+ </el-scrollbar>
203
+ </div>
204
+ </div>
205
+ <div v-if="!ismobile && nextMenu.length>0 || !pmenu.component"
206
+ :class="menuIsCollapse?'aminui-side isCollapse':'aminui-side'">
207
+ <div v-if="!menuIsCollapse"
208
+ class="adminui-side-top">
209
+ <h2>{{ pmenu.meta.title }}</h2>
210
+ </div>
211
+ <div class="adminui-side-scroll">
212
+ <el-scrollbar>
213
+ <el-menu :default-active="active"
214
+ router
215
+ :collapse="menuIsCollapse"
216
+ :unique-opened="$config.MENU_UNIQUE_OPENED">
217
+ <NavMenu :navMenus="nextMenu"></NavMenu>
218
+ </el-menu>
219
+ </el-scrollbar>
220
+ </div>
221
+ <div class="adminui-side-bottom"
222
+ @click="$store.commit('TOGGLE_menuIsCollapse')">
223
+ <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold
224
+ v-else /></el-icon>
225
+ </div>
226
+ </div>
227
+ <Side-m v-if="ismobile"></Side-m>
228
+ <div class="aminui-body el-container">
229
+ <Topbar>
230
+ <userbar :isShowBu="isShowBu"
231
+ :isInitialized="isInitialized"></userbar>
232
+ </Topbar>
233
+ <Tags v-if="!ismobile && layoutTags"></Tags>
234
+ <div class="adminui-main"
235
+ id="adminui-main">
236
+ <slot name="routerView">
237
+ <router-view v-slot="{ Component }">
238
+ <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
239
+ <component :is="Component"
240
+ :key="$route.fullPath"
241
+ v-if="$store.state.keepAlive.routeShow" />
242
+ </keep-alive>
243
+ </router-view>
244
+ </slot>
245
+ <iframe-view></iframe-view>
246
+ </div>
247
+ </div>
248
+ </section>
249
+ </template>
250
+
251
+ <div class="main-maximize-exit"
252
+ @click="exitMaximize"><el-icon><el-icon-close /></el-icon></div>
253
+
254
+ <div class="layout-setting"
255
+ @click="openSetting"><el-icon><el-icon-brush-filled /></el-icon></div>
256
+
257
+ <el-drawer title="布局实时演示"
258
+ v-model="settingDialog"
259
+ :size="400"
260
+ append-to-body
261
+ destroy-on-close>
262
+ <setting></setting>
263
+ </el-drawer>
264
+ </template>
265
+
266
+ <script>
267
+ import SideM from './components/sideM.vue';
268
+ import Aside from './components/aside.vue';
269
+ import Topbar from './components/topbar.vue';
270
+ import Tags from './components/tags.vue';
271
+ import NavMenu from './components/NavMenu.vue';
272
+ import userbar from './components/userbar.vue';
273
+ import setting from './components/setting.vue';
274
+ import iframeView from './components/iframeView.vue';
275
+ import logo from '/images/logo.jpg';
276
+ export default {
277
+ name: 'lwLayout',
278
+ props: {
279
+ isShowBu: {
280
+ type: Boolean,
281
+ default: true
282
+ },
283
+ // 是否要校验初始化
284
+ isInitialized: {
285
+ type: Boolean,
286
+ default: true
287
+ },
288
+ },
289
+ components: {
290
+ Aside,
291
+ SideM,
292
+ Topbar,
293
+ Tags,
294
+ NavMenu,
295
+ userbar,
296
+ setting,
297
+ iframeView
298
+ },
299
+ data() {
300
+ return {
301
+ logo,
302
+ settingDialog: false,
303
+ menu: [],
304
+ nextMenu: [],
305
+ pmenu: {},
306
+ active: ''
307
+ }
308
+ },
309
+ computed: {
310
+ ismobile() {
311
+ return this.$store.state.global.ismobile
312
+ },
313
+ layout() {
314
+ return this.$store.state.global.layout
315
+ },
316
+ layoutTags() {
317
+ return this.$store.state.global.layoutTags
318
+ },
319
+ menuIsCollapse() {
320
+ return this.$store.state.global.menuIsCollapse
321
+ }
322
+ },
323
+ created() {
324
+ this.onLayoutResize();
325
+ window.addEventListener('resize', this.onLayoutResize);
326
+ var menu = this.$router.sc_getMenu();
327
+ this.menu = this.filterUrl(menu);
328
+ this.showThis()
329
+ this.$store.commit("LOAD_USER_FROM_LOCAL_STORAGE")
330
+ },
331
+ watch: {
332
+ $route() {
333
+ this.showThis()
334
+ var menu = this.$router.sc_getMenu();
335
+ this.menu = this.filterUrl(menu);
336
+ },
337
+ '$i18n.locale'() {
338
+ var menu = this.$router.sc_getMenu();
339
+ this.menu = this.filterUrl(menu);
340
+ },
341
+ layout: {
342
+ handler(val) {
343
+ document.body.setAttribute('data-layout', val)
344
+ },
345
+ immediate: true,
346
+ },
347
+
348
+ },
349
+ methods: {
350
+ openSetting() {
351
+ this.settingDialog = true;
352
+ },
353
+ onLayoutResize() {
354
+ this.$store.commit("SET_ismobile", document.body.clientWidth < 992)
355
+ },
356
+ //路由监听高亮
357
+ showThis() {
358
+ this.pmenu = this.$route.meta.breadcrumb ? this.$route.meta.breadcrumb[0] : {}
359
+ this.nextMenu = this.filterUrl(this.pmenu.children);
360
+ this.$nextTick(() => {
361
+ this.active = this.$route.meta.active || this.$route.fullPath;
362
+ })
363
+ },
364
+ //点击显示
365
+ showMenu(route) {
366
+ this.pmenu = route;
367
+ this.nextMenu = this.filterUrl(route.children);
368
+ if ((!route.children || route.children.length == 0) && route.component) {
369
+ this.$router.push({ path: route.path })
370
+ }
371
+ },
372
+ //转换外部链接的路由
373
+ filterUrl(map) {
374
+ var newMap = []
375
+ map && map.forEach(item => {
376
+ item.meta = item.meta ? item.meta : {};
377
+ //处理隐藏
378
+ if (item.meta.hidden || item.meta.type == "button") {
379
+ return false
380
+ }
381
+ //处理http
382
+ if (item.meta.type == 'iframe') {
383
+ item.path = `/i/${item.name}`;
384
+ }
385
+ //递归循环
386
+ if (item.children && item.children.length > 0) {
387
+ item.children = this.filterUrl(item.children)
388
+ }
389
+ newMap.push(item)
390
+ })
391
+ return newMap;
392
+ },
393
+ //退出最大化
394
+ exitMaximize() {
395
+ document.getElementById('app').classList.remove('main-maximize')
396
+ }
397
+ }
398
+ }
399
+ </script>