diff --git a/src/components/TableSkeleton.vue b/src/components/TableSkeleton.vue
new file mode 100644
index 0000000..db5e5f3
--- /dev/null
+++ b/src/components/TableSkeleton.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts
index d024662..398abf0 100644
--- a/src/i18n/locales/en.ts
+++ b/src/i18n/locales/en.ts
@@ -157,6 +157,7 @@ export default {
close: 'Close',
search: 'Search',
noResults: 'No results',
+ loading: 'Loading…',
tenantId: 'Tenant ID',
code: 'Code',
name: 'Name',
diff --git a/src/i18n/locales/ko.ts b/src/i18n/locales/ko.ts
index e97ba1d..abb2c44 100644
--- a/src/i18n/locales/ko.ts
+++ b/src/i18n/locales/ko.ts
@@ -157,6 +157,7 @@ export default {
close: '닫기',
search: '검색',
noResults: '결과 없음',
+ loading: '불러오는 중…',
tenantId: '테넌트 ID',
code: '코드',
name: '이름',
diff --git a/src/views/AuditLogsView.vue b/src/views/AuditLogsView.vue
index 63819f0..9cb2695 100644
--- a/src/views/AuditLogsView.vue
+++ b/src/views/AuditLogsView.vue
@@ -3,6 +3,7 @@ import { computed, onMounted, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import DataTable, { type DataTablePageEvent, type DataTableRowClickEvent } from 'primevue/datatable'
import Column from 'primevue/column'
+import TableSkeleton from '@/components/TableSkeleton.vue'
import Button from 'primevue/button'
import Dialog from 'primevue/dialog'
import InputText from 'primevue/inputtext'
@@ -132,7 +133,9 @@ onMounted(reload)
+
+
{
-
+
+
diff --git a/src/views/PermissionsView.vue b/src/views/PermissionsView.vue
index 839c5fa..ce50537 100644
--- a/src/views/PermissionsView.vue
+++ b/src/views/PermissionsView.vue
@@ -4,6 +4,7 @@ import { useI18n } from 'vue-i18n'
import DataTable from 'primevue/datatable'
import Column from 'primevue/column'
import EmptyState from '@/components/EmptyState.vue'
+import TableSkeleton from '@/components/TableSkeleton.vue'
import Button from 'primevue/button'
import Dialog from 'primevue/dialog'
import InputText from 'primevue/inputtext'
@@ -147,7 +148,9 @@ onMounted(reload)
+
+
+
+
+