mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-16 07:57:33 +08:00
236 lines
7.7 KiB
TypeScript
236 lines
7.7 KiB
TypeScript
import { type NavigationGuardReturn, createRouter, createWebHashHistory } from 'vue-router';
|
|
|
|
import { TemplateType } from '@/core/template.ts';
|
|
import { isUserLogined, isUserUnlocked } from '@/lib/userstate.ts';
|
|
|
|
import MainLayout from '@/views/desktop/MainLayout.vue';
|
|
import LoginPage from '@/views/desktop/LoginPage.vue';
|
|
import SignUpPage from '@/views/desktop/SignupPage.vue';
|
|
import VerifyEmailPage from '@/views/desktop/VerifyEmailPage.vue';
|
|
import ForgetPasswordPage from '@/views/desktop/ForgetPasswordPage.vue';
|
|
import ResetPasswordPage from '@/views/desktop/ResetPasswordPage.vue';
|
|
import UnlockPage from '@/views/desktop/UnlockPage.vue';
|
|
|
|
import HomePage from '@/views/desktop/HomePage.vue';
|
|
|
|
import TransactionListPage from '@/views/desktop/transactions/ListPage.vue';
|
|
|
|
import StatisticsTransactionPage from '@/views/desktop/statistics/TransactionPage.vue';
|
|
|
|
import AccountListPage from '@/views/desktop/accounts/ListPage.vue';
|
|
|
|
import TransactionCategoryListPage from '@/views/desktop/categories/ListPage.vue';
|
|
|
|
import TransactionTagListPage from '@/views/desktop/tags/ListPage.vue';
|
|
|
|
import TransactionTemplateListPage from '@/views/desktop/templates/ListPage.vue';
|
|
|
|
import UserSettingsPage from '@/views/desktop/user/UserSettingsPage.vue';
|
|
import AppSettingsPage from '@/views/desktop/app/AppSettingsPage.vue';
|
|
|
|
import ExchangeRatesPage from '@/views/desktop/ExchangeRatesPage.vue';
|
|
import AboutPage from '@/views/desktop/AboutPage.vue';
|
|
|
|
function checkLogin(): NavigationGuardReturn {
|
|
if (!isUserLogined()) {
|
|
return {
|
|
path: '/login',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
if (!isUserUnlocked()) {
|
|
return {
|
|
path: '/unlock',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function checkLocked(): NavigationGuardReturn {
|
|
if (!isUserLogined()) {
|
|
return {
|
|
path: '/login',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
if (isUserUnlocked()) {
|
|
return {
|
|
path: '/',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function checkNotLogin(): NavigationGuardReturn {
|
|
if (isUserLogined() && !isUserUnlocked()) {
|
|
return {
|
|
path: '/unlock',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
if (isUserLogined()) {
|
|
return {
|
|
path: '/',
|
|
replace: true
|
|
};
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
const router = createRouter({
|
|
history: createWebHashHistory(),
|
|
routes: [
|
|
{
|
|
path: '/',
|
|
component: MainLayout,
|
|
beforeEnter: checkLogin,
|
|
children: [
|
|
{
|
|
path: '',
|
|
component: HomePage,
|
|
beforeEnter: checkLogin
|
|
},
|
|
{
|
|
path: '/transaction/list',
|
|
component: TransactionListPage,
|
|
beforeEnter: checkLogin,
|
|
props: route => ({
|
|
initDateType: route.query['dateType'],
|
|
initMaxTime: route.query['maxTime'],
|
|
initMinTime: route.query['minTime'],
|
|
initType: route.query['type'],
|
|
initCategoryIds: route.query['categoryIds'],
|
|
initAccountIds: route.query['accountIds'],
|
|
initTagIds: route.query['tagIds'],
|
|
initTagFilterType: route.query['tagFilterType'],
|
|
initAmountFilter: route.query['amountFilter'],
|
|
initKeyword: route.query['keyword']
|
|
})
|
|
},
|
|
{
|
|
path: '/statistics/transaction',
|
|
component: StatisticsTransactionPage,
|
|
beforeEnter: checkLogin,
|
|
props: route => ({
|
|
initAnalysisType: route.query['analysisType'],
|
|
initChartDataType: route.query['chartDataType'],
|
|
initChartType: route.query['chartType'],
|
|
initChartDateType: route.query['chartDateType'],
|
|
initStartTime: route.query['startTime'],
|
|
initEndTime: route.query['endTime'],
|
|
initFilterAccountIds: route.query['filterAccountIds'],
|
|
initFilterCategoryIds: route.query['filterCategoryIds'],
|
|
initTagIds: route.query['tagIds'],
|
|
initTagFilterType: route.query['tagFilterType'],
|
|
initSortingType: route.query['sortingType'],
|
|
initTrendDateAggregationType: route.query['trendDateAggregationType']
|
|
})
|
|
},
|
|
{
|
|
path: '/account/list',
|
|
component: AccountListPage,
|
|
beforeEnter: checkLogin
|
|
},
|
|
{
|
|
path: '/category/list',
|
|
component: TransactionCategoryListPage,
|
|
beforeEnter: checkLogin
|
|
},
|
|
{
|
|
path: '/tag/list',
|
|
component: TransactionTagListPage,
|
|
beforeEnter: checkLogin
|
|
},
|
|
{
|
|
path: '/template/list',
|
|
component: TransactionTemplateListPage,
|
|
beforeEnter: checkLogin,
|
|
props: {
|
|
initType: TemplateType.Normal.type
|
|
}
|
|
},
|
|
{
|
|
path: '/schedule/list',
|
|
component: TransactionTemplateListPage,
|
|
beforeEnter: checkLogin,
|
|
props: {
|
|
initType: TemplateType.Schedule.type
|
|
}
|
|
},
|
|
{
|
|
path: '/exchange_rates',
|
|
component: ExchangeRatesPage,
|
|
beforeEnter: checkLogin
|
|
},
|
|
{
|
|
path: '/user/settings',
|
|
component: UserSettingsPage,
|
|
beforeEnter: checkLogin,
|
|
props: route => ({
|
|
initTab: route.query['tab']
|
|
})
|
|
},
|
|
{
|
|
path: '/app/settings',
|
|
component: AppSettingsPage,
|
|
beforeEnter: checkLogin,
|
|
props: route => ({
|
|
initTab: route.query['tab']
|
|
})
|
|
},
|
|
{
|
|
path: '/about',
|
|
component: AboutPage,
|
|
beforeEnter: checkLogin
|
|
}
|
|
]
|
|
},
|
|
{
|
|
path: '/login',
|
|
component: LoginPage,
|
|
beforeEnter: checkNotLogin
|
|
},
|
|
{
|
|
path: '/signup',
|
|
component: SignUpPage,
|
|
beforeEnter: checkNotLogin
|
|
},
|
|
{
|
|
path: '/verify_email',
|
|
component: VerifyEmailPage,
|
|
props: route => ({
|
|
email: route.query['email'],
|
|
token: route.query['token'],
|
|
hasValidEmailVerifyToken: route.query['emailSent'] === 'true'
|
|
})
|
|
},
|
|
{
|
|
path: '/forgetpassword',
|
|
component: ForgetPasswordPage,
|
|
beforeEnter: checkNotLogin
|
|
},
|
|
{
|
|
path: '/resetpassword',
|
|
component: ResetPasswordPage,
|
|
props: route => ({
|
|
token: route.query['token']
|
|
})
|
|
},
|
|
{
|
|
path: '/unlock',
|
|
component: UnlockPage,
|
|
beforeEnter: checkLocked
|
|
}
|
|
],
|
|
})
|
|
|
|
export default router;
|