Commit 7f421889 authored by 朱招明's avatar 朱招明

部门、公告接口

parent bef6ec3a
...@@ -21,6 +21,7 @@ return new class extends Migration ...@@ -21,6 +21,7 @@ return new class extends Migration
$table->string('name'); $table->string('name');
$table->string('avatar')->nullable(); $table->string('avatar')->nullable();
$table->string('salt'); $table->string('salt');
$table->integer('role_id');
$table->timestamps(); $table->timestamps();
}); });
...@@ -28,6 +29,7 @@ return new class extends Migration ...@@ -28,6 +29,7 @@ return new class extends Migration
$table->increments('id'); $table->increments('id');
$table->string('name', 50); $table->string('name', 50);
$table->string('slug', 50); $table->string('slug', 50);
$table->json('menus')->nullable()->comment('权限');
$table->timestamps(); $table->timestamps();
}); });
...@@ -42,20 +44,6 @@ return new class extends Migration ...@@ -42,20 +44,6 @@ return new class extends Migration
$table->timestamps(); $table->timestamps();
}); });
Schema::create('admin_role_users', function (Blueprint $table) {
$table->integer('role_id');
$table->integer('user_id');
$table->index(['role_id', 'user_id']);
$table->timestamps();
});
Schema::create('admin_role_menus', function (Blueprint $table) {
$table->integer('role_id');
$table->integer('menu_id');
$table->index(['role_id', 'menu_id']);
$table->timestamps();
});
Schema::create('admin_operation_logs', function (Blueprint $table) { Schema::create('admin_operation_logs', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->integer('user_id'); $table->integer('user_id');
...@@ -74,16 +62,13 @@ return new class extends Migration ...@@ -74,16 +62,13 @@ return new class extends Migration
"name" => "admin", "name" => "admin",
"salt" => "4IpZw+?%MD1c", "salt" => "4IpZw+?%MD1c",
"password" => password_hash(md5('1234564IpZw+?%MD1c'), PASSWORD_DEFAULT), "password" => password_hash(md5('1234564IpZw+?%MD1c'), PASSWORD_DEFAULT),
"role_id" => '1',
]); ]);
DB::table("admin_roles")->insert([ DB::table("admin_roles")->insert([
"id" => "1", "id" => "1",
"name" => "超级管理员", "name" => "超级管理员",
"slug" => "超级管理员", "slug" => "超级管理员",
]); ]);
DB::table("admin_role_users")->insert([
"role_id" => "1",
"user_id" => "1",
]);
}); });
} }
......
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('departments', function (Blueprint $table) {
$table->comment('部门表');
$table->id();
$table->string('name')->comment('名称');
$table->string('desc')->comment('描述');
$table->integer('parent_id')->default(0)->comment('上级部门ID');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('departments');
}
};
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('admin_users', function (Blueprint $table) {
$table->string('phone')->nullable()->comment('手机号码');
$table->dateTime('entry_time')->nullable()->comment('入职时间');
$table->integer('department_id')->nullable()->comment('部门ID');
$table->json('skill')->nullable()->comment('技能');
$table->string('job_name')->nullable()->nullable()->comment('职位');
$table->string('job_number')->nullable()->comment('工号');
$table->integer('contract_id')->nullable()->comment('合同ID');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
};
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('announcements', function (Blueprint $table) {
$table->comment('公告表');
$table->id();
$table->string('title')->comment('标题');
$table->string('content')->comment('内容');
$table->boolean('show')->default(1)->comment('是否显示');
$table->boolean('top')->default(0)->comment('是否置顶');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('announcements');
}
};
...@@ -16,12 +16,17 @@ use Modules\Admin\Http\Utils\Helper; ...@@ -16,12 +16,17 @@ use Modules\Admin\Http\Utils\Helper;
class AdminRole extends Model class AdminRole extends Model
{ {
protected $fillable = [ protected $fillable = [
'name','slug', 'name','slug','menus',
]; ];
protected $casts = [
'menus' => 'json',
];
public static function boot() public static function boot()
{ {
parent::boot(); parent::boot();
} }
public function menu(): BelongsToMany public function menu(): BelongsToMany
{ {
return $this->belongsToMany(AdminMenu::class,'admin_role_menus','role_id','menu_id'); return $this->belongsToMany(AdminMenu::class,'admin_role_menus','role_id','menu_id');
......
...@@ -16,9 +16,13 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; ...@@ -16,9 +16,13 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class AdminUser extends Authenticatable implements JWTSubject class AdminUser extends Authenticatable implements JWTSubject
{ {
protected $fillable = [ protected $fillable = [
'username','password', 'name', 'avatar', 'salt' 'username','password', 'name', 'avatar', 'salt', 'role_id',
'phone','entry_time','department_id','skill','job_name','job_number','contract_id',
]; ];
protected $casts = [
'skill' => 'json',
];
/** /**
* Get the identifier that will be stored in the subject claim of the JWT. * Get the identifier that will be stored in the subject claim of the JWT.
* *
...@@ -59,8 +63,11 @@ class AdminUser extends Authenticatable implements JWTSubject ...@@ -59,8 +63,11 @@ class AdminUser extends Authenticatable implements JWTSubject
]; ];
} }
public function roles(): BelongsToMany public function role(){
{ return $this->belongsTo(AdminRole::class);
return $this->belongsToMany(AdminRole::class,'admin_role_users','user_id','role_id'); }
public function department(){
return $this->belongsTo(Department::class);
} }
} }
\ No newline at end of file
<?php
/**
* @desc
* @author [ZZM]
* @since 2023/10/31
* @copyright
*/
namespace Modules\Admin\Entities;
use Illuminate\Database\Eloquent\Model;
class Announcement extends Model
{
protected $fillable = [
'title','content'
];
public function scopeCanShow($query)
{
$query->where('show', 1);
}
}
\ No newline at end of file
<?php
/**
* @desc
* @author [ZZM]
* @since 2023/10/31
* @copyright
*/
namespace Modules\Admin\Entities;
use Illuminate\Database\Eloquent\Model;
class Department extends Model
{
protected $fillable = [
'name','desc'
];
}
\ No newline at end of file
<?php
/**
* @desc
* @author [ZZM]
* @since 2023/10/31
* @copyright
*/
namespace Modules\Admin\Http\Controllers;
use Modules\Admin\Entities\Announcement;
use Modules\Admin\Http\Requests\AnnouncementRequest;
use Modules\Admin\Http\Transformers\AnnouncementTransformer;
class AnnouncementController extends BaseController
{
/**
* @OA\Get(
* tags={"公告"},
* summary="列表",
* path="api/announcement/list",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="200",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="data",
* type="array",
* @OA\Items(ref="#/components/schemas/Announcement"),
* description="列表"
* ),
* )
* )
* )
* )
*
*/
public function list(){
$list = Announcement::canShow()->paginate(request('per_page', null));
return $this->response->paginator($list,new AnnouncementTransformer());
}
/**
* @OA\Post(
* tags={"公告"},
* summary="添加",
* path="api/announcement/add",
* security={
* {"jwt_auth": {}}
* },
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/x-www-form-urlencoded",
* @OA\Schema(
* type="object",
* required={"title","content"},
* @OA\Property(
* property="title",
* type="string",
* description="标题",
* ),
* @OA\Property(
* property="content",
* type="string",
* description="内容",
* ),
* )
* )
* ),
* @OA\Response(
* response="201",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(property="data", type="object", ref="#/components/schemas/Announcement")
* )
* )
* )
* )
*
*/
public function add(AnnouncementRequest $request){
$params = array_filter($request->all(['title','content','show','top']));
$announcement = Announcement::create($params);
return $this->response->item($announcement,new AnnouncementTransformer());
}
/**
* @OA\Get(
* tags={"公告"},
* summary="详情",
* path="api/announcement/{id}/detail",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="200",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(property="data", type="object", ref="#/components/schemas/Announcement")
* )
* )
* )
* )
*
*/
public function detail($id){
$announcement = Announcement::where('id',$id)->first();
if(!$announcement){
abort(500,'公告不存在');
}
return $this->response->item($announcement,new AnnouncementTransformer());
}
/**
* @OA\Put(
* tags={"公告"},
* summary="编辑",
* path="api/announcement/{id}/edit",
* security={
* {"jwt_auth": {}}
* },
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/x-www-form-urlencoded",
* @OA\Schema(
* type="object",
* required={"title","content"},
* @OA\Property(
* property="title",
* type="string",
* description="标题",
* ),
* @OA\Property(
* property="content",
* type="string",
* description="内容",
* ),
* )
* )
* ),
* @OA\Response(
* response="204",
* description="",
* )
* )
*
*/
public function edit(AnnouncementRequest $request,$id){
$params = array_filter($request->all(['title','content','show','top']));
$announcement = Announcement::where('id',$id)->first();
if(!$announcement){
abort(500,'公告不存在');
}
$announcement->update($params);
return $this->response->noContent()->statusCode(204);
}
/**
* @OA\Delete(
* tags={"公告"},
* summary="删除",
* path="api/announcement/{id}/delete",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="204",
* description="",
* )
* )
*
*/
public function delete($id){
$announcement = Announcement::where('id',$id)->first();
if($announcement){
$announcement->delete();
}
return $this->response->noContent()->statusCode(204);
}
}
\ No newline at end of file
...@@ -158,7 +158,7 @@ class AuthController extends BaseController ...@@ -158,7 +158,7 @@ class AuthController extends BaseController
public function apiConfig(Request $request) public function apiConfig(Request $request)
{ {
$user = $this->user; $user = $this->user;
$role = $user->roles()->first(); $role = $user->role;
$data = [ $data = [
'user_info' => Helper::mapAttr($user,['id', 'username', 'avatar', 'avatar_full_url', 'name', 'created_at', 'updated_at']), 'user_info' => Helper::mapAttr($user,['id', 'username', 'avatar', 'avatar_full_url', 'name', 'created_at', 'updated_at']),
......
<?php
/**
* @desc
* @author [ZZM]
* @since 2023/10/31
* @copyright
*/
namespace Modules\Admin\Http\Controllers;
use Modules\Admin\Entities\Department;
use Modules\Admin\Http\Requests\DepartmentRequest;
use Modules\Admin\Http\Transformers\DepartmentTransformer;
use Modules\Admin\Http\Utils\Helper;
class DepartmentController extends BaseController
{
/**
* @OA\Get(
* tags={"部门"},
* summary="列表",
* path="api/department/list",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="200",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(
* property="data",
* type="array",
* @OA\Items(ref="#/components/schemas/Department"),
* description="列表"
* ),
* )
* )
* )
* )
*
*/
public function list(){
$list = Department::paginate(request('per_page', null));
return $this->response->paginator($list,new DepartmentTransformer());
}
/**
* @OA\Post(
* tags={"部门"},
* summary="添加",
* path="api/department/add",
* security={
* {"jwt_auth": {}}
* },
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/x-www-form-urlencoded",
* @OA\Schema(
* type="object",
* required={"name","desc"},
* @OA\Property(
* property="name",
* type="string",
* description="名称",
* ),
* @OA\Property(
* property="desc",
* type="string",
* description="说明",
* ),
* )
* )
* ),
* @OA\Response(
* response="201",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(property="data", type="object", ref="#/components/schemas/Department")
* )
* )
* )
* )
*
*/
public function add(DepartmentRequest $request){
$params = $request->all(['name','desc']);
$department = Department::create($params);
return $this->response->item($department,new DepartmentTransformer());
}
/**
* @OA\Get(
* tags={"部门"},
* summary="详情",
* path="api/department/{id}/detail",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="200",
* description="",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* type="object",
* @OA\Property(property="data", type="object", ref="#/components/schemas/Department")
* )
* )
* )
* )
*
*/
public function detail($id){
$department = Department::where('id',$id)->first();
if(!$department){
abort(500,'部门不存在');
}
return $this->response->item($department,new DepartmentTransformer());
}
/**
* @OA\Put(
* tags={"部门"},
* summary="编辑",
* path="api/department/{id}/edit",
* security={
* {"jwt_auth": {}}
* },
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/x-www-form-urlencoded",
* @OA\Schema(
* type="object",
* required={"name","desc"},
* @OA\Property(
* property="name",
* type="string",
* description="名称",
* ),
* @OA\Property(
* property="desc",
* type="string",
* description="说明",
* ),
* )
* )
* ),
* @OA\Response(
* response="204",
* description="",
* )
* )
*
*/
public function edit(DepartmentRequest $request,$id){
$params = $request->all(['name','desc']);
$department = Department::where('id',$id)->first();
if(!$department){
abort(500,'部门不存在');
}
$department->update($params);
return $this->response->noContent()->statusCode(204);
}
/**
* @OA\Delete(
* tags={"部门"},
* summary="删除",
* path="api/department/{id}/delete",
* security={
* {"jwt_auth": {}}
* },
* @OA\Response(
* response="204",
* description="",
* )
* )
*
*/
public function delete($id){
$department = Department::where('id',$id)->first();
if($department){
$department->delete();
}
return $this->response->noContent()->statusCode(204);
}
}
\ No newline at end of file
...@@ -87,7 +87,6 @@ class RoleController extends BaseController ...@@ -87,7 +87,6 @@ class RoleController extends BaseController
public function add(RoleRequest $request){ public function add(RoleRequest $request){
$params = $request->all(['name','slug','menus']); $params = $request->all(['name','slug','menus']);
logger($params);
if(!is_array($params['menus'])){ if(!is_array($params['menus'])){
abort(422,'菜单格式错误'); abort(422,'菜单格式错误');
} }
...@@ -97,23 +96,9 @@ class RoleController extends BaseController ...@@ -97,23 +96,9 @@ class RoleController extends BaseController
abort(500,$error); abort(500,$error);
} }
$role = DB::transaction(function () use ($params){ sort($params['menus']);
$role = AdminRole::create($params);
$insert = [];
foreach ($params['menus'] as $item){
$insert[] = [
'role_id' => $role->id,
'menu_id' => (int)$item,
];
}
if($insert){
AdminRoleMenu::insert($insert);
}
return $role;
});
$role = AdminRole::create($params);
return $this->response->item($role,new AdminRoleTransformer()); return $this->response->item($role,new AdminRoleTransformer());
...@@ -203,28 +188,10 @@ class RoleController extends BaseController ...@@ -203,28 +188,10 @@ class RoleController extends BaseController
abort(500,$error); abort(500,$error);
} }
DB::transaction(function () use ($role,$params,$role_id){ sort($params['menus']);
$role->name = $params['name'];
$role->slug = $params['slug'];
$role->save();
AdminRoleMenu::where('role_id',$role_id)->delete();
$insert = [];
foreach ($params['menus'] as $item){
$insert[] = [
'role_id' => $role_id,
'menu_id' => (int)$item,
];
}
if($insert){
AdminRoleMenu::insert($insert);
}
Helper::getRoleMenu($role,true); $role->update($params);
Helper::getRoleApi($role,true);
});
return $this->response->noContent()->statusCode(204); return $this->response->noContent()->statusCode(204);
} }
...@@ -255,10 +222,7 @@ class RoleController extends BaseController ...@@ -255,10 +222,7 @@ class RoleController extends BaseController
abort("此角色还有关联的用户,无法删除"); abort("此角色还有关联的用户,无法删除");
} }
DB::transaction(function () use ($role){ $role->delete();
$role->delete();
AdminRoleMenu::where('role_id',$role->id)->delete();
});
} }
return $this->response->noContent()->statusCode(204); return $this->response->noContent()->statusCode(204);
......
...@@ -13,6 +13,7 @@ use Illuminate\Support\Facades\DB; ...@@ -13,6 +13,7 @@ use Illuminate\Support\Facades\DB;
use Modules\Admin\Entities\AdminRoleUser; use Modules\Admin\Entities\AdminRoleUser;
use Modules\Admin\Entities\AdminUser; use Modules\Admin\Entities\AdminUser;
use Modules\Admin\Http\Requests\UserRequest; use Modules\Admin\Http\Requests\UserRequest;
use Modules\Admin\Http\Service\UserService;
use Modules\Admin\Http\Transformers\AdminUserTransformer; use Modules\Admin\Http\Transformers\AdminUserTransformer;
use Modules\Admin\Http\Utils\Helper; use Modules\Admin\Http\Utils\Helper;
...@@ -46,8 +47,8 @@ class UserController extends BaseController ...@@ -46,8 +47,8 @@ class UserController extends BaseController
* *
*/ */
public function list(){ public function list(){
$list = AdminUser::all(); $list = AdminUser::paginate(request('per_page', null));
return $this->response->collection($list,new AdminUserTransformer()); return $this->response->paginator($list,new AdminUserTransformer());
} }
/** /**
...@@ -101,7 +102,10 @@ class UserController extends BaseController ...@@ -101,7 +102,10 @@ class UserController extends BaseController
* *
*/ */
public function add(UserRequest $request){ public function add(UserRequest $request){
$params = $request->all(['username','password','name','avatar','role_id']); $params = $request->all([
'username','password','name','avatar','role_id',
'phone','entry_time','department_id','skill','job_name','contract_id',
]);
#默认密码 #默认密码
if(empty($params['password'])){ if(empty($params['password'])){
...@@ -111,16 +115,10 @@ class UserController extends BaseController ...@@ -111,16 +115,10 @@ class UserController extends BaseController
$params['salt'] = Helper::generateRandomString(); $params['salt'] = Helper::generateRandomString();
$params['password'] = password_hash(md5($params['password'].$params['salt']), PASSWORD_DEFAULT); $params['password'] = password_hash(md5($params['password'].$params['salt']), PASSWORD_DEFAULT);
$user = DB::transaction(function () use ($params){ #工号生成
$role_id = $params['role_id']; $params['job_number'] = UserService::createJobNumber();
unset($params['role_id']);
$user = AdminUser::create($params); $user = AdminUser::create($params);
AdminRoleUser::create(['role_id'=>$role_id,'user_id'=>$user->id]);
return $user;
});
return $this->response->item($user,new AdminUserTransformer(true)); return $this->response->item($user,new AdminUserTransformer(true));
} }
...@@ -207,7 +205,10 @@ class UserController extends BaseController ...@@ -207,7 +205,10 @@ class UserController extends BaseController
* *
*/ */
public function edit(UserRequest $request,$id){ public function edit(UserRequest $request,$id){
$params = $request->all(['username','password','name','avatar','role_id']); $params = $request->all([
'username','password','name','avatar','role_id',
'phone','entry_time','department_id','skill','job_name','contract_id',
]);
$user = AdminUser::where('id',$id)->first(); $user = AdminUser::where('id',$id)->first();
if(!$user){ if(!$user){
...@@ -224,18 +225,7 @@ class UserController extends BaseController ...@@ -224,18 +225,7 @@ class UserController extends BaseController
unset($params['password']); unset($params['password']);
} }
DB::transaction(function () use ($user,$params){ $user->update($params);
$role_id = $params['role_id'];
unset($params['role_id']);
$user->update($params);
if($role_id && !AdminRoleUser::where(['user_id'=>$user->id,'role_id'=>$role_id])->first()){
AdminRoleUser::where('user_id',$user->id)->delete();
AdminRoleUser::create(['role_id'=>$role_id,'user_id'=>$user->id]);
}
});
return $this->response->noContent()->statusCode(204); return $this->response->noContent()->statusCode(204);
} }
...@@ -258,11 +248,7 @@ class UserController extends BaseController ...@@ -258,11 +248,7 @@ class UserController extends BaseController
public function delete($id){ public function delete($id){
$user = AdminUser::where('id',$id)->first(); $user = AdminUser::where('id',$id)->first();
if($user){ if($user){
DB::transaction(function () use ($user){ $user->delete();
$user->delete();
AdminRoleUser::where('user_id',$user->id)->delete();
});
} }
return $this->response->noContent()->statusCode(204); return $this->response->noContent()->statusCode(204);
......
...@@ -20,7 +20,7 @@ class Permission ...@@ -20,7 +20,7 @@ class Permission
{ {
$user = auth()->user(); $user = auth()->user();
#角色 #角色
$role = $user->roles()->first(); $role = $user->role;
$role_apis = array_filter(array_column(Helper::getRoleApi($role),'api')); $role_apis = array_filter(array_column(Helper::getRoleApi($role),'api'));
$apis = array_filter(array_column(Helper::getAllApi(),'api')); $apis = array_filter(array_column(Helper::getAllApi(),'api'));
......
<?php
namespace Modules\Admin\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Admin\Entities\AdminUser;
class AnnouncementRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function postRules()
{
return [
'title' => 'bail|required',
'content' => 'bail|required',
];
}
public function putRules()
{
return [
'title' => 'bail|required',
'content' => 'bail|required',
];
}
public function messages()
{
return [
'title.required' => '标题不能为空',
'content.required' => '内容不能为空',
];
}
}
<?php
namespace Modules\Admin\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Admin\Entities\AdminUser;
class DepartmentRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function postRules()
{
return [
'desc' => 'bail|required',
'name' => 'bail|required',
];
}
public function putRules()
{
return [
'desc' => 'bail|required',
'name' => 'bail|required',
];
}
public function messages()
{
return [
'name.required' => '部门名称不能为空',
'desc.required' => '部门说明不能为空',
];
}
}
...@@ -18,6 +18,7 @@ class UserRequest extends BaseRequest ...@@ -18,6 +18,7 @@ class UserRequest extends BaseRequest
'username' => 'bail|required|unique:admin_users', 'username' => 'bail|required|unique:admin_users',
'name' => 'bail|required', 'name' => 'bail|required',
'role_id' => 'bail|required|exists:admin_roles,id', 'role_id' => 'bail|required|exists:admin_roles,id',
'department_id' => 'bail|exists:departments,id',
]; ];
} }
...@@ -27,6 +28,7 @@ class UserRequest extends BaseRequest ...@@ -27,6 +28,7 @@ class UserRequest extends BaseRequest
'username' => ['bail','required'], 'username' => ['bail','required'],
'name' => 'bail|required', 'name' => 'bail|required',
'role_id' => 'bail|required|exists:admin_roles,id', 'role_id' => 'bail|required|exists:admin_roles,id',
'department_id' => 'bail|exists:departments,id',
]; ];
} }
...@@ -38,6 +40,7 @@ class UserRequest extends BaseRequest ...@@ -38,6 +40,7 @@ class UserRequest extends BaseRequest
'name.required' => '账号名称不能为空', 'name.required' => '账号名称不能为空',
'role_id.required' => '角色必须', 'role_id.required' => '角色必须',
'role_id.exists' => '角色不存在', 'role_id.exists' => '角色不存在',
'department_id.exists' => '部门不存在',
]; ];
} }
} }
<?php
/**
* @desc
* @author [ZZM]
* @since 2023/10/31
* @copyright
*/
namespace Modules\Admin\Http\Service;
use Modules\Admin\Entities\AdminUser;
class UserService extends BaseService
{
/**
* 获取员工工号
* @desc
* @return string
* @since 2023/10/31
* @modify
* @author [ZZM]
*/
static function createJobNumber()
{
$user = AdminUser::orderBy('id', 'desc')->first();
$job_number = $user->job_number;
return 'SMG' . sprintf("%08d", self::findNum($job_number) + 1);
}
static function findNum($str = '')
{
$str = trim($str);
if (empty($str))
{
return 0;
}
$result = '';
for ($i = 0; $i < strlen($str); $i++)
{
if (is_numeric($str[ $i ]))
{
$result .= $str[ $i ];
}
}
return (int)$result;
}
}
\ No newline at end of file
...@@ -36,14 +36,9 @@ class AdminRoleTransformer extends BaseTransformer ...@@ -36,14 +36,9 @@ class AdminRoleTransformer extends BaseTransformer
*/ */
public function transform(AdminRole $role) public function transform(AdminRole $role)
{ {
$return = ['id','name','slug','created_at']; $return = ['id','name','slug','menus','created_at'];
$return = Helper::mapAttr($role,$return); $return = Helper::mapAttr($role,$return);
$return['is_admin'] = Helper::isAdministrator($return['id']); $return['is_admin'] = Helper::isAdministrator($return['id']);
if($this->show_menu){
$return['menus'] = array_column($role->menu->toArray(),'id');
}
return $return; return $return;
} }
} }
...@@ -15,7 +15,7 @@ class AdminUserTransformer extends BaseTransformer ...@@ -15,7 +15,7 @@ class AdminUserTransformer extends BaseTransformer
{ {
use Macroable; use Macroable;
protected array $availableIncludes = ['roles']; protected array $availableIncludes = ['role','department'];
protected $show_role = false; protected $show_role = false;
...@@ -34,24 +34,35 @@ class AdminUserTransformer extends BaseTransformer ...@@ -34,24 +34,35 @@ class AdminUserTransformer extends BaseTransformer
* @OA\Property(property="username", type="string", description="用户名"), * @OA\Property(property="username", type="string", description="用户名"),
* @OA\Property(property="avatar", type="string", description="头像"), * @OA\Property(property="avatar", type="string", description="头像"),
* @OA\Property(property="name", type="string", description="名称"), * @OA\Property(property="name", type="string", description="名称"),
* @OA\Property(property="phone", type="string", description="手机号码"),
* @OA\Property(property="entry_time", type="string", description="入职时间"),
* @OA\Property(property="skill", type="string", description="技能"),
* @OA\Property(property="job_name", type="string", description="职业"),
* @OA\Property(property="job_number", type="string", description="工号"),
* @OA\Property(property="created_at", type="string", description="注册时间"), * @OA\Property(property="created_at", type="string", description="注册时间"),
* @OA\Property(property="updated_at", type="string", description="更新时间") * @OA\Property(property="updated_at", type="string", description="更新时间")
* ) * )
*/ */
public function transform(AdminUser $user) public function transform(AdminUser $user)
{ {
$return = ['id', 'username', 'avatar', 'avatar_full_url', 'name', 'created_at', 'updated_at']; $return = [
'id', 'username', 'avatar', 'avatar_full_url', 'name','role_id',
'phone','entry_time','department_id','skill','job_name','job_number','contract_id',
'created_at', 'updated_at'
];
$return = Helper::mapAttr($user,$return); $return = Helper::mapAttr($user,$return);
$return['is_admin'] = Helper::isAdministrator($return['id']); $return['is_admin'] = Helper::isAdministrator($return['id']);
if($this->show_role){
$return['role'] = $user->roles()->first();
}
return $return; return $return;
} }
public function includeRoles($user) public function includeRole($user)
{ {
return $user->roles()?$this->item($user->roles()->first(), new AdminRoleTransformer(false)):null; return $user->role?$this->item($user->role, new AdminRoleTransformer()):null;
}
public function includeDepartment($user)
{
return $user->department?$this->item($user->department, new DepartmentTransformer()):null;
} }
} }
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/13
* Time: 11:12
*/
namespace Modules\Admin\Http\Transformers;
use Illuminate\Support\Traits\Macroable;
use Modules\Admin\Entities\Announcement;
use Modules\Admin\Http\Utils\Helper;
class AnnouncementTransformer extends BaseTransformer
{
use Macroable;
public function __construct()
{
parent::__construct();
}
/**
* @OA\Schema(
* description="公告信息",
* type="object",
* schema="Announcement",
* @OA\Property(property="id", type="integer", description="ID"),
* @OA\Property(property="title", type="string", description="标题"),
* @OA\Property(property="content", type="string", description="内容"),
* @OA\Property(property="created_at", type="string", description="创建时间"),
* )
*/
public function transform(Announcement $announcement)
{
$return = ['id', 'title', 'content','created_at'];
$return = Helper::mapAttr($announcement,$return);
return $return;
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/6/13
* Time: 11:12
*/
namespace Modules\Admin\Http\Transformers;
use Illuminate\Support\Traits\Macroable;
use Modules\Admin\Entities\AdminUser;
use Modules\Admin\Entities\Department;
use Modules\Admin\Http\Utils\Helper;
class DepartmentTransformer extends BaseTransformer
{
use Macroable;
public function __construct()
{
parent::__construct();
}
/**
* @OA\Schema(
* description="部门信息",
* type="object",
* schema="Department",
* @OA\Property(property="id", type="integer", description="ID"),
* @OA\Property(property="name", type="string", description="名称"),
* @OA\Property(property="desc", type="string", description="说明"),
* @OA\Property(property="created_at", type="string", description="创建时间"),
* )
*/
public function transform(Department $department)
{
$return = ['id', 'name', 'desc','created_at'];
$return = Helper::mapAttr($department,$return);
return $return;
}
}
This diff is collapsed.
...@@ -43,6 +43,12 @@ $api->version('v1', [ ...@@ -43,6 +43,12 @@ $api->version('v1', [
#角色 #角色
\Modules\Admin\Http\Utils\RouteRegister::registerApi($api,'role','RoleController'); \Modules\Admin\Http\Utils\RouteRegister::registerApi($api,'role','RoleController');
#部门
\Modules\Admin\Http\Utils\RouteRegister::registerApi($api,'department','DepartmentController');
#公告
\Modules\Admin\Http\Utils\RouteRegister::registerApi($api,'announcement','AnnouncementController');
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment