Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions Facundo Lastra/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
26 changes: 26 additions & 0 deletions Facundo Lastra/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# TP5 ---- UTN ---- Facundo Lastra

## Project setup
```
npm install
```

### Compiles and hot-reloads for development
```
npm run serve
```

### Compiles and minifies for production
```
npm run build
```

### Run your tests
```
npm run test
```

### Lints and fixes files
```
npm run lint
```
5 changes: 5 additions & 0 deletions Facundo Lastra/babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/app'
]
}
12,371 changes: 12,371 additions & 0 deletions Facundo Lastra/package-lock.json

Large diffs are not rendered by default.

44 changes: 44 additions & 0 deletions Facundo Lastra/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"name": "tp5-ProgramacionAvanzada2",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"vue": "^2.5.17",
"vue-router": "^3.0.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.0.4",
"@vue/cli-plugin-eslint": "^3.0.4",
"@vue/cli-service": "^3.0.4",
"vue-template-compiler": "^2.5.17"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
Binary file added Facundo Lastra/public/favicon.ico
Binary file not shown.
17 changes: 17 additions & 0 deletions Facundo Lastra/public/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!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">
<title>hello-world</title>
</head>
<body>
<noscript>
<strong>We're sorry but hello-world 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>
28 changes: 28 additions & 0 deletions Facundo Lastra/src/App.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<h1>Super TP de Vue Usando Router</h1>
<section>
<router-link to='/'>Ver Personas</router-link> |
<router-link to="/add">Nueva Persona</router-link>
</section>
<router-view></router-view>
</div>
</template>

<script>
export default {
name: "app",
};
</script>

<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
Binary file added Facundo Lastra/src/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
112 changes: 112 additions & 0 deletions Facundo Lastra/src/components/newPerson.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<template>
<section>
<h2 v-if="editMod">Por favor, modifique los datos de la persona</h2>
<h2 v-else>Agregar Nueva Persona</h2>
<p v-if="errors.length">
<b>Por favor, corriga los siguientes error(es):</b>
<ul>
<li v-for="error in this.errors" :key="error.id">{{ error }}</li>
</ul>
</p>
<input type="text" v-model="persona.nombre" placeholder="Ingresar nombre de persona">
<span v-if="!persona.nombre">*Requerido*</span>
<div>
<div>
<input type="radio" v-model="persona.sexo" value="Masculino" id="masculino">
<label for="masculino">Masculino</label>
</div>
<div>
<input type="radio" v-model="persona.sexo" value="Femenino" id="femenino">
<label for="femenino">Femenino</label>
</div>
<div>
<input type="radio" v-model="persona.sexo" value="Otro" id="otro">
<label for="otro">otro</label>
</div>
<span v-if="!persona.sexo">*Requerido*</span>
</div>
<input type="number" v-model="persona.edad" placeholder="edad">
<span v-if="!persona.edad">*Requerido*</span>

<button v-if="!editMod" @click="enviarPersona()">Agregar</button>
<button v-else @click="enviarPersona()">Confirmar Edicion</button>
</section>

</template>
<script>
import router from "@/router";
import personsService from "@/service/personsService.js";
export default {
name: "NewPerson",
data() {
return {
persona: {
nombre: "",
sexo: "",
edad: 0,
id:0
},
errors: [],
editMod: false
};
},
beforeMount: function() {
if (this.$route.params.id !== undefined) {
personsService.getOne(this.$route.params.id)
.then((person) => {
this.persona.nombre = person.nombre;
this.persona.sexo = person.sexo;
this.persona.edad = person.edad;
this.editMod = true;
});
}
},
methods: {
validarForm() {
this.errors = [];
if (
this.persona.nombre &&
this.persona.edad > -1 &&
this.persona.edad < 200 &&
this.persona.sexo
) {
return true;
}
if (!this.persona.nombre) {
this.errors.push("Nombre debe contener datos");
}
if (typeof this.persona.edad != "number") {
this.errors.push("Edad debe contener un numero");
} else if (this.persona.edad < 0) {
this.errors.push("La edad no puede ser negativa");
} else if (this.persona.edad > 200) {
this.errors.push("La edad supera el limite permitido");
}
if (!this.persona.sexo) {
this.errors.push("Debe seleccionar un sexo");
}
},
enviarPersona() {
if (this.validarForm()) {
let copy = Object.assign({}, this.persona);
if (!this.editMod) {
personsService.save(copy);
} else {
copy.id = this.$route.params.id;
personsService.editPerson(copy);
this.editMod = false;

}
}
this.persona.nombre = "";
this.persona.sexo = "";
this.persona.edad = 0;
router.push("/");
}
}
};
</script>
<style>
</style>


65 changes: 65 additions & 0 deletions Facundo Lastra/src/components/showPersons.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<template>
<section>
<h2>¿Como desea visualizar?</h2>
<select @change="getPersons" name="options" v-model="filtro">
<option value="todos" selected>Todos</option>
<option value="Masculino">Masculino</option>
<option value="Femenino">Femenino</option>
<option value="Otro">Otro</option>
</select>
<ul>
<li v-for="persona in this.getPersons" :key="persona.id">
<singlePerson :person="persona" :id="persona.id" @edit="editPerson" @delete="deletePerson"></singlePerson>
</li>
</ul>
<h3>Hay {{getPersons.length}} persona/s</h3>
</section>
</template>
<script>
import singlePerson from "./singlePerson.vue";
import router from "@/router";
import personsService from "@/service/personsService.js";
export default {
name: "showPersons",
data() {
return {
filtro: "todos",
persons: []
};
},
components: {
singlePerson
},
created() {
this.persons = personsService.getAll();
},
computed: {
getPersons: function() {
let personsfiltred;
if (this.filtro == "todos") {
personsfiltred = this.persons;
} else {
personsfiltred = this.persons.filter(
(persona) => persona.sexo === this.filtro
);
}
return personsfiltred;
}
},
methods: {
editPerson(idPerson){
router.push({ name: 'edit', params: { id: idPerson }});
},
deletePerson(personId){
let persontoDelete = this.persons.find(per => per.id === personId);
let ind = this.persons.indexOf(persontoDelete);
this.persons.splice(ind,1);
personsService.saveAll(this.persons);
}
}
};
</script>
<style>
</style>


23 changes: 23 additions & 0 deletions Facundo Lastra/src/components/singlePerson.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<template>
<li>
<p>{{ person.nombre}} - {{ person.sexo}} - {{person.edad}}</p>
<button @click="deletePerson">delete</button>
<button @click="editPerson">edit</button>
</li>
</template>
<script>
export default {
name: "singlePerson",
props: ['person', 'id'],
methods: {
editPerson(){
let persontoSend = this.person;
this.$emit('edit',persontoSend.id);
},
deletePerson(){
this.$emit('delete',this.person.id);
},
}
};
</script>

10 changes: 10 additions & 0 deletions Facundo Lastra/src/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
router,
render: h => h(App)
}).$mount('#app')
29 changes: 29 additions & 0 deletions Facundo Lastra/src/router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import Vue from 'vue';
import Router from 'vue-router';
import NewPerson from './components/newPerson.vue';
import PersonList from './components/showPersons.vue';

Vue.use(Router);

export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: "home",
component: PersonList,
},
{
path: '/edit/:id',
name: "edit",
component: NewPerson,
props : true
},
{
path: '/add',
name: "add",
component: NewPerson
}
]
})
Loading