Initial import

This commit is contained in:
sas.fajri
2026-05-25 20:01:37 +07:00
commit 710d7c1b97
10371 changed files with 2381698 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
// API :
// search bank
// paramater : query , page , rowPerPage
const URL =
"http://lebaran.aplikasi.web.id/smartlab_api/vuex/t02/search_bank";
export async function searchBank(query, page, rowPerPage = 15) {
try {
var resp = await axios.post(URL, {
query: query,
page: page,
rowPerPage: rowPerPage
});
if (resp.status != 200) {
return {
status: "ERR",
query: query,
message: resp.statusText
};
}
let data = resp.data;
data.query = query;
return data;
} catch (e) {
return {
status: "ERR",
query: query,
message: e.message
};
}
}

View File

@@ -0,0 +1,107 @@
<template>
<v-layout>
<v-checkbox
v-model="x_value"
@change="changeLahBrooo"
hide-details class="shrink mr-2"
></v-checkbox>
<v-text-field
:label="__label"
placeholder="Alasan"
outline
:disabled="x_disabled"
:error-messages="is_error ? x_error_messages : ''"
:error_count="is_error ? x_error_count : 0 "
:error=is_error
:hide-details=!x_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;
})
},
data () {
return {
x_value : false,
init_note :""
}
},
methods : {
changeLahBrooo (n, o) {
if (n) this.init_note = "";
var prm = {checked: n, note: this.init_note};
this.$emit('x_change',prm);
console.log("emit x_change");
// console.log("note = " + this.x_ne)
}
},
computed : {
__label () {
if (this.label)
return this.label;
return "";
},
x_disabled () {
// return false;
return this.x_value;
},
x_error () {
if (!this.x_value && this.x_note.length < 1)
return true;
else {
// this.x_note = "";
return false;
}
},
x_error_count () {
// return 0;
if (this.x_error)
return 1;
return 0;
},
x_error_messages () {
if (this.x_error)
return ["Harus diisi"];
return [];
},
x_note: {
set: function(val) {
this.init_note = val;
},
get: function(){
if (this.init_note)
return this.init_note;
return "";
}
}
}
}
</script>

View File

@@ -0,0 +1,175 @@
<template>
<v-card class="pa-1">
<v-layout row wrap>
<v-flex xs12>
<v-card flat>
<v-layout>
<v-flex xs6 class="pa-2">
<v-text-field
label="Company"
placeholder=""
:value="c_company"
readonly
></v-text-field>
</v-flex>
<v-flex xs6 class="pa-2">
<v-text-field
label="MOU"
placeholder=""
:value="c_mou"
readonly
></v-text-field>
</v-flex>
</v-layout>
</v-card>
</v-flex>
<v-flex xs12>
<v-layout row wrap>
<v-flex xs6 pa-2>
<one-field-verification
:is_error="true"
label="Company sudah sesuai"
@x_change="companyChange"
value=false
:note="n_company_false"
></one-field-verification>
<!-- <v-layout>
<v-flex xs5>
<v-checkbox
v-model="$data._company"
:label="`Company Sudah Sesuai`"
></v-checkbox>
</v-flex>
<v-flex xs7 pt-2>
<v-text-field
label=""
placeholder=""
outline
:disabled="__company"
></v-text-field>
</v-flex>
</v-layout> -->
</v-flex>
<v-flex xs6 pa-2>
<one-field-verification
label="MOU sudah sesuai"
value=false
></one-field-verification>
</v-flex>
</v-layout>
</v-flex>
<v-flex xs12 class="pt-2">
<one-fo-verification-mou-px-curr-order></one-fo-verification-mou-px-curr-order>
</v-flex>
<v-flex xs12 class="pt-4">
<v-layout align-end justify-end>
<v-flex xs6>
<h3>Tambahan Pemeriksaan</h3>
</v-flex>
<v-flex xs6 class="text-xs-right">
<!-- <v-layout fill-height align-end justify-end> -->
<v-btn
color="green"
dark
class="mt-0 mb-0"
>
Tambah Pemeriksaan
</v-btn>
<!-- </v-layout> -->
</v-flex>
</v-layout>
</v-flex>
<v-flex xs12 class="pt-2">
<one-fo-verification-mou-px-add-order></one-fo-verification-mou-px-add-order>
</v-flex>
<v-flex xs12 class="pt-2">
<v-textarea
label="Catatan Verifikasi Pemeriksaan"
rows="3"
value=""
outline
></v-textarea>
</v-flex>
</v-layout>
</v-card>
</template>
<style scoped>
/* .v-text-field__details {
display: none;
} */
/* .v-text-field--box input, .v-text-field--full-width input, .v-text-field--outline input {
margin-top: 0px;
} */
.v-text-field--box>.v-input__control>.v-input__slot, .v-text-field--full-width>.v-input__control>.v-input__slot, .v-text-field--outline>.v-input__control>.v-input__slot {
min-height: 40px;
}
/* .v-input__slot {
margin-bottom: 0px !important;
} */
/* .v-messages {
display: none;
} */
</style>
<script>
module.exports = {
components : {
'one-fo-verification-mou-px-curr-order' : httpVueLoader('./oneFoVerificationMouPxCurrOrder.vue'),
'one-fo-verification-mou-px-add-order' : httpVueLoader('./oneFoVerificationMouPxAddOrder.vue'),
'one-field-verification' : httpVueLoader('./oneFieldVerification.vue')
// 'patient-right-side' : httpVueLoader('./patientRightSide.vue')
},
data () {
return {
checkbox: true,
c_company: 'PT. Enseval Indonesia',
c_mou: 'Enseval 01',
_company: true,
_mou: true,
xx: true,
n_company_false: "bro nih yeee"
}
},
methods: {
companyChange : function(val) {
console.log(val)
}
},
computed : {
__company () {
return this.$data._company;
},
__mou () {
return this.$data._mou;
}
}
}
</script>

View File

@@ -0,0 +1,88 @@
<template>
<v-card flat>
<v-data-table :headers="headers" :items="orders"
:loading="isLoading"
hide-actions class="elevation-1">
<template slot="items" slot-scope="props">
<td class="text-xs-left pa-2" >
<v-btn color="red" dark class="pt-0 pb-0 pl-1 pr-1 mt-0 mb-0 mr-2 ml-0" small>
<v-icon dark>delete</v-icon>
</v-btn>
{{ props.item.px }}</td>
<td class="text-xs-right pa-2" >{{ props.item.bruto }}</td>
<td class="text-xs-right pa-2">{{ props.item.disc }}</td>
<td class="text-xs-right pa-2">{{ props.item.total }}</td>
</template>
</v-data-table>
</v-card>
</template>
<style scoped>
table.v-table tbody td,table.v-table tbody th {
height: 40px;
}
table.v-table thead tr {
height: 40px;
}
.v-btn {
min-width: auto;
}
</style>
<script>
module.exports = {
data () {
return {
headers: [
{
text: "PEMERIKSAAN",
align: "left",
sortable: false,
value: "px",
class: "pa-2 blue lighten-3 white--text"
},
{
text: "BRUTO",
align: "left",
sortable: false,
value: "bruto",
width: "25%",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
},
{
text: "DISKON",
align: "left",
sortable: false,
value: "disc",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
},
{
text: "TOTAL",
align: "left",
sortable: false,
value: "total",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
}
],
query : "",
isLoading: true,
orders: [
// {"px":"Hemoglobin", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
// {"px":"Trombosit", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
// {"px":"Eritrosit", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
{"px":"SGOT", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
{"px":"SGPT", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
{"px":"Urine Lengkap", "bruto":"30,000", "disc":"10,000", "total":"20,000"}
]
}
}
}
</script>

View File

@@ -0,0 +1,83 @@
<template>
<v-card flat>
<v-data-table :headers="headers" :items="orders"
:loading="isLoading"
hide-actions class="elevation-1">
<template slot="items" slot-scope="props">
<td class="text-xs-left pa-2" >
<v-checkbox :label="`${props.item.px}`"></v-checkbox>
</td>
<td class="text-xs-right pa-2" >{{ props.item.bruto }}</td>
<td class="text-xs-right pa-2">{{ props.item.disc }}</td>
<td class="text-xs-right pa-2">{{ props.item.total }}</td>
</template>
</v-data-table>
</v-card>
</template>
<style scoped>
table.v-table tbody td,table.v-table tbody th {
height: 40px;
}
table.v-table thead tr {
height: 40px;
}
</style>
<script>
module.exports = {
data () {
return {
headers: [
{
text: "PEMERIKSAAN",
align: "left",
sortable: false,
value: "px",
class: "pa-2 blue lighten-3 white--text"
},
{
text: "BRUTO",
align: "left",
sortable: false,
value: "bruto",
width: "25%",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
},
{
text: "DISKON",
align: "left",
sortable: false,
value: "disc",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
},
{
text: "TOTAL",
align: "left",
sortable: false,
value: "total",
class: "text-xs-right pa-2 blue lighten-3 white--text",
width: "15%"
}
],
query : "",
isLoading: true,
orders: [
{"px":"Hemoglobin", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
{"px":"Trombosit", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
{"px":"Eritrosit", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
// {"px":"SGOT", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
// {"px":"SGPT", "bruto":"30,000", "disc":"10,000", "total":"20,000"},
// {"px":"Urine Lengkap", "bruto":"30,000", "disc":"10,000", "total":"20,000"}
]
}
}
}
</script>

View File

@@ -0,0 +1,68 @@
<!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</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" >
<one-navbar></one-navbar>
<v-content class="blue lighten-5" >
<v-container fluid fill-height pl-1 pr-1 pt-2 pb-2>
<v-layout>
<v-flex xs6 pr-1>
&nbsp;
</v-flex>
<v-flex xs6 pl-1>
<one-fo-verification-mou-px> </one-fo-verification-mou-px>
</v-flex>
</v-layout>
</v-container>
</v-content>
<one-footer> </one-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>
<script src="../../../libs/vendor/httpVueLoader.js"></script>
<!-- App Script -->
<?php
$ts = "?ts=" . Date("ymdhis");
?>
<script type="module">
// import { store } from './store.js<?php echo $ts ?>';
//for testing
// window.store = store;
new Vue({
// store,
el: '#app',
components: {
'one-navbar': httpVueLoader('../../../apps/components/oneNavbarComponent.vue'),
'one-footer': httpVueLoader('../../../apps/components/oneFooter.vue'),
'one-fo-verification-mou-px': httpVueLoader('./components/oneFoVerificationMouPx.vue'),
}
})
</script>
<style>
[v-cloak] {
display: none
}
</style>
</body>
</html>

View File

@@ -0,0 +1,71 @@
// State
// data ...
// Mutations
//
//
// Actions
import * as api from "./api.js";
export const store = new Vuex.Store({
state: {
rows: [],
midPages: [],
isLoading: false,
isError: false,
errorMessage: "",
query: "",
page: 0,
totalPage: 0,
totalRecord: 0
},
mutations: {
updateBank(state, data) {
// console.log(data);
if (data.status == "ERR") {
state.isError = true;
if (data.db_error) {
state.errorMessage = data.db_error.message;
} else {
state.errorMessage = data.message;
}
state.query = data.query;
state.page = 0;
state.totalPage = 0;
state.totalRecord = 0;
state.rows = [];
state.midPages = [];
} else {
state.isError = false;
state.errorMessage = "";
state.query = data.query;
state.page = data.page;
state.totalPage = data.totalPage;
state.totalRecord = data.totalRecord;
state.rows = data.rows;
state.midPages = data.midPages;
}
},
updateLoading(state, flag) {
state.isLoading = flag;
},
resetError(state) {
state.isError = false;
state.errorMessage = "";
}
},
actions: {
async searchBank(context, data) {
context.commit("updateLoading", true);
let resp = await api.searchBank(
data.query,
data.page,
data.rowPerPage
);
context.commit("updateLoading", false);
context.commit("updateBank", resp);
setTimeout(function() {
context.commit("resetError");
}, 5000);
}
}
});