From 4fa3099ff1d2fc02bbbfafcda7fded28f609f6ea Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期三, 19 八月 2026 14:58:54 +0800
Subject: [PATCH] feat0806: 首页直播密码

---
 traditionalApp/pages/home/home.vue                                                                     |   20 +++++++++++---------
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/mapper/LiveCourseMapper.java      |    5 +++++
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java |    2 +-
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/mapper/LiveCourseMapper.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/mapper/LiveCourseMapper.java
index a368700..37fcbb4 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/mapper/LiveCourseMapper.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/mapper/LiveCourseMapper.java
@@ -7,10 +7,15 @@
 import com.tcm.training.admin.live.vo.LiveCourseListRow;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 
 @Mapper
 public interface LiveCourseMapper extends BaseMapper<LiveCourse> {
 
+    /** 按课程 ID 更新直播间密码,允许将密码设置为 NULL 以清除密码。 */
+    @Update("UPDATE tcm_live_course SET password = #{password,jdbcType=VARCHAR}, updated_at = NOW() WHERE id = #{id} AND deleted = 0")
+    int updatePasswordById(@Param("id") Long id, @Param("password") String password);
+
     /** 课程分页列表(动态筛选) */
     IPage<LiveCourseListRow> selectCoursePage(IPage<LiveCourseListRow> page,
                                               @Param("keyword") String keyword,
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
index 6026d4d..ebd7eb0 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
@@ -182,7 +182,7 @@
         } else {
             course.setPassword(null);
         }
-        liveCourseMapper.updateById(course);
+        liveCourseMapper.updatePasswordById(id, course.getPassword());
     }
 
     public boolean verifyPassword(LiveCoursePasswordVerifyRequest req) {
diff --git a/traditionalApp/pages/home/home.vue b/traditionalApp/pages/home/home.vue
index 5ca632a..294a93d 100644
--- a/traditionalApp/pages/home/home.vue
+++ b/traditionalApp/pages/home/home.vue
@@ -62,9 +62,9 @@
 
 
 			<!-- Live Section -->
-			<view v-if="advancedLiveCourseList.length" class="section">
+			<view v-if="remainingLiveCourseList.length" class="section">
 				<view class="live-list">
-					<view v-for="item in advancedLiveCourseList" :key="item.courseId" class="live-card">
+					<view v-for="item in remainingLiveCourseList" :key="item.courseId" class="live-card">
 						<image :src="item.displayImage || defaultLiveCover" mode="aspectFill" class="live-bg"
 							@tap="handleLiveImageClick(item)"></image>
 						<image v-if="item.displayStatus === 'LIVING'" src="/static/image/home/zhibo.png"
@@ -202,20 +202,22 @@
 		return String(systemInfo.platform || '').toLowerCase() === 'ios';
 	});
 	const weiZanLiveH5Url = 'https://www.vzan.com';
-	const advancedLiveCourseList = computed(() => {
-		if (!Array.isArray(liveCourseList.value) || liveCourseList.value.length === 0) {
-			return [];
-		}
-		return liveCourseList.value.filter((item) => !String(item.title || '').includes('筑基'));
-	});
+
 	const operatorTrainingLiveCourse = computed(() => {
-		const list = advancedLiveCourseList.value;
+		const list = liveCourseList.value;
 		if (!Array.isArray(list) || list.length === 0) {
 			return null;
 		}
 		const livingCourse = list.find((item) => item.displayStatus === 'LIVING');
 		return livingCourse || list[0];
 	});
+	const remainingLiveCourseList = computed(() => {
+		const selectedCourseId = operatorTrainingLiveCourse.value?.courseId;
+		if (selectedCourseId === undefined || selectedCourseId === null) {
+			return liveCourseList.value;
+		}
+		return liveCourseList.value.filter((item) => String(item.courseId) !== String(selectedCourseId));
+	});
 
 	/**
 	 * 初始化导航栏所需系统信息。

--
Gitblit v1.7.1