Commit 66e9527edc841c11e54fb0a3509a7b3d4d5e6788
1 parent
19f98345
wip: implement TextComponent && DigitalDashboardComponent font size scale zoom on drag
Showing
10 changed files
with
222 additions
and
47 deletions
1 | 1 | <script lang="ts" setup> |
2 | 2 | import type { ECharts, EChartsOption } from 'echarts'; |
3 | - import type { PropType } from 'vue'; | |
4 | - import { nextTick, onMounted, onUnmounted, ref, unref } from 'vue'; | |
3 | + import { PropType } from 'vue'; | |
4 | + import { nextTick, onMounted, onUnmounted, ref, unref, computed } from 'vue'; | |
5 | 5 | import { init } from 'echarts'; |
6 | - import { instrumentComponent1 } from './dashBoardComponent.config'; | |
6 | + import { | |
7 | + DashboardComponentLayout, | |
8 | + DashBoardValue, | |
9 | + instrumentComponent1, | |
10 | + InstrumentComponentType, | |
11 | + update_instrument_1_font, | |
12 | + update_instrument_2_font, | |
13 | + } from './dashBoardComponent.config'; | |
7 | 14 | import { dateUtil } from '/@/utils/dateUtil'; |
15 | + import { | |
16 | + DEFAULT_RADIO_RECORD, | |
17 | + RadioRecord, | |
18 | + DEFAULT_DATE_FORMAT, | |
19 | + fontSize, | |
20 | + } from '../../detail/config/util'; | |
8 | 21 | |
9 | 22 | const props = defineProps({ |
10 | 23 | add: { |
11 | 24 | type: Function, |
12 | 25 | }, |
13 | 26 | layout: { |
14 | - type: Object as PropType<Recordable>, | |
27 | + type: Object as PropType<DashboardComponentLayout>, | |
15 | 28 | default: () => ({}), |
16 | 29 | }, |
17 | 30 | value: { |
18 | - type: Object as PropType<Recordable>, | |
31 | + type: Object as PropType<DashBoardValue>, | |
19 | 32 | default: () => ({}), |
20 | 33 | }, |
34 | + radio: { | |
35 | + type: Object as PropType<RadioRecord>, | |
36 | + default: () => DEFAULT_RADIO_RECORD, | |
37 | + }, | |
21 | 38 | }); |
22 | 39 | |
23 | 40 | const getControlsWidgetId = () => `widget-chart-${props.value.id}`; |
... | ... | @@ -33,8 +50,21 @@ |
33 | 50 | option && unref(chartRef)?.setOption(option); |
34 | 51 | }); |
35 | 52 | } |
53 | + const getRadio = computed(() => { | |
54 | + const { radio } = props.radio; | |
55 | + return radio; | |
56 | + }); | |
57 | + | |
58 | + const beforeUpdateFn = (componentType: InstrumentComponentType) => { | |
59 | + if (componentType === 'instrument-component-1') return update_instrument_1_font; | |
60 | + if (componentType === 'instrument-component-2') return update_instrument_2_font; | |
61 | + return (_radio: number) => {}; | |
62 | + }; | |
36 | 63 | |
37 | 64 | function update() { |
65 | + const option = beforeUpdateFn(props.layout.componentType); | |
66 | + console.log(unref(chartRef)); | |
67 | + unref(chartRef)?.setOption(option(unref(getRadio)) as unknown as EChartsOption); | |
38 | 68 | unref(chartRef)?.resize(); |
39 | 69 | } |
40 | 70 | |
... | ... | @@ -54,12 +84,15 @@ |
54 | 84 | <div class="flex flex-col w-full h-full min-w-3 min-h-3"> |
55 | 85 | <div :id="getControlsWidgetId()" class="widget-charts flex-auto"></div> |
56 | 86 | <div> |
57 | - <div class="text-center">{{ props.value.name }}</div> | |
58 | - <div class="text-xs text-center text-gray-400"> | |
59 | - <span>更新时间:</span> | |
60 | - <span> | |
61 | - {{ props.value.updateTime || dateUtil().format('YYYY-MM-DD HH:mm:ss') }} | |
62 | - </span> | |
87 | + <div class="text-center" :style="{ fontSize: fontSize({ radio: getRadio, basic: 16 }) }">{{ | |
88 | + props.value.name | |
89 | + }}</div> | |
90 | + <div | |
91 | + class="text-xs text-center text-gray-400 truncate" | |
92 | + :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 16 }) }" | |
93 | + > | |
94 | + <span class="mr-2">更新时间:</span> | |
95 | + <span> {{ props.value.updateTime || dateUtil().format(DEFAULT_DATE_FORMAT) }}</span> | |
63 | 96 | </div> |
64 | 97 | </div> |
65 | 98 | </div> | ... | ... |
... | ... | @@ -3,10 +3,17 @@ |
3 | 3 | import { Space } from 'ant-design-vue'; |
4 | 4 | import type { DigitalDashBoardLayout, DigitalDashBoardValue } from './digitalDashBoard.config'; |
5 | 5 | import { dateUtil } from '/@/utils/dateUtil'; |
6 | + import { | |
7 | + fontSize, | |
8 | + RadioRecord, | |
9 | + DEFAULT_DATE_FORMAT, | |
10 | + DEFAULT_RADIO_RECORD, | |
11 | + } from '../../detail/config/util'; | |
6 | 12 | |
7 | 13 | const props = defineProps<{ |
8 | 14 | layout: DigitalDashBoardLayout; |
9 | 15 | value: DigitalDashBoardValue; |
16 | + radio: RadioRecord; | |
10 | 17 | }>(); |
11 | 18 | |
12 | 19 | const integerPart = computed(() => { |
... | ... | @@ -30,6 +37,11 @@ |
30 | 37 | |
31 | 38 | return _value; |
32 | 39 | }); |
40 | + | |
41 | + const getRadio = computed(() => { | |
42 | + const { radio } = props.radio || DEFAULT_RADIO_RECORD; | |
43 | + return radio; | |
44 | + }); | |
33 | 45 | </script> |
34 | 46 | |
35 | 47 | <template> |
... | ... | @@ -37,22 +49,28 @@ |
37 | 49 | <div class="flex flex-col w-full h-full"> |
38 | 50 | <div class="flex-1 flex justify-center items-center"> |
39 | 51 | <div class="flex flex-col"> |
40 | - <Space justify="end" class="justify-end"> | |
52 | + <Space justify="end" class="justify-end" :size="getRadio * 15"> | |
41 | 53 | <div |
42 | 54 | v-for="number in integerPart" |
43 | 55 | :key="number" |
44 | 56 | class="border border-gray-400 p-2" |
45 | - :style="{ color: props.value.valueColor }" | |
57 | + :style="{ | |
58 | + color: props.value.valueColor, | |
59 | + fontSize: fontSize({ radio: getRadio, basic: 20 }), | |
60 | + }" | |
46 | 61 | > |
47 | 62 | {{ number }} |
48 | 63 | </div> |
49 | 64 | </Space> |
50 | - <Space justify="end" class="justify-end mt-2"> | |
65 | + <Space justify="end" class="justify-end mt-2" :size="getRadio * 15"> | |
51 | 66 | <div |
52 | 67 | v-for="number in decimalPart" |
53 | 68 | :key="number" |
54 | 69 | class="border border-gray-400 p-1" |
55 | - :style="{ color: props.value.valueColor }" | |
70 | + :style="{ | |
71 | + color: props.value.valueColor, | |
72 | + fontSize: fontSize({ radio: getRadio, basic: 18 }), | |
73 | + }" | |
56 | 74 | > |
57 | 75 | {{ number }} |
58 | 76 | </div> |
... | ... | @@ -60,13 +78,19 @@ |
60 | 78 | </div> |
61 | 79 | </div> |
62 | 80 | |
63 | - <div class="text-center"> | |
81 | + <div | |
82 | + class="text-center truncate" | |
83 | + :style="{ fontSize: fontSize({ radio: getRadio, basic: 18 }) }" | |
84 | + > | |
64 | 85 | <span>{{ props.value.name || '电表' }}</span> |
65 | 86 | <span class="px-1">({{ props.value.unit || 'kw/h' }})</span> |
66 | 87 | </div> |
67 | - <div class="text-center mt-1 text-gray-400 text-xs"> | |
88 | + <div | |
89 | + class="text-center mt-1 text-gray-400 text-xs truncate" | |
90 | + :style="{ fontSize: fontSize({ radio: getRadio, basic: 12 }) }" | |
91 | + > | |
68 | 92 | <span class="mr-1">更新时间:</span> |
69 | - <span>{{ props.value.updateTime || dateUtil().format('YYYY-MM-DD HH:mm:ss') }}</span> | |
93 | + <span>{{ props.value.updateTime || dateUtil().format(DEFAULT_DATE_FORMAT) }}</span> | |
70 | 94 | </div> |
71 | 95 | </div> |
72 | 96 | <div></div> | ... | ... |
1 | 1 | import { EChartsOption } from 'echarts'; |
2 | +import { fontSize } from '../../detail/config/util'; | |
2 | 3 | import { visualOptionField } from '../../detail/config/visualOptions'; |
3 | 4 | import { DataComponentRecord, DataSource } from '/@/api/dataBoard/model'; |
4 | 5 | import { buildUUID } from '/@/utils/uuid'; |
... | ... | @@ -19,6 +20,7 @@ export interface GradientInfoRecord { |
19 | 20 | } |
20 | 21 | |
21 | 22 | export interface DashBoardValue { |
23 | + id: string; | |
22 | 24 | unit?: string; |
23 | 25 | name?: string; |
24 | 26 | updateTime?: string; |
... | ... | @@ -29,6 +31,7 @@ export interface DashBoardValue { |
29 | 31 | |
30 | 32 | export interface DashboardComponentLayout { |
31 | 33 | chartOption: EChartsOption; |
34 | + componentType: InstrumentComponentType; | |
32 | 35 | } |
33 | 36 | |
34 | 37 | export const instrumentComponent1 = (params?: { value: number; unit: string }): EChartsOption => { |
... | ... | @@ -199,14 +202,14 @@ export const instrumentComponent2 = (params?: { |
199 | 202 | }, |
200 | 203 | axisLabel: { |
201 | 204 | color: 'auto', |
202 | - distance: 40, | |
203 | - fontSize: 14, | |
205 | + distance: 35, | |
206 | + fontSize: 6, | |
204 | 207 | }, |
205 | 208 | detail: { |
206 | 209 | valueAnimation: true, |
207 | 210 | formatter: `{value} ${unit}`, |
208 | 211 | color: 'auto', |
209 | - fontSize: '16', | |
212 | + fontSize: 14, | |
210 | 213 | }, |
211 | 214 | data: [ |
212 | 215 | { |
... | ... | @@ -222,6 +225,38 @@ export const getGradientValue = (key: GradientKey, record: GradientInfoRecord[]) |
222 | 225 | return record.find((item) => item.key === key)?.value; |
223 | 226 | }; |
224 | 227 | |
228 | +export const update_instrument_1_font = (radio: number) => { | |
229 | + console.log(fontSize({ radio, basic: 14 })); | |
230 | + return { | |
231 | + series: [ | |
232 | + { | |
233 | + axisLabel: { | |
234 | + fontSize: fontSize({ radio, basic: 14 }), | |
235 | + }, | |
236 | + detail: { | |
237 | + fontSize: fontSize({ radio, basic: 14 }), | |
238 | + }, | |
239 | + }, | |
240 | + ], | |
241 | + } as EChartsOption; | |
242 | +}; | |
243 | + | |
244 | +export const update_instrument_2_font = (radio: number) => { | |
245 | + const axisLabelFontSize = fontSize({ radio, basic: 10, max: 25 }); | |
246 | + return { | |
247 | + series: [ | |
248 | + { | |
249 | + axisLabel: { | |
250 | + fontSize: axisLabelFontSize, | |
251 | + }, | |
252 | + detail: { | |
253 | + fontSize: axisLabelFontSize, | |
254 | + }, | |
255 | + }, | |
256 | + ], | |
257 | + } as EChartsOption; | |
258 | +}; | |
259 | + | |
225 | 260 | export const transformDashboardComponentConfig = ( |
226 | 261 | config: DashboardComponentLayout, |
227 | 262 | record: DataComponentRecord, |
... | ... | @@ -229,7 +264,8 @@ export const transformDashboardComponentConfig = ( |
229 | 264 | ) => { |
230 | 265 | return { |
231 | 266 | layout: { |
232 | - chartOption: config, | |
267 | + chartOption: config.chartOption, | |
268 | + componentType: config.componentType, | |
233 | 269 | } as DashboardComponentLayout, |
234 | 270 | value: { |
235 | 271 | id: buildUUID(), | ... | ... |
1 | 1 | <script lang="ts" setup> |
2 | 2 | import { computed } from '@vue/reactivity'; |
3 | 3 | import { Statistic } from 'ant-design-vue'; |
4 | + import { fontSize, RadioRecord, DEFAULT_RADIO_RECORD } from '../../detail/config/util'; | |
4 | 5 | import type { TextComponentLayout, TextComponentValue } from './config'; |
5 | 6 | import { SvgIcon } from '/@/components/Icon'; |
6 | 7 | const props = defineProps({ |
... | ... | @@ -12,6 +13,10 @@ |
12 | 13 | type: Object as PropType<TextComponentValue>, |
13 | 14 | default: () => ({ name: '温度', value: 123 } as TextComponentValue), |
14 | 15 | }, |
16 | + radio: { | |
17 | + type: Object as PropType<RadioRecord>, | |
18 | + default: () => DEFAULT_RADIO_RECORD as RadioRecord, | |
19 | + }, | |
15 | 20 | }); |
16 | 21 | |
17 | 22 | const getIsColumnLayout = computed(() => { |
... | ... | @@ -33,6 +38,11 @@ |
33 | 38 | const { showUnit, base } = props.layout; |
34 | 39 | return base ? false : showUnit; |
35 | 40 | }); |
41 | + | |
42 | + const getRadio = computed(() => { | |
43 | + const { radio } = props.radio; | |
44 | + return radio; | |
45 | + }); | |
36 | 46 | </script> |
37 | 47 | |
38 | 48 | <template> |
... | ... | @@ -47,23 +57,34 @@ |
47 | 57 | <SvgIcon |
48 | 58 | :name="props.value.icon || 'CO2'" |
49 | 59 | prefix="iconfont" |
50 | - class="!w-1/2 !h-[2em]" | |
51 | - :style="{ color: props.value.iconColor }" | |
60 | + :style="{ | |
61 | + color: props.value.iconColor, | |
62 | + width: fontSize({ radio: getRadio, basic: 40 }), | |
63 | + height: fontSize({ radio: getRadio, basic: 40 }), | |
64 | + }" | |
52 | 65 | /> |
53 | 66 | </div> |
54 | - <div>{{ props.value.name }}</div> | |
67 | + <div class="truncate" :style="{ fontSize: fontSize({ radio: getRadio, basic: 16 }) }">{{ | |
68 | + props.value.name | |
69 | + }}</div> | |
55 | 70 | </div> |
56 | 71 | </div> |
57 | 72 | <div class="w-1/2 flex justify-center"> |
58 | 73 | <Statistic |
59 | 74 | :value="props.value.value || '123'" |
60 | 75 | :suffix="getShowUnit ? props.value.unit : ''" |
61 | - :value-style="{ fontSize: '1.3em', color: props.value.fontColor }" | |
76 | + class="truncate" | |
77 | + :value-style="{ | |
78 | + fontSize: fontSize({ radio: getRadio, basic: 16 }), | |
79 | + color: props.value.fontColor, | |
80 | + }" | |
62 | 81 | /> |
63 | 82 | </div> |
64 | 83 | </div> |
65 | - <div v-if="getShowUpdate" class="text-center text-xs text-gray-400"> | |
66 | - <span> 更新时间: {{ props.value.updateTime }}</span> | |
84 | + <div v-if="getShowUpdate" class="text-center text-xs text-gray-400 truncate"> | |
85 | + <span :style="{ fontSize: fontSize({ radio: getRadio, basic: 12 }) }" class="truncate"> | |
86 | + 更新时间: {{ props.value.updateTime }}</span | |
87 | + > | |
67 | 88 | </div> |
68 | 89 | </div> |
69 | 90 | </template> | ... | ... |
1 | 1 | <script lang="ts" setup> |
2 | 2 | import { onMounted, useSlots } from 'vue'; |
3 | 3 | import { useUpdateCenter } from '../../hook/useUpdateCenter'; |
4 | - import type { DataSource, WidgetWrapperRegister } from './type'; | |
4 | + import { DataBoardLayoutInfo } from '../../types/type'; | |
5 | + import type { WidgetWrapperRegister } from './type'; | |
6 | + import { DataSource } from '/@/api/dataBoard/model'; | |
5 | 7 | |
6 | 8 | const props = defineProps<{ |
7 | - dataSource: DataSource[]; | |
9 | + dataSource: DataBoardLayoutInfo['record'][]; | |
8 | 10 | register?: WidgetWrapperRegister; |
9 | 11 | }>(); |
10 | 12 | ... | ... |
1 | -import { DataComponentRecord } from '/@/api/dataBoard/model'; | |
1 | +import { DataBoardLayoutInfo } from '../../types/type'; | |
2 | +import { DataSource } from '/@/api/dataBoard/model'; | |
2 | 3 | |
3 | -export interface DataSource { | |
4 | - id: number | string; | |
5 | - width: number; | |
6 | - height: number; | |
4 | +// export interface DataSource { | |
5 | +// id: number | string; | |
6 | +// width: number; | |
7 | +// height: number; | |
7 | 8 | |
8 | - [key: string]: any; | |
9 | -} | |
9 | +// [key: string]: any; | |
10 | +// } | |
10 | 11 | |
11 | -export type WidgetWrapperRegister = (dataSource: DataComponentRecord[]) => any; | |
12 | +export type WidgetWrapperRegister = (dataSource: DataBoardLayoutInfo['record'][]) => any; | ... | ... |
... | ... | @@ -12,6 +12,7 @@ import { DataComponentRecord, DataSource } from '/@/api/dataBoard/model'; |
12 | 12 | import DashBoardComponent from '../../components/InstrumentComponent/DashBoardComponent.vue'; |
13 | 13 | import { WidgetComponentType } from './visualOptions'; |
14 | 14 | import { |
15 | + DashboardComponentLayout, | |
15 | 16 | instrumentComponent1, |
16 | 17 | instrumentComponent2, |
17 | 18 | transformDashboardComponentConfig, |
... | ... | @@ -72,13 +73,19 @@ frontComponentMap.set(FrontComponent.TEXT_COMPONENT_5, { |
72 | 73 | |
73 | 74 | frontComponentMap.set(FrontComponent.INSTRUMENT_COMPONENT_1, { |
74 | 75 | Component: DashBoardComponent, |
75 | - ComponentConfig: instrumentComponent1(), | |
76 | + ComponentConfig: { | |
77 | + chartOption: instrumentComponent1(), | |
78 | + componentType: FrontComponent.INSTRUMENT_COMPONENT_1, | |
79 | + } as DashboardComponentLayout, | |
76 | 80 | transformConfig: transformDashboardComponentConfig, |
77 | 81 | }); |
78 | 82 | |
79 | 83 | frontComponentMap.set(FrontComponent.INSTRUMENT_COMPONENT_2, { |
80 | 84 | Component: DashBoardComponent, |
81 | - ComponentConfig: instrumentComponent2(), | |
85 | + ComponentConfig: { | |
86 | + chartOption: instrumentComponent2(), | |
87 | + componentType: FrontComponent.INSTRUMENT_COMPONENT_2, | |
88 | + } as DashboardComponentLayout, | |
82 | 89 | transformConfig: transformDashboardComponentConfig, |
83 | 90 | }); |
84 | 91 | ... | ... |
src/views/data/board/detail/config/util.ts
0 → 100644
1 | +export interface RadioRecord { | |
2 | + width: number; | |
3 | + height: number; | |
4 | + isLess: boolean; | |
5 | + radio: number; | |
6 | +} | |
7 | + | |
8 | +export const DEFAULT_RADIO_RECORD: RadioRecord = { | |
9 | + width: 300, | |
10 | + height: 300, | |
11 | + isLess: false, | |
12 | + radio: 1, | |
13 | +}; | |
14 | + | |
15 | +export const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss'; | |
16 | + | |
17 | +export const calcScale = ( | |
18 | + width: number, | |
19 | + height: number, | |
20 | + widthRadio: number, | |
21 | + heightRadio: number | |
22 | +): RadioRecord => { | |
23 | + width = width * (widthRadio / 100); | |
24 | + height = height * (heightRadio / 100); | |
25 | + | |
26 | + const temp = width * height; | |
27 | + | |
28 | + const isLess = temp < 300 * 300; | |
29 | + | |
30 | + const radio = temp / (300 * 300); | |
31 | + | |
32 | + return { | |
33 | + width, | |
34 | + height, | |
35 | + isLess, | |
36 | + radio, | |
37 | + }; | |
38 | +}; | |
39 | + | |
40 | +export const fontSize = ({ radio, basic, max }: { radio: number; basic: number; max?: number }) => { | |
41 | + let res = basic * radio; | |
42 | + if (max && res > max) res = max; | |
43 | + return res + 'px'; | |
44 | +}; | ... | ... |
... | ... | @@ -17,9 +17,11 @@ |
17 | 17 | import { useRoute } from 'vue-router'; |
18 | 18 | import { computed, unref } from '@vue/reactivity'; |
19 | 19 | import { DataComponentRecord, DataSource, Layout } from '/@/api/dataBoard/model'; |
20 | - import { frontComponentMap, FrontComponentType } from './config/help'; | |
20 | + import { frontComponentMap } from './config/help'; | |
21 | + import { calcScale } from './config/util'; | |
21 | 22 | import { useMessage } from '/@/hooks/web/useMessage'; |
22 | 23 | import { DataBoardLayoutInfo } from '../types/type'; |
24 | + import { WidgetComponentType } from './config/visualOptions'; | |
23 | 25 | |
24 | 26 | const ROUTE = useRoute(); |
25 | 27 | |
... | ... | @@ -41,7 +43,7 @@ |
41 | 43 | const defaultWidth = 6; |
42 | 44 | const defaultHeight = 6; |
43 | 45 | |
44 | - function updateSize(i: string, newH: number, newW: number, newHPx: number, newWPx: number) { | |
46 | + function updateSize(i: string, _newH: number, _newW: number, newHPx: number, newWPx: number) { | |
45 | 47 | newWPx = Number(newWPx); |
46 | 48 | newHPx = Number(newHPx); |
47 | 49 | |
... | ... | @@ -71,6 +73,7 @@ |
71 | 73 | ...item, |
72 | 74 | width, |
73 | 75 | height, |
76 | + radio: calcScale(newWPx, newHPx, width, height), | |
74 | 77 | }; |
75 | 78 | }); |
76 | 79 | |
... | ... | @@ -82,7 +85,6 @@ |
82 | 85 | |
83 | 86 | const itemResize = (i: string, newH: number, newW: number, newHPx: number, newWPx: number) => { |
84 | 87 | updateSize(i, newH, newW, newHPx, newWPx); |
85 | - console.log({ i, newH, newW, newHPx, newWPx }); | |
86 | 88 | }; |
87 | 89 | |
88 | 90 | const itemResized = (i: string, newH: number, newW: number, newHPx: number, newWPx: number) => { |
... | ... | @@ -157,6 +159,7 @@ |
157 | 159 | |
158 | 160 | const getDataBoardComponent = async () => { |
159 | 161 | try { |
162 | + // dataBoardList.value = []; | |
160 | 163 | const data = await getDataComponent(unref(getBoardId)); |
161 | 164 | dataBoardList.value = data.data.componentData.map((item) => { |
162 | 165 | const index = data.data.componentLayout.findIndex((each) => item.id === each.id); |
... | ... | @@ -184,13 +187,16 @@ |
184 | 187 | |
185 | 188 | const getComponent = (record: DataComponentRecord) => { |
186 | 189 | const frontComponent = record.frontId; |
187 | - const component = frontComponentMap.get(frontComponent as FrontComponentType); | |
190 | + const component = frontComponentMap.get(frontComponent as WidgetComponentType); | |
188 | 191 | return component?.Component; |
189 | 192 | }; |
190 | 193 | |
191 | - const getComponentConfig = (record: DataComponentRecord, dataSourceRecord: DataSource) => { | |
194 | + const getComponentConfig = ( | |
195 | + record: DataBoardLayoutInfo['record'], | |
196 | + dataSourceRecord: DataSource | |
197 | + ) => { | |
192 | 198 | const frontComponent = record.frontId; |
193 | - const component = frontComponentMap.get(frontComponent as FrontComponentType); | |
199 | + const component = frontComponentMap.get(frontComponent as WidgetComponentType); | |
194 | 200 | return component?.transformConfig(component.ComponentConfig, record, dataSourceRecord); |
195 | 201 | }; |
196 | 202 | |
... | ... | @@ -289,6 +295,7 @@ |
289 | 295 | :add="add" |
290 | 296 | :remove="remove" |
291 | 297 | :update="update" |
298 | + :radio="record.radio" | |
292 | 299 | v-bind="getComponentConfig(item.record, record)" |
293 | 300 | /> |
294 | 301 | </template> | ... | ... |
... | ... | @@ -2,5 +2,5 @@ import { Layout } from 'vue3-grid-layout'; |
2 | 2 | import { DataComponentRecord } from '/@/api/dataBoard/model'; |
3 | 3 | |
4 | 4 | export type DataBoardLayoutInfo = Layout & { |
5 | - record: DataComponentRecord & { width: number; height: number }; | |
5 | + record: DataComponentRecord & { width: number; height: number; radio?: number }; | |
6 | 6 | }; | ... | ... |