#5186 create parking section #197

Merged
jorgep merged 29 commits from 5186-CreateParkingSection into dev 2024-03-27 08:42:33 +00:00
8 changed files with 52 additions and 70 deletions
Showing only changes of commit e793b3dd93 - Show all commits

View File

@ -2,7 +2,7 @@
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const { t, te } = useI18n();
alexm marked this conversation as resolved
Review

la función "te" devuelve un booleano . Si existe true , si no false.

la función "te" devuelve un booleano . Si existe true , si no false.
Review

_Mientras que es común utilizar abreviaturas para ciertas palabras en nombres de variables, evita abreviaturas excesivas que puedan hacer que el código sea menos legible.

Evitar abreviaturas excesivas: Mientras que es común utilizar abreviaturas para ciertas palabras en nombres de variables, evita abreviaturas excesivas que puedan hacer que el código sea menos legible._

Jo en este cas no ho abreviaria. com a molt a tExist pq t si sabem q significa.
@juan com ho veus?

_Mientras que es común utilizar abreviaturas para ciertas palabras en nombres de variables, evita abreviaturas excesivas que puedan hacer que el código sea menos legible. Evitar abreviaturas excesivas: Mientras que es común utilizar abreviaturas para ciertas palabras en nombres de variables, evita abreviaturas excesivas que puedan hacer que el código sea menos legible._ Jo en este cas no ho abreviaria. com a molt a tExist pq t si sabem q significa. @juan com ho veus?
Review

No entiendo, la abreviatura es de la librería vue-i18n

No entiendo, la abreviatura es de la librería vue-i18n
Review

Es nativo de i18n

Es nativo de i18n
const props = defineProps({
item: {
@ -11,7 +11,13 @@ const props = defineProps({
},
});
const item = computed(() => props.item); // eslint-disable-line vue/no-dupe-keys
const item = computed(() => {
const item = JSON.parse(JSON.stringify(props.item));
Review

Es necesario hacerlo así para que no sea una referencia al mismo objeto.

Es necesario hacerlo así para que no sea una referencia al mismo objeto.
const [, , section] = item.title.split('.');
if (!te(item.title)) item.title = t(`globals.pageTitles.${section}`);
Review

Si no encuentra la traducción, coge la global.

Si no encuentra la traducción, coge la global.
return item;
}); // eslint-disable-line vue/no-dupe-keys
jorgep marked this conversation as resolved Outdated
Outdated
Review

Si gastes una variable distinta a "item" ja no cal ficar esta linea.

Si gastes una variable distinta a "item" ja no cal ficar esta linea.
</script>
<template>
<QItem active-class="text-primary" :to="{ name: item.name }" clickable v-ripple>

View File

@ -5,16 +5,16 @@ import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { useCamelCase } from 'src/composables/useCamelCase';
const router = useRouter();
const quasar = useQuasar();
const { t } = useI18n();
const { currentRoute } = useRouter();
const { screen } = useQuasar();
const { t, te } = useI18n();
let matched = ref([]);
let breadcrumbs = ref([]);
let root = ref(null);
watchEffect(() => {
matched.value = router.currentRoute.value.matched.filter(
matched.value = currentRoute.value.matched.filter(
(matched) => Object.keys(matched.meta).length
);
breadcrumbs.value.length = 0;
@ -36,11 +36,15 @@ function getBreadcrumb(param) {
root: root.value,
};
if (quasar.screen.gt.sm) {
if (screen.gt.sm) {
breadcrumb.name = param.name;
breadcrumb.title = useCamelCase(param.meta.title);
}
breadcrumb.locale = te(`${breadcrumb.root}.pageTitles.${breadcrumb.title}`)
jorgep marked this conversation as resolved Outdated

Si existe la traducción específica , pone esta, si no la global

Si existe la traducción específica , pone esta, si no la global

La clave i18n de las lineas 44 y 45 son iguales no?
Podemos reducir a 1 ocurrencia?

La clave i18n de las lineas 44 y 45 son iguales no? Podemos reducir a 1 ocurrencia?

No, "te" devuelve un booleano, "t" traduce

No, "te" devuelve un booleano, "t" traduce

No, "te" devuelve un booleano, "t" traduce

Tras hablar con Javier, guardo el valor en una variable.

> No, "te" devuelve un booleano, "t" traduce Tras hablar con Javier, guardo el valor en una variable.

Bien, pero quizás para evitarte un ternario, te diría de usar un if con la operacion "te" y dentro le asignas el valor que quieras. Fuera del if resuelves la traducción asignandola a breadcumb.locale

Bien, pero quizás para evitarte un ternario, te diría de usar un if con la operacion "te" y dentro le asignas el valor que quieras. Fuera del if resuelves la traducción asignandola a breadcumb.locale
? t(`${breadcrumb.root}.pageTitles.${breadcrumb.title}`)
: t(`globals.pageTitles.${breadcrumb.title}`);
return breadcrumb;
}
</script>
@ -50,7 +54,7 @@ function getBreadcrumb(param) {
v-for="(breadcrumb, index) of breadcrumbs"
:key="index"
:icon="breadcrumb.icon"
:label="t(`${breadcrumb.root}.pageTitles.${breadcrumb.title}`)"
:label="breadcrumb.locale"
:to="breadcrumb.path"
/>
</QBreadcrumbs>

View File

@ -83,6 +83,12 @@ export default {
selectFile: 'Select a file',
copyClipboard: 'Copy on clipboard',
salesPerson: 'SalesPerson',
jorgep marked this conversation as resolved
Review

Traducciones duplicadas

Traducciones duplicadas
code: 'Code',
pageTitles: {

Esto se repite mucho. Yo crearía tarea para sustituir en todos los sitios esto.

Esto se repite mucho. Yo crearía tarea para sustituir en todos los sitios esto.
summary: 'Summary',
jorgep marked this conversation as resolved
Review

Se usa 7 veces. Deberia estar global.

Se usa 7 veces. Deberia estar global.
basicData: 'Basic data',
log: 'Logs',
Review

Se usa 17 veces, deberia estar global o crear tarea

Se usa 17 veces, deberia estar global o crear tarea
Review
https://redmine.verdnatura.es/issues/7132
},
jorgep marked this conversation as resolved
Review

Se usa 19 veces, debería estar global o crear tarea

Se usa 19 veces, debería estar global o crear tarea
},
jorgep marked this conversation as resolved
Review

Se usa 2 veces, debería estar global

Se usa 2 veces, debería estar global
errors: {
statusUnauthorized: 'Access denied',
@ -685,34 +691,18 @@ export default {
},
},
parking: {
pickingOrder: 'Picking order',
sector: 'Sector',
row: 'Row',
column: 'Column',
pageTitles: {
parking: 'Parking',
parkingList: 'Parkings list',
summary: 'Summary',
basicData: 'Basic data',
log: 'Logs',
},
list: {
pickingOrder: 'Picking order',
},
searchBar: {
info: 'You can search by parking code',
label: 'Search parking...',
},
summary: {
code: 'Code',
pickingOrder: 'Picking order',
sector: 'Sector',
row: 'Row',
column: 'Column',
},
basicData: {
code: 'Code',
pickingOrder: 'Picking order',
sector: 'Sector',
row: 'Row',
column: 'Column',
},
},
invoiceIn: {
pageTitles: {

View File

@ -83,6 +83,12 @@ export default {
selectFile: 'Seleccione un fichero',
copyClipboard: 'Copiar en portapapeles',
salesPerson: 'Comercial',
jorgep marked this conversation as resolved
Review

Las mismas repetidas pero en este caso en español

Las mismas repetidas pero en este caso en español
code: 'Código',
pageTitles: {
summary: 'Resumen',
basicData: 'Datos básicos',
log: 'Historial',
},
},
errors: {
statusUnauthorized: 'Acceso denegado',
@ -743,32 +749,17 @@ export default {
},
},
parking: {
pickingOrder: 'Orden de recogida',
row: 'Fila',
column: 'Columna',
pageTitles: {
parking: 'Parking',
parkingList: 'Listado de parkings',
summary: 'Resumen',
basicData: 'Datos básicos',
log: 'Registros de auditoría',
},
list: {
pickingOrder: 'Orden de recogida',
},
searchBar: {
info: 'Puedes buscar por código de parking',
label: 'Buscar parking...',
},
summary: {
code: 'Código',
pickingOrder: 'Orden de recogida',
row: 'Fila',
column: 'Columna',
},
basicData: {
code: 'Código',
pickingOrder: 'Orden de recogida',
row: 'Fila',
column: 'Columna',
},
},
invoiceIn: {
pageTitles: {

View File

@ -32,22 +32,19 @@ const filter = {
<FormModel :url="`Parkings/${parkingId}`" model="parking" :filter="filter" auto-load>
<template #form="{ data }">
<VnRow>
<VnInput v-model="data.code" :label="t('parking.basicData.code')" />
<VnInput
v-model="data.pickingOrder"
:label="t('parking.basicData.pickingOrder')"
/>
<VnInput v-model="data.code" :label="t('globals.code')" />
<VnInput v-model="data.pickingOrder" :label="t('parking.pickingOrder')" />
</VnRow>
<VnRow>
<VnInput v-model="data.row" :label="t('parking.basicData.row')" />
<VnInput v-model="data.column" :label="t('parking.basicData.column')" />
<VnInput v-model="data.row" :label="t('parking.row')" />
<VnInput v-model="data.column" :label="t('parking.column')" />
</VnRow>
<VnRow>
<VnSelectFilter
v-model="data.sectorFk"
jorgep marked this conversation as resolved Outdated

El campo debería ser requerido si al enviar nulo da error.

O cambiar el mensaje de error en salix para que sea mas informativo al usuario y no de pie a pensar que algo está hecho mal.

El campo debería ser requerido si al enviar nulo da error. O cambiar el mensaje de error en salix para que sea mas informativo al usuario y no de pie a pensar que algo está hecho mal.

Esto habría que aplicarlo a nivel de FormModel, actualmente pasa en cualquier sección que inserte un campo que es obligatorio en bd, yo crearía tarea para hacer refactor de formModel. De momento, lo soluciono con la prop is-clearable="false". Pero que baraje @alexm y @jgallego si crear tarea.

Esto habría que aplicarlo a nivel de FormModel, actualmente pasa en cualquier sección que inserte un campo que es obligatorio en bd, yo crearía tarea para hacer refactor de formModel. De momento, lo soluciono con la prop is-clearable="false". Pero que baraje @alexm y @jgallego si crear tarea.
option-value="id"
jorgep marked this conversation as resolved Outdated
Outdated
Review

Al final un VnRow con un unico elemento se veia bien?

Al final un VnRow con un unico elemento se veia bien?

sí, te aplica el flex 1, ocupando todo el ancho

sí, te aplica el flex 1, ocupando todo el ancho
option-label="description"
:label="t('parking.basicData.sector')"
:label="t('parking.sector')"
:options="sectors"
use-input
input-debounce="0"

View File

@ -38,15 +38,9 @@ const setHeader = (entity) => (header.value = useCardDescription(entity.code, en
@on-fetch="setHeader"
>
<template #body="{ entity: parking }">
<VnLv :label="t('parking.summary.code')" :value="parking.code" />
<VnLv
:label="t('parking.summary.pickingOrder')"
:value="parking.pickingOrder"
/>
<VnLv
:label="t('parking.summary.sector')"
:value="parking.sector?.description"
/>
<VnLv :label="t('globals.code')" :value="parking.code" />
<VnLv :label="t('parking.pickingOrder')" :value="parking.pickingOrder" />
<VnLv :label="t('parking.sector')" :value="parking.sector?.description" />
</template>
</CardDescriptor>
</template>

View File

@ -33,21 +33,21 @@ const filter = {
class="header header-link"
:href="`#/parking/${entityId}/basic-data`"
>
{{ t('parking.pageTitles.basicData') }}
{{ t('globals.pageTitles.basicData') }}
<QIcon name="open_in_new" />
</a>
</QCardSection>
<VnLv :label="t('parking.summary.code')" :value="parking.code" />
<VnLv :label="t('globals.code')" :value="parking.code" />
<VnLv
:label="t('parking.summary.pickingOrder')"
:label="t('parking.pickingOrder')"
:value="parking.pickingOrder"
/>
<VnLv
:label="t('parking.summary.sector')"
:label="t('parking.sector')"
:value="parking.sector?.description"
/>
<VnLv :label="t('parking.summary.row')" :value="parking.row" />
<VnLv :label="t('parking.summary.column')" :value="parking.column" />
<VnLv :label="t('parking.row')" :value="parking.row" />
<VnLv :label="t('parking.column')" :value="parking.column" />
</QCard>
</template>
</CardSummary>

View File

@ -88,7 +88,7 @@ function exprBuilder(param, value) {
<template #list-items>
<VnLv label="Sector" :value="row.sector?.description" />
<VnLv
:label="t('parking.list.pickingOrder')"
:label="t('parking.pickingOrder')"
:value="row.pickingOrder"
/>
</template>