@monkeyplus/payscope 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD-PARTY-LICENSES.md +41 -0
- package/dist/_chunks/auth.d.mts +707 -0
- package/dist/_chunks/database.mjs +831 -0
- package/dist/_chunks/db.d.mts +7100 -0
- package/dist/_chunks/index.d.mts +178 -0
- package/dist/_chunks/lib.mjs +3073 -0
- package/dist/_chunks/libs/better-call.d.mts +478 -0
- package/dist/_chunks/libs/postgres.d.mts +1 -0
- package/dist/_chunks/rolldown-runtime.mjs +11 -0
- package/dist/server/db.d.mts +2 -0
- package/dist/server/db.mjs +108 -0
- package/dist/server/env.d.mts +21 -0
- package/dist/server/env.mjs +22 -0
- package/dist/server/lib.d.mts +362 -0
- package/dist/server/lib.mjs +2 -0
- package/dist/server/router.d.mts +1218 -0
- package/dist/server/router.mjs +1157 -0
- package/dist/server/schemas/auth.d.mts +2 -0
- package/dist/server/schemas/auth.mjs +62 -0
- package/package.json +58 -0
- package/storefront/Readme.md +0 -0
- package/storefront/auth.ts +29 -0
- package/storefront/cart/ResumeCart.vue +217 -0
- package/storefront/cart/ResumeCartSelect.vue +32 -0
- package/storefront/cart/ShoppinCart.vue +100 -0
- package/storefront/cart/ShoppinCartItem.vue +99 -0
- package/storefront/checkout/App.vue +36 -0
- package/storefront/checkout/AppCart.vue +72 -0
- package/storefront/checkout/AppCartDiscount.vue +74 -0
- package/storefront/checkout/AppCartTotals.vue +72 -0
- package/storefront/checkout/AppLoading.vue +55 -0
- package/storefront/checkout/composables.ts +28 -0
- package/storefront/checkout/constants.ts +0 -0
- package/storefront/checkout/main.ts +11 -0
- package/storefront/checkout/pages/Address/Address.vue +95 -0
- package/storefront/checkout/pages/Info/Info.vue +94 -0
- package/storefront/checkout/pages/Info/InfoUser.vue +38 -0
- package/storefront/checkout/pages/Pay/Pay.vue +115 -0
- package/storefront/checkout/pages/Pay/Providers/BancoEconomico/BancoEconomico.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/Cybersource/Cybersource.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/Datafast/Datafast.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/Multipago/Multipago.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/Pagomedios/Pagomedios.vue +93 -0
- package/storefront/checkout/pages/Pay/Providers/Pagomedios/composable.ts +23 -0
- package/storefront/checkout/pages/Pay/Providers/Paypal/Paypal.vue +168 -0
- package/storefront/checkout/pages/Pay/Providers/Paypal/composable.ts +33 -0
- package/storefront/checkout/pages/Pay/Providers/Placetopay/Placetopay.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/Wabi/Wabi.vue +9 -0
- package/storefront/checkout/pages/Pay/Providers/composable.ts +30 -0
- package/storefront/checkout/pages/Payment/Payment.vue +19 -0
- package/storefront/checkout/pages/Payment/PaymentStatus.vue +187 -0
- package/storefront/checkout/pages/Payment/PaymentStatusDetail.vue +77 -0
- package/storefront/checkout/pages/Payment/composable.ts +81 -0
- package/storefront/checkout/pages/Shipping/Shipping.vue +67 -0
- package/storefront/checkout/pages/StepInfo.vue +37 -0
- package/storefront/checkout/router.ts +59 -0
- package/storefront/index.ts +3 -0
- package/storefront/login/App.vue +9 -0
- package/storefront/login/main.ts +10 -0
- package/storefront/login/pages/SignIn/Login.vue +82 -0
- package/storefront/login/pages/SignUp/SignUp.vue +99 -0
- package/storefront/login/router.ts +15 -0
- package/storefront/product/AddProduct.vue +303 -0
- package/storefront/product/AddProductNumber.vue +62 -0
- package/storefront/product/AddProductVariant.vue +66 -0
- package/storefront/profile/App.vue +88 -0
- package/storefront/profile/main.ts +10 -0
- package/storefront/profile/pages/Addresses/Addresses.vue +79 -0
- package/storefront/profile/pages/Addresses/AddressesForm.vue +95 -0
- package/storefront/profile/pages/Addresses/AddressesModal.vue +24 -0
- package/storefront/profile/pages/Buys/Buys.vue +8 -0
- package/storefront/profile/pages/Me/Me.vue +15 -0
- package/storefront/profile/pages/Me/MeBilling.vue +79 -0
- package/storefront/profile/pages/Me/MeBillingForm.vue +66 -0
- package/storefront/profile/pages/Me/MeBillingModal.vue +24 -0
- package/storefront/profile/pages/Me/MeInfo.vue +75 -0
- package/storefront/profile/pages/Me/MePassword.vue +53 -0
- package/storefront/profile/pages/Me/MeSubscriptions.vue +15 -0
- package/storefront/profile/pages/Returns/Returns.vue +8 -0
- package/storefront/profile/pages/Whislist/Whislist.vue +8 -0
- package/storefront/profile/router.ts +32 -0
- package/storefront/stores.ts +320 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { FormSubmitEvent } from '@nuxt/ui';
|
|
3
|
+
import * as v from 'valibot';
|
|
4
|
+
import { reactive } from 'vue';
|
|
5
|
+
import { useAccountStore } from '../../../stores';
|
|
6
|
+
|
|
7
|
+
const { data } = defineProps<{ data?: any }>();
|
|
8
|
+
const schema = v.object({
|
|
9
|
+
address1: v.pipe(v.string(), v.minLength(10, 'Debe contener al menos 10 caracteres')),
|
|
10
|
+
address2: v.pipe(v.string(), v.minLength(3, 'Debe contener al menos 3 caracteres')),
|
|
11
|
+
city: v.pipe(v.string(), v.minLength(3, 'Debe contener al menos 3 caracteres')),
|
|
12
|
+
country: v.pipe(v.string(), v.minLength(2, 'Debe contener al menos 2 caracteres')),
|
|
13
|
+
firstName: v.pipe(v.string(), v.minLength(3, 'Debe contener al menos 3 caracteres')),
|
|
14
|
+
lastName: v.pipe(v.string(), v.minLength(3, 'Debe contener al menos 3 caracteres')),
|
|
15
|
+
// identification: v.pipe(v.string(), v.minLength(10, 'Debe contener al menos 10 caracteres')),
|
|
16
|
+
phone: v.pipe(v.string(), v.minLength(10, 'Debe contener al menos 10 caracteres')),
|
|
17
|
+
state: v.pipe(v.string(), v.minLength(3, 'Debe contener al menos 3 caracteres')),
|
|
18
|
+
zip: v.pipe(v.string(), v.minLength(5, 'Debe contener al menos 5 caracteres')),
|
|
19
|
+
|
|
20
|
+
});
|
|
21
|
+
const account = useAccountStore();
|
|
22
|
+
type Schema = v.InferOutput<typeof schema>;
|
|
23
|
+
|
|
24
|
+
const state = reactive({
|
|
25
|
+
address1: 'Carcelen BAjo',
|
|
26
|
+
address2: 'N90',
|
|
27
|
+
city: '4 ESQUINAS',
|
|
28
|
+
country: 'EC',
|
|
29
|
+
firstName: 'Andrés',
|
|
30
|
+
lastName: 'Barbery',
|
|
31
|
+
phone: '0999208762',
|
|
32
|
+
state: 'bolivar',
|
|
33
|
+
zip: '170302',
|
|
34
|
+
...data,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// const toast = useToast();
|
|
38
|
+
async function onSubmit(event: FormSubmitEvent<Schema>) {
|
|
39
|
+
// // console.log('errer');
|
|
40
|
+
console.log(event.data);
|
|
41
|
+
if (data) {
|
|
42
|
+
await account.mutate('update', 'addresses', state);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
await account.mutate('create', 'addresses', state);
|
|
46
|
+
}
|
|
47
|
+
// toast.add({ title: 'Success', description: 'The form has been submitted.', color: 'success' });
|
|
48
|
+
// // console.log(event.data);
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<template>
|
|
53
|
+
<div class="max-w-xl mx-auto">
|
|
54
|
+
<UForm
|
|
55
|
+
:schema="schema" :state="state" class="space-y-2 grid grid-cols-2 gap-3"
|
|
56
|
+
@submit="onSubmit"
|
|
57
|
+
>
|
|
58
|
+
<UFormField label="Nombre" name="firstName">
|
|
59
|
+
<UInput v-model="state.firstName" class="w-full" size="lg" />
|
|
60
|
+
</UFormField>
|
|
61
|
+
<UFormField label="Apellido" name="lastName">
|
|
62
|
+
<UInput v-model="state.lastName" class="w-full" size="lg" />
|
|
63
|
+
</UFormField>
|
|
64
|
+
<UFormField label="Pais" name="country">
|
|
65
|
+
<UInput v-model="state.country" class="w-full" size="lg" />
|
|
66
|
+
</UFormField>
|
|
67
|
+
<UFormField label="Provincia" name="state">
|
|
68
|
+
<UInput v-model="state.state" class="w-full" size="lg" />
|
|
69
|
+
</UFormField>
|
|
70
|
+
<UFormField label="Ciudad" name="city">
|
|
71
|
+
<UInput v-model="state.city" class="w-full" size="lg" />
|
|
72
|
+
</UFormField>
|
|
73
|
+
<UFormField label="Codigo postal" name="zip">
|
|
74
|
+
<UInput v-model="state.zip" class="w-full" size="lg" />
|
|
75
|
+
</UFormField>
|
|
76
|
+
<UFormField label="Dirección" name="address1" class="col-span-2">
|
|
77
|
+
<UInput v-model="state.address1" class="w-full" size="lg" />
|
|
78
|
+
</UFormField>
|
|
79
|
+
<UFormField label="Apartamento, local, etc." name="address2" class="col-span-2">
|
|
80
|
+
<UInput v-model="state.address2" class="w-full" size="lg" />
|
|
81
|
+
</UFormField>
|
|
82
|
+
<UFormField label="Teléfono" name="phone" class="col-span-2">
|
|
83
|
+
<UInput v-model="state.phone" class="w-full" size="lg" />
|
|
84
|
+
</UFormField>
|
|
85
|
+
<div class="col-span-2">
|
|
86
|
+
<UButton
|
|
87
|
+
type="submit" class="mt-3" size="xl" block
|
|
88
|
+
:loading="account.loadingMutation"
|
|
89
|
+
>
|
|
90
|
+
Guardar
|
|
91
|
+
</UButton>
|
|
92
|
+
</div>
|
|
93
|
+
</UForm>
|
|
94
|
+
</div>
|
|
95
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useAccountStore } from '../../../stores';
|
|
3
|
+
import AddressesForm from './AddressesForm.vue';
|
|
4
|
+
|
|
5
|
+
defineProps<{
|
|
6
|
+
title: string
|
|
7
|
+
data?: any
|
|
8
|
+
}>();
|
|
9
|
+
|
|
10
|
+
const emit = defineEmits<{ close: [boolean] }>();
|
|
11
|
+
const account = useAccountStore();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<UModal
|
|
16
|
+
:dismissible="!account.loadingMutation"
|
|
17
|
+
:close="{ onClick: () => emit('close', false) }"
|
|
18
|
+
:title="title"
|
|
19
|
+
>
|
|
20
|
+
<template #body>
|
|
21
|
+
<AddressesForm :data="data" />
|
|
22
|
+
</template>
|
|
23
|
+
</UModal>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import MeBilling from './MeBilling.vue';
|
|
3
|
+
import MeInfo from './MeInfo.vue';
|
|
4
|
+
import MePassword from './MePassword.vue';
|
|
5
|
+
import MeSubscriptions from './MeSubscriptions.vue';
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<div class="pb-12">
|
|
10
|
+
<MeInfo />
|
|
11
|
+
<MeBilling />
|
|
12
|
+
<MePassword />
|
|
13
|
+
<MeSubscriptions />
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useAsyncState } from '@vueuse/core';
|
|
3
|
+
import { ref } from 'vue';
|
|
4
|
+
import { useAccountStore } from '../../../stores';
|
|
5
|
+
import MeBillingModal from './MeBillingModal.vue';
|
|
6
|
+
|
|
7
|
+
const billings = ref([] as any[]);
|
|
8
|
+
|
|
9
|
+
const account = useAccountStore();
|
|
10
|
+
const {
|
|
11
|
+
executeImmediate: saveBilling,
|
|
12
|
+
isLoading: loadingBilling,
|
|
13
|
+
} = useAsyncState(async (action: string, data: any) => {
|
|
14
|
+
|
|
15
|
+
}, null, { immediate: false });
|
|
16
|
+
const overlay = useOverlay();
|
|
17
|
+
|
|
18
|
+
const modal = overlay.create(MeBillingModal);
|
|
19
|
+
async function newBilling() {
|
|
20
|
+
const instance = modal.open({
|
|
21
|
+
title: 'Agregar datos de facturación',
|
|
22
|
+
});
|
|
23
|
+
const shouldIncrement = await instance.result;
|
|
24
|
+
console.log('shoultIncrement', shouldIncrement);
|
|
25
|
+
}
|
|
26
|
+
async function editBilling(item: any) {
|
|
27
|
+
const instance = modal.open({
|
|
28
|
+
title: 'Editar datos de facturación',
|
|
29
|
+
data: item,
|
|
30
|
+
});
|
|
31
|
+
const shouldIncrement = await instance.result;
|
|
32
|
+
console.log('shoultIncrement', shouldIncrement);
|
|
33
|
+
}
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<template>
|
|
37
|
+
<div class="max-w-lg mx-auto py-6">
|
|
38
|
+
<div class="text-center text-xl font-light pb-2 dark:text-white dark:font-medium">
|
|
39
|
+
Datos de facturación
|
|
40
|
+
</div>
|
|
41
|
+
<div>
|
|
42
|
+
<div class="pb-2 space-y-1">
|
|
43
|
+
<!-- -->
|
|
44
|
+
<div v-for="item in account.billings" :key="item.id" class="border px-2 rounded py-3 bg-white flex items-center border-gray-300">
|
|
45
|
+
<div class="flex-1 text-sm text-gray-700">
|
|
46
|
+
{{ item.formatted }}
|
|
47
|
+
</div>
|
|
48
|
+
<div class="space-x-3">
|
|
49
|
+
<button class="hover:underline" @click="editBilling(item)">
|
|
50
|
+
Editar
|
|
51
|
+
</button>
|
|
52
|
+
<div class="inline-block">
|
|
53
|
+
|
|
|
54
|
+
</div>
|
|
55
|
+
<button class="hover:underline" @click="saveBilling('delete', item)">
|
|
56
|
+
Quitar
|
|
57
|
+
</button>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<!-- -->
|
|
62
|
+
<div class="text-center">
|
|
63
|
+
<UButton
|
|
64
|
+
:loading="loadingBilling"
|
|
65
|
+
block
|
|
66
|
+
size="xl"
|
|
67
|
+
variant="outline"
|
|
68
|
+
class="border-dashed border"
|
|
69
|
+
|
|
70
|
+
color="neutral"
|
|
71
|
+
@click="newBilling()"
|
|
72
|
+
>
|
|
73
|
+
Nuevos datos de facturación
|
|
74
|
+
</UButton>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
<!-- <FormPassword :initial-values="selected" @submit="onSave" /> -->
|
|
78
|
+
</div>
|
|
79
|
+
</template>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { FormSubmitEvent } from '@nuxt/ui';
|
|
3
|
+
import * as v from 'valibot';
|
|
4
|
+
import { reactive } from 'vue';
|
|
5
|
+
import { useAccountStore } from '../../../stores';
|
|
6
|
+
|
|
7
|
+
const { data } = defineProps<{ data?: any }>();
|
|
8
|
+
const schema = v.object({
|
|
9
|
+
email: v.pipe(v.string(), v.email('Debe ser un correo electronico valido')),
|
|
10
|
+
identification: v.pipe(v.string(), v.minLength(10, 'Debe contener al menos 10 caracteres')),
|
|
11
|
+
});
|
|
12
|
+
const account = useAccountStore();
|
|
13
|
+
type Schema = v.InferOutput<typeof schema>;
|
|
14
|
+
|
|
15
|
+
const state = reactive({
|
|
16
|
+
fullname: '',
|
|
17
|
+
identification: '',
|
|
18
|
+
email: '',
|
|
19
|
+
phone: '',
|
|
20
|
+
address: '',
|
|
21
|
+
...data,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// const toast = useToast();
|
|
25
|
+
async function onSubmit(event: FormSubmitEvent<Schema>) {
|
|
26
|
+
// // console.log('errer');
|
|
27
|
+
console.log(event.data);
|
|
28
|
+
if (data) {
|
|
29
|
+
await account.mutate('update', 'billings', state);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
await account.mutate('create', 'billings', state);
|
|
33
|
+
}
|
|
34
|
+
// toast.add({ title: 'Success', description: 'The form has been submitted.', color: 'success' });
|
|
35
|
+
// // console.log(event.data);
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<template>
|
|
40
|
+
<div class="max-w-xl mx-auto">
|
|
41
|
+
<UForm :schema="schema" :state="state" class="space-y-2" @submit="onSubmit">
|
|
42
|
+
<UFormField label="Nombre completo" name="name">
|
|
43
|
+
<UInput v-model="state.fullname" class="w-full" size="lg" />
|
|
44
|
+
</UFormField>
|
|
45
|
+
|
|
46
|
+
<UFormField label="Cedula o Ruc" name="identification">
|
|
47
|
+
<UInput v-model="state.identification" class="w-full" size="lg" />
|
|
48
|
+
</UFormField>
|
|
49
|
+
<UFormField label="Correo electronico" name="email">
|
|
50
|
+
<UInput v-model="state.email" class="w-full" size="lg" />
|
|
51
|
+
</UFormField>
|
|
52
|
+
<UFormField label="Numero de telefono" name="birthday">
|
|
53
|
+
<UInput v-model="state.phone" class="w-full" size="lg" />
|
|
54
|
+
</UFormField>
|
|
55
|
+
<UFormField label="Dirección" name="address">
|
|
56
|
+
<UInput v-model="state.address" class="w-full" size="lg" />
|
|
57
|
+
</UFormField>
|
|
58
|
+
<UButton
|
|
59
|
+
type="submit" class="mt-3" size="xl" block
|
|
60
|
+
:loading="account.loadingMutation"
|
|
61
|
+
>
|
|
62
|
+
Guardar
|
|
63
|
+
</UButton>
|
|
64
|
+
</UForm>
|
|
65
|
+
</div>
|
|
66
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useAccountStore } from '../../../stores';
|
|
3
|
+
import MeBillingForm from './MeBillingForm.vue';
|
|
4
|
+
|
|
5
|
+
defineProps<{
|
|
6
|
+
title: string
|
|
7
|
+
data?: any
|
|
8
|
+
}>();
|
|
9
|
+
|
|
10
|
+
const emit = defineEmits<{ close: [boolean] }>();
|
|
11
|
+
const account = useAccountStore();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<UModal
|
|
16
|
+
:dismissible="!account.loadingMutation"
|
|
17
|
+
:close="{ onClick: () => emit('close', false) }"
|
|
18
|
+
:title="title"
|
|
19
|
+
>
|
|
20
|
+
<template #body>
|
|
21
|
+
<MeBillingForm :data="data" />
|
|
22
|
+
</template>
|
|
23
|
+
</UModal>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { FormSubmitEvent } from '@nuxt/ui';
|
|
3
|
+
import { CalendarDate } from '@internationalized/date';
|
|
4
|
+
// import { watch } from 'node:fs';
|
|
5
|
+
import * as v from 'valibot';
|
|
6
|
+
import { ref, watch } from 'vue';
|
|
7
|
+
import { authClient, useSession } from '../../../auth';
|
|
8
|
+
|
|
9
|
+
const schema = v.object({
|
|
10
|
+
// email: v.pipe(v.string(), v.email('Invalid email')),
|
|
11
|
+
// password: v.pipe(v.string(), v.minLength(8, 'Must be at least 8 characters')),
|
|
12
|
+
name: v.string(),
|
|
13
|
+
phone: v.string(),
|
|
14
|
+
birthday: v.instance(CalendarDate),
|
|
15
|
+
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
type Schema = v.InferOutput<typeof schema>;
|
|
19
|
+
const { user } = useSession();
|
|
20
|
+
// console.log(user.value);
|
|
21
|
+
const state = ref({
|
|
22
|
+
name: '',
|
|
23
|
+
phone: '',
|
|
24
|
+
email: '',
|
|
25
|
+
birthday: new CalendarDate(2022, 2, 3),
|
|
26
|
+
// ...user.value,
|
|
27
|
+
});
|
|
28
|
+
watch(user, (nv?: any) => {
|
|
29
|
+
state.value = { ...nv, birthday: new CalendarDate(new Date(nv.birthday || '').getFullYear(), new Date(nv.birthday || '').getMonth() + 1, new Date(nv.birthday || '').getDate() + 1),
|
|
30
|
+
} as any;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const toast = useToast();
|
|
34
|
+
async function onSubmit(event: FormSubmitEvent<Schema>) {
|
|
35
|
+
// console.log('errer', event.data);
|
|
36
|
+
|
|
37
|
+
const birthday = event.data.birthday.toString();
|
|
38
|
+
await authClient.updateUser({
|
|
39
|
+
// name: state.value.name,
|
|
40
|
+
...event.data,
|
|
41
|
+
birthday,
|
|
42
|
+
} as any);
|
|
43
|
+
toast.add({
|
|
44
|
+
title: 'Success',
|
|
45
|
+
description: 'The form has been submitted.',
|
|
46
|
+
color: 'success',
|
|
47
|
+
});
|
|
48
|
+
// console.log(event.data);
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<template>
|
|
53
|
+
<div class="max-w-lg mx-auto">
|
|
54
|
+
<UForm :schema="schema" :state="state" class="space-y-2" @submit="onSubmit">
|
|
55
|
+
<UFormField label="Nombre" name="name">
|
|
56
|
+
<UInput v-model="state.name" class="w-full" size="lg" />
|
|
57
|
+
</UFormField>
|
|
58
|
+
<UFormField label="Celular" name="phone">
|
|
59
|
+
<UInput v-model="state.phone" class="w-full" size="lg" />
|
|
60
|
+
</UFormField>
|
|
61
|
+
<UFormField label="Correo electronico" name="email">
|
|
62
|
+
<UInput v-model="state.email" class="w-full" size="lg" disabled />
|
|
63
|
+
</UFormField>
|
|
64
|
+
<UFormField label="Fecha de nacimiento" name="birthday">
|
|
65
|
+
<UInputDate v-model="state.birthday" class="w-full" size="lg" />
|
|
66
|
+
</UFormField>
|
|
67
|
+
<UButton
|
|
68
|
+
type="submit" class="mt-3 bg-e-primary hover:bg-e-primary/90 text-e-primary-contrast" size="xl"
|
|
69
|
+
block
|
|
70
|
+
>
|
|
71
|
+
Guardar cambios
|
|
72
|
+
</UButton>
|
|
73
|
+
</UForm>
|
|
74
|
+
</div>
|
|
75
|
+
</template>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { FormSubmitEvent } from '@nuxt/ui';
|
|
3
|
+
import * as v from 'valibot';
|
|
4
|
+
import { reactive } from 'vue';
|
|
5
|
+
|
|
6
|
+
const schema = v.pipe(v.object({
|
|
7
|
+
oldPassword: v.pipe(v.string(), v.minLength(8, 'Must be at least 8 characters')),
|
|
8
|
+
password: v.pipe(v.string(), v.minLength(8, 'Must be at least 8 characters')),
|
|
9
|
+
confirmPassword: v.string(),
|
|
10
|
+
|
|
11
|
+
}), v.forward(
|
|
12
|
+
v.partialCheck([['password'], ['confirmPassword']], input => input.password === input.confirmPassword, 'Passwords do not match'),
|
|
13
|
+
['confirmPassword'],
|
|
14
|
+
));
|
|
15
|
+
const state = reactive({
|
|
16
|
+
password: '',
|
|
17
|
+
confirmPassword: '',
|
|
18
|
+
oldPassword: '',
|
|
19
|
+
});
|
|
20
|
+
const toast = useToast();
|
|
21
|
+
type Schema = v.InferOutput<typeof schema>;
|
|
22
|
+
|
|
23
|
+
async function onSubmit(event: FormSubmitEvent<Schema>) {
|
|
24
|
+
// toast.add({ title: 'Success', description: 'The form has been submitted.', color: 'success' });
|
|
25
|
+
// console.log(event.data);
|
|
26
|
+
}
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<div class="max-w-lg mx-auto">
|
|
31
|
+
<div class="text-center text-xl font-light pb-2 dark:text-white dark:font-medium">
|
|
32
|
+
Modificar contraseña
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<UForm :schema="schema" :state="state" @submit="onSubmit">
|
|
36
|
+
<UFormField label="Contraseña actual" name="oldPassword">
|
|
37
|
+
<UInput v-model="state.oldPassword" size="lg" class="w-full" />
|
|
38
|
+
</UFormField>
|
|
39
|
+
|
|
40
|
+
<UFormField label="Nueva contraseña" name="password">
|
|
41
|
+
<UInput v-model="state.password" type="password" size="lg" class="w-full" />
|
|
42
|
+
</UFormField>
|
|
43
|
+
|
|
44
|
+
<UFormField label="Repetir contraseña" name="confirmPassword">
|
|
45
|
+
<UInput v-model="state.password" type="password" size="lg" class="w-full" />
|
|
46
|
+
</UFormField>
|
|
47
|
+
|
|
48
|
+
<UButton type="submit">
|
|
49
|
+
Submit
|
|
50
|
+
</UButton>
|
|
51
|
+
</UForm>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<template>
|
|
6
|
+
<div class="max-w-lg mx-auto">
|
|
7
|
+
<div class="text-center text-xl font-light pb-2 dark:text-white dark:font-medium">
|
|
8
|
+
Mis subscripciones
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<UCheckbox label="Check me" description="This is a checkbox." />
|
|
12
|
+
<UCheckbox label="Check me" description="This is a checkbox." />
|
|
13
|
+
<UCheckbox label="Check me" description="This is a checkbox." />
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createRouter, createWebHashHistory } from 'vue-router';
|
|
2
|
+
|
|
3
|
+
export const router = createRouter({
|
|
4
|
+
history: createWebHashHistory(),
|
|
5
|
+
routes: [
|
|
6
|
+
{
|
|
7
|
+
path: '/',
|
|
8
|
+
name: 'me',
|
|
9
|
+
component: () => import('./pages/Me/Me.vue'),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
path: '/buys',
|
|
13
|
+
name: 'orders',
|
|
14
|
+
component: () => import('./pages/Buys/Buys.vue'),
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
path: '/address',
|
|
18
|
+
name: 'address',
|
|
19
|
+
component: () => import('./pages/Addresses/Addresses.vue'),
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: '/returns',
|
|
23
|
+
name: 'returns',
|
|
24
|
+
component: () => import('./pages/Returns/Returns.vue'),
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: '/wishes',
|
|
28
|
+
name: 'wishes',
|
|
29
|
+
component: () => import('./pages/Whislist/Whislist.vue'),
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
});
|