48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""
|
|
仪表盘视图 - 统计数据
|
|
"""
|
|
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
|
|
from utils.response import success
|
|
from apps.admins.authentication import AdminJWTAuthentication
|
|
from apps.admins.permissions import IsAdminUser
|
|
from apps.users.models import User
|
|
from apps.devices.models import DeviceType, DeviceBatch, Device
|
|
|
|
|
|
class DashboardViewSet(viewsets.ViewSet):
|
|
"""仪表盘统计视图集"""
|
|
|
|
authentication_classes = [AdminJWTAuthentication]
|
|
permission_classes = [IsAdminUser]
|
|
|
|
@action(detail=False, methods=['get'])
|
|
def stats(self, request):
|
|
"""
|
|
获取仪表盘统计数据
|
|
GET /api/admin/dashboard/stats
|
|
"""
|
|
# 用户总数
|
|
user_count = User.objects.count()
|
|
|
|
# 设备类型数
|
|
device_type_count = DeviceType.objects.count()
|
|
|
|
# 批次数
|
|
batch_count = DeviceBatch.objects.count()
|
|
|
|
# 设备统计
|
|
device_count = Device.objects.count()
|
|
bound_device_count = Device.objects.filter(status='bound').count()
|
|
in_stock_device_count = Device.objects.filter(status='in_stock').count()
|
|
|
|
return success(data={
|
|
'user_count': user_count,
|
|
'device_count': device_count,
|
|
'device_type_count': device_type_count,
|
|
'batch_count': batch_count,
|
|
'bound_device_count': bound_device_count,
|
|
'in_stock_device_count': in_stock_device_count,
|
|
})
|