This commit is contained in:
jeremygan2021
2026-02-11 00:19:33 +08:00
parent 0b3b81915b
commit 5232ab9960
10 changed files with 183 additions and 39 deletions

View File

@@ -17,6 +17,7 @@ class ESP32Config(models.Model):
has_microphone = models.BooleanField(default=False, verbose_name="是否包含麦克风")
stock = models.IntegerField(default=0, verbose_name="库存数量")
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="价格")
commission_rate = models.DecimalField(max_digits=5, decimal_places=4, default=0.00, verbose_name="产品分润比例", help_text="例如 0.10 表示 10%,优先级高于销售员默认比例")
description = models.TextField(verbose_name="描述", blank=True)
detail_image = models.ImageField(upload_to='products/details/', blank=True, null=True, verbose_name="详情页长图 (上传)")
detail_image_url = models.URLField(blank=True, null=True, verbose_name="详情页长图 (URL)", help_text="如果填写了URL将优先使用URL")
@@ -58,6 +59,11 @@ class Salesperson(models.Model):
"""
name = models.CharField(max_length=50, verbose_name="销售员姓名")
code = models.CharField(max_length=20, unique=True, verbose_name="推广码", help_text="唯一的推广标识码,如: zhangsan01")
parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='children', verbose_name="上级分销员")
commission_rate = models.DecimalField(max_digits=5, decimal_places=4, default=0.10, verbose_name="默认分润比例", help_text="例如 0.10 表示 10%")
second_level_rate = models.DecimalField(max_digits=5, decimal_places=4, default=0.02, verbose_name="二级分销比例", help_text="作为上级时可获得的分润比例,例如 0.02 表示 2%")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
def __str__(self):
@@ -68,6 +74,31 @@ class Salesperson(models.Model):
verbose_name_plural = "销售员管理"
class CommissionLog(models.Model):
"""
佣金结算记录
"""
STATUS_CHOICES = (
('pending', '待结算'),
('settled', '已结算'),
('cancelled', '已取消'),
)
order = models.ForeignKey('Order', on_delete=models.CASCADE, verbose_name="关联订单", related_name='commissions')
salesperson = models.ForeignKey(Salesperson, on_delete=models.CASCADE, verbose_name="获佣销售员", related_name='commissions')
amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="佣金金额")
level = models.IntegerField(default=1, verbose_name="分销层级", help_text="1: 直接销售, 2: 二级分销")
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
class Meta:
verbose_name = "佣金记录"
verbose_name_plural = "佣金结算"
def __str__(self):
return f"{self.salesperson.name} - ¥{self.amount} ({self.get_status_display()})"
class WeChatPayConfig(models.Model):
"""
微信支付配置模型