393 lines
13 KiB
JavaScript
Raw Normal View History

2020-02-18 11:49:28 +03:00
import Vue from 'vue';
2019-11-16 10:21:14 +03:00
import axios from 'axios';
import AkauntingSearch from './../components/AkauntingSearch';
import AkauntingModal from './../components/AkauntingModal';
import AkauntingMoney from './../components/AkauntingMoney';
2020-01-29 12:34:51 +03:00
import AkauntingModalAddNew from './../components/AkauntingModalAddNew';
2019-11-16 10:21:14 +03:00
import AkauntingRadioGroup from './../components/forms/AkauntingRadioGroup';
import AkauntingSelect from './../components/AkauntingSelect';
import AkauntingSelectRemote from './../components/AkauntingSelectRemote';
2019-11-16 10:21:14 +03:00
import AkauntingDate from './../components/AkauntingDate';
import AkauntingRecurring from './../components/AkauntingRecurring';
import AkauntingHtmlEditor from './../components/AkauntingHtmlEditor';
2020-08-26 17:28:46 +03:00
import AkauntingCountdown from './../components/AkauntingCountdown';
2019-11-16 10:21:14 +03:00
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import NProgressAxios from './../plugins/nprogress-axios';
import { Select, Option, Steps, Step, Button, Link, Tooltip, ColorPicker } from 'element-ui';
2019-11-16 10:21:14 +03:00
2020-02-03 12:21:22 +03:00
import Form from './../plugins/form';
2019-11-16 10:21:14 +03:00
export default {
components: {
AkauntingSearch,
AkauntingRadioGroup,
AkauntingSelect,
AkauntingSelectRemote,
AkauntingMoney,
2019-11-16 10:21:14 +03:00
AkauntingModal,
2020-01-29 12:34:51 +03:00
AkauntingModalAddNew,
2019-11-16 10:21:14 +03:00
AkauntingDate,
AkauntingRecurring,
AkauntingHtmlEditor,
2020-08-26 17:28:46 +03:00
AkauntingCountdown,
2019-11-16 10:21:14 +03:00
[Select.name]: Select,
2020-01-29 12:34:51 +03:00
[Option.name]: Option,
[Steps.name]: Steps,
[Step.name]: Step,
[Button.name]: Button,
[Link.name]: Link,
2020-02-12 16:09:44 +03:00
[Tooltip.name]: Tooltip,
[ColorPicker.name]: ColorPicker,
2019-11-16 10:21:14 +03:00
},
data: function () {
return {
2020-01-29 12:34:51 +03:00
component: '',
currency: null,
2019-11-16 10:21:14 +03:00
}
},
directives: {
//money: VMoney
2019-11-16 10:21:14 +03:00
},
mounted() {
this.checkNotify();
if (aka_currency) {
this.currency = aka_currency;
}
2019-11-16 10:21:14 +03:00
},
methods: {
// Check Default set notify > store / update action
checkNotify: function () {
if (!flash_notification) {
return false;
}
flash_notification.forEach(notify => {
let type = notify.level;
this.$notify({
message: notify.message,
timeout: 5000,
icon: 'fas fa-bell',
type
});
});
},
// Form Submit
onSubmit() {
this.form.submit();
},
onHandleFileUpload(key, event) {
this.form[key] = '';
this.form[key] = event.target.files[0];
},
// Bulk Action Select all
onSelectAll() {
this.bulk_action.selectAll();
},
// Bulk Action Select checked/ unchecked
onSelect() {
this.bulk_action.select();
},
// Bulk Action use selected Change
onChange(event) {
var result = this.bulk_action.change(event);
},
// Bulk Action use selected Action
onAction() {
this.bulk_action.action();
},
// Bulk Action modal cancel
onCancel() {
this.bulk_action.modal = false;
},
// Bulk Action Clear selected items
onClear() {
this.bulk_action.modal = false;
this.bulk_action.clear();
},
// List Enabled column status changes
onStatus(item_id, event) {
this.bulk_action.status(item_id, event, this.$notify);
},
// Actions > Delete
confirmDelete(url, title, message, button_cancel, button_delete) {
2020-02-09 13:10:26 +03:00
let confirm = {
url: url,
title: title,
message: message,
button_cancel: button_cancel,
button_delete: button_delete,
show: true
};
this.component = Vue.component('add-new-component', (resolve, reject) => {
resolve({
2020-08-22 16:07:36 +03:00
template : '<div id="dynamic-delete-component"><akaunting-modal v-if="confirm.show" :show="confirm.show" :title="confirm.title" :message="confirm.message" :button_cancel="confirm.button_cancel" :button_delete="confirm.button_delete" @confirm="onDelete" @cancel="cancelDelete"></akaunting-modal></div>',
2020-02-09 13:10:26 +03:00
components: {
AkauntingModal,
},
data: function () {
return {
confirm: confirm,
}
},
methods: {
// Delete action post
async onDelete() {
let promise = Promise.resolve(axios({
method: 'DELETE',
url: this.confirm.url,
}));
promise.then(response => {
if (response.data.redirect) {
window.location.href = response.data.redirect;
}
})
.catch(error => {
this.success = false;
});
},
// Close modal empty default value
cancelDelete() {
this.confirm.show = false;
},
}
})
2019-11-16 10:21:14 +03:00
});
},
// Change bank account get money and currency rate
onChangeAccount(account_id) {
axios.get(url + '/banking/accounts/currency', {
params: {
account_id: account_id
}
})
.then(response => {
this.currency = response.data;
2019-11-16 10:21:14 +03:00
this.form.currency_code = response.data.currency_code;
this.form.currency_rate = response.data.currency_rate;
})
.catch(error => {
});
},
// Change currency get money
onChangeCurrency(currency_code) {
axios.get(url + '/settings/currencies/currency', {
params: {
code: currency_code
}
})
.then(response => {
this.currency = response.data;
this.form.currency_code = response.data.code;
this.form.currency_rate = response.data.rate;
})
.catch(error => {
});
},
// Pages limit change
onChangePaginationLimit(event) {
let path = '';
if (window.location.search.length) {
if (window.location.search.includes('limit')) {
let queries = [];
let query = window.location.search;
query = query.replace('?', '');
queries = query.split('&');
path = window.location.origin + window.location.pathname;
queries.forEach(function (_query, index) {
let query_partials = _query.split('=');
if (index == 0) {
path += '?'
} else {
path += '&';
}
if (query_partials[0] == 'limit') {
path += 'limit=' + event.target.value;
} else {
path += query_partials[0] + '=' + query_partials[1];
}
});
} else {
path = window.location.href + '&limit=' + event.target.value;
}
} else {
path = window.location.href + '?limit=' + event.target.value;
}
window.location.href = path;
2020-01-29 12:34:51 +03:00
},
// Dynamic component get path view and show it.
2020-01-29 12:34:51 +03:00
onDynamicComponent(path)
{
axios.get(path)
.then(response => {
let html = response.data.html;
this.component = Vue.component('add-new-component', (resolve, reject) => {
resolve({
template : '<div id="dynamic-component">' + html + '</div>',
components: {
AkauntingSearch,
AkauntingRadioGroup,
AkauntingSelect,
AkauntingSelectRemote,
AkauntingModal,
AkauntingModalAddNew,
AkauntingDate,
AkauntingRecurring,
[Select.name]: Select,
[Option.name]: Option,
[Steps.name]: Steps,
[Step.name]: Step,
[Button.name]: Button,
},
created: function() {
2020-09-25 17:35:48 +03:00
this.form = new Form('form-dynamic-component');
2020-01-29 12:34:51 +03:00
},
mounted() {
2020-02-04 16:33:01 +03:00
let form_id = document.getElementById('dynamic-component').querySelectorAll('form')[1].id;
2020-01-29 12:34:51 +03:00
this.form = new Form(form_id);
},
data: function () {
return {
form: {},
dynamic: {
data: dynamic_data
}
}
},
methods: {
}
})
});
})
.catch(e => {
this.errors.push(e);
})
.finally(function () {
// always executed
});
},
// Delete attachment file
onDeleteFile(file_id, url, title, message, button_cancel, button_delete) {
let file_data = {
page: null,
key: null,
value: null,
ajax: true,
redirect: window.location.href
};
if (this.form['page' + file_id]) {
file_data.page = this.form['page' + file_id];
}
if (this.form['key' + file_id]) {
file_data.key = this.form['key' + file_id];
}
if (this.form['value' + file_id]) {
file_data.value = this.form['value' + file_id];
}
let confirm = {
url: url,
title: title,
message: message,
button_cancel: button_cancel,
button_delete: button_delete,
file_data: file_data,
show: true
};
this.component = Vue.component('add-new-component', (resolve, reject) => {
resolve({
2020-08-22 16:07:36 +03:00
template : '<div id="dynamic-delete-file-component"><akaunting-modal v-if="confirm.show" :show="confirm.show" :title="confirm.title" :message="confirm.message" :button_cancel="confirm.button_cancel" :button_delete="confirm.button_delete" @confirm="onDelete" @cancel="cancelDelete"></akaunting-modal></div>',
components: {
AkauntingModal,
},
data: function () {
return {
confirm: confirm,
}
},
methods: {
// Delete action post
async onDelete() {
let promise = Promise.resolve(axios({
method: 'DELETE',
url: this.confirm.url,
data: file_data
}));
promise.then(response => {
if (response.data.redirect) {
window.location.href = response.data.redirect;
}
})
.catch(error => {
this.success = false;
});
},
// Close modal empty default value
cancelDelete() {
this.confirm.show = false;
},
}
})
});
},
2019-11-16 10:21:14 +03:00
}
}