zydx-plus 1.36.645 → 1.36.646
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,28 +1,37 @@
|
|
|
1
|
+
/** 可拖拽弹窗组件 - 支持拖拽移动、调整大小、全屏、最小化、关闭等功能 */
|
|
1
2
|
<template>
|
|
2
|
-
|
|
3
|
+
<!-- 弹窗主体,支持过渡动画和阴影效果 -->
|
|
4
|
+
<div class="drag-pop" :class="{trans: transAll, 'drag-pop-shadow': !fixedStart}" :style="position" :id="id" @mousedown.stop="dragTap">
|
|
5
|
+
<!-- 标题栏区域,可拖拽移动 -->
|
|
3
6
|
<div v-show="!fixedStart" class="drag-head" :style="{'background-color':titleColor}" @click="selectedDrag">
|
|
4
7
|
<span class="title" :id="'draggable' + id">
|
|
8
|
+
<!-- 标题插槽 -->
|
|
5
9
|
<slot name="title">
|
|
6
10
|
<div v-html="title" style="width: 100%" :style="{'text-align': title === ''? 'center':'left'}"></div>
|
|
7
11
|
</slot>
|
|
8
12
|
</span>
|
|
13
|
+
<!-- 操作按钮区域 -->
|
|
9
14
|
<div class="drag-i">
|
|
10
|
-
<i class="share" v-if="share" @click.stop="shareTap"></i>
|
|
11
|
-
<i class="minimize-cir" v-if="minimizeCir" @click.stop="minimizeTap"></i>
|
|
12
|
-
<i class="minimize" v-if="minimize" @click.stop="minimizeTap"></i>
|
|
13
|
-
<slot name="icon"></slot>
|
|
14
|
-
<i class="disconnect" v-if="disconnectShow" @click.stop="disconnect"></i>
|
|
15
|
-
<i class="enlarge" v-if="enlargeShow" @click.stop="enlarge"></i>
|
|
16
|
-
<i v-if="closeShow" @click.stop="close"></i>
|
|
15
|
+
<i class="share" v-if="share" @click.stop="shareTap"></i> <!-- 分享按钮 -->
|
|
16
|
+
<i class="minimize-cir" v-if="minimizeCir" @click.stop="minimizeTap"></i> <!-- 最小化圆形按钮 -->
|
|
17
|
+
<i class="minimize" v-if="minimize" @click.stop="minimizeTap"></i> <!-- 最小化按钮 -->
|
|
18
|
+
<slot name="icon"></slot> <!-- 自定义图标插槽 -->
|
|
19
|
+
<i class="disconnect" v-if="disconnectShow" @click.stop="disconnect"></i> <!-- 断开连接按钮 -->
|
|
20
|
+
<i class="enlarge" v-if="enlargeShow" @click.stop="enlarge"></i> <!-- 全屏按钮 -->
|
|
21
|
+
<i v-if="closeShow" @click.stop="close"></i> <!-- 关闭按钮 -->
|
|
17
22
|
</div>
|
|
18
23
|
</div>
|
|
24
|
+
<!-- 内容区域 -->
|
|
19
25
|
<div :class="{'drag-cont2': fixedStart,'drag-conts': true}">
|
|
20
26
|
<div class="drag-cont-slot" :class="{'zIndexSlot': footIsMove}">
|
|
27
|
+
<!-- 拖拽时遮罩层,防止拖拽事件穿透到内容区 -->
|
|
21
28
|
<div class="zIndexSlot" v-if="footIsMove || draggableMove"></div>
|
|
22
|
-
<slot name="content"></slot>
|
|
29
|
+
<slot name="content"></slot> <!-- 内容插槽 -->
|
|
23
30
|
</div>
|
|
31
|
+
<!-- 底部调整大小手柄区域 -->
|
|
24
32
|
<div v-show="!fixedStart&&!autoHeight">
|
|
25
33
|
<!-- <i :class="{'drag-down2':!(dragStatus&&dragTextShow&&!fixedStart&&!autoHeight)}" class="drag-down" v-if="dragStatus" @mousedown.stop="footDown($event,'d')" @mouseup.stop="footUp"></i>-->
|
|
34
|
+
<!-- 对角线调整大小手柄 -->
|
|
26
35
|
<i :class="{'drag-in2':!(dragStatus&&dragTextShow&&!fixedStart&&!autoHeight)}" class="drag-in" v-if="dragStatus" @mousedown.stop="footDown($event,'in')" @mouseup.stop="footUp"></i>
|
|
27
36
|
<!-- <i :class="{'drag-right2':!(dragStatus&&dragTextShow&&!fixedStart&&!autoHeight)}" class="drag-right" v-if="dragStatus" @mousedown.stop="footDown($event,'r')" @mouseup.stop="footUp"></i>-->
|
|
28
37
|
</div>
|
|
@@ -55,93 +64,93 @@ export default {
|
|
|
55
64
|
footIsMove: false,//是否移动标识
|
|
56
65
|
direction: '',//移动方向
|
|
57
66
|
id: '',//id
|
|
58
|
-
state: false
|
|
67
|
+
state: false,//是否全屏显示
|
|
59
68
|
clientWidth: 0,
|
|
60
69
|
clientHeight: 0,
|
|
61
|
-
transAll: false,
|
|
62
|
-
fixedStart: false,
|
|
63
|
-
initWidth: 1280,
|
|
64
|
-
draggableState: null,
|
|
65
|
-
draggableMove: false,
|
|
66
|
-
zIndex: 10000
|
|
70
|
+
transAll: false, // 是否启用过渡动画
|
|
71
|
+
fixedStart: false, // 是否固定定位模式
|
|
72
|
+
initWidth: 1280, // 初始宽度基准值
|
|
73
|
+
draggableState: null, // interactjs拖拽实例
|
|
74
|
+
draggableMove: false, // 是否正在拖拽移动
|
|
75
|
+
zIndex: 10000 // 层级
|
|
67
76
|
}
|
|
68
77
|
},
|
|
69
78
|
props: {
|
|
70
|
-
isInitShowBottomRight: {
|
|
79
|
+
isInitShowBottomRight: { // 是否初始化时显示在右下角
|
|
71
80
|
type: Boolean,
|
|
72
81
|
default: false
|
|
73
82
|
},
|
|
74
|
-
width: {
|
|
83
|
+
width: { // 弹窗宽度
|
|
75
84
|
type: Number,
|
|
76
85
|
default: 600
|
|
77
86
|
},
|
|
78
|
-
height: {
|
|
87
|
+
height: { // 弹窗高度
|
|
79
88
|
type: Number,
|
|
80
89
|
default: 400
|
|
81
90
|
},
|
|
82
|
-
fixed: {
|
|
91
|
+
fixed: { // 是否固定定位
|
|
83
92
|
type: Boolean,
|
|
84
93
|
default: false
|
|
85
94
|
},
|
|
86
|
-
left: {
|
|
95
|
+
left: { // 左侧偏移量
|
|
87
96
|
type: Number,
|
|
88
97
|
default: 0
|
|
89
98
|
},
|
|
90
|
-
top: {
|
|
99
|
+
top: { // 顶部偏移量
|
|
91
100
|
type: Number,
|
|
92
101
|
default: 0
|
|
93
102
|
},
|
|
94
|
-
titleColor: {
|
|
103
|
+
titleColor: { // 标题栏背景颜色
|
|
95
104
|
type: String,
|
|
96
105
|
default: 'rgba(75, 12, 119, 1)'
|
|
97
106
|
},
|
|
98
107
|
// 修改拖拽弹窗默认高度,不需要下面30px
|
|
99
|
-
dragStatus: {
|
|
108
|
+
dragStatus: { // 是否显示调整大小手柄
|
|
100
109
|
type: Boolean,
|
|
101
110
|
default: true
|
|
102
111
|
},
|
|
103
|
-
enlargeShow: {
|
|
112
|
+
enlargeShow: { // 是否显示全屏按钮
|
|
104
113
|
type: Boolean,
|
|
105
114
|
default: true
|
|
106
115
|
},
|
|
107
|
-
disconnectShow: {
|
|
116
|
+
disconnectShow: { // 是否显示断开连接按钮
|
|
108
117
|
type: Boolean,
|
|
109
118
|
default: false
|
|
110
119
|
},
|
|
111
|
-
title: {
|
|
120
|
+
title: { // 弹窗标题
|
|
112
121
|
type: String,
|
|
113
122
|
default: ''
|
|
114
123
|
},
|
|
115
124
|
// 修改拖拽弹窗默认高度,不需要下面30px
|
|
116
|
-
dragTextShow: {
|
|
125
|
+
dragTextShow: { // 是否显示底部拖拽文字
|
|
117
126
|
type: Boolean,
|
|
118
127
|
default: false
|
|
119
128
|
},
|
|
120
|
-
minimize: {
|
|
129
|
+
minimize: { // 是否显示最小化按钮(方形)
|
|
121
130
|
type: Boolean,
|
|
122
131
|
default: false
|
|
123
132
|
},
|
|
124
|
-
minimizeCir: {
|
|
133
|
+
minimizeCir: { // 是否显示最小化按钮(圆形)
|
|
125
134
|
type: Boolean,
|
|
126
135
|
default: true
|
|
127
136
|
},
|
|
128
|
-
minWidth: {
|
|
137
|
+
minWidth: { // 弹窗最小宽度
|
|
129
138
|
type: Number,
|
|
130
139
|
default: 300
|
|
131
140
|
},
|
|
132
|
-
minHeight: {
|
|
141
|
+
minHeight: { // 弹窗最小高度
|
|
133
142
|
type: Number,
|
|
134
143
|
default: 200
|
|
135
144
|
},
|
|
136
|
-
closeShow: {
|
|
145
|
+
closeShow: { // 是否显示关闭按钮
|
|
137
146
|
type: Boolean,
|
|
138
147
|
default: true
|
|
139
148
|
},
|
|
140
|
-
autoHeight: {
|
|
149
|
+
autoHeight: { // 是否自适应高度
|
|
141
150
|
type: Boolean,
|
|
142
151
|
default: false
|
|
143
152
|
},
|
|
144
|
-
share: {
|
|
153
|
+
share: { // 是否显示分享按钮
|
|
145
154
|
type: Boolean,
|
|
146
155
|
default: false
|
|
147
156
|
}
|
|
@@ -223,6 +232,7 @@ export default {
|
|
|
223
232
|
this.dragTap()
|
|
224
233
|
},
|
|
225
234
|
computed: {
|
|
235
|
+
// 计算弹窗的定位样式
|
|
226
236
|
position() {
|
|
227
237
|
if(this.autoHeight) {
|
|
228
238
|
return `top:${this.y}px;left:${this.x}px;width:${this.footRightOffset}px;min-height:${this.footDownOffset}px;z-index:${this.zIndex}`;
|
|
@@ -233,6 +243,7 @@ export default {
|
|
|
233
243
|
},
|
|
234
244
|
emits: ['dragStatus', 'close', 'enlarge','updateDrag','minimize','dragMouseup', 'share'],
|
|
235
245
|
methods: {
|
|
246
|
+
// 全屏状态变化处理
|
|
236
247
|
handleFullScreenChange() {
|
|
237
248
|
if (!document.fullscreenElement) {
|
|
238
249
|
this.reducePop()
|
|
@@ -270,6 +281,7 @@ export default {
|
|
|
270
281
|
}
|
|
271
282
|
this.state = false
|
|
272
283
|
},
|
|
284
|
+
// 点击弹窗置顶,管理多个弹窗的z-index
|
|
273
285
|
dragTap() {
|
|
274
286
|
let pop = JSON.parse(sessionStorage.getItem('pop'))
|
|
275
287
|
for(let i = 0; i< pop.length; i++) {
|
|
@@ -284,6 +296,7 @@ export default {
|
|
|
284
296
|
}
|
|
285
297
|
sessionStorage.setItem('pop', JSON.stringify(pop))
|
|
286
298
|
},
|
|
299
|
+
// 清理sessionStorage中的弹窗记录
|
|
287
300
|
clean() {
|
|
288
301
|
let pop = JSON.parse(sessionStorage.getItem('pop'))
|
|
289
302
|
pop.forEach((x,i) => {
|
|
@@ -293,9 +306,11 @@ export default {
|
|
|
293
306
|
})
|
|
294
307
|
sessionStorage.setItem('pop', JSON.stringify(pop))
|
|
295
308
|
},
|
|
309
|
+
// 断开连接事件
|
|
296
310
|
disconnect() {
|
|
297
311
|
this.$emit('dragStatus')
|
|
298
312
|
},
|
|
313
|
+
// 初始化弹窗位置和拖拽功能
|
|
299
314
|
init() {
|
|
300
315
|
const that = this
|
|
301
316
|
if(this.fixedStart) {
|
|
@@ -350,6 +365,7 @@ export default {
|
|
|
350
365
|
})
|
|
351
366
|
},0)
|
|
352
367
|
},
|
|
368
|
+
// 设置弹窗宽高并启用过渡动画
|
|
353
369
|
getWH(v) {
|
|
354
370
|
this.transAll = true
|
|
355
371
|
this.footRightOffset = v.width
|
|
@@ -358,12 +374,14 @@ export default {
|
|
|
358
374
|
this.transAll = false
|
|
359
375
|
},300)
|
|
360
376
|
},
|
|
377
|
+
// 底部调整大小手柄按下
|
|
361
378
|
footDown(event, v) {
|
|
362
379
|
event.preventDefault()
|
|
363
380
|
this.direction = v
|
|
364
381
|
this.footIsMove = true;
|
|
365
382
|
this.dragTap()
|
|
366
383
|
},
|
|
384
|
+
// 底部调整大小手柄移动,根据方向调整宽高
|
|
367
385
|
footMove(event) {
|
|
368
386
|
event.preventDefault()
|
|
369
387
|
if (this.state) return;
|
|
@@ -389,6 +407,7 @@ export default {
|
|
|
389
407
|
top: this.y
|
|
390
408
|
})
|
|
391
409
|
},
|
|
410
|
+
// 底部调整大小手柄抬起,触发拖拽结束事件
|
|
392
411
|
footUp() {
|
|
393
412
|
this.$emit('dragMouseup', {
|
|
394
413
|
width: this.footRightOffset,
|
|
@@ -396,6 +415,7 @@ export default {
|
|
|
396
415
|
})
|
|
397
416
|
this.footIsMove = false;
|
|
398
417
|
},
|
|
418
|
+
// 还原弹窗到默认大小和居中位置
|
|
399
419
|
reducePop() {
|
|
400
420
|
setTimeout(() => {
|
|
401
421
|
this.x = document.documentElement.clientWidth / 2 - this.width / 2;
|
|
@@ -412,6 +432,7 @@ export default {
|
|
|
412
432
|
})
|
|
413
433
|
},100)
|
|
414
434
|
},
|
|
435
|
+
// 切换全屏/还原
|
|
415
436
|
enlarge() {
|
|
416
437
|
if(this.state) {
|
|
417
438
|
this.exitFullscreen()
|
|
@@ -433,21 +454,25 @@ export default {
|
|
|
433
454
|
}
|
|
434
455
|
this.$emit('enlarge', this.state)
|
|
435
456
|
},
|
|
457
|
+
// 最小化按钮点击
|
|
436
458
|
minimizeTap() {
|
|
437
459
|
this.isMove = false
|
|
438
460
|
this.footIsMove = false
|
|
439
461
|
if(this.state) this.exitFullscreen()
|
|
440
462
|
this.$emit('minimize');
|
|
441
463
|
},
|
|
464
|
+
// 分享按钮点击
|
|
442
465
|
shareTap() {
|
|
443
466
|
this.$emit('share');
|
|
444
467
|
},
|
|
468
|
+
// 关闭按钮点击
|
|
445
469
|
close() {
|
|
446
470
|
this.isMove = false
|
|
447
471
|
this.footIsMove = false
|
|
448
472
|
if(this.state) this.exitFullscreen()
|
|
449
473
|
this.$emit('close');
|
|
450
474
|
},
|
|
475
|
+
// 点击标题栏选中弹窗(置顶)
|
|
451
476
|
selectedDrag(){
|
|
452
477
|
this.$emit('selectedDrag')
|
|
453
478
|
}
|