generated from liutk/owl-admin-base
[api] 举报投诉/意见箱
parent
60bc23c3b8
commit
6a27c971e6
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Complaint;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ComplaintController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate(
|
||||
rules: [
|
||||
'content' => ['bail', 'required', 'string', 'min:20'],
|
||||
'photos' => ['bail', 'array'],
|
||||
'anonymous' => ['bail', 'boolean'],
|
||||
],
|
||||
attributes: [
|
||||
'content' => '投诉内容',
|
||||
'photos' => '证明材料',
|
||||
'anonymous' => '匿名',
|
||||
],
|
||||
);
|
||||
|
||||
Complaint::create(
|
||||
array_merge($validated, ['employee_id' => $request->user()->id])
|
||||
);
|
||||
|
||||
return response()->noContent();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Feedback;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FeedbackController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate(
|
||||
rules: [
|
||||
'content' => ['bail', 'required', 'string', 'min:20'],
|
||||
],
|
||||
attributes: [
|
||||
'content' => '意见内容',
|
||||
],
|
||||
);
|
||||
|
||||
Feedback::create([
|
||||
'employee_id' => $request->user()->id,
|
||||
'content' => $validated['content'],
|
||||
]);
|
||||
|
||||
return response()->noContent();
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ namespace App\Models;
|
|||
use App\Enums\ComplaintStatus;
|
||||
use App\Traits\HasDateTimeFormatter;
|
||||
use EloquentFilter\Filterable;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
|
@ -24,7 +25,7 @@ class Complaint extends Model
|
|||
];
|
||||
|
||||
protected $fillable = [
|
||||
'employee_id', 'content', 'result', 'anonymous', 'complaint_status',
|
||||
'employee_id', 'content', 'photos', 'result', 'anonymous', 'complaint_status',
|
||||
];
|
||||
|
||||
public function employee(): BelongsTo
|
||||
|
|
@ -41,4 +42,18 @@ class Complaint extends Model
|
|||
{
|
||||
return $this->complaint_status === ComplaintStatus::Processing;
|
||||
}
|
||||
|
||||
protected function photos(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: function (mixed $value) {
|
||||
if (! is_array($photos = json_decode($value ?? '', true))) {
|
||||
$photos = [];
|
||||
}
|
||||
|
||||
return $photos;
|
||||
},
|
||||
set: fn (mixed $value) => json_encode(is_array($value) ? $value : []),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\LedgerStatus;
|
||||
use App\Traits\HasCheckable;
|
||||
use App\Traits\HasDateTimeFormatter;
|
||||
use EloquentFilter\Filterable;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ return new class extends Migration
|
|||
$table->text('result')->nullable()->comment('处理结果');
|
||||
$table->boolean('anonymous')->default(false)->comment('是否匿名');
|
||||
$table->tinyInteger('complaint_status')->default(1)->comment('1: 未处理, 2 处理中, 3 已处理');
|
||||
$table->text('photos')->nullable()->comment('证明材料');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\Auth\AccessTokenController;
|
||||
use App\Http\Controllers\Api\ComplaintController;
|
||||
use App\Http\Controllers\Api\FeedbackController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::post('/auth/login', [AccessTokenController::class, 'store']);
|
||||
|
|
@ -9,5 +11,8 @@ Route::delete('/auth/logout', [AccessTokenController::class, 'destroy']);
|
|||
Route::group([
|
||||
'middleware' => ['auth:api'],
|
||||
], function () {
|
||||
//
|
||||
// 举报投诉
|
||||
Route::post('complaints', [ComplaintController::class, 'store']);
|
||||
// 意见箱
|
||||
Route::post('feedback', [FeedbackController::class, 'store']);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue