{"id":50665320,"url":"https://github.com/Ris-Soft/Ris_ClassTool","last_synced_at":"2026-06-25T03:00:28.101Z","repository":{"id":258740959,"uuid":"865770600","full_name":"Ris-Soft/Ris_ClassTool","owner":"Ris-Soft","description":"Ris_ClassTool[瑞思课堂工具]开源存储库","archived":false,"fork":false,"pushed_at":"2025-08-23T16:02:00.000Z","size":3777,"stargazers_count":11,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"RisClassTool_V1","last_synced_at":"2025-08-24T08:54:37.652Z","etag":null,"topics":["classschedule","electron","electron-app"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ris-Soft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-01T05:25:47.000Z","updated_at":"2025-08-23T16:02:04.000Z","dependencies_parsed_at":"2024-10-22T22:54:29.652Z","dependency_job_id":"d003c330-e849-477b-bf91-33aafea6c7d1","html_url":"https://github.com/Ris-Soft/Ris_ClassTool","commit_stats":null,"previous_names":["ris-soft/ris_classtool"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/Ris-Soft/Ris_ClassTool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ris-Soft%2FRis_ClassTool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ris-Soft%2FRis_ClassTool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ris-Soft%2FRis_ClassTool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ris-Soft%2FRis_ClassTool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ris-Soft","download_url":"https://codeload.github.com/Ris-Soft/Ris_ClassTool/tar.gz/refs/heads/RisClassTool_V1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ris-Soft%2FRis_ClassTool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34757355,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classschedule","electron","electron-app"],"created_at":"2026-06-08T06:00:18.132Z","updated_at":"2026-06-25T03:00:28.073Z","avatar_url":"https://github.com/Ris-Soft.png","language":"JavaScript","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"# LessonPlugin - 课堂工具框架\n\n基于Electron的可扩展课堂工具框架，支持插件系统和项目管理。\n\n## 功能特性\n\n### 🔧 核心功能\n- **现代化界面**: 基于React + Ant Design的美观UI\n- **插件系统**: 完整的插件管理和加载机制\n- **项目管理**: 插件可创建和管理项目条目\n- **窗口管理**: 支持多窗口和弹窗功能\n- **安全机制**: 插件权限控制和沙盒运行\n\n### 🎯 主要特点\n- 左侧导航栏设计，支持项目快速切换\n- 响应式布局，适配不同屏幕尺寸\n- 插件热加载和依赖管理\n- 文件系统安全访问控制\n- 统一的UI/UX设计规范\n\n## 项目结构\n\n```\nLessonPlugin/\n├── package.json                 # 主项目配置\n├── src/\n│   ├── main/                   # Electron主进程\n│   │   ├── main.js            # 应用入口\n│   │   ├── plugin-manager.js  # 插件管理器\n│   │   ├── window-manager.js  # 窗口管理器\n│   │   └── preload.js         # 预加载脚本\n│   └── renderer/              # React渲染进程\n│       ├── package.json       # 前端依赖\n│       ├── public/\n│       │   └── index.html     # HTML模板\n│       └── src/\n│           ├── App.tsx        # 主应用组件\n│           ├── components/    # React组件\n│           └── types/         # TypeScript类型定义\n└── example-plugin/            # 示例插件\n    ├── manifest.json          # 插件清单\n    └── index.js              # 插件主文件\n```\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\n# 安装主项目依赖\nnpm install\n\n# 安装前端依赖\ncd src/renderer\nnpm install\n```\n\n### 2. 启动开发环境\n\n```bash\n# 启动应用（开发模式）\nnpm run dev\n```\n\n### 3. 构建应用\n\n```bash\n# 构建生产版本\nnpm run build\n```\n\n## 插件开发\n\n### 插件结构\n\n每个插件需要包含以下文件：\n\n#### manifest.json\n```json\n{\n  \"id\": \"your-plugin-id\",\n  \"name\": \"插件名称\",\n  \"version\": \"1.0.0\",\n  \"description\": \"插件描述\",\n  \"author\": \"作者\",\n  \"main\": \"index.js\",\n  \"permissions\": [\"storage\", \"network\", \"ui\"],\n  \"projects\": [\n    {\n      \"id\": \"project-id\",\n      \"name\": \"项目名称\",\n      \"description\": \"项目描述\",\n      \"icon\": \"🔧\",\n      \"component\": \"ComponentName\"\n    }\n  ],\n  \"dependencies\": [\n    {\n      \"id\": \"dependency-plugin-id\",\n      \"version\": \"^1.0.0\"\n    }\n  ]\n}\n```\n\n#### index.js\n```javascript\nmodule.exports = {\n  // 渲染项目页面\n  renderProject: async (params, context) =\u003e {\n    const { projectId } = params;\n    return '\u003cdiv\u003e项目内容HTML\u003c/div\u003e';\n  },\n  \n  // 其他插件方法...\n};\n```\n\n### 插件权限\n\n- `storage`: 文件系统访问权限\n- `network`: 网络访问权限\n- `ui`: 用户界面操作权限\n- `system`: 系统级操作权限\n\n### 插件上下文\n\n插件运行时会获得以下上下文：\n\n```javascript\n{\n  pluginPath: '/path/to/plugin',      // 插件目录路径\n  dataPath: '/path/to/plugin/data',   // 插件数据目录\n  permissions: ['storage', 'ui'],     // 插件权限列表\n  getPlugin: (id) =\u003e Plugin,          // 获取其他插件实例\n  executeAction: (pluginId, action, params) =\u003e Promise // 调用其他插件方法\n}\n```\n\n## API文档\n\n### 主进程API\n\n#### 插件管理\n- `plugin:list` - 获取已安装插件列表\n- `plugin:install` - 安装插件\n- `plugin:uninstall` - 卸载插件\n- `plugin:enable` - 启用插件\n- `plugin:disable` - 禁用插件\n- `plugin:getProjects` - 获取插件项目列表\n- `plugin:executeAction` - 执行插件方法\n\n#### 窗口管理\n- `window:create` - 创建新窗口\n- `window:close` - 关闭窗口\n\n#### 文件系统\n- `fs:selectFolder` - 选择文件夹\n- `fs:selectFile` - 选择文件\n\n### 渲染进程API\n\n通过 `window.electronAPI` 访问：\n\n```javascript\n// 插件操作\nconst plugins = await window.electronAPI.plugin.list();\nawait window.electronAPI.plugin.install('/path/to/plugin');\n\n// 窗口操作\nconst { windowId } = await window.electronAPI.window.create({\n  width: 800,\n  height: 600,\n  title: '新窗口'\n});\n\n// 文件操作\nconst folderPath = await window.electronAPI.fs.selectFolder();\n```\n\n## 示例插件\n\n项目包含一个计算器示例插件，展示了：\n- 基本的插件结构\n- 项目页面渲染\n- 数据持久化\n- 用户交互处理\n\n安装示例插件：\n1. 打开应用\n2. 进入\"插件管理\"页面\n3. 点击\"安装插件\"\n4. 选择 `example-plugin` 文件夹\n\n## 开发指南\n\n### 添加新功能\n1. 在主进程中添加IPC处理器\n2. 在预加载脚本中暴露API\n3. 在渲染进程中调用API\n4. 更新TypeScript类型定义\n\n### 插件开发最佳实践\n1. 遵循插件清单规范\n2. 合理声明权限需求\n3. 处理异步操作和错误\n4. 保持UI风格一致性\n5. 提供清晰的用户反馈\n\n### 安全考虑\n- 插件运行在受限环境中\n- 网络和文件访问需要权限声明\n- 用户数据加密存储\n- 定期更新依赖包\n\n## 贡献指南\n\n1. Fork 项目\n2. 创建功能分支\n3. 提交更改\n4. 推送到分支\n5. 创建 Pull Request\n\n## 许可证\n\nMIT License - 详见 LICENSE 文件\n\n## 支持\n\n如有问题或建议，请提交 Issue 或联系开发团队。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRis-Soft%2FRis_ClassTool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRis-Soft%2FRis_ClassTool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRis-Soft%2FRis_ClassTool/lists"}