diff --git a/video-gen-admin/src/pages/AdminUsers.tsx b/video-gen-admin/src/pages/AdminUsers.tsx index 0c94fb5e..3559e606 100644 --- a/video-gen-admin/src/pages/AdminUsers.tsx +++ b/video-gen-admin/src/pages/AdminUsers.tsx @@ -191,7 +191,7 @@ const AdminUsers: React.FC = () => { user_type: userType, is_admin: userType === 'admin' ? (values.is_admin ?? false) : false, frontend_user_kind: values.frontend_user_kind || 'external', - private_portrait_asset_limit: userType === 'frontend' ? Number(values.private_portrait_asset_limit ?? 5) : 0, + private_portrait_asset_limit: userType === 'frontend' ? Number(values.private_portrait_asset_limit ?? 50) : 0, }); message.success('用户创建成功'); setCreateModal(false); @@ -882,7 +882,7 @@ const AdminUsers: React.FC = () => { diff --git a/video-gen-api/app/enums/private_portrait.py b/video-gen-api/app/enums/private_portrait.py index d83ae210..aa8f785d 100644 --- a/video-gen-api/app/enums/private_portrait.py +++ b/video-gen-api/app/enums/private_portrait.py @@ -4,7 +4,7 @@ from enum import Enum # 用户私域人像素材默认上限。users.private_portrait_asset_limit = 0 表示关闭模块;>0 表示启用并限制总素材量。 # 统计口径:真人 + 虚拟;图片 + 视频。音频当前业务暂不开放。 -PRIVATE_PORTRAIT_DEFAULT_ASSET_LIMIT = 5 +PRIVATE_PORTRAIT_DEFAULT_ASSET_LIMIT = 50 # 火山 Ark 私域素材 ProjectName:火山侧项目空间固定使用 default,并快照到各业务表 remote_project_name。 # 用户/项目隔离依赖本地 project_id 和火山返回的 Asset Group ID,不再动态拼接 ProjectName。 diff --git a/video-gen-api/app/models/user.py b/video-gen-api/app/models/user.py index 06ef1d87..57801686 100644 --- a/video-gen-api/app/models/user.py +++ b/video-gen-api/app/models/user.py @@ -41,7 +41,7 @@ class User(Base, TimestampMixin): # 私域人像素材总量限制。0 表示关闭模块;>0 表示启用并限制真人/虚拟、图片/视频素材总量。 private_portrait_asset_limit: Mapped[int] = mapped_column( - Integer, default=5, server_default="5", nullable=False + Integer, default=50, server_default="50", nullable=False ) @property diff --git a/video-gen-api/app/schemas/admin.py b/video-gen-api/app/schemas/admin.py index 429864b9..ff329fef 100644 --- a/video-gen-api/app/schemas/admin.py +++ b/video-gen-api/app/schemas/admin.py @@ -58,7 +58,7 @@ class AdminUserOut(BaseModel): last_login_at: NaiveDatetimeOptional = None allowed_menus: list | None = None resource_capacity: ResourceCapacityUsageOut | None = None - private_portrait_asset_limit: int = 5 + private_portrait_asset_limit: int = 50 model_config = {"from_attributes": True} @@ -73,7 +73,7 @@ class CreateUserRequest(BaseModel): is_admin: bool = False frontend_user_kind: str = Field(default="external", pattern="^(internal|external)$") allowed_menus: list | None = None - private_portrait_asset_limit: int = Field(default=5, ge=0, le=9999, description="私域人像素材总量限制,真人/虚拟、图片/视频共用,0 表示关闭") + private_portrait_asset_limit: int = Field(default=50, ge=0, le=9999, description="私域人像素材总量限制,真人/虚拟、图片/视频共用,0 表示关闭") class UpdateFrontendUserKindRequest(BaseModel): diff --git a/video-gen-api/app/schemas/user.py b/video-gen-api/app/schemas/user.py index ada58f2a..02692a85 100644 --- a/video-gen-api/app/schemas/user.py +++ b/video-gen-api/app/schemas/user.py @@ -15,7 +15,7 @@ class UserOut(BaseModel): allowed_menus: list | None = None must_set_password: bool = False resource_capacity: ResourceCapacityUsageOut | None = None - private_portrait_asset_limit: int = 5 + private_portrait_asset_limit: int = 50 team_id: str | None = None team_name: str | None = None is_team_manager: bool = False diff --git a/video-gen-app/src/components/privatePortrait/library/RealPersonLibraryPanel.tsx b/video-gen-app/src/components/privatePortrait/library/RealPersonLibraryPanel.tsx index ec63f146..37479cf4 100644 --- a/video-gen-app/src/components/privatePortrait/library/RealPersonLibraryPanel.tsx +++ b/video-gen-app/src/components/privatePortrait/library/RealPersonLibraryPanel.tsx @@ -122,7 +122,14 @@ const RealPersonLibraryPanel: React.FC = () => { 真人素材库 创建项目组时先完成真人认证,认证成功后项目组才会正式创建并可上传素材。 - + diff --git a/video-gen-app/src/components/privatePortrait/library/VirtualMaterialPanel.tsx b/video-gen-app/src/components/privatePortrait/library/VirtualMaterialPanel.tsx index ae74008c..0fb86e6b 100644 --- a/video-gen-app/src/components/privatePortrait/library/VirtualMaterialPanel.tsx +++ b/video-gen-app/src/components/privatePortrait/library/VirtualMaterialPanel.tsx @@ -392,7 +392,14 @@ const VirtualMaterialPanel: React.FC = () => { 虚拟素材库 可提前上传虚拟人像素材,后续生成视频时可直接使用。 - + @@ -446,11 +453,24 @@ const VirtualMaterialPanel: React.FC = () => { title={selectedProject ? selectedProject.name : '素材资产'} extra={( - {/* */} - + {selectedProjectId && ( - + )} @@ -464,14 +484,15 @@ const VirtualMaterialPanel: React.FC = () => { value={keyword} onChange={(e) => setKeyword(e.target.value)} onSearch={() => loadAssets(1, assetPageSize)} - style={{ width: 240 }} + style={{ width: 240, borderRadius: 8 }} + enterButton /> { - setResourceType(value); - setPage(1); - }} - /> - + {/* 左侧:媒体类型按钮 */} + + 媒体类型: + + + + + + + {/* 右侧:搜索 + 批量操作 */} + + } placeholder="搜索文件名或URL" - style={{ width: 240 }} onChange={(e) => setKeyword(e.target.value)} - onPressEnter={() => { - setPage(1); - load(); - }} + onSearch={() => { setPage(1); load(); }} + style={{ width: 240, borderRadius: 8 }} + enterButton /> - {/* */} - - {batchMode ? ( <> - - - + + + ) : ( - + )} diff --git a/video-gen-app/src/pages/GeneratedRecord.tsx b/video-gen-app/src/pages/GeneratedRecord.tsx index b368a5cf..f7379688 100644 --- a/video-gen-app/src/pages/GeneratedRecord.tsx +++ b/video-gen-app/src/pages/GeneratedRecord.tsx @@ -911,88 +911,25 @@ const GeneratedRecord: React.FC = () => { }, [filterType, filterMedia]); return (
- {/* 顶部:标签切换 + 批量操作按钮 */} -
- { - setFilterType(key as typeof filterType); - setIsSelectionMode(false); - setSelectedItems(new Set()); - }} - items={[ - { key: 'project', label: 项目记录 }, - { key: 'creation', label: 创作记录 }, - { key: 'hot_opening_replicate', label: 爆款复刻 }, - { key: 'shot_replicate', label: 拆镜复刻 }, - { key: 'private_portrait', label: 私域素材库 }, - { key: 'upload_resource', label: 历史素材 }, - ]} - size="middle" - /> - {filterType !== 'private_portrait' && filterType !== 'upload_resource' && ( -
- {isSelectionMode ? ( - - - - - - - - ) : ( - - )} -
- )} -
+ {/* 顶部:标签切换 */} + { + setFilterType(key as typeof filterType); + setIsSelectionMode(false); + setSelectedItems(new Set()); + }} + items={[ + { key: 'project', label: 项目记录 }, + { key: 'creation', label: 创作记录 }, + { key: 'hot_opening_replicate', label: 爆款复刻 }, + { key: 'shot_replicate', label: 拆镜复刻 }, + { key: 'private_portrait', label: 私域素材库 }, + { key: 'upload_resource', label: 历史素材 }, + ]} + size="middle" + style={{ marginBottom: 12 }} + /> {filterType === 'private_portrait' ? ( ) : filterType === 'upload_resource' ? ( @@ -1067,6 +1004,55 @@ const GeneratedRecord: React.FC = () => { > 推送任务历史 + {/* 批量操作按钮 */} + {filterType !== 'private_portrait' && filterType !== 'upload_resource' && ( + isSelectionMode ? ( + <> + + + + + + + ) : ( + + ) + )}
{/* Content area */}