From ceeddda8b801b2b51295e6ed862b41f85c726959 Mon Sep 17 00:00:00 2001 From: ukyo Date: Wed, 5 Feb 2025 15:12:57 +0800 Subject: [PATCH] =?UTF-8?q?feat.promocode=20=E5=8A=A0user=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix. 彈跳視窗在手機bug feat.menu 使用 slug 對應 route --- .../Controllers/Admin/SettingController.php | 2 +- app/Http/Controllers/EmailController.php | 23 +- app/Http/Controllers/LoginController.php | 4 +- .../Controllers/front/MemberController.php | 33 ++- .../Controllers/front/PromoCodeController.php | 25 +- .../Controllers/front/RegisterController.php | 11 +- app/Models/Member.php | 2 +- app/Models/Promocode.php | 5 + ...5_01_13_154705_create_promocodes_table.php | 4 +- resources/menu/verticalMenu.json | 12 +- resources/views/admin/member/index.blade.php | 223 +++++++++++++++--- .../views/admin/setting/adminlist.blade.php | 84 ++++--- .../views/admin/setting/promocode.blade.php | 13 +- resources/views/front/member/index.blade.php | 141 ++++++----- .../views/front/member/page-profile.blade.php | 14 +- .../views/front/member/profile.blade.php | 38 +-- resources/views/layouts/admin_app.blade.php | 34 +-- resources/views/layouts/admin_aside.blade.php | 4 +- routes/admin.php | 7 +- routes/web.php | 6 +- 20 files changed, 439 insertions(+), 246 deletions(-) diff --git a/app/Http/Controllers/Admin/SettingController.php b/app/Http/Controllers/Admin/SettingController.php index 32fcb1f..44fa91f 100644 --- a/app/Http/Controllers/Admin/SettingController.php +++ b/app/Http/Controllers/Admin/SettingController.php @@ -15,7 +15,7 @@ class SettingController extends Controller public function promoCode(Request $request) { - $start = Carbon::now()->startOfMonth(); + $start = Carbon::now()->month(1)->startOfMonth(); $end = Carbon::now()->endOfMonth(); $result = Promocode::whereBetween('created_at', [$start, $end])->paginate(100); diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index 2145e9b..72721e4 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -105,7 +105,7 @@ public function index(Request $request) } public function sendemail(Request $request) { - \Log::info('got send mail', ['function' => 'sendemail']); + Log::info('got send mail', ['function' => 'sendemail']); // 驗證請求數據 $validatedData = $request->validate([ @@ -126,28 +126,28 @@ public function sendemail(Request $request) $check->token = $token; $check->save(); - \Log::info('Generated token', ['token' => $token]); + Log::info('Generated token', ['token' => $token]); $subject = "卡菲姬系統-驗證email"; // 使用 route 生成驗證鏈接 $verificationLink = route('email.verify', ['token' => $token]); - \Log::info('Generated verification link', ['link' => $verificationLink]); + Log::info('Generated verification link', ['link' => $verificationLink]); try { // 郵件內容 $message = "您好,\n\n請點擊以下鏈接以驗證您的電子郵件地址:\n\n" . $verificationLink . "\n\n如果您未請求此操作,請忽略此郵件。\n\n感謝您!"; - \Log::info('Preparing to send mail', ['email' => $validatedData['email'], 'subject' => $subject, 'message' => $message]); + Log::info('Preparing to send mail', ['email' => $validatedData['email'], 'subject' => $subject, 'message' => $message]); // 發送電子郵件 Mail::to($validatedData['email'])->send(new \App\Mail\CustomMail($subject, $message)); - \Log::info('Mail sent successfully'); + Log::info('Mail sent successfully'); return response()->json(['status' => 'success', 'msg' => '郵件發送成功']); - } catch (\Exception $e) { - \Log::error('Failed to send mail', ['error' => $e->getMessage()]); + } catch (Exception $e) { + Log::error('Failed to send mail', ['error' => $e->getMessage()]); return response()->json(['status' => 'error', 'msg' => '郵件發送失敗,請稍後再試!', 'error' => $e->getMessage()], 500); } @@ -178,11 +178,12 @@ public function validemail(Request $request) 'status' => 'error', 'msg' => 'email 以使用 ,是否逕行合併,如果是 請先驗證email', ]); - } - return response()->json([ - 'status' => 'success', + } else { + return response()->json([ + 'status' => 'success', - ]); + ]); + } } /** diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index a7e6304..42072cd 100644 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -116,7 +116,7 @@ public function adminLogout() public function memberLogout() { Auth::guard('member')->logout(); - return redirect()->route('front.login.view'); + return redirect()->route('login'); } public function adminNormalLogin(Request $request) @@ -165,7 +165,7 @@ public function handleGoogleCallback() 'source' => 'cafeg', ] ); - \Log::info('google Oauth :', [$user]); + Log::info('google Oauth :', [$user]); // 登入用戶 diff --git a/app/Http/Controllers/front/MemberController.php b/app/Http/Controllers/front/MemberController.php index 3dc851c..5af35d2 100644 --- a/app/Http/Controllers/front/MemberController.php +++ b/app/Http/Controllers/front/MemberController.php @@ -12,14 +12,25 @@ class MemberController extends Controller { - // + /** + * Summary of index member 首頁 + * @return mixed arrray promocode + * @return mixed|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse + */ public function index() { $code = null; if (isset(Auth::guard('member')->user()->id)) { $user_id = Auth::guard('member')->user()->id; - $code = Promocode::where('used_count', $user_id)->first(); + $code = Promocode::where('used_count', $user_id)->latest()->first(); + + if (!$code) { + $code = Promocode::where('used_count', 0)->first(); + $code->give_to = '首次'; + $code->used_count = $user_id; + $code->save(); + } return view('front.member.index', ['code' => $code]); } else { @@ -27,6 +38,10 @@ public function index() return redirect()->route('front.login.view'); } } + /** + * Summary of profile 登入後個人資訊沒有menu + * @return \Illuminate\Contracts\View\View + */ public function profile() { return view('front.member.profile'); @@ -69,7 +84,11 @@ public function profileUpdate(Request $request) return response()->json(['status' => 'success', 'msg' => '更新成功']); } - + /** + * Summary of pageProfile 個人資訊 has menu + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View + */ public function pageProfile(Request $request) { @@ -102,4 +121,12 @@ public function checkEmail(Request $request) return response()->json(['status' => 'success', 'msg' => '該email號碼可用']); } + + public function changeLevel(Request $request) + { + $user = Member::find($request->id); + $user->level = $request->level; + $user->save(); + return response()->json(['status' => 'success', '成功', 'level' => $request->level, 'name' => $user->level_name]); + } } diff --git a/app/Http/Controllers/front/PromoCodeController.php b/app/Http/Controllers/front/PromoCodeController.php index 25dc552..24685ad 100644 --- a/app/Http/Controllers/front/PromoCodeController.php +++ b/app/Http/Controllers/front/PromoCodeController.php @@ -20,24 +20,18 @@ public function index() /** * Show the form for creating a new resource. */ - public function create() + public function create(Request $request) { $user_id = Auth::guard('member')->user()->id; $count = Promocode::where('used_count', $user_id)->count(); + $give_to = $request->input('give_to'); - if (!$count) { + $row = Promocode::where('used_count', 0)->first(); + $row->used_count = $user_id; + $row->give_to = $give_to; + $row->save(); + return response()->json(['status' => 'success', 'msg' => '已成功取得', 'promocode' => $row->code, 'give_to' => $row->give_to]); - $row = Promocode::where('used_count', 0)->first(); - $row->used_count = $user_id; - $row->save(); - return response()->json(['status' => 'success', 'msg' => '已成功取得', 'promocode' => $row->code]); - } else { - $code = Promocode::where('used_count', $user_id)->latest() - ->first(); - ; - return response()->json(['status' => 'success', 'msg' => '你已取得過優惠碼', 'promocode' => $code->code]); - - } } /** @@ -48,23 +42,18 @@ public function create() public function morePromocode() { $user = Auth::guard('member')->user(); - try { if ($user->level != 9) { throw new Exception("Error Processing Request", 401); } else { - $row = Promocode::where('used_count', 0)->first(); $row->used_count = $user->id; $row->save(); return response()->json(['status' => 'success', 'msg' => '已成功取得', 'promocode' => $row->code]); } - - } catch (Exception $th) { //throw $th; return response()->json(['status' => 'error', 'msg' => $th->getMessage(), 'code' => $th->getCode()]); - } } diff --git a/app/Http/Controllers/front/RegisterController.php b/app/Http/Controllers/front/RegisterController.php index a9d0d1c..e83e65c 100644 --- a/app/Http/Controllers/front/RegisterController.php +++ b/app/Http/Controllers/front/RegisterController.php @@ -9,6 +9,7 @@ use Mail; use Log; use Auth; +use Str; class RegisterController extends Controller { /** @@ -61,9 +62,9 @@ public function forgotPassword(Request $request) public function sendForgotPassword(Request $request) { - \Log::info('sendForgotPassword', []); + Log::info('sendForgotPassword', []); $subject = "卡菲姬系統-密碼重新設定"; - $token = \Str::random(32); + $token = Str::random(32); $result = Member::where('email', $request->email)->firstOrFail(); try { @@ -72,7 +73,7 @@ public function sendForgotPassword(Request $request) } else { $verificationLink = route('change.password', ['token' => $token, 'id' => $result->id]); - \Log::info('sendForgotPassword go EmailVerifications', []); + Log::info('sendForgotPassword go EmailVerifications', []); $res = EmailVerifications::where('email', $request->email)->first(); if ($res) { @@ -95,8 +96,8 @@ public function sendForgotPassword(Request $request) // 發送電子郵件 Mail::to($request->input('email'))->send(new \App\Mail\CustomMail($subject, $message)); return response()->json(['status' => 'success', 'msg' => '郵件發送成功']); - } catch (\Exception $e) { - \Log::error('Failed to send mail', ['error' => $e->getMessage()]); + } catch (Exception $e) { + Log::error('Failed to send mail', ['error' => $e->getMessage()]); return response()->json(['status' => 'error', 'msg' => '郵件發送失敗,請稍後再試!', 'error' => $e->getMessage()], 500); } } diff --git a/app/Models/Member.php b/app/Models/Member.php index fee4564..546c846 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -32,7 +32,7 @@ class Member extends Authenticatable public static $levelName = [ 0 => '一般會員', 1 => '白銀會員', - 2 => '黃金會員', + 2 => '白金會員', 9 => '管理員', ]; diff --git a/app/Models/Promocode.php b/app/Models/Promocode.php index 35ec6b0..2311e6b 100644 --- a/app/Models/Promocode.php +++ b/app/Models/Promocode.php @@ -18,4 +18,9 @@ class Promocode extends Model 'valid_to', 'is_active', ]; + + public function getMember() + { + return $this->hasOne(Member::class, 'id', 'used_count'); + } } diff --git a/database/migrations/2025_01_13_154705_create_promocodes_table.php b/database/migrations/2025_01_13_154705_create_promocodes_table.php index 1ffdc0e..9e58b60 100644 --- a/database/migrations/2025_01_13_154705_create_promocodes_table.php +++ b/database/migrations/2025_01_13_154705_create_promocodes_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class extends Migration { /** * Run the migrations. */ @@ -21,6 +20,7 @@ public function up(): void $table->date('valid_from')->nullable()->comment('有效期開始'); $table->date('valid_to')->nullable()->comment('有效期結束'); $table->boolean('is_active')->default(true)->comment('是否啟用'); + $table->string('give_to')->nullable()->comment('給予誰'); $table->timestamps(); // 自動生成 created_at 和 updated_at }); } diff --git a/resources/menu/verticalMenu.json b/resources/menu/verticalMenu.json index 9336354..883271c 100644 --- a/resources/menu/verticalMenu.json +++ b/resources/menu/verticalMenu.json @@ -2,12 +2,12 @@ { "name": "首 頁", "icon": "menu-icon tf-icons ri-home-smile-line", - "slug": "admin/memberlist", + "slug": "admin.index", "submenu": [ { "url": "admin/memberlist", "name": "會員列表", - "slug": "memberlist" + "slug": "admin.memberlist" } ] @@ -15,24 +15,24 @@ { "name": "設 定", "icon": "menu-icon tf-icons ri-settings-line", - "slug": "admin/setting/*", + "slug": "admin.setting", "submenu": [ { "url": "admin/setting/promocode", "name": "優惠代碼", - "slug": "admin/setting" + "slug": "admin.setting.promocode" }, { "url": "admin/setting/adminlist", "name": "後台登入人員", - "slug": "setting.adminlist" + "slug": "admin.setting.adminlist" } ] }, { "name": "登 出", "icon": "menu-icon tf-icons ri-logout-circle-line", - "slug": "logout", + "slug": "admin.logout", "url": "admin/logout", "submenu": [ diff --git a/resources/views/admin/member/index.blade.php b/resources/views/admin/member/index.blade.php index 05d5386..cb1933b 100644 --- a/resources/views/admin/member/index.blade.php +++ b/resources/views/admin/member/index.blade.php @@ -3,8 +3,7 @@ @endsection @section('content')
@@ -34,22 +43,15 @@ -
-
- -
- - -
@@ -135,8 +137,8 @@
-
+
@@ -151,6 +153,7 @@ + @@ -162,7 +165,13 @@ @foreach ($data as $item) - + {{-- 縮排 --}} + + - - + - + + + + + @endforeach + +
縮 排 會員id 會員名稱 手機號碼
{{ $item->id }} + + + {{ $item->id }}
@@ -178,10 +187,10 @@ class="rounded-circle">
{{ $item->phone }} - + + @if ($item->level == 0) @elseif($item->level == 1) @@ -189,60 +198,198 @@ class="rounded-circle"> @elseif($item->level == 2) @elseif($item->level == 9) - + @endif - {{ $item->Level_Name }} @if (count($item->getPromoCode) == 1) - {{ $item->getPromoCode[0]->code }} @endif @if (count($item->getPromoCode) > 1) - @endif -
-
- - @foreach ($item->getPromoCode as $key => $val) - @if($key %8 ==0) -
- @endif - {{ $val->code }} - @endforeach -
-
+
+ +
+
+
+ + + + + + + + + + + + + + + + + @php $i = 1 ; @endphp + @foreach ($item->getPromoCode as $key => $val) + @if ($i == 1) + + @endif + + + @if ($i == 5) + + @php $i = 0 @endphp + @endif + @php $i++; @endphp @endforeach
優惠碼給予優惠碼給予優惠碼給予優惠碼給予優惠碼給予
{{ $i }} {{ $val->code }}{{ $val->give_to }}
+ {{-- + @foreach ($item->getPromoCode as $key => $val) + @if ($key % 8 == 0) +
+ @endif + {{ $val->code }} + @endforeach +
--}}
-
- {{ $data->links() }} +
-
- +
+ {{ $data->links() }} +
+ + + + 點選縮排可以看詳細派發,點擊操作可更改會員等級! + @endsection @section('scripts') + + @endsection diff --git a/resources/views/admin/setting/adminlist.blade.php b/resources/views/admin/setting/adminlist.blade.php index a5e4614..fefdb64 100644 --- a/resources/views/admin/setting/adminlist.blade.php +++ b/resources/views/admin/setting/adminlist.blade.php @@ -201,43 +201,51 @@ class="badge rounded-pill {{ $item->can_login == 1 ? 'bg-label-primary' : 'bg-la @endsection @section('scripts') - + + }, + error: function(xhr) { + Swal.fire({ + title: '錯誤', + text: '更新失敗,請稍後再試。', + icon: 'error', + confirmButtonText: '确定' + }); + } + }); + } + + @endsection diff --git a/resources/views/admin/setting/promocode.blade.php b/resources/views/admin/setting/promocode.blade.php index f4385fc..d006489 100644 --- a/resources/views/admin/setting/promocode.blade.php +++ b/resources/views/admin/setting/promocode.blade.php @@ -92,8 +92,17 @@ {{$item->code}} {{$item->type}} {{ number_format($item->discount, 0) }} - {{$item->used_count}}         - {{$item->valid_from}}           + + @if($item->used_count == 0) + 尚未派發 + @else + + {{ $item->getMember->name??'id :' . $item->used_count }} + + @endif + + + {{$item->valid_from}} @endforeach diff --git a/resources/views/front/member/index.blade.php b/resources/views/front/member/index.blade.php index 52dffba..1a99f09 100644 --- a/resources/views/front/member/index.blade.php +++ b/resources/views/front/member/index.blade.php @@ -23,6 +23,19 @@ width: 100%; /* 撐滿父容器 */ } + + /* 默认样式(适用于电脑版) */ + .nav-align-top .nav { + justify-content: flex-start; + /* 或者其他你想要的样式 */ + } + + /* 当屏幕宽度小于 768px 时(手机版) */ + @media (max-width: 767.98px) { + .nav-align-top .nav { + justify-content: space-between; + } + } @@ -75,16 +88,18 @@ class="fw-medium">{{ Auth::guard('member')->user()->Level_Name }} - - 顯示兌換編碼 - + @if (Auth::guard('member')->user()->level == 9) + + 顯示飲品兌換碼 + + @endif
{{--
顯示兌換編碼
--}}
+ + {{-- 顯示兌換碼 --}} +
@@ -147,9 +173,11 @@ class="nav-link d-flex flex-column gap-1 active" role="tab"
-
+
QRCode -
+
+
+
@@ -179,19 +207,11 @@ class='ri-bar-chart-2-line ri-24px text-body me-4'>消費紀錄 - 000001 - 2025/01/01 - 大杯 冰拿鐵 - 60 - 成功 - - - 000002 - 2025/01/01 - 大杯 冰拿鐵 - 60 - 成功 + + 目前暫無資料 + + @@ -219,12 +239,17 @@ class='ri-bar-chart-2-line ri-24px text-body me-4'>消費紀錄 + {{-- 一開始 Loading 使用script 判斷 --}} + + @endsection diff --git a/resources/views/front/member/page-profile.blade.php b/resources/views/front/member/page-profile.blade.php index daa6581..647a0a2 100644 --- a/resources/views/front/member/page-profile.blade.php +++ b/resources/views/front/member/page-profile.blade.php @@ -12,17 +12,13 @@ diff --git a/resources/views/front/member/profile.blade.php b/resources/views/front/member/profile.blade.php index 1d1ea41..0b356d9 100644 --- a/resources/views/front/member/profile.blade.php +++ b/resources/views/front/member/profile.blade.php @@ -1,6 +1,10 @@ - + + + + + @@ -15,7 +19,7 @@ - + @@ -33,11 +37,14 @@ - - + {{-- + --}} + + + + - @@ -61,11 +68,11 @@ -{{-- --}} + @@ -106,13 +113,10 @@
- -     {{asset('img/logo/cafeg-logo.png')}} +     {{asset('img/logo/cafeg-logo.png')}} @@ -328,7 +332,7 @@ class="btn btn-outline-secondary" diff --git a/resources/views/layouts/admin_aside.blade.php b/resources/views/layouts/admin_aside.blade.php index 95e079d..765b10c 100644 --- a/resources/views/layouts/admin_aside.blade.php +++ b/resources/views/layouts/admin_aside.blade.php @@ -23,7 +23,7 @@ {{-- {{ dd($menuData) }} --}} @foreach ($menuData[0] as $menu)