From c1e62cbacff6790094d1862d50ca8f783b929184 Mon Sep 17 00:00:00 2001 From: afrina Date: Tue, 27 Oct 2026 10:53:37 +0800 Subject: [PATCH] feat: docker setup and sync lejer am/imbang duga with kaunter --- .dockerignore | 16 ++++ .env.docker.example | 25 +++--- app/Http/Controllers/AkaunController.php | 77 +++++++++---------- app/Http/Kernel.php | 1 + app/Http/Middleware/RewriteApiHostname.php | 28 +++++++ app/helpers.php | 55 +++++++++++++ composer.json | 5 +- config/api.php | 1 + docker-compose.staging.yml | 62 +++++++++++++++ docker/nginx/default.conf | 39 ++++++++++ docker/php/Dockerfile | 60 +++++++++++++++ docker/php/entrypoint.sh | 35 +++++++++ docker/php/php.ini | 4 + docker/php/zz-clear-env.conf | 3 + resources/js/Akaun/Imbangduga.vue | 46 ++++------- .../views/akaun/laporan_imbanduga.blade.php | 18 +---- .../views/akaun/laporan_lejer_am.blade.php | 30 +++----- .../akaun/laporan_lejer_am_pdf.blade.php | 27 +++---- .../data-pelanggan-bycaw/index.blade.php | 2 +- 19 files changed, 400 insertions(+), 134 deletions(-) create mode 100644 .dockerignore create mode 100644 app/Http/Middleware/RewriteApiHostname.php create mode 100644 app/helpers.php create mode 100644 docker-compose.staging.yml create mode 100644 docker/nginx/default.conf create mode 100644 docker/php/Dockerfile create mode 100644 docker/php/entrypoint.sh create mode 100644 docker/php/php.ini create mode 100644 docker/php/zz-clear-env.conf diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..32264f9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +.git +.gitea +node_modules +vendor +.env +.env.* +!.env.example +storage/logs +storage/framework/cache +storage/framework/sessions +storage/framework/views +storage/debugbar +npm-debug.log +Dockerfile +docker-compose.yml +docker-compose.staging.yml diff --git a/.env.docker.example b/.env.docker.example index 952c623..e889c2f 100644 --- a/.env.docker.example +++ b/.env.docker.example @@ -2,10 +2,11 @@ APP_NAME=Laravel APP_ENV=local APP_KEY=base64:I+gVCBqCeGsUQ3vwwW23D5wVgdgMqwM2ozBkqDFY9o0= APP_DEBUG=true -APP_URL=http://adminv3.localhost -API_URL=http://apiv3.localhost -API_URL_KOOP=http://apiv3.localhost -API_URL_PKB=http://apiv2.localhost +APP_URL=http://localhost:8082 +API_BROWSER_URL=http://localhost:8080 +API_URL=http://api_arrahn-app-1:8000 +API_URL_KOOP=http://api_arrahn-app-1:8000 +API_URL_PKB=http://api_arrahn-app-1:8000 API_ARRAHN_PORTAL_URL=http://pay.arrahn.com.my ADMIN_VERSION=V3 @@ -14,11 +15,13 @@ LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql -DB_HOST=database_arosv3 +DB_HOST=host.docker.internal DB_PORT=3306 -DB_DATABASE=kaunterpkb +DB_DATABASE=kaunter_erahn DB_USERNAME=root -DB_PASSWORD=secret +DB_PASSWORD=root +# Windows host IP from WSL: ip route | awk '/default/{print $3}' +LARAGON_HOST=172.28.0.1 BROADCAST_DRIVER=pusher CACHE_DRIVER=file @@ -56,7 +59,7 @@ MIX_USE_DOCKER=true MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" # MIX_API_URL=http://api.arrahn -MIX_API_URL=http://apiv3.localhost -MIX_API_URL_ZONE1=http://apiv3.localhost -MIX_API_URL_ZONE2=http://apiv3.localhost -MIX_API_URL_ZONE3=http://apiv3.localhost +MIX_API_URL=http://localhost:8080 +MIX_API_URL_ZONE1=http://localhost:8080 +MIX_API_URL_ZONE2=http://localhost:8080 +MIX_API_URL_ZONE3=http://localhost:8080 diff --git a/app/Http/Controllers/AkaunController.php b/app/Http/Controllers/AkaunController.php index 15a5f66..b1194fc 100644 --- a/app/Http/Controllers/AkaunController.php +++ b/app/Http/Controllers/AkaunController.php @@ -43,24 +43,23 @@ class AkaunController extends Controller $current = Carbon::now(); $current = new Carbon(); $tarikh_cetak = $current->toDateString(); + $tarikh_mula = $tarikh_cetak; + $tarikh_akhir = $tarikh_cetak; - if($request->datemula == null){ - $tarikh_cetak = $current->toDateString(); - }else { - $split_date = explode('-',$request->datemula); - // $tarikh_mula = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0]; - $tarikh_mula = $request->datemula; + if($request->datemula != null){ + $tarikh_mula = $request->datemula; } - if($request->datehingga == null){ - $tarikh_cetak = $current->toDateString(); - } - else{ - $split_date = explode('-',$request->datehingga); - // $tarikh_akhir = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0]; + if($request->datehingga != null){ $tarikh_akhir = $request->datehingga; } + $had_response = Http::get($request->hostname . '/api/ModalOnlineLejer/' . $request->kodcaw, [ + 'mula' => $tarikh_mula, + 'hingga' => $tarikh_akhir, + ])->json(); + $had_modal_online = $had_response['had'] ?? 0; + $lejeramdata = Lejeram::orderBy('glcode')->get(); $lejeram = array(); $len = count($lejeramdata); @@ -100,6 +99,11 @@ class AkaunController extends Controller $kredit = ${$lejer['variable']}[$lejer->namakredit]; } + if($lejer->glcode == '7000/102') + { + $kredit = floatval($kredit) + $had_modal_online; + } + $totalkredit += floatval($kredit); } @@ -192,7 +196,14 @@ class AkaunController extends Controller $hapuskira = Http::get($request->hostname.'/api/CalculationHapusKira/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json(); $xtra = Http::get($request->hostname.'/api/Xtra/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json(); - + $rebetAnnur = !empty(($cawangan_info['features'] ?? [])['rebet_annur']); + $rebetpromo = 0; + $pelarasanrebate = 0; + if ($rebetAnnur) { + $rebetpromo = Http::get($request->hostname.'/api/RebetPromoCalculation/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json(); + $pelarasanrebate = Http::get($request->hostname.'/api/PelarasanRebate/' . $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json(); + } + //TunaiDitangan Sementara Upah if($tarikh_imbangan2 >= '2021-04-22' && $tarikh_imbangan2 < '2021-05-05') { @@ -229,24 +240,10 @@ class AkaunController extends Controller $untungrugiterkumpul = Http::get($request->hostname. '/api/UntungRugiTerkumpul/'. $request->kodcaw,['tarikh' => $tarikh_imbangan2])->json(); $hartasemasa = []; - - if($request->kodcaw == '010219') - { - if($tarikh_imbangan2 >= '2023-02-16') - { - $hutang = Http::withOptions(['verify' => config('app.api_verify')])->get($request->hostname.'/admin/ig/penghutang' ,['kodcaw' => $request->kodcaw, 'tarikh' => $tarikh_imbangan2])->json(); - $bayaran_hutang = Http::withOptions(['verify' => config('app.api_verify')])->get($request->hostname.'/admin/ig/bayaran_penghutang' ,['kodcaw' => $request->kodcaw, 'tarikh' => $tarikh_imbangan2])->json(); - //if($bayaran_hutang > 0) array_push($hartasemasa,['glcode' => '8000/501','descpt' => 'Bayaran Penghutang', 'amaun' => $bayaran_hutang]); - $totaltunaiditangan = $totaltunaiditangan; - $penghutangkaki = $hutang['bakihutang'] - $bayaran_hutang; - }else{ - $penghutangkaki = $penghutangkaki; - } - } // $hartasemasa = ['serahan' => $imbangduga['serahan'],'pinjamankoop' => $pinjamandiberi['pinjamankoop'],'emaspalsu' => $pinjamandiberi['emaspalsu'],'tunaiditangan' => $tunaiditangan['bakiakhir']]; - - if($totaltunaiditangan > 0) array_push($hartasemasa,['glcode' => '1000/011','descpt' => 'Tunai Di Tangan', 'amaun' => $totaltunaiditangan]); - if($pembiayaantawarruq > 0) array_push($hartasemasa,['glcode' => '1000/021','descpt' => 'Pembiayaan Di Bawah Tawarruq', 'amaun' => $pembiayaantawarruq]); + + if($totaltunaiditangan > 0) array_push($hartasemasa,['glcode' => '1000/010','descpt' => 'Tunai Di Tangan', 'amaun' => $totaltunaiditangan]); + if($pembiayaantawarruq > 0) array_push($hartasemasa,['glcode' => '1000/010','descpt' => 'Pembiayaan Di Bawah Tawarruq', 'amaun' => $pembiayaantawarruq]); if($penghutangkaki > 0) array_push($hartasemasa,['glcode' => '1000/011','descpt' => 'Penghutang Kakitangan', 'amaun' => $penghutangkaki]); //array_push($hartasemasa,['glcode' => '1000/045','descpt' => 'Serahan Bayaran Online', 'amaun' => 0.00]); if($keuntungan > 0) array_push($hartasemasa,['glcode' => '1000/211','descpt' => 'Keuntungan Tertangguh', 'amaun' => $keuntungan]); @@ -258,6 +255,7 @@ class AkaunController extends Controller if($imbangduga['pindahkekpkb'] > 0) array_push($hartasemasa,['glcode' => '1000/090','descpt' => 'Pindah Ke KPKB(IP)', 'amaun' => $imbangduga['pindahkekpkb']]); if($peruntukanhapuskira > 0) array_push($hartasemasa,['glcode' => '1000/015','descpt' => 'Peruntukan Hapus Kira', 'amaun' => $peruntukanhapuskira]); if($belian1stop > 0) array_push($hartasemasa,['glcode' => '8000/501','descpt' => 'Belian 1 Stop', 'amaun' => $belian1stop]); + if($rebetpromo > 0) array_push($hartasemasa,['glcode' => '5000/242','descpt' => 'Diskaun Promosi', 'amaun' => ($rebetpromo * -1)]); $totalhartasemasa = 0; foreach($hartasemasa as $index => $hs) @@ -278,7 +276,7 @@ class AkaunController extends Controller if($panjar['keraian'] > 0) array_push($tanggungansemasa,['glcode' => '3000/019','descpt' => 'Panjar - Keraian Dan Promosi','amaun' => -$panjar['keraian']]); if($bakilelong['bakilelong'] != 0) array_push($tanggungansemasa,['glcode' => '7000/090','descpt' => 'Baki Lelong','amaun' => $bakilelong['bakilelong']]); if($bakilelong['rugilelong'] != 0) array_push($tanggungansemasa,['glcode' => '3000/020','descpt' => 'Kerugian Lelong','amaun' => $bakilelong['rugilelong']]); - if($wtd > 0) array_push($tanggungansemasa,['glcode' => '3000/021','descpt' => 'Wang Tak Dituntut','amaun' => $wtd]); + if($wtd > 0) array_push($tanggungansemasa,['glcode' => '3000/021','descpt' => 'SERAHAN WANG TAK DITUNTUT','amaun' => $wtd]); if($cajlelong > 0) array_push($tanggungansemasa,['glcode' => '5000/213','descpt' => 'Pendapatan Caj Lelong','amaun' => $cajlelong]); if($untungrugiterkumpul != 0) array_push($tanggungansemasa,['glcode' => '7000/101','descpt' => 'Untung/Rugi Terkumpul','amaun' => $untungrugiterkumpul]); if($cajperkhidmatan > 0) array_push($tanggungansemasa,['glcode' => '5000/213','descpt' => 'Caj Perkhidmatan Terkumpul','amaun' => $cajperkhidmatan]); @@ -289,6 +287,8 @@ class AkaunController extends Controller if($utgterkumpulxtra > 0) array_push($tanggungansemasa,['glcode' => '7000/201','descpt' => 'Untung/Rugi Terkumpul Xtra','amaun' => $utgterkumpulxtra]); if($jualan1stop > 0) array_push($tanggungansemasa,['glcode' => '9000/501','descpt' => 'Jualan 1 Stop','amaun' => $jualan1stop]); if($hapuskira > 0) array_push($tanggungansemasa,['glcode' => '3000/011','descpt' => 'Hapus Kira','amaun' => -$hapuskira]); + if($rebetpromo > 0) array_push($tanggungansemasa,['glcode' => '5000/242','descpt' => 'Diskaun Promosi', 'amaun' => ($rebetpromo * -1)]); + if($pelarasanrebate > 0) array_push($tanggungansemasa,['glcode' => '5000/243','descpt' => 'Pelarasan Rebate', 'amaun' => ($pelarasanrebate * -1)]); $totaltanggungansemasa = 0; foreach($tanggungansemasa as $index => $ts) @@ -303,18 +303,15 @@ class AkaunController extends Controller $totaluntungrugi = 0; $totaluntungrugi = $totaltanggungansemasa + $untungrugi; - if(isset($request->jenis)) + $viewData = compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'); + + if($request->jenis == 'pdf') { - if($request->jenis == 'pdf') - { - $pdf = PDF::loadView('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'))->setPaper('a4', 'potrait'); - return $pdf->download('laporan_imbangduga_' . $request->kodcaw .'_'. $tarikh_imbangan2 . '.pdf'); - }else{ - return view('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail')); - } + $pdf = PDF::loadView('akaun.laporan_imbanduga', $viewData)->setPaper('a4', 'potrait'); + return $pdf->download('laporan_imbangduga_' . $request->kodcaw .'_'. $tarikh_imbangan2 . '.pdf'); } - // return view('akaun.laporan_imbanduga',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','untungrugifield','tanggungansemasa','totalhartasemasa','totaluntungrugi','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail')); + return view('akaun.laporan_imbanduga', $viewData); } ////ainizazi public function cetakLaporanGadai(Request $request){ diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index f5dddd6..76f2d09 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -30,6 +30,7 @@ class Kernel extends HttpKernel */ protected $middlewareGroups = [ 'web' => [ + \App\Http\Middleware\RewriteApiHostname::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, diff --git a/app/Http/Middleware/RewriteApiHostname.php b/app/Http/Middleware/RewriteApiHostname.php new file mode 100644 index 0000000..d7b948c --- /dev/null +++ b/app/Http/Middleware/RewriteApiHostname.php @@ -0,0 +1,28 @@ +has('hostname')) { + $request->merge([ + 'hostname' => api_url_for_server($request->input('hostname')), + ]); + } + + return $next($request); + } +} diff --git a/app/helpers.php b/app/helpers.php new file mode 100644 index 0000000..d0eab6d --- /dev/null +++ b/app/helpers.php @@ -0,0 +1,55 @@ + env('API_URL'), + 'browser_url' => env('API_BROWSER_URL'), 'url_koop' => env('API_URL_KOOP'), 'url_pkb' => env('API_URL_PKB'), 'url_arrahn_portal' => env('API_ARRAHN_PORTAL_URL'), diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml new file mode 100644 index 0000000..ac45295 --- /dev/null +++ b/docker-compose.staging.yml @@ -0,0 +1,62 @@ +name: admin_erahn_staging + +services: + app: + image: ${APP_IMAGE:-git.koppkb.com/kopkb/admin-erahn}:${IMAGE_TAG:-staging} + build: + context: . + dockerfile: docker/php/Dockerfile + target: staging + container_name: admin_erahn_staging_app + working_dir: /var/www/html + volumes: + - storage_staging:/var/www/html/storage + - ./.env.staging:/var/www/html/.env.staging:ro + env_file: + - .env.staging + environment: + APP_ENV: staging + USE_STAGING_ENV: "true" + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + mysql: + condition: service_healthy + restart: unless-stopped + + web: + image: nginx:1.25-alpine + container_name: admin_erahn_staging_web + ports: + - "${HTTP_PORT:-8092}:80" + volumes: + - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro + - ./public:/var/www/html/public:ro + depends_on: + - app + restart: unless-stopped + + mysql: + image: mysql:8.0 + container_name: admin_erahn_staging_mysql + command: --default-authentication-plugin=mysql_native_password + ports: + - "127.0.0.1:${MYSQL_PUBLISH_PORT:-3310}:3306" + environment: + MYSQL_DATABASE: admin_erahn + MYSQL_USER: adminuser + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: root + volumes: + - mysql_staging_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-proot"] + interval: 5s + timeout: 5s + retries: 30 + start_period: 20s + restart: unless-stopped + +volumes: + mysql_staging_data: + storage_staging: diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf new file mode 100644 index 0000000..182f324 --- /dev/null +++ b/docker/nginx/default.conf @@ -0,0 +1,39 @@ +server { + listen 80; + server_name _; + + root /var/www/html/public; + index index.php index.html; + + charset utf-8; + client_max_body_size 50M; + + location / { + # Production Apache public/.htaccess 301-strips trailing slashes. + # Nginx ignores .htaccess, so without this /path/ 404s while /path works. + rewrite ^/(.*)/$ /$1 last; + try_files $uri @php; + } + + location @php { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_pass app:9000; + fastcgi_index index.php; + fastcgi_read_timeout 120s; + } + + location ~ \.php$ { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_pass app:9000; + fastcgi_index index.php; + fastcgi_read_timeout 120s; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile new file mode 100644 index 0000000..e5d5b98 --- /dev/null +++ b/docker/php/Dockerfile @@ -0,0 +1,60 @@ +FROM php:7.4-fpm AS base + +WORKDIR /var/www/html + +# PHP 7.4 uses Debian Bullseye; use its archived package repositories. +# Archived security metadata expires, but package signatures remain verified. +RUN printf '%s\n' \ + 'deb https://archive.debian.org/debian bullseye main' \ + 'deb [check-valid-until=no] https://archive.debian.org/debian-security bullseye-security main' \ + > /etc/apt/sources.list \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get -o Acquire::Retries=3 update \ + && apt-get install -y --no-install-recommends \ + git \ + pkg-config \ + unzip \ + libonig-dev \ + libzip-dev \ + libpng-dev \ + libjpeg62-turbo-dev \ + libfreetype6-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j"$(nproc)" \ + pdo_mysql \ + mbstring \ + bcmath \ + zip \ + exif \ + gd \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer + +COPY docker/php/php.ini /usr/local/etc/php/conf.d/app.ini +COPY docker/php/zz-clear-env.conf /usr/local/etc/php-fpm.d/zz-clear-env.conf +COPY docker/php/entrypoint.sh /usr/local/bin/app-entrypoint.sh + +# Normalize Windows checkout line endings before executing the script. +RUN sed -i 's/\r$//' /usr/local/bin/app-entrypoint.sh \ + && chmod +x /usr/local/bin/app-entrypoint.sh \ + && usermod -u 1000 www-data && groupmod -g 1000 www-data + +ENTRYPOINT ["app-entrypoint.sh"] +CMD ["php-fpm"] + +FROM base AS staging + +COPY --chown=www-data:www-data . /var/www/html + +RUN composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader --no-scripts \ + && mkdir -p \ + storage/logs \ + storage/framework/cache/data \ + storage/framework/views \ + storage/framework/sessions \ + storage/app/public \ + bootstrap/cache \ + && chown -R www-data:www-data storage bootstrap/cache vendor + +FROM base AS development diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh new file mode 100644 index 0000000..333adab --- /dev/null +++ b/docker/php/entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -e + +cd /var/www/html + +if [ "${USE_STAGING_ENV:-false}" = "true" ] && [ -f .env.staging ]; then + cp .env.staging .env +fi + +if [ -f composer.json ]; then + if [ -f vendor/autoload.php ] && [ "${USE_STAGING_ENV:-false}" = "true" ]; then + : # vendor is baked into the staging image + elif [ "${USE_STAGING_ENV:-false}" = "true" ]; then + composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader --no-scripts + else + composer install --no-interaction --prefer-dist + fi +fi + +mkdir -p \ + storage/logs \ + storage/framework/cache/data \ + storage/framework/views \ + storage/framework/sessions \ + storage/app/public \ + bootstrap/cache + +if [ -f artisan ]; then + php artisan package:discover --ansi + php artisan storage:link --force >/dev/null 2>&1 || true +fi + +chown -R www-data:www-data storage bootstrap/cache + +exec docker-php-entrypoint "$@" diff --git a/docker/php/php.ini b/docker/php/php.ini new file mode 100644 index 0000000..3e9df60 --- /dev/null +++ b/docker/php/php.ini @@ -0,0 +1,4 @@ +memory_limit=512M +upload_max_filesize=50M +post_max_size=50M +max_execution_time=120 diff --git a/docker/php/zz-clear-env.conf b/docker/php/zz-clear-env.conf new file mode 100644 index 0000000..edbfb22 --- /dev/null +++ b/docker/php/zz-clear-env.conf @@ -0,0 +1,3 @@ +[www] +; Pass container env vars (from compose env_file) through to PHP workers. +clear_env = no diff --git a/resources/js/Akaun/Imbangduga.vue b/resources/js/Akaun/Imbangduga.vue index b2f9132..72f4dc2 100644 --- a/resources/js/Akaun/Imbangduga.vue +++ b/resources/js/Akaun/Imbangduga.vue @@ -55,15 +55,13 @@ - - - +
@@ -84,7 +82,7 @@