11 Commits

Author SHA1 Message Date
danielGe 5105553dea creacion de la descarga del excel 2021-02-03 20:55:45 -06:00
danielGe c63ecf3064 constuido para pruebas, cambio del deseño del tabla 2021-01-28 13:16:38 -06:00
danielGe d72e18d95a agregar catalogos 2021-01-27 22:59:00 -06:00
danielGe e88392e59e contruido para pruebas 2021-01-26 11:47:04 -06:00
danielGe 6b4725b12f contruido para pruebas 2021-01-26 11:25:36 -06:00
danielGe af507e3793 constuido para produccion 2021-01-26 00:55:14 -06:00
danielGe 1c1b90a262 contruido para produccion 2021-01-26 00:51:56 -06:00
danielGe e846974d40 change gitignore 2021-01-25 22:53:52 -06:00
danielGe 1a96f677cc agregar a pruebas 2021-01-25 22:27:57 -06:00
danielGe c32cd5532b agregar a pruebas 2021-01-25 22:22:35 -06:00
danielGe ca7550bf79 incio del proyecto 2021-01-20 03:18:47 -06:00
52 changed files with 13542 additions and 24850 deletions
+3
View File
@@ -0,0 +1,3 @@
> 1%
last 2 versions
not dead
+14
View File
@@ -0,0 +1,14 @@
module.exports = {
root: true,
env: {
node: true
},
extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"],
parserOptions: {
parser: "babel-eslint"
},
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off"
}
};
-1
View File
@@ -1,6 +1,5 @@
.DS_Store
node_modules
/dist
# local env files
+2 -4
View File
@@ -1,5 +1,3 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}
presets: ["@vue/cli-plugin-babel/preset"]
};
-23
View File
@@ -1,23 +0,0 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
-24
View File
@@ -1,24 +0,0 @@
# censo_front
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
-5
View File
@@ -1,5 +0,0 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}
-12021
View File
File diff suppressed because it is too large Load Diff
-50
View File
@@ -1,50 +0,0 @@
{
"name": "censo_front",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/vue-fontawesome": "^2.0.2",
"bootstrap": "^4.5.3",
"bootstrap-vue": "^2.21.1",
"core-js": "^3.6.5",
"jquery": "^3.5.1",
"popper.js": "^1.16.1",
"vue": "^2.6.12",
"vue-router": "^3.4.9"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
-18
View File
@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<script src='https://kit.fontawesome.com/a076d05399.js'></script>
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
-34
View File
@@ -1,34 +0,0 @@
<template>
<div id="app">
<Header />
<Navbar />
<router-view></router-view>
<Footer />
</div>
</template>
<script>
import Footer from './components/footer.vue'
import Navbar from './components/nav.vue'
import Header from './components/header.vue'
export default {
name: 'App',
components: {
Footer,
Header,
Navbar
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
</style>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

-136
View File
@@ -1,136 +0,0 @@
<template>
<div>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
<footer class="container-fluid Azul-puma footer py-3 ">
<!-- <div class="container">
<div row>
<router-link to="/comite">
<button type="button" class="col-md-6 col-sm-12 btn boton-footer uno">
Comité Editorial
</button>
</router-link>
<router-link to="/lineamientos">
<button type="button" class="col-md-6 col-sm-12 btn boton-footer dos">
Política Editorial y Lineamentos
</button></router-link
>
<router-link to="/proceso">
<button
type="button"
class="col-md-6 col-sm-12 btn boton-footer tres"
>
Proceso Editorial y Organismos
</button>
</router-link>
<router-link to="/puntos">
<button
type="button"
class="col-md-6 col-sm-12 btn boton-footer cuatro"
>
Puntos de Venta
</button>
</router-link>
</div>
</div> -->
<div row>
<p class="mb-0 ">Hecho en México, todos los derechos reservados 2020.</p>
<p class="my-0 ">
Esta página puede ser reproducida con fines no lucrativos, siempre y
cuando no se mutile, se cite la fuente
</p>
<p>
completa y su dirección electrónica. De otra forma, requiere permiso
previo por escrito de la institución.
</p>
</div>
</footer>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<style scoped>
.boton-footer {
background-color: rgb(187, 136, 0);
color: white;
width: 14rem;
font-size: 0.8rem;
}
.uno,
.dos,
.tres {
margin-right: 1rem;
}
.btn {
margin-bottom: 1rem;
}
.Azul-puma {
background-color: #1e3c70;
}
.footer {
text-align: center;
color: white;
}
@media (max-width: 768px) {
.uno,
.tres {
margin-right: 4rem;
}
.dos {
margin-right: 0rem;
}
.footer {
font-size: 0.7rem;
}
}
@media (max-width: 970px) {
.uno,
.dos,
.tres {
margin-right: 0.5rem;
}
.footer {
font-size: 0.7rem;
}
}
</style>
-56
View File
@@ -1,56 +0,0 @@
<template>
<div class="row divMaster header cl-12 azulUnam">
<div
class="logo_unam col-4 offset-1 d-inline-flex my-2 align-items-center"
>
<a href="https://www.unam.mx/" target="_blank">
<img class="sizeImg" src="../assets/Logo-UNAM.png" alt="logo unam" />
</a>
</div>
<div
class="logo_acatlan col-4 offset-2 d-inline-flex justify-content-end my-2 align-items-center"
>
<a href="https://www.acatlan.unam.mx/" target="_blank">
<img
class="sizeImg"
src="../assets/logo-fesa-45.png"
alt="logo unam"
/>
</a>
</div>
</div>
</template>
<style>
.divMaster {
height: 8rem;
margin: 0;
width: auto;
}
.azulUnam {
background-color: #1e3c70;
}
.sizeImg {
height: 5rem;
}
.logo_acatlan_resp {
display: none !important;
}
@media (max-width: 450px) {
.logo_acatlan,
.logo_unam {
display: none !important;
}
.logo_acatlan_resp {
display: block !important;
}
.logo_acatlan_resp a img {
height: 5rem;
}
}
</style>
@@ -1,43 +0,0 @@
<template>
<b-modal id="actualizarCampo" centered size="lg" hide-footer title="Actualizar Campo">
<b-container fluid>
<b-row class="my-1">
<b-col >
<h1>Actualizar {{campo}}</h1>
</b-col>
</b-row>
<b-row>
<b-col sm="3">
<h4>Actual: </h4>
</b-col>
<b-col sm="9">
<h4><strong>{{campo}}</strong></h4>
</b-col>
</b-row>
<b-row>
<b-col sm="3">
<label for="changeValue">Actualizar: </label>
</b-col>
<b-col sm="9">
<b-form-input id="changeValue" placeholder="Actualizar campo"></b-form-input>
</b-col>
</b-row>
<b-row>
<b-col>
<div style="margin-top: 2rem;">
<b-button class="btn btn-outline-success float-right" @click="enviarFicha()" style="width: 30%; ">Enviar</b-button>
<b-button @click="$bvModal.hide('fichaDeposito')" variant="outline-danger" class="btn float-left" style="width: 30%; ">Cancelar</b-button>
</div>
</b-col>
</b-row>
</b-container>
</b-modal>
</template>
<script>
export default {
props: {
campo: String,
value: String
}
}
</script>
-93
View File
@@ -1,93 +0,0 @@
<template>
<div class="row">
<div class="col-12">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th v-for="item in pcHeaders" v-bind:key="item.nombre" scope="col">
<div class="dropdown">
<button class="btn nav-link dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{item.nombre}}
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<b-dropdown-form>
<b-form-checkbox v-for="type in item.data" v-bind:key="type" scope="col"><a>{{type.nombre}}</a></b-form-checkbox>
</b-dropdown-form>
</div>
</div>
</th>
</tr>
</thead>
<tbody>
<tr v-for="pc in pcData" v-bind:key="pc.index">
<td v-for="(pcCampo,key) in pc" v-bind:key="pcCampo" v-b-modal.actualizarCampo @click="campo=pcCampo ,valueCampo = pcHeaders[key].nombre" >
{{pcCampo}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<Modal v-bind:campo="campo" v-bind:value="valueCampo" />
</div>
</template>
<script>
import Modal from './modalActualizar.vue'
export default {
name: "home",
components: {
Modal,
},
data() {
return {
campo:"",
valueCampo:"",
pcHeaders: {
noInventario: {nombre: "Inventario", data: []},
activoFijo: {nombre: "Tipo", data: [{nombre: "compu", value: true}, {nombre: "dos", value: true}]},
modelo: {nombre: "Modelo", data: []},
marca: {nombre: "Marca", data: []},
noSerie: {nombre: "Serie", data: []},
procesador: {nombre: "Procesador", data: []},
vProcesador: {nombre: "Velocidad de procesador (MHz)", data: []},
hdd: {nombre: "ROM (GB)", data: []},
memoriasz: {nombre: "RAM (MB)", data: []},
memoria: {nombre: "Tipo de memoria", data: []},
vMemoria: {nombre: "Velocidad de memoria (MHz)", data: []},
graficos:{nombre: "Gráficos", data: []},
osname: {nombre: "Sistema operativo", data: []},
noResguardo: {nombre: "Resguardo", data: []},
uResponsable: {nombre: "Unidad responsable", data: []},
nombreResponsable: {nombre: "Responsable", data: []},
ubicacion: {nombre: "Ubicación", data: []},
uso: {nombre: "Uso", data: []}
},
pcData: [
{ noInventario: "Inventario",
activoFijo: "Tipo",
modelo: "Modelo",
marca: "Marca",
noSerie: "Serie",
procesador: "Procesador",
vProcesador: "Velocidad de procesador (MHz)",
hdd: "ROM (GB)",
memoriasz: "RAM (MB)",
memoria: "Tipo de memoria",
vMemoria: "Velocidad de memoria (MHz)",
graficos: "Gráficos",
osname: "Sistema operativo",
noResguardo: "Resguardo",
uResponsable: "Unidad responsable",
nombreResponsable: "Responsable",
ubicacion: "Ubicación",
uso: "Uso" },
],
}
},
methods: {
}
};
</script>
-23
View File
@@ -1,23 +0,0 @@
import Vue from "vue";
import App from "./App.vue";
import "bootstrap";
import "bootstrap/dist/css/bootstrap.min.css";
import VueRouter from "vue-router";
import { routes } from "./routes";
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
Vue.config.productionTip = false;
Vue.use(VueRouter);
Vue.use(BootstrapVue);
Vue.use(IconsPlugin);
const router = new VueRouter({
routes
});
new Vue({
el: "#app",
render: h => h(App),
router
});
-8
View File
@@ -1,8 +0,0 @@
import home from "./view/home.vue";
import addPrinter from "./view/addPrinter.vue";
import addPcs from "./view/addPcs"
export const routes = [
{ path: "/", component: home, name: "home" },
{ path: "/agregarImpresora", component: addPrinter, name: "addPrinter" },
{ path: "/agregarEquipo", component: addPcs, name: "addPcs" }
];
-119
View File
@@ -1,119 +0,0 @@
<template>
<div class="container">
<h1>Agregar Equipo</h1>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Número de inventario"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Tipo"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Modelo"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Marca"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Serie"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Procesador"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Velocidad de procesador (MHz)"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="ROM (GB)"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="RAM (MB)"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Tipo de memoria"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Velocidad de memoria (MHz)"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Gráficos"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Sistema operativo"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Resguardo"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Unidad responsable"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Responsable"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Ubicación"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input class="fadeIn second" id="input-small" placeholder="Uso"></b-form-input>
</div>
</div>
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " >
Agregar
</button>
</div>
</div>
</template>
<script>
export default {
name: "home",
components: {
},
data() {
return {
typeSelected:"Equipos",
}
},
methods: {
}
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
-95
View File
@@ -1,95 +0,0 @@
<template>
<div class="container">
<h1>Agregar impresora</h1>
<div class="row">
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Número de inventario"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Tipo"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Modelo"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Marca"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Serie"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Descripcion adicional"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Resguardo"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Unidad responsable"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Nombre del responsable"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Ubicación"></b-form-input>
</div>
<div class="col-md-4">
<b-form-input id="input-small" placeholder="Uso"></b-form-input>
</div>
</div>
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " >
Agregar
</button>
</div>
</div>
</template>
<script>
export default {
name: "home",
components: {
},
data() {
return {
typeSelected:"Equipos",
}
},
methods: {
}
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
-80
View File
@@ -1,80 +0,0 @@
<template>
<div>
<h1 class="mt-5 mb-5">Sistema de Censo</h1>
<div class="container">
<div class="row mb-5">
<div class="col-sm">
<b-input-group size="sm" class="mb-2">
<b-input-group-prepend is-text>
<b-icon icon="search"></b-icon>
</b-input-group-prepend>
<b-form-input type="search" placeholder="Buscar" ></b-form-input>
</b-input-group>
</div>
<div class="col-sm">
<button type="button" class="btn btn-outline-primary float-right" @click="typeSelected=='Equipos' ? typeSelected='Impresoras': typeSelected='Equipos'">{{typeSelected}}</button>
</div>
</div>
</div>
<div class="container" v-if="typeSelected =='Equipos'">
<PcTable />
</div>
<div class="container" v-else>
<PrinterTable />
</div>
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " >
Descargar Excel
</button>
</div>
</div>
</template>
<script>
import PcTable from './../components/pcsTable.vue'
import PrinterTable from './../components/printersTable.vue'
export default {
name: "home",
components: {
PcTable,
PrinterTable,
},
data() {
return {
typeSelected:"Equipos",
}
},
methods: {
}
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
+1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

+1
View File
@@ -0,0 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>censo_front</title><link href="css/app.531bacc5.css" rel="preload" as="style"><link href="css/chunk-vendors.9e1d7bb4.css" rel="preload" as="style"><link href="js/app.0d5f6afd.js" rel="preload" as="script"><link href="js/chunk-vendors.5bfa42cc.js" rel="preload" as="script"><link href="css/chunk-vendors.9e1d7bb4.css" rel="stylesheet"><link href="css/app.531bacc5.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but censo_front doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.5bfa42cc.js"></script><script src="js/app.0d5f6afd.js"></script></body></html>
+2
View File
File diff suppressed because one or more lines are too long
+1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+12050 -11899
View File
File diff suppressed because it is too large Load Diff
+11 -22
View File
@@ -8,37 +8,26 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"bootstrap": "^4.5.3",
"axios": "^0.21.1",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.21.2",
"core-js": "^3.6.5",
"jquery": "^3.5.1",
"sweetalert2": "^10.13.3",
"vue": "^2.6.11",
"vue-router": "^3.4.9"
"vue-router": "^3.5.0",
"vuex": "^3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-prettier": "^6.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-prettier": "^3.1.3",
"eslint-plugin-vue": "^6.2.2",
"prettier": "^1.19.1",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
+15 -14
View File
@@ -1,13 +1,26 @@
<template>
<div id="app">
<Header />
<Navbar />
<router-view></router-view>
<Footer />
</div>
</template>
<script>
import Footer from './components/footer.vue'
import Navbar from './components/nav.vue'
import Header from './components/header.vue'
export default {
name: "App"
};
name: 'App',
components: {
Footer,
Header,
Navbar
}
}
</script>
<style>
@@ -17,17 +30,5 @@ export default {
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
padding: 0;
margin: 0;
}
.row {
margin: 0 !important;
}
.card-img-top {
height: 18rem;
}
</style>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

+89 -11
View File
@@ -1,4 +1,5 @@
<template>
<div>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
@@ -28,6 +29,50 @@
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
<footer class="container-fluid Azul-puma footer py-3 ">
<!-- <div class="container">
<div row>
<router-link to="/comite">
<button type="button" class="col-md-6 col-sm-12 btn boton-footer uno">
Comité Editorial
</button>
</router-link>
<router-link to="/lineamientos">
<button type="button" class="col-md-6 col-sm-12 btn boton-footer dos">
Política Editorial y Lineamentos
</button></router-link
>
<router-link to="/proceso">
<button
type="button"
class="col-md-6 col-sm-12 btn boton-footer tres"
>
Proceso Editorial y Organismos
</button>
</router-link>
<router-link to="/puntos">
<button
type="button"
class="col-md-6 col-sm-12 btn boton-footer cuatro"
>
Puntos de Venta
</button>
</router-link>
</div>
</div> -->
<div row>
<p class="mb-0 ">Hecho en México, todos los derechos reservados 2020.</p>
<p class="my-0 ">
Esta página puede ser reproducida con fines no lucrativos, siempre y
cuando no se mutile, se cite la fuente
</p>
<p>
completa y su dirección electrónica. De otra forma, requiere permiso
previo por escrito de la institución.
</p>
</div>
</footer>
</div>
</template>
<script>
@@ -39,20 +84,53 @@ export default {
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
.boton-footer {
background-color: rgb(187, 136, 0);
color: white;
width: 14rem;
font-size: 0.8rem;
}
ul {
list-style-type: none;
padding: 0;
.uno,
.dos,
.tres {
margin-right: 1rem;
}
li {
display: inline-block;
margin: 0 10px;
.btn {
margin-bottom: 1rem;
}
a {
color: #42b983;
.Azul-puma {
background-color: #1e3c70;
}
.footer {
text-align: center;
color: white;
}
@media (max-width: 768px) {
.uno,
.tres {
margin-right: 4rem;
}
.dos {
margin-right: 0rem;
}
.footer {
font-size: 0.7rem;
}
}
@media (max-width: 970px) {
.uno,
.dos,
.tres {
margin-right: 0.5rem;
}
.footer {
font-size: 0.7rem;
}
}
</style>
+5 -14
View File
@@ -14,30 +14,21 @@
<a href="https://www.acatlan.unam.mx/" target="_blank">
<img
class="sizeImg"
src="../assets/FES-editoriales.png"
src="../assets/logo-fesa-45.png"
alt="logo unam"
/>
</a>
</div>
<div
class="logo_acatlan_resp col-8 offset-2 d-flex justify-content-center my-2 align-items-center"
>
<a href="https://www.acatlan.unam.mx/" target="_blank">
<img
class="sizeImg"
src="../assets/FES-editoriales.png"
alt="logo unam"
/>
</a>
</div>
</div>
</template>
<style>
.divMaster {
height: 7em;
margin: 0 auto;
height: 8rem;
margin: 0;
width: auto;
}
.azulUnam {
+170
View File
@@ -0,0 +1,170 @@
<template>
<b-modal id="actualizarCampo" centered size="lg" hide-footer title="Actualizar Campo" style="height: auto;">
<b-container fluid>
<b-row class="my-1">
<b-col >
<h2 style="text-align: center; margin-bottom: 1.5rem;"> {{selectPC}}</h2>
</b-col>
</b-row>
<b-row style="margin-bottom: 1rem;">
<b-col sm="3">
<h4>Actual: </h4>
</b-col>
<b-col sm="9">
<h4><strong>{{pcSelected.value}}</strong></h4>
</b-col>
</b-row>
<b-row style="margin-bottom: 1rem;">
<b-col sm="3">
<label style=" padding-top:1rem;">Actualizar: </label>
</b-col>
<b-col sm="9">
<div class="dropdown-container" v-if="opciones.length!=0">
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{opcionSeleted != '' ? opcionSeleted.text : campo}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="(opcion,index) in opciones" v-bind:key="index" @click="opcionSeleted=opcion">
<a class="dropdown-item"><p> {{opcion.text}}</p></a>
</div>
</div>
</div>
</div>
<b-form-input v-else v-model="campoValue" class="m-2" placeholder="Actualizar campo" style="margin: 0"></b-form-input>
</b-col>
</b-row>
<b-row>
<b-col>
<div style="margin-top: 2rem;">
<b-button variant="outline-success" class="float-right" style="width: 30%; " @click="actualizarCampo()">Actualizar</b-button>
<b-button @click="$bvModal.hide('actualizarCampo')" variant="outline-danger" class="btn float-left" style="width: 30%; ">Cancelar</b-button>
</div>
</b-col>
</b-row>
</b-container>
</b-modal>
</template>
<style scoped>
.dropdown-item,.short{
width: 100%;
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
-webkit-appearance: none;
word-wrap: break-word;
text-overflow: inherit;
white-space: normal;
}
.dropdown {
position: relative ;
display: inline-block;
height: auto;
width: 100% !important;
}
.dropdown-menu{
max-height: 20rem;
width: 100%;
overflow-y: scroll;
}
</style>
<script>
import Swal from 'sweetalert2';
import axios from "axios";
import config from "../config/config.js";
export default {
props: {
campo: String,
pcSelected: Object,
opciones: Array,
objectPc: Object,
},
data() {
return {
opcionSeleted: '',
campoValue:'',
pc: this.campo
}
},
methods:{
cambiar(){
this.opcionSeleted = '';
this.campoValue = '';
this.pc = this.pcSelected;
},
async actualizarCampo(){
try{
if(this.opcionSeleted === "" && this.campoValue === ""){
await Swal.fire(
'¿Aún no has llenado el campo a editar?',
'',
'question'
);
return;
}
let data = {};
let valueCampo = '';
if(this.opciones.length!=0){
valueCampo = this.opcionSeleted.id;
}
else{
valueCampo = this.campoValue;
}
data ={
keyTable : this.pcSelected.keyTable,
idEquipo : this.objectPc.idEquipo,
idInventario: this.objectPc.idInventario,
value: valueCampo,
equipo: false
}
if( this.pcSelected.keyTable !== 'noInventario' && this.pcSelected.keyTable !== 'noResguardo' && this.pcSelected.keyTable !== 'idUnidadResponsable'){
data.equipo = true;
}
try{
await axios.post( `${config.api}/editarCampoEquipo`, data );
await Swal.fire(
'Se actualizo con exito el campo',
'',
'success'
);
location.reload();
return;
}
catch(error){
console.log(error);
await Swal.fire(
'No se pudo actualizar el campo',
`Error en consola ${error}`,
'error'
);
return;
}
}
catch(error){
console.log(error);
}
}
},
computed:{
selectPC : function(){
if(this.pcSelected !== this.pc ){
this.cambiar();
}
return this.campo;
}
},
}
</script>
@@ -47,6 +47,9 @@
</div>
</div>
</li>
<li class="nav-item">
<router-link to="/agregarCatalogo"><a class="nav-link text-white">Agregar al catalogo</a></router-link>
</li>
<li>
<div class="d-flex align-items-center mx-4">
<i class='fas fa-user-alt' style='font-size:24px;color:white;margin-right:10px'></i>
+329
View File
@@ -0,0 +1,329 @@
<template>
<div>
<div class="row">
<div class="col-12">
<h3 style="text-align: right; margin-bottom: 1rem;">Totales: {{pcTablesFiltrada.length}} </h3>
<div class="table-responsive" style="height : 35rem">
<table class="table tableFixHead" >
<thead>
<tr>
<th >
<div class="flex-container">
<button style="align-self: center" class="btn nav-link " type="button" aria-haspopup="true" aria-expanded="false">
Eliminar
</button>
</div>
</th>
<th v-for="(item,indexHeader) in pcHeaders" v-bind:key="indexHeader" scope="col" >
<div class="flex-container">
<div >
<div v-if="item.data.length != 0">
<div>
<div class="dropdown">
<button role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="align-self: center" class="btn nav-link dropdown-toggle" @click="llenarFiltro( indexHeader)">
{{item.nombre}}
</button>
<div class="dropdown-menu" aria-labelledby="navbarDropdown" >
<form style="padding: 10px">
<div class="form-check" >
<input type="checkbox" :checked="seleccionado(indexHeader)" @click="seleccionarDatos(item,indexHeader)" class="form-check-input" :id="item.nombre">
<label class="form-check-label" :for="item.nombre">Seleccionar todos</label>
</div>
<b-form-checkbox-group
:id="item.nombre"
v-model="selected"
:options="item.data"
:name="item.nombre"
stacked
></b-form-checkbox-group>
</form>
<div class="dropdown-divider"></div>
<div class="text-center">
<b-button center @click="filtrar(indexHeader)">Filtrar</b-button>
</div>
</div>
</div>
</div>
</div>
<button style="align-self: center; width: 14rem;" v-else class="btn nav-link " type="button" aria-haspopup="true" aria-expanded="false">
{{item.nombre}}
</button>
</div>
</div>
</th>
</tr>
</thead>
<tbody>
<tr v-for="(pc,index) in pcTablesFiltrada" v-bind:key="index">
<td>
<b-button variant="outline-danger" @click="eliminar(pc.objectPc)">Eliminar</b-button>
</td>
<td v-for="(pcCampo,key) in pc.datos" v-bind:key="key" v-b-modal.actualizarCampo @click="pcSelected=pc.objectPc ,valueCampo=pcCampo , campo = pcHeaders[key].nombre, opciones = pcHeaders[key].data" >
{{pcCampo.value}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<Modal v-bind:campo="campo" v-bind:pcSelected="valueCampo" v-bind:opciones="opciones" v-bind:objectPc="pcSelected" />
</div>
<div class="row" style="margin-bottom: 3rem;" >
<div class="col-12">
<div class="pure-u-1 pure-u-md-1-2">
<b-button v-if="!loadExcel" class="button" @click="descargarExcel()"><a>Descargar</a></b-button>
<!-- <button class="button" @click="descargarExcel()" >
Descargar Excel
</button> -->
<div v-else class=" mb-3" style="margin-top: 3rem; ">
<b-spinner variant="primary" style="width: 5rem; height: 5rem;" label="Caragndo..."></b-spinner><br/>
<strong >Cargando...</strong>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import axios from "axios";
import config from "../config/config.js";
import Modal from './modalActualizar.vue';
import Swal from 'sweetalert2';
export default {
name: "home",
components: {
Modal,
},
props: {
campoBuscar: String,
},
data() {
return {
campo:"",
valueCampo:{value:''},
pcHeaders: {},
pcData: [],
tableName: "",
opciones: [],
pcSelected: null,
opcionSeletedTable: {value: ''},
selected: [],
link: null,
loadExcel: false,
}
},
methods: {
async descargarExcel(){
this.loadExcel = true;
const data = {
pcHeaders: this.pcHeaders,
table: this.pcTablesFiltrada
}
await axios.post( `${config.api}/createExcel`, data).then(async()=>{
this.loadExcel = false;
await Swal.fire(
'Se ha creado con exito el archvio',
'',
'success'
).then(()=>{
window.location.href = `${config.api}/getExcel`;
});
}).catch(error=>{
console.log(error);
Swal.fire({
icon: 'error',
title: 'Sucedio un error al crear el excel',
text: `${error}`,
});
});
},
async llenarFiltro(key){
for(let index in this.pcData){
let pc = this.pcData[index];
if(pc.headers[key] && !(this.selected.indexOf(pc.datos[key].value) > -1)){
this.selected.push(pc.datos[key].value);
}
}
},
seleccionado(key){
for(let index in this.pcData){
let pc = this.pcData[index];
if(!pc.headers[key] ){
return false;
}
}
return true;
},
async seleccionarDatos(datos,key){
if(this.seleccionado(key)){
this.selected = [];
}
else{
this.selected = [];
for(let index in datos.data){
this.selected.push(datos.data[index].value);
}
}
},
async filtrar(key){
for(let index in this.pcData){
let pc = this.pcData[index];
pc.headers[key] = (this.selected.indexOf(pc.datos[key].value) > -1);
}
},
async eliminar(pcData){
const swalWithBootstrapButtons = Swal.mixin({
customClass: {
confirmButton: 'btn btn-outline-success',
cancelButton: 'btn btn-outline-danger'
},
buttonsStyling: false
})
swalWithBootstrapButtons.fire({
title: '¿Estás seguro de que quieres eliminar el Equipo?',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Si, eliminar',
cancelButtonText: 'No, cancelar',
reverseButtons: true
}).then(async (result) => {
if (result.isConfirmed) {
const data = {
idEquipo : pcData.idEquipo,
idInventario: pcData.idInventario
}
try{
await axios.post( `${config.api}/eliminarEquipo`, data);
await Swal.fire(
'Se ha eliminado con exito el Equipo',
'',
'success'
);
location.reload();
return;
}
catch(error){
console.log(error);
await Swal.fire(
'No se pudo eliminar el Equipo',
`Error en consola ${error}`,
'error'
);
return;
}
}
})
},
},
async created() {
try {
let computadoras = await axios.get(`${config.api}/getHeadersComputadoras`);
this.pcHeaders = computadoras.data.data;
}
catch(error){
console.log(error);
}
try {
let computadoras = await axios.get(`${config.api}/getComputadoras`);
this.pcData = computadoras.data.data;
}
catch(error){
console.log(error);
}
},
computed:{
pcTablesFiltrada: function()
{
return this.pcData.filter( (item)=>{
let header = true;
for(let campo in item.headers){
if(!item.headers[campo]){
header = false;
break;
}
}
if(!header)
return false;
let searchInventario = (item.datos.numeroInventario.value).includes(this.campoBuscar) ;
let searchResguardo = (item.datos.numeroResguardo.value).includes(this.campoBuscar) ;
let searchSerie = (item.datos.serie.value).includes(this.campoBuscar) ;
if(searchInventario || searchResguardo || searchSerie)
return true;
return false;
}
);
}
}
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
a{
font-size: 1.7rem;
padding-top: .6rem;
}
.tableFixHead { overflow-y: auto; height: 100px; }
.tableFixHead thead th { position: sticky; top: 0; }
table { border-collapse: collapse; width: 100%; }
th, td { padding: 8px 16px; }
th { background:#eee; }
.colorGris{
background:#eee;
}
.dropdown-item,.short{
width: 100%;
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
-webkit-appearance: none;
word-wrap: break-word;
text-overflow: inherit;
white-space: normal;
}
.dropdown {
position: relative ;
display: inline-block;
height: auto;
width: 100% !important;
}
.dropdown-menu{
max-height: 25rem;
width: 20rem;
overflow-y: scroll;
}
</style>
+15
View File
@@ -0,0 +1,15 @@
const config = {
//ngrok
//api: "https://f8d86328e778.ngrok.io"
//Local
//api: "http://localhost:3000"
//Pruebas
api: "https://venus.acatlan.unam.mx/censo_orion"
//Produccion
//api: "https://venus.acatlan.unam.mx/portal_editorial"
};
module.exports = config;
+24 -5
View File
@@ -1,19 +1,38 @@
import Vue from 'vue'
import App from './App.vue'
import Vue from "vue";
import App from "./App.vue";
import "bootstrap";
import "bootstrap/dist/css/bootstrap.min.css";
import Vuex from 'vuex';
import VueRouter from "vue-router";
import { routes } from "./routes";
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
Vue.config.productionTip = false;
Vue.use(VueRouter);
Vue.use(Vuex)
Vue.use(BootstrapVue);
Vue.use(IconsPlugin);
const router = new VueRouter({
routes
});
const store = new Vuex.Store({
state: {
campoValue: "",
},
mutations: {
cleanModalActualizar (state, value) {
state.campoValue = value;
console.log(state, value);
}
}
})
new Vue({
el: "#app",
render: h => h(App),
router
router,
store: store,
});
+8 -3
View File
@@ -1,5 +1,10 @@
import home from "./view/home.vue";
import addPrinter from "./view/addPrinter.vue";
import addPcs from "./view/addPcs"
import addCatalogo from "./view/addCatalogo"
export const routes = [
{ path: "/", component: home, name: "form" }
];
{ path: "/", component: home, name: "home" },
{ path: "/agregarImpresora", component: addPrinter, name: "addPrinter" },
{ path: "/agregarEquipo", component: addPcs, name: "addPcs" },
{ path: "/agregarCatalogo", component: addCatalogo, name: "addCataogo" }
]
+148
View File
@@ -0,0 +1,148 @@
<template>
<div>
<h1 class="mt-5 mb-5">Agregar al Catalogo</h1>
<div class="container">
<b-card title="Card Title" no-body style="margin-bottom: 4rem;">
<b-card-header header-tag="nav">
<b-nav card-header tabs>
<b-nav-item @click="valueText='', textSelected= 'Tipo de Impresora'" v-bind:active="textSelected=='Tipo de Impresora'">Tipo de Impresora</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Marca de Impresora'" v-bind:active="textSelected=='Marca de Impresora'">Marca de Impresora</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Tipo de Uso'" v-bind:active="textSelected== 'Tipo de Uso'">Tipo de Uso </b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Procesador'" v-bind:active="textSelected== 'Procesador'">Procesador</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Sistema Operativo'" v-bind:active="textSelected== 'Sistema Operativo'">Sistema Operativo</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Tarjeta Grafica'" v-bind:active="textSelected== 'Tarjeta Grafica'">Tarjeta Grafica</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Marca de Equipo'" v-bind:active="textSelected== 'Marca de Equipo'">Marca de Equipo</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Tipo de memoria Ram'" v-bind:active="textSelected== 'Tipo de memoria Ram'">Tipo de memoria Ram</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Tipo de Equipo de Computo'" v-bind:active="textSelected== 'Tipo de Equipo de Computo'">Tipo de Equipo de Computo</b-nav-item>
<b-nav-item @click="valueText='', textSelected= 'Unidad Responsable'" v-bind:active="textSelected== 'Unidad Responsable'">Unidad Responsable</b-nav-item>
</b-nav>
</b-card-header>
<b-card-body class="text-center">
<div class="container">
<div class="row" v-if="textSelected!='Unidad Responsable'">
<div class="col-md-8" >
<b-form-input style="margin: .5rem;" class="fadeIn second" v-bind:placeholder="textSelected" v-model="valueText"></b-form-input>
</div>
<div class="col-md-4" >
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " @click="agregar()">
Agregar
</button>
</div>
</div>
</div>
<div class="row" v-else>
<div class="col-md-12" >
<b-form-input style="margin: .5rem;" class="fadeIn second" placeholder="Nombre de la Unidad Responsable" v-model="unidadResponsable"></b-form-input>
</div>
<div class="col-md-12" >
<b-form-input style="margin: .5rem;" class="fadeIn second" placeholder="Nombre del Responsable" v-model="nombreResponsable"></b-form-input>
</div>
<div class="col-md-12" >
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " @click="agregar()" >
Agregar
</button>
</div>
</div>
</div>
</div>
</b-card-body>
</b-card>
</div>
</div>
</template>
<script>
import axios from "axios";
import config from "../config/config.js";
import Swal from 'sweetalert2';
export default {
name: "home",
components: {
},
data() {
return {
textSelected : 'Tipo de Impresora',
valueText: '',
unidadResponsable: '',
nombreResponsable: '',
}
},
methods: {
async agregar(){
if(this.textSelected !== 'Unidad Responsable' ){
if(this.valueText === ''){
await Swal.fire(
`Aun no has agregado el campo`,
'',
'question'
)
return;
}
}
else{
if(this.unidadResponsable === '' || this.nombreResponsable === '' || this.ubicacion === ''){
await Swal.fire(
`Aun no has agregado los campos`,
'',
'question'
)
return;
}
}
let data = {
valueText : this.valueText,
unidadResponsable : this.unidadResponsable,
nombreResponsable : this.nombreResponsable,
textSelected : this.textSelected
}
try{
await axios.post( `${config.api}/addCatalogo`, data);
await Swal.fire(
'Se ha agregado con exito al catalogo',
'',
'success'
);
location.reload();
return;
}
catch(error){
console.log(error);
await Swal.fire(
'No se pudo agregar al catalogo',
`Error en consola ${error}`,
'error'
);
return;
}
}
}
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 2.5rem;
width: 14rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1rem;
border-radius: .3rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-top: .3rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
+342
View File
@@ -0,0 +1,342 @@
<template>
<div class="container">
<h1 style="margin: 2rem">Agregar Equipo</h1>
<div class="row">
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Número de inventario" v-model="noInventario"></b-form-input>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Número de resguardo" v-model="noResguardo"></b-form-input>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Serie" v-model="serie"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-6" >
<b-form-input style="margin: .5rem;" placeholder="Tamaño de discos" v-model="sizeDiscos"></b-form-input>
</div>
<div class="col-md-6" >
<b-form-input style="margin: .5rem;" placeholder="Número de discos" v-model="numeroDiscos"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Cantidad de memoria RAM" v-model="cantidadMemoriaRam"></b-form-input>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Velocidad de memoria Ram" v-model="velocidadMemoriaRam"></b-form-input>
</div>
<div class="col-md-4">
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{tipoMemoriaRamSelected != null ? tipoMemoriaRamSelected.nombre : 'Tipo de Memoria Ram'}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="tipo in tipoMemoriaRam" v-bind:key="tipo.id" @click="tipoMemoriaRamSelected = tipo">
<a class="dropdown-item"><p>{{tipo.nombre}}</p></a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{tarjetaGraficaSelected != null ? tarjetaGraficaSelected.nombre : 'Tipo de tarjeta grafica'}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="tipo in tarjetaGrafica" v-bind:key="tipo.id" @click="tarjetaGraficaSelected = tipo">
<a class="dropdown-item"><p>{{tipo.nombre}}</p></a>
</div>
</div>
</div>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Cantidad de memoria de la tarjeta grafica" v-model="cantidadMemoriaGrafica"></b-form-input>
</div>
<div class="col-md-4" >
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{tipoEquipoSelected != null ? tipoEquipoSelected.nombre : 'Tipo de Equipo'}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="tipo in tipoEquipo" v-bind:key="tipo.id" @click="tipoEquipoSelected = tipo">
<a class="dropdown-item"><p>{{tipo.nombre}}</p></a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<b-dropdown v-bind:text="osSelected != null ? osSelected.nombre : 'Sistema operativo'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in os" v-bind:key="tipo.id" @click="osSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Versión del sistema operativo" v-model="versionOS"></b-form-input>
</div>
<div class="col-md-4" >
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{procesadorSelected != null ? procesadorSelected.nombre : 'Procesador'}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="tipo in procesador" v-bind:key="tipo.id" @click="procesadorSelected = tipo">
<a class="dropdown-item"><p>{{tipo.nombre}}</p></a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Velocidad del procesador GHz" v-model="velocidadProcesadorGHz"></b-form-input>
</div>
<div class="col-md-8">
<b-form-input style="margin: .5rem;" placeholder="Descripción del procesador" v-model="descripcionProcesador"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<b-dropdown v-bind:text="marcaSelected != null ? marcaSelected.nombre : 'Marca'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in marca" v-bind:key="tipo.id" @click="marcaSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" placeholder="Modelo del equipo" v-model="modeloEquipo"></b-form-input>
</div>
<div class="col-md-4" >
<b-dropdown v-bind:text="usoSelected != null ? usoSelected.nombre : 'Uso'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in uso" v-bind:key="tipo.id" @click="usoSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div class="row">
<div class="col-md-12" style="margin: .5rem;" >
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{unidadSelected != null ? unidadSelected.unidadResponsable.nombre : 'Unidad Responsable'}}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="tipo in unidad" v-bind:key="tipo.unidadResponsable.id" @click="unidadSelected = tipo">
<a class="dropdown-item"><p>{{tipo.unidadResponsable.nombre}}</p></a>
</div>
</div>
</div>
</div>
<div class="col-md-12 " style="margin: .5rem;">
<div class="dropdown">
<button class="btn dropdown-toggle btn btn-outline-primary dropdown-toggle btn-block short" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{unidadSelected != null ? unidadSelected.responsable.nombre : 'Nombre del responsable' }}
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuButton">
<div class="containerDrop" v-for="(tipo,index) in unidad" v-bind:key="index" @click="unidadSelected = tipo">
<a class="dropdown-item"><p>{{tipo.responsable.nombre}}</p></a>
</div>
</div>
</div>
</div>
<div class="col-md-12 " >
<b-form-input style="margin: .5rem;" placeholder="Ubicación de la Unidad Responsable" v-model="ubicacionUnidad"></b-form-input>
</div>
</div>
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " @click="agregar()">
Agregar
</button>
</div>
</div>
</template>
<script>
import axios from "axios";
import config from "../config/config.js";
import Swal from 'sweetalert2';
export default {
name: "home",
components: {
},
data() {
return {
typeSelected:"Equipos",
noInventario: "",
noResguardo: "",
serie: "",
cantidadMemoriaRam: "",
velocidadMemoriaRam: "",
cantidadMemoriaGrafica: "",
versionOS:"",
velocidadProcesadorGHz: "",
descripcionProcesador: "",
numeroDiscos: "",
sizeDiscos: "",
modeloEquipo: "",
tipoEquipo : null,
tipoEquipoSelected: null,
tipoMemoriaRam : null,
tipoMemoriaRamSelected: null,
tarjetaGrafica : null,
tarjetaGraficaSelected: null,
os : null,
osSelected: null,
marca : null,
marcaSelected: null,
procesador : null,
procesadorSelected: null,
unidad: null,
unidadSelected: null,
uso: null,
usoSelected : null,
ubicacionUnidad: ""
}
},
methods: {
async faltaCampo(campo){
await Swal.fire(
`Falta el campo de ${campo} por llenar`,
'',
'warning'
)
return;
},
async agregar() {
if(this.noInventario === "") return this.faltaCampo("Número de inventario");
if(this.noResguardo === "") return this.faltaCampo("Número de resguardo");
if(this.serie === "") return this.faltaCampo("Serie");
if(this.sizeDiscos === "") return this.faltaCampo("El tamaño de disco");
if(this.numeroDiscos === "") return this.faltaCampo("El número de descos");
if(this.cantidadMemoriaRam === "") return this.faltaCampo("Cantidad de memoria RAM");
if(this.velocidadMemoriaRam === "") return this.faltaCampo("Velocidad de la memoria RAM");
if(this.cantidadMemoriaGrafica === "") return this.faltaCampo("Cantidad de la memoria Grafica");
if(this.versionOS ==="") return this.faltaCampo("Versión del Sistema Operativo");
if(this.velocidadProcesadorGHz === "") return this.faltaCampo("Velocidad de procesador");
if(this.descripcionProcesador === "") return this.faltaCampo("Descripción del procesador");
if(this.modeloEquipo === "") return this.faltaCampo("Modelo del equipo");
if(this.ubicacionUnidad === "") return this.faltaCampo("Ubicación de la Unidad responsable");
if(this.tipoEquipoSelected === null) return this.faltaCampo("El tipo de equipo");
if(this.tipoMemoriaRamSelected === null) return this.faltaCampo("El tipo de memoria RAM");
if(this.tarjetaGraficaSelected === null) return this.faltaCampo("El tipo de tarjeta grafica");
if(this.osSelected === null) return this.faltaCampo("El tipo de sistema operativo");
if(this.marcaSelected === null) return this.faltaCampo("La marca del equipo");
if(this.procesadorSelected === null) return this.faltaCampo("El tipo del procesador");
if(this.unidadSelected === null) return this.faltaCampo("La unidad Responsable");
const data ={
noInventario: this.noInventario,
noResguardo: this.noResguardo,
serie: this.serie,
sizeDiscos: this.sizeDiscos,
numeroDiscos: this.numeroDiscos,
cantidadMemoriaRam: this.cantidadMemoriaRam,
velocidadMemoriaRam: this.velocidadMemoriaRam,
cantidadMemoriaGrafica: this.cantidadMemoriaGrafica,
versionOS: this.versionOS,
velocidadProcesadorGHz: this.velocidadProcesadorGHz,
descripcionProcesador: this.descripcionProcesador,
modeloEquipo: this.modeloEquipo,
idTipoEquipo: this.tipoEquipoSelected,
idMemoriaRam: this.tipoMemoriaRamSelected,
idTarjetaGrafica: this.tarjetaGraficaSelected,
idOs: this.osSelected,
idMarcaEquipo: this.marcaSelected,
idProcesador: this.procesadorSelected,
idUso : this.usoSelected,
unidad: this.unidadSelected,
ubicacion: this.ubicacionUnidad,
}
console.log(data);
try{
await axios.post( `${config.api}/addEquipo`, data );
await Swal.fire(
'Se agrego con exito el equipo',
'',
'success'
);
location.reload();
return;
}
catch(error){
console.log(error);
await Swal.fire(
'No se pudo agregar el equipo',
`Error en consola ${error}`,
'error'
);
return;
}
}
},
async beforeCreate() {
try {
let catalogo = await axios.get(`${config.api}/getCatalgoEquipo`);
this.tipoEquipo= catalogo.data.catalogos.tipoEquipo;
this.tipoMemoriaRam= catalogo.data.catalogos.tipoMemoriaRam;
this.tarjetaGrafica= catalogo.data.catalogos.tarjetaGrafica;
this.os= catalogo.data.catalogos.os;
this.marca= catalogo.data.catalogos.marca;
this.procesador= catalogo.data.catalogos.procesador;
this.unidad= catalogo.data.catalogos.unidad;
this.uso = catalogo.data.catalogos.uso;
}
catch(error){
console.log(error);
}
},
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
.dropdown-item,.short{
width: 100%;
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
-webkit-appearance: none;
word-wrap: break-word;
text-overflow: inherit;
white-space: normal;
}
.dropdown{
position: relative ;
display: inline-block;
height: auto;
width: 100% !important;
}
.dropdown-menu{
max-height: 20rem;
width: 100%;
overflow-y: scroll;
}
</style>
+131
View File
@@ -0,0 +1,131 @@
<template>
<div class="container">
<h1 style="margin: 2rem">Agregar impresora</h1>
<div class="row">
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" class="fadeIn second" id="input-small" placeholder="Número de inventario"></b-form-input>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" class="fadeIn second" id="input-small" placeholder="Número de resguardo"></b-form-input>
</div>
<div class="col-md-4" >
<b-form-input style="margin: .5rem;" class="fadeIn second" id="input-small" placeholder="Serie"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-6">
<b-form-input style="margin: .5rem;" id="input-small" placeholder="Serie"></b-form-input>
</div>
<div class="col-md-6">
<b-form-input style="margin: .5rem;" id="input-small" placeholder="Modelo"></b-form-input>
</div>
</div>
<div class="row">
<div class="col-md-4" >
<b-dropdown v-bind:text="tipoImpresora != null ? tipoImpresoraSelected.nombre : 'Tipo de Impresora'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in tipoImpresora" v-bind:key="tipo.id" @click="tipoImpresoraSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-4 " >
<b-dropdown v-bind:text="marcaImpresoraSelected != null ? marcaImpresora.nombre : 'Marca de impresora'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in marcaImpresora" v-bind:key="tipo.id" @click="marcaImpresoraSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-4 " >
<b-dropdown v-bind:text="usoSelected != null ? uso.nombre : 'Tipo de Uso'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in uso" v-bind:key="tipo.id" @click="usoSelected = tipo">{{tipo.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div class="row">
<div class="col-md-12" >
<b-dropdown v-bind:text="unidadSelected != null ? unidadSelected.unidadResponsable.nombre : 'Unidad Responsable'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in unidad" v-bind:key="tipo.unidadResponsable.id" @click="unidadSelected = tipo">{{tipo.unidadResponsable.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-12 " >
<b-dropdown v-bind:text="unidadSelected != null ? unidadSelected.responsable.nombre : 'Nombre del responsable'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in unidad" v-bind:key="tipo.responsable.id" @click="unidadSelected = tipo">{{tipo.responsable.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
<div class="col-md-12 " >
<b-dropdown v-bind:text="unidadSelected != null ? unidadSelected.ubicacion.nombre : 'Ubicación'" block variant="outline-primary" class="m-2">
<b-dropdown-item v-for="tipo in unidad" v-bind:key="tipo.ubicacion.id" @click="unidadSelected = tipo">{{tipo.ubicacion.nombre}}</b-dropdown-item>
</b-dropdown>
</div>
</div>
<div class="pure-u-1 pure-u-md-1-2">
<button class="button " >
Agregar
</button>
</div>
</div>
</template>
<script>
import axios from "axios";
import config from "../config/config.js";
export default {
name: "home",
components: {
},
data() {
return {
typeSelected:"Equipos",
marcaImpresora : null,
marcaImpresoraSelected: null,
tipoImpresora: null,
tipoImpresoraSelected: null,
unidad: null,
unidadSelected: null,
uso: null,
usoSelected: null,
}
},
methods: {
},
async created() {
try {
let catalogo = await axios.get(`${config.api}/getCatalgoEquipo`);
this.marcaImpresora = catalogo.data.catalogos.marcaImpresora;
this.tipoImpresora = catalogo.data.catalogos.tipoImpresora;
this.unidad= catalogo.data.catalogos.unidad;
this.uso = catalogo.data.catalogos.uso;
}
catch(error){
console.log(error);
}
},
};
</script>
<style scoped>
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
+67 -48
View File
@@ -1,58 +1,77 @@
<template>
<div class="hello">
<Header />
<h1>{{ msg }}</h1>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
<div>
<h1 class="mt-5 mb-5">Sistema de Censo</h1>
<div class="container">
<div class="row mb-5">
<div class="col-sm">
<b-input-group size="sm" class="mb-2">
<b-input-group-prepend is-text>
<b-icon icon="search"></b-icon>
</b-input-group-prepend>
<b-form-input type="search" placeholder="Buscar por número de inventario, númerio de resguardo o serie" v-model="campoBuscar" ></b-form-input>
</b-input-group>
</div>
<div class="col-sm">
<button type="button" class="btn btn-outline-primary float-right" @click="typeSelected=='Equipos' ? typeSelected='Impresoras': typeSelected='Equipos'">{{typeSelected}}</button>
</div>
</div>
</div>
<div class="container" v-if="typeSelected =='Equipos'">
<PcTable v-bind:campoBuscar="campoBuscar" />
</div>
<div class="container" v-else>
<PrinterTable />
</div>
</div>
</template>
<script>
import Header from "./../components/header.vue";
export default {
name: 'home',
components: {
Header
},
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
import PcTable from './../components/pcsTable.vue'
import PrinterTable from './../components/printersTable.vue'
export default {
name: "home",
components: {
PcTable,
PrinterTable,
},
data() {
return {
typeSelected:"Equipos",
campoBuscar: ""
}
},
methods: {
}
};
</script>
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
.button {
background-color: #1b3d70; /* Green */
border: none;
color: white;
height: 4rem;
width: 15rem;
text-align: center;
text-decoration: none;
display: inline-block;
margin: 0 10px;
font-size: 1.5rem;
border-radius: 1rem;
-webkit-transition-duration: 0.4s; /* Safari */
transition-duration: 0.4s;
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
margin-left: 2rem;
margin-right: 2rem;
margin-bottom: 2rem;
margin-top: 2rem;
}
a {
color: #42b983;
.button:hover {
background-color: #bb8800;
color: white;
}
</style>
+7
View File
@@ -0,0 +1,7 @@
module.exports = {
publicPath: "./",
devServer: {
host: 'localhost'
}
};