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.
@@ -1,36 +1,60 @@
1
1
  <template>
2
2
  <div class="lw-bi-chart-global-layout">
3
- <lw-search v-if="searchOptions.length > 0" class="search-body" :options="searchOptions" v-model="searchParams"
4
- :hideLabel="true" @search="search" @reset="reset" />
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 v-model:layout="chartList" :col-num="12" :row-height="30" :is-draggable="designMode"
7
- :is-resizable="designMode" :use-css-transforms="false" vertical-compact use-css-transforms>
8
- <GridItem v-for="(item, index) in chartList" :key="item.i" :x="item.x" :y="item.y" :w="item.w" :h="item.h"
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 :label="key" :value="value"
14
- v-for="(value, key) in item.data?.setting?.optionalDateUnitRanges" />
15
- <el-radio-button disabled
16
- v-if="Object.keys(item.data?.setting?.optionalDateUnitRanges).length == 0">未选择周期列表</el-radio-button>
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 :rawData="item.data"
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 :description="designMode ? '点击上方工具栏中的按钮,添加图表至当前仪表板' : '仪表板中还没有添加任何图表'" />
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
- getFilter(filterControls) {
164
- filterControls.forEach(async control => {
165
- switch (control.type) {
166
- case 'DATA_PICKER':
167
- case 'DATA_CASCADE':
168
- if (control.dataPickerSetting.options.type == 'DICT') {
169
- this.searchOptions.push({
170
- label: control.name,
171
- prop: `values.${control.dataPickerSetting.code}`,
172
- renderType: 'select',
173
- options: Object.entries(control.dataPickerSetting.options.dict).map(([key, value]) => ({
174
- value: key,
175
- label: value
176
- })),
177
- valueKey: 'value',
178
- labelKey: 'label'
179
- })
180
- } else {
181
- let list = await this.$api.dimensionChild.list({}, control.dataPickerSetting.options.dimensionTableId)
182
- this.searchOptions.push({
183
- label: control.name,
184
- prop: `values.${control.dataPickerSetting.code}`,
185
- renderType: 'select',
186
- options: list.map(item => ({
187
- value: item.id,
188
- label: item.name
189
- })),
190
- valueKey: 'value',
191
- labelKey: 'label'
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
- case 'DATA_INPUT':
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
- case 'DATE_PICKER':
275
+ }
276
+
277
+ case 'DATE_PICKER': {
278
+ const setting = control.datePickerSetting
204
279
  this.searchOptions.push({
205
280
  label: control.name,
206
- prop: `ranges.${control.datePickerSetting.code}`,
281
+ prop: `ranges.${setting.code}`,
207
282
  renderType: 'dateRange',
208
283
  valueFormat: 'YYYY-MM-DDTHH:mm:ss.SSSZ'
209
284
  })
210
- this.globalFilter.ranges[control.datePickerSetting.code] = {
285
+ this.globalFilter.ranges[setting.code] = {
211
286
  timeRange: {},
212
- type: control.datePickerSetting.type
287
+ type: setting.type
213
288
  }
214
289
  break
290
+ }
215
291
  }
216
- })
292
+ }
217
293
  }
218
294
  }
219
295
  }