diff --git a/app/Enums/UserRole.php b/app/Enums/UserRole.php index fcc8295..e2ace4d 100644 --- a/app/Enums/UserRole.php +++ b/app/Enums/UserRole.php @@ -12,6 +12,11 @@ enum UserRole: string */ case User = 'user'; + /** + * 店员 + */ + case StoreUser = 'store_user'; + /** * 店长 */ @@ -26,6 +31,7 @@ enum UserRole: string { return [ self::User->value => '普通员工', + self::StoreUser->value => '普通员工', self::Store->value => '店长', self::Admin->value => '管理员', ]; diff --git a/app/Http/Controllers/Api/ReimbursementController.php b/app/Http/Controllers/Api/ReimbursementController.php index 8b1582d..7ea7b8a 100644 --- a/app/Http/Controllers/Api/ReimbursementController.php +++ b/app/Http/Controllers/Api/ReimbursementController.php @@ -20,7 +20,7 @@ class ReimbursementController extends Controller $reimbursements = $user->reimbursements() ->filter($request->input()) - ->latest('id') + ->sort('id') ->simplePaginate($request->input('per_page', 20)); return ReimbursementResource::collection( @@ -51,6 +51,7 @@ class ReimbursementController extends Controller try { DB::beginTransaction(); + $validated['store_id'] = $user->store_id; /** @var \App\Models\Reimbursement */ $reimbursement = $user->reimbursements()->create($validated); @@ -81,7 +82,7 @@ class ReimbursementController extends Controller } return ReimbursementResource::make( - $reimbursement->load(['type', 'workflow']), + $reimbursement->load(['type', 'workflow', 'employee', 'store']), ); } diff --git a/app/Http/Controllers/Api/WorkflowController.php b/app/Http/Controllers/Api/WorkflowController.php new file mode 100644 index 0000000..3684209 --- /dev/null +++ b/app/Http/Controllers/Api/WorkflowController.php @@ -0,0 +1,36 @@ +validate([ + 'subject_type' => 'required', + 'subject_id' => 'required', + ]); + $user = $this->guard()->user(); + $storeId = $user->store_id; + $jobs = $user->jobs; + $jobValue = []; + foreach($jobs as $item) { + array_push($jobValue, $storeId . '-' . $item->key); + } + $query = WorkflowLog::with(['check']) + ->whereHas('check', fn($q) => $q->where('subject_type', $request->input('subject_type'))->where('subject_id', $request->input('subject_id'))) + ->where(fn($q) => + $q->where(fn($q1) => $q1->where('check_type', CheckType::User)->where('check_value', $user->id)) + ->orWhere(fn($q1) => $q->where('check_type', CheckType::Job)->whereIn('check_value', $jobValue)) + ); + $list = $query->paginate($request->input('per_page')); + + } +} diff --git a/app/Http/Resources/ReimbursementResource.php b/app/Http/Resources/ReimbursementResource.php index 481f615..4ea74bc 100644 --- a/app/Http/Resources/ReimbursementResource.php +++ b/app/Http/Resources/ReimbursementResource.php @@ -16,6 +16,11 @@ class ReimbursementResource extends JsonResource { return [ 'id' => $this->id, + 'employee_id' => $this->employee_id, + 'employee' => EmployeeResource::make($this->whenLoaded('employee')), + 'store_id' => $this->store_id, + 'store' => StoreResource::make($this->whenLoaded('store')), + 'reimbursement_type_id' => $this->reimbursement_type_id, 'type' => KeywordResource::make($this->whenLoaded('type')), 'workflow_check' => WorkflowCheckResource::make($this->whenLoaded('workflow')), 'expense' => $this->expense, diff --git a/app/Http/Resources/WorkflowLogResource.php b/app/Http/Resources/WorkflowLogResource.php new file mode 100644 index 0000000..e4fdcc0 --- /dev/null +++ b/app/Http/Resources/WorkflowLogResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray(Request $request): array + { + return []; + } +} diff --git a/app/Models/Employee.php b/app/Models/Employee.php index 22a9b64..f738f56 100644 --- a/app/Models/Employee.php +++ b/app/Models/Employee.php @@ -129,7 +129,7 @@ class Employee extends Model implements AuthenticatableContract /** * 用户身份 - * user: 普通员工, store: 店长, admin: 管理员 + * user: 普通员工, store: 店长, admin: 管理员, store_user: 店员 * @return array */ public function userRole(): array @@ -137,6 +137,7 @@ class Employee extends Model implements AuthenticatableContract return collect() ->when($this->isAdministrator(), fn ($collection) => $collection->push(UserRole::Admin)) ->when($this->isStoreMaster(), fn ($collection) => $collection->push(UserRole::Store)) + ->when($this->store_id > 0, fn ($collection) => $collection->push(UserRole::StoreUser)) ->whenEmpty(fn ($collection) => $collection->push(UserRole::User)) ->all(); } diff --git a/app/Models/Reimbursement.php b/app/Models/Reimbursement.php index 39bb90b..e357239 100644 --- a/app/Models/Reimbursement.php +++ b/app/Models/Reimbursement.php @@ -17,6 +17,7 @@ class Reimbursement extends Model protected $fillable = [ 'employee_id', + 'store_id', 'reimbursement_type_id', 'expense', 'reason', @@ -33,6 +34,11 @@ class Reimbursement extends Model return $this->belongsTo(Employee::class); } + public function store(): BelongsTo + { + return $this->belongsTo(Store::class); + } + public function scopeSort($q) { return $q->orderBy('created_at', 'desc'); diff --git a/database/migrations/2024_04_01_210323_create_reimbursements_table.php b/database/migrations/2024_04_01_210323_create_reimbursements_table.php index 25e236e..ef85c16 100644 --- a/database/migrations/2024_04_01_210323_create_reimbursements_table.php +++ b/database/migrations/2024_04_01_210323_create_reimbursements_table.php @@ -14,6 +14,7 @@ return new class extends Migration Schema::create('reimbursements', function (Blueprint $table) { $table->id(); $table->foreignId('employee_id')->comment('报销人'); + $table->foreignId('store_id')->comment('门店id, stores.id'); $table->string('reimbursement_type_id')->comment('报销类型, keywords.reimbursement_type'); $table->decimal('expense', 10, 2)->comment('报销费用'); $table->string('reason')->nullable()->comment('报销原因'); diff --git a/routes/api.php b/routes/api.php index 5ac7dc2..a2b469d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -58,5 +58,7 @@ Route::group([ }); // 报销管理 - Route::apiResource('reimbursements', \App\Http\Controllers\Api\ReimbursementController::class); + Route::group(['middleware' => ['user_role:store_user']], function () { + Route::apiResource('reimbursements', \App\Http\Controllers\Api\ReimbursementController::class); + }); });