jws-frontend/src/components/ProfileUpload.vue

164 lines
3.8 KiB
Vue
Raw Normal View History

2024-04-22 16:20:19 +07:00
<script setup lang="ts">
const urlProfile = defineModel('urlProfile', {
default: '',
});
const profileSubmit = defineModel('profileSubmit');
const statusToggle = defineModel('statusToggle');
2024-06-20 13:59:07 +07:00
withDefaults(
defineProps<{
isProduct?: boolean;
isService?: boolean;
labelStatusToggle?: string;
hideToggle?: boolean;
2024-07-01 11:04:24 +00:00
readonly?: boolean;
2024-06-20 13:59:07 +07:00
}>(),
{
hideToggle: true,
},
);
2024-06-14 14:45:17 +07:00
2024-04-22 16:20:19 +07:00
defineEmits<{
(e: 'inputFile'): void;
}>();
</script>
<template>
<div class="text-center">
<div
class="upload-img-preview"
:style="$q.screen.lt.md ? 'height: 200px' : 'height: 12vh'"
>
2024-04-22 16:20:19 +07:00
<q-img
v-if="urlProfile"
:src="urlProfile"
style="object-fit: cover; width: 100%; height: 100%"
/>
2024-06-14 14:45:17 +07:00
<q-img
v-else-if="isProduct"
src="shop-add-image.png"
style="object-fit: cover; width: 100%; height: 100%"
/>
2024-06-18 02:28:29 +00:00
<q-img
v-else-if="isService"
src="service-add-image.png"
style="object-fit: cover; width: 100%; height: 100%"
/>
2024-04-22 16:20:19 +07:00
<q-icon
v-else
name="mdi-account full-height"
size="4rem"
2024-04-22 16:20:19 +07:00
style="color: var(--border-color)"
/>
</div>
<div
2024-07-01 11:04:24 +00:00
v-if="urlProfile && !profileSubmit && !readonly"
2024-04-22 16:20:19 +07:00
class="col-12 row q-mt-md q-col-gutter-x-md"
>
<div class="col-6">
<q-btn
id="btn-profile-cancel"
dense
unelevated
outlined
padding="8px"
class="cancel-img-btn full-width"
:label="$t('cancel')"
@click="urlProfile = ''"
/>
</div>
<div class="col-6">
<q-btn
id="btn-profile-save"
dense
unelevated
outlined
padding="8px"
class="submit-img-btn full-width"
:label="$t('save')"
@click="profileSubmit = true"
/>
</div>
</div>
<q-btn
id="btn-profile-edit"
2024-07-01 11:04:24 +00:00
v-else-if="urlProfile && profileSubmit && !readonly"
2024-04-22 16:20:19 +07:00
dense
unelevated
outlined
padding="8px"
icon="mdi-pencil-outline"
class="edit-img-btn q-mt-md full-width"
:label="$t('formDialogBtnEditProfile')"
@click.prevent="$emit('inputFile'), (profileSubmit = false)"
/>
<q-btn
id="btn-profile-upload"
2024-07-01 11:04:24 +00:00
v-if="!urlProfile && !readonly"
2024-04-22 16:20:19 +07:00
dense
unelevated
outlined
padding="8px"
class="upload-img-btn q-mt-md full-width"
:label="$t('formDialogBtnUploadProfile')"
:class="{ dark: $q.dark.isActive }"
@click="$emit('inputFile')"
/>
<q-separator class="col-12 q-my-lg" />
<div class="text-left q-pb-md" v-if="hideToggle">
2024-04-22 16:20:19 +07:00
<q-toggle
id="toggle-status"
2024-04-22 16:20:19 +07:00
dense
size="md"
v-model="statusToggle"
padding="none"
class="q-pr-md"
/>
2024-06-20 13:59:07 +07:00
<span>
{{ statusToggle ? $t('switchOnLabel') : $t('switchOffLabel') }}
</span>
2024-04-22 16:20:19 +07:00
</div>
</div>
</template>
<style scoped>
.upload-img-preview {
border: 1px solid var(--border-color);
border-radius: var(--radius-2);
background-color: var(--surface-1);
}
2024-04-23 13:40:38 +07:00
.upload-img-btn {
color: hsl(var(--info-bg));
border: 1px solid hsl(var(--info-bg));
background-color: hsla(var(--info-bg) / 0.1);
border-radius: var(--radius-2);
&.dark {
background-color: transparent;
}
}
.edit-img-btn {
color: hsl(var(--info-bg));
border: 1px solid hsl(var(--info-bg));
background-color: transparent;
border-radius: var(--radius-2);
}
.cancel-img-btn {
color: hsl(var(--negative-bg));
border: 1px solid hsl(var(--negative-bg));
background-color: transparent;
border-radius: var(--radius-2);
}
.submit-img-btn {
color: var(--surface-1);
border: 1px solid hsl(var(--positive-bg));
background-color: hsl(var(--positive-bg));
border-radius: var(--radius-2);
}
2024-04-22 16:20:19 +07:00
</style>