diff --git a/xian_favor/api.py b/xian_favor/api.py index aaaf752..2daa5ab 100644 --- a/xian_favor/api.py +++ b/xian_favor/api.py @@ -17,11 +17,19 @@ CORS(app) @app.route('/api/items', methods=['GET']) def list_items(): """列出条目""" + starred_param = request.args.get('starred') + starred = None + if starred_param == 'true' or starred_param == '1': + starred = True + elif starred_param == 'false' or starred_param == '0': + starred = False + items = db.list_items( type=request.args.get('type'), status=request.args.get('status'), tag=request.args.get('tag'), keyword=request.args.get('keyword'), + starred=starred, limit=int(request.args.get('limit', 50)), offset=int(request.args.get('offset', 0)) ) @@ -35,7 +43,8 @@ def list_items(): type=request.args.get('type'), status=request.args.get('status'), tag=request.args.get('tag'), - keyword=request.args.get('keyword') + keyword=request.args.get('keyword'), + starred=starred ) return jsonify({'success': True, 'data': items, 'total': total}) @@ -64,7 +73,8 @@ def create_item(): priority=data.get('priority', 'medium'), due_date=data.get('due_date'), note=data.get('note'), - tags=data.get('tags', []) + tags=data.get('tags', []), + is_starred=data.get('is_starred', False) ) item = db.get_item(item_id) return jsonify({'success': True, 'data': item}), 201 @@ -134,6 +144,25 @@ def delete_item(item_id): return jsonify({'success': False, 'error': '条目不存在'}), 404 +@app.route('/api/items//star', methods=['POST']) +def toggle_star_item(item_id): + """切换重点关注状态""" + if db.toggle_star(item_id): + item = db.get_item(item_id) + return jsonify({'success': True, 'data': item}) + return jsonify({'success': False, 'error': '条目不存在'}), 404 + + +@app.route('/api/items//star/', methods=['POST']) +def set_star_item(item_id, status): + """设置重点关注状态 (status: 1=重点关注, 0=取消重点关注)""" + starred = status == 1 + if db.set_star(item_id, starred): + item = db.get_item(item_id) + return jsonify({'success': True, 'data': item}) + return jsonify({'success': False, 'error': '条目不存在'}), 404 + + @app.route('/api/items//done', methods=['POST']) def complete_item(item_id): """完成待办""" @@ -624,6 +653,10 @@ INDEX_TEMPLATE = ''' .type-link { border-left: 4px solid #28a745; } .type-column { border-left: 4px solid #6f42c1; } .type-todo { border-left: 4px solid #ffc107; } + .is-starred { border-left: 4px solid #ffc107; background: #fffbe6; } + .is-starred:hover { background: #fff9e0; } + .star-btn { font-size: 11px; } + .star-btn.active { color: #ffc107; } .status-pending { color: #ffc107; } .status-in_progress { color: #17a2b8; } .status-completed { color: #28a745; text-decoration: line-through; } @@ -643,6 +676,7 @@ INDEX_TEMPLATE = '''