Merge branch 'folder' into 'main'

Folder

See merge request online-sistem1/admin-portal!6
This commit is contained in:
hafifie rahman
2022-02-09 06:24:31 +00:00
13 changed files with 2370 additions and 136 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Http;
use Carbon\Carbon;
class KelulusanController extends Controller
{
public function index()
{
$api_url = config('api.url');
$auth_user = Auth::user();
return view('kelulusan.index',compact('api_url','auth_user'));
}
}
+2 -36
View File
@@ -4658,7 +4658,8 @@
"jquery": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
"dev": true
},
"js-tokens": {
"version": "4.0.0",
@@ -4912,11 +4913,6 @@
}
}
},
"marked": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
"integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
},
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -7345,11 +7341,6 @@
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"dev": true
},
"trumbowyg": {
"version": "2.25.1",
"resolved": "https://registry.npmjs.org/trumbowyg/-/trumbowyg-2.25.1.tgz",
"integrity": "sha512-bmmV1qC+fTLfyVpLE5iZjCzHG5DfAwM7p8K2fdq6L1kOi+IrVJk/qGFVEEmYyJ0Ofd1z3g2vavfABpmkVLzV6A=="
},
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -7361,11 +7352,6 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
"twemoji": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/twemoji/-/twemoji-2.5.1.tgz",
"integrity": "sha1-KWZHxhY8fwR0WIccKuviXqj/6DQ="
},
"type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
@@ -7636,26 +7622,6 @@
"resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-1.7.14.tgz",
"integrity": "sha512-khZR8t3NWZ/JJ2MZxXLbesHrRJ8AKa75PY5Zq8yMifF9x8lHq8ljYkC0d2PD9yahooygQB5tcFyRDkbbIPx8hw=="
},
"vue-trumbowyg": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/vue-trumbowyg/-/vue-trumbowyg-4.0.0.tgz",
"integrity": "sha512-lvq7lNbMMsAl7FeLKO+0qZR3guvwgunq4uPKTgXpzOI7DlXrUXQOukFn6fBrAQ0M1qXNUW57bl9qdh2v6e9ypQ==",
"requires": {
"jquery": ">=1.8",
"trumbowyg": "^2.21.0"
}
},
"vueditor": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/vueditor/-/vueditor-0.3.1.tgz",
"integrity": "sha512-yJ9yJGWBvr75O/tdm2P8liOfnp7OB/jiURK4dcTPVG18cElxYOVMLTLMJTDFcrApt4b9Co635H8h84gUUI8NPA==",
"requires": {
"marked": "^0.3.6",
"twemoji": "^2.4.1",
"vue": ">=2.0.5",
"vuex": ">=2.0.0"
}
},
"vuejs-datetimepicker": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/vuejs-datetimepicker/-/vuejs-datetimepicker-1.1.13.tgz",
+1895 -93
View File
File diff suppressed because one or more lines are too long
+66
View File
@@ -0,0 +1,66 @@
<template>
<div >
<modal ref="modal"></modal>
<div class="bg-white md:items-center md:justify-between shadow rounded-lg p-4 md:p-6 xl:p-8 my-6">
<div v-for="index in 2" :key="index" class="flex flex-wrap w-full">
<div class="w-full border rounded-l p-4">
<div class="flex flex-wrap mb-4">
<p class="font-bold text-xl w-1/3">KB2210232-00032</p>
<p class="font-bold text-md w-1/3 text-red-500 justify-center flex text-center">[Auto Tawarruq] Pembiayaan Melebihi Margin 75%</p>
<p class="font-bold text-xl w-1/3 text-gray-500 flex justify-end">Ar-Rahn Kota Bharu 2</p>
</div>
<div class="flex flex-wrap">
<p class="font-bold text-green-500 w-1/2">PC/PPC: <span class="text-black font-normal text-md capitalize">wan ramlah binti azam baki</span></p>
<p class="w-1/4 text-sm text-gray-700">Pembiayaan: RM100,400.00</p>
<p class="w-1/4 text-sm text-gray-700">Nilai Marhun: RM100,400.00</p>
</div>
<div class="flex flex-wrap">
<p class="font-bold text-green-500 w-1/2">Teller: <span class="text-black font-normal text-md capitalize">mohd rusyaidi bin ruseli</span></p>
<p class="w-1/4 text-sm text-gray-700">Margin: 78%</p>
<p class="w-1/4 text-sm text-gray-700">Berat: 100.00 gram</p>
</div>
<div class="flex flex-wrap">
<p class="font-bold text-green-500 w-3/4">Komen: <span class="text-black font-normal text-md w-1/4">Tiada Komen</span></p>
</div>
<!-- <p class="font-bold text-xl">KB2210232-00032</p> -->
<div class="mx-auto flex justify-between mb-auto text-sm text-gray-500 mt-4">
10 Jul 2018, 05:56PM
<div class="pl-4">
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-1 px-6 border border-green-700 rounded mr-1" @click.prevent="ApproveFunc"><i class="fas fa-thumbs-up mr-1 text-md"></i> Lulus</button>
<button class="bg-red-500 hover:bg-red-700 text-white font-bold py-1 px-6 border border-red-700 rounded mr-1" @click.prevent="DisapproveFunc"><i class="fas fa-thumbs-down mr-1 text-md"></i> Tidak Lulus</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modal from '../components/util/KomenModal.vue'
export default {
components: {
// pagination,
modal,
// deletemodal
},
methods:{
ApproveFunc:function(){
this.$refs.modal.showModal = true;
},
DisapproveFunc:function(){
console.log('taklulus');
}
}
}
</script>
+5 -4
View File
@@ -119,15 +119,15 @@ Vue.use(require('vue-pusher'), {
}
});
Vue.prototype.$api1 = 'http://api.arrahn'
Vue.prototype.$api1 = 'http://localhost:8000'
let initial = 'KB2';
let initialhostname = 'http://api.arrahn';
let initialhostname = 'http://localhost:8000';
const store = new Vuex.Store({
state: {
$kodcaw: 'KB2',
$hostname: 'http://api.arrahn'
$hostname: 'http://localhost:8000'
},
plugins: [createPersistedState()],
mutations: {
@@ -189,6 +189,7 @@ Vue.component('searchpelanggan-component', require('./components/Searchpelanggan
Vue.component('laporanakaun-component', require('./Akaun/Laporan.vue').default)
Vue.component('online-component', require('./Online/Online.vue').default)
Vue.component('noticelelong-component', require('./pages/NotisLelong.vue').default)
Vue.component('kelulusan-component', require('./Kelulusan/TableKelulusan.vue').default)
Vue.component('details-pelanggan', require('./pages/Detailspelanggan.vue').default)
Vue.component('blacklist-pelanggan', require('./pages/Blacklist.vue').default)
@@ -206,7 +207,7 @@ Vue.component('senaraibajet-component', require('./Bajet/Homebajet.vue').default
Vue.component('clock-component', require('./components/util/Clock.vue').default)
Vue.component('logout-component', require('./Logout.vue').default)
Vue.component('notify-component', require('./components/util/Notify.vue').default)
Vue.component('apexchart', VueApexCharts)
+2 -2
View File
@@ -84,7 +84,7 @@
case 'JLI':
case 'ARP':
case '020303':{
this.sethostname('http://api.arrahn')
this.sethostname('http://localhost:8000')
break;
}
case '010621':
@@ -114,7 +114,7 @@
this.sethostname('http://api3.arrahn')
break;
}
default: this.sethostname('http://api.arrahn')
default: this.sethostname('http://localhost:8000')
break;
}
}
@@ -0,0 +1,32 @@
<template>
<div tabindex="0"
class="z-40 overflow-auto left-0 top-0 bottom-0 right-0 w-full h-full fixed">
<div class="z-50 relative p-3 mx-auto my-0 max-w-full"
style="width: 500px;">
<div class="bg-white rounded shadow-lg border flex flex-col overflow-hidden px-10 py-10">
<div class="text-center">
<span
class="material-icons p-4 text-red-500 font-bold border-red-500 text-4xl">
<i class="fas fa-warning"></i>
</span>
</div>
<div class="text-center py-6 text-2xl text-gray-700">Are you sure ?</div>
<div class="text-center font-light text-gray-700 mb-8">
Do you really want to delete these records? This process cannot be undone.
</div>
<div class="flex justify-center">
<button
class="bg-gray-300 text-gray-900 rounded hover:bg-gray-200 px-6 py-2 focus:outline-none mx-1">Cancel</button>
<button
class="bg-red-500 text-gray-200 rounded hover:bg-red-400 px-6 py-2 focus:outline-none mx-1">Delete</button>
</div>
</div>
</div>
<div class="z-40 overflow-auto left-0 top-0 bottom-0 right-0 w-full h-full fixed bg-black opacity-50"></div>
</div>
</template>
<script>
export default {
}
</script>
@@ -0,0 +1,80 @@
<template>
<div>
<transition name="modal-fade">
<div v-if="showModal" class=" overflow-x-hidden overflow-y-auto fixed inset-0 z-50 outline-none focus:outline-none justify-center items-center flex">
<div class="relative w-1/3 my-6 mx-auto max-w-6xl">
<!--content-->
<div class="border-0 rounded-lg shadow-lg relative flex flex-col w-full bg-white outline-none focus:outline-none">
<!--header-->
<!--body-->
<div class="relative p-6 flex-auto">
<h3 class="text-center text-3xl font-semibold mb-4">
Komen
</h3>
<input id="frminput" autofocus type="text" ref="btnDropdownRef" class="mr-2 bg-white appearance-none border-2 border-gray-400 rounded w-full py-2 px-4 text-gray-700 leading-tight focus:outline-none focus:bg-white focus:border-blue-500 border-black" />
</div>
<!--footer-->
<div class="flex items-center justify-end p-6 border-t border-solid border-blueGray-200 rounded-b">
<button class="bg-gray-500 hover:bg-gray-700 text-white font-bold py-2 px-4 border border-gray-700 rounded mr-1" @click="toggleModal" type="button">
Batal
</button>
<button class="bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 border border-green-700 rounded" @click="toggleModal" type="button" >
Lulus
</button>
</div>
</div>
</div>
</div>
</transition>
<transition
enter-active-class="transition-all transform duration-200 ease-out"
>
</transition>
<div v-if="showModal" class="opacity-25 fixed inset-0 z-40 bg-black"></div>
</div>
</template>
<script>
import { createPopper } from "@popperjs/core";
export default {
props: {
placement: {
type: String,
default: "bottom-start"
}
},
name: "komen-modal",
data() {
return {
showModal: false,
kodcaw: ''
}
},
methods: {
toggleModal: function(){
this.showModal = !this.showModal;
},
}
}
</script>
<style>
.modal-fade-enter,
.modal-fade-leave-to {
opacity: 0;
}
.modal-fade-enter-active,
.modal-fade-leave-active {
transition: opacity .5s ease;
}
</style>
+229
View File
@@ -0,0 +1,229 @@
<template>
<div class="container">
<div id="notification" ref="notification" class="notification cursor-pointer" v-on:click="toggleDropdown()"></div>
<div ref="popoverDropdownRef" v-bind:class="{'hidden': !dropdownShow, 'block': dropdownShow}" class="origin-top-right w-96 right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none" role="menu" aria-orientation="vertical" aria-labelledby="menu-button" tabindex="-1">
<div class="py-1 px-2" role="none">
<div class="text-gray-700 block px-2 py-5 text-sm hover:bg-yellow-500 cursor-pointer">
<div class="justify-between flex">
<div class="w-4/6">
<p class="font-bold -mt-4">Ar-Rahn Kota Bharu 2</p>
<p class="font-bold text-sm text-red-500">[Auto Tawarruq] Pembiayaan Melebihi Margin 75%</p>
<p class="-mb-4 text-sm">4 hours ago</p>
</div>
<div class="w-2/6">
<p class="font-bold -mt-4">KB2000201-0232</p>
</div>
</div>
</div>
<hr>
<div class="text-gray-700 block px-2 py-5 text-sm hover:bg-yellow-500 cursor-pointer">
<div class="justify-between flex">
<div class="w-4/6">
<p class="font-bold -mt-4">Ar-Rahn Kota Bharu 2</p>
<p class="font-bold text-sm text-red-500">[Auto Tawarruq] Pembiayaan Melebihi Margin 75%</p>
<p class="-mb-4 text-sm">4 hours ago</p>
</div>
<div class="w-2/6">
<p class="font-bold -mt-4">KB2000201-0232</p>
</div>
</div>
</div>
<hr>
<!-- <a class="text-gray-700 block px-4 py-2 text-sm hover:bg-yellow-500 cursor-pointer" role="menuitem" tabindex="-1" id="menu-item-0">a<br><b>a</b></a> -->
</div>
</div>
<!-- <button @click="Clicked">Increment Notifications</button> -->
</div>
</template>
<style scoped>
/* Page Styles */
.container {
/* position: absolute; */
/* top: 50%; */
/* left: 50%; */
/* margin-right: 50%; */
/* transform: translate(-50%, -50%); */
/* text-align: center; */
}
button {
display: block;
padding: 1em 2em;
outline: none;
font-weight: 600;
border: none;
color: #fff;
background-color: #3498db;
border: 1px solid #1f74ac;
border-radius: 0.3em;
margin-top: 4em;
cursor: pointer;
}
button:hover {
background-color: #2487c9;
}
/* Notifications */
.notification {
display: inline-block;
position: relative;
padding: 0.6em;
background: #3498db;
border-radius: 0.2em;
font-size: 1.3em;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
.notification::before,
.notification::after {
color: #fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
.notification::before {
display: block;
content: "\f0f3";
font-family: "FontAwesome";
transform-origin: top center;
}
.notification::after {
font-family: Arial;
font-size: 0.7em;
font-weight: 700;
position: absolute;
top: -15px;
right: -15px;
padding: 5px 8px;
line-height: 100%;
border: 2px #fff solid;
border-radius: 60px;
background: #3498db;
opacity: 0;
content: attr(data-count);
opacity: 0;
transform: scale(0.5);
transition: transform, opacity;
transition-duration: 0.3s;
transition-timing-function: ease-out;
}
.notification.notify::before {
animation: ring 1.5s ease;
}
.notification.show-count::after {
transform: scale(1);
opacity: 1;
}
@keyframes ring {
0% {
transform: rotate(35deg);
}
12.5% {
transform: rotate(-30deg);
}
25% {
transform: rotate(25deg);
}
37.5% {
transform: rotate(-20deg);
}
50% {
transform: rotate(15deg);
}
62.5% {
transform: rotate(-10deg);
}
75% {
transform: rotate(5deg);
}
100% {
transform: rotate(0deg);
}
}
</style>
<script>
import { createPopper } from "@popperjs/core";
export default {
data(){
return {
dropdownShow: false,
}
},
mounted(){
document.addEventListener('click', this.onClick);
var el = this.$refs.notification;
if (Number(localStorage.getItem("data-count")) > 0){
var count = Number(localStorage.getItem("data-count")) || 0;
// console.log(localStorage.getItem("books"))
el.setAttribute('data-count', count);
el.classList.add('show-count');
console.log('test1');
}else{
el.classList.remove('show-count');
console.log('test2');
}
},
beforeDestroy() {
document.removeEventListener('click', this.onClick);
},
methods:{
async toggleDropdown() {
this.dropdownShow = true;
createPopper(this.$refs.notification, this.$refs.popoverDropdownRef, {
placement: "bottom-end",
modifiers: [{
name: "preventOverflow",
}]
});
},
Clicked:function(data){
var el = this.$refs.notification;
var count = Number(localStorage.getItem("data-count")) || 0;
console.log(count)
localStorage.setItem('data-count',count + 1);
el.setAttribute('data-count', count+1);
el.classList.remove('notify');
(function(){
return el.offsetWidth;
})();
el.classList.add('notify');
// if(count > 0){
el.classList.add('show-count');
// }
},
DropdownShow:function(){
},
onClick: function(){
var el = this.$refs.notification;
let isClickInside = this.$refs.popoverDropdownRef.contains(event.target);
let searchInside = this.$refs.notification.contains(event.target);
let buttonSearch = document.getElementById('notification');
if (isClickInside || searchInside || buttonSearch.contains(event.target)) {
localStorage.setItem('data-count',0);
el.setAttribute('data-count', 0);
el.classList.remove('show-count');
this.dropdownShow = true
}
else{
this.dropdownShow = false
}
},
}
}
</script>
+18
View File
@@ -0,0 +1,18 @@
@extends('layouts.app')
@section('content')
<div class="bg-gray-900 opacity-50 hidden fixed inset-0 z-10" id="sidebarBackdrop"></div>
<div id="main-content" class="h-full w-full bg-gray-50 relative overflow-y-auto">
<main>
<div class="pt-6 px-4">
<breadcrumb :items="[{ 'title' : 'Kelulusan', 'icon' : 'fas fa-thumbs-up' }]"></breadcrumb>
<kelulusan-component></kelulusan-component>
</div>
</main>
@include('layouts.footer')
@endsection
+5 -1
View File
@@ -128,7 +128,8 @@
@auth
<clock-component></clock-component>
<cawangan-component roles={{ Auth::user()->roles }} route={{ (Route::is('home') || Route::is('akaun.home')) ? 'ada' : 'tiada' }} akaun={{ (Route::is('akaun.home') ? 'yes' : 'no')}}></cawangan-component>
@endauth
@endauth
<div class="flex items-center">
@@ -149,6 +150,9 @@
</div>
@endif
@else
<div class="mr-4">
<notify-component></notify-component>
</div>
<logout-component csrftoken="{{ csrf_token() }}" :route={{ json_encode(route('logout')) }}></logout-component>
+11
View File
@@ -159,6 +159,17 @@
</li>
</a>
<a href="{{ route('kelulusan') }}" class="rounded mb-2 mr-2 {{ Route::is('kelulusan') || Route::is('kelulusan.*') ? 'bg-gray-200 rounded text-white-500' : 'hover:bg-yellow-300 ' }}">
<li class="flex w-full justify-between text-gray-600 hover:text-gray-500 cursor-pointer items-center ">
<div class="flex items-center">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 10h4.764a2 2 0 011.789 2.894l-3.5 7A2 2 0 0115.263 21h-4.017c-.163 0-.326-.02-.485-.06L7 20m7-10V5a2 2 0 00-2-2h-.095c-.5 0-.905.405-.905.905 0 .714-.211 1.412-.608 2.006L7 11v9m7-10h-2M7 20H5a2 2 0 01-2-2v-6a2 2 0 012-2h2.5" />
</svg>
<span class="text-sm ml-2 text-lg">Kelulusan</span>
</div>
</li>
</a>
<a href="{{ route('akaun.home') }}" class="rounded mb-2 mr-2 {{ Route::is('akaun.home') || Route::is('akaun.home.*') ? 'bg-gray-200 rounded text-white-500' : 'hover:bg-yellow-300 ' }}">
<li class="flex w-full justify-between text-gray-600 hover:text-gray-500 cursor-pointer items-center ">
+5
View File
@@ -59,6 +59,11 @@ Route::get('/bajet/kemaskini',['as'=>'bajet.kemaskini','uses'=>'App\Http\Control
//Lelong
Route::get('/notislelong',['as'=>'lelong','uses'=>'App\Http\Controllers\LelongController@index'])->middleware(['roleChecker:null,null,operasi']);
//Kelulusan
Route::get('/kelulusan',['as'=>'kelulusan','uses'=>'App\Http\Controllers\KelulusanController@index'])->middleware(['roleChecker:null,null,operasi']);
//Akaun
Route::get('/akaunhome/cetaklaporanlejeram',['as'=>'cetak.lejeram','uses'=>'App\Http\Controllers\AkaunController@viewlejeram'])->middleware(['roleChecker:admin,akaun,operasi']);
Route::get('/akaunhome/cetaklaporanimbangduga',['as'=>'cetak.imbangduga','uses'=>'App\Http\Controllers\AkaunController@cetakimbangduga'])->middleware(['roleChecker:admin,akaun,operasi']);