akaunting 3.0 (the last dance)

This commit is contained in:
Burak Civan
2022-06-01 10:15:55 +03:00
parent cead09f6d4
commit d9c0764572
3812 changed files with 126831 additions and 102949 deletions

View File

@ -1,91 +1,72 @@
<template>
<div class="card">
<div class="card-header wizard-header p-3">
<el-steps :active="active" finish-status="success" align-center>
<el-step title="Language"></el-step>
<el-step title="Database"></el-step>
<el-step title="Admin"></el-step>
</el-steps>
</div>
<div>
<InstallSteps :active_state="active"></InstallSteps>
<div class="card-body">
<div role="alert" class="alert alert-danger d-none" :class="(form.response.error) ? 'show' : ''" v-if="form.response.error" v-html="form.response.message"></div>
<div role="alert" class="alert alert-danger d-none" :class="(form.response.error) ? 'show' : ''" v-if="form.response.error" v-html="form.response.message"></div>
<div class="row">
<div class="col-md-12 form-group required" :class="[{'has-error': form.errors.get('hostname')}]">
<label for="hostname" class="form-control-label">Hostname</label>
<div class="grid sm:grid-cols-6 gap-x-8 gap-y-6 my-3.5 mt-0">
<div class="sm:col-span-6 form-group required" :class="[{'has-error': form.errors.get('hostname')}]">
<label for="hostname" class="form-control-label">Hostname</label>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-server"></i>
</span>
<div class="input-group input-group-merge">
<input
class="form-element"
data-name="hostname"
data-value="localhost"
@keydown="form.errors.clear('hostname')"
v-model="form.hostname"
required="required"
name="hostname"
type="text"
value="localhost"
id="hostname"
/>
</div>
<input class="form-control" data-name="hostname" data-value="localhost" @keydown="form.errors.clear('hostname')" v-model="form.hostname" required="required" name="hostname" type="text" value="localhost" id="hostname">
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('hostname')" v-html="form.errors.get('hostname')"></div>
</div>
<div class="invalid-feedback d-block" v-if="form.errors.has('hostname')" v-html="form.errors.get('hostname')"></div>
</div>
<div class="sm:col-span-6 form-group required" :class="[{'has-error': form.errors.get('username')}]">
<label for="username" class="form-control-label">Username</label>
<div class="col-md-12 form-group required" :class="[{'has-error': form.errors.get('username')}]">
<label for="username" class="form-control-label">Username</label>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-user"></i>
</span>
<div class="input-group input-group-merge">
<input class="form-element" data-name="username" @keydown="form.errors.clear('username')" v-model="form.username" required="required" name="username" type="text" id="username" />
</div>
<input class="form-control" data-name="username" @keydown="form.errors.clear('username')" v-model="form.username" required="required" name="username" type="text" id="username">
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('username')" v-html="form.errors.get('username')"></div>
</div>
<div class="invalid-feedback d-block" v-if="form.errors.has('username')" v-html="form.errors.get('username')"></div>
</div>
<div class="sm:col-span-6 form-group" :class="[{'has-error': form.errors.get('password')}]">
<label for="password" class="form-control-label">Password</label>
<div class="col-md-12 form-group" :class="[{'has-error': form.errors.get('password')}]">
<label for="password" class="form-control-label">Password</label>
<div class="input-group input-group-merge ">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-key"></i>
</span>
<div class="input-group input-group-merge">
<input class="form-element" data-name="password" v-model="form.password" name="password" type="password" value="" id="password" />
</div>
<input class="form-control" data-name="password" v-model="form.password" name="password" type="password" value="" id="password">
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('password')" v-html="form.errors.get('password')"></div>
</div>
<div class="invalid-feedback d-block" v-if="form.errors.has('password')" v-html="form.errors.get('password')"></div>
</div>
<div class="sm:col-span-6 form-group mb--2 required" :class="[{'has-error': form.errors.get('database')}]">
<label for="database" class="form-control-label">Database</label>
<div class="col-md-12 form-group mb--2 required" :class="[{'has-error': form.errors.get('database')}]">
<label for="database" class="form-control-label">Database</label>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-database"></i>
</span>
<div class="input-group input-group-merge">
<input class="form-element" data-name="database" @keydown="form.errors.clear('database')" v-model="form.database" required="required" name="database" type="text" id="database" />
</div>
<input class="form-control" data-name="database" @keydown="form.errors.clear('database')" v-model="form.database" required="required" name="database" type="text" id="database">
</div>
<div class="invalid-feedback d-block" v-if="form.errors.has('database')" v-html="form.errors.get('database')"></div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('database')" v-html="form.errors.get('database')"></div>
</div>
</div>
</div>
</div>
<div class="card-footer">
<div class="row save-buttons">
<div class="col-md-12">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="btn btn-icon btn-success button-submit header-button-top">
<div v-if="form.loading" class="aka-loader-frame">
<div class="aka-loader"></div>
</div>
<span v-if="!form.loading" class="btn-inner--text">
Next &nbsp;
</span>
</button>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
</span>
</button>
</div>
</div>
</div>
@ -93,22 +74,24 @@
<script>
import axios from "axios";
import Form from './../../plugins/form';
import {Step, Steps} from 'element-ui';
import Form from "./../../plugins/form";
import { Step, Steps } from "element-ui";
import InstallSteps from "./Steps.vue";
export default {
name: 'database',
name: "database",
components: {
[Step.name]: Step,
[Steps.name]: Steps
[Steps.name]: Steps,
InstallSteps,
},
data() {
return {
form: new Form('form-install'),
active: 1
}
form: new Form("form-install"),
active: 1,
};
},
methods: {
@ -119,7 +102,7 @@
next() {
if (this.active++ > 2);
}
}
}
},
},
};
</script>

View File

@ -1,39 +1,23 @@
<template>
<div class="card">
<div class="card-header wizard-header p-3">
<el-steps :active="active" finish-status="success" align-center>
<el-step title="Language"></el-step>
<el-step title="Database"></el-step>
<el-step title="Admin"></el-step>
</el-steps>
<div>
<InstallSteps :active_state="active"></InstallSteps>
<div class="form-group mb-0">
<select v-model="form.lang" name="lang" id="lang" size="13" class="w-full form-control-label">
<option v-for="(name, code) in languages" :value="code">
{{ name }}
</option>
</select>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-12">
<div class="form-group mb-0">
<select v-model="form.lang" name="lang" id="lang" size="13" class="col-xl-12 form-control-label">
<option v-for="(name, code) in languages" :value="code">
{{ name }}
</option>
</select>
</div>
</div>
</div>
</div>
<div class="card-footer">
<div class="row save-buttons">
<div class="col-md-12">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="btn btn-icon btn-success button-submit header-button-top">
<div v-if="form.loading" class="aka-loader-frame">
<div class="aka-loader"></div>
</div>
<span v-if="!form.loading" class="btn-inner--text">
Next &nbsp;
</span>
</button>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
</span>
</button>
</div>
</div>
</div>
@ -41,34 +25,36 @@
<script>
import axios from "axios";
import Form from './../../plugins/form';
import {Step, Steps} from 'element-ui';
import Form from "./../../plugins/form";
import { Step, Steps } from "element-ui";
import InstallSteps from "./Steps.vue";
var base_path = url.replace(window.location.origin, '');
var base_path = url.replace(window.location.origin, "");
export default {
name: 'language',
name: "language",
components: {
[Step.name]: Step,
[Steps.name]: Steps
[Steps.name]: Steps,
InstallSteps,
},
mounted() {
axios.get(base_path + '/install/language/getLanguages')
.then(response => {
this.languages = response.data.languages;
this.form.lang = 'en-GB';
})
.catch(error => {
});
axios
.get(base_path + "/install/language/getLanguages")
.then((response) => {
this.languages = response.data.languages;
this.form.lang = "en-GB";
})
.catch((error) => {});
},
data() {
return {
form: new Form('form-install'),
form: new Form("form-install"),
languages: [],
active: 0
}
active: 0,
};
},
methods: {
// Form Submit
@ -78,7 +64,13 @@
next() {
if (this.active++ > 2);
}
}
}
},
},
};
</script>
<style scoped>
select {
background-image: none;
}
</style>

View File

@ -1,33 +1,19 @@
<template>
<div class="card">
<div class="card-header wizard-header p-3">
<el-steps finish-status="success" align-center>
<el-step title="Language"></el-step>
<el-step title="Database"></el-step>
<el-step title="Admin"></el-step>
</el-steps>
</div>
<div>
<InstallSteps :active_state="active"></InstallSteps>
<div class="card-body">
<el-alert
v-for="requirement in requirements"
:key="requirement"
:title="requirement"
:closable="false"
type="error"
effect="dark">
</el-alert>
<el-alert v-for="requirement in requirements" :key="requirement" :title="requirement" :closable="false" type="error" effect="dark"> </el-alert>
</div>
<div class="card-footer">
<div class="row save-buttons">
<div class="col-md-12">
<button type="button" @click="onRefresh" class="btn btn-icon btn-success button-submit header-button-top">
<span class="btn-inner--text">
Refresh &nbsp;
</span>
</button>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="button" @click="onRefresh" :disabled="button_loading" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="button_loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': button_loading}]">
Refresh
</span>
</button>
</div>
</div>
</div>
@ -35,27 +21,32 @@
<script>
import axios from "axios";
import {Step, Steps, Alert} from 'element-ui';
import { Step, Steps, Alert } from "element-ui";
import InstallSteps from "./Steps.vue";
export default {
name: 'requirements',
name: "requirements",
components: {
[Step.name]: Step,
[Steps.name]: Steps,
[Alert.name]: Alert,
InstallSteps
},
data() {
return {
requirements: flash_requirements,
}
button_loading: false,
active:null
};
},
methods: {
onRefresh() {
this.button_loading = true;
window.location.reload();
}
}
}
},
},
};
</script>

View File

@ -1,89 +1,57 @@
<template>
<div class="card">
<div class="card-header wizard-header p-3">
<el-steps :active="active" finish-status="success" align-center>
<el-step title="Language"></el-step>
<el-step title="Database"></el-step>
<el-step title="Admin"></el-step>
</el-steps>
</div>
<div>
<InstallSteps :active_state="active"></InstallSteps>
<div class="card-body">
<div class="row">
<div class="col-md-12 form-group required" :class="[{'has-error': form.errors.get('company_name')}]">
<label for="company_name" class="form-control-label">Company Name</label>
<div class="grid sm:grid-cols-6 gap-x-8 gap-y-6 my-3.5 mt-0">
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('company_name')}]">
<label for="company_name" class="form-control-label">Company Name</label>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-building"></i>
</span>
</div>
<input class="form-control" data-name="company_name" @keydown="form.errors.clear('company_name')" v-model="form.company_name" required="required" name="company_name" type="text" id="company_name">
</div>
<div class="invalid-feedback d-block" v-if="form.errors.has('company_name')" v-html="form.errors.get('company_name')"></div>
<div class="input-group input-group-merge">
<input class="form-element" data-name="company_name" @keydown="form.errors.clear('company_name')" v-model="form.company_name" required="required" name="company_name" type="text" id="company_name" />
</div>
<div class="col-md-12 form-group required" :class="[{'has-error': form.errors.get('company_email')}]">
<label for="company_email" class="form-control-label">Company Email</label>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('company_name')" v-html="form.errors.get('company_name')"></div>
</div>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-envelope"></i>
</span>
</div>
<input class="form-control" data-name="company_email" @keydown="form.errors.clear('company_email')" v-model="form.company_email" required="required" name="company_email" type="text" id="company_email">
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('company_email')}]">
<label for="company_email" class="form-control-label">Company Email</label>
<div class="invalid-feedback d-block" v-if="form.errors.has('company_email')" v-html="form.errors.get('company_email')"></div>
<div class="input-group input-group-merge">
<input class="form-element" data-name="company_email" @keydown="form.errors.clear('company_email')" v-model="form.company_email" required="required" name="company_email" type="text" id="company_email" />
</div>
<div class=" col-md-12 form-group required" :class="[{'has-error': form.errors.get('user_email')}]">
<label for="user_email" class="form-control-label">Admin Email</label>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('company_email')" v-html="form.errors.get('company_email')"></div>
</div>
<div class="input-group input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-envelope"></i>
</span>
</div>
<input class="form-control" data-name="user_email" @keydown="form.errors.clear('user_email')" v-model="form.user_email" required="required" name="user_email" type="text" id="user_email">
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('user_email')}]">
<label for="user_email" class="form-control-label">Admin Email</label>
<div class="invalid-feedback d-block" v-if="form.errors.has('user_email')" v-html="form.errors.get('user_email')"></div>
<div class="input-group input-group-merge">
<input class="form-element" data-name="user_email" @keydown="form.errors.clear('user_email')" v-model="form.user_email" required="required" name="user_email" type="text" id="user_email" />
</div>
<div class="col-md-12 form-group mb--2 required" :class="[{'has-error': form.errors.get('user_password')}]">
<label for="user_password" class="form-control-label">Admin Password</label>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('user_email')" v-html="form.errors.get('user_email')"></div>
</div>
<div class="input-group input-group-merge ">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-key"></i>
</span>
</div>
<input class="form-control" data-name="user_password" @keydown="form.errors.clear('user_password')" v-model="form.user_password" required="required" name="user_password" type="password" value="" id="user_password">
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('user_password')}]">
<label for="user_password" class="form-control-label">Admin Password</label>
<div class="invalid-feedback d-block" v-if="form.errors.has('user_password')" v-html="form.errors.get('user_password')"></div>
<div class="input-group input-group-merge">
<input class="form-element" data-name="user_password" @keydown="form.errors.clear('user_password')" v-model="form.user_password" required="required" name="user_password" type="password" value="" id="user_password" />
</div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('user_password')" v-html="form.errors.get('user_password')"></div>
</div>
</div>
<div class="card-footer">
<div class="row save-buttons">
<div class="col-md-12">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="btn btn-icon btn-success button-submit header-button-top">
<div v-if="form.loading" class="aka-loader-frame">
<div class="aka-loader"></div>
</div>
<span v-if="!form.loading" class="btn-inner--text">
Next &nbsp;
</span>
</button>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
</span>
</button>
</div>
</div>
</div>
@ -91,23 +59,25 @@
<script>
import axios from "axios";
import Form from './../../plugins/form';
import {Step, Steps} from 'element-ui';
import Form from "./../../plugins/form";
import { Step, Steps } from "element-ui";
import InstallSteps from "./Steps.vue";
export default {
name: 'settings',
name: "settings",
components: {
[Step.name]: Step,
[Steps.name]: Steps
[Steps.name]: Steps,
InstallSteps,
},
data() {
return {
form: new Form('form-install'),
form: new Form("form-install"),
languages: [],
active: 2
}
active: 2,
};
},
methods: {
// Form Submit
@ -117,7 +87,7 @@
next() {
if (this.active++ > 2);
}
}
}
},
},
};
</script>

View File

@ -0,0 +1,48 @@
<template>
<div>
<nav aria-label="Progress">
<ol role="list" class="flex mb-10">
<li class="w-1/3">
<span class="pr-6 flex flex-col">
<span
:class="[{'bg-purple': active_state > 0}, {'bg-purple': active_state == 0}]"
class="w-full h-1 bg-gray-300 rounded-xl text-transparent">Text</span>
<span :class="[{'font-bold': active_state == 0}, {'font-bold': active_state > 0}]" class="text-sm font-normal mt-2">Language</span>
</span>
</li>
<li class="w-1/3">
<span class="px-3 flex flex-col">
<span
:class="[{'bg-purple': active_state > 1}, {'bg-purple': active_state == 1}]"
class="w-full h-1 bg-gray-300 rounded-xl text-transparent">Text</span>
<span :class="[{'font-bold': active_state == 1}, {'font-bold': active_state > 1}]" class="text-sm font-normal mt-2">Database</span>
</span>
</li>
<li class="w-1/3">
<span class="px-3 flex flex-col">
<span
:class="[{'bg-purple': active_state > 2}, {'bg-purple': active_state == 2}]"
class="w-full h-1 bg-gray-300 rounded-xl text-transparent">Text</span>
<span :class="[{'font-bold': active_state == 2}, {'font-bold': active_state > 2}]" class="text-sm font-normal mt-2">Admin</span>
</span>
</li>
</ol>
</nav>
</div>
</template>
<script>
export default {
name: "Steps",
components: {},
props: {
active_state: {
type: [Boolean, String, Number],
}
},
};
</script>

View File

@ -110,7 +110,7 @@ const app = new Vue({
if (data) {
this.update.total = parseInt((100 - ((this.update.steps.length / this.update.steps_total) * 100)).toFixed(0));
this.update.html = '<span class="text-default"><i class="fa fa-spinner fa-spin update-spin"></i> ' + data['text'] + '</span> </br>';
this.update.html = '<span class="text-default"><i class=""></i> ' + data['text'] + '</span> </br>';
let step_promise = Promise.resolve(axios.post(data.url, {
name: name,
@ -123,7 +123,7 @@ const app = new Vue({
step_promise.then(response => {
if (response.data.error) {
this.update.status = 'exception';
this.update.html = '<div class="text-danger"><i class="fa fa-times update-error"></i> ' + response.data.message + '</div>';
this.update.html = '<div class="text-danger"><i class="submit-spin absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto"></i> ' + response.data.message + '</div>';
}
if (response.data.success) {