@mixd-id/web-scaffold 0.2.240702 → 0.2.240703
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/docs/schema/user-action.json +266 -0
- package/package.json +6 -2
- package/public/assets/dashboard/bar.png +0 -0
- package/public/assets/dashboard/doughnut.png +0 -0
- package/public/assets/dashboard/metric.png +0 -0
- package/public/assets/dashboard/pie.png +0 -0
- package/public/assets/dashboard/polar-area.png +0 -0
- package/public/assets/dashboard/virtual-table.png +0 -0
- package/public/static/dashboard/bar.png +0 -0
- package/public/static/dashboard/doughnut.png +0 -0
- package/public/static/dashboard/metric.png +0 -0
- package/public/static/dashboard/pie.png +0 -0
- package/public/static/dashboard/polar-area.png +0 -0
- package/public/static/dashboard/virtual-table.png +0 -0
- package/src/components/Button.vue +179 -160
- package/src/components/Checkbox.vue +0 -1
- package/src/components/Datepicker.vue +8 -6
- package/src/components/GHeatMaps.vue +317 -0
- package/src/components/GmapsDirection.vue +191 -0
- package/src/components/Grid.vue +2 -0
- package/src/components/HTMLEditor.vue +2 -2
- package/src/components/List.vue +384 -308
- package/src/components/Modal.vue +2 -3
- package/src/components/PresetSelectorFilterItem.vue +15 -2
- package/src/components/Switch.vue +3 -0
- package/src/components/Tabs.vue +1 -1
- package/src/components/TextWithTag.vue +67 -25
- package/src/components/Textbox.vue +5 -0
- package/src/components/VirtualGrid.vue +224 -228
- package/src/components/VirtualTable.vue +46 -28
- package/src/configs/dashboard/bar.js +10 -0
- package/src/configs/dashboard/collection-1.js +5 -0
- package/src/configs/dashboard/doughnut.js +7 -0
- package/src/configs/dashboard/gheatmaps.js +9 -0
- package/src/configs/dashboard/grid-2.js +34 -0
- package/src/configs/dashboard/grid-3.js +34 -0
- package/src/configs/dashboard/grid-4.js +34 -0
- package/src/configs/dashboard/grid.js +15 -0
- package/src/configs/dashboard/metric.js +10 -0
- package/src/configs/dashboard/pie.js +7 -0
- package/src/configs/dashboard/polar-area.js +7 -0
- package/src/configs/dashboard/virtual-table.js +9 -0
- package/src/defs/dashboard-preset.js +22 -0
- package/src/index.js +35 -23
- package/src/mixin/ready-state.js +37 -0
- package/src/stores/datasource.js +11 -0
- package/src/themes/default/index.js +1 -1
- package/src/utils/dashboard.js +1080 -0
- package/src/utils/event-bus.js +8 -0
- package/src/utils/helpers.js +56 -8
- package/src/utils/helpers.mjs +35 -1
- package/src/utils/preset-selector.js +5 -2
- package/src/utils/preset-selector.mjs +23 -13
- package/src/widgets/Dashboard/BarChart.vue +330 -0
- package/src/widgets/Dashboard/BarChartSetting.vue +317 -0
- package/src/widgets/Dashboard/DatasourceFilterSharing.vue +93 -0
- package/src/widgets/Dashboard/DatasourcePreview.vue +93 -0
- package/src/widgets/Dashboard/DatasourceSelector.vue +122 -0
- package/src/widgets/Dashboard/Doughnut.vue +157 -0
- package/src/widgets/Dashboard/DoughnutSetting.vue +196 -0
- package/src/widgets/Dashboard/GHeatMapsSetting.vue +108 -0
- package/src/widgets/Dashboard/InteractionEdit.vue +228 -0
- package/src/widgets/Dashboard/Metric.vue +76 -0
- package/src/widgets/Dashboard/MetricSetting.vue +174 -0
- package/src/widgets/Dashboard/Pie.vue +139 -0
- package/src/widgets/Dashboard/PieSetting.vue +247 -0
- package/src/widgets/Dashboard/PolarArea.vue +159 -0
- package/src/widgets/Dashboard/PolarAreaSetting.vue +195 -0
- package/src/widgets/Dashboard/SharingModal.vue +116 -0
- package/src/widgets/Dashboard/ViewSelector.vue +183 -0
- package/src/widgets/Dashboard/VirtualColumnEdit.vue +97 -0
- package/src/widgets/Dashboard/VirtualTableSetting.vue +234 -0
- package/src/widgets/Dashboard.vue +1773 -0
- package/src/widgets/PresetBar.vue +136 -175
- package/src/widgets/PresetBarPivot.vue +186 -0
- package/src/widgets/UserActionBuilder/UserActionCondition.vue +97 -0
- package/src/widgets/UserActionBuilder/UserActionConsole.vue +77 -0
- package/src/widgets/UserActionBuilder/UserActionItem.vue +163 -58
- package/src/widgets/UserActionBuilder/UserActionOutput.vue +35 -9
- package/src/widgets/UserActionBuilder/UserActionOutputDelay.vue +27 -0
- package/src/widgets/UserActionBuilder/UserActionOutputLog.vue +28 -0
- package/src/widgets/UserActionBuilder/UserActionOutputReply.vue +135 -0
- package/src/widgets/UserActionBuilder/UserActionProps.vue +211 -0
- package/src/widgets/UserActionBuilder.vue +68 -199
- package/src/widgets/WebPageBuilder4/GridSetting.vue +123 -73
- package/src/widgets/WebPageBuilder4/HeightSetting.vue +14 -11
- package/src/widgets/WebPageBuilder4/MarginSetting.vue +4 -1
- package/src/widgets/WebPageBuilder4/MultiValueSetting.vue +12 -4
- package/src/widgets/WebPageBuilder4/PaddingSetting.vue +4 -0
- package/src/widgets/WebPageBuilder4/TreeView.vue +6 -3
- package/src/widgets/WebPageBuilder4/TreeViewItem.vue +32 -58
- package/tailwind.config.js +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="$style.comp">
|
|
3
|
+
|
|
3
4
|
<div :class="$style.header" v-if="visibleColumns.length > 0">
|
|
4
5
|
<table :class="$style.table" ref="tableHead" :style="tableHeadStyle">
|
|
5
6
|
<thead>
|
|
@@ -7,7 +8,6 @@
|
|
|
7
8
|
<th v-for="column in visibleColumns" :style="thStyle(column)" :class="thClass(column)"
|
|
8
9
|
v-tooltip="column.tooltip">
|
|
9
10
|
<slot v-if="$slots['col-' + column.key]" :name="'col-' + column.key" :column="column"></slot>
|
|
10
|
-
<slot v-else-if="$slots['col-default']" name="col-default" :column="column"></slot>
|
|
11
11
|
<div v-else :class="headerColumnClass(column)">
|
|
12
12
|
<span>{{ column.label2 ? column.label2 : (column.label ?? column.key) }}</span>
|
|
13
13
|
</div>
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
<div :class="$style.spacer" ref="spacer" :style="spacerStyle">
|
|
28
28
|
<table :class="$style.table">
|
|
29
29
|
<thead>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
<tr>
|
|
31
|
+
<th v-for="column in visibleColumns" :style="thStyle(column)"></th>
|
|
32
|
+
<th :class="$style.spacer"></th>
|
|
33
|
+
</tr>
|
|
34
34
|
</thead>
|
|
35
35
|
<tbody ref="tbody">
|
|
36
36
|
<tr v-for="(item, index) in visibleItems" :key="item"
|
|
@@ -57,23 +57,24 @@
|
|
|
57
57
|
<svg class="animate-spin aspect-square w-[16px] h-[16px] text-primary" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
|
+
<slot name="end"></slot>
|
|
60
61
|
</div>
|
|
61
62
|
</div>
|
|
62
63
|
<div v-else-if="visibleColumns.length <= 0 && Array.isArray(columns)" class="text-center p-3 flex-1 min-h-[100%] flex items-center justify-center">
|
|
63
64
|
<h5 class="text-text-300">No active column</h5>
|
|
64
65
|
</div>
|
|
65
|
-
<div v-else-if="Array.isArray(
|
|
66
|
+
<div v-else-if="Array.isArray(cItems) && cItems.length <= 0" class="text-center p-3 flex-1 min-h-[100%] flex items-center justify-center">
|
|
66
67
|
<h5 class="text-text-300">No data available</h5>
|
|
67
68
|
</div>
|
|
68
69
|
|
|
69
|
-
<div :class="$style.calc" v-if="visibleColumns.length > 0 &&
|
|
70
|
+
<div :class="$style.calc" v-if="visibleColumns.length > 0 && cItems && cItems.length > 0" ref="calc">
|
|
70
71
|
<table :class="$style.table">
|
|
71
72
|
<tbody>
|
|
72
73
|
<tr>
|
|
73
|
-
<td v-for="column in
|
|
74
|
-
<slot v-if="$slots[column.key]" :name="column.key" :column="column" :item="
|
|
75
|
-
<slot v-else-if="$slots.default" name="default" :column="column" :item="
|
|
76
|
-
<div v-else :class="columnClass(column)" v-html="formatColumn(
|
|
74
|
+
<td v-for="column in cColumns" :style="thStyle(column)" :class="thClass(column)">
|
|
75
|
+
<slot v-if="$slots[column.key]" :name="column.key" :column="column" :item="cItems[0]"></slot>
|
|
76
|
+
<slot v-else-if="$slots.default" name="default" :column="column" :item="cItems[0]"></slot>
|
|
77
|
+
<div v-else :class="columnClass(column)" v-html="formatColumn(cItems[0] ?? {}, column)"></div>
|
|
77
78
|
</td>
|
|
78
79
|
<td :class="$style.spacer"></td>
|
|
79
80
|
</tr>
|
|
@@ -94,22 +95,27 @@ const _DEFAULT_COLUMN_WIDTH = '100px'
|
|
|
94
95
|
|
|
95
96
|
export default{
|
|
96
97
|
|
|
97
|
-
inject: [ 'listStyle' ],
|
|
98
|
+
inject: [ 'emitRoot', 'listStyle' ],
|
|
98
99
|
|
|
99
100
|
emits: [ 'scroll-end', 'item-click' ],
|
|
100
101
|
|
|
101
102
|
props:{
|
|
102
|
-
|
|
103
103
|
columns: Array,
|
|
104
104
|
|
|
105
105
|
enumCache: Object,
|
|
106
106
|
|
|
107
107
|
itemClass: String,
|
|
108
108
|
|
|
109
|
+
uid: String,
|
|
110
|
+
|
|
109
111
|
items: Array,
|
|
110
112
|
|
|
111
113
|
pinned: Function,
|
|
112
114
|
|
|
115
|
+
datasourceColumns: Array,
|
|
116
|
+
|
|
117
|
+
datasourceUid: String,
|
|
118
|
+
|
|
113
119
|
defaultColumnWidth: {
|
|
114
120
|
type: String,
|
|
115
121
|
default: _DEFAULT_COLUMN_WIDTH
|
|
@@ -120,6 +126,9 @@ export default{
|
|
|
120
126
|
default: {}
|
|
121
127
|
},
|
|
122
128
|
|
|
129
|
+
type: String,
|
|
130
|
+
|
|
131
|
+
value: Object,
|
|
123
132
|
},
|
|
124
133
|
|
|
125
134
|
data(){
|
|
@@ -136,17 +145,25 @@ export default{
|
|
|
136
145
|
|
|
137
146
|
computed:{
|
|
138
147
|
|
|
148
|
+
cColumns(){
|
|
149
|
+
return this.datasourceColumns ?? this.columns
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
cItems(){
|
|
153
|
+
return this.value?.items ?? this.items
|
|
154
|
+
},
|
|
155
|
+
|
|
139
156
|
visibleStartIndex(){
|
|
140
157
|
return Math.floor((this.scrollTop < 0 ? 0 : this.scrollTop) / this.itemHeight)
|
|
141
158
|
},
|
|
142
159
|
|
|
143
160
|
sortedItems(){
|
|
144
|
-
if(!Array.isArray(this.
|
|
161
|
+
if(!Array.isArray(this.cItems)) return []
|
|
145
162
|
|
|
146
163
|
if(typeof this.pinned === 'function'){
|
|
147
164
|
const pinnedItems = []
|
|
148
165
|
const unpinnedItems = []
|
|
149
|
-
this.
|
|
166
|
+
this.cItems.forEach((item) => {
|
|
150
167
|
if(this.pinned(item))
|
|
151
168
|
pinnedItems.push(item)
|
|
152
169
|
else
|
|
@@ -158,7 +175,7 @@ export default{
|
|
|
158
175
|
...unpinnedItems
|
|
159
176
|
]
|
|
160
177
|
}
|
|
161
|
-
return this.
|
|
178
|
+
return this.cItems
|
|
162
179
|
},
|
|
163
180
|
|
|
164
181
|
visibleItems(){
|
|
@@ -173,10 +190,10 @@ export default{
|
|
|
173
190
|
},
|
|
174
191
|
|
|
175
192
|
scrollerStyle(){
|
|
176
|
-
if(!this.
|
|
193
|
+
if(!this.cItems || this.cItems.length < 1)
|
|
177
194
|
return {}
|
|
178
195
|
|
|
179
|
-
const height = (this.
|
|
196
|
+
const height = (this.cItems.length * this.itemHeight) + (this.state === 2 ? 48 : 0)
|
|
180
197
|
const width = this.visibleColumns.reduce((r, item) => r + parseInt(item.width ?? _DEFAULT_COLUMN_WIDTH), 0)
|
|
181
198
|
|
|
182
199
|
return {
|
|
@@ -192,7 +209,7 @@ export default{
|
|
|
192
209
|
},
|
|
193
210
|
|
|
194
211
|
visibleColumns(){
|
|
195
|
-
return (this.
|
|
212
|
+
return (this.cColumns ?? []).filter(_ => !('visible' in _) || _.visible)
|
|
196
213
|
},
|
|
197
214
|
|
|
198
215
|
visibleColumnKeys(){
|
|
@@ -272,11 +289,10 @@ export default{
|
|
|
272
289
|
window.getComputedStyle(this.$el).height :
|
|
273
290
|
window.getComputedStyle(this.$el).maxHeight)
|
|
274
291
|
this.itemHeight = Math.ceil(parseFloat(window.getComputedStyle(this.$refs.calc).height))
|
|
275
|
-
this.maxVisibleItems = elHeight > 0 ? Math.ceil(elHeight / this.itemHeight) + 1 : this.
|
|
292
|
+
this.maxVisibleItems = elHeight > 0 ? Math.ceil(elHeight / this.itemHeight) + 1 : this.cItems.length
|
|
276
293
|
|
|
277
|
-
this.log(this.itemHeight)
|
|
278
294
|
if(this.itemHeight <= 0 && import.meta.env.DEV){
|
|
279
|
-
|
|
295
|
+
console.error('[VirtualTable] Unable to calculate item height, make sure not async component.')
|
|
280
296
|
}
|
|
281
297
|
}
|
|
282
298
|
})
|
|
@@ -292,6 +308,8 @@ export default{
|
|
|
292
308
|
if(this.scrollTop > this.$refs.scroller.offsetHeight - this.$refs.cont.clientHeight - this.itemHeight){
|
|
293
309
|
if(!this.isOnEndScroll){
|
|
294
310
|
this.$emit('scroll-end')
|
|
311
|
+
if(typeof this.emitRoot === 'function')
|
|
312
|
+
this.emitRoot.apply(this, [ 'scroll-end', this.$props ])
|
|
295
313
|
this.isOnEndScroll = true
|
|
296
314
|
}
|
|
297
315
|
}
|
|
@@ -322,7 +340,7 @@ export default{
|
|
|
322
340
|
|
|
323
341
|
startResize(e, column){
|
|
324
342
|
|
|
325
|
-
const idx = this.
|
|
343
|
+
const idx = this.cColumns.findIndex((_) => _ === column)
|
|
326
344
|
let x1 = e.touches ? e.touches[0].clientX : e.clientX
|
|
327
345
|
|
|
328
346
|
const onMouseMove = (e) => {
|
|
@@ -330,9 +348,9 @@ export default{
|
|
|
330
348
|
const d = x2 - x1
|
|
331
349
|
x1 = x2
|
|
332
350
|
|
|
333
|
-
let width = parseInt(this.
|
|
351
|
+
let width = parseInt(this.cColumns[idx].width ?? _DEFAULT_COLUMN_WIDTH) + d
|
|
334
352
|
if(width < 20) width = 20
|
|
335
|
-
this.
|
|
353
|
+
this.cColumns[idx].width = width
|
|
336
354
|
}
|
|
337
355
|
|
|
338
356
|
const onMouseUp = (e) => {
|
|
@@ -547,8 +565,8 @@ export default{
|
|
|
547
565
|
enumText = typeParam && typeParam.text ? typeParam.text : enumText
|
|
548
566
|
}
|
|
549
567
|
|
|
550
|
-
if(this.enumCache && this.enumCache[column.key] && this.enumCache[column.key][value]){
|
|
551
|
-
enumText = this.enumCache[column.key][value].text ?? enumText
|
|
568
|
+
else if(this.enumCache && this.enumCache[column.key] && this.enumCache[column.key][value?.toString()]){
|
|
569
|
+
enumText = this.enumCache[column.key][value?.toString()].text ?? enumText
|
|
552
570
|
}
|
|
553
571
|
|
|
554
572
|
text = enumText ? enumText : text
|
|
@@ -566,7 +584,7 @@ export default{
|
|
|
566
584
|
|
|
567
585
|
watch: {
|
|
568
586
|
|
|
569
|
-
|
|
587
|
+
cItems: {
|
|
570
588
|
deep: true,
|
|
571
589
|
handler(to, from){
|
|
572
590
|
if((to ?? []).length !== (from ?? []).length){
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const component = {
|
|
2
|
+
|
|
3
|
+
type:'Grid',
|
|
4
|
+
|
|
5
|
+
isContainer:true,
|
|
6
|
+
|
|
7
|
+
openOnAdd:false,
|
|
8
|
+
|
|
9
|
+
props:{
|
|
10
|
+
|
|
11
|
+
columns:[
|
|
12
|
+
'grid-cols-1',
|
|
13
|
+
'md:grid-cols-2',
|
|
14
|
+
'',
|
|
15
|
+
''
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
gap:[
|
|
19
|
+
'gap-5',
|
|
20
|
+
'md:gap-5',
|
|
21
|
+
'',
|
|
22
|
+
''
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
alignItems:[
|
|
26
|
+
'items-start',
|
|
27
|
+
'md:items-start',
|
|
28
|
+
'',
|
|
29
|
+
''
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const component = {
|
|
2
|
+
|
|
3
|
+
type:'Grid',
|
|
4
|
+
|
|
5
|
+
isContainer:true,
|
|
6
|
+
|
|
7
|
+
openOnAdd:false,
|
|
8
|
+
|
|
9
|
+
props:{
|
|
10
|
+
|
|
11
|
+
columns:[
|
|
12
|
+
'grid-cols-1',
|
|
13
|
+
'md:grid-cols-3',
|
|
14
|
+
'',
|
|
15
|
+
''
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
gap:[
|
|
19
|
+
'gap-5',
|
|
20
|
+
'md:gap-5',
|
|
21
|
+
'',
|
|
22
|
+
''
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
alignItems:[
|
|
26
|
+
'items-start',
|
|
27
|
+
'md:items-start',
|
|
28
|
+
'',
|
|
29
|
+
''
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const component = {
|
|
2
|
+
|
|
3
|
+
type:'Grid',
|
|
4
|
+
|
|
5
|
+
isContainer:true,
|
|
6
|
+
|
|
7
|
+
openOnAdd:false,
|
|
8
|
+
|
|
9
|
+
props:{
|
|
10
|
+
|
|
11
|
+
columns:[
|
|
12
|
+
'grid-cols-2',
|
|
13
|
+
'md:grid-cols-4',
|
|
14
|
+
'',
|
|
15
|
+
''
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
gap:[
|
|
19
|
+
'gap-5',
|
|
20
|
+
'md:gap-5',
|
|
21
|
+
'',
|
|
22
|
+
''
|
|
23
|
+
],
|
|
24
|
+
|
|
25
|
+
alignItems:[
|
|
26
|
+
'items-start',
|
|
27
|
+
'md:items-start',
|
|
28
|
+
'',
|
|
29
|
+
''
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const component = {
|
|
2
|
+
|
|
3
|
+
type:'Grid',
|
|
4
|
+
|
|
5
|
+
isContainer:true,
|
|
6
|
+
|
|
7
|
+
openOnAdd:false,
|
|
8
|
+
|
|
9
|
+
props:{
|
|
10
|
+
columns:['grid-cols-2', 'md:grid-cols-5', '', ''],
|
|
11
|
+
gap:['gap-5', 'md:gap-5', '', ''],
|
|
12
|
+
alignItems:['items-start', 'md:items-start', '', ''],
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
|
|
3
|
+
uid: "uid-1",
|
|
4
|
+
name: "Dashboard 1",
|
|
5
|
+
|
|
6
|
+
datasource: [
|
|
7
|
+
{
|
|
8
|
+
uid: "uid-1",
|
|
9
|
+
type:"mpp.hmc",
|
|
10
|
+
name: "Datasource 1",
|
|
11
|
+
columns: [
|
|
12
|
+
{ key:"coo", label:"COO" },
|
|
13
|
+
{ key:"mppTgtLck", label:"MPP TGT LCK" },
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
views: [
|
|
19
|
+
{ uid:"uid-1", type:"List", name:"List" }
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
}
|
package/src/index.js
CHANGED
|
@@ -149,7 +149,6 @@ const unregisterResizeEvent = (fn) => {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
const consoleInfo = (...args) => { console.info(...args) }
|
|
152
|
-
const consoleError = (...args) => { console.error(...args) }
|
|
153
152
|
const consoleLog = (...args) => { console.log(...args) }
|
|
154
153
|
const consoleWarn = (...args) => { console.warn(...args) }
|
|
155
154
|
const consoleTime = (...args) => { console.time(...args) }
|
|
@@ -209,7 +208,7 @@ const util = {
|
|
|
209
208
|
window.addEventListener('mouseup', onMouseUp)
|
|
210
209
|
},
|
|
211
210
|
|
|
212
|
-
push: (arr, items, opt = {
|
|
211
|
+
push: (arr, items, opt = { update:true }) => {
|
|
213
212
|
if(!Array.isArray(arr)) return
|
|
214
213
|
if(!Array.isArray(items)) items = [ items ]
|
|
215
214
|
if(!opt.key){
|
|
@@ -249,34 +248,41 @@ const util = {
|
|
|
249
248
|
}
|
|
250
249
|
},
|
|
251
250
|
|
|
252
|
-
unshift: (arr,
|
|
251
|
+
unshift: (arr, items, opt = {}) => {
|
|
253
252
|
if(!Array.isArray(arr)) return
|
|
253
|
+
if(!Array.isArray(items)) items = [ items ]
|
|
254
|
+
if(items.length < 1) return
|
|
255
|
+
|
|
254
256
|
if(!opt.key){
|
|
255
|
-
opt.key =
|
|
257
|
+
opt.key = items[0] && items[0].uid ? 'uid' : 'id'
|
|
256
258
|
}
|
|
257
259
|
|
|
258
260
|
opt = Object.assign({ key:"id", highlight:false }, opt)
|
|
259
261
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
+
for(let item of items) {
|
|
263
|
+
if (!item) continue
|
|
264
|
+
|
|
265
|
+
const index = arr.findIndex((_) => _[opt.key] === item[opt.key])
|
|
266
|
+
if(index >= 0){
|
|
262
267
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
268
|
+
const keys = []
|
|
269
|
+
for(let key in item){
|
|
270
|
+
if(!(key in arr[index]) || arr[index][key] !== item[key]){
|
|
271
|
+
keys.push(key)
|
|
272
|
+
}
|
|
267
273
|
}
|
|
268
|
-
}
|
|
269
274
|
|
|
270
|
-
|
|
271
|
-
|
|
275
|
+
if(opt.highlight){
|
|
276
|
+
item._highlight = keys
|
|
277
|
+
}
|
|
278
|
+
Object.assign(arr[index], item)
|
|
272
279
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
item
|
|
280
|
+
else{
|
|
281
|
+
if(opt.highlight){
|
|
282
|
+
item._highlight = true
|
|
283
|
+
}
|
|
284
|
+
arr.unshift(item)
|
|
278
285
|
}
|
|
279
|
-
arr.unshift(item)
|
|
280
286
|
}
|
|
281
287
|
},
|
|
282
288
|
|
|
@@ -402,7 +408,6 @@ export default{
|
|
|
402
408
|
app.config.globalProperties.$util = util
|
|
403
409
|
app.config.globalProperties.$resize = registerResizeEvent
|
|
404
410
|
app.config.globalProperties.$unresize = unregisterResizeEvent
|
|
405
|
-
app.config.globalProperties.error = consoleError
|
|
406
411
|
app.config.globalProperties.log = consoleLog
|
|
407
412
|
app.config.globalProperties.warn = consoleWarn
|
|
408
413
|
app.config.globalProperties.info = consoleInfo
|
|
@@ -528,6 +533,7 @@ export default{
|
|
|
528
533
|
app.component('ErrorText', defineAsyncComponent(() => import("./components/ErrorText.vue")))
|
|
529
534
|
app.component('Feed', defineAsyncComponent(() => import("./components/Feed.vue")))
|
|
530
535
|
app.component('Gmaps', defineAsyncComponent(() => import("./components/Gmaps.vue")))
|
|
536
|
+
app.component('GHeatMaps', defineAsyncComponent(() => import("./components/GHeatMaps.vue")))
|
|
531
537
|
app.component('HTMLEditor', defineAsyncComponent(() => import("./components/HTMLEditor.vue")))
|
|
532
538
|
app.component('Switch', defineAsyncComponent(() => import("./components/Switch.vue")))
|
|
533
539
|
app.component('IconMenu', defineAsyncComponent(() => import("./components/IconMenu.vue")))
|
|
@@ -594,7 +600,7 @@ export default{
|
|
|
594
600
|
app.component('Chart', defineAsyncComponent(() => import("./components/Chart.vue")))
|
|
595
601
|
app.component('DGrid', defineAsyncComponent(() => import("./components/DGrid.vue")))
|
|
596
602
|
app.component('DGridItem', defineAsyncComponent(() => import("./components/DGridItem.vue")))
|
|
597
|
-
app.component('
|
|
603
|
+
app.component('GmapsDirection', defineAsyncComponent(() => import("./components/GmapsDirection.vue")))
|
|
598
604
|
|
|
599
605
|
app.component('AhrefSetting', defineAsyncComponent(() => import("./widgets/AhrefSetting.vue")))
|
|
600
606
|
app.component('ArticleSetting', defineAsyncComponent(() => import("./widgets/ArticleSetting.vue")))
|
|
@@ -672,8 +678,14 @@ export default{
|
|
|
672
678
|
app.component('TypographySetting', defineAsyncComponent(() => import("./widgets/TypographySetting.vue")))
|
|
673
679
|
app.component('FiltersSetting', defineAsyncComponent(() => import("./widgets/FiltersSetting.vue")))
|
|
674
680
|
app.component('MenuEditor', defineAsyncComponent(() => import("./widgets/MenuEditor.vue")))
|
|
675
|
-
app.component('
|
|
676
|
-
app.component('
|
|
681
|
+
app.component('Dashboard', defineAsyncComponent(() => import("./widgets/Dashboard.vue")))
|
|
682
|
+
app.component('Text', defineAsyncComponent(() => import("./components/Text.vue")))
|
|
683
|
+
|
|
684
|
+
app.component('Doughnut', defineAsyncComponent(() => import("./widgets/Dashboard/Doughnut.vue")))
|
|
685
|
+
app.component('Pie', defineAsyncComponent(() => import("./widgets/Dashboard/Pie.vue")))
|
|
686
|
+
app.component('PolarArea', defineAsyncComponent(() => import("./widgets/Dashboard/PolarArea.vue")))
|
|
687
|
+
app.component('Metric', defineAsyncComponent(() => import("./widgets/Dashboard/Metric.vue")))
|
|
688
|
+
app.component('BarChart', defineAsyncComponent(() => import("./widgets/Dashboard/BarChart.vue")))
|
|
677
689
|
}
|
|
678
690
|
|
|
679
691
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {useEmitter} from "../utils/event-bus";
|
|
2
|
+
|
|
3
|
+
export const readyStateMixin = {
|
|
4
|
+
|
|
5
|
+
data(){
|
|
6
|
+
return {
|
|
7
|
+
emitter: null,
|
|
8
|
+
readyState: 1,
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
methods: {
|
|
13
|
+
|
|
14
|
+
resetState(){
|
|
15
|
+
this.setState(1)
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
setState(state){
|
|
19
|
+
this.readyState = state
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
mounted() {
|
|
25
|
+
this.emitter = useEmitter()
|
|
26
|
+
this.emitter.on(`${this.uid}.readyState`, (state) => {
|
|
27
|
+
this.readyState = state
|
|
28
|
+
})
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
props: {
|
|
32
|
+
|
|
33
|
+
uid: String
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
}
|
|
@@ -244,7 +244,7 @@ const plugin = Plugin(function({ addBase, addUtilities, config, theme }) {
|
|
|
244
244
|
|
|
245
245
|
'.openltr-enter-from, .openltr-leave-to': {
|
|
246
246
|
opacity: 0,
|
|
247
|
-
transform: 'translateX(
|
|
247
|
+
transform: 'translateX(100px)'
|
|
248
248
|
},
|
|
249
249
|
|
|
250
250
|
'.openltr-leave-active': {
|