request->get('keyword', '')); $page = max(1, (int) $this->request->get('page', 1)); $pageSize = min(50, max(10, (int) $this->request->get('page_size', 20))); $q = Db::name('mp_user')->alias('u'); if ($keyword !== '') { $kw = '%' . addcslashes($keyword, '%_\\') . '%'; $q->whereLike('u.nickname|u.phone|u.openid', $kw); } $paginator = $q->order('u.id', 'desc')->paginate([ 'list_rows' => $pageSize, 'page' => $page, ]); $list = []; foreach ($paginator->items() as $row) { $row = (array) $row; $uid = (int) $row['id']; $phone = trim((string) ($row['phone'] ?? '')); $list[] = [ 'id' => $uid, 'phone' => $phone, 'openid' => $this->maskOpenid((string) ($row['openid'] ?? '')), 'unionid' => $this->maskOpenid((string) ($row['unionid'] ?? '')), 'nickname' => $row['nickname'], 'avatar' => $row['avatar'], 'bio' => $row['bio'], 'gender' => (int) $row['gender'], 'status' => (int) ($row['status'] ?? 1), 'work_count' => Db::name('work')->where('user_id', $uid)->count(), 'create_time' => $row['create_time'], ]; } return json([ 'code' => 0, 'msg' => 'ok', 'data' => [ 'list' => $list, 'total' => $paginator->total(), 'page' => $paginator->currentPage(), 'page_size' => $paginator->listRows(), ], ]); } public function save() { $id = (int) $this->request->post('id', 0); $nickname = trim((string) $this->request->post('nickname', '')); $avatar = trim((string) $this->request->post('avatar', '')); $bio = trim((string) $this->request->post('bio', '')); $gender = (int) $this->request->post('gender', 0); $status = (int) $this->request->post('status', 1); if ($id <= 0) { return json(['code' => 400, 'msg' => 'id 必填', 'data' => []]); } if ($nickname === '') { return json(['code' => 400, 'msg' => '名字不能为空', 'data' => []]); } if (mb_strlen($nickname) > 32) { return json(['code' => 400, 'msg' => '名字过长', 'data' => []]); } if (mb_strlen($bio) > 200) { return json(['code' => 400, 'msg' => '简介过长', 'data' => []]); } if (mb_strlen($avatar) > 512) { return json(['code' => 400, 'msg' => '头像地址过长', 'data' => []]); } $data = [ 'update_time' => date('Y-m-d H:i:s'), 'status' => $status === 0 ? 0 : 1, 'gender' => $gender, 'nickname' => $nickname, 'bio' => $bio, 'avatar' => $avatar, ]; Db::name('mp_user')->where('id', $id)->update($data); return json(['code' => 0, 'msg' => '已保存', 'data' => []]); } /** * 删除用户及其作品、作品关联表;并清除该用户对他人的点赞记录 */ public function delete(int $id) { if ($id <= 0) { return json(['code' => 400, 'msg' => '参数错误', 'data' => []]); } if (!Db::name('mp_user')->find($id)) { return json(['code' => 404, 'msg' => '用户不存在', 'data' => []]); } Db::transaction(function () use ($id) { $workIds = Db::name('work')->where('user_id', $id)->column('id'); if (!empty($workIds)) { Db::name('work_like')->whereIn('work_id', $workIds)->delete(); Db::name('work_category')->whereIn('work_id', $workIds)->delete(); Db::name('work_image')->whereIn('work_id', $workIds)->delete(); Db::name('work')->where('user_id', $id)->delete(); } Db::name('work_like')->where('user_id', $id)->delete(); Db::name('mp_user')->where('id', $id)->delete(); }); return json(['code' => 0, 'msg' => '已删除', 'data' => []]); } protected function maskOpenid(string $s): string { if ($s === '') { return '—'; } $len = strlen($s); if ($len <= 8) { return substr($s, 0, 2) . '****'; } return substr($s, 0, 4) . '****' . substr($s, -4); } }