超管后台 - 子账号列表 增加 状态和状态账号类型的筛选

This commit is contained in:
柳清爽
2025-04-29 11:32:51 +08:00
parent cd864763ee
commit 2793982481

View File

@@ -74,6 +74,8 @@ export default function ProjectDetailPage({ params }: ProjectDetailPageProps) {
const [sortOrder, setSortOrder] = useState<'asc' | 'desc' | null>(null) const [sortOrder, setSortOrder] = useState<'asc' | 'desc' | null>(null)
const [deviceStatusFilter, setDeviceStatusFilter] = useState<'all' | 'online' | 'offline'>('all') const [deviceStatusFilter, setDeviceStatusFilter] = useState<'all' | 'online' | 'offline'>('all')
const [wechatStatusFilter, setWechatStatusFilter] = useState<'all' | 'loggedIn' | 'loggedOut' | 'notLogged'>('all') const [wechatStatusFilter, setWechatStatusFilter] = useState<'all' | 'loggedIn' | 'loggedOut' | 'notLogged'>('all')
const [userStatusFilter, setUserStatusFilter] = useState<'all' | 'enabled' | 'disabled'>('all')
const [userTypeFilter, setUserTypeFilter] = useState<'all' | 'system' | 'operator' | 'consultant'>('all')
const fetchProject = async () => { const fetchProject = async () => {
try { try {
@@ -148,26 +150,48 @@ export default function ProjectDetailPage({ params }: ProjectDetailPageProps) {
fetchDevices() fetchDevices()
}, [activeTab, id, sortOrder, deviceStatusFilter, wechatStatusFilter]) }, [activeTab, id, sortOrder, deviceStatusFilter, wechatStatusFilter])
useEffect(() => { const fetchSubUsers = async () => {
const fetchSubUsers = async () => { if (activeTab !== "accounts") return
setIsSubUsersLoading(true)
try {
const result = await apiRequest(`/company/subusers?companyId=${id}`)
if (result.code === 200) { setIsSubUsersLoading(true)
setSubUsers(result.data) try {
} else { const result = await apiRequest(`/company/subusers?companyId=${id}`)
toast.error(result.msg || "获取子账号列表失败")
if (result.code === 200) {
let filteredUsers = result.data
// 应用状态筛选
if (userStatusFilter !== 'all') {
filteredUsers = filteredUsers.filter(user =>
userStatusFilter === 'enabled' ? user.status === 1 : user.status !== 1
)
} }
} catch (error) {
toast.error("网络错误,请稍后重试")
} finally {
setIsSubUsersLoading(false)
}
}
// 应用账号类型筛选
if (userTypeFilter !== 'all') {
filteredUsers = filteredUsers.filter(user => {
if (userTypeFilter === 'system') return user.typeId === -1
if (userTypeFilter === 'operator') return user.typeId === 1
return user.typeId === 2
})
}
setSubUsers(filteredUsers)
} else {
toast.error(result.msg || "获取子账号列表失败")
setSubUsers([])
}
} catch (error) {
toast.error("网络错误,请稍后重试")
setSubUsers([])
} finally {
setIsSubUsersLoading(false)
}
}
useEffect(() => {
fetchSubUsers() fetchSubUsers()
}, [id]) }, [activeTab, id, userStatusFilter, userTypeFilter])
const handleSort = () => { const handleSort = () => {
setSortOrder(prev => { setSortOrder(prev => {
@@ -378,71 +402,104 @@ export default function ProjectDetailPage({ params }: ProjectDetailPageProps) {
</TabsContent> </TabsContent>
<TabsContent value="accounts"> <TabsContent value="accounts">
<Card> <div className="space-y-4">
<CardHeader> <div className="flex justify-between items-center">
<CardTitle></CardTitle> <h2 className="text-lg font-semibold"></h2>
<CardDescription></CardDescription> <div className="flex items-center gap-4">
</CardHeader> <div className="flex items-center gap-2">
<CardContent> <span className="text-sm text-muted-foreground"></span>
{isSubUsersLoading ? ( <Select
<div className="flex items-center justify-center py-8">...</div> value={userStatusFilter}
) : subUsers.length === 0 ? ( onValueChange={(value: 'all' | 'enabled' | 'disabled') => setUserStatusFilter(value)}
<div className="flex items-center justify-center py-8 text-muted-foreground"></div> >
) : ( <SelectTrigger className="w-[120px]">
<> <SelectValue placeholder="选择状态" />
<Table> </SelectTrigger>
<TableHeader> <SelectContent>
<TableRow> <SelectItem value="all"></SelectItem>
<TableHead></TableHead> <SelectItem value="enabled"></SelectItem>
<TableHead>ID</TableHead> <SelectItem value="disabled"></SelectItem>
<TableHead></TableHead> </SelectContent>
<TableHead></TableHead> </Select>
<TableHead></TableHead> </div>
<TableHead></TableHead> <div className="flex items-center gap-2">
<TableHead></TableHead> <span className="text-sm text-muted-foreground"></span>
<TableHead className="text-right"></TableHead> <Select
value={userTypeFilter}
onValueChange={(value: 'all' | 'system' | 'operator' | 'consultant') => setUserTypeFilter(value)}
>
<SelectTrigger className="w-[120px]">
<SelectValue placeholder="选择类型" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all"></SelectItem>
<SelectItem value="system"></SelectItem>
<SelectItem value="operator"></SelectItem>
<SelectItem value="consultant"></SelectItem>
</SelectContent>
</Select>
</div>
</div>
</div>
{isSubUsersLoading ? (
<div className="flex justify-center items-center h-32">
<Loader2 className="h-8 w-8 animate-spin" />
</div>
) : subUsers.length > 0 ? (
<div className="border rounded-lg">
<Table>
<TableHeader>
<TableRow>
<TableHead></TableHead>
<TableHead>ID</TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead className="text-right"></TableHead>
</TableRow>
</TableHeader>
<TableBody>
{subUsers.map((user) => (
<TableRow key={user.id}>
<TableCell>
<Image
src={user.avatar}
alt={user.username}
width={32}
height={32}
className="rounded-full"
/>
</TableCell>
<TableCell>{user.id}</TableCell>
<TableCell>{user.account}</TableCell>
<TableCell>{user.username}</TableCell>
<TableCell>{user.phone}</TableCell>
<TableCell>
<Badge variant={user.status === 1 ? "success" : "destructive"}>
{user.status === 1 ? "启用" : "禁用"}
</Badge>
</TableCell>
<TableCell>
{user.typeId === -1
? "系统账号"
: user.typeId === 1
? "操盘手"
: "门店顾问"}
</TableCell>
<TableCell className="text-right">{user.createTime}</TableCell>
</TableRow> </TableRow>
</TableHeader> ))}
<TableBody> </TableBody>
{subUsers.map((user) => ( </Table>
<TableRow key={user.id}> </div>
<TableCell> ) : (
<Image <div className="text-center py-8 text-muted-foreground">
src={user.avatar}
alt={user.username} </div>
width={32} )}
height={32} </div>
className="rounded-full"
/>
</TableCell>
<TableCell>{user.id}</TableCell>
<TableCell>{user.account}</TableCell>
<TableCell>{user.username}</TableCell>
<TableCell>{user.phone}</TableCell>
<TableCell>
<Badge variant={user.status === 1 ? "success" : "destructive"}>
{user.status === 1 ? "启用" : "禁用"}
</Badge>
</TableCell>
<TableCell>
{user.typeId === -1
? "系统账号"
: user.typeId === 1
? "操盘手"
: "门店顾问"}
</TableCell>
<TableCell className="text-right">{user.createTime}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
<div className="mt-4 text-sm text-muted-foreground">
{subUsers.length}
</div>
</>
)}
</CardContent>
</Card>
</TabsContent> </TabsContent>
</Tabs> </Tabs>
</div> </div>