seaislee1209 add3af7904 feat: v0.7.0 — 确认弹窗 + 秒数显示统一 + 弹窗拖拽修复 + 团队模型完善
- 新增 ConfirmModal 组件,为6处危险操作添加二次确认弹窗
  (禁用团队/用户/成员、删除视频×3处)
- 所有秒数显示统一为千位分隔符+s后缀(如 36,000s)
- 修复 modal/drawer 在 input 中拖拽导致误关闭的 bug
  (onClick → onMouseDown + e.target === e.currentTarget)
- 团队模型完善:三种角色(超管/团管/成员)、四层额度检查、
  团管成员管理页、超管团队管理页
- 关闭公开注册,所有账号由管理员创建

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 20:16:21 +08:00

75 lines
3.2 KiB
Python

from rest_framework import serializers
class VideoGenerateSerializer(serializers.Serializer):
prompt = serializers.CharField(required=False, allow_blank=True, default='')
mode = serializers.ChoiceField(choices=['universal', 'keyframe'])
model = serializers.ChoiceField(choices=['seedance_2.0', 'seedance_2.0_fast'])
aspect_ratio = serializers.CharField(max_length=10)
duration = serializers.IntegerField()
references = serializers.ListField(child=serializers.DictField(), required=False, default=list)
class QuotaUpdateSerializer(serializers.Serializer):
daily_seconds_limit = serializers.IntegerField(min_value=-1)
monthly_seconds_limit = serializers.IntegerField(min_value=-1)
class UserStatusSerializer(serializers.Serializer):
is_active = serializers.BooleanField()
class AdminCreateUserSerializer(serializers.Serializer):
username = serializers.CharField(max_length=150)
email = serializers.EmailField()
password = serializers.CharField(min_length=6)
daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=600)
monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=6000)
is_staff = serializers.BooleanField(required=False, default=False)
class SystemSettingsSerializer(serializers.Serializer):
default_daily_seconds_limit = serializers.IntegerField(min_value=0)
default_monthly_seconds_limit = serializers.IntegerField(min_value=0)
announcement = serializers.CharField(required=False, allow_blank=True, default='')
announcement_enabled = serializers.BooleanField(required=False, default=False)
# ── Team serializers ──
class TeamCreateSerializer(serializers.Serializer):
name = serializers.CharField(max_length=100)
monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False, default=6000)
daily_member_limit_default = serializers.IntegerField(min_value=0, required=False, default=600)
class TeamUpdateSerializer(serializers.Serializer):
name = serializers.CharField(max_length=100, required=False)
monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False)
daily_member_limit_default = serializers.IntegerField(min_value=0, required=False)
is_active = serializers.BooleanField(required=False)
class TeamTopUpSerializer(serializers.Serializer):
seconds = serializers.IntegerField(min_value=1)
class TeamAdminCreateSerializer(serializers.Serializer):
"""Create a team admin account for a specific team."""
username = serializers.CharField(max_length=150)
email = serializers.EmailField()
password = serializers.CharField(min_length=6)
class TeamMemberCreateSerializer(serializers.Serializer):
"""Team admin creates a member."""
username = serializers.CharField(max_length=150)
password = serializers.CharField(min_length=6)
daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False)
monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False)
class MemberQuotaSerializer(serializers.Serializer):
daily_seconds_limit = serializers.IntegerField(min_value=-1)
monthly_seconds_limit = serializers.IntegerField(min_value=-1)