[ 'op' => '操作', 'id' => '用户ID', 'user_name' => '昵称', 'email' => '邮箱', 'money' => '余额', 'ref_by' => '邀请人', 'transfer_enable' => '流量限制', 'transfer_used' => '当期用量', 'class' => '等级', 'is_admin' => '是否管理员', 'is_banned' => '是否封禁', 'is_inactive' => '是否闲置', 'reg_date' => '注册时间', 'class_expire' => '等级过期', ], 'create_dialog' => [ [ 'id' => 'email', 'info' => '登录邮箱', 'type' => 'input', 'placeholder' => '', ], [ 'id' => 'password', 'info' => '登录密码', 'type' => 'input', 'placeholder' => '留空则随机生成', ], [ 'id' => 'ref_by', 'info' => '邀请人', 'type' => 'input', 'placeholder' => '邀请人的用户id,可留空', ], [ 'id' => 'balance', 'info' => '账户余额', 'type' => 'input', 'placeholder' => '-1为按默认设置,其他为指定值', ], ], ]; private static array $update_field = [ 'email', 'user_name', 'remark', 'pass', 'money', 'is_admin', 'ga_enable', 'is_banned', 'banned_reason', 'is_shadow_banned', 'transfer_enable', 'ref_by', 'class_expire', 'node_group', 'class', 'auto_reset_day', 'auto_reset_bandwidth', 'node_speedlimit', 'node_iplimit', 'port', 'passwd', 'method', 'forbidden_ip', 'forbidden_port', ]; /** * @throws Exception */ public function index(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { return $response->write( $this->view() ->assign('details', self::$details) ->fetch('admin/user/index.tpl') ); } /** * @throws Exception */ public function create(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { $email = $request->getParam('email'); $ref_by = $request->getParam('ref_by'); $password = $request->getParam('password'); $balance = $request->getParam('balance'); if ($email === '') { return $response->withJson([ 'ret' => 0, 'msg' => '邮箱不能为空', ]); } $exist = (new User())->where('email', $email)->first(); if ($exist !== null) { return $response->withJson([ 'ret' => 0, 'msg' => '邮箱已存在', ]); } if ($password === '') { $password = Tools::genRandomChar(16); } (new AuthController())->registerHelper($response, 'user', $email, $password, '', 0, '', $balance, 1); $user = (new User())->where('email', $email)->first(); if ($ref_by !== '') { $user->ref_by = (int) $ref_by; $user->save(); } return $response->withJson([ 'ret' => 1, 'msg' => '添加成功,用户邮箱:'.$email.' 密码:'.$password, ]); } /** * @throws Exception */ public function edit(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { $user = (new User())->find($args['id']); return $response->write( $this->view() ->assign('update_field', self::$update_field) ->assign('edit_user', $user) ->fetch('admin/user/edit.tpl') ); } public function update(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { $id = (int) $args['id']; $user = (new User())->find($id); if ($request->getParam('pass') !== '' && $request->getParam('pass') !== null) { $user->pass = Hash::passwordHash($request->getParam('pass')); $user->cleanLink(); } if ($request->getParam('money') !== '' && $request->getParam('money') !== null && (float) $request->getParam('money') !== $user->money ) { $money = (float) $request->getParam('money'); $diff = $money - $user->money; $remark = ($diff > 0 ? '管理员添加余额' : '管理员扣除余额'); (new UserMoneyLog())->add($id, (float) $user->money, $money, $diff, $remark); $user->money = $money; } $user->email = $request->getParam('email'); $user->user_name = $request->getParam('user_name'); $user->remark = $request->getParam('remark'); $user->is_admin = $request->getParam('is_admin') === 'true' ? 1 : 0; $user->ga_enable = $request->getParam('ga_enable') === 'true' ? 1 : 0; $user->is_banned = $request->getParam('is_banned') === 'true' ? 1 : 0; $user->banned_reason = $request->getParam('banned_reason'); $user->is_shadow_banned = $request->getParam('is_shadow_banned') === 'true' ? 1 : 0; $user->transfer_enable = Tools::autoBytesR($request->getParam('transfer_enable')); $user->ref_by = $request->getParam('ref_by'); $user->class_expire = $request->getParam('class_expire'); $user->node_group = $request->getParam('node_group'); $user->class = $request->getParam('class'); $user->auto_reset_day = $request->getParam('auto_reset_day'); $user->auto_reset_bandwidth = $request->getParam('auto_reset_bandwidth'); $user->node_speedlimit = $request->getParam('node_speedlimit'); $user->node_iplimit = $request->getParam('node_iplimit'); $user->port = $request->getParam('port'); $user->passwd = $request->getParam('passwd'); $user->method = $request->getParam('method'); $user->forbidden_ip = str_replace(PHP_EOL, ',', $request->getParam('forbidden_ip')); $user->forbidden_port = str_replace(PHP_EOL, ',', $request->getParam('forbidden_port')); if (! $user->save()) { return $response->withJson([ 'ret' => 0, 'msg' => '修改失败', ]); } return $response->withJson([ 'ret' => 1, 'msg' => '修改成功', ]); } public function delete(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { $id = $args['id']; $user = (new User())->find((int) $id); if (! $user->kill()) { return $response->withJson([ 'ret' => 0, 'msg' => '删除失败', ]); } return $response->withJson([ 'ret' => 1, 'msg' => '删除成功', ]); } public function ajax(ServerRequest $request, Response $response, array $args): Response|ResponseInterface { $users = (new User())->orderBy('id', 'desc')->get(); foreach ($users as $user) { $user->op = ' 编辑'; $user->transfer_enable = $user->enableTraffic(); $user->transfer_used = $user->usedTraffic(); $user->is_admin = $user->is_admin === 1 ? '是' : '否'; $user->is_banned = $user->is_banned === 1 ? '是' : '否'; $user->is_inactive = $user->is_inactive === 1 ? '是' : '否'; } return $response->withJson([ 'users' => $users, ]); } }