+ :praises="false" :shares="false" :views="false">
{{ toScore(cinfo.score) }}分
@@ -424,17 +251,13 @@
@@ -507,12 +330,14 @@ import apiTeacher from "@/api/modules/teacher.js";
import apiUser from "@/api/system/user.js";
import scene from "@/api/modules/scene.js";
import apiUserbasic from "@/api/boe/userbasic.js";
+import apiManage from '@/api/manage/manage.js';
import interactBar from "@/components/Portal/interactBar.vue";
import courseImage from "@/components/Course/courseImage.vue";
import { courseType, getType, toScore, formatDate, formatUserNumber, formatDateByFmt } from "@/utils/tools.js";
import { deepClone, param } from "../../../utils";
import apiSearchterm from "@/api/modules/searchterm.js";
import apiPlace from "@/api/phase2/place.js"
+import apiCourseTag from '@/api/modules/courseTag.js'
export default {
name: "index",
components: {
@@ -534,21 +359,43 @@ export default {
},
stagList() { //计算出选择的内容
let list = [];
+
+ // 关键词
if (this.keyword) {
list.push({
type: 0,
id: 'keyword',
name: this.keyword,
+ tagName: this.keyword,
checked: true
- })
+ });
}
+
+ // 课程类型
this.ctypeList.forEach(item => {
if (item.checked) {
- list.push(item);
+ list.push({
+ ...item,
+ tagName: item.name
+ });
}
});
+
+ // 热点标签 - 这是关键修复
+ this.hotTagsList.forEach(item => {
+ if (item.checked) {
+ list.push({
+ ...item,
+ name: item.tagName || item.name,
+ tagName: item.tagName || item.name,
+ type: 14
+ });
+ }
+ });
+
+ // 三级分类
this.oneList.forEach(one => {
- var twoChildChecked = false;//是否有下级
+ var twoChildChecked = false;
one.children.forEach(two => {
if (two.checked) {
twoChildChecked = true;
@@ -556,34 +403,28 @@ export default {
var threeChildChecked = false;
two.children.forEach(three => {
if (three.checked) {
- list.push(three);
+ list.push({
+ ...three,
+ tagName: three.name
+ });
threeChildChecked = true;
}
});
if (two.checked && !threeChildChecked) {
- list.push(two);
+ list.push({
+ ...two,
+ tagName: two.name
+ });
}
});
if (one.checked && !twoChildChecked) {
- list.push(one);
+ list.push({
+ ...one,
+ tagName: one.name
+ });
}
- })
- // this.oneList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- // this.twoList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- // this.threeList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- //console.log(list,'list');
+ });
+
return list;
},
ctypeTagAll() {
@@ -610,15 +451,22 @@ export default {
// });
// return !flag;
// }
+
+ // 添加计算是否所有热点标签都未选中(即"全部"选中状态)
+ isAllHotTagsSelected() {
+ return !this.hotTagsList.some(tag => tag.checked);
+ }
},
data() {
return {
+ hotTagsList: [],
newData: false,//线上品牌系列隐藏
navTitle: [],
// 设置高亮
twoId: '',
count: 0,//分页总条条数
showUClass: false,
+ projectDialogVisible: false,
ctypeList: [
{ type: 1, id: 20, name: '录播课', checked: false },
{ type: 1, id: 30, name: '线下课', checked: false },
@@ -629,7 +477,7 @@ export default {
twoList: [], //二级分类{type:12}
threeList: [],//三级分类{type:13}
searching: false,//是否正在搜索中
-
+ studentInfo: {},
resonimg: {},
formatDate,
formatNum: formatUserNumber,
@@ -673,7 +521,8 @@ export default {
searchRecords: [],
hotList: [],
totalPages: 1,
- localSessionKey: this.$xpage.constants.localCourseFiltersKey
+ localSessionKey: this.$xpage.constants.localCourseFiltersKey,
+ // isAllHotTagsSelected: true,
};
},
// 受众需要每次刷新
@@ -687,6 +536,17 @@ export default {
console.log(rs.message);
}
})
+ //初始化:获取最新前10个热点标签
+ apiCourseTag.getHotTagList(null).then(rs => {
+ if (rs.status == 200) {
+ this.hotTagsList = rs.result.map(tag => ({
+ ...tag,
+ checked: false
+ }));
+ } else {
+ console.log(rs.message);
+ }
+ })
},
mounted() {
let screenWidth = window.screen.availWidth;
@@ -769,6 +629,152 @@ export default {
// window.removeEventListener("scroll", this.handleScroll);
},
methods: {
+ getSearchMode() {
+ const hasKeyword = this.keyword && this.keyword.trim() !== '';
+
+ // 检查是否有导航标签被选中
+ const hasNavigationTags = this.stagList.some(tag => {
+ // 课程类型(1)、热点标签(14)、分类标签(11,12,13)
+ return [1, 11, 12, 13, 14].includes(tag.type) && tag.checked;
+ });
+
+ if (hasKeyword && hasNavigationTags) {
+ return 'mixed'; // 混合模式:关键字 + 导航标签
+ } else if (hasKeyword) {
+ return 'keyword'; // 纯关键字搜索
+ } else if (hasNavigationTags) {
+ return 'navigation'; // 纯导航标签搜索
+ } else {
+ return 'none'; // 无搜索条件
+ }
+ },
+
+ // 高亮标签关键字
+ highlightTagKeyword(tag) {
+ const searchMode = this.getSearchMode();
+
+ switch (searchMode) {
+ case 'keyword':
+ return this.highlightPartialMatch(tag);
+ case 'navigation':
+ return this.highlightExactMatch(tag);
+ case 'mixed':
+ return this.highlightMixedMode(tag);
+ default:
+ return tag;
+ }
+ },
+
+ // 部分匹配高亮(纯关键字搜索模式)
+ highlightPartialMatch(tag) {
+ const searchKeywords = this.stagList
+ .filter(searchTag => searchTag.type === 0) // 只处理关键字类型
+ .map(searchTag => searchTag.tagName || searchTag.name)
+ .filter(keyword => keyword && keyword.trim());
+
+ if (searchKeywords.length === 0) {
+ return tag;
+ }
+
+ let highlightedTag = tag;
+
+ searchKeywords.forEach(keyword => {
+ if (tag.includes(keyword)) {
+ const regex = new RegExp(`(${this.escapeRegExp(keyword)})`, 'gi');
+ highlightedTag = highlightedTag.replace(regex, '
$1');
+ }
+ });
+
+ return highlightedTag;
+ },
+
+ // 完全匹配高亮(纯导航标签模式)
+ highlightExactMatch(tag) {
+ const isMatched = this.stagList.some(searchTag => {
+ // 只检查导航标签类型
+ if (searchTag.type === 0) return false;
+
+ const searchName = searchTag.tagName || searchTag.name;
+ return searchName === tag;
+ });
+
+ if (isMatched) {
+ return `
${tag}`;
+ }
+
+ return tag;
+ },
+
+ // 混合模式高亮(关键字 + 导航标签)
+ highlightMixedMode(tag) {
+ // 1. 先检查是否完全匹配导航标签
+ const exactMatched = this.stagList.some(searchTag => {
+ if (searchTag.type === 0) return false;
+
+ const searchName = searchTag.tagName || searchTag.name;
+ return searchName === tag;
+ });
+
+ // 2. 如果完全匹配导航标签,整个标签高亮
+ if (exactMatched) {
+ return `
${tag}`;
+ }
+
+ // 3. 否则检查是否包含关键字,进行部分高亮
+ const searchKeywords = this.stagList
+ .filter(searchTag => searchTag.type === 0)
+ .map(searchTag => searchTag.tagName || searchTag.name)
+ .filter(keyword => keyword && keyword.trim());
+
+ if (searchKeywords.length === 0) {
+ return tag;
+ }
+
+ let highlightedTag = tag;
+ let hasKeywordMatch = false;
+
+ searchKeywords.forEach(keyword => {
+ if (tag.includes(keyword)) {
+ const regex = new RegExp(`(${this.escapeRegExp(keyword)})`, 'gi');
+ highlightedTag = highlightedTag.replace(regex, '
$1');
+ hasKeywordMatch = true;
+ }
+ });
+
+ // 4. 如果有关键字匹配,返回部分高亮结果
+ if (hasKeywordMatch) {
+ return highlightedTag;
+ }
+
+ // 5. 都不匹配,返回原标签
+ return tag;
+ },
+
+ // 辅助方法:转义正则表达式特殊字符
+ escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ },
+
+ isTagMatched(tag) {
+ // 检查stagList中是否有匹配的标签
+ return this.stagList.some(searchTag =>
+ searchTag.tagName === tag || searchTag.name === tag
+ );
+ },
+
+ // 添加清除热点标签选中的方法
+ handleClearHotTags() {
+ // 清除所有热点标签的选中状态
+ this.hotTagsList.forEach(tag => {
+ tag.checked = false;
+ });
+ // 清空course.tags
+ this.course.tags = '';
+
+ // 触发搜索
+ this.searchData();
+ },
+
// 改变分页
currentChange(val) {
this.course.pageIndex = val
@@ -852,10 +858,54 @@ export default {
//搜索条件
stagClose(tag, tagIndex) {
tag.checked = false;
+
+ // 根据标签类型处理不同的清除逻辑
if (tag.type == 0) {
+ // 关键词类型
this.keyword = '';
+ } else if (tag.type == 1) {
+ // 课程类型(录播课、线下课、学习项目)
+ this.ctypeList.forEach(item => {
+ if (item.id == tag.id) {
+ item.checked = false;
+ }
+ });
+ } else if (tag.type == 14) {
+ // 热点标签类型
+ this.hotTagsList.forEach(item => {
+ if (item.id == tag.id) {
+ item.checked = false;
+ }
+ });
+
+ // 更新course.tags,移除被删除的热点标签
+ const checkedHotTags = this.hotTagsList.filter(tag => tag.checked);
+ let tagIds = checkedHotTags.map(tag => tag.id).join(',');
+ this.course.tags = tagIds;
+
+ } else if (tag.type == 11 || tag.type == 12 || tag.type == 13) {
+ // 三级分类标签
+ this.oneList.forEach(one => {
+ if (one.id == tag.id) {
+ one.checked = false;
+ }
+ one.children.forEach(two => {
+ if (two.id == tag.id) {
+ two.checked = false;
+ }
+ two.children.forEach(three => {
+ if (three.id == tag.id) {
+ three.checked = false;
+ }
+ });
+ });
+ });
}
- this.navTitle = []
+
+ // 重置导航标题
+ this.navTitle = [];
+
+ // 触发搜索更新
this.searchData();
},
@@ -890,7 +940,7 @@ export default {
ct.checked = false;
})
}
- this.searchData();
+ this.searchData(1);
},
// 清除
handleClearTags() {
@@ -899,20 +949,25 @@ export default {
this.ctypeList.forEach(item => {
item.checked = false;
});
+ this.hotTagsList.forEach(item => {
+ item.checked = false;
+ });
+ this.course.tags = ''; // 清空标签ID
+
+ // 添加清除三级分类的逻辑
this.oneList.forEach(one => {
one.checked = false;
one.children.forEach(two => {
two.checked = false;
two.children.forEach(three => {
three.checked = false;
- })
- })
+ });
+ });
});
- this.twoList = [];
- this.threeList = [];
+
+ // 清空导航标题
this.navTitle = [];
- this.newData = false;
- sessionStorage.removeItem(this.localSessionKey)
+
this.searchData();
},
// 导航切换(录播课,线下课,学习项目)
@@ -924,13 +979,27 @@ export default {
// })
// item.checked=true;
- this.searchData();
+ this.searchData(1);
+ },
+ //点击标签
+ handleTagClick(item, list,type) {
+
+ item.checked = !item.checked;
+
+ // 更新course.tags
+ const checkedTags = this.hotTagsList.filter(tag => tag.checked);
+ let tagIds = checkedTags.map(tag => tag.id).join(',');
+ this.course.tags = tagIds;
+
+ // 强制触发stagList重新计算
+ this.$nextTick(() => {
+ this.searchData(type);
+ });
},
//三级分类
handleOptionClick(item, level, list) {
// 线上品牌展示效果
this.newData = item.newData;
- console.log(this.newData);
// 单选,排除法
this.oneList.forEach(one => {
one.checked = false;
@@ -1165,13 +1234,13 @@ export default {
this.$refs.floatTools.toNeedCourse();
},
- searchData() {
+ searchData(type) {
this.course.pageIndex = 1;
this.noPageList = true; //判断接口是否还有数据
this.noDataList = true; //判断接口是否还有数据
this.courseList = [];
this.totalPages = 4;
- this.search();
+ this.search(type);
},
inputOn() {
this.$forceUpdate();
@@ -1307,12 +1376,18 @@ export default {
},
getAllChecked() { //获取全部选中的标签
let list = [];
-
+ //获取选中的课程类型
this.ctypeList.forEach(item => {
if (item.checked) {
list.push(item);
}
});
+ //获取选中的热点标签
+ this.hotTagsList.forEach(item => {
+ if (item.checked) {
+ list.push(item);
+ }
+ });
this.oneList.forEach(one => {
one.children.forEach(two => {
two.children.forEach(three => {
@@ -1331,7 +1406,7 @@ export default {
return list;
},
// 查询
- async search() {
+ async search(type) {
//
if (this.searching) {
this.$message.warning("正在搜索中,请待搜索完成后再重新搜索");
@@ -1375,7 +1450,20 @@ export default {
that.course.sysType3 += item.id;
}
});
-
+ if (!type && type !== 1){
+ apiCourseTag.getHotTagList(that.course).then(rs => {
+ if (rs.status == 200) {
+ // 保留已选中标签的状态
+ const currentCheckedTags = this.hotTagsList.filter(tag => tag.checked);
+ this.hotTagsList = rs.result.map(tag => ({
+ ...tag,
+ checked: currentCheckedTags.some(checkedTag => checkedTag.id === tag.id)
+ }));
+ } else {
+ console.log(rs.message);
+ }
+ })
+ }
this.isFind = true;
this.course.device = 1;
if (this.course.pageIndex == 1) {
@@ -1400,7 +1488,7 @@ export default {
if (item.teacher) {
item.teacher = item.teacher.split(',').filter(itemValue => itemValue !== 'BOE教师').join(',');
// if (dotIdx > 0) {
- // item.teacher = item.teacher.substring(0, dotIdx);
+ // item.teacher = item.teacher.substring(0, dotIdx);
// }
}
if (item.teacher && item.teacher == 'BOE教师') {
@@ -1417,7 +1505,7 @@ export default {
item.name = item.name;
}
});
-console.log(res.result.list,'data')
+ console.log(res.result.list,'data')
this.courseList = res?.result?.list ?? []
console.log(this.courseList);
if (this.newData) {
@@ -1676,6 +1764,9 @@ console.log(res.result.list,'data')
.topNav {
display: flex;
margin-bottom: 20px;
+ height: auto;
+ min-height: 80px;
+ align-items: center;
.nav {
display: flex;
@@ -1683,10 +1774,11 @@ console.log(res.result.list,'data')
.option-item {
position: relative;
+ margin: 0 15px;
.nav-bottbor {
position: absolute;
- top: 130%;
+ top: 100%;
left: 0;
width: 100%;
height: 4px;
@@ -1914,13 +2006,6 @@ console.log(res.result.list,'data')
color: #999;
}
-.couderbox {
- // width: 5px;
- // padding: 0;
- // display: inline-block;
- // text-align: center;
-}
-
.coures-border {
width: 2px;
height: 15px;
@@ -2057,7 +2142,7 @@ console.log(res.result.list,'data')
right: 23.5%;
// bottom: 26%;
top: 0;
- height: 20;
+ height: 20px;
line-height: 20px;
font-size: 12px;
color: #FFFFFF;
@@ -2153,8 +2238,8 @@ console.log(res.result.list,'data')
margin-left: 15px;
font-size: 14px;
color: #3d3d3d;
- cursor: pointer;
- position: relative;
+ //cursor: pointer;
+ //position: relative;
}
.uxicon {
@@ -2164,16 +2249,6 @@ console.log(res.result.list,'data')
left: 98%;
}
-// .el-radio-button{
-// margin-right: 10px;
-// margin-bottom: 10px;
-
-// .el-radio-button__inner{
-// background: #fff;
-// border: none;
-// height: 20px;
-// }
-// }
::v-deep .el-radio-button__inner,
.el-radio-group {
vertical-align: top;
@@ -2227,13 +2302,6 @@ console.log(res.result.list,'data')
}
}
-.searchbar {
- background-color: #ffffff;
- // border: 1px solid #f3f3f3;
- // width: 900px;
- // padding: 5px 20px;
-}
-
.fixed {
position: fixed;
top: 0px;
@@ -2282,9 +2350,12 @@ console.log(res.result.list,'data')
}
.search-div {
- background: #fff;
+ //background: #fff;
padding: 10px 25px;
border-radius: 8px;
+ height: auto;
+ min-height: 60px;
+
::v-deep .el-input {
width: 420px;
@@ -2322,14 +2393,6 @@ console.log(res.result.list,'data')
}
}
- // .tip{
- // color:#999999;
- // font-size: 12px;
- // >span{
- // margin-right: 8px;
- // cursor: pointer;
- // }
- // }
.search-item {
// padding: 10px 0;
}
@@ -2372,30 +2435,6 @@ console.log(res.result.list,'data')
}
}
}
-
-// .course-form {
-// width: 100%;
-// margin: 10px 0;
-// ::v-deep.el-button {
-// width: 100%;
-// color: #fff;
-// }
-// }
-
-// .right-box {
-// .add-btn {
-// width: 100%;
-// padding: 15px 0;
-// }
-// .ranking-card {
-// margin-top: 0px;
-// }
-
-// .ranking-data {
-// margin: 10px 0;
-// color: #999999;
-// }
-// }]
.search-item-type {
line-height: 25px;
padding-right: 10px;
@@ -2408,7 +2447,8 @@ console.log(res.result.list,'data')
color: #3d3d3d;
display: inline-block;
font-size: 14px;
- margin: 0px 15px;
+ //margin: 0px 15px;
+ font-weight: normal;
}
.option-border {
@@ -2421,4 +2461,197 @@ console.log(res.result.list,'data')
.option-active {
color: #387DF7;
-}
+}
+/* 项目简介 方法一:外部 CSS 类 */
+::v-deep.el-dialog {
+ border-radius: 3% 3% 1% 1%;
+ padding: 0;
+}
+::v-deep.custom-class .el-dialog__header {
+ height: 100px;
+ margin: 0 !important;
+ padding: 0 !important;
+ background-image: url('../../../assets/images/project/title-bg.png');
+ background-size: 100% 100%; /* 完全填充 */
+ display: block; /* 避免行内元素空隙 */
+}
+::v-deep.custom-class .el-dialog__header .el-dialog__title {
+ padding: 0 !important;
+ font-size: 35px;
+ font-weight: bold;
+ color: white;
+ margin: 60px;
+ line-height: 100px;
+}
+::v-deep.custom-class .el-dialog__body {
+ margin: 0 !important;
+ padding: 0 !important;
+}
+/* ---end--- */
+.search-div.nav {
+ display: block;
+ width: 100%;
+ clear: both;
+}
+
+
+.option-item {
+ margin: 0px 5px;
+}
+/* 热点标签:自定义按钮样式 */
+a.custom {
+ /* 基础样式 */
+ display: inline-block; /* 使内边距生效 */
+ padding: 1px; /* 按钮内边距 */
+ margin: 1px 5px;
+ background-color: #F2F2F2; /* 淡灰色背景 */
+ color: #333; /* 文字颜色 */
+ text-decoration: none; /* 去除下划线 */
+ border-radius: 3px; /* 圆角设计 */
+ font-family: Arial, sans-serif; /* 字体 */
+ font-size: 14px; /* 文字大小 */
+ height: 24px;
+ line-height: 20px;
+ /* 过渡效果,使颜色变化更平滑 */
+ transition: background-color 0.2s ease;
+}
+
+/* 鼠标悬停效果 */
+a.custom:hover {
+ background-color: #DDEDFF; /* 浅蓝色背景 */
+}
+
+/* 可选:点击时效果 */
+a.custom:active {
+ background-color: #757575; /* 点击时更深的灰色 */
+}
+
+/* 鼠标悬停效果 */
+a.custom2 {
+ background-color: #DDEDFF; /* 浅蓝色背景 */
+}
+
+.hot-tags-container {
+ display: inline-block;
+ //white-space: nowrap;
+ overflow-x: auto;
+ vertical-align: top;
+}
+
+.hot-tags-container::-webkit-scrollbar {
+ display: none;
+}
+
+
+.course-tag-item {
+ color: #333333; // 默认深灰色
+}
+.course-tag-item[style*="color: #387DF7"] {
+ color: #387DF7 !important; // 匹配时的蓝色
+}
+
+/* 调整option-item样式以适应换行布局 */
+.option-item {
+ position: relative;
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+/* 保持原有的导航底部横线样式 */
+.nav-bottbor {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ height: 4px;
+ background: #387DF7;
+ border-radius: 5px;
+}
+
+/* 响应式调整,当屏幕较小时减小标签间距 */
+@media (max-width: 1600px) {
+ .hot-tags-wrapper {
+ gap: 10px;
+ }
+}
+
+@media (max-width: 1400px) {
+ .hot-tags-wrapper {
+ gap: 5px;
+ }
+}
+
+.hot-tags-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15px;
+ align-items: center;
+ padding-top: 2px;
+}
+
+.course-tags {
+ margin: 5px 0;
+ min-height: 20px;
+}
+
+.course-tag-item {
+ color: #333333;
+}
+.course-tag-item[style*="color: #387DF7"] {
+ color: #387DF7 !important;
+}
+
+
+/* 关键字部分匹配高亮样式 */
+.keyword-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+/* 导航标签完全匹配高亮样式 */
+.exact-match-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+/* 混合模式下的特殊样式(可选) */
+.mixed-exact-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: #f0f7ff !important;
+ padding: 1px 3px;
+ border-radius: 2px;
+}
+/* 确保标签基础样式 */
+.course-tags ::v-deep .el-tag {
+ color: #333333;
+ background-color: #f4f4f5;
+ border-color: #e9e9eb;
+}
+.course-tags ::v-deep .el-tag .keyword-highlight,
+.course-tags ::v-deep .el-tag .exact-match-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+
+.fieldbox {
+
+ display: flex;
+ white-space: nowrap;
+ flex-wrap: wrap;
+
+ div {
+ margin: 0 15px;
+ display: inline-block;
+ font-size: 14px;
+ line-height: 25px;
+ //color: #3d3d3d;
+ font-weight: 500;
+ }
+
+ .fieldactive {
+ color: #387DF7;
+ }
+}
+
diff --git a/src/views/portal/course/qualityCourse.vue b/src/views/portal/course/qualityCourse.vue
index ccb17b11..0eb3652f 100644
--- a/src/views/portal/course/qualityCourse.vue
+++ b/src/views/portal/course/qualityCourse.vue
@@ -2,48 +2,32 @@
+ @showClass="showClass">
-
-
{{ one.name }}
+ @click.stop="handleOptionClick(twoList, 2, one.children)"
+ :class="{ courseTwoActive: twoList.id == twoId || twoList.checked }" @mouseleave.stop="leaveIndex"
+ @mouseenter.stop="changeIndex(twoList.id)">
+ :disabled="!twoList.children.length" :open-delay="0" :close-delay="0" trigger="hover"
+ :visible-arrow="false" @hide="leaveIndex" @show="changeIndex(twoList.id)" transition="none">
{{
- twoList.name }}
+ twoList.name }}
@@ -51,8 +35,8 @@
+ :key="threeList.id" @click.stop="handleOptionClick(threeList, 3, twoList.children)"
+ class="course-three">
{{ threeList.name }}
@@ -70,38 +54,116 @@
-
-
-
-
全部
-
+
+
+
+
-
-
-
外部精选
-
+
+ 请选择年份
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- 请选择年份
-
-
-
-
@@ -112,7 +174,7 @@
搜索条件
{{
- tag.name }}
+ tag.name }}
清除
@@ -125,13 +187,13 @@
全部课程
+ :class="{ actice: course.orderField == 'DEFAULT' }">全部课程
最热
+ :class="{ actice: course.orderField == 'HOT' }">最热
最新
+ :class="{ actice: course.orderField == 'NEW' }">最新
好评率
+ :class="{ actice: course.orderField == 'GOOD' }">好评率
共找到{{ count }}个结果
@@ -148,11 +210,23 @@
学习项目
+
+
+
+
+
+
+ :disabled="!keyword.showTitle">
@@ -160,7 +234,7 @@
-
+
开课时间:{{ cinfo.startTime }}
@@ -176,7 +250,7 @@
+ :praises="false" :shares="false" :views="false">
{{ toScore(cinfo.courseScore) }}分
@@ -221,7 +295,7 @@
+ layout="total, prev, pager, next, jumper" @change-page="currentChange">
@@ -258,17 +332,6 @@
创新力专区课程版权已到期!
-
@@ -296,7 +359,7 @@ import {formatDate, formatUserNumber, toScore} from "@/utils/tools.js";
import apiSearchterm from "@/api/modules/searchterm.js";
import apiPlace from "@/api/phase2/place.js"
import {qualityCourseTimeMark, qualityPageList} from "@/api/phase2"
-
+import apiCourseTag from '@/api/modules/courseTag.js'
export default {
name: "index",
components: {
@@ -317,7 +380,7 @@ export default {
},
// 取消搜索条件标签展示
- stagList() { //计算出选择的内容
+ /*stagList() { //计算出选择的内容
let list = [];
if (this.keyword) {
list.push({
@@ -327,12 +390,6 @@ export default {
checked: true
})
}
- // 取消 全部 内部专享 外部精选 三种的显示
- // this.ctypeList.forEach(item => {
- // if (item.checked) {
- // list.push(item);
- // }
- // });
this.oneList.forEach(one => {
var twoChildChecked = false;//是否有下级
one.children.forEach(two => {
@@ -354,22 +411,77 @@ export default {
list.push(one);
}
})
- // this.oneList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- // this.twoList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- // this.threeList.forEach(item=>{
- // if(item.checked){
- // list.push(item);
- // }
- // });
- //console.log(list,'list');
+ return list;
+ },*/
+
+ stagList() {
+ let list = [];
+
+ // 关键词
+ if (this.keyword) {
+ list.push({
+ type: 0,
+ id: 'keyword',
+ name: this.keyword,
+ tagName: this.keyword,
+ checked: true
+ });
+ }
+
+ // 课程类型
+ this.ctypeList.forEach(item => {
+ if (item.checked) {
+ list.push({
+ ...item,
+ tagName: item.name
+ });
+ }
+ });
+
+ // 热点标签 - 这是关键修复
+ this.hotTagsList.forEach(item => {
+ if (item.checked) {
+ list.push({
+ ...item,
+ name: item.tagName || item.name,
+ tagName: item.tagName || item.name,
+ type: 14
+ });
+ }
+ });
+
+ // 三级分类
+ this.oneList.forEach(one => {
+ var twoChildChecked = false;
+ one.children.forEach(two => {
+ if (two.checked) {
+ twoChildChecked = true;
+ }
+ var threeChildChecked = false;
+ two.children.forEach(three => {
+ if (three.checked) {
+ list.push({
+ ...three,
+ tagName: three.name
+ });
+ threeChildChecked = true;
+ }
+ });
+ if (two.checked && !threeChildChecked) {
+ list.push({
+ ...two,
+ tagName: two.name
+ });
+ }
+ });
+ if (one.checked && !twoChildChecked) {
+ list.push({
+ ...one,
+ tagName: one.name
+ });
+ }
+ });
+
return list;
},
ctypeTagAll() {
@@ -378,24 +490,9 @@ export default {
});
return !flag;
},
- // oneTagAll() {
- // let flag = this.oneList.some(item => {
- // return item.checked;
- // });
- // return !flag;
- // },
- // twoTagAll() {
- // let flag = this.twoList.some(item => {
- // return item.checked;
- // });
- // return !flag;
- // },
- // threeTagAll() {
- // let flag = this.threeList.some(item => {
- // return item.checked;
- // });
- // return !flag;
- // }
+ isAllHotTagsSelected() {
+ return !this.hotTagsList.some(tag => tag.checked);
+ }
},
data() {
return {
@@ -463,7 +560,9 @@ export default {
searchRecords: [],
hotList: [],
totalPages: 1,
- localSessionKey: this.$xpage.constants.localCourseFiltersKey
+ localSessionKey: this.$xpage.constants.localCourseFiltersKey,
+ hotTagsList: [],
+ // isAllHotTagsSelected: true,
};
},
// 受众需要每次刷新
@@ -483,17 +582,6 @@ export default {
qualityCourseTimeMark().then(response=>{
this.years = response.data.result
})
- // let screenWidth = window.screen.availWidth;
- // if (screenWidth < 1280) {
- // this.course.pageSize = 9;
- // this.columns = 3;
- // } else if (screenWidth < 1600) {
- // this.course.pageSize = 12;
- // this.columns = 3;
- // } else if (screenWidth >= 1600) {
- // this.course.pageSize = 15;
- // this.columns = 3;
- // }
let el_top = document.querySelector("#searchbar");
let el_search = document.querySelector("#searchbar");
@@ -519,8 +607,6 @@ export default {
this.loadSysTypes();
this.getScoreList();
this.getHotList();
- // this.toCourseDetail(item);
- // this.orderChange(id);
//查询排行榜,页面打开只查询一次
let localKey = "user_" + this.userInfo.sysId + "_gids";
if (this.audiences.length == 0) {
@@ -539,30 +625,173 @@ export default {
}
this.search();
})
- // Promise.all([apiOldCourse.audience(this.userInfo.sysId),apiUserGroup.userGroupIds()]).then(rs=>{
- // //console.log(rs,'rs');
- // let aids=[];
- // if(rs[0].status==200){
- // aids.push(rs[0].result);
- // }
- // if(rs[1].status==200){
- // aids.push(rs[1].result);
- // }
- // this.audiences=aids;
- // sessionStorage.setItem(localKey,this.audiences);
- // this.search();
- // })
}
}
-
- //this.searchterm();//搜索词已经没有了
this.couresreso();//广告位
-
},
beforeDestroy() {
// window.removeEventListener("scroll", this.handleScroll);
},
methods: {
+ getSearchMode() {
+ const hasKeyword = this.keyword && this.keyword.trim() !== '';
+
+ // 检查是否有导航标签被选中
+ const hasNavigationTags = this.stagList.some(tag => {
+ // 课程类型(1)、热点标签(14)、分类标签(11,12,13)
+ return [1, 11, 12, 13, 14].includes(tag.type) && tag.checked;
+ });
+
+ if (hasKeyword && hasNavigationTags) {
+ return 'mixed'; // 混合模式:关键字 + 导航标签
+ } else if (hasKeyword) {
+ return 'keyword'; // 纯关键字搜索
+ } else if (hasNavigationTags) {
+ return 'navigation'; // 纯导航标签搜索
+ } else {
+ return 'none'; // 无搜索条件
+ }
+ },
+
+ // 高亮标签关键字
+ highlightTagKeyword(tag) {
+ const searchMode = this.getSearchMode();
+
+ switch (searchMode) {
+ case 'keyword':
+ return this.highlightPartialMatch(tag);
+ case 'navigation':
+ return this.highlightExactMatch(tag);
+ case 'mixed':
+ return this.highlightMixedMode(tag);
+ default:
+ return tag;
+ }
+ },
+
+ // 部分匹配高亮(纯关键字搜索模式)
+ highlightPartialMatch(tag) {
+ const searchKeywords = this.stagList
+ .filter(searchTag => searchTag.type === 0) // 只处理关键字类型
+ .map(searchTag => searchTag.tagName || searchTag.name)
+ .filter(keyword => keyword && keyword.trim());
+
+ if (searchKeywords.length === 0) {
+ return tag;
+ }
+
+ let highlightedTag = tag;
+
+ searchKeywords.forEach(keyword => {
+ if (tag.includes(keyword)) {
+ const regex = new RegExp(`(${this.escapeRegExp(keyword)})`, 'gi');
+ highlightedTag = highlightedTag.replace(regex, '
$1');
+ }
+ });
+
+ return highlightedTag;
+ },
+
+ // 完全匹配高亮(纯导航标签模式)
+ highlightExactMatch(tag) {
+ const isMatched = this.stagList.some(searchTag => {
+ // 只检查导航标签类型
+ if (searchTag.type === 0) return false;
+
+ const searchName = searchTag.tagName || searchTag.name;
+ return searchName === tag;
+ });
+
+ if (isMatched) {
+ return `
${tag}`;
+ }
+
+ return tag;
+ },
+
+ // 混合模式高亮(关键字 + 导航标签)
+ highlightMixedMode(tag) {
+ // 1. 先检查是否完全匹配导航标签
+ const exactMatched = this.stagList.some(searchTag => {
+ if (searchTag.type === 0) return false;
+
+ const searchName = searchTag.tagName || searchTag.name;
+ return searchName === tag;
+ });
+
+ // 2. 如果完全匹配导航标签,整个标签高亮
+ if (exactMatched) {
+ return `
${tag}`;
+ }
+
+ // 3. 否则检查是否包含关键字,进行部分高亮
+ const searchKeywords = this.stagList
+ .filter(searchTag => searchTag.type === 0)
+ .map(searchTag => searchTag.tagName || searchTag.name)
+ .filter(keyword => keyword && keyword.trim());
+
+ if (searchKeywords.length === 0) {
+ return tag;
+ }
+
+ let highlightedTag = tag;
+ let hasKeywordMatch = false;
+
+ searchKeywords.forEach(keyword => {
+ if (tag.includes(keyword)) {
+ const regex = new RegExp(`(${this.escapeRegExp(keyword)})`, 'gi');
+ highlightedTag = highlightedTag.replace(regex, '
$1');
+ hasKeywordMatch = true;
+ }
+ });
+
+ // 4. 如果有关键字匹配,返回部分高亮结果
+ if (hasKeywordMatch) {
+ return highlightedTag;
+ }
+
+ // 5. 都不匹配,返回原标签
+ return tag;
+ },
+
+ // 辅助方法:转义正则表达式特殊字符
+ escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ },
+
+
+
+ handleClearHotTags() {
+ // 清除所有热点标签的选中状态
+ this.hotTagsList.forEach(tag => {
+ tag.checked = false;
+ });
+ // 清空course.tags
+ this.course.tags = '';
+
+ // 触发搜索
+ this.searchData();
+ },
+ handleTagClick(item, list,type) {
+ console.info('切换标签 item = ' + item)
+ // this.isAllHotTagsSelected = false;
+
+ item.checked = !item.checked;
+
+ // 更新course.tags
+ const checkedTags = this.hotTagsList.filter(tag => tag.checked);
+ let tagIds = checkedTags.map(tag => tag.id).join(',');
+ this.course.tags = tagIds;
+ // this.$forceUpdate();
+ this.searchData(type);
+
+ // 强制触发stagList重新计算
+ // this.$nextTick(() => {
+ // this.searchData(type);
+ // });
+ },
+
+
// 改变分页
currentChange(val) {
this.course.pageIndex = val
@@ -644,16 +873,61 @@ export default {
}
},
//搜索条件
+ // 搜索条件
stagClose(tag, tagIndex) {
this.courseChosen = void 0;
tag.checked = false;
+
if (tag.type == 0) {
+ // 关键词类型
this.keyword = '';
+ } else if (tag.type == 1) {
+ // 课程类型
+ this.ctypeList.forEach(item => {
+ if (item.id == tag.id) {
+ item.checked = false;
+ }
+ });
+ } else if (tag.type == 14) {
+ // 热点标签类型
+ this.hotTagsList.forEach(item => {
+ if (item.id == tag.id) {
+ item.checked = false;
+ }
+ });
+ // 更新course.tags
+ const checkedHotTags = this.hotTagsList.filter(tag => tag.checked);
+ let tagIds = checkedHotTags.map(tag => tag.id).join(',');
+ this.course.tags = tagIds;
+ } else if (tag.type == 11 || tag.type == 12 || tag.type == 13) {
+ // 三级分类标签
+ this.oneList.forEach(one => {
+ if (one.id == tag.id) {
+ one.checked = false;
+ }
+ one.children.forEach(two => {
+ if (two.id == tag.id) {
+ two.checked = false;
+ }
+ two.children.forEach(three => {
+ if (three.id == tag.id) {
+ three.checked = false;
+ }
+ });
+ });
+ });
}
+
this.navTitle = []
this.searchData();
},
+ isTagMatched(tag) {
+ // 检查stagList中是否有匹配的标签
+ return this.stagList.some(searchTag =>
+ searchTag.tagName === tag || searchTag.name === tag
+ );
+ },
// 导航全选
handleTypeAllClick(t) {
if (t == 1) {
@@ -691,10 +965,23 @@ export default {
handleClearTags() {
//清空所有的条件
this.keyword = '';
- // 取消搜索条件标签展示
- // this.ctypeList.forEach(item => {
- // item.checked = false;
- // });
+
+ // 清除课程类型
+ this.ctypeList.forEach(item => {
+ item.checked = false;
+ });
+
+ // 清除热点标签
+ this.hotTagsList.forEach(item => {
+ item.checked = false;
+ });
+ // 清空course.tags
+ this.course.tags = '';
+
+ // 清除年份选择
+ this.yearChosen = [];
+
+ // 清除三级分类
this.oneList.forEach(one => {
one.checked = false;
one.children.forEach(two => {
@@ -704,7 +991,8 @@ export default {
})
})
});
- // 清除左侧被选中的内容
+
+ // 清除左侧被选中的内容
this.courseChosen = void 0;
this.twoList = [];
this.threeList = [];
@@ -713,6 +1001,7 @@ export default {
sessionStorage.removeItem(this.localSessionKey)
this.searchData();
},
+
// 导航切换(录播课,线下课,学习项目)
handleTypeClick(item, list) {
// item.checked = !item.checked;
@@ -751,57 +1040,6 @@ export default {
})
})
})
-
- // item.checked = !item.checked;
- //使用上面一行是可以多选,使用下面是单选
- // list.forEach(row => {
- // row.checked = false;
- // })
- // item.checked = true;
- // //以下是新的规则的修改,
- // if (!item.checked) {
- // //清空它下面的所有的中的
- // item.children.forEach(subItem => {
- // subItem.checked = false;
- // if (subItem.children) {
- // subItem.children.forEach(sub => {
- // sub.checked = false;
- // })
- // }
- // });
- // if (level == 1) {
- // this.twoList = [];
- // this.threeList = [];
- // }
- // if (level == 2) {
- // this.threeList = [];
- // }
- // this.searchData();
- // return;
- // }
-
- // let $this = this;
- // if (level == 1) { //一级的情况
- // this.twoList = [];
- // this.threeList = [];
- // let lastCheked = null;
- // item.children.forEach(two => {
- // $this.twoList.push(two);
- // if (two.checked) {
- // lastCheked = two;
- // }
- // });
- // if (lastCheked != null) {
- // $this.threeList = lastCheked.children;
- // item.children.forEach(three => {
- // });
- // }
- // } else if (level == 2) { //二级的情况
- // this.threeList = item.children;
- // } else if (level == 3) { //三级的情况
-
- // }
- //this.handleChangeTypes(item);
this.searchData();
},
// 无用
@@ -811,18 +1049,6 @@ export default {
this.twoList = [];
this.threeList = [];
let $this = this;
- // this.oneList.forEach(one=>{
- // if(one.checked){
- // one.children.forEach(two=>{
- // $this.twoList.push(two);
- // if(two.checked){
- // two.children.forEach(three=>{
- // $this.threeList.push(three);
- // })
- // }
- // });
- // }
- // })
this.oneList.forEach(one => {
if (one.checked) {
one.children.forEach(two => {
@@ -853,15 +1079,6 @@ export default {
checked: false
}
if (item.children) {
- //增加死数据
- // item.children.push({
- // type: 12,
- // id: item.id * (index + 200),
- // name: '线上品牌系列课程',
- // children: [],
- // checked: false,
- // newData: true
- // })
item.children.forEach(subItem => {
let newSubItem = {
type: 12,
@@ -928,47 +1145,16 @@ export default {
this.keyword = val;
this.searchData();
},
-
- // 滚动
- // handleScroll() {
- // if (this.courseList.length > 6) {
-
- // let innerHeight = document.querySelector("#couser-list-content").clientHeight;
- // let outerHeight = document.documentElement.clientHeight;
- // let scrollTop = document.documentElement.scrollTop;
- // let outerWidth = document.querySelector(".xcontent2-minor").clientWidth;
- // if (outerHeight + scrollTop + 350 >= innerHeight) {
- // if (this.moreState == 1 && this.course.pageIndex < 4) {
- // this.loadMore();
- // }
- // }
- // //console.log(this.course.pageIndex,'this.course.pageIndex');
- // //加此判断,是为了没有数据时的闪动问题
- // //if(this.course.pageIndex >1){
- // if (scrollTop > 1176) {
- // document.querySelector("#fixd-box").style.cssText =
- // "position: fixed;top: -882px;width:" + outerWidth + "px";
- // } else {
- // document.querySelector("#fixd-box").style.cssText = "position: static";
- // }
- // //}
- // }
- // },
-
- toNeedCourse() {// 上传
- // 需要先切换标签
- //this.$store.dispatch('SetCurIdentity',2);
- //this.$router.push('/need/course?open=new');
+ toNeedCourse() {
this.$refs.floatTools.toNeedCourse();
-
},
- searchData() {
+ searchData(type) {
this.course.pageIndex = 1;
this.noPageList = true; //判断接口是否还有数据
this.noDataList = true; //判断接口是否还有数据
this.courseList = [];
this.totalPages = 4;
- this.search();
+ this.search(type);
},
inputOn() {
this.$forceUpdate();
@@ -1128,17 +1314,12 @@ export default {
return list;
},
// 查询
- async search () {
- //
+ async search (type) {
if (this.searching) {
this.$message.warning("正在搜索中,请待搜索完成后再重新搜索");
return;
}
this.searching = true;
- //测试时间格式化
- // let s=1650973801;
- // var d = new Date(1650973801*1000);
- // console.log(formatDateByFmt(d,'yyyy-MM-dd hh:mm'),'data');
this.saveLocalFilters();
let that = this;
if (this.keyword) {
@@ -1149,7 +1330,6 @@ export default {
this.course.audiences = this.audiences.join(",");
}
//console.log(this.userInfo)
- //this.course.companyId=this.userInfo.companyId;
this.course.type = "";//不使用单查询了
this.course.types = "";
this.course.sysType1 = "";
@@ -1172,6 +1352,20 @@ export default {
that.course.sysType3 += item.id;
}
});
+ if (!type && type !== 1){
+ apiCourseTag.getHotTagList(that.course).then(rs => {
+ if (rs.status == 200) {
+ // 保留已选中标签的状态
+ const currentCheckedTags = this.hotTagsList.filter(tag => tag.checked);
+ this.hotTagsList = rs.result.map(tag => ({
+ ...tag,
+ checked: currentCheckedTags.some(checkedTag => checkedTag.id === tag.id)
+ }));
+ } else {
+ console.log(rs.message);
+ }
+ })
+ }
this.isFind = true;
this.course.device = 1;
@@ -1191,6 +1385,9 @@ export default {
params.pageNum = pageIndex
params.orderByType = orderField
params.courseSource = this.ctypeList.findIndex(e => e.checked)
+ if (params.courseSource === -1) {
+ params.courseSource = 0
+ }
this.yearChosen.length && (params.years = this.yearChosen)
params.courseName = this.keyword
delete params.userId
@@ -1203,44 +1400,8 @@ export default {
console.log(res.status)
if (res.status === 200) {
this.totalPages = res.data.result.pages;
- // res.result.list.forEach(item => {
- // if (item.startTime != '') {
- // item.startTime = formatDateByFmt(new Date(item.startTime * 1000), 'yyyy-MM-dd hh:mm')
- // //let time = item.startTime.split('-');
- // //item.startTime = `${time[0]}年${time[1]}月${time[2]}日`
- // }
- // //教师转化
- // if (item.teacher) {
- // item.teacher = item.teacher.split(',').filter(itemValue => itemValue !== 'BOE教师').join(',');
- // // if (dotIdx > 0) {
- // // item.teacher = item.teacher.substring(0, dotIdx);
- // // }
- // }
- // if (item.teacher && item.teacher == 'BOE教师') {
- // item.teacher = '';
- // }
- //
- // //转化标红显示
- // item.title = item.name;
- // if (that.course.keyword) {
- // item.name = that.brightenKeyword(item.name, that.course.keyword);
- // item.keywordsActive = that.brightenKeywords(item.keywordsList, that.course.keyword)
- // console.log(item.keywordsActive);
- // } else {
- // item.name = item.name;
- // }
- // });
const list = res.data.result.records ?? []
- // list.forEach(course=>{
- // const id = course.courseId
- //
- // apiCourse.getTeacherByCourseIDs([id]).then(res=>{
- // console.log(res, "ids res")
- // course.teacher = res.result[0].names[0]
- // console.log(`course.teacher`, course.teacher)
- // })
- // })
this.courseList = list
if (this.newData) {
@@ -1301,18 +1462,7 @@ export default {
this.moreState = 2;
});
},
- // showInApply() {
- // this.inapply.show = true;
- // },
- // pushEnter(type) {
- // this.type1.push(type);
- // },
- // deleteOut(type) {
- // this.type1 = this.type.filter(item => item != type);
- // },
- // chooseShow(type) {
- // return this.type1.some(item => item == type);
- // },
+
getAnkingData() {
apiCourse.ranking().then(res => {
if (res.status == 200) {
@@ -1503,29 +1653,29 @@ export default {
}
// 导航
-.topNav {
- display: flex;
- margin-bottom: 20px;
-
- .nav {
- display: flex;
- align-items: center;
-
- .option-item {
- position: relative;
-
- .nav-bottbor {
- position: absolute;
- top: 130%;
- left: 0;
- width: 100%;
- height: 4px;
- background: #387DF7;
- border-radius: 5px;
- }
- }
- }
-}
+//.topNav {
+// display: flex;
+// margin-bottom: 20px;
+//
+// .nav {
+// display: flex;
+// align-items: center;
+//
+// .option-item {
+// position: relative;
+//
+// .nav-bottbor {
+// position: absolute;
+// top: 130%;
+// left: 0;
+// width: 100%;
+// height: 4px;
+// background: #387DF7;
+// border-radius: 5px;
+// }
+// }
+// }
+//}
.u-class {
::v-deep .el-dialog {
@@ -1887,7 +2037,7 @@ export default {
right: 23.5%;
// bottom: 26%;
top: 0;
- height: 20;
+ height: 20px;
line-height: 20px;
font-size: 12px;
color: #FFFFFF;
@@ -2117,7 +2267,7 @@ export default {
border-radius: 8px;
::v-deep .el-input {
- width: 420px;
+ //width: 420px;
height: 38px;
//margin-bottom: 13px;
@@ -2202,30 +2352,18 @@ export default {
}
}
}
-
-// .course-form {
-// width: 100%;
-// margin: 10px 0;
-// ::v-deep.el-button {
-// width: 100%;
-// color: #fff;
-// }
-// }
-
-// .right-box {
-// .add-btn {
-// width: 100%;
-// padding: 15px 0;
-// }
-// .ranking-card {
-// margin-top: 0px;
-// }
-
-// .ranking-data {
-// margin: 10px 0;
-// color: #999999;
-// }
-// }]
+.hot-tags-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15px;
+ align-items: center;
+ padding-top: 2px;
+}
+//.search-div.nav {
+// display: block;
+// width: 100%;
+// clear: both;
+//}
.search-item-type {
line-height: 25px;
padding-right: 10px;
@@ -2233,13 +2371,14 @@ export default {
white-space: nowrap;
}
-.option-item {
- font-family: "Menlo", "苹方-简" !important;
- color: #3d3d3d;
- display: inline-block;
- font-size: 14px;
- margin: 0px 15px;
-}
+//.option-item {
+// font-family: "Menlo", "苹方-简" !important;
+// color: #3d3d3d;
+// display: inline-block;
+// font-size: 14px;
+// margin: 0px 15px;
+// cursor: pointer
+//}
.option-border {
width: 2px;
@@ -2249,6 +2388,119 @@ export default {
background: #666;
}
+.topNav {
+ display: flex;
+ margin-bottom: 20px;
+ height: auto;
+ min-height: 80px;
+ align-items: center;
+
+ .nav {
+ display: flex;
+ align-items: center;
+
+ .option-item {
+ position: relative;
+ margin: 0 15px;
+ cursor: pointer;
+
+ .nav-bottbor {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ height: 4px;
+ background: #387DF7;
+ border-radius: 5px;
+ }
+ }
+ }
+}
+
+.search-div.nav {
+ display: block;
+ width: 100%;
+ clear: both;
+}
+
+.option-item {
+ margin: 0px 5px;
+}
+
+.fieldbox {
+ display: flex;
+ white-space: nowrap;
+ flex-wrap: wrap;
+
+ div {
+ margin: 0 15px;
+ display: inline-block;
+ font-size: 14px;
+ line-height: 25px;
+ font-weight: 500;
+ }
+
+ .fieldactive {
+ color: #387DF7;
+ }
+}
+
.option-active {
color: #387DF7;
-}
+}
+
+
+
+/* 关键字部分匹配高亮样式 */
+.keyword-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+/* 导航标签完全匹配高亮样式 */
+.exact-match-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+/* 混合模式下的特殊样式(可选) */
+.mixed-exact-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: #f0f7ff !important;
+ padding: 1px 3px;
+ border-radius: 2px;
+}
+/* 确保标签基础样式 */
+.course-tags ::v-deep .el-tag {
+ color: #333333;
+ background-color: #f4f4f5;
+ border-color: #e9e9eb;
+}
+.course-tags ::v-deep .el-tag .keyword-highlight,
+.course-tags ::v-deep .el-tag .exact-match-highlight {
+ color: #387DF7 !important;
+ font-weight: bold;
+ background-color: transparent !important;
+}
+
+//.fieldbox {
+//
+// display: flex;
+// white-space: nowrap;
+// flex-wrap: wrap;
+//
+// div {
+// margin: 0 15px;
+// display: inline-block;
+// font-size: 14px;
+// line-height: 25px;
+// //color: #3d3d3d;
+// font-weight: 500;
+// }
+//
+// .fieldactive {
+// color: #387DF7;
+// }
+//}
+
diff --git a/src/views/tag/TagManageList.vue b/src/views/tag/TagManageList.vue
new file mode 100644
index 00000000..5ee9434d
--- /dev/null
+++ b/src/views/tag/TagManageList.vue
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+
+
+
+
+
+ 解绑
+
+
+
+
+
+
+
+
+
+
+
+
+
+