Commit 15980c0da066d4ee6971800e7b95ab292d808edf
Merge branch 'dev-ww' into 'main'
fix: 修复物模型数据布尔类型的属性未使用布尔单位 See merge request yunteng/thingskit-front!521
Showing
2 changed files
with
57 additions
and
26 deletions
@@ -181,6 +181,7 @@ export interface DeviceRecord { | @@ -181,6 +181,7 @@ export interface DeviceRecord { | ||
181 | profileId: string; | 181 | profileId: string; |
182 | alias?: string; | 182 | alias?: string; |
183 | brand?: string; | 183 | brand?: string; |
184 | + deviceProfileId: string; | ||
184 | deviceProfile: { | 185 | deviceProfile: { |
185 | default: boolean; | 186 | default: boolean; |
186 | name: string; | 187 | name: string; |
1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
2 | - import { nextTick, onUnmounted, reactive, ref, unref } from 'vue'; | 2 | + import { nextTick, onMounted, onUnmounted, reactive, ref, unref } from 'vue'; |
3 | import { List, Button, Card } from 'ant-design-vue'; | 3 | import { List, Button, Card } from 'ant-design-vue'; |
4 | import { PageWrapper } from '/@/components/Page'; | 4 | import { PageWrapper } from '/@/components/Page'; |
5 | import { BasicTable, useTable } from '/@/components/Table'; | 5 | import { BasicTable, useTable } from '/@/components/Table'; |
@@ -124,23 +124,54 @@ | @@ -124,23 +124,54 @@ | ||
124 | 124 | ||
125 | const getUnit = (record: StructJSON) => { | 125 | const getUnit = (record: StructJSON) => { |
126 | const { dataType } = record; | 126 | const { dataType } = record; |
127 | - const { specs } = dataType! || {}; | ||
128 | - return isObject(specs) | 127 | + const { specs, type } = dataType! || {}; |
128 | + const unitName = isObject(specs) | ||
129 | ? (specs as Specs).unitName && (specs as Specs).unit | 129 | ? (specs as Specs).unitName && (specs as Specs).unit |
130 | ? `${(specs as Specs).unitName}` | 130 | ? `${(specs as Specs).unitName}` |
131 | : '' | 131 | : '' |
132 | : ''; | 132 | : ''; |
133 | + const { boolClose, boolOpen } = (specs || {}) as Specs; | ||
134 | + return { unit: unitName, boolClose, boolOpen, type }; | ||
133 | }; | 135 | }; |
134 | 136 | ||
135 | const isStructAndTextType = (type: DataTypeEnum) => { | 137 | const isStructAndTextType = (type: DataTypeEnum) => { |
136 | return [DataTypeEnum.IS_STRUCT, DataTypeEnum.IS_STRING].includes(type); | 138 | return [DataTypeEnum.IS_STRUCT, DataTypeEnum.IS_STRING].includes(type); |
137 | }; | 139 | }; |
138 | 140 | ||
139 | - const { send, close, data } = useWebSocket(socketInfo.origin, { | 141 | + const setDataSource = () => { |
142 | + socketInfo.originData = socketInfo.dataSource = socketInfo.attrKeys.map((item) => { | ||
143 | + const { identifier: key, name, detail } = item; | ||
144 | + const { unit, boolClose, boolOpen, type } = getUnit(detail); | ||
145 | + const dataInfo = socketInfo.attrKeys.find((item) => item.identifier === key); | ||
146 | + let time: number | undefined; | ||
147 | + let value: any | undefined; | ||
148 | + const message = socketInfo.message[key]; | ||
149 | + if (message) { | ||
150 | + const [attrTime, attrValue] = message.at(0) || []; | ||
151 | + time = attrTime; | ||
152 | + value = attrValue; | ||
153 | + } | ||
154 | + | ||
155 | + return { | ||
156 | + key, | ||
157 | + value, | ||
158 | + time, | ||
159 | + name, | ||
160 | + unit, | ||
161 | + type, | ||
162 | + boolClose, | ||
163 | + boolOpen, | ||
164 | + showHistoryDataButton: !isStructAndTextType( | ||
165 | + dataInfo?.detail.dataType?.type as unknown as DataTypeEnum | ||
166 | + ), | ||
167 | + }; | ||
168 | + }); | ||
169 | + }; | ||
170 | + | ||
171 | + const { send, close, data, open } = useWebSocket(socketInfo.origin, { | ||
172 | + immediate: false, | ||
173 | + autoReconnect: true, | ||
140 | async onConnected() { | 174 | async onConnected() { |
141 | - const { deviceProfileId } = props.deviceDetail; | ||
142 | - const value = await getDeviceAttrs({ deviceProfileId }); | ||
143 | - socketInfo.attrKeys = isArray(value) ? value : []; | ||
144 | send(JSON.stringify(unref(getSendValue))); | 175 | send(JSON.stringify(unref(getSendValue))); |
145 | }, | 176 | }, |
146 | async onMessage() { | 177 | async onMessage() { |
@@ -153,23 +184,7 @@ | @@ -153,23 +184,7 @@ | ||
153 | socketInfo.message[key] = value.data[key]; | 184 | socketInfo.message[key] = value.data[key]; |
154 | }); | 185 | }); |
155 | 186 | ||
156 | - socketInfo.originData = socketInfo.dataSource = socketInfo.attrKeys.map((item) => { | ||
157 | - const { identifier: key, name, detail } = item; | ||
158 | - const unit = getUnit(detail); | ||
159 | - const [time, value] = socketInfo.message[key].at(0) || []; | ||
160 | - const dataInfo = socketInfo.attrKeys.find((item) => item.identifier === key); | ||
161 | - | ||
162 | - return { | ||
163 | - key, | ||
164 | - value, | ||
165 | - time, | ||
166 | - name, | ||
167 | - unit, | ||
168 | - showHistoryDataButton: !isStructAndTextType( | ||
169 | - dataInfo?.detail.dataType?.type as unknown as DataTypeEnum | ||
170 | - ), | ||
171 | - }; | ||
172 | - }); | 187 | + setDataSource(); |
173 | 188 | ||
174 | await nextTick(); | 189 | await nextTick(); |
175 | setTableData(socketInfo.dataSource); | 190 | setTableData(socketInfo.dataSource); |
@@ -177,7 +192,7 @@ | @@ -177,7 +192,7 @@ | ||
177 | } catch (error) {} | 192 | } catch (error) {} |
178 | }, | 193 | }, |
179 | onDisconnected() { | 194 | onDisconnected() { |
180 | - close(); | 195 | + // close(); |
181 | }, | 196 | }, |
182 | onError() { | 197 | onError() { |
183 | createMessage.error('webSocket连接超时,请联系管理员'); | 198 | createMessage.error('webSocket连接超时,请联系管理员'); |
@@ -190,6 +205,15 @@ | @@ -190,6 +205,15 @@ | ||
190 | openModal(true); | 205 | openModal(true); |
191 | }; | 206 | }; |
192 | 207 | ||
208 | + onMounted(async () => { | ||
209 | + const { deviceProfileId } = props.deviceDetail; | ||
210 | + const value = await getDeviceAttrs({ deviceProfileId }); | ||
211 | + socketInfo.attrKeys = isArray(value) ? value : []; | ||
212 | + console.log(socketInfo); | ||
213 | + setDataSource(); | ||
214 | + open(); | ||
215 | + }); | ||
216 | + | ||
193 | onUnmounted(() => close()); | 217 | onUnmounted(() => close()); |
194 | </script> | 218 | </script> |
195 | 219 | ||
@@ -228,7 +252,13 @@ | @@ -228,7 +252,13 @@ | ||
228 | </template> | 252 | </template> |
229 | <section class="min-h-16 flex flex-col justify-between"> | 253 | <section class="min-h-16 flex flex-col justify-between"> |
230 | <div class="flex font-bold text-lg mb-4 gap-2"> | 254 | <div class="flex font-bold text-lg mb-4 gap-2"> |
231 | - <div>{{ item.value || '--' }}</div> | 255 | + <div>{{ |
256 | + item.type === DataTypeEnum.IS_BOOL | ||
257 | + ? !!Number(item.value) | ||
258 | + ? item.boolOpen | ||
259 | + : item.boolClose | ||
260 | + : item.value || '--' | ||
261 | + }}</div> | ||
232 | <div class="text-xs flex items-center">{{ item.unit }}</div> | 262 | <div class="text-xs flex items-center">{{ item.unit }}</div> |
233 | </div> | 263 | </div> |
234 | <div class="text-dark-800 text-xs"> | 264 | <div class="text-dark-800 text-xs"> |