@netang/quasar 0.1.41 → 0.1.43
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/components/dialog/img-viewer/index.vue +14 -5
- package/components/drawer/index.vue +303 -303
- package/components/field-tree/index.vue +9 -12
- package/components/toolbar/index.vue +138 -136
- package/package.json +1 -1
- package/utils/$search.js +416 -0
- package/utils/$table.js +3 -3
- package/utils/index.js +3 -0
- package/utils/uploader.js +1063 -1059
|
@@ -10,10 +10,7 @@
|
|
|
10
10
|
v-bind="$attrs"
|
|
11
11
|
@hide="onDialogHide"
|
|
12
12
|
>
|
|
13
|
-
<div class="absolute-full">
|
|
14
|
-
|
|
15
|
-
<!-- 遮蔽 -->
|
|
16
|
-
<div class="absolute-full" @click="onDialogCancel" v-if="! noBackdropDismiss"></div>
|
|
13
|
+
<div class="absolute-full" @click.self="onMask">
|
|
17
14
|
|
|
18
15
|
<!-- 关闭 -->
|
|
19
16
|
<q-btn
|
|
@@ -110,6 +107,7 @@
|
|
|
110
107
|
:key="`${item.src}-${i}`"
|
|
111
108
|
:href="item.origin"
|
|
112
109
|
target="_blank"
|
|
110
|
+
class="non-selectable no-outline"
|
|
113
111
|
>
|
|
114
112
|
<img
|
|
115
113
|
:ref="(el) => (imgRefs[i] = el)"
|
|
@@ -289,7 +287,7 @@ export default {
|
|
|
289
287
|
})
|
|
290
288
|
}
|
|
291
289
|
})
|
|
292
|
-
|
|
290
|
+
|
|
293
291
|
return lists
|
|
294
292
|
})
|
|
295
293
|
|
|
@@ -510,6 +508,15 @@ export default {
|
|
|
510
508
|
transform.value.enableTransition = enableTransition
|
|
511
509
|
}
|
|
512
510
|
|
|
511
|
+
/**
|
|
512
|
+
* 点击遮蔽
|
|
513
|
+
*/
|
|
514
|
+
function onMask() {
|
|
515
|
+
if (! props.noBackdropDismiss) {
|
|
516
|
+
onDialogCancel()
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
513
520
|
// ==========【声明周期】=========================================================================================
|
|
514
521
|
|
|
515
522
|
/**
|
|
@@ -572,6 +579,8 @@ export default {
|
|
|
572
579
|
next,
|
|
573
580
|
// 操作
|
|
574
581
|
handleActions,
|
|
582
|
+
// 点击遮蔽
|
|
583
|
+
onMask,
|
|
575
584
|
}
|
|
576
585
|
}
|
|
577
586
|
}
|
|
@@ -1,303 +1,303 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<q-drawer
|
|
3
|
-
v-model="currentModelValue"
|
|
4
|
-
:side="side"
|
|
5
|
-
:breakpoint="breakpoint"
|
|
6
|
-
:width="currentWidth"
|
|
7
|
-
v-bind="$attrs"
|
|
8
|
-
>
|
|
9
|
-
<!-- 插槽 -->
|
|
10
|
-
<slot />
|
|
11
|
-
|
|
12
|
-
<!-- 拖拽手柄 -->
|
|
13
|
-
<div
|
|
14
|
-
class="n-drawer__drag-handle"
|
|
15
|
-
:class="`n-drawer__drag-handle--${side}`"
|
|
16
|
-
v-touch-pan.horizontal.prevent.mouse.preserveCursor="onTouchPan"
|
|
17
|
-
v-if="! $q.platform.is.mobile && drag"
|
|
18
|
-
></div>
|
|
19
|
-
</q-drawer>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script>
|
|
23
|
-
import { ref, inject, nextTick, watch } from 'vue'
|
|
24
|
-
import { useQuasar } from 'quasar'
|
|
25
|
-
|
|
26
|
-
import $n_isNil from 'lodash/isNil'
|
|
27
|
-
|
|
28
|
-
import $n_router from '@netang/utils/vue/router'
|
|
29
|
-
|
|
30
|
-
import $n_storage from '@netang/utils/storage'
|
|
31
|
-
import $n_sleep from '@netang/utils/sleep'
|
|
32
|
-
import $n_percentValue from '@netang/utils/percentValue'
|
|
33
|
-
import $n_pxValue from '@netang/utils/pxValue'
|
|
34
|
-
|
|
35
|
-
import { layoutKey, emptyRenderFn } from 'quasar/src/utils/private/symbols.js'
|
|
36
|
-
|
|
37
|
-
import { NPowerKey } from '../../utils/symbols'
|
|
38
|
-
|
|
39
|
-
export default {
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* 标识
|
|
43
|
-
*/
|
|
44
|
-
name: 'NDrawer',
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* 声明属性
|
|
48
|
-
*/
|
|
49
|
-
props: {
|
|
50
|
-
// 值
|
|
51
|
-
modelValue: Boolean,
|
|
52
|
-
// 位置
|
|
53
|
-
side: {
|
|
54
|
-
type: String,
|
|
55
|
-
default: 'left',
|
|
56
|
-
validator: v => [ 'left', 'right' ].includes(v)
|
|
57
|
-
},
|
|
58
|
-
// 宽度
|
|
59
|
-
width: {
|
|
60
|
-
type: Number,
|
|
61
|
-
default: 300
|
|
62
|
-
},
|
|
63
|
-
breakpoint: {
|
|
64
|
-
type: Number,
|
|
65
|
-
default: 1000,
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
// 【自定义属性】
|
|
69
|
-
// --------------------------------------------------
|
|
70
|
-
// 手机端宽度(px / %)
|
|
71
|
-
mobileWidth: {
|
|
72
|
-
type: [String, Number],
|
|
73
|
-
default: '80%',
|
|
74
|
-
},
|
|
75
|
-
// 最小宽度
|
|
76
|
-
minWidth: {
|
|
77
|
-
type: Number,
|
|
78
|
-
default: 100,
|
|
79
|
-
},
|
|
80
|
-
// 最大宽度
|
|
81
|
-
maxWidth: Number,
|
|
82
|
-
// 是否可拖拽
|
|
83
|
-
drag: Boolean,
|
|
84
|
-
// 是否拖拽折叠
|
|
85
|
-
// dragCollapse: Boolean,
|
|
86
|
-
// 折叠宽度
|
|
87
|
-
// collapseWidth: {
|
|
88
|
-
// type: Number,
|
|
89
|
-
// default: 80,
|
|
90
|
-
// },
|
|
91
|
-
// 缓存名
|
|
92
|
-
cache: [Boolean, String],
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* 声明事件
|
|
97
|
-
*/
|
|
98
|
-
emits: [
|
|
99
|
-
'update:modelValue',
|
|
100
|
-
],
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* 组合式
|
|
104
|
-
*/
|
|
105
|
-
setup(props, { emit }) {
|
|
106
|
-
|
|
107
|
-
// ==========【数据】============================================================================================
|
|
108
|
-
|
|
109
|
-
// 获取 quasar 注入
|
|
110
|
-
const $quasarLayout = inject(layoutKey, emptyRenderFn)
|
|
111
|
-
if ($quasarLayout === emptyRenderFn) {
|
|
112
|
-
console.error('NDrawer needs to be child of QLayout')
|
|
113
|
-
return emptyRenderFn
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// quasar 对象
|
|
117
|
-
const $q = useQuasar()
|
|
118
|
-
|
|
119
|
-
// 获取权限注入数据
|
|
120
|
-
const $power = inject(NPowerKey)
|
|
121
|
-
|
|
122
|
-
// 是否显示
|
|
123
|
-
let currentModelValue
|
|
124
|
-
if ($power) {
|
|
125
|
-
currentModelValue = $power[`${props.side}Drawer`].modelValue
|
|
126
|
-
if ($q.screen.width < props.breakpoint) {
|
|
127
|
-
currentModelValue.value = false
|
|
128
|
-
emit('update:modelValue', false)
|
|
129
|
-
} else {
|
|
130
|
-
currentModelValue.value = props.modelValue
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
} else {
|
|
134
|
-
currentModelValue = ref(props.modelValue)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// 创建睡眠实例
|
|
138
|
-
const sleep = $n_sleep()
|
|
139
|
-
|
|
140
|
-
// 缓存名
|
|
141
|
-
let cacheName = ''
|
|
142
|
-
|
|
143
|
-
// 获取原始宽度
|
|
144
|
-
let originalWidth = props.width
|
|
145
|
-
|
|
146
|
-
// 如果是手机端
|
|
147
|
-
if ($q.platform.is.mobile) {
|
|
148
|
-
|
|
149
|
-
// 获取手机端百分比值
|
|
150
|
-
let res = $n_percentValue(props.mobileWidth, true)
|
|
151
|
-
|
|
152
|
-
// 如果是百分比值
|
|
153
|
-
if (! $n_isNil(res)) {
|
|
154
|
-
// 原始尺寸 = 屏幕宽度 * 百分比
|
|
155
|
-
if (res) {
|
|
156
|
-
originalWidth = $q.screen.width * res
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
} else {
|
|
160
|
-
// 原始尺寸 = 屏幕宽度像素
|
|
161
|
-
res = $n_pxValue(props.mobileWidth)
|
|
162
|
-
if (res) {
|
|
163
|
-
originalWidth = res
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// 否则如果开启拖拽 && 开启缓存
|
|
168
|
-
} else if (props.drag && props.cache) {
|
|
169
|
-
|
|
170
|
-
// 设置缓存名
|
|
171
|
-
cacheName = `drawer:${props.side}:${props.cache === true ? ($power && $power.routePath ? $power.routePath : $n_router.getRoute('path')) : props.cache}`
|
|
172
|
-
|
|
173
|
-
// 从缓存获取宽度
|
|
174
|
-
const cache = $n_storage.get(cacheName)
|
|
175
|
-
if (cache) {
|
|
176
|
-
originalWidth = cache
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// 当前宽度
|
|
181
|
-
const currentWidth = ref(originalWidth)
|
|
182
|
-
|
|
183
|
-
// 下次 DOM 更新
|
|
184
|
-
nextTick(function() {
|
|
185
|
-
if (currentModelValue.value && $quasarLayout.totalWidth.value < props.breakpoint) {
|
|
186
|
-
currentModelValue.value = false
|
|
187
|
-
}
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
// ==========【监听数据】==========================================================================================
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* 监听声明值
|
|
194
|
-
*/
|
|
195
|
-
watch(()=>props.modelValue, function (val) {
|
|
196
|
-
currentModelValue.value = val
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* 监听当前值
|
|
201
|
-
*/
|
|
202
|
-
watch(currentModelValue, function (val) {
|
|
203
|
-
emit('update:modelValue', val)
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
// ==========【方法】=============================================================================================
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* 拖动事件
|
|
210
|
-
*/
|
|
211
|
-
let initialWidth
|
|
212
|
-
function onTouchPan({ isFirst, offset: { x } }) {
|
|
213
|
-
|
|
214
|
-
// 设置初始宽度
|
|
215
|
-
if (isFirst === true) {
|
|
216
|
-
initialWidth = currentWidth.value
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// 获取拖拽宽度
|
|
220
|
-
let dragWidth = initialWidth + (props.side === 'left' ? + x : - x)
|
|
221
|
-
let newWidth = dragWidth
|
|
222
|
-
|
|
223
|
-
// 如果宽度 < 最小宽度
|
|
224
|
-
if (props.minWidth && newWidth < props.minWidth) {
|
|
225
|
-
newWidth = props.minWidth
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// 如果宽度 > 最大宽度
|
|
229
|
-
if (props.maxWidth && newWidth > props.maxWidth) {
|
|
230
|
-
newWidth = props.maxWidth
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// if (
|
|
234
|
-
// // 如果显示
|
|
235
|
-
// currentModelValue.value
|
|
236
|
-
// // 如果开启折叠
|
|
237
|
-
// && props.dragCollapse
|
|
238
|
-
// // 如果有最小宽度
|
|
239
|
-
// && props.minWidth
|
|
240
|
-
// ) {
|
|
241
|
-
// const collapseWidth = props.collapseWidth < props.minWidth ? props.collapseWidth : props.minWidth - 10
|
|
242
|
-
//
|
|
243
|
-
// // 如果 拖拽宽度 < 折叠宽度
|
|
244
|
-
// if (dragWidth < collapseWidth) {
|
|
245
|
-
// currentModelValue.value = false
|
|
246
|
-
// }
|
|
247
|
-
// }
|
|
248
|
-
|
|
249
|
-
// 设置当前宽度
|
|
250
|
-
currentWidth.value = newWidth
|
|
251
|
-
|
|
252
|
-
// 如果开启缓存
|
|
253
|
-
if (props.drag && props.cache && cacheName) {
|
|
254
|
-
|
|
255
|
-
// 延迟执行
|
|
256
|
-
sleep(500)
|
|
257
|
-
.then(function () {
|
|
258
|
-
// 设置缓存(永久缓存)
|
|
259
|
-
$n_storage.set(cacheName, newWidth, 0)
|
|
260
|
-
})
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// ==========【返回】=============================================================================================
|
|
265
|
-
|
|
266
|
-
return {
|
|
267
|
-
// 是否显示
|
|
268
|
-
currentModelValue,
|
|
269
|
-
// 当前宽度
|
|
270
|
-
currentWidth,
|
|
271
|
-
|
|
272
|
-
// 拖动事件
|
|
273
|
-
onTouchPan,
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
}
|
|
277
|
-
</script>
|
|
278
|
-
|
|
279
|
-
<style lang="scss" scoped>
|
|
280
|
-
.n-drawer {
|
|
281
|
-
// 拖拽手柄
|
|
282
|
-
&__drag-handle {
|
|
283
|
-
position: absolute;
|
|
284
|
-
top: 0;
|
|
285
|
-
bottom: 0;
|
|
286
|
-
width: 10px;
|
|
287
|
-
cursor: e-resize;
|
|
288
|
-
user-select: none;
|
|
289
|
-
z-index: 10;
|
|
290
|
-
right: 0;
|
|
291
|
-
|
|
292
|
-
// 左边侧滑菜单
|
|
293
|
-
&--left {
|
|
294
|
-
right: -5px;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// 右边侧滑菜单
|
|
298
|
-
&--right {
|
|
299
|
-
left: -5px;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<q-drawer
|
|
3
|
+
v-model="currentModelValue"
|
|
4
|
+
:side="side"
|
|
5
|
+
:breakpoint="breakpoint"
|
|
6
|
+
:width="currentWidth"
|
|
7
|
+
v-bind="$attrs"
|
|
8
|
+
>
|
|
9
|
+
<!-- 插槽 -->
|
|
10
|
+
<slot />
|
|
11
|
+
|
|
12
|
+
<!-- 拖拽手柄 -->
|
|
13
|
+
<div
|
|
14
|
+
class="n-drawer__drag-handle"
|
|
15
|
+
:class="`n-drawer__drag-handle--${side}`"
|
|
16
|
+
v-touch-pan.horizontal.prevent.mouse.preserveCursor="onTouchPan"
|
|
17
|
+
v-if="! $q.platform.is.mobile && drag"
|
|
18
|
+
></div>
|
|
19
|
+
</q-drawer>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script>
|
|
23
|
+
import { ref, inject, nextTick, watch } from 'vue'
|
|
24
|
+
import { useQuasar } from 'quasar'
|
|
25
|
+
|
|
26
|
+
import $n_isNil from 'lodash/isNil'
|
|
27
|
+
|
|
28
|
+
import $n_router from '@netang/utils/vue/router'
|
|
29
|
+
|
|
30
|
+
import $n_storage from '@netang/utils/storage'
|
|
31
|
+
import $n_sleep from '@netang/utils/sleep'
|
|
32
|
+
import $n_percentValue from '@netang/utils/percentValue'
|
|
33
|
+
import $n_pxValue from '@netang/utils/pxValue'
|
|
34
|
+
|
|
35
|
+
import { layoutKey, emptyRenderFn } from 'quasar/src/utils/private/symbols.js'
|
|
36
|
+
|
|
37
|
+
import { NPowerKey } from '../../utils/symbols'
|
|
38
|
+
|
|
39
|
+
export default {
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 标识
|
|
43
|
+
*/
|
|
44
|
+
name: 'NDrawer',
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* 声明属性
|
|
48
|
+
*/
|
|
49
|
+
props: {
|
|
50
|
+
// 值
|
|
51
|
+
modelValue: Boolean,
|
|
52
|
+
// 位置
|
|
53
|
+
side: {
|
|
54
|
+
type: String,
|
|
55
|
+
default: 'left',
|
|
56
|
+
validator: v => [ 'left', 'right' ].includes(v)
|
|
57
|
+
},
|
|
58
|
+
// 宽度
|
|
59
|
+
width: {
|
|
60
|
+
type: Number,
|
|
61
|
+
default: 300
|
|
62
|
+
},
|
|
63
|
+
breakpoint: {
|
|
64
|
+
type: Number,
|
|
65
|
+
default: 1000,
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
// 【自定义属性】
|
|
69
|
+
// --------------------------------------------------
|
|
70
|
+
// 手机端宽度(px / %)
|
|
71
|
+
mobileWidth: {
|
|
72
|
+
type: [String, Number],
|
|
73
|
+
default: '80%',
|
|
74
|
+
},
|
|
75
|
+
// 最小宽度
|
|
76
|
+
minWidth: {
|
|
77
|
+
type: Number,
|
|
78
|
+
default: 100,
|
|
79
|
+
},
|
|
80
|
+
// 最大宽度
|
|
81
|
+
maxWidth: Number,
|
|
82
|
+
// 是否可拖拽
|
|
83
|
+
drag: Boolean,
|
|
84
|
+
// 是否拖拽折叠
|
|
85
|
+
// dragCollapse: Boolean,
|
|
86
|
+
// 折叠宽度
|
|
87
|
+
// collapseWidth: {
|
|
88
|
+
// type: Number,
|
|
89
|
+
// default: 80,
|
|
90
|
+
// },
|
|
91
|
+
// 缓存名
|
|
92
|
+
cache: [Boolean, String],
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 声明事件
|
|
97
|
+
*/
|
|
98
|
+
emits: [
|
|
99
|
+
'update:modelValue',
|
|
100
|
+
],
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 组合式
|
|
104
|
+
*/
|
|
105
|
+
setup(props, { emit }) {
|
|
106
|
+
|
|
107
|
+
// ==========【数据】============================================================================================
|
|
108
|
+
|
|
109
|
+
// 获取 quasar 注入
|
|
110
|
+
const $quasarLayout = inject(layoutKey, emptyRenderFn)
|
|
111
|
+
if ($quasarLayout === emptyRenderFn) {
|
|
112
|
+
console.error('NDrawer needs to be child of QLayout')
|
|
113
|
+
return emptyRenderFn
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// quasar 对象
|
|
117
|
+
const $q = useQuasar()
|
|
118
|
+
|
|
119
|
+
// 获取权限注入数据
|
|
120
|
+
const $power = inject(NPowerKey)
|
|
121
|
+
|
|
122
|
+
// 是否显示
|
|
123
|
+
let currentModelValue
|
|
124
|
+
if ($power) {
|
|
125
|
+
currentModelValue = $power[`${props.side}Drawer`].modelValue
|
|
126
|
+
if ($q.screen.width < props.breakpoint) {
|
|
127
|
+
currentModelValue.value = false
|
|
128
|
+
emit('update:modelValue', false)
|
|
129
|
+
} else {
|
|
130
|
+
currentModelValue.value = props.modelValue
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
} else {
|
|
134
|
+
currentModelValue = ref(props.modelValue)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// 创建睡眠实例
|
|
138
|
+
const sleep = $n_sleep()
|
|
139
|
+
|
|
140
|
+
// 缓存名
|
|
141
|
+
let cacheName = ''
|
|
142
|
+
|
|
143
|
+
// 获取原始宽度
|
|
144
|
+
let originalWidth = props.width
|
|
145
|
+
|
|
146
|
+
// 如果是手机端
|
|
147
|
+
if ($q.platform.is.mobile) {
|
|
148
|
+
|
|
149
|
+
// 获取手机端百分比值
|
|
150
|
+
let res = $n_percentValue(props.mobileWidth, true)
|
|
151
|
+
|
|
152
|
+
// 如果是百分比值
|
|
153
|
+
if (! $n_isNil(res)) {
|
|
154
|
+
// 原始尺寸 = 屏幕宽度 * 百分比
|
|
155
|
+
if (res) {
|
|
156
|
+
originalWidth = $q.screen.width * res
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
} else {
|
|
160
|
+
// 原始尺寸 = 屏幕宽度像素
|
|
161
|
+
res = $n_pxValue(props.mobileWidth)
|
|
162
|
+
if (res) {
|
|
163
|
+
originalWidth = res
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 否则如果开启拖拽 && 开启缓存
|
|
168
|
+
} else if (props.drag && props.cache) {
|
|
169
|
+
|
|
170
|
+
// 设置缓存名
|
|
171
|
+
cacheName = `drawer:${props.side}:${props.cache === true ? ($power && $power.routePath ? $power.routePath : $n_router.getRoute('path')) : props.cache}`
|
|
172
|
+
|
|
173
|
+
// 从缓存获取宽度
|
|
174
|
+
const cache = $n_storage.get(cacheName)
|
|
175
|
+
if (cache) {
|
|
176
|
+
originalWidth = cache
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 当前宽度
|
|
181
|
+
const currentWidth = ref(originalWidth)
|
|
182
|
+
|
|
183
|
+
// 下次 DOM 更新
|
|
184
|
+
nextTick(function() {
|
|
185
|
+
if (currentModelValue.value && $quasarLayout.totalWidth.value < props.breakpoint) {
|
|
186
|
+
currentModelValue.value = false
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
// ==========【监听数据】==========================================================================================
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 监听声明值
|
|
194
|
+
*/
|
|
195
|
+
watch(()=>props.modelValue, function (val) {
|
|
196
|
+
currentModelValue.value = val
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* 监听当前值
|
|
201
|
+
*/
|
|
202
|
+
watch(currentModelValue, function (val) {
|
|
203
|
+
emit('update:modelValue', val)
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
// ==========【方法】=============================================================================================
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* 拖动事件
|
|
210
|
+
*/
|
|
211
|
+
let initialWidth
|
|
212
|
+
function onTouchPan({ isFirst, offset: { x } }) {
|
|
213
|
+
|
|
214
|
+
// 设置初始宽度
|
|
215
|
+
if (isFirst === true) {
|
|
216
|
+
initialWidth = currentWidth.value
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// 获取拖拽宽度
|
|
220
|
+
let dragWidth = initialWidth + (props.side === 'left' ? + x : - x)
|
|
221
|
+
let newWidth = dragWidth
|
|
222
|
+
|
|
223
|
+
// 如果宽度 < 最小宽度
|
|
224
|
+
if (props.minWidth && newWidth < props.minWidth) {
|
|
225
|
+
newWidth = props.minWidth
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// 如果宽度 > 最大宽度
|
|
229
|
+
if (props.maxWidth && newWidth > props.maxWidth) {
|
|
230
|
+
newWidth = props.maxWidth
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// if (
|
|
234
|
+
// // 如果显示
|
|
235
|
+
// currentModelValue.value
|
|
236
|
+
// // 如果开启折叠
|
|
237
|
+
// && props.dragCollapse
|
|
238
|
+
// // 如果有最小宽度
|
|
239
|
+
// && props.minWidth
|
|
240
|
+
// ) {
|
|
241
|
+
// const collapseWidth = props.collapseWidth < props.minWidth ? props.collapseWidth : props.minWidth - 10
|
|
242
|
+
//
|
|
243
|
+
// // 如果 拖拽宽度 < 折叠宽度
|
|
244
|
+
// if (dragWidth < collapseWidth) {
|
|
245
|
+
// currentModelValue.value = false
|
|
246
|
+
// }
|
|
247
|
+
// }
|
|
248
|
+
|
|
249
|
+
// 设置当前宽度
|
|
250
|
+
currentWidth.value = newWidth
|
|
251
|
+
|
|
252
|
+
// 如果开启缓存
|
|
253
|
+
if (props.drag && props.cache && cacheName) {
|
|
254
|
+
|
|
255
|
+
// 延迟执行
|
|
256
|
+
sleep(500)
|
|
257
|
+
.then(function () {
|
|
258
|
+
// 设置缓存(永久缓存)
|
|
259
|
+
$n_storage.set(cacheName, newWidth, 0)
|
|
260
|
+
})
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ==========【返回】=============================================================================================
|
|
265
|
+
|
|
266
|
+
return {
|
|
267
|
+
// 是否显示
|
|
268
|
+
currentModelValue,
|
|
269
|
+
// 当前宽度
|
|
270
|
+
currentWidth,
|
|
271
|
+
|
|
272
|
+
// 拖动事件
|
|
273
|
+
onTouchPan,
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
}
|
|
277
|
+
</script>
|
|
278
|
+
|
|
279
|
+
<style lang="scss" scoped>
|
|
280
|
+
.n-drawer {
|
|
281
|
+
// 拖拽手柄
|
|
282
|
+
&__drag-handle {
|
|
283
|
+
position: absolute;
|
|
284
|
+
top: 0;
|
|
285
|
+
bottom: 0;
|
|
286
|
+
width: 10px;
|
|
287
|
+
cursor: e-resize;
|
|
288
|
+
user-select: none;
|
|
289
|
+
z-index: 10;
|
|
290
|
+
right: 0;
|
|
291
|
+
|
|
292
|
+
// 左边侧滑菜单
|
|
293
|
+
&--left {
|
|
294
|
+
right: -5px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// 右边侧滑菜单
|
|
298
|
+
&--right {
|
|
299
|
+
left: -5px;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
</style>
|