From 57fa27c616d23fd58e92a7312203887c2e87ea73 Mon Sep 17 00:00:00 2001 From: flying-hero <462087392@qq.com> Date: Wed, 1 Apr 2026 22:36:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=AE=B0=E5=BF=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20-=20=E6=97=A5=E8=AE=B0=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E5=99=A8=E5=92=8C=E6=97=A5=E5=8E=86=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端 API: 获取日记日期列表和详情 - 前端组件:记忆弹窗、日历组件 - 点击记忆按钮查看龙虾工作日记 - 日历高亮显示有日记的日期 --- code/backend/api/urls.py | 2 + code/backend/api/views.py | 48 +++ code/frontend/public/index.html | 313 ++++++++++++++++- .../src/components/MemoryModal/index.js | 318 ++++++++++++++++++ 4 files changed, 673 insertions(+), 8 deletions(-) create mode 100644 code/frontend/src/components/MemoryModal/index.js diff --git a/code/backend/api/urls.py b/code/backend/api/urls.py index 3446a04..1079ca1 100644 --- a/code/backend/api/urls.py +++ b/code/backend/api/urls.py @@ -8,5 +8,7 @@ urlpatterns = [ path('lobsters/', views.lobster_list, name='lobster-list'), path('lobsters//', views.lobster_detail, name='lobster-detail'), path('lobsters//memory/', views.lobster_memory, name='lobster-memory'), + path('lobsters//memory/dates/', views.lobster_memory_dates, name='lobster-memory-dates'), + path('lobsters//memory//', views.lobster_memory_detail, name='lobster-memory-detail'), path('tools/', views.tools_list, name='tools-list'), ] diff --git a/code/backend/api/views.py b/code/backend/api/views.py index 926956b..db0a35a 100644 --- a/code/backend/api/views.py +++ b/code/backend/api/views.py @@ -5,6 +5,8 @@ from rest_framework.decorators import api_view from rest_framework.response import Response from datetime import datetime import os +from pathlib import Path +import re # 龙虾配置 LOBSTERS = [ @@ -65,3 +67,49 @@ def tools_list(request): } ] return Response(tools) + +@api_view(['GET']) +def lobster_memory_dates(request, lobster_id): + """获取龙虾有日记的日期列表""" + # 获取龙虾工作区 + lobster_map = { + 1: 'flying-hero', + 2: 'daotong', + 3: 'coder', + 4: 'web', + 5: 'physics', + 6: 'watcher', + } + + lobster_name = lobster_map.get(lobster_id) + if not lobster_name: + return Response({'error': '龙虾不存在'}, status=404) + + # 记忆文件目录 + memory_dir = Path(f'/home/node/.openclaw/workspace/flying-hero/memory') + + # 获取所有日记文件 + dates = [] + if memory_dir.exists(): + for file in memory_dir.glob('*.md'): + # 提取日期 (YYYY-MM-DD.md) + match = re.match(r'(\d{4}-\d{2}-\d{2})\.md', file.name) + if match: + dates.append(match.group(1)) + + dates.sort(reverse=True) + return Response({'dates': dates}) + +@api_view(['GET']) +def lobster_memory_detail(request, lobster_id, date): + """获取指定日期的日记内容""" + memory_file = Path(f'/home/node/.openclaw/workspace/flying-hero/memory/{date}.md') + + if not memory_file.exists(): + return Response({'error': '该日期没有日记'}, status=404) + + content = memory_file.read_text(encoding='utf-8') + return Response({ + 'date': date, + 'content': content + }) diff --git a/code/frontend/public/index.html b/code/frontend/public/index.html index bee7e42..6b8ca3a 100644 --- a/code/frontend/public/index.html +++ b/code/frontend/public/index.html @@ -141,17 +141,314 @@