This commit is contained in:
jeremygan2021
2026-02-11 04:06:51 +08:00
parent 96d5598fb5
commit 1100143a6e
36 changed files with 1223 additions and 401 deletions

View File

@@ -0,0 +1,29 @@
# Generated by Django 6.0.1 on 2026-02-10 19:08
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0020_alter_vbcourse_course_type'),
]
operations = [
migrations.AddField(
model_name='commissionlog',
name='distributor',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='commissions', to='shop.distributor', verbose_name='获佣分销员'),
),
migrations.AddField(
model_name='order',
name='distributor',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', to='shop.distributor', verbose_name='所属分销员'),
),
migrations.AlterField(
model_name='commissionlog',
name='salesperson',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='commissions', to='shop.salesperson', verbose_name='获佣销售员'),
),
]

View File

@@ -0,0 +1,45 @@
# Generated by Django 6.0.1 on 2026-02-10 19:20
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0021_commissionlog_distributor_order_distributor_and_more'),
]
operations = [
migrations.AddField(
model_name='vbcourse',
name='content',
field=models.TextField(blank=True, help_text='支持Markdown或HTML', verbose_name='详细内容'),
),
migrations.AddField(
model_name='vbcourse',
name='price',
field=models.DecimalField(decimal_places=2, default=0, help_text='0表示免费', max_digits=10, verbose_name='价格'),
),
migrations.CreateModel(
name='CourseEnrollment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('customer_name', models.CharField(max_length=100, verbose_name='姓名')),
('phone_number', models.CharField(max_length=20, verbose_name='联系电话')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='电子邮箱')),
('wechat_id', models.CharField(blank=True, max_length=50, verbose_name='微信号')),
('message', models.TextField(blank=True, verbose_name='留言/备注')),
('status', models.CharField(choices=[('pending', '待联系'), ('contacted', '已联系'), ('completed', '已完成'), ('cancelled', '已取消')], default='pending', max_length=20, verbose_name='状态')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='提交时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='shop.vbcourse', verbose_name='咨询课程')),
('distributor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.distributor', verbose_name='所属分销员')),
('salesperson', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.salesperson', verbose_name='所属销售员')),
],
options={
'verbose_name': '课程报名',
'verbose_name_plural': '课程报名管理',
},
),
]

View File

@@ -0,0 +1,24 @@
# Generated by Django 6.0.1 on 2026-02-10 19:23
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0022_vbcourse_content_vbcourse_price_courseenrollment'),
]
operations = [
migrations.AddField(
model_name='order',
name='course',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', to='shop.vbcourse', verbose_name='所选课程'),
),
migrations.AlterField(
model_name='order',
name='config',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='shop.esp32config', verbose_name='所选配置'),
),
]

View File

@@ -0,0 +1,33 @@
# Generated by Django 6.0.1 on 2026-02-10 19:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0023_order_course_alter_order_config'),
]
operations = [
migrations.AddField(
model_name='vbcourse',
name='instructor_avatar',
field=models.ImageField(blank=True, null=True, upload_to='instructors/avatars/', verbose_name='讲师头像 (上传)'),
),
migrations.AddField(
model_name='vbcourse',
name='instructor_avatar_url',
field=models.URLField(blank=True, null=True, verbose_name='讲师头像 (URL)'),
),
migrations.AddField(
model_name='vbcourse',
name='instructor_desc',
field=models.TextField(blank=True, default='拥有多年开发经验,擅长...', verbose_name='讲师简介'),
),
migrations.AddField(
model_name='vbcourse',
name='instructor_title',
field=models.CharField(default='资深讲师', max_length=50, verbose_name='讲师头衔'),
),
]

View File

@@ -0,0 +1,55 @@
# Generated by Django 6.0.1 on 2026-02-10 19:44
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shop', '0024_vbcourse_instructor_avatar_and_more'),
]
operations = [
migrations.CreateModel(
name='VCCourse',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100, verbose_name='课程名称')),
('description', models.TextField(verbose_name='课程简介')),
('course_type', models.CharField(choices=[('software', '软件课程'), ('hardware', '硬件课程'), ('incubation', '产品商业孵化')], default='software', max_length=20, verbose_name='课程类型')),
('duration', models.CharField(default='30分钟', help_text='例如: 30分钟', max_length=50, verbose_name='课程时长')),
('lesson_count', models.IntegerField(default=1, verbose_name='课时数量')),
('instructor', models.CharField(default='VC讲师', max_length=50, verbose_name='讲师')),
('instructor_title', models.CharField(default='资深讲师', max_length=50, verbose_name='讲师头衔')),
('instructor_avatar', models.ImageField(blank=True, null=True, upload_to='instructors/avatars/', verbose_name='讲师头像 (上传)')),
('instructor_avatar_url', models.URLField(blank=True, null=True, verbose_name='讲师头像 (URL)')),
('instructor_desc', models.TextField(blank=True, default='拥有多年开发经验,擅长...', verbose_name='讲师简介')),
('tag', models.CharField(blank=True, help_text='例如: 热门, 推荐, 进阶', max_length=20, verbose_name='标签')),
('price', models.DecimalField(decimal_places=2, default=0, help_text='0表示免费', max_digits=10, verbose_name='价格')),
('content', models.TextField(blank=True, help_text='支持Markdown或HTML', verbose_name='详细内容')),
('cover_image', models.ImageField(blank=True, null=True, upload_to='courses/covers/', verbose_name='封面图 (上传)')),
('cover_image_url', models.URLField(blank=True, null=True, verbose_name='封面图 (URL)')),
('detail_image', models.ImageField(blank=True, null=True, upload_to='courses/details/', verbose_name='详情页长图 (上传)')),
('detail_image_url', models.URLField(blank=True, help_text='如果填写了URL将优先使用URL', null=True, verbose_name='详情页长图 (URL)')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
],
options={
'verbose_name': 'VC课程',
'verbose_name_plural': 'VC课程管理',
},
),
migrations.AlterField(
model_name='courseenrollment',
name='course',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='shop.vccourse', verbose_name='咨询课程'),
),
migrations.AlterField(
model_name='order',
name='course',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', to='shop.vccourse', verbose_name='所选课程'),
),
migrations.DeleteModel(
name='VBCourse',
),
]