add: view users of company

This commit is contained in:
Alexandro Uc Santos
2023-12-30 18:04:42 -06:00
parent 25528cae8f
commit b5f6191874
11 changed files with 219 additions and 72 deletions

View File

@@ -176,6 +176,14 @@ td {
border: none; border: none;
} }
.btn-row {
margin-top: 2rem;
display: flex;
flex-direction: row;
justify-content: end;
gap: 1rem;
}
@media (max-width: 1024px) { @media (max-width: 1024px) {
th { th {
font-size: 13px; font-size: 13px;

119
src/components/CardUser.vue Normal file
View File

@@ -0,0 +1,119 @@
<script setup>
import Swal from 'sweetalert2';
import { getDateMonthDay } from '../helpers/date_formats';
defineProps({
user: {
type: Object,
required: true
},
readonly: {
type: Boolean,
required: false,
default: true
}
})
const handleDelete = () => {
Swal.fire({
title: 'Eliminación de usuario!',
text: '¿Estás seguro de eliminar este usuario?',
icon: 'warning',
showCancelButton: true,
cancelButtonColor: "#d33",
confirmButtonText: 'Eliminar',
cancelButtonText: 'Cancelar',
}).then(async(result) => {
if(result.isConfirmed) {
Swal.fire({
title: 'Por favor espere!',
html: 'Elimininando usuario...',// add html attribute if you want or remove
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading()
},
});
let resp = 'success';
setTimeout(() => {
Swal.close()
if(resp !== null) {
Swal.fire({
title: "Usuario eliminado!",
text: "El usuario ha sido eliminado exitosamente.",
icon: "success"
});
} else {
Swal.fire({
title: "No eliminado!",
text: "El usuario no se pudo eliminar, intente más tarde.",
icon: "error"
});
}
}, 5000)
// const resp = await companyStore.deleteBudgetCompany(props.budget._id);
}
});
}
</script>
<template>
<div class="card-fixed flex-column">
<div class="row">
<div class="col-lg-6 col-sm-12">
<p><span>Nombre de usuario:</span> {{user.name}}</p>
<p v-if="user.employee_id"><span class="font-weight-bold mr-1">Número de registro:</span> {{user.employee_id}}</p>
<p><span>Teléfono 1: </span>{{user.phone}}</p>
<p><span>Teléfono 2: </span>{{user.phone2}}</p>
<p><span>Email: </span>{{user.email}}</p>
</div>
<div class="col-lg-6 col-sm-12">
<p><span>Segmento: </span>{{user._categories}}</p>
<p><span>Locaciones de carga por municipio: </span>{{user._user_city}}</p>
<p><span>Locaciones de carga por estado: </span>{{user._user_state}}</p>
<p v-if="user.company.truck_type"><span>Tipos de transporte que utiliza: </span> {{user._truck_types}}</p>
<p ><span>Información adicional del usuario: </span> {{user.user_description}}</p>
<p><span>Miembro desde: </span>{{getDateMonthDay(user.createdAt)}}</p>
<p ><span>Tipo de afiliación: </span> {{user.company.membership}}</p>
<p><span>Rol del usuario: </span>{{user.job_role}}</p>
</div>
</div>
<div class="btn-row" v-if="readonly === false">
<button
class="btn-primary-sm radius-sm"
data-toggle="modal"
data-target="#editcompanymodal"
><i class="fa-solid fa-pen-to-square"></i> Editar</button>
<button
class="btn btn-dark radius-sm"
@click="handleDelete"
><i class="fa-solid fa-trash"></i> Eliminar</button>
</div>
</div>
</template>
<style scoped>
p {
font-size: 1rem;
font-weight: 400;
color: #323032;
}
p span {
font-weight: 700;
}
@media (max-width: 768px) {
p {
font-size: 0.9rem;
font-weight: 400;
color: #323032;
}
p span {
font-weight: 700;
}
}
</style>

View File

@@ -7,13 +7,14 @@
const auth = useAuthStore(); const auth = useAuthStore();
const handleLogout = () => { const handleLogout = () => {
auth.$patch({ // auth.$patch({
sesion: '', // sesion: '',
token: '', // token: '',
user: {}, // user: {},
}); // });
localStorage.removeItem('session'); // localStorage.removeItem('session');
router.push({name: 'login'}); // router.push({name: 'login'});
auth.logout();
} }
</script> </script>

View File

@@ -17,19 +17,13 @@
const loading = ref(false); const loading = ref(false);
const msgError = ref(''); const msgError = ref('');
const msgSuccess = ref('');
const companyCategories = ref([]); const companyCategories = ref([]);
const companyStates = ref([]); const companyStates = ref([]);
const companyCity = ref([]); const companyCity = ref([]);
const companyTruckType = ref([]); const companyTruckType = ref([]);
onMounted(() => { onMounted(() => {
console.log('EditCompanyModal');
console.log(companyStore.company)
if(companyStore.company){ if(companyStore.company){
// companyCategories.value = companyStore.company.categories.map(m =>{
// return { name: m.name };
// });
companyCategories.value = companyStore.company.categories; companyCategories.value = companyStore.company.categories;
} }
if(companyStore.company){ if(companyStore.company){

View File

@@ -15,8 +15,18 @@ export const getCompany = async(companyId) => {
export const updateCompany = async(companyId, formData) => { export const updateCompany = async(companyId, formData) => {
try { try {
const endpoint = `/companies/${companyId}`; const endpoint = `/companies/${companyId}`;
console.log(endpoint);
const {data} = await api.patch(endpoint, formData); const {data} = await api.patch(endpoint, formData);
return data;
} catch (error) {
console.log(error);
return null;
}
}
export const getUsers = async(companyId) => {
try {
const endpoint = `/users?company=${companyId}`;
const {data} = await api.get(endpoint);
console.log(data); console.log(data);
return data; return data;
} catch (error) { } catch (error) {
@@ -29,7 +39,7 @@ export const getBudgets = async(filter) => {
try { try {
const endpoint = `/budgets/${filter}`; const endpoint = `/budgets/${filter}`;
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
console.log(data); // console.log(data);
return data; return data;
} catch (error) { } catch (error) {
console.log(error); console.log(error);

View File

@@ -52,15 +52,16 @@ export const useAuthStore = defineStore('auth', () => {
}); });
const logout = () => { const logout = () => {
console.log('logoo....');
localStorage.removeItem('session');
localStorage.removeItem('access');
localStorage.removeItem('id');
company.clear();
router.push({name: 'login'});
sesion.value = ''; sesion.value = '';
token.value = ''; token.value = '';
company.clear();
user.value = null; user.value = null;
console.log(company.company);
localStorage.removeItem('access');
localStorage.removeItem('id');
localStorage.removeItem('session');
router.push({name: 'login'});
} }
return { return {

View File

@@ -1,27 +1,41 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { ref } from "vue"; import { ref } from "vue";
import { getBudgets, getCompany, updateBudget, updateCompany, deleteBudget, createBudget } from "../services/company"; import { getBudgets, getCompany, updateBudget, updateCompany, deleteBudget, createBudget, getUsers } from "../services/company";
import api from "../lib/axios"; import api from "../lib/axios";
export const useCompanyStore = defineStore('company', () => { export const useCompanyStore = defineStore('company', () => {
const companyid = localStorage.getItem('id');
const company = ref(null) const company = ref(null)
const users = ref([]);
const budgets = ref([]); const budgets = ref([]);
const proposals = ref([]) const proposals = ref([])
const loading = ref(false); const loading = ref(false);
const getCompanyData = async() => { const getCompanyData = async() => {
const companyId = localStorage.getItem('id');
loading.value = true; loading.value = true;
if(!company.value) { if(!company.value) {
loading.value = true; loading.value = true;
const resp = await getCompany(companyid); const resp = await getCompany(companyId);
console.log(resp); console.log(resp);
company.value = resp; company.value = resp;
} }
loading.value = false; loading.value = false;
} }
const getUsersCompany = async() => {
const companyId = localStorage.getItem('id');
if(users.value.length <= 0) {
const resp = await getUsers(companyId);
console.log(resp);
if(resp !== null && resp.total > 0) {
users.value = resp.data;
} else {
users.value = [];
}
}
}
const editCompany = async(formData) => { const editCompany = async(formData) => {
const data = await updateCompany(company.value._id, formData); const data = await updateCompany(company.value._id, formData);
if(data === null) { if(data === null) {
@@ -32,14 +46,19 @@ export const useCompanyStore = defineStore('company', () => {
...formData, ...formData,
}; };
console.log(company.value);
return 'success'; return 'success';
} }
} }
const clear = () => { const clear = () => {
company.value = null; company.value = null;
companyid = null; // companyid = null;
loading.value = false;
}
const $reset = () => {
company.value = null;
// companyid = null;
loading.value = false; loading.value = false;
} }
@@ -47,8 +66,9 @@ export const useCompanyStore = defineStore('company', () => {
///loads?company=64fa70c130d2650011ac4f3a&status[$ne]=Closed,posted_by_name[$regex]=ju&posted_by_name[$options]=i ///loads?company=64fa70c130d2650011ac4f3a&status[$ne]=Closed,posted_by_name[$regex]=ju&posted_by_name[$options]=i
const getProposalsCompany = async() => { const getProposalsCompany = async() => {
const companyId = localStorage.getItem('id');
try { try {
const endpoint = `/proposals?carrier=${companyid}`; const endpoint = `/proposals?carrier=${companyId}`;
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
proposals.value = data.data; proposals.value = data.data;
console.log(data); console.log(data);
@@ -137,12 +157,15 @@ export const useCompanyStore = defineStore('company', () => {
getCompanyData, getCompanyData,
getProposalsCompany, getProposalsCompany,
getBudgetsCompany, getBudgetsCompany,
getUsersCompany,
editCompany, editCompany,
updateBudgetCompany, updateBudgetCompany,
createBudgetCompany, createBudgetCompany,
deleteBudgetCompany, deleteBudgetCompany,
budgets, budgets,
users,
clear, clear,
$reset,
loading, loading,
proposals, proposals,
company, company,

View File

@@ -42,6 +42,7 @@
localStorage.setItem('session', resp.data.session_token); localStorage.setItem('session', resp.data.session_token);
localStorage.setItem('access', resp.data.accessToken); localStorage.setItem('access', resp.data.accessToken);
localStorage.setItem('id', resp.data.user.company); localStorage.setItem('id', resp.data.user.company);
console.log('id', resp.data.user.company)
router.push({name: 'home'}); router.push({name: 'home'});
auth.$patch({ auth.$patch({
sesion: resp.data.session_token, sesion: resp.data.session_token,

View File

@@ -106,7 +106,7 @@
} }
.item-company { .item-company {
margin-bottom: 8px; margin-bottom: 1rem;
font-size: 1.2rem; font-size: 1.2rem;
color: #323030; color: #323030;
/* font-weight: bold; */ /* font-weight: bold; */

View File

@@ -2,8 +2,8 @@
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import Spiner from '../components/ui/Spiner.vue'; import Spiner from '../components/ui/Spiner.vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { getDateMonthDay } from '../helpers/date_formats';
import useDirectory from '../composables/useDirectory'; import useDirectory from '../composables/useDirectory';
import CardUser from '../components/CardUser.vue';
const {loading, users, getUsersData} = useDirectory(); const {loading, users, getUsersData} = useDirectory();
@@ -26,51 +26,14 @@
<img src="/images/logo.png" alt="logo" width="100"> <img src="/images/logo.png" alt="logo" width="100">
<h2 class="title">No hay registros</h2> <h2 class="title">No hay registros</h2>
</div> </div>
<div class="card-fixed flex-column" v-for="user in users"> <CardUser
<div class="row"> v-for="user in users"
<div class="col-lg-6 col-sm-12"> :user="user"
<p><span>Nombre de usuario:</span> {{user.name}}</p> :readonly="true"
<p v-if="user.employee_id"><span class="font-weight-bold mr-1">Número de registro:</span> {{user.employee_id}}</p> />
<p><span>Teléfono 1: </span>{{user.phone}}</p>
<p><span>Teléfono 2: </span>{{user.phone2}}</p>
<p><span>Email: </span>{{user.email}}</p>
</div>
<div class="col-lg-6 col-sm-12">
<p><span>Segmento: </span>{{user._categories}}</p>
<p><span>Locaciones de carga por municipio: </span>{{user._user_city}}</p>
<p><span>Locaciones de carga por estado: </span>{{user._user_state}}</p>
<p v-if="user.company.truck_type"><span>Tipos de transporte que utiliza: </span> {{user._truck_types}}</p>
<p ><span>Información adicional del embarcador: </span> {{user.user_description}}</p>
<p><span>Miembro desde: </span>{{getDateMonthDay(user.createdAt)}}</p>
<p ><span>Tipo de afiliación: </span> {{user.company.membership}}</p>
<p><span>Rol del usuario: </span>{{user.job_role}}</p>
</div>
</div>
</div>
</div> </div>
</template> </template>
<style scoped> <style scoped>
p {
font-size: 1rem;
font-weight: 400;
color: #323032;
}
p span {
font-weight: 700;
}
@media (max-width: 768px) {
p {
font-size: 0.9rem;
font-weight: 400;
color: #323032;
}
p span {
font-weight: 700;
}
}
</style> </style>

View File

@@ -1,10 +1,37 @@
<script setup> <script setup>
import { onMounted, ref } from 'vue';
import Spiner from '../components/ui/Spiner.vue';
import CardUser from '../components/CardUser.vue';
import { useCompanyStore } from '../stores/company';
const companyStore = useCompanyStore();
onMounted(() => {
getInitData();
});
const getInitData = async() => {
console.log('callll')
loading.value = true;
await companyStore.getUsersCompany();
loading.value = false;
}
const loading = ref(false);
</script> </script>
<template> <template>
<div> <div>
<h2 class="title">Usuarios</h2> <h2 class="title mb-4">Usuarios</h2>
<Spiner v-if="loading"/>
<div v-else>
<CardUser
v-for="user in companyStore.users"
:user="user"
:readonly="false"
/>
</div>
</div> </div>
</template> </template>