366 lines
11 KiB
Vue
366 lines
11 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-font"
|
|
:placeholder="placeholder.name"
|
|
inputGroupClasses="input-group-merge">
|
|
</base-input>
|
|
</div>
|
|
|
|
<div class="col-md-12">
|
|
<base-input
|
|
:label="text.type">
|
|
<span class="el-input__prefix">
|
|
<span class="el-input__suffix-inner el-select-icon">
|
|
<i class="select-icon-position el-input__icon fa fa-bars"></i>
|
|
</span>
|
|
</span>
|
|
<el-select
|
|
class="select-primary"
|
|
v-model="form.widget_id" filterable
|
|
:placeholder="placeholder.type">
|
|
<el-option v-for="option in types"
|
|
class="select-primary"
|
|
:key="option.name"
|
|
:label="option.name"
|
|
:value="option.id">
|
|
</el-option>
|
|
</el-select>
|
|
</base-input>
|
|
</div>
|
|
|
|
<div class="col-md-12">
|
|
<base-input
|
|
:label="text.width">
|
|
<span class="el-input__prefix">
|
|
<span class="el-input__suffix-inner el-select-icon">
|
|
<i class="select-icon-position el-input__icon fas fa-ruler-horizontal"></i>
|
|
</span>
|
|
</span>
|
|
<el-select
|
|
class="select-primary"
|
|
v-model="form.width" filterable
|
|
:placeholder="placeholder.width">
|
|
<el-option v-for="option in widthOptions"
|
|
class="select-primary"
|
|
:key="option.label"
|
|
:label="option.label"
|
|
:value="option.value">
|
|
</el-option>
|
|
</el-select>
|
|
</base-input>
|
|
</div>
|
|
|
|
<div class="col-md-12">
|
|
<base-input
|
|
v-model="form.sort"
|
|
:label="text.sort"
|
|
prepend-icon="fas fa-sort"
|
|
:placeholder="placeholder.sort"
|
|
inputGroupClasses="input-group-merge"></base-input>
|
|
</div>
|
|
</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>
|
|
|
|
<style>
|
|
.form-group .el-select {
|
|
width: 100%
|
|
}
|
|
|
|
.el-input__prefix
|
|
{
|
|
left: 20px;
|
|
z-index: 999;
|
|
top: 2px;
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner {
|
|
font-size: .875rem;
|
|
width: 100%;
|
|
height: calc(1.5em + 1.25rem + 2px);
|
|
-webkit-transition: all .15s ease-in-out;
|
|
transition: all .15s ease-in-out
|
|
}
|
|
|
|
@media (prefers-reduced-motion:reduce) {
|
|
.el-select .el-input .el-input__inner {
|
|
-webkit-transition: none;
|
|
transition: none
|
|
}
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner:focus {
|
|
border-color: #324cdd!important;
|
|
border: 1px solid #2a44db
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner::-webkit-input-placeholder {
|
|
color: #adb5bd;
|
|
opacity: 1
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner::-moz-placeholder {
|
|
color: #adb5bd;
|
|
opacity: 1
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner::-ms-input-placeholder {
|
|
color: #adb5bd;
|
|
opacity: 1
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner::placeholder {
|
|
color: #adb5bd;
|
|
opacity: 1
|
|
}
|
|
|
|
.el-select .el-input .el-input__inner:disabled {
|
|
background-color: #e9ecef;
|
|
opacity: 1
|
|
}
|
|
|
|
.el-select .el-input.is-focus .el-input__inner {
|
|
border-color: #324cdd!important;
|
|
border: 1px solid #2a44db
|
|
}
|
|
|
|
.el-select-dropdown.el-popper .el-select-dropdown__item.selected,.el-select-dropdown.el-popper.is-multiple .el-select-dropdown__item.selected {
|
|
color: #5e72e4
|
|
}
|
|
|
|
.el-select .el-select__tags {
|
|
padding-left: 10px
|
|
}
|
|
|
|
.el-select .el-select__tags .el-tag {
|
|
display: -webkit-box;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-pack: center;
|
|
-ms-flex-pack: center;
|
|
justify-content: center;
|
|
-webkit-box-align: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
padding: .625rem .625rem .5rem;
|
|
height: 25px;
|
|
margin: .125rem;
|
|
border-radius: .25rem;
|
|
background: #172b4d;
|
|
color: #fff;
|
|
line-height: 1.5;
|
|
cursor: pointer;
|
|
-webkit-box-shadow: 0 1px 2px rgba(68,68,68,.25);
|
|
box-shadow: 0 1px 2px rgba(68,68,68,.25);
|
|
-webkit-transition: all .15s ease;
|
|
transition: all .15s ease
|
|
}
|
|
|
|
@media (prefers-reduced-motion:reduce) {
|
|
.el-select .el-select__tags .el-tag {
|
|
-webkit-transition: none;
|
|
transition: none
|
|
}
|
|
}
|
|
|
|
.el-select .el-select__tags .el-tag .el-tag__close.el-icon-close {
|
|
background-color: transparent;
|
|
color: #fff;
|
|
font-size: 12px
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
import axios from 'axios';
|
|
import { Select, Option } from 'element-ui';
|
|
import AkauntingModal from "./AkauntingModal";
|
|
import NProgress from 'nprogress'
|
|
import 'nprogress/nprogress.css'
|
|
import Form from './../plugins/form';
|
|
import NProgressAxios from './../plugins/nprogress-axios';
|
|
|
|
export default {
|
|
name: 'akaunting-widget',
|
|
|
|
components: {
|
|
AkauntingModal,
|
|
[Select.name]: Select,
|
|
[Option.name]: Option,
|
|
},
|
|
|
|
props: {
|
|
show: Boolean,
|
|
action: {
|
|
type: String,
|
|
default: 'create',
|
|
description: "Modal header title"
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: '',
|
|
description: "Modal header title"
|
|
},
|
|
text: {},
|
|
placeholder: {},
|
|
name: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
width: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
type: {
|
|
type: String,
|
|
default: 'create',
|
|
description: "Modal header title"
|
|
},
|
|
sort: {
|
|
type: String,
|
|
default: 'create',
|
|
description: "Modal header title"
|
|
},
|
|
types: {},
|
|
dashboard_id: {
|
|
type: Number,
|
|
default: 0,
|
|
description: "Modal header title"
|
|
},
|
|
widget_id: {
|
|
type: Number,
|
|
default: 0,
|
|
description: "Modal header title"
|
|
},
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
widthOptions: [
|
|
{
|
|
label: '25%',
|
|
value: 'col-md-3'
|
|
},
|
|
{
|
|
label: '33%',
|
|
value: 'col-md-4'
|
|
},
|
|
{
|
|
label: '50%',
|
|
value: 'col-md-6'
|
|
},
|
|
{
|
|
label: '100%',
|
|
value: 'col-md-12'
|
|
}
|
|
],
|
|
form: {
|
|
loading: false,
|
|
name: this.name,
|
|
width: this.width,
|
|
widget_id: this.type,
|
|
sort: this.sort,
|
|
dashboard_id: this.dashboard_id
|
|
},
|
|
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/widgets';
|
|
|
|
if ((self.action != 'create')) {
|
|
path = url + '/common/widgets/' + self.widget_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>
|