renusify 1.1.4 → 1.2.0

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 (84) hide show
  1. package/components/app/notify/notification.vue +2 -1
  2. package/components/app/toast/index.vue +7 -2
  3. package/components/app/toast/toast.vue +2 -0
  4. package/components/avatar/index.vue +29 -23
  5. package/components/bar/bottomNavigationCircle.vue +8 -3
  6. package/components/bar/scss/bottomNav.scss +1 -1
  7. package/components/bar/toolbar/laptop.vue +4 -4
  8. package/components/bar/toolbar/mixin.js +1 -2
  9. package/components/bar/toolbar/mobile.vue +5 -4
  10. package/components/breadcrumb/index.vue +1 -0
  11. package/components/button/buttonConfirm.vue +1 -1
  12. package/components/button/buttonGroup.vue +1 -0
  13. package/components/button/style.scss +1 -0
  14. package/components/calendar/index.vue +1 -0
  15. package/components/calendar/month.vue +1 -0
  16. package/components/calendar/year.vue +1 -0
  17. package/components/chat/chatInput.vue +1 -0
  18. package/components/chat/chatMsg.vue +1 -0
  19. package/components/chat/index.vue +1 -0
  20. package/components/chip/index.vue +1 -0
  21. package/components/codeEditor/index.vue +0 -2
  22. package/components/confirm/index.vue +1 -0
  23. package/components/countdown/index.vue +1 -0
  24. package/components/float/index.vue +1 -0
  25. package/components/form/address.vue +6 -2
  26. package/components/form/camInput.vue +10 -3
  27. package/components/form/check-input.vue +95 -94
  28. package/components/form/checkbox.vue +1 -1
  29. package/components/form/colorPicker/index.vue +1 -0
  30. package/components/form/colorPicker/picker.vue +1 -0
  31. package/components/form/datePicker/index.vue +349 -348
  32. package/components/form/datePicker/month.vue +1 -0
  33. package/components/form/datePicker/year.vue +1 -0
  34. package/components/form/fileUploader/file.js +21 -3
  35. package/components/form/fileUploader/index.vue +13 -2
  36. package/components/form/fileUploader/single.vue +4 -2
  37. package/components/form/form.vue +1 -0
  38. package/components/form/group-input.vue +42 -38
  39. package/components/form/input.vue +253 -1
  40. package/components/form/inputTel/index.vue +22 -12
  41. package/components/form/json/JsonView.vue +95 -94
  42. package/components/form/json/index.vue +2 -0
  43. package/components/form/mask-input.vue +1 -0
  44. package/components/form/number.vue +25 -12
  45. package/components/form/password.vue +121 -121
  46. package/components/form/radioInput.vue +1 -0
  47. package/components/form/range.vue +26 -1
  48. package/components/form/rating.vue +13 -1
  49. package/components/form/select.vue +67 -4
  50. package/components/form/switch.vue +64 -2
  51. package/components/form/text-area.vue +1 -1
  52. package/components/form/text-editor/index.vue +18 -11
  53. package/components/form/text-input.vue +1 -1
  54. package/components/form/timepicker/index.vue +2 -1
  55. package/components/form/timepicker/range.vue +2 -1
  56. package/components/form/timepicker/timepicker.vue +2 -1
  57. package/components/form/unique/index.vue +3 -1
  58. package/components/form/unit-input.vue +2 -1
  59. package/components/formCreator/index.vue +8 -6
  60. package/components/html2pdf/index.vue +1 -0
  61. package/components/img/index.vue +12 -2
  62. package/components/img/svgImg.vue +43 -0
  63. package/components/infinite/div.vue +2 -1
  64. package/components/infinite/page.vue +24 -23
  65. package/components/list/index.vue +35 -32
  66. package/components/map/index.vue +324 -306
  67. package/components/map/route.vue +1 -0
  68. package/components/map/select.vue +1 -0
  69. package/components/menu/index.vue +1 -0
  70. package/components/modal/index.vue +1 -0
  71. package/components/searchBox/index.vue +5 -3
  72. package/components/slider/index.vue +1 -0
  73. package/components/table/crud/footer.vue +1 -1
  74. package/components/table/crud/header.vue +10 -4
  75. package/components/table/crud/index.vue +463 -458
  76. package/components/tabs/index.vue +1 -0
  77. package/components/tree/index.vue +15 -13
  78. package/components/tree/tree-element.vue +8 -4
  79. package/package.json +1 -1
  80. package/style/colors.scss +1 -1
  81. package/components/form/scss/input.scss +0 -249
  82. package/components/form/scss/rating.scss +0 -9
  83. package/components/form/scss/select.scss +0 -55
  84. package/components/form/scss/switch.scss +0 -68
@@ -13,7 +13,6 @@
13
13
  </template>
14
14
 
15
15
  <script>
16
- import './scss/rating.scss'
17
16
 
18
17
  export default {
19
18
  name: 'r-rating',
@@ -32,6 +31,7 @@ export default {
32
31
  modelValue: Number,
33
32
  readonly: Boolean
34
33
  },
34
+ emits:['update:modelValue'],
35
35
  created(){
36
36
  if(!this.$r.icons.star) {
37
37
  this.$r.icons.star = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.62L12 2L9.19 8.62L2 9.24l5.45 4.73L5.82 21L12 17.27Z"/></svg>'
@@ -44,3 +44,15 @@ export default {
44
44
  }
45
45
  }
46
46
  </script>
47
+ <style lang="scss">
48
+ @import "../../style/include";
49
+
50
+
51
+ .#{$prefix}rating {
52
+ max-width: 100%;
53
+ white-space: nowrap;
54
+ transition: 1s $primary-transition;
55
+ color: var(--color-text-disabled);
56
+ }
57
+
58
+ </style>
@@ -50,6 +50,8 @@
50
50
  :items="genItems"
51
51
  :multiple="multiple"
52
52
  :modelValue="chips"
53
+ :text="text"
54
+ :val="value"
53
55
  @update:modelValue="listInput"
54
56
  checked>
55
57
  <template v-slot="props">
@@ -70,7 +72,6 @@
70
72
  </div>
71
73
  </template>
72
74
  <script>
73
- import './scss/select.scss'
74
75
 
75
76
  export default {
76
77
  name: 'r-select',
@@ -99,8 +100,10 @@ export default {
99
100
  justValue: Boolean,
100
101
  openToTop: Boolean,
101
102
  translate: Boolean,
102
- firstSelect: Boolean
103
+ firstSelect: Boolean,
104
+ headers: Object
103
105
  },
106
+ emits:['update:modelValue','del'],
104
107
  data() {
105
108
  return {
106
109
  apiData: [],
@@ -170,7 +173,8 @@ export default {
170
173
  return this.$axios.get(this.searchLink, {
171
174
  params: {
172
175
  s: (this.inputVal === null ? '' : this.inputVal)
173
- }
176
+ },
177
+ headers: this.headers
174
178
  }).then(({data}) => {
175
179
  this.apiData = data
176
180
  this.loading = false
@@ -221,6 +225,7 @@ export default {
221
225
  handleClick() {
222
226
  if (this.$refs.input) {
223
227
  this.$refs.input.focus()
228
+ this.$refs.input.scrollIntoView()
224
229
  } else {
225
230
  this.focusInput(true)
226
231
  }
@@ -266,7 +271,7 @@ export default {
266
271
  val = null
267
272
  }
268
273
 
269
- this.$emit('update:model-value', val)
274
+ this.$emit('update:modelValue', val)
270
275
 
271
276
  },
272
277
  focusInput(val) {
@@ -302,3 +307,61 @@ export default {
302
307
  }
303
308
 
304
309
  </script>
310
+ <style lang="scss">
311
+ @import "../../style/include";
312
+ $min-height:40px;
313
+ .#{$prefix}select-container {
314
+ position: relative;
315
+ .input-control {
316
+ min-height: $min-height;
317
+ height: auto;
318
+ flex-direction: row;
319
+ align-items: center;
320
+ display: flex;
321
+ flex: 1 1;
322
+ flex-wrap: wrap;
323
+ line-height: 24px;
324
+ max-width: 100%;
325
+ min-width: 0;
326
+ }
327
+
328
+ .select-wrap {
329
+ max-width: 100%;
330
+ display: flex;
331
+ flex: 1 1 auto;
332
+ flex-wrap: wrap;
333
+ }
334
+
335
+ input {
336
+ flex: 1 1;
337
+ margin-top: 0;
338
+ min-width: 140px;
339
+ position: relative;
340
+ }
341
+
342
+ .#{$prefix}chip {
343
+ flex: 0 1 auto;
344
+ margin: 4px;
345
+ }
346
+
347
+ .card-select {
348
+ max-height: 0;
349
+ overflow: auto;
350
+ opacity: .5;
351
+ transition: all .3s $primary-transition;
352
+ position: absolute;
353
+ left: 0;
354
+ z-index: map_get($z-index, 'default');
355
+ }
356
+ .to-top{
357
+ bottom: $min-height+2px;
358
+ }
359
+
360
+ .card-select-active {
361
+ transition: all 0.3s $primary-transition;
362
+ max-height: 300px;
363
+ opacity: 1;
364
+ }
365
+ }
366
+
367
+ </style>
@@ -20,7 +20,6 @@
20
20
  </r-input>
21
21
  </template>
22
22
  <script>
23
- import './scss/switch.scss'
24
23
 
25
24
  export default {
26
25
  name: 'r-switch',
@@ -32,7 +31,7 @@
32
31
  type: [Boolean, String]
33
32
  }
34
33
  },
35
-
34
+ emits:['update:modelValue','change'],
36
35
  data() {
37
36
  return {
38
37
  lazyValue: this.modelValue || false
@@ -62,3 +61,66 @@
62
61
  }
63
62
 
64
63
  </script>
64
+ <style lang="scss">
65
+ @import "renusify/style/_include.scss";
66
+
67
+ .#{$prefix}switch {
68
+
69
+ .switch-container {
70
+ display: flex;
71
+ flex-direction: row;
72
+ align-items: center;
73
+ height: 30px;
74
+ }
75
+
76
+ .switch-holder {
77
+ width: 45px;
78
+ height: 13px;
79
+ position: relative;
80
+ display: flex;
81
+ flex-direction: row;
82
+ align-items: center;
83
+ cursor: pointer;
84
+ }
85
+
86
+ .switch-line {
87
+ width: 100%;
88
+ height: 100%;
89
+ border-radius: 10px;
90
+ background-color: var(--color-disabled);
91
+ }
92
+
93
+ .switch-dot {
94
+ position: absolute;
95
+ width: 20px;
96
+ height: 20px;
97
+ border-radius: 50%;
98
+ background-color: #cdcbcb;
99
+ transition: .3s map_get($transition,'fast-in-fast-out');
100
+ @include rtl() {
101
+ right: 0;
102
+ }
103
+ @include ltr() {
104
+ left: 0;
105
+ }
106
+ }
107
+
108
+ .switch-active {
109
+ .switch-line {
110
+ background-color: currentColor;
111
+ opacity: 0.5;
112
+ }
113
+
114
+ .switch-dot {
115
+ background-color: currentColor;
116
+ @include rtl() {
117
+ right: 25px;
118
+ }
119
+ @include ltr() {
120
+ left: 25px;
121
+ }
122
+ }
123
+ }
124
+
125
+ }
126
+ </style>
@@ -31,7 +31,7 @@ export default {
31
31
  default: '7'
32
32
  }
33
33
  },
34
-
34
+ emits:['update:modelValue'],
35
35
  data() {
36
36
  return {
37
37
  lazyValue: this.modelValue,
@@ -37,6 +37,8 @@
37
37
  <r-select-input :label="$t('class','renusify')" :model-value="[...selectElm.classList]"
38
38
  multiple
39
39
  tags
40
+ disableSearch
41
+ justValue
40
42
  @update:model-value="addClass"></r-select-input>
41
43
  </r-col>
42
44
  <r-col class="col-12 ltr">
@@ -117,6 +119,7 @@
117
119
  <r-file-input v-model="image"
118
120
  :label="$t('image','renusify')"
119
121
  :size="1"
122
+ :headers="headers"
120
123
  :upload-link="uploadLink"
121
124
  accept="image/*"></r-file-input>
122
125
  <r-text-input v-model="img_alt"
@@ -152,6 +155,7 @@
152
155
  <r-file-input v-model="video"
153
156
  :label="$t('video','renusify')"
154
157
  :size="1"
158
+ :headers="headers"
155
159
  :upload-link="uploadLink"
156
160
  accept="video/mp4,video/webm"></r-file-input>
157
161
  <r-number-input v-model="img_width" :label="$t('width','renusify')"
@@ -181,22 +185,24 @@
181
185
  </template>
182
186
 
183
187
  <script>
184
- import './style.scss'
188
+ import './style.scss'
185
189
 
186
- export default {
190
+ export default {
187
191
  name: 'r-text-editor',
188
192
  inheritAttrs: false,
189
193
  props: {
190
- uploadLink: {type: String, default: '/storage'},
191
- modelValue: {
192
- type: [Object, String], default: () => {
193
- return {
194
- text: '',
195
- files: []
196
- }
197
- }
194
+ uploadLink: {type: String, default: '/storage'},
195
+ modelValue: {
196
+ type: [Object, String], default: () => {
197
+ return {
198
+ text: '',
199
+ files: []
200
+ }
198
201
  }
202
+ },
203
+ headers: Object
199
204
  },
205
+ emits:['update:modelValue'],
200
206
  data() {
201
207
  return {
202
208
  id: 'text_editor_' + this.$helper.uniqueId(12),
@@ -393,7 +399,8 @@
393
399
  deleteImage(img, i) {
394
400
  this.$axios.delete(this.uploadLink,
395
401
  {
396
- data: {link: img}
402
+ data: {link: img},
403
+ headers: this.headers
397
404
  }
398
405
  ).then(() => {
399
406
  this.files.splice(i, 1)
@@ -25,7 +25,7 @@ export default {
25
25
  modelValue: [String, Number],
26
26
  autofocus: Boolean,
27
27
  },
28
-
28
+ emits:['update:modelValue'],
29
29
  data () {
30
30
  return {
31
31
  lazyValue: this.modelValue,
@@ -68,6 +68,7 @@ export default {
68
68
  noOverlay: Boolean,
69
69
  modelValue: String
70
70
  },
71
+ emits:['update:modelValue'],
71
72
  data() {
72
73
  return {
73
74
  active: false,
@@ -82,7 +83,7 @@ export default {
82
83
  },
83
84
  methods: {
84
85
  emit() {
85
- this.$emit("update:model-value", this.lazyValue);
86
+ this.$emit("update:modelValue", this.lazyValue);
86
87
  }
87
88
  }
88
89
  };
@@ -75,6 +75,7 @@ export default {
75
75
  noOverlay: Boolean,
76
76
  modelValue: Array
77
77
  },
78
+ emits:['update:modelValue'],
78
79
  data() {
79
80
  return {
80
81
  state: 'from',
@@ -151,7 +152,7 @@ export default {
151
152
 
152
153
  },
153
154
  emit() {
154
- this.$emit("update:model-value", this.lazyValue);
155
+ this.$emit("update:modelValue", this.lazyValue);
155
156
  }
156
157
  }
157
158
  };
@@ -89,6 +89,7 @@ export default {
89
89
  is24Hour: Boolean,
90
90
  modelValue: String
91
91
  },
92
+ emits:['update:modelValue','finish'],
92
93
  data() {
93
94
  return {
94
95
  show: this.is24Hour ? "hours24" : "hours12",
@@ -307,7 +308,7 @@ export default {
307
308
  if (!this.is24Hour) {
308
309
  n += " " + this.meridiem;
309
310
  }
310
- this.$emit("update:model-value", n);
311
+ this.$emit("update:modelValue", n);
311
312
  if ((min !== null && !this.withSec) || sec !== null) {
312
313
  this.$emit("finish", true);
313
314
  }
@@ -22,7 +22,9 @@ export default {
22
22
  default: null,
23
23
  type: String
24
24
  },
25
+ headers: Object
25
26
  },
27
+ emits:['update:modelValue'],
26
28
  data() {
27
29
  return {
28
30
  item: null,
@@ -40,7 +42,7 @@ export default {
40
42
  if (this.item) {
41
43
  this.$axios.post(this.link, {
42
44
  'unique_name': this.item
43
- })
45
+ }, {headers: this.headers})
44
46
  .then((res) => {
45
47
  if (res.data) {
46
48
  this.color = 'color-success-text'
@@ -18,6 +18,7 @@
18
18
  <r-select-input :readonly="disableUnit" :items="units" v-model="unit"
19
19
  @update:model-value="emit" hide justValue :translate="translate"
20
20
  class="mt-0"
21
+ disableSearch
21
22
  firstSelect></r-select-input>
22
23
  </div>
23
24
  </r-input>
@@ -47,7 +48,7 @@ export default {
47
48
  autofocus: Boolean,
48
49
  translate: Boolean
49
50
  },
50
-
51
+ emits:['update:modelValue'],
51
52
  data() {
52
53
  return {
53
54
  lazyValue: this.modelValue.value,
@@ -1,7 +1,6 @@
1
1
  <template>
2
2
  <r-card v-if="!autoSend" class="overflow-auto">
3
3
  <r-container>
4
- <r-message :items="errors" type="error"></r-message>
5
4
  <h1 class="title">{{ title }}</h1>
6
5
  <r-form ref="form" v-model="valid" @submit.prevent="save">
7
6
  <r-row>
@@ -16,7 +15,8 @@
16
15
  </r-col>
17
16
  </template>
18
17
  </r-row>
19
- <r-row class="h-end my-12">
18
+ <r-message :items="errors" type="error"></r-message>
19
+ <div class="text-end my-12">
20
20
  <r-btn @click.prevent="close"
21
21
  class="color-error-text mx-1"
22
22
  outlined
@@ -29,7 +29,7 @@
29
29
  rounded>
30
30
  {{ $t('send', 'renusify') }}
31
31
  </r-btn>
32
- </r-row>
32
+ </div>
33
33
  </r-form>
34
34
  </r-container>
35
35
  </r-card>
@@ -64,8 +64,10 @@ export default {
64
64
  return {}
65
65
  },
66
66
  type: Object
67
- }
67
+ },
68
+ headers: Object
68
69
  },
70
+ emits:['update:modelValue','ok'],
69
71
  data() {
70
72
  return {
71
73
  loading: false,
@@ -91,7 +93,7 @@ export default {
91
93
  editedItem: {
92
94
  deep: true,
93
95
  handler: function (n) {
94
- this.$emit('update:model-value', n)
96
+ this.$emit('update:modelValue', n)
95
97
  }
96
98
  }
97
99
  },
@@ -180,7 +182,7 @@ export default {
180
182
  return
181
183
  }
182
184
  this.loading = true
183
- this.$axios[this.method](this.url, this.editedItem)
185
+ this.$axios[this.method](this.url, this.editedItem, {headers: this.headers})
184
186
  .then(() => {
185
187
  this.close()
186
188
  }, (error) => {
@@ -60,6 +60,7 @@
60
60
  beforeClass: String,
61
61
  afterClass: String
62
62
  },
63
+ emits:['progress','has-downloaded','before-download'],
63
64
  data() {
64
65
  return {
65
66
  show: true,
@@ -14,12 +14,17 @@
14
14
  }"
15
15
  >{{ alt }}
16
16
  </div>
17
- <img v-if="load" ref="img" :src="link" :alt="alt" draggable="false" :width="size.width" :height="size.height"/>
17
+ <img v-if="load &&!isSvg" ref="img" :src="link" :alt="alt" draggable="false" :width="size.width"
18
+ :height="size.height"/>
19
+ <svg-img v-else-if="load &&isSvg&&link" :link="link" :size="size">
20
+ </svg-img>
18
21
  </div>
19
22
  </template>
20
23
  <script>
24
+ import SvgImg from "./svgImg";
21
25
  export default {
22
26
  name: 'r-img',
27
+ components: {SvgImg},
23
28
  props: {
24
29
  src: {
25
30
  type: String,
@@ -53,6 +58,8 @@ export default {
53
58
  titleVs: Boolean,
54
59
  titleVc: Boolean,
55
60
  titleVe: Boolean,
61
+ isSvg: Boolean,
62
+ svgCache: {type: Number, default: 86400},
56
63
  wPH: {
57
64
  type: Number,
58
65
  default: 1
@@ -85,7 +92,10 @@ export default {
85
92
  if (this.query) {
86
93
  res += this.query
87
94
  }
88
- if ((this.autoSize && this.size.width > 0) || this.width) {
95
+ if (this.isSvg && this.svgCache) {
96
+ res += 'c=' + this.svgCache
97
+ }
98
+ if (!this.isSvg && ((this.autoSize && this.size.width > 0) || this.width)) {
89
99
  res += `&w=${this.size.width}&h=${this.size.height}`
90
100
  }
91
101
  return res
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <span ref="img"></span>
3
+ </template>
4
+ <script>
5
+ export default {
6
+ name: "svgImg",
7
+ props: {
8
+ link: String,
9
+ size: Object
10
+ },
11
+ created() {
12
+ this.ImgToSvg()
13
+ },
14
+ methods: {
15
+ replace(svg) {
16
+ if (!this.$refs.img) {
17
+ setTimeout(() => {
18
+ this.replace(svg)
19
+ }, 10)
20
+ return
21
+ }
22
+ this.$refs.img.replaceWith(svg)
23
+ },
24
+ ImgToSvg() {
25
+ const that = this
26
+ fetch(this.link).then(x => {
27
+ x.text().then((d) => {
28
+ const el = document.createElement('div')
29
+ el.innerHTML = d
30
+ let svg = el.querySelector('svg')
31
+ svg.setAttribute('width', that.size.width + 'px')
32
+ svg.setAttribute('height', that.size.height + 'px')
33
+ that.replace(svg)
34
+ })
35
+ })
36
+ }
37
+ }
38
+ }
39
+ </script>
40
+
41
+ <style lang="scss">
42
+ @import "~renusify/style/include";
43
+ </style>
@@ -50,6 +50,7 @@ export default {
50
50
  default: 10000,
51
51
  type: Number
52
52
  },
53
+ headers: Object
53
54
  },
54
55
  data() {
55
56
  return {
@@ -110,7 +111,7 @@ export default {
110
111
  Object.assign(par, this.query)
111
112
 
112
113
  }
113
- this.$axios.get(this.url, {params: par}).then(
114
+ this.$axios.get(this.url, {params: par, headers: this.headers}).then(
114
115
  (res) => {
115
116
  this.push(res.data.data, end)
116
117
  this.total = res.data.total
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="infinite-page">
3
3
  <div class="infinite-page-container" v-scroll="onScroll">
4
- <slot :items="datacollection"></slot>
4
+ <slot :items="datacollection" :total="total"></slot>
5
5
  </div>
6
6
  <r-progress-line color="color-two"
7
7
  v-show="loading"
@@ -23,17 +23,18 @@ export default {
23
23
  required: true,
24
24
  type: String
25
25
  },
26
- query: {
27
- type: Object
28
- },
29
- noItemMsg: {
30
- type: String,
31
- default: 'ITEMS NOT FOUND'
32
- },
33
- distanceLoad: {
34
- type: Number,
35
- default: 150
36
- }
26
+ query: {
27
+ type: Object
28
+ },
29
+ noItemMsg: {
30
+ type: String,
31
+ default: 'ITEMS NOT FOUND'
32
+ },
33
+ distanceLoad: {
34
+ type: Number,
35
+ default: 150
36
+ },
37
+ headers: Object
37
38
  },
38
39
  data() {
39
40
  return {
@@ -75,17 +76,17 @@ export default {
75
76
  if (typeof this.query==='object') {
76
77
  Object.assign(par,{},this.query)
77
78
  }
78
- this.$axios.get(this.url,{params:par}).then(
79
- (res) => {
80
- this.push(res.data.data)
81
- this.total = res.data.total
82
- if (this.total === 0) {
83
- this.noItem = true
84
- }
85
- this.loading = false
86
- }, () => {
87
- this.loading = false
88
- })
79
+ this.$axios.get(this.url, {params: par, headers: this.headers}).then(
80
+ (res) => {
81
+ this.push(res.data.data)
82
+ this.total = res.data.total
83
+ if (this.total === 0) {
84
+ this.noItem = true
85
+ }
86
+ this.loading = false
87
+ }, () => {
88
+ this.loading = false
89
+ })
89
90
  },
90
91
  push(data) {
91
92
  const lng=data.length