@netang/quasar 0.0.36 → 0.0.39
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/column-title/index.vue +3 -0
- package/components/data/index.vue +23 -23
- package/components/field-table/index.vue +272 -282
- package/components/field-tree/index.vue +53 -60
- package/components/input-format/index.vue +9 -5
- package/components/input-number/index.vue +8 -6
- package/components/table/index.vue +1 -1
- package/package.json +1 -1
- package/sass/var.scss +141 -0
- package/utils/$table.js +7 -13
- package/utils/price.js +13 -13
|
@@ -79,16 +79,17 @@
|
|
|
79
79
|
no-refocus
|
|
80
80
|
no-focus
|
|
81
81
|
fit
|
|
82
|
-
@focus="
|
|
82
|
+
@focus="onFieldBlur"
|
|
83
83
|
@show="onPopupShow"
|
|
84
|
-
@before-hide="
|
|
84
|
+
@before-hide="showPopup = false"
|
|
85
85
|
v-if="! readonly"
|
|
86
86
|
>
|
|
87
87
|
<!-- 快捷表格 -->
|
|
88
88
|
<q-table
|
|
89
89
|
class="n-table n-field-table__popup-table"
|
|
90
90
|
v-model:pagination="tablePagination"
|
|
91
|
-
|
|
91
|
+
:selected="selected"
|
|
92
|
+
@update:selected="emitModelValue"
|
|
92
93
|
:row-key="tableRowKey"
|
|
93
94
|
:rows="tableRows"
|
|
94
95
|
:columns="columns"
|
|
@@ -147,7 +148,7 @@
|
|
|
147
148
|
width="80%"
|
|
148
149
|
:on-confirm="onDialogConfirm"
|
|
149
150
|
@before-show="onDialogBeforeShow"
|
|
150
|
-
@show="
|
|
151
|
+
@show="tableLoad"
|
|
151
152
|
@hide="onDialogHide"
|
|
152
153
|
cancel
|
|
153
154
|
v-bind="dialogProps"
|
|
@@ -159,7 +160,7 @@
|
|
|
159
160
|
</template>
|
|
160
161
|
|
|
161
162
|
<script>
|
|
162
|
-
import { ref, computed, watch,
|
|
163
|
+
import { ref, computed, watch, onUpdated } from 'vue'
|
|
163
164
|
|
|
164
165
|
export default {
|
|
165
166
|
|
|
@@ -172,18 +173,11 @@ export default {
|
|
|
172
173
|
* 声明属性
|
|
173
174
|
*/
|
|
174
175
|
props: {
|
|
175
|
-
// 值
|
|
176
|
-
modelValue:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
query: Object,
|
|
181
|
-
// 附加请求数据
|
|
182
|
-
data: Object,
|
|
183
|
-
// 已选数据
|
|
184
|
-
selected: Array,
|
|
185
|
-
// 初始时不加载选择数据
|
|
186
|
-
noLoadSelected: Boolean,
|
|
176
|
+
// 值 v-model
|
|
177
|
+
modelValue: {
|
|
178
|
+
type: [ String, Number, Array ],
|
|
179
|
+
required: true,
|
|
180
|
+
},
|
|
187
181
|
// 值字段(必填)
|
|
188
182
|
valueKey: {
|
|
189
183
|
type: String,
|
|
@@ -191,6 +185,28 @@ export default {
|
|
|
191
185
|
},
|
|
192
186
|
// 标签字段
|
|
193
187
|
labelKey: String,
|
|
188
|
+
// 值类型
|
|
189
|
+
// string: 分隔符隔开的字符串
|
|
190
|
+
// array: 数组
|
|
191
|
+
// arrayObject: 数组对象
|
|
192
|
+
valueType: {
|
|
193
|
+
type: String,
|
|
194
|
+
default: 'arrayObject'
|
|
195
|
+
},
|
|
196
|
+
// 值分隔符(值类型为 string 有效)
|
|
197
|
+
valueSeparator: {
|
|
198
|
+
type: String,
|
|
199
|
+
default: ',',
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
// 表格请求路径
|
|
203
|
+
path: String,
|
|
204
|
+
// 表格请求参数
|
|
205
|
+
query: Object,
|
|
206
|
+
// 附加请求数据
|
|
207
|
+
data: Object,
|
|
208
|
+
// 不加载已选数据
|
|
209
|
+
noLoadSelected: Boolean,
|
|
194
210
|
// 格式化显示标签
|
|
195
211
|
formatLabel: Function,
|
|
196
212
|
// 快捷表格显示的字段数组(空为:[值字段, 标签字段])
|
|
@@ -206,8 +222,6 @@ export default {
|
|
|
206
222
|
// 对话框声明属性
|
|
207
223
|
dialogProps: Object,
|
|
208
224
|
|
|
209
|
-
// 值是否为数组
|
|
210
|
-
valueArray: Boolean,
|
|
211
225
|
// 关闭对话框
|
|
212
226
|
noDialog: Boolean,
|
|
213
227
|
|
|
@@ -232,11 +246,6 @@ export default {
|
|
|
232
246
|
type: [ Number, String ],
|
|
233
247
|
default: 500
|
|
234
248
|
},
|
|
235
|
-
// 值分隔符(值为非数组有效)
|
|
236
|
-
valueSeparator: {
|
|
237
|
-
type: String,
|
|
238
|
-
default: ',',
|
|
239
|
-
},
|
|
240
249
|
},
|
|
241
250
|
|
|
242
251
|
/**
|
|
@@ -298,6 +307,7 @@ export default {
|
|
|
298
307
|
|
|
299
308
|
// ==========【数据】============================================================================================
|
|
300
309
|
|
|
310
|
+
|
|
301
311
|
// 创建权限实例
|
|
302
312
|
const $power = utils.$power.create({
|
|
303
313
|
// 路由路径
|
|
@@ -328,7 +338,7 @@ export default {
|
|
|
328
338
|
// 选择类型, 可选值 single multiple none
|
|
329
339
|
selection: props.multiple ? 'multiple' : 'single',
|
|
330
340
|
// 已选数据
|
|
331
|
-
selected:
|
|
341
|
+
selected: [],
|
|
332
342
|
// http 设置
|
|
333
343
|
httpSettings: {
|
|
334
344
|
// 头部请求
|
|
@@ -344,12 +354,6 @@ export default {
|
|
|
344
354
|
// 创建防抖睡眠方法
|
|
345
355
|
const sleep = utils.debounceSleep()
|
|
346
356
|
|
|
347
|
-
// 停止观察值
|
|
348
|
-
let stopValueWatcher = false
|
|
349
|
-
|
|
350
|
-
// 停止观察已选数据
|
|
351
|
-
let stopSelectedWatcher = false
|
|
352
|
-
|
|
353
357
|
// 输入框节点
|
|
354
358
|
const inputRef = ref(null)
|
|
355
359
|
|
|
@@ -365,24 +369,28 @@ export default {
|
|
|
365
369
|
// 是否显示弹出层
|
|
366
370
|
const showPopup = ref(false)
|
|
367
371
|
|
|
368
|
-
// 当前已选数据
|
|
369
|
-
const selected = ref([...$table.tableSelected.value])
|
|
370
|
-
|
|
371
372
|
// 当前表格列数据
|
|
372
373
|
const columns = getQuickTableColumns()
|
|
373
374
|
|
|
374
|
-
//
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
375
|
+
// 停止观察值
|
|
376
|
+
let stopValueWatcher = false
|
|
377
|
+
|
|
378
|
+
// 临时已选数据
|
|
379
|
+
let tempSelected = []
|
|
380
|
+
|
|
381
|
+
// 初始化已选数据
|
|
382
|
+
const selected = ref(valueToSelected(props.modelValue, true, true))
|
|
383
|
+
|
|
384
|
+
// 加载已选数据
|
|
385
|
+
loadSelected()
|
|
386
|
+
.finally()
|
|
379
387
|
|
|
380
388
|
// ==========【监听数据】=========================================================================================
|
|
381
389
|
|
|
382
390
|
/**
|
|
383
391
|
* 监听声明值
|
|
384
392
|
*/
|
|
385
|
-
watch(()=>props.modelValue, async function() {
|
|
393
|
+
watch(() => props.modelValue, async function(val) {
|
|
386
394
|
|
|
387
395
|
// 如果停止观察值
|
|
388
396
|
if (stopValueWatcher === true) {
|
|
@@ -391,102 +399,75 @@ export default {
|
|
|
391
399
|
return
|
|
392
400
|
}
|
|
393
401
|
|
|
394
|
-
//
|
|
395
|
-
let
|
|
402
|
+
// 值转已选数据
|
|
403
|
+
let newSelected = valueToSelected(val, false, false)
|
|
396
404
|
|
|
397
|
-
//
|
|
398
|
-
if (
|
|
405
|
+
// 如果值类型是数组对象
|
|
406
|
+
if (props.valueType === 'arrayObject') {
|
|
399
407
|
|
|
400
|
-
//
|
|
401
|
-
|
|
408
|
+
// 设置已选数据
|
|
409
|
+
setSelected(newSelected)
|
|
402
410
|
|
|
403
|
-
|
|
404
|
-
const selectedValues = utils.isValidArray(selected.value)
|
|
405
|
-
// 如果有已选数据
|
|
406
|
-
? _.uniq(selected.value.map(e => e[props.valueKey]))
|
|
407
|
-
// 否则为空
|
|
408
|
-
: []
|
|
409
|
-
|
|
410
|
-
// 需增删除的值
|
|
411
|
-
const removeValues = selectedValues.filter(e => values.indexOf(e) === -1)
|
|
412
|
-
if (removeValues.length) {
|
|
413
|
-
utils.forEachRight(selected.value, function (item, index) {
|
|
414
|
-
if (removeValues.indexOf(item[props.valueKey]) > -1) {
|
|
415
|
-
selected.value.splice(index, 1)
|
|
416
|
-
}
|
|
417
|
-
})
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// 需增加的值
|
|
421
|
-
const addValues = values.filter(e => selectedValues.indexOf(e) === -1)
|
|
422
|
-
if (addValues.length) {
|
|
423
|
-
// 请求选择数据
|
|
424
|
-
selected.value.push(...await onRequestSelected(addValues))
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
// 否则
|
|
411
|
+
// 否则值类型是字符串或数组
|
|
428
412
|
} else {
|
|
429
|
-
// 清空已选数据
|
|
430
|
-
selected.value = []
|
|
431
|
-
}
|
|
432
413
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
})
|
|
414
|
+
// 初始已选数据
|
|
415
|
+
let _selected = []
|
|
436
416
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
*/
|
|
440
|
-
watch(()=>props.selected, function(val) {
|
|
417
|
+
// 如果值转已选数据是有效数组
|
|
418
|
+
if (newSelected.length) {
|
|
441
419
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
// 取消停止观察已选数据
|
|
445
|
-
stopSelectedWatcher = false
|
|
446
|
-
return
|
|
447
|
-
}
|
|
420
|
+
// 当前已选数据
|
|
421
|
+
const currentSelected = tempSelected.length ? tempSelected : selected.value
|
|
448
422
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
selected.value = val
|
|
452
|
-
}
|
|
423
|
+
// 如果有已选数据
|
|
424
|
+
if (currentSelected.length) {
|
|
453
425
|
|
|
454
|
-
|
|
455
|
-
|
|
426
|
+
// 新已选数据
|
|
427
|
+
_selected = currentSelected.filter(e => newSelected.indexOf(e[props.valueKey]) > -1)
|
|
456
428
|
|
|
457
|
-
|
|
458
|
-
|
|
429
|
+
// 需增加的值
|
|
430
|
+
newSelected = newSelected.filter(e => _selected.map(e => e[props.valueKey]).indexOf(e) === -1)
|
|
431
|
+
}
|
|
459
432
|
|
|
460
|
-
|
|
461
|
-
|
|
433
|
+
// 需增加的值
|
|
434
|
+
if (newSelected.length) {
|
|
462
435
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
436
|
+
// 如果不加载已选数据
|
|
437
|
+
if (props.noLoadSelected) {
|
|
438
|
+
// 请求选择数据
|
|
439
|
+
_selected.push(...newSelected.map(e => setSelectedItem(e)))
|
|
440
|
+
} else {
|
|
441
|
+
// 请求选择数据
|
|
442
|
+
_selected.push(...await onRequestSelected(newSelected))
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
467
446
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
*/
|
|
471
|
-
watch(selected, function(val) {
|
|
447
|
+
// 设置已选数据
|
|
448
|
+
setSelected(_selected)
|
|
472
449
|
|
|
473
|
-
|
|
450
|
+
// 清空临时已选数据
|
|
451
|
+
tempSelected = []
|
|
452
|
+
}
|
|
474
453
|
|
|
475
|
-
|
|
476
|
-
|
|
454
|
+
// 将已选数据转为值
|
|
455
|
+
const _value = selectedToValue(selected.value)
|
|
477
456
|
|
|
478
|
-
|
|
479
|
-
|
|
457
|
+
// 如果声明值发生变化
|
|
458
|
+
if (_value !== props.modelValue) {
|
|
459
|
+
// 停止观察值
|
|
460
|
+
stopValueWatcher = true
|
|
461
|
+
// 触发更新已选数据
|
|
462
|
+
emit('update:modelValue', _value)
|
|
480
463
|
}
|
|
481
464
|
|
|
482
|
-
// 检查值更新
|
|
483
|
-
checkModelValueChange()
|
|
484
|
-
|
|
485
465
|
// 设置输入框焦点
|
|
486
466
|
setInputFocus()
|
|
487
467
|
|
|
488
468
|
// 设置输入框文字选中
|
|
489
469
|
setInputSelection()
|
|
470
|
+
|
|
490
471
|
}, {
|
|
491
472
|
// 深度监听
|
|
492
473
|
deep: true,
|
|
@@ -497,32 +478,26 @@ export default {
|
|
|
497
478
|
*/
|
|
498
479
|
watch(inputValue, async function (val) {
|
|
499
480
|
|
|
500
|
-
//
|
|
501
|
-
sleep.
|
|
481
|
+
// 延迟执行
|
|
482
|
+
await sleep(props.inputDebounce)
|
|
502
483
|
|
|
484
|
+
// 是否有值
|
|
503
485
|
const hasValue = utils.isValidValue(val)
|
|
504
|
-
if (hasValue) {
|
|
505
486
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
514
|
-
]
|
|
515
|
-
|
|
516
|
-
$table.tableQuery.value = {
|
|
517
|
-
n_search,
|
|
487
|
+
const n_search = {}
|
|
488
|
+
n_search[currentFilterKey.value] = [
|
|
489
|
+
{
|
|
490
|
+
// 比较类型
|
|
491
|
+
compare: dicts.SEARCH_COMPARE_TYPE__LIKE,
|
|
492
|
+
// 值
|
|
493
|
+
value: hasValue ? val : '',
|
|
518
494
|
}
|
|
495
|
+
]
|
|
519
496
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
// 延迟执行
|
|
525
|
-
await sleep(props.inputDebounce)
|
|
497
|
+
// 设置表格传参
|
|
498
|
+
$table.setQuery({
|
|
499
|
+
n_search,
|
|
500
|
+
})
|
|
526
501
|
|
|
527
502
|
if (
|
|
528
503
|
// 如果弹出层是隐藏的
|
|
@@ -541,33 +516,67 @@ export default {
|
|
|
541
516
|
// ==========【方法】=============================================================================================
|
|
542
517
|
|
|
543
518
|
/**
|
|
544
|
-
*
|
|
519
|
+
* 加载已选数据
|
|
545
520
|
*/
|
|
546
|
-
function
|
|
547
|
-
|
|
548
|
-
// 如果有已选数据
|
|
549
|
-
if (utils.isValidArray(props.selected)) {
|
|
521
|
+
async function loadSelected() {
|
|
550
522
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
523
|
+
if (
|
|
524
|
+
// 如果值类型不是数组对象
|
|
525
|
+
props.valueType !== 'arrayObject'
|
|
526
|
+
// 如果不加载已选数据
|
|
527
|
+
&& ! props.noLoadSelected
|
|
528
|
+
// 如果有请求路由路径
|
|
529
|
+
&& routePath
|
|
530
|
+
) {
|
|
531
|
+
// 获取值数组
|
|
532
|
+
const values = valueToSelected(props.modelValue, false, false)
|
|
533
|
+
if (values.length) {
|
|
534
|
+
|
|
535
|
+
// 初始的已选数据
|
|
536
|
+
const _selected = await onRequestSelected(values)
|
|
537
|
+
const _value = selectedToValue(_selected)
|
|
538
|
+
|
|
539
|
+
// 如果声明值未发生变化
|
|
540
|
+
if (_value === props.modelValue) {
|
|
541
|
+
// 设置已选数据
|
|
542
|
+
setSelected(_selected)
|
|
543
|
+
|
|
544
|
+
} else {
|
|
545
|
+
// 设置临时已选数据
|
|
546
|
+
tempSelected = _selected
|
|
547
|
+
// 触发更新值
|
|
548
|
+
emit('update:modelValue', _value)
|
|
549
|
+
}
|
|
550
|
+
return
|
|
567
551
|
}
|
|
568
552
|
}
|
|
569
553
|
|
|
570
|
-
|
|
554
|
+
// 触发更新已选数据
|
|
555
|
+
emit('update:selected', selected.value)
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* 触发更新值
|
|
560
|
+
*/
|
|
561
|
+
function emitModelValue(val) {
|
|
562
|
+
|
|
563
|
+
// 设置临时已选数据
|
|
564
|
+
tempSelected = val
|
|
565
|
+
|
|
566
|
+
// 触发更新值
|
|
567
|
+
emit('update:modelValue', selectedToValue(val))
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* 设置已选数据
|
|
572
|
+
*/
|
|
573
|
+
function setSelected(val) {
|
|
574
|
+
|
|
575
|
+
// 设置已选数据
|
|
576
|
+
selected.value = val
|
|
577
|
+
|
|
578
|
+
// 触发更新已选数据
|
|
579
|
+
emit('update:selected', val)
|
|
571
580
|
}
|
|
572
581
|
|
|
573
582
|
/**
|
|
@@ -583,18 +592,96 @@ export default {
|
|
|
583
592
|
}
|
|
584
593
|
|
|
585
594
|
/**
|
|
586
|
-
*
|
|
595
|
+
* 设置已选数据的单个元素
|
|
596
|
+
*/
|
|
597
|
+
function setSelectedItem(val) {
|
|
598
|
+
const obj = {}
|
|
599
|
+
obj[props.valueKey] = val
|
|
600
|
+
obj[currentlabelKey.value] = val
|
|
601
|
+
return obj
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* 值转已选数据
|
|
587
606
|
*/
|
|
588
|
-
function
|
|
607
|
+
function valueToSelected(val, isFirst, toSelected) {
|
|
608
|
+
|
|
609
|
+
// 如果值类型是数组对象
|
|
610
|
+
if (props.valueType === 'arrayObject') {
|
|
589
611
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
612
|
+
// 如果是有效数组
|
|
613
|
+
if (utils.isValidArray(val)) {
|
|
614
|
+
for (const item of val) {
|
|
615
|
+
if (
|
|
616
|
+
// 如果元素不是有效对象
|
|
617
|
+
! utils.isValidObject(item)
|
|
618
|
+
// 如果元素没有值字段
|
|
619
|
+
|| ! _.has(item, props.valueKey)
|
|
620
|
+
) {
|
|
621
|
+
return []
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// 否则直接返回
|
|
627
|
+
return val
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
if (
|
|
631
|
+
// 非初始化
|
|
632
|
+
! isFirst
|
|
633
|
+
// 或非加载已选数据
|
|
634
|
+
|| props.noLoadSelected
|
|
635
|
+
// 或没有路由路径
|
|
636
|
+
|| ! routePath
|
|
637
|
+
) {
|
|
638
|
+
// 将值转为数组
|
|
639
|
+
val = props.valueType === 'string' ? utils.split(val, props.valueSeparator) : val
|
|
640
|
+
|
|
641
|
+
// 如果是有效数组
|
|
642
|
+
if (utils.isValidArray(val)) {
|
|
643
|
+
val = val.filter(e => utils.isValidValue(e))
|
|
644
|
+
return toSelected ? val.map(e => setSelectedItem(e)) : val
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
return []
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* 已选数据转值
|
|
653
|
+
*/
|
|
654
|
+
function selectedToValue(val) {
|
|
655
|
+
|
|
656
|
+
// 如果值类型是数组对象
|
|
657
|
+
if (props.valueType === 'arrayObject') {
|
|
658
|
+
|
|
659
|
+
// 则直接返回
|
|
660
|
+
return val
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
// 值数组
|
|
664
|
+
const values = val.length
|
|
665
|
+
// 如果有已选数据
|
|
666
|
+
? (
|
|
667
|
+
props.multiple
|
|
668
|
+
// 如果是多选
|
|
669
|
+
? val.map(e => e[props.valueKey])
|
|
670
|
+
// 否则是单选
|
|
671
|
+
: [ val[0][props.valueKey] ]
|
|
672
|
+
)
|
|
673
|
+
// 否则为空
|
|
674
|
+
: []
|
|
675
|
+
|
|
676
|
+
// 如果值类型是数组
|
|
677
|
+
if (props.valueType === 'array') {
|
|
678
|
+
|
|
679
|
+
// 直接返回数组
|
|
680
|
+
return values
|
|
593
681
|
}
|
|
594
682
|
|
|
595
|
-
//
|
|
596
|
-
return
|
|
597
|
-
.filter(e => utils.isValidValue(e))
|
|
683
|
+
// 返回转为分隔符隔开的字符串
|
|
684
|
+
return utils.join(values, props.valueSeparator)
|
|
598
685
|
}
|
|
599
686
|
|
|
600
687
|
/**
|
|
@@ -635,69 +722,6 @@ export default {
|
|
|
635
722
|
return status && utils.isValidArray(_.get(data, 'rows')) ? data.rows : []
|
|
636
723
|
}
|
|
637
724
|
|
|
638
|
-
/**
|
|
639
|
-
* 初始加载选择数据
|
|
640
|
-
*/
|
|
641
|
-
async function onLoadSelected() {
|
|
642
|
-
|
|
643
|
-
if (
|
|
644
|
-
// 如果初始不加载选择数据
|
|
645
|
-
props.noLoadSelected
|
|
646
|
-
// 如果没有请求路由路径
|
|
647
|
-
|| ! routePath
|
|
648
|
-
// 如果有选择数据
|
|
649
|
-
|| utils.isValidArray(selected.value)
|
|
650
|
-
) {
|
|
651
|
-
// 则无任何操作
|
|
652
|
-
return
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
// 格式化值
|
|
656
|
-
const value = formatModelValue()
|
|
657
|
-
|
|
658
|
-
// 如果值不是有效数组
|
|
659
|
-
if (! utils.isValidArray(value)) {
|
|
660
|
-
// 则无任何操作
|
|
661
|
-
return
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
// 设置已选数据
|
|
665
|
-
selected.value = await onRequestSelected(value)
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
/**
|
|
669
|
-
* 检查值更新
|
|
670
|
-
*/
|
|
671
|
-
function checkModelValueChange() {
|
|
672
|
-
|
|
673
|
-
let newModelValue = utils.isValidArray(selected.value)
|
|
674
|
-
// 如果有已选数据
|
|
675
|
-
? (
|
|
676
|
-
props.multiple
|
|
677
|
-
// 如果是多选
|
|
678
|
-
? selected.value.map(e => e[props.valueKey])
|
|
679
|
-
// 否则是单选
|
|
680
|
-
: [ selected.value[0][props.valueKey] ]
|
|
681
|
-
)
|
|
682
|
-
// 否则为空
|
|
683
|
-
: []
|
|
684
|
-
|
|
685
|
-
// 如果值为字符串或数字
|
|
686
|
-
if (! props.valueArray) {
|
|
687
|
-
newModelValue = utils.numberDeep(utils.join(newModelValue, props.valueSeparator))
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
// 如果值发生改变
|
|
691
|
-
if (newModelValue !== props.modelValue) {
|
|
692
|
-
|
|
693
|
-
// 停止观察值
|
|
694
|
-
stopValueWatcher = true
|
|
695
|
-
|
|
696
|
-
// 提交更新值
|
|
697
|
-
emit('update:modelValue', newModelValue)
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
|
|
701
725
|
/**
|
|
702
726
|
* 获取表格列数据
|
|
703
727
|
*/
|
|
@@ -814,27 +838,14 @@ export default {
|
|
|
814
838
|
*/
|
|
815
839
|
function onFieldClear() {
|
|
816
840
|
|
|
841
|
+
// 触发更新值
|
|
817
842
|
// 清空快捷表格已选数据
|
|
818
|
-
|
|
843
|
+
emitModelValue([])
|
|
819
844
|
|
|
820
845
|
// 隐藏弹出层
|
|
821
846
|
popupRef.value.hide()
|
|
822
847
|
}
|
|
823
848
|
|
|
824
|
-
/**
|
|
825
|
-
* 弹出层获取焦点触发
|
|
826
|
-
*/
|
|
827
|
-
function onPopupFocus(e) {
|
|
828
|
-
|
|
829
|
-
// 停止冒泡
|
|
830
|
-
e.stopPropagation()
|
|
831
|
-
|
|
832
|
-
// 设置输入框焦点
|
|
833
|
-
setInputFocus()
|
|
834
|
-
|
|
835
|
-
window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, 0)
|
|
836
|
-
}
|
|
837
|
-
|
|
838
849
|
/**
|
|
839
850
|
* 弹出层显示回调
|
|
840
851
|
*/
|
|
@@ -851,15 +862,6 @@ export default {
|
|
|
851
862
|
.finally()
|
|
852
863
|
}
|
|
853
864
|
|
|
854
|
-
/**
|
|
855
|
-
* 弹出层隐藏前显示回调
|
|
856
|
-
*/
|
|
857
|
-
function onPopupBeforeHide() {
|
|
858
|
-
|
|
859
|
-
// 隐藏弹出层
|
|
860
|
-
showPopup.value = false
|
|
861
|
-
}
|
|
862
|
-
|
|
863
865
|
/**
|
|
864
866
|
* 对话框显示前回调
|
|
865
867
|
*/
|
|
@@ -872,16 +874,6 @@ export default {
|
|
|
872
874
|
popupRef.value.hide()
|
|
873
875
|
}
|
|
874
876
|
|
|
875
|
-
/**
|
|
876
|
-
* 对话框显示回调
|
|
877
|
-
*/
|
|
878
|
-
function onDialogShow() {
|
|
879
|
-
|
|
880
|
-
// 表格加载(只加载一次)
|
|
881
|
-
$table.tableLoad()
|
|
882
|
-
.finally()
|
|
883
|
-
}
|
|
884
|
-
|
|
885
877
|
/**
|
|
886
878
|
* 对话框隐藏后回调
|
|
887
879
|
*/
|
|
@@ -914,37 +906,47 @@ export default {
|
|
|
914
906
|
* 对话框点击确认回调
|
|
915
907
|
*/
|
|
916
908
|
function onDialogConfirm(data) {
|
|
917
|
-
|
|
909
|
+
|
|
910
|
+
// 触发更新值
|
|
911
|
+
emitModelValue([...data])
|
|
918
912
|
}
|
|
919
913
|
|
|
920
914
|
/**
|
|
921
915
|
* 单击快捷表格行
|
|
922
916
|
*/
|
|
923
|
-
function quickTableRowClick(e, row
|
|
917
|
+
function quickTableRowClick(e, row) {
|
|
924
918
|
|
|
925
919
|
// 如果为多选
|
|
926
920
|
if (props.multiple) {
|
|
927
921
|
|
|
922
|
+
// 克隆已选数据
|
|
923
|
+
const _selected = [...selected.value]
|
|
924
|
+
|
|
928
925
|
const opt = {}
|
|
929
926
|
opt[props.valueKey] = row[props.valueKey]
|
|
930
927
|
|
|
931
928
|
// 获取当前数据索引
|
|
932
|
-
const itemIndex = _.findIndex(
|
|
929
|
+
const itemIndex = _.findIndex(_selected, opt)
|
|
933
930
|
|
|
934
931
|
// 如果不存在
|
|
935
932
|
if (itemIndex === -1) {
|
|
936
933
|
// 则添加
|
|
937
|
-
|
|
934
|
+
_selected.push(row)
|
|
938
935
|
|
|
939
936
|
// 否则
|
|
940
937
|
} else {
|
|
941
938
|
// 删除
|
|
942
|
-
|
|
939
|
+
_selected.splice(itemIndex, 1)
|
|
943
940
|
}
|
|
944
941
|
|
|
942
|
+
// 触发更新值
|
|
943
|
+
emitModelValue(_selected)
|
|
944
|
+
|
|
945
945
|
// 否则为单选
|
|
946
946
|
} else {
|
|
947
|
-
|
|
947
|
+
|
|
948
|
+
// 触发更新值
|
|
949
|
+
emitModelValue([ row ])
|
|
948
950
|
|
|
949
951
|
// 隐藏弹出层
|
|
950
952
|
popupRef.value.hide()
|
|
@@ -985,15 +987,6 @@ export default {
|
|
|
985
987
|
|
|
986
988
|
// ==========【生命周期】=========================================================================================
|
|
987
989
|
|
|
988
|
-
/**
|
|
989
|
-
* 实例被挂载后调用
|
|
990
|
-
*/
|
|
991
|
-
onMounted(async function() {
|
|
992
|
-
|
|
993
|
-
// 初始加载选择数据
|
|
994
|
-
await onLoadSelected()
|
|
995
|
-
})
|
|
996
|
-
|
|
997
990
|
/**
|
|
998
991
|
* 在组件因为响应式状态变更而更新其 DOM 树之后调用
|
|
999
992
|
*/
|
|
@@ -1041,17 +1034,11 @@ export default {
|
|
|
1041
1034
|
// 字段清空触发
|
|
1042
1035
|
onFieldClear,
|
|
1043
1036
|
|
|
1044
|
-
// 弹出层获取焦点触发
|
|
1045
|
-
onPopupFocus,
|
|
1046
1037
|
// 弹出层显示回调
|
|
1047
1038
|
onPopupShow,
|
|
1048
|
-
// 弹出层隐藏前显示回调
|
|
1049
|
-
onPopupBeforeHide,
|
|
1050
1039
|
|
|
1051
1040
|
// 对话框显示前回调
|
|
1052
1041
|
onDialogBeforeShow,
|
|
1053
|
-
// 对话框显示回调
|
|
1054
|
-
onDialogShow,
|
|
1055
1042
|
// 对话框隐藏后回调
|
|
1056
1043
|
onDialogHide,
|
|
1057
1044
|
// 对话框点击确认回调
|
|
@@ -1059,6 +1046,9 @@ export default {
|
|
|
1059
1046
|
|
|
1060
1047
|
// 单击快捷表格行
|
|
1061
1048
|
quickTableRowClick,
|
|
1049
|
+
|
|
1050
|
+
// 触发更新值
|
|
1051
|
+
emitModelValue,
|
|
1062
1052
|
}
|
|
1063
1053
|
},
|
|
1064
1054
|
}
|