diff --git a/src/consts/api.js b/src/consts/api.js index ffbbe282..7ed08e03 100644 --- a/src/consts/api.js +++ b/src/consts/api.js @@ -8,6 +8,8 @@ const baseAmapApiProxyUrlPath = '/_AMapService'; const apiNotFoundErrorCode = 100001; const validatorErrorCode = 200000; const userEmailNotVerifiedErrorCode = 201020; +const transactionCannotCreateInThisTimeErrorCode = 205017; +const transactionCannotModifyInThisTimeErrorCode = 205018; const transactionPictureNotFoundErrorCode = 211001; const googleMapJavascriptUrl = 'https://maps.googleapis.com/maps/api/js'; const baiduMapJavascriptUrl = 'https://api.map.baidu.com/api?v=3.0'; @@ -152,6 +154,8 @@ export default { apiNotFoundErrorCode: apiNotFoundErrorCode, validatorErrorCode: validatorErrorCode, userEmailNotVerifiedErrorCode: userEmailNotVerifiedErrorCode, + transactionCannotCreateInThisTimeErrorCode: transactionCannotCreateInThisTimeErrorCode, + transactionCannotModifyInThisTimeErrorCode: transactionCannotModifyInThisTimeErrorCode, transactionPictureNotFoundErrorCode: transactionPictureNotFoundErrorCode, specifiedApiNotFoundErrors: specifiedApiNotFoundErrors, parameterizedErrors: parameterizedErrors, diff --git a/src/locales/en.json b/src/locales/en.json index bb301c7b..b7a1cfe1 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1515,6 +1515,7 @@ "Source account cannot be blank": "Source account cannot be blank", "Destination account cannot be blank": "Destination account cannot be blank", "Are you sure you want to save this transaction with a zero amount?": "Are you sure you want to save this transaction with a zero amount?", + "You have set this time range to prevent editing transactions. Would you like to change the editable transaction range to All?": "You have set this time range to prevent editing transactions. Would you like to change the editable transaction range to All?", "Unable to retrieve transaction": "Unable to retrieve transaction", "Unable to add transaction": "Unable to add transaction", "Unable to save transaction": "Unable to save transaction", @@ -1642,12 +1643,14 @@ "Please enter your current password when modifying your password": "Please enter your current password when modifying your password", "Nothing has been modified": "Nothing has been modified", "Your profile has been successfully updated": "Your profile has been successfully updated", + "Unable to update user profile": "Unable to update user profile", + "Your editable transaction range has been set to All": "Your editable transaction range has been set to All", + "Unable to update editable transaction range": "Unable to update editable transaction range", "Unable to update user avatar": "Unable to update user avatar", "Your avatar has been successfully updated": "Your avatar has been successfully updated", "Are you sure you want to remove avatar?": "Are you sure you want to remove avatar?", "Unable to remove user avatar": "Unable to remove user avatar", "Your avatar has been successfully removed": "Your avatar has been successfully removed", - "Unable to update user profile": "Unable to update user profile", "After changing the password, other devices will be logged out. Please use the new password to log in on other devices.": "After changing the password, other devices will be logged out. Please use the new password to log in on other devices.", "Data Management": "Data Management", "Unable to retrieve user statistics data": "Unable to retrieve user statistics data", diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json index ffacfb69..497aa7b6 100644 --- a/src/locales/zh_Hans.json +++ b/src/locales/zh_Hans.json @@ -1515,6 +1515,7 @@ "Source account cannot be blank": "来源账户不能为空", "Destination account cannot be blank": "目标账户不能为空", "Are you sure you want to save this transaction with a zero amount?": "您确定要保存这个金额为0的交易?", + "You have set this time range to prevent editing transactions. Would you like to change the editable transaction range to All?": "您已经设置不允许修改这个时间范围的交易,是否要将可编辑交易范围设置为全部?", "Unable to retrieve transaction": "无法获取交易", "Unable to add transaction": "无法添加交易", "Unable to save transaction": "无法保存交易", @@ -1642,12 +1643,14 @@ "Please enter your current password when modifying your password": "修改密码时请输入您的当前密码", "Nothing has been modified": "没有修改的项目", "Your profile has been successfully updated": "您的用户信息更新成功", + "Unable to update user profile": "无法更新用户信息", + "Your editable transaction range has been set to All": "您的可编辑交易范围已设置为全部", + "Unable to update editable transaction range": "无法更新可编辑交易范围", "Unable to update user avatar": "无法更新用户头像", "Your avatar has been successfully updated": "您的头像更新成功", "Are you sure you want to remove avatar?": "您确定要删除头像?", "Unable to remove user avatar": "无法删除用户头像", "Your avatar has been successfully removed": "您的用户头像删除成功", - "Unable to update user profile": "无法更新用户信息", "After changing the password, other devices will be logged out. Please use the new password to log in on other devices.": "密码修改后,其他设备将会退出登录,请使用新密码在其他设备上重新登录。", "Data Management": "数据管理", "Unable to retrieve user statistics data": "无法获取用户统计数据", diff --git a/src/stores/user.js b/src/stores/user.js index 00bf298e..db08e2ff 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -5,7 +5,10 @@ import { useSettingsStore } from './setting.js'; import userState from '@/lib/userstate.js'; import services from '@/lib/services.js'; import logger from '@/lib/logger.js'; -import { isNumber } from '@/lib/common.js'; +import { + isObject, + isNumber +} from '@/lib/common.js'; export const useUserStore = defineStore('user', { state: () => ({ @@ -126,6 +129,37 @@ export const useUserStore = defineStore('user', { }); }); }, + updateUserTransactionEditScope({ transactionEditScope }) { + return new Promise((resolve, reject) => { + services.updateProfile({ + transactionEditScope: transactionEditScope, + }).then(response => { + const data = response.data; + + if (!data || !data.success || !data.result) { + reject({ message: 'Unable to update editable transaction range' }); + return; + } + + if (data.result.user && isObject(data.result.user)) { + const userStore = useUserStore(); + userStore.storeUserBasicInfo(data.result.user); + } + + resolve(data.result); + }).catch(error => { + logger.error('failed to save editable transaction range', error); + + if (error.response && error.response.data && error.response.data.errorMessage) { + reject({ error: error.response.data }); + } else if (!error.processed) { + reject({ message: 'Unable to update editable transaction range' }); + } else { + reject(error); + } + }); + }); + }, updateUserAvatar({ avatarFile }) { const self = this; diff --git a/src/views/desktop/transactions/list/dialogs/EditDialog.vue b/src/views/desktop/transactions/list/dialogs/EditDialog.vue index d148b649..7fc7bf50 100644 --- a/src/views/desktop/transactions/list/dialogs/EditDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/EditDialog.vue @@ -935,7 +935,25 @@ export default { }).catch(error => { self.submitting = false; - if (!error.processed) { + if (error.error && (error.error.errorCode === apiConstants.transactionCannotCreateInThisTimeErrorCode || error.error.errorCode === apiConstants.transactionCannotModifyInThisTimeErrorCode)) { + self.$refs.confirmDialog.open('You have set this time range to prevent editing transactions. Would you like to change the editable transaction range to All?').then(() => { + self.submitting = true; + + self.userStore.updateUserTransactionEditScope({ + transactionEditScope: transactionConstants.allTransactionEditScopeTypes.All.type + }).then(() => { + self.submitting = false; + + self.$refs.snackbar.showMessage('Your editable transaction range has been set to All'); + }).catch(error => { + self.submitting = false; + + if (!error.processed) { + self.$refs.snackbar.showError(error); + } + }); + }); + } else if (!error.processed) { self.$refs.snackbar.showError(error); } }); diff --git a/src/views/mobile/transactions/EditPage.vue b/src/views/mobile/transactions/EditPage.vue index 05d4615b..b3bdbd1f 100644 --- a/src/views/mobile/transactions/EditPage.vue +++ b/src/views/mobile/transactions/EditPage.vue @@ -1059,7 +1059,28 @@ export default { self.submitting = false; self.$hideLoading(); - if (!error.processed) { + if (error.error && (error.error.errorCode === apiConstants.transactionCannotCreateInThisTimeErrorCode || error.error.errorCode === apiConstants.transactionCannotModifyInThisTimeErrorCode)) { + self.$confirm('You have set this time range to prevent editing transactions. Would you like to change the editable transaction range to All?', () => { + self.submitting = true; + self.$showLoading(() => self.submitting); + + self.userStore.updateUserTransactionEditScope({ + transactionEditScope: transactionConstants.allTransactionEditScopeTypes.All.type + }).then(() => { + self.submitting = false; + self.$hideLoading(); + + self.$toast('Your editable transaction range has been set to All'); + }).catch(error => { + self.submitting = false; + self.$hideLoading(); + + if (!error.processed) { + self.$toast(error.message || error); + } + }); + }); + } else if (!error.processed) { self.$toast(error.message || error); } });