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 | 2 | import { ComponentPropsConfigType, DataFetchUpdateFn } from '/@/views/visual/packages/index.type'; |
3 | 3 | import { option } from './config'; |
4 | 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 | 7 | import { useComponentScale } from '../../../hook/useComponentScale'; |
8 | 8 | import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; |
9 | + import { useSendCommand } from '../../../hook/useSendCommand'; | |
10 | + import { useReceiveValue } from '../../../hook/useReceiveValue'; | |
9 | 11 | |
10 | 12 | const props = defineProps<{ |
11 | 13 | config: ComponentPropsConfigType<typeof option>; |
12 | 14 | }>(); |
13 | 15 | |
14 | 16 | const sliderValue = ref<number>(33); |
17 | + const oldSliderValue = ref<number>(33); | |
15 | 18 | const sMin = ref<number>(0); |
16 | 19 | const sMax = ref<number>(100); |
17 | 20 | |
21 | + const { loading, sendCommand } = useSendCommand(); | |
22 | + | |
18 | 23 | const getDesign = computed(() => { |
19 | 24 | const { option, persetOption } = props.config; |
20 | 25 | const { componentInfo, attribute, attributeRename } = option; |
... | ... | @@ -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 | 61 | useDataFetch(props, updateFn); |
... | ... | @@ -42,28 +66,31 @@ |
42 | 66 | <main class="w-full h-full flex flex-col justify-center"> |
43 | 67 | <DeviceName :config="config" class="text-center" /> |
44 | 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 | 94 | </main> |
68 | 95 | </main> |
69 | 96 | </template> | ... | ... |
... | ... | @@ -244,7 +244,9 @@ export const commonDataSourceSchemas = (): FormSchema[] => { |
244 | 244 | return await getDeviceAttribute({ |
245 | 245 | deviceProfileId, |
246 | 246 | dataType: |
247 | - isControlComponent(category!) || isBooleanComponent(unref(selectWidgetKeys)) | |
247 | + (isControlComponent(category!) && | |
248 | + unref(selectWidgetKeys).componentKey !== 'LateralNumericalControl') || | |
249 | + isBooleanComponent(unref(selectWidgetKeys)) | |
248 | 250 | ? DataTypeEnum.IS_BOOL |
249 | 251 | : undefined, |
250 | 252 | }); | ... | ... |