76 lines
2.8 KiB
Python
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'))
|