jws-frontend/src/components/GlobalDialog.vue

106 lines
2.5 KiB
Vue
Raw Normal View History

2024-04-02 11:02:16 +07:00
<script setup lang="ts">
defineProps<{
title: string;
message: string;
color?: string;
icon?: string;
actionText?: string;
cancelText?: string;
persistent?: boolean;
2024-06-10 11:23:21 +00:00
enablei18n?: boolean;
2024-04-02 11:02:16 +07:00
action?: (...args: unknown[]) => void;
cancel?: (...args: unknown[]) => void;
}>();
</script>
<template>
<q-dialog ref="dialogRef" :persistent="persistent || false">
2024-04-03 15:01:01 +07:00
<q-card
class="q-pt-sm"
2024-06-10 11:23:21 +00:00
style="overflow: visible; min-width: 300px; max-width: 90%"
2024-04-03 15:01:01 +07:00
>
<div
class="box-icon q-pa-sm"
v-if="icon"
style="display: flex; align-items: center"
>
<q-avatar
size="60px"
font-size="25px"
style="background-color: var(--surface-1)"
:text-color="color || 'primary'"
2024-04-02 11:02:16 +07:00
>
2024-04-03 15:01:01 +07:00
<q-icon
style="padding: 12px; border: 2px solid; border-radius: 50%"
:name="icon"
2024-04-02 11:02:16 +07:00
/>
2024-04-03 15:01:01 +07:00
</q-avatar>
</div>
<div class="text-right q-px-sm">
<q-btn
2024-06-10 11:23:21 +00:00
id="`btn-close-dialog`"
class="btn-close-dialog"
2024-04-03 15:01:01 +07:00
flat
size="sm"
padding="none"
color="grey"
icon="mdi-close"
v-close-popup
/>
</div>
<q-card-section class="column items-center q-pa-sm">
<div class="column q-mt-md items-center">
2024-06-10 11:23:21 +00:00
<span class="text-bold block">
{{ enablei18n ? $t(title) : title }}
</span>
<span class="block q-px-sm" style="max-width: 400px">
{{ enablei18n ? $t(message) : message }}
</span>
2024-04-02 11:02:16 +07:00
</div>
</q-card-section>
2024-04-03 15:01:01 +07:00
2024-06-11 12:44:53 +07:00
<q-card-actions class="justify-center" v-if="action || cancel">
2024-04-02 11:02:16 +07:00
<q-btn
id="btn-cancel-dialog"
v-if="cancel"
unelevated
2024-06-10 11:23:21 +00:00
class="col btn-cancel-dialog"
color="grey-4"
text-color="grey-10"
2024-04-03 15:01:01 +07:00
:class="{ 'full-width': !action }"
2024-04-02 11:02:16 +07:00
@click="cancel"
:label="cancelText || $t('cancel')"
v-close-popup
/>
2024-04-03 15:01:01 +07:00
2024-04-02 11:02:16 +07:00
<q-btn
id="btn-ok-dialog"
2024-06-10 11:23:21 +00:00
unelevated
class="col btn-ok-dialog"
2024-04-03 15:01:01 +07:00
:class="{ 'full-width': !cancel }"
2024-04-02 11:02:16 +07:00
v-if="action"
@click="action"
2024-06-10 11:23:21 +00:00
:label="actionText || $t('defaultDialog')"
2024-04-02 11:02:16 +07:00
:color="color || 'primary'"
v-close-popup
/>
</q-card-actions>
</q-card>
</q-dialog>
</template>
2024-04-03 15:01:01 +07:00
<style lang="scss">
.box-icon {
position: absolute;
top: -40px;
2024-06-10 11:23:21 +00:00
left: 50%;
transform: translateX(-50%);
2024-04-03 15:01:01 +07:00
z-index: 999;
}
.full-width {
width: 100%;
}
</style>