AI代码生成工具
This commit is contained in:
@@ -148,7 +148,7 @@ class AdminService extends BaseService
|
||||
}
|
||||
$result = $this->model::where('id', $this->userId)->update([
|
||||
'password' => password_hash($newPassword, PASSWORD_DEFAULT),
|
||||
'last_reset_password_at' => get_time()
|
||||
'updated_at' => get_time(),
|
||||
]);
|
||||
if (!$result) {
|
||||
return $this->utils->errorThrow('重置密码失败');
|
||||
@@ -178,7 +178,7 @@ class AdminService extends BaseService
|
||||
}
|
||||
$result = $this->model::where('id', $id)->update([
|
||||
'password' => password_hash($newPassword, PASSWORD_DEFAULT),
|
||||
'last_reset_password_at' => get_time()
|
||||
'updated_at' => get_time(),
|
||||
]);
|
||||
if (!$result) {
|
||||
return $this->utils->errorThrow('重置密码失败');
|
||||
@@ -187,7 +187,7 @@ class AdminService extends BaseService
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* 获取用户信息(本人完整字段,供个人中心回填,不做手机号脱敏)
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
@@ -196,12 +196,121 @@ class AdminService extends BaseService
|
||||
$this->with = [
|
||||
'role'
|
||||
];
|
||||
$result = $this->getDetail($this->userId);
|
||||
$result = $this->getDetail($this->userId);
|
||||
$result['created_day_at'] = format_time(strtotime($result['created_at']), 'Y-m-d');
|
||||
$result['phone'] = desensitization($result['phone']);
|
||||
// 兼容前端 Profile 组件字段
|
||||
$result['realName'] = $result['nick_name'] ?? '';
|
||||
$result['username'] = $result['phone'] ?? '';
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 个人中心更新资料(昵称/头像/邮箱/备注/手机)
|
||||
* 为什么单独接口:不走管理员 CRUD,避免越权改角色等字段
|
||||
*/
|
||||
public function updateProfile(array $params): mixed
|
||||
{
|
||||
$allow = ['nick_name', 'avatar', 'email', 'desc', 'phone'];
|
||||
$data = [];
|
||||
foreach ($allow as $field) {
|
||||
if (array_key_exists($field, $params)) {
|
||||
$data[$field] = is_string($params[$field]) ? trim($params[$field]) : $params[$field];
|
||||
}
|
||||
}
|
||||
if (isset($data['nick_name']) && $data['nick_name'] === '') {
|
||||
$this->utils->errorThrow('昵称不能为空');
|
||||
}
|
||||
if (isset($data['phone']) && $data['phone'] !== '') {
|
||||
$exists = $this->model::where('phone', $data['phone'])
|
||||
->where('id', '<>', $this->userId)
|
||||
->where('deleted_at', 0)
|
||||
->exists();
|
||||
if ($exists) {
|
||||
$this->utils->errorThrow('手机号已被占用');
|
||||
}
|
||||
}
|
||||
if (isset($data['email']) && $data['email'] !== '') {
|
||||
$exists = $this->model::where('email', $data['email'])
|
||||
->where('id', '<>', $this->userId)
|
||||
->where('deleted_at', 0)
|
||||
->exists();
|
||||
if ($exists) {
|
||||
$this->utils->errorThrow('邮箱已被占用');
|
||||
}
|
||||
}
|
||||
if (empty($data)) {
|
||||
return $this->myInfo();
|
||||
}
|
||||
$data['updated_at'] = get_time();
|
||||
$this->model::where('id', $this->userId)->update($data);
|
||||
return $this->myInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前用户登录日志分页
|
||||
*/
|
||||
public function loginLogList(): array
|
||||
{
|
||||
$page = max(1, (int) request()->get('page', 1));
|
||||
$size = max(1, min(100, (int) request()->get('pageSize', request()->get('size', 10))));
|
||||
$query = \App\Models\LoginLogModel::where('user_id', $this->userId)->orderByDesc('id');
|
||||
$total = (clone $query)->count();
|
||||
$items = $query->forPage($page, $size)->get()->toArray();
|
||||
return [
|
||||
'page' => $page,
|
||||
'size' => $size,
|
||||
'page_count' => (int) ceil($total / max($size, 1)),
|
||||
'total' => $total,
|
||||
'items' => $items,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前用户操作日志分页(附带接口操作名)
|
||||
*/
|
||||
public function opLogList(): array
|
||||
{
|
||||
$page = max(1, (int) request()->get('page', 1));
|
||||
$size = max(1, min(100, (int) request()->get('pageSize', request()->get('size', 10))));
|
||||
$query = \App\Models\ApiOpLogModel::where('user_id', $this->userId)->orderByDesc('id');
|
||||
$total = (clone $query)->count();
|
||||
$items = $query->forPage($page, $size)->get()->toArray();
|
||||
$urls = array_values(array_unique(array_column($items, 'url')));
|
||||
$endpointMap = [];
|
||||
if (!empty($urls)) {
|
||||
$endpointMap = \App\Models\ApiEndpointModel::whereIn('url', $urls)
|
||||
->where('deleted_at', 0)
|
||||
->get(['url', 'name', 'description'])
|
||||
->keyBy('url')
|
||||
->toArray();
|
||||
}
|
||||
foreach ($items as &$item) {
|
||||
$ep = $endpointMap[$item['url'] ?? ''] ?? null;
|
||||
$item['name'] = $ep['name'] ?? '';
|
||||
$item['description'] = $ep['description'] ?? '';
|
||||
$item['method_text'] = match ((int) ($item['method'] ?? 0)) {
|
||||
1 => 'GET',
|
||||
2 => 'POST',
|
||||
default => 'ANY',
|
||||
};
|
||||
$item['type_text'] = ((int) ($item['type'] ?? 0) === 0) ? '成功' : '失败';
|
||||
if (is_string($item['param'] ?? null)) {
|
||||
$item['param'] = json_decode($item['param'], true) ?: [];
|
||||
}
|
||||
if (is_string($item['result'] ?? null)) {
|
||||
$item['result'] = json_decode($item['result'], true) ?: [];
|
||||
}
|
||||
}
|
||||
unset($item);
|
||||
return [
|
||||
'page' => $page,
|
||||
'size' => $size,
|
||||
'page_count' => (int) ceil($total / max($size, 1)),
|
||||
'total' => $total,
|
||||
'items' => $items,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单列表
|
||||
* @return array
|
||||
|
||||
Reference in New Issue
Block a user