Showing
3 changed files
with
81 additions
and
6 deletions
| @@ -57,9 +57,7 @@ export interface GetModelTslParams { | @@ -57,9 +57,7 @@ export interface GetModelTslParams { | ||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | export interface ImportModelOfMatterType { | 59 | export interface ImportModelOfMatterType { |
| 60 | - attributeModels: any[]; | ||
| 61 | - eventModels: any[]; | 60 | + data: Recordable; |
| 62 | functionType: string; | 61 | functionType: string; |
| 63 | - serviceModels: any[]; | ||
| 64 | tkDeviceProfileId: string; | 62 | tkDeviceProfileId: string; |
| 65 | } | 63 | } |
| @@ -138,6 +138,7 @@ | @@ -138,6 +138,7 @@ | ||
| 138 | import { OpenModelOfMatterModelParams, OpenModelMode } from './cpns/physical/types'; | 138 | import { OpenModelOfMatterModelParams, OpenModelMode } from './cpns/physical/types'; |
| 139 | import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; | 139 | import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; |
| 140 | import { ref } from 'vue'; | 140 | import { ref } from 'vue'; |
| 141 | + import { isObject, isString } from '/@/utils/is'; | ||
| 141 | defineEmits(['register']); | 142 | defineEmits(['register']); |
| 142 | 143 | ||
| 143 | const props = defineProps<{ | 144 | const props = defineProps<{ |
| @@ -234,13 +235,33 @@ | @@ -234,13 +235,33 @@ | ||
| 234 | } | 235 | } |
| 235 | }; | 236 | }; |
| 236 | 237 | ||
| 238 | + const paseJSON = (string: string) => { | ||
| 239 | + let data = null; | ||
| 240 | + let flag = false; | ||
| 241 | + try { | ||
| 242 | + if (!isString(string)) return { flag: false, data }; | ||
| 243 | + data = JSON.parse(string); | ||
| 244 | + flag = true; | ||
| 245 | + if (!isObject(data)) flag = false; | ||
| 246 | + } catch (error) {} | ||
| 247 | + return { flag, data }; | ||
| 248 | + }; | ||
| 249 | + | ||
| 237 | const handleImportModel = async (data: { file: File }) => { | 250 | const handleImportModel = async (data: { file: File }) => { |
| 238 | const fileReader = new FileReader(); | 251 | const fileReader = new FileReader(); |
| 239 | 252 | ||
| 240 | - fileReader.onload = () => { | ||
| 241 | - console.log(fileReader.result); | 253 | + fileReader.onload = async () => { |
| 254 | + const { flag, data } = paseJSON(fileReader.result as string); | ||
| 255 | + if (!flag) return; | ||
| 256 | + const result = await importModelOfMatter({ | ||
| 257 | + tkDeviceProfileId: props.record.id, | ||
| 258 | + data: data!, | ||
| 259 | + functionType: 'all', | ||
| 260 | + }); | ||
| 261 | + | ||
| 262 | + result ? createMessage.success('导入成功~') : createMessage.error('导入失败~'); | ||
| 242 | 263 | ||
| 243 | - importModelOfMatter({ tkDeviceProfileId: props.record.id }); | 264 | + result && reload(); |
| 244 | }; | 265 | }; |
| 245 | 266 | ||
| 246 | fileReader.readAsText(data.file, 'utf-8'); | 267 | fileReader.readAsText(data.file, 'utf-8'); |
| 1 | +import { ref } from 'vue'; | ||
| 2 | +import { DataSource } from '../../palette/types'; | ||
| 3 | +import { sendCommandOneway } from '/@/api/dataBoard'; | ||
| 4 | +import { useMessage } from '/@/hooks/web/useMessage'; | ||
| 5 | +import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const'; | ||
| 6 | + | ||
| 7 | +const { createMessage } = useMessage(); | ||
| 8 | +export function useSendCommand() { | ||
| 9 | + const loading = ref(false); | ||
| 10 | + | ||
| 11 | + const error = () => { | ||
| 12 | + createMessage.error('下发指令失败'); | ||
| 13 | + return false; | ||
| 14 | + }; | ||
| 15 | + const sendCommand = async (record: DataSource, value: any) => { | ||
| 16 | + if (!record) return error(); | ||
| 17 | + const { customCommand, attribute } = record; | ||
| 18 | + | ||
| 19 | + const { deviceId } = record; | ||
| 20 | + if (!deviceId) return error(); | ||
| 21 | + loading.value = true; | ||
| 22 | + try { | ||
| 23 | + let params: string | Recordable = { | ||
| 24 | + [attribute!]: Number(value), | ||
| 25 | + }; | ||
| 26 | + | ||
| 27 | + // 如果是TCP设备从物模型中获取下发命令(TCP网关子设备无物模型服务与事件) | ||
| 28 | + if (customCommand?.transportType === TransportTypeEnum.TCP) { | ||
| 29 | + params = customCommand.command!; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + // 控制按钮下发命令为0 或 1 | ||
| 33 | + await sendCommandOneway({ | ||
| 34 | + deviceId, | ||
| 35 | + value: { | ||
| 36 | + params: params, | ||
| 37 | + persistent: true, | ||
| 38 | + additionalInfo: { | ||
| 39 | + cmdType: 'API', | ||
| 40 | + }, | ||
| 41 | + method: 'methodThingskit', | ||
| 42 | + }, | ||
| 43 | + }); | ||
| 44 | + createMessage.success('命令下发成功'); | ||
| 45 | + return true; | ||
| 46 | + } catch (msg) { | ||
| 47 | + return error(); | ||
| 48 | + } finally { | ||
| 49 | + loading.value = false; | ||
| 50 | + } | ||
| 51 | + }; | ||
| 52 | + return { | ||
| 53 | + sendCommand, | ||
| 54 | + loading, | ||
| 55 | + }; | ||
| 56 | +} |