Commit 49580d56eab7abaca894f76fed15832131ab239f
Merge branch 'fix/components-lateralNumericalControl' into 'main_dev'
fix: 修改控制组件滑块 See merge request yunteng/thingskit-front!697
Showing
2 changed files
with
56 additions
and
27 deletions
| @@ -2,19 +2,24 @@ | @@ -2,19 +2,24 @@ | ||
| 2 | import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; | 2 | import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; |
| 3 | import { option } from './config'; | 3 | import { option } from './config'; |
| 4 | import { useDataFetch } from '/@/views/visual/packages/hook/useSocket'; | 4 | import { useDataFetch } from '/@/views/visual/packages/hook/useSocket'; |
| 5 | - import { Slider } from 'ant-design-vue'; | ||
| 6 | - import { computed, ref } from 'vue'; | 5 | + import { Slider, Spin } from 'ant-design-vue'; |
| 6 | + import { computed, ref, unref } from 'vue'; | ||
| 7 | import { useComponentScale } from '../../../hook/useComponentScale'; | 7 | import { useComponentScale } from '../../../hook/useComponentScale'; |
| 8 | import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; | 8 | import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; |
| 9 | + import { useSendCommand } from '../../../hook/useSendCommand'; | ||
| 10 | + import { useReceiveValue } from '../../../hook/useReceiveValue'; | ||
| 9 | 11 | ||
| 10 | const props = defineProps<{ | 12 | const props = defineProps<{ |
| 11 | config: ComponentPropsConfigType<typeof option>; | 13 | config: ComponentPropsConfigType<typeof option>; |
| 12 | }>(); | 14 | }>(); |
| 13 | 15 | ||
| 14 | const sliderValue = ref<number>(33); | 16 | const sliderValue = ref<number>(33); |
| 17 | + const oldSliderValue = ref<number>(33); | ||
| 15 | const sMin = ref<number>(0); | 18 | const sMin = ref<number>(0); |
| 16 | const sMax = ref<number>(100); | 19 | const sMax = ref<number>(100); |
| 17 | 20 | ||
| 21 | + const { loading, sendCommand } = useSendCommand(); | ||
| 22 | + | ||
| 18 | const getDesign = computed(() => { | 23 | const getDesign = computed(() => { |
| 19 | const { option, persetOption } = props.config; | 24 | const { option, persetOption } = props.config; |
| 20 | const { componentInfo, attribute, attributeRename } = option; | 25 | const { componentInfo, attribute, attributeRename } = option; |
| @@ -28,10 +33,29 @@ | @@ -28,10 +33,29 @@ | ||
| 28 | }; | 33 | }; |
| 29 | }); | 34 | }); |
| 30 | 35 | ||
| 31 | - const handleChange = async () => {}; | 36 | + const index = ref<number>(0); |
| 37 | + | ||
| 38 | + const handleChange = async (e) => { | ||
| 39 | + index.value++; | ||
| 40 | + if (index.value == 1) { | ||
| 41 | + oldSliderValue.value = unref(sliderValue); | ||
| 42 | + } | ||
| 43 | + sliderValue.value = e; | ||
| 44 | + }; | ||
| 45 | + | ||
| 46 | + const handleAfterChange = async (e) => { | ||
| 47 | + const flag = await sendCommand(props.config.option, unref(sliderValue)); | ||
| 48 | + flag | ||
| 49 | + ? ((sliderValue.value = e), (oldSliderValue.value = sliderValue.value), (index.value = 0)) | ||
| 50 | + : (sliderValue.value = unref(oldSliderValue)); | ||
| 51 | + }; | ||
| 32 | 52 | ||
| 33 | - const updateFn: DataFetchUpdateFn = () => { | ||
| 34 | - // console.log(message, 'message', attribute, 'attribute'); | 53 | + const { getNumberValue } = useReceiveValue(); |
| 54 | + const updateFn: DataFetchUpdateFn = (message, attribute) => { | ||
| 55 | + const { data = {} } = message; | ||
| 56 | + const [latest] = data[attribute] || []; | ||
| 57 | + const [_, value] = latest; | ||
| 58 | + sliderValue.value = getNumberValue(value); | ||
| 35 | }; | 59 | }; |
| 36 | 60 | ||
| 37 | useDataFetch(props, updateFn); | 61 | useDataFetch(props, updateFn); |
| @@ -42,28 +66,31 @@ | @@ -42,28 +66,31 @@ | ||
| 42 | <main class="w-full h-full flex flex-col justify-center"> | 66 | <main class="w-full h-full flex flex-col justify-center"> |
| 43 | <DeviceName :config="config" class="text-center" /> | 67 | <DeviceName :config="config" class="text-center" /> |
| 44 | <main :style="getScale"> | 68 | <main :style="getScale"> |
| 45 | - <div class="flex flex-col ml-11 mr-11"> | ||
| 46 | - <span | ||
| 47 | - :style="{ color: getDesign.fontColor }" | ||
| 48 | - class="font-bold text-xl mt-3 truncate text-center" | ||
| 49 | - >{{ sliderValue }}</span | ||
| 50 | - > | ||
| 51 | - <Slider | ||
| 52 | - :style="{ '--slider-color': getDesign.controlBarColor }" | ||
| 53 | - class="no-drag" | ||
| 54 | - v-model:value="sliderValue" | ||
| 55 | - :min="sMin" | ||
| 56 | - :max="sMax" | ||
| 57 | - @change="handleChange" | ||
| 58 | - /> | 69 | + <Spin :spinning="loading" class="w-full h-full"> |
| 70 | + <div class="flex flex-col ml-11 mr-11 w-full"> | ||
| 71 | + <span | ||
| 72 | + :style="{ color: getDesign.fontColor }" | ||
| 73 | + class="font-bold text-xl mt-3 truncate text-center" | ||
| 74 | + >{{ sliderValue }}</span | ||
| 75 | + > | ||
| 76 | + <Slider | ||
| 77 | + :style="{ '--slider-color': getDesign.controlBarColor }" | ||
| 78 | + class="no-drag" | ||
| 79 | + :value="sliderValue" | ||
| 80 | + :min="sMin" | ||
| 81 | + :max="sMax" | ||
| 82 | + @change="handleChange" | ||
| 83 | + @afterChange="handleAfterChange" | ||
| 84 | + /> | ||
| 59 | 85 | ||
| 60 | - <span | ||
| 61 | - :style="{ color: getDesign.fontColor }" | ||
| 62 | - class="mt-3 truncate font-bold text-xs text-center" | ||
| 63 | - > | ||
| 64 | - {{ getDesign.attribute || '设备1' }} | ||
| 65 | - </span> | ||
| 66 | - </div> | 86 | + <span |
| 87 | + :style="{ color: getDesign.fontColor }" | ||
| 88 | + class="mt-3 truncate font-bold text-xs text-center" | ||
| 89 | + > | ||
| 90 | + {{ getDesign.attribute || '设备1' }} | ||
| 91 | + </span> | ||
| 92 | + </div> | ||
| 93 | + </Spin> | ||
| 67 | </main> | 94 | </main> |
| 68 | </main> | 95 | </main> |
| 69 | </template> | 96 | </template> |
| @@ -244,7 +244,9 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | @@ -244,7 +244,9 @@ export const commonDataSourceSchemas = (): FormSchema[] => { | ||
| 244 | return await getDeviceAttribute({ | 244 | return await getDeviceAttribute({ |
| 245 | deviceProfileId, | 245 | deviceProfileId, |
| 246 | dataType: | 246 | dataType: |
| 247 | - isControlComponent(category!) || isBooleanComponent(unref(selectWidgetKeys)) | 247 | + (isControlComponent(category!) && |
| 248 | + unref(selectWidgetKeys).componentKey !== 'LateralNumericalControl') || | ||
| 249 | + isBooleanComponent(unref(selectWidgetKeys)) | ||
| 248 | ? DataTypeEnum.IS_BOOL | 250 | ? DataTypeEnum.IS_BOOL |
| 249 | : undefined, | 251 | : undefined, |
| 250 | }); | 252 | }); |