added notification

This commit is contained in:
armiejean 2025-04-16 01:02:22 +08:00
parent ab3688c606
commit 7564be9349
4 changed files with 169 additions and 41 deletions

View File

@ -1,30 +0,0 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Unioil - @yield('title')</title>
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<head>
<!-- ... other meta tags -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
<!-- ... other meta tags -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
</head>
@if(app()->environment('local'))
<script>
localStorage.setItem('debug', 'awesome-react-app:*');
</script>
@endif
</head>
<body>
<div id="root" class="app-container h-100">
@yield('content')
</div>
<script src="{{ asset('js/app.js') }}"></script>
@stack('scripts')
</body>
</html>

View File

@ -0,0 +1,95 @@
@extends('layouts.app')
@section('page_title', 'Add Notification')
@section('content')
<div class="card">
<div class="card-header border-0 bg-transparent">
<h5 class="mb-0 fw-bold text-dark">Add Notification</h5>
</div>
<div class="card-body">
<form id="addNotificationForm">
<div class="mb-3">
<label for="subject" class="form-label">Subject</label>
<input type="text" class="form-control" id="subject" required>
</div>
<div class="mb-3">
<label for="content" class="form-label">Content</label>
<textarea class="form-control" id="content" rows="4" required></textarea>
</div>
<div class="mb-3">
<label for="isScheduled" class="form-label">Is Scheduled</label>
<select class="form-select" id="isScheduled" required>
<option value="">Select option</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</div>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-outline-secondary me-2" onclick="window.location.href='/notification'">Cancel</button>
<button type="submit" class="btn btn-primary">Add Notification</button>
</div>
</form>
</div>
</div>
<style>
.card {
border-radius: 10px;
font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;
}
.card-header {
background-color: transparent;
}
.form-label {
font-weight: 500;
font-size: 0.9rem;
}
.form-control,
.form-select {
font-size: 0.9rem;
border-radius: 5px;
}
.btn-primary {
background-color: #E74610;
border-color: #E74610;
}
.btn-primary:hover {
background-color: #E74610;
border-color: #E74610;
}
</style>
<script>
document.getElementById('addNotificationForm').addEventListener('submit', function(e) {
e.preventDefault();
const subject = document.getElementById('subject').value;
const content = document.getElementById('content').value;
const isScheduled = document.getElementById('isScheduled').value;
if (!subject || !content || !isScheduled) {
alert('Please fill out all fields.');
return;
}
// Simulate adding notification (frontend-only)
const newNotification = {
id: Date.now(), // Unique ID based on timestamp
subject: subject,
content: content,
isScheduled: isScheduled === 'Yes' ? 'Scheduled' : 'Not Scheduled',
schedule: isScheduled === 'Yes' ? new Date().toISOString().slice(0, 16).replace('T', ' ') : '',
expiration: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 16).replace('T', ' ')
};
// Store in sessionStorage to simulate adding
let notifications = JSON.parse(sessionStorage.getItem('notifications') || '[]');
notifications.push(newNotification);
sessionStorage.setItem('notifications', JSON.stringify(notifications));
alert('Notification added successfully!');
window.location.href = '/notification';
});
</script>
@endsection

View File

@ -1,14 +1,73 @@
@extends('layouts.app')
@section('page_title', 'Notifications')
@section('page_title', 'Notification')
@section('content')
<div class="card" style="min-height: 500px;">
<div class="card-header">
<i class="fa-solid fa-bell" style="color:gray;"> Notifications</i>
</div>
<div class="card-body">
<p>This is the Notification page content.</p>
</div>
</div>
@php
$notifications = [
[
'id' => 1,
'subject' => 'Welcome Message',
'content' => 'Welcome to our platform! Get started today.',
'isScheduled' => 'Scheduled',
'schedule' => '2025-04-16 10:00',
'expiration' => '2025-04-30 23:59'
],
[
'id' => 2,
'subject' => 'System Update',
'content' => 'Scheduled maintenance on April 20th.',
'isScheduled' => 'Scheduled',
'schedule' => '2025-04-20 02:00',
'expiration' => '2025-04-21 02:00'
],
[
'id' => 3,
'subject' => 'Promotion Offer',
'content' => '50% off your next purchase this week!',
'isScheduled' => 'Not Scheduled',
'schedule' => '',
'expiration' => '2025-04-22 23:59'
],
[
'id' => 4,
'subject' => 'Account Reminder',
'content' => 'Please update your profile details.',
'isScheduled' => 'Scheduled',
'schedule' => '2025-04-18 09:00',
'expiration' => '2025-04-25 23:59'
]
];
@endphp
@include('components.table-component', [
'pageTitle' => 'Notification',
'data' => $notifications,
'columns' => [
['name' => 'ID', 'key' => 'id', 'sortable' => true],
['name' => 'Subject', 'key' => 'subject', 'sortable' => true],
['name' => 'Content', 'key' => 'content', 'sortable' => true],
['name' => 'Is Scheduled', 'key' => 'isScheduled', 'sortable' => true],
['name' => 'Schedule', 'key' => 'schedule', 'sortable' => true],
['name' => 'Expiration', 'key' => 'expiration', 'sortable' => true]
],
'showAddButton' => true,
'addButtonUrl' => '/add-notification',
'showCheckboxes' => false,
'showBatchDelete' => false,
'showEditModal' => false,
'showViewModal' => true
])
<script>
// Load notifications from sessionStorage
const storedNotifications = JSON.parse(sessionStorage.getItem('notifications') || '[]');
if (storedNotifications.length > 0) {
const tableConfig = window.tableConfig || {};
tableConfig.data = [...tableConfig.data, ...storedNotifications];
window.renderTable();
window.renderPagination();
}
</script>
@endsection

View File

@ -87,3 +87,7 @@ Route::get('/my-profile', function () {
Route::get('/add-user', function () {
return view('pages.user-management.add-user');
})->name('add-user');
Route::get('/add-notification', function () {
return view('pages.add-notification');
})->name('add-notification');