From aed39c64e4e295b0b752742eccb426da17ca7f60 Mon Sep 17 00:00:00 2001 From: huangzhuang_3rd Date: Mon, 1 Jun 2026 18:31:18 +0800 Subject: [PATCH] =?UTF-8?q?v1.8.0:=20=E6=A8=A1=E5=9D=97=E5=8C=96=E9=87=8D?= =?UTF-8?q?=E6=9E=84=20+=20=E5=90=8E=E5=8F=B0=E7=99=BB=E5=BD=95=E8=AE=A4?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/routes/api_categories.py | 72 ++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 modules/routes/api_categories.py diff --git a/modules/routes/api_categories.py b/modules/routes/api_categories.py new file mode 100644 index 0000000..3a7ec16 --- /dev/null +++ b/modules/routes/api_categories.py @@ -0,0 +1,72 @@ +""" +分类管理 API +""" +import uuid +from datetime import datetime +from flask import Blueprint, request, jsonify +from config import CATEGORIES_FILE +from utils import load_data, save_data + +cat_bp = Blueprint('api_categories', __name__) + + +@cat_bp.route('/api/categories') +def api_categories(): + categories = load_data(CATEGORIES_FILE) + hide_hidden = request.args.get('all', '0') == '0' + if hide_hidden: + categories = [c for c in categories if c.get('visible', True)] + return jsonify(sorted(categories, key=lambda x: x.get('order', 0))) + + +@cat_bp.route('/api/categories/') +def api_category_detail(category_id): + categories = load_data(CATEGORIES_FILE) + category = next((c for c in categories if c['id'] == category_id), None) + if not category: + return jsonify({'error': 'Category not found'}), 404 + return jsonify(category) + + +@cat_bp.route('/api/categories', methods=['POST']) +def api_create_category(): + data = request.get_json() + categories = load_data(CATEGORIES_FILE) + data['id'] = uuid.uuid4().hex[:12] + data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + data['visible'] = data.get('visible', True) + categories.append(data) + save_data(CATEGORIES_FILE, categories) + return jsonify(data) + + +@cat_bp.route('/api/categories/', methods=['PUT']) +def api_update_category(category_id): + data = request.get_json() + categories = load_data(CATEGORIES_FILE) + category = next((c for c in categories if c['id'] == category_id), None) + if not category: + return jsonify({'error': 'Category not found'}), 404 + category.update(data) + category['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + save_data(CATEGORIES_FILE, categories) + return jsonify(category) + + +@cat_bp.route('/api/categories/', methods=['DELETE']) +def api_delete_category(category_id): + categories = load_data(CATEGORIES_FILE) + categories = [c for c in categories if c['id'] != category_id] + save_data(CATEGORIES_FILE, categories) + return jsonify({'success': True}) + + +@cat_bp.route('/api/categories//visible', methods=['POST']) +def api_toggle_category_visible(category_id): + categories = load_data(CATEGORIES_FILE) + category = next((c for c in categories if c['id'] == category_id), None) + if not category: + return jsonify({'error': 'Category not found'}), 404 + category['visible'] = not category.get('visible', True) + save_data(CATEGORIES_FILE, categories) + return jsonify({'success': True, 'visible': category['visible']})