diff --git a/app/admin/controller/BabyHealth/BabysController.php b/app/admin/controller/BabyHealth/BabysController.php new file mode 100644 index 0000000..e4a04ff --- /dev/null +++ b/app/admin/controller/BabyHealth/BabysController.php @@ -0,0 +1,221 @@ +order('sort', 'asc') + ->field('id, name, nickname, sex, avatar, birth, height, weight, status, create_time, update_time') + ->select() + ->toArray(); + // 记录操作日志 + $this->logSuccess('宝贝管理', '获取宝贝信息', ['data' => $babylist]); + return json([ + 'code' => 200, + 'msg' => '获取成功', + 'data' => $babylist + ]); + } catch (DbException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '获取宝贝信息', $e->getMessage()); + return json([ + 'code' => 500, + 'msg' => '获取失败:' . $e->getMessage(), + 'data' => [] + ]); + } + } + + /** + * 创建宝贝信息 + * @return Json + */ + public function createBaby() + { + try { + // 获取请求参数 + $data = $this->request->param(); + + // 准备宝贝数据 + $babyData = [ + 'name' => $data['name'], + 'nickname' => $data['nickname'], + 'sex' => $data['sex'], + 'birth' => $data['birth'], + 'height' => $data['height'], + 'weight' => $data['weight'], + 'avatar' => $data['avatar'], + 'status' => $data['status'], + 'create_time' => date('Y-m-d H:i:s'), + ]; + + // 创建宝贝信息 + $result = AppsBabys::insertGetId($babyData); + + if ($result === false) { + return json([ + 'code' => 500, + 'msg' => '创建失败' + ]); + } + + // 记录操作日志 + $this->logSuccess('宝贝管理', '创建宝贝信息', ['id' => $result]); + return json([ + 'code' => 200, + 'msg' => '创建成功', + 'data' => ['id' => $result] + ]); + } catch (ValidateException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '创建宝贝信息', $e->getMessage()); + return json([ + 'code' => 400, + 'msg' => $e->getError() + ]); + } catch (DbException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '创建宝贝信息', $e->getMessage()); + return json([ + 'code' => 500, + 'msg' => '创建失败:' . $e->getMessage() + ]); + } + } + + /** + * 编辑宝贝信息 + * @param int $id Baby ID + * @return Json + */ + public function editBaby(int $id) + { + try { + // 获取请求参数 + $data = $this->request->param(); + + // 检查宝贝信息是否存在 + $baby = AppsBabys::where('id', $id) + ->where('delete_time', null) + ->find(); + + if (!$baby) { + return json([ + 'code' => 404, + 'msg' => '宝贝信息不存在' + ]); + } + + // 准备更新数据 + $updateData = [ + 'name' => $data['name'], + 'nickname' => $data['nickname'], + 'sex' => $data['sex'], + 'birth' => $data['birth'], + 'height' => $data['height'], + 'weight' => $data['weight'], + 'avatar' => $data['avatar'], + 'status' => $data['status'], + 'update_time' => date('Y-m-d H:i:s'), + ]; + + // 执行更新 + AppsBabys::where('id', $id)->update($updateData); + + // 获取更新后的宝贝信息 + $updatedBaby = AppsBabys::where('id', $id)->find(); + + // 记录操作日志 + $this->logSuccess('宝贝管理', '更新宝贝信息', ['id' => $id]); + return json([ + 'code' => 200, + 'msg' => '更新成功', + 'data' => $updatedBaby ? $updatedBaby->toArray() : [] + ]); + } catch (ValidateException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '更新宝贝信息', $e->getMessage()); + return json([ + 'code' => 400, + 'msg' => $e->getError() + ]); + } catch (DbException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '更新宝贝信息', $e->getMessage()); + return json([ + 'code' => 500, + 'msg' => '更新失败:' . $e->getMessage() + ]); + } + } + + /** + * 删除宝贝信息 + * @param int $id Baby ID + * @return Json + */ + public function deleteBaby(int $id) + { + try { + // 检查宝贝信息是否存在 + $baby = AppsBabys::where('id', $id) + ->where('delete_time', null) + ->find(); + + if (!$baby) { + return json([ + 'code' => 404, + 'msg' => '宝贝信息不存在' + ]); + } + + // 逻辑删除宝贝信息 + $result = AppsBabys::where('id', $id) + ->where('delete_time', null) + ->update([ + 'delete_time' => date('Y-m-d H:i:s'), + 'update_time' => date('Y-m-d H:i:s') + ]); + + if ($result === false) { + return json([ + 'code' => 500, + 'msg' => '删除失败' + ]); + } + + // 记录操作日志 + $this->logSuccess('宝贝管理', '删除宝贝信息', ['id' => $id]); + return json([ + 'code' => 200, + 'msg' => '删除成功' + ]); + } catch (DbException $e) { + // 记录失败日志 + $this->logFail('宝贝管理', '删除宝贝信息', $e->getMessage()); + return json([ + 'code' => 500, + 'msg' => '删除失败:' . $e->getMessage() + ]); + } + } +} diff --git a/app/admin/controller/MenuController.php b/app/admin/controller/MenuController.php index c542423..c515c94 100644 --- a/app/admin/controller/MenuController.php +++ b/app/admin/controller/MenuController.php @@ -280,6 +280,9 @@ class MenuController extends BaseController $result = SystemMenu::insertGetId($menuData); if ($result) { + // 更新角色菜单权限 + $this->updateRoleMenuPermissions((int)$result, 'create'); + // 记录操作日志 $this->logSuccess('菜单管理', '创建菜单', ['id' => $result]); return json([ @@ -343,6 +346,9 @@ class MenuController extends BaseController // 执行更新 SystemMenu::where('id', $id)->update($updateData); + // 更新角色菜单权限 + $this->updateRoleMenuPermissions($id, 'update'); + // 获取更新后的菜单信息 $menu = SystemMenu::where('id', $id)->find(); @@ -405,6 +411,9 @@ class MenuController extends BaseController ]); } + // 更新角色菜单权限(从所有角色中移除该菜单) + $this->updateRoleMenuPermissions($id, 'delete'); + // 记录操作日志 $this->logSuccess('菜单管理', '删除菜单', ['id' => $id]); return json([ @@ -421,6 +430,60 @@ class MenuController extends BaseController } } + /** + * 更新角色菜单权限 + * @param int $menuId 菜单ID + * @param string $action 操作类型: create, update, delete + * @return void + */ + private function updateRoleMenuPermissions(int $menuId, string $action = 'update'): void + { + try { + // 获取所有角色 + $roles = AdminUserGroup::where('delete_time', null)->select(); + + foreach ($roles as $role) { + // 解析权限数据,如果rights为空,初始化为空数组 + $rights = empty($role->rights) ? [] : json_decode($role->rights, true); + if (!is_array($rights)) { + $rights = []; + } + + $updated = false; + + switch ($action) { + case 'create': + case 'update': + // 创建或更新菜单时,自动添加到所有角色的权限中 + if (!in_array($menuId, $rights)) { + $rights[] = $menuId; + $updated = true; + } + break; + + case 'delete': + // 删除菜单时,从所有角色的权限中移除该菜单ID + if (in_array($menuId, $rights)) { + $rights = array_diff($rights, [$menuId]); + $rights = array_values($rights); // 重新索引数组 + $updated = true; + } + break; + } + + // 如果权限有变化,更新角色 + if ($updated) { + $role->rights = !empty($rights) ? json_encode($rights) : null; + $role->update_time = date('Y-m-d H:i:s'); + $role->save(); + } + } + } catch (\Exception $e) { + // 记录错误日志但不中断主流程 + $this->logFail('菜单管理', '更新角色菜单权限', $e->getMessage()); + } + } + /** * 构建菜单树形结构 * @param array $menus 菜单列表 diff --git a/app/admin/route/app.php b/app/admin/route/app.php index 7b2f44d..cb01d4a 100644 --- a/app/admin/route/app.php +++ b/app/admin/route/app.php @@ -1,120 +1,22 @@ pattern(['path' => '.*']); + // 按名称排序,确保加载顺序 + sort($routeFiles); -// 登录路由 -Route::post('login', 'app\\admin\\controller\\LoginController@login'); -Route::post('logout', 'app\\admin\\controller\\LoginController@logout'); -Route::get('user/info', 'app\\admin\\controller\\LoginController@userInfo'); - -// 菜单路由 -Route::get('allmenu', 'app\\admin\\controller\\MenuController@getAllMenus'); -Route::get('menu/:id', 'app\\admin\\controller\\MenuController@getMenus'); -Route::post('createMenu', 'app\\admin\\controller\\MenuController@createMenu'); -Route::put('updateMenu/:id', 'app\\admin\\controller\\MenuController@updateMenu'); -Route::delete('deleteMenu/:id', 'app\\admin\\controller\\MenuController@deleteMenu'); -Route::patch('menu/status/:id', 'app\\admin\\controller\\MenuController@updateMenuStatus'); - -// 前端导航路由 -Route::get('frontmenus', 'app\\admin\\controller\\FrontMenuController@getFrontMenus'); -Route::post('createfrontmenu', 'app\\admin\\controller\\FrontMenuController@createFrontMenu'); -Route::post('editfrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@editFrontMenu'); -Route::delete('deletefrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@deleteFrontMenu'); - -// Banner路由 -Route::get('allbanners', 'app\\admin\\controller\\BannerController@getAllBanners'); -Route::post('createbanner', 'app\\admin\\controller\\BannerController@createBanner'); -Route::post('editbanner/:id', 'app\\admin\\controller\\BannerController@editBanner'); -Route::delete('deletebanner/:id', 'app\\admin\\controller\\BannerController@deleteBanner'); - -// 单页路由 -Route::get('allonepages', 'app\\admin\\controller\\OnePageController@getAllOnePages'); -Route::post('createonepage', 'app\\admin\\controller\\OnePageController@createOnePage'); -Route::post('editonepage/:id', 'app\\admin\\controller\\OnePageController@editOnePage'); -Route::delete('deleteonepage/:id', 'app\\admin\\controller\\OnePageController@deleteOnePage'); - -// 文章路由 -Route::get('articlesList', 'app\\admin\\controller\\Article\\ArticleController@getArticlesList'); -Route::get('allarticles', 'app\\admin\\controller\\Article\\ArticleController@getAllArticles'); -Route::get('articles/:id', 'app\\admin\\controller\\Article\\ArticleController@getArticle'); -Route::post('createarticle', 'app\\admin\\controller\\Article\\ArticleController@createArticle'); -Route::post('editarticle/:id', 'app\\admin\\controller\\Article\\ArticleController@editArticle'); -Route::delete('deletearticle/:id', 'app\\admin\\controller\\Article\\ArticleController@deleteArticle'); -Route::post('publisharticle/:id', 'app\\admin\\controller\\Article\\ArticleController@publishArticle'); -Route::post('unPublisharticle/:id', 'app\\admin\\controller\\Article\\ArticleController@unPublishArticle'); -Route::post('articleRecommend/:id', 'app\\admin\\controller\\Article\\ArticleController@articleRecommend'); -Route::post('unArticleRecommend/:id', 'app\\admin\\controller\\Article\\ArticleController@unArticleRecommend'); -Route::post('articleTop/:id', 'app\\admin\\controller\\Article\\ArticleController@articleTop'); -Route::post('unArticleTop/:id', 'app\\admin\\controller\\Article\\ArticleController@unArticleTop'); - -// 文章分类路由 -Route::get('allcategories', 'app\\admin\\controller\\Article\\ArticleCategoryController@getAllArticleCategories'); -Route::get('categories', 'app\\admin\\controller\\Article\\ArticleCategoryController@getArticleCategories'); -Route::delete('categories/:id', 'app\\admin\\controller\\Article\\ArticleCategoryController@deleteCategory'); -Route::post('createCategory', 'app\\admin\\controller\\Article\\ArticleCategoryController@createCategory'); -Route::post('editCategory/:id', 'app\\admin\\controller\\Article\\ArticleCategoryController@editCategory'); - -// 文件路由 -Route::get('usercate', 'app\\admin\\controller\\FileController@getUserCate'); -Route::get('allfiles', 'app\\admin\\controller\\FileController@getAllFiles'); -Route::get('catefiles/:id', 'app\\admin\\controller\\FileController@getCateFiles'); -Route::post('uploadfile', 'app\\admin\\controller\\FileController@uploadFile'); -Route::post('updatefile/:id', 'app\\admin\\controller\\FileController@updateFile'); -Route::delete('deletefile/:id', 'app\\admin\\controller\\FileController@deleteFile'); -Route::get('movefile/:id', 'app\\admin\\controller\\FileController@moveFile'); -Route::post('createfilecate', 'app\\admin\\controller\\FileController@createFileCate'); -Route::post('renamefilecate/:id', 'app\\admin\\controller\\FileController@renameFileCate'); -Route::delete('deletefilecate/:id', 'app\\admin\\controller\\FileController@deleteFileCate'); - -// 用户路由 -Route::get('getAllUsers', 'app\\admin\\controller\\UserController@getAllUsers'); -Route::get('getUserInfo/:id', 'app\\admin\\controller\\UserController@getUserInfo'); -Route::post('addUser', 'app\\admin\\controller\\UserController@addUser'); -Route::post('editUser/:id', 'app\\admin\\controller\\UserController@editUser'); -Route::delete('deleteUser/:id', 'app\\admin\\controller\\UserController@deleteUser'); -Route::post('changePassword', 'app\\admin\\controller\\UserController@changePassword'); - -// 角色路由 -Route::get('allRoles', 'app\\admin\\controller\\RoleController@getAllRoles'); -Route::get('roles/:id', 'app\\admin\\controller\\RoleController@getRoleById'); -Route::post('roles', 'app\\admin\\controller\\RoleController@createRole'); -Route::put('roles/:id', 'app\\admin\\controller\\RoleController@updateRole'); -Route::delete('roles/:id', 'app\\admin\\controller\\RoleController@deleteRole'); - -// 操作日志路由(注意:具体路径要在动态路径之前) -Route::get('operationLogs/statistics', 'app\\admin\\controller\\OperationLog\\OperationLogController@getOperationStatistics'); -Route::get('operationLogs/:id', 'app\\admin\\controller\\OperationLog\\OperationLogController@getOperationLogDetail'); -Route::get('operationLogs', 'app\\admin\\controller\\OperationLog\\OperationLogController@getOperationLogs'); - -// 站点设置路由 -Route::get('normalInfos', 'app\\admin\\controller\\SiteSettingsController@getNormalInfos'); -Route::post('saveNormalInfos', 'app\\admin\\controller\\SiteSettingsController@saveNormalInfos'); -Route::get('legalInfos', 'app\\admin\\controller\\SiteSettingsController@getLegalInfos'); -Route::post('saveLegalInfos', 'app\\admin\\controller\\SiteSettingsController@saveLegalInfos'); - -// 数据统计路由 -Route::get('contentstats', 'app\\admin\\controller\\AnalyticsController@getContentStats'); -Route::get('usersstats', 'app\\admin\\controller\\AnalyticsController@getUserStats'); - -// 模块管理路由 -Route::get('modules/list', 'app\\admin\\controller\\ModulesController@getList'); -Route::get('modules/:id', 'app\\admin\\controller\\ModulesController@getDetail'); -Route::post('modules', 'app\\admin\\controller\\ModulesController@add'); -Route::put('modules/:id', 'app\\admin\\controller\\ModulesController@edit'); -Route::delete('modules/:id', 'app\\admin\\controller\\ModulesController@delete'); -Route::post('modules/batchDelete', 'app\\admin\\controller\\ModulesController@batchDelete'); -Route::post('modules/status', 'app\\admin\\controller\\ModulesController@changeStatus'); -Route::get('modules/select/list', 'app\\admin\\controller\\ModulesController@getSelectList'); - -// 模块中心路由 -Route::get('moduleCategory', 'app\\admin\\controller\\ModuleCenterController@getModuleCategory'); -Route::get('moduleCenter/modules', 'app\\admin\\controller\\ModuleCenterController@getModuleList'); -Route::post('moduleCenter/editCategory', 'app\\admin\\controller\\ModuleCenterController@editCategory'); -Route::post('moduleCenter/editModules', 'app\\admin\\controller\\ModuleCenterController@editModules'); \ No newline at end of file + // 加载每个路由文件 + foreach ($routeFiles as $file) { + require_once $file; + } +} diff --git a/app/admin/route/routes/babyhealth.php b/app/admin/route/routes/babyhealth.php new file mode 100644 index 0000000..d38258e --- /dev/null +++ b/app/admin/route/routes/babyhealth.php @@ -0,0 +1,9 @@ +pattern(['path' => '.*']); + +// 登录路由 +Route::post('login', 'app\\admin\\controller\\LoginController@login'); +Route::post('logout', 'app\\admin\\controller\\LoginController@logout'); +Route::get('user/info', 'app\\admin\\controller\\LoginController@userInfo'); diff --git a/app/admin/route/routes/menu.php b/app/admin/route/routes/menu.php new file mode 100644 index 0000000..f6d5ddd --- /dev/null +++ b/app/admin/route/routes/menu.php @@ -0,0 +1,10 @@ + +// +---------------------------------------------------------------------- + +namespace app\model; + +use think\Model; +use think\model\concern\SoftDelete; + +/** + * 文章分类模型 + */ +class AppsBabys extends Model +{ + // 启用软删除 + use SoftDelete; + + // 数据库表名 + protected $name = 'mete_apps_babys'; + + // 字段类型转换 + protected $type = [ + 'id' => 'integer', + 'name' => 'string', + 'nickname' => 'string', + 'sex' => 'integer', + 'birth' => 'date', + 'height' => 'double', + 'weight' => 'double', + 'avatar' => 'string', + 'status' => 'integer', + 'create_time' => 'datetime', + 'update_time' => 'datetime', + 'delete_time' => 'datetime', + ]; + + +}