akaunting/resources/assets/js/components/AkauntingRecurring.vue
2021-01-19 23:24:06 +03:00

187 lines
5.7 KiB
Vue

<template>
<div class="row pr-0" :class="formClasses">
<base-input :label="title"
name="recurring_frequency"
:class="frequencyClasses"
:error="frequencyError">
<el-select v-model="recurring_frequency" @input="change" filterable
:placeholder="placeholder">
<template slot="prefix">
<span class="el-input__suffix-inner el-select-icon">
<i :class="'el-input__icon el-icon-refresh'"></i>
</span>
</template>
<el-option v-for="(label, value) in frequencyOptions"
:key="label"
:label="label"
:value="value">
</el-option>
</el-select>
</base-input>
<base-input :label="''"
name="recurring_interval"
type="number"
:value="0"
@input="change"
class="recurring-single"
:class="invertalClasses"
:error="intervalError"
v-model="recurring_interval"
>
</base-input>
<base-input :label="''"
name="recurring_custom_frequency"
class="recurring-single"
:class="customFrequencyClasses"
:error="customFrequencyError">
<el-select v-model="recurring_custom_frequency" @input="change" filterable
:placeholder="placeholder">
<el-option v-for="(label, value) in customFrequencyOptions"
:key="label"
:label="label"
:value="value">
</el-option>
</el-select>
</base-input>
<base-input :label="''"
name="recurring_count"
type="number"
:value="0"
@input="change"
class="recurring-single"
:class="countClasses"
:error="countError"
v-model="recurring_count">
</base-input>
</div>
</template>
<script>
import { Select, Option } from 'element-ui'
export default {
name: 'akaunting-recurring',
components: {
[Select.name]: Select,
[Option.name]: Option,
},
props: {
title: {
type: String,
default: '',
description: "Modal header title"
},
placeholder: {
type: String,
default: '',
description: "Modal header title"
},
formClasses: {
default: 'col-md-6',
},
formError: null,
frequencyOptions: null,
frequencyValue: null,
frequencyError: null,
intervalValue: {
type: [Number, String],
default: 0,
description: "Default interval value"
},
intervalError: null,
customFrequencyOptions: null,
customFrequencyValue: null,
customFrequencyError: null,
countValue: {
type: [Number, String],
default: 0,
description: "Default count value"
},
countError: null,
icon: {
type: String,
description: "Prepend icon (left)"
}
},
data() {
return {
recurring_frequency: null,
recurring_interval: null,
recurring_custom_frequency: null,
recurring_count: null,
frequencyClasses: 'col-md-12',
invertalClasses: 'col-md-2 d-none',
customFrequencyClasses: 'col-md-4 d-none',
countClasses: 'col-md-2 d-none'
}
},
created() {
this.recurring_frequency = this.frequencyValue;
this.recurring_interval = this.intervalValue;
this.recurring_custom_frequency = this.customFrequencyValue;
this.recurring_count = this.countValue;
},
mounted() {
this.recurring_frequency = this.frequencyValue;
if (this.recurring_frequency != 'custom') {
this.recurring_custom_frequency = '';
this.recurring_interval = '0';
}
this.frequencyChanges();
this.$emit('recurring_frequency', this.recurring_frequency);
this.$emit('recurring_interval', this.recurring_interval);
this.$emit('recurring_custom_frequency', this.recurring_custom_frequency);
this.$emit('recurring_count', this.recurring_count);
},
methods: {
change() {
this.$emit('change', this.recurring_frequency);
this.$emit('recurring_frequency', this.recurring_frequency);
this.$emit('recurring_interval', this.recurring_interval);
this.$emit('recurring_custom_frequency', this.recurring_custom_frequency);
this.$emit('recurring_count', this.recurring_count);
this.frequencyChanges();
},
frequencyChanges() {
if (this.recurring_frequency == 'custom') {
this.frequencyClasses = 'col-md-4';
this.invertalClasses = 'col-md-2';
this.customFrequencyClasses = 'col-md-4';
this.countClasses = 'col-md-2 pr-0';
} else if (this.recurring_frequency == 'no' || this.recurring_frequency == '') {
this.frequencyClasses = 'col-md-12 pr-0';
this.invertalClasses = 'col-md-2 d-none';
this.customFrequencyClasses = 'col-md-4 d-none';
this.countClasses = 'col-md-2 d-none';
} else {
this.frequencyClasses = 'col-md-10';
this.invertalClasses = 'col-md-2 d-none';
this.customFrequencyClasses = 'col-md-4 d-none';
this.countClasses = 'col-md-2 pr-0';
}
}
}
}
</script>