Merge branch 'dev' into performance_mixins
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Jorge Penadés 2024-12-09 11:37:52 +00:00
commit f16c45b01a
12 changed files with 135 additions and 27 deletions

6
Jenkinsfile vendored
View File

@ -4,7 +4,8 @@ def PROTECTED_BRANCH
def BRANCH_ENV = [
test: 'test',
master: 'production'
master: 'production',
beta: 'production'
]
node {
@ -15,7 +16,8 @@ node {
PROTECTED_BRANCH = [
'dev',
'test',
'master'
'master',
'beta'
].contains(env.BRANCH_NAME)
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables

View File

@ -2,7 +2,7 @@
import CreateNewPostcode from 'src/components/CreateNewPostcodeForm.vue';
import VnSelectDialog from 'components/common/VnSelectDialog.vue';
import { useI18n } from 'vue-i18n';
import { ref } from 'vue';
import { computed } from 'vue';
import { useAttrs } from 'vue';
import { useRequired } from 'src/composables/useRequired';
const { t } = useI18n();
@ -43,7 +43,7 @@ const formatLocation = (obj, properties) => {
return filteredParts.join(', ');
};
const modelValue = ref(
const modelValue = computed(() =>
props.location ? formatLocation(props.location, locationProperties) : null
);

View File

@ -78,7 +78,7 @@ const userParams = ref({});
defineExpose({ search, sanitizer, params: userParams });
onMounted(() => {
userParams.value = $props.modelValue ?? {};
if (!userParams.value) userParams.value = $props.modelValue ?? {};
emit('init', { params: userParams.value });
});
@ -104,7 +104,8 @@ watch(
watch(
() => arrayData.store.userParams,
(val, oldValue) => (val || oldValue) && setUserParams(val)
(val, oldValue) => (val || oldValue) && setUserParams(val),
{ immediate: true }
);
watch(

View File

@ -331,6 +331,7 @@ globals:
fi: FI
myTeam: My team
departmentFk: Department
countryFk: Country
changePass: Change password
deleteConfirmTitle: Delete selected elements
changeState: Change state

View File

@ -335,6 +335,7 @@ globals:
SSN: NSS
fi: NIF
myTeam: Mi equipo
countryFk: País
changePass: Cambiar contraseña
deleteConfirmTitle: Eliminar los elementos seleccionados
changeState: Cambiar estado

View File

@ -7,6 +7,7 @@ import AccountSummary from './Card/AccountSummary.vue';
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
import AccountFilter from './AccountFilter.vue';
import RightMenu from 'src/components/common/RightMenu.vue';
import VnInput from 'src/components/common/VnInput.vue';
const { t } = useI18n();
const { viewSummary } = useSummaryDialog();
const tableRef = ref();
@ -22,10 +23,27 @@ const columns = computed(() => [
field: 'id',
cardVisible: true,
},
{
align: 'left',
name: 'name',
label: t('Name'),
component: 'input',
columnField: {
component: null,
},
cardVisible: true,
create: true,
},
{
align: 'left',
name: 'roleFk',
label: t('role'),
label: t('Role'),
component: 'select',
attrs: {
url: 'VnRoles',
optionValue: 'id',
optionLabel: 'name',
},
columnFilter: {
component: 'select',
name: 'roleFk',
@ -35,7 +53,11 @@ const columns = computed(() => [
optionLabel: 'name',
},
},
columnField: {
component: null,
},
format: ({ role }, dashIfEmpty) => dashIfEmpty(role?.name),
create: true,
},
{
align: 'left',
@ -51,20 +73,32 @@ const columns = computed(() => [
},
{
align: 'left',
name: 'name',
label: t('Name'),
name: 'email',
label: t('Email'),
component: 'input',
columnField: {
component: null,
},
cardVisible: true,
create: true,
visible: false,
},
{
align: 'left',
name: 'email',
label: t('email'),
component: 'input',
name: 'password',
label: t('Password'),
columnField: {
component: null,
},
attrs: {},
required: true,
visible: false,
},
{
align: 'left',
name: 'active',
label: t('Active'),
component: 'checkbox',
create: true,
visible: false,
},
@ -101,7 +135,6 @@ const exprBuilder = (param, value) => {
}
};
</script>
<template>
<VnSearchbar
data-key="AccountList"
@ -119,6 +152,12 @@ const exprBuilder = (param, value) => {
ref="tableRef"
data-key="AccountList"
url="VnUsers/preview"
:create="{
urlCreate: 'VnUsers',
title: t('Create user'),
onDataSaved: ({ id }) => tableRef.redirect(id),
formInitialData: {},
}"
:filter="filter"
order="id DESC"
:columns="columns"
@ -127,7 +166,19 @@ const exprBuilder = (param, value) => {
:use-model="true"
:right-search="false"
auto-load
>
<template #more-create-dialog="{ data }">
<QCardSection>
<VnInput
:label="t('Password')"
v-model="data.password"
type="password"
:required="true"
autocomplete="new-password"
/>
</QCardSection>
</template>
</VnTable>
</template>
<i18n>
@ -135,4 +186,7 @@ const exprBuilder = (param, value) => {
Id: Id
Nickname: Nickname
Name: Nombre
Password: Contraseña
Active: Activo
Role: Rol
</i18n>

View File

@ -29,7 +29,8 @@ async function hasCustomerRole() {
:filter="filter"
model="customer"
:mapper="
({ active, name, email }) => {
({ account }) => {
const { name, email, active } = account;
return {
active,
name,

View File

@ -52,7 +52,9 @@ const columns = computed(() => [
label: t('invoiceOutList.tableVisibleColumns.id'),
chip: { condition: () => true },
isId: true,
columnFilter: { name: 'search' },
columnFilter: {
name: 'id',
},
},
{
align: 'left',
@ -84,8 +86,15 @@ const columns = computed(() => [
label: t('globals.client'),
cardVisible: true,
component: 'select',
attrs: { url: 'Clients', fields: ['id', 'name'] },
columnField: { component: null },
attrs: {
url: 'Clients',
fields: ['id', 'socialName'],
optionLabel: 'socialName',
optionValue: 'id',
},
columnField: {
component: null,
},
},
{
align: 'left',

View File

@ -59,7 +59,11 @@ const getLocale = (label) => {
</template>
<template #customTags="{ params, searchFn, formatFn }">
<VnFilterPanelChip
v-if="params.scopeDays !== null"
v-if="
params.scopeDays !== undefined ||
params.scopeDays !== '' ||
params.scopeDays !== null
"
removable
@remove="handleScopeDays(params, null, searchFn)"
>
@ -197,6 +201,18 @@ const getLocale = (label) => {
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnSelect
outlined
dense
rounded
:label="t('globals.params.countryFk')"
v-model="params.countryFk"
url="Countries"
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnSelect

View File

@ -770,7 +770,7 @@ watch(
</template>
<template #column-item="{ row }">
<div class="row column full-width justify-between items-start">
{{ row?.item?.name }}
{{ row?.concept }}
<div v-if="row?.item?.subName" class="subName">
{{ row?.item?.subName.toUpperCase() }}
</div>

View File

@ -57,7 +57,7 @@ const travelKgPercentages = ref([]);
const tableColumnComponents = {
id: {
component: QBtn,
attrs: { flat: true, color: 'primary' },
attrs: { flat: true, color: 'primary', dense: true },
},
cargoSupplierNickname: {
component: QBtn,
@ -178,6 +178,7 @@ const columns = computed(() => [
align: 'left',
showValue: false,
sortable: true,
style: 'min-width: 170px;',
},
{
label: t('globals.packages'),
@ -237,7 +238,7 @@ const columns = computed(() => [
format: (value) => toDate(value),
},
{
label: t('globals.wareHhuseIn'),
label: t('globals.warehouseIn'),
field: 'warehouseInName',
name: 'warehouseInName',
align: 'left',
@ -506,7 +507,7 @@ const getColor = (percentage) => {
:key="col.name"
:props="props"
@click="stopEventPropagation($event, col)"
auto-width
:style="col.style"
>
<component
:is="tableColumnComponents[col.name].component"
@ -581,7 +582,7 @@ const getColor = (percentage) => {
}"
>
<QTd>
<QBtn flat class="link">{{ entry.id }} </QBtn>
<QBtn dense flat class="link">{{ entry.id }} </QBtn>
<EntryDescriptorProxy :id="entry.id" />
</QTd>
<QTd>
@ -637,6 +638,18 @@ const getColor = (percentage) => {
:deep(.q-table) {
border-collapse: collapse;
th {
padding: 0;
}
tbody tr td {
&:nth-child(1) {
max-width: 65px;
}
&:nth-child(4) {
padding: 0;
}
}
}
.q-td :deep(input) {
@ -684,7 +697,6 @@ const getColor = (percentage) => {
width: max-content;
}
</style>
<i18n>
en:
searchExtraCommunity: Search for extra community shipping

View File

@ -44,7 +44,18 @@ vi.mock('vue-router', () => ({
vi.mock('axios');
vi.spyOn(useValidator, 'useValidator').mockImplementation(() => {
return { validate: vi.fn() };
return {
validate: vi.fn(),
validations: () => ({
format: vi.fn(),
presence: vi.fn(),
required: vi.fn(),
length: vi.fn(),
numericality: vi.fn(),
min: vi.fn(),
custom: vi.fn(),
}),
};
});
class FormDataMock {