refactor: refs #8316 used VnSection and VnCardBeta #1149

Merged
alexm merged 8 commits from 8316-orderCardWithVnCardBeta into dev 2025-01-15 11:41:36 +00:00
5 changed files with 98 additions and 26 deletions
Showing only changes of commit 9765066493 - Show all commits

View File

@ -346,6 +346,7 @@ globals:
countryFk: Country countryFk: Country
companyFk: Company companyFk: Company
changePass: Change password changePass: Change password
setPass: Set password
deleteConfirmTitle: Delete selected elements deleteConfirmTitle: Delete selected elements
changeState: Change state changeState: Change state
raid: 'Raid {daysInForward} days' raid: 'Raid {daysInForward} days'

View File

@ -348,6 +348,7 @@ globals:
countryFk: País countryFk: País
companyFk: Empresa companyFk: Empresa
changePass: Cambiar contraseña changePass: Cambiar contraseña
setPass: Establecer contraseña
deleteConfirmTitle: Eliminar los elementos seleccionados deleteConfirmTitle: Eliminar los elementos seleccionados
changeState: Cambiar estado changeState: Cambiar estado
raid: 'Redada {daysInForward} días' raid: 'Redada {daysInForward} días'

View File

@ -1,48 +1,56 @@
<script setup> <script setup>
import axios from 'axios'; import axios from 'axios';
import { computed, onMounted, ref } from 'vue'; import { computed, onMounted, ref, toRefs } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useVnConfirm } from 'composables/useVnConfirm'; import { useVnConfirm } from 'composables/useVnConfirm';
import { useRoute } from 'vue-router';
import { useAcl } from 'src/composables/useAcl'; import { useAcl } from 'src/composables/useAcl';
import { useArrayData } from 'src/composables/useArrayData'; import { useArrayData } from 'src/composables/useArrayData';
import { useState } from 'src/composables/useState';
import VnConfirm from 'src/components/ui/VnConfirm.vue'; import VnConfirm from 'src/components/ui/VnConfirm.vue';
import VnChangePassword from 'src/components/common/VnChangePassword.vue';
import useNotify from 'src/composables/useNotify.js';
import useHasAccount from 'src/composables/useHasAccount.js';
import VnInputPassword from 'src/components/common/VnInputPassword.vue'; import VnInputPassword from 'src/components/common/VnInputPassword.vue';
import VnChangePassword from 'src/components/common/VnChangePassword.vue';
import { useQuasar } from 'quasar';
import { useRouter } from 'vue-router';
const $props = defineProps({ const $props = defineProps({
entityId: { hasAccount: {
type: Number, type: Boolean,
default: false,
required: true, required: true,
}, },
}); });
const { t } = useI18n(); const { t } = useI18n();
const { hasAccount } = toRefs($props);
const { openConfirmationModal } = useVnConfirm(); const { openConfirmationModal } = useVnConfirm();
const { notify } = useNotify(); const route = useRoute();
const router = useRouter();
const state = useState();
const user = state.getUser();
const { notify } = useQuasar();
const account = computed(() => useArrayData('AccountId').store.data[0]); const account = computed(() => useArrayData('AccountId').store.data[0]);
account.value.hasAccount = hasAccount.value;
onMounted(async () => { const entityId = computed(() => +route.params.id);
account.value.hasAccount = await useHasAccount($props.entityId); const hasitManagementAccess = ref();
}); const hasSysadminAccess = ref();
async function updateStatusAccount(active) { async function updateStatusAccount(active) {
if (active) { if (active) {
await axios.post(`Accounts`, { id: $props.entityId }); await axios.post(`Accounts`, { id: entityId.value });
} else { } else {
await axios.delete(`Accounts/${$props.entityId}`); await axios.delete(`Accounts/${entityId.value}`);
} }
account.value.hasAccount = active; account.value.hasAccount = active;
const status = active ? 'enable' : 'disable'; const status = active ? 'enable' : 'disable';
notify({ notify({
message: t(`account.card.${status}Account.success`), message: t(`account.card.actions.${status}Account.success`),
type: 'positive', type: 'positive',
}); });
} }
async function updateStatusUser(active) { async function updateStatusUser(active) {
await axios.patch(`VnUsers/${$props.entityId}`, { active }); await axios.patch(`VnUsers/${entityId.value}`, { active });
account.value.active = active; account.value.active = active;
const status = active ? 'activate' : 'deactivate'; const status = active ? 'activate' : 'deactivate';
notify({ notify({
@ -50,6 +58,17 @@ async function updateStatusUser(active) {
type: 'positive', type: 'positive',
}); });
} }
async function deleteAccount() {
const { data } = await axios.delete(`VnUsers/${entityId.value}`);
if (data) {
notify({
message: t('account.card.actions.delete.success'),
type: 'positive',
});
router.push({ name: 'AccountList' });
}
}
const showSyncDialog = ref(false); const showSyncDialog = ref(false);
const syncPassword = ref(null); const syncPassword = ref(null);
const shouldSyncPassword = ref(false); const shouldSyncPassword = ref(false);
@ -64,11 +83,27 @@ async function sync() {
type: 'positive', type: 'positive',
}); });
} }
const askOldPass = ref(false);
const changePassRef = ref();
const onChangePass = (oldPass) => {
askOldPass.value = oldPass;
changePassRef.value.show();
};
onMounted(() => {
hasitManagementAccess.value = useAcl().hasAny([
{ model: 'VnUser', props: 'higherPrivileges', accessType: 'WRITE' },
]);
hasSysadminAccess.value = useAcl().hasAny([
{ model: 'VnUser', props: 'adminUser', accessType: 'WRITE' },
]);
});
</script> </script>
<template> <template>
<VnChangePassword <VnChangePassword
ref="changePassRef" ref="changePassRef"
:ask-old-pass="true" :ask-old-pass="askOldPass"
:submit-fn=" :submit-fn="
async (newPassword, oldPassword) => { async (newPassword, oldPassword) => {
await axios.patch(`Accounts/change-password`, { await axios.patch(`Accounts/change-password`, {
@ -110,18 +145,46 @@ async function sync() {
</template> </template>
</VnConfirm> </VnConfirm>
<QItem <QItem
v-if=" v-if="hasitManagementAccess"
entityId == account.id &&
useAcl().hasAny([{ model: 'Account', props: '*', accessType: 'WRITE' }])
"
v-ripple v-ripple
clickable clickable
@click="$refs.changePassRef.show()" @click="
openConfirmationModal(
t('account.card.actions.disableAccount.title'),
t('account.card.actions.disableAccount.subtitle'),
() => deleteAccount()
)
"
> >
<QItemSection>{{ t('globals.changePass') }}</QItemSection> <QItemSection>{{ t('globals.delete') }}</QItemSection>
</QItem> </QItem>
<QItem <QItem
v-if="account.hasAccount" v-if="hasSysadminAccess"
v-ripple
clickable
@click="user.id === account.id ? onChangePass(true) : onChangePass(false)"
>
<QItemSection v-if="user.id === account.id">
{{ t('globals.changePass') }}
</QItemSection>
<QItemSection v-else>{{ t('globals.setPass') }}</QItemSection>
</QItem>
<QItem
v-if="!account.hasAccount && hasSysadminAccess"
v-ripple
clickable
@click="
openConfirmationModal(
t('account.card.actions.enableAccount.title'),
t('account.card.actions.enableAccount.subtitle'),
() => updateStatusAccount(true)
)
"
>
<QItemSection>{{ t('account.card.actions.enableAccount.name') }}</QItemSection>
</QItem>
<QItem
v-if="account.hasAccount && hasSysadminAccess"
v-ripple v-ripple
clickable clickable
@click=" @click="
@ -136,7 +199,7 @@ async function sync() {
</QItem> </QItem>
<QItem <QItem
v-if="!account.active" v-if="!account.active && hasitManagementAccess"
v-ripple v-ripple
clickable clickable
@click=" @click="
@ -150,7 +213,7 @@ async function sync() {
<QItemSection>{{ t('account.card.actions.activateUser.name') }}</QItemSection> <QItemSection>{{ t('account.card.actions.activateUser.name') }}</QItemSection>
</QItem> </QItem>
<QItem <QItem
v-if="account.active" v-if="account.active && hasitManagementAccess"
v-ripple v-ripple
clickable clickable
@click=" @click="
@ -163,7 +226,12 @@ async function sync() {
> >
<QItemSection>{{ t('account.card.actions.deactivateUser.name') }}</QItemSection> <QItemSection>{{ t('account.card.actions.deactivateUser.name') }}</QItemSection>
</QItem> </QItem>
<QItem v-ripple clickable @click="showSyncDialog = true"> <QItem
v-if="useAcl().hasAny([{ model: 'VnRole', props: '*', accessType: 'WRITE' }])"
v-ripple
clickable
@click="showSyncDialog = true"
>
<QItemSection>{{ t('account.card.actions.sync.name') }}</QItemSection> <QItemSection>{{ t('account.card.actions.sync.name') }}</QItemSection>
</QItem> </QItem>
<QSeparator /> <QSeparator />

View File

@ -58,6 +58,7 @@ lastEntries:
pvp: PVP pvp: PVP
label: Label label: Label
grouping: Grouping grouping: Grouping
packing: Packing
quantity: Quantity quantity: Quantity
cost: Cost cost: Cost
kg: Kg. kg: Kg.

View File

@ -58,6 +58,7 @@ lastEntries:
pvp: PVP pvp: PVP
label: Eti. label: Eti.
grouping: Grouping grouping: Grouping
packing: Packing
quantity: Cantidad quantity: Cantidad
cost: Coste cost: Coste
kg: Kg. kg: Kg.