Skip to main content
Glama
YamlApplyer.tsx3.71 kB
import React, {useState} from 'react'; import {message} from 'antd'; import HistoryPanel from './components/HistoryPanel'; import EditorPanel from './components/EditorPanel'; import TemplatePanel from './components/TemplatePanel'; import {fetcher} from '@/components/Amis/fetcher'; // 用 forwardRef 让组件兼容 AMIS const YamlApplyer = React.forwardRef<HTMLDivElement>(() => { const [editorContent, setEditorContent] = useState<string>(''); const [historyRecords, setHistoryRecords] = useState<any[]>([]); const [templateRefreshKey, setTemplateRefreshKey] = useState<number>(0); // 初始化时从localStorage加载历史记录 React.useEffect(() => { const savedHistoryRecords = localStorage.getItem('historyRecords'); if (savedHistoryRecords) { setHistoryRecords(JSON.parse(savedHistoryRecords)); } }, []); const handleRecordSelect = (content: string) => { setEditorContent(content); }; const handleSaveTemplate = async (content: string) => { try { const newTemplate = { name: `模板-${Math.random().toString(36).substring(2, 8)}`, content: content, kind: '' }; const response = await fetcher({ url: '/mgm/custom/template/save', method: 'post', data: newTemplate }); if (response.data?.status === 0) { message.success('已保存为模板'); // 触发模板列表刷新 setTemplateRefreshKey(prev => prev + 1); } else { throw new Error(response.data?.msg || '保存模板失败'); } } catch (error) { message.error('保存模板失败:' + (error instanceof Error ? error.message : '未知错误')); } }; const handleSaveSuccess = (content: string) => { setEditorContent(content); // 检查是否已存在相同内容的记录 const existingRecord = historyRecords.find(record => record.content === content); if (existingRecord) { message.success('已保存到历史记录'); return; // 如果已存在相同内容的记录,则不添加新记录 } // 创建新的记录 const newRecord = { id: Math.random().toString(36).substring(2, 15), content: content, isFavorite: false }; // 更新状态和本地存储 const updatedRecords = [newRecord, ...historyRecords]; setHistoryRecords(updatedRecords); localStorage.setItem('historyRecords', JSON.stringify(updatedRecords)); message.success('已保存到历史记录'); }; return ( <div style={{height: '100%', display: 'flex'}}> <div style={{width: '25%', borderRight: '1px solid #e5e6eb', padding: '10px', overflowY: 'auto'}}> <TemplatePanel onSelectTemplate={handleRecordSelect} refreshKey={templateRefreshKey}/> </div> <div style={{width: '50%', padding: '10px', overflowY: 'auto'}}> <EditorPanel onSaveSuccess={handleSaveSuccess} initialContent={editorContent}/> </div> <div style={{width: '25%', borderLeft: '1px solid #e5e6eb', padding: '10px', overflowY: 'auto'}}> <HistoryPanel onSelectRecord={handleRecordSelect} historyRecords={historyRecords} setHistoryRecords={setHistoryRecords} onSaveTemplate={handleSaveTemplate}/> </div> </div> ); }); export default YamlApplyer;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/weibaohui/k8m'

If you have feedback or need assistance with the MCP directory API, please join our Discord server