更新个人需求清单,新增信用额度和可用额度的标注;在账户列表和交易列表中显示可用额度;修改记账页面的时间选择为默认日期选择器;优化账户余额显示逻辑
This commit is contained in:
+68
-57
@@ -1,7 +1,7 @@
|
|||||||
# ezBookkeeping 个人需求清单
|
# ezBookkeeping 个人需求清单
|
||||||
|
|
||||||
> 基于 fork 版本的定制开发需求,持续更新。
|
> 基于 fork 版本的定制开发需求,持续更新。
|
||||||
> 标注:⚠️ 中等难度 | ❌ 难/暂缓 | 🟢 已完成
|
> 标注:⚠️ 中等难度 | ❌ 难/暂缓 | ❓ 待定 | 🔍 调查中 | 🟢 已完成
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -16,63 +16,67 @@
|
|||||||
- 在设置页新增颜色选择器组件
|
- 在设置页新增颜色选择器组件
|
||||||
- 将所选颜色保存至 `localStorage`
|
- 将所选颜色保存至 `localStorage`
|
||||||
- 启动时读取颜色并注入 CSS 变量(Framework7 支持动态 primary color)
|
- 启动时读取颜色并注入 CSS 变量(Framework7 支持动态 primary color)
|
||||||
- 涉及文件:`MobileApp.vue`、`src/lib/settings.ts`、设置页面
|
- 涉及文件:`src/MobileApp.vue`、`src/lib/settings.ts`、设置页面
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 二、账户功能
|
## 二、账户功能
|
||||||
|
|
||||||
### 2. 🟢 信用卡账户:额度与剩余额度
|
### 2. 🟢 信用卡账户:额度与可用额度
|
||||||
**描述:** 为信用卡类型账户新增「信用额度」字段,在账户列表显示「可用额度」。
|
**描述:** 为信用卡类型账户新增「信用额度」字段,在账户列表显示可用额度。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 后端:`AccountExtend` JSON blob 新增 `CreditLimit` 字段(无需数据库迁移)
|
- 后端:`AccountExtend` JSON blob 新增 `CreditLimit` 字段(无需数据库迁移)
|
||||||
- API:`AccountCreateRequest` / `AccountModifyRequest` / `AccountInfoResponse` 增加 `creditLimit`
|
- API:`AccountCreateRequest` / `AccountModifyRequest` / `AccountInfoResponse` 增加 `creditLimit`
|
||||||
- 前端 model:`Account` 类增加 `creditLimit` 字段,同步 `toCreateRequest` / `toModifyRequest`
|
- 前端 model:`Account` 类增加 `creditLimit` 字段,同步序列化/反序列化
|
||||||
- 移动端 EditPage:CreditCard 分类时显示信用额度输入项
|
- 移动端 EditPage:CreditCard 分类时显示信用额度输入项
|
||||||
- 移动端 ListPage:账户列表显示「可用额度」(= `creditLimit + balance`,因信用卡余额为负值)
|
- 移动端 ListPage:账户名下方显示「可用额度: ¥xxx」(= `creditLimit + balance`)
|
||||||
- 语言包:中英文均已添加 "Credit Limit" / "Available"
|
- 桌面端 ListPage:账户卡片余额旁显示「Available: ¥xxx」
|
||||||
|
- 语言包:中英文均已添加 `"Credit Limit"` / `"Available"`
|
||||||
|
|
||||||
### 3. 🟢 账户交易列表顶部显示账户信息
|
### 3. 🟢 按账户筛选交易时顶部显示账户信息卡
|
||||||
**描述:** 在按单个账户筛选的交易列表页面顶部,显示账户图标、名称和余额信息卡片。
|
**描述:** 在按单个账户筛选的交易列表顶部,显示账户图标、名称和余额/可用额度。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 仅单账户筛选时(`queryAllFilterAccountIdsCount === 1`)显示,多账户/全部时不显示
|
- 仅单账户筛选时(`queryAllFilterAccountIdsCount === 1`)显示,多账户/全量时隐藏
|
||||||
- 信用卡账户显示「欠款 · 可用 xxx」,普通账户显示余额
|
- 信用卡账户显示「欠款 · 可用 ¥xxx」,普通账户显示余额
|
||||||
- 移动端:toolbar 下方插入 `f7-card`
|
- 移动端:toolbar 下方插入账户信息卡片
|
||||||
- 桌面端:日期范围行下方插入 `v-card`(tonal 样式)
|
- 桌面端:日期范围行下方插入 tonal 样式账户卡片
|
||||||
|
- 多子账户(`MultiSubAccounts`)一级账户:改用 `getAccountSubAccountBalance` 获取汇总余额及正确币种,修复 `currency = '---'` 导致货币符号不显示的问题
|
||||||
- 涉及文件:`src/views/mobile/transactions/ListPage.vue`、`src/views/desktop/transactions/ListPage.vue`
|
- 涉及文件:`src/views/mobile/transactions/ListPage.vue`、`src/views/desktop/transactions/ListPage.vue`
|
||||||
|
|
||||||
### 4. 🟢 允许直接修改账户余额(自动插入调整记录)
|
### 4. 🟢 账户编辑页直接修改余额(自动插入调整记录)
|
||||||
**描述:** 在账户编辑页直接修改余额字段,保存时自动计算差值并插入一条「余额调整」类型交易记录。
|
**描述:** 在账户编辑页修改余额字段,保存时自动计算差值并插入一条「余额调整」类型交易。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 后端:移除「账户已有交易时不允许添加 ModifyBalance」限制
|
- 后端:移除「账户已有交易时不允许添加 ModifyBalance」的限制
|
||||||
- 后端:`Amount` 和 `RelatedAccountAmount` 均存储 delta(而非目标余额);删除该交易可撤销 delta
|
- 后端:`Amount` 与 `RelatedAccountAmount` 均存储 delta;创建时 `balance += delta`,删除时 `balance -= delta`,修改时 `balance = balance - oldDelta + newDelta`
|
||||||
- 前端 store:新增 `adjustAccountBalance({ accountId, targetBalance, currentBalance })` 函数
|
- 后端响应:`ToTransactionInfoResponse` 对 ModifyBalance 类型返回 `RelatedAccountAmount` 作为 `sourceAmount`
|
||||||
- 移动端 EditPage:余额字段对已有账户解除只读,保存时若余额变化先调用 `adjustAccountBalance`;捕获 `NothingWillBeUpdated (200004)` 视为成功
|
- 前端 store:新增 `adjustAccountBalance({ accountId, targetBalance, currentBalance })` 函数,发送 `sourceAmount = delta`
|
||||||
|
- 移动端 EditPage:余额字段对已有账户解除只读;保存时若余额变化先调 `adjustAccountBalance`;捕获 `NothingWillBeUpdated (200004)` 视为成功
|
||||||
- 桌面端 EditDialog:同上逻辑,支持多子账户逐一调整
|
- 桌面端 EditDialog:同上逻辑,支持多子账户逐一调整
|
||||||
|
- 涉及文件:`pkg/services/transactions.go`、`pkg/models/transaction.go`、`src/stores/transaction.ts`、`src/views/mobile/accounts/EditPage.vue`、`src/views/desktop/accounts/list/dialogs/EditDialog.vue`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 三、记账页面
|
## 三、记账页面
|
||||||
|
|
||||||
### 5. 🟢 记账页显示当前账户余额 / 欠款+额度
|
### 5. 🟢 记账页选择账户后显示余额/可用额度
|
||||||
**描述:** 在记账页面选择账户后,在账户名称下方显示该账户的当前余额(普通账户)或欠款金额(信用卡/负债)。
|
**描述:** 在记账页面选择账户后,在账户行显示该账户的当前余额或信用卡可用额度。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 信用卡账户显示「可用额度: ¥xxx」(= creditLimit + balance)
|
- 信用卡账户(有 `creditLimit`):显示「欠款金额 · 可用 ¥xxx」
|
||||||
- 普通负债账户显示欠款正数,普通资产账户显示余额
|
- 普通负债账户:显示欠款正数;普通资产账户:显示余额
|
||||||
- 转账时源账户和目标账户均显示
|
- 转账类型时源账户和目标账户均显示
|
||||||
- 移动端:账户行 footer;桌面端:`custom-selection-secondary-text`
|
- 移动端:账户列表项 `footer` 字段
|
||||||
|
- 桌面端:`two-column-select` 的 `custom-selection-secondary-text`
|
||||||
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`、`src/views/desktop/transactions/list/dialogs/EditDialog.vue`
|
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`、`src/views/desktop/transactions/list/dialogs/EditDialog.vue`
|
||||||
|
|
||||||
### 6. ❓ 记录上次选择的账户
|
### 6. ❓ 记录上次选择的账户(待定)
|
||||||
**描述:** 新建交易时,默认选中上次使用的账户,而非每次重置为默认账户。
|
**描述:** 新建交易时,默认选中上次使用的账户。
|
||||||
|
|
||||||
**实现思路:**
|
**实现思路:**
|
||||||
- 保存账户 ID 到 `localStorage`
|
- 保存账户 ID 到 `localStorage`,打开记账页时读取并预选
|
||||||
- 打开记账页时读取并预选
|
|
||||||
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`、`src/lib/settings.ts`
|
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`、`src/lib/settings.ts`
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -84,76 +88,82 @@
|
|||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
```
|
```
|
||||||
[数值显示区 ] [ ⌫ ] ← ⌫ 在显示区右侧,左边有竖线与右列对齐
|
[数值显示区 ] [ ⌫ ]
|
||||||
7 8 9 ×
|
7 8 9 ×
|
||||||
4 5 6 −
|
4 5 6 −
|
||||||
1 2 3 +
|
1 2 3 +
|
||||||
C 0 . OK
|
C 0 . OK
|
||||||
```
|
```
|
||||||
- ⌫ 位于数值显示区右侧,宽度 20% 与运算符列对齐,单击退格,长按清除
|
- ⌫ 单击退格,长按清除;C 清除全部
|
||||||
- 左下角 C:单击清除全部
|
|
||||||
- . 在 OK 左侧
|
|
||||||
- × 保留
|
|
||||||
- 涉及文件:`src/components/mobile/NumberPadSheet.vue`
|
- 涉及文件:`src/components/mobile/NumberPadSheet.vue`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 五、交易详情
|
## 五、交易详情
|
||||||
|
|
||||||
### 8. 🟢 交易详情菜单增加「编辑」和「删除」
|
### 8. 🟢 交易详情页增加「编辑」和「删除」入口
|
||||||
**描述:** 交易详情页三点菜单中增加编辑和删除操作。
|
**描述:** 交易详情页三点菜单中增加编辑和删除操作。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 三点菜单展开后,第一项为「Edit」(跳转编辑页)
|
- 三点菜单:第一项「Edit」跳转编辑页,最后一项红色「Delete」确认后删除并返回
|
||||||
- 最后一项为红色「Delete」(确认后删除并返回)
|
- 从详情返回编辑页后自动刷新数据
|
||||||
- 从详情编辑返回后自动刷新数据
|
|
||||||
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`
|
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 六、分类选择
|
## 六、交易时间选择
|
||||||
|
|
||||||
### 9. ❓ 分类选择默认全部展开
|
### 9. 🟢 点击交易时间默认打开日期选择
|
||||||
**描述:** 在记账页面选择分类时,默认将所有一级分类展开显示子分类,或在设置中可配置哪些分类默认展开。
|
**描述:** 在记账/编辑页面点击「Transaction Time」标题行时,默认弹出日期选择器而非时间选择器。
|
||||||
|
|
||||||
|
**已完成:**
|
||||||
|
- 点击标题行(`transaction-edit-datetime-header`)改为以 `'date'` 模式打开
|
||||||
|
- 点击日期部分 → 日期选择器;点击时间部分 → 时间选择器(保持不变)
|
||||||
|
- 仅移动端有此交互(PC 端使用统一的 `date-time-select` 组件,无需修改)
|
||||||
|
- 涉及文件:`src/views/mobile/transactions/EditPage.vue`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、分类选择
|
||||||
|
|
||||||
|
### 10. ❓ 分类选择默认全部展开(待定)
|
||||||
|
**描述:** 在记账页选择分类时,默认展开所有一级分类。
|
||||||
|
|
||||||
**实现思路:**
|
**实现思路:**
|
||||||
- 修改 `TreeViewSelectionSheet.vue` 中展开状态的初始值
|
- 修改 `TreeViewSelectionSheet.vue` 中展开状态的初始值
|
||||||
- 可选:在设置中增加「分类默认展开」开关
|
|
||||||
- 涉及文件:`src/components/mobile/TreeViewSelectionSheet.vue`
|
- 涉及文件:`src/components/mobile/TreeViewSelectionSheet.vue`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 七、性能与动画
|
## 八、性能与动画
|
||||||
|
|
||||||
### 10. 🟢 全局动画加速
|
### 11. 🟢 全局动画加速
|
||||||
**描述:** 全局页面跳转及各类弹层动画加速。
|
**描述:** 全局页面跳转及各类弹层动画加速。
|
||||||
|
|
||||||
**已完成:**
|
**已完成:**
|
||||||
- 全局动画时长从 300ms 加快至 150ms(页面跳转、Sheet、ActionSheet、Popup、Dialog、Popover)
|
- 页面跳转、Sheet、ActionSheet、Popup、Dialog、Popover 动画时长从 300ms → 150ms
|
||||||
- Tab 切换动画保持原样(设置中已有开关可控制)
|
- Tab 切换动画保持原样(设置中已有开关可控制)
|
||||||
- 涉及文件:`src/styles/mobile/global.scss`
|
- 涉及文件:`src/styles/mobile/global.scss`
|
||||||
|
|
||||||
### 11. 🔍 点击响应卡顿优化(暂调查)
|
### 12. 🔍 点击响应卡顿(暂调查)
|
||||||
**描述:** 点击按钮有延迟感,点不上的问题。
|
**描述:** 点击按钮有延迟感,点不上的问题。
|
||||||
|
|
||||||
**初步判断:** 可能是接口响应慢导致,非前端交互延迟问题。等离线缓存(#12)完成后再评估是否仍需处理。
|
**初步判断:** 可能是接口响应慢导致,非前端交互延迟。等 #12 离线缓存完成后再评估。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 八、离线 / 缓存
|
## 九、离线 / 缓存
|
||||||
|
|
||||||
### 12. ❌ 本地优先 / 离线数据缓存(暂缓)
|
### 13. ❌ 本地优先 / 离线数据缓存(暂缓)
|
||||||
**描述:** 交易数据缓存至本地,优先展示缓存数据,后台静默拉取最新数据并更新。
|
**描述:** 交易数据本地缓存,优先展示缓存数据,后台静默拉取更新。
|
||||||
|
|
||||||
**现状:** Service Worker 已实现静态资源缓存(图片、字体、地图瓦片),但**交易业务数据**目前不做本地缓存。
|
**现状:** Service Worker 已实现静态资源缓存,但交易业务数据目前不做本地缓存。
|
||||||
|
|
||||||
**为何难:**
|
**为何难:**
|
||||||
- 需引入 IndexedDB 存储交易/账户/分类数据
|
- 需引入 IndexedDB 存储交易/账户/分类数据
|
||||||
- 需处理本地与服务端的数据同步、冲突解决
|
- 需处理本地与服务端的数据同步、冲突解决
|
||||||
- 属于架构级改动,工作量较大
|
- 属于架构级改动,工作量较大
|
||||||
|
|
||||||
**建议:** 先完成其他需求,此项作为后期规划。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 进度总览
|
## 进度总览
|
||||||
@@ -168,7 +178,8 @@
|
|||||||
| 6 | 记住上次账户 | ❓ 待定 |
|
| 6 | 记住上次账户 | ❓ 待定 |
|
||||||
| 7 | 小键盘布局 | 🟢 已完成 |
|
| 7 | 小键盘布局 | 🟢 已完成 |
|
||||||
| 8 | 详情编辑/删除 | 🟢 已完成 |
|
| 8 | 详情编辑/删除 | 🟢 已完成 |
|
||||||
| 9 | 分类默认展开 | ❓ 待定 |
|
| 9 | 点击时间默认日期选择器 | 🟢 已完成 |
|
||||||
| 10 | 全局动画加速 | 🟢 已完成 |
|
| 10 | 分类默认展开 | ❓ 待定 |
|
||||||
| 11 | 点击卡顿优化 | 🔍 暂调查 |
|
| 11 | 全局动画加速 | 🟢 已完成 |
|
||||||
| 12 | 离线缓存 | ❌ 暂缓 |
|
| 12 | 点击卡顿优化 | 🔍 暂调查 |
|
||||||
|
| 13 | 离线缓存 | ❌ 暂缓 |
|
||||||
|
|||||||
@@ -1889,6 +1889,8 @@
|
|||||||
"Are you sure you want to move all transactions?": "您確定要移動所有交易?",
|
"Are you sure you want to move all transactions?": "您確定要移動所有交易?",
|
||||||
"Unable to move transactions": "無法移動交易",
|
"Unable to move transactions": "無法移動交易",
|
||||||
"All transactions in this account have been moved.": "此帳戶中的所有交易已被移動。",
|
"All transactions in this account have been moved.": "此帳戶中的所有交易已被移動。",
|
||||||
|
"Credit Limit": "信用額度",
|
||||||
|
"Available": "可用額度",
|
||||||
"Reconciliation Statement": "對帳單",
|
"Reconciliation Statement": "對帳單",
|
||||||
"Account Balance Trends": "帳戶餘額趨勢",
|
"Account Balance Trends": "帳戶餘額趨勢",
|
||||||
"Update Closing Balance": "更新期末餘額",
|
"Update Closing Balance": "更新期末餘額",
|
||||||
|
|||||||
@@ -276,6 +276,10 @@
|
|||||||
</v-btn>
|
</v-btn>
|
||||||
<v-spacer/>
|
<v-spacer/>
|
||||||
<span class="account-balance ms-2">{{ accountBalance(element, activeSubAccount[element.id]) }}</span>
|
<span class="account-balance ms-2">{{ accountBalance(element, activeSubAccount[element.id]) }}</span>
|
||||||
|
<small class="text-medium-emphasis ms-2"
|
||||||
|
v-if="!activeSubAccount[element.id] && element.creditLimit">
|
||||||
|
{{ tt('Available') }}: {{ getRemainingCredit(element) }}
|
||||||
|
</small>
|
||||||
</div>
|
</div>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
@@ -365,7 +369,7 @@ type ClearAllTransactionsDialogType = InstanceType<typeof ClearAllTransactionsDi
|
|||||||
|
|
||||||
const display = useDisplay();
|
const display = useDisplay();
|
||||||
|
|
||||||
const { tt, getAllDateRanges, getCurrencyName, joinMultiText } = useI18n();
|
const { tt, getAllDateRanges, getCurrencyName, joinMultiText, formatAmountToLocalizedNumeralsWithCurrency } = useI18n();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
loading,
|
loading,
|
||||||
@@ -473,6 +477,11 @@ function hasAccount(accountCategory: AccountCategory): boolean {
|
|||||||
return accountsStore.hasAccount(accountCategory, !showHidden.value);
|
return accountsStore.hasAccount(accountCategory, !showHidden.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRemainingCredit(account: Account): string {
|
||||||
|
const available = (account.creditLimit ?? 0) + account.balance;
|
||||||
|
return formatAmountToLocalizedNumeralsWithCurrency(available, account.currency);
|
||||||
|
}
|
||||||
|
|
||||||
function accountCurrency(account: Account): string | null {
|
function accountCurrency(account: Account): string | null {
|
||||||
if (account.type === AccountType.SingleAccount.type) {
|
if (account.type === AccountType.SingleAccount.type) {
|
||||||
return getCurrencyName(account.currency);
|
return getCurrencyName(account.currency);
|
||||||
|
|||||||
@@ -698,6 +698,7 @@ import { type NumeralSystem, AmountFilterType } from '@/core/numeral.ts';
|
|||||||
import { ThemeType } from '@/core/theme.ts';
|
import { ThemeType } from '@/core/theme.ts';
|
||||||
import { TransactionType } from '@/core/transaction.ts';
|
import { TransactionType } from '@/core/transaction.ts';
|
||||||
import { TemplateType } from '@/core/template.ts';
|
import { TemplateType } from '@/core/template.ts';
|
||||||
|
import { AccountType } from '@/core/account.ts';
|
||||||
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
||||||
import { type Transaction, TransactionTagFilter } from '@/models/transaction.ts';
|
import { type Transaction, TransactionTagFilter } from '@/models/transaction.ts';
|
||||||
import type { TransactionTemplate } from '@/models/transaction_template.ts';
|
import type { TransactionTemplate } from '@/models/transaction_template.ts';
|
||||||
@@ -894,6 +895,11 @@ const filteredSingleAccount = computed(() => {
|
|||||||
const filteredAccountBalanceText = computed<string>(() => {
|
const filteredAccountBalanceText = computed<string>(() => {
|
||||||
const account = filteredSingleAccount.value;
|
const account = filteredSingleAccount.value;
|
||||||
if (!account) return '';
|
if (!account) return '';
|
||||||
|
if (account.type === AccountType.MultiSubAccounts.type) {
|
||||||
|
const result = accountsStore.getAccountSubAccountBalance(true, true, account);
|
||||||
|
if (!result) return '';
|
||||||
|
return formatAmountToLocalizedNumeralsWithCurrency(result.balance, result.currency);
|
||||||
|
}
|
||||||
if (account.creditLimit) {
|
if (account.creditLimit) {
|
||||||
const outstanding = -account.balance;
|
const outstanding = -account.balance;
|
||||||
const available = account.creditLimit + account.balance;
|
const available = account.creditLimit + account.balance;
|
||||||
|
|||||||
@@ -245,7 +245,7 @@
|
|||||||
v-if="pageTypeAndMode?.type === TransactionEditPageType.Transaction"
|
v-if="pageTypeAndMode?.type === TransactionEditPageType.Transaction"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="transaction-edit-datetime-header" @click="showDateTimeDialog('time')">{{ tt('Transaction Time') }}</div>
|
<div class="transaction-edit-datetime-header" @click="showDateTimeDialog('date')">{{ tt('Transaction Time') }}</div>
|
||||||
</template>
|
</template>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="transaction-edit-datetime-title">
|
<div class="transaction-edit-datetime-title">
|
||||||
|
|||||||
@@ -643,6 +643,7 @@ import {
|
|||||||
} from '@/core/datetime.ts';
|
} from '@/core/datetime.ts';
|
||||||
import { type NumeralSystem, AmountFilterType } from '@/core/numeral.ts';
|
import { type NumeralSystem, AmountFilterType } from '@/core/numeral.ts';
|
||||||
import { TransactionType } from '@/core/transaction.ts';
|
import { TransactionType } from '@/core/transaction.ts';
|
||||||
|
import { AccountType } from '@/core/account.ts';
|
||||||
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
||||||
import { type Transaction, TransactionTagFilter } from '@/models/transaction.ts';
|
import { type Transaction, TransactionTagFilter } from '@/models/transaction.ts';
|
||||||
|
|
||||||
@@ -767,6 +768,11 @@ const filteredSingleAccount = computed(() => {
|
|||||||
const filteredAccountBalanceText = computed<string>(() => {
|
const filteredAccountBalanceText = computed<string>(() => {
|
||||||
const account = filteredSingleAccount.value;
|
const account = filteredSingleAccount.value;
|
||||||
if (!account) return '';
|
if (!account) return '';
|
||||||
|
if (account.type === AccountType.MultiSubAccounts.type) {
|
||||||
|
const result = accountsStore.getAccountSubAccountBalance(true, true, account);
|
||||||
|
if (!result) return '';
|
||||||
|
return formatAmountToLocalizedNumeralsWithCurrency(result.balance, result.currency);
|
||||||
|
}
|
||||||
if (account.creditLimit) {
|
if (account.creditLimit) {
|
||||||
const outstanding = -account.balance;
|
const outstanding = -account.balance;
|
||||||
const available = account.creditLimit + account.balance;
|
const available = account.creditLimit + account.balance;
|
||||||
|
|||||||
Reference in New Issue
Block a user