Run eslint with autofix

This commit is contained in:
Jan Bader 2022-03-15 12:55:22 +00:00
parent d717ef1b4d
commit 3ea90a5ebe
24 changed files with 812 additions and 644 deletions

View File

@ -27,37 +27,48 @@ export default defineComponent({
<template> <template>
<div class="flex flex-col md:flex-row flex-1 h-screen"> <div class="flex flex-col md:flex-row flex-1 h-screen">
<router-view name="sidebar"></router-view> <router-view name="sidebar" />
<div class="flex-1 overflow-auto"> <div class="flex-1 overflow-auto">
<div <div
class="flex bg-gray-400 dark:bg-gray-600 p-4 fixed md:static top-0 left-0 w-full h-14"> class="flex bg-gray-400 dark:bg-gray-600 p-4 fixed md:static top-0 left-0 w-full h-14"
>
<span <span
class="flex-1 font-bold text-5xl -my-3 hidden md:inline" class="flex-1 font-bold text-5xl -my-3 hidden md:inline"
@click="toggleMenuSize" @click="toggleMenuSize"
></span ></span>
>
<span <span
class="flex-1 font-bold text-5xl -my-3 md:hidden" class="flex-1 font-bold text-5xl -my-3 md:hidden"
@click="toggleMenu" @click="toggleMenu"
></span ></span>
>
<span class="flex-1">{{ CurrentBudgetName }}</span> <span class="flex-1">{{ CurrentBudgetName }}</span>
<div class="flex flex-1 flex-row justify-end -mx-4"> <div class="flex flex-1 flex-row justify-end -mx-4">
<router-link class="mx-4" v-if="LoggedIn" to="/dashboard" <router-link
>Dashboard</router-link v-if="LoggedIn"
class="mx-4"
to="/dashboard"
> >
<router-link class="mx-4" v-if="!LoggedIn" to="/login" Dashboard
>Login</router-link </router-link>
<router-link
v-if="!LoggedIn"
class="mx-4"
to="/login"
> >
<a class="mx-4" v-if="LoggedIn" @click="logout">Logout</a> Login
</router-link>
<a
v-if="LoggedIn"
class="mx-4"
@click="logout"
>Logout</a>
</div> </div>
</div> </div>
<div class="p-3 pl-6"> <div class="p-3 pl-6">
<router-view></router-view> <router-view />
</div> </div>
</div> </div>
</div> </div>

View File

@ -21,12 +21,14 @@ function daysSinceLastReconciled() {
<template> <template>
<span> <span>
<router-link <router-link
:to="'/budget/' + CurrentBudgetID + '/account/' + account.ID"> :to="'/budget/' + CurrentBudgetID + '/account/' + account.ID"
>
{{ account.Name }} {{ account.Name }}
</router-link> </router-link>
<span <span
v-if="props.account.LastReconciled.Valid && daysSinceLastReconciled() > 7" v-if="props.account.LastReconciled.Valid && daysSinceLastReconciled() > 7"
class="font-bold bg-gray-500 rounded-md text-sm px-2 mx-2 py-1 no-underline"> class="font-bold bg-gray-500 rounded-md text-sm px-2 mx-2 py-1 no-underline"
>
{{ daysSinceLastReconciled() }} {{ daysSinceLastReconciled() }}
</span> </span>
</span> </span>

View File

@ -83,27 +83,27 @@ function clear() {
<template> <template>
<div> <div>
<Input <Input
v-if="id == undefined"
v-model="SearchQuery"
type="text" type="text"
class="border-b-2 border-black" class="border-b-2 border-black"
@keypress="keypress" @keypress="keypress"
v-if="id == undefined" />
v-model="SearchQuery" />
<span <span
@click="clear"
v-if="id != undefined" v-if="id != undefined"
class="bg-gray-300 dark:bg-gray-700" class="bg-gray-300 dark:bg-gray-700"
>{{ text }}</span @click="clear"
> >{{ text }}</span>
<div <div
v-if="Suggestions.length > 0" v-if="Suggestions.length > 0"
class="absolute bg-gray-400 dark:bg-gray-600 w-64 p-2"> class="absolute bg-gray-400 dark:bg-gray-600 w-64 p-2"
>
<span <span
v-for="suggestion in Suggestions" v-for="suggestion in Suggestions"
class="block" class="block"
@click="select"
:value="suggestion.ID" :value="suggestion.ID"
>{{ suggestion.Name }}</span @click="select"
> >{{ suggestion.Name }}</span>
</div> </div>
</div> </div>
</template> </template>

View File

@ -2,6 +2,6 @@
<template> <template>
<button class="px-4 rounded-md shadow-sm focus:outline-none focus:ring-2"> <button class="px-4 rounded-md shadow-sm focus:outline-none focus:ring-2">
<slot></slot> <slot />
</button> </button>
</template> </template>

View File

@ -2,7 +2,8 @@
<template> <template>
<div <div
class="flex flex-row items-center bg-gray-300 dark:bg-gray-700 rounded-lg"> class="flex flex-row items-center bg-gray-300 dark:bg-gray-700 rounded-lg"
<slot></slot> >
<slot />
</div> </div>
</template> </template>

View File

@ -6,6 +6,7 @@ const props = defineProps(["modelValue"]);
<input <input
type="checkbox" type="checkbox"
:checked="modelValue" :checked="modelValue"
class="dark:bg-slate-900"
@change="$emit('update:modelValue', ($event.target as HTMLInputElement)?.checked)" @change="$emit('update:modelValue', ($event.target as HTMLInputElement)?.checked)"
class="dark:bg-slate-900" /> >
</template> </template>

View File

@ -18,6 +18,5 @@ const formattedValue = computed(() => internalValue.value.toLocaleString(undefin
<span <span
class="text-right" class="text-right"
:class="internalValue < 0 ? (negativeClass ?? 'negative') : positiveClass" :class="internalValue < 0 ? (negativeClass ?? 'negative') : positiveClass"
>{{ formattedValue }} </span >{{ formattedValue }} </span>
>
</template> </template>

View File

@ -27,9 +27,10 @@ function selectAll(event: FocusEvent) {
<template> <template>
<Input <Input
type="date"
ref="input" ref="input"
v-bind:value="dateToYYYYMMDD(modelValue)" type="date"
:value="dateToYYYYMMDD(modelValue)"
@input="updateValue" @input="updateValue"
@focus="selectAll" /> @focus="selectAll"
/>
</template> </template>

View File

@ -5,6 +5,7 @@ const props = defineProps(["modelValue"]);
<template> <template>
<input <input
:value="modelValue" :value="modelValue"
class="dark:bg-slate-900"
@input="$emit('update:modelValue', ($event.target as HTMLInputElement)?.value)" @input="$emit('update:modelValue', ($event.target as HTMLInputElement)?.value)"
class="dark:bg-slate-900" /> >
</template> </template>

View File

@ -33,31 +33,41 @@ function submitDialog() {
<button @click="openDialog"> <button @click="openDialog">
<slot name="placeholder"> <slot name="placeholder">
<Card> <Card>
<p class="w-24 text-center text-6xl">+</p> <p class="w-24 text-center text-6xl">
<span class="text-lg" dark>{{ buttonText }}</span> +
</p>
<span
class="text-lg"
dark
>{{ buttonText }}</span>
</Card> </Card>
</slot> </slot>
</button> </button>
<div <div
v-if="visible" v-if="visible"
class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full"> class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full"
>
<div <div
class="relative top-20 mx-auto p-5 w-96 shadow-lg rounded-md bg-white dark:bg-black"> class="relative top-20 mx-auto p-5 w-96 shadow-lg rounded-md bg-white dark:bg-black"
>
<div class="mt-3 text-center"> <div class="mt-3 text-center">
<h3 <h3
class="mt-3 text-lg leading-6 font-medium text-gray-900 dark:text-gray-100"> class="mt-3 text-lg leading-6 font-medium text-gray-900 dark:text-gray-100"
>
{{ buttonText }} {{ buttonText }}
</h3> </h3>
<slot></slot> <slot />
<div class="grid grid-cols-2 gap-6"> <div class="grid grid-cols-2 gap-6">
<button <button
class="px-4 py-2 bg-red-500 text-white text-base font-medium rounded-md shadow-sm hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-300"
@click="closeDialog" @click="closeDialog"
class="px-4 py-2 bg-red-500 text-white text-base font-medium rounded-md shadow-sm hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-300"> >
Close Close
</button> </button>
<button <button
class="px-4 py-2 bg-green-500 text-white text-base font-medium rounded-md shadow-sm hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-300"
@click="submitDialog" @click="submitDialog"
class="px-4 py-2 bg-green-500 text-white text-base font-medium rounded-md shadow-sm hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-300"> >
Save Save
</button> </button>
</div> </div>

View File

@ -40,36 +40,48 @@ function saveTransaction(e: MouseEvent) {
<template> <template>
<tr> <tr>
<td class="text-sm"> <td class="text-sm">
<DateInput class="border-b-2 border-black" v-model="TX.Date" /> <DateInput
v-model="TX.Date"
class="border-b-2 border-black"
/>
</td> </td>
<td> <td>
<Autocomplete <Autocomplete
v-model:text="TX.Payee" v-model:text="TX.Payee"
v-model:id="TX.PayeeID" v-model:id="TX.PayeeID"
v-model:type="payeeType" v-model:type="payeeType"
model="payees" /> model="payees"
/>
</td> </td>
<td> <td>
<Autocomplete <Autocomplete
v-model:text="TX.Category" v-model:text="TX.Category"
v-model:id="TX.CategoryID" v-model:id="TX.CategoryID"
model="categories" /> model="categories"
/>
</td> </td>
<td> <td>
<Input <Input
v-model="TX.Memo"
class="block w-full border-b-2 border-black" class="block w-full border-b-2 border-black"
type="text" type="text"
v-model="TX.Memo" /> />
</td> </td>
<td class="text-right"> <td class="text-right">
<Input <Input
v-model="TX.Amount"
class="text-right block w-full border-b-2 border-black" class="text-right block w-full border-b-2 border-black"
type="currency" type="currency"
v-model="TX.Amount" /> />
</td> </td>
<td> <td>
<Button class="bg-blue-500" @click="saveTransaction">Save</Button> <Button
class="bg-blue-500"
@click="saveTransaction"
>
Save
</Button>
</td> </td>
<td></td> <td />
</tr> </tr>
</template> </template>

View File

@ -55,7 +55,10 @@ function saveTransaction(e: MouseEvent) {
<tr> <tr>
<label class="md:hidden">Date</label> <label class="md:hidden">Date</label>
<td class="text-sm"> <td class="text-sm">
<DateInput class="border-b-2 border-black" v-model="TX.Date" /> <DateInput
v-model="TX.Date"
class="border-b-2 border-black"
/>
</td> </td>
<label class="md:hidden">Payee</label> <label class="md:hidden">Payee</label>
<td> <td>
@ -63,30 +66,39 @@ function saveTransaction(e: MouseEvent) {
v-model:text="TX.Payee" v-model:text="TX.Payee"
v-model:id="TX.PayeeID" v-model:id="TX.PayeeID"
v-model:type="payeeType" v-model:type="payeeType"
model="payees" /> model="payees"
/>
</td> </td>
<label class="md:hidden">Category</label> <label class="md:hidden">Category</label>
<td> <td>
<Autocomplete <Autocomplete
v-model:text="TX.Category" v-model:text="TX.Category"
v-model:id="TX.CategoryID" v-model:id="TX.CategoryID"
model="categories" /> model="categories"
/>
</td> </td>
<td class="col-span-2"> <td class="col-span-2">
<Input <Input
v-model="TX.Memo"
class="block w-full border-b-2 border-black" class="block w-full border-b-2 border-black"
type="text" type="text"
v-model="TX.Memo" /> />
</td> </td>
<label class="md:hidden">Amount</label> <label class="md:hidden">Amount</label>
<td class="text-right"> <td class="text-right">
<Input <Input
v-model="TX.Amount"
class="text-right block w-full border-b-2 border-black" class="text-right block w-full border-b-2 border-black"
type="currency" type="currency"
v-model="TX.Amount" /> />
</td> </td>
<td class="hidden md:table-cell"> <td class="hidden md:table-cell">
<Button class="bg-blue-500" @click="saveTransaction">Save</Button> <Button
class="bg-blue-500"
@click="saveTransaction"
>
Save
</Button>
</td> </td>
</tr> </tr>
</template> </template>

View File

@ -47,17 +47,26 @@ function getStatusSymbol() {
</script> </script>
<template> <template>
<tr v-if="dateChanged()" class="table-row md:hidden"> <tr
<td class="bg-gray-200 dark:bg-gray-800 rounded-lg p-2" colspan="5"> v-if="dateChanged()"
class="table-row md:hidden"
>
<td
class="bg-gray-200 dark:bg-gray-800 rounded-lg p-2"
colspan="5"
>
{{ formatDate(TX.Date) }} {{ formatDate(TX.Date) }}
</td> </td>
</tr> </tr>
<tr <tr
v-if="!edit" v-if="!edit"
class="{{new Date(TX.Date) > new Date() ? 'future' : ''}}" class="{{new Date(TX.Date) > new Date() ? 'future' : ''}}"
:class="[index % 6 < 3 ? 'md:bg-gray-300 dark:md:bg-gray-700' : 'md:bg-gray-100 dark:md:bg-gray-900']"> :class="[index % 6 < 3 ? 'md:bg-gray-300 dark:md:bg-gray-700' : 'md:bg-gray-100 dark:md:bg-gray-900']"
>
<!--:class="[index % 6 < 3 ? index % 6 === 1 ? 'bg-gray-400' : 'bg-gray-300' : index % 6 !== 4 ? 'bg-gray-100' : '']">--> <!--:class="[index % 6 < 3 ? index % 6 === 1 ? 'bg-gray-400' : 'bg-gray-300' : index % 6 !== 4 ? 'bg-gray-100' : '']">-->
<td class="hidden md:block">{{ formatDate(TX.Date) }}</td> <td class="hidden md:block">
{{ formatDate(TX.Date) }}
</td>
<td class="pl-2 md:pl-0"> <td class="pl-2 md:pl-0">
{{ TX.TransferAccount ? "Transfer : " + TX.TransferAccount : TX.Payee }} {{ TX.TransferAccount ? "Transfer : " + TX.TransferAccount : TX.Payee }}
</td> </td>
@ -67,11 +76,13 @@ function getStatusSymbol() {
<td> <td>
<a <a
:href="'/budget/' + CurrentBudgetID + '/transaction/' + TX.ID" :href="'/budget/' + CurrentBudgetID + '/transaction/' + TX.ID"
>{{ TX.Memo }}</a >{{ TX.Memo }}</a>
>
</td> </td>
<td> <td>
<Currency class="block" :value="TX.Amount" /> <Currency
class="block"
:value="TX.Amount"
/>
</td> </td>
<td class="text-right"> <td class="text-right">
{{ TX.GroupID ? "☀" : "" }} {{ TX.GroupID ? "☀" : "" }}
@ -79,13 +90,15 @@ function getStatusSymbol() {
<a @click="edit = true;"></a> <a @click="edit = true;"></a>
<Checkbox <Checkbox
v-if="Reconciling && TX.Status != 'Reconciled'" v-if="Reconciling && TX.Status != 'Reconciled'"
v-model="TX.Reconciled" /> v-model="TX.Reconciled"
/>
</td> </td>
</tr> </tr>
<TransactionEditRow <TransactionEditRow
v-if="edit" v-if="edit"
:transactionid="TX.ID" :transactionid="TX.ID"
@save="edit = false" /> @save="edit = false"
/>
</template> </template>
<style> <style>

View File

@ -45,25 +45,40 @@ function openEditAccount(e : any) {
<Modal <Modal
button-text="Edit Account" button-text="Edit Account"
@open="openEditAccount" @open="openEditAccount"
@submit="editAccount"> @submit="editAccount"
<template v-slot:placeholder><span class="ml-2"></span></template> >
<template #placeholder>
<span class="ml-2"></span>
</template>
<div class="mt-2 px-7 py-3"> <div class="mt-2 px-7 py-3">
<Input <Input
v-model="accountName"
class="border-2 dark:border-gray-700" class="border-2 dark:border-gray-700"
type="text" type="text"
v-model="accountName"
placeholder="Account name" placeholder="Account name"
required /> required
/>
</div> </div>
<div class="mt-2 px-7 py-3"> <div class="mt-2 px-7 py-3">
<Checkbox class="border-2" v-model="accountOnBudget" required /> <Checkbox
v-model="accountOnBudget"
class="border-2"
required
/>
<label>On Budget</label> <label>On Budget</label>
</div> </div>
<div class="mt-2 px-7 py-3"> <div class="mt-2 px-7 py-3">
<Checkbox class="border-2" v-model="accountOpen" required /> <Checkbox
v-model="accountOpen"
class="border-2"
required
/>
<label>Open</label> <label>Open</label>
</div> </div>
<div v-if="error != ''" class="dark:text-red-300 text-red-700"> <div
v-if="error != ''"
class="dark:text-red-300 text-red-700"
>
{{ error }} {{ error }}
</div> </div>
</Modal> </Modal>

View File

@ -11,14 +11,18 @@ function saveBudget() {
</script> </script>
<template> <template>
<Modal button-text="New Budget" @submit="saveBudget"> <Modal
button-text="New Budget"
@submit="saveBudget"
>
<div class="mt-2 px-7 py-3"> <div class="mt-2 px-7 py-3">
<Input <Input
v-model="budgetName"
class="border-2" class="border-2"
type="text" type="text"
v-model="budgetName"
placeholder="Budget name" placeholder="Budget name"
required /> required
/>
</div> </div>
</Modal> </Modal>
</template> </template>

View File

@ -51,7 +51,8 @@ function createReconcilationTransaction() {
</div> </div>
<div <div
class="text-right flex flex-wrap flex-col md:flex-row justify-end gap-2 max-w-sm"> class="text-right flex flex-wrap flex-col md:flex-row justify-end gap-2 max-w-sm"
>
<span class="rounded-lg p-1 whitespace-nowrap flex-1"> <span class="rounded-lg p-1 whitespace-nowrap flex-1">
Working: Working:
<Currency :value="accounts.CurrentAccount?.WorkingBalance" /> <Currency :value="accounts.CurrentAccount?.WorkingBalance" />
@ -63,78 +64,101 @@ function createReconcilationTransaction() {
</span> </span>
<span <span
class="rounded-lg bg-blue-500 p-1 whitespace-nowrap flex-1"
v-if="!transactions.Reconciling" v-if="!transactions.Reconciling"
@click="transactions.Reconciling = true"> class="rounded-lg bg-blue-500 p-1 whitespace-nowrap flex-1"
@click="transactions.Reconciling = true"
>
Reconciled: Reconciled:
<Currency :value="accounts.CurrentAccount?.ReconciledBalance" /> <Currency :value="accounts.CurrentAccount?.ReconciledBalance" />
</span> </span>
<span v-if="transactions.Reconciling" class="contents"> <span
v-if="transactions.Reconciling"
class="contents"
>
<Button <Button
class="bg-blue-500 p-1 whitespace-nowrap flex-1"
@click="submitReconcilation" @click="submitReconcilation"
class="bg-blue-500 p-1 whitespace-nowrap flex-1"> >
My current balance is&nbsp; My current balance is&nbsp;
<Currency :value="transactions.ReconcilingBalance" /> <Currency :value="transactions.ReconcilingBalance" />
</Button> </Button>
<Button <Button
class="bg-orange-500 p-1 whitespace-nowrap flex-1"
@click="createReconcilationTransaction" @click="createReconcilationTransaction"
class="bg-orange-500 p-1 whitespace-nowrap flex-1"> >
No, it's: No, it's:
<Input <Input
v-model="TargetReconcilingBalance"
class="text-right w-20 bg-transparent dark:bg-transparent border-b-2" class="text-right w-20 bg-transparent dark:bg-transparent border-b-2"
type="number" type="number"
v-model="TargetReconcilingBalance" /> />
(Difference (Difference
<Currency <Currency
:value="transactions.ReconcilingBalance - TargetReconcilingBalance" />) :value="transactions.ReconcilingBalance - TargetReconcilingBalance"
/>)
</Button> </Button>
<Button <Button
class="bg-red-500 p-1 flex-1" class="bg-red-500 p-1 flex-1"
@click="cancelReconcilation" @click="cancelReconcilation"
>Cancel</Button >Cancel</Button>
>
</span> </span>
</div> </div>
</div> </div>
<table> <table>
<tr class="font-bold"> <tr class="font-bold">
<td class="hidden md:block" style="width: 90px;">Date</td> <td
<td style="max-width: 150px;">Payee</td> class="hidden md:block"
<td style="max-width: 200px;">Category</td> style="width: 90px;"
>
Date
</td>
<td style="max-width: 150px;">
Payee
</td>
<td style="max-width: 200px;">
Category
</td>
<td>Memo</td> <td>Memo</td>
<td class="text-right">Amount</td> <td class="text-right">
Amount
</td>
<td style="width: 80px;"> <td style="width: 80px;">
<Input <Input
v-if="transactions.Reconciling" v-if="transactions.Reconciling"
type="checkbox" type="checkbox"
@input="setReconciled" /> @input="setReconciled"
/>
</td> </td>
</tr> </tr>
<TransactionInputRow <TransactionInputRow
class="hidden md:table-row" class="hidden md:table-row"
:budgetid="budgetid" :budgetid="budgetid"
:accountid="accountid" /> :accountid="accountid"
/>
<TransactionRow <TransactionRow
v-for="(transaction, index) in transactions.TransactionsList" v-for="(transaction, index) in transactions.TransactionsList"
:key="transaction.ID" :key="transaction.ID"
:transactionid="transaction.ID" :transactionid="transaction.ID"
:index="index" /> :index="index"
/>
</table> </table>
<div class="md:hidden"> <div class="md:hidden">
<Modal> <Modal>
<template v-slot:placeholder> <template #placeholder>
<Button <Button
class="fixed right-4 bottom-4 font-bold text-lg bg-blue-500 py-2" class="fixed right-4 bottom-4 font-bold text-lg bg-blue-500 py-2"
>+</Button
> >
+
</Button>
</template> </template>
<TransactionInputRow <TransactionInputRow
class="grid grid-cols-2" class="grid grid-cols-2"
:budgetid="budgetid" :budgetid="budgetid"
:accountid="accountid" /> :accountid="accountid"
/>
</Modal> </Modal>
</div> </div>
</template> </template>

View File

@ -24,21 +24,22 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
<template> <template>
<div <div
:class="[ExpandMenu ? 'md:w-72' : 'md:w-36', ShowMenu ? '' : 'hidden']" :class="[ExpandMenu ? 'md:w-72' : 'md:w-36', ShowMenu ? '' : 'hidden']"
class="md:block flex-shrink-0 w-full bg-gray-500 border-r-4 border-black"> class="md:block flex-shrink-0 w-full bg-gray-500 border-r-4 border-black"
>
<div class="flex flex-col mt-14 md:mt-0"> <div class="flex flex-col mt-14 md:mt-0">
<span <span
class="m-2 p-1 px-3 h-10 overflow-hidden" class="m-2 p-1 px-3 h-10 overflow-hidden"
:class="[ExpandMenu ? 'text-2xl' : 'text-md']"> :class="[ExpandMenu ? 'text-2xl' : 'text-md']"
<router-link to="/dashboard" style="font-size:150%"
></router-link
> >
<router-link
to="/dashboard"
style="font-size:150%"
></router-link>
{{ CurrentBudgetName }} {{ CurrentBudgetName }}
</span> </span>
<span class="bg-gray-100 dark:bg-gray-700 p-2 px-3 flex flex-col"> <span class="bg-gray-100 dark:bg-gray-700 p-2 px-3 flex flex-col">
<router-link :to="'/budget/' + CurrentBudgetID + '/budgeting'" <router-link :to="'/budget/' + CurrentBudgetID + '/budgeting'">Budget</router-link>
>Budget</router-link <br>
>
<br />
<!--<router-link :to="'/budget/'+CurrentBudgetID+'/reports'">Reports</router-link>--> <!--<router-link :to="'/budget/'+CurrentBudgetID+'/reports'">Reports</router-link>-->
<!--<router-link :to="'/budget/'+CurrentBudgetID+'/all-accounts'">All Accounts</router-link>--> <!--<router-link :to="'/budget/'+CurrentBudgetID+'/all-accounts'">All Accounts</router-link>-->
</span> </span>
@ -47,15 +48,18 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
<span>On-Budget Accounts</span> <span>On-Budget Accounts</span>
<Currency <Currency
:class="ExpandMenu ? 'md:inline' : 'md:hidden'" :class="ExpandMenu ? 'md:inline' : 'md:hidden'"
:value="OnBudgetAccountsBalance" /> :value="OnBudgetAccountsBalance"
/>
</div> </div>
<div <div
v-for="account in OnBudgetAccounts" v-for="account in OnBudgetAccounts"
class="flex flex-row justify-between"> class="flex flex-row justify-between"
>
<AccountWithReconciled :account="account" /> <AccountWithReconciled :account="account" />
<Currency <Currency
:class="ExpandMenu ? 'md:inline' : 'md:hidden'" :class="ExpandMenu ? 'md:inline' : 'md:hidden'"
:value="account.ClearedBalance" /> :value="account.ClearedBalance"
/>
</div> </div>
</li> </li>
<li class="bg-slate-200 dark:bg-slate-700 my-2 p-2 px-3"> <li class="bg-slate-200 dark:bg-slate-700 my-2 p-2 px-3">
@ -63,15 +67,18 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
<span>Off-Budget Accounts</span> <span>Off-Budget Accounts</span>
<Currency <Currency
:class="ExpandMenu ? 'md:inline' : 'md:hidden'" :class="ExpandMenu ? 'md:inline' : 'md:hidden'"
:value="OffBudgetAccountsBalance" /> :value="OffBudgetAccountsBalance"
/>
</div> </div>
<div <div
v-for="account in OffBudgetAccounts" v-for="account in OffBudgetAccounts"
class="flex flex-row justify-between"> class="flex flex-row justify-between"
>
<AccountWithReconciled :account="account" /> <AccountWithReconciled :account="account" />
<Currency <Currency
:class="ExpandMenu ? 'md:inline' : 'md:hidden'" :class="ExpandMenu ? 'md:inline' : 'md:hidden'"
:value="account.ClearedBalance" /> :value="account.ClearedBalance"
/>
</div> </div>
</li> </li>
<!-- <!--
@ -86,9 +93,9 @@ const OffBudgetAccountsBalance = computed(() => accountStore.OffBudgetAccountsBa
<router-link :to="'/budget/'+CurrentBudgetID+'/accounts'">Edit accounts</router-link> <router-link :to="'/budget/'+CurrentBudgetID+'/accounts'">Edit accounts</router-link>
</li>--> </li>-->
<li class="bg-red-100 dark:bg-slate-600 my-2 p-2 px-3"> <li class="bg-red-100 dark:bg-slate-600 my-2 p-2 px-3">
<router-link :to="'/budget/' + CurrentBudgetID + '/settings'" <router-link :to="'/budget/' + CurrentBudgetID + '/settings'">
>Budget-Settings</router-link Budget-Settings
> </router-link>
</li> </li>
<!--<li><router-link to="/admin">Admin</router-link></li>--> <!--<li><router-link to="/admin">Admin</router-link></li>-->
</div> </div>

View File

@ -76,29 +76,32 @@ function assignedChanged(e : Event, category : Category){
<template> <template>
<h1>Budget for {{ selected.Month + 1 }}/{{ selected.Year }}</h1> <h1>Budget for {{ selected.Month + 1 }}/{{ selected.Year }}</h1>
<span <span>Available balance:
>Available balance:
<Currency <Currency
:value="accountStore.GetIncomeAvailable(selected.Year, selected.Month)" :value="accountStore.GetIncomeAvailable(selected.Year, selected.Month)"
/></span> /></span>
<div> <div>
<router-link <router-link
:to="'/budget/' + CurrentBudgetID + '/budgeting/' + previous.Year + '/' + previous.Month" :to="'/budget/' + CurrentBudgetID + '/budgeting/' + previous.Year + '/' + previous.Month"
>&lt;&lt;</router-link >
>&nbsp; &lt;&lt;
</router-link>&nbsp;
<router-link <router-link
:to="'/budget/' + CurrentBudgetID + '/budgeting/' + current.Year + '/' + current.Month" :to="'/budget/' + CurrentBudgetID + '/budgeting/' + current.Year + '/' + current.Month"
>Current Month</router-link >
>&nbsp; Current Month
</router-link>&nbsp;
<router-link <router-link
:to="'/budget/' + CurrentBudgetID + '/budgeting/' + next.Year + '/' + next.Month" :to="'/budget/' + CurrentBudgetID + '/budgeting/' + next.Year + '/' + next.Month"
>&gt;&gt;</router-link
> >
&gt;&gt;
</router-link>
</div> </div>
<div <div
id="content"
class="container col-lg-12 grid grid-cols-2 sm:grid-cols-4 lg:grid-cols-5" class="container col-lg-12 grid grid-cols-2 sm:grid-cols-4 lg:grid-cols-5"
id="content"> >
<span class="hidden sm:block"></span> <span class="hidden sm:block" />
<span class="hidden lg:block text-right">Leftover</span> <span class="hidden lg:block text-right">Leftover</span>
<span class="hidden sm:block text-right">Assigned</span> <span class="hidden sm:block text-right">Assigned</span>
<span class="hidden sm:block text-right">Activity</span> <span class="hidden sm:block text-right">Activity</span>
@ -107,46 +110,55 @@ function assignedChanged(e : Event, category : Category){
<span <span
class="text-lg font-bold mt-2" class="text-lg font-bold mt-2"
@click="toggleGroup(group)" @click="toggleGroup(group)"
>{{ (getGroupState(group) ? "" : "+") + " " + group.Name }}</span >{{ (getGroupState(group) ? "" : "+") + " " + group.Name }}</span>
>
<Currency <Currency
:value="group.AvailableLastMonth" :value="group.AvailableLastMonth"
class="hidden lg:block mt-2" class="hidden lg:block mt-2"
positive-class="text-slate-500" positive-class="text-slate-500"
negative-class="text-red-700 dark:text-red-400" /> negative-class="text-red-700 dark:text-red-400"
/>
<Currency <Currency
:value="group.Assigned" :value="group.Assigned"
class="hidden sm:block mx-2 mt-2 text-right" class="hidden sm:block mx-2 mt-2 text-right"
positive-class="text-slate-500" positive-class="text-slate-500"
negative-class="text-red-700 dark:text-red-400" /> negative-class="text-red-700 dark:text-red-400"
/>
<Currency <Currency
:value="group.Activity" :value="group.Activity"
class="hidden sm:block mt-2" class="hidden sm:block mt-2"
positive-class="text-slate-500" positive-class="text-slate-500"
negative-class="text-red-700 dark:text-red-400" /> negative-class="text-red-700 dark:text-red-400"
/>
<Currency <Currency
:value="group.Available" :value="group.Available"
class="mt-2" class="mt-2"
positive-class="text-slate-500" positive-class="text-slate-500"
negative-class="text-red-700 dark:text-red-400" /> negative-class="text-red-700 dark:text-red-400"
/>
<template <template
v-for="category in GetCategories(group.Name)" v-for="category in GetCategories(group.Name)"
v-if="getGroupState(group)"> v-if="getGroupState(group)"
>
<span <span
class="whitespace-nowrap overflow-hidden" class="whitespace-nowrap overflow-hidden"
>{{ category.Name }}</span >{{ category.Name }}</span>
>
<Currency <Currency
:value="category.AvailableLastMonth" :value="category.AvailableLastMonth"
class="hidden lg:block" /> class="hidden lg:block"
/>
<Input <Input
type="number"
v-model="category.Assigned" v-model="category.Assigned"
type="number"
class="hidden sm:block mx-2 text-right"
@input="(evt) => assignedChanged(evt, category)" @input="(evt) => assignedChanged(evt, category)"
class="hidden sm:block mx-2 text-right" /> />
<Currency :value="category.Activity" class="hidden sm:block" />
<Currency <Currency
:value="accountStore.GetCategoryAvailable(category)" /> :value="category.Activity"
class="hidden sm:block"
/>
<Currency
:value="accountStore.GetCategoryAvailable(category)"
/>
</template> </template>
</template> </template>
</div> </div>

View File

@ -15,13 +15,12 @@ const BudgetsList = useSessionStore().BudgetsList;
<div class="grid md:grid-cols-2 gap-6"> <div class="grid md:grid-cols-2 gap-6">
<Card v-for="budget in BudgetsList"> <Card v-for="budget in BudgetsList">
<router-link <router-link
v-bind:to="'/budget/'+budget.ID+'/budgeting'" :to="'/budget/'+budget.ID+'/budgeting'"
class="contents"> class="contents"
<!--<svg class="w-24"></svg>-->
<p class="w-24 text-center text-6xl"></p>
<span class="text-lg"
>{{budget.Name}}{{budget.ID == budgetid ? " *" : ""}}</span
> >
<!--<svg class="w-24"></svg>-->
<p class="w-24 text-center text-6xl" />
<span class="text-lg">{{ budget.Name }}{{ budget.ID == budgetid ? " *" : "" }}</span>
</router-link> </router-link>
</Card> </Card>
<NewBudget /> <NewBudget />

View File

@ -2,12 +2,22 @@
<template> <template>
<div> <div>
<div class="font-bold" id="content"> <div
id="content"
class="font-bold"
>
Willkommen bei Budgeteer, der neuen App für's Budget! Willkommen bei Budgeteer, der neuen App für's Budget!
</div> </div>
<div class="container col-md-4" id="login"> <div
<router-link to="/login">Login</router-link> or id="login"
<router-link to="/login">register</router-link> class="container col-md-4"
>
<router-link to="/login">
Login
</router-link> or
<router-link to="/login">
register
</router-link>
</div> </div>
</div> </div>
</template> </template>

View File

@ -30,25 +30,30 @@ function formSubmit(e: MouseEvent) {
<template> <template>
<div> <div>
<Input <Input
type="text"
v-model="login.user" v-model="login.user"
type="text"
placeholder="Username" placeholder="Username"
class="border-2 border-black rounded-lg block px-2 my-2 w-48" /> class="border-2 border-black rounded-lg block px-2 my-2 w-48"
/>
<Input <Input
type="password"
v-model="login.password" v-model="login.password"
type="password"
placeholder="Password" placeholder="Password"
class="border-2 border-black rounded-lg block px-2 my-2 w-48" /> class="border-2 border-black rounded-lg block px-2 my-2 w-48"
/>
</div> </div>
<div>{{ error }}</div> <div>{{ error }}</div>
<button <button
type="submit" type="submit"
class="bg-blue-300 rounded-lg p-2 w-48"
@click="formSubmit" @click="formSubmit"
class="bg-blue-300 rounded-lg p-2 w-48"> >
Login Login
</button> </button>
<p> <p>
New user? New user?
<router-link to="/register">Register</router-link> instead! <router-link to="/register">
Register
</router-link> instead!
</p> </p>
</template> </template>

View File

@ -30,30 +30,36 @@ function formSubmit(e: MouseEvent) {
<template> <template>
<div> <div>
<Input <Input
type="text"
v-model="login.name" v-model="login.name"
placeholder="Name"
class="border-2 border-black rounded-lg block px-2 my-2 w-48" />
<Input
type="text" type="text"
v-model="login.email" placeholder="Name"
placeholder="Email" class="border-2 border-black rounded-lg block px-2 my-2 w-48"
class="border-2 border-black rounded-lg block px-2 my-2 w-48" /> />
<Input
v-model="login.email"
type="text"
placeholder="Email"
class="border-2 border-black rounded-lg block px-2 my-2 w-48"
/>
<Input <Input
type="password"
v-model="login.password" v-model="login.password"
type="password"
placeholder="Password" placeholder="Password"
class="border-2 border-black rounded-lg block px-2 my-2 w-48" /> class="border-2 border-black rounded-lg block px-2 my-2 w-48"
/>
</div> </div>
<div>{{ error }}</div> <div>{{ error }}</div>
<button <button
type="submit" type="submit"
class="bg-blue-300 rounded-lg p-2 w-48"
@click="formSubmit" @click="formSubmit"
class="bg-blue-300 rounded-lg p-2 w-48"> >
Register Register
</button> </button>
<p> <p>
Existing user? Existing user?
<router-link to="/login">Login</router-link> instead! <router-link to="/login">
Login
</router-link> instead!
</p> </p>
</template> </template>

View File

@ -79,25 +79,35 @@ function ynabExport() {
<h1>Danger Zone</h1> <h1>Danger Zone</h1>
<div class="grid md:grid-cols-2 gap-6"> <div class="grid md:grid-cols-2 gap-6">
<Card class="flex-col p-3"> <Card class="flex-col p-3">
<h2 class="text-lg font-bold">Clear Budget</h2> <h2 class="text-lg font-bold">
Clear Budget
</h2>
<p> <p>
This removes transactions and assignments to start from This removes transactions and assignments to start from
scratch. Accounts and categories are kept. Not undoable! scratch. Accounts and categories are kept. Not undoable!
</p> </p>
<Button class="bg-red-500 py-2" @click="clearBudget" <Button
>Clear budget</Button class="bg-red-500 py-2"
@click="clearBudget"
> >
Clear budget
</Button>
</Card> </Card>
<Card class="flex-col p-3"> <Card class="flex-col p-3">
<h2 class="text-lg font-bold">Delete Budget</h2> <h2 class="text-lg font-bold">
Delete Budget
</h2>
<p> <p>
This deletes the whole bugdet including all transactions, This deletes the whole bugdet including all transactions,
assignments, accounts and categories. Not undoable! assignments, accounts and categories. Not undoable!
</p> </p>
<Button class="bg-red-500 py-2" @click="deleteBudget" <Button
>Delete budget</Button class="bg-red-500 py-2"
@click="deleteBudget"
> >
Delete budget
</Button>
</Card> </Card>
<Card class="flex-col p-3"> <Card class="flex-col p-3">
<h2 class="text-lg font-bold"> <h2 class="text-lg font-bold">
@ -107,28 +117,35 @@ function ynabExport() {
This restores YNABs functionality, that would substract any This restores YNABs functionality, that would substract any
overspent categories' balances from next months inflows. overspent categories' balances from next months inflows.
</p> </p>
<Button class="bg-orange-500 py-2" @click="cleanNegative" <Button
>Fix negative</Button class="bg-orange-500 py-2"
@click="cleanNegative"
> >
Fix negative
</Button>
</Card> </Card>
<Card class="flex-col p-3"> <Card class="flex-col p-3">
<h2 class="text-lg font-bold">Import YNAB Budget</h2> <h2 class="text-lg font-bold">
Import YNAB Budget
</h2>
<div> <div>
<label for="transactions_file"> <label for="transactions_file">
Transaktionen: Transaktionen:
<input <input
type="file" type="file"
accept="text/*"
@change="gotTransactions" @change="gotTransactions"
accept="text/*" /> >
</label> </label>
<br /> <br>
<label for="assignments_file"> <label for="assignments_file">
Budget: Budget:
<input <input
type="file" type="file"
accept="text/*"
@change="gotAssignments" @change="gotAssignments"
accept="text/*" /> >
</label> </label>
</div> </div>
@ -136,16 +153,22 @@ function ynabExport() {
class="bg-blue-500 py-2" class="bg-blue-500 py-2"
:disabled="filesIncomplete" :disabled="filesIncomplete"
@click="ynabImport" @click="ynabImport"
>Importieren</Button
> >
Importieren
</Button>
</Card> </Card>
<Card class="flex-col p-3"> <Card class="flex-col p-3">
<h2 class="text-lg font-bold">Export as YNAB TSV</h2> <h2 class="text-lg font-bold">
Export as YNAB TSV
</h2>
<div class="flex flex-row"> <div class="flex flex-row">
<Button class="bg-blue-500 py-2" @click="ynabExport" <Button
>Export</Button class="bg-blue-500 py-2"
@click="ynabExport"
> >
Export
</Button>
</div> </div>
</Card> </Card>
</div> </div>