提交 1f39e6ff authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 d8acd0b7
...@@ -19,31 +19,28 @@ const searchValue = $ref('') ...@@ -19,31 +19,28 @@ const searchValue = $ref('')
function querySearch(query: string, cb: (arg: any) => void) { function querySearch(query: string, cb: (arg: any) => void) {
searchCourseList({ search_name: query }).then(res => { searchCourseList({ search_name: query }).then(res => {
let results = res.data.data || [] let results = res.data.data || []
if (query) { results = results.map((item: any) => {
results = searchHighlight(results, query) item.value = item.name
} return item
})
cb(results) cb(results)
}) })
} }
// 设置关键词高亮 // 设置关键词高亮
function searchHighlight(list: Record<string, any>, query: string) { function searchHighlight(name: string) {
return list.map((item: any) => { return searchValue ? name.replace(searchValue, `<span class="search-highlight">${searchValue}</span>`) : name
item.name = item.name.replace(query, `<span class="search-highlight">${query}</span>`)
if (item.chapters) {
item.chapters = searchHighlight(item.chapters, query)
}
if (item.sections) {
item.sections = searchHighlight(item.sections, query)
}
return item
})
} }
// 搜索选择 // 搜索选择
function handleSelect(data: any) { function handleSelect(data: any) {
params.id = data.id params.id = data.id
emit('change', params) emit('change', params)
} }
function handleChange(value: string) {
if (!value) {
params.id = ''
emit('change', params)
}
}
// 获取学期列表 // 获取学期列表
let semesterList = $ref<SemesterType[]>([]) let semesterList = $ref<SemesterType[]>([])
// 整理后的学期列表 // 整理后的学期列表
...@@ -75,21 +72,23 @@ const filterList = computed(() => { ...@@ -75,21 +72,23 @@ const filterList = computed(() => {
v-model="searchValue" v-model="searchValue"
:fetch-suggestions="querySearch" :fetch-suggestions="querySearch"
:prefix-icon="Search" :prefix-icon="Search"
:trigger-on-focus="false"
@select="handleSelect" @select="handleSelect"
@change="handleChange"
class="course-search__input" class="course-search__input"
> >
<template #default="{ item }"> <template #default="{ item }">
<div class="search-course-item"> <div class="search-course-item">
<h4 class="search-course-item__name" v-html="item.name"></h4> <h4 class="search-course-item__name" v-html="searchHighlight(item.name)"></h4>
<div class="search-course-chapters" v-if="item.chapters?.length"> <div class="search-course-chapters" v-if="item.chapters?.length">
<div class="search-course-chapter-item" v-for="chapter in item.chapters" :key="chapter.id"> <div class="search-course-chapter-item" v-for="chapter in item.chapters" :key="chapter.id">
<p class="search-course-chapter-item__name" v-html="chapter.name"></p> <p class="search-course-chapter-item__name" v-html="searchHighlight(chapter.name)"></p>
<div class="search-course-sections" v-if="chapter.sections?.length"> <div class="search-course-sections" v-if="chapter.sections?.length">
<div <div
class="search-course-section-item" class="search-course-section-item"
v-for="section in chapter.sections" v-for="section in chapter.sections"
:key="section.id" :key="section.id"
v-html="section.name" v-html="searchHighlight(section.name)"
></div> ></div>
</div> </div>
</div> </div>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论