| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <template>
- <q-dialog v-model="dialogModel" persistent>
- <q-card style="max-width: 100%; border-radius: 8px">
- <DefaultDialogHeader title="Editar meus dados" @close="closeDialog" />
- <q-form
- ref="editFormRef"
- class="column q-gutter-sm q-pa-md bg-grey-2"
- @submit="submitForm"
- >
- <div
- class="bg-white radius-8 q-pa-sm q-mb-xl"
- style="border: 1px solid #ccc"
- >
- <div class="column q-gutter-sm" style="border-radius: 8px">
- <div class="text-subtitle2 text-weight-bold text-primary">
- Dados pessoais
- </div>
- <q-separator />
- <div class="grid-2">
- <q-input
- v-model="localForm.name"
- bg-color="white"
- label="Nome"
- outlined
- :error="Boolean(serverErrors.name)"
- :error-message="serverErrors.name"
- :loading="submitting"
- :rules="[inputRules.required]"
- />
- <q-input
- v-model="localForm.document"
- bg-color="white"
- label="Número de documento"
- outlined
- :error="Boolean(serverErrors.document_number)"
- :error-message="serverErrors.document_number"
- :loading="submitting"
- />
- </div>
- </div>
- <div class="column q-gutter-sm" style="border-radius: 8px">
- <div class="text-subtitle2 text-weight-bold text-primary">
- Acesso
- </div>
- <q-separator />
- <div class="grid-3">
- <q-input
- v-model="localForm.email"
- bg-color="white"
- label="Email"
- outlined
- :error="Boolean(serverErrors.email)"
- :error-message="serverErrors.email"
- :loading="submitting"
- :rules="[inputRules.required, inputRules.email]"
- />
- <DefaultPasswordInput
- v-model="localForm.password"
- bg-color="white"
- label="Senha"
- outlined
- :error="Boolean(serverErrors.password)"
- :error-message="serverErrors.password"
- :loading="submitting"
- :rules="passwordRules"
- />
- <DefaultPasswordInput
- v-model="localForm.confirmPassword"
- bg-color="white"
- label="Confirmar Senha"
- outlined
- :loading="submitting"
- :rules="confirmPasswordRules"
- />
- </div>
- </div>
- </div>
- <div class="row justify-end q-gutter-sm">
- <q-btn
- class="bg-white"
- color="primary"
- label="Cancelar"
- outline
- @click="closeDialog"
- />
- <q-btn
- color="primary"
- label="Salvar"
- type="submit"
- :loading="submitting"
- />
- </div>
- </q-form>
- </q-card>
- </q-dialog>
- </template>
- <script setup>
- import { computed, reactive, ref, watch } from "vue";
- import DefaultDialogHeader from "src/components/defaults/DefaultDialogHeader.vue";
- import DefaultPasswordInput from "src/components/defaults/DefaultPasswordInput.vue";
- const dialogModel = defineModel({ default: false });
- const emit = defineEmits(["submit", "close"]);
- const { form, inputRules, serverErrors, submitting } = defineProps({
- // eslint-disable-next-line vue/require-default-prop
- form: Object,
- // eslint-disable-next-line vue/require-default-prop
- inputRules: Object,
- serverErrors: { type: Object, default: () => ({}) },
- submitting: Boolean,
- });
- const editFormRef = ref(null);
- const localForm = reactive({
- name: "",
- document: "",
- email: "",
- password: "",
- confirmPassword: "",
- });
- const passwordRules = computed(() =>
- localForm.password ? [inputRules.min(6)] : [],
- );
- const confirmPasswordRules = computed(() =>
- localForm.password
- ? [inputRules.required, inputRules.samePassword(localForm.password)]
- : [],
- );
- const syncLocalForm = () => {
- Object.assign(localForm, {
- name: form.name ?? "",
- document: form.document ?? "",
- email: form.email ?? "",
- password: form.password ?? "",
- confirmPassword: form.confirmPassword ?? "",
- });
- };
- watch(
- () => [dialogModel.value, form],
- () => {
- if (dialogModel.value) syncLocalForm();
- },
- { deep: true, immediate: true },
- );
- const closeDialog = () => {
- dialogModel.value = false;
- emit("close");
- };
- const submitForm = async () => {
- const isValid = await editFormRef.value?.validate();
- if (!isValid) return;
- emit("submit", { ...localForm });
- };
- </script>
- <style scoped>
- .grid-2 {
- display: grid;
- grid-template-columns: 1fr 240px;
- gap: 12px;
- }
- .grid-3 {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12px;
- }
- @media (max-width: 900px) {
- .grid-2,
- .grid-3 {
- grid-template-columns: 1fr;
- }
- }
- </style>
|