@shijiu/jsview-vue 2.1.25 → 2.1.200

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.
Files changed (80) hide show
  1. package/package.json +1 -1
  2. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
  3. package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
  4. package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
  5. package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
  6. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
  7. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
  8. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
  9. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
  10. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
  11. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
  12. package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
  13. package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
  14. package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
  15. package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
  16. package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
  17. package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
  18. package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
  19. package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
  20. package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
  21. package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
  22. package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
  23. package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
  24. package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
  25. package/utils/JsViewPlugin/index.js +2 -1
  26. package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
  27. package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
  28. package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
  29. package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
  30. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
  31. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
  32. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
  33. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
  34. package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
  35. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
  36. package/utils/JsViewVueTools/index.js +3 -0
  37. package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
  38. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
  39. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
  40. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
  41. package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
  42. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
  43. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
  44. package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
  45. package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
  46. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
  47. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
  48. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
  49. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
  50. package/utils/JsViewVueWidget/JsvHole.js +1 -1
  51. package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
  52. package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
  53. package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
  54. package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
  55. package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
  56. package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
  57. package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
  58. package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
  59. package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
  60. package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
  61. package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
  62. package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
  63. package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
  64. package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
  65. package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
  66. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
  67. package/utils/JsViewVueWidget/JsvSector.vue +107 -0
  68. package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
  69. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
  70. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
  71. package/utils/JsViewVueWidget/index.js +15 -7
  72. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
  73. package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
  74. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
  75. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
  76. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
  77. package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
  78. package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
  79. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
  80. /package/utils/{JsViewVueWidget → JsViewPlugin/JsvAudio/BrowserAudio}/JsvSystemAudio.vue +0 -0
@@ -0,0 +1,124 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * JsvPieChart:Vue高阶组件,饼图。
4
+ * props说明:
5
+ * centerPosition {Object} 圆心坐标,属性:{x,y}
6
+ * radius {Number} 半径
7
+ * animationTime {Number} 动画变化时间,单位 /秒
8
+ * data {Array} 数组对象,包含百分比和颜色。例如:[{color:'#FFFFFF',percent:20}]
9
+ * 说明:传入的数组要为响应式,且保证所有项的percent都是大于0并且相加等于100
10
+ -->
11
+
12
+ <template>
13
+ <div v-for="(item, index) in finalData.slice().reverse()">
14
+ <JsvSector
15
+ :radius="props.radius"
16
+ :config="{
17
+ startAngle: Number(item.startAngle),
18
+ sweepAngle: Number(item.sweepAngle) + 1,
19
+ color: item.color,
20
+ }"
21
+ :id="`indexZ${index}`"
22
+ :animationTime="props.animationTime"
23
+ :centerPosition="props.centerPosition"
24
+ :extraTime="item.extraTime"
25
+ ></JsvSector>
26
+ </div>
27
+ </template>
28
+
29
+ <script setup>
30
+ import { watch, reactive, nextTick } from "vue";
31
+ import { JsvSector } from "jsview";
32
+ const props = defineProps({
33
+ centerPosition: { type: Object, required: true },
34
+ data: { type: Array, required: true },
35
+ radius: { type: Number, required: true },
36
+ animationTime: { type: Number, default: 1 },
37
+ });
38
+ let myData = props.data;
39
+ //比较百分比数组
40
+ let previousPercent = [];
41
+ //额外时间数组
42
+ let extraTimeArray = [];
43
+ myData.forEach((item, index) => {
44
+ previousPercent.push(item.percent);
45
+ extraTimeArray.push(0);
46
+ });
47
+ //验证数据
48
+ const CheckData = (data) => {
49
+ let totalPercent = 0;
50
+ data.forEach((item) => {
51
+ if (!item.hasOwnProperty("percent")) {
52
+ throw new Error("每一项必须包含percent属性");
53
+ }
54
+ if (item.percent <= 0 || item.percent > 100) {
55
+ throw new Error("每一项percent必须大于0或者小于等于100!");
56
+ }
57
+ totalPercent += item.percent;
58
+ });
59
+ if (totalPercent < 99 || totalPercent > 101) {
60
+ throw new Error("percent属性值总和必须等于100!");
61
+ }
62
+ return true;
63
+ };
64
+ CheckData(props.data);
65
+ //过滤数据
66
+ let finalData = reactive([]);
67
+ const filterData = (data) => {
68
+ data.forEach((item, index) => {
69
+ if (item.percent > previousPercent[index]) {
70
+ extraTimeArray[index] = -0.1;
71
+ } else if (item.percent < previousPercent[index]) {
72
+ extraTimeArray[index] = 0.1;
73
+ } else {
74
+ extraTimeArray[index] = 0;
75
+ }
76
+ item.angle = ((item.percent / 100) * 360).toFixed(2);
77
+ if (index == 0) {
78
+ finalData.push({
79
+ startAngle: Number(0).toFixed(2),
80
+ sweepAngle: Number((item.percent / 100) * 360).toFixed(2),
81
+ color: item.color,
82
+ index: index,
83
+ extraTime: extraTimeArray[0],
84
+ });
85
+ } else {
86
+ finalData.push({
87
+ startAngle: (
88
+ Number(finalData[index - 1].startAngle) +
89
+ Number(finalData[index - 1].sweepAngle)
90
+ ).toFixed(2),
91
+ sweepAngle: Number(item.angle).toFixed(2),
92
+ color: item.color,
93
+ index: index,
94
+ extraTime: extraTimeArray[index],
95
+ });
96
+ }
97
+ });
98
+ };
99
+ filterData(myData);
100
+ watch(
101
+ props.data,
102
+ (n, o) => {
103
+ if (CheckData(n)) {
104
+ finalData.splice(0, finalData.length);
105
+ filterData(n);
106
+ myData = n;
107
+ }
108
+ },
109
+ { deep: true }
110
+ );
111
+ watch(myData, (n, o) => {
112
+ previousPercent = [];
113
+ extraTimeArray = [];
114
+ myData.forEach((item, index) => {
115
+ previousPercent.push(item.percent);
116
+ extraTimeArray.push(0);
117
+ });
118
+ n.forEach((item, index) => {
119
+ previousPercent.push(item.percent);
120
+ });
121
+ });
122
+ </script>
123
+
124
+ <style lang="scss" scoped></style>
@@ -9,30 +9,50 @@
9
9
 
10
10
  <script setup>
11
11
  import { reactive, watchEffect, computed } from "vue";
12
+ import { JsvPerformance } from "../JsViewVueTools/JsvPerformance.ts";
12
13
 
13
14
  const props = defineProps({
14
15
  colorSpace: {
15
16
  type: String,
16
- default: "RGBA_8888",
17
- imageCompress: {
18
- type: Boolean,
19
- default: true,
20
- },
17
+ default: "RGBA_8888"
21
18
  },
22
- style: Object,
19
+ imageCompress: {
20
+ type: Boolean,
21
+ default: true
22
+ },
23
+ isPosterImage: {
24
+ type: Boolean,
25
+ default: true
26
+ },
27
+ fadeIn: {
28
+ type: Boolean,
29
+ default: true
30
+ },
31
+ src: {
32
+ type: String,
33
+ default: null
34
+ },
35
+ style: Object
23
36
  });
24
37
 
25
38
  const scaleddown = computed(() => {
26
39
  return props.imageCompress ? "true" : "false";
27
40
  });
28
41
 
42
+ const isPosterImage = computed(() => {
43
+ return JsvPerformance.getPosterSingleThreadDecode() || props.isPosterImage ? "true" : "false";
44
+ });
45
+
29
46
  let common_style = reactive({});
30
47
  let image_style = reactive({});
48
+ let show_background_holder = !!window.JsView; // PC浏览器模拟时, 不显示占位图,避免误导
31
49
 
32
50
  watchEffect(() => {
33
51
  if (props.style) {
34
- let { left, top, width, height, ...others } = props.style;
52
+ // 提取left, top, width, height, 并去掉干扰项 backgroundImage backgroundColor(会引起同位置重复图片绘制)
53
+ let { left, top, width, height, backgroundImage, backgroundColor, ...others } = props.style;
35
54
 
55
+ // 承接x,y偏移和动画设置, 规避默认淡出动画被影响
36
56
  common_style.left = left;
37
57
  common_style.top = top;
38
58
 
@@ -45,13 +65,16 @@ watchEffect(() => {
45
65
 
46
66
  <template>
47
67
  <div :style="common_style">
48
- <slot></slot>
68
+ <slot v-if="show_background_holder"></slot>
49
69
  <img
50
- data-jsv-vw-enable-fade="true"
70
+ v-if="!!props.src"
71
+ :data-jsv-vw-enable-fade="props.fadeIn"
51
72
  data-jsv-vw-mask-poster-on-top="true"
52
73
  :data-jsv-img-scaledown-tex="scaleddown"
53
74
  :data-jsv-img-color-space="colorSpace"
75
+ :data-jsv-img-poster-image="isPosterImage"
54
76
  :style="image_style"
77
+ :src="props.src"
55
78
  v-bind="$attrs"
56
79
  />
57
80
  </div>
@@ -1,146 +1,147 @@
1
- <script>
2
- import { ref, watch } from "vue";
1
+ <script setup>
2
+ import { reactive, watchEffect, onBeforeUnmount } from "vue";
3
3
 
4
- export default {
5
- props: {
6
- preloadList: Array,
7
- downloadList: Array,
8
- onPreloadDone: Function, // 预加载完成回调
9
- onDownloadDone: Function, // 预下载完成回调
10
- onPreloading: Function,
11
- },
12
- setup() {
13
- return {
14
- preloadResultMap: {},
15
- downloadResultMap: {},
16
- downloadUrlList: [],
17
- unmountStatus: { unmount: false },
18
- };
19
- },
20
- data() {
21
- return {
22
- preloadStateList: null,
23
- downloadStateList: null,
24
- };
25
- },
26
- created() {
27
- if (this.preloadList) {
28
- this.getPreloadList();
4
+ const props = defineProps({
5
+ preloadList: Array,
6
+ downloadList: Array,
7
+ onPreloadDone: Function, // 预加载完成回调
8
+ onDownloadDone: Function, // 预下载完成回调
9
+ onPreloading: Function,
10
+ })
11
+
12
+ const loadViewList = reactive({
13
+ preloadViewList: [],
14
+ downloadViewList: []
15
+ })
16
+ // 记录传入的preload为null的数量,由于vue不支持在子组件修改props值,所有在删除值为null时,需要++,这样才能保证与传入数据的length相等从而触发回调
17
+ let preloadIsNullNum = 0;
18
+ let downloadIsNullNum = 0;
19
+
20
+ let preloadResultMap = {}
21
+ let downloadResultMap = {}
22
+ let downloadUrlList = []
23
+ let unmountStatus = { unmount: false }
24
+ let preloadStateList = null;
25
+ let downloadStateList = null;
26
+
27
+ const getPreloadList = () => {
28
+ preloadStateList = new Array(props.preloadList.length).fill(false);
29
+ let preloadListData = props.preloadList;
30
+ for (let i = 0; i < preloadListData.length; i++) {
31
+ if (!preloadListData[i] || !preloadListData[i].url) {
32
+ preloadListData.splice(i, 1);
33
+ preloadIsNullNum++;
34
+ i--;
29
35
  }
30
- if (this.downloadList) {
31
- this.getDownloadList();
36
+ }
37
+ loadViewList.preloadViewList = preloadListData.map((item, index) => {
38
+ if (!item || !item.url) {
39
+ preloadStateList[index] = true;
40
+ return null;
32
41
  }
33
-
34
- watch(
35
- () => this.preloadList,
36
- () => {
37
- this.preloadResultMap = {};
38
- this.getPreloadList();
42
+ const image = new Image();
43
+ const unmount_track = unmountStatus;
44
+ image.onload = () => {
45
+ if (unmount_track.unmount) {
46
+ // 子组件已经卸载不再回调
47
+ return;
39
48
  }
40
- );
41
- watch(
42
- () => this.downloadList,
43
- () => {
44
- this.downloadResultMap = {};
45
- this.downloadUrlList = [];
46
- this.getDownloadList();
47
- }
48
- );
49
- },
50
- methods: {
51
- getPreloadList() {
52
- this.preloadStateList = new Array(this.preloadList.length).fill(false);
53
- let preloadListData = this.preloadList;
54
- for (let i = 0; i < preloadListData.length; i++) {
55
- if (!preloadListData[i]) {
56
- this.preloadStateList[i] = true;
57
- // this.preloadIsNullNum++;
58
- }
49
+
50
+ preloadResultMap[item.url] = {
51
+ width: image.width,
52
+ height: image.height,
53
+ };
54
+ preloadStateList[index] = true;
55
+ let loadedNum = 0;
56
+ preloadStateList.map((item) => {
57
+ loadedNum += item ? 1 : 0;
58
+ });
59
+ props.onPreloading?.(loadedNum / preloadStateList.length);
60
+ if (props.onPreloadDone && loadedNum + preloadIsNullNum == preloadStateList.length) {
61
+ props.onPreloadDone?.(preloadResultMap);
59
62
  }
60
- this._PreloadViewList = preloadListData.map((item, index) => {
61
- if (!item || !item.url) {
62
- this.preloadStateList[index] = true;
63
- return null;
64
- }
65
- const image = new Image();
66
- const unmount_track = this.unmountStatus;
67
- image.onload = () => {
68
- if (unmount_track.unmount) {
69
- // 子组件已经卸载不再回调
70
- return;
71
- }
63
+ };
64
+ image.src = item.url;
65
+ });
66
+ }
72
67
 
73
- this.preloadResultMap[item.url] = {
74
- width: image.width,
75
- height: image.height,
76
- };
77
- this.preloadStateList[index] = true;
78
- let loadedNum = 0;
79
- this.preloadStateList.map((item) => {
80
- loadedNum += item ? 1 : 0;
81
- });
82
- this.onPreloading?.(loadedNum / this.preloadStateList.length);
68
+ const getDownloadList = () => {
69
+ downloadStateList = new Array(props.downloadList.length).fill(false);
70
+ downloadUrlList = new Array(downloadStateList.length);
71
+ let downloadListData = props.downloadList;
72
+ for (let i = 0; i < downloadListData.length; i++) {
73
+ if (!downloadListData[i] || !downloadListData[i].url) {
74
+ downloadListData.splice(i, 1);
75
+ downloadUrlList[i] = "invalid";
76
+ downloadIsNullNum++;
77
+ i--;
78
+ }
79
+ }
80
+ loadViewList.downloadViewList = downloadListData.map((item, index) => {
81
+ if (!item || !item.url) {
82
+ downloadStateList[index] = true;
83
+ downloadUrlList[index] = "invalid";
84
+ return null;
85
+ }
86
+ const image = new Image();
87
+ const unmount_track = unmountStatus;
88
+ image.onload = () => {
89
+ if (unmount_track.unmount) {
90
+ // 子组件已经卸载不再回调
91
+ return;
92
+ }
83
93
 
84
- if (this.onPreloadDone && loadedNum == this.preloadStateList.length) {
85
- this.onPreloadDone?.(this.preloadResultMap);
86
- }
87
- };
88
- image.src = item.url;
89
- });
90
- },
91
- getDownloadList() {
92
- this.downloadStateList = new Array(this.downloadList.length).fill(false);
93
- this.downloadUrlList = new Array(this.downloadStateList.length);
94
- let downloadListData = this.downloadList;
95
- for (let i = 0; i < downloadListData.length; i++) {
96
- if (!downloadListData[i].url) {
97
- this.downloadStateList[i] = true;
98
- this.downloadUrlList[i] = "invalid";
99
- // downloadListData.splice(i, 1);
94
+ downloadStateList[index] = true;
95
+ downloadUrlList[index] = item.url;
96
+ downloadResultMap[item.url] = {
97
+ width: image.width,
98
+ height: image.height,
99
+ };
100
+ console.log(`pre download succeed ${item.url}`);
101
+ if (props.onDownloadDone) {
102
+ let downloadNum = 0;
103
+ downloadStateList.map((item) => {
104
+ downloadNum += item ? 1 : 0;
105
+ });
106
+ if (downloadNum + downloadIsNullNum == downloadStateList.length) {
107
+ props.onDownloadDone?.(
108
+ downloadUrlList,
109
+ downloadResultMap
110
+ );
100
111
  }
101
112
  }
102
- this._DownloadViewList = downloadListData.map((item, index) => {
103
- if (!item.url) {
104
- this.downloadStateList[index] = true;
105
- this.downloadUrlList[index] = "invalid";
106
- return null;
107
- }
108
- const image = new Image();
109
- const unmount_track = this.unmountStatus;
110
- image.onload = () => {
111
- if (unmount_track.unmount) {
112
- // 子组件已经卸载不再回调
113
- return;
114
- }
113
+ };
114
+ image.src = item.url;
115
+ });
116
+ }
115
117
 
116
- this.downloadStateList[index] = true;
117
- this.downloadUrlList[index] = item.url;
118
- this.downloadResultMap[item.url] = {
119
- width: image.width,
120
- height: image.height,
121
- };
122
- console.log(`pre download succeed ${item.url}`);
123
- if (this.onDownloadDone) {
124
- let downloadNum = 0;
125
- this.downloadStateList.map((item) => {
126
- downloadNum += item ? 1 : 0;
127
- });
128
- if (downloadNum == this.downloadStateList.length) {
129
- this.onDownloadDone?.(
130
- this.downloadUrlList,
131
- this.downloadResultMap
132
- );
133
- }
134
- }
135
- };
136
- image.src = item.url;
137
- });
138
- },
139
- },
140
- beforeUnmount() {
141
- this.unmountStatus.unmount = true;
142
- },
143
- };
118
+ if (props.preloadList) {
119
+ getPreloadList();
120
+ }
121
+ if (props.downloadList) {
122
+ getDownloadList();
123
+ }
124
+ watchEffect(() => {
125
+ if (props.preloadList) {
126
+ console.log("JsvPreload: update preloadList");
127
+ preloadIsNullNum = 0
128
+ preloadResultMap = {};
129
+ getPreloadList();
130
+ }
131
+ })
132
+ watchEffect(() => {
133
+ if (props.downloadList) {
134
+ console.log("JsvPreload: update downloadList");
135
+ downloadIsNullNum = 0;
136
+ downloadResultMap = {};
137
+ downloadUrlList = [];
138
+ getDownloadList();
139
+ }
140
+ })
141
+
142
+ onBeforeUnmount(() => {
143
+ unmountStatus.unmount = true;
144
+ })
144
145
  </script>
145
146
 
146
147
  <template>
@@ -148,3 +149,4 @@ export default {
148
149
  <div v-if="!preloadList"></div>
149
150
  </template>
150
151
 
152
+