forked from verdnatura/salix-front
rest of submodules
This commit is contained in:
parent
8e1f7c24a4
commit
02d8254df9
|
@ -236,6 +236,7 @@ defineExpose({
|
||||||
save,
|
save,
|
||||||
isLoading,
|
isLoading,
|
||||||
hasChanges,
|
hasChanges,
|
||||||
|
reset,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -13,6 +13,10 @@ const $props = defineProps({
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
info: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -74,7 +78,6 @@ const inputRules = [
|
||||||
<template v-if="$slots.prepend" #prepend>
|
<template v-if="$slots.prepend" #prepend>
|
||||||
<slot name="prepend" />
|
<slot name="prepend" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #append>
|
<template #append>
|
||||||
<slot name="append" v-if="$slots.append && !$attrs.disabled" />
|
<slot name="append" v-if="$slots.append && !$attrs.disabled" />
|
||||||
<QIcon
|
<QIcon
|
||||||
|
@ -83,6 +86,11 @@ const inputRules = [
|
||||||
v-if="$slots.append && hover && value && !$attrs.disabled"
|
v-if="$slots.append && hover && value && !$attrs.disabled"
|
||||||
@click="value = null"
|
@click="value = null"
|
||||||
></QIcon>
|
></QIcon>
|
||||||
|
<QIcon v-if="info" name="info">
|
||||||
|
<QTooltip max-width="350px">
|
||||||
|
{{ info }}
|
||||||
|
</QTooltip>
|
||||||
|
</QIcon>
|
||||||
</template>
|
</template>
|
||||||
</QInput>
|
</QInput>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,6 +15,9 @@ const searchBarDataKeys = {
|
||||||
AccountSummary: 'AccountSummary',
|
AccountSummary: 'AccountSummary',
|
||||||
AccountInheritedRoles: 'AccountInheritedRoles',
|
AccountInheritedRoles: 'AccountInheritedRoles',
|
||||||
AccountMailForwarding: 'AccountMailForwarding',
|
AccountMailForwarding: 'AccountMailForwarding',
|
||||||
|
AccountMailAlias: 'AccountMailAlias',
|
||||||
|
AccountPrivileges: 'AccountPrivileges',
|
||||||
|
AccountLog: 'AccountLog',
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<script setup>
|
||||||
|
import VnLog from 'src/components/common/VnLog.vue';
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<VnLog model="User" />
|
||||||
|
</template>
|
|
@ -0,0 +1,187 @@
|
||||||
|
<script setup>
|
||||||
|
import { computed, ref, watch, onMounted, nextTick } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
import VnPaginate from 'components/ui/VnPaginate.vue';
|
||||||
|
import AccountMailAliasCreateForm from './AccountMailAliasCreateForm.vue';
|
||||||
|
|
||||||
|
import { useVnConfirm } from 'composables/useVnConfirm';
|
||||||
|
import { useArrayData } from 'composables/useArrayData';
|
||||||
|
import useNotify from 'src/composables/useNotify.js';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const route = useRoute();
|
||||||
|
const { openConfirmationModal } = useVnConfirm();
|
||||||
|
const { notify } = useNotify();
|
||||||
|
|
||||||
|
const paginateRef = ref(null);
|
||||||
|
const createMailAliasDialogRef = ref(null);
|
||||||
|
|
||||||
|
const arrayData = useArrayData('AccountMailAliases');
|
||||||
|
const store = arrayData.store;
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const hasAccount = ref(false);
|
||||||
|
const data = computed(() => {
|
||||||
|
const dataCopy = store.data;
|
||||||
|
return dataCopy.sort((a, b) => a.alias?.alias.localeCompare(b.alias?.alias));
|
||||||
|
});
|
||||||
|
|
||||||
|
const filter = computed(() => ({
|
||||||
|
where: { account: route.params.id },
|
||||||
|
include: {
|
||||||
|
relation: 'alias',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'alias', 'description'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
const urlPath = 'MailAliasAccounts';
|
||||||
|
|
||||||
|
const columns = computed(() => [
|
||||||
|
{
|
||||||
|
name: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'action',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const fetchAccountExistence = async () => {
|
||||||
|
try {
|
||||||
|
const { data } = await axios.get(`Accounts/${route.params.id}/exists`);
|
||||||
|
return data.exists;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching account existence', error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteMailAlias = async (row) => {
|
||||||
|
try {
|
||||||
|
await axios.delete(`${urlPath}/${row.id}`);
|
||||||
|
fetchMailAliases();
|
||||||
|
notify(t('Unsubscribed from alias!'), 'positive');
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const createMailAlias = async (mailAliasFormData) => {
|
||||||
|
try {
|
||||||
|
await axios.post(urlPath, mailAliasFormData);
|
||||||
|
notify(t('Subscribed to alias!'), 'positive');
|
||||||
|
fetchMailAliases();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchMailAliases = async () => {
|
||||||
|
await nextTick();
|
||||||
|
paginateRef.value.fetch();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getAccountData = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
hasAccount.value = await fetchAccountExistence();
|
||||||
|
if (!hasAccount.value) {
|
||||||
|
loading.value = false;
|
||||||
|
store.data = [];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await fetchMailAliases();
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const openCreateMailAliasForm = () => createMailAliasDialogRef.value.show();
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.params.id,
|
||||||
|
() => {
|
||||||
|
store.url = urlPath;
|
||||||
|
store.filter = filter.value;
|
||||||
|
getAccountData();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onMounted(async () => await getAccountData());
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<QPage class="column items-center q-pa-md">
|
||||||
|
<div class="full-width" style="max-width: 400px">
|
||||||
|
<QSpinner v-if="loading" color="primary" size="md" />
|
||||||
|
<VnPaginate
|
||||||
|
ref="paginateRef"
|
||||||
|
data-key="AccountMailAliases"
|
||||||
|
:filter="filter"
|
||||||
|
:url="urlPath"
|
||||||
|
auto-load
|
||||||
|
>
|
||||||
|
<template #body="{ rows }">
|
||||||
|
<QTable
|
||||||
|
v-if="hasAccount && !loading"
|
||||||
|
:rows="data"
|
||||||
|
:columns="columns"
|
||||||
|
hide-header
|
||||||
|
>
|
||||||
|
<template #body="{ row, rowIndex }">
|
||||||
|
<QTr>
|
||||||
|
<QTd>
|
||||||
|
<div class="column">
|
||||||
|
<span>{{ row.alias?.alias }}</span>
|
||||||
|
<span class="color-vn-label">{{
|
||||||
|
row.alias?.description
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
</QTd>
|
||||||
|
<QTd style="width: 50px !important">
|
||||||
|
<QIcon
|
||||||
|
name="delete"
|
||||||
|
size="sm"
|
||||||
|
class="cursor-pointer"
|
||||||
|
color="primary"
|
||||||
|
@click.stop.prevent="
|
||||||
|
openConfirmationModal(
|
||||||
|
t('User will be removed from alias'),
|
||||||
|
t('¿Seguro que quieres continuar?'),
|
||||||
|
() => deleteMailAlias(row, rows, rowIndex)
|
||||||
|
)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<QTooltip>
|
||||||
|
{{ t('globals.delete') }}
|
||||||
|
</QTooltip>
|
||||||
|
</QIcon>
|
||||||
|
</QTd>
|
||||||
|
</QTr>
|
||||||
|
</template>
|
||||||
|
</QTable>
|
||||||
|
</template>
|
||||||
|
</VnPaginate>
|
||||||
|
<h5 v-if="!hasAccount" class="text-center">
|
||||||
|
{{ t('account.mailForwarding.accountNotEnabled') }}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<QDialog ref="createMailAliasDialogRef">
|
||||||
|
<AccountMailAliasCreateForm @on-submit-create-alias="createMailAlias" />
|
||||||
|
</QDialog>
|
||||||
|
<QPageSticky position="bottom-right" :offset="[18, 18]">
|
||||||
|
<QBtn fab icon="add" color="primary" @click="openCreateMailAliasForm()">
|
||||||
|
<QTooltip>{{ t('warehouses.add') }}</QTooltip>
|
||||||
|
</QBtn>
|
||||||
|
</QPageSticky>
|
||||||
|
</QPage>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<i18n>
|
||||||
|
es:
|
||||||
|
Unsubscribed from alias!: ¡Desuscrito del alias!
|
||||||
|
Subscribed to alias!: ¡Suscrito al alias!
|
||||||
|
User will be removed from alias: El usuario será borrado del alias
|
||||||
|
¿Seguro que quieres continuar?: Are you sure you want to continue?
|
||||||
|
</i18n>
|
|
@ -0,0 +1,51 @@
|
||||||
|
<script setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
import VnRow from 'components/ui/VnRow.vue';
|
||||||
|
import FormPopup from 'components/FormPopup.vue';
|
||||||
|
|
||||||
|
const emit = defineEmits(['onSubmitCreateAlias']);
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const aliasFormData = reactive({
|
||||||
|
mailAlias: null,
|
||||||
|
account: route.params.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
const aliasOptions = ref([]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<FetchData
|
||||||
|
url="MailAliases"
|
||||||
|
:filter="{ fields: ['id', 'alias'], order: 'alias ASC' }"
|
||||||
|
auto-load
|
||||||
|
@on-fetch="(data) => (aliasOptions = data)"
|
||||||
|
/>
|
||||||
|
<FormPopup
|
||||||
|
model="ZoneWarehouse"
|
||||||
|
@on-submit="emit('onSubmitCreateAlias', aliasFormData)"
|
||||||
|
>
|
||||||
|
<template #form-inputs>
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<div class="col">
|
||||||
|
<VnSelect
|
||||||
|
:label="t('account.card.alias')"
|
||||||
|
v-model="aliasFormData.mailAlias"
|
||||||
|
:options="aliasOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="alias"
|
||||||
|
hide-selected
|
||||||
|
:required="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</VnRow>
|
||||||
|
</template>
|
||||||
|
</FormPopup>
|
||||||
|
</template>
|
|
@ -90,16 +90,9 @@ watch(
|
||||||
() => setInitialData()
|
() => setInitialData()
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => await setInitialData());
|
||||||
await setInitialData();
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<FetchData
|
|
||||||
:url="`Accounts/${route.params.id}/exists`"
|
|
||||||
@on-fetch="(data) => (hasAccount = data)"
|
|
||||||
auto-load
|
|
||||||
/>
|
|
||||||
<div class="flex justify-center">
|
<div class="flex justify-center">
|
||||||
<QSpinner v-if="loading" color="primary" size="md" />
|
<QSpinner v-if="loading" color="primary" size="md" />
|
||||||
<QForm
|
<QForm
|
||||||
|
@ -140,7 +133,9 @@ onMounted(async () => {
|
||||||
<VnInput
|
<VnInput
|
||||||
v-model="formData.forwardTo"
|
v-model="formData.forwardTo"
|
||||||
:label="t('account.mailForwarding.forwardingMail')"
|
:label="t('account.mailForwarding.forwardingMail')"
|
||||||
/>
|
:info="t('account.mailForwarding.mailInputInfo')"
|
||||||
|
>
|
||||||
|
</VnInput>
|
||||||
</VnRow>
|
</VnRow>
|
||||||
</QCard>
|
</QCard>
|
||||||
</QForm>
|
</QForm>
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
<script setup>
|
||||||
|
import { ref, watch } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
import VnRow from 'components/ui/VnRow.vue';
|
||||||
|
import FormModel from 'components/FormModel.vue';
|
||||||
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const loading = ref(false);
|
||||||
|
const rolesOptions = ref([]);
|
||||||
|
const formModelRef = ref(null);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.params.id,
|
||||||
|
() => formModelRef.value.reset()
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<FetchData
|
||||||
|
url="VnRoles"
|
||||||
|
:filter="{ fields: ['id', 'name'], order: 'name ASC' }"
|
||||||
|
auto-load
|
||||||
|
@on-fetch="(data) => (rolesOptions = data)"
|
||||||
|
/>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<QSpinner v-if="loading" color="primary" size="md" />
|
||||||
|
<FormModel
|
||||||
|
v-else
|
||||||
|
ref="formModelRef"
|
||||||
|
model="AccountPrivileges"
|
||||||
|
:url="`VnUsers/${route.params.id}`"
|
||||||
|
:url-create="`VnUsers/${route.params.id}/privileges`"
|
||||||
|
auto-load
|
||||||
|
>
|
||||||
|
<template #form="{ data }">
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<div class="col">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="data.hasGrant"
|
||||||
|
:label="t('account.card.nickname')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</VnRow>
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<div class="col">
|
||||||
|
<VnSelect
|
||||||
|
:label="t('account.card.role')"
|
||||||
|
v-model="data.roleFk"
|
||||||
|
:options="rolesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="name"
|
||||||
|
hide-selected
|
||||||
|
:required="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</VnRow>
|
||||||
|
</template>
|
||||||
|
</FormModel>
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -47,6 +47,7 @@ account:
|
||||||
forwardingMail: Dirección de reenvío
|
forwardingMail: Dirección de reenvío
|
||||||
accountNotEnabled: Account not enabled
|
accountNotEnabled: Account not enabled
|
||||||
enableMailForwarding: Enable mail forwarding
|
enableMailForwarding: Enable mail forwarding
|
||||||
|
mailInputInfo: All emails will be forwarded to the specified address.
|
||||||
role:
|
role:
|
||||||
pageTitles:
|
pageTitles:
|
||||||
inheritedRoles: Inherited Roles
|
inheritedRoles: Inherited Roles
|
||||||
|
|
|
@ -56,6 +56,7 @@ account:
|
||||||
forwardingMail: Dirección de reenvío
|
forwardingMail: Dirección de reenvío
|
||||||
accountNotEnabled: Cuenta no habilitada
|
accountNotEnabled: Cuenta no habilitada
|
||||||
enableMailForwarding: Habilitar redirección de correo
|
enableMailForwarding: Habilitar redirección de correo
|
||||||
|
mailInputInfo: Todos los correos serán reenviados a la dirección especificada, no se mantendrá copia de los mismos en el buzón del usuario.
|
||||||
role:
|
role:
|
||||||
pageTitles:
|
pageTitles:
|
||||||
inheritedRoles: Roles heredados
|
inheritedRoles: Roles heredados
|
||||||
|
|
Loading…
Reference in New Issue