fix: enforce carrier-specific channel group routing

This commit is contained in:
hectorzhao
2026-07-03 12:48:16 +08:00
parent a890b03163
commit dd09d91c1e
17 changed files with 630 additions and 78 deletions
+27 -1
View File
@@ -3,12 +3,27 @@ import { Layers3, Plus, Search, UsersRound } from 'lucide-react';
import { Breadcrumb, Button, Input, Modal, Pagination } from '@/components/ui';
import { adminApi, type ChannelGroup } from '@/api/adminApi';
type GroupCarrier = 'mobile' | 'unicom' | 'telecom';
const carrierOptions: Array<{ label: string; value: GroupCarrier }> = [
{ label: '移动', value: 'mobile' },
{ label: '联通', value: 'unicom' },
{ label: '电信', value: 'telecom' },
];
const carrierLabels: Record<GroupCarrier, string> = {
mobile: '移动',
unicom: '联通',
telecom: '电信',
};
export function AdminChannelGroupsPage() {
const [groupName, setGroupName] = useState('');
const [groups, setGroups] = useState<ChannelGroup[]>([]);
const [modalOpen, setModalOpen] = useState(false);
const [name, setName] = useState('');
const [code, setCode] = useState('');
const [carrier, setCarrier] = useState<GroupCarrier>('mobile');
const [error, setError] = useState('');
function loadData() {
@@ -27,11 +42,12 @@ export function AdminChannelGroupsPage() {
const filteredGroups = useMemo(() => groups.filter((group) => !groupName.trim() || group.name.includes(groupName.trim())), [groupName, groups]);
function createGroup() {
adminApi.createChannelGroup({ code, name, status: 'active' })
adminApi.createChannelGroup({ code, name, carrier, status: 'active' })
.then(() => {
setModalOpen(false);
setName('');
setCode('');
setCarrier('mobile');
loadData();
})
.catch((failure: Error) => setError(failure.message || '通道组创建失败'));
@@ -66,6 +82,7 @@ export function AdminChannelGroupsPage() {
<Layers3 size={18} />
<strong>{group.name}</strong>
</div>
<span title="运营商">{carrierLabels[group.carrier] ?? group.carrier}</span>
<span title="包含通道数"><UsersRound size={16} />{group.items?.length ?? 0}</span>
</header>
<div className="channel-group-card__body">
@@ -95,6 +112,15 @@ export function AdminChannelGroupsPage() {
<div className="admin-system-modal-form">
<Input label="通道组编码" onChange={(event) => setCode(event.target.value)} value={code} />
<Input label="通道组名称" onChange={(event) => setName(event.target.value)} value={name} />
<div className="channel-group-radio-row">
<span></span>
{carrierOptions.map((item) => (
<label key={item.value}>
<input checked={carrier === item.value} onChange={() => setCarrier(item.value)} type="radio" />
{item.label}
</label>
))}
</div>
</div>
</Modal>
</div>