mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 00:34:28 +08:00
support setting the time of the initial balance when creating a new account
This commit is contained in:
@@ -10,6 +10,7 @@ export function setAccountModelByAnotherAccount(account, account2) {
|
||||
account.color = account2.color;
|
||||
account.currency = account2.currency;
|
||||
account.balance = account2.balance;
|
||||
account.balanceTime = account2.balanceTime;
|
||||
account.comment = account2.comment;
|
||||
account.visible = !account2.hidden;
|
||||
}
|
||||
|
||||
+2
-1
@@ -255,7 +255,7 @@ export default {
|
||||
getAccount: ({ id }) => {
|
||||
return axios.get('v1/accounts/get.json?id=' + id);
|
||||
},
|
||||
addAccount: ({ category, type, name, icon, color, currency, balance, comment, subAccounts, clientSessionId }) => {
|
||||
addAccount: ({ category, type, name, icon, color, currency, balance, balanceTime, comment, subAccounts, clientSessionId }) => {
|
||||
return axios.post('v1/accounts/add.json', {
|
||||
category,
|
||||
type,
|
||||
@@ -264,6 +264,7 @@ export default {
|
||||
color,
|
||||
currency,
|
||||
balance,
|
||||
balanceTime,
|
||||
comment,
|
||||
subAccounts,
|
||||
clientSessionId
|
||||
|
||||
@@ -1172,6 +1172,7 @@
|
||||
"parentId": "Parent Node ID",
|
||||
"categoryId": "Category ID",
|
||||
"time": "Time",
|
||||
"balanceTime": "Balance Time",
|
||||
"startTime": "Start Time",
|
||||
"endTime": "End Time",
|
||||
"amountFilter": "Amount Filter",
|
||||
@@ -1461,6 +1462,8 @@
|
||||
"Currency": "Currency",
|
||||
"Account Balance": "Account Balance",
|
||||
"Sub-account Balance": "Sub-account Balance",
|
||||
"Balance Time": "Balance Time",
|
||||
"Sub-account Balance Time": "Sub-account Balance Time",
|
||||
"Description": "Description",
|
||||
"Your account description (optional)": "Your account description (optional)",
|
||||
"Your sub-account description (optional)": "Your sub-account description (optional)",
|
||||
|
||||
@@ -1172,6 +1172,7 @@
|
||||
"parentId": "父节点ID",
|
||||
"categoryId": "分类ID",
|
||||
"time": "时间",
|
||||
"balanceTime": "余额时间",
|
||||
"startTime": "开始时间",
|
||||
"endTime": "结束时间",
|
||||
"amountFilter": "金额过滤",
|
||||
@@ -1461,6 +1462,8 @@
|
||||
"Currency": "货币",
|
||||
"Account Balance": "账户余额",
|
||||
"Sub-account Balance": "子账户余额",
|
||||
"Balance Time": "余额时间",
|
||||
"Sub-account Balance Time": "子账户余额时间",
|
||||
"Description": "描述",
|
||||
"Your account description (optional)": "你的账户描述 (可选)",
|
||||
"Your sub-account description (optional)": "你的子账户描述 (可选)",
|
||||
|
||||
@@ -10,6 +10,7 @@ import colorConstants from '@/consts/color.js';
|
||||
import services from '@/lib/services.js';
|
||||
import logger from '@/lib/logger.js';
|
||||
import { isNumber, isEquals } from '@/lib/common.js';
|
||||
import { getCurrentUnixTime } from '@/lib/datetime.js';
|
||||
import { getCategorizedAccountsMap, getAllFilteredAccountsBalance } from '@/lib/account.js';
|
||||
|
||||
function loadAccountList(state, accounts) {
|
||||
@@ -254,6 +255,7 @@ export const useAccountsStore = defineStore('accounts', {
|
||||
actions: {
|
||||
generateNewAccountModel() {
|
||||
const userStore = useUserStore();
|
||||
const now = getCurrentUnixTime();
|
||||
|
||||
return {
|
||||
category: 1,
|
||||
@@ -263,12 +265,14 @@ export const useAccountsStore = defineStore('accounts', {
|
||||
color: colorConstants.defaultAccountColor,
|
||||
currency: userStore.currentUserDefaultCurrency,
|
||||
balance: 0,
|
||||
balanceTime: now,
|
||||
comment: '',
|
||||
visible: true
|
||||
};
|
||||
},
|
||||
generateNewSubAccountModel(parentAccount) {
|
||||
const userStore = useUserStore();
|
||||
const now = getCurrentUnixTime();
|
||||
|
||||
return {
|
||||
category: null,
|
||||
@@ -278,6 +282,7 @@ export const useAccountsStore = defineStore('accounts', {
|
||||
color: parentAccount.color,
|
||||
currency: userStore.currentUserDefaultCurrency,
|
||||
balance: 0,
|
||||
balanceTime: now,
|
||||
comment: '',
|
||||
visible: true
|
||||
};
|
||||
@@ -758,6 +763,8 @@ export const useAccountsStore = defineStore('accounts', {
|
||||
if (isEdit) {
|
||||
submitAccount.id = subAccount.id;
|
||||
submitAccount.hidden = !subAccount.visible;
|
||||
} else {
|
||||
submitAccount.balanceTime = subAccount.balanceTime;
|
||||
}
|
||||
|
||||
submitSubAccounts.push(submitAccount);
|
||||
@@ -783,6 +790,8 @@ export const useAccountsStore = defineStore('accounts', {
|
||||
if (isEdit) {
|
||||
submitAccount.id = account.id;
|
||||
submitAccount.hidden = !account.visible;
|
||||
} else {
|
||||
submitAccount.balanceTime = account.balanceTime;
|
||||
}
|
||||
|
||||
const oldAccount = submitAccount.id ? self.allAccountsMap[submitAccount.id] : null;
|
||||
|
||||
@@ -126,7 +126,8 @@
|
||||
</template>
|
||||
</v-autocomplete>
|
||||
</v-col>
|
||||
<v-col cols="12" md="12" v-if="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0">
|
||||
<v-col cols="12" :md="!editAccountId && selectedAccount.balance ? 6 : 12"
|
||||
v-if="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0">
|
||||
<amount-input :disabled="loading || submitting || !!editAccountId"
|
||||
:persistent-placeholder="true"
|
||||
:currency="selectedAccount.currency"
|
||||
@@ -134,6 +135,14 @@
|
||||
:placeholder="currentAccountIndex < 0 ? $t('Account Balance') : $t('Sub-account Balance')"
|
||||
v-model="selectedAccount.balance"/>
|
||||
</v-col>
|
||||
<v-col cols="12" md="6" v-show="selectedAccount.balance"
|
||||
v-if="!editAccountId && (account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0)">
|
||||
<date-time-select
|
||||
:disabled="loading || submitting"
|
||||
:label="$t('Balance Time')"
|
||||
v-model="selectedAccount.balanceTime"
|
||||
@error="showDateTimeError" />
|
||||
</v-col>
|
||||
<v-col cols="12" md="12">
|
||||
<v-textarea
|
||||
type="text"
|
||||
@@ -452,6 +461,9 @@ export default {
|
||||
this.subAccounts.push(subAccount);
|
||||
}
|
||||
}
|
||||
},
|
||||
showDateTimeError(error) {
|
||||
this.$refs.snackbar.showError(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,6 +188,26 @@
|
||||
></number-pad-sheet>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item
|
||||
class="account-edit-balancetime list-item-with-header-and-title"
|
||||
link="#" no-chevron
|
||||
v-show="account.balance"
|
||||
v-if="!editAccountId"
|
||||
>
|
||||
<template #header>
|
||||
<div class="account-edit-balancetime-header" @click="showDateTimeDialog(account, 'time')">{{ $t('Balance Time') }}</div>
|
||||
</template>
|
||||
<template #title>
|
||||
<div class="account-edit-balancetime-title">
|
||||
<div @click="showDateTimeDialog(account, 'date')">{{ getAccountBalanceDate(account.balanceTime) }}</div> <div class="account-edit-balancetime-time" @click="showDateTimeDialog(account, 'time')">{{ getAccountBalanceTime(account.balanceTime) }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<date-time-selection-sheet :init-mode="account.balanceDateTimeSheetMode"
|
||||
v-model:show="account.showBalanceDateTimeSheet"
|
||||
v-model="account.balanceTime">
|
||||
</date-time-selection-sheet>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item :title="$t('Visible')" v-if="editAccountId">
|
||||
<f7-toggle :checked="account.visible" @toggle:change="account.visible = $event"></f7-toggle>
|
||||
</f7-list-item>
|
||||
@@ -381,6 +401,26 @@
|
||||
></number-pad-sheet>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item
|
||||
class="account-edit-balancetime list-item-with-header-and-title"
|
||||
link="#" no-chevron
|
||||
v-show="subAccount.balance"
|
||||
v-if="!editAccountId"
|
||||
>
|
||||
<template #header>
|
||||
<div class="account-edit-balancetime-header" @click="showDateTimeDialog(subAccount, 'time')">{{ $t('Sub-account Balance Time') }}</div>
|
||||
</template>
|
||||
<template #title>
|
||||
<div class="account-edit-balancetime-title">
|
||||
<div @click="showDateTimeDialog(subAccount, 'date')">{{ getAccountBalanceDate(subAccount.balanceTime) }}</div> <div class="account-edit-balancetime-time" @click="showDateTimeDialog(subAccount, 'time')">{{ getAccountBalanceTime(subAccount.balanceTime) }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<date-time-selection-sheet :init-mode="subAccount.balanceDateTimeSheetMode"
|
||||
v-model:show="subAccount.showBalanceDateTimeSheet"
|
||||
v-model="subAccount.balanceTime">
|
||||
</date-time-selection-sheet>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item :title="$t('Visible')" v-if="editAccountId">
|
||||
<f7-toggle :checked="subAccount.visible" @toggle:change="subAccount.visible = $event"></f7-toggle>
|
||||
</f7-list-item>
|
||||
@@ -433,6 +473,11 @@ import {
|
||||
setAccountModelByAnotherAccount,
|
||||
setAccountSuitableIcon
|
||||
} from '@/lib/account.js';
|
||||
import {
|
||||
getTimezoneOffsetMinutes,
|
||||
getBrowserTimezoneOffsetMinutes,
|
||||
getActualUnixTimeForStore
|
||||
} from '@/lib/datetime.js';
|
||||
|
||||
export default {
|
||||
props: [
|
||||
@@ -445,6 +490,8 @@ export default {
|
||||
newAccount.showIconSelectionSheet = false;
|
||||
newAccount.showColorSelectionSheet = false;
|
||||
newAccount.showBalanceSheet = false;
|
||||
newAccount.showBalanceDateTimeSheet = false;
|
||||
newAccount.balanceDateTimeSheetMode = 'time';
|
||||
|
||||
return {
|
||||
editAccountId: null,
|
||||
@@ -534,6 +581,8 @@ export default {
|
||||
subAccount.showIconSelectionSheet = false;
|
||||
subAccount.showColorSelectionSheet = false;
|
||||
subAccount.showBalanceSheet = false;
|
||||
subAccount.showBalanceDateTimeSheet = false;
|
||||
subAccount.balanceDateTimeSheetMode = 'time';
|
||||
|
||||
self.subAccounts.push(subAccount);
|
||||
}
|
||||
@@ -566,6 +615,8 @@ export default {
|
||||
subAccount.showIconSelectionSheet = false;
|
||||
subAccount.showColorSelectionSheet = false;
|
||||
subAccount.showBalanceSheet = false;
|
||||
subAccount.showBalanceDateTimeSheet = false;
|
||||
subAccount.balanceDateTimeSheetMode = 'time';
|
||||
|
||||
this.subAccounts.push(subAccount);
|
||||
},
|
||||
@@ -639,6 +690,10 @@ export default {
|
||||
}
|
||||
});
|
||||
},
|
||||
showDateTimeDialog(account, sheetMode) {
|
||||
account.balanceDateTimeSheetMode = sheetMode;
|
||||
account.showBalanceDateTimeSheet = true;
|
||||
},
|
||||
getCurrencyName(currencyCode) {
|
||||
return this.$locale.getCurrencyName(currencyCode);
|
||||
},
|
||||
@@ -651,6 +706,12 @@ export default {
|
||||
getAccountBalance(account) {
|
||||
return this.getDisplayCurrency(account.balance, account.currency);
|
||||
},
|
||||
getAccountBalanceDate(balanceTime) {
|
||||
return this.$locale.formatUnixTimeToLongDate(this.userStore, getActualUnixTimeForStore(balanceTime, getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
},
|
||||
getAccountBalanceTime(balanceTime) {
|
||||
return this.$locale.formatUnixTimeToLongTime(this.userStore, getActualUnixTimeForStore(balanceTime, getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()));
|
||||
},
|
||||
getDisplayCurrency(value, currencyCode) {
|
||||
return this.$locale.formatAmountWithCurrency(this.settingsStore, this.userStore, value, currencyCode);
|
||||
},
|
||||
@@ -694,6 +755,27 @@ export default {
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
.account-edit-balancetime .item-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.account-edit-balancetime .item-title > .item-header > .account-edit-balancetime-header {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.account-edit-balancetime .item-title > .account-edit-balancetime-title {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.account-edit-balancetime .item-title > .account-edit-balancetime-title > .account-edit-balancetime-time {
|
||||
flex-grow: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.subaccount-edit-list {
|
||||
--f7-list-group-title-height: 40px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user