diff --git a/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue b/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue index df7a1ac..81b4b76 100644 --- a/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue +++ b/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue @@ -736,6 +736,29 @@ const serviceCallOptions = ref< const selectedServiceIndex = ref(undefined); const serviceCallFormValues = ref>({}); +/** 服务调用接口返回,展示在弹窗内;不自动关闭弹窗 */ +const serviceCallResultText = ref(''); +const serviceCallResultOk = ref(true); + +function formatServiceCallResultPayload(data: unknown): string { + if (data === undefined || data === null) { + return '(接口无返回体)'; + } + if (typeof data === 'string') { + return data.trim() === '' ? '(空字符串)' : data; + } + try { + return JSON.stringify(data, null, 2); + } catch { + return String(data); + } +} + +function clearServiceCallResult() { + serviceCallResultText.value = ''; + serviceCallResultOk.value = true; +} + /** 需用日期时间选择「起始时标」的冻结/补抄类服务(与物模型服务标识 key 一致) */ const FREEZE_START_TIME_MARKER_SERVICES = new Set([ 'DayFreezeService', @@ -1183,12 +1206,14 @@ const [ServiceCallModal, serviceCallModalApi] = useVbenModal({ serviceCallFormValues.value = {}; valveCommandTypeOptions.value = []; valveCommandTypeLoading.value = false; + clearServiceCallResult(); return true; }, onOpenChange: async (isOpen: boolean) => { if (!isOpen) { return; } + clearServiceCallResult(); const pid = serviceCallRow.value?.ioTPlatformProductId; if (!pid) { Message.warning('设备缺少平台产品信息,无法获取服务列表'); @@ -1256,15 +1281,21 @@ async function submitDeviceServiceCall() { serviceParams, }, } as any); - if (typeof data === 'string' && data.trim() !== '') { - Message.success(data); - } else { - Message.success('服务调用成功'); - } - serviceCallModalApi.close(); - } catch (error) { + serviceCallResultOk.value = true; + serviceCallResultText.value = formatServiceCallResultPayload(data); + Message.success('服务调用成功'); + } catch (error: any) { console.error('调用设备服务失败:', error); - Message.error('调用设备服务失败'); + const backendMessage = + error?.response?.data?.error?.message ?? + error?.data?.error?.message ?? + error?.error?.message; + const msg = + backendMessage && typeof backendMessage === 'string' + ? backendMessage + : (error as Error)?.message || '调用设备服务失败'; + serviceCallResultOk.value = false; + serviceCallResultText.value = msg; } finally { serviceCallModalApi.setState({ loading: false, confirmLoading: false }); } @@ -1275,6 +1306,7 @@ function openServiceCallModal(row: Record) { Message.warning('设备缺少平台产品信息,无法获取服务列表'); return; } + clearServiceCallResult(); serviceCallRow.value = row; serviceCallModalApi.open(); } @@ -2904,7 +2936,7 @@ const toolbarActions = computed(() => [
@@ -2988,6 +3020,19 @@ const toolbarActions = computed(() => [ > 当前服务无参数(thirdValue / secondValue 为空或无法解析)
+
+
调用结果
+
+
{{ serviceCallResultText }}
+
+