create user with role warehouse
This commit is contained in:
@@ -20,14 +20,16 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
onMounted(() => {
|
const authStore = useAuthStore();
|
||||||
|
const companyStore = useCompanyStore();
|
||||||
|
|
||||||
|
onMounted(async() => {
|
||||||
if(props.user) {
|
if(props.user) {
|
||||||
console.log(props.user)
|
userForm.job_role = props.user.job_role;
|
||||||
userForm.name = props.user.first_name;
|
userForm.name = props.user.first_name;
|
||||||
userForm.last_name = props.user.last_name;
|
userForm.last_name = props.user.last_name;
|
||||||
userForm.email = props.user.email;
|
userForm.email = props.user.email;
|
||||||
userForm.phone = props.user.phone;
|
userForm.phone = props.user.phone;
|
||||||
userForm.job_role = props.user.job_role;
|
|
||||||
userForm.categories = props.user.categories;
|
userForm.categories = props.user.categories;
|
||||||
userForm.user_city = props.user.user_city?.map(m =>{
|
userForm.user_city = props.user.user_city?.map(m =>{
|
||||||
return { city_name: m };
|
return { city_name: m };
|
||||||
@@ -39,14 +41,15 @@
|
|||||||
return { meta_value:m };
|
return { meta_value:m };
|
||||||
});
|
});
|
||||||
userForm.user_description = props.user.user_description;
|
userForm.user_description = props.user.user_description;
|
||||||
|
if(props.user.job_role === 'warehouse') {
|
||||||
|
await loadWarehouses();
|
||||||
|
userForm.warehouse = warehouses.value.find(w => w._id === props.user.branch?._id);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Object.assign(userForm, initState);
|
Object.assign(userForm, initState);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const authStore = useAuthStore();
|
|
||||||
const companyStore = useCompanyStore();
|
|
||||||
|
|
||||||
const initState = {
|
const initState = {
|
||||||
name: '',
|
name: '',
|
||||||
last_name: '',
|
last_name: '',
|
||||||
@@ -59,6 +62,7 @@
|
|||||||
user_state: [],
|
user_state: [],
|
||||||
truck_type: [],
|
truck_type: [],
|
||||||
user_description: '',
|
user_description: '',
|
||||||
|
warehouse: null
|
||||||
};
|
};
|
||||||
|
|
||||||
const userForm = reactive({
|
const userForm = reactive({
|
||||||
@@ -70,10 +74,14 @@
|
|||||||
last_name: null,
|
last_name: null,
|
||||||
email: null,
|
email: null,
|
||||||
phone: null,
|
phone: null,
|
||||||
|
job_role: null,
|
||||||
|
warehouse: null
|
||||||
})
|
})
|
||||||
|
|
||||||
const formRef = ref(null);
|
const formRef = ref(null);
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
const loadingWarehouses = ref(false);
|
||||||
|
const warehouses = ref([]);
|
||||||
|
|
||||||
const title = computed(() => {
|
const title = computed(() => {
|
||||||
return (props.user) ? t('labels.editUser') : t('labels.createUser');
|
return (props.user) ? t('labels.editUser') : t('labels.createUser');
|
||||||
@@ -83,7 +91,7 @@
|
|||||||
|
|
||||||
const saveUser = async() => {
|
const saveUser = async() => {
|
||||||
validations()
|
validations()
|
||||||
if(errors.value.name || errors.value.last_name || errors.value.email || errors.value.phone){
|
if(errors.value.name || errors.value.last_name || errors.value.email || errors.value.phone || errors.value.job_role || errors.value.warehouse) {
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
let userData ={
|
let userData ={
|
||||||
@@ -98,13 +106,14 @@
|
|||||||
user_city: userForm.user_city?.length <= 0 ? null : userForm.user_city?.map((e) => e.city_name),
|
user_city: userForm.user_city?.length <= 0 ? null : userForm.user_city?.map((e) => e.city_name),
|
||||||
user_state: userForm.user_state?.length <= 0 ? null : userForm.user_state?.map((e) => e.state_name),
|
user_state: userForm.user_state?.length <= 0 ? null : userForm.user_state?.map((e) => e.state_name),
|
||||||
truck_type: userForm.truck_type?.length <= 0 ? null : userForm.truck_type?.map((e) => e.meta_value),
|
truck_type: userForm.truck_type?.length <= 0 ? null : userForm.truck_type?.map((e) => e.meta_value),
|
||||||
user_description: userForm.user_description
|
user_description: userForm.user_description,
|
||||||
|
branch: userForm.warehouse?._id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const dataUpdate = {
|
const dataUpdate = {
|
||||||
categories: userForm.categories,
|
categories: userForm.categories,
|
||||||
name: userForm.name + ' ' + userForm.last_name
|
name: userForm.name + ' ' + userForm.last_name,
|
||||||
|
branch: userForm.warehouse
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = 'error';
|
let result = 'error';
|
||||||
@@ -141,8 +150,26 @@
|
|||||||
last_name: userForm.last_name.length <= 1 ? t('errors.lastname') : null,
|
last_name: userForm.last_name.length <= 1 ? t('errors.lastname') : null,
|
||||||
email: !validateEmail(userForm.email) ? t('errors.email') : null,
|
email: !validateEmail(userForm.email) ? t('errors.email') : null,
|
||||||
phone: userForm.phone.length < 10 ? t('errors.phone') : null,
|
phone: userForm.phone.length < 10 ? t('errors.phone') : null,
|
||||||
|
job_role: userForm.job_role === '' ? t('errors.required') : null,
|
||||||
|
warehouse: (userForm.job_role == 'warehouse' && userForm.warehouse === null)
|
||||||
|
? t('errors.required')
|
||||||
|
: null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleRoleChange = async () => {
|
||||||
|
if (userForm.job_role === "warehouse") {
|
||||||
|
await loadWarehouses();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadWarehouses = async () => {
|
||||||
|
loadingWarehouses.value = true;
|
||||||
|
warehouses.value = await companyStore.getLocationsLoads('loading');
|
||||||
|
loadingWarehouses.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -194,48 +221,81 @@
|
|||||||
:filled="false"
|
:filled="false"
|
||||||
:error="errors.email"
|
:error="errors.email"
|
||||||
/>
|
/>
|
||||||
<div class="d-flex flex-column">
|
<div
|
||||||
<label class="custom-label" for="role">{{ t('labels.userRole') }}</label>
|
v-if="userForm.job_role !== 'owner'"
|
||||||
|
class="d-flex flex-column"
|
||||||
|
>
|
||||||
|
<label class="custom-label" for="role">{{ t('labels.userRole') }}*</label>
|
||||||
<select
|
<select
|
||||||
class="custom-input-light"
|
class="custom-input-light"
|
||||||
name="role"
|
name="role"
|
||||||
id="role"
|
id="role"
|
||||||
v-model="userForm.job_role"
|
v-model="userForm.job_role"
|
||||||
|
@change="handleRoleChange"
|
||||||
>
|
>
|
||||||
<option disabled value="">-- {{ t('labels.selectedRol') }} --</option>
|
<option disabled value="">-- {{ t('labels.selectedRol') }} --</option>
|
||||||
<!-- <option value="owner">Dueño</option> -->
|
|
||||||
<option value="manager">{{ t('labels.manager') }}</option>
|
<option value="manager">{{ t('labels.manager') }}</option>
|
||||||
<option value="staff">{{ t('labels.staff') }}</option>
|
<option value="staff">{{ t('labels.staff') }}</option>
|
||||||
<option v-if="authStore.user?.permissions === 'role_carrier'" value="driver">{{ t('labels.driver') }}</option>
|
<option
|
||||||
|
v-if="authStore.user?.permissions === 'role_shipper'"
|
||||||
|
value="warehouse"
|
||||||
|
>
|
||||||
|
{{ t('labels.warehouse') }}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
v-if="authStore.user?.permissions === 'role_carrier'"
|
||||||
|
value="driver"
|
||||||
|
>
|
||||||
|
{{ t('labels.driver') }}
|
||||||
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
<span class="error-msg" v-if="errors.job_role">{{ errors.job_role }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4 mt-3">
|
<div v-if="userForm.job_role === 'warehouse'">
|
||||||
<label class="custom-label">{{ t('global.segments') }}</label>
|
<Spiner v-if="loadingWarehouses"/>
|
||||||
<Segments
|
<div class="d-flex flex-column my-4" v-if="!loadingWarehouses">
|
||||||
v-model="userForm.categories"
|
<label class="custom-label" for="locationLoad">{{ t('labels.warehouses') }}*</label>
|
||||||
:multiple="true"
|
<select
|
||||||
/>
|
class="custom-input-light"
|
||||||
|
name="locationLoad"
|
||||||
|
id="locationLoad"
|
||||||
|
v-model="userForm.warehouse"
|
||||||
|
>
|
||||||
|
<option disabled value="null">-- {{ t('labels.warehouseSelect') }} --</option>
|
||||||
|
<option v-for="loc in warehouses" :value="loc">{{ loc.branch_name }}</option>
|
||||||
|
</select>
|
||||||
|
<span class="error-msg" v-if="errors.warehouse">{{ errors.warehouse }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4 mt-3">
|
<div v-else>
|
||||||
<label class="custom-label">{{ t('directory.typeTruck') }}</label>
|
<div class="mb-4 mt-3">
|
||||||
<TruckTypes
|
<label class="custom-label">{{ t('global.segments') }}</label>
|
||||||
v-model="userForm.truck_type"
|
<Segments
|
||||||
:multiple="true"
|
v-model="userForm.categories"
|
||||||
/>
|
:multiple="true"
|
||||||
</div>
|
/>
|
||||||
<div class="mb-4 mt-3">
|
</div>
|
||||||
<label class="custom-label">{{ t('labels.locationLoadState') }}</label>
|
<div class="mb-4 mt-3">
|
||||||
<States
|
<label class="custom-label">{{ t('directory.typeTruck') }}</label>
|
||||||
v-model="userForm.user_state"
|
<TruckTypes
|
||||||
:multiple="true"
|
v-model="userForm.truck_type"
|
||||||
/>
|
:multiple="true"
|
||||||
</div>
|
/>
|
||||||
<div class="mb-4 mt-3">
|
</div>
|
||||||
<label class="custom-label">{{ t('labels.locationLoadCity') }}</label>
|
<div class="mb-4 mt-3">
|
||||||
<Cities
|
<label class="custom-label">{{ t('labels.locationLoadState') }}</label>
|
||||||
v-model="userForm.user_city"
|
<States
|
||||||
:multiple="true"
|
v-model="userForm.user_state"
|
||||||
/>
|
:multiple="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="mb-4 mt-3">
|
||||||
|
<label class="custom-label">{{ t('labels.locationLoadCity') }}</label>
|
||||||
|
<Cities
|
||||||
|
v-model="userForm.user_city"
|
||||||
|
:multiple="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column">
|
<div class="d-flex flex-column">
|
||||||
<label class="custom-label" for="description">{{ t('labels.userInfo') }}</label>
|
<label class="custom-label" for="description">{{ t('labels.userInfo') }}</label>
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
noty.notifications = resp.data;
|
noty.notifications = resp.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
const roleCheck = 'store';
|
const roleCheck = 'warehouse';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const roleCheck = 'store';
|
const roleCheck = 'warehouse';
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -128,7 +128,9 @@
|
|||||||
class="nav-link" :to="{name: 'published-trucks'}">{{ t('global.acceptedOffers') }}</RouterLink>
|
class="nav-link" :to="{name: 'published-trucks'}">{{ t('global.acceptedOffers') }}</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li :class="[route.name === 'calendar' ? 'bg-nav-active' : '']">
|
<li
|
||||||
|
v-if="jobRole !== roleCheck"
|
||||||
|
:class="[route.name === 'calendar' ? 'bg-nav-active' : '']">
|
||||||
<div>
|
<div>
|
||||||
<i class="fa-regular fa-calendar" :class="[route.name === 'calendar' ? 'router-link-active' : '']"></i>
|
<i class="fa-regular fa-calendar" :class="[route.name === 'calendar' ? 'router-link-active' : '']"></i>
|
||||||
<RouterLink
|
<RouterLink
|
||||||
@@ -136,7 +138,10 @@
|
|||||||
class="nav-link" :to="{name: 'calendar'}">{{ t('global.calendar') }}</RouterLink>
|
class="nav-link" :to="{name: 'calendar'}">{{ t('global.calendar') }}</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li :class="[route.name === 'store' ? 'bg-nav-active' : '']">
|
<li
|
||||||
|
v-if="jobRole === roleCheck"
|
||||||
|
:class="[route.name === 'store' ? 'bg-nav-active' : '']"
|
||||||
|
>
|
||||||
<div>
|
<div>
|
||||||
<i class="fa-solid fa-shop-lock" :class="[route.name === 'store' ? 'router-link-active' : '']"></i>
|
<i class="fa-solid fa-shop-lock" :class="[route.name === 'store' ? 'router-link-active' : '']"></i>
|
||||||
<RouterLink
|
<RouterLink
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ export const getTypeUser = (value, locale = 'es') => {
|
|||||||
return (locale == 'es') ? 'Gerente' : 'Manager';
|
return (locale == 'es') ? 'Gerente' : 'Manager';
|
||||||
case 'owner':
|
case 'owner':
|
||||||
return (locale == 'es') ? 'Propietario' : 'Owner';
|
return (locale == 'es') ? 'Propietario' : 'Owner';
|
||||||
|
case 'warehouse':
|
||||||
|
return (locale == 'es') ? 'Bodega' : 'Warehouse';
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return (locale == 'es') ? 'Personal' : 'Staff';
|
return (locale == 'es') ? 'Personal' : 'Staff';
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ const en = {
|
|||||||
completed: 'Offers completed',
|
completed: 'Offers completed',
|
||||||
all: 'All offers',
|
all: 'All offers',
|
||||||
load: 'Load',
|
load: 'Load',
|
||||||
|
warehouse: 'Warehouse',
|
||||||
|
warehouses: 'Warehouses',
|
||||||
|
warehouseSelect: 'Select warehouse',
|
||||||
download: 'Download',
|
download: 'Download',
|
||||||
select: 'Select',
|
select: 'Select',
|
||||||
additionalInformation: 'Additional information',
|
additionalInformation: 'Additional information',
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ const es = {
|
|||||||
vehicle: 'Vehiculo',
|
vehicle: 'Vehiculo',
|
||||||
comment: 'Comentario',
|
comment: 'Comentario',
|
||||||
tons: "Toneladas",
|
tons: "Toneladas",
|
||||||
|
warehouse: 'Bodega',
|
||||||
|
warehouses: 'Bodegas',
|
||||||
|
warehouseSelect: 'Seleccionar bodega',
|
||||||
priceTons: "Precio por toneladas",
|
priceTons: "Precio por toneladas",
|
||||||
tonLoad: "Tonelaje aproximado de carga",
|
tonLoad: "Tonelaje aproximado de carga",
|
||||||
originTruckKm1: "Origen del camión al origin de carga(KM)",
|
originTruckKm1: "Origen del camión al origin de carga(KM)",
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ const router = createRouter({
|
|||||||
name: 'calendar',
|
name: 'calendar',
|
||||||
meta: {
|
meta: {
|
||||||
permissions: ['role_shipper', 'role_carrier'],
|
permissions: ['role_shipper', 'role_carrier'],
|
||||||
roles: ['staff', 'manager', 'owner', 'store']
|
roles: ['staff', 'manager', 'owner']
|
||||||
},
|
},
|
||||||
component: () => import('../views/CalendarView.vue'),
|
component: () => import('../views/CalendarView.vue'),
|
||||||
},
|
},
|
||||||
@@ -147,7 +147,7 @@ const router = createRouter({
|
|||||||
name: 'store',
|
name: 'store',
|
||||||
meta: {
|
meta: {
|
||||||
permissions: ['role_shipper'],
|
permissions: ['role_shipper'],
|
||||||
roles: ['owner', 'manager', 'store']
|
roles: ['warehouse']
|
||||||
},
|
},
|
||||||
component: () => import('../views/store/StoreView.vue'),
|
component: () => import('../views/store/StoreView.vue'),
|
||||||
},
|
},
|
||||||
@@ -220,16 +220,16 @@ router.beforeEach( async(to, from, next) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (permissions && !permissions.includes(permissionUser)) {
|
if (permissions && !permissions.includes(permissionUser)) {
|
||||||
if(role === 'store') { /// Check if user is store
|
if(role === 'warehouse') { /// Check if user is store
|
||||||
return next({name: 'calendar'});
|
return next({name: 'store'});
|
||||||
} else {
|
} else {
|
||||||
return next({name: 'home'});
|
return next({name: 'home'});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(roles && !roles.includes(role)) {
|
if(roles && !roles.includes(role)) {
|
||||||
console.log('tiene perminsos');
|
// return next({name: 'calendar'});
|
||||||
return next({name: 'calendar'});
|
return next({name: 'store'});
|
||||||
}
|
}
|
||||||
|
|
||||||
next();
|
next();
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
const handleConfirmRegister = async() => {
|
const handleConfirmRegister = async() => {
|
||||||
msgError.value = '';
|
msgError.value = '';
|
||||||
msgSuccess.value = '';
|
msgSuccess.value = '';
|
||||||
if(form.code.length < 6) {
|
if(form.code.length < 5) {
|
||||||
msgError.value = t('errors.code');
|
msgError.value = t('errors.code');
|
||||||
clearMessages();
|
clearMessages();
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user