diff --git a/apps/web-antd/src/api/aiot/device/index.ts b/apps/web-antd/src/api/aiot/device/index.ts index 2a4cab599..dcfd94b39 100644 --- a/apps/web-antd/src/api/aiot/device/index.ts +++ b/apps/web-antd/src/api/aiot/device/index.ts @@ -86,6 +86,7 @@ export namespace AiotDeviceApi { description?: string; isActive?: boolean; paramSchema?: string; + globalParams?: string; } /** 媒体服务器 */ @@ -237,6 +238,14 @@ export function getAlgorithmList() { ); } +/** 保存算法全局参数 */ +export function saveAlgoGlobalParams(algoCode: string, globalParams: string) { + return wvpRequestClient.post( + `/aiot/device/algorithm/global-params/${algoCode}`, + { globalParams }, + ); +} + // ==================== 算法绑定 ==================== /** 绑定算法到 ROI */ diff --git a/apps/web-antd/src/views/aiot/device/algorithm/index.vue b/apps/web-antd/src/views/aiot/device/algorithm/index.vue new file mode 100644 index 000000000..13a7c01ac --- /dev/null +++ b/apps/web-antd/src/views/aiot/device/algorithm/index.vue @@ -0,0 +1,405 @@ + + + + + diff --git a/apps/web-antd/src/views/aiot/device/roi/components/AlgorithmParamEditor.vue b/apps/web-antd/src/views/aiot/device/roi/components/AlgorithmParamEditor.vue index 8b98ab578..a116e69c2 100644 --- a/apps/web-antd/src/views/aiot/device/roi/components/AlgorithmParamEditor.vue +++ b/apps/web-antd/src/views/aiot/device/roi/components/AlgorithmParamEditor.vue @@ -22,6 +22,7 @@ interface Props { bindId: string; priority?: number; enabled?: number; + globalParams?: string; } const props = withDefaults(defineProps(), { @@ -31,6 +32,7 @@ const props = withDefaults(defineProps(), { bindId: '', priority: 0, enabled: 1, + globalParams: '{}', }); const emit = defineEmits<{ @@ -94,6 +96,33 @@ function getParamDesc(key: string): string | undefined { return paramDescMap[key]; } +// 解析全局参数 +const parsedGlobalParams = computed(() => { + try { + return JSON.parse(props.globalParams); + } catch { + return {}; + } +}); + +// 获取全局默认值(如果有) +function getGlobalDefault(key: string): any { + return parsedGlobalParams.value[key]; +} + +// 是否有全局默认值 +function hasGlobalDefault(key: string): boolean { + return parsedGlobalParams.value[key] !== undefined; +} + +// 重置为全局默认值 +function resetToGlobalDefault(key: string) { + const globalVal = getGlobalDefault(key); + if (globalVal !== undefined) { + formData.value[key] = globalVal; + } +} + const parsedSchema = computed(() => { try { return JSON.parse(props.paramSchema); @@ -283,6 +312,17 @@ function validateParams(params: Record): {
{{ getParamDesc(String(key)) }}
+
+ 全局默认: {{ getGlobalDefault(String(key)) }} + +
@@ -325,11 +365,23 @@ function validateParams(params: Record): { - + @@ -371,4 +423,20 @@ function validateParams(params: Record): { color: #8c8c8c; line-height: 1.5; } + +.global-default-hint { + display: flex; + align-items: center; + gap: 4px; + margin-top: 2px; + font-size: 12px; + color: #bfbfbf; +} + +.reset-btn { + padding: 0 4px; + font-size: 12px; + height: auto; + line-height: 1.5; +} diff --git a/apps/web-antd/src/views/aiot/device/roi/components/RoiAlgorithmBind.vue b/apps/web-antd/src/views/aiot/device/roi/components/RoiAlgorithmBind.vue index 85abb9b9f..2c44daa0a 100644 --- a/apps/web-antd/src/views/aiot/device/roi/components/RoiAlgorithmBind.vue +++ b/apps/web-antd/src/views/aiot/device/roi/components/RoiAlgorithmBind.vue @@ -63,6 +63,7 @@ const currentParams = ref('{}'); const currentBindId = ref(''); const currentPriority = ref(0); const currentEnabled = ref(1); +const currentGlobalParams = ref('{}'); watch( () => props.roiId, @@ -128,6 +129,11 @@ function openParamEditor(item: AiotDeviceApi.RoiAlgoBinding) { currentParamSchema.value = item.algorithm?.paramSchema || '{}'; currentPriority.value = item.bind.priority ?? 0; currentEnabled.value = item.bind.enabled ?? 1; + // 查找该算法的全局参数 + const algo = availableAlgorithms.value.find( + (a) => a.algoCode === item.bind.algoCode, + ); + currentGlobalParams.value = algo?.globalParams || '{}'; paramEditorOpen.value = true; } @@ -307,6 +313,7 @@ async function onAlarmLevelChange(item: AiotDeviceApi.RoiAlgoBinding, level: num :bind-id="currentBindId" :priority="currentPriority" :enabled="currentEnabled" + :global-params="currentGlobalParams" @saved="onParamSaved" />