/* * @Author: ZhaoYing * @Date: 2026-02-03 17:33:15 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-03-05 16:28:58 */ /** * Memory Management Page * Manages memory configurations with extraction, forgetting, emotion, and reflection engines * Displays configuration cards with navigation to engine settings */ import React, { useState, useEffect, useRef } from 'react'; import { List, Button, Space, App, Tooltip } from 'antd'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import clsx from 'clsx' import MemoryForm from './components/MemoryForm'; import type { Memory, MemoryFormRef } from '@/views/MemoryManagement/types' import RbCard from '@/components/RbCard/Card' import { getMemoryConfigList, deleteMemoryConfig } from '@/api/memory' import BodyWrapper from '@/components/Empty/BodyWrapper' import { formatDateTime } from '@/utils/format'; import RbAlert from '@/components/RbAlert' const MemoryManagement: React.FC = () => { const { t } = useTranslation(); const { message, modal } = App.useApp(); const navigate = useNavigate(); const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const memoryFormRef = useRef(null); useEffect(() => { loadMoreData() }, []); /** Load configuration list */ const loadMoreData = () => { setLoading(true); getMemoryConfigList() .then((res) => { const response = res as Memory[]; const results = Array.isArray(response) ? response : []; setData(results); }) .catch(() => { console.error('Failed to load data'); }) .finally(() => { setLoading(false); }); }; /** Open create/edit modal */ const handleEdit = (config?: Memory) => { memoryFormRef.current?.handleOpen(config); } /** Delete configuration */ const handleDelete = (item: Memory) => { modal.confirm({ title: t('common.confirmDeleteDesc', { name: item.config_name }), okText: t('common.delete'), cancelText: t('common.cancel'), okType: 'danger', onOk: () => { deleteMemoryConfig(item.config_id) .then(() => { message.success(t('common.deleteSuccess')); loadMoreData(); }) } }) }; /** Navigate to engine configuration page */ const handleClick = (id: number, type: string) => { switch (type) { case 'memoryExtractionEngine': navigate(`/memory-extraction-engine/${id}`) break case 'forgottenEngine': navigate(`/forgetting-engine/${id}`) break case 'emotionEngine': navigate(`/emotion-engine/${id}`) break; case 'reflectionEngine': navigate(`/reflection-engine/${id}`) break; } } return ( <>
( {item.is_system_default &&
{t('common.default')}
}
{item.config_desc}
{t('memory.scene_id')}: {item.scene_name || '-'}
{['memoryExtractionEngine', 'forgottenEngine', 'emotionEngine', 'reflectionEngine'].map((key) => (
handleClick(item.config_id, key)} > {t(`memory.${key}`)} {/* */}
))}
{formatDateTime(item.updated_at, 'YYYY-MM-DD HH:mm:ss')}
handleEdit(item)} >
handleDelete(item)} >
)} />
); }; export default MemoryManagement;