Update beberapa fitur dan perbaikan

This commit is contained in:
daffarahman11 2025-03-23 22:46:38 +07:00
parent fa4b6d2f42
commit 9e5026d18f
26 changed files with 1165 additions and 148 deletions

View File

@ -2,7 +2,9 @@
namespace App\Http\Controllers;
use App\Models\Klaster;
use App\Models\Curanmor;
use App\Models\Kecamatan;
use Illuminate\Http\Request;
class CuranmorController extends Controller
@ -20,15 +22,27 @@ public function index()
*/
public function create()
{
//
return view('admin.dashboardTambahCuranmor', ['kecamatans' => Kecamatan::all()], ['klasters' => Klaster::all()]);
}
/**
* Store a newly created resource in storage.
*Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
try{
$validateData = $request->validate([
'kecamatan_id' =>'required|max:255|exists:kecamatans,id|unique:curanmors,kecamatan_id',
'jumlah_curanmor' =>'required',
'klaster_id' =>'required|max:255|exists:klasters,id',
]);
Curanmor::create($validateData);
return redirect('/curanmor')->with('succes', 'Berhasil Menambahkan Data Curanmor Baru');
}catch (\Exception $e){
return redirect('/curanmor')->with('error', 'Gagal Menambahkan Data Curanmor Baru');
}
}
/**

View File

@ -3,7 +3,10 @@
namespace App\Http\Controllers;
use App\Models\Curas;
use App\Models\Klaster;
use App\Models\Kecamatan;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class CurasController extends Controller
{
@ -21,7 +24,8 @@ public function index()
*/
public function create()
{
//
return view('admin.dashboardTambahCuras', ['kecamatans' => Kecamatan::all()], ['klasters' => Klaster::all()]);
}
/**
@ -29,7 +33,19 @@ public function create()
*/
public function store(Request $request)
{
//
try{
$validateData = $request->validate([
'kecamatan_id' =>'required|max:255|exists:kecamatans,id|unique:curas,kecamatan_id',
'jumlah_curas' =>'required',
'klaster_id' =>'required|max:255|exists:klasters,id',
]);
Curas::create($validateData);
return redirect('/curas')->with('succes', 'Berhasil Menambahkan Data Curas Baru');
}catch (\Exception $e){
return redirect('/curas')->with('error', 'Gagal Menambahkan Data Curas Baru');
}
}
/**
@ -43,9 +59,20 @@ public function show(Curas $curas)
/**
* Show the form for editing the specified resource.
*/
public function edit(Curas $curas)
public function edit($curas)
{
//
try {
$edit = Curas::find($curas);
return view('admin.dashboardEditCuras', [
'curas' => $edit,
'kecamatans' => Kecamatan::all(),
'klasters' => Klaster::all(),
]);
} catch (\Exception $e) {
abort(404);
}
}
/**
@ -53,14 +80,41 @@ public function edit(Curas $curas)
*/
public function update(Request $request, Curas $curas)
{
//
try {
$validateData = $request->validate([
'kecamatan_id' => 'sometimes|required|max:255' . $curas->kecamatan_id,
'jumlah_curas' => 'sometimes|required|integer',
'klaster_id' => 'sometimes|required|max:255' . $curas->klaster_id,
]);
// Pastikan hanya field yang diisi yang akan diperbarui
$curas->update(array_filter($validateData));
return redirect('/curas')->with('succes', 'Data Kecamatan Berhasil Diubah');
} catch (\Exception $e) {
return redirect('/curas')->with('error', 'Data Kecamatan Gagal Diubah');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Curas $curas)
public function destroy($curas)
{
//
try{
$hapus = Curas::find($curas);
Curas::destroy($hapus);
return redirect('/curas')->with('succes', 'Data Curas Berhasil Di Hapus');
}catch (\Exception $e){
return dd($e);
// redirect('/curas')->with('error', 'Data Curas '. $curas->nama_kecamatan .' Gagal Di Hapus | Hapus Data Curas Atau Curanmor Untuk Klaster '. $curas->nama_kecamatan.' Terlebih Dahulu');
}
}
}

View File

@ -4,6 +4,7 @@
use App\Models\Kecamatan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
class KecamatanController extends Controller
{
@ -21,7 +22,7 @@ public function index()
*/
public function create()
{
//
return view('admin.dashboardTambahKecamatan');
}
/**
@ -29,7 +30,17 @@ public function create()
*/
public function store(Request $request)
{
//
try{
$validateData = $request->validate([
'nama_kecamatan' =>'required|max:255|unique:kecamatans,nama_kecamatan',
]);
Kecamatan::create($validateData);
return redirect('/kecamatan')->with('succes', 'Berhasil Menambahkan Data Kecamatan Baru');
}catch (\Exception $e){
return redirect('/kecamatan')->with('error', 'Gagal Menambahkan Data Kecamatan Baru');
}
}
/**
@ -37,7 +48,7 @@ public function store(Request $request)
*/
public function show(Kecamatan $kecamatan)
{
//
}
/**
@ -45,7 +56,14 @@ public function show(Kecamatan $kecamatan)
*/
public function edit(Kecamatan $kecamatan)
{
//
try {
return view('admin.dashboardEditKecamatan', [
'kecamatan' => $kecamatan
]);
} catch (\Exception $e) {
abort(404); // Jika dekripsi gagal, tampilkan halaman 404
}
}
/**
@ -53,7 +71,18 @@ public function edit(Kecamatan $kecamatan)
*/
public function update(Request $request, Kecamatan $kecamatan)
{
//
try{
$validateData = $request->validate([
'nama_kecamatan' =>'required|max:255|unique:kecamatans,nama_kecamatan',
]);
Kecamatan::where('id', $kecamatan->id)->update($validateData);
return redirect('/kecamatan')->with('succes', 'Data Kecamatan Berhasil Di Ubah');
}catch (\Exception $e){
return redirect('/kecamatan')->with('error', 'Data Kecamatan Gagal Di Ubah');
}
}
/**
@ -61,6 +90,14 @@ public function update(Request $request, Kecamatan $kecamatan)
*/
public function destroy(Kecamatan $kecamatan)
{
//
try{
Kecamatan::destroy($kecamatan->id);
return redirect('/kecamatan')->with('succes', 'Data Kecamatan Berhasil Di Hapus');
}catch (\Exception $e){
return redirect('/kecamatan')->with('error', 'Data Kecamatan '. $kecamatan->nama_kecamatan .' Gagal Di Hapus | Hapus Data Curas Atau Curanmor Untuk Kecamatan '. $kecamatan->nama_kecamatan.' Terlebih Dahulu');
}
}
}

View File

@ -20,7 +20,7 @@ public function index()
*/
public function create()
{
//
return view('admin.dashboardTambahKlaster');
}
/**
@ -28,7 +28,19 @@ public function create()
*/
public function store(Request $request)
{
//
try{
$validateData = $request->validate([
'nama_klaster' =>'required|max:255|unique:klasters,nama_klaster',
'warna' =>'required|max:255',
]);
Klaster::create($validateData);
return redirect('/klaster')->with('succes', 'Berhasil Menambahkan Klaster Baru');
}catch (\Exception $e){
return redirect('/klaster')->with('error', 'Gagal Menambahkan Klaster Baru');
}
}
/**
@ -44,7 +56,14 @@ public function show(Klaster $klaster)
*/
public function edit(Klaster $klaster)
{
//
try {
return view('admin.dashboardEditKlaster', [
'klaster' => $klaster
]);
} catch (\Exception $e) {
abort(404); // Jika dekripsi gagal, tampilkan halaman 404
}
}
/**
@ -52,7 +71,20 @@ public function edit(Klaster $klaster)
*/
public function update(Request $request, Klaster $klaster)
{
//
try {
$validateData = $request->validate([
'nama_klaster' => 'sometimes|required|max:255|unique:klasters,nama_klaster,' . $klaster->id,
'warna' => 'sometimes|required|max:255',
]);
// Hanya update data yang diisi (tidak mengganti dengan null)
Klaster::where('id', $klaster->id)->update(array_filter($validateData));
return redirect('/klaster')->with('success', 'Data Klaster Berhasil Diubah');
} catch (\Exception $e) {
return redirect('/klaster')->with('error', 'Data Klaster Gagal Diubah');
}
}
/**
@ -60,6 +92,12 @@ public function update(Request $request, Klaster $klaster)
*/
public function destroy(Klaster $klaster)
{
//
try{
Klaster::destroy($klaster->id);
return redirect('/klaster')->with('succes', 'Data Klaster Berhasil Di Hapus');
}catch (\Exception $e){
return redirect('/klaster')->with('error', 'Data Klaster '. $klaster->nama_kecamatan .' Gagal Di Hapus | Hapus Data Curas Atau Curanmor Untuk Klaster '. $klaster->nama_kecamatan.' Terlebih Dahulu');
}
}
}

View File

@ -17,7 +17,7 @@ public function punyaKlasterCuranmor(): BelongsTo{
return $this->belongsTo(Klaster::class, 'klaster_id');
}
public function punyaKecamatanrCuranmor(): BelongsTo{
public function punyaKecamatanCuranmor(): BelongsTo{
return $this->belongsTo(Kecamatan::class, 'kecamatan_id');
}
}

View File

@ -17,7 +17,8 @@ public function punyaKlasterCuras(): BelongsTo{
return $this->belongsTo(Klaster::class, 'klaster_id');
}
public function punyaKecamatanrCuras(): BelongsTo {
public function punyaKecamatanCuras(): BelongsTo {
return $this->belongsTo(Kecamatan::class, 'kecamatan_id'); // Pastikan FK benar
}

View File

@ -16,8 +16,8 @@ public function up(): void
$table->foreignId('kecamatan_id')->constrained(
table: 'kecamatans', indexName: 'curas_kecamatan_id');
$table->float('jumlah_curas');
$table->foreignId('klaster_id')->constrained(
table: 'klasters', indexName: 'curas_klaster_id');
$table->foreignId('klaster_id')->nullable()->constrained(
table: 'klasters', indexName: 'curas_klaster_id')->onDelete('set null');
$table->timestamps();
});
}

View File

@ -17,7 +17,7 @@ public function up(): void
table: 'kecamatans', indexName: 'curanmor_kecamatan_id');
$table->float('jumlah_curanmor');
$table->foreignId('klaster_id')->nullable()->constrained(
table: 'klasters', indexName: 'klaster_kecamata_id');
table: 'klasters', indexName: 'klaster_kecamata_id')->onDelete('set null');;
$table->timestamps();
});
}

View File

@ -27,7 +27,8 @@ public function run(): void
// Buat data kecamatan dengan klaster_id yang valid
Curanmor::create([
'kecamatan_id' => $kecamatanId1->id,
'jumlah_curanmor' => 90, // Ambil klaster secara acak
'jumlah_curanmor' => 90,
'klaster_id' => $klasterId->random(),// Ambil klaster secara acak
]);
Curanmor::create([
'kecamatan_id' => $kecamatanId2->id,

View File

@ -15,17 +15,17 @@ public function run(): void
{
Klaster::create([
'nama_klaster'=> 'Aman',
'warna'=> 'Hijau',
'warna'=> '#00FF00',
]);
Klaster::create([
'nama_klaster'=> 'Sedang',
'warna'=> 'Kuning',
'warna'=> '#FFFF00',
]);
Klaster::create([
'nama_klaster'=> 'Rawan',
'warna'=> 'Merah',
'warna'=> '#FF0000',
]);
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,575 @@
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
var immediate = require('immediate');
/* istanbul ignore next */
function INTERNAL() {}
var handlers = {};
var REJECTED = ['REJECTED'];
var FULFILLED = ['FULFILLED'];
var PENDING = ['PENDING'];
module.exports = exports = Promise;
function Promise(resolver) {
if (typeof resolver !== 'function') {
throw new TypeError('resolver must be a function');
}
this.state = PENDING;
this.queue = [];
this.outcome = void 0;
if (resolver !== INTERNAL) {
safelyResolveThenable(this, resolver);
}
}
Promise.prototype["catch"] = function (onRejected) {
return this.then(null, onRejected);
};
Promise.prototype.then = function (onFulfilled, onRejected) {
if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
typeof onRejected !== 'function' && this.state === REJECTED) {
return this;
}
var promise = new this.constructor(INTERNAL);
if (this.state !== PENDING) {
var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
unwrap(promise, resolver, this.outcome);
} else {
this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
}
return promise;
};
function QueueItem(promise, onFulfilled, onRejected) {
this.promise = promise;
if (typeof onFulfilled === 'function') {
this.onFulfilled = onFulfilled;
this.callFulfilled = this.otherCallFulfilled;
}
if (typeof onRejected === 'function') {
this.onRejected = onRejected;
this.callRejected = this.otherCallRejected;
}
}
QueueItem.prototype.callFulfilled = function (value) {
handlers.resolve(this.promise, value);
};
QueueItem.prototype.otherCallFulfilled = function (value) {
unwrap(this.promise, this.onFulfilled, value);
};
QueueItem.prototype.callRejected = function (value) {
handlers.reject(this.promise, value);
};
QueueItem.prototype.otherCallRejected = function (value) {
unwrap(this.promise, this.onRejected, value);
};
function unwrap(promise, func, value) {
immediate(function () {
var returnValue;
try {
returnValue = func(value);
} catch (e) {
return handlers.reject(promise, e);
}
if (returnValue === promise) {
handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
} else {
handlers.resolve(promise, returnValue);
}
});
}
handlers.resolve = function (self, value) {
var result = tryCatch(getThen, value);
if (result.status === 'error') {
return handlers.reject(self, result.value);
}
var thenable = result.value;
if (thenable) {
safelyResolveThenable(self, thenable);
} else {
self.state = FULFILLED;
self.outcome = value;
var i = -1;
var len = self.queue.length;
while (++i < len) {
self.queue[i].callFulfilled(value);
}
}
return self;
};
handlers.reject = function (self, error) {
self.state = REJECTED;
self.outcome = error;
var i = -1;
var len = self.queue.length;
while (++i < len) {
self.queue[i].callRejected(error);
}
return self;
};
function getThen(obj) {
// Make sure we only access the accessor once as required by the spec
var then = obj && obj.then;
if (obj && typeof obj === 'object' && typeof then === 'function') {
return function appyThen() {
then.apply(obj, arguments);
};
}
}
function safelyResolveThenable(self, thenable) {
// Either fulfill, reject or reject with error
var called = false;
function onError(value) {
if (called) {
return;
}
called = true;
handlers.reject(self, value);
}
function onSuccess(value) {
if (called) {
return;
}
called = true;
handlers.resolve(self, value);
}
function tryToUnwrap() {
thenable(onSuccess, onError);
}
var result = tryCatch(tryToUnwrap);
if (result.status === 'error') {
onError(result.value);
}
}
function tryCatch(func, value) {
var out = {};
try {
out.value = func(value);
out.status = 'success';
} catch (e) {
out.status = 'error';
out.value = e;
}
return out;
}
exports.resolve = resolve;
function resolve(value) {
if (value instanceof this) {
return value;
}
return handlers.resolve(new this(INTERNAL), value);
}
exports.reject = reject;
function reject(reason) {
var promise = new this(INTERNAL);
return handlers.reject(promise, reason);
}
exports.all = all;
function all(iterable) {
var self = this;
if (Object.prototype.toString.call(iterable) !== '[object Array]') {
return this.reject(new TypeError('must be an array'));
}
var len = iterable.length;
var called = false;
if (!len) {
return this.resolve([]);
}
var values = new Array(len);
var resolved = 0;
var i = -1;
var promise = new this(INTERNAL);
while (++i < len) {
allResolver(iterable[i], i);
}
return promise;
function allResolver(value, i) {
self.resolve(value).then(resolveFromAll, function (error) {
if (!called) {
called = true;
handlers.reject(promise, error);
}
});
function resolveFromAll(outValue) {
values[i] = outValue;
if (++resolved === len && !called) {
called = true;
handlers.resolve(promise, values);
}
}
}
}
exports.race = race;
function race(iterable) {
var self = this;
if (Object.prototype.toString.call(iterable) !== '[object Array]') {
return this.reject(new TypeError('must be an array'));
}
var len = iterable.length;
var called = false;
if (!len) {
return this.resolve([]);
}
var i = -1;
var promise = new this(INTERNAL);
while (++i < len) {
resolver(iterable[i]);
}
return promise;
function resolver(value) {
self.resolve(value).then(function (response) {
if (!called) {
called = true;
handlers.resolve(promise, response);
}
}, function (error) {
if (!called) {
called = true;
handlers.reject(promise, error);
}
});
}
}
},{"immediate":2}],2:[function(require,module,exports){
(function (global){
'use strict';
var Mutation = global.MutationObserver || global.WebKitMutationObserver;
var scheduleDrain;
{
if (Mutation) {
var called = 0;
var observer = new Mutation(nextTick);
var element = global.document.createTextNode('');
observer.observe(element, {
characterData: true
});
scheduleDrain = function () {
element.data = (called = ++called % 2);
};
} else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
var channel = new global.MessageChannel();
channel.port1.onmessage = nextTick;
scheduleDrain = function () {
channel.port2.postMessage(0);
};
} else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
scheduleDrain = function () {
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
var scriptEl = global.document.createElement('script');
scriptEl.onreadystatechange = function () {
nextTick();
scriptEl.onreadystatechange = null;
scriptEl.parentNode.removeChild(scriptEl);
scriptEl = null;
};
global.document.documentElement.appendChild(scriptEl);
};
} else {
scheduleDrain = function () {
setTimeout(nextTick, 0);
};
}
}
var draining;
var queue = [];
//named nextTick for less confusing stack traces
function nextTick() {
draining = true;
var i, oldQueue;
var len = queue.length;
while (len) {
oldQueue = queue;
queue = [];
i = -1;
while (++i < len) {
oldQueue[i]();
}
len = queue.length;
}
draining = false;
}
module.exports = immediate;
function immediate(task) {
if (queue.push(task) === 1 && !draining) {
scheduleDrain();
}
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],3:[function(require,module,exports){
(function (global){
'use strict';
var jsonp = require('./jsonp');
var Promise = require('lie');
module.exports = function (url, options) {
options = options || {};
if (options.jsonp) {
return jsonp(url, options);
}
var request;
var cancel;
var out = new Promise(function (resolve, reject) {
cancel = reject;
if (global.XMLHttpRequest === undefined) {
reject('XMLHttpRequest is not supported');
}
var response;
request = new global.XMLHttpRequest();
request.open('GET', url);
if (options.headers) {
Object.keys(options.headers).forEach(function (key) {
request.setRequestHeader(key, options.headers[key]);
});
}
request.onreadystatechange = function () {
if (request.readyState === 4) {
if ((request.status < 400 && options.local) || request.status === 200) {
if (global.JSON) {
response = JSON.parse(request.responseText);
} else {
reject(new Error('JSON is not supported'));
}
resolve(response);
} else {
if (!request.status) {
reject('Attempted cross origin request without CORS enabled');
} else {
reject(request.statusText);
}
}
}
};
request.send();
});
out.catch(function (reason) {
request.abort();
return reason;
});
out.abort = cancel;
return out;
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./jsonp":5,"lie":1}],4:[function(require,module,exports){
(function (global){
'use strict';
var L = global.L || require('leaflet');
var Promise = require('lie');
var ajax = require('./ajax');
L.GeoJSON.AJAX = L.GeoJSON.extend({
defaultAJAXparams: {
dataType: 'json',
callbackParam: 'callback',
local: false,
middleware: function (f) {
return f;
}
},
initialize: function (url, options) {
this.urls = [];
if (url) {
if (typeof url === 'string') {
this.urls.push(url);
} else if (typeof url.pop === 'function') {
this.urls = this.urls.concat(url);
} else {
options = url;
url = undefined;
}
}
var ajaxParams = L.Util.extend({}, this.defaultAJAXparams);
for (var i in options) {
if (this.defaultAJAXparams.hasOwnProperty(i)) {
ajaxParams[i] = options[i];
}
}
this.ajaxParams = ajaxParams;
this._layers = {};
L.Util.setOptions(this, options);
this.on('data:loaded', function () {
if (this.filter) {
this.refilter(this.filter);
}
}, this);
var self = this;
if (this.urls.length > 0) {
new Promise(function (resolve) {
resolve();
}).then(function () {
self.addUrl();
});
}
},
clearLayers: function () {
this.urls = [];
L.GeoJSON.prototype.clearLayers.call(this);
return this;
},
addUrl: function (url) {
var self = this;
if (url) {
if (typeof url === 'string') {
self.urls.push(url);
} else if (typeof url.pop === 'function') {
self.urls = self.urls.concat(url);
}
}
var loading = self.urls.length;
var done = 0;
self.fire('data:loading');
self.urls.forEach(function (url) {
if (self.ajaxParams.dataType.toLowerCase() === 'json') {
ajax(url, self.ajaxParams).then(function (d) {
var data = self.ajaxParams.middleware(d);
self.addData(data);
self.fire('data:progress', data);
}, function (err) {
self.fire('data:progress', {
error: err
});
});
} else if (self.ajaxParams.dataType.toLowerCase() === 'jsonp') {
L.Util.jsonp(url, self.ajaxParams).then(function (d) {
var data = self.ajaxParams.middleware(d);
self.addData(data);
self.fire('data:progress', data);
}, function (err) {
self.fire('data:progress', {
error: err
});
});
}
});
self.on('data:progress', function () {
if (++done === loading) {
self.fire('data:loaded');
}
});
},
refresh: function (url) {
url = url || this.urls;
this.clearLayers();
this.addUrl(url);
},
refilter: function (func) {
if (typeof func !== 'function') {
this.filter = false;
this.eachLayer(function (a) {
a.setStyle({
stroke: true,
clickable: true
});
});
} else {
this.filter = func;
this.eachLayer(function (a) {
if (func(a.feature)) {
a.setStyle({
stroke: true,
clickable: true
});
} else {
a.setStyle({
stroke: false,
clickable: false
});
}
});
}
}
});
L.Util.Promise = Promise;
L.Util.ajax = ajax;
L.Util.jsonp = require('./jsonp');
L.geoJson.ajax = function (geojson, options) {
return new L.GeoJSON.AJAX(geojson, options);
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./ajax":3,"./jsonp":5,"leaflet":undefined,"lie":1}],5:[function(require,module,exports){
(function (global){
'use strict';
var L = global.L || require('leaflet');
var Promise = require('lie');
module.exports = function (url, options) {
options = options || {};
var head = document.getElementsByTagName('head')[0];
var scriptNode = L.DomUtil.create('script', '', head);
var cbName, ourl, cbSuffix, cancel;
var out = new Promise(function (resolve, reject) {
cancel = reject;
var cbParam = options.cbParam || 'callback';
if (options.callbackName) {
cbName = options.callbackName;
} else {
cbSuffix = '_' + ('' + Math.random()).slice(2);
cbName = '_leafletJSONPcallbacks.' + cbSuffix;
}
scriptNode.type = 'text/javascript';
if (cbSuffix) {
if (!global._leafletJSONPcallbacks) {
global._leafletJSONPcallbacks = {
length: 0
};
}
global._leafletJSONPcallbacks.length++;
global._leafletJSONPcallbacks[cbSuffix] = function (data) {
head.removeChild(scriptNode);
delete global._leafletJSONPcallbacks[cbSuffix];
global._leafletJSONPcallbacks.length--;
if (!global._leafletJSONPcallbacks.length) {
delete global._leafletJSONPcallbacks;
}
resolve(data);
};
}
if (url.indexOf('?') === -1) {
ourl = url + '?' + cbParam + '=' + cbName;
} else {
ourl = url + '&' + cbParam + '=' + cbName;
}
scriptNode.src = ourl;
}).then(null, function (reason) {
head.removeChild(scriptNode);
delete L.Util.ajax.cb[cbSuffix];
return reason;
});
out.abort = cancel;
return out;
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"leaflet":undefined,"lie":1}]},{},[4]);

View File

@ -0,0 +1,63 @@
<x-layoutAdmin>
<div class="content-page">
<div class="container-fluid add-form-list">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header d-flex justify-content-between">
<div class="header-title">
<h4 class="card-title">Ubah Data Kasus CURAS Pada Kecamatan
{{ $curas->punyaKecamatanCuras->nama_kecamatan}}</h4>
</div>
</div>
<div class="card-body">
<form action="/curas/{{ $curas->id }}" data-toggle="validator" method="post">
@method('put')
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Kecamatan *</label>
<select class="selectpicker form-control" data-style="py-0" id="kecamatan_id" name="kecamatan_id">
<option value="" selected disabled> Pilih Kecamatan </option>
@foreach ( $kecamatans as $kecamatan )
<option value="{{ $kecamatan->id }}"
{{ old('kecamatan_id', $curas->kecamatan_id) == $kecamatan->id ? 'selected' : '' }}>
{{ $kecamatan->nama_kecamatan }}
</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Jumlah Kasus Curas *</label>
<input type="text" class="form-control" placeholder="Jumlah Kasus Curas" id="jumlah_curas" name="jumlah_curas" value="{{ old('jumlah_curas', $curas ->jumlah_curas )}}">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Klaster *</label>
<select class="selectpicker form-control" data-style="py-0" name="klaster_id" id="klaster_id">
<option value="" selected disabled>Pilih Klaster</option>
@foreach ( $klasters as $klaster )
<option value="{{ $klaster->id }}" style="background-color: {{ $klaster->warna }}" {{ old('klaster_id', $curas->klaster_id) == $klaster->id ? 'selected' : '' }}>{{ $klaster->nama_klaster }}</option>
@endforeach
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">Tambah Data Kasus Curas</button>
<button type="reset" class="btn btn-danger">Reset</button>
</form>
</div>
</div>
</div>
</div>
<!-- Page end -->
</div>
</div>
</x-layoutAdmin>

View File

@ -0,0 +1,39 @@
<x-layoutAdmin>
<div class="content-page">
<div class="container-fluid add-form-list">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header d-flex justify-content-between">
<div class="header-title">
<h4 class="card-title">Add Sale</h4>
</div>
</div>
<div class="card-body">
<form action="/kecamatan/{{ $kecamatan -> id }}" data-toggle="validator" method="post">
@method('put')
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Kecamatan</label>
<input type="text" class="form-control @error('detail') is-invalid @enderror" placeholder="Nama Kecamatan" value="{{ old('nama_kecamatan', $kecamatan -> nama_kecamatan )}}" id="nama_kecamatan" name="nama_kecamatan">
@error('nama_kecamatan')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">Ubah Data Kecamatan</button>
<button type="reset" class="btn btn-danger">Reset</button>
</form>
</div>
</div>
</div>
</div>
<!-- Page end -->
</div>
</div>
</x-layoutAdmin>

View File

@ -0,0 +1,49 @@
<x-layoutAdmin>
<div class="content-page">
<div class="container-fluid add-form-list">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header d-flex justify-content-between">
<div class="header-title">
<h4 class="card-title">Ubah Data Klaster {{ $klaster->nama_klaster }}</h4>
</div>
</div>
<div class="card-body">
<form action="/klaster/{{ $klaster->id }}" data-toggle="validator" method="POST">
@method('put')
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Klaster</label>
<input type="text" class="form-control @error('nama_klaster') is-invalid @enderror" placeholder="Nama Klaster" id="nama_klaster" name="nama_klaster" value="{{ old('nama_klaster', $klaster -> nama_klaster )}}">
@error('nama_klaster')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Pilih Warna</label>
<input type="color" class="form-control @error('warna') is-invalid @enderror" placeholder="warna" id="warna" name="warna" value="{{ old('warna', $klaster -> warna )}}">
@error('warna')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">Ubah Data Klaster {{ $klaster->nama_klaster }}</button>
<button type="reset" class="btn btn-danger">Reset</button>
</form>
</div>
</div>
</div>
</div>
<!-- Page end -->
</div>
</div>
</x-layoutAdmin>

View File

@ -9,8 +9,18 @@
<p class="mb-0">Sales enables you to effectively control sales KPIs and monitor them in one central<br>
place while helping teams to reach sales goals. </p>
</div>
<a href="page-add-sale.html" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Add Sale</a>
<a href="/curanmor/create" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Tambah Data Curanmor</a>
</div>
@if (session()->has('succes'))
<div class="alert alert-success" role="alert">
{{ session('succes') }}
</div>
@endif
@if (session()->has('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
</div>
@endif
</div>
<div class="col-lg-12">
<div class="table-responsive rounded mb-3">
@ -40,9 +50,9 @@
</div>
</td>
<td>{{ $curanmor->id }}</td>
<td>{{ $curanmor-> punyaKecamatanrCuranmor -> nama_kecamatan }}</td>
<td>{{ $curanmor-> jumlah_curanmor }}</td>
<td>{{ $curanmor-> punyaKlasterCuranmor -> nama_klaster }}</td>
<td>{{ $curanmor->punyaKecamatanCuranmor->nama_kecamatan }}</td>
<td>{{ $curanmor->jumlah_curanmor }}</td>
<td style="background-color: {{ $curanmor->punyaKlasterCuranmor->warna }}">{{ $curanmor->punyaKlasterCuranmor->nama_klaster }}</td>
<td>
<div class="d-flex align-items-center list-action">
<a class="badge badge-info mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="View"

View File

@ -9,8 +9,18 @@
<p class="mb-0">Sales enables you to effectively control sales KPIs and monitor them in one central<br>
place while helping teams to reach sales goals. </p>
</div>
<a href="page-add-sale.html" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Add Sale</a>
<a href="/curas/create" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Tambah Kasus Curas</a>
</div>
@if (session()->has('succes'))
<div class="alert alert-success" role="alert">
{{ session('succes') }}
</div>
@endif
@if (session()->has('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
</div>
@endif
</div>
<div class="col-lg-12">
<div class="table-responsive rounded mb-3">
@ -39,18 +49,20 @@
<label for="checkbox2" class="mb-0"></label>
</div>
</td>
<td>{{ $curas -> id }}</td>
<td>{{ $curas -> punyaKecamatanrCuras -> nama_kecamatan }}</td>
<td>{{ $curas -> jumlah_curas }}</td>
<td>{{ $curas -> punyaKlasterCuras -> nama_klaster }}</td>
<td>{{ $curas->id }}</td>
<td>{{ $curas->punyaKecamatanCuras->nama_kecamatan}}</td>
<td>{{ $curas->jumlah_curas }}</td>
<td style="background-color: {{ $curas->punyaKlasterCuras->warna }}">{{ $curas -> punyaKlasterCuras -> nama_klaster }}</td>
<td>
<div class="d-flex align-items-center list-action">
<a class="badge badge-info mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="View"
href="#"><i class="ri-eye-line mr-0"></i></a>
<a class="badge bg-success mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Edit"
href="#"><i class="ri-pencil-line mr-0"></i></a>
<a class="badge bg-warning mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Delete"
href="#"><i class="ri-delete-bin-line mr-0"></i></a>
href="/curas/{{ $curas->id }}/edit"><i class="ri-pencil-line mr-0"></i></a>
<form action="/curas/{{ $curas->id }}" method="post" class="d-inline">
@method('delete')
@csrf
<button type="submit" class="badge bg-warning mr-2 border-0"><i class="ri-delete-bin-line mr-0"></i></button>
</form>
</div>
</td>
</tr>

View File

@ -6,11 +6,22 @@
<div class="d-flex flex-wrap align-items-center justify-content-between mb-4">
<div>
<h4 class="mb-3">Daftar Kecamatan Kabupaten Probolinggo</h4>
<p class="mb-0">Sales enables you to effectively control sales KPIs and monitor them in one central<br>
place while helping teams to reach sales goals. </p>
<p class="mb-0">Berikut merupakan data seluruh kecamatan yang berada di wilayah <br>
Kabupaten Probolinggo. </p>
</div>
<a href="page-add-sale.html" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Add Sale</a>
<a href="/kecamatan/create" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Tambah Kecamatan</a>
</div>
@if (session()->has('succes'))
<div class="alert alert-success" role="alert">
{{ session('succes') }}
</div>
@endif
@if (session()->has('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
</div>
@endif
</div>
<div class="col-lg-12">
<div class="table-responsive rounded mb-3">
@ -41,12 +52,14 @@
<td>{{ $kecamatan -> nama_kecamatan }}</td>
<td>
<div class="d-flex align-items-center list-action">
<a class="badge badge-info mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="View"
href="#"><i class="ri-eye-line mr-0"></i></a>
<a class="badge bg-success mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Edit"
href="#"><i class="ri-pencil-line mr-0"></i></a>
<a class="badge bg-warning mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Delete"
href="#"><i class="ri-delete-bin-line mr-0"></i></a>
<a class="badge bg-success mr-2" data-toggle="tooltip" data-placement="top" title=""
href="/kecamatan/{{ $kecamatan -> id }}/edit"><i class="ri-pencil-line mr-0"></i></a>
<form action="/kecamatan/{{ $kecamatan->id }}" method="post" class="d-inline">
@method('delete')
@csrf
<button type="submit" class="badge bg-warning mr-2 border-0"><i class="ri-delete-bin-line mr-0"></i></button>
</form>
</div>
</td>
</tr>

View File

@ -9,9 +9,19 @@
<p class="mb-0">Sales enables you to effectively control sales KPIs and monitor them in one central<br>
place while helping teams to reach sales goals. </p>
</div>
<a href="page-add-sale.html" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Add Sale</a>
<a href="/klaster/create" class="btn btn-primary add-list"><i class="las la-plus mr-3"></i>Add Sale</a>
</div>
</div>
@if (session()->has('succes'))
<div class="alert alert-success" role="alert">
{{ session('succes') }}
</div>
@endif
@if (session()->has('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
</div>
@endif
<div class="col-lg-12">
<div class="table-responsive rounded mb-3">
<table class="data-table table mb-0 tbl-server-info">
@ -40,15 +50,17 @@
</td>
<td>{{ $klaster -> id }}</td>
<td>{{ $klaster -> nama_klaster }}</td>
<td>{{ $klaster -> warna }}</td>
<td style="background-color: {{ $klaster->warna }}" >{{ $klaster -> warna }}</td>
<td>
<div class="d-flex align-items-center list-action">
<a class="badge badge-info mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="View"
href="#"><i class="ri-eye-line mr-0"></i></a>
<a class="badge bg-success mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Edit"
href="#"><i class="ri-pencil-line mr-0"></i></a>
<a class="badge bg-warning mr-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="Delete"
href="#"><i class="ri-delete-bin-line mr-0"></i></a>
<a class="badge bg-success mr-2" data-toggle="tooltip" data-placement="top" title=""
href="/klaster/{{ $klaster->id }}/edit"><i class="ri-pencil-line mr-0"></i></a>
<form action="/klaster/{{ $klaster->id }}" method="post" class="d-inline">
@method('delete')
@csrf
<button type="submit" class="badge bg-warning mr-2 border-0"><i class="ri-delete-bin-line mr-0"></i></button>
</form>
</div>
</td>
</tr>

View File

@ -0,0 +1,25 @@
<x-layoutAdmin>
<div class="content-page">
<div id="map" style="width: 100%; height: 500px;" ></div>
<script>
var map = L.map('map').setView([-7.843271790154591, 113.2990930356143], 10);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
function popUp(f,l){
var out = [];
if (f.properties){
for(key in f.properties){
out.push(key+": "+f.properties[key]);
}
l.bindPopup(out.join("<br />"));
}
}
var jsonTest = new L.GeoJSON.AJAX(["{{ asset('/assets/map/gisProbolinggo.geojson') }}"],{onEachFeature:popUp}).addTo(map);
</script>
</div>
</x-layoutAdmin>

View File

@ -10,33 +10,36 @@
</div>
</div>
<div class="card-body">
<form action="page-list-returns.html" data-toggle="validator">
<form action="/curanmor" data-toggle="validator" method="post">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Kecamatan *</label>
<select name="type" class="selectpicker form-control" data-style="py-0">
<select class="selectpicker form-control" data-style="py-0" id="kecamatan_id" name="kecamatan_id">
<option value="" selected disabled>Pilih Kecamatan</option>
<option>Leces</option>
<option>Dringu</option>
<option>Pajarakan</option>
@foreach ( $kecamatans as $kecamatan )
<option value="{{ $kecamatan -> id }}" >{{ $kecamatan -> nama_kecamatan }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Jumlah Kasus Curanmor *</label>
<input type="text" class="form-control" placeholder="Jumlah Kasus Curanmor">
<input type="text" class="form-control" placeholder="Jumlah Kasus Curanmor" id="curanmor" name="jumlah_curanmor">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Klaster *</label>
<select name="type" class="selectpicker form-control" data-style="py-0">
<select class="selectpicker form-control" data-style="py-0" name="klaster_id" id="klaster_id">
<option value="" selected disabled>Pilih Klaster</option>
<option>Aman</option>
<option>Sedang</option>
<option>Rawan</option>
@foreach ( $klasters as $klaster )
<option value="{{ $klaster -> id }}" style="background-color: {{ $klaster->warna }}">{{ $klaster -> nama_klaster }}</option>
@endforeach
</select>
</div>
</div>

View File

@ -10,33 +10,36 @@
</div>
</div>
<div class="card-body">
<form action="page-list-returns.html" data-toggle="validator">
<form action="/curas" data-toggle="validator" method="post">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Kecamatan *</label>
<select name="type" class="selectpicker form-control" data-style="py-0">
<select class="selectpicker form-control" data-style="py-0" id="kecamatan_id" name="kecamatan_id">
<option value="" selected disabled>Pilih Kecamatan</option>
<option>Leces</option>
<option>Dringu</option>
<option>Pajarakan</option>
@foreach ( $kecamatans as $kecamatan )
<option value="{{ $kecamatan -> id }}" >{{ $kecamatan -> nama_kecamatan }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Jumlah Kasus Curas *</label>
<input type="text" class="form-control" placeholder="Jumlah Kasus Curas">
<input type="text" class="form-control" placeholder="Jumlah Kasus Curas" id="jumlah_curas" name="jumlah_curas">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Klaster *</label>
<select name="type" class="selectpicker form-control" data-style="py-0">
<option value="" selected disabled>Pilih Kecamatan</option>
<option>Aman</option>
<option>Sedang</option>
<option>Rawan</option>
<select class="selectpicker form-control" data-style="py-0" name="klaster_id" id="klaster_id">
<option value="" selected disabled>Pilih Klaster</option>
@foreach ( $klasters as $klaster )
<option value="{{ $klaster -> id }}" style="background-color: {{ $klaster->warna }}">{{ $klaster -> nama_klaster }}</option>
@endforeach
</select>
</div>
</div>

View File

@ -6,16 +6,21 @@
<div class="card">
<div class="card-header d-flex justify-content-between">
<div class="header-title">
<h4 class="card-title">Add Sale</h4>
<h4 class="card-title">Tambah Data Kecamatan Baru</h4>
</div>
</div>
<div class="card-body">
<form action="page-list-returns.html" data-toggle="validator">
<form action="/kecamatan" data-toggle="validator" method="POST">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Kecamatan</label>
<input type="text" class="form-control" placeholder="Nama Kecamatan">
<input type="text" class="form-control @error('nama_kecamatan') is-invalid @enderror" placeholder="Nama Kecamatan" id="nama_kecamatan" name="nama_kecamatan">
@error('nama_kecamatan')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
</div>

View File

@ -6,22 +6,31 @@
<div class="card">
<div class="card-header d-flex justify-content-between">
<div class="header-title">
<h4 class="card-title">Add Sale</h4>
<h4 class="card-title">Tambah Klaster Baru</h4>
</div>
</div>
<div class="card-body">
<form action="page-list-returns.html" data-toggle="validator">
<form action="/klaster" data-toggle="validator" method="POST">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Klaster</label>
<input type="text" class="form-control" placeholder="Nama Klaster">
<input type="text" class="form-control @error('nama_klaster') is-invalid @enderror" placeholder="Nama Klaster" id="nama_klaster" name="nama_klaster">
@error('nama_klaster')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
<div class="col-md-3">
<div class="col-md-6">
<div class="form-group">
<label for="warna">Pilih Warna</label>
<input placeholder="Pilih Warna" type="color" id="warna" name="warna" class="form-control" value="#ff0000">
<label>Pilih Warna</label>
<input type="color" class="form-control @error('warna') is-invalid @enderror" placeholder="warna" id="warna" name="warna">
@error('warna')
<div class="invalid-feedback">{{$message}}
</div>
@enderror
</div>
</div>
</div>

View File

@ -6,12 +6,18 @@
<title>POS Dash | Responsive Bootstrap 4 Admin Dashboard Template</title>
<!-- Favicon -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
<script src="{{ asset('assets/map/leaflet.ajax.js') }}" ></script>
<link rel="shortcut icon" href="{{ asset('/assets/images/favicon.ico') }}" />
<link rel="stylesheet" href="{{ asset('/assets/css/backend-plugin.min.css') }}">
<link rel="stylesheet" href="{{ asset('/assets/css/backend.css?v=1.0.0') }}">
<link rel="stylesheet" href="{{ asset('/assets/vendor/@fortawesome/fontawesome-free/css/all.min.css') }}/">
<link rel="stylesheet" href="{{ asset('/assets/vendor/line-awesome/dist/line-awesome/css/line-awesome.min.css') }}">
<link rel="stylesheet" href="{{ asset('/assets/vendor/remixicon/fonts/remixicon.css') }}"> </head>
<link rel="stylesheet" href="{{ asset('/assets/vendor/remixicon/fonts/remixicon.css') }}">
</head>
<body class=" ">
<!-- loader Start -->
<div id="loading">
@ -25,7 +31,7 @@
<div class="iq-sidebar sidebar-default ">
<div class="iq-sidebar-logo d-flex align-items-center justify-content-between">
<a href="/dashboard" class="header-logo">
<img src="../assets/images/logo.png" class="img-fluid rounded-normal light-logo" alt="logo"><h5 class="logo-title light-logo ml-3">POSDash</h5>
<img src="{{ asset('/assets/images/logo.png') }}" class="img-fluid rounded-normal light-logo" alt="logo"><h5 class="logo-title light-logo ml-3">POSDash</h5>
</a>
<div class="iq-menu-bt-sidebar ml-0">
<i class="las la-bars wrapper-menu"></i>
@ -59,45 +65,12 @@
</a>
</li>
<li class="">
<a href="/tambahKecamatan">
<a href="/kecamatan/create">
<i class="las la-minus"></i><span>Tambah Data Kecamatan</span>
</a>
</li>
</ul>
</li>
<li class=" ">
<a href="#people" class="collapsed" data-toggle="collapse" aria-expanded="false">
<svg class="svg-icon" id="p-dash8" width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
</svg>
<span class="ml-4">Curas & Curanmor</span>
<svg class="svg-icon iq-arrow-right arrow-active" width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="10 15 15 20 20 15"></polyline><path d="M4 4h7a4 4 0 0 1 4 4v12"></path>
</svg>
</a>
<ul id="people" class="iq-submenu collapse" data-parent="#iq-sidebar-toggle">
<li class="">
<a href="/Curas">
<i class="las la-minus"></i><span>Kasus Curas</span>
</a>
</li>
<li class="">
<a href="/tambahCuras">
<i class="las la-minus"></i><span>Tambah Kasus Curas</span>
</a>
</li>
<li class="">
<a href="/Curanmor">
<i class="las la-minus"></i><span>Kasus Curanmor</span>
</a>
</li>
<li class="">
<a href="/tambahCuranmor">
<i class="las la-minus"></i><span>Tambah Kasus Curanmor</span>
</a>
</li>
</ul>
</li>
<li class=" ">
<a href="#sale" class="collapsed" data-toggle="collapse" aria-expanded="false">
<svg class="svg-icon" id="p-dash4" width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@ -110,17 +83,62 @@
</a>
<ul id="sale" class="iq-submenu collapse" data-parent="#iq-sidebar-toggle">
<li class="">
<a href="/Klaster">
<a href="/klaster">
<i class="las la-minus"></i><span>Daftar Klaster</span>
</a>
</li>
<li class="">
<a href="/tambahKlaster">
<a href="/klaster/create">
<i class="las la-minus"></i><span>Tambah Klaster</span>
</a>
</li>
</ul>
</li>
<li class=" ">
<a href="#people" class="collapsed" data-toggle="collapse" aria-expanded="false">
<svg class="svg-icon" id="p-dash8" width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
</svg>
<span class="ml-4">Curas & Curanmor</span>
<svg class="svg-icon iq-arrow-right arrow-active" width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="10 15 15 20 20 15"></polyline><path d="M4 4h7a4 4 0 0 1 4 4v12"></path>
</svg>
</a>
<ul id="people" class="iq-submenu collapse" data-parent="#iq-sidebar-toggle">
<li class="">
<a href="/curas">
<i class="las la-minus"></i><span>Kasus Curas</span>
</a>
</li>
<li class="">
<a href="/curas/create">
<i class="las la-minus"></i><span>Tambah Kasus Curas</span>
</a>
</li>
<li class="">
<a href="/mapcuras">
<i class="las la-minus"></i><span>Pemetaan Kasus Curas</span>
</a>
</li>
<li class="">
<a href="/curanmor">
<i class="las la-minus"></i><span>Kasus Curanmor</span>
</a>
</li>
<li class="">
<a href="/curanmor/create">
<i class="las la-minus"></i><span>Tambah Kasus Curanmor</span>
</a>
</li>
<li class="">
<a href="/mapcuras">
<i class="las la-minus"></i><span>Pemetaan Kasus Curanmor</span>
</a>
</li>
</ul>
</li>
</ul>
</nav>
@ -132,7 +150,7 @@
<div class="iq-navbar-logo d-flex align-items-center justify-content-between">
<i class="ri-menu-line wrapper-menu"></i>
<a href="../backend/index.html" class="header-logo">
<img src="../assets/images/logo.png" class="img-fluid rounded-normal" alt="logo">
<img src="{{ asset('assets/images/logo.png') }}" class="img-fluid rounded-normal" alt="logo">
<h5 class="logo-title ml-3">POSDash</h5>
</a>
@ -155,26 +173,26 @@
<a href="#" class="search-toggle dropdown-toggle btn border add-btn"
id="dropdownMenuButton02" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<img src="../assets/images/small/flag-01.png" alt="img-flag"
<img src="{{ asset('assets/images/small/flag-01.png') }}" alt="img-flag"
class="img-fluid image-flag mr-2">En
</a>
<div class="iq-sub-dropdown dropdown-menu" aria-labelledby="dropdownMenuButton2">
<div class="card shadow-none m-0">
<div class="card-body p-3">
<a class="iq-sub-card" href="#"><img
src="../assets/images/small/flag-02.png" alt="img-flag"
src="{{ asset('assets/images/small/flag-02.png') }}" alt="img-flag"
class="img-fluid mr-2">French</a>
<a class="iq-sub-card" href="#"><img
src="../assets/images/small/flag-03.png" alt="img-flag"
src="{{ asset('assets/images/small/flag-03.png') }}" alt="img-flag"
class="img-fluid mr-2">Spanish</a>
<a class="iq-sub-card" href="#"><img
src="../assets/images/small/flag-04.png" alt="img-flag"
src="{{ asset('assets/images/small/flag-04.png') }}" alt="img-flag"
class="img-fluid mr-2">Italian</a>
<a class="iq-sub-card" href="#"><img
src="../assets/images/small/flag-05.png" alt="img-flag"
src="{{ asset('assets/images/small/flag-05.png') }}" alt="img-flag"
class="img-fluid mr-2">German</a>
<a class="iq-sub-card" href="#"><img
src="../assets/images/small/flag-06.png" alt="img-flag"
src="{{ asset('assets/images/small/flag-06.png') }}" alt="img-flag"
class="img-fluid mr-2">Japanese</a>
</div>
</div>
@ -227,7 +245,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/01.jpg" alt="01">
src="{{ asset('assets/images/user/01.jpg') }}" alt="01">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -242,7 +260,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/02.jpg" alt="02">
src="{{ asset('assets/images/user/02.jpg') }}" alt="02">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -257,7 +275,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/03.jpg" alt="03">
src="{{ asset('assets/images/user/03.jpg') }}" alt="03">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -302,7 +320,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/01.jpg" alt="01">
src="{{ asset('assets/images/user/01.jpg') }}" alt="01">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -317,7 +335,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/02.jpg" alt="02">
src="{{ asset('assets/images/user/02.jpg') }}" alt="02">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -332,7 +350,7 @@ class="img-fluid mr-2">Japanese</a>
<div class="media align-items-center cust-card py-3">
<div class="">
<img class="avatar-50 rounded-small"
src="../assets/images/user/03.jpg" alt="03">
src="{{ asset('assets/images/user/03.jpg') }}" alt="03">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
@ -355,15 +373,15 @@ class="img-fluid mr-2">Japanese</a>
<li class="nav-item nav-icon dropdown caption-content">
<a href="#" class="search-toggle dropdown-toggle" id="dropdownMenuButton4"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img src="../assets/images/user/1.png" class="img-fluid rounded" alt="user">
<img src="{{ asset('assets/images/user/1.png') }}" class="img-fluid rounded" alt="user">
</a>
<div class="iq-sub-dropdown dropdown-menu" aria-labelledby="dropdownMenuButton">
<div class="card shadow-none m-0">
<div class="card-body p-0 text-center">
<div class="media-body profile-detail text-center">
<img src="../assets/images/page-img/profile-bg.jpg" alt="profile-bg"
<img src="{{ asset('assets/images/page-img/profile-bg.jpg') }}" alt="profile-bg"
class="rounded-top img-fluid mb-4">
<img src="../assets/images/user/1.png" alt="profile-img"
<img src="{{ asset('assets/images/user/1.png') }}" alt="profile-img"
class="rounded profile-img img-fluid avatar-70">
</div>
<div class="p-3">

View File

@ -18,7 +18,12 @@
return view('admin.dashboardBlank');
});
Route::get('/mapcuras', function () {
return view('admin.dashboardMapCuras');
});
Route::resource('/kecamatan', KecamatanController::class) ->parameters(['data-kecamatan' => 'kecamatan']);
Route::resource('/Curas', CurasController::class) ->parameters(['data-curas' => 'curas']);
Route::resource('/Curanmor', CuranmorController::class) ->parameters(['data-curanmor' => 'curanmor']);
Route::resource('/Klaster', KlasterController::class) ->parameters(['data-klaster' => 'klaster']);
Route::resource('/curas', CurasController::class);
Route::resource('/curanmor', CuranmorController::class) ->parameters(['data-curanmor' => 'curanmor']);
Route::resource('/klaster', KlasterController::class) ->parameters(['data-klaster' => 'klaster']);