@lambo-design/pro-layout 1.0.0-beta.196 → 1.0.0-beta.198

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,17 +1,17 @@
1
- {
2
- "name": "@lambo-design/pro-layout",
3
- "version": "1.0.0-beta.196",
4
- "description": "",
5
- "main": "index.js",
6
- "scripts": {},
7
- "author": "lambo",
8
- "license": "ISC",
9
- "publishConfig": {
10
- "access": "public",
11
- "registry": "https://registry.npmjs.org/"
12
- },
13
- "devDependencies": {
14
- "@lambo-design/core": "workspace:^",
15
- "@lambo-design/shared": "workspace:^"
16
- }
17
- }
1
+ {
2
+ "name": "@lambo-design/pro-layout",
3
+ "version": "1.0.0-beta.198",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "author": "lambo",
7
+ "license": "ISC",
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "registry": "https://registry.npmjs.org/"
11
+ },
12
+ "devDependencies": {
13
+ "@lambo-design/shared": "^1.0.0-beta.109",
14
+ "@lambo-design/core": "^4.7.1-beta.116"
15
+ },
16
+ "scripts": {}
17
+ }
@@ -76,7 +76,7 @@ import ProLayoutSiderCollapsedMenu from './pro-layout-sider-collapsed-menu'
76
76
  import {
77
77
  filterMenuName,
78
78
  filterMenuUri, routeEqual,
79
- tagExists
79
+ tagExists,isOpenBlank
80
80
  } from "@lambo-design/shared/utils/platform";
81
81
  import config from "@lambo-design/shared/config/config";
82
82
  import ajax from "@lambo-design/shared/utils/ajax";
@@ -202,7 +202,7 @@ export default {
202
202
  }
203
203
  let tagList = this.tagList;
204
204
  if (menu && menu.name) {
205
- if (!tagExists(tagList,menu.name)) {
205
+ if (!tagExists(tagList,menu.name) && !isOpenBlank(menu)) {
206
206
  tagList.push(menu);
207
207
  }
208
208
  Bus.$emit('tag-list', tagList, menu.name)
package/src/index.vue CHANGED
@@ -175,7 +175,7 @@ export default {
175
175
 
176
176
  this.menuList.map(item => {
177
177
  // 如果 uri 不以 '/' 开头,添加 '/'
178
- if (item.uri&&!item.uri.startsWith('/')) {
178
+ if (item.uri&&!item.uri.startsWith('/')&&!item.uri.startsWith('http')) {
179
179
  item.uri = '/' + item.uri;
180
180
  }
181
181
  });
@@ -221,7 +221,7 @@ export default {
221
221
  this.$emit('menu-click', name, item)
222
222
  },
223
223
  changeTabs(data,current){
224
- data = data.filter(item => item.name === current);
224
+ // data = data.filter(item => item.name === current);
225
225
  this.$emit('change-tabs',data,current)
226
226
  },
227
227
  openMenuInTabs(menu){
@@ -1,477 +0,0 @@
1
- <template>
2
- <div class="search-fast-con">
3
- <div class="search-fast-con-top" >
4
- <div class="topInput" id="modalTopInput" @click="handleTopClick">
5
- <Input v-if="searchType === 1" v-model="searchTopText" clearable placeholder="搜索菜单" font-size="8px" ref="topInput"
6
- :border="false" @on-change="handleTopInput" @on-blur="handleTopBlur">
7
- <template #prefix>
8
- <Icon type="ios-search" size="23"/>
9
- </template>
10
- </Input>
11
- </div>
12
- <Modal
13
- v-model="searchTopModal" class="search-fast-con-modal" footer-hide :closable="false" :mask="false" scrollable id="TopModalId"
14
- :styles="{top: '55px',width: '350px'}">
15
- <div class="sideCloseIcon" @click="handleCloseTopModal" style="text-align: right;margin-right: -6px;margin-top: -2px;padding-bottom: 3px">
16
- <Icon type="ios-close-circle" size="18" />
17
- </div>
18
- <div class="modal-block1">
19
- <div class="modal-title">
20
- <Icon type="ios-apps-outline" size="19" color="red"/>
21
- <span style="margin-left: 3px;font-size: 18px">菜单</span>
22
- </div>
23
- <div v-if="spinShowTop1">
24
- <Spin size="large" v-if="spinShowTop1" :show="spinShowTop1">
25
- <Icon type="ios-loading" size=18 class="demo-spin-icon-load"></Icon>
26
- <div>加载中</div>
27
- </Spin>
28
- </div>
29
- <div v-else class="modal-content">
30
- <div v-for="(item,index) in menuData1" :key="index" >
31
- <div class="menu-side-style1" @click="handleSelect1(item)" @mouseenter="handleMouseEnter(index)" @mouseleave="handleMouseLeave(index)">
32
- <div :style="getScrollingStyle(item.label)" class="text" :class="{ 'scrolling': isHovered[index] && shouldScroll(item.label) }">
33
- <Icon :type="item.icon" />
34
- <span style="margin-left: 3px">{{ item.label }}</span>
35
- </div>
36
- </div>
37
- </div>
38
- <div v-if="menuData1.length === 0">
39
- <span style="display: flex;justify-content: center;align-items: center;color: black">暂无数据</span>
40
- </div>
41
- </div>
42
- </div>
43
- </Modal>
44
- </div>
45
- </div>
46
- </template>
47
- <script>
48
-
49
- import SearchMenu from "./search-list";
50
- import SearchList from "./search-list";
51
- import Bus from "@lambo-design/shared/utils/bus";
52
- import {deepCopy} from "@lambo-design/shared/utils/assist";
53
- import config from "@lambo-design/shared/config/config";
54
- import { mapActions } from 'vuex'
55
- import { debounce } from 'lodash';
56
- //import {getSessionStorage} from '@/libs/platformUtil';
57
- export default {
58
- name: "Searchmenu",
59
- components: {SearchList, SearchMenu},
60
- props: {
61
- searchType: '',
62
- menuList: {
63
- type: Array,
64
- default: () => []
65
- },
66
- },
67
- data () {
68
- return {
69
- searchText:'',
70
- appId:'',
71
- searchTopText:'',
72
- showTopInput:false,
73
- option: [],
74
- menuData:[],
75
- menuData1:[],
76
- noticeData:[],
77
- isHovered: [],
78
- select:'',
79
- searchTopModal:false,
80
- searchSideModal:false,
81
- showSearchIcon:true,
82
- maxWidth: 190,
83
- spinShow:false,
84
- spinShowTop1:false,
85
- spinShowTop2:false,
86
- originMenuList: [],
87
- originMenuList1: []
88
- }
89
- },
90
- // mounted() {
91
- // window.addEventListener("click", this.handleOutsideClick);
92
- // },
93
- // beforeDestroy() {
94
- // window.removeEventListener("click", this.handleOutsideClick);
95
- // },
96
- methods:{
97
- initListener(){
98
- // Bus.$on('menu-list',(data)=>{
99
- this.initMenu(this.menuList)
100
- // });
101
- },
102
- destroyListener(){
103
- Bus.$off('menu-list')
104
- },
105
- initMenu(data){
106
- this.originMenuList = deepCopy(data);
107
- this.originMenuList1 = this.originMenuList.filter(function(menuItem) {
108
- return menuItem.type === 1|| menuItem.type === 2 && menuItem.uri !=='';
109
- });
110
- this.menuData1=this.originMenuList1;
111
- },
112
-
113
- handleSelect(item){
114
- console.log('search-handleSelect',item.name)
115
- console.log('search-handleSelect',item.uri)
116
- console.log('search-handleSelect',item.pid)
117
- this.$emit('on-select', item.name,item.uri,item.pid)
118
- this.searchSideModal = false
119
- },
120
- handleSelect1(item){
121
- this.$emit('on-select', item.name,item.uri,item.pid)
122
- this.searchTopModal = false
123
- this.showTopInput = false
124
- this.showSearchIcon = true
125
- },
126
- handleNoticeSelect(e,f){
127
- let self = this
128
- self.$router.replace({
129
- name: '消息通知预览',
130
- query: {noticeId: e, confirmed: f,homeFlag:true}
131
- })
132
- self.searchTopModal = false
133
- },
134
-
135
- handleTopInput() {
136
- let self = this;
137
- self.searchTopModal = true
138
- // 使用 filter 方法找到所有匹配的菜单项
139
- const regex = new RegExp(this.searchTopText, "i");
140
- self.menuData1 = self.originMenuList1.filter(menuItem => {
141
- return menuItem.label.match(regex);
142
- });
143
- //console.log('menuData:', self.menuData);
144
- },
145
- handleSideClick(){
146
- let self= this
147
- // console.log('searchText:'+self.searchText)
148
- if(self.searchText){
149
- self.searchSideModal = true
150
- }
151
- self.handleInput()
152
- //self.handleSelect(self.menuData[0])
153
- },
154
- handleIconClick(){
155
- let self = this
156
- self.showTopInput = true
157
- self.showSearchIcon = false
158
- self.searchTopModal = false
159
- },
160
- handleTopClick(){
161
- let self= this
162
- if(self.searchTopText){
163
- self.searchTopModal = true
164
- }
165
- self.handleTopInput()
166
- self.showTopInput=true
167
- //self.handleSelect(self.menuData[0])
168
- },
169
- handleTopBlur(){
170
- let self = this
171
- self.searchTopModal = false
172
- self.showTopInput = true;
173
- self.showSearchIcon = true
174
-
175
- },
176
- handleMouseEnter(index) {
177
- this.$set(this.isHovered, index, true); // 将当前菜单项设置为被悬停状态
178
- },
179
- handleMouseLeave(index) {
180
- this.$set(this.isHovered, index, false); // 将当前菜单项设置为非悬停状态
181
- },
182
- shouldScroll(text) {
183
- const span = document.createElement("span");
184
- span.style.fontSize = "15px"; // 根据实际情况设置字体大小
185
- span.textContent = text;
186
- document.body.appendChild(span);
187
- const shouldScroll = span.offsetWidth > this.maxWidth;
188
- document.body.removeChild(span);
189
- return shouldScroll;
190
- },
191
- getScrollingStyle(text) {
192
- const span = document.createElement("span");
193
- span.style.fontSize = "15px"; // 根据实际情况设置字体大小
194
- span.textContent = text;
195
- document.body.appendChild(span);
196
- let scrollDistance = span.offsetWidth - this.maxWidth;
197
- document.body.removeChild(span);
198
- if (scrollDistance > 0) {
199
- scrollDistance += 15
200
- return {
201
- "--scroll-distance": `-${scrollDistance}px`,
202
- };
203
- }
204
- else{
205
- return{
206
- "--scroll-duration": `0s`,
207
- }
208
- }
209
- },
210
- handleCloseModal(){
211
- let self = this
212
- this.searchSideModal = false
213
- },
214
- handleCloseTopModal(){
215
- let self = this
216
- this.searchTopModal = false
217
- }
218
- },
219
- created(){
220
- this.initListener();
221
- },
222
- beforeDestroy(){
223
- this.destroyListener();
224
- }
225
- }
226
- </script>
227
-
228
- <style lang="less" >
229
- @import "@lambo-design/shared/config/themes/blue/blue.less";
230
- @import "@lambo-design/shared/config/themes/default/default.less";
231
- @import "@lambo-design/shared/config/themes/gold/gold.less";
232
- @import "@lambo-design/shared/config/themes/atrovirens/atrovirens.less";
233
- @import "@lambo-design/shared/config/themes/eap/eap.less";
234
- @import "@lambo-design/shared/config/themes/lime/lime.less";
235
- @import "@lambo-design/shared/config/themes/orange/orange.less";
236
- @import "@lambo-design/shared/config/themes/red/red.less";
237
- .search-fast-con-top .ivu-tooltip-rel {
238
- float: left;
239
- height: 64px;
240
- line-height: 56px;
241
- margin-top: 3px;
242
- margin-right: -1000px;
243
- i {
244
- cursor: pointer;
245
- }
246
- }
247
- .ivu-tooltip-popper[x-placement^="bottom"]{
248
- margin-top: -1000px;
249
- }
250
- .search-fast-con-modal .ivu-modal{
251
- margin-right: 500px;
252
- }
253
- .search-fast-con-side-modal .ivu-modal{
254
- padding-top: 1px;
255
- margin-left: 0px;
256
- margin-top: 1px;
257
- }
258
- .search-fast-con-side-modal .ivu-modal-content{
259
- background-color: var(--menu-dark-active-bg ,@menu-dark-active-bg );
260
- width: 218px;
261
- margin-top: -18px;
262
- height: 270px;
263
- }
264
- .search-fast-con-modal .ivu-modal-content{
265
- width: 290px;
266
- height: 200px;
267
- margin-right: 1px;
268
- }
269
-
270
- .modal-title{
271
- font-family: Microsoft YaHei;
272
- font-weight: 400;
273
- color: #333333;
274
- font-size: 17px;
275
- }
276
- //.line{
277
- // border-top: 1px solid lightgray;
278
- // margin:10px
279
- //}
280
- .more-content{
281
- margin-left: 140px;
282
- margin-top: 15px;
283
- a{font-size:14px;color:#999;font-family: Microsoft YaHei-Regular, Microsoft YaHei;}
284
- }
285
- .search-fast-con-side{
286
- width: 97%;
287
- position: absolute;
288
- top: 0px;
289
- z-index: 2000;
290
- //background: #22262f;
291
- }
292
- .search-fast-con-side .ivu-input{
293
- font-size: 13px;
294
- margin-top: -4px;
295
- width: 228.5px;
296
- height: 40px;
297
- font-family: Microsoft YaHei;
298
- font-weight: 400;
299
- border: none;
300
- background-color: var(--legend-color ,@legend-color);//修改这里
301
- text-align:left; /* 确保文本默认左对齐 */
302
- color: var(--head-bg ,@head-bg );
303
- padding-right: 90px;
304
- padding-left: 50px;
305
- }
306
- .search-fast-con-side-modal .ivu-modal-body .modal1-content {
307
- padding-top: 6px;
308
- padding-left: 10px;
309
- height: 270px;
310
- width: 211px;
311
- margin-left: -13px;
312
- overflow-x: hidden;
313
- overflow-y: auto;
314
- background-color: var(--menu-dark-active-bg ,@menu-dark-active-bg );
315
- }
316
- .search-fast-con-modal .ivu-modal-body{
317
- height: 280px;
318
- padding: 16px;
319
- font-size: var(--font-size-base, 14px);
320
- line-height: 1.5;
321
- margin-top: -2px;
322
- background-color: white;
323
- }
324
- search-fast-con-modal .ivu-modal-body .modal-content {
325
- padding-top: 6px;
326
- height: 270px;
327
- width: 200px;
328
- overflow-x: hidden;
329
- overflow-y: auto;
330
- background-color: white;
331
- }
332
-
333
-
334
- search-fast-con-side-modal .ivu-modal-body{
335
- height: 250px;
336
- padding: 16px;
337
- font-size: var(--font-size-base, 14px);
338
- line-height: 1.5;
339
- margin-top: -2px;
340
- //background-color: white;
341
-
342
- }
343
- .search-fast-con-side .ivu-icon-ios-search:before {
344
- margin-right: -33px; /* 向右移动10像素 */
345
- //color: rgba(42, 97 ,200);
346
- color: var(--head-bg ,@head-bg );
347
- line-height: 1.6
348
- }
349
- .search-fast-con-top .ivu-icon-ios-search-outline:before {
350
- //margin-right: -1000px;
351
- color: rgba(255, 255, 255,0.7);
352
- position: fixed; /* 使用fixed定位 */
353
- right: 180px; /* 设置距离浏览器窗口右侧边缘的距离 */
354
- margin-right: 0;
355
- top:15px;
356
- }
357
- .search-fast-con-top .ivu-icon-ios-search:before {
358
- color: rgba(255, 255, 255,0.7);
359
- }
360
- .search-fast-con-side .ivu-input::placeholder{
361
- font-size: 13px;
362
- font-family: Microsoft YaHei;
363
- font-weight: 400;
364
- // color: rgba(42, 97 ,200)!important;
365
- color: var(--head-bg ,@head-bg ) !important;;
366
-
367
- }
368
- .search-fast-con-top .ivu-input {
369
- font-size: 15px;
370
- font-family: Microsoft YaHei;
371
- font-weight: 400;
372
- color: rgba(255, 255, 255,0.7);
373
- border: none;
374
- background-color: transparent;
375
- }
376
- .search-fast-con-top .ivu-input::placeholder{
377
- font-size: 15px;
378
- font-family: Microsoft YaHei;
379
- font-weight: 400;
380
- color: rgba(255, 255, 255,0.7)!important;
381
- }
382
- //.modal1-content {
383
- // overflow-x: hidden;
384
- // overflow-y: auto;
385
- // height: 270px;
386
- //}
387
- .modal-content {
388
- overflow-x: hidden;
389
- overflow-y: auto;
390
- height: 210px;
391
- background-color: white;
392
- width: 273px;
393
- }
394
- .menu-side-style{
395
- font-size: 15px;
396
- font-family: Microsoft YaHei;
397
- font-weight: 400;
398
- width: 200px;
399
- color:#EBEBEB;
400
- margin-top: 8px;
401
- white-space: nowrap;
402
- text-overflow: ellipsis;
403
- }
404
-
405
- .menu-side-style1{
406
- font-size: 16px;
407
- font-family: Microsoft YaHei;
408
- font-weight: 400;
409
- width: 200px;
410
- color:black;
411
- margin-top: 10px;
412
- white-space: nowrap;
413
- text-overflow: ellipsis;
414
- }
415
-
416
- .menu-side-style:hover {
417
- overflow: visible;
418
- cursor: pointer;
419
- color: red;
420
- }
421
- .menu-side-style1:hover {
422
- overflow: visible;
423
- cursor: pointer;
424
- color: red;
425
- }
426
- .sideInput{
427
- width: 221px;
428
- transform: translateX(-13px);
429
- }
430
- .topInput{
431
- float: right;
432
- position: relative;
433
- z-index: 1000;
434
- width: 1000px;
435
- margin-top: 80px;
436
- margin-left: 4000px;
437
- margin-bottom: 30px;
438
- }
439
- .slide-enter-active,
440
- .slide-leave-active{
441
- transition: transform 0.5s;
442
- }
443
- .slide-enter{
444
- transform: translateX(100%);
445
- }
446
- .slide-leave-to{
447
- transform: translateX(175px);
448
- }
449
- .text {
450
- display: inline-block;
451
- }
452
- .text.scrolling {
453
- animation: scrollText linear infinite;
454
- animation-duration: 2s; /* 调整滚动速度和持续时间 */
455
- }
456
-
457
- @keyframes scrollText {
458
- 0% {
459
- transform: translateX(0);
460
- }
461
- 100% {
462
- transform: translateX(var(--scroll-distance, 0)); /* 调整滚动的距离 */
463
- }
464
- }
465
-
466
- .menu-side-style:hover .text {
467
- animation-play-state: running;
468
- }
469
- .demo-spin-icon-load{
470
- animation: ani-demo-spin 1s linear infinite;
471
- }
472
- @keyframes ani-demo-spin {
473
- from { transform: rotate(0deg);}
474
- 50% { transform: rotate(180deg);}
475
- to { transform: rotate(360deg);}
476
- }
477
- </style>