diff --git a/src/locales/en.js b/src/locales/en.js index 3fc88827..c5f2e432 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -514,6 +514,9 @@ export default { 'Accounts': 'Accounts', 'Statistics': 'Statistics', 'Settings': 'Settings', + 'Select All': 'Select All', + 'Select None': 'Select None', + 'Invert Selection': 'Invert Selection', 'Back': 'Back', 'Load More': 'Load More', 'No data': 'No data', @@ -666,6 +669,8 @@ export default { 'Default Chart Type': 'Default Chart Type', 'Default Chart Data Type': 'Default Chart Data Type', 'Default Date Range': 'Default Date Range', + 'Filter Accounts': 'Filter Accounts', + 'Filter Transaction Categories': 'Filter Transaction Categories', 'User Profile': 'User Profile', 'Language': 'Language', 'Auto Update Exchange Rates Data': 'Auto Update Exchange Rates Data', diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js index 15bea5c3..b2564d5c 100644 --- a/src/locales/zh_Hans.js +++ b/src/locales/zh_Hans.js @@ -514,6 +514,9 @@ export default { 'Accounts': '账户', 'Statistics': '统计', 'Settings': '设置', + 'Select All': '全部选择', + 'Select None': '全部不选', + 'Invert Selection': '反向选择', 'Back': '返回', 'Load More': '加载更多', 'No data': '没有数据', @@ -666,6 +669,8 @@ export default { 'Default Chart Type': '默认图表类型', 'Default Chart Data Type': '默认图表数据类型', 'Default Date Range': '默认时间范围', + 'Filter Accounts': '过滤账户', + 'Filter Transaction Categories': '过滤交易类型', 'User Profile': '用户信息', 'Language': '语言', 'Auto Update Exchange Rates Data': '自动更新汇率数据', diff --git a/src/router/mobile.js b/src/router/mobile.js index a9f287fa..04b73db4 100644 --- a/src/router/mobile.js +++ b/src/router/mobile.js @@ -13,6 +13,8 @@ import AccountEditPage from '../views/mobile/accounts/Edit.vue'; import StatisticsTransactionPage from '../views/mobile/statistics/Transaction.vue'; import StatisticsSettingsPage from '../views/mobile/statistics/Settings.vue'; +import StatisticsAccountFilterSettingsPage from '../views/mobile/statistics/AccountFilterSettings.vue'; +import StatisticsCategoryFilterSettingsPage from '../views/mobile/statistics/CategoryFilterSettings.vue'; import SettingsPage from '../views/mobile/Settings.vue'; import ApplicationLockPage from '../views/mobile/ApplicationLock.vue'; @@ -181,6 +183,16 @@ const routes = [ component: StatisticsSettingsPage, beforeEnter: checkLogin }, + { + path: '/statistic/filter/account', + component: StatisticsAccountFilterSettingsPage, + beforeEnter: checkLogin + }, + { + path: '/statistic/filter/category', + component: StatisticsCategoryFilterSettingsPage, + beforeEnter: checkLogin + }, { path: '/settings', component: SettingsPage, diff --git a/src/store/index.js b/src/store/index.js index 4a063078..29b2d1bb 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -184,6 +184,8 @@ const stores = { endTime: 0, chartType: statisticsConstants.defaultChartType, chartDataType: statisticsConstants.defaultChartDataType, + filterAccountIds: {}, + filterCategoryIds: {} }, transactionStatistics: [], transactionStatisticsStateInvalid: true, @@ -244,6 +246,8 @@ const stores = { state.transactionStatisticsFilter.endTime = 0; state.transactionStatisticsFilter.chartType = statisticsConstants.defaultChartType; state.transactionStatisticsFilter.chartDataType = statisticsConstants.defaultChartDataType; + state.transactionStatisticsFilter.filterAccountIds = {}; + state.transactionStatisticsFilter.filterCategoryIds = {}; state.transactionStatistics = {}; state.transactionStatisticsStateInvalid = true; @@ -833,6 +837,18 @@ const stores = { } else { state.transactionStatisticsFilter.chartDataType = statisticsConstants.defaultChartDataType; } + + if (filter && utils.isObject(filter.filterAccountIds)) { + state.transactionStatisticsFilter.filterAccountIds = filter.filterAccountIds; + } else { + state.transactionStatisticsFilter.filterAccountIds = {}; + } + + if (filter && utils.isObject(filter.filterCategoryIds)) { + state.transactionStatisticsFilter.filterCategoryIds = filter.filterCategoryIds; + } else { + state.transactionStatisticsFilter.filterCategoryIds = {}; + } }, [UPDATE_TRANSACTION_STATISTICS_FILTER] (state, filter) { if (filter && utils.isNumber(filter.dateType)) { @@ -854,6 +870,14 @@ const stores = { if (filter && utils.isNumber(filter.chartDataType)) { state.transactionStatisticsFilter.chartDataType = filter.chartDataType; } + + if (filter && utils.isObject(filter.filterAccountIds)) { + state.transactionStatisticsFilter.filterAccountIds = filter.filterAccountIds; + } + + if (filter && utils.isObject(filter.filterCategoryIds)) { + state.transactionStatisticsFilter.filterCategoryIds = filter.filterCategoryIds; + } }, [UPDATE_TRANSACTION_STATISTICS_INVALID_STATE] (state, invalidState) { state.transactionStatisticsStateInvalid = invalidState; diff --git a/src/views/mobile/statistics/AccountFilterSettings.vue b/src/views/mobile/statistics/AccountFilterSettings.vue new file mode 100644 index 00000000..dafae06c --- /dev/null +++ b/src/views/mobile/statistics/AccountFilterSettings.vue @@ -0,0 +1,296 @@ + + + diff --git a/src/views/mobile/statistics/CategoryFilterSettings.vue b/src/views/mobile/statistics/CategoryFilterSettings.vue new file mode 100644 index 00000000..e661f557 --- /dev/null +++ b/src/views/mobile/statistics/CategoryFilterSettings.vue @@ -0,0 +1,277 @@ + + + diff --git a/src/views/mobile/statistics/Transaction.vue b/src/views/mobile/statistics/Transaction.vue index 651fcfbe..3640c167 100644 --- a/src/views/mobile/statistics/Transaction.vue +++ b/src/views/mobile/statistics/Transaction.vue @@ -231,6 +231,10 @@ + + {{ $t('Filter Accounts') }} + {{ $t('Filter Transaction Categories') }} + {{ $t('Settings') }} @@ -535,6 +539,12 @@ export default { clickPieChartItem(item) { this.$f7router.navigate(this.$options.filters.itemLinkUrl(item, this.query, this.$constants.statistics.allChartDataTypes)); }, + filterAccounts() { + this.$f7router.navigate('/statistic/filter/account'); + }, + filterCategories() { + this.$f7router.navigate('/statistic/filter/category'); + }, settings() { this.$f7router.navigate('/statistic/settings'); }, @@ -565,6 +575,14 @@ export default { continue; } + if (this.query.filterAccountIds && this.query.filterAccountIds[item.account.id]) { + continue; + } + + if (this.query.filterCategoryIds && this.query.filterCategoryIds[item.category.id]) { + continue; + } + if (this.query.chartDataType === this.$constants.statistics.allChartDataTypes.ExpenseByAccount.type || this.query.chartDataType === this.$constants.statistics.allChartDataTypes.IncomeByAccount.type) { if (this.$utilities.isNumber(item.amountInDefaultCurrency)) { @@ -656,6 +674,10 @@ export default { } } + if (this.query.filterAccountIds && this.query.filterAccountIds[account.id]) { + continue; + } + let primaryAccount = this.$store.state.allAccountsMap[account.parentId]; if (!primaryAccount) {