feat. add ico ,change logo,管理員可刷新序號邏輯

This commit is contained in:
ukyo 2025-01-24 13:45:30 +08:00
parent 149d603a4c
commit 1858c5d70b
19 changed files with 537 additions and 377 deletions

View File

@ -5,6 +5,7 @@
use App\Models\Promocode; use App\Models\Promocode;
use Auth; use Auth;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Exception;
class PromoCodeController extends Controller class PromoCodeController extends Controller
{ {
@ -31,12 +32,42 @@ public function create()
$row->save(); $row->save();
return response()->json(['status' => 'success', 'msg' => '已成功取得', 'promocode' => $row->code]); return response()->json(['status' => 'success', 'msg' => '已成功取得', 'promocode' => $row->code]);
} else { } else {
$code = Promocode::where('used_count', $user_id)->first(); $code = Promocode::where('used_count', $user_id)->latest()
->first();
;
return response()->json(['status' => 'success', 'msg' => '你已取得過優惠碼', 'promocode' => $code->code]); return response()->json(['status' => 'success', 'msg' => '你已取得過優惠碼', 'promocode' => $code->code]);
} }
} }
/**
* Summary of morePromocode
* @throws \Exception
* @return mixed|\Illuminate\Http\JsonResponse
*/
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()]);
}
}
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.

View File

@ -64,7 +64,7 @@ public function getLevelNameAttribute()
public function getPromoCode() public function getPromoCode()
{ {
return $this->hasOne(Promocode::class, 'used_count', 'id'); return $this->hasMany(Promocode::class, 'used_count', 'id');
} }
protected function casts(): array protected function casts(): array
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -15,9 +15,10 @@
<meta name="csrf-token" content="6fa8KEfKxuHo22PqMwHmCoxMDArqCNYyqRXJNZSE"> <meta name="csrf-token" content="6fa8KEfKxuHo22PqMwHmCoxMDArqCNYyqRXJNZSE">
<!-- Canonical SEO --> <!-- Canonical SEO -->
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" />
<link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/cafeg.ico') }}" />
<!-- ? PROD Only: Google Tag Manager (Default ThemeSelection: GTM-5DDHKGP, PixInvent: GTM-5J3LMKC) --> <!-- ? PROD Only: Google Tag Manager (Default ThemeSelection: GTM-5DDHKGP, PixInvent: GTM-5J3LMKC) -->
<script> <script>
@ -39,8 +40,7 @@
</script> </script>
<!-- End Google Tag Manager --> <!-- End Google Tag Manager -->
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{{asset('assets')}}/img/favicon/favicon.ico" />
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">

View File

@ -15,6 +15,7 @@
<!-- Canonical SEO --> <!-- Canonical SEO -->
<link rel="canonical" href="https://1.envato.market/materialize_admin"> <link rel="canonical" href="https://1.envato.market/materialize_admin">
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" /> <link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" />

View File

@ -13,7 +13,8 @@
<meta name="csrf-token" content="6fa8KEfKxuHo22PqMwHmCoxMDArqCNYyqRXJNZSE"> <meta name="csrf-token" content="6fa8KEfKxuHo22PqMwHmCoxMDArqCNYyqRXJNZSE">
<!-- Canonical SEO --> <!-- Canonical SEO -->
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" />
<link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/cafeg.ico') }}" />
<!-- Include Styles --> <!-- Include Styles -->
@ -104,14 +105,13 @@
<!-- Logo --> <!-- Logo -->
<div class="app-brand justify-content-center mt-5"> <div class="app-brand justify-content-center mt-5">
<a href="#" class="app-brand-link gap-2"> <a href="#" class="app-brand-link gap-2">
<span class="app-brand-logo demo"><span> {{-- <span class="app-brand-logo demo"><span>
<img src="{{asset('assets/img/logo/cafeg-logo.png')}}" width="50px" height="50px" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img> <img src="{{asset('assets/img/logo/cafeg-logo.png')}}" width="50px" height="50px" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img>
</span> </span> --}}
</span> </span>
<span class="app-brand-text demo text-heading fw-semibold"> <span class="app-brand-text demo text-heading fw-semibold">
&nbsp; &nbsp; <img src="{{asset('assets/img/logo/cafeg-logo-h.png')}}" width="120px" height="50px" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img> &nbsp;&nbsp;&nbsp;&nbsp;<img src="{{asset('assets/img/logo/cafeg-logo-1.png')}}" width="45%" height="45%" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img>
</span> </span>
</a> </a>
</div> </div>
@ -145,12 +145,12 @@
記住 記住
</label> </label>
</div> </div>
<a href="forgot-password-basic.html" class="float-end mb-1 mt-2"> {{-- <a href="forgot-password-basic.html" class="float-end mb-1 mt-2">
<span>忘記密碼?</span> <span>忘記密碼?</span>
</a> </a> --}}
</div> </div>
<div class="mb-5"> <div class="mb-5">
<button class="btn btn-primary d-grid w-100" type="submit">Sign in</button> <button class="btn btn-primary d-grid w-100" type="submit">&nbsp; </button>
</div> </div>
</form> </form>

View File

@ -2,6 +2,29 @@
@section('header') @section('header')
@endsection @endsection
@section('content') @section('content')
<style>
.table th,
.table td {
white-space: nowrap;
/* 禁止文字換行 */
text-align: center;
/* 內容置中 */
overflow: hidden;
/* 隱藏超出內容 */
text-overflow: ellipsis;
/* 超出用省略號顯示 */
}
.table th {
width: auto;
/* 可根據內容自適應,但不要超出 */
}
.table {
width: 100%;
/* 撐滿父容器 */
}
</style>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="card-body"> <div class="card-body">
@ -165,12 +188,39 @@ class="rounded-circle">
<i class="ri-user-line ri-22px text-info me-2"></i> <i class="ri-user-line ri-22px text-info me-2"></i>
@elseif($item->level == 2) @elseif($item->level == 2)
<i class="ri-user-line ri-22px text-sucess me-2"></i> <i class="ri-user-line ri-22px text-sucess me-2"></i>
@elseif($item->level == 9)
<i class="ri-user-line ri-22px text-black me-2"></i>
@endif @endif
{{ $item->Level_Name }} {{ $item->Level_Name }}
</span> </span>
</td> </td>
<td> <span class="text-danger" style="font-size:20px">{{ $item->getPromoCode->code }} </span> <td>
@if (count($item->getPromoCode) == 1)
<span class="text-danger" style="font-size:20px">
{{ $item->getPromoCode[0]->code }}
</span>
@endif
@if (count($item->getPromoCode) > 1)
<a class="text-danger" style="font-size:20px" data-bs-toggle="collapse" href="#multiCollapseExample-{{ $item->id }}" role="button"
aria-expanded="false" aria-controls="multiCollapseExample1">
{{ $item->getPromoCode[0]->code }} (多筆)
</a>
@endif
<div class="collapse multi-collapse" id="multiCollapseExample-{{ $item->id }}">
<div class="d-grid d-sm-flex p-4 border justify-content-center" >
<span class="text-danger " style="font-size:20px">
@foreach ($item->getPromoCode as $key => $val)
@if($key %8 ==0)
<br>
@endif
{{ $val->code }}
@endforeach
</span>
</div>
</div>
</td> </td>
<td></td> <td></td>
</tr> </tr>
@ -186,6 +236,12 @@ class="rounded-circle">
</div> </div>
<!-- / Layout page --> <!-- / Layout page -->
</div> </div>
<div class="alert alert-solid-primary d-flex align-items-center" role="alert">
<span class="alert-icon rounded">
<i class="ri-user-follow-line ri-22px"></i>
</span>
This is a primary solid alert check it out!
</div>
</div> </div>
@endsection @endsection
@section('scripts') @section('scripts')

View File

@ -168,7 +168,6 @@
<td> <td>
<a href="#"> <a href="#">
<span id="status-{{ $item->id }}" <span id="status-{{ $item->id }}"
onclick="updateStatus({{ $item->id }}, {{ $item->can_login == 1 ? 0 : 1 }})" onclick="updateStatus({{ $item->id }}, {{ $item->can_login == 1 ? 0 : 1 }})"
class="badge rounded-pill {{ $item->can_login == 1 ? 'bg-label-primary' : 'bg-label-danger' }}"> class="badge rounded-pill {{ $item->can_login == 1 ? 'bg-label-primary' : 'bg-label-danger' }}">
{{ $item->can_login_status }} {{ $item->can_login_status }}
@ -183,7 +182,15 @@ class="badge rounded-pill {{ $item->can_login == 1 ? 'bg-label-primary' : 'bg-la
</tbody> </tbody>
</table> </table>
</div> </div>
<div style="padding-top: 5%;"></div>
<div class="alert alert-solid-info d-flex align-items-center" role="alert" s>
<span class="alert-icon rounded">
<i class="ri-information-line ri-22px"></i>
</span>
後台註冊後,得點登入狀態放行
</div> </div>
</div>
<div class="content-backdrop fade"></div> <div class="content-backdrop fade"></div>
{{ $data->links() }} {{ $data->links() }}
</div> </div>
@ -216,8 +223,10 @@ function updateStatus(id, status) {
const statusElement = document.getElementById(`status-${id}`); const statusElement = document.getElementById(`status-${id}`);
if (statusElement) { if (statusElement) {
statusElement.textContent = response.can_login == 1 ? '允許' : '未允許'; statusElement.textContent = response.can_login == 1 ? '允許' : '未允許';
statusElement.className = `badge rounded-pill ${response.can_login == 1 ? 'bg-label-primary' : 'bg-label-danger'}`; statusElement.className =
statusElement.setAttribute('onclick', `updateStatus(${id}, ${response.can_login == 1 ? 0 : 1})`); `badge rounded-pill ${response.can_login == 1 ? 'bg-label-primary' : 'bg-label-danger'}`;
statusElement.setAttribute('onclick',
`updateStatus(${id}, ${response.can_login == 1 ? 0 : 1})`);
} }
}, },
error: function(xhr) { error: function(xhr) {
@ -230,6 +239,5 @@ function updateStatus(id, status) {
} }
}); });
} }
</script> </script>
@endsection @endsection

View File

@ -78,9 +78,9 @@
<!-- Logo --> <!-- Logo -->
<div class="app-brand justify-content-center mt-5"> <div class="app-brand justify-content-center mt-5">
<a href="#" class="app-brand-link gap-2"> <a href="#" class="app-brand-link gap-2">
<span class="app-brand-logo demo"><span> <span class="app-brand-logo demo">
<img src="{{ asset('assets/img/logo/cafeg-logo.png') }}" width="50px" height="50px" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img> <span class="app-brand-text demo text-heading fw-semibold">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img style="margin-left: 5%" src="{{ asset('assets/img/logo/cafeg-logo-1.png') }}" width="45%" height="45%" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img>
</span> </span>
</span> </span>
<span class="app-brand-text demo text-heading fw-semibold"> <span class="app-brand-text demo text-heading fw-semibold">

View File

@ -3,7 +3,7 @@
<!-- beautify ignore:start --> <!-- beautify ignore:start -->
<html lang="en" class="dark-style layout-wide dark customizer-hide" dir="ltr" data-theme="theme-bordered" data-assets-path="../../assets/" data-template="vertical-menu-template-bordered" data-style="light"> <html lang="en" class="light-style layout-wide dark customizer-hide" dir="ltr" data-theme="theme-bordered" data-assets-path="../../assets/" data-template="vertical-menu-template-bordered" data-style="light">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
@ -92,10 +92,11 @@
<!-- Logo --> <!-- Logo -->
<div class="app-brand justify-content-center mt-5"> <div class="app-brand justify-content-center mt-5">
<a href="#" class="app-brand-link gap-2"> <a href="#" class="app-brand-link gap-2">
<span class="app-brand-logo demo"><span> <span class="app-brand-logo demo">
<img src="{{ asset('assets/img/logo/cafeg-logo.png') }}" width="50px" height="50px" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img> <span class="app-brand-text demo text-heading fw-semibold">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img style="margin-left: 5%" src="{{ asset('assets/img/logo/cafeg-logo-1.png') }}" width="45%" height="45%" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img>
</span> </span>
</span> </span>
<span class="app-brand-text demo text-heading fw-semibold"> <span class="app-brand-text demo text-heading fw-semibold">
&nbsp; &nbsp; <img src="{{ asset('assets/img/logo/cafeg-logo-h.png') }}" width="120px" height="50px" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img> &nbsp; &nbsp; <img src="{{ asset('assets/img/logo/cafeg-logo-h.png') }}" width="120px" height="50px" alt="{{ asset('img/logo/cafeg-logo.png') }}"> </img>

View File

@ -1,94 +1,85 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" class="dark-style layout-menu-fixed customizer-hide" dir="ltr" data-theme="theme-default" data-assets-path="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/assets/" data-base-url="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo-4" data-framework="laravel" data-template="blank-menu-theme-default-dark" data-style="dark"> <html lang="en" class="light-style layout-wide customizer-hide" dir="ltr" data-theme="theme-default"
data-assets-path="../../assets/" data-template="vertical-menu-template" data-style="light">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" /> <meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<title>卡菲姬登入</title> <title>Login Basic - Pages | Materialize - Material Design HTML Admin Template</title>
<meta name="description" content="Materialize is the most developer friendly &amp; highly customizable Admin Dashboard Template." />
<meta name="keywords" content="cafeg 卡菲姬">
<!-- laravel CRUD token --> <meta name="description"
<meta name="csrf-token" content="6fa8KEfKxuHo22PqMwHmCoxMDArqCNYyqRXJNZSE"> content="Materialize is the most developer friendly &amp; highly customizable Admin Dashboard Template." />
<meta name="keywords"
content="dashboard, material, material design, bootstrap 5 dashboard, bootstrap 5 design, bootstrap 5">
<!-- Canonical SEO --> <!-- Canonical SEO -->
<link rel="canonical" href="https://1.envato.market/materialize_admin"> <link rel="canonical" href="https://1.envato.market/materialize_admin">
<!-- ? PROD Only: Google Tag Manager (Default ThemeSelection: GTM-5DDHKGP, PixInvent: GTM-5J3LMKC) -->
<script>
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-5J3LMKC');
</script>
<!-- End Google Tag Manager -->
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" /> <link rel="icon" type="image/x-icon" href="../../assets/img/favicon/favicon.ico" />
<!-- Include Styles -->
<!-- $isFront is used to append the front layout styles only on the front layout otherwise the variable will be blank -->
<!-- BEGIN: Theme CSS-->
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&ampdisplay=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&ampdisplay=swap"
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/fonts/remixicon/remixicon.css" /> rel="stylesheet">
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/fonts/flag-icons.css" />
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/libs/node-waves/node-waves.css" /> <!-- Icons -->
<link rel="stylesheet" href="{{asset('assets')}}/vendor/fonts/remixicon/remixicon.css" class="" /> <link rel="stylesheet" href="../../assets/vendor/fonts/remixicon/remixicon.css" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/fonts/flag-icons.css" class="" /> <link rel="stylesheet" href="../../assets/vendor/fonts/flag-icons.css" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/libs/node-waves/node-waves.css" class="" />
<!-- Menu waves for no-customizer fix -->
<link rel="stylesheet" href="../../assets/vendor/libs/node-waves/node-waves.css" />
<!-- Core CSS --> <!-- Core CSS -->
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/css/core-dark.css" /> <link rel="stylesheet" href="../../assets/vendor/css/rtl/core.css" class="template-customizer-core-css" />
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/css/theme-default-dark.css" /> <link rel="stylesheet" href="../../assets/vendor/css/rtl/theme-default.css" class="template-customizer-theme-css" />
<link rel="preload" as="style" href="{{asset('assets')}}/css/demo.css" /> <link rel="stylesheet" href="../../assets/css/demo.css" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/css/core-dark.css" class="template-customizer-core-css" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/css/theme-default-dark.css" class="template-customizer-theme-css" /> <!-- Vendors CSS -->
<link rel="stylesheet" href="{{asset('assets')}}/css/demo.css" class="" /> <link rel="stylesheet" href="../../assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" />
<!-- Vendor Styles --> <link rel="stylesheet" href="../../assets/vendor/libs/typeahead-js/typeahead.css" />
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" /> <!-- Vendor -->
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/libs/typeahead-js/typeahead.css" /> <link rel="stylesheet" href="../../assets/vendor/libs/@form-validation/form-validation.css" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" class="" />
<link rel="stylesheet" href="{{asset('assets')}}/vendor/libs/typeahead-js/typeahead.css" class="" /> <!-- Page CSS -->
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/libs/@form-validation/form-validation.css" /> <!-- Page -->
<link rel="stylesheet" href="{{asset('assets')}}/vendor/libs/@form-validation/form-validation.css" class="" /> <link rel="stylesheet" href="../../assets/vendor/css/pages/page-auth.css">
<!-- Page Styles -->
<link rel="preload" as="style" href="{{asset('assets')}}/vendor/css/pages/page-auth.css" /> <!-- Helpers -->
<link rel="stylesheet" href="{{asset('assets')}}/vendor/css/pages/page-auth.css" class="" /> <script src="../../assets/vendor/js/helpers.js"></script>
<!-- Include Scripts for customizer, helper, analytics, config -->
<!-- $isFront is used to append the front layout scriptsIncludes only on the front layout otherwise the variable will be blank -->
<!-- laravel style -->
<link rel="modulepreload" href="{{asset('assets')}}/vendor/js/helpers.js" />
<script type="module" src="{{asset('assets')}}/vendor/js/helpers.js"></script>
<!-- beautify ignore:start -->
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section --> <!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
<!--? Template customizer: To hide customizer set displayCustomizer value false in config.js. --> <!--? Template customizer: To hide customizer set displayCustomizer value false in config.js. -->
<link rel="modulepreload" href="{{asset('assets')}}/vendor/js/template-customizer.js" /> <script src="../../assets/vendor/js/template-customizer.js"></script>
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. --> <!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
<link rel="modulepreload" href="{{asset('assets')}}/js/config.js" /><script type="module" src="{{asset('assets')}}/js/config.js"></script> <script src="../../assets/js/config.js"></script>
<script type="module">
window.templateCustomizer = new TemplateCustomizer({
cssPath: '',
themesPath: '',
defaultStyle: "dark",
defaultShowDropdownOnHover: "1", // true/false (for horizontal layout only)
displayCustomizer: "1",
lang: 'de',
pathResolver: function(path) {
var resolvedPaths = {
// Core stylesheets
'core.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/core-kL5gEEKA.css',
'core-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/core-dark-DFvmi5J3.css',
// Themes
'theme-default.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-default-Bt2z4DrM.css',
'theme-default-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-default-dark-CHvAJUy2.css',
'theme-bordered.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-bordered-DhjhTV9k.css',
'theme-bordered-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-bordered-dark-C25VfhpZ.css',
'theme-semi-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-semi-dark-D80v88qZ.css',
'theme-semi-dark-dark.scss': 'https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/build/assets/theme-semi-dark-dark-BZrM7P_B.css',
}
return resolvedPaths[path] || path;
},
'controls': ["rtl","style","headerType","contentLayout","layoutCollapsed","layoutNavbarOptions","themes"],
});
</script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5J3LMKC'); </script>
</head> </head>
<body> <body>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5J3LMKC" height="0" width="0" style="display: none; visibility: hidden"></iframe></noscript> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5J3LMKC" height="0" width="0" style="display: none; visibility: hidden"></iframe></noscript>
@ -104,15 +95,12 @@
<!-- Logo --> <!-- Logo -->
<div class="app-brand justify-content-center mt-5"> <div class="app-brand justify-content-center mt-5">
<a href="#" class="app-brand-link gap-2"> <a href="#" class="app-brand-link gap-2">
<span class="app-brand-logo demo"><span> <span class="app-brand-logo demo">
<img src="{{asset('assets/img/logo/cafeg-logo.png')}}" width="50px" height="50px" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img>
</span>
</span>
<span class="app-brand-text demo text-heading fw-semibold"> <span class="app-brand-text demo text-heading fw-semibold">
&nbsp; &nbsp; <img src="{{asset('assets/img/logo/cafeg-logo-h.png')}}" width="120px" height="50px" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img style="margin-left: 5%" src="{{asset('assets/img/logo/cafeg-logo-1.png')}}" width="45%" height="45%" alt="{{asset('img/logo/cafeg-logo.png')}}"> </img>
</span> </span>
</span>
</a> </a>
</div> </div>
<!-- /Logo --> <!-- /Logo -->
@ -254,8 +242,7 @@
}); });
}); });
</script> </script> @endif
@endif
</html> </html>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

View File

@ -15,8 +15,8 @@
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<!-- Canonical SEO --> <!-- Canonical SEO -->
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" />
<link rel="icon" type="image/x-icon" href="../../demo/assets/img/favicon/favicon.ico" />
<!-- ? PROD Only: Google Tag Manager (Default ThemeSelection: GTM-5DDHKGP, PixInvent: GTM-5J3LMKC) --> <!-- ? PROD Only: Google Tag Manager (Default ThemeSelection: GTM-5DDHKGP, PixInvent: GTM-5J3LMKC) -->

View File

@ -1,7 +1,6 @@
@extends('layouts.app') @extends('layouts.app')
@section('content') @section('content')
<style> <style>
.table th, .table th,
.table td { .table td {
@ -24,7 +23,6 @@
width: 100%; width: 100%;
/* 撐滿父容器 */ /* 撐滿父容器 */
} }
</style> </style>
<!-- / Navbar --> <!-- / Navbar -->
@ -40,31 +38,39 @@
<div class="col-12"> <div class="col-12">
<div class="card mb-6"> <div class="card mb-6">
<div class="user-profile-header-banner"> <div class="user-profile-header-banner">
<img src="https://cafeg.ukyo.idv.tw/assets/img/pages/profile-banner.png" style="width:100%; height:200px;" alt="Banner image" class="rounded-top"> <img src="https://cafeg.ukyo.idv.tw/assets/img/pages/profile-banner.png"
style="width:100%; height:200px;" alt="Banner image" class="rounded-top">
</div> </div>
<div class="user-profile-header d-flex flex-column flex-sm-row text-sm-start text-center mb-5"> <div class="user-profile-header d-flex flex-column flex-sm-row text-sm-start text-center mb-5">
<div class="flex-shrink-0 mt-n2 mx-sm-0 mx-auto"> <div class="flex-shrink-0 mt-n2 mx-sm-0 mx-auto">
@if (Auth::guard('member')->user()->avatar) @if (Auth::guard('member')->user()->avatar)
<img src="{{Auth::guard('member')->user()->avatar}}" style="width:100px;hieght:100px;" alt="user image" class="d-block h-auto ms-0 ms-sm-5 rounded-4 user-profile-img"> <img src="{{ Auth::guard('member')->user()->avatar }}" style="width:100px;hieght:100px;"
alt="user image" class="d-block h-auto ms-0 ms-sm-5 rounded-4 user-profile-img">
@else @else
<img src="../../assets/img/avatars/1.png" style="width:100px;hieght:100px;" alt="user image" class="d-block h-auto ms-0 ms-sm-5 rounded-4 user-profile-img"> <img src="../../assets/img/avatars/1.png" style="width:100px;hieght:100px;"
alt="user image" class="d-block h-auto ms-0 ms-sm-5 rounded-4 user-profile-img">
@endif @endif
</div> </div>
<div class="flex-grow-1 mt-4 mt-sm-12"> <div class="flex-grow-1 mt-4 mt-sm-12">
<div class="d-flex align-items-md-end align-items-sm-start align-items-center justify-content-md-between justify-content-start mx-5 flex-md-row flex-column gap-6"> <div
class="d-flex align-items-md-end align-items-sm-start align-items-center justify-content-md-between justify-content-start mx-5 flex-md-row flex-column gap-6">
<div class="user-profile-info"> <div class="user-profile-info">
<h4 class="mb-2">{{ Auth::guard('member')->user()->name }}</h4> <h4 class="mb-2">{{ Auth::guard('member')->user()->name }}</h4>
<ul class="list-inline mb-0 d-flex align-items-center flex-wrap justify-content-sm-start justify-content-center gap-4"> <ul
class="list-inline mb-0 d-flex align-items-center flex-wrap justify-content-sm-start justify-content-center gap-4">
<li class="list-inline-item"> <li class="list-inline-item">
<i class='ri-User-line me-2 ri-24px'></i><span class="fw-medium">{{Auth::guard('member')->user()->Level_Name}}</span> <i class='ri-User-line me-2 ri-24px'></i><span
class="fw-medium">{{ Auth::guard('member')->user()->Level_Name }}</span>
</li> </li>
<li class="list-inline-item"> <li class="list-inline-item">
<i class='ri-home-heart-fill me-2 ri-24px'></i><span class="fw-medium">客戶編號 : {{Auth::guard('member')->user()->id}}</span> <i class='ri-home-heart-fill me-2 ri-24px'></i><span class="fw-medium">客戶編號
: {{ Auth::guard('member')->user()->id }}</span>
</li> </li>
<li class="list-inline-item"> <li class="list-inline-item">
<i class="ri-calendar-line me-2 ri-24px"></i> <i class="ri-calendar-line me-2 ri-24px"></i>
<span class="fw-medium"> <span class="fw-medium">
: {{ \Carbon\Carbon::parse(Auth::guard('member')->user()->created_at)->format('Y 年 m 月') }} :
{{ \Carbon\Carbon::parse(Auth::guard('member')->user()->created_at)->format('Y 年 m 月') }}
</span> </span>
</li> </li>
</ul> </ul>
@ -73,13 +79,64 @@
<i class="ri-qr-code-fill ri-16px me-2"></i>顯示兌換編碼 <i class="ri-qr-code-fill ri-16px me-2"></i>顯示兌換編碼
</a> </a>
</div> </div>
<div class="card mb-12" id="promocode"> <div class="col-xl-12">
<h5 class="card-header">兌換編碼</h5> {{-- <h6 class="text-muted">顯示兌換編碼</h6> --}}
<div class="card text-center mb-4" id="promocode">
<div class="card-header">
<div class="nav-align-top">
<ul class="nav nav-pills" role="tablist">
<li class="nav-item">
<button type="button"
class="nav-link d-flex flex-column gap-1 active" role="tab"
data-bs-toggle="tab"
data-bs-target="#navs-pills-within-card-active"
aria-controls="navs-pills-within-card-active"
aria-selected="true"><i class="tf-icons ri-home-smile-line"></i>
咖啡國王&皇后</button>
</li>
<li class="nav-item">
<button type="button" class="nav-link d-flex flex-column gap-1"
role="tab" data-bs-toggle="tab"
data-bs-target="#navs-pills-within-card-link"
aria-controls="navs-pills-within-card-link"
aria-selected="false"><i class="tf-icons ri-links-line"></i>
茶飲大師</button>
</li>
</ul>
</div>
</div>
<div class="card-body"> <div class="card-body">
<div class="tab-content p-0">
<div class="tab-pane fade show active" id="navs-pills-within-card-active"
role="tabpanel">
<h4 class="card-title">咖啡國王/咖啡皇后 <p>飲品兌換卷</p>
</h4>
<div class="form-floating form-floating-outline"> <div class="form-floating form-floating-outline">
<input type="text" class="form-control text-danger" style="font-size:24px; font-weight: bold;" id="floatingInput" aria-describedby="floatingInputHelp"> @if (Auth::guard('member')->user()->level != 9)
<input type="text" class="form-control text-danger"
style="font-size:24px; font-weight: bold;"
id="floatingInput" aria-describedby="floatingInputHelp">
<label for="floatingInput">兌換碼</label> <label for="floatingInput">兌換碼</label>
{{-- <div id="floatingInputHelp" class="form-text">We'll never share your details with anyone else.</div> --}} {{-- <div id="floatingInputHelp" class="form-text">We'll never share your details with anyone else.</div> --}}
@else
<div class="input-group">
<input type="text" class="form-control text-danger"
style="font-size:24px; font-weight: bold;"
id="floatingInput2" aria-describedby="button-addon2">
<button class="btn btn-outline-primary" type="button"
id="button-addon2">重新獲取</button>
</div>
@endif
</div>
</div>
<div class="tab-pane fade" id="navs-pills-within-card-link" role="tabpanel">
<h4 class="card-title">茶飲大師手搖機 飲品兌換卷</h4>
<p class="card-text">施工中 ....</p>
{{-- <a href="javascript:void(0)" class="btn btn-secondary">Go somewhere</a> --}}
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -101,7 +158,8 @@
<!-- Activity Timeline --> <!-- Activity Timeline -->
<div class="card card-action mb-6"> <div class="card card-action mb-6">
<div class="card-header align-items-center"> <div class="card-header align-items-center">
<h5 class="card-action-title mb-0"><i class='ri-bar-chart-2-line ri-24px text-body me-4'></i>消費紀錄</h5> <h5 class="card-action-title mb-0"><i
class='ri-bar-chart-2-line ri-24px text-body me-4'></i>消費紀錄</h5>
</div> </div>
<div class="card-body pt-5"> <div class="card-body pt-5">
<!-- Order List Table --> <!-- Order List Table -->
@ -179,24 +237,51 @@
// 發送 AJAX 請求 // 發送 AJAX 請求
$.ajax({ $.ajax({
url: "{{ route('member.getpromocode') }}", // 設定你的路由 URL url: "{{ route('member.getpromocode') }}", // 設定你的路由 URL
type: 'POST' type: 'POST',
, data: { data: {
_token: '{{ csrf_token() }}', // CSRF token _token: '{{ csrf_token() }}', // CSRF token
id: id id: id
} },
, success: function(response) { success: function(response) {
$("#floatingInput").val(response.promocode); $("#floatingInput").val(response.promocode);
$("#floatingInput2").val(response.promocode);
console.log(response); // 顯示後端回應資料 console.log(response); // 顯示後端回應資料
} },
, error: function(xhr, status, error) { error: function(xhr, status, error) {
console.log(xhr.responseText); // 顯示錯誤資訊 console.log(xhr.responseText); // 顯示錯誤資訊
} }
}); });
}); });
$("#button-addon2").on('click', function() {
var id = "{{ Auth::guard('member')->user()->id }}";
$("#promocode").show();
console.log('id:', id);
// 發送 AJAX 請求
$.ajax({
url: "{{ route('member.morepromocode') }}", // 設定你的路由 URL
type: 'PATCH',
data: {
_token: '{{ csrf_token() }}', // CSRF token
id: id
},
success: function(response) {
$("#floatingInput").val(response.promocode);
$("#floatingInput2").val(response.promocode);
console.log(response); // 顯示後端回應資料
},
error: function(xhr, status, error) {
console.log(xhr.responseText); // 顯示錯誤資訊
}
});
});
</script> </script>
@endsection @endsection

View File

@ -158,16 +158,7 @@ class="col-12 text-center d-flex flex-wrap justify-content-center gap-4 row-gap-
<!-- BEGIN: Vendor JS--> <!-- BEGIN: Vendor JS-->
@section('scripts') @section('scripts')
<!-- Core JS --> <!-- Core JS -->
<!-- build:js assets/vendor/js/core.js -->
<script src="{{ asset('assets') }}/vendor/libs/jquery/jquery.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/popper/popper.js"></script>
<script src="{{ asset('assets') }}/vendor/js/bootstrap.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/node-waves/node-waves.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/perfect-scrollbar/perfect-scrollbar.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/hammer/hammer.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/i18n/i18n.js"></script>
<script src="{{ asset('assets') }}/vendor/libs/typeahead-js/typeahead.js"></script>
<script src="{{ asset('assets') }}/vendor/js/menu.js"></script>
<!-- endbuild --> <!-- endbuild -->
@ -182,7 +173,6 @@ class="col-12 text-center d-flex flex-wrap justify-content-center gap-4 row-gap-
<script src="{{ asset('assets') }}/vendor/libs/@form-validation/auto-focus.js"></script> <script src="{{ asset('assets') }}/vendor/libs/@form-validation/auto-focus.js"></script>
<!-- Main JS --> <!-- Main JS -->
<script src="../../assets/js/main.js"></script>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" class="dark-style layout-menu-fixed customizer-hide" dir="ltr" data-theme="theme-default" data-assets-path="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/assets/" data-base-url="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo-4" data-framework="laravel" data-template="blank-menu-theme-default-dark" data-style="dark"> <html lang="en" class="light-style layout-menu-fixed customizer-hide" dir="ltr" data-theme="theme-default" data-assets-path="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo/assets/" data-base-url="https://demos.pixinvent.com/materialize-html-laravel-admin-template/demo-4" data-framework="laravel" data-template="blank-menu-theme-default-dark" data-style="dark">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
@ -22,7 +22,7 @@
<!-- $isFront is used to append the front layout styles only on the front layout otherwise the variable will be blank --> <!-- $isFront is used to append the front layout styles only on the front layout otherwise the variable will be blank -->
<!-- BEGIN: Theme CSS--> <!-- BEGIN: Theme CSS-->
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com/css">
<link rel="preconnect" href="https://fonts.gstatic.com" cross origin> <link rel="preconnect" href="https://fonts.gstatic.com" cross origin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&ampdisplay=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&ampdisplay=swap" rel="stylesheet">

View File

@ -12,7 +12,7 @@
<meta name="description" content="" /> <meta name="description" content="" />
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/favicon.ico') }}" /> <link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/cafeg.ico') }}" />
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />

View File

@ -15,7 +15,7 @@
<meta name="description" content="" /> <meta name="description" content="" />
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/favicon.ico') }}" /> <link rel="icon" type="image/x-icon" href="{{ asset('assets/img/favicon/cafeg.ico') }}" />
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />

View File

@ -63,6 +63,7 @@
Route::get('validemail', [EmailController::class, 'validemail'])->name('validemail'); Route::get('validemail', [EmailController::class, 'validemail'])->name('validemail');
Route::post('sendemail', [EmailController::class, 'sendemail'])->name('sendemail'); Route::post('sendemail', [EmailController::class, 'sendemail'])->name('sendemail');
Route::get('page-profile', [MemberController::class, 'pageProfile'])->name('page-profile'); Route::get('page-profile', [MemberController::class, 'pageProfile'])->name('page-profile');
Route::patch('morepromocode', [PromoCodeController::class, 'morePromocode'])->name('morepromocode');
}); });