
+ width="300" class="mb-6 mx-auto banner-image" />
{{ AuthCuroselData[0].title }}
{{ AuthCuroselData[0].subtitle }}
@@ -169,4 +169,15 @@ definePageMeta({
.login-btn {
transition: all 0.3s ease;
}
+
+@keyframes floating {
+ 0% { transform: translateY(0px); }
+ 50% { transform: translateY(-5px); }
+ 100% { transform: translateY(0px); }
+}
+
+.banner-image {
+ animation: floating 3s ease-in-out infinite;
+}
+
diff --git a/pages/dashboard.vue b/pages/dashboard.vue
index 114e77b..6ed4ea4 100644
--- a/pages/dashboard.vue
+++ b/pages/dashboard.vue
@@ -434,6 +434,8 @@ definePageMeta({
+
+
@@ -482,10 +484,10 @@ definePageMeta({
@@ -505,10 +507,10 @@ definePageMeta({
@@ -528,10 +530,10 @@ definePageMeta({
@@ -551,10 +553,10 @@ definePageMeta({
diff --git a/plugins/vuetify.ts b/plugins/vuetify.ts
index 3134517..f36e747 100644
--- a/plugins/vuetify.ts
+++ b/plugins/vuetify.ts
@@ -23,6 +23,7 @@ import {
DARK_GREEN_THEME,
DARK_CYAN_THEME
} from "~/theme/DarkTheme";
+import { min } from "lodash-es";
export default defineNuxtPlugin((nuxtApp) => {
const vuetify = createVuetify({
components,
@@ -65,7 +66,8 @@ export default defineNuxtPlugin((nuxtApp) => {
color: "primary"
},
VListItem: {
- minHeight: "45px"
+ minHeight: "45px",
+ minWidth: "45px"
},
VTooltip: {
location: "top"
diff --git a/scss/_override.scss b/scss/_override.scss
index 8c74e5c..d1c9612 100644
--- a/scss/_override.scss
+++ b/scss/_override.scss
@@ -151,4 +151,17 @@ html {
.v-input__append {
display: none !important;
}
+}
+
+.white-skeleton .v-skeleton-loader__bone {
+ background-color: #f4f7fb !important;
+}
+
+.white-skeleton .v-skeleton-loader__bone::after {
+ background: linear-gradient(
+ 90deg,
+ transparent,
+ rgba(196, 194, 194, 0.6),
+ transparent
+ ) !important;
}
\ No newline at end of file
diff --git a/scss/layout/_sidebar.scss b/scss/layout/_sidebar.scss
index 16e4b30..8b76547 100644
--- a/scss/layout/_sidebar.scss
+++ b/scss/layout/_sidebar.scss
@@ -254,7 +254,6 @@
@media only screen and (min-width: 1170px) {
.mini-sidebar {
.logo {
- width: 40px;
overflow: hidden;
padding-left: 0;
}
diff --git a/store/pendaftaran.ts b/store/pendaftaran.ts
index 5da0212..e7823e8 100644
--- a/store/pendaftaran.ts
+++ b/store/pendaftaran.ts
@@ -156,52 +156,75 @@ export const usePendaftaranStore = defineStore('pendaftaran', {
},
// Validate form data
- validateForm(): { valid: boolean; errors: string[] } {
+ validateForm(): { valid: boolean; errors: string[]; firstErrorField?: string } {
const errors: string[] = [];
+ let firstErrorField: string | undefined = undefined;
// Validate formData
if (!this.formData.noRekamMedis) {
errors.push('No Rekam Medis');
+ if (!firstErrorField) firstErrorField = 'noRekamMedis';
+ }
+
+ // Validate diagnosis items - must have at least 1
+ if (this.diagnosisItems.length === 0) {
+ errors.push('Diagnosis (minimal 1 diagnosis harus diisi)');
+ if (!firstErrorField) firstErrorField = 'diagnosis';
+ }
+
+ // Validate tindakan items - must have at least 1
+ if (this.tindakanItems.length === 0) {
+ errors.push('Tindakan (minimal 1 tindakan harus diisi)');
+ if (!firstErrorField) firstErrorField = 'tindakan';
}
// Validate rencanaOperasiData
if (!this.rencanaOperasiData.spesialis) {
errors.push('Spesialis');
+ if (!firstErrorField) firstErrorField = 'spesialis';
}
if (!this.rencanaOperasiData.subSpesialis) {
errors.push('Sub Spesialis');
+ if (!firstErrorField) firstErrorField = 'subSpesialis';
}
if (!this.rencanaOperasiData.tanggalDaftar) {
errors.push('Tanggal Daftar');
+ if (!firstErrorField) firstErrorField = 'tanggalDaftar';
}
if (!this.rencanaOperasiData.kategoriOperasi) {
errors.push('Kategori Operasi');
+ if (!firstErrorField) firstErrorField = 'kategoriOperasi';
}
// Validate status operasi
if (!this.statusPasienData.statusOperasi) {
errors.push('Status Operasi');
+ if (!firstErrorField) firstErrorField = 'statusOperasi';
}
// Conditional validation based on status operasi
if (this.statusPasienData.statusOperasi === STATUS.SELESAI) {
if (!this.statusPasienData.tanggalSelesai) {
errors.push('Tanggal Selesai Operasi (wajib diisi untuk status Selesai)');
+ if (!firstErrorField) firstErrorField = 'tanggalSelesai';
} else if (this.rencanaOperasiData.tanggalDaftar &&
this.statusPasienData.tanggalSelesai < this.rencanaOperasiData.tanggalDaftar) {
errors.push('Tanggal Selesai Operasi tidak boleh kurang dari Tanggal Daftar');
+ if (!firstErrorField) firstErrorField = 'tanggalSelesai';
}
}
if (this.statusPasienData.statusOperasi === STATUS.TUNDA || this.statusPasienData.statusOperasi === STATUS.BATAL) {
if (!this.statusPasienData.keteranganStatus) {
errors.push('Keterangan Status Pasien (wajib diisi untuk status Tunda/Batal)');
+ if (!firstErrorField) firstErrorField = 'keteranganStatus';
}
}
return {
valid: errors.length === 0,
- errors
+ errors,
+ firstErrorField
};
},