|
@@ -3,39 +3,92 @@
|
|
|
namespace App\Service;
|
|
|
|
|
|
use App\Model\Employee;
|
|
|
+use App\Model\RoleMenu;
|
|
|
use App\Model\SysMenu;
|
|
|
+use App\Model\SysMenuButton;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class SysMenuService extends Service
|
|
|
{
|
|
|
public function edit($data){
|
|
|
list($status,$msg) = $this->menuRule($data,false);
|
|
|
- if(!$status) return [$status,$msg];
|
|
|
+ if(! $status) return [$status,$msg];
|
|
|
+
|
|
|
+ DB::beginTransaction();
|
|
|
+ try{
|
|
|
+ $model = SysMenu::where('id',$data['id'])->first();
|
|
|
+ $model->title = $data['title'];
|
|
|
+ $model->icon = $data['icon'] ?? '';
|
|
|
+ $model->uri = $data['uri'];
|
|
|
+ $model->parent_id = $data['parent_id'];
|
|
|
+ $model->sort = $data['sort'] ?? 0;
|
|
|
+ $model->save();
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ //按钮
|
|
|
+ SysMenuButton::where('del_time',0)->where('menu_id',$data['id'])
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ if(! empty($data['button'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['button'] as $key => $value){
|
|
|
+ $tmp = [];
|
|
|
+ $tmp['menu_id'] = $model->id;
|
|
|
+ $tmp['title'] = $value['title'];
|
|
|
+ $tmp['sort'] = $key;
|
|
|
+ $tmp['func'] = $value['func'];
|
|
|
+ $tmp['crt_time'] = $time;
|
|
|
+ $insert[] = $tmp;
|
|
|
+ }
|
|
|
+ SysMenuButton::insert($insert);
|
|
|
+ }
|
|
|
|
|
|
- $model = SysMenu::where('id',$data['id'])->first();
|
|
|
- $model->title = $data['title'];
|
|
|
- $model->icon = $data['icon'] ?? '';
|
|
|
- $model->uri = $data['uri'];
|
|
|
- $model->parent_id = $data['parent_id'];
|
|
|
- $model->sort = $data['sort'] ?? 0;
|
|
|
- $model->save();
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
|
|
|
return [true,'保存成功!'];
|
|
|
}
|
|
|
|
|
|
public function add($data,$user){
|
|
|
list($status,$msg) = $this->menuRule($data);
|
|
|
- if(!$status) return [$status,$msg];
|
|
|
-
|
|
|
- $model = new SysMenu();
|
|
|
- $sort = $model->where('parent_id',$data['parent_id'])->max('sort');
|
|
|
+ if(! $status) return [$status,$msg];
|
|
|
+
|
|
|
+ DB::beginTransaction();
|
|
|
+ try{
|
|
|
+ $model = new SysMenu();
|
|
|
+ $sort = $model->where('parent_id',$data['parent_id'])->max('sort');
|
|
|
+
|
|
|
+ $model->title = $data['title'];
|
|
|
+ $model->icon = $data['icon'] ?? '';
|
|
|
+ $model->uri = $data['uri'];
|
|
|
+ $model->parent_id = $data['parent_id'];
|
|
|
+ $model->sort = $sort ? $sort + 1 : 1;
|
|
|
+ $model->crt_id = $user['id'];
|
|
|
+ $model->save();
|
|
|
+
|
|
|
+ //按钮
|
|
|
+ if(! empty($data['button'])){
|
|
|
+ $time = time();
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['button'] as $key => $value){
|
|
|
+ $tmp = [];
|
|
|
+ $tmp['menu_id'] = $model->id;
|
|
|
+ $tmp['title'] = $value['title'];
|
|
|
+ $tmp['sort'] = $key;
|
|
|
+ $tmp['func'] = $value['func'] ?? '';
|
|
|
+ $tmp['crt_time'] = $time;
|
|
|
+ $insert[] = $tmp;
|
|
|
+ }
|
|
|
+ SysMenuButton::insert($insert);
|
|
|
+ }
|
|
|
|
|
|
- $model->title = $data['title'];
|
|
|
- $model->icon = $data['icon'] ?? '';
|
|
|
- $model->uri = $data['uri'];
|
|
|
- $model->parent_id = $data['parent_id'];
|
|
|
- $model->sort = $sort ? $sort + 1 : 1;
|
|
|
- $model->crt_id = $user['id'];
|
|
|
- $model->save();
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
|
|
|
return [true,'保存成功!'];
|
|
|
}
|
|
@@ -43,9 +96,25 @@ class SysMenuService extends Service
|
|
|
public function del($data){
|
|
|
if($this->isEmpty($data,'id')) return [false,'ID必须!'];
|
|
|
|
|
|
- SysMenu::where('id',$data['id'])->update([
|
|
|
- 'del_time' => time()
|
|
|
- ]);
|
|
|
+ $bool = RoleMenu::where('del_time',0)
|
|
|
+ ->where('menu_id',$data['id'])
|
|
|
+ ->exists();
|
|
|
+ if($bool) return [false,'菜单已绑定角色!'];
|
|
|
+
|
|
|
+ DB::beginTransaction();
|
|
|
+ try {
|
|
|
+ SysMenu::where('id',$data['id'])->update([
|
|
|
+ 'del_time' => time()
|
|
|
+ ]);
|
|
|
+ SysMenuButton::where('menu_id',$data['id'])->update([
|
|
|
+ 'del_time' => time()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
|
|
|
return [true,'删除成功'];
|
|
|
}
|
|
@@ -58,6 +127,7 @@ class SysMenuService extends Service
|
|
|
->select('title','icon','uri','parent_id','sort','crt_time','id')
|
|
|
->orderBy('sort','desc')
|
|
|
->get()->toArray();
|
|
|
+ $return = $this->fillMenuButton($return);
|
|
|
}else{
|
|
|
$list = SysMenu::where('del_time',0)
|
|
|
->where('state',1)
|
|
@@ -80,6 +150,7 @@ class SysMenuService extends Service
|
|
|
if($this->isEmpty($data,'title')) return [false,'名称不能为空!'];
|
|
|
if($this->isEmpty($data,'parent_id')) return [false,'父级不存在!'];
|
|
|
|
|
|
+ //菜单
|
|
|
if($is_check){
|
|
|
$bool = SysMenu::where('title',$data['title'])
|
|
|
->where('del_time',0)
|
|
@@ -93,6 +164,19 @@ class SysMenuService extends Service
|
|
|
}
|
|
|
if($bool) return [false,'菜单名称已经存在!'];
|
|
|
|
|
|
+ //按钮
|
|
|
+ if(! empty($data['button'])){
|
|
|
+ $title = array_column($data['button'],'title');
|
|
|
+ $title = array_map(function($val) {
|
|
|
+ return $val !== null ? $val : "";
|
|
|
+ }, $title);
|
|
|
+ $title_count = array_count_values($title);
|
|
|
+ foreach ($title as $value){
|
|
|
+ if(empty($value)) return [false,'按钮名称不能为空!'];
|
|
|
+ if($title_count[$value] > 1) return [false,'按钮名称不能重复'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return [true,''];
|
|
|
}
|
|
|
|
|
@@ -138,4 +222,20 @@ class SysMenuService extends Service
|
|
|
|
|
|
return [true,'移动成功'];
|
|
|
}
|
|
|
+
|
|
|
+ public function fillMenuButton($data){
|
|
|
+ $button = SysMenuButton::where('del_time',0)
|
|
|
+ ->select('id','title','sort','func','menu_id')
|
|
|
+ ->whereIn('menu_id',array_column($data,'id'))
|
|
|
+ ->get()->toArray();
|
|
|
+ $button_map = [];
|
|
|
+ foreach ($button as $value){
|
|
|
+ $button_map[$value['menu_id']][] = $value;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($data as $key => $value){
|
|
|
+ $data[$key]['button'] = $button_map[$value['id']] ?? [];
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
}
|