init biotest web
15
.nvim/deployment.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
return {
|
||||
["server1"] = {
|
||||
host = "biotestgw",
|
||||
username = "smartlab",
|
||||
mappings = {
|
||||
{
|
||||
["local"] = "",
|
||||
["remote"] = "/home/smartlab/Web",
|
||||
},
|
||||
},
|
||||
-- excludedPaths = {
|
||||
-- "src", -- local path relative to project root
|
||||
-- },
|
||||
},
|
||||
}
|
||||
73
be_clinic.http
Normal file
@@ -0,0 +1,73 @@
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{"cmd": "test"}
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "add",
|
||||
"orderDate":"01-04-2024",
|
||||
"M_PatientID":4,
|
||||
"NurseID":1,
|
||||
"M_CompanyID":33,
|
||||
"Keluhan":"Ini Keluhan",
|
||||
"Objective":"ini Objective",
|
||||
"Kesimpulan":"Ini Kesimpulan",
|
||||
"Saran":"Ini Saran"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "getpatient",
|
||||
"nik":"3171072709660005",
|
||||
"dob":"",
|
||||
"name":"",
|
||||
"hp":"",
|
||||
"current_page":1
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "getcompany"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "getnurse"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "getdoctor"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
POST http://{{host}}/be_clinic.php
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"cmd": "listingorder",
|
||||
"order_date":"2024-04-02",
|
||||
"search":"",
|
||||
"current_page":1
|
||||
}
|
||||
583
be_clinic.php
Normal file
@@ -0,0 +1,583 @@
|
||||
<?php
|
||||
if (true) {
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
}
|
||||
define('BASEPATH', "/home/smartlab");
|
||||
include_once("./smartlab_biotest/application/config/database.php");
|
||||
|
||||
$dbh = new Database();
|
||||
$dbh->host = $db["default"]["hostname"];
|
||||
$dbh->username = $db["default"]["username"];
|
||||
$dbh->password = $db["default"]["password"];
|
||||
$dbh->database = $db["default"]["database"];
|
||||
$p = $dbh->get_param();
|
||||
if (isset($_GET['cmd']) && $_GET["cmd"] == "csv") {
|
||||
$sdate = $_GET["sdate"] . " 00:00:00";
|
||||
$edate = $_GET["edate"] . " 23:59:59";
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
'Order Number' orderNumbering,
|
||||
'Date' orderDate,
|
||||
'Age' orderAge,
|
||||
'Patient' M_PatientName,
|
||||
'Keluhan' orderKeluhan,
|
||||
'Objective' orderObjective,
|
||||
'Kesimpulan' orderKesimpulan,
|
||||
'Saran' orderSaran
|
||||
union
|
||||
SELECT
|
||||
orderNumbering,
|
||||
orderDate,
|
||||
orderAge,
|
||||
M_PatientName,
|
||||
orderKeluhan,
|
||||
orderObjective,
|
||||
orderKesimpulan,
|
||||
orderSaran
|
||||
FROM one_clinic.order
|
||||
JOIN m_patient ON OrderM_PatientID = M_PatientID
|
||||
WHERE
|
||||
orderIsActive = 'Y' AND
|
||||
orderDate BETWEEN '$sdate' AND '$edate'";
|
||||
$rows = $dbh->query($sql);
|
||||
$dbh->exit_if_error($rows[0], $rows[1]);
|
||||
$result = $rows[1];
|
||||
array_to_csv_download($result, "export-$sdate-$edate.csv", ",");
|
||||
exit;
|
||||
}
|
||||
function array_to_csv_download($array, $filename = "export.csv", $delimiter = ";")
|
||||
{
|
||||
$f = fopen('php://memory', 'w');
|
||||
foreach ($array as $line) {
|
||||
fputcsv($f, $line, $delimiter);
|
||||
}
|
||||
fseek($f, 0);
|
||||
header('Content-Type: text/csv');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '";');
|
||||
fpassthru($f);
|
||||
}
|
||||
|
||||
header("Content-Type: application/json");
|
||||
if ($p["cmd"] == "add") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$sql = "SELECT one_clinic.fn_numbering_klinik('C') as xnumber";
|
||||
$resp_func = $dbh->query($sql);
|
||||
$dbh->exit_if_error($resp_func[0], $resp_func[1]);
|
||||
$numbering = $resp_func[1][0]['xnumber'];
|
||||
//echo $numbering;
|
||||
|
||||
$sql = "SELECT * FROM m_patient WHERE M_PatientID = ?";
|
||||
$resp_pat = $dbh->query($sql, array($p['M_PatientID']));
|
||||
$dbh->exit_if_error($resp_pat[0], $resp_pat[1]);
|
||||
$data_patient = $resp_pat[1][0];
|
||||
$tanggal_lahir = $data_patient['M_PatientDOB'];
|
||||
//echo $tanggal_lahir;
|
||||
|
||||
// Ambil tanggal sekarang
|
||||
$dateorder = isset($p["orderDate"]) && $p["orderDate"] != "" ? date('Y-m-d', strtotime($p["orderDate"])) : "";
|
||||
$tanggal_sekarang = new DateTime($dateorder);
|
||||
// Ubah tanggal lahir ke objek DateTime
|
||||
$tanggal_lahir = new DateTime($tanggal_lahir);
|
||||
// Hitung selisih antara tanggal sekarang dan tanggal lahir
|
||||
$perbedaan = $tanggal_sekarang->diff($tanggal_lahir);
|
||||
|
||||
// Dapatkan tahun, bulan, dan hari dari selisih
|
||||
$umur_tahun = $perbedaan->y;
|
||||
$umur_bulan = $perbedaan->m;
|
||||
$umur_hari = $perbedaan->d;
|
||||
$age_now = $umur_tahun . " Tahun " . $umur_bulan . " Bulan " . $umur_hari . " Hari";
|
||||
|
||||
$sql = "INSERT INTO one_clinic.order (
|
||||
orderDate,
|
||||
orderNumbering,
|
||||
orderM_PatientID,
|
||||
orderAge,
|
||||
orderNurseID,
|
||||
orderM_CompanyID,
|
||||
orderKeluhan,
|
||||
orderObjective,
|
||||
orderKesimpulan,
|
||||
orderSaran,
|
||||
orderCreated,
|
||||
orderCreatedUserID
|
||||
) VALUES(?,?,?,?,?,?,?,?,?,?,NOW(),1)";
|
||||
$resp_add = $dbh->query($sql, array(
|
||||
$dateorder,
|
||||
$numbering,
|
||||
$p['M_PatientID'],
|
||||
$age_now,
|
||||
$p['NurseID'],
|
||||
$p['M_CompanyID'],
|
||||
$p['Keluhan'],
|
||||
$p['Objective'],
|
||||
$p['Kesimpulan'],
|
||||
$p['Saran']
|
||||
));
|
||||
|
||||
$dbh->exit_if_error($resp_add[0], $resp_add[1]);
|
||||
|
||||
$sql = "INSERT INTO one_clinic.order_log(
|
||||
orderLogOrderNumber,
|
||||
orderLogStatus,
|
||||
orderLogJSONAfter,
|
||||
orderLogCreated,
|
||||
orderLogUserID
|
||||
)
|
||||
VALUES(?,'ADD',?,NOW(),1)";
|
||||
$resp_log = $dbh->query($sql, array($numbering, json_encode($p)));
|
||||
$dbh->exit_if_error($resp_log[0], $resp_log[1]);
|
||||
|
||||
$respx[] = true;
|
||||
$respx[] = array('order_number' => $numbering, 'params' => $p);
|
||||
$dbh->jsonReply($respx);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($p["cmd"] == "test") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$sql = "select * from m_branch";
|
||||
$resp = $dbh->query($sql);
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($p["cmd"] == "getpatient") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
$dob = isset($p["dob"]) && $p["dob"] != "" ? date('Y-m-d', strtotime($p["dob"])) : "";
|
||||
|
||||
$number_limit = 10;
|
||||
$number_offset = (!isset($p['current_page']) ? 1 : $p['current_page'] - 1) * $number_limit;
|
||||
if (isset($p["nik"]) && $p["nik"] != "") {
|
||||
$sql = "SELECT m_patient.*, M_PatientIDTypeName, M_PatientIDNumber, M_SexName,
|
||||
DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob_ina
|
||||
FROM m_patient
|
||||
JOIN m_sex ON M_PatientM_SexID = M_SexID
|
||||
JOIN m_patientidnumber ON M_PatientIDNumberM_PatientID = M_PatientID AND
|
||||
M_PatientIDNumberIsActive = 'Y' AND
|
||||
M_PatientIDNumber LIKE CONCAT('%',?,'%')
|
||||
JOIN m_patientidtype ON M_PatientIDNumberM_PatientIDTypeID = M_PatientIDTypeID
|
||||
WHERE
|
||||
M_PatientIsActive = 'Y' AND
|
||||
(
|
||||
M_PatientName LIKE CONCAT('%',?,'%') AND
|
||||
M_PatientDOB LIKE CONCAT('%',?,'%') AND
|
||||
M_PatientHP LIKE CONCAT('%',?,'%')
|
||||
|
||||
)
|
||||
LIMIT $number_limit OFFSET $number_offset";
|
||||
$resp = $dbh->query($sql, [$p['nik'], $p['name'], $dob, $p['hp']]);
|
||||
} else {
|
||||
$sql = "SELECT m_patient.*,
|
||||
IFNULL(M_PatientIDTypeName,'-') as M_PatientIDTypeName,
|
||||
IFNULL(M_PatientIDNumber,'') as M_PatientIDNumber,
|
||||
M_SexName,
|
||||
DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob_ina
|
||||
FROM m_patient
|
||||
JOIN m_sex ON M_PatientM_SexID = M_SexID
|
||||
LEFT JOIN m_patientidnumber ON M_PatientIDNumberM_PatientID = M_PatientID AND
|
||||
M_PatientIDNumberIsActive = 'Y'
|
||||
LEFT JOIN m_patientidtype ON M_PatientIDNumberM_PatientIDTypeID = M_PatientIDTypeID
|
||||
WHERE
|
||||
M_PatientIsActive = 'Y' AND
|
||||
(
|
||||
M_PatientName LIKE CONCAT('%',?,'%') AND
|
||||
M_PatientDOB LIKE CONCAT('%',?,'%') AND
|
||||
M_PatientHP LIKE CONCAT('%',?,'%')
|
||||
|
||||
)
|
||||
LIMIT $number_limit OFFSET $number_offset";
|
||||
$resp = $dbh->query($sql, array($p['name'], $dob, $p['hp']));
|
||||
}
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($p["cmd"] == "getcompany") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM m_patienttype
|
||||
WHERE
|
||||
M_PatientTypeIsActive = 'Y'
|
||||
LIMIT 25";
|
||||
$resp = $dbh->query($sql);
|
||||
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
if ($p["cmd"] == "getnurse") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM a_nurse
|
||||
WHERE
|
||||
A_NurseMetaActive = 'Y'
|
||||
LIMIT 25";
|
||||
$resp = $dbh->query($sql);
|
||||
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($p["cmd"] == "getdoctor") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM a_doctor
|
||||
WHERE
|
||||
A_DoctorMetaActive = 'Y'
|
||||
LIMIT 25";
|
||||
$resp = $dbh->query($sql);
|
||||
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
if ($p["cmd"] == "listingorder") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
|
||||
if (DateTime::createFromFormat('Y-m-d', $p['startdate']) == false) {
|
||||
echo json_encode(["status" => "ERR", "message" => "Order Date required!"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$number_limit = 10;
|
||||
$number_offset = (!isset($p['current_page']) ? 1 : $p['current_page'] - 1) * $number_limit;
|
||||
$sql = "SELECT *, DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob_ina
|
||||
FROM one_clinic.order
|
||||
JOIN m_patient ON OrderM_PatientID = M_PatientID
|
||||
WHERE
|
||||
orderIsActive = 'Y' AND
|
||||
(
|
||||
orderNumbering LIKE CONCAT('%',?,'%') OR
|
||||
M_PatientName LIKE CONCAT('%',?,'%') OR
|
||||
M_PatientNoReg LIKE CONCAT('%',?,'%')
|
||||
) AND
|
||||
( DATE(orderDate) = ? )
|
||||
LIMIT $number_limit OFFSET $number_offset";
|
||||
$resp = $dbh->query($sql, array($p['search'], $p['search'], $p['search'], $p['startdate']));
|
||||
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($p["cmd"] == "deleteorder") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
|
||||
$sql = "UPDATE one_clinic.order SET
|
||||
orderIsActive = 'N',
|
||||
orderDeleteTime = NOW(),
|
||||
orderDeleteUserID = 1
|
||||
WHERE
|
||||
orderID = ?";
|
||||
$resp = $dbh->query($sql, array($p['orderID']));
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
|
||||
$sql = "INSERT INTO one_clinic.order_log(
|
||||
orderLogOrderNumber,
|
||||
orderLogStatus,
|
||||
orderLogCreated,
|
||||
orderLogUserID
|
||||
)
|
||||
VALUES(?,'DELETE',NOW(),1)";
|
||||
$resp_log = $dbh->query($sql, array($p['orderNumber']));
|
||||
$dbh->exit_if_error($resp_log[0], $resp_log[1]);
|
||||
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
if ($p["cmd"] == "updateorder") {
|
||||
$resp = $dbh->connect();
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
$resp = [];
|
||||
$orderDate = isset($p["orderDate"]) && $p["orderDate"] != "" ? date('Y-m-d', strtotime($p["orderDate"])) : "";
|
||||
|
||||
$sql = "SELECT * FROM m_patient WHERE M_PatientID = ?";
|
||||
$resp_pat = $dbh->query($sql, array($p['M_PatientID']));
|
||||
$dbh->exit_if_error($resp_pat[0], $resp_pat[1]);
|
||||
$data_patient = $resp_pat[1][0];
|
||||
$tanggal_lahir = $data_patient['M_PatientDOB'];
|
||||
//echo $tanggal_lahir;
|
||||
|
||||
// Ambil tanggal sekarang
|
||||
$dateorder = isset($p["orderDate"]) && $p["orderDate"] != "" ? date('Y-m-d', strtotime($p["orderDate"])) : "";
|
||||
$tanggal_sekarang = new DateTime($dateorder);
|
||||
// Ubah tanggal lahir ke objek DateTime
|
||||
$tanggal_lahir = new DateTime($tanggal_lahir);
|
||||
// Hitung selisih antara tanggal sekarang dan tanggal lahir
|
||||
$perbedaan = $tanggal_sekarang->diff($tanggal_lahir);
|
||||
|
||||
// Dapatkan tahun, bulan, dan hari dari selisih
|
||||
$umur_tahun = $perbedaan->y;
|
||||
$umur_bulan = $perbedaan->m;
|
||||
$umur_hari = $perbedaan->d;
|
||||
$age_now = $umur_tahun . " Tahun" . $umur_bulan . " Bulan" . $umur_hari . " Hari";
|
||||
|
||||
$sql = "UPDATE one_clinic.order SET
|
||||
orderDate = ?,
|
||||
orderM_PatientID = ?,
|
||||
orderAge = ?,
|
||||
orderNurseID = ?,
|
||||
orderM_CompanyID = ?,
|
||||
orderKeluhan = ?,
|
||||
orderObjective = ?,
|
||||
orderKesimpulan = ?,
|
||||
orderSaran = ?,
|
||||
orderLastUpdated = NOW(),
|
||||
orderLastUpdateUserID = 1
|
||||
WHERE
|
||||
orderID = ?";
|
||||
$resp = $dbh->query($sql, array(
|
||||
$orderDate,
|
||||
$p['M_PatientID'],
|
||||
$age_now,
|
||||
$p['NurseID'],
|
||||
$p['M_CompanyID'],
|
||||
$p['Keluhan'],
|
||||
$p['Objective'],
|
||||
$p['Kesimpulan'],
|
||||
$p['Saran'],
|
||||
$p['orderID']
|
||||
));
|
||||
|
||||
$dbh->exit_if_error($resp[0], $resp[1]);
|
||||
|
||||
$sql = "SELECT order.*
|
||||
FROM one_clinic.order
|
||||
WHERE
|
||||
orderID = ?";
|
||||
$resp_order = $dbh->query($sql, array($p['orderID']));
|
||||
$dbh->exit_if_error($resp_order[0], $resp_order[1]);
|
||||
$order_before = $resp_order[1][0];
|
||||
|
||||
$sql = "INSERT INTO one_clinic.order_log(
|
||||
orderLogOrderNumber,
|
||||
orderLogStatus,
|
||||
orderLogJSONBefore,
|
||||
orderLogJSONAfter,
|
||||
orderLogCreated,
|
||||
orderLogUserID
|
||||
)
|
||||
VALUES(?,'UPDATE',?,?,NOW(),1)";
|
||||
$resp_log = $dbh->query($sql, array(
|
||||
$p['orderNumber'],
|
||||
json_encode($order_before),
|
||||
json_encode($p)
|
||||
));
|
||||
$dbh->exit_if_error($resp_log[0], $resp_log[1]);
|
||||
|
||||
$dbh->jsonReply($resp);
|
||||
exit;
|
||||
}
|
||||
echo json_encode(["status" => "ERR", "message" => "[sys] cmd not found"]);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//helper
|
||||
class Database
|
||||
{
|
||||
public $host;
|
||||
public $username;
|
||||
public $password;
|
||||
public $database;
|
||||
private $conn;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->host = "localhost";
|
||||
$this->username = "root";
|
||||
$this->password = "smb1122";
|
||||
$this->database = "one_clinic";
|
||||
}
|
||||
public function jsonReply($resp)
|
||||
{
|
||||
echo json_encode(["status" => "OK", "data" => $resp[1]]);
|
||||
}
|
||||
function get_param()
|
||||
{
|
||||
$body = file_get_contents("php://input");
|
||||
$res = json_decode($body, true);
|
||||
if ($res == null) {
|
||||
return ["cmd" => "xx-unknown"];
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
function connect()
|
||||
{
|
||||
$this->conn = new mysqli($this->host, $this->username, $this->password, $this->database);
|
||||
if ($this->conn->connect_error) {
|
||||
return [false, "Connection failed: " . $this->conn->connect_error];
|
||||
}
|
||||
return [true, "Connection OK "];
|
||||
}
|
||||
|
||||
public function query($sql, $params = array())
|
||||
{
|
||||
if (!$this->conn) {
|
||||
$this->connect();
|
||||
}
|
||||
|
||||
$statement = $this->conn->prepare($sql);
|
||||
if (!$statement) {
|
||||
return [false, "Error preparing SQL statement: " . $this->conn->error];
|
||||
}
|
||||
if (!empty($params)) {
|
||||
$types = '';
|
||||
foreach ($params as $param) {
|
||||
if (is_int($param)) {
|
||||
$types .= 'i'; // integer
|
||||
} elseif (is_float($param)) {
|
||||
$types .= 'd'; // double
|
||||
} elseif (is_string($param)) {
|
||||
$types .= 's'; // string
|
||||
} else {
|
||||
$types .= 'b'; // blob
|
||||
}
|
||||
}
|
||||
$xparams = [$types];
|
||||
foreach ($params as $param) {
|
||||
$xparams[] = $param;
|
||||
}
|
||||
$tmp = array();
|
||||
foreach ($xparams as $key => $value) $tmp[$key] = &$xparams[$key];
|
||||
call_user_func_array(array($statement, 'bind_param'), $tmp);
|
||||
}
|
||||
|
||||
$result = $statement->execute();
|
||||
if (!$result) {
|
||||
return [false, "Error executing SQL statement: " . $statement->error];
|
||||
}
|
||||
|
||||
// $result = $statement->get_result();
|
||||
// if (!$result) {
|
||||
// return [false, "Error getting result set: " . $statement->error];
|
||||
// }
|
||||
|
||||
$rows = array();
|
||||
$result = $this->get_result($statement);
|
||||
while ($row = array_shift($result)) {
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
$statement->close();
|
||||
return [true, $rows];
|
||||
}
|
||||
|
||||
public function exec($sql, $params = array())
|
||||
{
|
||||
if (!$this->conn) {
|
||||
$this->connect();
|
||||
}
|
||||
|
||||
$statement = $this->conn->prepare($sql);
|
||||
if (!$statement) {
|
||||
return [false, "Error preparing SQL statement: " . $this->conn->error];
|
||||
}
|
||||
|
||||
if (!empty($params)) {
|
||||
$types = '';
|
||||
foreach ($params as $param) {
|
||||
if (is_int($param)) {
|
||||
$types .= 'i'; // integer
|
||||
} elseif (is_float($param)) {
|
||||
$types .= 'd'; // double
|
||||
} elseif (is_string($param)) {
|
||||
$types .= 's'; // string
|
||||
} else {
|
||||
$types .= 'b'; // blob
|
||||
}
|
||||
}
|
||||
|
||||
$xparams = [$types];
|
||||
foreach ($params as $param) {
|
||||
$xparams[] = $param;
|
||||
}
|
||||
$tmp = array();
|
||||
foreach ($xparams as $key => $value) $tmp[$key] = &$xparams[$key];
|
||||
call_user_func_array(array($statement, 'bind_param'), $tmp);
|
||||
}
|
||||
|
||||
$result = $statement->execute();
|
||||
if (!$result) {
|
||||
return [false, "Error executing SQL statement: " . $statement->error];
|
||||
}
|
||||
|
||||
$statement->close();
|
||||
return [true, "Query executed successfully."];
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
if ($this->conn) {
|
||||
$this->conn->close();
|
||||
}
|
||||
}
|
||||
public function exit_if_error($status, $data)
|
||||
{
|
||||
if ($status === false) {
|
||||
echo json_encode(["status" => "ERR", "message" => $data]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
function get_result($statement)
|
||||
{
|
||||
$result = array();
|
||||
$statement->store_result();
|
||||
for ($i = 0; $i < $statement->num_rows; $i++) {
|
||||
$metadata = $statement->result_metadata();
|
||||
$params = array();
|
||||
while ($field = $metadata->fetch_field()) {
|
||||
$params[] = &$result[$i][$field->name];
|
||||
}
|
||||
call_user_func_array(array($statement, 'bind_result'), $params);
|
||||
$statement->fetch();
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
12
one-klinik-biotest/.vscode/sftp.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "devone",
|
||||
"host": "devone.aplikasi.web.id",
|
||||
"protocol": "sftp",
|
||||
"port": 22,
|
||||
"username": "one",
|
||||
"password": "sasone102938",
|
||||
"remotePath": "/home/one/project/one/one-ui/",
|
||||
"uploadOnSave": false,
|
||||
"useTempFile": false,
|
||||
"openSsh": false
|
||||
}
|
||||
58
one-klinik-biotest/apps/api/system/menu.js
Normal file
@@ -0,0 +1,58 @@
|
||||
const URL = window.BASE_URL + "/one-api/mockup/system/";
|
||||
|
||||
export async function change_password(prm) {
|
||||
try {
|
||||
var resp = await axios.post(URL + 'menu/change_password', prm);
|
||||
if (resp.status != 200) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: resp.statusText
|
||||
};
|
||||
}
|
||||
let data = resp.data;
|
||||
return data;
|
||||
} catch(e) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: e.message
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function get_bread_crumb(token) {
|
||||
try {
|
||||
var resp = await axios.post(URL + 'menu/get_bread_crumb', {token:token,
|
||||
xref:window.location.href});
|
||||
if (resp.status != 200) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: resp.statusText
|
||||
};
|
||||
}
|
||||
let data = resp.data;
|
||||
return data;
|
||||
} catch(e) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: e.message
|
||||
};
|
||||
}
|
||||
}
|
||||
export async function get_menu(token) {
|
||||
try {
|
||||
var resp = await axios.post(URL + 'menu/get_menu', {token:token});
|
||||
if (resp.status != 200) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: resp.statusText
|
||||
};
|
||||
}
|
||||
let data = resp.data;
|
||||
return data;
|
||||
} catch(e) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: e.message
|
||||
};
|
||||
}
|
||||
}
|
||||
106
one-klinik-biotest/apps/components/oneAutoVerifValid.vue
Normal file
@@ -0,0 +1,106 @@
|
||||
<template>
|
||||
<div class="auto-verif-valid">
|
||||
<img :src="verifImg" class="icon" :style="styleVerif" @click="showVerif()" />
|
||||
<img :src="validImg" class="icon" :style="styleValid" @click="showValid()" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
module.exports = {
|
||||
components : {
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
dialog_autovrvf:false,
|
||||
title:'',
|
||||
isLoading: false
|
||||
}
|
||||
},
|
||||
methods : {
|
||||
showValid() {
|
||||
this.$store.dispatch("autoVerifValid/showValid",{title: "Informasi AutoValid", detailID: this.detailId});
|
||||
},
|
||||
showVerif() {
|
||||
this.$store.dispatch("autoVerifValid/showVerif",{title: "Informasi AutoVerif", detailID: this.detailId});
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
styleVerif() {
|
||||
let av = this.$store.state.autoVerifValid.autoVerif;
|
||||
let detId = this.detailId;
|
||||
let idx = _.findIndex(av,function(v) {
|
||||
let xid = parseInt(v.id);
|
||||
return xid == detId;
|
||||
});
|
||||
if (idx > -1) {
|
||||
return {
|
||||
cursor: 'pointer'
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
styleValid() {
|
||||
let av = this.$store.state.autoVerifValid.autoValid;
|
||||
let detId = this.detailId;
|
||||
let idx = _.findIndex(av,function(v) {
|
||||
let xid = parseInt(v.id);
|
||||
return xid == detId;
|
||||
});
|
||||
if (idx > -1) {
|
||||
return {
|
||||
cursor: 'pointer'
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
verifImg() {
|
||||
let av = this.$store.state.autoVerifValid.autoVerif;
|
||||
let detId = this.detailId;
|
||||
let idx = _.findIndex(av,function(v) {
|
||||
let xid = parseInt(v.id);
|
||||
return xid == detId;
|
||||
});
|
||||
if (idx > -1) {
|
||||
if (av[idx].status) {
|
||||
return "/one-ui/apps/image/vr-green.png";
|
||||
} else {
|
||||
return "/one-ui/apps/image/vr-red.png";
|
||||
}
|
||||
} else {
|
||||
return "/one-ui/apps/image/vr-grey.png";
|
||||
}
|
||||
},
|
||||
validImg() {
|
||||
let av = this.$store.state.autoVerifValid.autoValid;
|
||||
let detId = this.detailId;
|
||||
let idx = _.findIndex(av,function(v) {
|
||||
let xid = parseInt(v.id);
|
||||
return xid == detId;
|
||||
});
|
||||
if (idx > -1) {
|
||||
if (av[idx].status) {
|
||||
return "/one-ui/apps/image/vl-green.png";
|
||||
} else {
|
||||
return "/one-ui/apps/image/vl-red.png";
|
||||
}
|
||||
} else {
|
||||
return "/one-ui/apps/image/vl-grey.png";
|
||||
}
|
||||
},
|
||||
},
|
||||
props:["headerId","detailId"],
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
div.auto-verif-valid {
|
||||
padding: 0px 5px;
|
||||
padding-top: 4px;
|
||||
border-radius: 5px;
|
||||
border: solid 1px #383838;
|
||||
max-width: 70px;
|
||||
}
|
||||
div.auto-verif-valid img.icon {
|
||||
width:22px;
|
||||
height:22px;
|
||||
margin-right:5px;
|
||||
}
|
||||
</style>
|
||||
95
one-klinik-biotest/apps/components/oneChangePassword.vue
Normal file
@@ -0,0 +1,95 @@
|
||||
<template>
|
||||
<v-dialog v-model="showdialog" persistent max-width="400">
|
||||
<v-card>
|
||||
<v-card-title style="color:#fff" class="headline grey darken-1">Ganti Password</v-card-title>
|
||||
<v-card-text>
|
||||
<v-layout pa-2 class="grey lighten-2" row>
|
||||
<v-flex xs12>
|
||||
<v-text-field :append-icon="show_saat_ini ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
:type="show_saat_ini ? 'text' : 'password'"
|
||||
label="Password saat ini :"
|
||||
v-model="current_password"
|
||||
class="input-group--focused"
|
||||
@click:append="show_saat_ini = !show_saat_ini"
|
||||
></v-text-field>
|
||||
|
||||
<v-text-field :append-icon="show_new ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
:type="show_new ? 'text' : 'password'"
|
||||
label="Password baru :"
|
||||
v-model="new_password"
|
||||
class="input-group--focused"
|
||||
@click:append="show_new= !show_new"
|
||||
></v-text-field>
|
||||
<v-text-field :append-icon="show_re_new ? 'mdi-eye' : 'mdi-eye-off'"
|
||||
:type="show_re_new ? 'text' : 'password'"
|
||||
label="Konfirmasi Password baru :"
|
||||
v-model="re_new_password"
|
||||
class="input-group--focused"
|
||||
@click:append="show_re_new= !show_re_new"
|
||||
></v-text-field>
|
||||
<v-alert v-show="message != ''" :type="type">
|
||||
{{message}}
|
||||
</v-alert>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="grey darken-1" flat @click="showdialog = false">Tutup</v-btn>
|
||||
<v-btn dark color="grey darken-1" @click="update_password()">Ganti Password</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
<style scoped>
|
||||
</style>
|
||||
<script>
|
||||
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
current_password : ''
|
||||
,new_password : ''
|
||||
,re_new_password : ''
|
||||
,show_saat_ini : false
|
||||
,show_new: false
|
||||
,show_re_new: false
|
||||
,type : 'error'
|
||||
}
|
||||
}
|
||||
,methods : {
|
||||
async update_password() {
|
||||
if (this.current_password == this.new_password) {
|
||||
this.message = "Password lama dan Password baru masih sama."
|
||||
return
|
||||
}
|
||||
if (this.re_new_password != this.new_password) {
|
||||
this.message = "Password dan Konfirmasi Password tidak sama."
|
||||
return
|
||||
}
|
||||
let prm = { token: window.one_token(), old : this.current_password ,new : this.new_password }
|
||||
await this.$store.dispatch("system/change_password",prm)
|
||||
if (this.message == "" ) {
|
||||
this.type = "success"
|
||||
this.message = "Password berhasil diubah, silahkan login lagi."
|
||||
let self = this
|
||||
setTimeout(function() {
|
||||
window.one_logout('/one-ui/test/vuex/one-login')
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
,computed: {
|
||||
message : {
|
||||
get(){ return this.$store.state.system.change_password_error }
|
||||
,set(v) { this.$store.commit("system/update_change_password_error",v) }
|
||||
}
|
||||
,showdialog : {
|
||||
get(){ return this.$store.state.system.change_password_dialog }
|
||||
,set(v) { this.$store.commit("system/update_change_password_dialog",v) }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
51
one-klinik-biotest/apps/components/oneFooter.vue
Normal file
@@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<v-footer color="blue lighten-2" app>
|
||||
<one-clock></one-clock>
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
|
||||
</v-footer>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
span.one-footer {
|
||||
margin-right:30px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
|
||||
},
|
||||
components: {
|
||||
'one-clock' : httpVueLoader('./oneTanggal.vue')
|
||||
}
|
||||
}
|
||||
function one_verif() {
|
||||
let url_redir = "/one-ui/";
|
||||
let verif = async function (token) {
|
||||
try {
|
||||
var resp = await axios.post("/one-api/v1/system/verify/do", {
|
||||
token: token,
|
||||
});
|
||||
if (resp.status != 200) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: resp.statusText,
|
||||
};
|
||||
}
|
||||
let data = resp.data;
|
||||
return data;
|
||||
} catch (e) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: e.message,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
//one_verif();
|
||||
</script>
|
||||
100
one-klinik-biotest/apps/components/oneFooter.vue-170123
Normal file
@@ -0,0 +1,100 @@
|
||||
<template>
|
||||
<v-footer color="blue lighten-2" app>
|
||||
<one-clock></one-clock>
|
||||
<v-spacer></v-spacer>
|
||||
<span class="one-footer white--text"><code class="mb-0">Auto logged out in <span id="SecondsUntilExpire"></span> seconds</code></span>
|
||||
|
||||
</v-footer>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
span.one-footer {
|
||||
margin-right:30px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
mounted() {
|
||||
var IDLE_TIMEOUT = 5*60; //seconds
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
if(dtuser.time_autologout && parseInt(dtuser.time_autologout) > 0)
|
||||
IDLE_TIMEOUT = parseInt(dtuser.time_autologout) * 60
|
||||
}
|
||||
var _idleSecondsTimer = null;
|
||||
var _idleSecondsCounter = 0;
|
||||
|
||||
document.onclick = function() {
|
||||
_idleSecondsCounter = 0;
|
||||
};
|
||||
|
||||
document.onmousemove = function() {
|
||||
_idleSecondsCounter = 0;
|
||||
};
|
||||
|
||||
document.onkeypress = function() {
|
||||
_idleSecondsCounter = 0;
|
||||
};
|
||||
|
||||
_idleSecondsTimer = window.setInterval(CheckIdleTime, 1000);
|
||||
|
||||
function CheckIdleTime() {
|
||||
_idleSecondsCounter++;
|
||||
//this.show_autologout = false
|
||||
|
||||
var oPanel = document.getElementById("SecondsUntilExpire");
|
||||
if (oPanel)
|
||||
oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
|
||||
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
|
||||
window.clearInterval(_idleSecondsTimer);
|
||||
window.one_logout('/one-ui/test/vuex/one-login')
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'one-clock' : httpVueLoader('./oneTanggal.vue')
|
||||
}
|
||||
}
|
||||
function one_verif() {
|
||||
let url_redir = "/one-ui/";
|
||||
let verif = async function (token) {
|
||||
try {
|
||||
var resp = await axios.post("/one-api/v1/system/verify/do", {
|
||||
token: token,
|
||||
});
|
||||
if (resp.status != 200) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: resp.statusText,
|
||||
};
|
||||
}
|
||||
let data = resp.data;
|
||||
return data;
|
||||
} catch (e) {
|
||||
return {
|
||||
status: "ERR",
|
||||
message: e.message,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
let x = async () => {
|
||||
let url_redir = "/one-ui/";
|
||||
try {
|
||||
let resp = await verif(window.one_token());
|
||||
console.log('Response',resp);
|
||||
return;
|
||||
|
||||
if (resp.status != "OK") {
|
||||
window.localStorage.removeItem("token");
|
||||
window.localStorage.removeItem("user");
|
||||
location.replace(url_redir);
|
||||
}
|
||||
} catch (e) {}
|
||||
};
|
||||
x();
|
||||
}
|
||||
|
||||
//one_verif();
|
||||
</script>
|
||||
35
one-klinik-biotest/apps/components/oneFooterlogin.vue
Normal file
@@ -0,0 +1,35 @@
|
||||
<template>
|
||||
<v-footer color="blue lighten-2" app>
|
||||
|
||||
<span class="one-footer white--text" >
|
||||
SURABAYA -
|
||||
JAKARTA -
|
||||
BANDUNG -
|
||||
CIMAHI -
|
||||
CIREBON -
|
||||
MEDAN -
|
||||
PADANG -
|
||||
PALEMBANG -
|
||||
SEMARANG -
|
||||
YOGYAKARTA -
|
||||
MADIUN -
|
||||
BALIKPAPAN -
|
||||
PEKANBARU -
|
||||
MAGELANG -
|
||||
MAKASSAR -
|
||||
TEGAL -
|
||||
SALATIGA -
|
||||
MANADO</span>
|
||||
</v-footer>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
span.one-footer {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
}
|
||||
</script>
|
||||
76
one-klinik-biotest/apps/components/oneFpp.vue
Normal file
@@ -0,0 +1,76 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-btn
|
||||
color="primary"
|
||||
:disabled="is_disabled"
|
||||
@click="viewfpp= true"
|
||||
>
|
||||
{{button_title}}
|
||||
</v-btn>
|
||||
|
||||
<one-dialog-print :title="printtitle" :width="printwidth" :height="550" :status="viewfpp" :urlprint="urlfpp" @close-dialog-print="viewfpp = false">
|
||||
</one-dialog-print>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
async function checkFpp(param, id) {
|
||||
try {
|
||||
var resp = await axios.get("/one-api/file_upload/get_fpp/" + id);
|
||||
if (resp.status != 200) {
|
||||
param.button_title = "Error Checking Fpp : " + resp.statusText;
|
||||
return;
|
||||
}
|
||||
let data = resp.data;
|
||||
if (data.rows.length > 0) {
|
||||
param.button_title = "Lihat FPP";
|
||||
param.is_disabled = false;
|
||||
param.urlfpp = data.rows[0].fppUrl;
|
||||
return;
|
||||
}
|
||||
param.button_title = "FPP belum di upload";
|
||||
} catch(e) {
|
||||
param.button_title = "Error Checking Fpp : " + e.message;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
components : {
|
||||
'one-dialog-print':httpVueLoader('../../common/oneDialogPrintX.vue')
|
||||
},
|
||||
props: ["id"],
|
||||
data () {
|
||||
return {
|
||||
urlfpp:'',
|
||||
printtitle:'View FPP',
|
||||
printwidth:'60%',
|
||||
isLoading:false,
|
||||
viewfpp: false,
|
||||
button_title: "Checking FPP",
|
||||
is_disabled:true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
console.log('Mounted',this.id);
|
||||
let self = this;
|
||||
let n = parseInt(this.id.orderHeaderID.toString());
|
||||
if (n == 0) return;
|
||||
self.urlfpp = '';
|
||||
self.is_disabled = true;
|
||||
self.button_title = "Checking FPP"
|
||||
checkFpp(self,n);
|
||||
},
|
||||
watch: {
|
||||
async id(n,o) {
|
||||
console.log('Watch FPP ID', n );
|
||||
let self = this;
|
||||
if (n == 0) return;
|
||||
self.urlfpp = '';
|
||||
self.is_disabled = true;
|
||||
self.button_title = "Checking FPP"
|
||||
checkFpp(self,n.orderHeaderID);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
212
one-klinik-biotest/apps/components/oneMenuDrawer-bkp.vue
Normal file
@@ -0,0 +1,212 @@
|
||||
<template>
|
||||
<v-navigation-drawer v-model="drawer" fixed app>
|
||||
<v-list>
|
||||
<!-- IF NO CHILD -->
|
||||
<template
|
||||
v-for="(lev_0, i) in level_0"
|
||||
>
|
||||
<v-list-tile
|
||||
:key="i"
|
||||
v-show="!level_1['p_'+lev_0.id] && lev_0.is_parent=='N'"
|
||||
@click="goTo(lev_0.url)">
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<!-- HAVING CHILDREN -->
|
||||
<template
|
||||
v-for="(lev_0, i) in level_0"
|
||||
>
|
||||
<v-list-group
|
||||
v-bind:key="i"
|
||||
prepend-icon="account_circle"
|
||||
:value="lev_0.state"
|
||||
v-show="level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 1 STARTS HERE -->
|
||||
<!-- NOT HAVING CHILD -->
|
||||
<template
|
||||
v-for="(lev_1, j) in level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<v-list-tile
|
||||
v-bind:key="j"
|
||||
v-show="!level_2['p_'+lev_1.id] && lev_1.is_parent=='N'"
|
||||
sub-group
|
||||
no-action
|
||||
@click="goTo(lev_1.url)"
|
||||
>
|
||||
<v-list-tile-action>
|
||||
<!-- <v-icon>home</v-icon> -->
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- HAVING CHILD -->
|
||||
<template
|
||||
v-for="(lev_1, j) in level_1['p_'+lev_0.id]"
|
||||
>
|
||||
|
||||
<v-list-group
|
||||
v-bind:key="j"
|
||||
:value="lev_1.state"
|
||||
v-show="level_2['p_'+lev_1.id]"
|
||||
sub-group
|
||||
no-action
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 2 STARTS HERE -->
|
||||
<template
|
||||
v-for="(lev_2, k) in level_2['p_'+lev_1.id]"
|
||||
>
|
||||
<v-list-tile
|
||||
:key="k"
|
||||
@click="goTo(lev_2.url)">
|
||||
<!-- <v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action> -->
|
||||
<v-list-tile-title>{{ lev_2.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</template>
|
||||
<!-- END OF LEVEL 2 -->
|
||||
|
||||
</v-list-group>
|
||||
</template>
|
||||
<!-- END OF LEVEL 1 -->
|
||||
|
||||
</v-list-group>
|
||||
</template>
|
||||
</v-list>
|
||||
|
||||
<!-- <v-list>
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Home</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group
|
||||
prepend-icon="account_circle"
|
||||
value="true"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>Users</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
<v-list-group
|
||||
no-action
|
||||
sub-group
|
||||
value="true"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>Admin</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<v-list-tile
|
||||
v-for="(admin, i) in admins"
|
||||
:key="i"
|
||||
@click=""
|
||||
>
|
||||
<v-list-tile-title v-text="admin[0]"></v-list-tile-title>
|
||||
<v-list-tile-action>
|
||||
<v-icon v-text="admin[1]"></v-icon>
|
||||
</v-list-tile-action>
|
||||
</v-list-tile>
|
||||
</v-list-group>
|
||||
|
||||
<v-list-group
|
||||
sub-group
|
||||
no-action
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>Actions</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
<v-list-tile
|
||||
v-for="(crud, i) in cruds"
|
||||
:key="i"
|
||||
@click=""
|
||||
>
|
||||
<v-list-tile-title v-text="crud[0]"></v-list-tile-title>
|
||||
<v-list-tile-action>
|
||||
<v-icon v-text="crud[1]"></v-icon>
|
||||
</v-list-tile-action>
|
||||
</v-list-tile>
|
||||
</v-list-group>
|
||||
</v-list-group>
|
||||
</v-list> -->
|
||||
<!-- <v-list dense>
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Home</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>contact_mail</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Contact</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
</v-list> -->
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
drawer: Boolean
|
||||
},
|
||||
|
||||
computed : {
|
||||
level_0 () {
|
||||
return this.$store.state.system.menu_level_0
|
||||
},
|
||||
|
||||
level_1 () {
|
||||
return this.$store.state.system.menu_level_1
|
||||
},
|
||||
|
||||
level_2 () {
|
||||
return this.$store.state.system.menu_level_2
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
this.$store.dispatch('system/get_menu')
|
||||
},
|
||||
|
||||
methods : {
|
||||
goTo (url) {
|
||||
window.location = BASE_URL + '/one-ui/' + url
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
154
one-klinik-biotest/apps/components/oneMenuDrawer.vue
Normal file
@@ -0,0 +1,154 @@
|
||||
<template>
|
||||
<v-navigation-drawer temporary v-model="xdrawer" dark fixed app>
|
||||
<template>
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-card elevation="0">
|
||||
|
||||
|
||||
<v-list two-line subheader>
|
||||
<v-subheader>General</v-subheader>
|
||||
|
||||
<v-list-tile avatar>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Profile photo</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Change your Google+ profile photo</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile avatar>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Show your status</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Your status is visible to everyone</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
</v-list>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-list
|
||||
subheader
|
||||
two-line
|
||||
>
|
||||
<v-subheader>Hangout notifications</v-subheader>
|
||||
|
||||
<v-list-tile @click="">
|
||||
<v-list-tile-action>
|
||||
<v-checkbox v-model="notifications"></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
|
||||
<v-list-tile-content @click="notifications = !notifications">
|
||||
<v-list-tile-title>Notifications</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Allow notifications</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile @click="">
|
||||
<v-list-tile-action>
|
||||
<v-checkbox v-model="sound"></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
|
||||
<v-list-tile-content @click="sound = !sound">
|
||||
<v-list-tile-title>Sound</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Hangouts message</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile @click="">
|
||||
<v-list-tile-action>
|
||||
<v-checkbox v-model="video"></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
|
||||
<v-list-tile-content @click="video = !video">
|
||||
<v-list-tile-title>Video sounds</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Hangouts video call</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile @click="">
|
||||
<v-list-tile-action>
|
||||
<v-checkbox v-model="invites"></v-checkbox>
|
||||
</v-list-tile-action>
|
||||
|
||||
<v-list-tile-content @click="invites = !invites">
|
||||
<v-list-tile-title>Invites</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Notify when receiving invites</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
</v-list>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</template>
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.tile {
|
||||
margin: 5px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.tile:hover {
|
||||
background-color: #1E88E5;
|
||||
}
|
||||
.tile:active {
|
||||
background: #bec5b7;
|
||||
}
|
||||
.v-list__group__header__prepend-icon .v-icon {
|
||||
color: white;
|
||||
}
|
||||
.v-list__tile__title:hover {
|
||||
color: #BBDEFB;
|
||||
}
|
||||
|
||||
.v-navigation-drawer {
|
||||
z-index: 1003;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.v-overlay--active {
|
||||
z-index: 1002;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
drawer: Boolean
|
||||
},
|
||||
|
||||
computed : {
|
||||
xdrawer: {
|
||||
get() {
|
||||
return this.drawer
|
||||
},
|
||||
set(v) {
|
||||
this.$emit("togleDrawer")
|
||||
}
|
||||
},
|
||||
level_0 () {
|
||||
return this.$store.state.system.menu_level_0
|
||||
},
|
||||
|
||||
level_1 () {
|
||||
return this.$store.state.system.menu_level_1
|
||||
},
|
||||
|
||||
level_2 () {
|
||||
return this.$store.state.system.menu_level_2
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
// this.$store.dispatch('system/get_menu')
|
||||
},
|
||||
|
||||
methods : {
|
||||
goTo (url) {
|
||||
window.location = BASE_URL + '/one-ui/' + url
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
134
one-klinik-biotest/apps/components/oneMenuDrawer2.vue
Normal file
@@ -0,0 +1,134 @@
|
||||
<template>
|
||||
<v-navigation-drawer temporary class="blue lighten-2" v-model="drawer" dark fixed app>
|
||||
<v-list>
|
||||
|
||||
<!-- LEVEL 0 -->
|
||||
<template
|
||||
v-for="(lev_0, i) in level_0"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
:key="i"
|
||||
v-if="!level_1['p_'+lev_0.id] && lev_0.is_parent=='N'"
|
||||
@click="goTo(lev_0.url)">
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group
|
||||
v-bind:key="i"
|
||||
:prepend-icon="lev_0.icon"
|
||||
:value="lev_0.state"
|
||||
v-if="level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 1 -->
|
||||
<template
|
||||
v-for="(lev_1, j) in level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
v-bind:key="j"
|
||||
v-if="!level_2['p_'+lev_1.id] && lev_1.is_parent=='N'"
|
||||
sub-group
|
||||
no-action
|
||||
@click="goTo(lev_1.url)"
|
||||
>
|
||||
<v-list-tile-action>
|
||||
<!-- <v-icon>home</v-icon> -->
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group
|
||||
v-bind:key="j"
|
||||
:value="lev_1.state"
|
||||
v-show="level_2['p_'+lev_1.id]"
|
||||
sub-group
|
||||
no-action
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile>
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 2 -->
|
||||
<template
|
||||
v-for="(lev_2, k) in level_2['p_'+lev_1.id]"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
:key="k"
|
||||
@click="goTo(lev_2.url)">
|
||||
<!-- <v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action> -->
|
||||
<v-list-tile-title>{{ lev_2.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</template>
|
||||
</v-list-group>
|
||||
|
||||
</template>
|
||||
|
||||
</v-list-group>
|
||||
|
||||
</template>
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.tile {
|
||||
margin: 5px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.tile:hover {
|
||||
background-color: #1E88E5;
|
||||
}
|
||||
.tile:active {
|
||||
background: #bec5b7;
|
||||
}
|
||||
.v-list__group__header__prepend-icon .v-icon {
|
||||
color: white;
|
||||
}
|
||||
.v-list__tile__title:hover {
|
||||
color: #BBDEFB;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
drawer: Boolean
|
||||
},
|
||||
|
||||
computed : {
|
||||
level_0 () {
|
||||
return this.$store.state.system.menu_level_0
|
||||
},
|
||||
|
||||
level_1 () {
|
||||
return this.$store.state.system.menu_level_1
|
||||
},
|
||||
|
||||
level_2 () {
|
||||
return this.$store.state.system.menu_level_2
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
this.$store.dispatch('system/get_menu')
|
||||
},
|
||||
|
||||
methods : {
|
||||
goTo (url) {
|
||||
window.location = BASE_URL + '/one-ui/' + url
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
229
one-klinik-biotest/apps/components/oneMenuDrawerGlobal.vue
Normal file
@@ -0,0 +1,229 @@
|
||||
<template>
|
||||
<v-navigation-drawer temporary class="blue lighten-2" v-model="drawer" dark fixed app>
|
||||
<v-list>
|
||||
<!-- IF NO CHILD -->
|
||||
<template
|
||||
v-for="(lev_0, i) in level_0"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
:key="i"
|
||||
v-show="!level_1['p_'+lev_0.id]"
|
||||
@click="goTo(lev_0.url)">
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title >{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<!-- HAVING CHILDREN -->
|
||||
<template
|
||||
v-for="(lev_0, i) in level_0"
|
||||
>
|
||||
<v-list-group
|
||||
v-bind:key="i"
|
||||
prepend-icon="account_circle"
|
||||
:value="lev_0.state"
|
||||
v-show="level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>{{ lev_0.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 1 STARTS HERE -->
|
||||
<!-- NOT HAVING CHILD -->
|
||||
<template
|
||||
v-for="(lev_1, j) in level_1['p_'+lev_0.id]"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
v-bind:key="j"
|
||||
v-show="!level_2['p_'+lev_1.id]"
|
||||
sub-group
|
||||
no-action
|
||||
@click="goTo(lev_1.url)"
|
||||
>
|
||||
<v-list-tile-action>
|
||||
<!-- <v-icon>home</v-icon> -->
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- HAVING CHILD -->
|
||||
<template
|
||||
v-for="(lev_1, j) in level_1['p_'+lev_0.id]"
|
||||
>
|
||||
|
||||
<v-list-group
|
||||
v-bind:key="j"
|
||||
:value="lev_1.state"
|
||||
v-show="level_2['p_'+lev_1.id]"
|
||||
sub-group
|
||||
no-action
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>{{ lev_1.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<!-- LEVEL 2 STARTS HERE -->
|
||||
<template
|
||||
v-for="(lev_2, k) in level_2['p_'+lev_1.id]"
|
||||
>
|
||||
<v-list-tile class="tile"
|
||||
:key="k"
|
||||
@click="goTo(lev_2.url)">
|
||||
<!-- <v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action> -->
|
||||
<v-list-tile-title>{{ lev_2.name }}</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</template>
|
||||
<!-- END OF LEVEL 2 -->
|
||||
|
||||
</v-list-group>
|
||||
</template>
|
||||
<!-- END OF LEVEL 1 -->
|
||||
|
||||
</v-list-group>
|
||||
</template>
|
||||
</v-list>
|
||||
|
||||
<!-- <v-list>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Home</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group
|
||||
prepend-icon="account_circle"
|
||||
value="true"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>Users</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
<v-list-group
|
||||
no-action
|
||||
sub-group
|
||||
value="true"
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>Admin</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
|
||||
<v-list-tile
|
||||
v-for="(admin, i) in admins"
|
||||
:key="i"
|
||||
@click=""
|
||||
>
|
||||
<v-list-tile-title v-text="admin[0]"></v-list-tile-title>
|
||||
<v-list-tile-action>
|
||||
<v-icon v-text="admin[1]"></v-icon>
|
||||
</v-list-tile-action>
|
||||
</v-list-tile>
|
||||
</v-list-group>
|
||||
|
||||
<v-list-group
|
||||
sub-group
|
||||
no-action
|
||||
>
|
||||
<template v-slot:activator>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-title>Actions</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
</template>
|
||||
<v-list-tile
|
||||
v-for="(crud, i) in cruds"
|
||||
:key="i"
|
||||
@click=""
|
||||
>
|
||||
<v-list-tile-title v-text="crud[0]"></v-list-tile-title>
|
||||
<v-list-tile-action>
|
||||
<v-icon v-text="crud[1]"></v-icon>
|
||||
</v-list-tile-action>
|
||||
</v-list-tile class="tile">
|
||||
</v-list-group>
|
||||
</v-list-group>
|
||||
</v-list> -->
|
||||
<!-- <v-list dense>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-action>
|
||||
<v-icon>home</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Home</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
<v-list-tile class="tile">
|
||||
<v-list-tile-action>
|
||||
<v-icon>contact_mail</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>Contact</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
</v-list> -->
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.tile {
|
||||
margin: 5px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.tile:hover {
|
||||
background-color: #1E88E5;
|
||||
}
|
||||
.tile:active {
|
||||
background: #bec5b7;
|
||||
}
|
||||
.v-list__group__header__prepend-icon .v-icon {
|
||||
color: #3b60f2;
|
||||
}
|
||||
.v-list__tile__title:hover {
|
||||
color: #BBDEFB;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
drawer: Boolean
|
||||
},
|
||||
|
||||
computed : {
|
||||
level_0 () {
|
||||
return this.$store.state.menu.menu_level_0
|
||||
},
|
||||
|
||||
level_1 () {
|
||||
return this.$store.state.menu.menu_level_1
|
||||
},
|
||||
|
||||
level_2 () {
|
||||
return this.$store.state.menu.menu_level_2
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
this.$store.dispatch('menu/get_menu')
|
||||
},
|
||||
|
||||
methods : {
|
||||
goTo (url) {
|
||||
window.location = BASE_URL + '/one-ui/' + url
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
67
one-klinik-biotest/apps/components/oneMergeReport.vue
Normal file
@@ -0,0 +1,67 @@
|
||||
<tmplate>
|
||||
<v-dialog v-model="dialog_choose" width="350px">
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-card>
|
||||
<v-card-text>
|
||||
Test Card
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="info"
|
||||
flat
|
||||
@click="selectReport()"
|
||||
>
|
||||
Pilih
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-dialog>
|
||||
<v-btn
|
||||
color="info"
|
||||
flat
|
||||
@click="dialog_choose = true"
|
||||
>
|
||||
Gabung Laporan
|
||||
</v-btn>
|
||||
<one-dialog-print :title="printtitle" :width="printwidth" :height="550" :status="openprint" :urlprint="urlprint" @close-dialog-print="openprint= false">
|
||||
</one-dialog-print>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
components : {
|
||||
'one-dialog-print':httpVueLoader('../../common/oneDialogPrintX.vue'),
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
dialog_choose:false,
|
||||
urlprint:'',
|
||||
printtitle:'Merge Report',
|
||||
printwidth:'60%',
|
||||
isLoading:false,
|
||||
openprint: false,
|
||||
orderHeaderID: 0,
|
||||
selectedReport: [],
|
||||
reports : [ {id:'lab',name:'Hasil Lab'}, {id:'xray',name:'Hasil Rontgent'}, {id:'ecg',name:'Hasil Ecg'} ]
|
||||
}
|
||||
},
|
||||
props:["id"],
|
||||
mounted() {
|
||||
checkReport()//this.$store.dispatch("paymentnew/lookup_type")
|
||||
},
|
||||
methods : {
|
||||
selectReport() {
|
||||
console.log('SelectedReport', selectedReport);
|
||||
}
|
||||
},
|
||||
watch : {
|
||||
async id(n,o) {
|
||||
if (n == 0) return;
|
||||
console.log('Check Report');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
131
one-klinik-biotest/apps/components/oneNavbarComponent-bkp.vue
Normal file
@@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<span>
|
||||
<one-menu-drawer :drawer="drawer" > </one-menu-drawer>
|
||||
<one-menu-notification :drawer="drawer_notification" > </one-menu-notification>
|
||||
<v-toolbar color="blue lighten-2" dark fixed app>
|
||||
<v-toolbar-side-icon @click.stop="drawer = !drawer"></v-toolbar-side-icon>
|
||||
<h1>ONE</h1>
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<a href="#" style="text-decoration:none;color:#fff;font-size:22px; margin-right:15px">{{ xusername }}</a>
|
||||
<v-badge color="red">
|
||||
<template v-slot:badge>
|
||||
<span>9</span>
|
||||
</template>
|
||||
<v-btn icon @click="drawer_notification = !drawer_notification" flat>
|
||||
|
||||
<v-icon
|
||||
medium
|
||||
|
||||
>
|
||||
notifications
|
||||
</v-icon>
|
||||
</v-btn>
|
||||
</v-badge>
|
||||
|
||||
|
||||
|
||||
<!-- <v-btn class="ml-4" icon>
|
||||
<v-icon>apps</v-icon>
|
||||
</v-btn> -->
|
||||
|
||||
<!-- PROFILE MENU -->
|
||||
<v-menu
|
||||
v-model="menu"
|
||||
:close-on-content-click="true"
|
||||
:nudge-width="200"
|
||||
offset-overflow
|
||||
left
|
||||
bottom
|
||||
>
|
||||
<template v-slot:activator="{ on }">
|
||||
<v-btn
|
||||
class="ml-4" icon
|
||||
v-on="on"
|
||||
>
|
||||
<v-icon>apps</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
|
||||
<v-card>
|
||||
<v-list>
|
||||
<v-list-tile avatar>
|
||||
<v-list-tile-avatar>
|
||||
<img src="https://cdn.vuetifyjs.com/images/john.jpg" alt="John">
|
||||
</v-list-tile-avatar>
|
||||
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>{{ xusername }}</v-list-tile-title>
|
||||
<v-list-tile-sub-title>Founder of Vuetify.js</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
|
||||
|
||||
</v-list-tile>
|
||||
</v-list>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-list>
|
||||
<v-list-tile
|
||||
@click="logout"
|
||||
>
|
||||
<v-list-tile-action>
|
||||
<v-icon>no_meeting_room</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Log Out</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
<!-- <v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-switch v-model="hints" color="purple"></v-switch>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Enable hints</v-list-tile-title>
|
||||
</v-list-tile> -->
|
||||
</v-list>
|
||||
|
||||
|
||||
</v-card>
|
||||
</v-menu>
|
||||
<!-- End of PROFILE MENU -->
|
||||
|
||||
</v-toolbar>
|
||||
</template>
|
||||
<style scoped>
|
||||
.v-badge__badge{
|
||||
top:0px;
|
||||
right:0px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-menu-drawer' : httpVueLoader('./oneMenuDrawer.vue'),
|
||||
'one-menu-notification' : httpVueLoader('./oneNotificationDrawer.vue')
|
||||
},
|
||||
data: function() {
|
||||
return {
|
||||
drawer: false,
|
||||
drawer_notification: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
xusername() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
|
||||
un = dtuser.M_UserUsername
|
||||
}
|
||||
return un
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
logout () {
|
||||
window.one_logout('/one-ui/test/vuex/one-login')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
117
one-klinik-biotest/apps/components/oneNavbarComponent.vue
Normal file
@@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<div>
|
||||
<one-menu-drawer :drawer="drawer" > </one-menu-drawer>
|
||||
|
||||
<v-toolbar color="blue lighten-2" dark fixed app>
|
||||
<!-- <v-toolbar-side-icon class="hidden-sm-and-down" @click.stop="togleDrawer()"></v-toolbar-side-icon> -->
|
||||
<v-layout row >
|
||||
<v-flex class="pt-2" xs8>
|
||||
<p class="mb-0"><a href="#" style="padding-bottom:0px;margin-bottom:0px;text-decoration:none;color:#fff;font-size:18px; font-weight:bold;">BISONE</a> </p>
|
||||
<p class="mb-0"><span style="text-decoration:none;color:#fff;font-size:12px;" class="ml-0 mt-0 bread-crumb">{{bread_crumb}}</span></p>
|
||||
|
||||
</v-flex>
|
||||
<v-flex xs4 class="mt-2 text-xs-right align-right">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- <v-btn class="ml-4" icon>
|
||||
<v-icon>apps</v-icon>
|
||||
</v-btn> -->
|
||||
|
||||
|
||||
</v-toolbar>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<style scoped>
|
||||
.bread-crumb {
|
||||
margin-left:20px;
|
||||
font-weight:normal!important;
|
||||
}
|
||||
.v-badge__badge{
|
||||
top:0px;
|
||||
right:0px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-menu-drawer' : httpVueLoader('./oneMenuDrawer.vue'),
|
||||
'one-cp' : httpVueLoader('./oneChangePassword.vue'),
|
||||
'one-menu-notification' : httpVueLoader('./oneNotificationDrawer.vue')
|
||||
},
|
||||
|
||||
data: function() {
|
||||
return {
|
||||
drawer: false,
|
||||
drawer_notification: false
|
||||
}
|
||||
},
|
||||
watch : {
|
||||
is_page_allowed : function(new_ipa, old_ipa) {
|
||||
if(! new_ipa ) {
|
||||
var dashboard = this.$store.state.system.dashboard
|
||||
if (dashboard == "") {
|
||||
//this.logout()
|
||||
console.log('go-to','logout')
|
||||
} else {
|
||||
//window.location.href = '/' + dashboard
|
||||
console.log('go-to dashboard',dashboard)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
is_page_allowed() {
|
||||
return this.$store.state.system.is_page_allowed
|
||||
},
|
||||
bread_crumb() {
|
||||
return this.$store.state.system.bread_crumb
|
||||
},
|
||||
xusername() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
|
||||
un = dtuser.M_UserUsername
|
||||
}
|
||||
return un
|
||||
},
|
||||
xstaffname() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
|
||||
un = dtuser.M_StaffName
|
||||
}
|
||||
return un
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
togleDrawer() {
|
||||
this.drawer = ! this.drawer
|
||||
},
|
||||
change_password() {
|
||||
this.$store.commit("system/update_change_password_dialog",true)
|
||||
},
|
||||
logout () {
|
||||
window.one_logout('/one-ui/test/vuex/one-login')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<span>
|
||||
<one-menu-drawer :drawer="drawer" > </one-menu-drawer>
|
||||
<v-toolbar color="blue lighten-2" dark fixed app>
|
||||
<v-toolbar-side-icon @click.stop="drawer = !drawer"></v-toolbar-side-icon>
|
||||
<h1>ONE</h1>
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<a href="#" style="text-decoration:none;color:#fff;font-size:22px; margin-right:15px">{{xusername}}</a>
|
||||
<v-badge color="red">
|
||||
<template v-slot:badge>
|
||||
<span>9</span>
|
||||
</template>
|
||||
<v-icon
|
||||
medium
|
||||
|
||||
>
|
||||
notifications
|
||||
</v-icon>
|
||||
</v-badge>
|
||||
<v-btn class="ml-4" icon>
|
||||
<v-icon>apps</v-icon>
|
||||
</v-btn>
|
||||
</v-toolbar>
|
||||
</template>
|
||||
<style scoped>
|
||||
.v-badge__badge{
|
||||
top:-9px;
|
||||
right:-9px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-menu-drawer' : httpVueLoader('./oneMenuDrawerGlobal.vue')
|
||||
},
|
||||
data: function() {
|
||||
return {
|
||||
drawer: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
xusername() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
un = dtuser.M_UserUsername
|
||||
}
|
||||
return un
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
165
one-klinik-biotest/apps/components/oneNavbarComponent_auto.vue
Normal file
@@ -0,0 +1,165 @@
|
||||
<template>
|
||||
<span>
|
||||
<one-menu-drawer :drawer="drawer" > </one-menu-drawer>
|
||||
<one-menu-notification :drawer="drawer_notification" > </one-menu-notification>
|
||||
<v-toolbar color="blue lighten-2" dark fixed app>
|
||||
<v-toolbar-side-icon class="hidden-sm-and-down" @click.stop="togleDrawer()"></v-toolbar-side-icon>
|
||||
<h1>ONE</h1>
|
||||
<h2 class="bread-crumb">{{bread_crumb}}</h2>
|
||||
<v-spacer></v-spacer>
|
||||
<div style="margin-top:14px;margin-bottom:auto;">
|
||||
<span :class="auto_class"
|
||||
style='display:inline-block;margin-right:15px;font-size:16px;color:#ffffff;'>
|
||||
Auto Verifikasi
|
||||
</span>
|
||||
<v-switch
|
||||
v-model="flagAutoRun"
|
||||
style="margin-right:15px;display:inline-block;"
|
||||
color="#00ff00"
|
||||
></v-switch>
|
||||
<a href="#" style="text-decoration:none;color:#fff;font-size:22px; margin-right:15px">{{ xusername }}</a>
|
||||
|
||||
</div>
|
||||
<!-- PROFILE MENU -->
|
||||
<v-menu
|
||||
:close-on-content-click="true"
|
||||
:nudge-width="200"
|
||||
offset-overflow
|
||||
left
|
||||
bottom
|
||||
>
|
||||
<template v-slot:activator="{ on }">
|
||||
<v-btn
|
||||
class="ml-4" icon
|
||||
v-on="on"
|
||||
>
|
||||
<v-icon>apps</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
|
||||
<v-card>
|
||||
<v-list>
|
||||
<v-list-tile avatar>
|
||||
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>{{ xusername }}</v-list-tile-title>
|
||||
<v-list-tile-sub-title>{{xstaffname}}</v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
|
||||
</v-list-tile>
|
||||
</v-list>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-list>
|
||||
<v-list-tile @click="change_password" >
|
||||
<v-list-tile-action>
|
||||
<v-icon>security</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Change Password</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</v-list>
|
||||
<v-list>
|
||||
<v-list-tile @click="logout" >
|
||||
<v-list-tile-action>
|
||||
<v-icon>no_meeting_room</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-title>Log Out</v-list-tile-title>
|
||||
</v-list-tile>
|
||||
|
||||
</v-list>
|
||||
|
||||
|
||||
</v-card>
|
||||
</v-menu>
|
||||
<!-- End of PROFILE MENU -->
|
||||
|
||||
<one-cp></one-cp>
|
||||
</v-toolbar>
|
||||
</template>
|
||||
<style scoped>
|
||||
.bread-crumb {
|
||||
margin-left:20px;
|
||||
font-weight:normal!important;
|
||||
}
|
||||
.v-badge__badge{
|
||||
top:0px;
|
||||
right:0px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
module.exports = {
|
||||
components: {
|
||||
'one-menu-drawer' : httpVueLoader('./oneMenuDrawer.vue'),
|
||||
'one-cp' : httpVueLoader('./oneChangePassword.vue'),
|
||||
'one-menu-notification' : httpVueLoader('./oneNotificationDrawer.vue')
|
||||
},
|
||||
data: function() {
|
||||
return {
|
||||
drawer: false,
|
||||
drawer_notification: false ,
|
||||
flagAutoRun: false
|
||||
}
|
||||
},
|
||||
watch : {
|
||||
is_page_allowed : function(new_ipa, old_ipa) {
|
||||
if(! new_ipa ) {
|
||||
var dashboard = this.$store.state.system.dashboard
|
||||
if (dashboard == "") {
|
||||
//this.logout()
|
||||
console.log('go-to','logout')
|
||||
} else {
|
||||
//window.location.href = '/' + dashboard
|
||||
console.log('go-to dashboard',dashboard)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
is_page_allowed() {
|
||||
return this.$store.state.system.is_page_allowed
|
||||
},
|
||||
bread_crumb() {
|
||||
return this.$store.state.system.bread_crumb
|
||||
},
|
||||
xusername() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
|
||||
un = dtuser.M_UserUsername
|
||||
}
|
||||
return un
|
||||
},
|
||||
xstaffname() {
|
||||
var un = ''
|
||||
if(localStorage.getItem("user")){
|
||||
var retrievedObject = localStorage.getItem('user')
|
||||
var dtuser = JSON.parse(retrievedObject)
|
||||
|
||||
un = dtuser.M_StaffName
|
||||
}
|
||||
return un
|
||||
},
|
||||
auto_label() {
|
||||
console.log('Auto', this.flagAutoRun);
|
||||
if (this.flagAutoRun) return 'Auto Verif Is Running';
|
||||
return 'Auto Verif Is Stopped';
|
||||
}
|
||||
},
|
||||
methods : {
|
||||
togleDrawer() {
|
||||
this.drawer = ! this.drawer
|
||||
},
|
||||
change_password() {
|
||||
this.$store.commit("system/update_change_password_dialog",true)
|
||||
},
|
||||
logout () {
|
||||
window.one_logout('/one-ui/test/vuex/one-login')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
138
one-klinik-biotest/apps/components/oneNotificationDrawer.vue
Normal file
@@ -0,0 +1,138 @@
|
||||
<template>
|
||||
<v-navigation-drawer v-model="xdrawer" fixed app right temporary :width="drawerHeight">
|
||||
|
||||
<v-list two-line>
|
||||
<template v-for="(item, index) in items">
|
||||
<v-subheader
|
||||
v-bind:key="item.id"
|
||||
v-if="item.header"
|
||||
>
|
||||
{{ item.header }}
|
||||
</v-subheader>
|
||||
|
||||
|
||||
|
||||
<template v-for="(itm, idx) in item.items">
|
||||
<v-list-tile
|
||||
:key="itm.id"
|
||||
avatar
|
||||
>
|
||||
<v-list-tile-avatar>
|
||||
<img :src="itm.avatar">
|
||||
</v-list-tile-avatar>
|
||||
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title v-html="itm.title"></v-list-tile-title>
|
||||
|
||||
<v-list-tile-sub-title v-html="itm.subtitle"></v-list-tile-sub-title>
|
||||
</v-list-tile-content>
|
||||
|
||||
<v-list-tile-action v-if="itm.date">
|
||||
|
||||
{{ itm.date }}
|
||||
|
||||
</v-list-tile-action>
|
||||
|
||||
|
||||
</v-list-tile>
|
||||
<v-divider
|
||||
:key="itm.id+50000"
|
||||
:inset="true"
|
||||
></v-divider>
|
||||
</template>
|
||||
|
||||
</template>
|
||||
</v-list>
|
||||
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
items:
|
||||
[
|
||||
{
|
||||
// header: 'Today' ,
|
||||
items : [
|
||||
{
|
||||
avatar: 'https://cdn.vuetifyjs.com/images/lists/1.jpg',
|
||||
title: 'Brunch this weekend?',
|
||||
subtitle: "<span class='text--primary'>Ali Connors</span> — I'll be in your neighborhood doing errands this weekend. Do you want to hang out?",
|
||||
date: '15 mins'
|
||||
,id : 0
|
||||
},
|
||||
|
||||
{
|
||||
avatar: 'https://cdn.vuetifyjs.com/images/lists/2.jpg',
|
||||
title: 'Summer BBQ <span class="grey--text text--lighten-1">4</span>',
|
||||
subtitle: "<span class='text--primary'>to Alex, Scott, Jennifer</span> — Wish I could come, but I'm out of town this weekend.",
|
||||
date: '30 mins'
|
||||
,id : 1
|
||||
},
|
||||
|
||||
{
|
||||
avatar: 'https://cdn.vuetifyjs.com/images/lists/3.jpg',
|
||||
title: 'Oui oui',
|
||||
subtitle: "<span class='text--primary'>Sandra Adams</span> — Do you have Paris recommendations? Have you ever been?",
|
||||
date: '45 mins'
|
||||
,id : 2
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
// header: 'Yesterday' ,
|
||||
items : [
|
||||
{
|
||||
avatar: 'https://cdn.vuetifyjs.com/images/lists/1.jpg',
|
||||
title: 'Brunch this weekend?',
|
||||
subtitle: "<span class='text--primary'>Ali Connors</span> — I'll be in your neighborhood doing errands this weekend. Do you want to hang out?",
|
||||
date: '1 day'
|
||||
,id : 3
|
||||
},
|
||||
|
||||
{
|
||||
avatar: 'https://cdn.vuetifyjs.com/images/lists/2.jpg',
|
||||
title: 'Summer BBQ <span class="grey--text text--lighten-1">4</span>',
|
||||
subtitle: "<span class='text--primary'>to Alex, Scott, Jennifer</span> — Wish I could come, but I'm out of town this weekend.",
|
||||
date: '2 day'
|
||||
,id : 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
props: {
|
||||
drawer: Boolean
|
||||
},
|
||||
|
||||
computed : {
|
||||
drawerHeight() {
|
||||
if (this.$vuetify.breakpoint.smAndDown) {
|
||||
return "300px"
|
||||
}
|
||||
return "500px"
|
||||
},
|
||||
xdrawer: {
|
||||
get() {
|
||||
return this.drawer
|
||||
},
|
||||
set(v) {
|
||||
this.$emit("togleDrawer")
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
|
||||
},
|
||||
|
||||
methods : {
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
74
one-klinik-biotest/apps/components/oneTanggal.vue
Normal file
@@ -0,0 +1,74 @@
|
||||
<template>
|
||||
<div class="tanggal">
|
||||
{{f_tanggal}}
|
||||
<span class="hidden-sm-and-down" style="color:brown; margin-left:20px;font-weight:bold;font-size:16px;">
|
||||
{{branch_name}}
|
||||
</span>
|
||||
<div class="visible-sm-and-down hidden-md-and-up" style="color:brown; font-weight:bold;font-size:10px;">
|
||||
Devone <!-- {{branch_name}} -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style scoped>
|
||||
div.tanggal {
|
||||
text-decoration: none;
|
||||
vertical-align:top;
|
||||
color: rgb(255, 255, 255);
|
||||
font-size: 14px;
|
||||
display:inline-block;
|
||||
margin-left:10px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
let hari = ['Minggu','Senin','Selasa', 'Rabu', 'Kamis',"Jum'at","Sabtu"]
|
||||
let bulan = ["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"]
|
||||
|
||||
module.exports = {
|
||||
data() {
|
||||
return {
|
||||
tanggal: new Date()
|
||||
,timepool : 0
|
||||
}
|
||||
}
|
||||
,computed: {
|
||||
branch_name() {
|
||||
let branch = this.$store.state.system.branch
|
||||
if (branch.M_BranchName == undefined) return ''
|
||||
return branch.M_BranchName
|
||||
},
|
||||
f_tanggal() {
|
||||
try {
|
||||
let tgl = this.tanggal.getDate()
|
||||
let bln = bulan[this.tanggal.getMonth()]
|
||||
let day = hari[this.tanggal.getDay()]
|
||||
let result = day + ', ' + tgl + ' ' + bln + ' ' + this.tanggal.getFullYear()
|
||||
let hour = this.tanggal.getHours()
|
||||
let minute = this.tanggal.getMinutes()
|
||||
let second = this.tanggal.getSeconds()
|
||||
let jam = ' '
|
||||
if ( hour < 10 ) jam = jam + '0'
|
||||
jam = jam + hour.toString() + ':'
|
||||
if ( minute < 10 ) jam = jam + '0'
|
||||
jam = jam + minute.toString() + ':'
|
||||
if ( second< 10 ) jam = jam + + '0'
|
||||
jam = jam + second.toString()
|
||||
|
||||
result = result + ' ' + jam
|
||||
return result
|
||||
} catch(e) {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
}
|
||||
, mounted() {
|
||||
let self = this
|
||||
this.timepool = setInterval(function() {
|
||||
self.tanggal = new Date()
|
||||
},1000)
|
||||
}
|
||||
,beforeDestroy() {
|
||||
if (this.timepool > 0 ) clearInterval(this.timepool)
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
BIN
one-klinik-biotest/apps/image/background.png
Normal file
|
After Width: | Height: | Size: 389 KiB |
BIN
one-klinik-biotest/apps/image/background2.png
Normal file
|
After Width: | Height: | Size: 358 KiB |
BIN
one-klinik-biotest/apps/image/imageputih.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
one-klinik-biotest/apps/image/info.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
one-klinik-biotest/apps/image/logo.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
one-klinik-biotest/apps/image/onetext.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
one-klinik-biotest/apps/image/pramitaback.jpg
Normal file
|
After Width: | Height: | Size: 909 KiB |
BIN
one-klinik-biotest/apps/image/vl-green.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
one-klinik-biotest/apps/image/vl-grey.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
one-klinik-biotest/apps/image/vl-red.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
one-klinik-biotest/apps/image/vr-green.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
one-klinik-biotest/apps/image/vr-grey.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
one-klinik-biotest/apps/image/vr-red.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
one-klinik-biotest/apps/image/welcome.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
51
one-klinik-biotest/apps/login/api.js
Normal file
@@ -0,0 +1,51 @@
|
||||
const URL_LOGIN =
|
||||
"/one-api/v1/system/auth/login";
|
||||
const URL_IS_LOGIN =
|
||||
"/one-api/v1/system/auth/isLogin";
|
||||
|
||||
const ONE_TOKEN = "oneTokenId";
|
||||
|
||||
export async function login(userName, userPassword) {
|
||||
try {
|
||||
var resp = await axios.post(URL_LOGIN, {
|
||||
userName: userName,
|
||||
userPassword: userPassword
|
||||
});
|
||||
if (resp.status != 200) {
|
||||
return { status: "ERR", message: resp.statusText };
|
||||
}
|
||||
let data = resp.data;
|
||||
//Hardcoded 1st
|
||||
data.nextPage = "/one-ui/apps/main/";
|
||||
return data;
|
||||
} catch (e) {
|
||||
return { status: "ERR", message: e.message };
|
||||
}
|
||||
}
|
||||
|
||||
export async function isLogin(token) {
|
||||
try {
|
||||
var resp = await axios.post(URL_IS_LOGIN, {
|
||||
token: token
|
||||
});
|
||||
if (resp.status != 200) {
|
||||
return { status: "ERR", message: resp.statusText };
|
||||
}
|
||||
let data = resp.data;
|
||||
//Hardcoded 1st
|
||||
data.nextPage = "/one-ui/apps/main/";
|
||||
return data;
|
||||
} catch (e) {
|
||||
return { status: "ERR", message: e.message };
|
||||
}
|
||||
}
|
||||
|
||||
export function loadOneToken() {
|
||||
return localStorage.getItem(ONE_TOKEN);
|
||||
}
|
||||
export function saveOneToken(token) {
|
||||
localStorage.setItem(ONE_TOKEN, token);
|
||||
}
|
||||
export function removeOneToken() {
|
||||
localStorage.removeItem(ONE_TOKEN);
|
||||
}
|
||||
113
one-klinik-biotest/apps/login/index.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Login</title>
|
||||
<link rel="stylesheet" href="../../libs/vendor/css/google-fonts.css">
|
||||
<link rel="stylesheet" href="../../libs/vendor/css/vuetify.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div v-cloak id="app">
|
||||
<v-app id="inspire">
|
||||
<v-content>
|
||||
<v-container fluid fill-height>
|
||||
<v-layout align-center justify-center>
|
||||
<v-flex xs12 sm8 md4>
|
||||
<v-card class="elevation-12">
|
||||
<v-toolbar dark color="primary">
|
||||
<v-toolbar-title>One UI</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
</v-toolbar>
|
||||
<v-alert
|
||||
:value="isError"
|
||||
type="warning"
|
||||
>
|
||||
{{errorMessage}}
|
||||
</v-alert>
|
||||
<v-progress-circular
|
||||
indeterminate
|
||||
v-show="isLoading"
|
||||
>
|
||||
|
||||
</v-progress-circular>
|
||||
|
||||
<v-card-text>
|
||||
<v-form>
|
||||
<v-text-field v-model="userName" prepend-icon="person" label="Login" type="text"></v-text-field>
|
||||
<v-text-field @keydown.enter="doLogin" v-model="userPassword" prepend-icon="lock" label="Password" type="password"></v-text-field>
|
||||
</v-form>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn @click="doLogin" color="primary">Login</v-btn>
|
||||
</v-card-actions>
|
||||
{{afterLogin}}
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-container>
|
||||
</v-content>
|
||||
</v-app>
|
||||
</div>
|
||||
|
||||
<!-- Vendor -->
|
||||
<script src="../../libs/vendor/axios.min.js"></script>
|
||||
<script src="../../libs/vendor/vue.js"></script>
|
||||
<script src="../../libs/vendor/vuex.js"></script>
|
||||
<script src="../../libs/vendor/vuetify.js"></script>
|
||||
<!-- App Script -->
|
||||
<?php
|
||||
$ts = "?ts=" . Date("ymdhis");
|
||||
?>
|
||||
<script type="module">
|
||||
import { store } from './store.js<?php echo $ts ?>';
|
||||
//window.store = store;
|
||||
|
||||
new Vue({
|
||||
store,
|
||||
el: '#app',
|
||||
data: {
|
||||
userName: "",
|
||||
userPassword: ""
|
||||
},
|
||||
methods : {
|
||||
doLogin() {
|
||||
this.$store.dispatch("login",{
|
||||
"userName": this.userName,
|
||||
"userPassword": this.userPassword
|
||||
});
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...Vuex.mapState({
|
||||
errorMessage: state => state.errorMessage,
|
||||
isLoading: state => state.isLoading,
|
||||
isLogin: state => state.isLogin,
|
||||
nextPage: state => state.nextPage
|
||||
}),
|
||||
isError: function() {
|
||||
return this.errorMessage != "";
|
||||
},
|
||||
afterLogin: function() {
|
||||
if (this.isLogin) {
|
||||
document.location.href = this.nextPage;
|
||||
};
|
||||
}
|
||||
},
|
||||
created: function(){
|
||||
this.$store.dispatch("loadToken");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
[v-cloak] {
|
||||
display: none
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
61
one-klinik-biotest/apps/login/store.js
Normal file
@@ -0,0 +1,61 @@
|
||||
//import dari api
|
||||
import * as api from "./api.js";
|
||||
|
||||
export const store = new Vuex.Store({
|
||||
state: {
|
||||
isLogin: false,
|
||||
token: "",
|
||||
isLoading: false,
|
||||
errorMessage: "",
|
||||
nextPage: ""
|
||||
},
|
||||
mutations: {
|
||||
updateLoading(state, flag) {
|
||||
state.isLoading = flag;
|
||||
},
|
||||
updateIsLogin(state, flag) {
|
||||
state.isLogin = flag;
|
||||
},
|
||||
updateToken(state, resp) {
|
||||
state.token = resp.data.token;
|
||||
state.nextPage = resp.nextPage;
|
||||
},
|
||||
updateErrorMessage(state, msg) {
|
||||
state.errorMessage = msg;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async login(context, data) {
|
||||
context.commit("updateLoading", true);
|
||||
let resp = await api.login(data.userName, data.userPassword);
|
||||
if (resp.status == "OK") {
|
||||
context.commit("updateIsLogin", true);
|
||||
api.saveOneToken(resp.data.token);
|
||||
context.commit("updateToken", resp);
|
||||
context.commit("updateErrorMessage", "");
|
||||
} else {
|
||||
context.commit("updateIsLogin", false);
|
||||
context.commit("updateErrorMessage", resp.message);
|
||||
api.removeOneToken();
|
||||
setTimeout(() => {
|
||||
context.commit("updateErrorMessage", "");
|
||||
}, 3000);
|
||||
}
|
||||
context.commit("updateLoading", false);
|
||||
},
|
||||
async loadToken(context) {
|
||||
context.commit("updateLoading", true);
|
||||
let token = api.loadOneToken();
|
||||
if (token == "") {
|
||||
context.commit("updateIsLogin", false);
|
||||
} else {
|
||||
let resp = await api.isLogin(token);
|
||||
if (resp.status == "OK") {
|
||||
context.commit("updateToken", resp);
|
||||
context.commit("updateIsLogin", true);
|
||||
}
|
||||
}
|
||||
context.commit("updateLoading", false);
|
||||
}
|
||||
}
|
||||
});
|
||||
0
one-klinik-biotest/apps/main/api.js
Normal file
108
one-klinik-biotest/apps/main/components/smartNavbarComponent.js
Normal file
@@ -0,0 +1,108 @@
|
||||
var smartNavbarComponent = {
|
||||
template: `
|
||||
<span>
|
||||
<v-navigation-drawer v-model="drawer" fixed app>
|
||||
<v-list>
|
||||
<v-list-group no-action group="l1home">
|
||||
<v-list-tile slot="activator">
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
L1 Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>restaurant</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
Sub of Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group no-action sub-group group="l2home" >
|
||||
<v-list-tile slot="activator">
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
L2 Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>restaurant</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
Sub of L2 Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-group no-action sub-group group="l2home.l3home" >
|
||||
<v-list-tile slot="activator">
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
L3 Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
<v-list-tile>
|
||||
<v-list-tile-action>
|
||||
<v-icon>restaurant</v-icon>
|
||||
</v-list-tile-action>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
Sub of L3 Home
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
</v-list-group>
|
||||
|
||||
</v-list-group>
|
||||
|
||||
</v-list-group>
|
||||
|
||||
<v-list-group no-action >
|
||||
<v-list-tile slot="activator">
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
L1 School
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
</v-list-tile>
|
||||
|
||||
<v-list-tile>
|
||||
<v-list-tile-content>
|
||||
<v-list-tile-title>
|
||||
Sub of School
|
||||
</v-list-tile-title>
|
||||
</v-list-tile-content>
|
||||
<v-list-tile-action>
|
||||
<v-icon>school</v-icon>
|
||||
</v-list-tile-action>
|
||||
</v-list-tile>
|
||||
</v-list-group>
|
||||
|
||||
|
||||
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
<v-toolbar color="indigo" dark fixed app>
|
||||
<v-toolbar-side-icon @click.stop="drawer = !drawer"></v-toolbar-side-icon>
|
||||
<v-toolbar-title>Application</v-toolbar-title>
|
||||
</v-toolbar>
|
||||
</span>
|
||||
`,
|
||||
data: function() {
|
||||
return {
|
||||
drawer: true
|
||||
};
|
||||
},
|
||||
methods: {}
|
||||
};
|
||||
|
||||
export { smartNavbarComponent };
|
||||
62
one-klinik-biotest/apps/main/index.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>One::Main</title>
|
||||
<link rel="stylesheet" href="../../libs/vendor/css/google-fonts.css">
|
||||
<link rel="stylesheet" href="../../libs/vendor/css/vuetify.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div v-cloak id="app">
|
||||
<v-app id="smartApp">
|
||||
<smart-navbar></smart-navbar>
|
||||
<v-content>
|
||||
<v-container fluid fill-height style="height:inherit">
|
||||
<v-flex size="xs12">
|
||||
Welcome to ONE
|
||||
</v-flex>
|
||||
</v-container>
|
||||
</v-content>
|
||||
<v-footer color="indigo" app>
|
||||
<span class="white--text">© 2017</span>
|
||||
</v-footer>
|
||||
</v-app>
|
||||
</div>
|
||||
|
||||
<!-- Vendor -->
|
||||
<script src="../../libs/vendor/axios.min.js"></script>
|
||||
<script src="../../libs/vendor/vue.js"></script>
|
||||
<script src="../../libs/vendor/vuex.js"></script>
|
||||
<script src="../../libs/vendor/vuetify.js"></script>
|
||||
<!-- App Script -->
|
||||
<?php
|
||||
$ts = "?ts=" . Date("ymdhis");
|
||||
?>
|
||||
<script type="module">
|
||||
import { smartNavbarComponent } from './components/smartNavbarComponent.js<?php echo $ts ?>';
|
||||
//for testing
|
||||
// window.store = store;
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'smart-navbar': smartNavbarComponent
|
||||
},
|
||||
data: {
|
||||
drawer: false,
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style>
|
||||
[v-cloak] {
|
||||
display: none
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
0
one-klinik-biotest/apps/main/store.js
Normal file
101
one-klinik-biotest/apps/modules/system/menu.js
Normal file
@@ -0,0 +1,101 @@
|
||||
// 1 => LOADING
|
||||
// 2 => DONE
|
||||
// 3 => ERROR
|
||||
import * as menu_api from "../../api/system/menu.js?x=1"
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
search : '',
|
||||
search_status: 0,
|
||||
search_error_message: "",
|
||||
menu_level_0: [],
|
||||
menu_level_1: [],
|
||||
menu_level_2: [],
|
||||
total_menu: 0,
|
||||
//sipe add breadcrumb dan hak akses
|
||||
bread_crumb : "",
|
||||
is_page_allowed : true,
|
||||
dashboard:""
|
||||
},
|
||||
|
||||
mutations: {
|
||||
update_bread_crumb(state,val) {
|
||||
state.bread_crumb= val
|
||||
},
|
||||
update_dashboard(state,val) {
|
||||
state.dashboard= val
|
||||
},
|
||||
update_is_page_allowed(state,val) {
|
||||
state.is_page_allowed = val
|
||||
},
|
||||
update_search(state,val) {
|
||||
state.search=val
|
||||
},
|
||||
update_search_error_message(state,status) {
|
||||
state.search_error_message = status
|
||||
},
|
||||
update_search_status(state,status) {
|
||||
state.search_status = status
|
||||
},
|
||||
|
||||
update_menu_level_0 (state, data) {
|
||||
state.menu_level_0 = data
|
||||
},
|
||||
|
||||
update_menu_level_1 (state, data) {
|
||||
state.menu_level_1 = data
|
||||
},
|
||||
|
||||
update_menu_level_2 (state, data) {
|
||||
state.menu_level_2 = data
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async get_menu(context) {
|
||||
context.commit("update_search_status",1)
|
||||
try {
|
||||
let resp= await menu_api.get_menu()
|
||||
if (resp.status != "OK") {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message",resp.message)
|
||||
} else {
|
||||
context.commit("update_search_status",2)
|
||||
context.commit("update_search_error_message","")
|
||||
|
||||
let x = resp.data
|
||||
if (x[0])
|
||||
context.commit("update_menu_level_0", x[0]['p_0'])
|
||||
|
||||
if (x[1])
|
||||
context.commit("update_menu_level_1", x[1])
|
||||
|
||||
if (x[2])
|
||||
context.commit("update_menu_level_2", x[2])
|
||||
// let data = {
|
||||
// total : resp.data.total,
|
||||
// records : resp.data.records
|
||||
// }
|
||||
|
||||
// context.commit("update_status", data)
|
||||
}
|
||||
//sipe :
|
||||
// tambahan get bread_crumb
|
||||
resp = await menu_api.get_bread_crumb()
|
||||
if (resp.status != "OK") {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message",resp.message)
|
||||
} else {
|
||||
context.commit("update_search_status",2)
|
||||
context.commit("update_search_error_message","")
|
||||
context.commit("update_bread_crumb",resp.data.bread_crumb)
|
||||
context.commit("update_page_allowed",resp.data.is_page_allowed)
|
||||
context.commit("update_dashboard",resp.data.dashboard)
|
||||
}
|
||||
} catch(e) {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message", e.message )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
122
one-klinik-biotest/apps/modules/system/system.js
Normal file
@@ -0,0 +1,122 @@
|
||||
// 1 => LOADING
|
||||
// 2 => DONE
|
||||
// 3 => ERROR
|
||||
import * as menu_api from "../../api/system/menu.js"
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
search : '',
|
||||
search_status: 0,
|
||||
search_error_message: "",
|
||||
menu_level_0: [],
|
||||
menu_level_1: [],
|
||||
menu_level_2: [],
|
||||
total_menu: 0,
|
||||
//sipe add breadcrumb dan hak akses
|
||||
bread_crumb : "",
|
||||
is_page_allowed : true,
|
||||
dashboard: "",
|
||||
//tambahan jumlah notification
|
||||
notification_count: 0,
|
||||
change_password_dialog: false,
|
||||
change_password_error: "",
|
||||
branch: {}
|
||||
},
|
||||
|
||||
mutations: {
|
||||
update_branch(state,val) {
|
||||
state.branch = val
|
||||
},
|
||||
update_change_password_dialog(state,val) {
|
||||
state.change_password_dialog = val
|
||||
},
|
||||
update_change_password_error(state,val) {
|
||||
state.change_password_error= val
|
||||
},
|
||||
update_bread_crumb(state,val) {
|
||||
state.bread_crumb = val
|
||||
},
|
||||
update_dashboard(state,val) {
|
||||
state.dashboard= val
|
||||
},
|
||||
update_page_allowed(state,val) {
|
||||
state.is_page_allowed = val
|
||||
},
|
||||
update_search(state,val) {
|
||||
state.search=val
|
||||
},
|
||||
update_search_error_message(state,status) {
|
||||
state.search_error_message = status
|
||||
},
|
||||
update_search_status(state,status) {
|
||||
state.search_status = status
|
||||
},
|
||||
|
||||
update_menu_level_0 (state, data) {
|
||||
state.menu_level_0 = data
|
||||
},
|
||||
|
||||
update_menu_level_1 (state, data) {
|
||||
state.menu_level_1 = data
|
||||
},
|
||||
|
||||
update_menu_level_2 (state, data) {
|
||||
state.menu_level_2 = data
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async get_menu(context) {
|
||||
context.commit("update_search_status",1)
|
||||
try {
|
||||
let resp= await menu_api.get_menu(one_token())
|
||||
if (resp.status != "OK") {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message",resp.message)
|
||||
} else {
|
||||
context.commit("update_search_status",2)
|
||||
context.commit("update_search_error_message","")
|
||||
|
||||
let x = resp.data
|
||||
if (x[0])
|
||||
context.commit("update_menu_level_0", x[0]['p_0'])
|
||||
|
||||
if (x[1])
|
||||
context.commit("update_menu_level_1", x[1])
|
||||
|
||||
if (x[2])
|
||||
context.commit("update_menu_level_2", x[2])
|
||||
}
|
||||
//sipe :
|
||||
// tambahan get bread_crumb
|
||||
resp = await menu_api.get_bread_crumb(one_token())
|
||||
if (resp.status != "OK") {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message",resp.message)
|
||||
} else {
|
||||
context.commit("update_search_status",2)
|
||||
context.commit("update_search_error_message","")
|
||||
context.commit("update_bread_crumb",resp.data.bread_crumb)
|
||||
context.commit("update_branch",resp.data.branch)
|
||||
context.commit("update_page_allowed",resp.data.is_page_allowed)
|
||||
context.commit("update_dashboard",resp.data.dashboard)
|
||||
}
|
||||
} catch(e) {
|
||||
context.commit("update_search_status",3)
|
||||
context.commit("update_search_error_message", e.message )
|
||||
}
|
||||
},
|
||||
async change_password(context,prm) {
|
||||
try {
|
||||
let resp = await menu_api.change_password(prm)
|
||||
if (resp.status != "OK") {
|
||||
context.commit("update_change_password_error",resp.message)
|
||||
} else {
|
||||
context.commit("update_change_password_error","")
|
||||
}
|
||||
} catch(e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
one-klinik-biotest/apps/rcomponents/one_report_merger.js
Normal file
BIN
one-klinik-biotest/blank.png
Normal file
|
After Width: | Height: | Size: 362 B |
75
one-klinik-biotest/common/oneDatePicker.vue
Normal file
@@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<v-menu
|
||||
v-model="menu2"
|
||||
:close-on-content-click="false"
|
||||
:nudge-right="40"
|
||||
lazy
|
||||
transition="scale-transition"
|
||||
offset-y
|
||||
full-width
|
||||
max-width="290px"
|
||||
min-width="290px"
|
||||
>
|
||||
<v-text-field
|
||||
slot="activator"
|
||||
v-model="computedDateFormatted"
|
||||
:label=init_label
|
||||
hint="DD-MM-YYYY format"
|
||||
persistent-hint
|
||||
readonly
|
||||
></v-text-field>
|
||||
<v-date-picker v-model="init_date" no-title @input="menu2 = false"></v-date-picker>
|
||||
</v-menu>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['label', 'date', 'data'],
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_date: this.date ? this.date : new Date().toISOString().substr(0, 10),
|
||||
dateFormatted: this.formatDate(new Date().toISOString().substr(0, 10)),
|
||||
menu1: false,
|
||||
menu2: false,
|
||||
|
||||
init_label: this.label ? this.label : 'Date',
|
||||
init_data: this.data ? this.data : ''
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
computedDateFormatted () {
|
||||
return this.formatDate(this.init_date)
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
init_date (n, o) {
|
||||
this.dateFormatted = this.formatDate(this.init_date)
|
||||
|
||||
this.$emit('change', {"old_date":o, "new_date":n, "data":this.init_data});
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
formatDate (date) {
|
||||
if (!date) return null
|
||||
|
||||
const [year, month, day] = date.split('-')
|
||||
return `${day}-${month}-${year}`
|
||||
},
|
||||
parseDate (date) {
|
||||
if (!date) return null
|
||||
|
||||
const [month, day, year] = date.split('/')
|
||||
return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`
|
||||
},
|
||||
|
||||
emitChange (n, o) {
|
||||
console.log("old:"+o)
|
||||
console.log("new:"+n)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
80
one-klinik-biotest/common/oneDialogAlert.vue
Normal file
@@ -0,0 +1,80 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="30%"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline grey lighten-2 pt-2 pb-2"
|
||||
primary-title
|
||||
>
|
||||
Peringatan !
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
<v-layout row>
|
||||
<v-flex xs12 d-flex>
|
||||
<v-layout row>
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex pt-2 pr-2 xs12>
|
||||
{{xmsg}}
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
<v-btn
|
||||
color="error"
|
||||
flat
|
||||
@click="forgetAlert()"
|
||||
>
|
||||
Abaikan
|
||||
</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeAlert()"
|
||||
>
|
||||
OK
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['status', 'msg'],
|
||||
computed : {
|
||||
xmsg() {
|
||||
return this.msg
|
||||
},
|
||||
dialog: {
|
||||
get() {
|
||||
return this.status
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('close-dialog-alert')
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeAlert() {
|
||||
this.$emit('close-dialog-alert')
|
||||
},
|
||||
forgetAlert() {
|
||||
this.$emit('forget-dialog-alert')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
56
one-klinik-biotest/common/oneDialogAlertValidation.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="30%"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline grey lighten-2 pt-2 pb-2"
|
||||
primary-title
|
||||
>
|
||||
Peringatan !
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2" v-html="xmsg">
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeAlertValidation()"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['status', 'msg'],
|
||||
computed : {
|
||||
xmsg() {
|
||||
return this.msg
|
||||
},
|
||||
dialog: {
|
||||
get() {
|
||||
return this.status
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('close-dialog-alert-validation')
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeAlertValidation() {
|
||||
this.$emit('close-dialog-alert-validation')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
84
one-klinik-biotest/common/oneDialogAutoVerif.vue
Normal file
@@ -0,0 +1,84 @@
|
||||
<template>
|
||||
<v-dialog v-model="dialog" max-width="40%" >
|
||||
<v-card>
|
||||
<v-card-title class="headline info pt-2 pb-2 white--text" primary-title >
|
||||
{{ title }}
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
<v-layout row>
|
||||
<v-flex xs12 d-flex>
|
||||
<v-layout row>
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex xs12>
|
||||
<v-card>
|
||||
<div v-if="xIsLoading" style="min-height:200px;width:100%;text-align:center;padding-top:70px;">
|
||||
<v-progress-circular
|
||||
:size="50"
|
||||
color="primary"
|
||||
indeterminate
|
||||
></v-progress-circular>
|
||||
</div>
|
||||
<template v-else>
|
||||
<v-img style="min-height:100px" v-if="ximage != ''"
|
||||
:src="ximage"
|
||||
></v-img>
|
||||
<div v-if="ximage == ''" style="min-height:50px"> </div>
|
||||
<v-card-text>
|
||||
<div v-html="xmsg"> </div>
|
||||
</v-card-text>
|
||||
</template>
|
||||
</v-card>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeInfo()"
|
||||
>
|
||||
OK
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['status', 'msg',"image", "isLoading", "title"],
|
||||
computed : {
|
||||
xIsLoading() {
|
||||
return this.isLoading;
|
||||
},
|
||||
ximage() {
|
||||
return this.image
|
||||
},
|
||||
xmsg() {
|
||||
console.log('get xmsg',this.msg);
|
||||
return this.msg
|
||||
},
|
||||
dialog: {
|
||||
get() {
|
||||
console.log('get status',this.status);
|
||||
return this.status;
|
||||
},
|
||||
set(val) {
|
||||
console.log('set status',this.status);
|
||||
this.$emit('close-dialog-info');
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeInfo() {
|
||||
this.$emit('close-dialog-info')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
49
one-klinik-biotest/common/oneDialogConfirm.vue
Normal file
@@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog v-model="dialog" persistent max-width="290">
|
||||
<v-card>
|
||||
<v-card-title class="headline">Konfirmasi</v-card-title>
|
||||
<v-card-text>{{ init_text }}</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="green darken-1" flat @click="dialog = false">Batal</v-btn>
|
||||
<v-btn color="green darken-1" dark @click="confirm">{{ init_button_confirm }}</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['text', 'data', 'button_confirm'],
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_text : this.text ? this.text : 'Apakah anda akan menghapus data tersebut ?',
|
||||
init_data : this.data ? this.data : null,
|
||||
init_button_confirm : this.button_confirm ? this.button_confirm : 'Hapus'
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () {
|
||||
return this.$store.state.dialog_confirm
|
||||
},
|
||||
set (v) {
|
||||
this.$store.commit('update_dialog_confirm', v)
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
methods : {
|
||||
confirm : function() {
|
||||
this.dialog = false
|
||||
console.log('Confirm dialog : confirmed')
|
||||
this.$emit('confirm', {data: this.init_data});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
71
one-klinik-biotest/common/oneDialogErrorFajri.vue
Normal file
@@ -0,0 +1,71 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="30%"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline error pt-2 pb-2"
|
||||
primary-title
|
||||
dark
|
||||
>
|
||||
Peringatan !
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
<v-layout row>
|
||||
<v-flex xs12 d-flex>
|
||||
<v-layout row>
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex v-html="xmsg" pt-2 pr-2 xs12>
|
||||
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeError()"
|
||||
>
|
||||
OK
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['status', 'msg'],
|
||||
computed : {
|
||||
xmsg() {
|
||||
return this.msg
|
||||
},
|
||||
dialog: {
|
||||
get() {
|
||||
return this.status
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('close-dialog-error')
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeError() {
|
||||
this.$emit('close-dialog-error')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
70
one-klinik-biotest/common/oneDialogInfo.vue
Normal file
@@ -0,0 +1,70 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
max-width="30%"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline info pt-2 pb-2"
|
||||
primary-title
|
||||
>
|
||||
Informasi
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
<v-layout row>
|
||||
<v-flex xs12 d-flex>
|
||||
<v-layout row>
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex v-html="xmsg" pt-2 pr-2 xs12>
|
||||
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeInfo()"
|
||||
>
|
||||
OK
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['status', 'msg'],
|
||||
computed : {
|
||||
xmsg() {
|
||||
return this.msg
|
||||
},
|
||||
dialog: {
|
||||
get() {
|
||||
return this.status
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('close-dialog-info')
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeInfo() {
|
||||
this.$emit('close-dialog-info')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
63
one-klinik-biotest/common/oneDialogLoading.vue
Normal file
@@ -0,0 +1,63 @@
|
||||
<template>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
scrollable fullscreen
|
||||
persistent
|
||||
transition="dialog-transition"
|
||||
>
|
||||
<v-card
|
||||
color="transparent"
|
||||
dark
|
||||
>
|
||||
<v-card-text>
|
||||
|
||||
<v-layout row wrap class="vertical-center">
|
||||
<v-flex xs4> </v-flex>
|
||||
<v-flex xs4>
|
||||
<v-card color="primary">
|
||||
<v-card-text>
|
||||
Mohon tunggu sebentar ...
|
||||
<v-progress-linear
|
||||
indeterminate
|
||||
color="white"
|
||||
class="mb-0"
|
||||
></v-progress-linear>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
|
||||
</v-flex>
|
||||
<v-flex xs4> </v-flex>
|
||||
</v-layout>
|
||||
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
.transparent {
|
||||
background-color: rgba(255, 255, 255, 0.35) !important;
|
||||
border-color: transparent!important;
|
||||
}
|
||||
|
||||
.vertical-center {
|
||||
margin-top: 20%
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
data () {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
computed : {
|
||||
dialog : {
|
||||
get () { return this.$store.state.dialog_loading },
|
||||
set (v) { this.$store.commit('update_dialog_loading', v) }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
76
one-klinik-biotest/common/oneDialogPrint.vue
Normal file
@@ -0,0 +1,76 @@
|
||||
<template>
|
||||
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
width="1000px"
|
||||
>
|
||||
|
||||
|
||||
<v-card>
|
||||
<v-card-title
|
||||
class="headline grey lighten-2 pt-2 pb-2"
|
||||
primary-title
|
||||
>
|
||||
Laporan
|
||||
</v-card-title>
|
||||
<v-card-text class="pt-2 pb-2">
|
||||
|
||||
<v-layout>
|
||||
<v-flex xs12>
|
||||
<object data="https://anggrek.aplikasi.web.id/one-ui/test/vuex/common/under-cons.pdf"
|
||||
width="100%"></object>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<v-btn
|
||||
color="primary"
|
||||
@click="dialog = false"
|
||||
flat
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
components : {
|
||||
},
|
||||
methods : {
|
||||
tuing: function() {
|
||||
alert('x')
|
||||
},
|
||||
|
||||
processMee () {
|
||||
this.$store.dispatch('order/process')
|
||||
}
|
||||
},
|
||||
computed : {
|
||||
dialog: {
|
||||
get() {
|
||||
return this.$store.state.order.confirm_process_dialog_is_active;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.commit('order/update_confirm_process_dialog_is_active', val);
|
||||
}
|
||||
},
|
||||
|
||||
queue_number () {
|
||||
return this.$store.state.order.queue_number
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
71
one-klinik-biotest/common/oneDialogPrintX.vue
Normal file
@@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
:width="xwidth"
|
||||
persistent
|
||||
>
|
||||
<v-card >
|
||||
<v-card-title
|
||||
class="headline grey lighten-2"
|
||||
primary-title
|
||||
>
|
||||
{{xtitle}}
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text >
|
||||
<object style="overflow: hidden;" width="100%" :height="xheight" :data="xurl"></object>
|
||||
</v-card-text>
|
||||
|
||||
<v-divider></v-divider>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn
|
||||
color="primary"
|
||||
flat
|
||||
@click="closeDialog()"
|
||||
>
|
||||
Tutup
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['title','width','height','status','urlprint'],
|
||||
computed : {
|
||||
dialog: {
|
||||
get() {
|
||||
return this.status
|
||||
},
|
||||
set(val) {
|
||||
this.status = val
|
||||
}
|
||||
},
|
||||
xurl(){
|
||||
return this.urlprint
|
||||
},
|
||||
xwidth(){
|
||||
return this.width
|
||||
},
|
||||
xheight(){
|
||||
return this.height
|
||||
},
|
||||
xtitle(){
|
||||
return this.title
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeDialog() {
|
||||
this.$emit('close-dialog-print')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
121
one-klinik-biotest/common/oneFieldVerification.1.vue
Normal file
@@ -0,0 +1,121 @@
|
||||
<template>
|
||||
<v-layout>
|
||||
|
||||
<v-checkbox
|
||||
v-model="init_value"
|
||||
@change="changeLahBrooo"
|
||||
|
||||
hide-details class="shrink mr-2"
|
||||
></v-checkbox>
|
||||
|
||||
|
||||
<v-text-field
|
||||
:label="__label"
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
:disabled=x_disabled
|
||||
:error-messages="init_error ? x_error_messages : ''"
|
||||
:error_count="init_error ? x_error_count : 0 "
|
||||
:error=init_error
|
||||
:hide-details=!init_error
|
||||
v-model=init_note
|
||||
></v-text-field>
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['label', 'value', 'is_error', 'note'],
|
||||
mounted: function() {
|
||||
this.$nextTick( function() {
|
||||
this.init_note = this.note ? this.note : "";
|
||||
this.init_value = this.value;
|
||||
})
|
||||
},
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_value : false,
|
||||
init_note : ""
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
methods : {
|
||||
changeLahBrooo (n, o) {
|
||||
if (n) {
|
||||
this.init_note = "";
|
||||
// this.init_error = false;
|
||||
} /* else {
|
||||
if (this.init_note.length < 1)
|
||||
this.init_error = true;
|
||||
else
|
||||
this.init_error = false;
|
||||
}*/
|
||||
|
||||
var prm = {checked: n, note: this.init_note, error: this.init_error};
|
||||
this.$emit('x_change',prm);
|
||||
console.log('emit change');
|
||||
|
||||
// this.x_note = "aaaaaaaaaaaaaaaaaaa"
|
||||
// alert(this.x_note)
|
||||
}
|
||||
},
|
||||
computed : {
|
||||
__label () {
|
||||
if (this.label)
|
||||
return this.label;
|
||||
|
||||
return "";
|
||||
},
|
||||
|
||||
x_disabled () {
|
||||
// return false;
|
||||
if (this.init_value === "true" || this.init_value === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
|
||||
init_error () {
|
||||
|
||||
if ((this.init_value === "false" || this.init_value === false) && this.init_note.length < 1)
|
||||
return true;
|
||||
|
||||
else {
|
||||
// this.x_note = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
x_error_count () {
|
||||
// return 0;
|
||||
if (this.init_error)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
},
|
||||
|
||||
x_error_messages () {
|
||||
if (this.init_error)
|
||||
return ["Kolom ini harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
|
||||
x_note () {
|
||||
|
||||
if (this.note)
|
||||
return this.note;
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
125
one-klinik-biotest/common/oneFieldVerification.vue
Normal file
@@ -0,0 +1,125 @@
|
||||
<template>
|
||||
<v-layout>
|
||||
|
||||
<v-checkbox
|
||||
v-model="init_value"
|
||||
@change="checkbox_change"
|
||||
|
||||
hide-details class="shrink mr-2"
|
||||
:disabled="init_disabled"
|
||||
></v-checkbox>
|
||||
|
||||
|
||||
<v-text-field
|
||||
:label="__label"
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
:disabled="x_disabled || init_disabled"
|
||||
:error-messages="init_error && !init_disabled ? x_error_messages : ''"
|
||||
:error_count="init_error && !init_disabled ? x_error_count : 0 "
|
||||
:error="init_error && !init_disabled"
|
||||
:hide-details=!init_error
|
||||
v-model=init_note
|
||||
@input="note_change"
|
||||
></v-text-field>
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['label', 'value', 'is_error', 'note', 'disabled'],
|
||||
mounted: function() {
|
||||
this.$nextTick( function() {
|
||||
this.init_note = this.note ? this.note : "";
|
||||
this.init_value = this.value;
|
||||
})
|
||||
},
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_value : false,
|
||||
init_note : ""
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
methods : {
|
||||
checkbox_change (n, o) {
|
||||
if (n) {
|
||||
this.init_note = "";
|
||||
}
|
||||
|
||||
var prm = {checked: n, note: this.init_note, error: this.init_error};
|
||||
this.$emit('x_change', prm);
|
||||
this.$emit('change', prm);
|
||||
// console.log('"' + this.label + '" changed value to : ' + n);
|
||||
},
|
||||
|
||||
note_change (n) {
|
||||
let prm = { checked: this.init_value, note: n, error: this.init_error };
|
||||
this.$emit('change', prm);
|
||||
this.$emit('input', n);
|
||||
}
|
||||
},
|
||||
computed : {
|
||||
__label () {
|
||||
if (this.label)
|
||||
return this.label;
|
||||
|
||||
return "";
|
||||
},
|
||||
|
||||
x_disabled () {
|
||||
// return false;
|
||||
if (this.init_value === "true" || this.init_value === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
|
||||
init_error () {
|
||||
|
||||
if ((this.init_value === "false" || this.init_value === false) && this.init_note.length < 1)
|
||||
return true;
|
||||
|
||||
else {
|
||||
// this.x_note = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
x_error_count () {
|
||||
// return 0;
|
||||
if (this.init_error)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
},
|
||||
|
||||
x_error_messages () {
|
||||
if (this.init_error)
|
||||
return ["Kolom ini harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
|
||||
x_note () {
|
||||
|
||||
if (this.note)
|
||||
return this.note;
|
||||
|
||||
return "";
|
||||
|
||||
},
|
||||
|
||||
init_disabled () {
|
||||
return this.disabled ? this.disabled : false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-layout row v-if="xtype == 'reguler'">
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex pl-3 pt-2 xs1>
|
||||
<v-checkbox
|
||||
v-model="xcbx"
|
||||
hide-details
|
||||
></v-checkbox>
|
||||
</v-flex>
|
||||
<v-flex pt-2 xs8 >
|
||||
<v-text-field
|
||||
:label="xlabel"
|
||||
:disabled="xdisabled"
|
||||
:error="xerror"
|
||||
:error-messages="xerror ? xerrormessages : ''"
|
||||
:error_count="xerror ? xerrorcount : 0 "
|
||||
:hide-details=!xerror
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
v-model="xtxt"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
|
||||
<v-layout v-else-if="xtype == 'indigo'">
|
||||
<v-flex pb-1 xs12>
|
||||
<v-layout row>
|
||||
<v-flex pl-3 pt-2 xs1 class="indigo lighten-5">
|
||||
<v-checkbox
|
||||
v-model="xcbx"
|
||||
hide-details
|
||||
></v-checkbox>
|
||||
</v-flex>
|
||||
<v-flex pt-2 pb-2 xs8 class="indigo lighten-5">
|
||||
<v-text-field
|
||||
:label="xlabel"
|
||||
:disabled="xdisabled"
|
||||
:error="xerror"
|
||||
:error-messages="xerror ? xerrormessages : ''"
|
||||
:error_count="xerror ? xerrorcount : 0 "
|
||||
:hide-details=!xerror
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
v-model="xtxt"
|
||||
></v-text-field>
|
||||
</v-flex>
|
||||
<v-flex class="indigo lighten-5" pt-3 xs3>
|
||||
<v-layout align-center justify-center row>
|
||||
<v-icon large @click="deleteData()" color="red">delete</v-icon>
|
||||
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</v-flex>
|
||||
</v-layout>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['xdatalabel','xdatacbx','xdatatxt','xdatatype'],
|
||||
computed :{
|
||||
xtype : function(type) {
|
||||
return this.xdatatype
|
||||
},
|
||||
xcbx: {
|
||||
get() {
|
||||
return this.xdatacbx
|
||||
},
|
||||
set(val) {
|
||||
if(val == true && this.xdatatxt !== "")
|
||||
this.$emit('update-data-txt', "")
|
||||
this.$emit('update-data-cbx', val)
|
||||
}
|
||||
},
|
||||
xtxt: {
|
||||
get() {
|
||||
return this.xdatatxt
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-txt', val)
|
||||
}
|
||||
},
|
||||
xlabel(){
|
||||
if (this.xdatalabel)
|
||||
return this.xdatalabel;
|
||||
|
||||
return "";
|
||||
},
|
||||
xdisabled () {
|
||||
if (this.xcbx === "true" || this.xcbx === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
xerror () {
|
||||
if ((this.xcbx === "false" || this.xcbx === false) && this.xtxt.length < 1)
|
||||
return true;
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
xerrormessages () {
|
||||
if (this.xerror)
|
||||
return ["Alasan harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
xerrorcount () {
|
||||
if (this.xerror)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteData() {
|
||||
this.$emit('update-data-delete', true)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
72
one-klinik-biotest/common/oneFieldVerificationFalse.vue
Normal file
@@ -0,0 +1,72 @@
|
||||
<template>
|
||||
<v-layout>
|
||||
<v-checkbox
|
||||
v-model="init_value"
|
||||
@change="changeCbx"
|
||||
hide-details class="shrink mr-2"
|
||||
></v-checkbox>
|
||||
|
||||
<v-text-field
|
||||
:label="__label"
|
||||
outline
|
||||
v-model=init_note
|
||||
></v-text-field>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['label', 'value', 'note'],
|
||||
mounted: function() {
|
||||
this.$nextTick( function() {
|
||||
this.init_note = this.note ? this.note : "";
|
||||
this.init_value = this.value;
|
||||
})
|
||||
},
|
||||
|
||||
data () {
|
||||
return {
|
||||
init_value : false,
|
||||
init_note : ""
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
methods : {
|
||||
changeCbx (n, o) {
|
||||
/* if (n) {
|
||||
this.init_note = "";
|
||||
}
|
||||
*/
|
||||
var prm = {checked: n, note: this.init_note};
|
||||
this.$emit('x_change',prm);
|
||||
|
||||
}
|
||||
},
|
||||
computed : {
|
||||
__label () {
|
||||
if (this.label)
|
||||
return this.label;
|
||||
|
||||
return "";
|
||||
},
|
||||
__placeholder () {
|
||||
if (this.placeholder)
|
||||
return this.placeholder;
|
||||
|
||||
return "";
|
||||
},
|
||||
x_disabled () {
|
||||
if (this.init_value === "true" || this.init_value === true)
|
||||
return true;
|
||||
return false;
|
||||
},
|
||||
x_note () {
|
||||
if (this.note)
|
||||
return this.note;
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,84 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-layout>
|
||||
|
||||
<v-checkbox
|
||||
v-model="xcbx"
|
||||
hide-details class="shrink mr-2"
|
||||
></v-checkbox>
|
||||
|
||||
<v-text-field
|
||||
:label="xlabel"
|
||||
:disabled="xdisabled"
|
||||
:error="xerror"
|
||||
:error-messages="xerror ? xerrormessages : ''"
|
||||
:error_count="xerror ? xerrorcount : 0 "
|
||||
:hide-details=!xerror
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
v-model="xtxt"
|
||||
></v-text-field>
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['xdatalabel','xdatacbx','xdatatxt'],
|
||||
computed :{
|
||||
xcbx: {
|
||||
get() {
|
||||
return this.xdatacbx
|
||||
},
|
||||
set(val) {
|
||||
if(val == true && this.xdatatxt !== "")
|
||||
this.$emit('update-data-txt', "")
|
||||
this.$emit('update-data-cbx', val)
|
||||
}
|
||||
},
|
||||
xtxt: {
|
||||
get() {
|
||||
return this.xdatatxt
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-txt', val)
|
||||
}
|
||||
},
|
||||
xlabel(){
|
||||
if (this.xdatalabel)
|
||||
return this.xdatalabel;
|
||||
|
||||
return "";
|
||||
},
|
||||
xdisabled () {
|
||||
if (this.xcbx === "true" || this.xcbx === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
xerror () {
|
||||
if ((this.xcbx === "false" || this.xcbx === false) && this.xtxt.length < 1)
|
||||
return true;
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
xerrormessages () {
|
||||
if (this.xerror)
|
||||
return ["Alasan harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
xerrorcount () {
|
||||
if (this.xerror)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
82
one-klinik-biotest/common/oneFieldVerificationSupply.vue
Normal file
@@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-layout>
|
||||
|
||||
<v-checkbox
|
||||
v-model="xcbx"
|
||||
hide-details class="shrink mr-2"
|
||||
></v-checkbox>
|
||||
|
||||
<v-text-field
|
||||
:label="xlabel"
|
||||
:disabled="xdisabled"
|
||||
:error="xerror"
|
||||
:error-messages="xerror ? xerrormessages : ''"
|
||||
:error_count="xerror ? xerrorcount : 0 "
|
||||
:hide-details=!xerror
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
v-model="xtxt"
|
||||
></v-text-field>
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['xdatalabel','xdatacbx','xdatatxt'],
|
||||
computed :{
|
||||
xcbx: {
|
||||
get() {
|
||||
return this.xdatacbx
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-cbx', val)
|
||||
}
|
||||
},
|
||||
xtxt: {
|
||||
get() {
|
||||
return this.xdatatxt
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-txt', val)
|
||||
}
|
||||
},
|
||||
xlabel(){
|
||||
if (this.xdatalabel)
|
||||
return this.xdatalabel;
|
||||
|
||||
return "";
|
||||
},
|
||||
xdisabled () {
|
||||
if (this.xcbx === "true" || this.xcbx === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
xerror () {
|
||||
if ((this.xcbx === "false" || this.xcbx === false) && this.xtxt.length < 1)
|
||||
return true;
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
xerrormessages () {
|
||||
if (this.xerror)
|
||||
return ["Alasan harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
xerrorcount () {
|
||||
if (this.xerror)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
31
one-klinik-biotest/common/oneTestingComponent.vue
Normal file
@@ -0,0 +1,31 @@
|
||||
<template>
|
||||
<v-layout>
|
||||
|
||||
<input type="text" v-model="xdata" />
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['textdata'],
|
||||
methods: {
|
||||
changeDataX(item) {
|
||||
this.$emit('update-data-x', item)
|
||||
}
|
||||
},
|
||||
computed :{
|
||||
xdata: {
|
||||
get() {
|
||||
return this.textdata
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-x', val)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
80
one-klinik-biotest/common/oneTestingComponent2.vue
Normal file
@@ -0,0 +1,80 @@
|
||||
<template>
|
||||
<v-layout>
|
||||
|
||||
<v-checkbox
|
||||
v-model="xcbx"
|
||||
hide-details class="shrink mr-2"
|
||||
></v-checkbox>
|
||||
|
||||
<v-text-field
|
||||
:label="xlabel"
|
||||
:disabled="xdisabled"
|
||||
:error="xerror"
|
||||
:error-messages="xerror ? xerrormessages : ''"
|
||||
:error_count="xerror ? xerrorcount : 0 "
|
||||
:hide-details=!xerror
|
||||
placeholder="Alasan"
|
||||
outline
|
||||
v-model="xtxt"
|
||||
></v-text-field>
|
||||
|
||||
|
||||
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
props : ['xdatalabel','xdatacbx','xdatatxt'],
|
||||
computed :{
|
||||
xcbx: {
|
||||
get() {
|
||||
return this.xdatacbx
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-cbx', val)
|
||||
}
|
||||
},
|
||||
xtxt: {
|
||||
get() {
|
||||
return this.xdatatxt
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update-data-txt', val)
|
||||
}
|
||||
},
|
||||
xlabel(){
|
||||
if (this.xdatalabel)
|
||||
return this.xdatalabel;
|
||||
|
||||
return "";
|
||||
},
|
||||
xdisabled () {
|
||||
if (this.xcbx === "true" || this.xcbx === true)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
},
|
||||
xerror () {
|
||||
if ((this.xcbx === "false" || this.xcbx === false) && this.xtxt.length < 1)
|
||||
return true;
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
xerrormessages () {
|
||||
if (this.xerror)
|
||||
return ["Alasan harus diisi !"];
|
||||
|
||||
return [];
|
||||
},
|
||||
xerrorcount () {
|
||||
if (this.xerror)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
BIN
one-klinik-biotest/common/under-cons.pdf
Normal file
3
one-klinik-biotest/index.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
header('Location: /one-ui/test/vuex/one-login/');
|
||||
?>
|
||||
BIN
one-klinik-biotest/libs/fonts-icon-adhi/icomoon.eot
Normal file
27
one-klinik-biotest/libs/fonts-icon-adhi/icomoon.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="check" d="M954.857 636.571q0-22.857-16-38.857l-491.429-491.429q-16-16-38.857-16t-38.857 16l-284.571 284.571q-16 16-16 38.857t16 38.857l77.714 77.714q16 16 38.857 16t38.857-16l168-168.571 374.857 375.429q16 16 38.857 16t38.857-16l77.714-77.714q16-16 16-38.857z" />
|
||||
<glyph unicode="" glyph-name="note" d="M204 958.2c-9-2.8-18-8.2-40.6-24.6-30-21.8-36.8-28.4-43.6-42.6-4.8-10-5.8-14.6-5.8-27.2 0-8.4 1.4-19 3-23.6 2.6-7.6 18.2-32.2 20.4-32.2s147.2 107.2 148 109.4c1.4 3.4-16.4 25.4-25.2 31.2-15.2 10-40.4 14.4-56.2 9.6zM278.2 899c-8-5.8-15.6-11.6-16.6-12.6-1.4-1.4 13.6-23.2 42.6-62.6 27.8-37.8 44.6-62.6 44.8-65.6 0-6.8-13.4-17.6-18.8-15-3.2 1.4-85 110.4-92 122.6-1.2 2-5.4-0.2-17.8-9-9-6.6-16-13-15.8-14.4 0.2-1.2 20.4-29.8 45-63.2 24.4-33.4 44.4-62.2 44.4-63.8 0-4.2-15.2-15.8-19.4-15-2 0.4-23.2 27.8-47.6 61-24.2 33.2-45 61.4-46 62.4-1.6 1.6-7.4-1.6-19.6-10.4-9.6-6.8-17.4-12.8-17.2-13.4 0-0.6 22.6-32 50.4-69.8l50.6-69 72.8-26.6c40-14.6 73.8-26.6 75.4-26.6 1.4 0 3.8 2 5.4 4.6 2.4 3.8 2.2 15-0.8 80.6-2.4 51.8-4.2 77.6-6 80.8-2.2 4-94.2 130.6-97.6 134.4-0.8 0.8-8-3.4-16.2-9.4zM382 742c3.4-3.4 4-6.6 4-19.4 0-8.6 0.6-26.8 1.2-40.6l1.2-25-16.4-11.6-16.2-11.6-36.4 12.4c-36.6 12.4-46 17.6-45 24.2 0.6 3.6 96.6 75.4 101.2 75.6 1.2 0 4.2-1.8 6.4-4zM358 872.6c0-0.6 17-24 38-51.8l37.8-50.6 154.6-0.6c154.4-0.6 154.6-0.6 166.4-5.2 32.8-12.4 54.6-35.2 64.6-67.4 3.4-11.4 3.6-26 3.6-295v-283l-4.4-14c-2.4-7.6-7.2-18.4-10.6-23.6-14.6-23-42-41.2-68-45.4-8.2-1.2-91.6-2-225-2-233.4 0-227.8-0.2-251.6 12.4-26 13.8-46.8 42.8-51.4 71.6-1.2 8.2-2 108.8-2 277.6v264.6l-39.4 52c-29.4 39-39.8 51.4-41 49-1-1.6-1.4-165.2-1.2-363.6l0.6-360.6 5.4-14.6c14.4-39.6 44.4-68.8 82.6-81l14-4.4h289c277.2 0 289.4 0.2 300 3.8 44.2 15 76.6 48.6 87 90.4 2.6 10.6 3 56.6 2.6 378l-0.6 365.8-4.6 13c-11.4 31.2-34.8 58-63 72-29.4 14.4-19 14-263.8 14-120.8 0-219.6-0.6-219.6-1.4zM441.6 662.2c-5.8-5.2-6.6-7-6.6-16.2s0.8-11 6.6-16.2l6.4-5.8h144c107.2 0 145.2 0.6 149 2.4 14.4 6.6 14.4 32.6 0 39.2-3.8 1.8-41.8 2.4-149 2.4h-144l-6.4-5.8zM294.8 542.4c-5.8-4.6-8.8-10.8-8.8-18.4s3-13.8 8.8-18.4c4-3.2 18.6-3.6 222.8-3.6 237.6 0 226.8-0.6 232 11 5.2 11.4 1.6 25.2-7.8 30.2-4.8 2.4-38.8 2.8-224.2 2.8-204.2 0-218.8-0.4-222.8-3.6zM294.8 420.4c-5.8-4.6-8.8-10.8-8.8-18.4s3-13.8 8.8-18.4c4-3.2 18.6-3.6 222.8-3.6 237.6 0 226.8-0.6 232 11 5.2 11.4 1.6 25.2-7.8 30.2-4.8 2.4-38.8 2.8-224.2 2.8-204.2 0-218.8-0.4-222.8-3.6zM296.2 299.2c-13-7.2-13.2-32.2-0.4-39.2 2.6-1.4 76.6-2 223.6-2 205 0 219.8 0.4 223.8 3.6 6 4.8 8.8 11 8.8 19.4 0 5.8-1.6 9-6.8 14.2l-6.8 6.8h-218.6c-177.8-0.2-219.6-0.6-223.6-2.8zM296.2 177.2c-13-7.2-13.2-32.2-0.4-39.2 2.6-1.4 76.6-2 223.6-2 205 0 219.8 0.4 223.8 3.6 6 4.8 8.8 11 8.8 19.4 0 5.8-1.6 9-6.8 14.2l-6.8 6.8h-218.6c-177.8-0.2-219.6-0.6-223.6-2.8z" />
|
||||
<glyph unicode="" glyph-name="speaker" d="M630.432 630.432c-11.488 8.8-27.968 6.528-36.672-4.992-8.832-11.552-6.56-27.968 4.928-36.704 34.944-26.304 61.728-80.704 61.536-144.48 0.256-70.976-33.024-129.952-73.376-152.288-12.64-7.104-17.056-23.168-9.952-35.776 4.832-8.48 13.728-13.248 22.848-13.248 4.384 0 8.832 1.088 12.928 3.36 61.504 35.424 99.744 111.52 100 197.92-0.16 77.888-31.328 147.040-82.24 186.208zM822.496 872.864c-11.52 8.768-27.936 6.56-36.736-4.928-8.768-11.52-6.592-27.968 5.024-36.736h-0.064c96.096-72.864 164.128-215.264 163.968-379.936 0.192-183.104-84-338.4-196.96-401.792-12.672-7.104-17.088-23.136-9.952-35.712 4.832-8.576 13.76-13.248 22.912-13.248 4.352 0 8.8 1.024 12.896 3.296 134.016 76.544 223.264 248.896 223.52 447.456-0.192 178.784-72.544 335.904-184.608 421.6zM858.144 447.36c-0.16 122.88-49.664 231.264-127.872 291.168-11.488 8.832-27.968 6.528-36.704-4.992-8.768-11.488-6.528-27.968 4.992-36.736v0.064c62.208-47.040 107.36-140.768 107.232-249.504 0.192-120.992-55.808-222.848-128.544-263.52-12.64-7.136-17.056-23.104-9.92-35.744 4.832-8.512 13.76-13.312 22.88-13.312 4.384 0 8.832 1.088 12.896 3.36 93.856 53.76 154.848 172.768 155.040 309.216zM-58.24 622.656v-390.016h236.992l337.408-281.184v960l-341.44-289.184-232.96 0.384z" />
|
||||
<glyph unicode="" glyph-name="edit" horiz-adv-x="960" d="M102.318 960h529.356c52.068 0 104.136-43.39 104.136-104.136v-138.847l-43.39-112.814v60.746h-633.492v-60.746h633.492l-60.746-138.847h-572.746v-60.746h546.712l-60.746-138.847h-485.966v-69.424h477.288l-17.356-234.305 199.593 208.271 17.356 34.712v-164.881c0-52.068-43.39-104.136-104.136-104.136h-529.356c-52.068 0-104.136 43.39-104.136 104.136v824.407c0 52.068 43.39 104.136 104.136 104.136zM536.216 14.102l17.356 234.305 260.339 607.458c60.746 17.356 112.814-8.678 147.525-60.746l-260.339-607.458-164.881-164.881zM779.199 725.695c43.39 0 78.102-17.356 112.814-52.068l52.068 112.814c-34.712 34.712-69.424 52.068-112.814 52.068l-52.068-112.814zM588.284 274.441c0 0 8.678 8.678 8.678 8.678 8.678 8.678 17.356 0 17.356-8.678v0l156.203 373.153c-8.678 0-17.356 0-26.034 0l-156.203-364.475zM631.674 265.763c8.678 0 17.356 0 26.034-8.678l156.203 373.153c-8.678 8.678-17.356 8.678-26.034 8.678l-156.203-373.153zM675.064 248.407c8.678 0 8.678 0 8.678 0s8.678 0 8.678-8.678c0 0 0-8.678 0-17.356l156.203 364.475c-8.678 8.678-17.356 17.356-26.034 17.356l-156.203-364.475zM562.25 109.559l34.712-17.356 86.78 86.78c8.678 26.034 8.678 34.712 8.678 43.39 0 0 0 0-8.678 8.678 0 0-8.678 0-8.678 0-8.678 0-17.356-17.356-26.034-26.034 8.678 17.356 8.678 34.712 0 43.39 0 0-8.678 8.678-8.678 8.678s-8.678 0-8.678 0-17.356-8.678-26.034-26.034c8.678 17.356 8.678 34.712 0 43.39 0 0 0 0-8.678 0 0 0-8.678 0-8.678 0-8.678-8.678-17.356-17.356-26.034-34.712l-8.678-121.492zM622.996 196.339h-34.712v-69.424h8.678l17.356 17.356 17.356 52.068z" />
|
||||
<glyph unicode="" glyph-name="add" d="M512 940.679c-289.391 0-512-222.609-512-512s222.609-512 512-512c289.391 0 512 222.609 512 512s-222.609 512-512 512zM912.696 428.679v0c0-44.522-44.522-89.043-89.043-89.043h-244.87v-244.87c0-44.522-44.522-89.043-89.043-89.043v0c-44.522 0-89.043 44.522-89.043 89.043v244.87h-244.87c-44.522 0-89.043 44.522-89.043 89.043v0c0 44.522 44.522 89.043 89.043 89.043h244.87v244.87c0 44.522 44.522 89.043 89.043 89.043v0c44.522 0 89.043-44.522 89.043-89.043v-244.87h244.87c44.522 0 89.043-44.522 89.043-89.043z" />
|
||||
<glyph unicode="" glyph-name="del" horiz-adv-x="816" d="M743.367 717.261h-707.491v-670.255c0-93.091 74.473-148.945 148.945-148.945h428.218c93.091 0 148.945 74.473 148.945 148.945v670.255zM54.495 866.206h316.509v37.236c0 18.618 18.618 37.236 37.236 37.236v0c18.618 0 37.236-18.618 37.236-37.236v-37.236h316.509c37.236 0 55.855-18.618 55.855-55.855v0c0-37.236-18.618-55.855-55.855-55.855h-707.491c-37.236 0-55.855 18.618-55.855 55.855v0c0 37.236 18.618 55.855 55.855 55.855zM203.44 605.552v0c18.618 0 18.618-18.618 18.618-18.618v-539.927c0-18.618-18.618-18.618-18.618-18.618v0c-18.618 0-18.618 18.618-18.618 18.618v539.927c0 18.618 18.618 18.618 18.618 18.618zM333.767 605.552v0c18.618 0 18.618-18.618 18.618-18.618v-539.927c0-18.618-18.618-18.618-18.618-18.618v0c-18.618 0-18.618 18.618-18.618 18.618v539.927c0 18.618 18.618 18.618 18.618 18.618zM482.713 605.552v0c18.618 0 18.618-18.618 18.618-18.618v-539.927c0-18.618-18.618-18.618-18.618-18.618v0c-18.618 0-18.618 18.618-18.618 18.618v539.927c0 18.618 18.618 18.618 18.618 18.618zM613.040 605.552v0c18.618 0 18.618-18.618 18.618-18.618v-539.927c0-18.618-18.618-18.618-18.618-18.618v0c-18.618 0-18.618 18.618-18.618 18.618v539.927c0 18.618 18.618 18.618 18.618 18.618zM687.513 661.406v-614.4c0-37.236-37.236-74.473-74.473-74.473h-428.218c-37.236 0-74.473 37.236-74.473 74.473v614.4h577.164z" />
|
||||
<glyph unicode="" glyph-name="print" horiz-adv-x="1028" d="M70.117 814.323c-23.372 0-70.117-23.372-70.117-70.117v-327.213c0-23.372 23.372-70.117 70.117-70.117h116.862v93.489c0 46.745 46.745 93.489 93.489 93.489h444.075c46.745 0 93.489-46.745 93.489-93.489v-93.489h116.862c23.372 0 70.117 23.372 70.117 70.117v327.213c0 23.372-23.372 70.117-70.117 70.117h-864.777zM93.489 767.578c23.372 0 46.745-23.372 46.745-46.745s-23.372-46.745-46.745-46.745c-23.372 0-46.745 23.372-46.745 46.745s23.372 46.745 46.745 46.745zM233.723 767.578c23.372 0 46.745-23.372 46.745-46.745s-23.372-46.745-46.745-46.745c-23.372 0-46.745 23.372-46.745 46.745s23.372 46.745 46.745 46.745zM233.723 931.184h537.564c46.745 0 70.117-23.372 70.117-70.117h-677.798c0 46.745 23.372 70.117 70.117 70.117zM303.84 487.11c-46.745 0-70.117-23.372-70.117-70.117v-420.702c0-46.745 23.372-70.117 70.117-70.117h420.702c46.745 0 70.117 23.372 70.117 70.117v420.702c0 46.745-23.372 70.117-70.117 70.117h-420.702zM280.468 416.993h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372zM280.468 346.876h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372zM280.468 276.759h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372zM280.468 206.642h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372zM280.468 136.525h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372zM280.468 66.408h467.447c0 0 23.372 0 23.372-23.372v0c0 0 0-23.372-23.372-23.372h-467.447c0 0-23.372 0-23.372 23.372v0c0 0 0 23.372 23.372 23.372z" />
|
||||
<glyph unicode="" glyph-name="save" horiz-adv-x="1027" d="M54.028-84.586h918.475c27.014 0 54.028 27.014 54.028 54.028v837.433c0 0 0 27.014 0 27.014l-108.056 108.056c0 0-27.014 0-27.014 0h-54.028v-378.195c0-27.014-27.014-27.014-27.014-27.014h-648.335c-27.014 0-27.014 27.014-27.014 27.014v378.195h-54.028c-27.014 0-54.028-27.014-54.028-54.028v-918.475c0-27.014 27.014-54.028 54.028-54.028zM216.112 158.539h594.307c27.014 0 27.014 0 27.014-27.014v-27.014c0-27.014 0-27.014-27.014-27.014h-594.307c-27.014 0-27.014 0-27.014 27.014v27.014c0 27.014 0 27.014 27.014 27.014zM216.112 320.623h594.307c27.014 0 27.014 0 27.014-27.014v-27.014c0-27.014 0-27.014-27.014-27.014h-594.307c-27.014 0-27.014 0-27.014 27.014v27.014c0 27.014 0 27.014 27.014 27.014zM432.223 941.944h297.154v-324.168h-297.154v324.168zM189.098 941.944h162.084v-324.168h-162.084v324.168zM162.084 428.679h702.363c27.014 0 54.028-27.014 54.028-54.028v-351.181h-810.419v351.181c0 27.014 27.014 54.028 54.028 54.028z" />
|
||||
<glyph unicode="" glyph-name="unvalidasi" d="M307.2 906.546l238.933-238.933 238.933 238.933c68.267 68.267 170.667 68.267 238.933 0v0c68.267-68.267 68.267-170.667 0-238.933l-238.933-238.933 238.933-238.933c68.267-68.267 68.267-170.667 0-238.933v0c-68.267-68.267-170.667-68.267-238.933 0l-238.933 238.933-238.933-238.933c-68.267-68.267-170.667-68.267-238.933 0v0c-68.267 68.267-68.267 170.667 0 238.933l238.933 238.933-238.933 238.933c-68.267 68.267-68.267 170.667 0 238.933v0c68.267 68.267 170.667 68.267 238.933 0z" />
|
||||
<glyph unicode="" glyph-name="v1" horiz-adv-x="989" d="M1.919 341.736c115.925-77.283 193.208-173.887 212.528-289.811 154.566 270.491 328.453 463.698 521.66 521.66-57.962 77.283-19.321 231.849 19.321 386.415-231.849-154.566-425.057-367.094-560.302-656.906 0 154.566-77.283 270.491-173.887 367.094 38.642-115.925 38.642-231.849-19.321-309.132zM832.712-64v502.34l-115.925-19.321v57.962l270.491 38.642v-579.623h-154.566z" />
|
||||
<glyph unicode="" glyph-name="v2" horiz-adv-x="1007" d="M0 335.466c111.856-74.571 186.427-167.784 223.712-279.64 149.141 279.64 316.925 466.067 521.995 503.352-55.928 74.571-18.643 223.712 18.643 372.853-223.712-149.141-410.139-372.853-559.28-652.493-18.643 149.141-74.571 260.997-186.427 372.853 37.285-130.499 37.285-223.712-18.643-316.925zM577.923-74.673v74.571l74.571 93.213c0 0 18.643 18.643 37.285 37.285 93.213 111.856 149.141 186.427 149.141 223.712 0 18.643 0 37.285-18.643 55.928s-37.285 18.643-55.928 18.643-55.928-18.643-74.571-37.285c-18.643-18.643-18.643-55.928-18.643-74.571v0h-74.571c0 55.928 18.643 93.213 55.928 130.499s74.571 55.928 149.141 55.928c55.928 0 111.856-18.643 149.141-55.928s55.928-74.571 55.928-130.499c0-18.643 0-37.285 0-55.928s-18.643-37.285-18.643-55.928c-18.643-18.643-37.285-55.928-55.928-74.571-18.643-37.285-55.928-74.571-111.856-111.856h223.712v-74.571h-410.139z" />
|
||||
<glyph unicode="" glyph-name="skip" d="M510.080 457.728l456.128-500.448v956.608l-456.128-456.16zM462.336-42.72v956.608l-456.16-456.16 456.16-500.448z" />
|
||||
<glyph unicode="" glyph-name="process" d="M212.526 597.172l1.176-0.22c15.656 30.924 36.178 60.184 62.152 86.168 112.016 111.968 283.562 127.584 412.544 47.236l-108.34-108.3 422.642-89.18-46.536 225.602-42.338 197.39-100.688-100.772c-198.178 147.31-479.242 131.702-659.050-48.024-88.528-88.524-136.944-201.68-146.13-317.276l170.314-35.952c0.792 49.244 11.988 98.188 34.254 143.328zM845.764 441.072c-0.828-48.812-12.026-97.496-34.198-142.328l-1.184 0.306c-15.702-31.054-36.168-60.314-62.104-86.206-112.016-112.064-283.646-127.546-412.586-47.37l107.466 107.512-422.256 89.226 29.964-145.432 59.44-276.648 100.64 100.644c198.136-147.312 479.202-131.698 659.010 48.112 88.31 88.264 136.724 200.93 146.086 316.232l-170.278 35.952z" />
|
||||
<glyph unicode="" glyph-name="import" horiz-adv-x="1200" d="M496.064 956.018c-10.092-6.869-9.135 8.772-9.495-154.729l-0.321-145.057h-96.562c-119.726 0-113.205 2.161-81.89-27.171 58.405-54.71 279.575-259.1 282.357-260.936 5.495-3.622 15.959-2.977 21.796 1.344 4.129 3.055 237.736 219.124 283.131 261.876 28.308 26.658 34.337 24.887-84.597 24.887h-96.349l-0.321 145.057c-0.36 163.501 0.597 147.86-9.495 154.729l-4.048 2.758h-200.158l-4.048-2.758zM126.712 325.481c-112.521-77.989-112.872-78.295-122.421-106.951-6.5-19.503-6.68-17.799 13.426-127.946 9.873-54.095 18.765-100.655 19.755-103.464 7.796-22.099 30.826-42.034 55.431-47.985 7.433-1.798 52.295-1.942 510.349-1.636l502.201 0.339 7.962 2.839c24.917 8.883 44.975 29.052 50.776 51.055 1.065 4.042 9.699 50.068 19.185 102.279 19.314 106.318 19.191 105.094 12.715 124.519-9.618 28.869-10.506 29.643-122.967 107.497l-94.8 65.628h-65.355c-35.942 0-65.316-0.414-65.274-0.918s46.596-35.093 103.449-76.861l103.374-75.942-13.117-0.39c-7.211-0.216-54.593 0.207-105.289 0.942-102.348 1.479-96.46 1.843-104.409-6.419-1.663-1.726-14.99-32.32-31.921-73.265l-29.064-70.303h-341.053l-29.064 70.303c-16.859 40.771-30.262 71.543-31.909 73.256-7.211 7.49-0.447 7.043-116.116 7.712l-105.7 0.612 102.873 74.718c56.58 41.095 102.906 75.132 102.945 75.636s-29.307 0.918-65.217 0.918h-65.289l-95.475-66.174z" />
|
||||
<glyph unicode="" glyph-name="barcode" d="M0 832h128v-640h-128zM192 832h64v-640h-64zM320 832h64v-640h-64zM512 832h64v-640h-64zM768 832h64v-640h-64zM960 832h64v-640h-64zM640 832h32v-640h-32zM448 832h32v-640h-32zM864 832h32v-640h-32zM0 128h64v-64h-64zM192 128h64v-64h-64zM320 128h64v-64h-64zM640 128h64v-64h-64zM960 128h64v-64h-64zM768 128h128v-64h-128zM448 128h128v-64h-128z" />
|
||||
<glyph unicode="" glyph-name="searchh" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
|
||||
<glyph unicode="" glyph-name="search" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
BIN
one-klinik-biotest/libs/fonts-icon-adhi/icomoon.ttf
Normal file
BIN
one-klinik-biotest/libs/fonts-icon-adhi/icomoon.woff
Normal file
BIN
one-klinik-biotest/libs/fonts/icomoon.eot
Normal file
11
one-klinik-biotest/libs/fonts/icomoon.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="delta" d="M515.072 849.408l-386.048-765.952h795.648l-409.6 765.952zM490.496 734.72l290.816-576.512h-579.584l288.768 576.512z" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 602 B |
BIN
one-klinik-biotest/libs/fonts/icomoon.ttf
Normal file
BIN
one-klinik-biotest/libs/fonts/icomoon.woff
Normal file
BIN
one-klinik-biotest/libs/image/1.jpg
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
one-klinik-biotest/libs/image/background.png
Normal file
|
After Width: | Height: | Size: 511 KiB |
BIN
one-klinik-biotest/libs/image/body.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
one-klinik-biotest/libs/image/engko.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
one-klinik-biotest/libs/image/engsi.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
one-klinik-biotest/libs/image/flag-ina_48.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
one-klinik-biotest/libs/image/flag-uk_48.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
one-klinik-biotest/libs/image/flag-us_48.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
one-klinik-biotest/libs/image/flag2-ina-si.jpg
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
one-klinik-biotest/libs/image/hb.png
Normal file
|
After Width: | Height: | Size: 506 KiB |
BIN
one-klinik-biotest/libs/image/human-body.jpg
Normal file
|
After Width: | Height: | Size: 9.0 MiB |
BIN
one-klinik-biotest/libs/image/image01.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
one-klinik-biotest/libs/image/inako.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
one-klinik-biotest/libs/image/inasi.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
one-klinik-biotest/libs/image/logoone.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
one-klinik-biotest/libs/image/onetext.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
one-klinik-biotest/libs/image/sample/a.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
one-klinik-biotest/libs/image/sample/a_n.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
one-klinik-biotest/libs/image/sample/a_y.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
one-klinik-biotest/libs/image/sample/b.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
one-klinik-biotest/libs/image/sample/b_n.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
one-klinik-biotest/libs/image/sample/b_y.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
one-klinik-biotest/libs/image/sample/c.png
Normal file
|
After Width: | Height: | Size: 16 KiB |