akaunting/resources/assets/js/components/AkauntingRecurring.vue

219 lines
6.8 KiB
Vue
Raw Normal View History

2019-11-16 10:21:14 +03:00
<template>
<div class="row pr-0" :class="formClasses">
2019-11-16 10:21:14 +03:00
<base-input :label="title"
2020-04-22 14:50:30 +03:00
name="recurring_frequency"
:class="frequencyClasses"
:error="frequencyError">
2021-11-11 12:02:47 +03:00
<template slot="label">
<label v-if="title" :class="labelClasses">
{{ title }}
<el-tooltip class="item" effect="dark" placement="top-start">
<div slot="content" v-html="tooltip"></div>
<i class="far fa-question-circle fa-xs" style="vertical-align: top;"></i>
</el-tooltip>
</label>
</template>
2019-11-16 10:21:14 +03:00
<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>
2021-11-11 12:02:47 +03:00
<base-input :label="titleInterval"
2020-04-22 14:50:30 +03:00
name="recurring_interval"
type="number"
:value="0"
@input="change"
2020-04-22 14:50:30 +03:00
:class="invertalClasses"
:error="intervalError"
v-model="recurring_interval"
>
2019-11-16 10:21:14 +03:00
</base-input>
2021-11-11 12:02:47 +03:00
<base-input :label="titleFrequency"
2020-04-22 14:50:30 +03:00
name="recurring_custom_frequency"
:class="customFrequencyClasses"
:error="customFrequencyError">
2019-11-16 10:21:14 +03:00
<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>
2021-11-11 12:02:47 +03:00
<base-input :label="titleCount"
2020-04-22 14:50:30 +03:00
name="recurring_count"
type="number"
:value="0"
@input="change"
2020-04-22 14:50:30 +03:00
:class="countClasses"
:error="countError"
v-model="recurring_count">
2019-11-16 10:21:14 +03:00
</base-input>
</div>
</template>
<script>
2021-11-11 12:02:47 +03:00
import { Select, Option, Tooltip } from 'element-ui'
2019-11-16 10:21:14 +03:00
export default {
name: 'akaunting-recurring',
components: {
[Select.name]: Select,
[Option.name]: Option,
2021-11-11 12:02:47 +03:00
[Tooltip.name]: Tooltip,
2019-11-16 10:21:14 +03:00
},
props: {
title: {
type: String,
default: '',
description: "Modal header title"
},
2021-11-11 12:02:47 +03:00
titleInterval: {
type: String,
default: '',
description: "Title of interval"
},
titleFrequency: {
type: String,
default: '',
description: "Title of frequency"
},
titleCount: {
type: String,
default: '',
description: "Title of count"
},
tooltip: {
type: String,
default: '',
description: "Tooltip message"
},
2019-11-16 10:21:14 +03:00
placeholder: {
type: String,
default: '',
description: "Modal header title"
},
formClasses: {
default: 'col-md-6',
},
2019-11-16 10:21:14 +03:00
formError: null,
frequencyOptions: null,
frequencyValue: null,
frequencyError: null,
2020-04-22 14:50:30 +03:00
intervalValue: {
type: [Number, String],
default: 0,
description: "Default interval value"
},
2019-11-16 10:21:14 +03:00
intervalError: null,
customFrequencyOptions: null,
customFrequencyValue: null,
customFrequencyError: null,
2020-04-22 14:50:30 +03:00
countValue: {
type: [Number, String],
default: 0,
description: "Default count value"
},
2019-11-16 10:21:14 +03:00
countError: null,
icon: {
type: String,
description: "Prepend icon (left)"
2021-11-11 12:02:47 +03:00
},
labelClasses: {
type: String,
description: "Input label css classes",
default: "form-control-label"
},
2019-11-16 10:21:14 +03:00
},
data() {
return {
2020-04-22 14:50:30 +03:00
recurring_frequency: null,
recurring_interval: null,
recurring_custom_frequency: null,
recurring_count: null,
2019-11-16 10:21:14 +03:00
frequencyClasses: 'col-md-12',
invertalClasses: 'col-md-2 d-none',
customFrequencyClasses: 'col-md-4 d-none',
countClasses: 'col-md-2 d-none'
}
},
2020-04-22 14:50:30 +03:00
created() {
this.recurring_frequency = this.frequencyValue;
this.recurring_interval = this.intervalValue;
this.recurring_custom_frequency = this.customFrequencyValue;
this.recurring_count = this.countValue;
},
2019-11-16 10:21:14 +03:00
mounted() {
this.recurring_frequency = this.frequencyValue;
if (this.recurring_frequency != 'custom') {
this.recurring_custom_frequency = '';
this.recurring_interval = '0';
}
2019-11-16 10:21:14 +03:00
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>