diff --git a/src/components/UserPanel.vue b/src/components/UserPanel.vue index 2f191691a..98334460a 100644 --- a/src/components/UserPanel.vue +++ b/src/components/UserPanel.vue @@ -164,7 +164,7 @@ const isEmployee = computed(() => useRole().isEmployee()); class="q-mt-sm q-px-md" :to="`/worker/${user.id}`" color="primary" - :label="t('My account')" + :label="t('globals.myAccount')" dense />
@@ -270,7 +270,3 @@ const isEmployee = computed(() => useRole().isEmployee()); } } - -es: - My account: Mi cuenta - diff --git a/src/components/ui/VnFilterPanel.vue b/src/components/ui/VnFilterPanel.vue index 4fd511631..e3019663c 100644 --- a/src/components/ui/VnFilterPanel.vue +++ b/src/components/ui/VnFilterPanel.vue @@ -37,7 +37,7 @@ const $props = defineProps({ }, hiddenTags: { type: Array, - default: () => ['filter'], + default: () => ['filter', 'search', 'or', 'and'], }, customTags: { type: Array, @@ -198,8 +198,10 @@ function formatValue(value) { function sanitizer(params) { for (const [key, value] of Object.entries(params)) { - if (typeof value == 'object') - params[key] = Object.values(value)[0].replaceAll('%', ''); + if (typeof value == 'object') { + const param = Object.values(value)[0]; + if (typeof param == 'string') params[key] = param.replaceAll('%', ''); + } } return params; } diff --git a/src/components/ui/VnOutForm.vue b/src/components/ui/VnOutForm.vue new file mode 100644 index 000000000..e7ad441d0 --- /dev/null +++ b/src/components/ui/VnOutForm.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/ui/VnRow.vue b/src/components/ui/VnRow.vue index 5c01d7216..34cdf88b8 100644 --- a/src/components/ui/VnRow.vue +++ b/src/components/ui/VnRow.vue @@ -9,6 +9,9 @@ > :deep(*) { flex: 1; } + &[wrap] { + flex-wrap: wrap; + } } @media screen and (max-width: 800px) { .vn-row { diff --git a/src/components/ui/VnSubToolbar.vue b/src/components/ui/VnSubToolbar.vue index 5e2412437..5ded4be00 100644 --- a/src/components/ui/VnSubToolbar.vue +++ b/src/components/ui/VnSubToolbar.vue @@ -43,20 +43,9 @@ onBeforeUnmount(() => stateStore.toggleSubToolbar()); - diff --git a/src/css/app.scss b/src/css/app.scss index 3efe92db4..c233b14f0 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -190,6 +190,10 @@ select:-webkit-autofill { font-size: medium; } +.q-toolbar { + background: var(--vn-section-color); +} + .q-card__actions { justify-content: center; } diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 12680d0cb..7d3682525 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -251,6 +251,9 @@ globals: privileges: Privileges ldap: LDAP samba: Samba + twoFactor: Two factor + recoverPassword: Recover password + resetPassword: Reset password created: Created worker: Worker now: Now @@ -263,6 +266,7 @@ globals: title: Unsaved changes will be lost subtitle: Are you sure exit without saving? createInvoiceIn: Create invoice in + myAccount: My account errors: statusUnauthorized: Access denied statusInternalServerError: An internal server error has ocurred @@ -288,14 +292,17 @@ twoFactor: explanation: >- Please, enter the verification code that we have sent to your email in the next 5 minutes - pageTitles: - twoFactor: Two-Factor verifyEmail: pageTitles: verifyEmail: Email verification -dashboard: - pageTitles: - +recoverPassword: + userOrEmail: User or recovery email + explanation: >- + We will sent you an email to recover your password +resetPassword: + repeatPassword: Repeat password + passwordNotMatch: Passwords don't match + passwordChanged: Password changed customer: list: phone: Phone diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index 747a10d51..8157f1803 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -253,6 +253,9 @@ globals: packages: Bultos ldap: LDAP samba: Samba + twoFactor: Doble factor + recoverPassword: Recuperar contraseña + resetPassword: Restablecer contraseña created: Fecha creación worker: Trabajador now: Ahora @@ -265,7 +268,7 @@ globals: title: Los cambios que no haya guardado se perderán subtitle: ¿Seguro que quiere salir sin guardar? createInvoiceIn: Crear factura recibida - + myAccount: Mi cuenta errors: statusUnauthorized: Acceso denegado statusInternalServerError: Ha ocurrido un error interno del servidor @@ -289,14 +292,17 @@ twoFactor: validate: Validar insert: Introduce el código de verificación explanation: Por favor introduce el código de verificación que te hemos enviado a tu email en los próximos 5 minutos - pageTitles: - twoFactor: Doble factor verifyEmail: pageTitles: verifyEmail: Verificación de correo -dashboard: - pageTitles: - +recoverPassword: + userOrEmail: Usuario o correo de recuperación + explanation: >- + Te enviaremos un correo para restablecer tu contraseña +resetPassword: + repeatPassword: Repetir contraseña + passwordNotMatch: Las contraseñas no coinciden + passwordChanged: Contraseña cambiada customer: list: phone: Teléfono @@ -876,7 +882,7 @@ worker: card: workerId: ID Trabajador name: Nombre - email: Email + email: Correo personal phone: Teléfono mobile: Móvil active: Activo diff --git a/src/pages/Account/AccountAcls.vue b/src/pages/Account/AccountAcls.vue index ad8600786..fdb0ecee1 100644 --- a/src/pages/Account/AccountAcls.vue +++ b/src/pages/Account/AccountAcls.vue @@ -41,14 +41,12 @@ const columns = computed(() => [ name: 'id', label: t('id'), isId: true, - field: 'id', cardVisible: true, }, { align: 'left', name: 'model', label: t('model'), - field: 'model', cardVisible: true, create: true, }, @@ -56,15 +54,19 @@ const columns = computed(() => [ align: 'left', name: 'principalId', label: t('principalId'), - field: 'principalId', cardVisible: true, + component: 'select', + attrs: { + url: 'VnRoles', + optionLabel: 'name', + optionValue: 'name', + }, create: true, }, { align: 'left', name: 'property', label: t('property'), - field: 'property', cardVisible: true, create: true, }, @@ -72,7 +74,10 @@ const columns = computed(() => [ align: 'left', name: 'accessType', label: t('accessType'), - field: 'accessType', + component: 'select', + attrs: { + options: ['READ', 'WRITE', '*'], + }, cardVisible: true, create: true, }, @@ -118,13 +123,6 @@ const deleteAcl = async ({ id }) => { -