mirror of
https://github.com/frappe/books.git
synced 2025-01-06 08:40:43 +00:00
fix: Setup Wizard fixes
- Company Logo and Name section - Disable next button on click - Set company logo in PrintSettings Other - Add brand color to tailwind config - Disabled button - Override inputClass using a function
This commit is contained in:
parent
0277b7c0e7
commit
beb3105e9b
@ -43,7 +43,7 @@ module.exports = {
|
|||||||
fieldname: 'gstin',
|
fieldname: 'gstin',
|
||||||
label: 'GSTIN',
|
label: 'GSTIN',
|
||||||
fieldtype: 'Data',
|
fieldtype: 'Data',
|
||||||
placeholder: '27AAAAA0000A1Z5',
|
placeholder: '27AAAAA0000A1Z5'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldname: 'template',
|
fieldname: 'template',
|
||||||
|
@ -10,6 +10,11 @@ module.exports = {
|
|||||||
settings: null,
|
settings: null,
|
||||||
keywordFields: [],
|
keywordFields: [],
|
||||||
fields: [
|
fields: [
|
||||||
|
{
|
||||||
|
fieldname: 'companyLogo',
|
||||||
|
label: 'Company Logo',
|
||||||
|
fieldtype: 'AttachImage'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
fieldname: 'country',
|
fieldname: 'country',
|
||||||
label: 'Country',
|
label: 'Country',
|
||||||
@ -21,7 +26,7 @@ module.exports = {
|
|||||||
|
|
||||||
{
|
{
|
||||||
fieldname: 'fullname',
|
fieldname: 'fullname',
|
||||||
label: 'Name',
|
label: 'Your Name',
|
||||||
fieldtype: 'Data',
|
fieldtype: 'Data',
|
||||||
placeholder: 'John Doe',
|
placeholder: 'John Doe',
|
||||||
required: 1
|
required: 1
|
||||||
@ -39,7 +44,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
fieldname: 'companyName',
|
fieldname: 'companyName',
|
||||||
label: 'Company Name',
|
label: 'Company Name',
|
||||||
placeholder: 'Acme Inc',
|
placeholder: 'Company Name',
|
||||||
fieldtype: 'Data',
|
fieldtype: 'Data',
|
||||||
required: 1
|
required: 1
|
||||||
},
|
},
|
||||||
@ -107,50 +112,10 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
quickEditFields: [
|
quickEditFields: [
|
||||||
'fullname',
|
'fullname',
|
||||||
'email',
|
|
||||||
'companyName',
|
|
||||||
'bankName',
|
'bankName',
|
||||||
'country',
|
'country',
|
||||||
'currency',
|
'currency',
|
||||||
'fiscalYearStart',
|
'fiscalYearStart',
|
||||||
'fiscalYearEnd'
|
'fiscalYearEnd'
|
||||||
],
|
|
||||||
|
|
||||||
layout: {
|
|
||||||
paginated: true,
|
|
||||||
sections: [
|
|
||||||
{
|
|
||||||
title: 'Select Country',
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
fields: ['country']
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
title: 'Add a Profile',
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
fields: ['fullname', 'email']
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
title: 'Add your Company',
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
fields: [
|
|
||||||
'companyName',
|
|
||||||
'bankName',
|
|
||||||
'currency',
|
|
||||||
'fiscalYearStart',
|
|
||||||
'fiscalYearEnd'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
].filter(Boolean)
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<button
|
<button
|
||||||
class="focus:outline-none rounded-md shadow-button"
|
class="focus:outline-none rounded-md shadow-button"
|
||||||
:style="style"
|
:style="style"
|
||||||
|
:class="_class"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
v-on="$listeners"
|
v-on="$listeners"
|
||||||
>
|
>
|
||||||
@ -19,6 +20,10 @@ export default {
|
|||||||
icon: {
|
icon: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
|
},
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -30,6 +35,11 @@ export default {
|
|||||||
? 'linear-gradient(180deg, #2C9AF1 0%, #2490EF 100%)'
|
? 'linear-gradient(180deg, #2C9AF1 0%, #2490EF 100%)'
|
||||||
: 'linear-gradient(180deg, #F9F9FA 0%, #F4F4F6 100%)'
|
: 'linear-gradient(180deg, #F9F9FA 0%, #F4F4F6 100%)'
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
_class() {
|
||||||
|
return {
|
||||||
|
'opacity-50 cursor-not-allowed pointer-events-none': this.disabled
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative border rounded-full flex-center overflow-hidden cursor-pointer"
|
class="relative bg-white border rounded-full flex-center overflow-hidden cursor-pointer"
|
||||||
:class="{ 'w-20 h-20': size !== 'small', 'w-16 h-16': size === 'small' }"
|
:class="{ 'w-20 h-20': size !== 'small', 'w-16 h-16': size === 'small' }"
|
||||||
@mouseover="showEdit = true"
|
@mouseover="showEdit = true"
|
||||||
@mouseleave="showEdit = false"
|
@mouseleave="showEdit = false"
|
||||||
|
@ -28,7 +28,8 @@ export default {
|
|||||||
'size',
|
'size',
|
||||||
'showLabel',
|
'showLabel',
|
||||||
'readOnly',
|
'readOnly',
|
||||||
'background'
|
'background',
|
||||||
|
'autofocus'
|
||||||
],
|
],
|
||||||
inject: {
|
inject: {
|
||||||
doctype: {
|
doctype: {
|
||||||
@ -41,13 +42,17 @@ export default {
|
|||||||
default: null
|
default: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
if (this.autofocus) {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
inputType() {
|
inputType() {
|
||||||
return 'text';
|
return 'text';
|
||||||
},
|
},
|
||||||
inputClasses() {
|
inputClasses() {
|
||||||
return [
|
let classes = [
|
||||||
this.inputClass,
|
|
||||||
{
|
{
|
||||||
'px-3 py-2': this.size !== 'small',
|
'px-3 py-2': this.size !== 'small',
|
||||||
'px-2 py-1': this.size === 'small',
|
'px-2 py-1': this.size === 'small',
|
||||||
@ -55,6 +60,8 @@ export default {
|
|||||||
},
|
},
|
||||||
'focus:outline-none focus:bg-gray-200 rounded w-full text-gray-900'
|
'focus:outline-none focus:bg-gray-200 rounded w-full text-gray-900'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
return this.getInputClassesFromProp(classes);
|
||||||
},
|
},
|
||||||
inputPlaceholder() {
|
inputPlaceholder() {
|
||||||
return this.placeholder || this.df.placeholder;
|
return this.placeholder || this.df.placeholder;
|
||||||
@ -64,8 +71,20 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getInputClassesFromProp(classes) {
|
||||||
|
if (this.inputClass) {
|
||||||
|
if (typeof this.inputClass === 'function') {
|
||||||
|
classes = this.inputClass(classes);
|
||||||
|
} else {
|
||||||
|
classes.push(this.inputClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return classes;
|
||||||
|
},
|
||||||
focus() {
|
focus() {
|
||||||
|
if (this.$refs.input && this.$refs.input.focus) {
|
||||||
this.$refs.input.focus();
|
this.$refs.input.focus();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
triggerChange(value) {
|
triggerChange(value) {
|
||||||
value = this.parse(value);
|
value = this.parse(value);
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<label
|
<label class="flex items-center">
|
||||||
class="flex items-center"
|
|
||||||
>
|
|
||||||
<input
|
<input
|
||||||
ref="input"
|
ref="input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
@ -26,7 +24,7 @@ export default {
|
|||||||
extends: Base,
|
extends: Base,
|
||||||
computed: {
|
computed: {
|
||||||
inputClasses() {
|
inputClasses() {
|
||||||
return [this.inputClass];
|
return this.getInputClassesFromProp([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
10
src/main.js
10
src/main.js
@ -64,6 +64,7 @@ import router from './router';
|
|||||||
frappe.events.on('SetupWizard:setup-complete', async setupWizardValues => {
|
frappe.events.on('SetupWizard:setup-complete', async setupWizardValues => {
|
||||||
const countryList = require('../fixtures/countryInfo.json');
|
const countryList = require('../fixtures/countryInfo.json');
|
||||||
const {
|
const {
|
||||||
|
companyLogo,
|
||||||
companyName,
|
companyName,
|
||||||
country,
|
country,
|
||||||
name,
|
name,
|
||||||
@ -89,6 +90,15 @@ import router from './router';
|
|||||||
|
|
||||||
await doc.update();
|
await doc.update();
|
||||||
|
|
||||||
|
const printSettings = await frappe.getSingle('PrintSettings');
|
||||||
|
printSettings.set({
|
||||||
|
logo: companyLogo,
|
||||||
|
companyName,
|
||||||
|
email,
|
||||||
|
displayLogo: companyLogo ? 1 : 0
|
||||||
|
});
|
||||||
|
await printSettings.update();
|
||||||
|
|
||||||
const systemSettings = await frappe.getSingle('SystemSettings');
|
const systemSettings = await frappe.getSingle('SystemSettings');
|
||||||
await systemSettings.set({
|
await systemSettings.set({
|
||||||
dateFormat: countryList[country]['date_format'] || 'yyyy-MM-dd'
|
dateFormat: countryList[country]['date_format'] || 'yyyy-MM-dd'
|
||||||
|
@ -15,9 +15,17 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mt-4 text-sm">
|
<div class="mt-4 text-sm">
|
||||||
<Button @click="newDatabase">{{ _('Create New') }}</Button>
|
<Button @click="newDatabase">{{ _('Create New') }}</Button>
|
||||||
<Button @click="existingDatabase">{{ _('Browse File') }}</Button>
|
<Button class="ml-2" @click="existingDatabase">{{
|
||||||
|
_('Browse File')
|
||||||
|
}}</Button>
|
||||||
</div>
|
</div>
|
||||||
<TwoColumnForm class="mt-6" v-if="doc" :doc="doc" :fields="fields" :autosave="true" />
|
<TwoColumnForm
|
||||||
|
class="mt-6"
|
||||||
|
v-if="doc"
|
||||||
|
:doc="doc"
|
||||||
|
:fields="fields"
|
||||||
|
:autosave="true"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -41,10 +49,8 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.doc = await frappe.getSingle('SystemSettings');
|
this.doc = frappe.SystemSettings;
|
||||||
this.companyName = (await frappe.getSingle(
|
this.companyName = frappe.AccountingSettings.companyName;
|
||||||
'AccountingSettings'
|
|
||||||
)).companyName;
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async newDatabase() {
|
async newDatabase() {
|
||||||
@ -71,4 +77,3 @@ export default {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -7,11 +7,47 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="px-8 mt-5 window-no-drag">
|
<div class="px-8 mt-5 window-no-drag">
|
||||||
|
<div class="flex items-center border bg-brand rounded-xl px-6 py-5 mb-4">
|
||||||
|
<FormControl
|
||||||
|
:df="meta.getField('companyLogo')"
|
||||||
|
:value="doc.companyLogo"
|
||||||
|
@change="value => doc.set('companyLogo', value)"
|
||||||
|
/>
|
||||||
|
<div class="ml-2">
|
||||||
|
<FormControl
|
||||||
|
ref="companyField"
|
||||||
|
:df="meta.getField('companyName')"
|
||||||
|
:value="doc.companyName"
|
||||||
|
@change="value => doc.set('companyName', value)"
|
||||||
|
:input-class="
|
||||||
|
classes => [
|
||||||
|
'bg-transparent font-semibold text-xl text-white placeholder-blue-200 focus:outline-none focus:bg-blue-600 px-3 rounded py-1'
|
||||||
|
]
|
||||||
|
"
|
||||||
|
:autofocus="true"
|
||||||
|
/>
|
||||||
|
<FormControl
|
||||||
|
:df="meta.getField('email')"
|
||||||
|
:value="doc.email"
|
||||||
|
@change="value => doc.set('email', value)"
|
||||||
|
:input-class="
|
||||||
|
classes => [
|
||||||
|
'text-base bg-transparent text-white placeholder-blue-200 focus:bg-blue-600 focus:outline-none rounded px-3 py-1'
|
||||||
|
]
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<TwoColumnForm :fields="fields" :doc="doc" />
|
<TwoColumnForm :fields="fields" :doc="doc" />
|
||||||
</div>
|
</div>
|
||||||
<div class="px-8 flex justify-end mt-5 window-no-drag">
|
<div class="px-8 flex justify-end mt-5 window-no-drag">
|
||||||
<Button @click="submit" type="primary" class="text-white text-sm">
|
<Button
|
||||||
{{ _('Next') }}
|
@click="submit"
|
||||||
|
type="primary"
|
||||||
|
class="text-white text-sm"
|
||||||
|
:disabled="loading"
|
||||||
|
>
|
||||||
|
{{ buttonText }}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -19,6 +55,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import frappe from 'frappejs';
|
import frappe from 'frappejs';
|
||||||
import TwoColumnForm from '@/components/TwoColumnForm';
|
import TwoColumnForm from '@/components/TwoColumnForm';
|
||||||
|
import FormControl from '@/components/Controls/FormControl';
|
||||||
|
|
||||||
import Button from '@/components/Button';
|
import Button from '@/components/Button';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -26,6 +64,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
meta: frappe.getMeta('SetupWizard'),
|
meta: frappe.getMeta('SetupWizard'),
|
||||||
|
loading: false,
|
||||||
doc: {}
|
doc: {}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -37,6 +76,7 @@ export default {
|
|||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
TwoColumnForm,
|
TwoColumnForm,
|
||||||
|
FormControl,
|
||||||
Button
|
Button
|
||||||
},
|
},
|
||||||
async beforeMount() {
|
async beforeMount() {
|
||||||
@ -45,8 +85,10 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
async submit() {
|
async submit() {
|
||||||
try {
|
try {
|
||||||
|
this.loading = true;
|
||||||
frappe.events.trigger('SetupWizard:setup-complete', this.doc);
|
frappe.events.trigger('SetupWizard:setup-complete', this.doc);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
this.loading = false;
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,6 +96,9 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
fields() {
|
fields() {
|
||||||
return this.meta.getQuickEditFields();
|
return this.meta.getQuickEditFields();
|
||||||
|
},
|
||||||
|
buttonText() {
|
||||||
|
return this.loading ? this._('Setting Up...') : this._('Next');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,6 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
minWidth: {
|
minWidth: {
|
||||||
'40': '10rem',
|
'40': '10rem',
|
||||||
'56': '14rem',
|
|
||||||
'56': '14rem'
|
'56': '14rem'
|
||||||
},
|
},
|
||||||
maxWidth: {
|
maxWidth: {
|
||||||
@ -47,6 +46,7 @@ module.exports = {
|
|||||||
xl: '0.75rem' // 12px
|
xl: '0.75rem' // 12px
|
||||||
},
|
},
|
||||||
colors: {
|
colors: {
|
||||||
|
brand: '#2490EF',
|
||||||
black: '#112B42',
|
black: '#112B42',
|
||||||
gray: {
|
gray: {
|
||||||
'100': '#f4f4f6',
|
'100': '#f4f4f6',
|
||||||
|
Loading…
Reference in New Issue
Block a user