generated from liutk/owl-admin-base
workflow
parent
138f486caf
commit
fffc0a393c
|
|
@ -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 => '管理员',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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']),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Resources\KeywordResource;
|
||||
use App\Models\{WorkflowLog, WorkflowCheck};
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||
use App\Enums\CheckType;
|
||||
use App\Http\Resources\WorkflowLogResource;
|
||||
|
||||
class WorkflowController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$request->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'));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class WorkflowLogResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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('报销原因');
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue