Browse Source

用户接口上传

master
wanghongjun 1 month ago
parent
commit
f085ce737b
  1. 37
      app/Http/Controllers/Admin/BaseController.php
  2. 3
      app/Http/Controllers/Admin/IndexController.php
  3. 74
      app/Http/Controllers/Admin/RolesController.php
  4. 70
      app/Http/Controllers/Admin/UserController.php
  5. 7
      app/Models/AdminRoleUsers.php
  6. 9
      app/Models/AdminRoles.php
  7. 4
      app/Models/AdminUsers.php
  8. 115
      app/Services/AdminUsersService.php
  9. 19
      app/Services/ApiResponseService.php
  10. 22
      app/Services/OperationLogService.php
  11. 3
      database/migrations/2026_01_27_084640_create_admin_table.php
  12. 3
      resources/lang/en/admin.php
  13. 5
      resources/lang/zh-CN/admin.php
  14. 3
      resources/lang/zh-TW/admin.php

37
app/Http/Controllers/Admin/BaseController.php

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Exception;
class BaseController extends Controller
{
/**
* 验证ID
* @param int $id
* @param $model
* @return void
* @throws ValidationException|Exception
*/
protected function validateId(int $id, $model): void
{
$data = ['id' => $id];
$validator = Validator::make($data, [
'id' => 'required|numeric'
], [
'id.required' => __('validation.admin_role.id_empty'),
'id.numeric' => __('validation.admin_role.id_numeric')
]);
if ($validator->fails()) {
throw new ValidationException($validator);
}
if (!$model::query()->where('id', $id)->exists()) {
throw new Exception(__('exception.exception_handler.resource'));
};
}
}

3
app/Http/Controllers/Admin/IndexController.php

@ -2,7 +2,6 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Services\AdminMenuService;
use App\Services\ApiResponseService;
use Exception;
@ -10,7 +9,7 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class IndexController extends Controller
class IndexController extends BaseController
{
/**
* @var ApiResponseService

74
app/Http/Controllers/Admin/RolesController.php

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Admin;
use App\Exceptions\CustomException;
use App\Http\Controllers\Controller;
use App\Models\AdminRoleMenu;
use App\Models\AdminRoles;
use App\Services\AdminMenuService;
@ -15,7 +14,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class RolesController extends Controller
class RolesController extends BaseController
{
/**
* @var ApiResponseService
@ -134,10 +133,7 @@ class RolesController extends Controller
'remark.max' => __('validation.admin_role.r_max'),
];
if ($id) {
$data['id'] = $id;
$rules['id'] = 'required|numeric';
$messages['id.required'] = __('validation.admin_role.id_empty');
$messages['id.numeric'] = __('validation.admin_role.id_numeric');
$this->validateId($id, AdminRoles::class);
}
$validator = Validator::make($data, $rules, $messages);
@ -152,45 +148,16 @@ class RolesController extends Controller
*/
public function show(string $id): JsonResponse
{
try {
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
return $this->extracted($id);
}
/**
* Show the form for editing the specified resource.
* @param string $id
* @return JsonResponse
*/
public function edit(string $id): JsonResponse
{
try {
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
return $this->extracted($id);
}
/**
@ -204,9 +171,7 @@ class RolesController extends Controller
{
try {
$this->saveValidator($request->all(), $id);
$this->AdminRolesService->updateModel($request->all(), $id);
return $this->responseService->success(
null,
__('admin.update_succeeded')
@ -229,8 +194,8 @@ class RolesController extends Controller
public function destroy(string $id): JsonResponse
{
try {
$this->validateId($id, AdminRoles::class);
$this->AdminRolesService->deleteModel($id);
return $this->responseService->success(
null,
__('admin.delete_succeeded')
@ -243,4 +208,29 @@ class RolesController extends Controller
);
}
}
/**
* @param string $id
* @return JsonResponse
*/
protected function extracted(string $id): JsonResponse
{
try {
$this->validateId($id, AdminRoles::class);
$data = [
'menu_list' => (new AdminMenuService())->getMenuTreeCacheList(
AdminRoleMenu::getMenuIdArr($id)
),
'item' => AdminRoles::query()
->where('id', $id)
->get()
->toArray()
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
);
}
}
}

70
app/Http/Controllers/Admin/UserController.php

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Admin;
use App\Exceptions\CustomException;
use App\Http\Controllers\Controller;
use App\Models\AdminRoles;
use App\Models\AdminUsers;
use App\Services\ApiResponseService;
@ -14,7 +13,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UserController extends Controller
class UserController extends BaseController
{
/**
* @var ApiResponseService
@ -59,11 +58,7 @@ class UserController extends Controller
$total = $query->count();
$items = $query->latest()->forPage($page, $perPage)->get()->each(
function ($item) {
$item['status_str'] = $item['status'] ? __('admin.normal')
: __('admin.freeze');
$item['role_name'] = $item->roles->value('name');
unset($item['roles']);
return $item;
return $this->AdminUserModelService->optionItem($item);
}
);
@ -89,9 +84,8 @@ class UserController extends Controller
{
try {
$data = [
'roles_list' => [],
'permissions_list' => [],
'packing_list' => []
'roles_list' => AdminRoles::getRolesList(),
'packing_list' => $this->getPackingList()
];
return $this->responseService->success($data);
} catch (Exception $e) {
@ -101,6 +95,21 @@ class UserController extends Controller
}
}
protected function getPackingList(): array
{
return [
[
'id' => 1,
'name' => '停车场1'
],
[
'id' => 2,
'name' => '停车场1'
]
];
}
/**
* @param Request $request
* @return JsonResponse
@ -111,10 +120,11 @@ class UserController extends Controller
{
try {
$this->saveValidator($request->all());
$model = $this->AdminUserModelService->createModel($request->all());
return $this->responseService->success($model, '创建用户成功');
$this->AdminUserModelService->createModel($request->all());
return $this->responseService->success(
null,
__('admin.save_succeeded')
);
} catch (ValidationException|CustomException $e) {
throw $e;
} catch (Exception $e) {
@ -138,6 +148,7 @@ class UserController extends Controller
'role_id' => 'required|numeric',
'packing_id' => 'required|numeric',
'password' => 'required|between:12,30',
'email' => 'email'
];
$messages = [
'username.required' => __('validation.admin_user.l_a_empty'),
@ -147,12 +158,13 @@ class UserController extends Controller
'packing_id.required' => __('validation.admin_user.s_p_empty'),
'password.required' => __('validation.admin_user.p_empty'),
'password.between' => __('validation.admin_user.p_between'),
'email.email' => __('validation.admin_user.email'),
];
if ($id) {
$data['id'] = $id;
$rules['id'] = 'required|numeric';
$messages['id.required'] = __('validation.admin_user.id_empty');
$messages['id.numeric'] = __('validation.admin_user.id_numeric');
$this->validateId($id, AdminUsers::class);
$rules['status'] = 'required|in:0,1';
$messages['status.required'] = __('validation.admin_user.s_empty');
$messages['status.in'] = __('validation.admin_user.s_in');
}
$validator = Validator::make($data, $rules, $messages);
@ -167,8 +179,10 @@ class UserController extends Controller
public function show(string $id): JsonResponse
{
try {
$this->validateId($id, AdminUsers::class);
$model = AdminUsers::findOrFail($id);
return $this->responseService->success($model);
$item = $this->AdminUserModelService->optionItem($model);
return $this->responseService->success($item);
} catch (Exception $e) {
return $this->responseService->systemError(
__('exception.get_data_failed') . ':' . $e->getMessage()
@ -182,12 +196,12 @@ class UserController extends Controller
public function edit(string $id): JsonResponse
{
try {
$item = AdminUsers::findOrFail($id);
$item = $this->AdminUserModelService->optionItem($item, 1);
$data = [
'item' => AdminUsers::query()
->where('id', $id)
->get()
->toArray(),
'roles' => AdminRoles::getRolesList()
'item' => $item,
'role_list' => AdminRoles::getRolesList(),
'packing_list' => $this->getPackingList()
];
return $this->responseService->success($data);
} catch (Exception $e) {
@ -213,7 +227,7 @@ class UserController extends Controller
return $this->responseService->success(
null,
__('controller.rule.update_success')
__('admin.update_succeeded')
);
} catch (ValidationException|CustomException $e) {
throw $e;
@ -234,8 +248,10 @@ class UserController extends Controller
{
try {
$this->AdminUserModelService->deleteModel($id);
return $this->responseService->success(null, '删除数据模型成功');
return $this->responseService->success(
null,
__('admin.delete_succeeded')
);
} catch (CustomException $e) {
throw $e;
} catch (Exception $e) {

7
app/Models/AdminRoleUsers.php

@ -9,4 +9,11 @@ use Illuminate\Database\Eloquent\Model;
class AdminRoleUsers extends Model
{
use HasFactory;
protected $table = 'admin_role_users';
protected $fillable = [
'role_id',
'user_id'
];
}

9
app/Models/AdminRoles.php

@ -20,8 +20,7 @@ class AdminRoles extends Model
*/
protected $fillable
= [
'name',
'slug'
'name'
];
/**
@ -31,13 +30,15 @@ class AdminRoles extends Model
protected $hidden
= [
'updated_at',
'deleted_at'
'deleted_at',
];
public static function getRolesList(): array
{
$where = ['status' => 1];
return self::query()->where($where)->select()->get()->toArray();
$columns = ['id', 'name'];
return self::query()->where($where)->select($columns)->get()
->toArray();
}
public function adminUsers(): BelongsToMany

4
app/Models/AdminUsers.php

@ -22,6 +22,9 @@ class AdminUsers extends Model
'username',
'name',
'password',
'position',
'status',
'avatar'
];
/**
@ -32,6 +35,7 @@ class AdminUsers extends Model
= [
'password',
'remember_token',
'locale',
'deleted_at',
'updated_at'
];

115
app/Services/AdminUsersService.php

@ -5,6 +5,8 @@ namespace App\Services;
use App\Models\AdminRoleUsers;
use App\Models\AdminUsers;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
@ -26,38 +28,46 @@ final class AdminUsersService
}
/**
* @param array $data
* @return Builder|Model
* @throws Exception
*/
public function createModel(array $data): AdminUsers
public function createModel(array $data): Builder|Model
{
try {
DB::beginTransaction();
$model = AdminUsers::create([
if (AdminUsers::query()->where('username', $data['username'])
->exists()
) {
throw new Exception(__('service.admin_user.name_exists'));
}
$model = AdminUsers::query()->create([
'username' => $data['username'],
'password' => Hash::make($data['password']),
'name' => $data['name'],
'avatar' => '',
'email' => $data['email'],
'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => 1,
'created_at' => get_datetime()
]);
$user_id = $model->id;
// 角色id
$role_id = $data['role_id'];
$AdminRoleUsers = AdminRoleUsers::create([
'user_id' => $user_id,
'role_id' => $role_id
]);
// 职位id
$permission_id = $data['permission_id'];
//
$packing_id = $data['packing'];
$this->logService->logCreated($model, '创建用户');
// 角色id
$AdminRoleUsers = AdminRoleUsers::query()->create([
'role_id' => $data['role_id'],
'user_id' => $user_id,
'created_at' => get_datetime()
]);
$this->logService->logCreated($AdminRoleUsers, '创建用户关联角色');
// 停车场id
$packing_id = $data['packing_id'];
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
@ -76,37 +86,50 @@ final class AdminUsersService
try {
DB::beginTransaction();
if (AdminUsers::query()->where('username', $data['username'])->exists()) {
throw new Exception(__('service.admin_role.role_exists'));
$existsWhere = [
['username', '=', $data['username']],
['id', '<>', $id]
];
if (AdminUsers::query()->where($existsWhere)->exists()) {
throw new Exception(__('service.admin_user.name_exists'));
}
$model = AdminUsers::findOrFail($id);
$oldValue = $model->toArray();
$model->update([
'username' => $data['username'],
'password' => Hash::make($data['password']),
'name' => $data['name'],
'avatar' => '',
'email' => $data['email'],
'email' => $data['email'] ?? '',
'position' => $data['position'] ?? '',
'status' => $data['status'],
'created_at' => get_datetime()
]);
// 角色id
$role_id = $data['role_id'];
$DelAdminRoleUsers = AdminRoleUsers::where('user_id', $id)->select();
$DelAdminRoleUsers->delete();
$AddAdminRoleUsers = AdminRoleUsers::create([
'user_id' => $id,
'role_id' => $role_id
]);
// 职位id
$permission_id = $data['permission_id'];
$oldAdminRoleUsers = AdminRoleUsers::query()->where('user_id', $id)
->get()->toArray();
$updateData = [
'role_id' => $role_id,
'updated_at' => get_datetime()
];
AdminRoleUsers::query()->where('user_id', $id)->update($updateData);
$newAdminRoleUsers = $oldAdminRoleUsers;
$newAdminRoleUsers['role_id'] = $role_id;
$newAdminRoleUsers['updated_at'] = $updateData['updated_at'];
$this->logService->logUpdatedData(
new AdminRoleUsers(),
$oldAdminRoleUsers,
'更新用户关联角色',
$newAdminRoleUsers
);
//
$packing_id = $data['packing'];
$packing_id = $data['packing_id'];
$this->logService->logUpdated($model, $oldValue, '更新用户');
$this->logService->logCreated($model, '创建用户');
$this->logService->logDeleted($DelAdminRoleUsers, '删除用户关联角色');
$this->logService->logCreated($AddAdminRoleUsers, '创建用户关联角色');
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
@ -130,11 +153,16 @@ final class AdminUsersService
$model->delete();
$oldAdminRoleUser = AdminRoleUsers::where(['user_id' => $id])->select();
$this->logService->logDeleted($oldAdminRoleUser, '删除用户关联角色');
$oldAdminRoleUser->delete();
// 删除用户关联角色
$oldAdminRoleUser = AdminRoleUsers::query()->where(
['user_id' => $id]
)->select()->get()->toArray();
AdminRoleUsers::query()->where(['user_id' => $id])->delete();
$this->logService->logDeletedData(
new AdminRoleUsers(),
'删除用户关联角色',
$oldAdminRoleUser
);
DB::commit();
return true;
@ -143,4 +171,23 @@ final class AdminUsersService
throw $e;
}
}
/**
* @param $item
* @param int $is_edit
* @return mixed
*/
public function optionItem($item, int $is_edit = 0): mixed
{
$item['status_str'] = $item['status'] ? __('admin.normal')
: __('admin.freeze');
$item['role_name'] = $item->roles->value('name');
$item['packing_name'] = '';
if ($is_edit) {
$item['role_id'] = $item['roles'][0]['id'];
$item['packing_id'] = '';
}
unset($item['roles']);
return $item;
}
}

19
app/Services/ApiResponseService.php

@ -8,13 +8,12 @@ final class ApiResponseService
{
/**
* 成功响应
*
* @param mixed $data
* @param string $message
* @param int $statusCode
* @param mixed|null $data
* @param string $message
* @param int $statusCode
* @return JsonResponse
*/
public function success($data = null, string $message = '', int $statusCode = 200): JsonResponse
public function success(mixed $data = null, string $message = '', int $statusCode = 200): JsonResponse
{
return response()->json([
'error' => 0,
@ -22,7 +21,7 @@ final class ApiResponseService
'message' => $message,
], $statusCode);
}
/**
* 错误响应
*
@ -39,7 +38,7 @@ final class ApiResponseService
'message' => $message,
], $statusCode);
}
/**
* 系统错误响应
*
@ -51,7 +50,7 @@ final class ApiResponseService
{
return $this->error($message, 500, $statusCode);
}
/**
* 未授权响应
*
@ -63,7 +62,7 @@ final class ApiResponseService
{
return $this->error($message, 401, $statusCode);
}
/**
* 业务错误响应
*
@ -76,4 +75,4 @@ final class ApiResponseService
{
return $this->error($message, $errorCode, $statusCode);
}
}
}

22
app/Services/OperationLogService.php

@ -105,6 +105,26 @@ final class OperationLogService
);
}
/**
* 记录数据更新操作
*
* @param Model $model 关联模型
* @param array $oldValues 旧值
* @param string $description 操作描述
* @param array $data 数据
* @return AdminOperationLog
*/
public function logUpdatedData(Model $model, array $oldValues, string $description = '更新记录', array $data = []): AdminOperationLog
{
return $this->log(
'update',
$description,
$model,
$oldValues,
$data
);
}
/**
* 记录删除操作
*
@ -124,7 +144,7 @@ final class OperationLogService
}
/**
* 记录删除操作
* 记录数据删除操作
*
* @param Model $model 关联模型
* @param string $description 操作描述

3
database/migrations/2026_01_27_084640_create_admin_table.php

@ -17,10 +17,11 @@ return new class extends Migration
$table->string('password', 60)->comment('密码');
$table->string('name')->comment('姓名');
$table->string('avatar')->nullable()->comment('头像');
$table->string('email')->comment('电子邮箱');
$table->string('email')->nullable()->comment('电子邮箱');
$table->string('remember_token', 100)->nullable()->comment('记住令牌');
$table->tinyInteger('status')->default(1)->comment('状态 0冻结 1正常');
$table->string('locale', 10)->nullable()->comment('语言');
$table->string('position')->nullable()->comment('职位');
$table->softDeletes();
$table->timestamps();
$table->innoDb();

3
resources/lang/en/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => 'Save succeeded !',
'refresh_succeeded' => 'Refresh succeeded !',
'login_successful' => 'Login successful',
'logout_successful' => 'Logout successful',
'choose' => 'Choose',
'choose_file' => 'Select file',
'choose_image' => 'Select image',
@ -104,4 +105,6 @@ return [
'prev' => 'Prev',
'next' => 'Next',
'quick_create' => 'Quick create',
'freeze' => 'freeze',
'normal' => 'normal'
];

5
resources/lang/zh-CN/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => '保存成功 !',
'refresh_succeeded' => '刷新成功 !',
'login_successful' => '登录成功 !',
'logout_successful' => '登出成功 !',
'choose' => '选择',
'choose_file' => '选择文件',
'choose_image' => '选择图片',
@ -102,5 +103,7 @@ return [
'menu_titles' => [],
'prev' => '上一步',
'next' => '下一步',
'quick_create' => '快速创建'
'quick_create' => '快速创建',
'freeze' => '冻结',
'normal' => '正常'
];

3
resources/lang/zh-TW/admin.php

@ -54,6 +54,7 @@ return [
'save_succeeded' => '儲存成功!',
'refresh_succeeded' => '成功重新整理!',
'login_successful' => '成功登入!',
'logout_successful' => '成功登出!',
'choose' => '選擇',
'choose_file' => '選擇檔案',
'choose_image' => '選擇圖片',
@ -102,4 +103,6 @@ return [
'prev' => '上一步',
'next' => '下一步',
'quick_create' => '快速創建',
'freeze' => '凍結',
'normal' => '正常'
];

Loading…
Cancel
Save