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"; const isReader = editConfig?.deviceType === "usb_sim_reader"; useEffect(() => { if (isQmi && editConfig && editConfig.deviceBackend !== "qmi") onEditConfig({ ...editConfig, deviceBackend: "qmi" }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [isQmi]); const backendOptions = isReader ? [{ value: "pcsc", label: "PC/SC" }] : [ ...(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("显示名称")} />
{isReader ? onEditConfig({ ...editConfig, simPin: e.target.value })} maxLength={8} inputMode="numeric" placeholder={t("留空表示不修改;仅在 SIM 启用 PIN 时填写")} /> : null}
{t("设备运行模式")}
{isQmi ? t("QMI 负责驻网状态与数据会话;AT 负责 SIM/eSIM、射频、短信、通话和终端指令") : isMbim ? t("MBIM 负责数据会话;AT 负责 SIM/eSIM、射频、短信、通话和终端指令") : t("AT 模式通过串口管理驻网与 PDP 数据会话")}