Files
drl_2/xuexiao/routes/course.py

97 lines
4.3 KiB
Python
Raw Normal View History

2026-05-29 10:28:07 +08:00
"""课程管理路由"""
from flask import render_template, request, redirect, url_for, flash
from models import db, Course
from utils import login_required, log_operation, permission_required, export_excel
def register_routes(app):
@app.route('/courses', endpoint='course_list')
@login_required
@permission_required('course_view')
def course_list():
keyword = request.args.get('keyword', '')
query = Course.query
if keyword:
query = query.filter(Course.name.contains(keyword))
courses = query.order_by(Course.id.desc()).all()
return render_template('course_list.html', courses=courses, keyword=keyword)
@app.route('/courses/add', methods=['GET', 'POST'], endpoint='course_add')
@login_required
@permission_required('course_add')
def course_add():
if request.method == 'POST':
course = Course(
name=request.form.get('name'),
price_per_hour=float(request.form.get('price_per_hour', 0)),
total_hours=int(request.form.get('total_hours', 0)),
material_fee=float(request.form.get('material_fee', 0)),
type=request.form.get('type'),
status=int(request.form.get('status', 1)),
remark=request.form.get('remark', '')
)
db.session.add(course)
db.session.commit()
log_operation('创建课程', f'课程:{course.name}')
flash('课程创建成功', 'success')
return redirect(url_for('course_list'))
return render_template('course_form.html', course=None)
@app.route('/courses/export', endpoint='course_export')
@login_required
@permission_required('course_export')
def course_export():
query = Course.query
keyword = request.args.get('keyword', '')
if keyword:
query = query.filter(Course.name.contains(keyword))
courses = query.order_by(Course.id.desc()).all()
headers = ['序号', '课程名称', '单价(元/课时)', '级别', '类型', '总课时', '材料费', '状态', '描述', '备注', '创建时间']
rows = []
for i, c in enumerate(courses, 1):
rows.append([i, c.name, c.price_per_hour or 0, c.level or '', c.type or '',
c.total_hours or 0, c.material_fee or 0,
'启用' if c.status == 1 else '停用', c.description or '', c.remark or '',
c.created_at.strftime('%Y-%m-%d %H:%M') if c.created_at else ''])
return export_excel('课程列表', headers, rows)
@app.route('/courses/edit/<int:id>', methods=['GET', 'POST'], endpoint='course_edit')
@login_required
@permission_required('course_edit')
def course_edit(id):
course = db.session.get(Course, id)
if request.method == 'POST':
old_price = float(course.price_per_hour or 0)
course.name = request.form.get('name')
course.price_per_hour = float(request.form.get('price_per_hour', 0))
if abs(old_price - course.price_per_hour) > 0.01:
flash(
'课程标价已变更:仅影响新充值默认换算;已消课与退费按账户加权单价/消课记录单价核算',
'warning',
)
course.total_hours = int(request.form.get('total_hours', 0))
course.material_fee = float(request.form.get('material_fee', 0))
course.type = request.form.get('type')
course.status = int(request.form.get('status', 1))
course.remark = request.form.get('remark', '')
db.session.commit()
log_operation('编辑课程', f'课程ID:{id}')
flash('课程更新成功', 'success')
return redirect(url_for('course_list'))
return render_template('course_form.html', course=course)
@app.route('/courses/delete/<int:id>', endpoint='course_delete')
@login_required
@permission_required('course_delete')
def course_delete(id):
course = db.session.get(Course, id)
if course:
course.status = 0
db.session.commit()
log_operation('删除课程', f'课程ID:{id}')
flash('课程已停用', 'success')
return redirect(url_for('course_list'))