feat: 模板预设机制 - 4 套模板各绑一组 JQK/Joker + 背景
经典 → 古典宫廷(王子/皇后/国王/小丑) 现代 → 现代人物(小孩/女青年/男青年/小丑鱼) 卡通 → 现代人物 + 暖色调 + 圆边框 复古 → 简笔符号 + 深色边框 + 米色背景 后端: - CardTemplate 新增 theme_id(绑预设主题)+ design_override(背景/边框/字体等覆盖) - 新增 apply_template_to_project():把 LibraryAsset 复制到项目素材 + 写 design - 创建项目时支持传 template_id,自动套用整套预设 - 模板列表 API 附加 library 预览(4 张图缩略) 前端 Home.vue: - 4 套模板卡片每张带 4 张缩略图(来自 library 预览) - 点模板一键创建项目 + 跳转到编辑器 - '新建空白项目' 保留为独立按钮 init_system 同步:4 套模板配置 + 应用到示例项目
This commit is contained in:
@@ -26,10 +26,27 @@ def project_list(request):
|
||||
data['card_overrides'] = Project._meta.get_field('card_overrides').default()
|
||||
if 'number_layout' not in data:
|
||||
data['number_layout'] = Project._meta.get_field('number_layout').default()
|
||||
# 抽出 template_id(不写进 Project 字段)
|
||||
template_id = data.pop('template_id', None)
|
||||
serializer = ProjectSerializer(data=data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
project = serializer.save()
|
||||
# 如果传了 template_id,自动套用模板预设
|
||||
template_apply_result = None
|
||||
if template_id:
|
||||
from apps.templates.models import CardTemplate
|
||||
from apps.templates.template_apply import apply_template_to_project
|
||||
try:
|
||||
tpl = CardTemplate.objects.get(pk=template_id)
|
||||
template_apply_result = apply_template_to_project(project, tpl)
|
||||
except CardTemplate.DoesNotExist:
|
||||
template_apply_result = {'error': f'template {template_id} not found'}
|
||||
# 重新读一次(apply_template 已修改了 design 和 assets)
|
||||
project.refresh_from_db()
|
||||
return Response({
|
||||
**ProjectSerializer(project).data,
|
||||
'template_apply': template_apply_result,
|
||||
}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user