#5186 create parking section #197
|
@ -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
|
||||
|
||||
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));
|
||||
jorgep
commented
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}`);
|
||||
jorgep
commented
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
alexm
commented
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>
|
||||
|
|
|
@ -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
jorgep
commented
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
jsegarra
commented
La clave i18n de las lineas 44 y 45 son iguales no? La clave i18n de las lineas 44 y 45 son iguales no?
Podemos reducir a 1 ocurrencia?
jorgep
commented
No, "te" devuelve un booleano, "t" traduce No, "te" devuelve un booleano, "t" traduce
jorgep
commented
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.
jsegarra
commented
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>
|
||||
|
|
|
@ -83,6 +83,12 @@ export default {
|
|||
selectFile: 'Select a file',
|
||||
copyClipboard: 'Copy on clipboard',
|
||||
salesPerson: 'SalesPerson',
|
||||
jorgep marked this conversation as resolved
alexm
commented
Traducciones duplicadas Traducciones duplicadas
|
||||
code: 'Code',
|
||||
pageTitles: {
|
||||
jorgep
commented
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
alexm
commented
Se usa 7 veces. Deberia estar global. Se usa 7 veces. Deberia estar global.
|
||||
basicData: 'Basic data',
|
||||
log: 'Logs',
|
||||
alexm
commented
Se usa 17 veces, deberia estar global o crear tarea Se usa 17 veces, deberia estar global o crear tarea
jorgep
commented
https://redmine.verdnatura.es/issues/7132
|
||||
},
|
||||
jorgep marked this conversation as resolved
alexm
commented
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
alexm
commented
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: {
|
||||
|
|
|
@ -83,6 +83,12 @@ export default {
|
|||
selectFile: 'Seleccione un fichero',
|
||||
copyClipboard: 'Copiar en portapapeles',
|
||||
salesPerson: 'Comercial',
|
||||
jorgep marked this conversation as resolved
alexm
commented
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: {
|
||||
|
|
|
@ -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
jsegarra
commented
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.
jorgep
commented
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
alexm
commented
Al final un VnRow con un unico elemento se veia bien? Al final un VnRow con un unico elemento se veia bien?
jorgep
commented
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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
la función "te" devuelve un booleano . Si existe true , si no false.
_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?
No entiendo, la abreviatura es de la librería vue-i18n
Es nativo de i18n