From 3af50130135be6fbc42d5c0a7c72c4da7d04a6ca Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期三, 29 四月 2026 11:23:04 +0800
Subject: [PATCH] fix:课程领取修改

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java |    3 ---
 traditionalApp/pages/courseDetail/courseDetail.vue                                                             |   18 ++++++++++++++++--
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
index d83556f..19a5f00 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
@@ -522,9 +522,6 @@
         AppUser user = requireEnabledUser(userId);
         HealthCourse course = requireEnabledCourse(courseId);
         String paymentMethod = normalizePaymentMethod(request == null ? null : request.getPaymentMethod());
-        if (course.getSalePrice() == null || course.getSalePrice().compareTo(BigDecimal.ZERO) <= 0) {
-            throw new IllegalArgumentException("当前课程无需购买");
-        }
         CoursePurchaseOrder existingOrder = findLatestActivePaidCourseOrder(userId, courseId);
         if (existingOrder != null) {
             return buildPurchaseResult(existingOrder, true, resolvePurchasedVideoIds(userId, courseId, true));
diff --git a/traditionalApp/pages/courseDetail/courseDetail.vue b/traditionalApp/pages/courseDetail/courseDetail.vue
index f3cc285..96f515a 100644
--- a/traditionalApp/pages/courseDetail/courseDetail.vue
+++ b/traditionalApp/pages/courseDetail/courseDetail.vue
@@ -478,7 +478,10 @@
 
 	const courseBuyButtonText = computed(() => {
 		if (courseDetail.value.courseOwned) {
-			return '已领取'
+			return '已加入'
+		}
+		if (isFreeCourse()) {
+			return '加入我的课程'
 		}
 		return '领取'
 	})
@@ -1148,9 +1151,20 @@
 	 * 提交当前领取目标的 0 元订单,占位支付方式仅用于兼容后端校验。
 	 */
 	async function submitZeroPricePurchase() {
+		const successTitle = activePurchaseTarget.value === 'COURSE' && isFreeCourse()
+			? '已加入我的课程'
+			: '领取成功'
 		await submitPurchaseWithPayload({
 			paymentMethod: 'WECHAT',
-		}, '领取成功')
+		}, successTitle)
+	}
+
+	/**
+	 * 判断整课是否为 0 元课程,用于区分按钮文案和加入提示。
+	 */
+	function isFreeCourse() {
+		const salePrice = Number(courseDetail.value.salePrice || 0)
+		return Number.isFinite(salePrice) && salePrice <= 0
 	}
 
 	/**

--
Gitblit v1.7.1