diff --git a/memora-api/internal/handler/word.go b/memora-api/internal/handler/word.go
index 7925862..a1ef779 100644
--- a/memora-api/internal/handler/word.go
+++ b/memora-api/internal/handler/word.go
@@ -100,8 +100,9 @@ func (h *WordHandler) SubmitReview(c *gin.Context) {
func (h *WordHandler) GetWords(c *gin.Context) {
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "20"))
offset, _ := strconv.Atoi(c.DefaultQuery("offset", "0"))
+ query := strings.TrimSpace(c.DefaultQuery("q", ""))
- words, total, err := h.wordService.GetAllWords(limit, offset)
+ words, total, err := h.wordService.GetAllWords(limit, offset, query)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
diff --git a/memora-api/internal/repository/word_repository.go b/memora-api/internal/repository/word_repository.go
index a5b8692..978f587 100644
--- a/memora-api/internal/repository/word_repository.go
+++ b/memora-api/internal/repository/word_repository.go
@@ -26,11 +26,20 @@ func (r *WordRepository) Create(word *model.Word) error {
return r.db.Create(word).Error
}
-func (r *WordRepository) List(limit, offset int) ([]model.Word, int64, error) {
+func (r *WordRepository) List(limit, offset int, query string) ([]model.Word, int64, error) {
var words []model.Word
var total int64
- r.db.Model(&model.Word{}).Count(&total)
- if err := r.db.Limit(limit).Offset(offset).Order("created_at DESC").Find(&words).Error; err != nil {
+
+ db := r.db.Model(&model.Word{})
+ if query != "" {
+ like := "%" + query + "%"
+ db = db.Where("word LIKE ? OR definition LIKE ?", like, like)
+ }
+
+ if err := db.Count(&total).Error; err != nil {
+ return nil, 0, err
+ }
+ if err := db.Limit(limit).Offset(offset).Order("created_at DESC").Find(&words).Error; err != nil {
return nil, 0, err
}
return words, total, nil
diff --git a/memora-api/internal/service/word.go b/memora-api/internal/service/word.go
index ca38647..18f21e0 100644
--- a/memora-api/internal/service/word.go
+++ b/memora-api/internal/service/word.go
@@ -412,8 +412,8 @@ func (s *WordService) SubmitReviewAnswer(userID int64, req request.ReviewAnswerR
}
// 获取所有单词
-func (s *WordService) GetAllWords(limit, offset int) ([]model.Word, int64, error) {
- return s.wordRepo.List(limit, offset)
+func (s *WordService) GetAllWords(limit, offset int, query string) ([]model.Word, int64, error) {
+ return s.wordRepo.List(limit, offset, strings.TrimSpace(query))
}
// 获取记忆统计
diff --git a/memora-web/src/services/api/words.ts b/memora-web/src/services/api/words.ts
index fd5bb89..4c5314a 100644
--- a/memora-web/src/services/api/words.ts
+++ b/memora-web/src/services/api/words.ts
@@ -6,7 +6,7 @@ export async function addWord(word: string) {
return res.data
}
-export async function getWords(params: { limit?: number; offset?: number } = {}) {
+export async function getWords(params: { limit?: number; offset?: number; q?: string } = {}) {
const res = await http.get<{ data: Word[]; total: number }>('/words', { params })
return res.data
}
diff --git a/memora-web/src/views/Review.vue b/memora-web/src/views/Review.vue
index 44fd47b..dcc6ab3 100644
--- a/memora-web/src/views/Review.vue
+++ b/memora-web/src/views/Review.vue
@@ -29,16 +29,36 @@
-