code refactor

This commit is contained in:
MaysWind
2025-02-06 23:29:08 +08:00
parent b6efa91879
commit 95205d2f1d
30 changed files with 253 additions and 520 deletions
+4 -9
View File
@@ -11,7 +11,7 @@
>
<template #selection="{ item }">
<v-label class="cursor-pointer" style="padding-top: 3px">
<v-icon size="28" :icon="icons.square" :color="getFinalColor(item.raw)"/>
<v-icon size="28" :icon="mdiSquareRounded" :color="getFinalColor(item.raw)"/>
</v-label>
</template>
@@ -23,12 +23,12 @@
<div class="text-center" :key="colorInfo.color" v-for="colorInfo in row">
<div class="cursor-pointer" @click="color = colorInfo.color">
<v-icon class="ma-2" size="28"
:icon="icons.square" :color="getFinalColor(colorInfo.color)"
:icon="mdiSquareRounded" :color="getFinalColor(colorInfo.color)"
v-if="!modelValue || modelValue !== colorInfo.color" />
<v-badge class="right-bottom-icon" color="primary"
location="bottom right" offset-x="8" offset-y="8" :icon="icons.checked"
location="bottom right" offset-x="8" offset-y="8" :icon="mdiCheck"
v-if="modelValue && modelValue === colorInfo.color">
<v-icon class="ma-2" size="28" :icon="icons.square" :color="getFinalColor(colorInfo.color)" />
<v-icon class="ma-2" size="28" :icon="mdiSquareRounded" :color="getFinalColor(colorInfo.color)" />
</v-badge>
</div>
</div>
@@ -64,11 +64,6 @@ const emit = defineEmits<{
(e: 'update:modelValue', value: ColorValue): void;
}>();
const icons = {
square: mdiSquareRounded,
checked: mdiCheck
};
const dropdownMenu = useTemplateRef<HTMLElement>('dropdownMenu');
const itemPerRow = ref<number>(props.columnCount || 7);
+1 -5
View File
@@ -24,7 +24,7 @@
<div class="cursor-pointer" @click="icon = iconInfo.id">
<ItemIcon class="ma-2" icon-type="fixed" :icon-id="iconInfo.icon" :color="color" v-if="!modelValue || modelValue !== iconInfo.id" />
<v-badge class="right-bottom-icon" color="primary"
location="bottom right" offset-x="8" offset-y="10" :icon="icons.checked"
location="bottom right" offset-x="8" offset-y="10" :icon="mdiCheck"
v-if="modelValue && modelValue === iconInfo.id">
<ItemIcon class="ma-2" icon-type="fixed" :icon-id="iconInfo.icon" :color="color" />
</v-badge>
@@ -63,10 +63,6 @@ const emit = defineEmits<{
(e: 'update:modelValue', value: string): void;
}>();
const icons = {
checked: mdiCheck
};
const dropdownMenu = useTemplateRef<HTMLElement>('dropdownMenu');
const itemPerRow = ref<number>(props.columnCount || 7);
+1 -5
View File
@@ -3,7 +3,7 @@
<slot></slot>
</i>
<v-badge class="right-bottom-icon" color="secondary"
location="bottom right" offset-y="4" :icon="icons.hide"
location="bottom right" offset-y="4" :icon="mdiEyeOffOutline"
v-if="hiddenStatus">
<i class="item-icon" :class="classes" :style="style">
<slot></slot>
@@ -27,10 +27,6 @@ interface DesktopItemIconProps extends CommonIconProps {
const props = defineProps<DesktopItemIconProps>();
const { style, getAccountIcon, getCategoryIcon } = useItemIconBase(props);
const icons = {
hide: mdiEyeOffOutline
};
const classes = computed<string>(() => {
let allClasses = props.class ? (props.class + ' ') : '';
+2 -7
View File
@@ -62,7 +62,7 @@
<div class="title-and-toolbar d-flex align-center">
<v-btn class="mr-3 d-md-none" density="compact" color="default" variant="plain"
:ripple="false" :icon="true" @click="showNav = !showNav">
<v-icon :icon="icons.menu" size="24" />
<v-icon :icon="mdiMenu" size="24" />
</v-btn>
<span>{{ tt('Exchange Rates Data') }}</span>
<v-btn density="compact" color="default" variant="text" size="24"
@@ -70,7 +70,7 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
</div>
@@ -162,11 +162,6 @@ const { baseCurrency, baseAmount, exchangeRatesData, exchangeRatesDataUpdateTime
const exchangeRatesStore = useExchangeRatesStore();
const icons = {
refresh: mdiRefresh,
menu: mdiMenu
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const activeTab = ref<string>('exchangeRatesPage');
+1 -5
View File
@@ -52,7 +52,7 @@
<v-col cols="12">
<router-link class="d-flex align-center justify-center" to="/login"
:class="{ 'disabled': requesting }">
<v-icon :icon="icons.left"/>
<v-icon :icon="mdiChevronLeft"/>
<span>{{ tt('Back to login page') }}</span>
</router-link>
</v-col>
@@ -136,10 +136,6 @@ const { tt, getCurrentLanguageDisplayName, getAllLanguageOptions, setLanguage }
const rootStore = useRootStore();
const settingsStore = useSettingsStore();
const icons = {
left: mdiChevronLeft
};
const version = `v${getVersion()}`;
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
+14 -30
View File
@@ -14,7 +14,7 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
</div>
@@ -26,7 +26,7 @@
<v-skeleton-loader class="d-inline-block skeleton-no-margin mt-3 pb-1" width="120px" type="text" :loading="true" v-else-if="loadingOverview && (!transactionOverview || !transactionOverview.thisMonth || !transactionOverview.thisMonth.valid)"></v-skeleton-loader>
<v-btn class="ml-1" density="compact" color="default" variant="text"
:icon="true" @click="showAmountInHomePage = !showAmountInHomePage">
<v-icon :icon="showAmountInHomePage ? icons.eyeSlash : icons.eye" size="20" />
<v-icon :icon="showAmountInHomePage ? mdiEyeOffOutline : mdiEyeOutline" size="20" />
</v-btn>
</h4>
<div class="mt-1 mb-3">
@@ -58,7 +58,7 @@
<div class="d-flex align-center">
<div class="me-3">
<v-avatar rounded color="secondary" size="42" class="elevation-1">
<v-icon size="24" :icon="icons.totalAssets"/>
<v-icon size="24" :icon="mdiBankOutline"/>
</v-avatar>
</div>
@@ -74,7 +74,7 @@
<div class="d-flex align-center">
<div class="me-3">
<v-avatar rounded color="expense" size="42" class="elevation-1">
<v-icon size="24" :icon="icons.totalLiabilities"/>
<v-icon size="24" :icon="mdiCreditCardOutline"/>
</v-avatar>
</div>
@@ -90,7 +90,7 @@
<div class="d-flex align-center">
<div class="me-3">
<v-avatar rounded color="primary" size="42" class="elevation-1">
<v-icon size="24" :icon="icons.netAssets"/>
<v-icon size="24" :icon="mdiPiggyBankOutline"/>
</v-avatar>
</div>
@@ -110,14 +110,14 @@
<v-row>
<v-col cols="12" md="6">
<income-expense-overview-card
:loading="loadingOverview" :disabled="loadingOverview" :icon="icons.calendarToday"
:loading="loadingOverview" :disabled="loadingOverview" :icon="mdiCalendarTodayOutline"
:title="tt('Today')"
:expense-amount="transactionOverview.today && transactionOverview.today.valid ? getDisplayExpenseAmount(transactionOverview.today) : ''"
:income-amount="transactionOverview.today && transactionOverview.today.valid ? getDisplayIncomeAmount(transactionOverview.today) : ''"
:datetime="displayDateRange?.today?.displayTime || ''"
>
<template #menus>
<v-list-item :prepend-icon="icons.viewDetails" :to="'/transaction/list?dateType=' + DateRange.Today.type">
<v-list-item :prepend-icon="mdiListBoxOutline" :to="'/transaction/list?dateType=' + DateRange.Today.type">
<v-list-item-title>{{ tt('View Details') }}</v-list-item-title>
</v-list-item>
</template>
@@ -126,14 +126,14 @@
<v-col cols="12" md="6">
<income-expense-overview-card
:loading="loadingOverview" :disabled="loadingOverview" :icon="icons.calendarWeek"
:loading="loadingOverview" :disabled="loadingOverview" :icon="mdiCalendarWeekOutline"
:title="tt('This Week')"
:expense-amount="transactionOverview.thisWeek && transactionOverview.thisWeek.valid ? getDisplayExpenseAmount(transactionOverview.thisWeek) : ''"
:income-amount="transactionOverview.thisWeek && transactionOverview.thisWeek.valid ? getDisplayIncomeAmount(transactionOverview.thisWeek) : ''"
:datetime="displayDateRange?.thisWeek?.startTime + '-' + displayDateRange?.thisWeek?.endTime"
>
<template #menus>
<v-list-item :prepend-icon="icons.viewDetails" :to="'/transaction/list?dateType=' + DateRange.ThisWeek.type">
<v-list-item :prepend-icon="mdiListBoxOutline" :to="'/transaction/list?dateType=' + DateRange.ThisWeek.type">
<v-list-item-title>{{ tt('View Details') }}</v-list-item-title>
</v-list-item>
</template>
@@ -142,14 +142,14 @@
<v-col cols="12" md="6">
<income-expense-overview-card
:loading="loadingOverview" :disabled="loadingOverview" :icon="icons.calendarMonth"
:loading="loadingOverview" :disabled="loadingOverview" :icon="mdiCalendarMonthOutline"
:title="tt('This Month')"
:expense-amount="transactionOverview.thisMonth && transactionOverview.thisMonth.valid ? getDisplayExpenseAmount(transactionOverview.thisMonth) : ''"
:income-amount="transactionOverview.thisMonth && transactionOverview.thisMonth.valid ? getDisplayIncomeAmount(transactionOverview.thisMonth) : ''"
:datetime="displayDateRange?.thisMonth?.startTime + '-' + displayDateRange?.thisMonth?.endTime"
>
<template #menus>
<v-list-item :prepend-icon="icons.viewDetails" :to="'/transaction/list?dateType=' + DateRange.ThisMonth.type">
<v-list-item :prepend-icon="mdiListBoxOutline" :to="'/transaction/list?dateType=' + DateRange.ThisMonth.type">
<v-list-item-title>{{ tt('View Details') }}</v-list-item-title>
</v-list-item>
</template>
@@ -158,14 +158,14 @@
<v-col cols="12" md="6">
<income-expense-overview-card
:loading="loadingOverview" :disabled="loadingOverview" :icon="icons.calendarYear"
:loading="loadingOverview" :disabled="loadingOverview" :icon="mdiLayersTripleOutline"
:title="tt('This Year')"
:expense-amount="transactionOverview.thisYear && transactionOverview.thisYear.valid ? getDisplayExpenseAmount(transactionOverview.thisYear) : ''"
:income-amount="transactionOverview.thisYear && transactionOverview.thisYear.valid ? getDisplayIncomeAmount(transactionOverview.thisYear) : ''"
:datetime="displayDateRange?.thisYear?.displayTime || ''"
>
<template #menus>
<v-list-item :prepend-icon="icons.viewDetails" :to="'/transaction/list?dateType=' + DateRange.ThisYear.type">
<v-list-item :prepend-icon="mdiListBoxOutline" :to="'/transaction/list?dateType=' + DateRange.ThisYear.type">
<v-list-item-title>{{ tt('View Details') }}</v-list-item-title>
</v-list-item>
</template>
@@ -217,8 +217,7 @@ import {
mdiCalendarWeekOutline,
mdiCalendarMonthOutline,
mdiLayersTripleOutline,
mdiListBoxOutline,
mdiDotsVertical
mdiListBoxOutline
} from '@mdi/js';
type SnackBarType = InstanceType<typeof SnackBar>;
@@ -242,21 +241,6 @@ const {
const accountsStore = useAccountsStore();
const overviewStore = useOverviewStore();
const icons = {
refresh: mdiRefresh,
eye: mdiEyeOutline,
eyeSlash: mdiEyeOffOutline,
totalAssets: mdiBankOutline,
totalLiabilities: mdiCreditCardOutline,
netAssets: mdiPiggyBankOutline,
calendarToday: mdiCalendarTodayOutline,
calendarWeek: mdiCalendarWeekOutline,
calendarMonth: mdiCalendarMonthOutline,
calendarYear: mdiLayersTripleOutline,
viewDetails: mdiListBoxOutline,
more: mdiDotsVertical
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const loadingOverview = ref<boolean>(true);
+2 -7
View File
@@ -66,7 +66,7 @@
:disabled="logining || verifying"
:label="tt('Passcode')"
:placeholder="tt('Passcode')"
:append-inner-icon="icons.backupCode"
:append-inner-icon="mdiHelpCircleOutline"
v-model="passcode"
@click:append-inner="twoFAVerifyType = 'backupcode'"
@keyup.enter="verify"
@@ -77,7 +77,7 @@
:disabled="logining || verifying"
:label="tt('Backup Code')"
:placeholder="tt('Backup Code')"
:append-inner-icon="icons.passcode"
:append-inner-icon="mdiOnepassword"
v-model="backupCode"
@click:append-inner="twoFAVerifyType = 'passcode'"
@keyup.enter="verify"
@@ -217,11 +217,6 @@ const {
doAfterLogin
} = useLoginPageBase();
const icons = {
passcode: mdiOnepassword,
backupCode: mdiHelpCircleOutline
};
const passwordInput = useTemplateRef<VTextField>('passwordInput');
const passcodeInput = useTemplateRef<VTextField>('passcodeInput');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
+21 -44
View File
@@ -17,7 +17,7 @@
>
<li class="nav-link home-link">
<router-link to="/">
<v-icon class="nav-item-icon" :icon="icons.overview"/>
<v-icon class="nav-item-icon" :icon="mdiHomeOutline"/>
<span class="nav-item-title">{{ tt('Overview') }}</span>
</router-link>
</li>
@@ -28,13 +28,13 @@
</li>
<li class="nav-link">
<router-link to="/transaction/list?dateType=7">
<v-icon class="nav-item-icon" :icon="icons.transactions"/>
<v-icon class="nav-item-icon" :icon="mdiListBoxOutline"/>
<span class="nav-item-title">{{ tt('Transaction Details') }}</span>
</router-link>
</li>
<li class="nav-link">
<router-link to="/statistics/transaction">
<v-icon class="nav-item-icon" :icon="icons.statistics"/>
<v-icon class="nav-item-icon" :icon="mdiChartPieOutline"/>
<span class="nav-item-title">{{ tt('Statistics & Analysis') }}</span>
</router-link>
</li>
@@ -45,31 +45,31 @@
</li>
<li class="nav-link">
<router-link to="/account/list">
<v-icon class="nav-item-icon" :icon="icons.accounts"/>
<v-icon class="nav-item-icon" :icon="mdiCreditCardOutline"/>
<span class="nav-item-title">{{ tt('Accounts') }}</span>
</router-link>
</li>
<li class="nav-link">
<router-link to="/category/list">
<v-icon class="nav-item-icon" :icon="icons.categories"/>
<v-icon class="nav-item-icon" :icon="mdiViewDashboardOutline"/>
<span class="nav-item-title">{{ tt('Transaction Categories') }}</span>
</router-link>
</li>
<li class="nav-link">
<router-link to="/tag/list">
<v-icon class="nav-item-icon" :icon="icons.tags"/>
<v-icon class="nav-item-icon" :icon="mdiTagOutline"/>
<span class="nav-item-title">{{ tt('Transaction Tags') }}</span>
</router-link>
</li>
<li class="nav-link">
<router-link to="/template/list">
<v-icon class="nav-item-icon" :icon="icons.templates"/>
<v-icon class="nav-item-icon" :icon="mdiClipboardTextOutline"/>
<span class="nav-item-title">{{ tt('Transaction Templates') }}</span>
</router-link>
</li>
<li class="nav-link" v-if="isUserScheduledTransactionEnabled()">
<router-link to="/schedule/list">
<v-icon class="nav-item-icon" :icon="icons.scheduledTransactions"/>
<v-icon class="nav-item-icon" :icon="mdiClipboardTextClockOutline"/>
<span class="nav-item-title">{{ tt('Scheduled Transactions') }}</span>
</router-link>
</li>
@@ -80,19 +80,19 @@
</li>
<li class="nav-link">
<router-link to="/exchange_rates">
<v-icon class="nav-item-icon" :icon="icons.exchangeRates"/>
<v-icon class="nav-item-icon" :icon="mdiSwapHorizontal"/>
<span class="nav-item-title">{{ tt('Exchange Rates Data') }}</span>
</router-link>
</li>
<li class="nav-link">
<a href="javascript:void(0);" @click="showMobileQrCode = true">
<v-icon class="nav-item-icon" :icon="icons.mobile"/>
<v-icon class="nav-item-icon" :icon="mdiCellphone"/>
<span class="nav-item-title">{{ tt('Use on Mobile Device') }}</span>
</a>
</li>
<li class="nav-link">
<router-link to="/about">
<v-icon class="nav-item-icon" :icon="icons.about"/>
<v-icon class="nav-item-icon" :icon="mdiInformationOutline"/>
<span class="nav-item-title">{{ tt('About') }}</span>
</router-link>
</li>
@@ -105,7 +105,7 @@
<div class="d-flex h-100 align-center">
<v-btn class="ms-n3 mr-2 d-lg-none" color="default" variant="text"
:icon="true" @click="showVerticalOverlayMenu = true">
<v-icon :icon="icons.menu" size="24" />
<v-icon :icon="mdiMenu" size="24" />
</v-btn>
<div class="app-logo d-flex align-center gap-x-3 app-title-wrapper" v-if="mdAndDown">
<div class="d-flex">
@@ -116,18 +116,18 @@
<v-spacer />
<v-btn color="primary" variant="text" class="me-2"
:icon="true" @click="(currentTheme === 'light' ? currentTheme = 'dark' : (currentTheme === 'dark' ? currentTheme = 'auto' : currentTheme = 'light'))">
<v-icon :icon="(currentTheme === 'light' ? icons.themeLight : (currentTheme === 'dark' ? icons.themeDark : icons.themeAuto))" size="24" />
<v-icon :icon="(currentTheme === 'light' ? mdiWeatherSunny : (currentTheme === 'dark' ? mdiWeatherNight : mdiThemeLightDark))" size="24" />
</v-btn>
<v-avatar class="cursor-pointer" variant="tonal"
:color="currentUserAvatar ? 'rgba(0,0,0,0)' : 'primary'">
<v-img :src="currentUserAvatar" v-if="currentUserAvatar">
<template #placeholder>
<div class="d-flex align-center justify-center fill-height bg-light-primary">
<v-icon color="primary" :icon="icons.user"/>
<v-icon color="primary" :icon="mdiAccount"/>
</div>
</template>
</v-img>
<v-icon :icon="icons.user" v-else-if="!currentUserAvatar"/>
<v-icon :icon="mdiAccount" v-else-if="!currentUserAvatar"/>
<v-menu activator="parent" width="230" location="bottom end" offset="14px">
<v-list>
<v-list-item>
@@ -138,11 +138,11 @@
<v-img :src="currentUserAvatar" v-if="currentUserAvatar">
<template #placeholder>
<div class="d-flex align-center justify-center fill-height bg-light-primary">
<v-icon color="primary" :icon="icons.user"/>
<v-icon color="primary" :icon="mdiAccount"/>
</div>
</template>
</v-img>
<v-icon :icon="icons.user" v-else-if="!currentUserAvatar"/>
<v-icon :icon="mdiAccount" v-else-if="!currentUserAvatar"/>
</v-avatar>
</v-list-item-action>
</template>
@@ -151,19 +151,19 @@
</v-list-item-title>
</v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.profile"
<v-list-item :prepend-icon="mdiAccountCogOutline"
:title="tt('User Settings')"
to="/user/settings"></v-list-item>
<v-list-item :prepend-icon="icons.settings"
<v-list-item :prepend-icon="mdiCogOutline"
:title="tt('Application Settings')"
to="/app/settings"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.lock"
<v-list-item :prepend-icon="mdiLockOutline"
:title="tt('Lock Application')"
v-if="isEnableApplicationLock"
@click="lock"></v-list-item>
<v-list-item :disabled="logouting"
:prepend-icon="icons.logout"
:prepend-icon="mdiLogout"
:title="tt('Log Out')"
@click="logout"></v-list-item>
</v-list>
@@ -246,29 +246,6 @@ const rootStore = useRootStore();
const settingsStore = useSettingsStore();
const userStore = useUserStore();
const icons = {
menu: mdiMenu,
overview: mdiHomeOutline,
transactions: mdiListBoxOutline,
accounts: mdiCreditCardOutline,
categories: mdiViewDashboardOutline,
tags: mdiTagOutline,
templates: mdiClipboardTextOutline,
scheduledTransactions: mdiClipboardTextClockOutline,
statistics: mdiChartPieOutline,
exchangeRates: mdiSwapHorizontal,
settings: mdiCogOutline,
mobile: mdiCellphone,
about: mdiInformationOutline,
themeAuto: mdiThemeLightDark,
themeLight: mdiWeatherSunny,
themeDark: mdiWeatherNight,
user: mdiAccount,
profile: mdiAccountCogOutline,
lock: mdiLockOutline,
logout: mdiLogout
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const logouting = ref<boolean>(false);
+1 -5
View File
@@ -77,7 +77,7 @@
<v-col cols="12">
<router-link class="d-flex align-center justify-center" to="/login"
:class="{ 'disabled': updating }">
<v-icon :icon="icons.left"/>
<v-icon :icon="mdiChevronLeft"/>
<span>{{ tt('Back to login page') }}</span>
</router-link>
</v-col>
@@ -168,10 +168,6 @@ const { tt, getCurrentLanguageDisplayName, getAllLanguageOptions, setLanguage }
const rootStore = useRootStore();
const settingsStore = useSettingsStore();
const icons = {
left: mdiChevronLeft
};
const version = `v${getVersion()}`;
const passwordInput = useTemplateRef<VTextField>('passwordInput');
+4 -10
View File
@@ -207,22 +207,22 @@
<div class="d-flex justify-sm-space-between gap-4 flex-wrap justify-center mt-5">
<v-btn :color="(currentStep === 'basicSetting' || currentStep === 'finalResult') ? 'default' : 'primary'"
:disabled="currentStep === 'basicSetting' || currentStep === 'finalResult' || submitting || navigateToHomePage"
:prepend-icon="icons.previous"
:prepend-icon="mdiArrowLeft"
@click="switchToPreviousTab">{{ tt('Previous') }}</v-btn>
<v-btn :color="(currentStep === 'presetCategories' || currentStep === 'finalResult') ? 'secondary' : 'primary'"
:disabled="currentStep === 'presetCategories' || currentStep === 'finalResult' || submitting || navigateToHomePage"
:append-icon="icons.next"
:append-icon="mdiArrowRight"
@click="switchToNextTab"
v-if="currentStep === 'basicSetting'">{{ tt('Next') }}</v-btn>
<v-btn color="teal"
:disabled="submitting || navigateToHomePage"
:append-icon="!submitting ? icons.submit : undefined"
:append-icon="!submitting ? mdiCheck : undefined"
@click="submit"
v-if="currentStep === 'presetCategories'">
{{ tt('Submit') }}
<v-progress-circular indeterminate size="22" class="ml-2" v-if="submitting"></v-progress-circular>
</v-btn>
<v-btn :append-icon="icons.next"
<v-btn :append-icon="mdiArrowRight"
@click="navigateToLogin"
v-if="currentStep === 'finalResult'">{{ tt('Continue') }}</v-btn>
</div>
@@ -283,12 +283,6 @@ const {
const rootStore = useRootStore();
const icons = {
previous: mdiArrowLeft,
next: mdiArrowRight,
submit: mdiCheck
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const currentStep = ref<string>('basicSetting');
+1 -5
View File
@@ -55,7 +55,7 @@
<v-col cols="12">
<router-link class="d-flex align-center justify-center" :to="verified ? '/' : '/login'"
:class="{ 'disabled': loading || resending }">
<v-icon :icon="icons.left"/>
<v-icon :icon="mdiChevronLeft"/>
<span v-if="!verified">{{ tt('Back to login page') }}</span>
<span v-else-if="verified">{{ tt('Back to home page') }}</span>
</router-link>
@@ -150,10 +150,6 @@ const { tt, te, getCurrentLanguageDisplayName, getAllLanguageOptions, setLanguag
const rootStore = useRootStore();
const settingsStore = useSettingsStore();
const icons = {
left: mdiChevronLeft
};
const version = `v${getVersion()}`;
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
+14 -29
View File
@@ -52,7 +52,7 @@
<div class="title-and-toolbar d-flex align-center">
<v-btn class="mr-3 d-md-none" density="compact" color="default" variant="plain"
:ripple="false" :icon="true" @click="showNav = !showNav">
<v-icon :icon="icons.menu" size="24" />
<v-icon :icon="mdiMenu" size="24" />
</v-btn>
<span>{{ tt('Account List') }}</span>
<v-btn class="ml-3" color="default" variant="outlined"
@@ -65,19 +65,19 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Accounts')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Accounts')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -93,7 +93,7 @@
<v-btn class="ml-2" density="compact" color="default" variant="text"
:icon="true" :disabled="loading"
@click="showAccountBalance = !showAccountBalance">
<v-icon :icon="showAccountBalance ? icons.eyeSlash : icons.eye" size="20" />
<v-icon :icon="showAccountBalance ? mdiEyeOffOutline : mdiEyeOutline" size="20" />
<v-tooltip activator="parent">{{ showAccountBalance ? tt('Hide Account Balance') : tt('Show Account Balance') }}</v-tooltip>
</v-btn>
</v-card-text>
@@ -103,14 +103,14 @@
<v-card border class="card-title-with-bg account-card mb-8 h-auto">
<template #title>
<div class="account-title d-flex align-center">
<v-icon class="disabled mr-0" size="28px" :icon="icons.square" />
<v-icon class="disabled mr-0" size="28px" :icon="mdiSquareRounded" />
<span class="account-name text-truncate ml-2">
<v-skeleton-loader class="skeleton-no-margin my-1"
width="120px" type="text" :loading="true"></v-skeleton-loader>
</span>
<v-spacer/>
<span class="align-self-center">
<v-icon class="disabled" :icon="icons.drag"/>
<v-icon class="disabled" :icon="mdiDrag"/>
</span>
</div>
</template>
@@ -118,7 +118,7 @@
<v-card-text>
<div class="d-flex account-toolbar align-center">
<v-btn class="px-2" density="comfortable" color="default" variant="text"
:disabled="true" :prepend-icon="icons.transactions">
:disabled="true" :prepend-icon="mdiListBoxOutline">
{{ tt('Transaction List') }}
</v-btn>
<v-spacer/>
@@ -164,7 +164,7 @@
<v-spacer/>
<span class="align-self-center">
<v-icon :class="!loading && activeAccountCategoryVisibleAccountCount > 1 ? 'drag-handle' : 'disabled'"
:icon="icons.drag"/>
:icon="mdiDrag"/>
<v-tooltip activator="parent" v-if="!loading && activeAccountCategoryVisibleAccountCount > 1">{{ tt('Drag to Reorder') }}</v-tooltip>
</span>
</div>
@@ -203,28 +203,28 @@
<v-card-text>
<div class="d-flex account-toolbar align-center">
<v-btn class="px-2" density="comfortable" color="default" variant="text"
:disabled="loading" :prepend-icon="icons.transactions"
:disabled="loading" :prepend-icon="mdiListBoxOutline"
:to="`/transaction/list?accountIds=${accountOrSubAccountId(element)}`">
{{ tt('Transaction List') }}
</v-btn>
<v-btn class="px-2 ml-1" density="comfortable" color="default" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:disabled="loading"
:prepend-icon="element.hidden ? icons.show : icons.hide"
:prepend-icon="element.hidden ? mdiEyeOutline : mdiEyeOffOutline"
v-if="!activeSubAccount[element.id]"
@click="hide(element, !element.hidden)">
{{ element.hidden ? tt('Show') : tt('Hide') }}
</v-btn>
<v-btn class="px-2 ml-1" density="comfortable" color="default" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:disabled="loading" :prepend-icon="icons.edit"
:disabled="loading" :prepend-icon="mdiPencilOutline"
v-if="!activeSubAccount[element.id]"
@click="edit(element)">
{{ tt('Edit') }}
</v-btn>
<v-btn class="px-2 ml-1" density="comfortable" color="default" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:disabled="loading" :prepend-icon="icons.remove"
:disabled="loading" :prepend-icon="mdiDeleteOutline"
v-if="!activeSubAccount[element.id]"
@click="remove(element)">
{{ tt('Delete') }}
@@ -309,21 +309,6 @@ const {
const accountsStore = useAccountsStore();
const icons = {
eye: mdiEyeOutline,
eyeSlash: mdiEyeOffOutline,
refresh: mdiRefresh,
square: mdiSquareRounded,
menu: mdiMenu,
edit: mdiPencilOutline,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
remove: mdiDeleteOutline,
transactions: mdiListBoxOutline,
drag: mdiDrag,
more: mdiDotsVertical
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const editDialog = useTemplateRef<EditDialogType>('editDialog');
@@ -9,10 +9,10 @@
</div>
<v-btn density="comfortable" color="default" variant="text" class="ml-2" :icon="true"
:disabled="loading || submitting || !!editAccountId || account.type !== AccountType.MultiSubAccounts.type">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.add"
<v-list-item :prepend-icon="mdiCreditCardPlusOutline"
:title="tt('Add Sub-account')"
@click="addSubAccount"></v-list-item>
</v-list>
@@ -30,7 +30,7 @@
<v-tab :key="idx" :value="idx" v-for="(subAccount, idx) in subAccounts">
<span>{{ tt('Sub Account') + ' #' + (idx + 1) }}</span>
<v-btn class="ml-2" color="error" size="24" variant="text"
:icon="icons.delete" v-if="!editAccountId"
:icon="mdiDeleteOutline" v-if="!editAccountId"
@click="removeSubAccount(subAccount)"></v-btn>
</v-tab>
</template>
@@ -259,12 +259,6 @@ const {
const userStore = useUserStore();
const accountsStore = useAccountsStore();
const icons = {
more: mdiDotsVertical,
add: mdiCreditCardPlusOutline,
delete: mdiDeleteOutline
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
+3 -9
View File
@@ -2,15 +2,15 @@
<div>
<v-tabs show-arrows v-model="activeTab">
<v-tab value="basicSetting" @click="pushRouter('basicSetting')">
<v-icon size="20" start :icon="icons.basicSetting"/>
<v-icon size="20" start :icon="mdiCogOutline"/>
{{ tt('Basic') }}
</v-tab>
<v-tab value="applicationLockSetting" @click="pushRouter('applicationLockSetting')">
<v-icon size="20" start :icon="icons.applicationLockSetting"/>
<v-icon size="20" start :icon="mdiLockOpenOutline"/>
{{ tt('Application Lock') }}
</v-tab>
<v-tab value="statisticsSetting" @click="pushRouter('statisticsSetting')">
<v-icon size="20" start :icon="icons.statisticsSetting"/>
<v-icon size="20" start :icon="mdiChartPieOutline"/>
{{ tt('Statistics') }}
</v-tab>
</v-tabs>
@@ -61,12 +61,6 @@ const ALL_TABS: string[] = [
'statisticsSetting'
];
const icons = {
basicSetting: mdiCogOutline,
applicationLockSetting: mdiLockOpenOutline,
statisticsSetting: mdiChartPieOutline
};
const activeTab = ref<string>((() => {
let queryActiveTab = props.initTab || 'basicSetting';
+9 -20
View File
@@ -37,7 +37,7 @@
<div class="title-and-toolbar d-flex align-center">
<v-btn class="mr-3 d-md-none" density="compact" color="default" variant="plain"
:ripple="false" :icon="true" @click="showNav = !showNav">
<v-icon :icon="icons.menu" size="24" />
<v-icon :icon="mdiMenu" size="24" />
</v-btn>
<span>{{ tt('Transaction Categories') }}</span>
<v-btn class="ml-3" color="default" variant="outlined"
@@ -50,19 +50,19 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || updating" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Categories')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Categories')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -134,7 +134,7 @@
<v-btn class="px-2 ml-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="element.hidden ? icons.show : icons.hide"
:prepend-icon="element.hidden ? mdiEyeOutline : mdiEyeOffOutline"
:loading="categoryHiding[element.id]"
:disabled="loading || updating"
@click="hide(element, !element.hidden)">
@@ -146,7 +146,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.edit"
:prepend-icon="mdiPencilOutline"
:disabled="loading || updating"
@click="edit(element)">
{{ tt('Edit') }}
@@ -154,7 +154,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.remove"
:prepend-icon="mdiDeleteOutline"
:loading="categoryRemoving[element.id]"
:disabled="loading || updating"
@click="remove(element)">
@@ -165,7 +165,7 @@
</v-btn>
<span class="ml-2">
<v-icon :class="!loading && !updating && availableCategoryCount > 1 ? 'drag-handle' : 'disabled'"
:icon="icons.drag"/>
:icon="mdiDrag"/>
<v-tooltip activator="parent" v-if="!loading && !updating && availableCategoryCount > 1">{{ tt('Drag to Reorder') }}</v-tooltip>
</span>
</div>
@@ -235,17 +235,6 @@ const { tt } = useI18n();
const transactionCategoriesStore = useTransactionCategoriesStore();
const icons = {
refresh: mdiRefresh,
menu: mdiMenu,
edit: mdiPencilOutline,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
remove: mdiDeleteOutline,
drag: mdiDrag,
more: mdiDotsVertical
};
const navbar = useTemplateRef<VNavigationDrawer>('navbar');
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
@@ -7,26 +7,26 @@
</div>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || !hasAnyAvailableAccount" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleAccount"
@click="selectAllAccounts"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleAccount"
@click="selectNoneAccounts"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleAccount"
@click="selectInvertAccounts"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Accounts')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Accounts')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -38,26 +38,26 @@
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleAccount"
@click="selectAllAccounts"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleAccount"
@click="selectNoneAccounts"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleAccount"
@click="selectInvertAccounts"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Accounts')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Accounts')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -206,15 +206,6 @@ const {
const accountsStore = useAccountsStore();
const icons = {
selectAll: mdiSelectAll,
selectNone: mdiSelect,
selectInverse: mdiSelectInverse,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
more: mdiDotsVertical
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const expandAccountCategories = ref<number[]>(AccountCategory.values().map(category => category.type));
@@ -7,26 +7,26 @@
</div>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || !hasAnyAvailableCategory" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleCategory"
@click="selectAllCategories"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleCategory"
@click="selectNoneCategories"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleCategory"
@click="selectInvertCategories"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Categories')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Categories')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -38,26 +38,26 @@
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleCategory"
@click="selectAllCategories"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleCategory"
@click="selectNoneCategories"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleCategory"
@click="selectInvertCategories"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Categories')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Categories')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -206,15 +206,6 @@ const {
const transactionCategoriesStore = useTransactionCategoriesStore();
const icons = {
selectAll: mdiSelectAll,
selectNone: mdiSelect,
selectInverse: mdiSelectInverse,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
more: mdiDotsVertical
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const expandCategoryTypes = ref<CategoryType[]>([
@@ -7,26 +7,26 @@
</div>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || !hasAnyAvailableTag" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleTag"
@click="selectAllTransactionTags"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleTag"
@click="selectNoneTransactionTags"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleTag"
@click="selectInvertTransactionTags"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Tags')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Tags')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -38,26 +38,26 @@
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="!hasAnyVisibleTag"
@click="selectAllTransactionTags"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="!hasAnyVisibleTag"
@click="selectNoneTransactionTags"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="!hasAnyVisibleTag"
@click="selectInvertTransactionTags"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Tags')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Tags')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -80,7 +80,7 @@
<v-btn border class="justify-start" :key="filterType.type"
:color="tagFilterType === filterType.type ? 'primary' : 'default'"
:variant="tagFilterType === filterType.type ? 'tonal' : 'outlined'"
:append-icon="(tagFilterType === filterType.type ? icons.check : undefined)"
:append-icon="(tagFilterType === filterType.type ? mdiCheck : undefined)"
v-for="filterType in allTagFilterTypes"
@click="tagFilterType = filterType.type">
{{ filterType.displayName }}
@@ -102,11 +102,11 @@
@update:model-value="updateTransactionTagSelected(transactionTag, $event)">
<template #label>
<v-badge class="right-bottom-icon" color="secondary"
location="bottom right" offset-x="2" offset-y="2" :icon="icons.hide"
location="bottom right" offset-x="2" offset-y="2" :icon="mdiEyeOffOutline"
v-if="transactionTag.hidden">
<v-icon size="24" :icon="icons.tag"/>
<v-icon size="24" :icon="mdiPound"/>
</v-badge>
<v-icon size="24" :icon="icons.tag" v-else-if="!transactionTag.hidden"/>
<v-icon size="24" :icon="mdiPound" v-else-if="!transactionTag.hidden"/>
<span class="ml-3">{{ transactionTag.name }}</span>
</template>
</v-checkbox>
@@ -190,17 +190,6 @@ const {
const transactionTagsStore = useTransactionTagsStore();
const icons = {
selectAll: mdiSelectAll,
selectNone: mdiSelect,
selectInverse: mdiSelectInverse,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
more: mdiDotsVertical,
check: mdiCheck,
tag: mdiPound
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const expandTagCategories = ref<string[]>([ 'default' ]);
@@ -7,7 +7,7 @@
<span class="font-weight-bold ml-3">{{ title }}</span>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<slot name="menus"></slot>
@@ -46,8 +46,4 @@ defineProps<{
}>();
const { tt } = useI18n();
const icons = {
more: mdiDotsVertical
};
</script>
@@ -53,11 +53,11 @@
<div class="title-and-toolbar d-flex align-center">
<v-btn class="mr-3 d-md-none" density="compact" color="default" variant="plain"
:ripple="false" :icon="true" @click="showNav = !showNav">
<v-icon :icon="icons.menu" size="24" />
<v-icon :icon="mdiMenu" size="24" />
</v-btn>
<span>{{ tt('Statistics & Analysis') }}</span>
<v-btn-group class="ml-4" color="default" density="comfortable" variant="outlined" divided>
<v-btn :icon="icons.left"
<v-btn :icon="mdiArrowLeft"
:disabled="loading || !canShiftDateRange"
@click="shiftDateRange(-1)"/>
<v-menu location="bottom">
@@ -67,7 +67,7 @@
</template>
<v-list :selected="[queryDateType]">
<v-list-item :key="dateRange.type" :value="dateRange.type"
:append-icon="(queryDateType === dateRange.type ? icons.check : undefined)"
:append-icon="(queryDateType === dateRange.type ? mdiCheck : undefined)"
v-for="dateRange in allDateRanges">
<v-list-item-title
class="cursor-pointer"
@@ -83,7 +83,7 @@
</v-list-item>
</v-list>
</v-menu>
<v-btn :icon="icons.right"
<v-btn :icon="mdiArrowRight"
:disabled="loading || !canShiftDateRange"
@click="shiftDateRange(1)"/>
</v-btn-group>
@@ -91,12 +91,12 @@
<v-menu location="bottom" v-if="queryAnalysisType === StatisticsAnalysisType.TrendAnalysis">
<template #activator="{ props }">
<v-btn class="ml-3" color="default" variant="outlined"
:prepend-icon="icons.dateAggregation" :disabled="loading"
:prepend-icon="mdiCalendarRangeOutline" :disabled="loading"
v-bind="props">{{ queryTrendDateAggregationTypeName }}</v-btn>
</template>
<v-list>
<v-list-item class="cursor-pointer" :key="aggregationType.type" :value="aggregationType.type"
:append-icon="(trendDateAggregationType === aggregationType.type ? icons.check : undefined)"
:append-icon="(trendDateAggregationType === aggregationType.type ? mdiCheck : undefined)"
:title="aggregationType.displayName"
v-for="aggregationType in allDateAggregationTypes"
@click="setTrendDateAggregationType(aggregationType.type)">
@@ -109,27 +109,27 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.filter"
<v-list-item :prepend-icon="mdiFilterOutline"
:title="tt('Filter Accounts')"
@click="showFilterAccountDialog = true"></v-list-item>
<v-list-item :prepend-icon="icons.filter"
<v-list-item :prepend-icon="mdiFilterOutline"
:title="tt('Filter Transaction Categories')"
@click="showFilterCategoryDialog = true"></v-list-item>
<v-list-item :prepend-icon="icons.filter"
<v-list-item :prepend-icon="mdiFilterOutline"
:title="tt('Filter Transaction Tags')"
@click="showFilterTagDialog = true"></v-list-item>
<v-divider class="my-2"/>
<v-list-item to="/app/settings?tab=statisticsSetting"
:prepend-icon="icons.filterSettings"
:prepend-icon="mdiFilterCogOutline"
:title="tt('Settings')"></v-list-item>
</v-list>
</v-menu>
@@ -192,7 +192,7 @@
<v-list-item class="pl-0">
<template #prepend>
<div>
<v-icon class="disabled mr-0" size="34" :icon="icons.square" />
<v-icon class="disabled mr-0" size="34" :icon="mdiSquareRounded" />
</div>
</template>
<div class="d-flex flex-column ml-2">
@@ -374,7 +374,6 @@ import {
mdiMenu,
mdiFilterOutline,
mdiFilterCogOutline,
mdiPencilOutline,
mdiDotsVertical
} from '@mdi/js';
@@ -433,20 +432,6 @@ const accountsStore = useAccountsStore();
const transactionCategoriesStore = useTransactionCategoriesStore();
const statisticsStore = useStatisticsStore();
const icons = {
check: mdiCheck,
left: mdiArrowLeft,
right: mdiArrowRight,
dateAggregation: mdiCalendarRangeOutline,
refresh: mdiRefresh,
square: mdiSquareRounded,
menu: mdiMenu,
filter: mdiFilterOutline,
filterSettings: mdiFilterCogOutline,
pencil: mdiPencilOutline,
more: mdiDotsVertical
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const activeTab = ref<string>('statisticsPage');
+20 -35
View File
@@ -16,19 +16,19 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || updating || hasEditingTag" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Tags')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Tags')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -78,11 +78,11 @@
<div class="d-flex align-center">
<div class="d-flex align-center" v-if="editingTag.id !== element.id">
<v-badge class="right-bottom-icon" color="secondary"
location="bottom right" offset-x="8" :icon="icons.hide"
location="bottom right" offset-x="8" :icon="mdiEyeOffOutline"
v-if="element.hidden">
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
</v-badge>
<v-icon size="20" start :icon="icons.tag" v-else-if="!element.hidden"/>
<v-icon size="20" start :icon="mdiPound" v-else-if="!element.hidden"/>
<span class="transaction-tag-name">{{ element.name }}</span>
</div>
@@ -96,11 +96,11 @@
>
<template #prepend>
<v-badge class="right-bottom-icon" color="secondary"
location="bottom right" offset-x="8" :icon="icons.hide"
location="bottom right" offset-x="8" :icon="mdiEyeOffOutline"
v-if="element.hidden">
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
</v-badge>
<v-icon size="20" start :icon="icons.tag" v-else-if="!element.hidden"/>
<v-icon size="20" start :icon="mdiPound" v-else-if="!element.hidden"/>
</template>
</v-text-field>
@@ -109,7 +109,7 @@
<v-btn class="px-2 ml-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="element.hidden ? icons.show : icons.hide"
:prepend-icon="element.hidden ? mdiEyeOutline : mdiEyeOffOutline"
:loading="tagHiding[element.id]"
:disabled="loading || updating"
v-if="editingTag.id !== element.id"
@@ -122,7 +122,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.edit"
:prepend-icon="mdiPencilOutline"
:loading="tagUpdating[element.id]"
:disabled="loading || updating"
v-if="editingTag.id !== element.id"
@@ -135,7 +135,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.remove"
:prepend-icon="mdiDeleteOutline"
:loading="tagRemoving[element.id]"
:disabled="loading || updating"
v-if="editingTag.id !== element.id"
@@ -147,7 +147,7 @@
</v-btn>
<v-btn class="px-2"
density="comfortable" variant="text"
:prepend-icon="icons.confirm"
:prepend-icon="mdiCheck"
:loading="tagUpdating[element.id]"
:disabled="loading || updating || !isTagModified(element)"
v-if="editingTag.id === element.id" @click="save(editingTag)">
@@ -158,14 +158,14 @@
</v-btn>
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:prepend-icon="icons.cancel"
:prepend-icon="mdiClose"
:disabled="loading || updating"
v-if="editingTag.id === element.id" @click="cancelSave(editingTag)">
{{ tt('Cancel') }}
</v-btn>
<span class="ml-2">
<v-icon :class="!loading && !updating && !hasEditingTag && availableTagCount > 1 ? 'drag-handle' : 'disabled'"
:icon="icons.drag"/>
:icon="mdiDrag"/>
<v-tooltip activator="parent" v-if="!loading && !updating && !hasEditingTag && availableTagCount > 1">{{ tt('Drag to Reorder') }}</v-tooltip>
</span>
</div>
@@ -183,14 +183,14 @@
:disabled="loading || updating" :placeholder="tt('Tag Title')"
v-model="newTag.name" @keyup.enter="save(newTag)">
<template #prepend>
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
</template>
</v-text-field>
<v-spacer/>
<v-btn class="px-2" density="comfortable" variant="text"
:prepend-icon="icons.confirm"
:prepend-icon="mdiCheck"
:loading="tagUpdating['']"
:disabled="loading || updating || !isTagModified(newTag)"
@click="save(newTag)">
@@ -201,13 +201,13 @@
</v-btn>
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:prepend-icon="icons.cancel"
:prepend-icon="mdiClose"
:disabled="loading || updating"
@click="cancelSave(newTag)">
{{ tt('Cancel') }}
</v-btn>
<span class="ml-2">
<v-icon class="disabled" :icon="icons.drag"/>
<v-icon class="disabled" :icon="mdiDrag"/>
</span>
</div>
</td>
@@ -241,7 +241,6 @@ import {
import {
mdiRefresh,
mdiPlus,
mdiPencilOutline,
mdiCheck,
mdiClose,
@@ -260,20 +259,6 @@ const { tt } = useI18n();
const transactionTagsStore = useTransactionTagsStore();
const icons = {
refresh: mdiRefresh,
add: mdiPlus,
edit: mdiPencilOutline,
confirm: mdiCheck,
cancel: mdiClose,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
remove: mdiDeleteOutline,
drag: mdiDrag,
more: mdiDotsVertical,
tag: mdiPound
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
+11 -29
View File
@@ -16,19 +16,19 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
<v-spacer/>
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:disabled="loading || updating" :icon="true">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Hidden Transaction Templates')"
v-if="!showHidden" @click="showHidden = true"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Hidden Transaction Templates')"
v-if="showHidden" @click="showHidden = false"></v-list-item>
</v-list>
@@ -79,11 +79,11 @@
<div class="d-flex align-center">
<div class="d-flex align-center">
<v-badge class="right-bottom-icon" color="secondary"
location="bottom right" offset-x="8" :icon="icons.hide"
location="bottom right" offset-x="8" :icon="mdiEyeOffOutline"
v-if="element.hidden">
<v-icon size="20" start :icon="templateType === TemplateType.Schedule.type ? icons.clock : icons.text"/>
<v-icon size="20" start :icon="templateType === TemplateType.Schedule.type ? mdiClockTimeNineOutline : mdiTextBoxOutline"/>
</v-badge>
<v-icon size="20" start :icon="templateType === TemplateType.Schedule.type ? icons.clock : icons.text" v-else-if="!element.hidden"/>
<v-icon size="20" start :icon="templateType === TemplateType.Schedule.type ? mdiClockTimeNineOutline : mdiTextBoxOutline" v-else-if="!element.hidden"/>
<span class="transaction-template-name">{{ element.name }}</span>
</div>
@@ -92,7 +92,7 @@
<v-btn class="px-2 ml-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="element.hidden ? icons.show : icons.hide"
:prepend-icon="element.hidden ? mdiEyeOutline : mdiEyeOffOutline"
:loading="templateHiding[element.id]"
:disabled="loading || updating"
@click="hide(element, !element.hidden)">
@@ -104,7 +104,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.edit"
:prepend-icon="mdiPencilOutline"
:disabled="loading || updating"
@click="edit(element)">
<template #loader>
@@ -115,7 +115,7 @@
<v-btn class="px-2" color="default"
density="comfortable" variant="text"
:class="{ 'd-none': loading, 'hover-display': !loading }"
:prepend-icon="icons.remove"
:prepend-icon="mdiDeleteOutline"
:loading="templateRemoving[element.id]"
:disabled="loading || updating"
@click="remove(element)">
@@ -126,7 +126,7 @@
</v-btn>
<span class="ml-2">
<v-icon :class="!loading && !updating && availableTemplateCount > 1 ? 'drag-handle' : 'disabled'"
:icon="icons.drag"/>
:icon="mdiDrag"/>
<v-tooltip activator="parent" v-if="!loading && !updating && availableTemplateCount > 1">{{ tt('Drag to Reorder') }}</v-tooltip>
</span>
</div>
@@ -167,10 +167,7 @@ import {
import {
mdiRefresh,
mdiPlus,
mdiPencilOutline,
mdiCheck,
mdiClose,
mdiEyeOffOutline,
mdiEyeOutline,
mdiDeleteOutline,
@@ -192,21 +189,6 @@ const { tt } = useI18n();
const transactionTemplatesStore = useTransactionTemplatesStore();
const icons = {
refresh: mdiRefresh,
add: mdiPlus,
edit: mdiPencilOutline,
confirm: mdiCheck,
cancel: mdiClose,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
remove: mdiDeleteOutline,
drag: mdiDrag,
more: mdiDotsVertical,
text: mdiTextBoxOutline,
clock: mdiClockTimeNineOutline
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const editDialog = useTemplateRef<EditDialogType>('editDialog');
@@ -145,7 +145,7 @@
v-model="targetItem"
>
<template #chip="{ props, item }">
<v-chip :prepend-icon="icons.tag" :text="item.title" v-bind="props"/>
<v-chip :prepend-icon="mdiPound" :text="item.title" v-bind="props"/>
</template>
<template #item="{ props, item }">
@@ -153,7 +153,7 @@
<template #title>
<v-list-item-title>
<div class="d-flex align-center">
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
<span>{{ item.title }}</span>
</div>
</v-list-item-title>
@@ -215,10 +215,6 @@ const accountsStore = useAccountsStore();
const transactionCategoriesStore = useTransactionCategoriesStore();
const transactionTagsStore = useTransactionTagsStore();
const icons = {
tag: mdiPound
};
const showState = ref<boolean>(false);
const mode = ref<string>('');
const type = ref<string>('');
@@ -9,26 +9,26 @@
</div>
<v-btn density="comfortable" color="default" variant="text" class="ml-2" :icon="true"
:disabled="loading || submitting" v-if="mode !== TransactionEditPageMode.View">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.swap"
<v-list-item :prepend-icon="mdiSwapHorizontal"
:title="tt('Swap Account')"
v-if="transaction.type === TransactionType.Transfer"
@click="swapTransactionData(true, false)"></v-list-item>
<v-list-item :prepend-icon="icons.swap"
<v-list-item :prepend-icon="mdiSwapHorizontal"
:title="tt('Swap Amount')"
v-if="transaction.type === TransactionType.Transfer"
@click="swapTransactionData(false, true)"></v-list-item>
<v-list-item :prepend-icon="icons.swap"
<v-list-item :prepend-icon="mdiSwapHorizontal"
:title="tt('Swap Account and Amount')"
v-if="transaction.type === TransactionType.Transfer"
@click="swapTransactionData(true, true)"></v-list-item>
<v-divider v-if="transaction.type === TransactionType.Transfer" />
<v-list-item :prepend-icon="icons.show"
<v-list-item :prepend-icon="mdiEyeOutline"
:title="tt('Show Amount')"
v-if="transaction.hideAmount" @click="transaction.hideAmount = false"></v-list-item>
<v-list-item :prepend-icon="icons.hide"
<v-list-item :prepend-icon="mdiEyeOffOutline"
:title="tt('Hide Amount')"
v-if="!transaction.hideAmount" @click="transaction.hideAmount = true"></v-list-item>
</v-list>
@@ -275,7 +275,7 @@
v-model:search="tagSearchContent"
>
<template #chip="{ props, item }">
<v-chip :prepend-icon="icons.tag" :text="item.title" v-bind="props"/>
<v-chip :prepend-icon="mdiPound" :text="item.title" v-bind="props"/>
</template>
<template #item="{ props, item }">
@@ -283,7 +283,7 @@
<template #title>
<v-list-item-title>
<div class="d-flex align-center">
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
<span>{{ item.title }}</span>
</div>
</v-list-item-title>
@@ -345,9 +345,9 @@
</template>
</v-img>
<div class="picture-control-icon" :class="{ 'show-control-icon': pictureInfo.pictureId === removingPictureId }">
<v-icon size="64" :icon="icons.remove" v-if="(mode === TransactionEditPageMode.Add || mode === TransactionEditPageMode.Edit) && pictureInfo.pictureId !== removingPictureId"/>
<v-icon size="64" :icon="mdiTrashCanOutline" v-if="(mode === TransactionEditPageMode.Add || mode === TransactionEditPageMode.Edit) && pictureInfo.pictureId !== removingPictureId"/>
<v-progress-circular color="grey-500" indeterminate size="48" v-if="(mode === TransactionEditPageMode.Add || mode === TransactionEditPageMode.Edit) && pictureInfo.pictureId === removingPictureId"></v-progress-circular>
<v-icon size="64" :icon="icons.fullscreen" v-if="mode !== TransactionEditPageMode.Add && mode !== TransactionEditPageMode.Edit"/>
<v-icon size="64" :icon="mdiFullscreen" v-if="mode !== TransactionEditPageMode.Add && mode !== TransactionEditPageMode.Edit"/>
</div>
</v-avatar>
</v-col>
@@ -357,7 +357,7 @@
:class="{ 'enabled': !submitting, 'cursor-pointer': !submitting }"
color="rgba(0,0,0,0)" @click="showOpenPictureDialog">
<v-tooltip activator="parent" v-if="!submitting">{{ tt('Add Picture') }}</v-tooltip>
<v-icon class="transaction-picture-add-icon" size="56" :icon="icons.add" v-if="!uploadingPicture"/>
<v-icon class="transaction-picture-add-icon" size="56" :icon="mdiImagePlusOutline" v-if="!uploadingPicture"/>
<v-progress-circular color="grey-500" indeterminate size="48" v-if="uploadingPicture"></v-progress-circular>
</v-avatar>
</v-col>
@@ -450,7 +450,6 @@ import {
mdiEyeOutline,
mdiSwapHorizontal,
mdiPound,
mdiImageOutline,
mdiImagePlusOutline,
mdiTrashCanOutline,
mdiFullscreen
@@ -534,18 +533,6 @@ const transactionTagsStore = useTransactionTagsStore();
const transactionsStore = useTransactionsStore();
const transactionTemplatesStore = useTransactionTemplatesStore();
const icons = {
more: mdiDotsVertical,
show: mdiEyeOutline,
hide: mdiEyeOffOutline,
swap: mdiSwapHorizontal,
tag: mdiPound,
picture: mdiImageOutline ,
add: mdiImagePlusOutline,
remove: mdiTrashCanOutline,
fullscreen : mdiFullscreen
};
const map = useTemplateRef<MapViewType>('map');
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
@@ -10,87 +10,87 @@
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:icon="true" :disabled="loading || submitting"
v-if="currentStep === 'checkData'">
<v-icon :icon="icons.filter" />
<v-icon :icon="mdiFilterOutline" />
<v-menu activator="parent" max-height="500">
<v-list>
<v-list-subheader :title="tt('Date Range')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.minDatetime === null || filters.maxDatetime === null ? icons.checked : undefined"
:append-icon="filters.minDatetime === null || filters.maxDatetime === null ? mdiCheck : undefined"
@click="filters.minDatetime = filters.maxDatetime = null"></v-list-item>
<v-list-item :title="tt('Custom')"
:subtitle="displayFilterCustomDateRange"
:append-icon="filters.minDatetime !== null && filters.maxDatetime !== null ? icons.checked : undefined"
:append-icon="filters.minDatetime !== null && filters.maxDatetime !== null ? mdiCheck : undefined"
@click="showCustomDateRangeDialog = true"></v-list-item>
<v-divider class="my-2"/>
<v-list-subheader :title="tt('Type')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.transactionType === null ? icons.checked : undefined"
:append-icon="filters.transactionType === null ? mdiCheck : undefined"
@click="filters.transactionType = null"></v-list-item>
<v-list-item :title="tt('Income')"
:append-icon="filters.transactionType === TransactionType.Income ? icons.checked : undefined"
:append-icon="filters.transactionType === TransactionType.Income ? mdiCheck : undefined"
@click="filters.transactionType = TransactionType.Income"></v-list-item>
<v-list-item :title="tt('Expense')"
:append-icon="filters.transactionType === TransactionType.Expense ? icons.checked : undefined"
:append-icon="filters.transactionType === TransactionType.Expense ? mdiCheck : undefined"
@click="filters.transactionType = TransactionType.Expense"></v-list-item>
<v-list-item :title="tt('Transfer')"
:append-icon="filters.transactionType === TransactionType.Transfer ? icons.checked : undefined"
:append-icon="filters.transactionType === TransactionType.Transfer ? mdiCheck : undefined"
@click="filters.transactionType = TransactionType.Transfer"></v-list-item>
<v-divider class="my-2"/>
<v-list-subheader :title="tt('Category')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.category === null ? icons.checked : undefined"
:append-icon="filters.category === null ? mdiCheck : undefined"
@click="filters.category = null"></v-list-item>
<v-list-item :title="tt('Invalid Category')"
:append-icon="filters.category === undefined ? icons.checked : undefined"
:append-icon="filters.category === undefined ? mdiCheck : undefined"
@click="filters.category = undefined"></v-list-item>
<v-list-item :title="tt('None')"
:append-icon="filters.category === '' ? icons.checked : undefined"
:append-icon="filters.category === '' ? mdiCheck : undefined"
@click="filters.category = ''"></v-list-item>
<v-list-item :title="name" :key="name"
:append-icon="filters.category === name ? icons.checked : undefined"
:append-icon="filters.category === name ? mdiCheck : undefined"
v-for="name in allUsedCategoryNames"
@click="filters.category = name"></v-list-item>
<v-divider class="my-2"/>
<v-list-subheader :title="tt('Account')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.account === null ? icons.checked : undefined"
:append-icon="filters.account === null ? mdiCheck : undefined"
@click="filters.account = null"></v-list-item>
<v-list-item :title="tt('Invalid Account')"
:append-icon="filters.account === undefined ? icons.checked : undefined"
:append-icon="filters.account === undefined ? mdiCheck : undefined"
@click="filters.account = undefined"></v-list-item>
<v-list-item :title="tt('None')"
:append-icon="filters.account === '' ? icons.checked : undefined"
:append-icon="filters.account === '' ? mdiCheck : undefined"
@click="filters.account = ''"></v-list-item>
<v-list-item :title="name" :key="name"
:append-icon="filters.account === name ? icons.checked : undefined"
:append-icon="filters.account === name ? mdiCheck : undefined"
v-for="name in allUsedAccountNames"
@click="filters.account = name"></v-list-item>
<v-divider class="my-2"/>
<v-list-subheader :title="tt('Tags')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.tag === null ? icons.checked : undefined"
:append-icon="filters.tag === null ? mdiCheck : undefined"
@click="filters.tag = null"></v-list-item>
<v-list-item :title="tt('Invalid Tag')"
:append-icon="filters.tag === undefined ? icons.checked : undefined"
:append-icon="filters.tag === undefined ? mdiCheck : undefined"
@click="filters.tag = undefined"></v-list-item>
<v-list-item :title="tt('None')"
:append-icon="filters.tag === '' ? icons.checked : undefined"
:append-icon="filters.tag === '' ? mdiCheck : undefined"
@click="filters.tag = ''"></v-list-item>
<v-list-item :title="name" :key="name"
:append-icon="filters.tag === name ? icons.checked : undefined"
:append-icon="filters.tag === name ? mdiCheck : undefined"
v-for="name in allUsedTagNames"
@click="filters.tag = name"></v-list-item>
<v-divider class="my-2"/>
<v-list-subheader :title="tt('Description')"/>
<v-list-item :title="tt('All')"
:append-icon="filters.description === null ? icons.checked : undefined"
:append-icon="filters.description === null ? mdiCheck : undefined"
@click="filters.description = null"></v-list-item>
<v-list-item :title="tt('None')"
:append-icon="filters.description === '' ? icons.checked : undefined"
:append-icon="filters.description === '' ? mdiCheck : undefined"
@click="filters.description = ''"></v-list-item>
<v-list-item :title="tt('Custom')"
:subtitle="filters.description !== null ? filters.description : undefined"
:append-icon="filters.description !== null && filters.description !== '' ? icons.checked : undefined"
:append-icon="filters.description !== null && filters.description !== '' ? mdiCheck : undefined"
@click="currentDescriptionFilterValue = filters.description || ''; showCustomDescriptionDialog = true"></v-list-item>
</v-list>
</v-menu>
@@ -98,47 +98,47 @@
<v-btn density="comfortable" color="default" variant="text" class="ml-2"
:icon="true" :disabled="loading || submitting"
v-if="currentStep === 'checkData'">
<v-icon :icon="icons.more" />
<v-icon :icon="mdiDotsVertical" />
<v-menu activator="parent">
<v-list>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || selectedExpenseTransactionCount < 1"
:title="tt('Batch Replace Selected Expense Categories')"
@click="showBatchReplaceDialog('expenseCategory')"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || selectedIncomeTransactionCount < 1"
:title="tt('Batch Replace Selected Income Categories')"
@click="showBatchReplaceDialog('incomeCategory')"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || selectedTransferTransactionCount < 1"
:title="tt('Batch Replace Selected Transfer Categories')"
@click="showBatchReplaceDialog('transferCategory')"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || selectedImportTransactionCount < 1"
:title="tt('Batch Replace Selected Accounts')"
@click="showBatchReplaceDialog('account')"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || selectedTransferTransactionCount < 1"
:title="tt('Batch Replace Selected Destination Accounts')"
@click="showBatchReplaceDialog('destinationAccount')"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || !allInvalidExpenseCategoryNames || allInvalidExpenseCategoryNames.length < 1"
:title="tt('Replace Invalid Expense Categories')"
@click="showReplaceInvalidItemDialog('expenseCategory', allInvalidExpenseCategoryNames)"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || !allInvalidIncomeCategoryNames || allInvalidIncomeCategoryNames.length < 1"
:title="tt('Replace Invalid Income Categories')"
@click="showReplaceInvalidItemDialog('incomeCategory', allInvalidIncomeCategoryNames)"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || !allInvalidTransferCategoryNames || allInvalidTransferCategoryNames.length < 1"
:title="tt('Replace Invalid Transfer Categories')"
@click="showReplaceInvalidItemDialog('transferCategory', allInvalidTransferCategoryNames)"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || !allInvalidAccountNames || allInvalidAccountNames.length < 1"
:title="tt('Replace Invalid Accounts')"
@click="showReplaceInvalidItemDialog('account', allInvalidAccountNames)"></v-list-item>
<v-list-item :prepend-icon="icons.replace"
<v-list-item :prepend-icon="mdiFindReplace"
:disabled="!!editingTransaction || !allInvalidTransactionTagNames || allInvalidTransactionTagNames.length < 1"
:title="tt('Replace Invalid Transaction Tags')"
@click="showReplaceInvalidItemDialog('tag', allInvalidTransactionTagNames)"></v-list-item>
@@ -195,7 +195,7 @@
<v-col cols="12" md="12" class="mb-0 pb-0" v-if="exportFileGuideDocumentUrl">
<a :href="exportFileGuideDocumentUrl" :class="{ 'disabled': submitting }" target="_blank">
<v-icon :icon="icons.document" size="16" />
<v-icon :icon="mdiHelpCircleOutline" size="16" />
<span class="ml-1">{{ tt('How to export this file?') }}</span>
<span class="ml-1" v-if="exportFileGuideDocumentLanguageName">({{ exportFileGuideDocumentLanguageName }})</span>
</a>
@@ -229,37 +229,37 @@
>
<v-menu activator="parent" location="bottom">
<v-list>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All Valid Items')"
:disabled="loading || submitting"
@click="selectAllValid"></v-list-item>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All Invalid Items')"
:disabled="loading || submitting"
@click="selectAllInvalid"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All')"
:disabled="loading || submitting"
@click="selectAll"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None')"
:disabled="loading || submitting"
@click="selectNone"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection')"
:disabled="loading || submitting"
@click="selectInvert"></v-list-item>
<v-divider class="my-2"/>
<v-list-item :prepend-icon="icons.selectAll"
<v-list-item :prepend-icon="mdiSelectAll"
:title="tt('Select All in This Page')"
:disabled="loading || submitting"
@click="selectAllInThisPage"></v-list-item>
<v-list-item :prepend-icon="icons.selectNone"
<v-list-item :prepend-icon="mdiSelect"
:title="tt('Select None in This Page')"
:disabled="loading || submitting"
@click="selectNoneInThisPage"></v-list-item>
<v-list-item :prepend-icon="icons.selectInverse"
<v-list-item :prepend-icon="mdiSelectInverse"
:title="tt('Invert Selection in This Page')"
:disabled="loading || submitting"
@click="selectInvertInThisPage"></v-list-item>
@@ -276,7 +276,7 @@
<template #item.valid="{ item }">
<v-icon size="small" :class="{ 'text-error': !item.valid }"
:disabled="loading || submitting"
:icon="editingTransaction === item ? icons.complete : icons.edit"
:icon="editingTransaction === item ? mdiCheck : mdiPencilOutline"
@click="editTransaction(item)">
</v-icon>
<v-tooltip activator="parent" v-if="!loading && !submitting">{{ tt('Edit') }}</v-tooltip>
@@ -304,7 +304,7 @@
{{ allCategoriesMap[item.categoryId].name }}
</span>
<div class="text-error font-italic" v-else-if="item.type !== TransactionType.ModifyBalance && (!item.categoryId || item.categoryId === '0' || !allCategoriesMap[item.categoryId])">
<v-icon class="mr-1" :icon="icons.alert"/>
<v-icon class="mr-1" :icon="mdiAlertOutline"/>
<span>{{ item.originalCategoryName }}</span>
</div>
</div>
@@ -365,20 +365,20 @@
</template>
<template #item.sourceAmount="{ item }">
<span>{{ getTransactionDisplayAmount(item) }}</span>
<v-icon class="mx-1" size="13" :icon="icons.arrowRight" v-if="item.type === TransactionType.Transfer && item.sourceAccountId !== item.destinationAccountId"></v-icon>
<v-icon class="mx-1" size="13" :icon="mdiArrowRight" v-if="item.type === TransactionType.Transfer && item.sourceAccountId !== item.destinationAccountId"></v-icon>
<span v-if="item.type === TransactionType.Transfer && item.sourceAccountId !== item.destinationAccountId">{{ getTransactionDisplayDestinationAmount(item) }}</span>
</template>
<template #item.actualSourceAccountName="{ item }">
<div class="d-flex align-center" v-if="editingTransaction !== item">
<span v-if="item.sourceAccountId && item.sourceAccountId !== '0' && allAccountsMap[item.sourceAccountId]">{{ allAccountsMap[item.sourceAccountId].name }}</span>
<div class="text-error font-italic" v-else>
<v-icon class="mr-1" :icon="icons.alert"/>
<v-icon class="mr-1" :icon="mdiAlertOutline"/>
<span>{{ item.originalSourceAccountName }}</span>
</div>
<v-icon class="mx-1" size="13" :icon="icons.arrowRight" v-if="item.type === TransactionType.Transfer"></v-icon>
<v-icon class="mx-1" size="13" :icon="mdiArrowRight" v-if="item.type === TransactionType.Transfer"></v-icon>
<span v-if="item.type === TransactionType.Transfer && item.destinationAccountId && item.destinationAccountId !== '0' && allAccountsMap[item.destinationAccountId]">{{allAccountsMap[item.destinationAccountId].name }}</span>
<div class="text-error font-italic" v-else-if="item.type === TransactionType.Transfer && (!item.destinationAccountId || item.destinationAccountId === '0' || !allAccountsMap[item.destinationAccountId])">
<v-icon class="mr-1" :icon="icons.alert"/>
<v-icon class="mr-1" :icon="mdiAlertOutline"/>
<span>{{ item.originalDestinationAccountName }}</span>
</div>
</div>
@@ -399,7 +399,7 @@
:items="allVisibleCategorizedAccounts"
v-model="item.sourceAccountId">
</two-column-select>
<v-icon class="mx-1" size="13" :icon="icons.arrowRight" v-if="item.type === TransactionType.Transfer"></v-icon>
<v-icon class="mx-1" size="13" :icon="mdiArrowRight" v-if="item.type === TransactionType.Transfer"></v-icon>
<two-column-select density="compact" variant="plain"
primary-key-field="id" primary-value-field="category"
primary-title-field="name" primary-footer-field="displayBalance"
@@ -427,7 +427,7 @@
<div v-if="editingTransaction !== item">
<v-chip class="transaction-tag" size="small"
:class="{ 'font-italic': !tagId || tagId === '0' || !allTagsMap[tagId] }"
:prepend-icon="tagId && tagId !== '0' && allTagsMap[tagId] ? icons.tag : icons.alert"
:prepend-icon="tagId && tagId !== '0' && allTagsMap[tagId] ? mdiPound : mdiAlertOutline"
:color="tagId && tagId !== '0' && allTagsMap[tagId] ? 'default' : 'error'"
:text="tagId && tagId !== '0' && allTagsMap[tagId] ? allTagsMap[tagId].name : item.originalTagNames[index]"
:key="tagId"
@@ -454,7 +454,7 @@
>
<template #chip="{ props, index }">
<v-chip :class="{ 'font-italic': !isTagValid(editingTags, index) }"
:prepend-icon="isTagValid(editingTags, index) ? icons.tag : icons.alert"
:prepend-icon="isTagValid(editingTags, index) ? mdiPound : mdiAlertOutline"
:color="isTagValid(editingTags, index) ? 'default' : 'error'"
:text="isTagValid(editingTags, index) ? allTagsMap[editingTags[index]].name : item.originalTagNames[index]"
v-bind="props"/>
@@ -465,7 +465,7 @@
<template #title>
<v-list-item-title>
<div class="d-flex align-center">
<v-icon size="20" start :icon="icons.tag"/>
<v-icon size="20" start :icon="mdiPound"/>
<span>{{ item.title }}</span>
</div>
</v-list-item-title>
@@ -545,22 +545,22 @@
<div class="d-flex justify-sm-space-between gap-4 flex-wrap justify-center mt-10">
<v-btn color="secondary" variant="tonal" :disabled="loading || submitting"
:prepend-icon="icons.previous" @click="close(false)"
:prepend-icon="mdiClose" @click="close(false)"
v-if="currentStep !== 'finalResult'">{{ tt('Cancel') }}</v-btn>
<v-btn color="primary" :disabled="loading || submitting || !importFile"
:append-icon="!submitting ? icons.next : undefined" @click="parseData"
:append-icon="!submitting ? mdiArrowRight : undefined" @click="parseData"
v-if="currentStep === 'uploadFile'">
{{ tt('Next') }}
<v-progress-circular indeterminate size="22" class="ml-2" v-if="submitting"></v-progress-circular>
</v-btn>
<v-btn color="teal" :disabled="submitting || !!editingTransaction || selectedImportTransactionCount < 1 || selectedInvalidTransactionCount > 0"
:append-icon="!submitting ? icons.next : undefined" @click="submit"
:append-icon="!submitting ? mdiArrowRight : undefined" @click="submit"
v-if="currentStep === 'checkData'">
{{ tt('Import') }}
<v-progress-circular indeterminate size="22" class="ml-2" v-if="submitting"></v-progress-circular>
</v-btn>
<v-btn color="secondary" variant="tonal"
:append-icon="icons.complete"
:append-icon="mdiCheck"
@click="close(true)"
v-if="currentStep === 'finalResult'">{{ tt('Close') }}</v-btn>
</div>
@@ -710,25 +710,6 @@ const transactionsStore = useTransactionsStore();
const overviewStore = useOverviewStore();
const statisticsStore = useStatisticsStore();
const icons = {
filter: mdiFilterOutline,
checked: mdiCheck,
more: mdiDotsVertical,
document: mdiHelpCircleOutline,
replace: mdiFindReplace,
previous: mdiClose,
next: mdiArrowRight,
complete: mdiCheck,
select: mdiSelect,
selectAll: mdiSelectAll,
selectNone: mdiSelect,
selectInverse: mdiSelectInverse,
edit: mdiPencilOutline,
arrowRight: mdiArrowRight,
alert: mdiAlertOutline,
tag: mdiPound
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const batchReplaceDialog = useTemplateRef<BatchReplaceDialogType>('batchReplaceDialog');
+4 -11
View File
@@ -2,19 +2,19 @@
<div>
<v-tabs show-arrows v-model="activeTab">
<v-tab value="basicSetting" @click="pushRouter('basicSetting')">
<v-icon size="20" start :icon="icons.basicSetting"/>
<v-icon size="20" start :icon="mdiAccountOutline"/>
{{ tt('Basic') }}
</v-tab>
<v-tab value="securitySetting" @click="pushRouter('securitySetting')">
<v-icon size="20" start :icon="icons.securitySetting"/>
<v-icon size="20" start :icon="mdiLockOpenOutline"/>
{{ tt('Security') }}
</v-tab>
<v-tab value="twoFactorSetting" @click="pushRouter('twoFactorSetting')">
<v-icon size="20" start :icon="icons.twoFactorSetting"/>
<v-icon size="20" start :icon="mdiOnepassword"/>
{{ tt('Two-Factor Authentication') }}
</v-tab>
<v-tab value="dataManagementSetting" @click="pushRouter('dataManagementSetting')">
<v-icon size="20" start :icon="icons.dataManagementSetting"/>
<v-icon size="20" start :icon="mdiDatabaseCogOutline"/>
{{ tt('Data Management') }}
</v-tab>
</v-tabs>
@@ -74,13 +74,6 @@ const ALL_TABS: string[] = [
'dataManagementSetting'
];
const icons = {
basicSetting: mdiAccountOutline,
securitySetting: mdiLockOpenOutline,
twoFactorSetting: mdiOnepassword,
dataManagementSetting: mdiDatabaseCogOutline
};
const twoFactorSettingTab = useTemplateRef<TwoFactorSettingTabType>('twoFactorSettingTab');
const activeTab = ref<string>((() => {
@@ -14,13 +14,13 @@
<v-img :src="currentUserAvatar" v-if="currentUserAvatar">
<template #placeholder>
<div class="d-flex align-center justify-center fill-height bg-light-primary">
<v-icon color="primary" size="48" class="user-profile-avatar-placeholder" :icon="icons.user"/>
<v-icon color="primary" size="48" class="user-profile-avatar-placeholder" :icon="mdiAccount"/>
</div>
</template>
</v-img>
<v-icon size="48" class="user-profile-avatar-placeholder" :icon="icons.user" v-else-if="!currentUserAvatar"/>
<v-icon size="48" class="user-profile-avatar-placeholder" :icon="mdiAccount" v-else-if="!currentUserAvatar"/>
<div class="avatar-edit-icon" v-if="avatarProvider === 'internal'">
<v-icon size="48" :icon="icons.pencil"/>
<v-icon size="48" :icon="mdiAccountEditOutline"/>
</div>
<v-menu activator="parent" width="200" location="bottom" offset="14px" v-if="avatarProvider === 'internal'">
<v-list>
@@ -399,11 +399,6 @@ const rootStore = useRootStore();
const userStore = useUserStore();
const accountsStore = useAccountsStore();
const icons = {
user: mdiAccount,
pencil: mdiAccountEditOutline,
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const avatarInput = useTemplateRef<HTMLInputElement>('avatarInput');
@@ -10,7 +10,7 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
</div>
@@ -22,43 +22,43 @@
{
title: 'Transactions',
count: displayDataStatistics ? displayDataStatistics.totalTransactionCount : '-',
icon: icons.transactions,
icon: mdiListBoxOutline,
color: 'info-darken-1'
},
{
title: 'Accounts',
count: displayDataStatistics ? displayDataStatistics.totalAccountCount : '-',
icon: icons.accounts,
icon: mdiCreditCardOutline,
color: 'primary'
},
{
title: 'Transaction Categories',
count: displayDataStatistics ? displayDataStatistics.totalTransactionCategoryCount : '-',
icon: icons.categories,
icon: mdiViewDashboardOutline,
color: 'teal'
},
{
title: 'Transaction Tags',
count: displayDataStatistics ? displayDataStatistics.totalTransactionTagCount : '-',
icon: icons.tags,
icon: mdiTagOutline,
color: 'secondary'
},
{
title: 'Transaction Pictures',
count: displayDataStatistics ? displayDataStatistics.totalTransactionPictureCount : '-',
icon: icons.pictures,
icon: mdiImage,
color: 'error-darken-1'
},
{
title: 'Transaction Templates',
count: displayDataStatistics ? displayDataStatistics.totalTransactionTemplateCount : '-',
icon: icons.templates,
icon: mdiClipboardTextOutline,
color: 'secondary-darken-1'
},
{
title: 'Scheduled Transactions',
count: displayDataStatistics ? displayDataStatistics.totalScheduledTransactionCount : '-',
icon: icons.scheduledTransactions,
icon: mdiClipboardTextClockOutline,
color: 'success-darken-1'
}
]">
@@ -117,7 +117,7 @@
<v-form>
<v-card-text class="py-0">
<span class="text-body-1 text-error">
<v-icon :icon="icons.alert"/>
<v-icon :icon="mdiAlert"/>
{{ tt('You CANNOT undo this action. This will clear your accounts, categories, tags and transactions data. Please enter your current password to confirm.') }}
</span>
</v-card-text>
@@ -192,18 +192,6 @@ const { dataStatistics, displayDataStatistics, getExportFileName } = useDataMana
const rootStore = useRootStore();
const userStore = useUserStore();
const icons = {
refresh: mdiRefresh,
transactions: mdiListBoxOutline,
accounts: mdiCreditCardOutline,
categories: mdiViewDashboardOutline,
tags: mdiTagOutline,
pictures: mdiImage,
templates: mdiClipboardTextOutline,
scheduledTransactions: mdiClipboardTextClockOutline,
alert: mdiAlert
};
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
const snackbar = useTemplateRef<SnackBarType>('snackbar');
@@ -73,7 +73,7 @@
<template #loader>
<v-progress-circular indeterminate size="20"/>
</template>
<v-icon :icon="icons.refresh" size="24" />
<v-icon :icon="mdiRefresh" size="24" />
<v-tooltip activator="parent">{{ tt('Refresh') }}</v-tooltip>
</v-btn>
</div>
@@ -176,10 +176,6 @@ const rootStore = useRootStore();
const settingsStore = useSettingsStore();
const tokensStore = useTokensStore();
const icons = {
refresh: mdiRefresh
};
const newPasswordInput = useTemplateRef<VTextField>('newPasswordInput');
const confirmPasswordInput = useTemplateRef<VTextField>('confirmPasswordInput');
const confirmDialog = useTemplateRef<ConfirmDialogType>('confirmDialog');
@@ -84,7 +84,7 @@
<v-btn id="copy-to-clipboard-icon" ref="copyToClipboardIcon"
density="compact" color="default" variant="text" size="24"
class="ml-2" :icon="true">
<v-icon :icon="icons.copy" size="20" />
<v-icon :icon="mdiContentCopy" size="20" />
<v-tooltip activator="parent">{{ tt('Copy') }}</v-tooltip>
</v-btn>
</template>
@@ -123,10 +123,6 @@ const { tt } = useI18n();
const twoFactorAuthStore = useTwoFactorAuthStore();
const icons = {
copy: mdiContentCopy
};
const snackbar = useTemplateRef<SnackBarType>('snackbar');
const iconCopyToClipboard = useTemplateRef<unknown>('copyToClipboardIcon');