From 32bf9c59bc586de024441ef92d9888549d739004 Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Thu, 9 Apr 2026 02:12:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 功能: - 概览统计 - 模型/GPU/CPU管理(增删改查) - 侧边栏导航 - 表单验证 --- app.py | 85 ++++++ templates/admin.html | 657 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 742 insertions(+) create mode 100644 templates/admin.html diff --git a/app.py b/app.py index ab992b2..4de5104 100644 --- a/app.py +++ b/app.py @@ -68,6 +68,11 @@ def knowledge_page(): """知识库页面""" return render_template('knowledge.html') +@app.route('/admin') +def admin_page(): + """后台管理页面""" + return render_template('admin.html') + # ============ API路由 ============ @app.route('/api/models') @@ -188,6 +193,86 @@ def api_cpu_detail(cpu_id): return jsonify(cpu) +@app.route('/api/gpus', methods=['POST']) +def api_create_gpu(): + """创建新GPU""" + data = request.get_json() + gpus = load_data(GPUS_FILE) + + import uuid + data['id'] = uuid.uuid4().hex[:12] + data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + + gpus.append(data) + save_data(GPUS_FILE, gpus) + + return jsonify(data) + +@app.route('/api/gpus/', methods=['PUT']) +def api_update_gpu(gpu_id): + """更新GPU""" + data = request.get_json() + gpus = load_data(GPUS_FILE) + + gpu = next((g for g in gpus if g['id'] == gpu_id), None) + if not gpu: + return jsonify({'error': 'GPU not found'}), 404 + + gpu.update(data) + gpu['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + save_data(GPUS_FILE, gpus) + + return jsonify(gpu) + +@app.route('/api/gpus/', methods=['DELETE']) +def api_delete_gpu(gpu_id): + """删除GPU""" + gpus = load_data(GPUS_FILE) + gpus = [g for g in gpus if g['id'] != gpu_id] + save_data(GPUS_FILE, gpus) + + return jsonify({'success': True}) + +@app.route('/api/cpus', methods=['POST']) +def api_create_cpu(): + """创建新CPU""" + data = request.get_json() + cpus = load_data(CPUS_FILE) + + import uuid + data['id'] = uuid.uuid4().hex[:12] + data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + + cpus.append(data) + save_data(CPUS_FILE, cpus) + + return jsonify(data) + +@app.route('/api/cpus/', methods=['PUT']) +def api_update_cpu(cpu_id): + """更新CPU""" + data = request.get_json() + cpus = load_data(CPUS_FILE) + + cpu = next((c for c in cpus if c['id'] == cpu_id), None) + if not cpu: + return jsonify({'error': 'CPU not found'}), 404 + + cpu.update(data) + cpu['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + save_data(CPUS_FILE, cpus) + + return jsonify(cpu) + +@app.route('/api/cpus/', methods=['DELETE']) +def api_delete_cpu(cpu_id): + """删除CPU""" + cpus = load_data(CPUS_FILE) + cpus = [c for c in cpus if c['id'] != cpu_id] + save_data(CPUS_FILE, cpus) + + return jsonify({'success': True}) + @app.route('/api/search') def api_search(): """全局搜索""" diff --git a/templates/admin.html b/templates/admin.html new file mode 100644 index 0000000..1214d1f --- /dev/null +++ b/templates/admin.html @@ -0,0 +1,657 @@ + + + + + + 后台管理 - ParamHub + + + + + + + + +
+ +
+

管理概览

+ + +
+
+
+
+ +
+
+
-
+
模型数量
+
+
+
+
+
+
+ +
+
+
-
+
GPU数量
+
+
+
+
+
+
+ +
+
+
-
+
CPU数量
+
+
+
+
+
+
+ +
+
+
-
+
更新时间
+
+
+
+
+ + +
+

快捷操作

+
+ + + + + 查看前台 + +
+
+ + +
+

最近添加的模型

+
加载中...
+
+
+ + + + + + + + + +
+ + + + + + + \ No newline at end of file