n20-common-lib 2.7.0-beta.1 → 2.7.0-beta.10

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "2.7.0-beta.1",
3
+ "version": "2.7.0-beta.10",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -280,27 +280,72 @@ $--header-color: #3d4a57;
280
280
  color: #333333;
281
281
  }
282
282
 
283
- .header-menu-drawer.el-drawer.ttb {
284
- top: 48px;
283
+ .menu {
284
+ color: #33383d;
285
+ letter-spacing: 0;
286
+ line-height: 22px;
287
+ opacity: .98;
288
+ background-color: #fff;
289
+ box-shadow: 0 12px 30px -15px rgba(0, 0, 0, .1);
290
+ width: calc(100vw - 190px);
291
+ height: 20px;
292
+ position: fixed;
293
+ top: 50px;
285
294
  left: 190px;
286
- width: calc(100% - 190px);
287
- padding-left: 105px;
295
+ z-index: 1000;
296
+ max-height: 0;
297
+ min-height: 0;
298
+ transition: max-height .3s ease, min-height .3s ease;
299
+ overflow: hidden;
300
+ cursor: pointer;
301
+ display: flex;
302
+ flex-direction: column;
303
+ align-items: center;
288
304
 
289
- .menu {
290
- &-system-item {
291
- flex: 0 0 33.33%;
292
- padding-top: 32px;
293
- }
305
+ &_drawer_box {
306
+ width: 992px;
307
+ }
294
308
 
295
- &-system-child {
296
- padding-top: 16px;
297
- padding-left: 32px;
309
+ &-system-item {
310
+ flex: 0 0 33.33%;
311
+ padding-top: 32px;
312
+
313
+ &_title {
314
+
315
+ display: inline-block;
316
+ padding: 4px;
317
+
318
+ &:hover {
319
+ background-color: #f5f5f5;
320
+ border-radius: $--border-radius-base;
321
+ }
298
322
  }
323
+ }
324
+
325
+ &-system-child {
326
+ padding-top: 16px;
327
+ padding-left: 36px;
328
+ }
329
+
330
+ &-first-item {
331
+ flex: 0 0 33.33%;
332
+ margin-bottom: 16px;
333
+
334
+ &_title {
299
335
 
300
- &-first-item {
301
- flex: 0 0 33.33%;
302
- margin-bottom: 16px;
336
+ display: inline-block;
337
+ padding: 4px;
338
+
339
+ &:hover {
340
+ background-color: #f5f5f5;
341
+ border-radius: $--border-radius-base;
342
+ }
303
343
  }
304
344
  }
305
345
 
346
+ }
347
+
348
+ .menu.show_drawer {
349
+ max-height: calc(90vh - 50px);
350
+ min-height: 350px;
306
351
  }
Binary file
@@ -24,12 +24,11 @@
24
24
  <svg class="icon" aria-hidden="true">
25
25
  <use xlink:href="#n20-icon-caidan"></use>
26
26
  </svg>
27
- <span class="m-l-ss f-s-b color-primary">切换系统</span>
27
+ <span class="m-l-ss f-s-b color-primary">{{ $lc('系统切换') }}</span>
28
28
  <svg class="icon m-l-ss f-s-s" aria-hidden="true">
29
29
  <use xlink:href="#n20-icon-lujing"></use>
30
30
  </svg>
31
31
  </div>
32
- <menuDrawer :visible.sync="menuDrawer" :menus="headerSystem" :callback="getTreeList"></menuDrawer>
33
32
 
34
33
  <span v-if="byLabel && !inBack" class="header-uif-by">{{ byLabel }}</span>
35
34
  <!-- YSCW -->
@@ -78,20 +77,12 @@
78
77
  </el-dropdown-menu>
79
78
  </el-dropdown>
80
79
 
81
- <el-tooltip v-if="!hideHelpDoc" :content="'帮助文档' | $lc">
82
- <span class="set-user-btn iconfont icon-bangzhuwendang header-color m-l-lg" @click="openHelp"></span>
83
- </el-tooltip>
84
-
85
- <el-tooltip v-if="!hideDowApp" :content="'客户端下载' | $lc">
86
- <span class="set-user-btn iconfont icon-kehuduanxiazai header-color m-l-lg" @click="dowApp"></span>
87
- </el-tooltip>
88
-
89
80
  <el-badge :hidden="noticeNum + afficheNum === 0" :value="noticeNum + afficheNum">
90
81
  <span v-if="!noticeDrw" v-popover:noticePop class="news-btn iconfont icon-xiaoxi header-color"></span>
91
82
  <span v-else class="news-btn iconfont icon-xiaoxi header-color" @click="customOpt.noticeDrawer"></span>
92
83
  </el-badge>
93
84
 
94
- <el-popover ref="by_popover" v-model="byV" placement="bottom-start" trigger="manual" popper-class="uby-w">
85
+ <!-- <el-popover ref="by_popover" v-model="byV" placement="bottom-start" trigger="manual" popper-class="uby-w">
95
86
  <div class="uby-h flex-box flex-v">
96
87
  <i class="uby-h-icon iconfont icon-icon_huanyingmoshi"></i>
97
88
  <span
@@ -103,7 +94,7 @@
103
94
  <div class="text-r">
104
95
  <el-button type="primary" @click="byV = false">{{ '知道了' | $lc }}</el-button>
105
96
  </div>
106
- </el-popover>
97
+ </el-popover> -->
107
98
 
108
99
  <el-dropdown
109
100
  ref="userDrop"
@@ -215,26 +206,24 @@
215
206
  </el-dropdown-menu>
216
207
  </el-dropdown>
217
208
  </el-dropdown-item>
218
- <!-- 系统切换 -->
219
- <el-dropdown-item v-if="systemChange && systemList && systemList.length">
220
- <el-dropdown trigger="hover" size="medium" placement="left-start" style="width: 100%">
221
- <div class="flex-box flex-v">
222
- <span>{{ '系统切换' | $lc }}</span>
223
- <i class="el-icon-caret-right m-l-auto m-r-0"></i>
224
- </div>
225
- <el-dropdown-menu slot="dropdown">
226
- <el-dropdown-item v-for="(item, i) in systemList" :key="i" @click.native="clickSystem(item)">
227
- <span>{{ item.NAME }}</span>
228
- </el-dropdown-item>
229
- </el-dropdown-menu>
230
- </el-dropdown>
231
- </el-dropdown-item>
232
209
  <el-dropdown-item v-if="!inBack" command="toBack">
233
210
  <div class="flex-box flex-v">
234
211
  <span>{{ '后台管理' | $lc }}</span>
235
212
  <i class="el-icon-caret-right m-l-auto m-r-0"></i>
236
213
  </div>
237
214
  </el-dropdown-item>
215
+ <el-dropdown-item v-if="!hideHelpDoc" command="openHelp">
216
+ <div class="flex-box flex-v">
217
+ <span>{{ '帮助文档' | $lc }}</span>
218
+ <i class="el-icon-caret-right m-l-auto m-r-0"></i>
219
+ </div>
220
+ </el-dropdown-item>
221
+ <el-dropdown-item v-if="!hideDowApp" command="dowApp">
222
+ <div class="flex-box flex-v">
223
+ <span>{{ '客户端下载' | $lc }}</span>
224
+ <i class="el-icon-caret-right m-l-auto m-r-0"></i>
225
+ </div>
226
+ </el-dropdown-item>
238
227
  <slot name="header-dropdown"></slot>
239
228
  <el-dropdown-item command="logOut">
240
229
  <div class="flex-box flex-v">
@@ -285,7 +274,6 @@ import { themeList } from '../../../utils/theme.config'
285
274
  import dialogWrap from '../../Dialog/index.vue'
286
275
  import operatingStatus from '../../operatingStatus/index.vue'
287
276
  import changePwd from './changePwd.vue'
288
- import menuDrawer from './menuDrawer.vue'
289
277
  import noticePop from './noticePop.vue'
290
278
  import switchUser from './switchUser.vue'
291
279
 
@@ -308,8 +296,7 @@ export default {
308
296
  changePwd,
309
297
  noticePop,
310
298
  switchUser,
311
- operatingStatus,
312
- menuDrawer
299
+ operatingStatus
313
300
  },
314
301
  props: {
315
302
  beforeLogout: {
@@ -369,13 +356,13 @@ export default {
369
356
  afficheNum: 0,
370
357
  rolesList: [],
371
358
  headerSystem: [],
359
+ showDrawerBox: false,
372
360
  scV: false,
373
361
  underway: false,
374
362
  /* */
375
363
  byV: false,
376
364
  byLabel: '',
377
365
  byEV: false,
378
- menuDrawer: false,
379
366
  headerUserInfoBg: realUrl('/server-assets/userInfoBg.png'),
380
367
  inBack: window.localStorage.getItem('pageInType') === 'inBack'
381
368
  }
@@ -420,7 +407,6 @@ export default {
420
407
  }
421
408
  })
422
409
  })
423
- this.systemChange && this.getSystemList()
424
410
  this.getNNum()
425
411
  document.addEventListener('visibilitychange', this.getNNum)
426
412
  window.addEventListener('message', this.updateNotice)
@@ -440,73 +426,59 @@ export default {
440
426
  window.removeEventListener('message', this.updateNotice)
441
427
  },
442
428
  methods: {
443
- handleChangeSystem() {
444
- this.menuDrawer = true
445
- this.getTreeList({}, null)
446
- let system_list = JSON.parse(localStorage.getItem('SYSTEM_LIST'))
447
- let menuTree = JSON.parse(sessionStorage.getItem('menuTree'))
448
- let length = system_list.length
449
-
450
- for (let i = 0; i < length; i++) {
451
- switch (system_list[i].NO) {
452
- case 'CSZHYW':
453
- system_list[i].icon = '#n20-icon-zhcsyw'
454
- break
455
- case 'CSYWGL':
456
- system_list[i].icon = '#n20-icon-bianzu'
457
- break
458
- case 'CSFZJC':
459
- system_list[i].icon = '#n20-icon-a-bianzu70'
460
- break
461
- case 'CSWY':
462
- system_list[i].icon = '#n20-icon-a-bianzu69'
463
- break
464
- case 'JTZL':
465
- system_list[i].icon = '#n20-icon-a-bianzu3'
466
- break
467
- case 'JRWG':
468
- system_list[i].icon = '#n20-icon-a-bianzu1'
469
- break
470
- case 'JTSKYWGK':
471
- system_list[i].icon = '#n20-icon-a-bianzu701'
472
- break
473
- case 'JTSKSJFX':
474
- system_list[i].icon = '#n20-icon-a-bianzu2'
475
- break
476
- }
477
- system_list[i].menuTree = []
478
- for (let j = 0; j < menuTree.length; j++) {
479
- if (system_list[i].NO === menuTree[j].systemNo && menuTree[j].isBackmenu === '1') {
480
- system_list[i].menuTree.push(menuTree[j])
481
- }
482
- }
429
+ async handleChangeSystem() {
430
+ let menuTree = JSON.parse(sessionStorage.getItem('allMenuTree'))
431
+ if (!menuTree) {
432
+ this.getTreeList().finally(async () => {
433
+ let tree = JSON.parse(sessionStorage.getItem('allMenuTree'))
434
+ this.setMenuData(tree)
435
+ })
436
+ } else {
437
+ this.setMenuData(menuTree)
483
438
  }
484
-
485
- this.headerSystem = system_list
486
- console.log(this.headerSystem)
487
- },
488
- clickMenu(row) {
489
- this.$router.push(row.route)
490
439
  },
440
+ setMenuData(menuTree) {
441
+ let system_list = JSON.parse(localStorage.getItem('SYSTEM_LIST'))
442
+ this.headerSystem = system_list.map((system) => {
443
+ const icon =
444
+ {
445
+ CSZHYW: '#n20-icon-zhcsyw',
446
+ CSYWGL: '#n20-icon-bianzu',
447
+ CSFZJC: '#n20-icon-a-bianzu70',
448
+ CSWY: '#n20-icon-a-bianzu69',
449
+ JTZL: '#n20-icon-a-bianzu3',
450
+ JRWG: '#n20-icon-a-bianzu1',
451
+ JTSKYWGK: '#n20-icon-a-bianzu701',
452
+ JTSKSJFX: '#n20-icon-a-bianzu2'
453
+ }[system.NO] || ''
491
454
 
492
- /**
493
- * 获取系统列表
494
- */
495
- getSystemList() {
496
- this.systemList = JSON.parse(localStorage.getItem('SYSTEM_LIST'))
455
+ system.icon = icon
456
+ system.menuTree = menuTree
457
+ ?.filter((menu) => menu.systemNo === system.NO && menu.isBackmenu === '0')
458
+ .map((menu) => ({
459
+ ...menu,
460
+ icon:
461
+ {
462
+ CSZHYW: '#n20-icon-zhcsyw',
463
+ CSYWGL: '#n20-icon-bianzu',
464
+ CSFZJC: '#n20-icon-a-bianzu70',
465
+ CSWY: '#n20-icon-a-bianzu69',
466
+ JTZL: '#n20-icon-a-bianzu3',
467
+ JRWG: '#n20-icon-a-bianzu1',
468
+ JTSKYWGK: '#n20-icon-a-bianzu701',
469
+ JTSKSJFX: '#n20-icon-a-bianzu2'
470
+ }[menu.NO] || ''
471
+ }))
472
+ return system
473
+ })
474
+ this.showDrawerBox = !this.showDrawerBox
475
+ this.$emit('clickSystem', this.headerSystem, this.showDrawerBox)
497
476
  },
498
- async getTreeList(item = {}, resType = 1) {
499
- const systemNo = item?.NO
500
- let { data } = await axios.get(
501
- `/bems/1.0/menuTree/tree?t=${Date.now()}`,
502
- {
503
- resType,
504
- systemNo
505
- },
506
- { loading: false }
507
- )
477
+
478
+ async getTreeList(item = {}) {
479
+ let { data } = await axios.get(`/bems/1.0/menuTree/tree?t=${Date.now()}`, item, { loading: false })
508
480
  let layoutMenus = siteTree2menus(data || [])
509
- sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
481
+ sessionStorage.setItem('allMenuTree', JSON.stringify(layoutMenus))
510
482
  },
511
483
 
512
484
  handleUser() {
@@ -603,6 +575,12 @@ export default {
603
575
  case 'toBack':
604
576
  this.toBack()
605
577
  break
578
+ case 'dowApp':
579
+ this.dowApp()
580
+ break
581
+ case 'openHelp':
582
+ this.openHelp()
583
+ break
606
584
  default:
607
585
  this.$emit('custom-event', { type: c })
608
586
  break
@@ -1,13 +1,6 @@
1
1
  <template>
2
- <el-drawer
3
- :visible.sync="drawer"
4
- custom-class="header-menu-drawer"
5
- :with-header="false"
6
- :appendToBody="true"
7
- direction="ttb"
8
- size="45%"
9
- >
10
- <div class="pointer flex-box flex-wrap">
2
+ <div class="pointer menu">
3
+ <div class="flex-box flex-wrap menu_drawer_box">
11
4
  <div v-for="(item, i) in menus" :key="i" class="menu-system-item">
12
5
  <div class="flex-box flex-v" @click="clickSystem(item)">
13
6
  <svg
@@ -16,62 +9,78 @@
16
9
  >
17
10
  <use :xlink:href="item.icon"></use>
18
11
  </svg>
19
- <span class="m-l-s">{{ item.NAME }}</span>
12
+ <span class="m-l-s menu-system-item_title">{{ item.NAME }}</span>
20
13
  </div>
21
14
  <div v-if="item.menuTree.length" class="flex-box flex-wrap menu-system-child">
22
- <div v-for="(row, i) in item.menuTree" :key="i" class="menu-first-item" @click="clickMenu(row)">
23
- {{ row.title }}
15
+ <div
16
+ v-for="(row, i) in item.menuTree"
17
+ :key="i"
18
+ class="menu-first-item"
19
+ @click="clickMenu(row, item.menuTree)"
20
+ >
21
+ <span class="menu-first-item_title">{{ row.title }}</span>
24
22
  </div>
25
23
  </div>
26
24
  </div>
27
25
  </div>
28
- </el-drawer>
26
+ </div>
29
27
  </template>
30
28
 
31
29
  <script>
30
+ import axios from '../../../utils/axios.js'
31
+ import { siteTree2menus } from '../../LoginTemporary/utils'
32
32
  export default {
33
33
  name: 'MenuDrawer',
34
34
  props: {
35
35
  menus: {
36
36
  type: Array,
37
37
  default: () => []
38
- },
39
- visible: {
40
- type: Boolean,
41
- default: false
42
- },
43
- callback: {
44
- type: Function,
45
- default: () => {}
46
- }
47
- },
48
- computed: {
49
- drawer: {
50
- get() {
51
- return this.visible
52
- },
53
- set(val) {
54
- this.$emit('update:visible', val)
55
- }
56
38
  }
57
39
  },
58
40
  methods: {
41
+ async getTreeList(item) {
42
+ let { data } = await axios.get(
43
+ `/bems/1.0/menuTree/tree?t=${Date.now()}`,
44
+ {
45
+ resType: 1,
46
+ systemNo: item.NO
47
+ },
48
+ { loading: false }
49
+ )
50
+ let layoutMenus = siteTree2menus(data || [])
51
+ sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
52
+ },
59
53
  async clickSystem(item) {
60
- // localStorage.setItem('pageInType', 'toFront')
54
+ await this.getTreeList(item)
61
55
  window.localStorage.setItem('pageInSystemNo', item.NO)
62
56
  // 切换系统的时候清除缓存的页签
63
57
  window.sessionStorage.removeItem('tab-list')
64
58
  let { base = '/' } = this.$router.options
65
59
  if (!/\/$/.test(base)) base += '/'
66
-
67
60
  window.location.href = window.location.origin + base + 'dashboard/workplace'
68
61
  },
69
- clickMenu(row) {
70
- if (row?.children?.length) {
71
- this.$router.push(row.children[0].route)
62
+ async clickMenu(row, MenuTre) {
63
+ let pageInSystemNo = window.localStorage.getItem('pageInSystemNo')
64
+ window.localStorage.setItem('pageInType', 'toFront')
65
+ if (pageInSystemNo === row.systemNo) {
66
+ if (row?.children?.length) {
67
+ this.$router.push(row.children[0].route)
68
+ } else {
69
+ this.$router.push(row.route)
70
+ }
72
71
  } else {
73
- this.$router.push(row.route)
72
+ window.localStorage.setItem('pageInSystemNo', row.systemNo)
73
+ window.sessionStorage.setItem('menuTree', JSON.stringify(MenuTre))
74
+ // 切换系统的时候清除缓存的页签
75
+ window.sessionStorage.removeItem('tab-list')
76
+ if (row?.children?.length) {
77
+ window.location.href =
78
+ window.location.origin + row.children[0].route + `?token=${window.sessionStorage.getItem('token')}`
79
+ } else {
80
+ window.location.href = window.location.origin + row.route + `?token=${window.sessionStorage.getItem('token')}`
81
+ }
74
82
  }
83
+ this.$emit('update:visible', false)
75
84
  }
76
85
  }
77
86
  }
@@ -7,11 +7,13 @@
7
7
  :operation-status="operationStatus"
8
8
  :before-logout="beforeLogout"
9
9
  :after-logout="afterLogout"
10
+ @clickSystem="clickSystem"
10
11
  @custom-event="(par) => $emit('custom-event', par)"
11
12
  >
12
13
  <slot slot="header-ectad" name="header-ectad"></slot>
13
14
  <slot slot="header-dropdown" name="header-dropdown"></slot>
14
15
  </headerWrap>
16
+ <menuDrawer :class="showDrawerBox ? 'show_drawer' : ''" :menus="systemMenu"></menuDrawer>
15
17
  <asideNav :menus="menusC" :active-nav="activeNavC" :collapse.sync="collapse" @menu-click="menuClick" />
16
18
  <tabsNav
17
19
  class="tabs-nav-wrap"
@@ -43,13 +45,15 @@ import { setRela } from '../../utils/relaNo'
43
45
  import asideNav from './AsideNav/index.vue'
44
46
  import headerWrap from './HeaderWrap/indexN.vue'
45
47
  import tabsNav from './TabsNav/index.vue'
48
+ import menuDrawer from './HeaderWrap/menuDrawer.vue'
46
49
 
47
50
  export default {
48
51
  name: 'Layout',
49
52
  components: {
50
53
  asideNav,
51
54
  headerWrap,
52
- tabsNav
55
+ tabsNav,
56
+ menuDrawer
53
57
  },
54
58
  filters: {
55
59
  keyF({ path, query = {} }) {
@@ -109,7 +113,8 @@ export default {
109
113
  clientM,
110
114
  clientHeight: document.documentElement.offsetHeight - headerH - tabsH - 1 * clientM,
111
115
  collapse: window.localStorage.getItem('aside-nav-collapse') === 'true',
112
-
116
+ showDrawerBox: false,
117
+ systemMenu: [],
113
118
  menusC: [],
114
119
  menuList: [],
115
120
  tabList: [],
@@ -190,6 +195,10 @@ export default {
190
195
  refreshTab && this.tabRefresh(refreshTab)
191
196
  }
192
197
  },
198
+ clickSystem(menu, drawerVisible) {
199
+ this.showDrawerBox = drawerVisible
200
+ this.systemMenu = menu
201
+ },
193
202
  getCollapse() {
194
203
  this.collapse = window.localStorage.getItem('aside-nav-collapse') === 'true'
195
204
  },
@@ -378,6 +378,8 @@ export default {
378
378
  form.systemNo = this.sltSys.NO
379
379
  } else if (this.systemList.length === 1) {
380
380
  form.systemNo = this.systemList[0].NO
381
+ } else {
382
+ form.systemNo = localStorage.getItem('pageInSystemNo')
381
383
  }
382
384
 
383
385
  return form
Binary file