"app/Http/Livewire/Pages/Patch/ModalFormPatchFile.php" did not exist on "2a80d6b356f43d840cccbddf2b0143fdc826823e"
Commit 1097ea6b authored by Sarun Mungthanya's avatar Sarun Mungthanya
Browse files

add master file format

parent f8d82fd3
const roleSelect = {
role: {
valueField: "id",
searchField: "name",
options: [], // Initialize empty array for options
placeholder: "",
placeholder: "Select the role",
plugins: ['remove_button'],
closeAfterSelect: true,
onDelete: function (values) {
},
render: {
option: function (data, escape) {
if (!data.name) {
console.error("Invalid data for option:", data);
return "";
}
return `<div class="flex space-x-3">
<div class="flex flex-col">
<span>${escape(data.name)}</span>
</div>
</div>`;
},
item: function (data, escape) {
if (!data.name) {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white px-2 py-2 mb-2 mr-2">
<span class="mx-2">${escape(data.name)}</span>
</span>`;
},
},
},
};
const fetchRoles = (roleSelect) => {
return fetch('/get-roles')
.then(response => response.json())
.then(data => {
if (!data.roles || !Array.isArray(data.roles)) {
console.error("Invalid response format:", data);
return;
}
roleSelect.role.options = data.roles;
})
.catch(error => console.error('Error fetching role data:', error));
};
export { roleSelect, fetchRoles };
\ No newline at end of file
const userSelect = {
user: {
valueField: "id",
searchField: "username",
options: [], // Initialize empty array for options
placeholder: "Select the user",
plugins: ['remove_button'],
closeAfterSelect: true,
onDelete: function (values) {
},
render: {
option: function (data, escape) {
if (!data.username || !data.email) {
console.error("Invalid data for option:", data);
return "";
}
return `<div class="flex space-x-3">
<div class="flex flex-col">
<span>${escape(data.username)}</span>
<span class="text-xs opacity-80">${escape(data.email)}</span>
</div>
</div>`;
},
item: function (data, escape) {
if (!data.username) {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white px-2 py-2 mb-2 mr-2">
<span class="mx-2">${escape(data.username)}</span>
</span>`;
},
},
},
};
const fetchUsers = (userSelect) => {
return fetch('/get-users')
.then(response => response.json())
.then(data => {
if (!data.users || !Array.isArray(data.users)) {
console.error("Invalid response format:", data);
return;
}
userSelect.user.options = data.users;
})
.catch(error => console.error('Error fetching user data:', error));
};
export { userSelect, fetchUsers };
\ No newline at end of file
...@@ -9,7 +9,8 @@ const userSelect = { ...@@ -9,7 +9,8 @@ const userSelect = {
}, },
render: { render: {
option: function (data, escape) { option: function (data, escape) {
if (!data.name || !data.email) { if (!data.name) {
// console.log(data)
console.error("Invalid data for option:", data); console.error("Invalid data for option:", data);
return ""; return "";
} }
......
...@@ -37,6 +37,10 @@ ...@@ -37,6 +37,10 @@
<livewire:pages.exchangerate.exchangerate-index /> <livewire:pages.exchangerate.exchangerate-index />
@elseif ($currentContent === 'DischargePort') @elseif ($currentContent === 'DischargePort')
<livewire:pages.dischargeport.dischargeport-index /> <livewire:pages.dischargeport.dischargeport-index />
@elseif ($currentContent === 'MasterFile')
<livewire:pages.masterfile.masterfile-index />
@elseif ($currentContent === 'FormatFileMaster')
<livewire:pages.format-file-master.file-index />
@else @else
@livewire('code-comparer') @livewire('code-comparer')
@endif @endif
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
@mouseleave="timer = setTimeout(() => open = false, 100)" @mouseleave="timer = setTimeout(() => open = false, 100)"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white"> class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
<a href="/server-license">Server License Management</a> <a href="/server-license">Server License Management</a>
<ul x-cloak x-show="open" @click="open = false" @mouseenter="clearTimeout(timer)" {{-- <ul x-cloak x-show="open" @click="open = false" @mouseenter="clearTimeout(timer)"
@mouseleave="timer = setTimeout(() => open = false, 100)" @mouseleave="timer = setTimeout(() => open = false, 100)"
class="absolute left-0 mt-2 w-48 bg-white shadow-lg"> class="absolute left-0 mt-2 w-48 bg-white shadow-lg">
<li><a href="#" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Submenu 1</a> <li><a href="#" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Submenu 1</a>
...@@ -16,11 +16,24 @@ ...@@ -16,11 +16,24 @@
</li> </li>
<li><a href="#" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Submenu 3</a> <li><a href="#" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Submenu 3</a>
</li> </li>
</ul> </ul> --}}
</li> </li>
<li x-data="{ open: false }" <li x-data="{ open: false, timer: null }" @click.away="open = false" @mouseenter="open = true; clearTimeout(timer)"
@mouseleave="timer = setTimeout(() => open = false, 100)"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white"> class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
<a href="/patch">Patch</a> <span class="cursor-pointer" @click.stop>Patch</span>
<ul x-cloak x-show="open" @click.stop="open = false" @mouseleave="open = false"
class="absolute left-0 mt-2 w-48 bg-white shadow-lg">
<li><a href="/patch" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Create
Patch</a></li>
<li><a href="/master-file" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Create
MasterFile</a></li>
<li><a href="/exchange-rate" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Create
Exchangerate</a></li>
<li><a href="/discharge-port" class="block px-4 py-2 text-gray-700 hover:bg-stone-100">Create
Discharge Port</a></li>
</ul>
</li> </li>
<li x-data="{ open: false, timer: null }" @click.away="open = false" @mouseenter="open = true; clearTimeout(timer)" <li x-data="{ open: false, timer: null }" @click.away="open = false" @mouseenter="open = true; clearTimeout(timer)"
@mouseleave="timer = setTimeout(() => open = false, 100)" @mouseleave="timer = setTimeout(() => open = false, 100)"
...@@ -39,16 +52,13 @@ ...@@ -39,16 +52,13 @@
</li> </li>
<li x-data="{ open: false }" <li x-data="{ open: false }"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white"> class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
<a href="/parameter">Parameter</a> <a href="/format-file-master">Format File Master</a>
</li> </li>
<li x-data="{ open: false }" <li x-data="{ open: false }"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white"> class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
<a href="/exchange-rate">Create Patch Exchangerate</a> <a href="/parameter">Parameter</a>
</li>
<li x-data="{ open: false }"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
<a href="/discharge-port">Create Discharge Port</a>
</li> </li>
<li x-data="{ open: false, timer: null }" @click.away="open = false" @mouseenter="open = true; clearTimeout(timer)" <li x-data="{ open: false, timer: null }" @click.away="open = false" @mouseenter="open = true; clearTimeout(timer)"
@mouseleave="timer = setTimeout(() => open = false, 100)" @mouseleave="timer = setTimeout(() => open = false, 100)"
class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white"> class="relative px-2 py-1 rounded text-gray-700 hover:bg-primary-focus hover:text-white">
......
<div class="grid grid-cols-1 gap-4 sm:gap-5 lg:gap-6">
<form wire:submit.prevent="save">
@csrf
<div class="card pb-4">
<div class="my-3 flex h-8 items-center justify-between px-4 sm:px-5">
<h2 class="font-medium tracking-wide text-slate-700 line-clamp-1 dark:text-navy-100 lg:text-base">
<i class="fa-solid fa-edit text-primary"></i> Create
</h2>
</div>
<div class="w-3/4 px-3 space-y-3 m-auto mb-4">
<div class="flex items-center">
<label class="w-2/12 mr-2">
<span>Name :</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="name"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="" name="name" type="text" value="{{ old('name') }}" />
@error('name')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
<div class="flex items-center">
@if ($file)
<div class="mt-2 text-sm text-slate-600 dark:text-slate-300 mr-4">
Uploaded File: {{ $file->getClientOriginalName() }}
</div>
@endif
<span wire:loading>
<svg class="animate-spin h-5 w-5 text-primary m-3" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor"
stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.964 7.964 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
</path>
</svg>
</span>
<label for="file-upload"
class="btn bg-slate-150 font-medium text-slate-800 hover:bg-slate-200 focus:bg-slate-200 active:bg-slate-200/80 dark:bg-navy-500 dark:text-navy-50 dark:hover:bg-navy-450 dark:focus:bg-navy-450 dark:active:bg-navy-450/90"
aria-label="Upload File">
<input tabindex="-1" id="file-upload" type="file" wire:model="file"
class="pointer-events-none absolute inset-0 h-full w-full opacity-0" />
<div class="flex items-center space-x-2">
<svg xmlns="http://www.w3.org/2000/svg" class="size-5" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" />
</svg>
<span>Choose File</span>
</div>
@error('file')
<span class="error">{{ $message }}</span>
@enderror
</label>
</div>
</div>
<div class="grid grid-cols-12 justify-center space-x-2 pt-4">
<a href="/format-file-master"
class="col-start-4 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90">
Cancel
</a>
<button type="submit"
class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90">
Save
</button>
</div>
</div>
</form>
</div>
<div class="border-0 shadow-none">
` <div wire:loading.class="" wire:loading.class.remove="hidden" wire:target="save"
class="absolute inset-0 items-center justify-center z-50 bg-slate-50 dark:bg-navy-900 hidden">
<div class="flex justify-center items-center ">
<div class="items-center h-100vh" style="align-content: center;">
<div class="animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-blue-500"></div>
</div>
</div>
</div>
<div class="m-2">
@if ($action === 'list')
@if ($message)
<div class="alert alert-success">
<div wire:ignore x-data="{ show: true }" x-init="setTimeout(() => show = false, 3000)"
x-show.transition.duration.500ms="show"
class="fixed top-5 right-5 z-50 bg-green-500 text-white py-2 px-4 rounded-md shadow-lg">
{{ $message }}
</div>
</div>
@endif
<div class="grid grid-cols-1 gap-4 sm:gap-5 lg:gap-6 bg-main-container rounded-md">
<div class="pb-4">
<div class="my-3 flex h-8 items-center justify-between px-4 sm:px-5">
<h2 class="text-2xl text-black ">
Master File Format
</h2>
</div>
<div class="flex justify-between">
<div class="px-2 ml-4">
<button type="button"
class="py-2 px-3 bg-primary rounded-md text-white hover:bg-primary-focus"
wire:click="showAddForm">Add</button>
</div>
<div class="inline-flex flex-initial">
<div x-data="{ isInputActive: true }">
<div class="flex gap-4 px-5 items-center">
<button @click="isInputActive = !isInputActive"
class="btn h-8 w-10 rounded-full p-0 hover:bg-primary-focus hover:text-main-container active:text-main-container focus:text-main-container primary-focus hover:text-main-container active:text-main-container focus:text-main-container dark:hover:bg-navy-300/20 dark:focus:bg-navy-300/20 dark:active:bg-navy-300/25">
<svg xmlns="http://www.w3.org/2000/svg" class="h-4.5 w-4.5" fill="none"
viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
</svg>
</button>
<span class="w-64" x-show="isInputActive === true">
<input
class="form-input h-9 peer w-full rounded-lg border border-slate-300 bg-transparent px-3 py-2 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="Search Keyword" type="text" wire:model.defer="keyword" />
</span>
<span class="w-52" x-show="isInputActive === true">
<select wire:model.defer="searchSelected"
class="form-select h-9 w-full rounded-lg border border-slate-300 bg-main-container px-3 py-2 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:bg-navy-700 dark:hover:border-navy-400 dark:focus:border-accent">
@foreach ($searchBy as $key => $by)
<option value="{{ $key }}">{{ $by }}</option>
@endforeach
</select>
</span>
<button type="button"
class="bg-primary text-white px-4 py-2 rounded hover:bg-primary-focus"
wire:click="search">Search</button>
</div>
</div>
</div>
</div>
<div class="mx-3 mt-3 px-4">
<div class="is-scrollbar-hidden min-w-full table-responsive" x-data="pages.tables.initExample1">
<table class="is-hoverable table w-full text-left border-b">
<thead>
<tr>
<th
class="whitespace-nowrap rounded-tl-lg bg-slate-300 px-4 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-5">
#
</th>
<th
class="whitespace-nowrap bg-slate-300 px-2 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-2">
Name
</th>
<th
class="whitespace-nowrap bg-slate-300 px-2 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-2">
File
</th>
<th
class="whitespace-nowrap bg-slate-300 px-2 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-2">
Date
</th>
<th
class="whitespace-nowrap bg-slate-300 px-2 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-2">
Timestamp
</th>
<th
class="whitespace-nowrap rounded-tr-lg bg-slate-300 px-2 py-3 font-semibold uppercase text-black dark:bg-navy-800 dark:text-navy-100 lg:px-2">
Action
</th>
</tr>
</thead>
<tbody>
@foreach ($results as $formatFile)
<tr
class="border-y border-transparent border-b-slate-200 dark:border-b-navy-500">
<td class="whitespace-nowrap px-4 py-3 sm:px-5">
<label class="inline-flex items-center space-x-2">
<input
class="form-checkbox is-basic h-4 w-4 rounded border-slate-400/70 checked:bg-primary checked:border-primary focus:border-primary dark:bg-navy-900 dark:border-navy-500 dark:checked:bg-accent dark:checked:border-accent dark:hover:border-accent dark:focus:border-accent"
type="checkbox" wire:model.defer="selectedPatch"
value="{{ $formatFile->formatservice_ID }}" />
</label>
</td>
<td class="whitespace-nowrap px-1 py-3 sm:px-2">{{ $formatFile->name }}</td>
<td class="whitespace-nowrap px-1 py-3 sm:px-2">
{{ \Illuminate\Support\Str::limit($formatFile->file, 100) }}</td>
<td class="whitespace-nowrap px-1 py-3 sm:px-2">{{ $formatFile->date }}</td>
<td class="whitespace-nowrap px-1 py-3 sm:px-2">{{ $formatFile->timestamp }}
</td>
<td class="whitespace-nowrap px-1 py-3 sm:px-2">
<div class="flex justify-center space-x-2">
<a wire:click="showpatchEditForm({{ $formatFile->formatservice_ID }})"
class="btn h-8 w-8 p-0 hover:text-main-container active:text-main-container hover:primary-focus focus:primary-focus active:bg-info/25">
<i class="fa fa-edit"></i>
</a>
<a wire:click="showDeleteModal({{ $formatFile->formatservice_ID }})"
class="btn h-8 w-8 p-0 hover:text-main-container active:text-main-container hover:primary-focus focus:primary-focus active:bg-info/25">
<i class="fa fa-trash"></i>
</a>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<livewire:delete-modal />
{{ $results->links('livewire.paginate-custom') }}
</div>
</div>
</div>
@elseif($action === 'add')
<livewire:pages.format-file-master.file-create />
@elseif($action === 'edit')
<livewire:pages.format-file-master.file-edit :editId="$editId" />
@endif
@push('script')
<script>
console.log("ddd")
</script>
@endpush
</div>
</div>
<div class="grid grid-cols-1 gap-4 sm:gap-5 lg:gap-6"x-data="{ changePassword: @entangle('changePassword'), tomGReady: false }" x-show="tomGReady">
<form wire:submit.prevent="submitEditForm">
@csrf
<div class="card pb-4">
<div class="my-3 flex h-8 items-center justify-between px-4 sm:px-5">
<h2 class="font-medium tracking-wide text-slate-700 line-clamp-1 dark:text-navy-100 lg:text-base">
<i class="fa-solid fa-edit text-primary"></i> Edit User
</h2>
</div>
<div class="w-3/4 px-3 space-y-3 m-auto mb-4">
<div class="flex items-center">
<label class="w-2/12 mr-2">
<span>Name:</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="name"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="Name" name="name" type="text" />
@error('name')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
<div class="flex items-center">
<label class="w-2/12 mr-2">
<span>Email:</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="email"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="Email" name="email" type="email" />
@error('email')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
<div class="flex items-center " wire:ignore>
<span class="w-2/12 mr-2">Add Groups:</span>
<span class="relative flex w-full">
<input class="mt-1.5 relative flex w-1/2" wire:ignore x-data="{ groupLists: @entangle('group_lists') }"
x-init="groupLists = @js($userGroups);
const tempGroup = pages.groupSelect;
pages.fetchGroups(tempGroup).then(() => {
$el._x_tom = new Tom($el, {
...tempGroup.group,
onChange: (value) => {
groupLists = value;
}
});
$el._x_tom.setValue(groupLists);
tomGReady = true
})" type="text">
</span>
</div>
<!-- Toggle Button for Change Password -->
<div class="flex items-center">
<button type="button" @click="changePassword = !changePassword"
class="btn border bg-gray-300 border-gray-300 font-medium text-gray-800 hover:text-white focus:text-white hover:bg-gray-500 focus:bg-gray-500 active:bg-gray-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90">
Change Password
</button>
</div>
<!-- Password Fields (Hidden by Default) -->
<div x-show="changePassword">
<div class="flex items-center mt-4">
<label class="w-2/12 mr-2">
<span>Current Password:</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="current_password"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="Current Password" name="current_password" type="password" />
@error('current_password')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
<div class="flex items-center mt-4">
<label class="w-2/12 mr-2">
<span>New Password:</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="new_password"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="New Password" name="new_password" type="password" />
@error('new_password')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
<div class="flex items-center mt-4">
<label class="w-2/12 mr-2">
<span>Confirm New Password:</span>
</label>
<span class="relative flex w-full">
<input wire:model.defer="new_password_confirmation"
class="form-input w-2/4 rounded-lg border border-slate-300 bg-transparent px-3 py-2 text-xs pl-4 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
placeholder="Confirm New Password" name="new_password_confirmation" type="password" />
@error('new_password_confirmation')
<span class="text-red-500 text-md self-center ml-4">{{ $message }}</span>
@enderror
</span>
</div>
</div>
</div>
<div class="grid grid-cols-12 justify-center space-x-2 pt-4">
<span wire:click="goBack"
class="col-start-4 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90">
Cancel
</span>
<button type="submit"
class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90">
Save
</button>
</div>
</div>
</form>
</div>
<div class="bg-main-container">
<link href="{{ asset('css/pages/patch.css') }}" rel="stylesheet">
<div class="max-w-full mx-auto px-5 ">
<h2 class="text-2xl text-black ">
Patch Management
</h2>
<a type="button" href="/patch" class="btn mx-auto m-3 text-white bg-primary px-3 py-2">Back</a>
@if (session()->has('message'))
<div class="alert alert-success">
{{ session('message') }}
</div>
@endif
<div class="flex flex-wrap -mx-3 ">
<div class="w-full md:w-1/2 px-3 mb-6 ">
<div x-data="{
searchQuery: 'SPN64Bits',
selectedBranch: @entangle('selectedBranch'),
selectedProject: @entangle('selectedProject'),
projects: @entangle('projects').defer,
branches: @entangle('branches').defer,
fileChanges: @entangle('fileChanges').defer,
isLoading: false,
fetchProjects() {
this.isLoading = true;
this.selectedProject = '60';
this.$wire.set('searchProject', this.searchQuery);
},
fetchBranches() {
if (this.selectedProject) {
this.$wire.set('selectedProject', this.selectedProject);
}
}
}" @projects-fetched.window="isLoading = false"
@files-fetched.window="isLoading = false" x-init="fetchProjects"
class="p-6 bg-white shadow-lg rounded-lg ">
</style>
<div class="">
<div class="flex mb-3">
<label for="searchProject" class="form-label text-lg mr-2">Search Project:</label>
<input type="text" @input.debounce.500ms="fetchProjects"
class="form-input h-8 ml-2 rounded-lg border border-slate-300 bg-transparent px-3 py-2 placeholder:text-slate-400/70 hover:border-slate-400 focus:border-primary dark:border-navy-450 dark:hover:border-navy-400 dark:focus:border-accent"
id="searchProject" placeholder="Enter project name" x-model="searchQuery">
</div>
</div>
{{-- <div x-show="!isLoading && projects.length > 0" class="grid grid-cols-3"> --}}
<div x-show="true" class="">
<div class="flex mb-3">
<label for="project" class="form-label text-lg mr-2">Select Project:</label>
<div x-show="isLoading" class="mx-auto mt-2">
<span>Loading...</span>
</div>
<select x-model="selectedProject" x-show="!isLoading" @change="fetchBranches" id="project"
class="ml-2 w-64 h-8 mt-1 border border-gray-300 rounded-md">
<option value="">Choose Project</option>
<template x-for="project in projects" :key="project.id">
<option :value="project.id" x-text="project.name"></option>
</template>
</select>
</div>
</div>
{{-- <template x-if="selectedProject"> --}}
{{-- <template x-if="true">
<div class="mb-3">
<label for="branch" class="form-label w-64 text-lg mr-2">Select Branch:</label>
<select x-model="selectedBranch" id="branch"
class="ml-2 w-64 h-8 mt-1 border border-gray-300 rounded-md">
<option value="">Choose Branch</option>
<template x-for="branch in branches" :key="branch.name">
<option :value="branch.name" x-text="branch.name"></option>
</template>
</select>
</div>
</template> --}}
<div class="mb-3">
<input type="text" value="c5d80f79" wire:model.defer="startCommit" placeholder="Start Commit"
class="placeholder:text-sm text-lg mb-2 form-input rounded-lg border border-slate-300 px-2">
<input type="text" value="254e87" wire:model.defer="endCommit" placeholder="End Commit"
class="placeholder:text-sm text-lg mb-2 form-input rounded-lg border border-slate-300 px-2">
<div class="text-center">
<button type="button" wire:click="getChangedFiles"
class="btn mx-auto mt-3 text-white bg-primary px-3 py-2">Get
Changed
Files</button>
</div>
</div>
<div wire:loading.class="flex" wire:loading.class.remove="hidden"
class="flex inset-0 items-center justify-center z-50 bg-slate-50 dark:bg-navy-900 hidden">
<div class="app-preloader grid h-full w-full place-content-center">
<div class="app-preloader-inner relative inline-block h-48 w-48"></div>
</div>
</div>
{{-- <template x-if="Object.keys(fileChanges).length > 0">
<div class="mt-5 bg-gray-100 p-4 rounded-lg shadow">
<h3 class="text-lg mb-3">Changed Files</h3>
<div class="tree">
<ul x-html="renderTree(fileChanges)"></ul>
</div>
</div>
</template> --}}
<div class="mt-5 bg-gray-100 p-4 rounded-lg shadow">
<h3 class="text-lg mb-3">Changed Files</h3>
<div class="file-tree">
<ul class='pl-4 mt-1'>
@foreach ($fileChanges as $name => $item)
@include('livewire.pages.patch.tree-item', [
'name' => $name,
'item' => $item,
])
@endforeach
</ul>
</div>
</div>
</div>
</div>
<div class="w-full md:w-1/2 px-3 mb-6">
<div class="p-6 bg-white shadow-md rounded-lg rounded-lg ">
<h2 class="text-2xl text-black font-bold mb-4">Create Patch</h2>
<div class="mb-4">
<label for="patch_name" class="block text-gray-700">Patch name</label>
<input type="text" id="patch_name" class="w-full mt-1 p-2 border border-gray-300 rounded-md"
wire:model.defer="PATCHNAME">
</div>
<div class="mb-4">
<label for="patch_date" class="block text-gray-700">Patch date</label>
<input type="datetime-local" id="patch_date"
class="w-full mt-1 p-2 border border-gray-300 rounded-md" wire:model.defer="PDATE">
</div>
<div class="mb-4">
<label for="php_version" class="block text-gray-700">PHP Version</label>
<select id="php_version" wire:model.defer="PHP_VERSION"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
<option value="0">ALL</option>
<option value="1">32Bits (PHP 5.2)</option>
<option value="2">64Bits (PHP 5.6)</option>
<option value="3">64Bits (PHP 8.0)</option>
</select>
</div>
<div class="mb-4">
<label for="patch_level" class="block text-gray-700">Patch level</label>
<input type="text" id="patch_level" class="w-full mt-1 p-2 border border-gray-300 rounded-md"
wire:model.defer="PLEVEL">
</div>
<div class="mb-4">
<label for="code" class="block text-gray-700">Patch Code</label>
<input type="text" id="code" wire:model.defer="PCODE"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
</div>
<div class="mb-4">
<label for="major_version" class="block text-gray-700">Major version</label>
<input type="text" id="major_version"
class="w-full mt-1 p-2 border border-gray-300 rounded-md"
wire:model.defer="MAJOR_VERSION">
</div>
<div class="mb-4">
<label for="pdesc" class="block text-gray-700">Patch Desciption</label>
<input type="text" id="pdesc" wire:model.defer="PDESC"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
</div>
<div class="mb-4">
<label for="remark" class="block text-gray-700">Remark</label>
<input type="text" id="remark" wire:model.defer="Remark"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
</div>
<div class="mb-4">
<label for="owner" class="block text-gray-700">Owner</label>
<input type="text" id="owner" wire:model.defer="POWNER"
class="w-full mt-1 p-2 border border-gray-300 rounded-md" value="aom">
</div>
<div class="mb-4">
<label for="papprovedate" class="block text-gray-700">Papprovedate</label>
<input type="datetime-local" id="papprovedate" wire:model.defer="PAPPROVEDATE"
class="w-full mt-1 p-2 border border-gray-300 rounded-md" value="2024-03-27T15:00">
</div>
<div class="mb-4">
<label for="ptype" class="block text-gray-700">Ptype</label>
<input type="text" id="ptype" wire:model.defer="PTYPE"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
</div>
<div class="mb-4">
<label for="specific_customer" class="block text-gray-700">Specific Customer</label>
<input type="text" id="specific_customer"
class="w-full mt-1 p-2 border border-gray-300 rounded-md">
</div>
<div class="mb-4">
<label for="patchcode" class="block text-gray-700">Patchcode</label>
<textarea id="patchcode" wire:model.defer="PATCHCODE" class="w-full mt-1 p-2 border border-gray-300 rounded-md"
rows="5">pathcode</textarea>
</div>
<div class="mb-4">
<label for="uninstall" class="block text-gray-700">Uninstall</label>
<input type="text" id="uninstall" wire:model.defer="UNINSTALL"
class="w-full mt-1 p-2 border border-gray-300 rounded-md" value="$b=1">
</div>
<div class="mb-4">
<label for="patchcode_server" class="block text-gray-700">Patchcode_server</label>
<textarea id="patchcode_server" wire:model.defer="PATCHCODE_SERVER"
class="w-full mt-1 p-2 border border-gray-300 rounded-md" rows="5"></textarea>
</div>
<div class="flex justify-center">
<button type="button" wire:click="save"
class="bg-stone-700 text-white px-4 py-2 rounded-md hover:bg-blue-600">Save</button>
</div>
</div>
</div>
</div>
<livewire:pages.patch.modal-edit-code>
</div>
...@@ -122,7 +122,7 @@ ...@@ -122,7 +122,7 @@
</th> </th>
<th <th
class="whitespace-nowrap bg-slate-200 px-4 py-3 font-semibold uppercase text-slate-800 dark:bg-navy-800 dark:text-navy-100 lg:px-5"> class="whitespace-nowrap bg-slate-200 px-4 py-3 font-semibold uppercase text-slate-800 dark:bg-navy-800 dark:text-navy-100 lg:px-5">
group Role
</th> </th>
<th <th
class="whitespace-nowrap bg-slate-200 px-4 py-3 font-semibold uppercase text-slate-800 dark:bg-navy-800 dark:text-navy-100 lg:px-5"> class="whitespace-nowrap bg-slate-200 px-4 py-3 font-semibold uppercase text-slate-800 dark:bg-navy-800 dark:text-navy-100 lg:px-5">
......
...@@ -42,32 +42,8 @@ ...@@ -42,32 +42,8 @@
</div> </div>
<div class="tabs flex flex-col"> <div class="tabs flex flex-col">
<div x-data="{ activeTab: 'Import' }" class="tabs flex flex-col"> <div x-data="{ activeTab: 'Import' }" class="tabs flex flex-col">
<div
class="is-scrollbar-hidden overflow-x-auto bg-slate-200 text-slate-600 dark:bg-navy-800 dark:text-navy-200 p-2"> <div class="tab-content pt-4 px-2 mt-2 pb-2">
<div class="tabs-list flex">
<button @click="activeTab = 'Center'" type="button"
:class="activeTab === 'Center' ? 'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Center
</button>
<button @click="activeTab = 'Import'" type="button"
:class="activeTab === 'Import' ?
'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Import
</button>
<button @click="activeTab = 'Export'" type="button"
:class="activeTab === 'Export' ?
'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Export
</button>
</div>
</div>
<div x-show="activeTab === 'Center'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out" <div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]" x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]"> x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
...@@ -81,6 +57,12 @@ ...@@ -81,6 +57,12 @@
'Group Management', 'Group Management',
'Company Management', 'Company Management',
'Company Type Management', 'Company Type Management',
'Server License Management',
'Patch Management',
'Send Patch Management',
'Parameter Management',
'Patch Exchange Rate Management',
'Patch Discharge Port Management',
]; ];
@endphp @endphp
...@@ -145,158 +127,10 @@ ...@@ -145,158 +127,10 @@
</div> </div>
</div> </div>
</div> </div>
<div x-show="activeTab === 'Import'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
<div
class="grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-3 lg:gap-6 xl:grid-cols-3">
@php
$currentGroup = '';
$tabGroup2 = [
'File Management Import',
'Header Management Import',
'Detail Management Import',
'Item Management Import',
'Flight Management Import',
];
@endphp
@foreach ($permissions as $permission)
@if (!in_array($permission['permission_group_name'], $tabGroup2))
@continue
@endif
@if ($permission['permission_group_name'] !== $currentGroup)
@if ($currentGroup !== '')
</div>
</div>
@endif
<div x-data="{
allChecked: false,
permissionList: @entangle('permission_lists'),
toggleAll(group) {
this.allChecked = !this.allChecked;
document.querySelectorAll(`.permissionGroup[data-group='${group}'] input[type='checkbox']`).forEach(checkbox => {
checkbox.checked = this.allChecked;
if (this.allChecked) {
if (!this.permissionListAlpine.includes(checkbox.value)) {
this.permissionListAlpine.push(checkbox.value);
}
} else {
this.permissionListAlpine = this.permissionListAlpine.filter(id => id != checkbox.value);
}
});
},
toggleIndividual(event) {
event.stopPropagation();
this.allChecked = this.permissionListAlpine.length === @json($permissions->count());
}
}"
class="card grow items-center p-4 sm:p-5 cursor-pointer permissionGroup"
data-group="{{ $permission['permission_group_name'] }}"
@click="toggleAll('{{ $permission['permission_group_name'] }}')">
<h3 class="pt-3 text-lg font-medium text-slate-700 dark:text-navy-100">
{{ $permission['permission_group_name'] }}
</h3>
<div class="my-4 h-px w-full bg-slate-200 dark:bg-navy-500"></div>
<div class="grow space-y-4 permission-list">
@endif
<div class="flex items-center space-x-4">
<label class="inline-flex items-center space-x-2" @click="toggleIndividual($event)">
<input
class="form-switch h-5 w-10 rounded-full bg-slate-300 before:rounded-full before:bg-slate-50 checked:!bg-primary checked:before:bg-white dark:bg-navy-900 dark:before:bg-navy-300 dark:checked:before:bg-white"
type="checkbox" x-model="permissionListAlpine"
value="{{ $permission['id'] }}" />
<span>{{ $permission['name'] }}</span>
</label>
</div>
@php $currentGroup = $permission['permission_group_name']; @endphp
@endforeach
@if ($currentGroup !== '')
</div>
@endif
</div>
</div>
</div>
</div>
<div x-show="activeTab === 'Export'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-3 lg:gap-6 xl:grid-cols-3">
@php
$currentGroup = '';
$tabGroup3 = [
'File Management Export',
'Header Management Export',
'Detail Management Export',
'Item Management Export',
'Flight Management Export',
];
@endphp
@foreach ($permissions as $permission)
@if (!in_array($permission['permission_group_name'], $tabGroup3))
@continue
@endif
@if ($permission['permission_group_name'] !== $currentGroup)
@if ($currentGroup !== '')
</div>
</div>
@endif
<div x-data="{
allChecked: false,
permissionList: @entangle('permission_lists'),
toggleAll(group) {
this.allChecked = !this.allChecked;
document.querySelectorAll(`.permissionGroup[data-group='${group}'] input[type='checkbox']`).forEach(checkbox => {
checkbox.checked = this.allChecked;
if (this.allChecked) {
if (!this.permissionListAlpine.includes(checkbox.value)) {
this.permissionListAlpine.push(checkbox.value);
}
} else {
this.permissionListAlpine = this.permissionListAlpine.filter(id => id != checkbox.value);
}
});
},
toggleIndividual(event) {
event.stopPropagation();
this.allChecked = this.permissionListAlpine.length === @json($permissions->count());
}
}" class="card grow items-center p-4 sm:p-5 cursor-pointer permissionGroup"
data-group="{{ $permission['permission_group_name'] }}"
@click="toggleAll('{{ $permission['permission_group_name'] }}')">
<h3 class="pt-3 text-lg font-medium text-slate-700 dark:text-navy-100">
{{ $permission['permission_group_name'] }}
</h3>
<div class="my-4 h-px w-full bg-slate-200 dark:bg-navy-500"></div>
<div class="grow space-y-4 permission-list">
@endif
<div class="flex items-center space-x-4">
<label class="inline-flex items-center space-x-2" @click="toggleIndividual($event)">
<input
class="form-switch h-5 w-10 rounded-full bg-slate-300 before:rounded-full before:bg-slate-50 checked:!bg-primary checked:before:bg-white dark:bg-navy-900 dark:before:bg-navy-300 dark:checked:before:bg-white"
type="checkbox" x-model="permissionListAlpine" value="{{ $permission['id'] }}" />
<span>{{ $permission['name'] }}</span>
</label>
</div>
@php $currentGroup = $permission['permission_group_name']; @endphp
@endforeach
@if ($currentGroup !== '')
</div>
@endif
</div> </div>
</div> </div>
</div> </form>
</div> <div class="grid grid-cols-6 justify-center space-x-2 pt-4">
</div>
</form>
<div class="grid grid-cols-6 justify-center space-x-2 pt-4">
<span wire:click="goBack" <span wire:click="goBack"
class="col-start-3 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90"> class="col-start-3 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90">
Cancel Cancel
...@@ -305,5 +139,5 @@ ...@@ -305,5 +139,5 @@
class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90"> class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90">
Save Save
</button> </button>
</div> </div>
</div> </div>
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
$jsonPermissionLists = json_encode($permission_lists ?? []); $jsonPermissionLists = json_encode($permission_lists ?? []);
@endphp @endphp
<div class="grid grid-cols-1 gap-4 sm:gap-5 lg:gap-6" <div class="grid grid-cols-1 gap-4 sm:gap-5 lg:gap-6" x-data="{
x-data="{
permissionListAlpine: {!! $jsonPermissionLists !!}, permissionListAlpine: {!! $jsonPermissionLists !!},
submit() { submit() {
@this.call('submitEditForm', this.permissionListAlpine); @this.call('submitEditForm', this.permissionListAlpine);
} }
}"> }">
<form wire:submit.prevent=""> <form wire:submit.prevent="">
@csrf @csrf
...@@ -47,32 +46,8 @@ ...@@ -47,32 +46,8 @@
</div> </div>
<div class="tabs flex flex-col"> <div class="tabs flex flex-col">
<div x-data="{ activeTab: 'Import' }" class="tabs flex flex-col"> <div x-data="{ activeTab: 'Import' }" class="tabs flex flex-col">
<div
class="is-scrollbar-hidden overflow-x-auto bg-slate-200 text-slate-600 dark:bg-navy-800 dark:text-navy-200 p-2"> <div class="tab-content pt-4 px-2 mt-2 pb-2">
<div class="tabs-list flex">
<button @click="activeTab = 'Center'" type="button"
:class="activeTab === 'Center' ? 'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Center
</button>
<button @click="activeTab = 'Import'" type="button"
:class="activeTab === 'Import' ?
'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Import
</button>
<button @click="activeTab = 'Export'" type="button"
:class="activeTab === 'Export' ?
'bg-white shadow dark:bg-navy-500 dark:text-navy-100' :
'hover:text-slate-800 focus:text-slate-800 dark:hover:text-navy-100 dark:focus:text-navy-100'"
class="btn shrink-0 space-x-2 px-3 py-1.5 font-medium">
Export
</button>
</div>
</div>
<div x-show="activeTab === 'Center'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out" <div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]" x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]"> x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
...@@ -86,6 +61,12 @@ ...@@ -86,6 +61,12 @@
'Group Management', 'Group Management',
'Company Management', 'Company Management',
'Company Type Management', 'Company Type Management',
'Server License Management',
'Patch Management',
'Send Patch Management',
'Parameter Management',
'Patch Exchange Rate Management',
'Patch Discharge Port Management',
]; ];
@endphp @endphp
...@@ -150,158 +131,10 @@ ...@@ -150,158 +131,10 @@
</div> </div>
</div> </div>
</div> </div>
<div x-show="activeTab === 'Import'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
<div
class="grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-3 lg:gap-6 xl:grid-cols-3">
@php
$currentGroup = '';
$tabGroup2 = [
'File Management Import',
'Header Management Import',
'Detail Management Import',
'Item Management Import',
'Flight Management Import',
];
@endphp
@foreach ($permissions as $permission)
@if (!in_array($permission['permission_group_name'], $tabGroup2))
@continue
@endif
@if ($permission['permission_group_name'] !== $currentGroup)
@if ($currentGroup !== '')
</div>
</div>
@endif
<div x-data="{
allChecked: false,
permissionList: @entangle('permission_lists'),
toggleAll(group) {
this.allChecked = !this.allChecked;
document.querySelectorAll(`.permissionGroup[data-group='${group}'] input[type='checkbox']`).forEach(checkbox => {
checkbox.checked = this.allChecked;
if (this.allChecked) {
if (!this.permissionListAlpine.includes(checkbox.value)) {
this.permissionListAlpine.push(checkbox.value);
}
} else {
this.permissionListAlpine = this.permissionListAlpine.filter(id => id != checkbox.value);
}
});
},
toggleIndividual(event) {
event.stopPropagation();
this.allChecked = this.permissionListAlpine.length === @json($permissions->count());
}
}"
class="card grow items-center p-4 sm:p-5 cursor-pointer permissionGroup"
data-group="{{ $permission['permission_group_name'] }}"
@click="toggleAll('{{ $permission['permission_group_name'] }}')">
<h3 class="pt-3 text-lg font-medium text-slate-700 dark:text-navy-100">
{{ $permission['permission_group_name'] }}
</h3>
<div class="my-4 h-px w-full bg-slate-200 dark:bg-navy-500"></div>
<div class="grow space-y-4 permission-list">
@endif
<div class="flex items-center space-x-4">
<label class="inline-flex items-center space-x-2" @click="toggleIndividual($event)">
<input
class="form-switch h-5 w-10 rounded-full bg-slate-300 before:rounded-full before:bg-slate-50 checked:!bg-primary checked:before:bg-white dark:bg-navy-900 dark:before:bg-navy-300 dark:checked:before:bg-white"
type="checkbox" x-model="permissionListAlpine"
value="{{ $permission['id'] }}" />
<span>{{ $permission['name'] }}</span>
</label>
</div>
@php $currentGroup = $permission['permission_group_name']; @endphp
@endforeach
@if ($currentGroup !== '')
</div>
@endif
</div>
</div>
</div>
</div>
<div x-show="activeTab === 'Export'" class="tab-content pt-4 bg-slate-200 px-2 mt-2 pb-2">
<div x-transition:enter="transition-all duration-500 ease-in-out"
x-transition:enter-start="opacity-0 [transform:translate3d(1rem,0,0)]"
x-transition:enter-end="opacity-100 [transform:translate3d(0,0,0)]">
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-5 lg:grid-cols-3 lg:gap-6 xl:grid-cols-3">
@php
$currentGroup = '';
$tabGroup3 = [
'File Management Export',
'Header Management Export',
'Detail Management Export',
'Item Management Export',
'Flight Management Export',
];
@endphp
@foreach ($permissions as $permission)
@if (!in_array($permission['permission_group_name'], $tabGroup3))
@continue
@endif
@if ($permission['permission_group_name'] !== $currentGroup)
@if ($currentGroup !== '')
</div>
</div>
@endif
<div x-data="{
allChecked: false,
permissionList: @entangle('permission_lists'),
toggleAll(group) {
this.allChecked = !this.allChecked;
document.querySelectorAll(`.permissionGroup[data-group='${group}'] input[type='checkbox']`).forEach(checkbox => {
checkbox.checked = this.allChecked;
if (this.allChecked) {
if (!this.permissionListAlpine.includes(checkbox.value)) {
this.permissionListAlpine.push(checkbox.value);
}
} else {
this.permissionListAlpine = this.permissionListAlpine.filter(id => id != checkbox.value);
}
});
},
toggleIndividual(event) {
event.stopPropagation();
this.allChecked = this.permissionListAlpine.length === @json($permissions->count());
}
}" class="card grow items-center p-4 sm:p-5 cursor-pointer permissionGroup"
data-group="{{ $permission['permission_group_name'] }}"
@click="toggleAll('{{ $permission['permission_group_name'] }}')">
<h3 class="pt-3 text-lg font-medium text-slate-700 dark:text-navy-100">
{{ $permission['permission_group_name'] }}
</h3>
<div class="my-4 h-px w-full bg-slate-200 dark:bg-navy-500"></div>
<div class="grow space-y-4 permission-list">
@endif
<div class="flex items-center space-x-4">
<label class="inline-flex items-center space-x-2" @click="toggleIndividual($event)">
<input
class="form-switch h-5 w-10 rounded-full bg-slate-300 before:rounded-full before:bg-slate-50 checked:!bg-primary checked:before:bg-white dark:bg-navy-900 dark:before:bg-navy-300 dark:checked:before:bg-white"
type="checkbox" x-model="permissionListAlpine" value="{{ $permission['id'] }}" />
<span>{{ $permission['name'] }}</span>
</label>
</div>
@php $currentGroup = $permission['permission_group_name']; @endphp
@endforeach
@if ($currentGroup !== '')
</div>
@endif
</div> </div>
</div> </div>
</div> </form>
</div> <div class="grid grid-cols-6 justify-center space-x-2 pt-4">
</div>
</form>
<div class="grid grid-cols-6 justify-center space-x-2 pt-4">
<span wire:click="goBack" <span wire:click="goBack"
class="col-start-3 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90"> class="col-start-3 btn border border-slate-300 font-medium text-slate-800 hover:bg-slate-150 focus:bg-slate-150 active:bg-slate-150/80 dark:border-navy-450 dark:text-navy-50 dark:hover:bg-navy-500 dark:focus:bg-navy-500 dark:active:bg-navy-500/90">
Cancel Cancel
...@@ -310,5 +143,5 @@ ...@@ -310,5 +143,5 @@
class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90"> class="btn ml-3 bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90">
Save Save
</button> </button>
</div> </div>
</div> </div>
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
value="{{ $user->id }}" /> value="{{ $user->id }}" />
</label> </label>
</td> </td>
<td class="whitespace-nowrap px-4 py-3 sm:px-5">{{ $user->name }}</td> <td class="whitespace-nowrap px-4 py-3 sm:px-5">{{ $user->username }}</td>
<td class="whitespace-nowrap px-4 py-3 sm:px-5">{{ $user->email }}</td> <td class="whitespace-nowrap px-4 py-3 sm:px-5">{{ $user->email }}</td>
<td class="whitespace-nowrap px-4 py-3 sm:px-5"> <td class="whitespace-nowrap px-4 py-3 sm:px-5">
@php @php
......
...@@ -18,10 +18,14 @@ use App\Http\Controllers\ExchangeRateController; ...@@ -18,10 +18,14 @@ use App\Http\Controllers\ExchangeRateController;
use App\Http\Controllers\ConsigneeController; use App\Http\Controllers\ConsigneeController;
use App\Http\Controllers\DeletePatchController; use App\Http\Controllers\DeletePatchController;
use App\Http\Controllers\DischargePortController; use App\Http\Controllers\DischargePortController;
use App\Http\Controllers\FormatFileMasterContrller;
use App\Http\Controllers\MasterFileController;
use App\Http\Controllers\ParameterController; use App\Http\Controllers\ParameterController;
use App\Http\Controllers\PatchController; use App\Http\Controllers\PatchController;
use App\Http\Controllers\SelectListController;
use App\Http\Controllers\SendPatchController; use App\Http\Controllers\SendPatchController;
use App\Http\Controllers\ServerLicenseController; use App\Http\Controllers\ServerLicenseController;
use App\Http\Controllers\TransferDataController;
use App\Http\Livewire\Pages\Role\RoleIndex; use App\Http\Livewire\Pages\Role\RoleIndex;
use App\Http\Livewire\Pages\SendPatch\SendPatch; use App\Http\Livewire\Pages\SendPatch\SendPatch;
/* /*
...@@ -37,7 +41,7 @@ use App\Http\Livewire\Pages\SendPatch\SendPatch; ...@@ -37,7 +41,7 @@ use App\Http\Livewire\Pages\SendPatch\SendPatch;
// $test = ConfServerLicense::limit(3)->get(); // $test = ConfServerLicense::limit(3)->get();
// dd($test); // dd($test);
Route::get('/transfer-user', [TransferDataController::class, 'transferUserData']);
Route::middleware('guest')->group(function () { Route::middleware('guest')->group(function () {
Route::get('/login', [\App\Http\Controllers\AuthController::class, 'loginView'])->name('loginView'); Route::get('/login', [\App\Http\Controllers\AuthController::class, 'loginView'])->name('loginView');
Route::post('/login', [\App\Http\Controllers\AuthController::class, 'login'])->name('login'); Route::post('/login', [\App\Http\Controllers\AuthController::class, 'login'])->name('login');
...@@ -52,40 +56,30 @@ Route::middleware('auth')->group(function () { ...@@ -52,40 +56,30 @@ Route::middleware('auth')->group(function () {
Route::get('/get-serverlicense', [ServerLicenseController::class, 'getAllServerKey']); Route::get('/get-serverlicense', [ServerLicenseController::class, 'getAllServerKey']);
Route::get('/patch', [PatchController::class, 'index'])->name('patch.index'); Route::get('/patch', [PatchController::class, 'index'])->name('patch.index');
Route::get('/master-file', [MasterFileController::class, 'index'])->name('master-file.index');
Route::get('/format-file-master', [FormatFileMasterContrller::class, 'index'])->name('format-file-master.index');
Route::get('/send-patch', [SendPatchController::class, 'index']); Route::get('/send-patch', [SendPatchController::class, 'index']);
Route::get('/send-multi-patch', [SendPatchController::class, 'indexMulti']); Route::get('/send-multi-patch', [SendPatchController::class, 'indexMulti']);
Route::get('/delete-multi-patch', [DeletePatchController::class, 'indexMulti']); Route::get('/delete-multi-patch', [DeletePatchController::class, 'indexMulti']);
Route::get('/server-license', [ServerLicenseController::class, 'index'])->name('server-license.index'); Route::get('/server-license', [ServerLicenseController::class, 'index'])->name('server-license.index');
Route::get('/user', [UserController::class , 'index'])->name('user.index'); Route::get('/user', [UserController::class, 'index'])->name('user.index');
Route::get('/company', [CompanyController::class , 'index'])->name('company.index'); Route::get('/company', [CompanyController::class, 'index'])->name('company.index');
Route::get('/group', [GroupController::class , 'index'])->name('group.index'); Route::get('/group', [GroupController::class, 'index'])->name('group.index');
Route::get('/role', [RoleController::class , 'index'])->name('role.index'); Route::get('/role', [RoleController::class, 'index'])->name('role.index');
Route::get('/exchange-rate', [ExchangeRateController::class, 'index']); Route::get('/exchange-rate', [ExchangeRateController::class, 'index']);
Route::get('/parameter', [ParameterController::class, 'index']); Route::get('/parameter', [ParameterController::class, 'index']);
Route::get('/discharge-port', [DischargePortController::class, 'index']); Route::get('/discharge-port', [DischargePortController::class, 'index']);
Route::get('/get-users', [SelectListController::class, 'getUsers']);
Route::get('/get-roles', [SelectListController::class, 'getRoles']);
Route::get('/get-groups', [SelectListController::class, 'getGroups']);
// Route::get('role', [RoleController::class ,'index'])->name('role-index'); // Route::get('role', [RoleController::class ,'index'])->name('role-index');
// Route::get('/role', [RoleIndex::class])->name('role-index'); // Route::get('/role', [RoleIndex::class])->name('role-index');
// Route::get('/generateModels', [GenModelController::class, 'generateModels']); // Route::get('/generateModels', [GenModelController::class, 'generateModels']);
}); });
sonar.projectKey=SpnPatch
sonar.projectName=SpnPatch
sonar.projectVersion=1.0
sonar.sources=.
sonar.host.url=http://localhost:9000
sonar.login=sqp_917ecaf164588e499aca30eaac9dd1e9f4f3765a
sonar.exclusions=vendor/**,storage/**,bootstrap/cache/**,public/**
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment