Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <template>
- <div class="js-panel js-panel-info panel-info-position-resp height-0100 bg-color-w-0100 width-0 border-l-1 border-solid border-color-b-010" data-panel= "info" data-status="close">
- <div class="js-panel-info__content min-width-320 padding-l-16 padding-r-16 height-0100 padding-b-30-resp overflow-y-a overflow-x-h">
- <div class="sticky bg-color-w-0100">
- <div class="display-f align-items-c height-50 border-b-1 border-solid border-color-b-010">
- <span class="font-size-l icon-folder"/>
- <h2 class="font-size-l font-weight-sb padding-l-10">{{chooseModalText(project)}}</h2>
- <button class="frwbtn js-panel-info__button padding-l-10 margin-l-auto" data-panel="info" @click="openPanel">
- <span class="icon-arrow-right padding-l-5 font-size-xs"/>
- </button>
- </div>
- </div>
- <div>
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <p class="font-weight-sb opacity-050 padding-b-10 font-size-s">Nombre</p>
- <input v-model="project.name" class="width-0100 frwbtn border-radius-2 bg-color-p-010 padding-t-5 padding-b-5 padding-l-10 padding-r-10 color-p-0100 font-size-s box-sizing-bb" >
- </div>
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <label class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="cliente">Cliente</label>
- <div class="position-r">
- <select id="cliente" v-model="project.client_id" class="width-0100 border-radius-2 frwbtn bg-color-p-010 padding-t-5 padding-b-5 padding-l-10 padding-r-10 color-p-0100 font-size-s box-sizing-bb" type="text" placeholder="Seleccione cliente...">
- <option v-for="client of clients" :key="client.id" :value="client.id"> {{client.name}}</option>
- </select>
- <span class="icon-select font-size-select position-a right-10 color-p-0100 top-12"/>
- </div>
- </div>
- <!--<div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <label class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="Fecha-de-entrada">Fecha de entrada</label>
- <input id="fecha-de-entrada" v-model="project.enterDate" class="width-0100 frwbtn border-radius-2 bg-color-p-010 padding-t-5 padding-b-5 padding-l-10 padding-r-10 color-p-0100 font-size-s box-sizing-bb" type="date" placeholder="dd/mm/aaaa">
- </div>-->
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <label class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="description">Descripción</label>
- <textarea v-model="project.description" class="width-0100 frwbtn border-radius-2 bg-color-p-010 padding-t-5 padding-b-5 padding-l-10 padding-r-10 color-p-0100 font-size-s box-sizing-bb" name="description" rows="5" placeholder="Breve descripción del proyecto"/>
- </div>
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <p class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="fases">Fases</p>
- <div class="display-f">
- <div class="width-050">
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="1"> Fase 1</label>
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="2"> Fase 2</label>
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="3"> Fase 3</label>
- </div>
- <div class="width-050">
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="4"> Fase 4</label>
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="5"> Fase 5</label>
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="selectedPhases" class="checkbox margin-r-5" type="checkbox" value="6"> Fase 6</label>
- </div>
- </div>
- </div>
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <p class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="carpeta">Carpeta</p>
- <label class="display-b padding-t-8 padding-b-8 display-f align-items-c"><input v-model="project.carpeta" type="checkbox" value="1" class="checkbox margin-r-5" > Proyecto con carpeta</label>
- </div>
- <div class="padding-t-10 padding-b-10 border-b-1 border-solid border-color-b-010">
- <label class="font-weight-sb opacity-050 padding-b-10 font-size-s" for="personas">Personas</label>
- <select id="personas" v-model="selectedUsers" multiple class="width-0100 padding-t-5 color-p-0100 font-size-s box-sizing-bb">
- <option v-for="user of users" :value="user.id" :key="user.id">{{user.name}}</option>
- </select>
- </div>
- <button class="width-0100 frwbtn frwbtn-primary padding-t-10 padding-b-10 margin-t-20 border-radius-2" v-on:click="chooseProject(project)"> {{chooseButtonText(project)}}</button>
- </div>
- </div>
- </div>
- </template>
- <script>
- import Vue from 'vue'
- import SlimSelect from 'slim-select'
- import ApiClient from '@/api/ApiClient'
- import {get} from 'lodash'
- import moment from 'moment'
- import EventBus from '@/EventBus'
- export default {
- name: 'modal-proyecto',
- props: {
- project: {
- type: Object,
- default: function () {
- return {
- name: '',
- client_id: '',
- enterDate: '',
- description: '',
- carpeta: false,
- users: [],
- clients: [],
- phases: []
- }
- }
- }
- },
- data () {
- return {
- clients: [],
- users: [],
- clientFolders: [],
- yearFolders: [],
- idRaiz: '0B3lWV2-l2m-mdkxtN1Vxcmo0YW8',
- newProjectId: '',
- newProjectRef: 0,
- actualYear: '',
- yearFolderId: '',
- clientFolderId: ''
- }
- },
- computed: {
- selectedUsers: {
- get () {
- return get(this.project, 'users', []).map(user => user.id ? user.id : user)
- },
- set (users) {
- Vue.set(this.project, 'users', users)
- }
- },
- selectedPhases: {
- get () {
- return get(this.project, 'phases', []).map(phase => phase.phase_id ? phase.phase_id : phase)
- },
- set (phases) {
- Vue.set(this.project, 'phases', phases)
- }
- }
- },
- created () {
- ApiClient.getClientApi().get('/api/clients')
- .then(response => {
- this.clients = response.data.data
- })
- ApiClient.getClientApi().get('/api/users')
- .then(response => {
- this.users = response.data.data
- })
- ApiClient.getClientApi().get('/api/clientFolders')
- .then(response => {
- this.clientFolders = response.data.data
- })
- ApiClient.getClientApi().get('/api/yearFolders')
- .then(response => {
- this.yearFolders = response.data.data
- })
- this.actualYear = new Date()
- },
- mounted () {
- return new SlimSelect({
- select: '#personas'
- })
- },
- methods: {
- saveProject () {
- ApiClient.getClientApi().get('/api/maxRef')
- .then(response => {
- this.newProjectRef = response.data.data
- let checkYear = get((this.yearFolders).find(x => x.year === moment(this.actualYear).format('YYYY')), table_id, 0)
- if (checkYear === 0) {
- ApiClient.getClientApi().post('/create-dir-inside',
- { folderId: this.idRaiz, folderName: 'REF' + moment(this.actualYear).format('YYYY') })
- .then(response => {
- this.yearFolderId = response.data
- ApiClient.getClientApi().post('/api/yearFolders',
- {year: moment(this.actualYear).format('YYYY'), table_id: this.yearFolderId})
- })
- } else {
- this.yearFolderId = checkYear
- }
- let checkClient = get((this.clientFolders).find(x => x.client_id === this.project.client_id), table_id, 0)
- if (checkClient === 0) {
- let clientName = this.getClientNameById(this.project.client_id)
- ApiClient.getClientApi().post('/create-dir-inside',
- {folderId: this.yearFolderId, folderName: clientName})
- .then(response => {
- this.clientFolderId = response.data
- ApiClient.getClientApi().post('/api/clientFolders',
- {year: moment(this.actualYear).format('YYYY'), client_id: clientName, table_id: this.clientFolderId})
- })
- } else {
- this.clientFolderId = checkClient
- }
- let projectName = (this.newProjectRef + 1) + 'R' + moment(this.actualYear).format('YY') + '_(' + (this.project.name).replace(/ /g, '_') + ')'
- ApiClient.getClientApi().post('/create-dir-inside',
- { folderId: this.clientFolderId, folderName: projectName })
- .then(response => {
- this.newProjectId = response.data
- ApiClient.getClientApi().post('/create-dir-project',
- { folderId: response.data })
- ApiClient.getClientApi().post('/api/projects', {
- ...this.project,
- enterDate: new Date().toISOString().substring(0, 10),
- folder_id: this.newProjectId
- })
- .then(response => {
- console.log('guardado')
- this.$notify({
- group: 'foo',
- type: 'success',
- title: 'Proyecto creado',
- text: 'Nuevo Proyecto creado con éxito!'
- })
- })
- .catch(error => {
- console.log(error.response)
- })
- })
- // guardar la carpeta en el id de la carpeta de cliente
- /* ApiClient.getClientApi().get('/create-dir/' + projectName)
- .then(response => {
- this.newProjectId = response.data
- ApiClient.getClientApi().post('/api/projects', {
- ...this.project,
- enterDate: new Date().toISOString().substring(0, 10),
- folder_id: this.newProjectId
- })
- .then(response => {
- console.log('guardado')
- this.$notify({
- group: 'foo',
- type: 'success',
- title: 'Proyecto creado',
- text: 'Nuevo Proyecto creado con éxito!'
- })
- })
- .catch(error => {
- console.log(error.response)
- })
- }) */
- })
- },
- editProject (project) {
- ApiClient.getClientApi().post('/api/projects/' + project.id, {
- ...this.project,
- _method: 'PATCH',
- users: this.selectedUsers,
- phases: this.selectedPhases})
- .then(response => {
- console.log('cambiado')
- this.$notify({
- group: 'foo',
- type: 'success',
- title: 'Proyecto editado',
- text: '¡Cambios guardados con éxito!'
- })
- })
- .catch(error => {
- console.log(error.response)
- })
- },
- chooseProject (project) {
- if (this.project.id != null) {
- this.editProject(this.project)
- } else {
- this.saveProject()
- }
- },
- chooseButtonText (project) {
- if (this.project.id != null) {
- return 'Guardar cambios'
- } else {
- return 'Crear proyecto'
- }
- },
- chooseModalText (project) {
- if (this.project.id != null) {
- return 'Editar proyecto'
- } else {
- return 'Nuevo proyecto'
- }
- },
- openPanel () {
- EventBus.$emit('openPanelProyecto')
- },
- getClientNameById (id) {
- let clientName = 'no tiene nombre'
- ApiClient.getClientApi().get('/api/clients/' + id)
- .then(response => {
- clientName = response.data.data.name
- })
- return clientName
- }
- }
- }
- </script>
- <!-- Add "scoped" attribute to limit CSS to this component only -->
- <style scoped lang="scss">
- </style>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement