from flask import Blueprint, render_template, session, redirect, url_for, request, flash from datetime import datetime import requests from frontend.config import Config announcements_bp = Blueprint('announcements', __name__, url_prefix='/announcements') @announcements_bp.route('/admin') def manage_announcements(): if not session.get('token'): return redirect(url_for('auth.login')) try: response = requests.get( f"{Config.BASE_API_URL}/admin/announcement/list", ) if response.status_code == 200: return render_template('announcements.html', announcements=response.json()) flash("获取公告列表失败", "danger") return render_template('announcements.html', announcements=[]) except requests.exceptions.ConnectionError: flash("后端服务不可用", "danger") return render_template('announcements.html', announcements=[]) @announcements_bp.route('/admin/create', methods=['POST']) def create_announcement(): if not session.get('token'): return redirect(url_for('auth.login')) form_data = { "token": session['token'], "text": request.form['text'], "start_time": datetime.fromisoformat(request.form['start_time']).isoformat(), "end_time": datetime.fromisoformat(request.form['end_time']).isoformat(), "color": request.form.get('color', '#ffffff') } try: response = requests.post( f"{Config.BASE_API_URL}/admin/announcement/create", json=form_data, headers={"Authorization": f"Bearer {session['token']}"} ) if response.status_code == 200: flash("公告创建成功", "success") else: flash(response.json().get('detail', '创建失败'), "danger") except requests.exceptions.ConnectionError: flash("后端服务不可用", "danger") return redirect(url_for('announcements.manage_announcements')) @announcements_bp.route('/admin/delete/', methods=['POST']) def delete_announcement(announcement_id): if not session.get('token'): return redirect(url_for('auth.login')) try: response = requests.post( f"{Config.BASE_API_URL}/admin/announcement/delete", json={ "token": session['token'], "announcement_id": announcement_id }, headers={"Authorization": f"Bearer {session['token']}"} ) if response.status_code == 200: flash("公告删除成功", "success") else: flash(response.json().get('detail', '删除失败'), "danger") except requests.exceptions.ConnectionError: flash("后端服务不可用", "danger") return redirect(url_for('announcements.manage_announcements'))