backend-management-ui 1.3.2 → 1.3.3
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/backend-management-ui.common.js +1785 -69
- package/backend-management-ui.common.js.map +1 -1
- package/backend-management-ui.umd.js +1726 -10
- package/backend-management-ui.umd.js.map +1 -1
- package/backend-management-ui.umd.min.js +8 -2
- package/backend-management-ui.umd.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
2
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
-
module.exports = factory();
|
|
3
|
+
module.exports = factory(require("vue"));
|
|
4
4
|
else if(typeof define === 'function' && define.amd)
|
|
5
5
|
define([], factory);
|
|
6
6
|
else if(typeof exports === 'object')
|
|
7
|
-
exports["backend-management-ui"] = factory();
|
|
7
|
+
exports["backend-management-ui"] = factory(require("vue"));
|
|
8
8
|
else
|
|
9
|
-
root["backend-management-ui"] = factory();
|
|
10
|
-
})((typeof self !== 'undefined' ? self : this), function() {
|
|
9
|
+
root["backend-management-ui"] = factory(root["Vue"]);
|
|
10
|
+
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__9274__) {
|
|
11
11
|
return /******/ (function() { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
@@ -210,6 +210,26 @@ module.exports = function (it, Prototype) {
|
|
|
210
210
|
};
|
|
211
211
|
|
|
212
212
|
|
|
213
|
+
/***/ }),
|
|
214
|
+
|
|
215
|
+
/***/ 684:
|
|
216
|
+
/***/ (function(module) {
|
|
217
|
+
|
|
218
|
+
"use strict";
|
|
219
|
+
|
|
220
|
+
// Should throw an error on invalid iterator
|
|
221
|
+
// https://issues.chromium.org/issues/336839115
|
|
222
|
+
module.exports = function (methodName, argument) {
|
|
223
|
+
// eslint-disable-next-line es/no-iterator -- required for testing
|
|
224
|
+
var method = typeof Iterator == 'function' && Iterator.prototype[methodName];
|
|
225
|
+
if (method) try {
|
|
226
|
+
method.call({ next: null }, argument).next();
|
|
227
|
+
} catch (error) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
|
|
213
233
|
/***/ }),
|
|
214
234
|
|
|
215
235
|
/***/ 741:
|
|
@@ -428,6 +448,30 @@ module.exports = function (argument) {
|
|
|
428
448
|
};
|
|
429
449
|
|
|
430
450
|
|
|
451
|
+
/***/ }),
|
|
452
|
+
|
|
453
|
+
/***/ 1385:
|
|
454
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
455
|
+
|
|
456
|
+
"use strict";
|
|
457
|
+
|
|
458
|
+
var iteratorClose = __webpack_require__(9539);
|
|
459
|
+
|
|
460
|
+
module.exports = function (iters, kind, value) {
|
|
461
|
+
for (var i = iters.length - 1; i >= 0; i--) {
|
|
462
|
+
if (iters[i] === undefined) continue;
|
|
463
|
+
try {
|
|
464
|
+
value = iteratorClose(iters[i].iterator, kind, value);
|
|
465
|
+
} catch (error) {
|
|
466
|
+
kind = 'throw';
|
|
467
|
+
value = error;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (kind === 'throw') throw value;
|
|
471
|
+
return value;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
|
|
431
475
|
/***/ }),
|
|
432
476
|
|
|
433
477
|
/***/ 1548:
|
|
@@ -485,6 +529,58 @@ $({ target: 'Set', proto: true, real: true, forced: FORCED }, {
|
|
|
485
529
|
});
|
|
486
530
|
|
|
487
531
|
|
|
532
|
+
/***/ }),
|
|
533
|
+
|
|
534
|
+
/***/ 1701:
|
|
535
|
+
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
|
536
|
+
|
|
537
|
+
"use strict";
|
|
538
|
+
|
|
539
|
+
var $ = __webpack_require__(6518);
|
|
540
|
+
var call = __webpack_require__(9565);
|
|
541
|
+
var aCallable = __webpack_require__(9306);
|
|
542
|
+
var anObject = __webpack_require__(8551);
|
|
543
|
+
var getIteratorDirect = __webpack_require__(1767);
|
|
544
|
+
var createIteratorProxy = __webpack_require__(9462);
|
|
545
|
+
var callWithSafeIterationClosing = __webpack_require__(6319);
|
|
546
|
+
var iteratorClose = __webpack_require__(9539);
|
|
547
|
+
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
|
|
548
|
+
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
|
|
549
|
+
var IS_PURE = __webpack_require__(6395);
|
|
550
|
+
|
|
551
|
+
var MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('map', function () { /* empty */ });
|
|
552
|
+
var mapWithoutClosingOnEarlyError = !IS_PURE && !MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
|
|
553
|
+
&& iteratorHelperWithoutClosingOnEarlyError('map', TypeError);
|
|
554
|
+
|
|
555
|
+
var FORCED = IS_PURE || MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || mapWithoutClosingOnEarlyError;
|
|
556
|
+
|
|
557
|
+
var IteratorProxy = createIteratorProxy(function () {
|
|
558
|
+
var iterator = this.iterator;
|
|
559
|
+
var result = anObject(call(this.next, iterator));
|
|
560
|
+
var done = this.done = !!result.done;
|
|
561
|
+
if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
// `Iterator.prototype.map` method
|
|
565
|
+
// https://tc39.es/ecma262/#sec-iterator.prototype.map
|
|
566
|
+
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
|
|
567
|
+
map: function map(mapper) {
|
|
568
|
+
anObject(this);
|
|
569
|
+
try {
|
|
570
|
+
aCallable(mapper);
|
|
571
|
+
} catch (error) {
|
|
572
|
+
iteratorClose(this, 'throw', error);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (mapWithoutClosingOnEarlyError) return call(mapWithoutClosingOnEarlyError, this, mapper);
|
|
576
|
+
|
|
577
|
+
return new IteratorProxy(getIteratorDirect(this), {
|
|
578
|
+
mapper: mapper
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
|
|
488
584
|
/***/ }),
|
|
489
585
|
|
|
490
586
|
/***/ 1767:
|
|
@@ -532,6 +628,1045 @@ module.exports = function (object, names) {
|
|
|
532
628
|
};
|
|
533
629
|
|
|
534
630
|
|
|
631
|
+
/***/ }),
|
|
632
|
+
|
|
633
|
+
/***/ 2044:
|
|
634
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
635
|
+
|
|
636
|
+
__webpack_require__(4114);
|
|
637
|
+
__webpack_require__(8111);
|
|
638
|
+
__webpack_require__(2489);
|
|
639
|
+
__webpack_require__(7588);
|
|
640
|
+
__webpack_require__(1701);
|
|
641
|
+
__webpack_require__(8237);
|
|
642
|
+
/*!
|
|
643
|
+
* vue-virtual-scroll-list v2.3.4
|
|
644
|
+
* open source under the MIT license
|
|
645
|
+
* https://github.com/tangbc/vue-virtual-scroll-list#readme
|
|
646
|
+
*/
|
|
647
|
+
|
|
648
|
+
(function (global, factory) {
|
|
649
|
+
true ? module.exports = factory(__webpack_require__(9274)) : 0;
|
|
650
|
+
})(this, function (Vue) {
|
|
651
|
+
'use strict';
|
|
652
|
+
|
|
653
|
+
Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue;
|
|
654
|
+
function ownKeys(object, enumerableOnly) {
|
|
655
|
+
var keys = Object.keys(object);
|
|
656
|
+
if (Object.getOwnPropertySymbols) {
|
|
657
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
658
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
659
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
660
|
+
})), keys.push.apply(keys, symbols);
|
|
661
|
+
}
|
|
662
|
+
return keys;
|
|
663
|
+
}
|
|
664
|
+
function _objectSpread2(target) {
|
|
665
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
666
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
667
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
668
|
+
_defineProperty(target, key, source[key]);
|
|
669
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
670
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
return target;
|
|
674
|
+
}
|
|
675
|
+
function _classCallCheck(instance, Constructor) {
|
|
676
|
+
if (!(instance instanceof Constructor)) {
|
|
677
|
+
throw new TypeError("Cannot call a class as a function");
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
function _defineProperties(target, props) {
|
|
681
|
+
for (var i = 0; i < props.length; i++) {
|
|
682
|
+
var descriptor = props[i];
|
|
683
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
684
|
+
descriptor.configurable = true;
|
|
685
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
686
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
690
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
691
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
692
|
+
Object.defineProperty(Constructor, "prototype", {
|
|
693
|
+
writable: false
|
|
694
|
+
});
|
|
695
|
+
return Constructor;
|
|
696
|
+
}
|
|
697
|
+
function _defineProperty(obj, key, value) {
|
|
698
|
+
if (key in obj) {
|
|
699
|
+
Object.defineProperty(obj, key, {
|
|
700
|
+
value: value,
|
|
701
|
+
enumerable: true,
|
|
702
|
+
configurable: true,
|
|
703
|
+
writable: true
|
|
704
|
+
});
|
|
705
|
+
} else {
|
|
706
|
+
obj[key] = value;
|
|
707
|
+
}
|
|
708
|
+
return obj;
|
|
709
|
+
}
|
|
710
|
+
function _toConsumableArray(arr) {
|
|
711
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
712
|
+
}
|
|
713
|
+
function _arrayWithoutHoles(arr) {
|
|
714
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
715
|
+
}
|
|
716
|
+
function _iterableToArray(iter) {
|
|
717
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
718
|
+
}
|
|
719
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
720
|
+
if (!o) return;
|
|
721
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
722
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
723
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
724
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
725
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
726
|
+
}
|
|
727
|
+
function _arrayLikeToArray(arr, len) {
|
|
728
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
729
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
730
|
+
return arr2;
|
|
731
|
+
}
|
|
732
|
+
function _nonIterableSpread() {
|
|
733
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* virtual list core calculating center
|
|
738
|
+
*/
|
|
739
|
+
|
|
740
|
+
var DIRECTION_TYPE = {
|
|
741
|
+
FRONT: 'FRONT',
|
|
742
|
+
// scroll up or left
|
|
743
|
+
BEHIND: 'BEHIND' // scroll down or right
|
|
744
|
+
};
|
|
745
|
+
var CALC_TYPE = {
|
|
746
|
+
INIT: 'INIT',
|
|
747
|
+
FIXED: 'FIXED',
|
|
748
|
+
DYNAMIC: 'DYNAMIC'
|
|
749
|
+
};
|
|
750
|
+
var LEADING_BUFFER = 0;
|
|
751
|
+
var Virtual = /*#__PURE__*/function () {
|
|
752
|
+
function Virtual(param, callUpdate) {
|
|
753
|
+
_classCallCheck(this, Virtual);
|
|
754
|
+
this.init(param, callUpdate);
|
|
755
|
+
}
|
|
756
|
+
_createClass(Virtual, [{
|
|
757
|
+
key: "init",
|
|
758
|
+
value: function init(param, callUpdate) {
|
|
759
|
+
// param data
|
|
760
|
+
this.param = param;
|
|
761
|
+
this.callUpdate = callUpdate;
|
|
762
|
+
|
|
763
|
+
// size data
|
|
764
|
+
this.sizes = new Map();
|
|
765
|
+
this.firstRangeTotalSize = 0;
|
|
766
|
+
this.firstRangeAverageSize = 0;
|
|
767
|
+
this.fixedSizeValue = 0;
|
|
768
|
+
this.calcType = CALC_TYPE.INIT;
|
|
769
|
+
|
|
770
|
+
// scroll data
|
|
771
|
+
this.offset = 0;
|
|
772
|
+
this.direction = '';
|
|
773
|
+
|
|
774
|
+
// range data
|
|
775
|
+
this.range = Object.create(null);
|
|
776
|
+
if (param) {
|
|
777
|
+
this.checkRange(0, param.keeps - 1);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// benchmark test data
|
|
781
|
+
// this.__bsearchCalls = 0
|
|
782
|
+
// this.__getIndexOffsetCalls = 0
|
|
783
|
+
}
|
|
784
|
+
}, {
|
|
785
|
+
key: "destroy",
|
|
786
|
+
value: function destroy() {
|
|
787
|
+
this.init(null, null);
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
// return current render range
|
|
791
|
+
}, {
|
|
792
|
+
key: "getRange",
|
|
793
|
+
value: function getRange() {
|
|
794
|
+
var range = Object.create(null);
|
|
795
|
+
range.start = this.range.start;
|
|
796
|
+
range.end = this.range.end;
|
|
797
|
+
range.padFront = this.range.padFront;
|
|
798
|
+
range.padBehind = this.range.padBehind;
|
|
799
|
+
return range;
|
|
800
|
+
}
|
|
801
|
+
}, {
|
|
802
|
+
key: "isBehind",
|
|
803
|
+
value: function isBehind() {
|
|
804
|
+
return this.direction === DIRECTION_TYPE.BEHIND;
|
|
805
|
+
}
|
|
806
|
+
}, {
|
|
807
|
+
key: "isFront",
|
|
808
|
+
value: function isFront() {
|
|
809
|
+
return this.direction === DIRECTION_TYPE.FRONT;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
// return start index offset
|
|
813
|
+
}, {
|
|
814
|
+
key: "getOffset",
|
|
815
|
+
value: function getOffset(start) {
|
|
816
|
+
return (start < 1 ? 0 : this.getIndexOffset(start)) + this.param.slotHeaderSize;
|
|
817
|
+
}
|
|
818
|
+
}, {
|
|
819
|
+
key: "updateParam",
|
|
820
|
+
value: function updateParam(key, value) {
|
|
821
|
+
var _this = this;
|
|
822
|
+
if (this.param && key in this.param) {
|
|
823
|
+
// if uniqueIds change, find out deleted id and remove from size map
|
|
824
|
+
if (key === 'uniqueIds') {
|
|
825
|
+
this.sizes.forEach(function (v, key) {
|
|
826
|
+
if (!value.includes(key)) {
|
|
827
|
+
_this.sizes["delete"](key);
|
|
828
|
+
}
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
this.param[key] = value;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
// save each size map by id
|
|
836
|
+
}, {
|
|
837
|
+
key: "saveSize",
|
|
838
|
+
value: function saveSize(id, size) {
|
|
839
|
+
this.sizes.set(id, size);
|
|
840
|
+
|
|
841
|
+
// we assume size type is fixed at the beginning and remember first size value
|
|
842
|
+
// if there is no size value different from this at next comming saving
|
|
843
|
+
// we think it's a fixed size list, otherwise is dynamic size list
|
|
844
|
+
if (this.calcType === CALC_TYPE.INIT) {
|
|
845
|
+
this.fixedSizeValue = size;
|
|
846
|
+
this.calcType = CALC_TYPE.FIXED;
|
|
847
|
+
} else if (this.calcType === CALC_TYPE.FIXED && this.fixedSizeValue !== size) {
|
|
848
|
+
this.calcType = CALC_TYPE.DYNAMIC;
|
|
849
|
+
// it's no use at all
|
|
850
|
+
delete this.fixedSizeValue;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
// calculate the average size only in the first range
|
|
854
|
+
if (this.calcType !== CALC_TYPE.FIXED && typeof this.firstRangeTotalSize !== 'undefined') {
|
|
855
|
+
if (this.sizes.size < Math.min(this.param.keeps, this.param.uniqueIds.length)) {
|
|
856
|
+
this.firstRangeTotalSize = _toConsumableArray(this.sizes.values()).reduce(function (acc, val) {
|
|
857
|
+
return acc + val;
|
|
858
|
+
}, 0);
|
|
859
|
+
this.firstRangeAverageSize = Math.round(this.firstRangeTotalSize / this.sizes.size);
|
|
860
|
+
} else {
|
|
861
|
+
// it's done using
|
|
862
|
+
delete this.firstRangeTotalSize;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
// in some special situation (e.g. length change) we need to update in a row
|
|
868
|
+
// try goiong to render next range by a leading buffer according to current direction
|
|
869
|
+
}, {
|
|
870
|
+
key: "handleDataSourcesChange",
|
|
871
|
+
value: function handleDataSourcesChange() {
|
|
872
|
+
var start = this.range.start;
|
|
873
|
+
if (this.isFront()) {
|
|
874
|
+
start = start - LEADING_BUFFER;
|
|
875
|
+
} else if (this.isBehind()) {
|
|
876
|
+
start = start + LEADING_BUFFER;
|
|
877
|
+
}
|
|
878
|
+
start = Math.max(start, 0);
|
|
879
|
+
this.updateRange(this.range.start, this.getEndByStart(start));
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
// when slot size change, we also need force update
|
|
883
|
+
}, {
|
|
884
|
+
key: "handleSlotSizeChange",
|
|
885
|
+
value: function handleSlotSizeChange() {
|
|
886
|
+
this.handleDataSourcesChange();
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// calculating range on scroll
|
|
890
|
+
}, {
|
|
891
|
+
key: "handleScroll",
|
|
892
|
+
value: function handleScroll(offset) {
|
|
893
|
+
this.direction = offset < this.offset || offset === 0 ? DIRECTION_TYPE.FRONT : DIRECTION_TYPE.BEHIND;
|
|
894
|
+
this.offset = offset;
|
|
895
|
+
if (!this.param) {
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
if (this.direction === DIRECTION_TYPE.FRONT) {
|
|
899
|
+
this.handleFront();
|
|
900
|
+
} else if (this.direction === DIRECTION_TYPE.BEHIND) {
|
|
901
|
+
this.handleBehind();
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// ----------- public method end -----------
|
|
906
|
+
}, {
|
|
907
|
+
key: "handleFront",
|
|
908
|
+
value: function handleFront() {
|
|
909
|
+
var overs = this.getScrollOvers();
|
|
910
|
+
// should not change range if start doesn't exceed overs
|
|
911
|
+
if (overs > this.range.start) {
|
|
912
|
+
return;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
// move up start by a buffer length, and make sure its safety
|
|
916
|
+
var start = Math.max(overs - this.param.buffer, 0);
|
|
917
|
+
this.checkRange(start, this.getEndByStart(start));
|
|
918
|
+
}
|
|
919
|
+
}, {
|
|
920
|
+
key: "handleBehind",
|
|
921
|
+
value: function handleBehind() {
|
|
922
|
+
var overs = this.getScrollOvers();
|
|
923
|
+
// range should not change if scroll overs within buffer
|
|
924
|
+
if (overs < this.range.start + this.param.buffer) {
|
|
925
|
+
return;
|
|
926
|
+
}
|
|
927
|
+
this.checkRange(overs, this.getEndByStart(overs));
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
// return the pass overs according to current scroll offset
|
|
931
|
+
}, {
|
|
932
|
+
key: "getScrollOvers",
|
|
933
|
+
value: function getScrollOvers() {
|
|
934
|
+
// if slot header exist, we need subtract its size
|
|
935
|
+
var offset = this.offset - this.param.slotHeaderSize;
|
|
936
|
+
if (offset <= 0) {
|
|
937
|
+
return 0;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
// if is fixed type, that can be easily
|
|
941
|
+
if (this.isFixedType()) {
|
|
942
|
+
return Math.floor(offset / this.fixedSizeValue);
|
|
943
|
+
}
|
|
944
|
+
var low = 0;
|
|
945
|
+
var middle = 0;
|
|
946
|
+
var middleOffset = 0;
|
|
947
|
+
var high = this.param.uniqueIds.length;
|
|
948
|
+
while (low <= high) {
|
|
949
|
+
// this.__bsearchCalls++
|
|
950
|
+
middle = low + Math.floor((high - low) / 2);
|
|
951
|
+
middleOffset = this.getIndexOffset(middle);
|
|
952
|
+
if (middleOffset === offset) {
|
|
953
|
+
return middle;
|
|
954
|
+
} else if (middleOffset < offset) {
|
|
955
|
+
low = middle + 1;
|
|
956
|
+
} else if (middleOffset > offset) {
|
|
957
|
+
high = middle - 1;
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
return low > 0 ? --low : 0;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
// return a scroll offset from given index, can efficiency be improved more here?
|
|
964
|
+
// although the call frequency is very high, its only a superposition of numbers
|
|
965
|
+
}, {
|
|
966
|
+
key: "getIndexOffset",
|
|
967
|
+
value: function getIndexOffset(givenIndex) {
|
|
968
|
+
if (!givenIndex) {
|
|
969
|
+
return 0;
|
|
970
|
+
}
|
|
971
|
+
var offset = 0;
|
|
972
|
+
var indexSize = 0;
|
|
973
|
+
for (var index = 0; index < givenIndex; index++) {
|
|
974
|
+
// this.__getIndexOffsetCalls++
|
|
975
|
+
indexSize = this.sizes.get(this.param.uniqueIds[index]);
|
|
976
|
+
offset = offset + (typeof indexSize === 'number' ? indexSize : this.getEstimateSize());
|
|
977
|
+
}
|
|
978
|
+
return offset;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// is fixed size type
|
|
982
|
+
}, {
|
|
983
|
+
key: "isFixedType",
|
|
984
|
+
value: function isFixedType() {
|
|
985
|
+
return this.calcType === CALC_TYPE.FIXED;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
// return the real last index
|
|
989
|
+
}, {
|
|
990
|
+
key: "getLastIndex",
|
|
991
|
+
value: function getLastIndex() {
|
|
992
|
+
return this.param.uniqueIds.length - 1;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// in some conditions range is broke, we need correct it
|
|
996
|
+
// and then decide whether need update to next range
|
|
997
|
+
}, {
|
|
998
|
+
key: "checkRange",
|
|
999
|
+
value: function checkRange(start, end) {
|
|
1000
|
+
var keeps = this.param.keeps;
|
|
1001
|
+
var total = this.param.uniqueIds.length;
|
|
1002
|
+
|
|
1003
|
+
// datas less than keeps, render all
|
|
1004
|
+
if (total <= keeps) {
|
|
1005
|
+
start = 0;
|
|
1006
|
+
end = this.getLastIndex();
|
|
1007
|
+
} else if (end - start < keeps - 1) {
|
|
1008
|
+
// if range length is less than keeps, corrent it base on end
|
|
1009
|
+
start = end - keeps + 1;
|
|
1010
|
+
}
|
|
1011
|
+
if (this.range.start !== start) {
|
|
1012
|
+
this.updateRange(start, end);
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
// setting to a new range and rerender
|
|
1017
|
+
}, {
|
|
1018
|
+
key: "updateRange",
|
|
1019
|
+
value: function updateRange(start, end) {
|
|
1020
|
+
this.range.start = start;
|
|
1021
|
+
this.range.end = end;
|
|
1022
|
+
this.range.padFront = this.getPadFront();
|
|
1023
|
+
this.range.padBehind = this.getPadBehind();
|
|
1024
|
+
this.callUpdate(this.getRange());
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
// return end base on start
|
|
1028
|
+
}, {
|
|
1029
|
+
key: "getEndByStart",
|
|
1030
|
+
value: function getEndByStart(start) {
|
|
1031
|
+
var theoryEnd = start + this.param.keeps - 1;
|
|
1032
|
+
var truelyEnd = Math.min(theoryEnd, this.getLastIndex());
|
|
1033
|
+
return truelyEnd;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
// return total front offset
|
|
1037
|
+
}, {
|
|
1038
|
+
key: "getPadFront",
|
|
1039
|
+
value: function getPadFront() {
|
|
1040
|
+
if (this.isFixedType()) {
|
|
1041
|
+
return this.fixedSizeValue * this.range.start;
|
|
1042
|
+
} else {
|
|
1043
|
+
return this.getIndexOffset(this.range.start);
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// return total behind offset
|
|
1048
|
+
}, {
|
|
1049
|
+
key: "getPadBehind",
|
|
1050
|
+
value: function getPadBehind() {
|
|
1051
|
+
var end = this.range.end;
|
|
1052
|
+
var lastIndex = this.getLastIndex();
|
|
1053
|
+
if (this.isFixedType()) {
|
|
1054
|
+
return (lastIndex - end) * this.fixedSizeValue;
|
|
1055
|
+
}
|
|
1056
|
+
return (lastIndex - end) * this.getEstimateSize();
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
// get the item estimate size
|
|
1060
|
+
}, {
|
|
1061
|
+
key: "getEstimateSize",
|
|
1062
|
+
value: function getEstimateSize() {
|
|
1063
|
+
return this.isFixedType() ? this.fixedSizeValue : this.firstRangeAverageSize || this.param.estimateSize;
|
|
1064
|
+
}
|
|
1065
|
+
}]);
|
|
1066
|
+
return Virtual;
|
|
1067
|
+
}();
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* props declaration for default, item and slot component
|
|
1071
|
+
*/
|
|
1072
|
+
|
|
1073
|
+
var VirtualProps = {
|
|
1074
|
+
dataKey: {
|
|
1075
|
+
type: [String, Function],
|
|
1076
|
+
required: true
|
|
1077
|
+
},
|
|
1078
|
+
dataSources: {
|
|
1079
|
+
type: Array,
|
|
1080
|
+
required: true
|
|
1081
|
+
},
|
|
1082
|
+
dataComponent: {
|
|
1083
|
+
type: [Object, Function],
|
|
1084
|
+
required: true
|
|
1085
|
+
},
|
|
1086
|
+
keeps: {
|
|
1087
|
+
type: Number,
|
|
1088
|
+
"default": 30
|
|
1089
|
+
},
|
|
1090
|
+
extraProps: {
|
|
1091
|
+
type: Object
|
|
1092
|
+
},
|
|
1093
|
+
estimateSize: {
|
|
1094
|
+
type: Number,
|
|
1095
|
+
"default": 50
|
|
1096
|
+
},
|
|
1097
|
+
direction: {
|
|
1098
|
+
type: String,
|
|
1099
|
+
"default": 'vertical' // the other value is horizontal
|
|
1100
|
+
},
|
|
1101
|
+
start: {
|
|
1102
|
+
type: Number,
|
|
1103
|
+
"default": 0
|
|
1104
|
+
},
|
|
1105
|
+
offset: {
|
|
1106
|
+
type: Number,
|
|
1107
|
+
"default": 0
|
|
1108
|
+
},
|
|
1109
|
+
topThreshold: {
|
|
1110
|
+
type: Number,
|
|
1111
|
+
"default": 0
|
|
1112
|
+
},
|
|
1113
|
+
bottomThreshold: {
|
|
1114
|
+
type: Number,
|
|
1115
|
+
"default": 0
|
|
1116
|
+
},
|
|
1117
|
+
pageMode: {
|
|
1118
|
+
type: Boolean,
|
|
1119
|
+
"default": false
|
|
1120
|
+
},
|
|
1121
|
+
rootTag: {
|
|
1122
|
+
type: String,
|
|
1123
|
+
"default": 'div'
|
|
1124
|
+
},
|
|
1125
|
+
wrapTag: {
|
|
1126
|
+
type: String,
|
|
1127
|
+
"default": 'div'
|
|
1128
|
+
},
|
|
1129
|
+
wrapClass: {
|
|
1130
|
+
type: String,
|
|
1131
|
+
"default": ''
|
|
1132
|
+
},
|
|
1133
|
+
wrapStyle: {
|
|
1134
|
+
type: Object
|
|
1135
|
+
},
|
|
1136
|
+
itemTag: {
|
|
1137
|
+
type: String,
|
|
1138
|
+
"default": 'div'
|
|
1139
|
+
},
|
|
1140
|
+
itemClass: {
|
|
1141
|
+
type: String,
|
|
1142
|
+
"default": ''
|
|
1143
|
+
},
|
|
1144
|
+
itemClassAdd: {
|
|
1145
|
+
type: Function
|
|
1146
|
+
},
|
|
1147
|
+
itemStyle: {
|
|
1148
|
+
type: Object
|
|
1149
|
+
},
|
|
1150
|
+
headerTag: {
|
|
1151
|
+
type: String,
|
|
1152
|
+
"default": 'div'
|
|
1153
|
+
},
|
|
1154
|
+
headerClass: {
|
|
1155
|
+
type: String,
|
|
1156
|
+
"default": ''
|
|
1157
|
+
},
|
|
1158
|
+
headerStyle: {
|
|
1159
|
+
type: Object
|
|
1160
|
+
},
|
|
1161
|
+
footerTag: {
|
|
1162
|
+
type: String,
|
|
1163
|
+
"default": 'div'
|
|
1164
|
+
},
|
|
1165
|
+
footerClass: {
|
|
1166
|
+
type: String,
|
|
1167
|
+
"default": ''
|
|
1168
|
+
},
|
|
1169
|
+
footerStyle: {
|
|
1170
|
+
type: Object
|
|
1171
|
+
},
|
|
1172
|
+
itemScopedSlots: {
|
|
1173
|
+
type: Object
|
|
1174
|
+
}
|
|
1175
|
+
};
|
|
1176
|
+
var ItemProps = {
|
|
1177
|
+
index: {
|
|
1178
|
+
type: Number
|
|
1179
|
+
},
|
|
1180
|
+
event: {
|
|
1181
|
+
type: String
|
|
1182
|
+
},
|
|
1183
|
+
tag: {
|
|
1184
|
+
type: String
|
|
1185
|
+
},
|
|
1186
|
+
horizontal: {
|
|
1187
|
+
type: Boolean
|
|
1188
|
+
},
|
|
1189
|
+
source: {
|
|
1190
|
+
type: Object
|
|
1191
|
+
},
|
|
1192
|
+
component: {
|
|
1193
|
+
type: [Object, Function]
|
|
1194
|
+
},
|
|
1195
|
+
slotComponent: {
|
|
1196
|
+
type: Function
|
|
1197
|
+
},
|
|
1198
|
+
uniqueKey: {
|
|
1199
|
+
type: [String, Number]
|
|
1200
|
+
},
|
|
1201
|
+
extraProps: {
|
|
1202
|
+
type: Object
|
|
1203
|
+
},
|
|
1204
|
+
scopedSlots: {
|
|
1205
|
+
type: Object
|
|
1206
|
+
}
|
|
1207
|
+
};
|
|
1208
|
+
var SlotProps = {
|
|
1209
|
+
event: {
|
|
1210
|
+
type: String
|
|
1211
|
+
},
|
|
1212
|
+
uniqueKey: {
|
|
1213
|
+
type: String
|
|
1214
|
+
},
|
|
1215
|
+
tag: {
|
|
1216
|
+
type: String
|
|
1217
|
+
},
|
|
1218
|
+
horizontal: {
|
|
1219
|
+
type: Boolean
|
|
1220
|
+
}
|
|
1221
|
+
};
|
|
1222
|
+
var Wrapper = {
|
|
1223
|
+
created: function created() {
|
|
1224
|
+
this.shapeKey = this.horizontal ? 'offsetWidth' : 'offsetHeight';
|
|
1225
|
+
},
|
|
1226
|
+
mounted: function mounted() {
|
|
1227
|
+
var _this = this;
|
|
1228
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
1229
|
+
this.resizeObserver = new ResizeObserver(function () {
|
|
1230
|
+
_this.dispatchSizeChange();
|
|
1231
|
+
});
|
|
1232
|
+
this.resizeObserver.observe(this.$el);
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
// since componet will be reused, so disptach when updated
|
|
1236
|
+
updated: function updated() {
|
|
1237
|
+
// this.dispatchSizeChange()
|
|
1238
|
+
this.resizeObserver.observe(this.$el);
|
|
1239
|
+
},
|
|
1240
|
+
beforeDestroy: function beforeDestroy() {
|
|
1241
|
+
if (this.resizeObserver) {
|
|
1242
|
+
this.resizeObserver.disconnect();
|
|
1243
|
+
this.resizeObserver = null;
|
|
1244
|
+
}
|
|
1245
|
+
},
|
|
1246
|
+
methods: {
|
|
1247
|
+
getCurrentSize: function getCurrentSize() {
|
|
1248
|
+
return this.$el ? this.$el[this.shapeKey] : 0;
|
|
1249
|
+
},
|
|
1250
|
+
// tell parent current size identify by unqiue key
|
|
1251
|
+
dispatchSizeChange: function dispatchSizeChange() {
|
|
1252
|
+
this.$parent.$emit(this.event, this.uniqueKey, this.getCurrentSize(), this.hasInitial);
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
};
|
|
1256
|
+
|
|
1257
|
+
// wrapping for item
|
|
1258
|
+
var Item = Vue.component('virtual-list-item', {
|
|
1259
|
+
mixins: [Wrapper],
|
|
1260
|
+
props: ItemProps,
|
|
1261
|
+
render: function render(h) {
|
|
1262
|
+
var tag = this.tag,
|
|
1263
|
+
component = this.component,
|
|
1264
|
+
_this$extraProps = this.extraProps,
|
|
1265
|
+
extraProps = _this$extraProps === void 0 ? {} : _this$extraProps,
|
|
1266
|
+
index = this.index,
|
|
1267
|
+
source = this.source,
|
|
1268
|
+
_this$scopedSlots = this.scopedSlots,
|
|
1269
|
+
scopedSlots = _this$scopedSlots === void 0 ? {} : _this$scopedSlots,
|
|
1270
|
+
uniqueKey = this.uniqueKey,
|
|
1271
|
+
slotComponent = this.slotComponent;
|
|
1272
|
+
var props = _objectSpread2(_objectSpread2({}, extraProps), {}, {
|
|
1273
|
+
source: source,
|
|
1274
|
+
index: index
|
|
1275
|
+
});
|
|
1276
|
+
return h(tag, {
|
|
1277
|
+
key: uniqueKey,
|
|
1278
|
+
attrs: {
|
|
1279
|
+
role: 'listitem'
|
|
1280
|
+
}
|
|
1281
|
+
}, [slotComponent ? slotComponent({
|
|
1282
|
+
item: source,
|
|
1283
|
+
index: index,
|
|
1284
|
+
scope: props
|
|
1285
|
+
}) : h(component, {
|
|
1286
|
+
props: props,
|
|
1287
|
+
scopedSlots: scopedSlots
|
|
1288
|
+
})]);
|
|
1289
|
+
}
|
|
1290
|
+
});
|
|
1291
|
+
|
|
1292
|
+
// wrapping for slot
|
|
1293
|
+
var Slot = Vue.component('virtual-list-slot', {
|
|
1294
|
+
mixins: [Wrapper],
|
|
1295
|
+
props: SlotProps,
|
|
1296
|
+
render: function render(h) {
|
|
1297
|
+
var tag = this.tag,
|
|
1298
|
+
uniqueKey = this.uniqueKey;
|
|
1299
|
+
return h(tag, {
|
|
1300
|
+
key: uniqueKey,
|
|
1301
|
+
attrs: {
|
|
1302
|
+
role: uniqueKey
|
|
1303
|
+
}
|
|
1304
|
+
}, this.$slots["default"]);
|
|
1305
|
+
}
|
|
1306
|
+
});
|
|
1307
|
+
|
|
1308
|
+
/**
|
|
1309
|
+
* virtual list default component
|
|
1310
|
+
*/
|
|
1311
|
+
var EVENT_TYPE = {
|
|
1312
|
+
ITEM: 'item_resize',
|
|
1313
|
+
SLOT: 'slot_resize'
|
|
1314
|
+
};
|
|
1315
|
+
var SLOT_TYPE = {
|
|
1316
|
+
HEADER: 'thead',
|
|
1317
|
+
// string value also use for aria role attribute
|
|
1318
|
+
FOOTER: 'tfoot'
|
|
1319
|
+
};
|
|
1320
|
+
var VirtualList = Vue.component('virtual-list', {
|
|
1321
|
+
props: VirtualProps,
|
|
1322
|
+
data: function data() {
|
|
1323
|
+
return {
|
|
1324
|
+
range: null
|
|
1325
|
+
};
|
|
1326
|
+
},
|
|
1327
|
+
watch: {
|
|
1328
|
+
'dataSources.length': function dataSourcesLength() {
|
|
1329
|
+
this.virtual.updateParam('uniqueIds', this.getUniqueIdFromDataSources());
|
|
1330
|
+
this.virtual.handleDataSourcesChange();
|
|
1331
|
+
},
|
|
1332
|
+
keeps: function keeps(newValue) {
|
|
1333
|
+
this.virtual.updateParam('keeps', newValue);
|
|
1334
|
+
this.virtual.handleSlotSizeChange();
|
|
1335
|
+
},
|
|
1336
|
+
start: function start(newValue) {
|
|
1337
|
+
this.scrollToIndex(newValue);
|
|
1338
|
+
},
|
|
1339
|
+
offset: function offset(newValue) {
|
|
1340
|
+
this.scrollToOffset(newValue);
|
|
1341
|
+
}
|
|
1342
|
+
},
|
|
1343
|
+
created: function created() {
|
|
1344
|
+
this.isHorizontal = this.direction === 'horizontal';
|
|
1345
|
+
this.directionKey = this.isHorizontal ? 'scrollLeft' : 'scrollTop';
|
|
1346
|
+
this.installVirtual();
|
|
1347
|
+
|
|
1348
|
+
// listen item size change
|
|
1349
|
+
this.$on(EVENT_TYPE.ITEM, this.onItemResized);
|
|
1350
|
+
|
|
1351
|
+
// listen slot size change
|
|
1352
|
+
if (this.$slots.header || this.$slots.footer) {
|
|
1353
|
+
this.$on(EVENT_TYPE.SLOT, this.onSlotResized);
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
activated: function activated() {
|
|
1357
|
+
// set back offset when awake from keep-alive
|
|
1358
|
+
this.scrollToOffset(this.virtual.offset);
|
|
1359
|
+
if (this.pageMode) {
|
|
1360
|
+
document.addEventListener('scroll', this.onScroll, {
|
|
1361
|
+
passive: false
|
|
1362
|
+
});
|
|
1363
|
+
}
|
|
1364
|
+
},
|
|
1365
|
+
deactivated: function deactivated() {
|
|
1366
|
+
if (this.pageMode) {
|
|
1367
|
+
document.removeEventListener('scroll', this.onScroll);
|
|
1368
|
+
}
|
|
1369
|
+
},
|
|
1370
|
+
mounted: function mounted() {
|
|
1371
|
+
// set position
|
|
1372
|
+
if (this.start) {
|
|
1373
|
+
this.scrollToIndex(this.start);
|
|
1374
|
+
} else if (this.offset) {
|
|
1375
|
+
this.scrollToOffset(this.offset);
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
// in page mode we bind scroll event to document
|
|
1379
|
+
if (this.pageMode) {
|
|
1380
|
+
this.updatePageModeFront();
|
|
1381
|
+
document.addEventListener('scroll', this.onScroll, {
|
|
1382
|
+
passive: false
|
|
1383
|
+
});
|
|
1384
|
+
}
|
|
1385
|
+
},
|
|
1386
|
+
beforeDestroy: function beforeDestroy() {
|
|
1387
|
+
this.virtual.destroy();
|
|
1388
|
+
if (this.pageMode) {
|
|
1389
|
+
document.removeEventListener('scroll', this.onScroll);
|
|
1390
|
+
}
|
|
1391
|
+
},
|
|
1392
|
+
methods: {
|
|
1393
|
+
// get item size by id
|
|
1394
|
+
getSize: function getSize(id) {
|
|
1395
|
+
return this.virtual.sizes.get(id);
|
|
1396
|
+
},
|
|
1397
|
+
// get the total number of stored (rendered) items
|
|
1398
|
+
getSizes: function getSizes() {
|
|
1399
|
+
return this.virtual.sizes.size;
|
|
1400
|
+
},
|
|
1401
|
+
// return current scroll offset
|
|
1402
|
+
getOffset: function getOffset() {
|
|
1403
|
+
if (this.pageMode) {
|
|
1404
|
+
return document.documentElement[this.directionKey] || document.body[this.directionKey];
|
|
1405
|
+
} else {
|
|
1406
|
+
var root = this.$refs.root;
|
|
1407
|
+
return root ? Math.ceil(root[this.directionKey]) : 0;
|
|
1408
|
+
}
|
|
1409
|
+
},
|
|
1410
|
+
// return client viewport size
|
|
1411
|
+
getClientSize: function getClientSize() {
|
|
1412
|
+
var key = this.isHorizontal ? 'clientWidth' : 'clientHeight';
|
|
1413
|
+
if (this.pageMode) {
|
|
1414
|
+
return document.documentElement[key] || document.body[key];
|
|
1415
|
+
} else {
|
|
1416
|
+
var root = this.$refs.root;
|
|
1417
|
+
return root ? Math.ceil(root[key]) : 0;
|
|
1418
|
+
}
|
|
1419
|
+
},
|
|
1420
|
+
// return all scroll size
|
|
1421
|
+
getScrollSize: function getScrollSize() {
|
|
1422
|
+
var key = this.isHorizontal ? 'scrollWidth' : 'scrollHeight';
|
|
1423
|
+
if (this.pageMode) {
|
|
1424
|
+
return document.documentElement[key] || document.body[key];
|
|
1425
|
+
} else {
|
|
1426
|
+
var root = this.$refs.root;
|
|
1427
|
+
return root ? Math.ceil(root[key]) : 0;
|
|
1428
|
+
}
|
|
1429
|
+
},
|
|
1430
|
+
// set current scroll position to a expectant offset
|
|
1431
|
+
scrollToOffset: function scrollToOffset(offset) {
|
|
1432
|
+
if (this.pageMode) {
|
|
1433
|
+
document.body[this.directionKey] = offset;
|
|
1434
|
+
document.documentElement[this.directionKey] = offset;
|
|
1435
|
+
} else {
|
|
1436
|
+
var root = this.$refs.root;
|
|
1437
|
+
if (root) {
|
|
1438
|
+
root[this.directionKey] = offset;
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
},
|
|
1442
|
+
// set current scroll position to a expectant index
|
|
1443
|
+
scrollToIndex: function scrollToIndex(index) {
|
|
1444
|
+
// scroll to bottom
|
|
1445
|
+
if (index >= this.dataSources.length - 1) {
|
|
1446
|
+
this.scrollToBottom();
|
|
1447
|
+
} else {
|
|
1448
|
+
var offset = this.virtual.getOffset(index);
|
|
1449
|
+
this.scrollToOffset(offset);
|
|
1450
|
+
}
|
|
1451
|
+
},
|
|
1452
|
+
// set current scroll position to bottom
|
|
1453
|
+
scrollToBottom: function scrollToBottom() {
|
|
1454
|
+
var _this = this;
|
|
1455
|
+
var shepherd = this.$refs.shepherd;
|
|
1456
|
+
if (shepherd) {
|
|
1457
|
+
var offset = shepherd[this.isHorizontal ? 'offsetLeft' : 'offsetTop'];
|
|
1458
|
+
this.scrollToOffset(offset);
|
|
1459
|
+
|
|
1460
|
+
// check if it's really scrolled to the bottom
|
|
1461
|
+
// maybe list doesn't render and calculate to last range
|
|
1462
|
+
// so we need retry in next event loop until it really at bottom
|
|
1463
|
+
setTimeout(function () {
|
|
1464
|
+
if (_this.getOffset() + _this.getClientSize() + 1 < _this.getScrollSize()) {
|
|
1465
|
+
_this.scrollToBottom();
|
|
1466
|
+
}
|
|
1467
|
+
}, 3);
|
|
1468
|
+
}
|
|
1469
|
+
},
|
|
1470
|
+
// when using page mode we need update slot header size manually
|
|
1471
|
+
// taking root offset relative to the browser as slot header size
|
|
1472
|
+
updatePageModeFront: function updatePageModeFront() {
|
|
1473
|
+
var root = this.$refs.root;
|
|
1474
|
+
if (root) {
|
|
1475
|
+
var rect = root.getBoundingClientRect();
|
|
1476
|
+
var defaultView = root.ownerDocument.defaultView;
|
|
1477
|
+
var offsetFront = this.isHorizontal ? rect.left + defaultView.pageXOffset : rect.top + defaultView.pageYOffset;
|
|
1478
|
+
this.virtual.updateParam('slotHeaderSize', offsetFront);
|
|
1479
|
+
}
|
|
1480
|
+
},
|
|
1481
|
+
// reset all state back to initial
|
|
1482
|
+
reset: function reset() {
|
|
1483
|
+
this.virtual.destroy();
|
|
1484
|
+
this.scrollToOffset(0);
|
|
1485
|
+
this.installVirtual();
|
|
1486
|
+
},
|
|
1487
|
+
// ----------- public method end -----------
|
|
1488
|
+
installVirtual: function installVirtual() {
|
|
1489
|
+
this.virtual = new Virtual({
|
|
1490
|
+
slotHeaderSize: 0,
|
|
1491
|
+
slotFooterSize: 0,
|
|
1492
|
+
keeps: this.keeps,
|
|
1493
|
+
estimateSize: this.estimateSize,
|
|
1494
|
+
buffer: Math.round(this.keeps / 3),
|
|
1495
|
+
// recommend for a third of keeps
|
|
1496
|
+
uniqueIds: this.getUniqueIdFromDataSources()
|
|
1497
|
+
}, this.onRangeChanged);
|
|
1498
|
+
|
|
1499
|
+
// sync initial range
|
|
1500
|
+
this.range = this.virtual.getRange();
|
|
1501
|
+
},
|
|
1502
|
+
getUniqueIdFromDataSources: function getUniqueIdFromDataSources() {
|
|
1503
|
+
var dataKey = this.dataKey;
|
|
1504
|
+
return this.dataSources.map(function (dataSource) {
|
|
1505
|
+
return typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey];
|
|
1506
|
+
});
|
|
1507
|
+
},
|
|
1508
|
+
// event called when each item mounted or size changed
|
|
1509
|
+
onItemResized: function onItemResized(id, size) {
|
|
1510
|
+
this.virtual.saveSize(id, size);
|
|
1511
|
+
this.$emit('resized', id, size);
|
|
1512
|
+
},
|
|
1513
|
+
// event called when slot mounted or size changed
|
|
1514
|
+
onSlotResized: function onSlotResized(type, size, hasInit) {
|
|
1515
|
+
if (type === SLOT_TYPE.HEADER) {
|
|
1516
|
+
this.virtual.updateParam('slotHeaderSize', size);
|
|
1517
|
+
} else if (type === SLOT_TYPE.FOOTER) {
|
|
1518
|
+
this.virtual.updateParam('slotFooterSize', size);
|
|
1519
|
+
}
|
|
1520
|
+
if (hasInit) {
|
|
1521
|
+
this.virtual.handleSlotSizeChange();
|
|
1522
|
+
}
|
|
1523
|
+
},
|
|
1524
|
+
// here is the rerendering entry
|
|
1525
|
+
onRangeChanged: function onRangeChanged(range) {
|
|
1526
|
+
this.range = range;
|
|
1527
|
+
},
|
|
1528
|
+
onScroll: function onScroll(evt) {
|
|
1529
|
+
var offset = this.getOffset();
|
|
1530
|
+
var clientSize = this.getClientSize();
|
|
1531
|
+
var scrollSize = this.getScrollSize();
|
|
1532
|
+
|
|
1533
|
+
// iOS scroll-spring-back behavior will make direction mistake
|
|
1534
|
+
if (offset < 0 || offset + clientSize > scrollSize + 1 || !scrollSize) {
|
|
1535
|
+
return;
|
|
1536
|
+
}
|
|
1537
|
+
this.virtual.handleScroll(offset);
|
|
1538
|
+
this.emitEvent(offset, clientSize, scrollSize, evt);
|
|
1539
|
+
},
|
|
1540
|
+
// emit event in special position
|
|
1541
|
+
emitEvent: function emitEvent(offset, clientSize, scrollSize, evt) {
|
|
1542
|
+
this.$emit('scroll', evt, this.virtual.getRange());
|
|
1543
|
+
if (this.virtual.isFront() && !!this.dataSources.length && offset - this.topThreshold <= 0) {
|
|
1544
|
+
this.$emit('totop');
|
|
1545
|
+
} else if (this.virtual.isBehind() && offset + clientSize + this.bottomThreshold >= scrollSize) {
|
|
1546
|
+
this.$emit('tobottom');
|
|
1547
|
+
}
|
|
1548
|
+
},
|
|
1549
|
+
// get the real render slots based on range data
|
|
1550
|
+
// in-place patch strategy will try to reuse components as possible
|
|
1551
|
+
// so those components that are reused will not trigger lifecycle mounted
|
|
1552
|
+
getRenderSlots: function getRenderSlots(h) {
|
|
1553
|
+
var slots = [];
|
|
1554
|
+
var _this$range = this.range,
|
|
1555
|
+
start = _this$range.start,
|
|
1556
|
+
end = _this$range.end;
|
|
1557
|
+
var dataSources = this.dataSources,
|
|
1558
|
+
dataKey = this.dataKey,
|
|
1559
|
+
itemClass = this.itemClass,
|
|
1560
|
+
itemTag = this.itemTag,
|
|
1561
|
+
itemStyle = this.itemStyle,
|
|
1562
|
+
isHorizontal = this.isHorizontal,
|
|
1563
|
+
extraProps = this.extraProps,
|
|
1564
|
+
dataComponent = this.dataComponent,
|
|
1565
|
+
itemScopedSlots = this.itemScopedSlots;
|
|
1566
|
+
var slotComponent = this.$scopedSlots && this.$scopedSlots.item;
|
|
1567
|
+
for (var index = start; index <= end; index++) {
|
|
1568
|
+
var dataSource = dataSources[index];
|
|
1569
|
+
if (dataSource) {
|
|
1570
|
+
var uniqueKey = typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey];
|
|
1571
|
+
if (typeof uniqueKey === 'string' || typeof uniqueKey === 'number') {
|
|
1572
|
+
slots.push(h(Item, {
|
|
1573
|
+
props: {
|
|
1574
|
+
index: index,
|
|
1575
|
+
tag: itemTag,
|
|
1576
|
+
event: EVENT_TYPE.ITEM,
|
|
1577
|
+
horizontal: isHorizontal,
|
|
1578
|
+
uniqueKey: uniqueKey,
|
|
1579
|
+
source: dataSource,
|
|
1580
|
+
extraProps: extraProps,
|
|
1581
|
+
component: dataComponent,
|
|
1582
|
+
slotComponent: slotComponent,
|
|
1583
|
+
scopedSlots: itemScopedSlots
|
|
1584
|
+
},
|
|
1585
|
+
style: itemStyle,
|
|
1586
|
+
"class": "".concat(itemClass).concat(this.itemClassAdd ? ' ' + this.itemClassAdd(index) : '')
|
|
1587
|
+
}));
|
|
1588
|
+
} else {
|
|
1589
|
+
console.warn("Cannot get the data-key '".concat(dataKey, "' from data-sources."));
|
|
1590
|
+
}
|
|
1591
|
+
} else {
|
|
1592
|
+
console.warn("Cannot get the index '".concat(index, "' from data-sources."));
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
return slots;
|
|
1596
|
+
}
|
|
1597
|
+
},
|
|
1598
|
+
// render function, a closer-to-the-compiler alternative to templates
|
|
1599
|
+
// https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth
|
|
1600
|
+
render: function render(h) {
|
|
1601
|
+
var _this$$slots = this.$slots,
|
|
1602
|
+
header = _this$$slots.header,
|
|
1603
|
+
footer = _this$$slots.footer;
|
|
1604
|
+
var _this$range2 = this.range,
|
|
1605
|
+
padFront = _this$range2.padFront,
|
|
1606
|
+
padBehind = _this$range2.padBehind;
|
|
1607
|
+
var isHorizontal = this.isHorizontal,
|
|
1608
|
+
pageMode = this.pageMode,
|
|
1609
|
+
rootTag = this.rootTag,
|
|
1610
|
+
wrapTag = this.wrapTag,
|
|
1611
|
+
wrapClass = this.wrapClass,
|
|
1612
|
+
wrapStyle = this.wrapStyle,
|
|
1613
|
+
headerTag = this.headerTag,
|
|
1614
|
+
headerClass = this.headerClass,
|
|
1615
|
+
headerStyle = this.headerStyle,
|
|
1616
|
+
footerTag = this.footerTag,
|
|
1617
|
+
footerClass = this.footerClass,
|
|
1618
|
+
footerStyle = this.footerStyle;
|
|
1619
|
+
var paddingStyle = {
|
|
1620
|
+
padding: isHorizontal ? "0px ".concat(padBehind, "px 0px ").concat(padFront, "px") : "".concat(padFront, "px 0px ").concat(padBehind, "px")
|
|
1621
|
+
};
|
|
1622
|
+
var wrapperStyle = wrapStyle ? Object.assign({}, wrapStyle, paddingStyle) : paddingStyle;
|
|
1623
|
+
return h(rootTag, {
|
|
1624
|
+
ref: 'root',
|
|
1625
|
+
on: {
|
|
1626
|
+
'&scroll': !pageMode && this.onScroll
|
|
1627
|
+
}
|
|
1628
|
+
}, [
|
|
1629
|
+
// header slot
|
|
1630
|
+
header ? h(Slot, {
|
|
1631
|
+
"class": headerClass,
|
|
1632
|
+
style: headerStyle,
|
|
1633
|
+
props: {
|
|
1634
|
+
tag: headerTag,
|
|
1635
|
+
event: EVENT_TYPE.SLOT,
|
|
1636
|
+
uniqueKey: SLOT_TYPE.HEADER
|
|
1637
|
+
}
|
|
1638
|
+
}, header) : null,
|
|
1639
|
+
// main list
|
|
1640
|
+
h(wrapTag, {
|
|
1641
|
+
"class": wrapClass,
|
|
1642
|
+
attrs: {
|
|
1643
|
+
role: 'group'
|
|
1644
|
+
},
|
|
1645
|
+
style: wrapperStyle
|
|
1646
|
+
}, this.getRenderSlots(h)),
|
|
1647
|
+
// footer slot
|
|
1648
|
+
footer ? h(Slot, {
|
|
1649
|
+
"class": footerClass,
|
|
1650
|
+
style: footerStyle,
|
|
1651
|
+
props: {
|
|
1652
|
+
tag: footerTag,
|
|
1653
|
+
event: EVENT_TYPE.SLOT,
|
|
1654
|
+
uniqueKey: SLOT_TYPE.FOOTER
|
|
1655
|
+
}
|
|
1656
|
+
}, footer) : null,
|
|
1657
|
+
// an empty element use to scroll to bottom
|
|
1658
|
+
h('div', {
|
|
1659
|
+
ref: 'shepherd',
|
|
1660
|
+
style: {
|
|
1661
|
+
width: isHorizontal ? '0px' : '100%',
|
|
1662
|
+
height: isHorizontal ? '100%' : '0px'
|
|
1663
|
+
}
|
|
1664
|
+
})]);
|
|
1665
|
+
}
|
|
1666
|
+
});
|
|
1667
|
+
return VirtualList;
|
|
1668
|
+
});
|
|
1669
|
+
|
|
535
1670
|
/***/ }),
|
|
536
1671
|
|
|
537
1672
|
/***/ 2106:
|
|
@@ -708,11 +1843,84 @@ var INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {
|
|
|
708
1843
|
return !result;
|
|
709
1844
|
});
|
|
710
1845
|
|
|
711
|
-
// `Set.prototype.isSupersetOf` method
|
|
712
|
-
// https://tc39.es/ecma262/#sec-set.prototype.issupersetof
|
|
713
|
-
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
|
|
714
|
-
isSupersetOf: isSupersetOf
|
|
715
|
-
});
|
|
1846
|
+
// `Set.prototype.isSupersetOf` method
|
|
1847
|
+
// https://tc39.es/ecma262/#sec-set.prototype.issupersetof
|
|
1848
|
+
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
|
|
1849
|
+
isSupersetOf: isSupersetOf
|
|
1850
|
+
});
|
|
1851
|
+
|
|
1852
|
+
|
|
1853
|
+
/***/ }),
|
|
1854
|
+
|
|
1855
|
+
/***/ 2489:
|
|
1856
|
+
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
|
1857
|
+
|
|
1858
|
+
"use strict";
|
|
1859
|
+
|
|
1860
|
+
var $ = __webpack_require__(6518);
|
|
1861
|
+
var call = __webpack_require__(9565);
|
|
1862
|
+
var aCallable = __webpack_require__(9306);
|
|
1863
|
+
var anObject = __webpack_require__(8551);
|
|
1864
|
+
var getIteratorDirect = __webpack_require__(1767);
|
|
1865
|
+
var createIteratorProxy = __webpack_require__(9462);
|
|
1866
|
+
var callWithSafeIterationClosing = __webpack_require__(6319);
|
|
1867
|
+
var IS_PURE = __webpack_require__(6395);
|
|
1868
|
+
var iteratorClose = __webpack_require__(9539);
|
|
1869
|
+
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
|
|
1870
|
+
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
|
|
1871
|
+
|
|
1872
|
+
var FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('filter', function () { /* empty */ });
|
|
1873
|
+
var filterWithoutClosingOnEarlyError = !IS_PURE && !FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR
|
|
1874
|
+
&& iteratorHelperWithoutClosingOnEarlyError('filter', TypeError);
|
|
1875
|
+
|
|
1876
|
+
var FORCED = IS_PURE || FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR || filterWithoutClosingOnEarlyError;
|
|
1877
|
+
|
|
1878
|
+
var IteratorProxy = createIteratorProxy(function () {
|
|
1879
|
+
var iterator = this.iterator;
|
|
1880
|
+
var predicate = this.predicate;
|
|
1881
|
+
var next = this.next;
|
|
1882
|
+
var result, done, value;
|
|
1883
|
+
while (true) {
|
|
1884
|
+
result = anObject(call(next, iterator));
|
|
1885
|
+
done = this.done = !!result.done;
|
|
1886
|
+
if (done) return;
|
|
1887
|
+
value = result.value;
|
|
1888
|
+
if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;
|
|
1889
|
+
}
|
|
1890
|
+
});
|
|
1891
|
+
|
|
1892
|
+
// `Iterator.prototype.filter` method
|
|
1893
|
+
// https://tc39.es/ecma262/#sec-iterator.prototype.filter
|
|
1894
|
+
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
|
|
1895
|
+
filter: function filter(predicate) {
|
|
1896
|
+
anObject(this);
|
|
1897
|
+
try {
|
|
1898
|
+
aCallable(predicate);
|
|
1899
|
+
} catch (error) {
|
|
1900
|
+
iteratorClose(this, 'throw', error);
|
|
1901
|
+
}
|
|
1902
|
+
|
|
1903
|
+
if (filterWithoutClosingOnEarlyError) return call(filterWithoutClosingOnEarlyError, this, predicate);
|
|
1904
|
+
|
|
1905
|
+
return new IteratorProxy(getIteratorDirect(this), {
|
|
1906
|
+
predicate: predicate
|
|
1907
|
+
});
|
|
1908
|
+
}
|
|
1909
|
+
});
|
|
1910
|
+
|
|
1911
|
+
|
|
1912
|
+
/***/ }),
|
|
1913
|
+
|
|
1914
|
+
/***/ 2529:
|
|
1915
|
+
/***/ (function(module) {
|
|
1916
|
+
|
|
1917
|
+
"use strict";
|
|
1918
|
+
|
|
1919
|
+
// `CreateIterResultObject` abstract operation
|
|
1920
|
+
// https://tc39.es/ecma262/#sec-createiterresultobject
|
|
1921
|
+
module.exports = function (value, done) {
|
|
1922
|
+
return { value: value, done: done };
|
|
1923
|
+
};
|
|
716
1924
|
|
|
717
1925
|
|
|
718
1926
|
/***/ }),
|
|
@@ -2912,6 +4120,41 @@ module.exports = function (obj) {
|
|
|
2912
4120
|
module.exports = {};
|
|
2913
4121
|
|
|
2914
4122
|
|
|
4123
|
+
/***/ }),
|
|
4124
|
+
|
|
4125
|
+
/***/ 6279:
|
|
4126
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
4127
|
+
|
|
4128
|
+
"use strict";
|
|
4129
|
+
|
|
4130
|
+
var defineBuiltIn = __webpack_require__(6840);
|
|
4131
|
+
|
|
4132
|
+
module.exports = function (target, src, options) {
|
|
4133
|
+
for (var key in src) defineBuiltIn(target, key, src[key], options);
|
|
4134
|
+
return target;
|
|
4135
|
+
};
|
|
4136
|
+
|
|
4137
|
+
|
|
4138
|
+
/***/ }),
|
|
4139
|
+
|
|
4140
|
+
/***/ 6319:
|
|
4141
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
4142
|
+
|
|
4143
|
+
"use strict";
|
|
4144
|
+
|
|
4145
|
+
var anObject = __webpack_require__(8551);
|
|
4146
|
+
var iteratorClose = __webpack_require__(9539);
|
|
4147
|
+
|
|
4148
|
+
// call something on iterator step with safe closing on error
|
|
4149
|
+
module.exports = function (iterator, fn, value, ENTRIES) {
|
|
4150
|
+
try {
|
|
4151
|
+
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
|
|
4152
|
+
} catch (error) {
|
|
4153
|
+
iteratorClose(iterator, 'throw', error);
|
|
4154
|
+
}
|
|
4155
|
+
};
|
|
4156
|
+
|
|
4157
|
+
|
|
2915
4158
|
/***/ }),
|
|
2916
4159
|
|
|
2917
4160
|
/***/ 6395:
|
|
@@ -3791,6 +5034,66 @@ module.exports = function (name) {
|
|
|
3791
5034
|
};
|
|
3792
5035
|
|
|
3793
5036
|
|
|
5037
|
+
/***/ }),
|
|
5038
|
+
|
|
5039
|
+
/***/ 8237:
|
|
5040
|
+
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
|
5041
|
+
|
|
5042
|
+
"use strict";
|
|
5043
|
+
|
|
5044
|
+
var $ = __webpack_require__(6518);
|
|
5045
|
+
var iterate = __webpack_require__(2652);
|
|
5046
|
+
var aCallable = __webpack_require__(9306);
|
|
5047
|
+
var anObject = __webpack_require__(8551);
|
|
5048
|
+
var getIteratorDirect = __webpack_require__(1767);
|
|
5049
|
+
var iteratorClose = __webpack_require__(9539);
|
|
5050
|
+
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
|
|
5051
|
+
var apply = __webpack_require__(8745);
|
|
5052
|
+
var fails = __webpack_require__(9039);
|
|
5053
|
+
|
|
5054
|
+
var $TypeError = TypeError;
|
|
5055
|
+
|
|
5056
|
+
// https://bugs.webkit.org/show_bug.cgi?id=291651
|
|
5057
|
+
var FAILS_ON_INITIAL_UNDEFINED = fails(function () {
|
|
5058
|
+
// eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys, array-callback-return -- required for testing
|
|
5059
|
+
[].keys().reduce(function () { /* empty */ }, undefined);
|
|
5060
|
+
});
|
|
5061
|
+
|
|
5062
|
+
var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError('reduce', $TypeError);
|
|
5063
|
+
|
|
5064
|
+
// `Iterator.prototype.reduce` method
|
|
5065
|
+
// https://tc39.es/ecma262/#sec-iterator.prototype.reduce
|
|
5066
|
+
$({ target: 'Iterator', proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {
|
|
5067
|
+
reduce: function reduce(reducer /* , initialValue */) {
|
|
5068
|
+
anObject(this);
|
|
5069
|
+
try {
|
|
5070
|
+
aCallable(reducer);
|
|
5071
|
+
} catch (error) {
|
|
5072
|
+
iteratorClose(this, 'throw', error);
|
|
5073
|
+
}
|
|
5074
|
+
|
|
5075
|
+
var noInitial = arguments.length < 2;
|
|
5076
|
+
var accumulator = noInitial ? undefined : arguments[1];
|
|
5077
|
+
if (reduceWithoutClosingOnEarlyError) {
|
|
5078
|
+
return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);
|
|
5079
|
+
}
|
|
5080
|
+
var record = getIteratorDirect(this);
|
|
5081
|
+
var counter = 0;
|
|
5082
|
+
iterate(record, function (value) {
|
|
5083
|
+
if (noInitial) {
|
|
5084
|
+
noInitial = false;
|
|
5085
|
+
accumulator = value;
|
|
5086
|
+
} else {
|
|
5087
|
+
accumulator = reducer(accumulator, value, counter);
|
|
5088
|
+
}
|
|
5089
|
+
counter++;
|
|
5090
|
+
}, { IS_RECORD: true });
|
|
5091
|
+
if (noInitial) throw new $TypeError('Reduce of empty iterator with no initial value');
|
|
5092
|
+
return accumulator;
|
|
5093
|
+
}
|
|
5094
|
+
});
|
|
5095
|
+
|
|
5096
|
+
|
|
3794
5097
|
/***/ }),
|
|
3795
5098
|
|
|
3796
5099
|
/***/ 8469:
|
|
@@ -3934,6 +5237,25 @@ module.exports = [
|
|
|
3934
5237
|
];
|
|
3935
5238
|
|
|
3936
5239
|
|
|
5240
|
+
/***/ }),
|
|
5241
|
+
|
|
5242
|
+
/***/ 8745:
|
|
5243
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
5244
|
+
|
|
5245
|
+
"use strict";
|
|
5246
|
+
|
|
5247
|
+
var NATIVE_BIND = __webpack_require__(616);
|
|
5248
|
+
|
|
5249
|
+
var FunctionPrototype = Function.prototype;
|
|
5250
|
+
var apply = FunctionPrototype.apply;
|
|
5251
|
+
var call = FunctionPrototype.call;
|
|
5252
|
+
|
|
5253
|
+
// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe
|
|
5254
|
+
module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
|
|
5255
|
+
return call.apply(apply, arguments);
|
|
5256
|
+
});
|
|
5257
|
+
|
|
5258
|
+
|
|
3937
5259
|
/***/ }),
|
|
3938
5260
|
|
|
3939
5261
|
/***/ 8750:
|
|
@@ -4029,6 +5351,14 @@ module.exports = function (exec) {
|
|
|
4029
5351
|
};
|
|
4030
5352
|
|
|
4031
5353
|
|
|
5354
|
+
/***/ }),
|
|
5355
|
+
|
|
5356
|
+
/***/ 9274:
|
|
5357
|
+
/***/ (function(module) {
|
|
5358
|
+
|
|
5359
|
+
"use strict";
|
|
5360
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE__9274__;
|
|
5361
|
+
|
|
4032
5362
|
/***/ }),
|
|
4033
5363
|
|
|
4034
5364
|
/***/ 9286:
|
|
@@ -4134,6 +5464,100 @@ module.exports = function (key, value) {
|
|
|
4134
5464
|
};
|
|
4135
5465
|
|
|
4136
5466
|
|
|
5467
|
+
/***/ }),
|
|
5468
|
+
|
|
5469
|
+
/***/ 9462:
|
|
5470
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
5471
|
+
|
|
5472
|
+
"use strict";
|
|
5473
|
+
|
|
5474
|
+
var call = __webpack_require__(9565);
|
|
5475
|
+
var create = __webpack_require__(2360);
|
|
5476
|
+
var createNonEnumerableProperty = __webpack_require__(6699);
|
|
5477
|
+
var defineBuiltIns = __webpack_require__(6279);
|
|
5478
|
+
var wellKnownSymbol = __webpack_require__(8227);
|
|
5479
|
+
var InternalStateModule = __webpack_require__(1181);
|
|
5480
|
+
var getMethod = __webpack_require__(5966);
|
|
5481
|
+
var IteratorPrototype = (__webpack_require__(7657).IteratorPrototype);
|
|
5482
|
+
var createIterResultObject = __webpack_require__(2529);
|
|
5483
|
+
var iteratorClose = __webpack_require__(9539);
|
|
5484
|
+
var iteratorCloseAll = __webpack_require__(1385);
|
|
5485
|
+
|
|
5486
|
+
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
|
|
5487
|
+
var ITERATOR_HELPER = 'IteratorHelper';
|
|
5488
|
+
var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
|
|
5489
|
+
var NORMAL = 'normal';
|
|
5490
|
+
var THROW = 'throw';
|
|
5491
|
+
var setInternalState = InternalStateModule.set;
|
|
5492
|
+
|
|
5493
|
+
var createIteratorProxyPrototype = function (IS_ITERATOR) {
|
|
5494
|
+
var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
|
|
5495
|
+
|
|
5496
|
+
return defineBuiltIns(create(IteratorPrototype), {
|
|
5497
|
+
next: function next() {
|
|
5498
|
+
var state = getInternalState(this);
|
|
5499
|
+
// for simplification:
|
|
5500
|
+
// for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`
|
|
5501
|
+
// for `%IteratorHelperPrototype%.next` - just a value
|
|
5502
|
+
if (IS_ITERATOR) return state.nextHandler();
|
|
5503
|
+
if (state.done) return createIterResultObject(undefined, true);
|
|
5504
|
+
try {
|
|
5505
|
+
var result = state.nextHandler();
|
|
5506
|
+
return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
|
|
5507
|
+
} catch (error) {
|
|
5508
|
+
state.done = true;
|
|
5509
|
+
throw error;
|
|
5510
|
+
}
|
|
5511
|
+
},
|
|
5512
|
+
'return': function () {
|
|
5513
|
+
var state = getInternalState(this);
|
|
5514
|
+
var iterator = state.iterator;
|
|
5515
|
+
state.done = true;
|
|
5516
|
+
if (IS_ITERATOR) {
|
|
5517
|
+
var returnMethod = getMethod(iterator, 'return');
|
|
5518
|
+
return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);
|
|
5519
|
+
}
|
|
5520
|
+
if (state.inner) try {
|
|
5521
|
+
iteratorClose(state.inner.iterator, NORMAL);
|
|
5522
|
+
} catch (error) {
|
|
5523
|
+
return iteratorClose(iterator, THROW, error);
|
|
5524
|
+
}
|
|
5525
|
+
if (state.openIters) try {
|
|
5526
|
+
iteratorCloseAll(state.openIters, NORMAL);
|
|
5527
|
+
} catch (error) {
|
|
5528
|
+
return iteratorClose(iterator, THROW, error);
|
|
5529
|
+
}
|
|
5530
|
+
if (iterator) iteratorClose(iterator, NORMAL);
|
|
5531
|
+
return createIterResultObject(undefined, true);
|
|
5532
|
+
}
|
|
5533
|
+
});
|
|
5534
|
+
};
|
|
5535
|
+
|
|
5536
|
+
var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
|
|
5537
|
+
var IteratorHelperPrototype = createIteratorProxyPrototype(false);
|
|
5538
|
+
|
|
5539
|
+
createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');
|
|
5540
|
+
|
|
5541
|
+
module.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
|
|
5542
|
+
var IteratorProxy = function Iterator(record, state) {
|
|
5543
|
+
if (state) {
|
|
5544
|
+
state.iterator = record.iterator;
|
|
5545
|
+
state.next = record.next;
|
|
5546
|
+
} else state = record;
|
|
5547
|
+
state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
|
|
5548
|
+
state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
|
|
5549
|
+
state.nextHandler = nextHandler;
|
|
5550
|
+
state.counter = 0;
|
|
5551
|
+
state.done = false;
|
|
5552
|
+
setInternalState(this, state);
|
|
5553
|
+
};
|
|
5554
|
+
|
|
5555
|
+
IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
|
|
5556
|
+
|
|
5557
|
+
return IteratorProxy;
|
|
5558
|
+
};
|
|
5559
|
+
|
|
5560
|
+
|
|
4137
5561
|
/***/ }),
|
|
4138
5562
|
|
|
4139
5563
|
/***/ 9504:
|
|
@@ -4420,6 +5844,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
4420
5844
|
UiDialog: function() { return /* reexport */ ui_dialog; },
|
|
4421
5845
|
UiForm: function() { return /* reexport */ ui_form; },
|
|
4422
5846
|
UiTable: function() { return /* reexport */ ui_table; },
|
|
5847
|
+
UiVirtualSelect: function() { return /* reexport */ ui_virtual_select; },
|
|
4423
5848
|
"default": function() { return /* binding */ entry_lib; }
|
|
4424
5849
|
});
|
|
4425
5850
|
|
|
@@ -5430,13 +6855,304 @@ var ui_dialog_component = normalizeComponent(
|
|
|
5430
6855
|
)
|
|
5431
6856
|
|
|
5432
6857
|
/* harmony default export */ var ui_dialog = (ui_dialog_component.exports);
|
|
6858
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/index.vue?vue&type=template&id=4776e956&scoped=true
|
|
6859
|
+
var ui_virtual_selectvue_type_template_id_4776e956_scoped_true_render = function render() {
|
|
6860
|
+
var _vm = this,
|
|
6861
|
+
_c = _vm._self._c;
|
|
6862
|
+
return _c('div', {
|
|
6863
|
+
staticClass: "select-wrap"
|
|
6864
|
+
}, [_c('el-select', _vm._b({
|
|
6865
|
+
ref: "elSelectRef",
|
|
6866
|
+
attrs: {
|
|
6867
|
+
"value": _vm.innerValue,
|
|
6868
|
+
"popper-class": "virtual-select-popper",
|
|
6869
|
+
"filterable": "",
|
|
6870
|
+
"filter-method": _vm.filterMethod,
|
|
6871
|
+
"popper-append-to-body": true
|
|
6872
|
+
},
|
|
6873
|
+
on: {
|
|
6874
|
+
"visible-change": _vm.handleVisibleChange,
|
|
6875
|
+
"change": _vm.handleSelectChange
|
|
6876
|
+
}
|
|
6877
|
+
}, 'el-select', _vm.$attrs, false), [_c('vue-virtual-scroll-list', {
|
|
6878
|
+
ref: "virtualList",
|
|
6879
|
+
staticClass: "virtual-list",
|
|
6880
|
+
attrs: {
|
|
6881
|
+
"data-key": _vm.fields.value,
|
|
6882
|
+
"data-sources": _vm.filteredData,
|
|
6883
|
+
"data-component": _vm.itemComponent,
|
|
6884
|
+
"keeps": 20,
|
|
6885
|
+
"extra-props": {
|
|
6886
|
+
label: _vm.fields.label,
|
|
6887
|
+
value: _vm.fields.value,
|
|
6888
|
+
rightLabel: _vm.fields.rightLabel
|
|
6889
|
+
},
|
|
6890
|
+
"estimate-size": 34
|
|
6891
|
+
},
|
|
6892
|
+
on: {
|
|
6893
|
+
"item-click": _vm.handleItemClick
|
|
6894
|
+
}
|
|
6895
|
+
})], 1)], 1);
|
|
6896
|
+
};
|
|
6897
|
+
var ui_virtual_selectvue_type_template_id_4776e956_scoped_true_staticRenderFns = [];
|
|
6898
|
+
|
|
6899
|
+
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
|
|
6900
|
+
var es_array_push = __webpack_require__(4114);
|
|
6901
|
+
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.filter.js
|
|
6902
|
+
var es_iterator_filter = __webpack_require__(2489);
|
|
6903
|
+
// EXTERNAL MODULE: ./node_modules/vue-virtual-scroll-list/dist/index.js
|
|
6904
|
+
var dist = __webpack_require__(2044);
|
|
6905
|
+
var dist_default = /*#__PURE__*/__webpack_require__.n(dist);
|
|
6906
|
+
;// ./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/itemComponent.vue?vue&type=template&id=68d8f45e&scoped=true
|
|
6907
|
+
var itemComponentvue_type_template_id_68d8f45e_scoped_true_render = function render() {
|
|
6908
|
+
var _vm = this,
|
|
6909
|
+
_c = _vm._self._c;
|
|
6910
|
+
return _c('div', {
|
|
6911
|
+
staticClass: "item",
|
|
6912
|
+
on: {
|
|
6913
|
+
"click": _vm.handleItemClick
|
|
6914
|
+
}
|
|
6915
|
+
}, [_c('el-option', {
|
|
6916
|
+
attrs: {
|
|
6917
|
+
"label": _vm.source[_vm.label],
|
|
6918
|
+
"value": _vm.source[_vm.value]
|
|
6919
|
+
}
|
|
6920
|
+
}, [_c('span', {
|
|
6921
|
+
staticClass: "left-text"
|
|
6922
|
+
}, [_vm._v(_vm._s(_vm.source[_vm.label]))]), _vm.rightLabel ? _c('span', {
|
|
6923
|
+
staticClass: "right-text"
|
|
6924
|
+
}, [_vm._v(_vm._s(_vm.source[_vm.rightLabel]))]) : _vm._e()])], 1);
|
|
6925
|
+
};
|
|
6926
|
+
var itemComponentvue_type_template_id_68d8f45e_scoped_true_staticRenderFns = [];
|
|
6927
|
+
|
|
6928
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/itemComponent.vue?vue&type=script&lang=js
|
|
6929
|
+
/* harmony default export */ var itemComponentvue_type_script_lang_js = ({
|
|
6930
|
+
props: {
|
|
6931
|
+
source: {
|
|
6932
|
+
type: Object,
|
|
6933
|
+
default: () => ({})
|
|
6934
|
+
},
|
|
6935
|
+
label: {
|
|
6936
|
+
type: String,
|
|
6937
|
+
required: true
|
|
6938
|
+
},
|
|
6939
|
+
value: {
|
|
6940
|
+
type: String,
|
|
6941
|
+
required: true
|
|
6942
|
+
},
|
|
6943
|
+
rightLabel: {
|
|
6944
|
+
type: String,
|
|
6945
|
+
default: ''
|
|
6946
|
+
}
|
|
6947
|
+
},
|
|
6948
|
+
methods: {
|
|
6949
|
+
// 核心:点击选项时,向上传递选中值
|
|
6950
|
+
handleItemClick() {
|
|
6951
|
+
const selectedValue = this.source[this.value];
|
|
6952
|
+
// 触发自定义事件,将选中值传递给父组件
|
|
6953
|
+
this.$emit('item-click', selectedValue);
|
|
6954
|
+
}
|
|
6955
|
+
}
|
|
6956
|
+
});
|
|
6957
|
+
;// ./src/elementConfig/ui-virtual-select/itemComponent.vue?vue&type=script&lang=js
|
|
6958
|
+
/* harmony default export */ var ui_virtual_select_itemComponentvue_type_script_lang_js = (itemComponentvue_type_script_lang_js);
|
|
6959
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/itemComponent.vue?vue&type=style&index=0&id=68d8f45e&prod&scoped=true&lang=css
|
|
6960
|
+
// extracted by mini-css-extract-plugin
|
|
6961
|
+
|
|
6962
|
+
;// ./src/elementConfig/ui-virtual-select/itemComponent.vue?vue&type=style&index=0&id=68d8f45e&prod&scoped=true&lang=css
|
|
6963
|
+
|
|
6964
|
+
;// ./src/elementConfig/ui-virtual-select/itemComponent.vue
|
|
6965
|
+
|
|
6966
|
+
|
|
6967
|
+
|
|
6968
|
+
;
|
|
6969
|
+
|
|
6970
|
+
|
|
6971
|
+
/* normalize component */
|
|
6972
|
+
|
|
6973
|
+
var itemComponent_component = normalizeComponent(
|
|
6974
|
+
ui_virtual_select_itemComponentvue_type_script_lang_js,
|
|
6975
|
+
itemComponentvue_type_template_id_68d8f45e_scoped_true_render,
|
|
6976
|
+
itemComponentvue_type_template_id_68d8f45e_scoped_true_staticRenderFns,
|
|
6977
|
+
false,
|
|
6978
|
+
null,
|
|
6979
|
+
"68d8f45e",
|
|
6980
|
+
null
|
|
6981
|
+
|
|
6982
|
+
)
|
|
6983
|
+
|
|
6984
|
+
/* harmony default export */ var itemComponent = (itemComponent_component.exports);
|
|
6985
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/index.vue?vue&type=script&lang=js
|
|
6986
|
+
|
|
6987
|
+
|
|
6988
|
+
|
|
6989
|
+
|
|
6990
|
+
|
|
6991
|
+
|
|
6992
|
+
/* harmony default export */ var ui_virtual_selectvue_type_script_lang_js = ({
|
|
6993
|
+
name: 'UiVirtualSelect',
|
|
6994
|
+
components: {
|
|
6995
|
+
VueVirtualScrollList: (dist_default())
|
|
6996
|
+
},
|
|
6997
|
+
props: {
|
|
6998
|
+
options: {
|
|
6999
|
+
type: Array,
|
|
7000
|
+
default: () => []
|
|
7001
|
+
},
|
|
7002
|
+
fields: {
|
|
7003
|
+
type: Object,
|
|
7004
|
+
default: () => ({
|
|
7005
|
+
label: 'label',
|
|
7006
|
+
value: 'value'
|
|
7007
|
+
})
|
|
7008
|
+
},
|
|
7009
|
+
value: {
|
|
7010
|
+
type: [String, Array],
|
|
7011
|
+
default: () => []
|
|
7012
|
+
} // 接收父组件v-model传递的值
|
|
7013
|
+
},
|
|
7014
|
+
data() {
|
|
7015
|
+
return {
|
|
7016
|
+
filteredData: [...this.options],
|
|
7017
|
+
maxItemWidth: 0,
|
|
7018
|
+
itemComponent: itemComponent,
|
|
7019
|
+
innerValue: [...this.value] // 内部维护选中值,避免直接修改props
|
|
7020
|
+
};
|
|
7021
|
+
},
|
|
7022
|
+
watch: {
|
|
7023
|
+
// 监听父组件v-model值变化,同步更新内部选中值
|
|
7024
|
+
value: {
|
|
7025
|
+
deep: true,
|
|
7026
|
+
immediate: true,
|
|
7027
|
+
handler(newVal) {
|
|
7028
|
+
this.innerValue = Array.isArray(newVal) ? [...newVal] : newVal;
|
|
7029
|
+
}
|
|
7030
|
+
},
|
|
7031
|
+
options: {
|
|
7032
|
+
deep: true,
|
|
7033
|
+
handler() {
|
|
7034
|
+
this.filteredData = [...this.options];
|
|
7035
|
+
this.calcMaxItemWidth();
|
|
7036
|
+
}
|
|
7037
|
+
}
|
|
7038
|
+
},
|
|
7039
|
+
mounted() {
|
|
7040
|
+
this.calcMaxItemWidth();
|
|
7041
|
+
},
|
|
7042
|
+
methods: {
|
|
7043
|
+
calcMaxItemWidth() {
|
|
7044
|
+
if (!this.options.length) return;
|
|
7045
|
+
const temp = document.createElement('div');
|
|
7046
|
+
temp.style.cssText = `
|
|
7047
|
+
position: absolute;
|
|
7048
|
+
top: -9999px;
|
|
7049
|
+
left: -9999px;
|
|
7050
|
+
white-space: nowrap;
|
|
7051
|
+
padding: 0 20px;
|
|
7052
|
+
font-size: 14px;
|
|
7053
|
+
box-sizing: border-box;
|
|
7054
|
+
`;
|
|
7055
|
+
document.body.appendChild(temp);
|
|
7056
|
+
let maxWidth = 0;
|
|
7057
|
+
this.options.forEach(item => {
|
|
7058
|
+
const label = item[this.fields.label] || '';
|
|
7059
|
+
const rightLabel = item[this.fields.rightLabel] || '';
|
|
7060
|
+
temp.innerHTML = `<span>${label}</span><span style="margin-left:10px;color:#939393">${rightLabel}</span>`;
|
|
7061
|
+
maxWidth = Math.max(maxWidth, temp.offsetWidth);
|
|
7062
|
+
});
|
|
7063
|
+
this.maxItemWidth = maxWidth + 6;
|
|
7064
|
+
document.body.removeChild(temp);
|
|
7065
|
+
this.setPopperWidth();
|
|
7066
|
+
},
|
|
7067
|
+
setPopperWidth() {
|
|
7068
|
+
const popper = document.querySelector('.virtual-select-popper');
|
|
7069
|
+
if (popper) {
|
|
7070
|
+
popper.style.width = `${this.maxItemWidth}px`;
|
|
7071
|
+
popper.style.minWidth = 'unset';
|
|
7072
|
+
popper.style.maxWidth = 'unset';
|
|
7073
|
+
}
|
|
7074
|
+
},
|
|
7075
|
+
filterMethod(query) {
|
|
7076
|
+
this.filteredData = query ? this.options.filter(item => {
|
|
7077
|
+
const labelMatch = item[this.fields.label].toLowerCase().includes(query.toLowerCase());
|
|
7078
|
+
const rightLabelMatch = this.fields.rightLabel ? item[this.fields.rightLabel].toLowerCase().includes(query.toLowerCase()) : false;
|
|
7079
|
+
return labelMatch || rightLabelMatch;
|
|
7080
|
+
}) : [...this.options];
|
|
7081
|
+
this.$nextTick(() => this.$refs.virtualList?.scrollToIndex(0));
|
|
7082
|
+
},
|
|
7083
|
+
handleVisibleChange(visible) {
|
|
7084
|
+
if (visible) {
|
|
7085
|
+
this.$nextTick(() => {
|
|
7086
|
+
this.setPopperWidth();
|
|
7087
|
+
});
|
|
7088
|
+
} else {
|
|
7089
|
+
this.$refs.virtualList?.reset();
|
|
7090
|
+
}
|
|
7091
|
+
},
|
|
7092
|
+
// 核心:接收子组件选中值,更新内部状态并通知el-select
|
|
7093
|
+
handleItemClick(selectedValue) {
|
|
7094
|
+
const isMultiple = this.$attrs.multiple; // 判断是否为多选模式
|
|
7095
|
+
|
|
7096
|
+
if (isMultiple) {
|
|
7097
|
+
// 多选:切换选中状态(存在则移除,不存在则添加)
|
|
7098
|
+
const valueIndex = this.innerValue.findIndex(val => val === selectedValue);
|
|
7099
|
+
if (valueIndex > -1) {
|
|
7100
|
+
this.innerValue.splice(valueIndex, 1);
|
|
7101
|
+
} else {
|
|
7102
|
+
this.innerValue.push(selectedValue);
|
|
7103
|
+
}
|
|
7104
|
+
} else {
|
|
7105
|
+
// 单选:直接赋值,并关闭下拉面板
|
|
7106
|
+
this.innerValue = selectedValue;
|
|
7107
|
+
this.$refs.elSelectRef.visible = false; // 手动关闭下拉
|
|
7108
|
+
}
|
|
7109
|
+
|
|
7110
|
+
// 手动触发el-select的change事件,同步更新状态
|
|
7111
|
+
this.$refs.elSelectRef.$emit('change', isMultiple ? [...this.innerValue] : this.innerValue);
|
|
7112
|
+
},
|
|
7113
|
+
// 监听el-select原生change事件,向父组件传递更新后的值(支持v-model)
|
|
7114
|
+
handleSelectChange(val) {
|
|
7115
|
+
this.$emit('input', val); // v-model的核心:触发input事件更新绑定值
|
|
7116
|
+
this.$emit('change', val); // 保留原有change事件,兼容手动监听
|
|
7117
|
+
}
|
|
7118
|
+
}
|
|
7119
|
+
});
|
|
7120
|
+
;// ./src/elementConfig/ui-virtual-select/index.vue?vue&type=script&lang=js
|
|
7121
|
+
/* harmony default export */ var elementConfig_ui_virtual_selectvue_type_script_lang_js = (ui_virtual_selectvue_type_script_lang_js);
|
|
7122
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/elementConfig/ui-virtual-select/index.vue?vue&type=style&index=0&id=4776e956&prod&scoped=true&lang=css
|
|
7123
|
+
// extracted by mini-css-extract-plugin
|
|
7124
|
+
|
|
7125
|
+
;// ./src/elementConfig/ui-virtual-select/index.vue?vue&type=style&index=0&id=4776e956&prod&scoped=true&lang=css
|
|
7126
|
+
|
|
7127
|
+
;// ./src/elementConfig/ui-virtual-select/index.vue
|
|
7128
|
+
|
|
7129
|
+
|
|
7130
|
+
|
|
7131
|
+
;
|
|
7132
|
+
|
|
7133
|
+
|
|
7134
|
+
/* normalize component */
|
|
7135
|
+
|
|
7136
|
+
var ui_virtual_select_component = normalizeComponent(
|
|
7137
|
+
elementConfig_ui_virtual_selectvue_type_script_lang_js,
|
|
7138
|
+
ui_virtual_selectvue_type_template_id_4776e956_scoped_true_render,
|
|
7139
|
+
ui_virtual_selectvue_type_template_id_4776e956_scoped_true_staticRenderFns,
|
|
7140
|
+
false,
|
|
7141
|
+
null,
|
|
7142
|
+
"4776e956",
|
|
7143
|
+
null
|
|
7144
|
+
|
|
7145
|
+
)
|
|
7146
|
+
|
|
7147
|
+
/* harmony default export */ var ui_virtual_select = (ui_virtual_select_component.exports);
|
|
5433
7148
|
;// ./src/elementConfig/index.js
|
|
5434
7149
|
|
|
5435
7150
|
|
|
5436
7151
|
|
|
5437
7152
|
|
|
5438
7153
|
|
|
5439
|
-
|
|
7154
|
+
|
|
7155
|
+
const components = [ui_form, ui_table, ui_btns, business_status, ui_dialog, ui_virtual_select];
|
|
5440
7156
|
const install = function (Vue) {
|
|
5441
7157
|
components.forEach(component => {
|
|
5442
7158
|
Vue.component(component.name, component);
|