增加後台圖檔旋轉功能。加強報名地址檢查。修正前台文字。增加前後台報名欄位。設定報名欄位TWID為UNIQUE。修正前台報名可以連續送出的問題。

This commit is contained in:
Eric Li
2025-06-19 12:02:27 +08:00
parent 32b04d09c3
commit 7529061de5
17 changed files with 171 additions and 15 deletions

View File

@ -51,7 +51,7 @@ class EventHealthAllowanceCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'hospital_name',
@ -143,7 +143,7 @@ class EventHealthAllowanceCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'twid',
@ -207,7 +207,7 @@ class EventHealthAllowanceCrudController extends CrudController
'name' => 'check_state',
'label' => "審核狀態",
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
'allows_null' => false,
'default' => '1',
],

View File

@ -50,7 +50,13 @@ class EventImprovedHealthCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'disease_type',
'label' => '疾病類別',
'type' => 'select_from_array',
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
],
[
'name' => 'hospital_name',
@ -102,11 +108,21 @@ class EventImprovedHealthCrudController extends CrudController
1 => '未審核',
2 => '通過  〇',
3 => '未通過 ✖'
])
->whenActive(function($value) {
CRUD::addClause('where', 'check_state', $value);
});
CRUD::filter('疾病類別')
->type('dropdown')
->values([
1 => '代謝症候群',
2 => '糖尿病',
3 => '初期慢性腎臟病',
4 => '糖尿病及初期慢性腎臟病'
])
->whenActive(function($value) {
CRUD::addClause('where', 'disease_type', $value);
});
CRUD::filter('ID')
->type('text')
->whenActive(function($value) {
@ -142,7 +158,7 @@ class EventImprovedHealthCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'twid',
@ -154,6 +170,12 @@ class EventImprovedHealthCrudController extends CrudController
'label' => '姓名',
'type' => 'text'
],
[
'name' => 'disease_type',
'label' => '疾病類別',
'type' => 'select_from_array',
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
],
[
'name' => 'hospital_name',
'label' => '就醫院所',
@ -172,6 +194,12 @@ class EventImprovedHealthCrudController extends CrudController
{
CRUD::setValidation(EventImprovedHealthRequest::class);
$this->crud->addFields([
[
'name' => 'disease_type',
'label' => '疾病類別',
'type' => 'select_from_array',
'options' => ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'],
],
[
'name' => 'hospital_name',
'label' => '就醫院所',
@ -206,7 +234,7 @@ class EventImprovedHealthCrudController extends CrudController
'name' => 'check_state',
'label' => "審核狀態",
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
'allows_null' => false,
'default' => '1',
],
@ -311,6 +339,9 @@ class EventImprovedHealthCrudController extends CrudController
$response = $this->traitUpdate();
// do something after save
$entry = $this->crud->getCurrentEntry();
$diseaseTypes = ['1' => '代謝症候群', '2' => '糖尿病', '3' => '初期慢性腎臟病', '4' => '糖尿病及初期慢性腎臟病'];
if ($entry->check_state != $org_check_state) {
switch($entry->check_state) {
case '2': //過通
@ -320,6 +351,7 @@ class EventImprovedHealthCrudController extends CrudController
"body" => "恭喜您審核通過!"
."\n\n登記資料:"
."\n流水號: B-".str_pad($entry->id, 6, '0', STR_PAD_LEFT)
."\n疾病類別:".$diseaseTypes[$entry->disease_type]
."\n就醫院所:".$entry->hospital_name
."\n姓名:".$entry->name
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)
@ -343,6 +375,7 @@ class EventImprovedHealthCrudController extends CrudController
."\n理由:".$entry->check_reson
."\n\n登記資料:"
."\n流水號: B-".str_pad($entry->id, 6, '0', STR_PAD_LEFT)
."\n疾病類別:".$diseaseTypes[$entry->disease_type]
."\n就醫院所:".$entry->hospital_name
."\n姓名:".$entry->name
."\n身份證字號:".substr($entry->twid,0,2)."xxxx".substr($entry->twid,-4)

View File

@ -51,7 +51,7 @@ class EventMetabolismCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'hospital_name',
@ -143,7 +143,7 @@ class EventMetabolismCrudController extends CrudController
'name' => 'check_state',
'label' => '審核狀態',
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
],
[
'name' => 'twid',
@ -208,7 +208,7 @@ class EventMetabolismCrudController extends CrudController
'name' => 'check_state',
'label' => "審核狀態",
'type' => 'select_from_array',
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖'],
'options' => ['1' => '未審核  ', '2' => '通過  ', '3' => '未通過 ✖', '4' => '重覆資料(僅標記)'],
'allows_null' => false,
'default' => '1',
],

View File

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Response;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\ImageManager;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@ -38,4 +40,43 @@ class StorageController extends Controller
'Content-Security-Policy' => "frame-ancestors 'self'", // Allow iframe on same domain
]);
}
public function imageRotation90(Request $request, $file_path)
{
$allowed_directory = 'uploads';
$file_path = str_replace(['../', '..\\'], '', $file_path);
$full_path = storage_path("app/{$allowed_directory}/{$file_path}");
if (is_dir($full_path)) {
throw new NotFoundHttpException('檔案不存在');
}
if (!Storage::disk('local')->exists("{$allowed_directory}/{$file_path}")) {
throw new NotFoundHttpException('檔案不存在');
}
$real_path = realpath($full_path);
$allowed_base_path = realpath(storage_path("app/{$allowed_directory}"));
if (!$real_path || strpos($real_path, $allowed_base_path) !== 0) {
throw new AccessDeniedHttpException('無權訪問該檔案');
}
$mime_type = mime_content_type($full_path) ?: 'application/octet-stream';
$allowedMimeTypes = [
'image/png', // PNG
'image/jpeg', // JPG/JPEG
'image/git' // git
];
if (!in_array($mime_type, $allowedMimeTypes)) {
throw new \Exception('檔案類型錯誤,只接受.jpg/.jpeg/.png/.gif');
}
$manager = new ImageManager(Driver::class);
$image = $manager->read($full_path);
$image = $image->rotate(-90);
$image->save(quality:100);
return [];
}
}