From 84ff464ff3a44287d6e7f5bf9f9e6f96abde739f Mon Sep 17 00:00:00 2001 From: hanqin Date: Sat, 21 Mar 2026 15:10:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9A=84=E6=8E=A5=E5=8F=96?= =?UTF-8?q?=E5=92=8C=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Build_God_Api/DB/CharacterDailyMission.cs | 2 ++ .../Build_God_Api/Dto/CharacterDto.cs | 1 + .../Build_God_Api/Services/CharacterService.cs | 1 + Build_God_Game/src/api/character.ts | 1 + Build_God_Game/src/api/dailyMission.ts | 6 +++--- Build_God_Game/src/views/TrainingView.vue | 18 ++++++++++++------ 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs b/Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs index 3aa9352..e7805c0 100644 --- a/Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs +++ b/Build_God_Api/Build_God_Api/DB/CharacterDailyMission.cs @@ -30,11 +30,13 @@ namespace Build_God_Api.DB /// /// 开始时间 /// + [SqlSugar.SugarColumn(IsNullable = true)] public DateTime? StartTime { get; set; } /// /// 预计完成时间 /// + [SqlSugar.SugarColumn(IsNullable = true)] public DateTime? EndTime { get; set; } /// diff --git a/Build_God_Api/Build_God_Api/Dto/CharacterDto.cs b/Build_God_Api/Build_God_Api/Dto/CharacterDto.cs index 0ae4c68..9f1cdba 100644 --- a/Build_God_Api/Build_God_Api/Dto/CharacterDto.cs +++ b/Build_God_Api/Build_God_Api/Dto/CharacterDto.cs @@ -19,6 +19,7 @@ public int? NextLevelRequiredPillId { get; set; } public string? NextLevelRequiredPillName { get; set; } public int NextLevelRequiredPillQuantity { get; set; } + public decimal TrainingExpRate { get; set; } public DateTime LastLogin { get; set; } public DateTime CreatedOn { get; set; } } diff --git a/Build_God_Api/Build_God_Api/Services/CharacterService.cs b/Build_God_Api/Build_God_Api/Services/CharacterService.cs index 4d14f58..8d41381 100644 --- a/Build_God_Api/Build_God_Api/Services/CharacterService.cs +++ b/Build_God_Api/Build_God_Api/Services/CharacterService.cs @@ -286,6 +286,7 @@ public async Task GetCharacterByAccountId(int accountId) NextLevelRequiredPillId = nextLevelRequiredPillId, NextLevelRequiredPillName = nextLevelRequiredPillName, NextLevelRequiredPillQuantity = nextLevelRequiredPillQuantity, + TrainingExpRate = 0.01m, LastLogin = c.LastLogin, CreatedOn = c.CreatedOn }); diff --git a/Build_God_Game/src/api/character.ts b/Build_God_Game/src/api/character.ts index 1d0d53a..cde52f2 100644 --- a/Build_God_Game/src/api/character.ts +++ b/Build_God_Game/src/api/character.ts @@ -52,6 +52,7 @@ export interface CharacterDto { nextLevelRequiredPillId?: number nextLevelRequiredPillName?: string nextLevelRequiredPillQuantity: number + trainingExpRate: number lastLogin: string createdOn: string } diff --git a/Build_God_Game/src/api/dailyMission.ts b/Build_God_Game/src/api/dailyMission.ts index e753f84..7dc6efc 100644 --- a/Build_God_Game/src/api/dailyMission.ts +++ b/Build_God_Game/src/api/dailyMission.ts @@ -77,15 +77,15 @@ export interface DailyMission { export const dailyMissionApi = { getList: (): Promise => { - return instance.get('/god/daily-mission/list') + return instance.get('/dailyMission/list') }, accept: (dailyMissionId: number): Promise => { - return instance.post(`/god/daily-mission/${dailyMissionId}/accept`) + return instance.post(`/dailyMission/${dailyMissionId}/accept`) }, claim: (dailyMissionId: number): Promise => { - return instance.post(`/god/daily-mission/${dailyMissionId}/claim`) + return instance.post(`/dailyMission/${dailyMissionId}/claim`) } } diff --git a/Build_God_Game/src/views/TrainingView.vue b/Build_God_Game/src/views/TrainingView.vue index 736a41f..4339c4e 100644 --- a/Build_God_Game/src/views/TrainingView.vue +++ b/Build_God_Game/src/views/TrainingView.vue @@ -18,8 +18,14 @@ const showMsg = (text: string, type: 'success' | 'error' = 'success') => { } const trainingStartTime = ref(null) -const elapsedMinutes = ref(0) -const expectedExp = computed(() => Math.floor(elapsedMinutes.value * 100)) +const elapsedSeconds = ref(0) +const levelId = computed(() => characterStore.currentCharacter?.levelId ?? 1) +const trainingExpRate = computed(() => characterStore.currentCharacter?.trainingExpRate ?? 0.01) +const expectedExp = computed(() => { + const rate = trainingExpRate.value + const level = levelId.value + return Math.floor(elapsedSeconds.value * rate * level * level) +}) const isTraining = computed(() => !!trainingStartTime.value) let timer: number | null = null @@ -27,7 +33,7 @@ const updateElapsedTime = () => { if (trainingStartTime.value) { const now = new Date() const diff = now.getTime() - trainingStartTime.value!.getTime() - elapsedMinutes.value = diff / 60000 + elapsedSeconds.value = Math.floor(diff / 1000) } } @@ -54,7 +60,7 @@ const handleStartTraining = async () => { const success = await characterStore.startTraining() if (success) { trainingStartTime.value = new Date() - elapsedMinutes.value = 0 + elapsedSeconds.value = 0 timer = window.setInterval(updateElapsedTime, 1000) showMsg('开始打坐') } else { @@ -69,7 +75,7 @@ const handleStopTraining = async () => { timer = null } trainingStartTime.value = null - elapsedMinutes.value = 0 + elapsedSeconds.value = 0 showMsg(`结算成功,获得 ${expGained} 经验`) } @@ -99,7 +105,7 @@ const handleStopTraining = async () => {
已打坐 - {{ Math.floor(elapsedMinutes) }} 分钟 + {{ Math.floor(elapsedSeconds / 60) }}分{{ elapsedSeconds % 60 }}秒
预计获得