Files
light-code/web/src/apps/muse/base/docs/example.tsx
2025-10-21 03:26:49 +08:00

222 lines
5.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from 'react';
import { DocsComponent } from './index';
import { mockMarks, generateMarkWithType } from '../mock/collection';
// 创建一些示例文档数据
const createSampleDocs = () => {
const markdownDoc = generateMarkWithType('markdown');
markdownDoc.title = '项目介绍';
markdownDoc.description = '了解我们的项目背景和目标';
markdownDoc.tags = ['介绍', '项目'];
markdownDoc.data = {
content: `# 欢迎使用文档系统
这是一个现代化的文档展示系统,现在使用 **marked** 库进行 Markdown 渲染。
## 主要功能
- **响应式设计**: 适配各种屏幕尺寸
- **左侧导航**: 清晰的文档结构
- **Markdown支持**: 使用 marked 库,支持 GitHub Flavored Markdown
- **多种内容类型**: 支持文本、代码、图片等多种内容
## 技术特性
### 样式设计
使用了现代化的CSS设计包括
1. 清新的配色方案
2. 优雅的阴影和边框
3. 流畅的过渡动画
### 功能特性
> **提示**: 这是一个引用块,展示了 marked 的渲染能力
- [x] 点击导航自动切换内容
- [x] 加载状态提示
- [x] 标签和日期显示
- [ ] 响应式布局
## 代码示例
### TypeScript 代码
\`\`\`typescript
import { DocsComponent } from './docs';
import { mockMarks } from './mock/collection';
const App: React.FC = () => {
return <DocsComponent dataSource={mockMarks} />;
};
\`\`\`
### 内联代码
使用 \`marked\` 库可以更好地处理 Markdown 语法。
## 表格支持
| 功能 | 状态 | 描述 |
|------|------|------|
| Markdown | ✅ | 完整支持 |
| 代码高亮 | ✅ | 语法高亮 |
| 表格 | ✅ | GFM 表格 |
| 任务列表 | ✅ | 支持复选框 |
## 链接和图片
- 外部链接: [GitHub](https://github.com)
- 图片支持: ![示例](https://via.placeholder.com/150)
---
希望你喜欢这个使用 **marked** 的文档系统!🎉`
};
const apiDoc = generateMarkWithType('markdown');
apiDoc.title = 'API 文档';
apiDoc.description = 'API接口使用说明和示例';
apiDoc.tags = ['API', '开发'];
apiDoc.data = {
content: `# API 文档
## 🔐 用户认证
### 登录接口
**请求地址**: \`POST /api/auth/login\`
**请求参数**:
| 参数 | 类型 | 必填 | 描述 |
|------|------|------|------|
| username | string | ✅ | 用户名 |
| password | string | ✅ | 密码 |
**响应示例**:
\`\`\`json
{
"code": 200,
"message": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"username": "admin",
"email": "admin@example.com"
}
}
}
\`\`\`
## 📊 数据操作
### 获取列表
**请求地址**: \`GET /api/data/list\`
**查询参数**:
- \`page\`: 页码 (默认: 1)
- \`size\`: 每页数量 (默认: 10)
- \`keyword\`: 搜索关键词
### 创建数据
**请求地址**: \`POST /api/data/create\`
**请求体**:
\`\`\`json
{
"title": "标题",
"content": "内容",
"tags": ["tag1", "tag2"]
}
\`\`\`
## ⚠️ 错误码
| 错误码 | 描述 | 解决方案 |
|--------|------|----------|
| 400 | 请求参数错误 | 检查请求参数格式 |
| 401 | 未授权 | 重新登录获取 token |
| 403 | 禁止访问 | 检查用户权限 |
| 500 | 服务器错误 | 联系技术支持 |
> **注意**: 所有 API 请求都需要在 Header 中包含 \`Authorization: Bearer <token>\`
更多 API 详情请参考 [完整文档](https://docs.example.com) 📖`
};
const codeDoc = generateMarkWithType('code');
codeDoc.title = '代码示例';
codeDoc.description = '常用的代码片段和最佳实践';
codeDoc.tags = ['代码', '示例'];
codeDoc.data = {
code: `// React Hook 示例
import { useState, useEffect, useCallback } from 'react';
const useDocuments = (initialData = []) => {
const [docs, setDocs] = useState(initialData);
const [loading, setLoading] = useState(false);
const [selectedId, setSelectedId] = useState(null);
// 获取文档列表
const fetchDocs = useCallback(async () => {
setLoading(true);
try {
const response = await fetch('/api/docs');
const data = await response.json();
setDocs(data);
} catch (error) {
console.error('Failed to fetch docs:', error);
} finally {
setLoading(false);
}
}, []);
// 选择文档
const selectDoc = useCallback((id) => {
setSelectedId(id);
}, []);
useEffect(() => {
fetchDocs();
}, [fetchDocs]);
return {
docs,
loading,
selectedId,
selectDoc,
refetch: fetchDocs
};
};
export default useDocuments;`,
language: 'typescript'
};
const configDoc = generateMarkWithType('json');
configDoc.title = '配置说明';
configDoc.description = '系统配置项说明和默认值';
configDoc.tags = ['配置', '设置'];
return [markdownDoc, apiDoc, codeDoc, configDoc];
};
// 示例组件
export const DocsExample: React.FC = () => {
const sampleDocs = createSampleDocs();
return (
<div style={{ height: '100vh' }}>
<DocsComponent dataSource={sampleDocs} />
</div>
);
};
export default DocsExample;