refactor: 代码架构重构 - 提取组件、统一状态管理和数据访问层

- 新增布局组件(SidebarBrand、SidebarUser、SidebarNavItem)
- 新增通用UI组件(EmptyState、StatusBadge、TagInput、SearchBar)
- 新增全局状态管理(UserContext)
- 新增自定义Hooks(usePageState、useNavigation)
- 新增统一数据访问层(src/services/api.js)
- 新增常量配置(constants/pages.js、constants/storageKeys.js)
- 样式文件模块化,拆分页面特定样式
- 更新README文档,添加组件和使用说明
- 同步OpenSpec规范到主specs目录
This commit is contained in:
2026-03-20 10:19:31 +08:00
parent f2e0ec047e
commit 56c08a34ff
27 changed files with 1812 additions and 199 deletions

200
src/services/api.js Normal file
View File

@@ -0,0 +1,200 @@
/**
* 统一数据访问接口
* 提供按功能模块划分的数据访问方法
*/
// 导入静态数据
import { conversations, getChatScenes } from '../data/conversations.js';
import { skills, skillFiles, skillVersions, getSkillIcon } from '../data/skills.js';
import { logs } from '../data/logs.js';
import { mySkills, skillCategories, supportedModels, devDocs } from '../data/developerData.js';
import { projectMembers } from '../data/members.js';
import { scheduledTasks } from '../data/tasks.js';
/**
* 用户相关 API
*/
export const user = {
/**
* 获取用户信息
* @returns {Object} 用户信息对象
*/
getInfo: () => ({
name: '张三',
avatar: '张',
role: 'AI 产品部',
}),
};
/**
* 技能相关 API
*/
export const skillsApi = {
/**
* 获取所有技能列表
* @returns {Array} 技能列表
*/
list: () => skills,
/**
* 根据 ID 获取技能详情
* @param {number} id - 技能 ID
* @returns {Object|undefined} 技能对象
*/
getById: (id) => skills.find(skill => skill.id === id),
/**
* 获取技能文件列表
* @returns {Array} 文件列表
*/
getFiles: () => skillFiles,
/**
* 获取技能版本历史
* @returns {Array} 版本列表
*/
getVersions: () => skillVersions,
/**
* 获取技能图标
* @param {number} id - 技能 ID
* @returns {string} 图标 emoji
*/
getIcon: (id) => getSkillIcon(id),
};
/**
* 会话相关 API
*/
export const conversationsApi = {
/**
* 获取所有会话列表
* @returns {Array} 会话列表
*/
list: () => conversations,
/**
* 获取聊天场景的 HTML 内容
* @param {string} sceneName - 场景名称
* @returns {string} HTML 内容
*/
getScene: (sceneName) => {
const scenes = getChatScenes();
return scenes[sceneName] || '';
},
};
/**
* 日志相关 API
*/
export const logsApi = {
/**
* 获取所有日志
* @returns {Array} 日志列表
*/
list: () => logs,
/**
* 根据条件筛选日志
* @param {Object} filters - 筛选条件
* @param {string} [filters.user] - 用户名
* @param {string} [filters.type] - 日志类型
* @param {string} [filters.status] - 状态
* @returns {Array} 筛选后的日志列表
*/
filter: ({ user, type, status } = {}) => {
return logs.filter(log => {
if (user && log.user !== user) return false;
if (type && log.type !== type) return false;
if (status && log.status !== status) return false;
return true;
});
},
};
/**
* 开发台相关 API
*/
export const developerApi = {
/**
* 获取我的技能列表
* @returns {Array} 技能列表
*/
getMySkills: () => mySkills,
/**
* 根据 ID 获取技能详情
* @param {number} id - 技能 ID
* @returns {Object|undefined} 技能对象
*/
getSkillById: (id) => mySkills.find(skill => skill.id === id),
/**
* 获取技能分类
* @returns {Array} 分类列表
*/
getCategories: () => skillCategories,
/**
* 获取支持的模型列表
* @returns {Array} 模型列表
*/
getSupportedModels: () => supportedModels,
/**
* 获取开发文档列表
* @returns {Array} 文档列表
*/
getDocs: () => devDocs,
};
/**
* 项目成员相关 API
*/
export const membersApi = {
/**
* 获取所有成员
* @returns {Array} 成员列表
*/
list: () => projectMembers,
/**
* 根据 ID 获取成员
* @param {string} id - 成员 ID
* @returns {Object|undefined} 成员对象
*/
getById: (id) => projectMembers.find(member => member.id === id),
};
/**
* 定时任务相关 API
*/
export const tasksApi = {
/**
* 获取所有任务
* @returns {Array} 任务列表
*/
list: () => scheduledTasks,
/**
* 根据 ID 获取任务
* @param {string} id - 任务 ID
* @returns {Object|undefined} 任务对象
*/
getById: (id) => scheduledTasks.find(task => task.id === id),
};
/**
* 统一 API 导出对象
*/
export const api = {
user,
skills: skillsApi,
conversations: conversationsApi,
logs: logsApi,
developer: developerApi,
members: membersApi,
tasks: tasksApi,
};
export default api;