From b088fead0310765c543f63835ea8a4e6b75adeff Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期三, 29 四月 2026 11:25:21 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/tcm-training
---
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