@lambo-design/pro-layout 1.0.0-beta.45 → 1.0.0-beta.451

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 (40) hide show
  1. package/package.json +11 -4
  2. package/src/components/pro-layout-header/index.vue +220 -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 +399 -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 +565 -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 +99 -0
  12. package/src/components/pro-layout-header/pro-layout-tools/components/pro-layout-tools-quick-intl.vue +110 -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-user.vue +64 -0
  17. package/src/components/pro-layout-header/pro-layout-tools/index.vue +38 -0
  18. package/src/components/pro-layout-header/pro-layout-trigger/index.vue +84 -0
  19. package/src/components/{pro-layout-sider-collapsed-menu.vue → pro-layout-sider/components/pro-layout-sider-collapsed-menu.vue} +30 -11
  20. package/src/components/{pro-layout-sider-icon.vue → pro-layout-sider/components/pro-layout-sider-icon.vue} +2 -2
  21. package/src/components/pro-layout-sider/components/pro-layout-sider-menu-item.vue +137 -0
  22. package/src/components/pro-layout-sider/components/pro-layout-sider-other-menu.vue +140 -0
  23. package/src/components/pro-layout-sider/components/pro-layout-sider-search.vue +345 -0
  24. package/src/components/pro-layout-sider/index.vue +477 -0
  25. package/src/components/{pro-layout-tabs.vue → pro-layout-tabs/index.vue} +118 -23
  26. package/src/index.vue +306 -40
  27. package/src/styles/color.less +267 -0
  28. package/src/styles/images/xiaoxitongzhi.png +0 -0
  29. package/src/styles/other-menu.less +63 -111
  30. package/src/utils/menuItem.js +10 -0
  31. package/src/utils/sider.js +16 -1
  32. package/src/components/pro-layout-header.vue +0 -52
  33. package/src/components/pro-layout-logo.vue +0 -79
  34. package/src/components/pro-layout-nav.vue +0 -150
  35. package/src/components/pro-layout-other-menu.vue +0 -138
  36. package/src/components/pro-layout-sider-menu-item.vue +0 -37
  37. package/src/components/pro-layout-sider.vue +0 -240
  38. package/src/components/pro-layout-tools-user.vue +0 -84
  39. package/src/components/pro-layout-tools.vue +0 -21
  40. package/src/components/pro-layout-trigger.vue +0 -48
@@ -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,137 @@
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="toggleCollect(item)"></Icon>
31
+ </Col>
32
+ <Col :span="getSpanNum(systemInfo,'title')">
33
+ <div :class="['menu-title-' + item.children[0].permissionId,'draggable-text']" v-draggable="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="toggleCollect(item)"></Icon>
55
+ </Col>
56
+ <Col :span="getSpanNum(systemInfo,'title')">
57
+ <div :class="['menu-title-' + item.permissionId,'draggable-text']" v-draggable="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
+
76
+ export default {
77
+ name: 'ProLayoutSiderMenuItem',
78
+ mixins: [sider, menuItem, Locale],
79
+ props: {
80
+ collectMap: {
81
+ type: Object,
82
+ default: () => {}
83
+ },
84
+ systemInfo: {
85
+ type: Object,
86
+ default: () => {
87
+ return {
88
+ systemName: this.t('pro-layout.common.systemName'),
89
+ systemLogo: '',
90
+ layoutSize: 'small',
91
+ acceptAppId: '',
92
+ tabNum: 5,
93
+ topMenu: 4,
94
+ rightTopOptButtonList: [],
95
+ menuScaling:'1',
96
+ headBackground:'',
97
+ menuLogo: '1',
98
+ titleShow:'wrap',
99
+ }
100
+ }
101
+ },
102
+ navList: {
103
+ type: Array,
104
+ default : () => {
105
+ return []
106
+ }
107
+ }
108
+ },
109
+ methods: {
110
+ toggleCollect(item) {
111
+ Bus.$emit('toggle-collect-menu',!this.collectMap[item.name],item)
112
+ },
113
+ dragOptions(item){
114
+ if (!item) {
115
+ item = {}
116
+ }
117
+ item.navList = this.navList;
118
+ return {
119
+ trigger: '.menu-title-' + item.permissionId,
120
+ body: '.menu-title-' + item.permissionId,
121
+ recover: true,
122
+ item: item
123
+ }
124
+ },
125
+ },
126
+ computed:{
127
+ showTooltip() {
128
+ const ellipsisDiv = this.$refs['ellipsisDiv' + this.index];
129
+ return ellipsisDiv.clientWidth < ellipsisDiv.scrollWidth;
130
+ }
131
+ }
132
+ }
133
+ </script>
134
+
135
+ <style scoped lang="less">
136
+ @import '../../../styles/other-menu.less';
137
+ </style>
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <div :class="classes">
3
+ <div class="other-menu-item" @click="onChange('history')">
4
+ <Tooltip :disabled="!collapsed" :content="t('pro-layout.side.history')" placement="right" transfer>
5
+ <div>
6
+ <Icon class="other-menu-icon" type="md-time"/>
7
+ <span class="other-menu-title"> {{ t('pro-layout.side.history') }}</span>
8
+ </div>
9
+ </Tooltip>
10
+ </div>
11
+ <div class="other-menu-item" @click="onChange('collect')">
12
+ <Tooltip :disabled="!collapsed" :content="t('pro-layout.side.collect')" placement="right" transfer>
13
+ <div>
14
+ <Icon class="other-menu-icon" type="md-star-outline"/>
15
+ <span class="other-menu-title">{{ t('pro-layout.side.collect') }}</span>
16
+ </div>
17
+
18
+ </Tooltip>
19
+ </div>
20
+ <Drawer v-model="drawer.model"
21
+ :class-name="drawerClasses"
22
+ :closable="false"
23
+ :mask-style="{backgroundColor: 'unset'}"
24
+ :scrollable="true"
25
+ :title="drawer.title"
26
+ placement="left"
27
+ >
28
+ <div v-if="drawer.type=='history'" class="other-menu-drawer-list">
29
+ <div v-for="(item,index) in historyMenuList" :key="index" class="other-menu-drawer-item">
30
+ <div class="content" @click="handleClick(item)">
31
+ <Icon :type="item.icon"></Icon>
32
+ <span> {{ item.label }}</span>
33
+ </div>
34
+ <div class="delete">
35
+ <Icon type="ios-close" @click.native="handleHistoryDelete(item)"></Icon>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div v-if="drawer.type=='collect'" class="other-menu-drawer-list">
40
+ <div v-for="(item,index) in collectMenuList" :key="index" class="other-menu-drawer-item" @click="handleClick(item)">
41
+ <div class="content" @click="handleClick(item)">
42
+ <Icon :type="item.icon"></Icon>
43
+ <span> {{ item.label }}</span>
44
+ </div>
45
+ <div class="delete">
46
+ <Icon type="ios-close" @click.native.stop="handleCollectDelete(item)"></Icon>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </Drawer>
51
+ </div>
52
+ </template>
53
+
54
+ <script>
55
+ import Bus from "@lambo-design/shared/utils/bus";
56
+ import Locale from "@lambo-design/core/src/mixins/locale";
57
+
58
+ export default {
59
+ name: "other-menu",
60
+ mixins: [Locale],
61
+ components: {},
62
+ props: {
63
+ collapsed: {
64
+ type: Boolean,
65
+ default:false
66
+ }
67
+ },
68
+ data() {
69
+ return {
70
+ historyMenuList: [],
71
+ collectMenuList: [],
72
+ drawer: {
73
+ model: false,
74
+ title: '',
75
+ type: '',
76
+ }
77
+ }
78
+ },
79
+ computed: {
80
+ classes() {
81
+ let classes = ["other-menu"]
82
+ return this.collapsed ? ["other-menu-collapsed", ...classes] : [...classes]
83
+ },
84
+ drawerClasses() {
85
+ return this.collapsed ? "other-menu-drawer-wrap-collapsed" : "other-menu-drawer-wrap"
86
+ }
87
+ },
88
+ methods: {
89
+ initListener(){
90
+ Bus.$on('history-menu-list',(data)=>{
91
+ this.initHistory(data)
92
+ });
93
+ Bus.$on('collect-menu-list', (data)=> {
94
+ this.initCollect(data)
95
+ })
96
+ },
97
+ destroyListener(){
98
+ Bus.$off('history-menu-list')
99
+ Bus.$off('collect-menu-list')
100
+ },
101
+ initHistory(historyMenuList){
102
+ this.historyMenuList = historyMenuList;
103
+ },
104
+ initCollect(collectMenuList){
105
+ this.collectMenuList = collectMenuList;
106
+ },
107
+ onChange(value) {
108
+ if (value == 'history') {
109
+ Bus.$emit('get-history-menu-list')
110
+ this.drawer.title = this.t('pro-layout.side.history-menu')
111
+ } else {
112
+ this.drawer.title = this.t('pro-layout.side.collect-menu')
113
+ }
114
+ this.drawer.type = value
115
+ this.drawer.model = !this.drawer.model
116
+ },
117
+ handleClick(item) {
118
+ this.drawer.model = false
119
+ this.$emit('select-menu', item.name, item)
120
+ },
121
+ handleHistoryDelete(item) {
122
+ Bus.$emit('delete-history-menu',item)
123
+ },
124
+ handleCollectDelete(item) {
125
+ Bus.$emit('delete-collect-menu',item)
126
+ }
127
+ },
128
+ created(){
129
+ this.initListener();
130
+ },
131
+ beforeDestroy(){
132
+ this.destroyListener();
133
+ }
134
+ }
135
+ </script>
136
+
137
+
138
+ <style lang="less">
139
+ @import '../../../styles/other-menu.less';
140
+ </style>