# RuoYi 后台操作指南:数字图书馆 目标:为“数字图书馆”模块配置菜单与按钮权限,使后台与门户接口均可用。 前置条件 - 已部署后端并导入 SQL(已创建 `tb_library_*` 表)。 - 已存在角色:`librarian`(图书管理员)。若不存在,请先在“系统管理 → 角色管理”新增,`角色键名` 填 `librarian`。 步骤 1:新增目录与菜单 1) 登录 RuoYi 后台(管理员账号) 2) 系统管理 → 菜单管理 → 新增 - 菜单类型:目录 - 菜单名称:数字图书馆 - 路由地址:`/manage/library` - 组件路径:`Layout` - 可见:勾选 3) 在“数字图书馆”目录下新增“图书列表(已通过)”菜单: - 菜单类型:菜单 - 菜单名称:图书列表(已通过) - 路由地址:`list`(父级已是 `/manage/library`,最终路由为 `/manage/library/list`) - 组件路径:`manage/library/ApprovedList`(对应 `src/views/manage/library/ApprovedList.vue`) - 权限标识:`manage:library:list` 4) 新增“待审核”菜单: - 路由地址:`audit` - 组件路径:`manage/library/Audit` - 权限标识:`manage:library:list` 5) 新增“回收站”菜单: - 路由地址:`recycle` - 组件路径:`manage/library/Recycle` - 权限标识:`manage:library:list` 6) 新增“图书管理员”菜单: - 路由地址:`librarian` - 组件路径:`manage/library/Librarian` - 权限标识:`manage:libraryLibrarian:list` 步骤 2:新增按钮权限(与后端一致) - 图书(通用,按页面需要勾选): - `manage:library:list` `manage:library:get` - `manage:library:add` `manage:library:edit` `manage:library:remove` - `manage:library:approve` `manage:library:reject` - `manage:library:offline` `manage:library:online` - `manage:library:download`(管理端审核时下载/跳转资产) - `manage:library:hardRemove`(预留) - 图书管理员: - `manage:libraryLibrarian:list` `manage:libraryLibrarian:add` `manage:libraryLibrarian:remove` 步骤 3:给“图书管理员”角色分配菜单 - 系统管理 → 角色管理 → 选择 `librarian` - 分配菜单:勾选“数字图书馆/图书列表/审核队列/图书管理员”及其按钮权限 - 保存后重新登录生效 校验 - 使用管理员账户访问: - GET `/manage/library/list` 返回 200 - PUT `/manage/library/{id}/approve` 返回 200 - 使用图书管理员账户: - 可读写书籍与审核;可管理“图书管理员”列表(若已授权) - 门户接口(登录用户): - GET `/portal/library/list` 能返回上架图书 - GET `/portal/library/{id}` 返回详情与资产列表 - GET `/portal/library/{id}/download` 302 跳转 - GET `/portal/library/favorite` 返回“我的收藏”(需登录) 常见问题 - 403 权限不足:检查按钮标识是否与后端一致,勾选后需重新登录。 - 404 下载失败:门户需 status=1;管理端需勾选 `manage:library:download`,并确认资产存在。 - 任命失败:确认已创建 `librarian` 角色;检查用户是否存在于 `sys_user`。 - 列表中“账号/姓名”为空:新任命后会自动快照;历史数据可执行脚本回填。账号= `sys_user.user_name`,姓名/昵称= `sys_user.nick_name`。 - 管理端下载: - GET `/manage/library/{id}/assets` 返回资产列表 - GET `/manage/library/{id}/download` 302 跳转(需 `manage:library:download`)