UsuariosAdminOld.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. <template>
  2. <div>
  3. <ol class="breadcrumb mb-2">
  4. <li class="breadcrumb-item">
  5. <router-link :to="{name:'homeAdmin'}">Inicio</router-link>
  6. </li>
  7. <li class="breadcrumb-item active">Usuarios</li>
  8. </ol>
  9. <div class="row">
  10. <div class="col-12">
  11. <div class="card">
  12. <div class="card-body">
  13. <!-- Manejo de error -->
  14. <div class="alert alert-danger alert-rounded" v-if="strError.length != 0">
  15. <button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
  16. <i class="material-icons icon-align">report_problem</i>
  17. {{ strError }}
  18. </div>
  19. <h4 class="card-title">Usuarios</h4>
  20. <span
  21. class="text-dark"
  22. >En esta página se pueden visualizar una lista de usuarios disponible.</span>
  23. <div class="col-sm-12 mt-3">
  24. <form class="form-material">
  25. <input
  26. type="text"
  27. class="form-control col-sm-3 mb-4 float-left"
  28. placeholder="Buscar..."
  29. v-model="buscar"
  30. />
  31. </form>
  32. <b-table
  33. responsive
  34. hover
  35. table-bordered
  36. show-empty
  37. :fields="titulos"
  38. :items="usuarios"
  39. :busy.sync="loading"
  40. :current-page="currentPage"
  41. :per-page="perPage"
  42. :filter="buscar"
  43. @filtered="onFiltered"
  44. >
  45. <!-- Mensaje cuando no hay registros -->
  46. <template v-slot:empty="scope">
  47. <p class="text-center">No se encontraron usuarios para mostrar.</p>
  48. </template>
  49. <!-- Mensaje cuando no se encuentra ningun registro en la busqueda -->
  50. <template v-slot:emptyfiltered="scope">
  51. <p class="text-center">Su búsqueda no arrojó resultados.</p>
  52. </template>
  53. <!-- columna Perfil -->
  54. <template v-slot:cell(IDPERFIL)="data">
  55. <label
  56. class="label"
  57. :class="[data.item.IDPERFIL=='ADMINISTRADOR' ?'label-primary' :'label-info']"
  58. >{{ data.item.IDPERFIL }}</label>
  59. </template>
  60. <!-- columna activo -->
  61. <template v-slot:cell(ACTI)="data">
  62. <label class="label label-primary" v-if="data.item.ACTI == null">No definido</label>
  63. <label
  64. class="label"
  65. v-else
  66. :class="[data.item.ACTI ==='S'?'label-success':'label-danger']"
  67. >{{ (data.item.ACTI ==='S')? 'Activado':'Desactivado' }}</label>
  68. </template>
  69. <!-- Loading al extraer los datos -->
  70. <template v-slot:table-busy>
  71. <div class="text-center text-danger my-2">
  72. <b-spinner variant="danger" class="align-middle"></b-spinner>
  73. <p>Cargando...</p>
  74. </div>
  75. </template>
  76. <!-- Integrar columna de acciones a la tabla -->
  77. <template v-slot:cell(actions)="row">
  78. <i
  79. class="material-icons"
  80. data-toggle="tooltip"
  81. title="Ver Usuario"
  82. style="color:#f42849;cursor:pointer"
  83. @click="infoModalEvento(row.item, $event.target)"
  84. >remove_red_eye</i>
  85. <i
  86. class="material-icons"
  87. data-toggle="tooltip"
  88. title="Permisos"
  89. style="color:#f42849;cursor:pointer"
  90. @click="permisosModalEvento(row.item, $event.target)"
  91. v-if="row.item.ACTI !== null && row.item.ACTI !== 'N' "
  92. >lock</i>
  93. </template>
  94. </b-table>
  95. <!-- Paginación de la tabla -->
  96. <b-pagination
  97. v-model="currentPage"
  98. :total-rows="totalRows"
  99. :per-page="perPage"
  100. align="center"
  101. size="md"
  102. class="my-0"
  103. v-show="usuarios.length > 0"
  104. ></b-pagination>
  105. <!-- Modal para mostrar información del usuario -->
  106. <b-modal
  107. hide-backdrop
  108. content-class="shadow"
  109. :id="infoModal.id"
  110. :title="infoModal.title"
  111. size="lg"
  112. >
  113. <div class="row">
  114. <div class="col-lg-12">
  115. <div class="card card-outline-secondary">
  116. <div class="card-body">
  117. <form class="form-horizontal" role="form">
  118. <div class="form-body">
  119. <div class="row">
  120. <div class="col-lg-6 col-md-12">
  121. <div class="form-group row">
  122. <label
  123. class="control-label text-right col-md-4 col-4 font-bold"
  124. >Nombre:</label>
  125. <div class="col-md-8 col-8">
  126. <p class="form-control-static">{{ infoModal.content.IDUSNOMBRE}}</p>
  127. </div>
  128. </div>
  129. </div>
  130. <!--/span-->
  131. <div class="col-lg-6 col-md-12">
  132. <div class="form-group row">
  133. <label
  134. class="control-label text-right col-md-4 col-4 font-bold"
  135. >ID Usuario:</label>
  136. <div class="col-md-8 col-4">
  137. <p class="form-control-static">{{ infoModal.content.IDUS}}</p>
  138. </div>
  139. </div>
  140. </div>
  141. <!--/span-->
  142. </div>
  143. <!--/row-->
  144. <div class="row">
  145. <div class="col-lg-6 col-md-12">
  146. <div class="form-group row">
  147. <label
  148. class="control-label text-right col-md-4 col-4 font-bold"
  149. >Perfil:</label>
  150. <div class="col-md-8 col-8">
  151. <p class="form-control-static">{{ infoModal.content.IDPERFIL}}</p>
  152. </div>
  153. </div>
  154. </div>
  155. <!--/span-->
  156. <div class="col-lg-6 col-md-12">
  157. <div class="form-group row">
  158. <label
  159. class="control-label text-right col-md-4 col-4 font-bold"
  160. >Activo:</label>
  161. <div class="col-md-8 col-8">
  162. <p v-if="infoModal.content.ACTI == null">
  163. <label class="label label-warning mr-2">No definido</label>
  164. <a
  165. href="#"
  166. @click.prevent="cambiarEstadoUsuarioEvento(infoModal.content.IDUS,'activar', $event.target)"
  167. >Activar</a>
  168. </p>
  169. <p v-else>
  170. <b-form-checkbox
  171. v-model="userActive"
  172. value="SI"
  173. unchecked-value="NO"
  174. :disabled="infoModal.content.ACTI !== null && infoModal.content.PERM === null ? true: false"
  175. switch
  176. >
  177. <label
  178. class="label"
  179. :class="[userActive === 'SI' ? 'label-success' :'label-danger']"
  180. >{{ userActive }}</label>
  181. </b-form-checkbox>
  182. </p>
  183. </div>
  184. </div>
  185. </div>
  186. <!--/span-->
  187. </div>
  188. <p
  189. class="text-center"
  190. v-show="infoModal.content.ACTI !== null && infoModal.content.PERM === null"
  191. >
  192. Este Usuario no tiene permisos asignados,
  193. <a
  194. href="#"
  195. @click.prevent="permisosModalEvento(infoModal.content, $event.target)"
  196. >asignar permisos</a>.
  197. <br />
  198. <i>Mientras no tenga permisos asignados no podrá iniciar sesión en el Portal de Quiosco.</i>
  199. </p>
  200. </div>
  201. </form>
  202. </div>
  203. </div>
  204. </div>
  205. </div>
  206. <template v-slot:modal-footer="{ hide }">
  207. <div class="w-100">
  208. <button
  209. id="aceptarInfo"
  210. type="button"
  211. class="btn btn-danger float-right"
  212. @click="hide('forget')"
  213. >Aceptar</button>
  214. <button
  215. v-show="infoModal.content.ACTI == 'S' && userActive === 'NO'"
  216. id="guardar"
  217. type="button"
  218. class="btn btn-outline-danger mr-1 float-right"
  219. @click="cambiarEstadoUsuarioEvento(infoModal.content.IDUS,'desactivar', $event.target)"
  220. >Guardar</button>
  221. </div>
  222. </template>
  223. </b-modal>
  224. <!-- end info modal -->
  225. <!-- start activar/desactivar usuario modal -->
  226. <b-modal
  227. content-class="shadow"
  228. :id="cambiarEstadoUsuarioModal.id"
  229. :title="cambiarEstadoUsuarioModal.title"
  230. size="sm"
  231. ok-only
  232. >
  233. <p class="my-1" v-html="cambiarEstadoUsuarioModal.msg"></p>
  234. <template v-slot:modal-footer="{ hide }">
  235. <div class="w-100">
  236. <button
  237. id="cambiarEstadoUsuario"
  238. type="button"
  239. class="btn btn-danger float-right"
  240. @click="cambiarEstadoUsuarioModal.estado === 'activar'
  241. ? cambiarEstadoUser('activar'): cambiarEstadoUser('desactivar')"
  242. >
  243. <span v-if="!loading">
  244. {{ cambiarEstadoUsuarioModal.estado === 'activar'
  245. ? 'Activar': 'Desactivar'}}
  246. </span>
  247. <span
  248. class="spinner-border spinner-grow-sm"
  249. role="status"
  250. aria-hidden="true"
  251. style="color:white"
  252. v-if="loading"
  253. ></span>
  254. </button>
  255. <button
  256. type="button"
  257. class="btn btn-secondary mr-2 float-right"
  258. @click="hide('forget')"
  259. >Cancelar</button>
  260. </div>
  261. </template>
  262. </b-modal>
  263. <!-- end activar/desactivar usuario modal -->
  264. <!-- Modal permisos -->
  265. <b-modal
  266. hide-backdrop
  267. content-class="shadow"
  268. :id="permisosModal.id"
  269. :title="permisosModal.title"
  270. size="lg"
  271. >
  272. <div class="row">
  273. <div class="col-sm-12">
  274. <label class="float-left">
  275. <b>USUARIO:</b>
  276. {{ permisosModal.content.IDUSNOMBRE}}
  277. </label>
  278. <!-- <label class="float-right"> -->
  279. <!-- <h5 class="text-left">Permisos</h5> -->
  280. <!-- </label> -->
  281. </div>
  282. </div>
  283. <div class="row">
  284. <div class="col-lg-8 col-sm-12 col-12">
  285. <div class="navigation-filter">
  286. <input
  287. class="form-control mb-2"
  288. type="text"
  289. v-model="treeFilter"
  290. value
  291. placeholder="Buscar..."
  292. />
  293. </div>
  294. <tree
  295. v-if="treeData"
  296. :data="treeData"
  297. @node:selected="onSelect"
  298. :options="optsTree"
  299. :filter="treeFilter"
  300. ref="tree"
  301. class="card card-outline-secondary"
  302. >
  303. <span class="tree-scope" slot-scope="{ node }">
  304. <template v-if="!node.hasChildren()">
  305. <i class="material-icons icon-align" style="color:#f42849">folder_open</i>
  306. {{ node.text }}
  307. </template>
  308. <template v-else>
  309. <i
  310. class="material-icons icon-align"
  311. style="color:#f42849"
  312. >{{ node.expanded() ? 'folder' : 'create_new_folder' }}</i>
  313. {{ node.text }}
  314. </template>
  315. </span>
  316. </tree>
  317. </div>
  318. <div
  319. class="col-lg-4 col-sm-12 col-12 card card-outline-secondary pb-4"
  320. v-if="selectedNode"
  321. >
  322. <h6 class="mt-3 text-center">Establecer permisos</h6>
  323. <!-- checkbox permisos -->
  324. <div class="m-auto p-3 card card-outline-secondary">
  325. <b-form-radio
  326. v-model="permisos.tipo"
  327. name="permisoSinAcceso"
  328. @input="cambiarPermisoRadio"
  329. value="Sin Acceso"
  330. >Sin Acceso</b-form-radio>
  331. <b-form-radio
  332. v-model="permisos.tipo"
  333. name="permisoPublicaryVer"
  334. @input="cambiarPermisoRadio"
  335. value="Ver + Publicar"
  336. >Ver + Publicar</b-form-radio>
  337. <b-form-radio
  338. v-model="permisos.tipo"
  339. name="permisoVer"
  340. value="Ver"
  341. @input="cambiarPermisoRadio"
  342. >Ver</b-form-radio>
  343. </div>
  344. </div>
  345. </div>
  346. <template v-slot:modal-footer="{ hide }">
  347. <div class="w-100">
  348. <button
  349. id="guardarPermisos"
  350. type="button"
  351. class="btn btn-danger float-right"
  352. @click="guardarPermisos()"
  353. :disabled="!verBtnGuardarPermisos"
  354. >Guardar</button>
  355. <button
  356. id="cancelarPermisos"
  357. type="button"
  358. class="btn btn-secondary mr-1 float-right"
  359. @click="hide('forget')"
  360. >Cancelar</button>
  361. <button
  362. v-if="editandoPermiso"
  363. id="previsualizarPermisos"
  364. @click="cambiarPermisos"
  365. class="btn btn-outline-danger mr-1 float-right"
  366. type="button"
  367. value="Previsualizar"
  368. >Previsualizar</button>
  369. </div>
  370. </template>
  371. </b-modal>
  372. <!-- end modal permisos -->
  373. </div>
  374. </div>
  375. </div>
  376. </div>
  377. </div>
  378. </div>
  379. </template>
  380. <script>
  381. import "bootstrap-vue/dist/bootstrap-vue.css";
  382. import {
  383. BTable,
  384. BSpinner,
  385. BModal,
  386. BPagination,
  387. BFormCheckbox,
  388. BFormRadio,
  389. ModalPlugin,
  390. BTooltip
  391. } from "bootstrap-vue";
  392. import { token } from "../../_mixin/user_mixin.js";
  393. import LiquorTree from "liquor-tree";
  394. var _ = require("lodash");
  395. export default {
  396. name: "UsuariosAdmin",
  397. mixins: [token],
  398. components: {
  399. BTable,
  400. BModal,
  401. BSpinner,
  402. BPagination,
  403. BFormCheckbox,
  404. BFormRadio,
  405. ModalPlugin,
  406. BTooltip,
  407. [LiquorTree.name]: LiquorTree
  408. },
  409. data: () => ({
  410. selectedNode: "",
  411. treeFilter: "",
  412. buscar: "",
  413. totalRows: 1,
  414. currentPage: 1,
  415. perPage: 25,
  416. userActive: "NO",
  417. verBtnGuardarInfo: false,
  418. editandoPermiso: false,
  419. verBtnGuardarPermisos: false,
  420. infoModal: {
  421. id: "info-modal",
  422. title: "",
  423. content: {}
  424. },
  425. cambiarEstadoUsuarioModal: {
  426. id: "modal-activar",
  427. title: "",
  428. msg: "",
  429. estado: ""
  430. },
  431. permisosModal: {
  432. id: "permisos-modal",
  433. title: "",
  434. content: {}
  435. },
  436. permisos: {
  437. tipo: "Sin Acceso"
  438. },
  439. optsTree: {
  440. parentSelect: true,
  441. filter: {
  442. emptyText: "No se ha encontrado nada :( "
  443. }
  444. },
  445. treeData: [],
  446. titulos: [
  447. {
  448. key: "IDUS",
  449. label: "ID",
  450. sortable: true
  451. },
  452. {
  453. key: "IDUSNOMBRE",
  454. label: "Nombre",
  455. sortable: true
  456. },
  457. {
  458. key: "IDPERFIL",
  459. label: "Perfil",
  460. sortable: true
  461. },
  462. {
  463. key: "ACTI",
  464. label: "Estado",
  465. sortable: true
  466. },
  467. { key: "actions", label: "Acciones" }
  468. ]
  469. }),
  470. async created() {
  471. await this.getUsuarios();
  472. await this.getEstantes();
  473. this.totalRows = this.usuarios.length;
  474. },
  475. methods: {
  476. cambiarPermisoRadio(permisoSelect) {
  477. let arrNode = this.selectedNode.text.split("|");
  478. let permisoSeleccionado = arrNode[1];
  479. this.editandoPermiso =
  480. this.permisos.tipo.trim() !== permisoSeleccionado.trim() ? true : false;
  481. this.cambiarPermisos();
  482. },
  483. getJsonPermisosFiltrado() {
  484. var dataTree = this.$refs.tree;
  485. var data = dataTree.toJSON();
  486. var treeCloned = _.cloneDeep(data);
  487. // Remover nodo data
  488. var startTree = _.omit(treeCloned[0], "data");
  489. // Filtrar solo estado expanded y selectable para primer nivel
  490. var stateFirst = _.pick(startTree.state, ["expanded", "selectable"]);
  491. // Asignar primer estado
  492. startTree.state = stateFirst;
  493. var firtsChildren = _.values(
  494. _.mapValues(startTree.children, function(esta) {
  495. return _.omit(esta, ["state", "data"]);
  496. })
  497. );
  498. // Filtros anidados para remover state y data de estantes,categorias y secciones.
  499. var filterChild = _.values(
  500. _.mapValues(firtsChildren, estantes => {
  501. estantes.children = _.values(
  502. _.mapValues(estantes.children, seccciones => {
  503. seccciones.children = _.values(
  504. _.mapValues(seccciones.children, categorias => {
  505. return _.omit(categorias, ["state", "data"]);
  506. })
  507. );
  508. return _.omit(seccciones, ["state", "data"]);
  509. })
  510. );
  511. return _.omit(estantes, ["state", "data"]);
  512. })
  513. );
  514. // Asignar hijos filtrados al arreglo padre
  515. startTree.children = filterChild;
  516. let treeFiltered = "[" + JSON.stringify(startTree) + "]";
  517. return treeFiltered;
  518. },
  519. guardarPermisos() {
  520. let jsonPermisos = this.getJsonPermisosFiltrado();
  521. let datos = {
  522. IDUS: this.permisosModal.content.IDUS,
  523. PERM: jsonPermisos
  524. };
  525. this.sendPermisos(datos).then(data => {
  526. this.getUsuarios();
  527. //cerrar modales
  528. this.$root.$emit("bv::hide::modal", "permisos-modal");
  529. this.$root.$emit("bv::hide::modal", "info-modal");
  530. });
  531. },
  532. cambiarPermisos() {
  533. this.getFullPath(this.selectedNode);
  534. this.editandoPermiso = false;
  535. },
  536. onSelect(node) {
  537. var arrNode = node.text.split("|");
  538. if (arrNode.length > 1) {
  539. var arrPermiso = arrNode[1];
  540. this.permisos.tipo = arrPermiso.trim();
  541. }
  542. this.selectedNode = node;
  543. },
  544. getFullPath(nodoSeleccionado) {
  545. this.verBtnGuardarPermisos = true;
  546. // asignamos el nodo actual para despues iterarlo
  547. const nodoActual = [nodoSeleccionado];
  548. const fullPathUp = [nodoSeleccionado];
  549. const fullPathDown = [nodoSeleccionado];
  550. // asignamos los elementos recursivos a fullPathUp y FullPathDown
  551. nodoSeleccionado.recurseUp(parent => fullPathUp.unshift(parent));
  552. nodoSeleccionado.recurseDown(children => fullPathDown.push(children));
  553. if (this.permisos.tipo === "Sin Acceso" || this.permisos.tipo === "Ver") {
  554. // Recursivos hacia abajo
  555. return fullPathDown.forEach(node => {
  556. const perm = node.text.split("| ");
  557. const text = perm[0];
  558. const tipoPermiso = perm[1];
  559. return (node.text = text + "| " + this.permisos.tipo);
  560. });
  561. } else {
  562. // Recursivo hacia arriba
  563. return fullPathUp.forEach((node, key) => {
  564. const perm = node.text.split("| ");
  565. const text = perm[0];
  566. const tipoPermiso = perm[1];
  567. // si es == sin acceso o ver el parent cambiarlo
  568. if (tipoPermiso === "Sin Acceso" || tipoPermiso === "Ver") {
  569. return (node.text = text + "| " + this.permisos.tipo);
  570. }
  571. if (nodoSeleccionado.text === node.text) {
  572. // Solo cambiar el nodo actual
  573. return (node.text = text + "| " + this.permisos.tipo);
  574. }
  575. });
  576. }
  577. },
  578. infoModalEvento(item, button) {
  579. this.infoModal.title = "Información de usuario";
  580. this.infoModal.content = item;
  581. this.$root.$emit("bv::show::modal", this.infoModal.id, button);
  582. this.verBtnGuardarInfo = false;
  583. this.userActive = this.infoModal.content.ACTI === "S" ? "SI" : "NO";
  584. },
  585. permisosModalEvento(item, button) {
  586. this.permisosModal.title = "Permisos de usuario";
  587. this.permisosModal.content = item;
  588. // Obtener los permisos del usuario
  589. this.getPermisos(item.IDUS).then(resut => {
  590. this.$refs.tree.setModel(this.permisosDatos);
  591. });
  592. this.$root.$emit("bv::show::modal", this.permisosModal.id, button);
  593. this.selectedNode = "";
  594. this.verBtnGuardarPermisos = false;
  595. this.treeFilter = "";
  596. },
  597. cambiarEstadoUsuarioEvento(id, estado, button) {
  598. this.cambiarEstadoUsuarioModal.estado = estado;
  599. if (estado === "activar") {
  600. this.cambiarEstadoUsuarioModal.title = "Activar usuario";
  601. this.cambiarEstadoUsuarioModal.msg =
  602. "¿ Desea activar el usuario con ID: <b>" + id + "</b> en el sistema?";
  603. } else {
  604. this.cambiarEstadoUsuarioModal.title = "Desactivar usuario";
  605. this.cambiarEstadoUsuarioModal.msg =
  606. "¿ Desea desactivar el usuario con ID: <b>" +
  607. id +
  608. "</b> ?, si desactiva al usuario, no podrá <i>iniciar sesión</i> y sus permisos serán <b>removidos</b>.";
  609. }
  610. this.$root.$emit(
  611. "bv::show::modal",
  612. this.cambiarEstadoUsuarioModal.id,
  613. button
  614. );
  615. },
  616. onFiltered(filteredItems) {
  617. // Actualiza el paginador al utilizar el filtro
  618. this.totalRows = filteredItems.length;
  619. this.currentPage = 1;
  620. },
  621. cambiarEstadoUser(action) {
  622. const idperfil = this.infoModal.content.IDPERFIL;
  623. const idus = this.infoModal.content.IDUS;
  624. // Insertamos los datos en BD
  625. this.sendEstadoUser(idus, action).then(res => {
  626. this.$root.$emit("bv::hide::modal", "modal-activar");
  627. // Actualizamos los datos del usuario actual
  628. this.getUsuarios().then(() => {
  629. const setNewContent = this.usuarios.filter(
  630. user => user.IDUS === idus && user.IDPERFIL === idperfil
  631. );
  632. this.infoModal.content = setNewContent[0];
  633. });
  634. });
  635. this.verBtnGuardarInfo = false;
  636. },
  637. sendPermisos(datos) {
  638. return this.$http
  639. .post(this.url_api + "/usuario/permisos", datos, this.config_header)
  640. .then(response => {
  641. if (response.data.response) {
  642. return this.$toasted.show(
  643. response.data.message,
  644. this.$toast_success
  645. );
  646. } else {
  647. return this.$toasted.show(response.data.message, this.$toast_error);
  648. }
  649. })
  650. .catch(error => {
  651. this.strError =
  652. "Se ha producido un error al guardar los permisos. error: " + error;
  653. });
  654. },
  655. sendEstadoUser(idus, method) {
  656. let action =
  657. method === "activar" ? "/usuario/activar" : "/usuario/desactivar";
  658. return this.$http
  659. .post(this.url_api + action, [idus], this.config_header)
  660. .then(response => {
  661. if (response.data.response) {
  662. return this.$toasted.show(
  663. response.data.message,
  664. this.$toast_success
  665. );
  666. } else {
  667. return this.$toasted.show(response.data.message, this.$toast_error);
  668. }
  669. })
  670. .catch(error => {
  671. this.strError =
  672. "Se ha producido un error al activar el usuario, error: " + error;
  673. });
  674. }
  675. }
  676. };
  677. </script>
  678. <style scoped>
  679. table.b-table[aria-busy="true"] {
  680. opacity: 0.7;
  681. }
  682. .page-titles .breadcrumb .breadcrumb-item + .breadcrumb-item::before {
  683. content: "/";
  684. }
  685. .table-responsive {
  686. box-shadow: 0px 0px 7px 2px #f2f2f2;
  687. padding: 15px;
  688. }
  689. </style>