table_game/frontend/routes/announcement.py
2025-03-10 08:37:32 +08:00

76 lines
2.8 KiB
Python

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/<int:announcement_id>', 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'))