diff --git a/app/Http/Controllers/Staff/NoticeController.php b/app/Http/Controllers/Staff/NoticeController.php new file mode 100644 index 00000000..e2e6d5eb --- /dev/null +++ b/app/Http/Controllers/Staff/NoticeController.php @@ -0,0 +1,59 @@ + Notice::orderBy('id', 'DESC')->get() + ]); + } + + public function save(NoticeSave $request) + { + $data = $request->only([ + 'title', + 'content', + 'img_url' + ]); + if (!$request->input('id')) { + if (!Notice::create($data)) { + abort(500, '保存失败'); + } + } else { + try { + Notice::find($request->input('id'))->update($data); + } catch (\Exception $e) { + abort(500, '保存失败'); + } + } + return response([ + 'data' => true + ]); + } + + public function drop(Request $request) + { + if (empty($request->input('id'))) { + abort(500, '参数错误'); + } + $notice = Notice::find($request->input('id')); + if (!$notice) { + abort(500, '公告不存在'); + } + if (!$notice->delete()) { + abort(500, '删除失败'); + } + return response([ + 'data' => true + ]); + } +} diff --git a/app/Http/Controllers/Staff/PlanController.php b/app/Http/Controllers/Staff/PlanController.php new file mode 100755 index 00000000..7e48f1f1 --- /dev/null +++ b/app/Http/Controllers/Staff/PlanController.php @@ -0,0 +1,41 @@ +where('plan_id', '!=', NULL) + ->where(function ($query) { + $query->where('expired_at', '>=', time()) + ->orWhere('expired_at', NULL); + }) + ->groupBy("plan_id") + ->get(); + $plans = Plan::orderBy('sort', 'ASC')->get(); + foreach ($plans as $k => $v) { + $plans[$k]->count = 0; + foreach ($counts as $kk => $vv) { + if ($plans[$k]->id === $counts[$kk]->plan_id) $plans[$k]->count = $counts[$kk]->count; + } + } + return response([ + 'data' => $plans + ]); + } +} diff --git a/app/Http/Controllers/Staff/UserController.php b/app/Http/Controllers/Staff/UserController.php new file mode 100644 index 00000000..20ee14d4 --- /dev/null +++ b/app/Http/Controllers/Staff/UserController.php @@ -0,0 +1,102 @@ +input('id'))) { + abort(500, '参数错误'); + } + return response([ + 'data' => User::find($request->input('id')) + ]); + } + + public function update(UserUpdate $request) + { + $params = $request->validated(); + $user = User::find($request->input('id')); + if (!$user) { + abort(500, '用户不存在'); + } + if (User::where('email', $params['email'])->first() && $user->email !== $params['email']) { + abort(500, '邮箱已被使用'); + } + if (isset($params['password'])) { + $params['password'] = password_hash($params['password'], PASSWORD_DEFAULT); + $params['password_algo'] = NULL; + } else { + unset($params['password']); + } + if (isset($params['plan_id'])) { + $plan = Plan::find($params['plan_id']); + if (!$plan) { + abort(500, '订阅计划不存在'); + } + $params['group_id'] = $plan->group_id; + } + + try { + $user->update($params); + } catch (\Exception $e) { + abort(500, '保存失败'); + } + return response([ + 'data' => true + ]); + } + + public function sendMail(UserSendMail $request) + { + $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC'; + $sort = $request->input('sort') ? $request->input('sort') : 'created_at'; + $builder = User::orderBy($sort, $sortType); + $this->filter($request, $builder); + $users = $builder->get(); + foreach ($users as $user) { + SendEmailJob::dispatch([ + 'email' => $user->email, + 'subject' => $request->input('subject'), + 'template_name' => 'notify', + 'template_value' => [ + 'name' => config('v2board.app_name', 'V2Board'), + 'url' => config('v2board.app_url'), + 'content' => $request->input('content') + ] + ]); + } + + return response([ + 'data' => true + ]); + } + + public function ban(Request $request) + { + $sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC'; + $sort = $request->input('sort') ? $request->input('sort') : 'created_at'; + $builder = User::orderBy($sort, $sortType); + $this->filter($request, $builder); + try { + $builder->update([ + 'banned' => 1 + ]); + } catch (\Exception $e) { + abort(500, '处理失败'); + } + + return response([ + 'data' => true + ]); + } +} diff --git a/app/Http/Requests/Staff/UserUpdate.php b/app/Http/Requests/Staff/UserUpdate.php new file mode 100644 index 00000000..cc55039a --- /dev/null +++ b/app/Http/Requests/Staff/UserUpdate.php @@ -0,0 +1,56 @@ + 'required|email', + 'password' => 'nullable', + 'transfer_enable' => 'numeric', + 'expired_at' => 'nullable|integer', + 'banned' => 'required|in:0,1', + 'plan_id' => 'nullable|integer', + 'commission_rate' => 'nullable|integer|min:0|max:100', + 'discount' => 'nullable|integer|min:0|max:100', + 'u' => 'integer', + 'd' => 'integer', + 'balance' => 'integer', + 'commission_balance' => 'integer' + ]; + } + + public function messages() + { + return [ + 'email.required' => '邮箱不能为空', + 'email.email' => '邮箱格式不正确', + 'transfer_enable.numeric' => '流量格式不正确', + 'expired_at.integer' => '到期时间格式不正确', + 'banned.required' => '是否封禁不能为空', + 'banned.in' => '是否封禁格式不正确', + 'plan_id.integer' => '订阅计划格式不正确', + 'commission_rate.integer' => '推荐返利比例格式不正确', + 'commission_rate.nullable' => '推荐返利比例格式不正确', + 'commission_rate.min' => '推荐返利比例最小为0', + 'commission_rate.max' => '推荐返利比例最大为100', + 'discount.integer' => '专属折扣比例格式不正确', + 'discount.nullable' => '专属折扣比例格式不正确', + 'discount.min' => '专属折扣比例最小为0', + 'discount.max' => '专属折扣比例最大为100', + 'u.integer' => '上行流量格式不正确', + 'd.integer' => '下行流量格式不正确', + 'balance.integer' => '余额格式不正确', + 'commission_balance.integer' => '佣金格式不正确' + ]; + } +} diff --git a/app/Http/Routes/StaffRoute.php b/app/Http/Routes/StaffRoute.php index 09210780..e9157bc7 100644 --- a/app/Http/Routes/StaffRoute.php +++ b/app/Http/Routes/StaffRoute.php @@ -15,6 +15,18 @@ class StaffRoute $router->get ('/ticket/fetch', 'Staff\\TicketController@fetch'); $router->post('/ticket/reply', 'Staff\\TicketController@reply'); $router->post('/ticket/close', 'Staff\\TicketController@close'); + // User + $router->post('/user/update', 'Staff\\UserController@update'); + $router->get ('/user/getUserInfoById', 'Staff\\UserController@getUserInfoById'); + $router->post('/user/sendMail', 'Staff\\UserController@sendMail'); + $router->post('/user/ban', 'Staff\\UserController@ban'); + // Plan + $router->get ('/plan/fetch', 'Staff\\PlanController@fetch'); + // Notice + $router->get ('/notice/fetch', 'Admin\\NoticeController@fetch'); + $router->post('/notice/save', 'Admin\\NoticeController@save'); + $router->post('/notice/update', 'Admin\\NoticeController@update'); + $router->post('/notice/drop', 'Admin\\NoticeController@drop'); }); } }