ont-web-server/routes/ui/list.html

570 lines
16 KiB
HTML
Executable File

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Halaman LIst ONT</title>
<!-- Main Styles -->
<link rel="stylesheet" href="/styles/style.min.css">
<!-- mCustomScrollbar -->
<link rel="stylesheet" href="/plugin/mCustomScrollbar/jquery.mCustomScrollbar.min.css">
<!-- Waves Effect -->
<link rel="stylesheet" href="/plugin/waves/waves.min.css">
<!-- Sweet Alert -->
<link rel="stylesheet" href="/plugin/sweet-alert/sweetalert.css">
<link rel="stylesheet" href="/fonts/fontello/fontello.css">
<link rel="stylesheet" href="/fonts/material-design-iconic-font/css/material-design-iconic-font.min.css">
<link rel="stylesheet" href="/fonts/material-design/css/materialdesignicons.css">
<link rel="stylesheet" href="/plugin/datatables/media/css/dataTables.bootstrap.min.css">
</head>
<body>
<div class="main-menu">
<header class="header">
<a href="/" class="logo">ONT Checker</a>
<button type="button" class="button-close fa fa-times js__menu_close"></button>
<div class="user">
<a href="#" class="avatar"><img src="/images/visitor.png" alt=""></a>
<h5 class="name"><a href="#">Admin</a></h5>
<h5 class="position">Administrator</h5>
<!-- /.name -->
<!-- <div class="control-wrap js__drop_down">
<i class="fa fa-caret-down js__drop_down_button"></i>
<div class="control-list">
<div class="control-item"><a href="profile.html"><i class="fa fa-user"></i> Profile</a></div>
<div class="control-item"><a href="#"><i class="fa fa-gear"></i> Settings</a></div>
<div class="control-item"><a href="#"><i class="fa fa-sign-out"></i> Log out</a></div>
</div>
</div> -->
<!-- /.control-wrap -->
</div>
<!-- /.user -->
</header>
<!-- /.header -->
<div class="content">
<div class="navigation">
<h5 class="title">Navigasi</h5>
<!-- /.title -->
<ul class="menu js__accordion">
<li>
<a class="waves-effect" href="/admin"><i class="menu-icon fa fa-home"></i><span>Halaman
Utama</span></a>
</li>
<li class="current">
<a class="waves-effect" href="/admin/list"><i class="menu-icon fa fa-list"></i><span>List
ONT</span></a>
</li>
<!-- <li>
<a class="waves-effect" href="/before-login/siswa" ><i
class="menu-icon fa fa-users"></i><span>Siswa</span></a>
</li>
<li>
<a class="waves-effect" href="#" onclick="notAvailable()"><i
class="menu-icon ico mdi mdi-account-switch"></i><span>Staf</span></a>
</li>
-->
<li>
<a class="waves-effect" href="/"><i
class="menu-icon ico icon-logout"></i><span>Logout</span></a>
</li>
</ul>
</div>
<!-- /.navigation -->
</div>
<!-- /.content -->
</div>
<!-- /.main-menu -->
<div class="fixed-navbar">
<div class="pull-left">
<button type="button"
class="menu-mobile-button glyphicon glyphicon-menu-hamburger js__menu_mobile"></button>
<h1 class="page-title">Halaman List ONT</h1>
<!-- /.page-title -->
</div>
<!-- /.pull-left -->
<div class="pull-right">
<a href="/before-login" class="ico-item ico icon-login"></a>
</div>
<!-- /.pull-right -->
</div>
<!-- /.fixed-navbar -->
<div id="wrapper">
<div class="main-content">
<div class="row">
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="box-content">
<h4 class="box-title">Jumlah ONT</h4>
<!-- /.box-title -->
<!-- /.dropdown js__dropdown -->
<div class="content">
<div class="row small-spacing">
<div class="col-xs-6">
<img src="/images/ont.png" alt="" style="width: 83%;">
</div>
<!-- show this icon ico icon-users-1 -->
<div class="col-xs-6">
<div class="right-content">
<h2 class="all-ont-counter">-</h2>
<!-- /.counter -->
<p class="text">ONT</p>
<!-- /.text -->
</div>
</div>
<!-- /.right-content -->
</div>
</div>
<!-- /.content -->
</div>
<!-- /.box-content -->
</div>
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="box-content">
<h4 class="box-title">Terhubung</h4>
<!-- /.box-title -->
<!-- /.dropdown js__dropdown -->
<div class="content">
<div class="row small-spacing">
<div class="col-xs-6">
<img src="/images/ont.png" alt="" style="width: 83%;">
</div>
<!-- show this icon ico icon-users-1 -->
<div class="col-xs-6">
<div class="right-content">
<h2 class="connected-ont-counter">-</h2>
<!-- /.counter -->
<p class="text">ONT</p>
<!-- /.text -->
</div>
</div>
<!-- /.right-content -->
</div>
</div>
<!-- /.content -->
</div>
<!-- /.box-content -->
</div>
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="box-content">
<h4 class="box-title">Disconnected</h4>
<!-- /.box-title -->
<!-- /.dropdown js__dropdown -->
<div class="content">
<div class="row small-spacing">
<div class="col-xs-6">
<img src="/images/ont.png" alt="" style="width: 83%;">
</div>
<!-- show this icon ico icon-users-1 -->
<div class="col-xs-6">
<div class="right-content">
<h2 class="disconnected-ont-counter">-</h2>
<!-- /.counter -->
<p class="text">ONT</p>
<!-- /.text -->
</div>
</div>
<!-- /.right-content -->
</div>
</div>
<!-- /.content -->
</div>
<!-- /.box-content -->
</div>
<!-- <div class="col-lg-4 col-md-4 col-xs-12">
<div class="box-content">
<h4 class="box-title">Jumlah Teknisi</h4>
<div class="content">
<div class="row small-spacing">
<div class="col-xs-6">
<img src="/images/staf.png" alt="" style="width: 110%;">
</div>
<div class="col-xs-6">
<div class="right-content">
<h2 class="staf-counter">10</h2>
<p class="text">Orang</p>
</div>
</div>
</div>
</div>
</div>
</div> -->
</div>
<div class="row small-spacing">
<div class="col-xs-12">
<div class="box-content card">
<h4 class="box-title">List ONT </h4>
<!-- /.box-title -->
<div class="card-content">
<div class="form-group">
<button type="button" class="btn btn-primary btn-xs"
onclick="bukaModal('tambah');">Tambah
ONT</button>
</div>
<div class="form-group">
<table id="tb-ont" class="table table-striped table-bordered display"
style="width:100%; ">
</table>
</div>
</div>
</div>
<!-- /.box-content -->
</div>
</div>
<footer class="footer">
<ul class="list-inline">
<li>2024 © ONT Checker.</li>
<!-- <li><a href="#">Privacy</a></li>
<li><a href="#">Terms</a></li>
<li><a href="#">Help</a></li> -->
</ul>
</footer>
</div>
<!-- /.main-content -->
</div><!--/#wrapper -->
<div class="modal fade" id="modal-ont" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="modal-ont-title">Modal title</h4>
</div>
<form class="modal-body" id="form-modal">
<div class="form-group">
<label for="modal-ont-nama">Nama</label>
<input type="text" class="form-control" id="nama" maxlength="50" placeholder="Masukkan Nama">
</div>
<div class="form-group">
<label for="modal-ont-alamat">Alamat</label>
<textarea name="alamat" class="form-control" id="alamat"
placeholder="Masukkan Alamat"></textarea>
</div>
<div class="form-group">
<label for="modal-ont-langganan">Langganan</label>
<select class="form-control" id="select-langanan">
<option value="" disabled selected>-Pilih Jenis Langganan</option>
<option value="30mbps/bulan">30mbps/bulan</option>
<option value="50mbps/bulan">50mbps/bulan</option>
<option value="100mbps/bulan">100mbps/bulan</option>
</select>
</div>
</form>
<div class="modal-footer">
<button type="button" class="btn btn-default btn-sm waves-effect waves-light"
data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary btn-sm waves-effect waves-light" id="btn-tambah-ont"
onclick="tambahont()">Tambah ONT</button>
<button type="button" class="btn btn-info btn-sm waves-effect waves-light" id="btn-edit-ont"
onclick="editont()">Edit ONT</button>
<button type="button" class="btn btn-danger btn-sm waves-effect waves-light" id="btn-hapus-ont"
onclick="hapusont()">Hapus ONT</button>
</div>
</div>
</div>
</div>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="/script/html5shiv.min.js"></script>
<script src="/script/respond.min.js"></script>
<![endif]-->
<!--
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="/scripts/jquery.min.js"></script>
<script src="/scripts/modernizr.min.js"></script>
<script src="/plugin/bootstrap/js/bootstrap.min.js"></script>
<script src="/plugin/mCustomScrollbar/jquery.mCustomScrollbar.concat.min.js"></script>
<script src="/plugin/nprogress/nprogress.js"></script>
<script src="/plugin/sweet-alert/sweetalert.min.js"></script>
<script src="/plugin/waves/waves.min.js"></script>
<!-- Full Screen Plugin -->
<script src="/plugin/fullscreen/jquery.fullscreen-min.js"></script>
<script src="/scripts/main.min.js"></script>
<script src="/color-switcher/color-switcher.min.js"></script>
<script src="/plugin/datatables/media/js/jquery.dataTables.min.js"></script>
<script src="/plugin/datatables/media/js/dataTables.bootstrap.min.js"></script>
<script src="/plugin/datatables/extensions/Responsive/js/dataTables.responsive.min.js"></script>
<script src="/my-js.js"></script>
<script>
var ont_id;
function reloadData() {
var all_count = $.ajax({
url: '/admin/count',
async: false
}).responseJSON;
console.log(all_count);
$(".all-ont-counter").html(all_count.all_count);
$(".connected-ont-counter").html(all_count.connected_count);
$(".disconnected-ont-counter").html(all_count.all_count - all_count.connected_count);
}
function reloadTable() {
// var all_count = $.ajax({
// url: '/admin/count',
// async: false
// }).responseJSON;
// console.log(all_count);
// $(".all-ont-counter").html(all_count.all_count);
// $(".connected-ont-counter").html(all_count.connected_count);
// $(".disconnected-ont-counter").html(all_count.all_count - all_count.connected_count);
// Initialize DataTable if not already initialized
var table = $('#tb-ont').DataTable({
scrollX: true,
responsive: true,
ajax: {
url: '/admin/data?status=all',
type: 'GET',
timeout: 120000,
dataSrc: function (data) {
return data;
}
},
"sAjaxDataProp": "",
"aoColumns": [
{
"mData": "nama",
"title": "NAMA",
"render": function (data) {
return data;
}
},
{
"mData": "alamat",
"title": "Alamat",
"render": function (data) {
return data;
}
},
{
"mData": "langganan",
"title": "Langganan",
"render": function (data) {
return data;
}
},
{
"mData": null,
"title": "Status",
"render": function (data) {
return "<p id='td_status_" + data.id + "'>" + data.status + "</p>";
}
},
{
"mData": null,
"title": "Last Update",
"render": function (data) {
return "<p id='td_updated_" + data.id + "'>" + data.updated + "</p>";
}
},
{
"mData": null,
"title": "Aksi",
"render": function (data) {
return `<button class='btn btn-info btn-xs' onclick='bukaModal("edit", ${data.id})'>Detail</button>`;
}
}
]
});
return table; // Return the table instance
}
// Initialize the DataTable and store it in a variable
var table = reloadTable();
reloadData();
// Function to refresh only the td content
function refreshTdStatus() {
table.rows().every(function (rowIdx, tableLoop, rowLoop) {
var row = this.data();
var id = row.id;
var status = row.status;
var updated = row.updated;
$('#td_status_' + id).html(status);
$('#td_updated_' + id).html(updated);
});
}
// Refresh the table every 5 seconds
setInterval(() => {
table.ajax.reload(null, false); // Reload data without resetting the state
refreshTdStatus(); // Refresh the td content
reloadData();
}, 5000);
function bukaModal(stat, id) {
let title = stat == 'tambah' ? 'Tambah ONT' : 'Detail ONT';
$('#modal-ont-title').html(title);
if (stat == 'tambah') {
$("#nama").val('');
$("#alamat").val('');
$("#select-langanan").val('');
$('#btn-tambah-ont').show();
$('#btn-edit-ont').hide();
$('#btn-update-ont').hide();
$('#btn-hapus-ont').hide();
} else {
$('#btn-tambah-ont').hide();
$('#btn-edit-ont').show();
$('#btn-update-ont').hide();
$('#btn-hapus-ont').show();
ont_id = id;
getData(id)
}
$('#modal-ont').modal('show');
}
function tambahont() {
let nama = $('#nama').val();
let alamat = $('#alamat').val();
let langganan = $('#select-langanan').val();
console.log(nama, alamat, langganan);
if (nama == '' || alamat == '' || langganan == null) {
swal('Error', 'Data tidak boleh ada yang kosong', 'error');
return;
}
swal({
title: "Yakin?",
text: "ONT Baru akan ditambahkan pada list ONT",
type: "info",
showCancelButton: true,
confirmButtonText: "Ya",
cancelButtonText: "Tidak",
closeOnConfirm: false,
closeOnCancel: false
},
function (isConfirm) {
if (isConfirm) {
$.ajax({
url: '/admin/',
type: 'POST',
data: {
nama: nama,
alamat: alamat,
langganan: langganan
},
success: function (data) {
console.log(data);
$('#modal-ont').modal('hide');
swal('Berhasil', 'ONT Baru berhasil ditambahkan', 'success');
},
error: function (xhr, status, error) {
swal('Error', error, 'error');
}
});
} else {
swal("Cancelled", "ONT Baru gagal ditambahkan", "error");
}
}
)
}
function getData(id) {
$.ajax({
url: '/admin/data/' + id,
type: 'GET',
success: function (data) {
$("#nama").val(data.nama);
$("#alamat").val(data.alamat);
$("#select-langanan").val(data.langganan);
},
error: function (xhr, status, error) {
swal('Error', error, 'error');
}
});
}
function hapusont() {
swal({
title: "Yakin?",
text: "ONT akan dihapus dari list ONT",
type: "info",
showCancelButton: true,
confirmButtonText: "Ya",
cancelButtonText: "Tidak",
closeOnConfirm: true,
closeOnCancel: true,
// yes button color to red
confirmButtonColor: "#DD6B55"
},
function (isConfirm) {
if (isConfirm) {
$.ajax({
url: '/admin/' + ont_id,
type: 'DELETE',
success: function (data) {
console.log(data);
$('#modal-ont').modal('hide');
swal('Berhasil', 'ONT berhasil dihapus', 'success');
},
error: function (xhr, status, error) {
swal('Error', error, 'error');
}
});
}
}
)
}
</script>
</body>
</html>