2025-11-11 21:39:12 +08:00
|
|
|
from flask import render_template, request, jsonify, flash, redirect, url_for
|
|
|
|
|
from flask_login import login_required, login_user, logout_user, current_user
|
|
|
|
|
from werkzeug.security import check_password_hash
|
|
|
|
|
from app.models import Product, License, Device, Ticket, Admin
|
|
|
|
|
from app import db
|
|
|
|
|
from app.web import web_bp
|
|
|
|
|
import sys
|
|
|
|
|
import platform
|
|
|
|
|
from flask import __version__ as flask_version
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def register_error_handlers(app):
|
|
|
|
|
"""注册错误处理器"""
|
|
|
|
|
@app.errorhandler(404)
|
|
|
|
|
def not_found_error(error):
|
|
|
|
|
return render_template('404.html'), 404
|
|
|
|
|
|
|
|
|
|
@app.errorhandler(500)
|
|
|
|
|
def internal_error(error):
|
|
|
|
|
db.session.rollback()
|
|
|
|
|
return render_template('500.html'), 500
|
|
|
|
|
|
|
|
|
|
# 产品管理页面
|
|
|
|
|
@web_bp.route('/products')
|
|
|
|
|
@login_required
|
|
|
|
|
def products():
|
|
|
|
|
"""产品管理页面"""
|
|
|
|
|
return render_template('product/list.html')
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/products/create')
|
|
|
|
|
@login_required
|
|
|
|
|
def create_product():
|
|
|
|
|
"""创建产品页面"""
|
|
|
|
|
return render_template('product/create.html')
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/products/<product_id>')
|
|
|
|
|
@login_required
|
|
|
|
|
def product_detail(product_id):
|
|
|
|
|
"""产品详情页面"""
|
|
|
|
|
product = Product.query.filter_by(product_id=product_id).first()
|
|
|
|
|
if not product:
|
|
|
|
|
flash('产品不存在', 'error')
|
|
|
|
|
return redirect(url_for('web.products'))
|
2025-11-12 09:19:32 +08:00
|
|
|
|
|
|
|
|
# 获取产品统计信息
|
|
|
|
|
stats = product.get_stats()
|
|
|
|
|
# 将统计信息添加到产品对象中
|
|
|
|
|
for key, value in stats.items():
|
|
|
|
|
setattr(product, key, value)
|
|
|
|
|
|
2025-11-11 21:39:12 +08:00
|
|
|
return render_template('product/detail.html', product=product)
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/products/<product_id>/edit')
|
|
|
|
|
@login_required
|
|
|
|
|
def edit_product(product_id):
|
|
|
|
|
"""编辑产品页面"""
|
|
|
|
|
product = Product.query.filter_by(product_id=product_id).first()
|
|
|
|
|
if not product:
|
|
|
|
|
flash('产品不存在', 'error')
|
|
|
|
|
return redirect(url_for('web.products'))
|
|
|
|
|
return render_template('product/edit.html', product=product)
|
|
|
|
|
|
|
|
|
|
# 卡密管理页面
|
|
|
|
|
@web_bp.route('/licenses')
|
|
|
|
|
@login_required
|
|
|
|
|
def licenses():
|
|
|
|
|
"""卡密管理页面"""
|
|
|
|
|
return render_template('license/list.html')
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/licenses/generate')
|
|
|
|
|
@login_required
|
|
|
|
|
def generate_license():
|
|
|
|
|
"""生成卡密页面"""
|
|
|
|
|
products = Product.query.filter_by(status=1).all()
|
|
|
|
|
return render_template('license/generate.html', products=products)
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/licenses/import')
|
|
|
|
|
@login_required
|
|
|
|
|
def import_license():
|
|
|
|
|
"""导入卡密页面"""
|
|
|
|
|
return render_template('license/import.html')
|
|
|
|
|
|
2025-11-12 15:11:05 +08:00
|
|
|
@web_bp.route('/licenses/export')
|
|
|
|
|
@login_required
|
|
|
|
|
def export_license():
|
|
|
|
|
"""导出卡密页面"""
|
|
|
|
|
products = Product.query.filter_by(status=1).all()
|
|
|
|
|
return render_template('license/export.html', products=products)
|
|
|
|
|
|
2025-11-11 21:39:12 +08:00
|
|
|
# 版本管理页面
|
|
|
|
|
@web_bp.route('/versions')
|
|
|
|
|
@login_required
|
|
|
|
|
def versions():
|
|
|
|
|
"""版本管理页面"""
|
|
|
|
|
return render_template('version/list.html')
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/versions/create')
|
|
|
|
|
@login_required
|
|
|
|
|
def create_version():
|
|
|
|
|
"""创建版本页面"""
|
|
|
|
|
products = Product.query.filter_by(status=1).all()
|
|
|
|
|
return render_template('version/create.html', products=products)
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/versions/<int:version_id>')
|
|
|
|
|
@login_required
|
|
|
|
|
def version_detail(version_id):
|
|
|
|
|
"""版本详情页面"""
|
|
|
|
|
from app.models import Version
|
|
|
|
|
version = Version.query.get_or_404(version_id)
|
|
|
|
|
return render_template('version/detail.html', version=version)
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/versions/<int:version_id>/edit')
|
|
|
|
|
@login_required
|
|
|
|
|
def edit_version(version_id):
|
|
|
|
|
"""编辑版本页面"""
|
|
|
|
|
from app.models import Version
|
|
|
|
|
version = Version.query.get_or_404(version_id)
|
|
|
|
|
products = Product.query.filter_by(status=1).all()
|
|
|
|
|
return render_template('version/edit.html', version=version, products=products)
|
|
|
|
|
|
|
|
|
|
# 设备管理页面
|
|
|
|
|
@web_bp.route('/devices')
|
|
|
|
|
@login_required
|
|
|
|
|
def devices():
|
|
|
|
|
"""设备管理页面"""
|
|
|
|
|
return render_template('device/list.html')
|
|
|
|
|
|
|
|
|
|
# 工单管理页面
|
|
|
|
|
@web_bp.route('/tickets')
|
|
|
|
|
@login_required
|
|
|
|
|
def tickets():
|
|
|
|
|
"""工单管理页面"""
|
|
|
|
|
return render_template('ticket/list.html')
|
|
|
|
|
|
|
|
|
|
@web_bp.route('/tickets/<int:ticket_id>')
|
|
|
|
|
@login_required
|
|
|
|
|
def ticket_detail(ticket_id):
|
|
|
|
|
"""工单详情页面"""
|
|
|
|
|
ticket = Ticket.query.get_or_404(ticket_id)
|
|
|
|
|
return render_template('ticket/detail.html', ticket=ticket)
|
|
|
|
|
|
|
|
|
|
# 统计分析页面
|
|
|
|
|
@web_bp.route('/statistics')
|
|
|
|
|
@login_required
|
|
|
|
|
def statistics():
|
|
|
|
|
"""统计分析页面"""
|
|
|
|
|
return render_template('statistics/index.html')
|
|
|
|
|
|
|
|
|
|
# 系统设置页面
|
|
|
|
|
@web_bp.route('/settings')
|
|
|
|
|
@login_required
|
|
|
|
|
def settings():
|
|
|
|
|
"""系统设置页面"""
|
|
|
|
|
import sys
|
|
|
|
|
import platform
|
|
|
|
|
from flask import __version__ as flask_version, current_app
|
|
|
|
|
from app import db
|
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
# 获取系统信息
|
|
|
|
|
python_version = sys.version.split()[0]
|
|
|
|
|
database_type = db.engine.name
|
|
|
|
|
|
|
|
|
|
# 获取运行时间(这里简单模拟,实际应该从应用启动时间计算)
|
|
|
|
|
uptime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
|
|
|
|
# 获取系统版本(从项目配置或其他地方获取)
|
|
|
|
|
system_version = "v1.0.0" # 这里可以改为从配置文件读取
|
|
|
|
|
|
|
|
|
|
# 传递配置信息
|
|
|
|
|
config = current_app.config
|
|
|
|
|
|
|
|
|
|
return render_template('settings/index.html',
|
|
|
|
|
python_version=python_version,
|
|
|
|
|
flask_version=flask_version,
|
|
|
|
|
database_type=database_type,
|
|
|
|
|
uptime=uptime,
|
|
|
|
|
system_version=system_version,
|
|
|
|
|
config=config)
|
|
|
|
|
|
|
|
|
|
# 账号管理页面
|
|
|
|
|
@web_bp.route('/admins')
|
|
|
|
|
@login_required
|
|
|
|
|
def admins():
|
|
|
|
|
"""账号管理页面"""
|
|
|
|
|
# 只有超级管理员可以访问
|
|
|
|
|
if not current_user.is_super_admin():
|
|
|
|
|
flash('需要超级管理员权限', 'error')
|
|
|
|
|
return redirect(url_for('web.dashboard'))
|
|
|
|
|
|
|
|
|
|
return render_template('admin/list.html')
|