From 3610bedb39f1ded81feded2e85c900dd9d7e4e10 Mon Sep 17 00:00:00 2001 From: 24024 <240241002@qq.com> Date: Fri, 24 Apr 2026 23:42:12 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(admin):=20=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SystemNotification模型中添加image_urls字段用于存储图片URL列表 - 实现通知图片的上传、保存和展示功能 - 前端模板增加图片预览模态框和图片上传组件 - 优化通知管理页面的UI布局,支持多图展示 - 完善图片相关的前后端交互逻辑和错误处理 ``` --- blueprints/admin.py | 6 + .../b3f4c2d9aa10_add_notification_images.py | 24 ++++ models.py | 1 + services/system_service.py | 6 + templates/base.html | 39 ++++- templates/notifications.html | 136 ++++++++++++++---- 6 files changed, 185 insertions(+), 27 deletions(-) create mode 100644 migrations/versions/b3f4c2d9aa10_add_notification_images.py diff --git a/blueprints/admin.py b/blueprints/admin.py index 2e27470..9f9d7b4 100644 --- a/blueprints/admin.py +++ b/blueprints/admin.py @@ -1,5 +1,6 @@ from flask import Blueprint, request, jsonify, g from datetime import timedelta +import json from extensions import db from models import User, Role, Permission, SystemDict, SystemNotification, Order, PointsGrant, InviteReward, to_bj_time, get_bj_now from middlewares.auth import permission_required, login_required @@ -234,6 +235,7 @@ def get_notifications(): "id": n.id, "title": n.title, "content": n.content, + "image_urls": json.loads(n.image_urls) if n.image_urls else [], "is_active": n.is_active, "created_at": n.created_at_bj.strftime('%Y-%m-%d %H:%M') } for n in notifs] @@ -244,6 +246,9 @@ def get_notifications(): def save_notification(): data = request.json notif_id = data.get('id') + image_urls = data.get('image_urls') or [] + if not isinstance(image_urls, list): + image_urls = [] if notif_id: n = SystemNotification.query.get(notif_id) @@ -256,6 +261,7 @@ def save_notification(): n.title = data['title'] n.content = data['content'] + n.image_urls = json.dumps(image_urls, ensure_ascii=False) n.is_active = data.get('is_active', True) db.session.commit() diff --git a/migrations/versions/b3f4c2d9aa10_add_notification_images.py b/migrations/versions/b3f4c2d9aa10_add_notification_images.py new file mode 100644 index 0000000..c0564a9 --- /dev/null +++ b/migrations/versions/b3f4c2d9aa10_add_notification_images.py @@ -0,0 +1,24 @@ +"""add notification images + +Revision ID: b3f4c2d9aa10 +Revises: 0cc7ce54ecc0 +Create Date: 2026-04-24 23:20:00.000000 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'b3f4c2d9aa10' +down_revision = '0cc7ce54ecc0' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('system_notifications', sa.Column('image_urls', sa.Text(), nullable=True)) + + +def downgrade(): + op.drop_column('system_notifications', 'image_urls') diff --git a/models.py b/models.py index 5e14be4..2e85310 100644 --- a/models.py +++ b/models.py @@ -133,6 +133,7 @@ class SystemNotification(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=False) + image_urls = db.Column(db.Text) # JSON 字符串,存储公告图片 URL 列表 is_active = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime, default=get_bj_now) diff --git a/services/system_service.py b/services/system_service.py index f2d4a61..2775772 100644 --- a/services/system_service.py +++ b/services/system_service.py @@ -1,5 +1,6 @@ from models import SystemDict, SystemNotification, db from flask import jsonify +import json def get_system_config_data(): """获取系统配置数据的业务逻辑""" @@ -40,10 +41,15 @@ def get_user_latest_notification(user_id): .order_by(SystemNotification.created_at.desc()).first() if latest: + try: + image_urls = json.loads(latest.image_urls) if latest.image_urls else [] + except Exception: + image_urls = [] return { "id": latest.id, "title": latest.title, "content": latest.content, + "image_urls": image_urls, "time": latest.created_at_bj.strftime('%Y-%m-%d %H:%M') } return {"id": None} diff --git a/templates/base.html b/templates/base.html index 20c8407..74901a4 100644 --- a/templates/base.html +++ b/templates/base.html @@ -114,6 +114,7 @@
+
+ 公告图片预览 + + -{% endblock %} \ No newline at end of file +{% endblock %}