- {c.countryCode ? {flagEmoji(c.countryCode)} : null}
+
{c.operatorName || c.shortName || t("未知网络")}{" "}
{c.status === "current" ? (
diff --git a/web/src/components/devices/FieldRow.tsx b/web/src/components/devices/FieldRow.tsx
index 0aaf303..f927ce5 100644
--- a/web/src/components/devices/FieldRow.tsx
+++ b/web/src/components/devices/FieldRow.tsx
@@ -6,6 +6,7 @@ import { useI18n } from "../../lib/i18n";
export interface FieldRowProps {
label: ReactNode;
value?: unknown;
+ prefix?: ReactNode;
copyable?: boolean;
monospace?: boolean;
placeholder?: string;
@@ -13,7 +14,7 @@ export interface FieldRowProps {
}
// Label/value row used across the overview tab. Click to copy when copyable.
-export function FieldRow({ label, value, copyable, monospace, placeholder, sensitive }: FieldRowProps) {
+export function FieldRow({ label, value, prefix, copyable, monospace, placeholder, sensitive }: FieldRowProps) {
const { t } = useI18n();
const display = (value == null ? "" : String(value)).trim() || placeholder || "--";
const canCopy = !!copyable && !!display && display !== "--" && display !== "---";
@@ -28,7 +29,7 @@ export function FieldRow({ label, value, copyable, monospace, placeholder, sensi
{label}
- {display}
+ {prefix}
+ {display}
);
diff --git a/web/src/components/devices/OverviewNetworkCard.tsx b/web/src/components/devices/OverviewNetworkCard.tsx
index 5be425a..441744b 100644
--- a/web/src/components/devices/OverviewNetworkCard.tsx
+++ b/web/src/components/devices/OverviewNetworkCard.tsx
@@ -5,7 +5,7 @@ import { FieldRow } from "./FieldRow";
import { isDeviceOnline, isRegistered, isRecoveringPhase, lifecycleLabel, signalLevel, signalTone } from "./shared";
import type { DeviceDetail } from "./types";
import { useI18n } from "../../lib/i18n";
-import { flagEmoji } from "../../lib/carrier";
+import { CountryFlag } from "../CountryFlag";
const BAR_HEIGHTS = ["h-[28%]", "h-[46%]", "h-[64%]", "h-[82%]", "h-full"];
const TEXT_TONE = {
@@ -81,11 +81,12 @@ export function OverviewNetworkCard({ device, onOpenOperatorSelection }: { devic
>
{vowifiRegistered ? (
<>{t("WiFi Calling 已注册")}>
- ) : registered ? (
- <>
- {modem?.operatorCountryCode ? `${flagEmoji(modem.operatorCountryCode)} ` : ""}{modem?.operator || "--"}{" "}
+ ) : registered ? (
+
+
+ {modem?.operator || "--"}{" "}
{modem?.networkMode ? · {netMode} : null}
- >
+
) : (
statusText
)}
diff --git a/web/src/components/devices/OverviewNetworkPanel.tsx b/web/src/components/devices/OverviewNetworkPanel.tsx
index cb2625a..0c3e822 100644
--- a/web/src/components/devices/OverviewNetworkPanel.tsx
+++ b/web/src/components/devices/OverviewNetworkPanel.tsx
@@ -4,7 +4,7 @@ import type { DeviceDetail } from "./types";
import { useI18n } from "../../lib/i18n";
import { api, apiMessage } from "../../api";
import { Button, message } from "../ui";
-import { flagEmoji } from "../../lib/carrier";
+import { CountryFlag } from "../CountryFlag";
interface PublicIPInfo {
detected?: boolean;
@@ -95,7 +95,11 @@ export function OverviewNetworkPanel({ device, trafficMinuteRx, trafficMinuteTx,
-