akaunting/resources/assets/js/components/AkauntingDashboard.vue
2019-12-02 14:45:50 +03:00

213 lines
5.9 KiB
Vue

<template>
<akaunting-modal
:title="title"
:show="display"
@cancel="onCancel"
v-if="display">
<template #modal-body>
<div class="modal-body text-left">
<div class="row">
<div class="col-md-12">
<base-input
v-model="form.name"
:label="text.name"
prepend-icon="fas fa-tag"
:placeholder="text.name"
inputGroupClasses="input-group-merge"
></base-input>
</div>
<!--
<akaunting-radio-group
:name="'enabled'"
:text="text.enabled"
:value="form.enabled"
@change="onEnabled"
:enable="text.yes"
:disable="text.no"
:col="'col-md-12'"
></akaunting-radio-group>
-->
</div>
</div>
</template>
<template #card-footer>
<div class="row">
<div class="col-md-12">
<div class="float-right">
<button type="button" class="btn btn-icon btn-outline-secondary" @click="onCancel">
<span class="btn-inner--icon"><i class="fas fa-times"></i></span>
<span class="btn-inner--text">{{ text.cancel }}</span>
</button>
<button :disabled="form.loading" type="button" class="btn btn-icon btn-success button-submit" @click="onSave">
<div v-if="form.loading" class="aka-loader-frame"><div class="aka-loader"></div></div>
<span v-if="!form.loading" class="btn-inner--icon"><i class="fas fa-save"></i></span>
<span v-if="!form.loading" class="btn-inner--text">{{ text.save }}</span>
</button>
</div>
</div>
</div>
</template>
</akaunting-modal>
</template>
<script>
import AkauntingModal from "./AkauntingModal";
import AkauntingRadioGroup from './forms/AkauntingRadioGroup';
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import Form from './../plugins/form';
import BulkAction from './../plugins/bulk-action';
import NProgressAxios from './../plugins/nprogress-axios';
export default {
name: 'akaunting-dashobard',
components: {
AkauntingModal,
AkauntingRadioGroup
},
props: {
show: Boolean,
title: {
type: String,
default: '',
description: "Modal header title"
},
text: {},
name: {
type: String,
default: ''
},
enabled: Number,
type: {
type: String,
default: 'create',
description: "Modal header title"
},
dashboard_id: {
type: Number,
default: 0,
description: "Modal header title"
},
},
data() {
return {
form: {
loading: false,
name: this.name,
enabled: this.enabled
},
display: this.show
};
},
methods: {
closeModal() {
this.$emit("update:show", false);
this.$emit("close");
},
onSave() {
this.form.loading = true;
let data = Object.assign({}, this.form);
delete data.loading;
var self = this;
var path = url + '/common/dashboards';
if ((self.type != 'create')) {
path = url + '/common/dashboards/' + self.dashboard_id;
data['_method'] = 'PATCH';
}
axios.post(path, data)
.then(function (response) {
self.form.loading = false;
if (response.data.redirect) {
self.form.loading = true;
window.location.href = response.data.redirect;
}
self.form.response = response.data;
})
.catch(function (error) {
this.errors.record(error.response.data.errors);
self.form.loading = false;
});
},
onCancel() {
this.display = false;
this.form.name = '';
this.form.enabled = 1;
this.$emit("cancel");
},
onEnabled(value) {
this.form.enabled = value;
}
},
watch: {
show(val) {
let documentClasses = document.body.classList;
if (val) {
documentClasses.add("modal-open");
} else {
documentClasses.remove("modal-open");
}
}
}
}
</script>
<style>
.loader10 {
width: 28px;
height: 28px;
border-radius: 50%;
position: relative;
animation: loader10 0.9s ease alternate infinite;
animation-delay: 0.36s;
top: 50%;
margin: -42px auto 0;
}
.loader10::after, .loader10::before {
content: '';
position: absolute;
width: 28px;
height: 28px;
border-radius: 50%;
animation: loader10 0.9s ease alternate infinite;
}
.loader10::before {
left: -40px;
animation-delay: 0.18s;
}
.loader10::after {
right: -40px;
animation-delay: 0.54s;
}
@keyframes loader10 {
0% {
box-shadow: 0 28px 0 -28px #0052ec;
}
100% {
box-shadow: 0 28px 0 #0052ec;
}
}
</style>