update. 完成前端页面展示、列表和详情页

update. 调整融合主菜单与板块
update. 分离新闻模块
This commit is contained in:
ngfchl
2026-04-01 14:17:03 +08:00
parent af9d7a676f
commit 777ca50328
55 changed files with 2190 additions and 567 deletions
+24 -21
View File
@@ -1,4 +1,4 @@
# Generated by Django 6.0.3 on 2026-03-24 10:31
# Generated by Django 6.0.3 on 2026-04-01 00:55
import django_ckeditor_5.fields
from django.db import migrations, models
@@ -16,24 +16,40 @@ class Migration(migrations.Migration):
name='Article',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, verbose_name='标题')),
('content', django_ckeditor_5.fields.CKEditor5Field(verbose_name='正文')),
('cover', models.ImageField(blank=True, upload_to='articles/', verbose_name='封面图')),
('is_published', models.BooleanField(default=True, verbose_name='已发布')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('title', models.CharField(max_length=200, verbose_name='标题')),
('content', django_ckeditor_5.fields.CKEditor5Field(verbose_name='正文')),
('cover', models.ImageField(blank=True, upload_to='articles/%Y/%m/%d/', verbose_name='封面图')),
('is_contribution', models.BooleanField(default=False, verbose_name='是否投稿')),
('is_published', models.BooleanField(default=True, verbose_name='已发布')),
],
options={
'verbose_name': '文章',
'verbose_name_plural': '文章管理',
},
),
migrations.CreateModel(
name='ArticleAttachment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('file', models.FileField(upload_to='articles/attachments/%Y/%m/%d/', verbose_name='附件文件')),
],
options={
'verbose_name': '文章附件',
'verbose_name_plural': '文章附件管理',
},
),
migrations.CreateModel(
name='Carousel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('title', models.CharField(max_length=100, verbose_name='轮播标题')),
('image', models.ImageField(upload_to='carousel/', verbose_name='图片')),
('image', models.ImageField(upload_to='carousel/%Y/%m/%d/', verbose_name='图片')),
('link_url', models.URLField(blank=True, verbose_name='跳转链接')),
('order', models.IntegerField(default=0, verbose_name='排序')),
('active', models.BooleanField(default=True, verbose_name='启用')),
@@ -63,6 +79,8 @@ class Migration(migrations.Migration):
name='NoticeReceipt',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('signed_at', models.DateTimeField(auto_now_add=True, verbose_name='签收时间')),
],
options={
@@ -70,19 +88,4 @@ class Migration(migrations.Migration):
'verbose_name_plural': '签收管理',
},
),
migrations.CreateModel(
name='Section',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50, unique=True, verbose_name='板块名称')),
('code', models.SlugField(help_text='用于模板识别,如 news, notice', unique=True, verbose_name='板块代码')),
('description', models.TextField(blank=True, verbose_name='描述')),
('order', models.IntegerField(default=0, verbose_name='排序')),
('enabled', models.BooleanField(default=True, verbose_name='启用')),
],
options={
'verbose_name': '板块',
'verbose_name_plural': '板块管理',
},
),
]
+12 -6
View File
@@ -1,4 +1,4 @@
# Generated by Django 6.0.3 on 2026-03-24 10:31
# Generated by Django 6.0.3 on 2026-04-01 00:55
import django.db.models.deletion
from django.conf import settings
@@ -11,6 +11,7 @@ class Migration(migrations.Migration):
dependencies = [
('article', '0001_initial'),
('base', '0001_initial'),
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
@@ -21,6 +22,16 @@ class Migration(migrations.Migration):
name='author',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='作者'),
),
migrations.AddField(
model_name='article',
name='section',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='base.mainmenu', verbose_name='所属板块'),
),
migrations.AddField(
model_name='articleattachment',
name='article',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='article.article', verbose_name='所属文章'),
),
migrations.AddField(
model_name='notice',
name='publisher',
@@ -41,11 +52,6 @@ class Migration(migrations.Migration):
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='签收人'),
),
migrations.AddField(
model_name='article',
name='section',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='article.section', verbose_name='所属板块'),
),
migrations.AlterUniqueTogether(
name='noticereceipt',
unique_together={('notice', 'user')},
@@ -1,47 +0,0 @@
# Generated by Django 6.0.3 on 2026-03-24 13:24
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('article', '0002_initial'),
]
operations = [
migrations.AlterModelOptions(
name='section',
options={'ordering': ('order', 'name'), 'verbose_name': '板块', 'verbose_name_plural': '板块管理'},
),
migrations.RemoveField(
model_name='section',
name='description',
),
migrations.AddField(
model_name='section',
name='parent',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subsections', to='article.section', verbose_name='所属主板块'),
),
migrations.AlterField(
model_name='section',
name='code',
field=models.SlugField(help_text='用于模板或URL识别,建议英文', unique=True, verbose_name='唯一标识'),
),
migrations.AlterField(
model_name='section',
name='enabled',
field=models.BooleanField(default=True, verbose_name='启用状态'),
),
migrations.AlterField(
model_name='section',
name='name',
field=models.CharField(max_length=100, unique=True, verbose_name='板块名称'),
),
migrations.AlterField(
model_name='section',
name='order',
field=models.PositiveSmallIntegerField(default=0, verbose_name='排序权重'),
),
]