lw-cdp-ui 1.4.22 → 1.4.24
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/dist/components/lwBiChart/page.vue +127 -51
- package/dist/lw-cdp-ui.esm.js +2068 -2042
- package/dist/lw-cdp-ui.umd.js +13 -13
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -1,36 +1,60 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="lw-bi-chart-global-layout">
|
|
3
|
-
<lw-search
|
|
4
|
-
|
|
3
|
+
<lw-search
|
|
4
|
+
v-if="searchOptions.length > 0"
|
|
5
|
+
class="search-body"
|
|
6
|
+
:options="searchOptions"
|
|
7
|
+
v-model="searchParams"
|
|
8
|
+
:hideLabel="true"
|
|
9
|
+
@search="search"
|
|
10
|
+
@reset="reset" />
|
|
5
11
|
|
|
6
|
-
<GridLayout
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
<GridLayout
|
|
13
|
+
v-model:layout="chartList"
|
|
14
|
+
:col-num="12"
|
|
15
|
+
:row-height="30"
|
|
16
|
+
:is-draggable="designMode"
|
|
17
|
+
:is-resizable="designMode"
|
|
18
|
+
:use-css-transforms="false"
|
|
19
|
+
vertical-compact
|
|
20
|
+
use-css-transforms>
|
|
21
|
+
<GridItem
|
|
22
|
+
v-for="(item, index) in chartList"
|
|
23
|
+
:key="item.i"
|
|
24
|
+
:x="item.x"
|
|
25
|
+
:y="item.y"
|
|
26
|
+
:w="item.w"
|
|
27
|
+
:h="item.h"
|
|
9
28
|
:i="item.i">
|
|
10
29
|
<div class="lw-bi-chart-global-layout-item" :class="{ edit: designMode }">
|
|
11
30
|
<div v-if="item.data?.setting?.activeDateUnitFilter" class="filter-top">
|
|
12
31
|
<el-radio-group v-model="item.timeUnit" @change="changeTimeUnit(item, index)">
|
|
13
|
-
<el-radio-button
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
v-
|
|
32
|
+
<el-radio-button
|
|
33
|
+
:label="key"
|
|
34
|
+
:value="value"
|
|
35
|
+
v-for="(value, key) in item.data?.setting?.optionalDateUnitRanges"
|
|
36
|
+
:key="key" />
|
|
37
|
+
<el-radio-button disabled v-if="Object.keys(item.data?.setting?.optionalDateUnitRanges).length == 0"
|
|
38
|
+
>未选择周期列表</el-radio-button
|
|
39
|
+
>
|
|
17
40
|
</el-radio-group>
|
|
18
41
|
</div>
|
|
19
42
|
|
|
20
43
|
<div v-if="item?.type == 'Dashboard'" class="grid-item-dashboard">
|
|
21
44
|
<lwBiChartPage :chartId="item.id" />
|
|
22
45
|
</div>
|
|
23
|
-
<lwBiChartItem
|
|
46
|
+
<lwBiChartItem
|
|
47
|
+
:rawData="item.data"
|
|
24
48
|
:height="item.data?.setting?.activeDateUnitFilter ? 'calc(100% - 36px)' : '100%'" />
|
|
25
49
|
<div class="remove" v-if="designMode" @click="removeChart(index)">
|
|
26
50
|
<el-button type="primary" link icon="el-icon-delete"></el-button>
|
|
27
51
|
</div>
|
|
28
52
|
</div>
|
|
29
|
-
|
|
30
53
|
</GridItem>
|
|
31
54
|
</GridLayout>
|
|
32
55
|
<div class="no-record-panel e-unselect" v-if="chartList.length === 0">
|
|
33
|
-
<el-empty
|
|
56
|
+
<el-empty
|
|
57
|
+
:description="designMode ? '点击上方工具栏中的按钮,添加图表至当前仪表板' : '仪表板中还没有添加任何图表'" />
|
|
34
58
|
</div>
|
|
35
59
|
</div>
|
|
36
60
|
</template>
|
|
@@ -81,8 +105,8 @@ export default {
|
|
|
81
105
|
let visualize = await this.$http.get(
|
|
82
106
|
`${this.$config.API_URL}/bi-manage/{tenantId}/{buCode}/visualize/${chartData.id}`
|
|
83
107
|
)
|
|
84
|
-
visualize?.models.forEach(item => {
|
|
85
|
-
item?.dimensions.forEach(d => {
|
|
108
|
+
visualize?.models.forEach((item) => {
|
|
109
|
+
item?.dimensions.forEach((d) => {
|
|
86
110
|
d.timeSetting.timeUnit = chartItem.timeUnit
|
|
87
111
|
})
|
|
88
112
|
})
|
|
@@ -160,60 +184,112 @@ export default {
|
|
|
160
184
|
removeChart(index) {
|
|
161
185
|
this.modelValue.splice(index, 1)
|
|
162
186
|
},
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
187
|
+
listToTree(data) {
|
|
188
|
+
const result = []
|
|
189
|
+
const map = {}
|
|
190
|
+
|
|
191
|
+
data.forEach((item) => {
|
|
192
|
+
map[item.id] = { value: item.id, label: item.name, children: [] }
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
data.forEach((item) => {
|
|
196
|
+
const parent = map[item.parent]
|
|
197
|
+
if (parent) {
|
|
198
|
+
parent.children.push(map[item.id])
|
|
199
|
+
} else {
|
|
200
|
+
result.push(map[item.id])
|
|
201
|
+
}
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
return result
|
|
205
|
+
},
|
|
206
|
+
async getFilter(filterControls) {
|
|
207
|
+
for (const control of filterControls) {
|
|
208
|
+
const { type } = control
|
|
209
|
+
|
|
210
|
+
const getOptions = async (setting) => {
|
|
211
|
+
const { type, dict, dataInterfaceUri, dimensionTableId } = setting.options
|
|
212
|
+
if (type === 'DICT') {
|
|
213
|
+
return Object.entries(dict).map(([key, value]) => ({ value: key, label: value }))
|
|
214
|
+
} else if (type === 'DATA_INTERFACE') {
|
|
215
|
+
const res = await this.$http.get(dataInterfaceUri)
|
|
216
|
+
return res.map((item) => ({ value: item.id, label: item.name }))
|
|
217
|
+
} else {
|
|
218
|
+
const res = await this.$api.dimensionChild.list({}, dimensionTableId)
|
|
219
|
+
return res.map((item) => ({ value: item.id, label: item.name }))
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const getTreeOptions = async (setting) => {
|
|
224
|
+
const { type, dict, dataInterfaceUri, dimensionTableId } = setting.options
|
|
225
|
+
if (type === 'DICT') {
|
|
226
|
+
return Object.entries(dict).map(([key, value]) => ({ value: key, label: value }))
|
|
227
|
+
} else if (type === 'DATA_INTERFACE') {
|
|
228
|
+
const res = await this.$http.get(dataInterfaceUri)
|
|
229
|
+
return this.listToTree(res)
|
|
230
|
+
} else {
|
|
231
|
+
const res = await this.$api.dimensionChild.list({}, dimensionTableId)
|
|
232
|
+
return this.listToTree(res)
|
|
233
|
+
}
|
|
234
|
+
}
|
|
194
235
|
|
|
236
|
+
switch (type) {
|
|
237
|
+
case 'DATA_PICKER': {
|
|
238
|
+
const setting = control.dataPickerSetting
|
|
239
|
+
const options = await getOptions(setting)
|
|
240
|
+
this.searchOptions.push({
|
|
241
|
+
label: control.name,
|
|
242
|
+
prop: `values.${setting.code}`,
|
|
243
|
+
renderType: 'select',
|
|
244
|
+
options,
|
|
245
|
+
valueKey: 'value',
|
|
246
|
+
labelKey: 'label'
|
|
247
|
+
})
|
|
195
248
|
break
|
|
196
|
-
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
case 'DATA_CASCADE': {
|
|
252
|
+
const setting = control.dataPickerSetting
|
|
253
|
+
const items = await getTreeOptions(setting)
|
|
254
|
+
this.searchOptions.push({
|
|
255
|
+
label: control.name,
|
|
256
|
+
name: `values.${setting.code}`,
|
|
257
|
+
value: '',
|
|
258
|
+
component: 'treeSelect',
|
|
259
|
+
options: {
|
|
260
|
+
items,
|
|
261
|
+
placeholder: '请选择' + control.name,
|
|
262
|
+
checkStrictly: true
|
|
263
|
+
}
|
|
264
|
+
})
|
|
265
|
+
break
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
case 'DATA_INPUT': {
|
|
197
269
|
this.searchOptions.push({
|
|
198
270
|
label: control.name,
|
|
199
271
|
prop: `values.${control.dataInputSetting.code}`,
|
|
200
272
|
renderType: 'input'
|
|
201
273
|
})
|
|
202
274
|
break
|
|
203
|
-
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
case 'DATE_PICKER': {
|
|
278
|
+
const setting = control.datePickerSetting
|
|
204
279
|
this.searchOptions.push({
|
|
205
280
|
label: control.name,
|
|
206
|
-
prop: `ranges.${
|
|
281
|
+
prop: `ranges.${setting.code}`,
|
|
207
282
|
renderType: 'dateRange',
|
|
208
283
|
valueFormat: 'YYYY-MM-DDTHH:mm:ss.SSSZ'
|
|
209
284
|
})
|
|
210
|
-
this.globalFilter.ranges[
|
|
285
|
+
this.globalFilter.ranges[setting.code] = {
|
|
211
286
|
timeRange: {},
|
|
212
|
-
type:
|
|
287
|
+
type: setting.type
|
|
213
288
|
}
|
|
214
289
|
break
|
|
290
|
+
}
|
|
215
291
|
}
|
|
216
|
-
}
|
|
292
|
+
}
|
|
217
293
|
}
|
|
218
294
|
}
|
|
219
295
|
}
|