find(); $classname = self::getCamel($info->name); $dirname = self::parseDirname($info->dirname); $url = !empty($dirname)?str_replace('/','.',$dirname).'.'.$classname:$classname; $path = !empty($dirname)?root_path()."public".DS."vue".DS."src".DS."api".DS.$dirname.DS:root_path()."public".DS."vue".DS."src".DS."api".DS; if(!is_dir($path)){ mkdir($path,0777,true); } $filename = $path.$classname.'.js'; $content = <<find(); $menuModel = new Menu; $requestModel = new Menurequest; $methods = ['getList','getInfo','doEdit','doDelete','changeStatus','doExport']; $classname = self::getCamel($info->name); $dirname = self::parseDirname($info->dirname); $hasParent = $menuModel->where('path','/'.$dirname)->find(); $url = !empty($dirname)?str_replace('/','.',$dirname).'.'.$classname:$classname; $component = "@/views/".$dirname.'/'.$classname;//根据vue页面文件判断是否已经有这个菜单了,当模型的存放路径dirname或数据表名name有变动时,原有的菜单需要在模型编辑时删除 $has = $menuModel->where('component',$component)->find(); $menuData = [ 'pid' => $hasParent?$hasParent->menu_id:0, 'parentName' => $hasParent?$hasParent->title:'顶级菜单', 'name' => $classname, 'path' => '/'.$dirname.'/'.$classname, 'component' => '@/views/'.$dirname.'/'.$classname, 'redirect' => '', 'title' => $info->title, 'icon' => '', 'badge' => '', 'sort' => 0, 'is_root' => 2, 'hidden' => 2, 'alwaysShow' => 1, 'isCustomSvgIcon' => 2, 'affix' => 2, 'noKeepAlive' => 1, 'tabHidden' => 2, 'parent_path' => $hasParent?$hasParent->parent_path:'', ]; if($has){ $menuData['menu_id'] = $has->menu_id; } $parentData = []; if(!$hasParent){ $parentData = [ 'pid' => 0, 'parentName' => '顶级菜单', 'name' => $classname.'Manage', 'path' => '/'.$dirname, 'component' => 'Layout', 'redirect' => $dirname.'/'.$classname, 'title' => self::getCamel(str_replace(DS,'',$dirname)), 'icon' => '', 'badge' => '', 'sort' => 0, 'is_root' => 1, 'hidden' => 2, 'alwaysShow' => 1, 'isCustomSvgIcon' => 2, 'affix' => 2, 'noKeepAlive' => 1, 'tabHidden' => 2, 'parent_path' => '', ]; } try{ Db::startTrans(); $pres = null; if(!empty($parentData)){ $res = Menu::create($parentData); $pid = $res->menu_id; $menuData['pid'] = $pid; Menu::where('menu_id',$pid)->update(['parent_path'=>$pid]); $menuData['parent_path'] = $pid; } $menuModel->replace()->save($menuData); $menu_id = $menuModel->menu_id; $info = Menu::find($menu_id); $parent_path = array_filter(explode(',',$info->parent_path)); $parent_path[] = $menu_id; $info->parent_path = implode(',',$parent_path); $info->save(); $oldRequest = $requestModel->where('menu_id',$menu_id)->column('*','operate'); $requestData = []; foreach($methods as $method){ $requestItem = [ 'menu_id' => $menu_id, 'name' => '', 'path' => '', 'model' => 1, 'operate' => '', 'status' => 1 ]; switch($method){ case 'getList': if(isset($oldRequest['READ'])){ $requestItem['menu_request_id'] = $oldRequest['READ']['menu_request_id']; } $requestItem['name'] = '查看'; $requestItem['operate'] = 'READ'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; case 'getInfo': if(isset($oldRequest['INFO'])){ $requestItem['menu_request_id'] = $oldRequest['INFO']['menu_request_id']; } $requestItem['name'] = '信息'; $requestItem['operate'] = 'INFO'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; case 'doEdit': if(isset($oldRequest['ADD'])){ $requestItem['menu_request_id'] = $oldRequest['ADD']['menu_request_id']; } $requestItem['name'] = '添加'; $requestItem['operate'] = 'ADD'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; if(isset($oldRequest['EDIT'])){ $requestItem['menu_request_id'] = $oldRequest['EDIT']['menu_request_id']; } $requestItem['name'] = '编辑'; $requestItem['operate'] = 'EDIT'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; case 'doDelete': if(isset($oldRequest['DELETE'])){ $requestItem['menu_request_id'] = $oldRequest['DELETE']['menu_request_id']; } $requestItem['name'] = '删除'; $requestItem['operate'] = 'DELETE'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; case 'changeStatus': if(isset($oldRequest['STATUS'])){ $requestItem['menu_request_id'] = $oldRequest['STATUS']['menu_request_id']; } $requestItem['name'] = '启用禁用'; $requestItem['operate'] = 'STATUS'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; case 'doExport': if(isset($oldRequest['EXPORT'])){ $requestItem['menu_request_id'] = $oldRequest['EXPORT']['menu_request_id']; } $requestItem['name'] = '导出'; $requestItem['operate'] = 'EXPORT'; $requestItem['path'] = '/'.$url.'/'.$method; $requestData[] = $requestItem; break; } } $res = $requestModel->replace()->saveAll($requestData); Db::commit(); return $res; }catch(\Exception $e){ Db::rollback(); abort(2,$e->getMessage()); return false; } } /** * @title: 删除模型的apijs文件 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-23 17:29:56 */ static public function deleteAPI(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $classname = self::getCamel($info->name); $dirname = self::parseDirname($info->dirname); $path = !empty($dirname)?root_path()."public".DS."vue".DS."src".DS."api".DS.$dirname.DS:root_path()."public".DS."vue".DS."src".DS."api".DS; $filename = $path.$classname.'.js'; if(file_exists($filename)){ @unlink($filename); } } /** * @title: 删除菜单及菜单请求 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-23 17:30:31 */ static public function deleteMenu(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $menuModel = new Menu; $requestModel = new Menurequest; $classname = self::getCamel($info->name); $dirname =self::parseDirname( $info->dirname); $component = "@/views/".$dirname.'/'.$classname;//根据vue页面文件判断是否已经有这个菜单了,当模型的存放路径dirname或数据表名name有变动时,原有的菜单需要在模型编辑时删除 $has = $menuModel->where('component',$component)->find(); if($has){ $requestModel::destroy(function($query)use($has){ $query->where('menu_id',$has->menu_id); }); $has->delete(); } } /** * @title: 删除选择器代码 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-07-25 17:02:36 */ static public function deleteSelector(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $name = $info->name; $dirname = self::parseDirname($info->dirname);// 文件保存位置 $classname = self::getCamel($info->name);// 获取类名 if(!empty($dirname)){ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS.'components'.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS.'components'.DS; } $filename = $path.'Selector.vue'; if(file_exists($filename)){ @unlink($filename); } } /** * @title: 创建选择器代码 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-27 11:23:32 */ static public function createSelector(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $name = self::getLine($info->name); $pk = ModelManage::pk($info->name); $dirname = self::parseDirname($info->dirname);// 文件保存位置 $classname = self::getCamel($info->name);// 获取类名 $apiJS = "@/api/$dirname/$classname"; if(!empty($dirname)){ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS.'components'.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS.'components'.DS; } if(!is_dir($path)){ mkdir($path,0777,true); } $filename = $path.'Selector.vue'; $content = << SELECTOR; FileServer::writeLine($filename,$content); return true; } }