修改资源案例web页面

This commit is contained in:
2025-10-31 13:23:42 +08:00
parent 76f7ee9295
commit c54ad0041e

View File

@@ -22,18 +22,16 @@
<div v-if="activeTab === 'online' && !selectedCourse"> <div v-if="activeTab === 'online' && !selectedCourse">
<h2 class="section-title">线上课程</h2> <h2 class="section-title">线上课程</h2>
<div class="courses-grid"> <div class="courses-grid">
<div <div
class="course-card" class="course-card"
v-for="(course, index) in onlineCourses" v-for="(course, index) in onlineCourses"
:key="index" :key="index"
@click="selectCourse(course)" @click="selectCourse(course)"
style="cursor: pointer" style="cursor: pointer"
> >
<div class="course-image"> <div class="course-image">
<img :src="course.imageUrl" :alt="course.title" class="course-thumbnail"> <img :src="course.imageUrl" :alt="course.title" class="course-thumbnail">
<div v-if="index === 0" class="play-button"> <!-- 已删除线上课程列表页的播放按钮 -->
<div class="play-icon"></div>
</div>
</div> </div>
<div class="course-info"> <div class="course-info">
<div class="course-meta" v-if="index === 0"> <div class="course-meta" v-if="index === 0">
@@ -51,14 +49,12 @@
<!-- 线上课程详情页 --> <!-- 线上课程详情页 -->
<div v-if="activeTab === 'online' && selectedCourse"> <div v-if="activeTab === 'online' && selectedCourse">
<button class="back-button" @click="selectedCourse = null"> 返回列表</button> <button class="back-button" @click="selectedCourse = null"> 返回列表</button>
<h1 class="course-title">线上课程 Online courses</h1> <h1 class="course-title">线上课程 Online courses</h1>
<div class="course-header"> <div class="course-header">
<div class="course-video"> <div class="course-video">
<img :src="selectedCourse.imageUrl" :alt="selectedCourse.title" class="video-thumbnail"> <img :src="selectedCourse.imageUrl" :alt="selectedCourse.title" class="video-thumbnail">
<div class="play-button"> <!-- 已删除线上课程详情页的播放按钮 -->
<div class="play-icon"></div>
</div>
</div> </div>
<div class="course-intro"> <div class="course-intro">
<h2>课程介绍</h2> <h2>课程介绍</h2>
@@ -70,30 +66,30 @@
</div> </div>
<div class="course-tabs"> <div class="course-tabs">
<div <div
class="tab-item" class="tab-item"
:class="{ active: activeDetailTab === 'content' }" :class="{ active: activeDetailTab === 'content' }"
@click="activeDetailTab = 'content'" @click="activeDetailTab = 'content'"
> >
课程内容 课程内容
</div> </div>
<div <div
class="tab-item" class="tab-item"
:class="{ active: activeDetailTab === 'resource' }" :class="{ active: activeDetailTab === 'resource' }"
@click="activeDetailTab = 'resource'" @click="activeDetailTab = 'resource'"
> >
拓展资源 拓展资源
</div> </div>
<div <div
class="tab-item" class="tab-item"
:class="{ active: activeDetailTab === 'activity' }" :class="{ active: activeDetailTab === 'activity' }"
@click="activeDetailTab = 'activity'" @click="activeDetailTab = 'activity'"
> >
学生活动 学生活动
</div> </div>
<div <div
class="tab-item" class="tab-item"
:class="{ active: activeDetailTab === 'team' }" :class="{ active: activeDetailTab === 'team' }"
@click="activeDetailTab = 'team'" @click="activeDetailTab = 'team'"
> >
教学团队 教学团队
@@ -164,10 +160,10 @@
<option value="type">案例类型</option> <option value="type">案例类型</option>
<option value="year">年份</option> <option value="year">年份</option>
</select> </select>
<input <input
type="text" type="text"
class="search-input" class="search-input"
placeholder="中华传承" placeholder="中华传承"
v-model="searchKeyword" v-model="searchKeyword"
@keyup.enter="handleSearch" @keyup.enter="handleSearch"
/> />
@@ -189,10 +185,10 @@
</div> </div>
</div> </div>
<div <div
class="case-item" class="case-item"
v-for="(caseItem, index) in filteredCases" v-for="(caseItem, index) in filteredCases"
:key="caseItem.id" :key="caseItem.id"
@click="selectCase(caseItem)" @click="selectCase(caseItem)"
> >
<h3 class="case-title">{{ caseItem.title }}</h3> <h3 class="case-title">{{ caseItem.title }}</h3>
@@ -389,24 +385,24 @@ const cases = [
// 筛选后的案例列表 // 筛选后的案例列表
const filteredCases = computed(() => { const filteredCases = computed(() => {
let result = [...cases]; let result = [...cases];
// 搜索过滤 // 搜索过滤
if (searchKeyword.value) { if (searchKeyword.value) {
const keyword = searchKeyword.value.toLowerCase(); const keyword = searchKeyword.value.toLowerCase();
result = result.filter(item => result = result.filter(item =>
item.title.toLowerCase().includes(keyword) || item.title.toLowerCase().includes(keyword) ||
item.desc.toLowerCase().includes(keyword) || item.desc.toLowerCase().includes(keyword) ||
item.tags.some(tag => tag.toLowerCase().includes(keyword)) item.tags.some(tag => tag.toLowerCase().includes(keyword))
); );
} }
// 排序处理 // 排序处理
if (sortType.value === 'views') { if (sortType.value === 'views') {
result.sort((a, b) => b.views - a.views); result.sort((a, b) => b.views - a.views);
} else { } else {
result.sort((a, b) => new Date(b.date) - new Date(a.date)); result.sort((a, b) => new Date(b.date) - new Date(a.date));
} }
// 数量限制 // 数量限制
return result.slice(0, parseInt(showCount.value)); return result.slice(0, parseInt(showCount.value));
}); });
@@ -562,32 +558,7 @@ body {
transform: scale(1.05); transform: scale(1.05);
} }
.play-button { /* 已删除:播放按钮相关样式 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 60px;
height: 60px;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s;
}
.play-button:hover {
background-color: #fff;
transform: translate(-50%, -50%) scale(1.1);
}
.play-icon {
font-size: 1.5rem;
color: #e74c3c;
margin-left: 5px;
}
.course-info { .course-info {
display: flex; display: flex;
@@ -907,8 +878,8 @@ body {
margin: 0 auto; margin: 0 auto;
} }
.markdown-content h1, .markdown-content h1,
.markdown-content h2, .markdown-content h2,
.markdown-content h3 { .markdown-content h3 {
margin: 30px 0 15px; margin: 30px 0 15px;
color: #2c3e50; color: #2c3e50;
@@ -932,7 +903,7 @@ body {
margin: 0 0 20px; margin: 0 0 20px;
} }
.markdown-content ul, .markdown-content ul,
.markdown-content ol { .markdown-content ol {
margin: 0 0 20px 20px; margin: 0 0 20px 20px;
padding: 0; padding: 0;
@@ -951,6 +922,37 @@ body {
box-shadow: 0 2px 10px rgba(0,0,0,0.1); box-shadow: 0 2px 10px rgba(0,0,0,0.1);
} }
/* 视频案例播放按钮样式(保留) */
.video .play-button,
.course-card:has(.video-case) .play-button {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 60px;
height: 60px;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s;
}
.video .play-button:hover,
.course-card:has(.video-case) .play-button:hover {
background-color: #fff;
transform: translate(-50%, -50%) scale(1.1);
}
.video .play-icon,
.course-card:has(.video-case) .play-icon {
font-size: 1.5rem;
color: #e74c3c;
margin-left: 5px;
}
/* 响应式适配 */ /* 响应式适配 */
@media (max-width: 992px) { @media (max-width: 992px) {
.courses-grid { .courses-grid {
@@ -962,43 +964,43 @@ body {
.banner { .banner {
height: 180px; height: 180px;
} }
.banner h1 { .banner h1 {
font-size: 2rem; font-size: 2rem;
text-align: center; text-align: center;
padding: 0 20px; padding: 0 20px;
} }
.section-title { .section-title {
font-size: 1.5rem; font-size: 1.5rem;
} }
.course-header { .course-header {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.search-section { .search-section {
flex-wrap: wrap; flex-wrap: wrap;
} }
.search-select { .search-select {
border-radius: 4px; border-radius: 4px;
border-right: 1px solid #ddd; border-right: 1px solid #ddd;
margin-bottom: 10px; margin-bottom: 10px;
} }
.search-input { .search-input {
margin: 0 0 10px; margin: 0 0 10px;
border-radius: 4px; border-radius: 4px;
width: 100%; width: 100%;
} }
.search-btn, .video-case-btn { .search-btn, .video-case-btn {
border-radius: 4px; border-radius: 4px;
flex: 1; flex: 1;
margin: 0 5px 10px; margin: 0 5px 10px;
} }
.list-header { .list-header {
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
@@ -1010,36 +1012,36 @@ body {
.courses-grid { .courses-grid {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.tabs-wrapper { .tabs-wrapper {
flex-wrap: wrap; flex-wrap: wrap;
} }
.tab { .tab {
margin: 10px 10px 0 0; margin: 10px 10px 0 0;
} }
.banner { .banner {
height: 150px; height: 150px;
} }
.banner h1 { .banner h1 {
font-size: 1.7rem; font-size: 1.7rem;
} }
.course-tabs { .course-tabs {
flex-wrap: wrap; flex-wrap: wrap;
} }
.tab-item { .tab-item {
flex: 1 1 auto; flex: 1 1 auto;
text-align: center; text-align: center;
} }
.case-meta { .case-meta {
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
gap: 5px; gap: 5px;
} }
} }
</style> </style>