Commit ba226a677dfab369bd6243bd4148823bc313228c
Merge branch 'fix/DEFECT-1377' into 'main_dev'
fix: 修复看板名称生效,但是数据动效没生效 See merge request yunteng/thingskit-front!672
Showing
4 changed files
with
84 additions
and
61 deletions
| @@ -243,7 +243,6 @@ | @@ -243,7 +243,6 @@ | ||
| 243 | height: 16, | 243 | height: 16, | 
| 244 | fontSize: unref(getRatio) ? 10 * unref(getRatio) : 10, | 244 | fontSize: unref(getRatio) ? 10 * unref(getRatio) : 10, | 
| 245 | color: fontColor || 'inherit', | 245 | color: fontColor || 'inherit', | 
| 246 | - // formatter: `{value} ${unit ?? ''}`, | ||
| 247 | }, | 246 | }, | 
| 248 | }, | 247 | }, | 
| 249 | ], | 248 | ], | 
| @@ -275,42 +274,16 @@ | @@ -275,42 +274,16 @@ | ||
| 275 | const { forEachGroupMessage } = useReceiveMessage(); | 274 | const { forEachGroupMessage } = useReceiveMessage(); | 
| 276 | const { getNumberValue } = useReceiveValue(); | 275 | const { getNumberValue } = useReceiveValue(); | 
| 277 | const updateFn: MultipleDataFetchUpdateFn = (message, deviceId, attribute) => { | 276 | const updateFn: MultipleDataFetchUpdateFn = (message, deviceId, attribute) => { | 
| 278 | - // const { data = {} } = message; | ||
| 279 | - // const { dataSource } = props.config.option; | ||
| 280 | - // const { dataSource } = unref(getDesign); | ||
| 281 | - // const series = dataSource.map((item, index) => { | ||
| 282 | - // const { unit, fontColor, showDeviceName, attribute, deviceName, deviceRename } = item; | ||
| 283 | - // const [latest] = data[attribute] || []; | ||
| 284 | - // const [_timespan, value] = latest || []; | ||
| 285 | - // return { | ||
| 286 | - // value, | ||
| 287 | - // name: showDeviceName ? (deviceRename ? deviceRename : deviceName) : '', | ||
| 288 | - // title: { | ||
| 289 | - // color: fontColor, | ||
| 290 | - // offsetCenter: index == 0 ? ['0%', '-35%'] : index == 1 ? ['0%', '0%'] : ['0%', '35%'], | ||
| 291 | - // }, | ||
| 292 | - // detail: { | ||
| 293 | - // color: fontColor, | ||
| 294 | - // valueAnimation: true, | ||
| 295 | - // offsetCenter: index == 0 ? ['0%', '-20%'] : index == 1 ? ['0%', '18%'] : ['0%', '50%'], | ||
| 296 | - // formatter: `{value} ${unit ?? ''}`, | ||
| 297 | - // }, | ||
| 298 | - // } as SeriesOption['data']; | ||
| 299 | - // }); | ||
| 300 | - // // console.log(series, 'series'); | ||
| 301 | - // const xAxisData = unref(getDesign).dataSource.map((item: any) => item.fontColor as any); | ||
| 302 | - // unref(chartInstance)?.setOption({ | ||
| 303 | - // series: [{ data: series, pointer: { show: false } }], | ||
| 304 | - // color: xAxisData as any, | ||
| 305 | - // }); | ||
| 306 | - | ||
| 307 | forEachGroupMessage(message, deviceId, attribute, (attribute, value) => { | 277 | forEachGroupMessage(message, deviceId, attribute, (attribute, value) => { | 
| 278 | + console.log(value, 'value'); | ||
| 308 | series.value.forEach((item) => { | 279 | series.value.forEach((item) => { | 
| 309 | if (item.id === deviceId && item.attribute === attribute) { | 280 | if (item.id === deviceId && item.attribute === attribute) { | 
| 310 | item.value = getNumberValue(value); | 281 | item.value = getNumberValue(value); | 
| 311 | } | 282 | } | 
| 312 | }); | 283 | }); | 
| 284 | + console.log(value); | ||
| 313 | }); | 285 | }); | 
| 286 | + console.log(series, 'series'); | ||
| 314 | unref(chartInstance)?.setOption({ | 287 | unref(chartInstance)?.setOption({ | 
| 315 | series: [{ data: unref(series), pointer: { show: false } }], | 288 | series: [{ data: unref(series), pointer: { show: false } }], | 
| 316 | color: unref(series).map((item) => item.title.color), | 289 | color: unref(series).map((item) => item.title.color), | 
| @@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
| 18 | }>(); | 18 | }>(); | 
| 19 | 19 | ||
| 20 | interface PercentType { | 20 | interface PercentType { | 
| 21 | - value: number; | 21 | + value?: number; | 
| 22 | fontColor: string; | 22 | fontColor: string; | 
| 23 | backgroundColor: string; | 23 | backgroundColor: string; | 
| 24 | unit: string; | 24 | unit: string; | 
| @@ -26,6 +26,8 @@ | @@ -26,6 +26,8 @@ | ||
| 26 | attribute?: string; | 26 | attribute?: string; | 
| 27 | attributeRename?: string; | 27 | attributeRename?: string; | 
| 28 | deviceId?: string; | 28 | deviceId?: string; | 
| 29 | + deviceName?: string; | ||
| 30 | + deviceRename?: string; | ||
| 29 | } | 31 | } | 
| 30 | 32 | ||
| 31 | const defaultValue: PercentType[] = [ | 33 | const defaultValue: PercentType[] = [ | 
| @@ -34,6 +36,8 @@ | @@ -34,6 +36,8 @@ | ||
| 34 | fontColor: '#19eff', | 36 | fontColor: '#19eff', | 
| 35 | backgroundColor: '#19eff', | 37 | backgroundColor: '#19eff', | 
| 36 | unit: '℃', | 38 | unit: '℃', | 
| 39 | + deviceName: '温度', | ||
| 40 | + attribute: '1', | ||
| 37 | id: buildUUID(), | 41 | id: buildUUID(), | 
| 38 | }, | 42 | }, | 
| 39 | { | 43 | { | 
| @@ -41,6 +45,8 @@ | @@ -41,6 +45,8 @@ | ||
| 41 | fontColor: '#1E8667', | 45 | fontColor: '#1E8667', | 
| 42 | backgroundColor: '#1E8667', | 46 | backgroundColor: '#1E8667', | 
| 43 | unit: '℃', | 47 | unit: '℃', | 
| 48 | + deviceName: '温度', | ||
| 49 | + attribute: '3', | ||
| 44 | id: buildUUID(), | 50 | id: buildUUID(), | 
| 45 | }, | 51 | }, | 
| 46 | { | 52 | { | 
| @@ -48,6 +54,8 @@ | @@ -48,6 +54,8 @@ | ||
| 48 | fontColor: '#2196F3', | 54 | fontColor: '#2196F3', | 
| 49 | backgroundColor: '#2196F3', | 55 | backgroundColor: '#2196F3', | 
| 50 | unit: '℃', | 56 | unit: '℃', | 
| 57 | + deviceName: '温度', | ||
| 58 | + attribute: '2', | ||
| 51 | id: buildUUID(), | 59 | id: buildUUID(), | 
| 52 | }, | 60 | }, | 
| 53 | ]; | 61 | ]; | 
| @@ -60,15 +68,16 @@ | @@ -60,15 +68,16 @@ | ||
| 60 | fontColor: presetFontColor, | 68 | fontColor: presetFontColor, | 
| 61 | backgroundColor: persetBackgroundColor, | 69 | backgroundColor: persetBackgroundColor, | 
| 62 | } = persetOption || {}; | 70 | } = persetOption || {}; | 
| 63 | - | ||
| 64 | return { | 71 | return { | 
| 65 | dataSource: dataSource.map((item) => { | 72 | dataSource: dataSource.map((item) => { | 
| 66 | const { unit, fontColor, backgroundColor } = item.componentInfo || {}; | 73 | const { unit, fontColor, backgroundColor } = item.componentInfo || {}; | 
| 67 | - const { attribute, attributeRename, deviceId } = item; | 74 | + const { attribute, attributeRename, deviceName, deviceRename, deviceId } = item; | 
| 68 | return { | 75 | return { | 
| 69 | unit: unit ?? presetUnit, | 76 | unit: unit ?? presetUnit, | 
| 70 | fontColor: fontColor ?? presetFontColor, | 77 | fontColor: fontColor ?? presetFontColor, | 
| 71 | backgroundColor: backgroundColor ?? persetBackgroundColor, | 78 | backgroundColor: backgroundColor ?? persetBackgroundColor, | 
| 79 | + deviceName, | ||
| 80 | + deviceRename, | ||
| 72 | attribute, | 81 | attribute, | 
| 73 | attributeRename, | 82 | attributeRename, | 
| 74 | id: deviceId, | 83 | id: deviceId, | 
| @@ -79,6 +88,7 @@ | @@ -79,6 +88,7 @@ | ||
| 79 | const percentList = ref( | 88 | const percentList = ref( | 
| 80 | props.config.option.dataSource ? unref(getDesign).dataSource : defaultValue | 89 | props.config.option.dataSource ? unref(getDesign).dataSource : defaultValue | 
| 81 | ); | 90 | ); | 
| 91 | + console.log(percentList, 'percentList'); | ||
| 82 | 92 | ||
| 83 | const { forEachGroupMessage } = useReceiveMessage(); | 93 | const { forEachGroupMessage } = useReceiveMessage(); | 
| 84 | 94 | ||
| @@ -104,8 +114,8 @@ | @@ -104,8 +114,8 @@ | ||
| 104 | 114 | ||
| 105 | <div v-for="item in percentList" :key="item.id" class="flex flex-col ml-3 mr-3 items-stretch"> | 115 | <div v-for="item in percentList" :key="item.id" class="flex flex-col ml-3 mr-3 items-stretch"> | 
| 106 | <div class="flex justify-between"> | 116 | <div class="flex justify-between"> | 
| 107 | - <div class="text-gray-500 text-lg truncate"> | ||
| 108 | - {{ item.attributeRename || item.attribute || '温度' }} | 117 | + <div class="text-gray-500 text-lg truncate" :style="{ color: item.fontColor }"> | 
| 118 | + {{ item.deviceRename || item.deviceName + '-' + item.attribute || '温度' }} | ||
| 109 | </div> | 119 | </div> | 
| 110 | <span class="text-lg" :style="{ color: item.fontColor }" | 120 | <span class="text-lg" :style="{ color: item.fontColor }" | 
| 111 | >{{ item.value }} {{ item.unit }}</span | 121 | >{{ item.value }} {{ item.unit }}</span | 
| @@ -44,12 +44,6 @@ | @@ -44,12 +44,6 @@ | ||
| 44 | }; | 44 | }; | 
| 45 | }, | 45 | }, | 
| 46 | }, | 46 | }, | 
| 47 | - { | ||
| 48 | - field: ComponentConfigFieldEnum.SHOW_DEVICE_NAME, | ||
| 49 | - label: '显示设备名称', | ||
| 50 | - component: 'Checkbox', | ||
| 51 | - defaultValue: option.showDeviceName, | ||
| 52 | - }, | ||
| 53 | ], | 47 | ], | 
| 54 | showActionButtonGroup: false, | 48 | showActionButtonGroup: false, | 
| 55 | labelWidth: 120, | 49 | labelWidth: 120, | 
| @@ -7,6 +7,8 @@ | @@ -7,6 +7,8 @@ | ||
| 7 | import { SvgIcon } from '/@/components/Icon'; | 7 | import { SvgIcon } from '/@/components/Icon'; | 
| 8 | import { computed } from 'vue'; | 8 | import { computed } from 'vue'; | 
| 9 | import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; | 9 | import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; | 
| 10 | + import { useReceiveMessage } from '../../../hook/useReceiveMessage'; | ||
| 11 | + import { useReceiveValue } from '../../../hook/useReceiveValue'; | ||
| 10 | 12 | ||
| 11 | const props = defineProps<{ | 13 | const props = defineProps<{ | 
| 12 | config: ComponentPropsConfigType<typeof option>; | 14 | config: ComponentPropsConfigType<typeof option>; | 
| @@ -24,7 +26,8 @@ | @@ -24,7 +26,8 @@ | ||
| 24 | return { | 26 | return { | 
| 25 | dataSource: dataSource.map((item) => { | 27 | dataSource: dataSource.map((item) => { | 
| 26 | const { fontColor, icon, iconColor, unit } = item.componentInfo; | 28 | const { fontColor, icon, iconColor, unit } = item.componentInfo; | 
| 27 | - const { attribute, attributeRename } = item; | 29 | + const { attribute, attributeRename, deviceName, deviceRename, deviceId } = item; | 
| 30 | + | ||
| 28 | return { | 31 | return { | 
| 29 | unit: unit ?? persetUnit, | 32 | unit: unit ?? persetUnit, | 
| 30 | fontColor: fontColor ?? persetFontColor, | 33 | fontColor: fontColor ?? persetFontColor, | 
| @@ -32,11 +35,22 @@ | @@ -32,11 +35,22 @@ | ||
| 32 | iconColor: iconColor ?? persetIconColor, | 35 | iconColor: iconColor ?? persetIconColor, | 
| 33 | attribute: attribute || attributeRename, | 36 | attribute: attribute || attributeRename, | 
| 34 | attributeRename, | 37 | attributeRename, | 
| 38 | + deviceName, | ||
| 39 | + deviceRename, | ||
| 40 | + id: deviceId, | ||
| 35 | }; | 41 | }; | 
| 42 | + // return { | ||
| 43 | + // unit: unit ?? persetUnit, | ||
| 44 | + // fontColor: fontColor ?? persetFontColor, | ||
| 45 | + // icon: icon ?? persetIcon, | ||
| 46 | + // iconColor: iconColor ?? persetIconColor, | ||
| 47 | + // attribute: attribute || attributeRename, | ||
| 48 | + // attributeRename, | ||
| 49 | + // }; | ||
| 36 | }), | 50 | }), | 
| 37 | }; | 51 | }; | 
| 38 | }); | 52 | }); | 
| 39 | - const svgList = ref<any>([ | 53 | + const defaultSvgList = ref<any>([ | 
| 40 | { | 54 | { | 
| 41 | value: 26.2, | 55 | value: 26.2, | 
| 42 | name: 'wendu', | 56 | name: 'wendu', | 
| @@ -55,23 +69,53 @@ | @@ -55,23 +69,53 @@ | ||
| 55 | }, | 69 | }, | 
| 56 | ]); | 70 | ]); | 
| 57 | 71 | ||
| 58 | - const updateFn: MultipleDataFetchUpdateFn = (message) => { | ||
| 59 | - const { data = {} } = message; | ||
| 60 | - const { dataSource } = unref(getDesign); | ||
| 61 | - svgList.value.length = 0; | ||
| 62 | - svgList.value = dataSource.map((item) => { | ||
| 63 | - const { icon, iconColor, unit, fontColor, attribute } = item || {}; | ||
| 64 | - const [latest] = data[attribute] || []; | ||
| 65 | - const [_timespan, value] = latest || []; | ||
| 66 | - return { | ||
| 67 | - value: Number(value), | ||
| 68 | - name: attribute, | ||
| 69 | - icon, | ||
| 70 | - unit, | ||
| 71 | - iconColor, | ||
| 72 | - fontColor, | ||
| 73 | - }; | 72 | + const { forEachGroupMessage } = useReceiveMessage(); | 
| 73 | + const { getNumberValue } = useReceiveValue(); | ||
| 74 | + | ||
| 75 | + const updateSvgList = ref( | ||
| 76 | + props.config.option.dataSource ? unref(getDesign).dataSource : defaultSvgList | ||
| 77 | + ); | ||
| 78 | + | ||
| 79 | + const updateFn: MultipleDataFetchUpdateFn = (message, deviceId, attribute) => { | ||
| 80 | + // console.log(unref(getDesign).dataSource, 'dataSource'); | ||
| 81 | + forEachGroupMessage(message, deviceId, attribute, (attribute, value) => { | ||
| 82 | + // unref(getDesign).dataSource.forEach((item) => { | ||
| 83 | + // if (item.id === deviceId && item.attribute === attribute) { | ||
| 84 | + // svgList.value = unref(getDesign).dataSource.map((item) => { | ||
| 85 | + // return { | ||
| 86 | + // value: getNumberValue(value), | ||
| 87 | + // name: item.deviceRename || item.deviceName, | ||
| 88 | + // icon: item.icon, | ||
| 89 | + // unit: item.unit, | ||
| 90 | + // fontColor: item.fontColor, | ||
| 91 | + // iconColor: item.iconColor, | ||
| 92 | + // }; | ||
| 93 | + // }); | ||
| 94 | + // } | ||
| 95 | + updateSvgList.value.forEach((item) => { | ||
| 96 | + if (item.id === deviceId && item.attribute === attribute) { | ||
| 97 | + item.value = getNumberValue(value); | ||
| 98 | + } | ||
| 99 | + }); | ||
| 100 | + // }); | ||
| 74 | }); | 101 | }); | 
| 102 | + // console.log(unref(svgList), 'svglist'); | ||
| 103 | + // const { data = {} } = message; | ||
| 104 | + // const { dataSource } = unref(getDesign); | ||
| 105 | + // svgList.value.length = 0; | ||
| 106 | + // svgList.value = dataSource.map((item) => { | ||
| 107 | + // const { icon, iconColor, unit, fontColor, attribute } = item || {}; | ||
| 108 | + // const [latest] = data[attribute] || []; | ||
| 109 | + // const [_timespan, value] = latest || []; | ||
| 110 | + // return { | ||
| 111 | + // value: Number(value), | ||
| 112 | + // name: attribute, | ||
| 113 | + // icon, | ||
| 114 | + // unit, | ||
| 115 | + // iconColor, | ||
| 116 | + // fontColor, | ||
| 117 | + // }; | ||
| 118 | + // }); | ||
| 75 | }; | 119 | }; | 
| 76 | 120 | ||
| 77 | useMultipleDataFetch(props, updateFn); | 121 | useMultipleDataFetch(props, updateFn); | 
| @@ -82,7 +126,7 @@ | @@ -82,7 +126,7 @@ | ||
| 82 | <DeviceName :config="config" /> | 126 | <DeviceName :config="config" /> | 
| 83 | <div | 127 | <div | 
| 84 | style="width: 86%" | 128 | style="width: 86%" | 
| 85 | - v-for="item in svgList" | 129 | + v-for="item in updateSvgList" | 
| 86 | :key="item.id" | 130 | :key="item.id" | 
| 87 | class="flex justify-between items-center" | 131 | class="flex justify-between items-center" | 
| 88 | > | 132 | > | 
| @@ -94,7 +138,9 @@ | @@ -94,7 +138,9 @@ | ||
| 94 | :style="{ color: item.iconColor }" | 138 | :style="{ color: item.iconColor }" | 
| 95 | /> | 139 | /> | 
| 96 | 140 | ||
| 97 | - <div class="text-gray-500 text-lg truncate ml-6">{{ item.attribute || '温度' }}</div> | 141 | + <div class="text-gray-500 text-lg truncate ml-6">{{ | 
| 142 | + item.deviceRename || item.deviceName || '温度' | ||
| 143 | + }}</div> | ||
| 98 | </div> | 144 | </div> | 
| 99 | 145 | ||
| 100 | <h1 class="font-bold text-xl m-2 truncate" :style="{ color: item.fontColor }"> | 146 | <h1 class="font-bold text-xl m-2 truncate" :style="{ color: item.fontColor }"> |