@lambo-design/pro-layout 1.0.0-beta.43 → 1.0.0-beta.431

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 (39) hide show
  1. package/package.json +11 -4
  2. package/src/components/pro-layout-header/index.vue +218 -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 +360 -0
  5. package/src/components/pro-layout-header/pro-layout-nav/index-slide.vue +225 -0
  6. package/src/components/pro-layout-header/pro-layout-nav/index.vue +526 -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 +20 -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 +91 -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} +85 -13
  26. package/src/index.vue +296 -37
  27. package/src/styles/color.less +267 -0
  28. package/src/styles/images/xiaoxitongzhi.png +0 -0
  29. package/src/styles/other-menu.less +111 -0
  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-sider-menu-item.vue +0 -37
  36. package/src/components/pro-layout-sider.vue +0 -240
  37. package/src/components/pro-layout-tools-user.vue +0 -84
  38. package/src/components/pro-layout-tools.vue +0 -21
  39. package/src/components/pro-layout-trigger.vue +0 -48
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambo-design/pro-layout",
3
- "version": "1.0.0-beta.43",
3
+ "version": "1.0.0-beta.431",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "lambo",
@@ -10,8 +10,15 @@
10
10
  "registry": "https://registry.npmjs.org/"
11
11
  },
12
12
  "devDependencies": {
13
- "@lambo-design/core": "^4.7.1-beta.58",
14
- "@lambo-design/shared": "^1.0.0-beta.43"
13
+ "@lambo-design/shared": "^1.0.0-beta.351",
14
+ "@lambo-design/core": "^4.7.1-beta.176"
15
15
  },
16
- "scripts": {}
16
+ "scripts": {
17
+ "release-pro-layout": "pnpm release-beta && git push --follow-tags && pnpm re-publish",
18
+ "release-major": "standard-version --release-as major",
19
+ "release-minor": "standard-version --release-as minor",
20
+ "release-patch": "standard-version --release-as patch",
21
+ "release-beta": "standard-version --prerelease beta",
22
+ "re-publish": "pnpm publish --access public --no-git-checks"
23
+ }
17
24
  }
@@ -0,0 +1,218 @@
1
+ <template>
2
+ <div class="pro-layout-header-wrapper">
3
+ <div class="trigger-box" :style="menuScalingStyle">
4
+ <slot name="pro-layout-trigger">
5
+ <LamboProTrigger v-if="systemInfo.menuScaling === '1'" :menu-scaling-status="systemInfo.menuScalingStatus" :hide-menu-logo="hideMenuLogo"></LamboProTrigger>
6
+ </slot>
7
+ </div>
8
+ <div class="logo-box">
9
+ <slot name="pro-layout-logo">
10
+ <LamboProLogo :show-back-to-home="hideMenuLogo"></LamboProLogo>
11
+ </slot>
12
+ </div>
13
+ <div class="nav-box" v-show="!systemInfo || !systemInfo.navType || systemInfo.navType == 'dropdown'">
14
+ <slot name="pro-layout-nav">
15
+ <LamboProNav
16
+ :available-width="availableWidth"
17
+ :not-home-index="hideMenuLogo"
18
+ ></LamboProNav>
19
+ </slot>
20
+ </div>
21
+ <div class="tools-box">
22
+ <LamboProTools :show-tools-quick-icons="hideMenuLogo">
23
+ <template slot = "pro-layout-icons">
24
+ <slot name="pro-layout-icons"></slot>
25
+ </template>
26
+ <template slot="pro-layout-custom-icons">
27
+ <slot name="pro-layout-custom-icons"></slot>
28
+ </template>
29
+ <template slot = "pro-layout-user">
30
+ <slot name="pro-layout-user"></slot>
31
+ </template>
32
+ </LamboProTools>
33
+ </div>
34
+ <div class="slogan-box" style="display: none;">
35
+ <slot name="pro-layout-slogan">
36
+ <LamboProSlogan></LamboProSlogan>
37
+ </slot>
38
+ </div>
39
+ <div class="nav-slide-container" v-show="systemInfo && systemInfo.navType && systemInfo.navType == 'slide'" ref="slideContainer">
40
+ <LamboProNavSilde
41
+ :available-width="availableWidth"
42
+ :not-home-index="hideMenuLogo"
43
+ @width-change="handleSlideWidthChange"
44
+ ></LamboProNavSilde>
45
+ </div>
46
+ </div>
47
+ </template>
48
+
49
+ <script>
50
+ import LamboProTrigger from './pro-layout-trigger'
51
+ import LamboProLogo from './pro-layout-logo'
52
+ import LamboProNav from './pro-layout-nav'
53
+ import LamboProNavSilde from './pro-layout-nav/index-slide'
54
+ import LamboProSlogan from './pro-layout-slogan/index'
55
+ import LamboProTools from './pro-layout-tools'
56
+ import Bus from "@lambo-design/shared/utils/bus";
57
+
58
+ export default {
59
+ name: "pro-layout-header",
60
+ props:{
61
+ acceptAppId: {
62
+ type: String,
63
+ default:''
64
+ },
65
+ hideMenuLogo: {
66
+ type: Boolean,
67
+ default:true
68
+ }
69
+ },
70
+ data(){
71
+ return {
72
+ systemInfo: {},
73
+ availableWidth: 0,
74
+ resizeTimer: null,
75
+ }
76
+ },
77
+ components: {
78
+ LamboProTrigger,
79
+ LamboProLogo,
80
+ LamboProNav,
81
+ LamboProNavSilde,
82
+ LamboProSlogan,
83
+ LamboProTools
84
+ },
85
+ computed:{
86
+ menuScalingStyle(){
87
+ return this.systemInfo.menuScaling === '1' ? '' : {marginLeft:'25px'}
88
+ }
89
+ },
90
+ methods:{
91
+ initListener(){
92
+ Bus.$on('system-info',(data)=>{
93
+ this.initSystem(data)
94
+ });
95
+
96
+ // 监听窗口大小变化
97
+ window.addEventListener('resize', this.handleResize);
98
+ },
99
+ destroyListener(){
100
+ Bus.$off('system-info');
101
+ window.removeEventListener('resize', this.handleResize);
102
+ },
103
+ initSystem(data){
104
+ if (data) {
105
+ this.systemInfo = data;
106
+ // 当系统信息加载完成后,如果是slide模式,计算可用宽度
107
+ this.$nextTick(() => {
108
+ this.calculateAvailableWidth();
109
+ });
110
+ }
111
+ },
112
+ // 计算slide导航可用宽度
113
+ calculateAvailableWidth() {
114
+ if (!this.systemInfo) {
115
+ return;
116
+ }
117
+
118
+ try {
119
+ // 获取页面总宽度
120
+ const docWidth = document.getElementById("app")?.getBoundingClientRect().width || window.innerWidth;
121
+ // 获取各个组件的宽度
122
+ const triggerBoxWidth = this.getTriggerBoxWidth();
123
+ const logoBoxWidth = this.getLogoBoxWidth();
124
+ const toolsBoxWidth = this.getToolsBoxWidth();
125
+
126
+ let reservedWidth = 1;
127
+ // 预留一些空间给箭头按钮和边距
128
+ if(this.systemInfo.navType == 'slide'){
129
+ reservedWidth = 150;
130
+ }
131
+
132
+ // 计算可用宽度
133
+ this.availableWidth = docWidth - triggerBoxWidth - logoBoxWidth - toolsBoxWidth - reservedWidth;
134
+
135
+ // 确保最小宽度
136
+ this.availableWidth = Math.max(this.availableWidth, 200);
137
+
138
+ } catch (error) {
139
+ console.warn('Error calculating available width:', error);
140
+ this.availableWidth = 800; // 默认值
141
+ }
142
+ },
143
+
144
+ // 获取trigger组件宽度
145
+ getTriggerBoxWidth() {
146
+ const triggerBox = document.querySelector('.trigger-box');
147
+ return triggerBox ? triggerBox.getBoundingClientRect().width : 0;
148
+ },
149
+
150
+ // 获取logo组件宽度
151
+ getLogoBoxWidth() {
152
+ const logoBox = document.querySelector('.logo-box');
153
+ return logoBox ? logoBox.getBoundingClientRect().width : 0;
154
+ },
155
+
156
+ // 获取tools组件宽度
157
+ getToolsBoxWidth() {
158
+ const toolsBox = document.querySelector('.tools-box');
159
+ return toolsBox ? toolsBox.getBoundingClientRect().width : 0;
160
+ },
161
+
162
+ // 处理窗口大小变化
163
+ handleResize() {
164
+ // 防抖处理
165
+ clearTimeout(this.resizeTimer);
166
+ this.resizeTimer = setTimeout(() => {
167
+ this.calculateAvailableWidth();
168
+ }, 150);
169
+ },
170
+
171
+ // 处理slide组件宽度变化
172
+ handleSlideWidthChange(data) {
173
+ // console.log('Slide width change:', data);
174
+ // 可以在这里处理slide组件宽度变化的逻辑
175
+ }
176
+ },
177
+ mounted() {
178
+ // 组件挂载后计算一次宽度
179
+ this.$nextTick(() => {
180
+ this.calculateAvailableWidth();
181
+ });
182
+ },
183
+ created(){
184
+ this.initListener();
185
+ },
186
+ beforeDestroy(){
187
+ this.destroyListener();
188
+ }
189
+ }
190
+ </script>
191
+
192
+ <style scoped lang="less">
193
+ .pro-layout-header-wrapper{
194
+ width: auto;
195
+ height: 64px;
196
+ .trigger-box{
197
+ float: left;
198
+ height: inherit;
199
+ }
200
+ .logo-box{
201
+ float: left;
202
+ }
203
+ .nav-box{
204
+ float: left;
205
+ }
206
+ .nav-slide-container{
207
+ float: left;
208
+ flex: 1;
209
+ overflow: hidden;
210
+ }
211
+ .slogan-box {
212
+ float: right;
213
+ }
214
+ .tools-box{
215
+ float: right;
216
+ }
217
+ }
218
+ </style>
@@ -0,0 +1,206 @@
1
+ <template>
2
+ <div @click="handleClick">
3
+ <Row class="pro-layout-logo-wrapper" :style="systemInfo.layoutSize === 'default' ? {height:'64px'} :{height:'50px'} " type="flex" align="middle">
4
+ <Col>
5
+ <div class="logo" v-if="systemInfo.systemLogo" :style="logoStyle"></div>
6
+ </Col>
7
+ <Col>
8
+ <div class="divider" v-if="systemInfo.systemLogo"></div>
9
+ </Col>
10
+ <Col>
11
+ <div class="system-name" :style="nameStyle">{{systemName}}</div>
12
+ </Col>
13
+ <Col v-if="'1' === systemInfo.backToHome && 'button' === systemInfo.backToHomeStyle && showBackToHome">
14
+ <Button class="home-btn" shape="circle" icon="ios-home">{{ systemInfo.backToHomeText || '返回工作台' }}</Button>
15
+ </Col>
16
+ </Row>
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
+
24
+ export default {
25
+ name: "pro-layout-logo",
26
+ mixins: [Locale],
27
+ props:{
28
+ routeName: {
29
+ type: String,
30
+ default: ''
31
+ },
32
+ showBackToHome: {
33
+ type: Boolean,
34
+ default: true
35
+ }
36
+ },
37
+ data(){
38
+ return {
39
+ systemInfo: {},
40
+ systemName: this.t('pro-layout.common.systemName'),
41
+ isHovered: false,
42
+ src:''
43
+ }
44
+ },
45
+ computed:{
46
+ logoStyle() {
47
+ let style = '';
48
+ if (this.systemInfo && this.systemInfo.systemLogo) {
49
+ style += `background: url("${this.systemInfo.systemLogo}") no-repeat; background-size: 100% 100%;background-position:center;`;
50
+ // 如果 systemInfo.logoWidth 存在且不为空,则添加到样式
51
+ if (this.systemInfo.logoWidth && this.systemInfo.logoWidth !== '') {
52
+ style += `width: ${this.systemInfo.logoWidth}px;`;
53
+ }
54
+ // 如果 systemInfo.logoTop 存在且不为空,则添加到样式
55
+ // if (this.systemInfo.logoTop && this.systemInfo.logoTop !== '') {
56
+ // style += `margin-top: ${this.systemInfo.logoTop}px;`;
57
+ // }
58
+ style += `text-align-last: justify;`
59
+ }
60
+ return style;
61
+ },
62
+ backStyle() {
63
+ let style = '';
64
+ if (this.systemInfo && this.systemInfo.nameSize) {
65
+ const lines = this.systemInfo.nameSize;
66
+ const maxHeight = lineHeight * lines;
67
+
68
+ const fontSize = Math.max(15 - (lines - 1) * 3, 10);
69
+ const lineHeight = fontSize + 5;
70
+ const width = (this.systemName.length / lines) * fontSize *0.45 + 20;
71
+
72
+ style += `line-height: ${lineHeight}px;`;
73
+ style += `font-size: ${fontSize}px;`;
74
+ style += `max-height: ${maxHeight}px;`;
75
+ if (this.$cookies.get("lambo_lang_code") && this.$cookies.get("lambo_lang_code") == 'zh') {
76
+ style += `width: ${width}px;`;
77
+ }
78
+ style += `overflow: hidden;`;
79
+ style += `word-wrap: break-word;`;
80
+ style += `white-space: normal;`;
81
+ style += `text-align-last: justify;`;
82
+ style += `text-align: justify;`;
83
+
84
+ // 添加按钮基础样式
85
+ style += 'cursor: pointer;';
86
+ style += 'border: none;';
87
+ style += 'outline: none;';
88
+ style += 'transition: all 0.3s ease;';
89
+ style += 'background: transparent;';
90
+ style += 'display: flex;';
91
+ style += 'align-items: center;';
92
+ }
93
+ return style;
94
+ },
95
+
96
+ nameStyle() {
97
+ let style = '';
98
+ if (this.systemInfo && this.systemInfo.nameSize) {
99
+ const lines = this.systemInfo.nameSize; // 行数
100
+ const maxHeight = lineHeight * lines; // 计算最大高度
101
+
102
+ // 根据nameSize设置margin-top
103
+ // if (lines == 1) {
104
+ // style += `margin-top: 12px;`;
105
+ // } else if (lines == 2) {
106
+ // style += `margin-top: 5px; `;
107
+ // }
108
+
109
+ // 动态计算字体大小
110
+ const fontSize = Math.max(20 - (lines - 1) * 4, 15); // 字体大小递减
111
+ const lineHeight = fontSize + 5; // 固定行高
112
+ const width = (this.systemName.length / lines) * fontSize + 20;
113
+
114
+ // 组装样式字符串
115
+ style += `line-height: ${lineHeight}px;`;
116
+ style += `font-size: ${fontSize}px;`;
117
+ style += `max-height: ${maxHeight}px;`; // 设置最大高度限制行数
118
+ if (this.$cookies.get("lambo_lang_code") && this.$cookies.get("lambo_lang_code") == 'zh') {
119
+ style += `width: ${width}px;`; // 设置宽度
120
+ }
121
+ style += `overflow: hidden;`; // 超出部分隐藏
122
+ style += `word-wrap: break-word;`; // 允许单词内换行
123
+ style += `white-space: normal;`; // 默认的换行方式
124
+ style += `text-align-last: justify;`;
125
+ style += `text-align: justify;`;
126
+ }
127
+ return style;
128
+ }
129
+
130
+ },
131
+ methods: {
132
+ handleClick(){
133
+ Bus.$emit('click-logo')
134
+ },
135
+ initListener(){
136
+ Bus.$on('system-info',(data)=>{
137
+ this.initSystem(data)
138
+ });
139
+ },
140
+ destroyListener(){
141
+ Bus.$off('system-info')
142
+ },
143
+ initSystem(data){
144
+ if (data) {
145
+ this.systemInfo = data;
146
+ if (data.systemName) {
147
+ this.systemName = data.systemName;
148
+ }
149
+ }
150
+ },
151
+
152
+ },
153
+ created(){
154
+ this.initListener();
155
+ },
156
+ beforeDestroy(){
157
+ this.destroyListener();
158
+ }
159
+ }
160
+ </script>
161
+
162
+ <style scoped lang="less">
163
+ @import "@lambo-design/core/src/styles/default";
164
+ .pro-layout-logo-wrapper{
165
+ overflow: hidden;
166
+ cursor:pointer;
167
+ .logo{
168
+ width: 210px;
169
+ height: 40px;
170
+ background: url("../../../styles/images/inspur.png") no-repeat;
171
+ background-size: 100% 100%;
172
+ background-position: center; /* 图片在背景区域内居中显示 */
173
+ //float: left;
174
+ //margin-top: 20px;
175
+ }
176
+ .divider{
177
+ height: 33px;
178
+ width: 2px;
179
+ border-right: 2px dashed fade(@_black,30%);
180
+ //float: left;
181
+ margin: 0 12px 0 14px;
182
+ }
183
+ .system-name{
184
+ //float: left;
185
+ font-weight: bold;
186
+ font-size: 20px;
187
+ margin-right: 15px;
188
+
189
+ }
190
+ .home-btn {
191
+ cursor: pointer;
192
+ border: none;
193
+ outline: none;
194
+ color: var(--primary-color,@_primary-color) !important;
195
+ background: #FFFFFF !important;
196
+ padding: 8px 14px;
197
+ display: flex;
198
+ align-items: center;
199
+ opacity: 0.9;
200
+ transition: opacity 0.3s ease;
201
+ &:hover {
202
+ opacity: 1;
203
+ }
204
+ }
205
+ }
206
+ </style>