diff --git a/client/src/sections/wuyuanbiaoba/components/AdvancedSettings.jsx b/client/src/sections/wuyuanbiaoba/components/AdvancedSettings.jsx index 7a61947..b96f9f6 100644 --- a/client/src/sections/wuyuanbiaoba/components/AdvancedSettings.jsx +++ b/client/src/sections/wuyuanbiaoba/components/AdvancedSettings.jsx @@ -52,6 +52,27 @@ const AdvancedSettings = ({ onLogout }) => { } }, [isReady, fetchAllSettings]); + // IP 地址验证函数 + const validateIP = (ip) => { + if (!ip) return true; // 允许空值 + const ipRegex = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; + + // 如果匹配 IP 格式(包含点分十进制),则严格按 IP 验证 + if (/^\d+\.\d+\.\d+\.\d+$/.test(ip)) { + return ipRegex.test(ip); + } + + // 否则按域名验证 + const domainRegex = /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; + return domainRegex.test(ip); + }; + + // 端口验证函数 + const validatePort = (port) => { + const portNum = Number(port); + return !isNaN(portNum) && portNum >= 1 && portNum <= 65535; + }; + // 从 settings 中提取配置 const deviceId = settings.deviceId; const fps = settings.dataFps; @@ -183,6 +204,20 @@ const AdvancedSettings = ({ onLogout }) => { }); const handleSave = () => { + if (enableMqtt) { + if (brokerAddress && !validateIP(brokerAddress)) { + message.error('Broker 地址格式不正确,请检查后重试'); + return; + } + if (mqttPort && !validatePort(mqttPort)) { + message.error('端口号格式不正确,请检查后重试'); + return; + } + if (!brokerAddress) { + message.warning('启用 MQTT 时请填写 Broker 地址'); + return; + } + } saveAllSettings(); }; @@ -543,19 +578,30 @@ const AdvancedSettings = ({ onLogout }) => {