增加标签搜索功能,增加作品标签点击跳转
This commit is contained in:
@@ -10,6 +10,7 @@ router.get('/search', async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
keyword,
|
||||
tags,
|
||||
type = 'all',
|
||||
sort = 'date_desc',
|
||||
duration = 'all',
|
||||
@@ -17,16 +18,27 @@ router.get('/search', async (req, res) => {
|
||||
limit = 30
|
||||
} = req.query;
|
||||
|
||||
if (!keyword) {
|
||||
// 处理标签参数
|
||||
let tagsArray = [];
|
||||
if (tags) {
|
||||
if (Array.isArray(tags)) {
|
||||
tagsArray = tags;
|
||||
} else {
|
||||
tagsArray = [tags];
|
||||
}
|
||||
}
|
||||
|
||||
if (!keyword && (!tagsArray || tagsArray.length === 0)) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: 'Search keyword is required'
|
||||
error: 'Search keyword or tags are required'
|
||||
});
|
||||
}
|
||||
|
||||
const artworkService = new ArtworkService(req.backend.getAuth());
|
||||
const result = await artworkService.searchArtworks({
|
||||
keyword,
|
||||
tags: tagsArray,
|
||||
type,
|
||||
sort,
|
||||
duration,
|
||||
|
||||
@@ -151,6 +151,7 @@ class ArtworkService {
|
||||
try {
|
||||
const {
|
||||
keyword,
|
||||
tags,
|
||||
type = 'all',
|
||||
sort = 'date_desc',
|
||||
duration = 'all',
|
||||
@@ -159,10 +160,10 @@ class ArtworkService {
|
||||
} = searchOptions;
|
||||
|
||||
// 验证搜索参数
|
||||
if (!keyword || keyword.trim() === '') {
|
||||
if ((!keyword || keyword.trim() === '') && (!tags || tags.length === 0)) {
|
||||
return {
|
||||
success: false,
|
||||
error: 'Search keyword is required'
|
||||
error: 'Search keyword or tags are required'
|
||||
};
|
||||
}
|
||||
|
||||
@@ -187,8 +188,17 @@ class ArtworkService {
|
||||
'within_last_month': 'within_last_month'
|
||||
};
|
||||
|
||||
// 构建搜索关键词
|
||||
let searchWord = '';
|
||||
if (keyword && keyword.trim()) {
|
||||
searchWord = keyword.trim();
|
||||
} else if (tags && tags.length > 0) {
|
||||
// 将标签数组转换为搜索关键词,用空格分隔
|
||||
searchWord = tags.join(' ');
|
||||
}
|
||||
|
||||
const params = {
|
||||
word: keyword.trim(),
|
||||
word: searchWord,
|
||||
search_target: searchTargetMap[type] || 'partial_match_for_tags',
|
||||
sort: sortMap[sort] || 'date_desc',
|
||||
offset: parseInt(offset) || 0,
|
||||
|
||||
Reference in New Issue
Block a user