经典 → 古典宫廷(王子/皇后/国王/小丑) 现代 → 现代人物(小孩/女青年/男青年/小丑鱼) 卡通 → 现代人物 + 暖色调 + 圆边框 复古 → 简笔符号 + 深色边框 + 米色背景 后端: - CardTemplate 新增 theme_id(绑预设主题)+ design_override(背景/边框/字体等覆盖) - 新增 apply_template_to_project():把 LibraryAsset 复制到项目素材 + 写 design - 创建项目时支持传 template_id,自动套用整套预设 - 模板列表 API 附加 library 预览(4 张图缩略) 前端 Home.vue: - 4 套模板卡片每张带 4 张缩略图(来自 library 预览) - 点模板一键创建项目 + 跳转到编辑器 - '新建空白项目' 保留为独立按钮 init_system 同步:4 套模板配置 + 应用到示例项目
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
from django.db import models
|
||
import uuid
|
||
|
||
|
||
class CardTemplate(models.Model):
|
||
"""扑克牌模板模型(经典/现代/卡通/复古 4 套预设)"""
|
||
id = models.CharField(max_length=50, primary_key=True) # 'classic', 'modern', etc.
|
||
name = models.CharField(max_length=100)
|
||
description = models.TextField()
|
||
preview_image = models.ImageField(upload_to='templates/previews/', null=True)
|
||
|
||
# 默认配色方案
|
||
color_spade = models.CharField(max_length=20, default='#000000')
|
||
color_heart = models.CharField(max_length=20, default='#FF0000')
|
||
color_club = models.CharField(max_length=20, default='#000000')
|
||
color_diamond = models.CharField(max_length=20, default='#FF0000')
|
||
color_background = models.CharField(max_length=20, default='#FFFFFF')
|
||
|
||
# 模板绑定的预设主题(指向 LibraryAsset.theme_id)
|
||
# 例如 'classical' 模板 → 使用 LibraryAsset.theme_id='classical' 的所有素材
|
||
theme_id = models.CharField(max_length=50, blank=True, default='classical')
|
||
|
||
# 模板级 design 覆盖:background_color / border_color / pip_size_ratio 等
|
||
# 不填则走全局默认
|
||
design_override = models.JSONField(default=dict)
|
||
|
||
# 默认素材路径(JSON,保留字段兼容老逻辑)
|
||
default_assets = models.JSONField(default=dict)
|
||
|
||
created_at = models.DateTimeField(auto_now_add=True)
|
||
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
class Meta:
|
||
ordering = ['name']
|
||
|
||
|
||
class SuitSymbol(models.Model):
|
||
"""花色图案模板"""
|
||
template = models.ForeignKey(CardTemplate, on_delete=models.CASCADE, related_name='suit_symbols')
|
||
suit_name = models.CharField(max_length=20) # 'spade', 'heart', 'club', 'diamond'
|
||
svg_path = models.TextField() # SVG路径数据
|
||
color = models.CharField(max_length=20)
|
||
|
||
def __str__(self):
|
||
return f"{self.template.name} - {self.suit_name}"
|