|
|
@@ -112,10 +112,18 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { createUserAndClient, sendCode, validateCode } from "src/api/user";
|
|
|
+import {
|
|
|
+ createUserAndClient,
|
|
|
+ sendCode,
|
|
|
+ updateMe,
|
|
|
+ validateCode,
|
|
|
+} from "src/api/user";
|
|
|
import { useAuth } from "src/composables/useAuth";
|
|
|
import { useRegistrationFlowStore } from "src/stores/registrationFlow";
|
|
|
+import { userStore } from "src/stores/user";
|
|
|
+import { useQuasar } from "quasar";
|
|
|
import { onMounted, ref } from "vue";
|
|
|
+import { useI18n } from "vue-i18n";
|
|
|
import { useRouter } from "vue-router";
|
|
|
|
|
|
import BackgroundLogin from "src/assets/background-login.svg";
|
|
|
@@ -131,6 +139,8 @@ import LoginStep4Panel from "src/components/login/LoginStep4Panel.vue";
|
|
|
|
|
|
const { setAuthDataFromPayload } = useAuth();
|
|
|
const flowStore = useRegistrationFlowStore();
|
|
|
+const $q = useQuasar();
|
|
|
+const { t } = useI18n();
|
|
|
const router = useRouter();
|
|
|
|
|
|
const clicked = ref(false);
|
|
|
@@ -223,18 +233,14 @@ const onSubmit = async () => {
|
|
|
};
|
|
|
|
|
|
const registerUserAndClient = async () => {
|
|
|
- const payload = new FormData();
|
|
|
+ const payload = {};
|
|
|
|
|
|
const append = (key, value) => {
|
|
|
if (value === null || value === undefined || value === "") {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (typeof value === "boolean") {
|
|
|
- payload.append(key, value ? "1" : "0");
|
|
|
- } else {
|
|
|
- payload.append(key, value);
|
|
|
- }
|
|
|
+ payload[key] = value;
|
|
|
};
|
|
|
|
|
|
Object.entries(stepThreeForm.value).forEach(([key, value]) => {
|
|
|
@@ -249,22 +255,45 @@ const registerUserAndClient = async () => {
|
|
|
append(key, value);
|
|
|
});
|
|
|
|
|
|
- append("avatar", stepAvatarForm.value.avatar);
|
|
|
append("code", code.value);
|
|
|
append("email", email.value);
|
|
|
append("has_complement", !stepThreeForm.value.no_complement);
|
|
|
append("phone", phone.value);
|
|
|
|
|
|
- const response = await createUserAndClient(payload);
|
|
|
+ try {
|
|
|
+ const response = await createUserAndClient(payload);
|
|
|
|
|
|
- if (response.status === 200) {
|
|
|
- await setAuthDataFromPayload(response.data.payload);
|
|
|
- router.push({ name: "DashboardPage" });
|
|
|
- } else {
|
|
|
- console.error("Failed to create user and client");
|
|
|
+ if (response.status >= 200 && response.status < 300) {
|
|
|
+ await setAuthDataFromPayload(response.data.payload);
|
|
|
+
|
|
|
+ if (stepAvatarForm.value.avatar) {
|
|
|
+ const user = await updateMe({
|
|
|
+ avatar_base64: await fileToBase64(stepAvatarForm.value.avatar),
|
|
|
+ });
|
|
|
+
|
|
|
+ userStore().setUser(user);
|
|
|
+ }
|
|
|
+
|
|
|
+ router.push({ name: "DashboardPage" });
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Failed to create user and client", error);
|
|
|
+
|
|
|
+ $q.notify({
|
|
|
+ type: "negative",
|
|
|
+ message: t("auth.register_error"),
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+const fileToBase64 = (file) =>
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ const reader = new FileReader();
|
|
|
+ reader.onload = () => resolve(reader.result);
|
|
|
+ reader.onerror = () => reject(reader.error);
|
|
|
+ reader.readAsDataURL(file);
|
|
|
+ });
|
|
|
+
|
|
|
const sendValidationCode = async () => {
|
|
|
const response = await sendCode(email.value, phone.value);
|
|
|
|