import { useEffect, type ReactNode } from "react"; import { SettingsRegular, DeleteRegular, SaveRegular } from "@fluentui/react-icons"; import { Button, Input, Select } from "../ui"; import { isQmiControl } from "./shared"; import type { DeviceConfig } from "../../types"; import type { DeviceDetail } from "./types"; import { useI18n } from "../../lib/i18n"; import { DEVICE_TYPES, deviceTypeImage } from "../../lib/deviceTypes"; export interface DeviceConfigTabProps { editConfig: DeviceConfig | null; deviceStatus: DeviceDetail | null; saving: boolean; deleting: boolean; onSave: () => void; onDelete: () => void; onEditConfig: (next: DeviceConfig) => void; } function Field({ label, children }: { label: ReactNode; children: ReactNode }) { return (
{children}
); } export function DeviceConfigTab({ editConfig, deviceStatus, saving, deleting, onSave, onDelete, onEditConfig }: DeviceConfigTabProps) { const { t } = useI18n(); const controlDevice = deviceStatus?.controlDevice || editConfig?.controlDevice; const interfaceName = deviceStatus?.interface || editConfig?.interface; const atPort = deviceStatus?.atPort || editConfig?.atPort; const usbPath = deviceStatus?.usbPath || editConfig?.usbPath; const isQmi = isQmiControl(controlDevice); const isMbim = String(editConfig?.deviceBackend || "").toLowerCase() === "mbim"; useEffect(() => { if (isQmi && editConfig && editConfig.deviceBackend !== "qmi") onEditConfig({ ...editConfig, deviceBackend: "qmi" }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [isQmi]); const backendOptions = [ ...(isMbim ? [] : [ { value: "at", label: "AT", disabled: isQmi }, { value: "qmi", label: "QMI", disabled: !controlDevice && editConfig?.deviceBackend !== "qmi" }, ]), ...(isMbim ? [{ value: "mbim", label: "MBIM" }] : []), ]; return (
{t("设备配置")}
{t("配置存储在数据库中,部分字段可能需要重启生效")}
{editConfig ? (
onEditConfig({ ...editConfig, name: e.target.value })} placeholder={t("显示名称")} />
{t("设备运行模式")}
{isQmi ? t("此类设备固定 QMI,AT 口仅用于终端") : isMbim ? t("此类设备固定 MBIM,AT 口仅用于终端") : t("AT=传统串口 / QMI=纯 QMI")}