@lambo-design/pro-layout 1.0.0-beta.48 → 1.0.0-beta.481

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 (42) hide show
  1. package/package.json +11 -4
  2. package/src/components/pro-layout-header/index.vue +224 -0
  3. package/src/components/pro-layout-header/pro-layout-logo/index.vue +206 -0
  4. package/src/components/pro-layout-header/pro-layout-nav/components/pro-layout-nav-slide-menu.vue +398 -0
  5. package/src/components/pro-layout-header/pro-layout-nav/index-slide.vue +226 -0
  6. package/src/components/pro-layout-header/pro-layout-nav/index.vue +564 -0
  7. package/src/components/pro-layout-header/pro-layout-slogan/index.vue +40 -0
  8. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-collect.vue +79 -0
  9. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-document.vue +116 -0
  10. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-fullscreen.vue +144 -0
  11. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-icons.vue +104 -0
  12. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-intl.vue +111 -0
  13. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-notice.vue +133 -0
  14. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-search.vue +305 -0
  15. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-todo.vue +145 -0
  16. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-todoCenter.vue +177 -0
  17. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-user.vue +86 -0
  18. package/src/components/pro-layout-header/pro-layout-tools/index.vue +32 -0
  19. package/src/components/pro-layout-header/pro-layout-trigger/index.vue +84 -0
  20. package/src/components/pro-layout-sider/components/pro-layout-sider-app-name.vue +123 -0
  21. package/src/components/{pro-layout-sider-collapsed-menu.vue → pro-layout-sider/components/pro-layout-sider-collapsed-menu.vue} +30 -11
  22. package/src/components/{pro-layout-sider-icon.vue → pro-layout-sider/components/pro-layout-sider-icon.vue} +2 -2
  23. package/src/components/pro-layout-sider/components/pro-layout-sider-menu-item.vue +139 -0
  24. package/src/components/pro-layout-sider/components/pro-layout-sider-other-menu.vue +140 -0
  25. package/src/components/pro-layout-sider/components/pro-layout-sider-search.vue +345 -0
  26. package/src/components/pro-layout-sider/index.vue +493 -0
  27. package/src/components/{pro-layout-tabs.vue → pro-layout-tabs/index.vue} +121 -23
  28. package/src/index.vue +366 -44
  29. package/src/styles/color.less +267 -0
  30. package/src/styles/images/xiaoxitongzhi.png +0 -0
  31. package/src/styles/other-menu.less +63 -111
  32. package/src/utils/menuItem.js +10 -0
  33. package/src/utils/sider.js +16 -1
  34. package/src/components/pro-layout-header.vue +0 -52
  35. package/src/components/pro-layout-logo.vue +0 -79
  36. package/src/components/pro-layout-nav.vue +0 -150
  37. package/src/components/pro-layout-other-menu.vue +0 -137
  38. package/src/components/pro-layout-sider-menu-item.vue +0 -37
  39. package/src/components/pro-layout-sider.vue +0 -240
  40. package/src/components/pro-layout-tools-user.vue +0 -84
  41. package/src/components/pro-layout-tools.vue +0 -21
  42. package/src/components/pro-layout-trigger.vue +0 -48
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <div class="user-avatar-dropdown">
3
+ <Dropdown @on-click="handleClick" :transfer="false">
4
+ <span>{{ t('pro-layout.header.user-welcome') }},{{ userInfo.userName }}</span>
5
+ <span class="user-avatar" :style="buildAvaterStyle(userInfo.userAvater)" v-if="userInfo.userAvater"></span>
6
+ <Icon type="ios-contact" v-if="!userInfo.userAvater" class="user-avatar-icon"></Icon>
7
+ <Icon v-if="userInfo.dropList.length > 0" type="ios-arrow-down"/>
8
+ <DropdownMenu v-if="userInfo.dropList.length > 0" slot="list">
9
+ <DropdownItem v-if="userInfo.dropList.includes('theme')" name="theme"><span>{{ t('pro-layout.header.user-change-theme') }}</span></DropdownItem>
10
+ <DropdownItem v-if="userInfo.dropList.includes('showTheme')" name="showTheme"><span>{{ t('pro-layout.header.user-custom-theme') }}</span></DropdownItem>
11
+ <DropdownItem v-if="userInfo.dropList.includes('personalCenter')" name="personalCenter"><span>{{ t('pro-layout.header.user-person-center') }}</span></DropdownItem>
12
+ <DropdownItem v-if="userInfo.dropList.includes('noticeList')" name="noticeList"><span>{{ t('pro-layout.header.user-notice') }}</span></DropdownItem>
13
+ <DropdownItem v-if="userInfo.dropList.includes('customGsUpdatePass')" name="customGsUpdatePass"><span>修改密码</span></DropdownItem>
14
+ <DropdownItem v-if="userInfo.dropList.includes('logout')" name="logout"><span>{{ t('pro-layout.header.user-logout') }}</span></DropdownItem>
15
+ </DropdownMenu>
16
+ </Dropdown>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ import Bus from '@lambo-design/shared/utils/bus'
22
+ import Locale from "@lambo-design/core/src/mixins/locale";
23
+ import config from "@lambo-design/shared/config/config"
24
+
25
+ export default {
26
+ name: 'pro-layout-tools-user',
27
+ mixins: [Locale],
28
+ data() {
29
+ return {
30
+ userInfo: {
31
+ userName: this.t('pro-layout.header.user-default-name'),
32
+ dropList: ['theme', 'personalCenter', 'noticeList', 'logout'],
33
+ userAvater: ''
34
+ }
35
+ }
36
+ },
37
+ methods: {
38
+ initListener() {
39
+ Bus.$on('user-info', (data) => {
40
+ this.handleUser(data)
41
+ })
42
+ },
43
+ destroyListener() {
44
+ Bus.$off('user-info')
45
+ },
46
+ handleUser(data) {
47
+ this.userInfo = Object.assign(this.userInfo, data)
48
+ },
49
+ handleClick(name) {
50
+ Bus.$emit('user-action', name)
51
+ },
52
+ buildAvaterStyle(avater){
53
+ return 'backgroundImage:url(' + config.ossServerContext + '/oss/file/get/' + avater + ')';
54
+ }
55
+ },
56
+ created() {
57
+ this.initListener()
58
+ },
59
+ beforeDestroy() {
60
+ this.destroyListener()
61
+ }
62
+ }
63
+ </script>
64
+ <style lang="less" scoped>
65
+ @import '@lambo-design/core/src/styles/default.less';
66
+ .user-avatar-dropdown {
67
+ float: left;
68
+ cursor: pointer;
69
+ vertical-align: middle;
70
+ font-size: var(--font-size-base, @_font-size-base);
71
+ .user-avatar{
72
+ display: inline-block;
73
+ vertical-align: middle;
74
+ margin-left: 4px;
75
+ width: 18px;
76
+ height: 18px;
77
+ border-radius: 8px;
78
+ background-size: cover;
79
+ background-position: center;
80
+ }
81
+ .user-avatar-icon{
82
+ margin-left: 4px;
83
+ font-size:18px;
84
+ }
85
+ }
86
+ </style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="pro-layout-tools-wrapper">
3
+ <slot name="pro-layout-icons">
4
+ <LamboProLayoutToolsQuickIcons>
5
+ <template slot="pro-layout-custom-icons">
6
+ <slot name="pro-layout-custom-icons"></slot>
7
+ </template>
8
+ </LamboProLayoutToolsQuickIcons>
9
+ </slot>
10
+ <slot name="pro-layout-user">
11
+ <LamboProLayoutToolsUser></LamboProLayoutToolsUser>
12
+ </slot>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import LamboProLayoutToolsQuickIcons from './components/pro-layout-tools-quick-icons'
18
+ import LamboProLayoutToolsUser from './components/pro-layout-tools-user'
19
+ export default {
20
+ name: "pro-layout-tools",
21
+ components: {
22
+ LamboProLayoutToolsQuickIcons,
23
+ LamboProLayoutToolsUser
24
+ }
25
+ }
26
+ </script>
27
+
28
+ <style scoped lang="less">
29
+ .pro-layout-tools-wrapper{
30
+ margin-right: 15px;
31
+ }
32
+ </style>
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <a @click="handleChange" type="text" :class="['sider-trigger-a', collapsed ? 'collapsed' : '']">
3
+ <Icon type="md-menu" size="26" v-show="isShow" />
4
+ </a>
5
+ </template>
6
+
7
+ <script>
8
+ import Bus from '@lambo-design/shared/utils/bus'
9
+ export default {
10
+ name: "pro-layout-trigger",
11
+ props:{
12
+ isShow: {
13
+ type: Boolean,
14
+ default:true
15
+ },
16
+ menuScalingStatus: {
17
+ type: String,
18
+ default:'1'
19
+ }
20
+ },
21
+ data(){
22
+ return {
23
+ collapsed: false
24
+ }
25
+ },
26
+ created(){
27
+ this.initCollapsed();
28
+ this.initListener();
29
+ },
30
+ beforeDestroy(){
31
+ this.destroyListener();
32
+ },
33
+ watch: {
34
+ menuScalingStatus(val) {
35
+ this.initCollapsed();
36
+ }
37
+ },
38
+ methods: {
39
+ initListener(){
40
+ Bus.$on('trigger-change-icon',(data)=>{
41
+ this.collapsed = data
42
+ Bus.$emit('trigger-change', data)
43
+ });
44
+ },
45
+ destroyListener(){
46
+ Bus.$off('trigger-change-icon')
47
+ },
48
+ handleChange(){
49
+ this.collapsed = !this.collapsed
50
+ Bus.$emit('trigger-change', this.collapsed)
51
+ },
52
+ initCollapsed(){
53
+ if(this.menuScalingStatus==='0'){
54
+ this.collapsed=true
55
+ }
56
+ Bus.$emit('trigger-change', this.collapsed)
57
+ }
58
+ }
59
+ }
60
+ </script>
61
+
62
+ <style scoped lang="less">
63
+ .trans{
64
+ transition: transform .2s ease;
65
+ }
66
+ @size: 64px;
67
+ .sider-trigger-a{
68
+ float: left;
69
+ padding: 6px;
70
+ width: @size;
71
+ height: @size;
72
+ display: inline-block;
73
+ text-align: center;
74
+ margin-top: 12px;
75
+ i{
76
+ .trans;
77
+ vertical-align: top;
78
+ }
79
+ &.collapsed i{
80
+ transform: rotateZ(90deg);
81
+ .trans;
82
+ }
83
+ }
84
+ </style>
@@ -0,0 +1,123 @@
1
+ <template>
2
+ <div class="app-fast-con" :class="tabsHeight != 46 ? 'custom-tabs' : ''">
3
+ <div class="app-fast-con-side" >
4
+ <div class="sideApp">
5
+ <div class="app-name">
6
+ <Icon :type="appInfo.icon || 'ios-apps-outline'" size="16"/>
7
+ <span>
8
+ {{ appInfo.name}}
9
+ </span>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </template>
15
+ <script>
16
+ import Bus from "@lambo-design/shared/utils/bus";
17
+ import {deepCopy} from "@lambo-design/shared/utils/assist";
18
+ import {getThemeVarByKey} from "@lambo-design/shared/utils/theme";
19
+ import {getAllElements} from "@lambo-design/shared/utils/platform"
20
+
21
+ export default {
22
+ name: "AppName",
23
+ data () {
24
+ return {
25
+ tabsHeight: 46,
26
+ appInfo:{}
27
+ }
28
+ },
29
+ methods:{
30
+ initListener(){
31
+ Bus.$on('system-info',(data)=>{
32
+ this.initSystemInfo(data)
33
+ })
34
+ Bus.$on('change-app',(data)=>{
35
+ this.initApp(data.appInfo)
36
+ })
37
+ },
38
+ destroyListener(){
39
+ Bus.$off('system-info')
40
+ Bus.$off('change-app')
41
+ },
42
+ initSystemInfo(data){
43
+ this.systemInfo = deepCopy(data)
44
+ },
45
+ initApp(data){
46
+ if (data.isGroup){
47
+ this.appInfo = data
48
+ }else {
49
+ let appInfo = sessionStorage.getItem("appInfo")
50
+ this.appInfo = JSON.parse(appInfo)
51
+ }
52
+ },
53
+
54
+ loadingCustomStyle(){
55
+ let themeKey = localStorage.getItem("theme") ? localStorage.getItem("theme") : "default"
56
+ let tabsHeight = getThemeVarByKey(themeKey,'--layout-tabs-height');
57
+ if (tabsHeight) {
58
+ this.tabsHeight = tabsHeight;
59
+ }
60
+ }
61
+ },
62
+ created(){
63
+ this.initListener();
64
+ this.loadingCustomStyle();
65
+ },
66
+ beforeDestroy(){
67
+ this.destroyListener();
68
+ }
69
+ }
70
+ </script>
71
+
72
+ <style lang="less" scoped>
73
+ @import "@lambo-design/core/src/styles/default.less";
74
+ .app-fast-con{
75
+ width: 100%;
76
+ position: absolute;
77
+ top: 0px;
78
+ z-index: 1000;
79
+ border-bottom: 1px solid var(--border-color-split,@_border-color-split);
80
+ .app-fast-con-side{
81
+ width: 100%;
82
+ .sideApp{
83
+ width: 100%;
84
+ padding: 3px 0 4px 0;
85
+ transform: translateX(-14px);
86
+ display: flex;
87
+ align-items: center;
88
+ /deep/.ivu-icon{
89
+ height: 40px;
90
+ line-height: 40px;
91
+ font-weight: 400;
92
+ }
93
+ }
94
+ .app-name{
95
+ display: flex;
96
+ align-items: center;
97
+ //font-size: 14px;
98
+ //width: 100%;
99
+ //height: 40px;
100
+ //font-weight: 400;
101
+ //border: none;
102
+ font-weight: bold; /* 关键字,等于 700 */
103
+ padding-left: 37px;
104
+ }
105
+
106
+ }
107
+ &.custom-tabs{
108
+ .app-fast-con-side{
109
+ .sideApp {
110
+ height: 30px;
111
+ /deep/.ivu-icon{
112
+ height: 36px;
113
+ line-height: 36px;
114
+ }
115
+ }
116
+ /deep/.app-name{
117
+ height: 36px;
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ </style>
@@ -1,28 +1,29 @@
1
1
  <template>
2
2
  <Dropdown ref="dropdown" :class="hideTitle ? '' : 'collased-menu-dropdown'" :placement="placement"
3
- :transfer="true" @on-click="handleClick">
4
- <a :style="{textAlign: !hideTitle ? 'left' : '',padding: !hideTitle ? '0px' : ''}" class="drop-menu-a" type="text"
3
+ :transfer="transfer" :transfer-class-name="transfer ? 'collased-menu-transfer' : ''" @on-click="handleClick">
4
+ <a :style="{textAlign: !hideTitle ? 'left' : '',padding: !hideTitle ? '0px' : ''}"
5
+ :class="['drop-menu-a', activeItem.indexOf(parentItem.name) >= 0 ? 'selected-parent' : '']" type="text"
5
6
  @mouseover="handleMousemove($event, children)">
6
7
  <ProLayoutSiderIcon :icon-type="parentItem.meta.icon" :icon-size="hideTitle ? 26 : 14"></ProLayoutSiderIcon>
7
- <span v-if="!hideTitle" class="menu-title">{{ showTitle(parentItem) }}</span>
8
+ <span v-if="!hideTitle" >&nbsp;{{ showTitle(parentItem) }}</span>
8
9
  <Icon v-if="!hideTitle" :size="16"type="ios-arrow-forward"/>
9
10
  </a>
10
11
  <DropdownMenu ref="dropdown" slot="list" style="width: auto">
11
12
  <template v-for="child in children">
12
13
  <ProLayoutSiderCollapsedMenu v-if="showChildren(child)" :key="`drop-${child.name}`"
13
- :parent-item="child">
14
+ :parent-item="child" :transfer="false">
14
15
  </ProLayoutSiderCollapsedMenu>
15
16
  <DropdownItem v-else :key="`drop-${child.name}`" :name="child.name">
16
17
  <ProLayoutSiderIcon :icon-type="child.meta.icon"></ProLayoutSiderIcon>
17
- <span class="menu-title">{{ showTitle(child) }}</span>
18
+ <span class="menu-title-nochildren">&nbsp;{{ showTitle(child) }}</span>
18
19
  </DropdownItem>
19
20
  </template>
20
21
  </DropdownMenu>
21
22
  </Dropdown>
22
23
  </template>
23
24
  <script>
24
- import sider from '../utils/sider'
25
- import menuItem from '../utils/menuItem'
25
+ import sider from '../../../utils/sider'
26
+ import menuItem from '../../../utils/menuItem'
26
27
  import {findNodeUpperByClasses} from '@lambo-design/shared/utils/platform'
27
28
 
28
29
  export default {
@@ -32,6 +33,10 @@ export default {
32
33
  hideTitle: {
33
34
  type: Boolean,
34
35
  default: false
36
+ },
37
+ transfer: {
38
+ type: Boolean,
39
+ default: false
35
40
  }
36
41
  },
37
42
  data() {
@@ -58,6 +63,7 @@ export default {
58
63
  </script>
59
64
  <style lang="less" scoped>
60
65
  @import "@lambo-design/core/src/styles/default";
66
+ @import '../../../styles/other-menu.less';
61
67
  .collased-menu-dropdown {
62
68
  width: 100%;
63
69
  margin: 0;
@@ -71,7 +77,7 @@ export default {
71
77
  transition: background 0.2s ease-in-out;
72
78
  display: block;
73
79
  &:hover{
74
- color: var(--heading-color, @_heading-color);
80
+ //color: var(--heading-color, @_heading-color);
75
81
  background: rgba(26,26,26,0.05);
76
82
  }
77
83
  /deep/.ivu-dropdown-rel{
@@ -80,12 +86,25 @@ export default {
80
86
  width: 100%;
81
87
  font-weight: normal;
82
88
  margin-left: -5px;
83
- color: var(--text-color, @_text-color) !important;
89
+ //color: var(--text-color, @_text-color) !important;
84
90
  text-decoration: none;
85
91
  &:hover{
86
- color: var(--heading-color, @_heading-color) !important;
92
+ //color: var(--heading-color, @_heading-color) !important;
87
93
  }
88
94
  }
89
95
  }
90
96
  }
91
- </style>
97
+ .collased-menu-transfer{
98
+ .ivu-dropdown-menu{
99
+ max-height: 500px;
100
+ overflow-y: auto;
101
+ overflow-x: hidden;
102
+ /* 隐藏滚动条 */
103
+ &::-webkit-scrollbar {
104
+ display: none; /* Chrome, Safari, Edge */
105
+ }
106
+ /* Firefox */
107
+ scrollbar-width: none; /* Firefox */
108
+ }
109
+ }
110
+ </style>
@@ -40,7 +40,7 @@ export default {
40
40
  }
41
41
  if (iconType.indexOf('iconfont') > -1) {
42
42
  let imgName = iconType.replace('iconfont','').replace(/\s+/g,'');
43
- return 'background: url('+ require('../styles/images/menuicon/' + imgName + '-s.png') +') no-repeat;background-size: 100%;';
43
+ return 'background: url('+ require('../../../styles/images/menuicon/' + imgName + '-s.png') +') no-repeat;background-size: 100%;';
44
44
  }
45
45
  return '';
46
46
  }
@@ -78,4 +78,4 @@ export default {
78
78
  }
79
79
  }
80
80
  }
81
- </style>
81
+ </style>
@@ -0,0 +1,139 @@
1
+ <template>
2
+ <Submenu :name="`${parentName}`">
3
+ <template slot="title">
4
+ <Row type="flex" justify="center" align="top">
5
+ <Col :span="getSpanNum(systemInfo,'icon')">
6
+ <ProLayoutSiderIcon v-if="systemInfo.menuLogo == '1'" :icon-type="parentItem.meta.icon"></ProLayoutSiderIcon>
7
+ </Col>
8
+ <Col :span="getSpanNum(systemInfo,'title')">
9
+ <div>
10
+ <Tooltip style="width: 100%" v-if="systemInfo.titleShow ==='ellipsis'" placement="right" transfer :content="showTitle(parentItem)">
11
+ <div class="menu-title-ellipsis">{{ showTitle(parentItem)}}</div>
12
+ </Tooltip>
13
+ <span v-else class="menu-title-wrap">{{ showTitle(parentItem)}}</span>
14
+ </div>
15
+ </Col>
16
+ </Row>
17
+ </template>
18
+ <template v-for="item in children">
19
+ <template v-if="item.children && item.children.length === 1">
20
+ <ProLayoutSiderMenuItem v-if="showChildren(item)" :key="`menu-${item.name}`"
21
+ :parent-item="item"
22
+ :collect-map="collectMap"
23
+ :system-info="systemInfo"
24
+ :nav-list="navList">
25
+ </ProLayoutSiderMenuItem>
26
+ <menu-item v-else :key="`menu-${item.children[0].name}`" :name="getNameOrHref(item, true)">
27
+ <Row type="flex" justify="center" align="top">
28
+ <Col :span="getSpanNum(systemInfo,'icon')">
29
+ <Icon v-if="systemInfo.menuLogo == '1'" :type="collectMap.hasOwnProperty(item.name) ? 'ios-star' : 'ios-star-outline'"
30
+ @click.stop="toggleCollect(item)"></Icon>
31
+ </Col>
32
+ <Col :span="getSpanNum(systemInfo,'title')">
33
+ <div :class="['menu-title-' + item.children[0].permissionId,'draggable-text']" v-draggable-menu="dragOptions(item.children[0])">
34
+ <Tooltip style="width: 100%" v-if="systemInfo.titleShow ==='ellipsis'" placement="right" transfer :content="showTitle(item.children[0])">
35
+ <div class="menu-title-nochildren-ellipsis">{{ showTitle(item.children[0]) }}</div>
36
+ </Tooltip>
37
+ <span v-else class="menu-title-nochildren-wrap">{{ showTitle(item.children[0])}}</span>
38
+ </div>
39
+ </Col>
40
+ </Row>
41
+ </menu-item>
42
+ </template>
43
+ <template v-else>
44
+ <ProLayoutSiderMenuItem v-if="showChildren(item)" :key="`menu-${item.name}`"
45
+ :parent-item="item"
46
+ :collect-map="collectMap"
47
+ :system-info="systemInfo"
48
+ :nav-list="navList">
49
+ </ProLayoutSiderMenuItem>
50
+ <menu-item v-else :key="`menu-${item.name}`" :name="getNameOrHref(item)">
51
+ <Row type="flex" justify="center" align="top">
52
+ <Col :span="getSpanNum(systemInfo,'icon')">
53
+ <Icon v-if="systemInfo.menuLogo == '1'" :type="collectMap.hasOwnProperty(item.name) ? 'ios-star' : 'ios-star-outline'"
54
+ @click.stop="toggleCollect(item)"></Icon>
55
+ </Col>
56
+ <Col :span="getSpanNum(systemInfo,'title')">
57
+ <div :class="['menu-title-' + item.permissionId,'draggable-text']" v-draggable-menu="dragOptions(item)">
58
+ <Tooltip style="width: 100%" v-if="systemInfo.titleShow ==='ellipsis'" placement="right" transfer :content="showTitle(item)">
59
+ <div class="menu-title-nochildren-ellipsis">{{ showTitle(item) }}</div>
60
+ </Tooltip>
61
+ <span v-else class="menu-title-nochildren-wrap">{{ showTitle(item) }}</span>
62
+ </div>
63
+ </Col>
64
+ </Row>
65
+ </menu-item>
66
+ </template>
67
+ </template>
68
+ </Submenu>
69
+ </template>
70
+ <script>
71
+ import sider from '../../../utils/sider'
72
+ import menuItem from '../../../utils/menuItem'
73
+ import Bus from '@lambo-design/shared/utils/bus'
74
+ import Locale from "@lambo-design/core/src/mixins/locale";
75
+ import {addOttCode} from "@lambo-design/shared/utils/platform";
76
+
77
+ export default {
78
+ name: 'ProLayoutSiderMenuItem',
79
+ mixins: [sider, menuItem, Locale],
80
+ props: {
81
+ collectMap: {
82
+ type: Object,
83
+ default: () => {}
84
+ },
85
+ systemInfo: {
86
+ type: Object,
87
+ default: () => {
88
+ return {
89
+ systemName: this.t('pro-layout.common.systemName'),
90
+ systemLogo: '',
91
+ layoutSize: 'small',
92
+ acceptAppId: '',
93
+ tabNum: 5,
94
+ topMenu: 4,
95
+ rightTopOptButtonList: [],
96
+ menuScaling:'1',
97
+ headBackground:'',
98
+ menuLogo: '1',
99
+ titleShow:'wrap',
100
+ }
101
+ }
102
+ },
103
+ navList: {
104
+ type: Array,
105
+ default : () => {
106
+ return []
107
+ }
108
+ }
109
+ },
110
+ methods: {
111
+ toggleCollect(item) {
112
+ Bus.$emit('toggle-collect-menu',!this.collectMap[item.name],item)
113
+ },
114
+ dragOptions(item) {
115
+ if (!item) {
116
+ item = {}
117
+ }
118
+ item.navList = this.navList;
119
+ return {
120
+ trigger: '.menu-title-' + item.permissionId,
121
+ body: '.menu-title-' + item.permissionId,
122
+ recover: true,
123
+ item: item,
124
+ canMove: this.systemInfo?.menuDraggable !== '0'
125
+ }
126
+ },
127
+ },
128
+ computed:{
129
+ showTooltip() {
130
+ const ellipsisDiv = this.$refs['ellipsisDiv' + this.index];
131
+ return ellipsisDiv.clientWidth < ellipsisDiv.scrollWidth;
132
+ }
133
+ }
134
+ }
135
+ </script>
136
+
137
+ <style scoped lang="less">
138
+ @import '../../../styles/other-menu.less';
139
+ </style>