Comparing master...lyz · ifLab/eduhub-admin · GitHub
Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: ifLab/eduhub-admin
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: ifLab/eduhub-admin
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: lyz
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 10 commits
  • 14 files changed
  • 1 contributor

Commits on Apr 21, 2025

  1. feat: 初始化项目并添加基础配置与文档

    - 添加项目结构说明文档 PROJECT_DOCUMENTATION.md
    - 临时修改登录逻辑,使用明文密码验证以进行快速开发
    - 调整 /getDify_keys API,使其仅返回应用名称与对应的 API Key
    - 跟踪 package-lock.json 文件
    - 添加 .cursor 配置
    lyzno1 committed Apr 21, 2025
    Configuration menu
    Copy the full SHA
    0503f2c View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    565ffdf View commit details
    Browse the repository at this point in the history
  3. feat: 重构应用配置管理系统并修复相关功能

    本次提交对应用配置管理系统进行了全面的重构和功能修复,主要包括:
    
    前端UI与交互 (ApplicationPage/index.js):
    - 实现文件夹与卡片的两级可展开表格视图,优化用户体验。
    - 简化文件夹添加/编辑模态框,聚焦于核心配置项 'displayName';应用ID (�ppId) 自动生成,文件夹键 (olderKey) 内部处理。
    - 调整卡片添加/编辑模态框,明确必填项 (如卡片ID, 名称, API Key) 和可选项 (图标名称),并设置API URL默认值。
    - 限制对特殊文件夹 'global' 的操作:禁用添加卡片和删除文件夹功能,但允许修改其显示名称。
    
    后端API (server.js 与 dify_keys.json):
    - 重构文件夹添加逻辑 (/addFolder):
        - 接收前端传递的 'displayName'。
        - 采用 UUID 作为新文件夹的键 (olderKey),确保唯一性并解决中文名或特殊字符导致的问题。
        - 保留并正确实现了应用ID (�ppId) 的自动递增 (Max+1) 逻辑。
    - 重构文件夹删除逻辑 (/deleteFolder):
        - 替代旧接口,并在删除前检查文件夹下的 cards 数组是否为空,防止误删包含内容的文件夹。
    - 新增文件夹名称修改接口 (/updateFolder):
        - 允许仅更新文件夹的 displayName 属性,保持 olderKey 不变。
    - 新增完整的卡片管理API:
        - 实现 /addCard, /updateCard, /deleteCard 接口,用于处理文件夹内卡片的增删改操作。
    - 修复跨域资源共享 (CORS) 问题:
        - 调整了 CORS 配置,允许前端开发服务器 (如 'http://localhost:3002') 访问后端 API (如 'http://localhost:3001')。
    
    整体效果:
    - 应用配置管理界面功能更完善、交互更清晰。
    - 后端处理逻辑更健壮、安全,标识符管理更合理。
    - 解决了之前遇到的添加/修改文件夹失败、卡片管理功能缺失以及跨域请求失败等问题。
    lyzno1 committed Apr 21, 2025
    Configuration menu
    Copy the full SHA
    a7cb90a View commit details
    Browse the repository at this point in the history

Commits on Apr 22, 2025

  1. feat(应用管理): 使用可视化选择器配置卡片图标

    在应用卡片配置的模态框中,将原先手动输入图标名称的文本框,替换为一个可视化的图标选择网格。
    
    主要改进:
    - 从 @tabler/icons-react 导入前端使用的图标,并在管理界面中展示。
    - 用户可以通过直接点击图标来选择所需的样式,再次点击可以取消选择。
    - 提供了一个明确的’无图标‘选项。
    - 在卡片列表中,图标列现在会显示图标的预览图和名称标签,提升了可读性。
    
    该修改优化了管理员配置卡片的体验,降低了因手动输入图标名称错误的可能性。
    
    注意:未来若前端增删可用图标,需同步更新管理后台 ApplicationPage 组件中的 �vailableIcons 映射。
    lyzno1 committed Apr 22, 2025
    Configuration menu
    Copy the full SHA
    facec63 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    813700c View commit details
    Browse the repository at this point in the history
  3. feat: 实现 global 文件夹 Dify 配置的单独编辑功能

    本次提交为应用管理页面添加了编辑全局 (global) Dify 配置的功能。
    
    主要修改点:
    
    eduhub-admin/src/components/ApplicationPage/index.js (前端):
    
    调整了文件夹数据获取逻辑 (WorkspaceFoldersData),确保加载 global 文件夹的 difyConfig。
    修改了文件夹编辑处理函数 (handleEditFolder):
    当编辑 global 文件夹时,现在会从数据记录中读取 apiKey 和 apiUrl。
    修正了 setFieldsValue 的用法,使用嵌套对象结构来正确填充表单中的 apiKey 和 apiUrl 字段。
    添加了调试用的 console.log。
    修改了文件夹编辑模态框的 JSX:
    增加了条件渲染逻辑,仅在编辑 global 文件夹时,才显示 全局 API Key 和 全局 API URL 的表单项。
    修改了文件夹保存处理函数 (handleFolderOk):
    当更新 global 文件夹时,会将表单中的 apiKey 和 apiUrl 包含在发送到后端的请求体 difyConfig 对象中。
    影响: 这些前端改动主要增加了对 global 文件夹编辑的特殊处理逻辑和 UI 展示,不影响其他文件夹或卡片的添加、编辑、删除功能。
    eduhub-admin/src/apis/server.js (后端):
    
    修改了 /updateFolder API 接口:
    现在可以接收请求体中可选的 difyConfig 对象 (包含 apiKey 和 apiUrl)。
    增加了处理逻辑:当请求更新的目标是 global 文件夹 (即 originalKey 字段的值是 global) 并且请求体中带有 difyConfig 时,会更新 dify_keys.json 文件中 global 条目下的 difyConfig。
    对 global 的 difyConfig 更新添加了必要的校验。
    更新 displayName 的逻辑对所有文件夹(包括 global)保持不变。
    影响: 后端改动仅限于 /updateFolder 接口,为其添加了处理 global 文件夹特定配置更新的能力,不影响其他 API 接口或其他文件夹的更新逻辑。
    总体而言,这些修改是针对性的功能增强,旨在允许独立配置 global 文件夹的 Dify API Key 和 URL,并且设计上隔离了影响范围,不会改变现有其他应用文件夹和卡片的管理逻辑。
    lyzno1 committed Apr 22, 2025
    Configuration menu
    Copy the full SHA
    5313cfc View commit details
    Browse the repository at this point in the history

Commits on Apr 23, 2025

  1. feat(admin): 分离并实现全局聊天设置管理页面

    本次提交主要将全局聊天(普通聊天)的配置管理从原有的“应用管理”页面中分离出来,创建了一个独立的“普通聊天设置”页面,并实现了完整的 CRUD (创建、读取、更新、删除) 功能。
    
    **主要变更:**
    
    1.  **结构调整与页面分离:**
        *   创建新组件 `src/components/GlobalSettingsPage/index.js`,用于管理 `dify_keys.json` 中的 `global` 配置。
        *   创建新组件 `src/components/GlobalSettingsPage/ModelEditModal.js`,用于添加和编辑全局模型。
        *   修改 `src/components/ApplicationPage/index.js`:
            *   移除其获取和显示 `global` 配置的逻辑。
            *   移除处理 `global` 相关特殊情况的代码(如编辑、删除、添加卡片等)。
            *   使其专注于管理应用文件夹和卡片。
        *   修改 `src/pages/AdminPage/index.js`:
            *   导入 `GlobalSettingsPage` 组件。
            *   在侧边栏菜单中添加“普通聊天设置”导航项 (key='9', icon=GlobalOutlined)。
            *   在内容区域添加条件渲染,根据菜单选择显示 `GlobalSettingsPage`。
    
    2.  **全局设置页面 (`GlobalSettingsPage`) 功能实现:**
        *   通过 `/getDify_keys` API 获取 `global` 配置数据 (displayName, apiUrl, models)。
        *   使用表单展示并允许编辑 `displayName` 和 `apiUrl`。
        *   实现 `handleSaveGeneralSettings` 函数,调用后端 `/updateFolder` API 保存常规设置的修改。
        *   使用表格展示 `global.models` 列表,包括模型名称、API Key 状态(“已配置”/“未配置”)和是否默认(使用 Switch 显示)。
        *   实现模型管理的交互逻辑:
            *   添加状态 (`isModelModalVisible`, `editingModel`) 管理模态框。
            *   实现 `handleAddModel`, `handleEditModel`, `handleCancelModelModal` 打开和关闭模态框。
            *   实现 `handleSaveModel` 函数,连接前端模态框与后端 API (`/addGlobalModel`, `/updateGlobalModel`)。
            *   实现 `handleDeleteModel` 函数,连接前端删除按钮与后端 API (`/deleteGlobalModel`)。
            *   实现 `handleSetDefault` 函数,连接前端 Switch 与后端 API (`/setGlobalDefaultModel`)。
    
    3.  **模型编辑模态框 (`ModelEditModal`) 功能实现:**
        *   包含模型名称、API Key(密码类型)和是否默认(Switch)的表单项。
        *   支持添加和编辑两种模式,编辑模式下会填充初始数据。
        *   实现表单验证和保存逻辑,调用父组件的 `onSave` 回调。
        *   **允许编辑模型名称**。
    
    4.  **后端 API (`server.js`) 修改与新增:**
        *   修改 `/updateFolder` 接口:
            *   使其能正确处理 `originalKey: 'global'` 的情况,更新顶级的 `displayName` 和 `apiUrl`。
        *   新增全局模型管理 API:
            *   `POST /addGlobalModel`: 添加新模型,处理名称冲突和默认设置。
            *   `POST /updateGlobalModel`: 更新模型(**支持名称修改**),处理名称冲突和默认设置切换逻辑。
            *   `POST /deleteGlobalModel`: 删除模型,禁止删除默认模型,确保删除后有默认模型。
            *   `POST /setGlobalDefaultModel`: 设置指定模型为默认,并取消其他模型的默认状态。
    
    5.  **修复与改进:**
        *   修正了 `GlobalSettingsPage.js` 中读取 `dify_keys.json` 模型数据时使用的字段名 (`name`, `apiKey`)。
        *   解决了更新全局常规设置时前后端接口不匹配导致失败的问题。
        *   实现了模型名称修改的完整前后端逻辑。
    
    **效果:**
    
    *   全局聊天配置管理功能从应用管理中解耦,逻辑更清晰。
    *   提供了专门的 UI 来管理全局聊天的显示名称、基础 API URL 以及可用的大语言模型列表。
    *   支持对全局模型进行添加、编辑(包括名称、API Key、是否默认)、删除和设置默认的操作。
    *   API Key 在表格中不再直接暴露,提高了安全性。
    lyzno1 committed Apr 23, 2025
    Configuration menu
    Copy the full SHA
    0a1cbd9 View commit details
    Browse the repository at this point in the history

Commits on Apr 24, 2025

  1. feat(admin): 添加关于信息配置页面

    本次提交在管理后台(eduhub-admin)的设置页面中添加了配置"关于信息"的功能,允许管理员修改前端展示的"关于"按钮提示等信息。
    
    主要变更:
    
    1.  **后端 API (`server.js`)**:
        *   新增 `GET /getAboutInfo` 接口:用于读取 `eduhub/public/config/about.json` 文件的内容。若文件不存在,则返回默认空结构。
        *   新增 `POST /updateAboutInfo` 接口:接收前端发送的完整关于信息数据,并覆盖写入 `about.json` 文件。
    
    2.  **前端设置页面 (`SettingPage/index.js`)**:
        *   新增一个 Ant Design `Card` 和 `Form`,专门用于展示和编辑"关于信息"。
        *   表单包含字段:悬停提示内容 (Tooltip, 使用 TextArea 支持多行)、版本号、版权信息、开发者/组织、相关网站 URL。
        *   使用 `useEffect` 在页面加载时调用 `/getAboutInfo` 获取当前数据并填充表单。
        *   实现 `handleSaveAboutInfo` 函数,将编辑后的数据通过 `/updateAboutInfo` 接口保存到后端 JSON 文件。
        *   添加了加载状态 (`Spin`) 和保存成功/失败的提示 (`message`)。
    
    效果:
    
    *   管理员现在可以通过管理后台的图形化界面方便地修改前端侧边栏"关于"按钮的提示文本、版本号等信息。
    *   配置更改会实时写入到 `about.json` 文件,前端应用下次加载时将读取到最新的信息。
    lyzno1 committed Apr 24, 2025
    Configuration menu
    Copy the full SHA
    0a3d69d View commit details
    Browse the repository at this point in the history

Commits on Apr 25, 2025

  1. fix(admin): 修复 React 18 及 antd/react-router 兼容性警告

    本次提交集中修复了 `eduhub-admin` 项目在浏览器控制台中出现的多个与 React 18、React Router v6 以及 Ant Design 兼容性相关的警告,提升了代码的现代化水平和健壮性。
    
    主要变更:
    
    1.  **React 18 渲染 API 更新 (`src/index.js`):**
        *   将项目入口点的 React 应用渲染方式从旧的 `ReactDOM.render` 更新为 React 18 推荐的 `createRoot` API。
        *   解决了关于 `ReactDOM.render` 被弃用的警告,确保应用以标准的 React 18 模式运行。
    
    2.  **React Router v6 Future Flags 适配 (`src/router/index.js`):**
        *   在 `createBrowserRouter` 配置中添加了 `future` 对象,并启用了 `v7_startTransition` 和 `v7_relativeSplatPath` 两个 future flags。
        *   消除了 React Router 关于 v7 版本行为变更的警告,提前适配了未来的路由行为。
    
    3.  **Ant Design Menu 用法更新 (`src/pages/AdminPage/index.js`):**
        *   重构了侧边栏菜单 (`antd Menu` 组件) 的实现方式,将通过 JSX 子元素定义菜单项(`<Menu.Item>`)改为使用 `items` prop 传递菜单数据结构。
        *   解决了 `antd Menu` 关于 `children` prop 被弃用的警告。
        *   此修改很可能**一并解决**了附带出现的 `findDOMNode` 弃用警告,因为新版 `items` 实现通常更符合 React 严格模式要求。
        *   清理了 `AdminPage.js` 中与旧菜单逻辑相关的冗余状态和函数,使代码更整洁。
    
    效果:
    *   消除了项目启动和运行期间在控制台输出的相关警告信息。
    *   提高了项目对新版 React、React Router 和 Ant Design 的兼容性与规范性。
    lyzno1 committed Apr 25, 2025
    Configuration menu
    Copy the full SHA
    e6dacb4 View commit details
    Browse the repository at this point in the history
  2. feat(admin): 更新设置页面以管理 metadata.json

    本次提交对管理后台的"设置"页面及其对应的后端 API 进行了修改,以适配从 `about.json` 到 `metadata.json` 的配置重构。
    
    主要变更包括:
    
    **前端 (`eduhub-admin/src/components/SettingPage/index.js`):**
    
    1.  **状态与表单重命名**: 将状态变量 `aboutInfo` 和 Ant Design 表单实例 `aboutForm` 分别重命名为 `metadata` 和 `metadataForm`,以反映其管理内容的变化。
    2.  **API 端点更新**: 修改了 `useEffect` 中获取数据和 `handleSaveMetadata` (原 `handleSaveAboutInfo`) 中保存数据的 `fetch` 调用,使其分别指向新的后端接口 `/getMetadata` 和 `/updateMetadata`。
    3.  **表单字段扩展**: 在表单中新增了 "应用主标题" (`title`) 和 "应用副标题" (`subtitle`) 的输入项,允许管理员配置这些新的元数据。
    4.  **表单布局调整**: 使用 Ant Design 的 `<Divider />` 组件在表单中添加了分隔线,将"基本显示信息"(标题、副标题)与"关于与详细信息"(Tooltip、版本、版权等)进行了视觉分组,提升了可读性。
    5.  **文本更新**: 更新了卡片标题、按钮文本以及相关的函数/变量名,使其与"元数据"配置保持一致。
    6.  **数据处理适配**: 调整了加载和保存数据时的逻辑,以正确处理包含 `title` 和 `subtitle` 的新 `metadata` 结构。
    
    **后端 (`eduhub-admin/src/apis/server.js`):**
    
    1.  **文件路径更新**: 将指向配置文件的变量 `aboutJsonPath` 重命名为 `metadataJsonPath`,并更新其路径为 `public/config/metadata.json`。
    2.  **API 路由重命名**: 将获取配置的 GET 路由从 `/getAboutInfo` 修改为 `/getMetadata`,将更新配置的 POST 路由从 `/updateAboutInfo` 修改为 `/updateMetadata`。
    3.  **接口逻辑适配**:
        *   `/getMetadata` 接口现在会读取 `metadata.json`,并在文件不存在时返回包含 `title`、`subtitle` 等所有字段的默认空结构。
        *   `/updateMetadata` 接口现在会接收完整的 `metadata` 对象(包含 `title`, `subtitle`),进行相应的结构验证,并将数据写入 `metadata.json`。
    4.  **日志与消息更新**: 更新了相关接口的控制台日志和返回给前端的消息文本,使其与"元数据"操作相符。
    
    通过这些修改,管理后台的设置页面现在能够完整地读取和配置 `metadata.json` 文件中的所有信息,提供了更全面的应用元数据管理能力,并与前端应用的全局配置方式保持一致。
    lyzno1 committed Apr 25, 2025
    Configuration menu
    Copy the full SHA
    f7a9989 View commit details
    Browse the repository at this point in the history
Loading