ProjectController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace App\Http\Controllers\Api\mini;
  3. use App\Models\Notification;
  4. use App\Models\Project;
  5. use App\Models\ProjectUser;
  6. use App\Models\User;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Support\Facades\Auth;
  10. class ProjectController extends BaseController
  11. {
  12. protected $model;
  13. public function __construct()
  14. {
  15. $this->model = new Project();
  16. }
  17. public function addUser(Request $request)
  18. {
  19. $item = ProjectUser::where([
  20. 'project_id' => $request->input('project_id'),
  21. 'user_id' => $request->input('user_id'),
  22. // 'project_role_id' => $request->input('project_role_id')
  23. ])->first();
  24. if($item) return $this->error('该成员已添加');
  25. $res = ProjectUser::create([
  26. 'project_id' => $request->input('project_id'),
  27. 'user_id' => $request->input('user_id'),
  28. 'project_role_id' => $request->input('project_role_id')
  29. ]);
  30. Notification::sendAddUserInfo($res);
  31. if(!$res) return $this->error('添加失败');
  32. return $this->success('操作成功');
  33. }
  34. public function updateUser(Request $request)
  35. {
  36. $res = ProjectUser::where('id', '=', $request->input('id'))->update([
  37. 'project_id' => $request->input('project_id'),
  38. 'user_id' => $request->input('user_id'),
  39. 'project_role_id' => $request->input('project_role_id')
  40. ]);
  41. if(!$res) return $this->error('操作失败');
  42. return $this->success('操作成功');
  43. }
  44. public function create(Request $request)
  45. {
  46. if(empty($request->input('name'))) return $this->error(['msg' => '项目名称不能为空']);
  47. if($item = $this->model->where('name', $request->input('name'))->first()) return $this->error(['msg' => '项目名称已存在']);
  48. $user = Auth::guard('mini')->user();
  49. $res = $this->model->create([
  50. 'name' => $request->input('name'),
  51. 'active' => 3,
  52. 'user_id' => $user->id
  53. ]);
  54. if(!$res) return $this->error(['msg' => '创建失败']);
  55. $res->createDefaultUser();
  56. return $this->success(['msg' => '创建成功']);
  57. }
  58. public function get(Request $request)
  59. {
  60. $user = Auth::guard('mini')->user();
  61. $items = $user->projects()->where('active', 1);
  62. $tmp_items = collect(['name']);
  63. foreach($tmp_items as $tmp_item) {
  64. if($request->has($tmp_item) && !empty($request->input($tmp_item))) {
  65. $items = $items->where($tmp_item, 'like', '%' . $request->input($tmp_item) . '%');
  66. }
  67. }
  68. $items = $items->paginate();
  69. foreach($items as $item) {
  70. $item->date = substr($item->created_at, 0, 10);
  71. $item->manager = $item->getManager();
  72. }
  73. return $this->success(['msg' => '创建成功', 'data' => $items->items()]);
  74. }
  75. public function getTotal()
  76. {
  77. $user = Auth::guard('mini')->user();
  78. $total = ProjectUser::where('user_id', $user->id)->count();
  79. return $this->success(['msg' => '操作成功', 'data' => $total]);
  80. }
  81. public function getAll(Request $request)
  82. {
  83. if($request->input('type') == 'drop_menu') {
  84. $items = $this->model->select('name as text', 'id as value')->get();
  85. $items = $items->prepend(collect(['text' => '请选择项目', 'value' => '']));
  86. return $this->success(['data' => $items]);
  87. }
  88. $items = $this->model;
  89. if($request->input('user_id')) {
  90. $project_ids = ProjectUser::where('user_id', $request->input('user_id'))->pluck('project_id');
  91. if(count($project_ids) > 0) $items = $items->whereNotIn('id', $project_ids);
  92. }
  93. if($request->input('self')) {
  94. $user = Auth::guard('mini')->user();
  95. $project_ids = ProjectUser::where('user_id', $user->id)->pluck('project_id');
  96. $items = $items->whereIn('id', $project_ids);
  97. }
  98. $items = $items->get();
  99. return $this->success(['msg' => '创建成功', 'data' => $items]);
  100. }
  101. public function detail(Request $request)
  102. {
  103. $project = $this->model->find($request->input('id'));
  104. $project->role = $project->getUserProjectRole();
  105. return $this->success(['msg' => '操作成功', 'data' => $project]);
  106. }
  107. public function getUsers(Request $request)
  108. {
  109. // $list = ProjectUser::where('project_id', $request->input('id'))->join('users', 'project_users.user_id', '=', 'users.id')->join('project_roles', 'project_users.project_role_id', '=', 'project_roles.id')->select('project_users.*', 'users.avatar', 'users.name as user', 'project_roles.name as role_name');
  110. $list = ProjectUser::where('project_id', $request->input('id'))->with(['projectRole', 'user']);
  111. if($request->has('keyword')) {
  112. $keyword = '%' . $request->input('keyword') . '%';
  113. $list = $list->whereHas('user', function (Builder $query) use($keyword) {
  114. $query->where('phone', 'like', $keyword)->orWhere('name', 'like', $keyword);
  115. });
  116. }
  117. $list = $list->get();
  118. return $this->success(['msg' => '操作成功', 'data' => $list]);
  119. }
  120. public function deleteUser(Request $request)
  121. {
  122. $res = ProjectUser::where('id', '=', $request->input('id'))->delete();
  123. if($res) return $this->success(['msg' => '操作成功']);
  124. return $this->error();
  125. }
  126. }