feat: 删除JSP视图层,完善评价和通知系统,新增拼团模块

- 删除所有 JSP 页面(20个文件),前端完全迁移至 Vue 3 SPA
- 完善评价系统:ReviewDialog 组件、用户评价历史页、评价状态检查API
- 新增通知系统:Notification 实体/仓库/服务/控制器,NotificationCenter 接入真实API
- 新增拼团模块:GroupBuying 全套后端和前端页面
- 修复 review check API 参数双重包装导致请求格式错误
- 修复通知 API 路径缺少 /api 前缀和响应格式处理
- MessageListenerService 集成 NotificationService 创建持久化通知

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 16:40:26 +08:00
parent b684ea38d4
commit c4582655d9
115 changed files with 5968 additions and 12623 deletions

View File

@@ -101,7 +101,7 @@
<el-collapse v-model="activeCollapse">
<el-collapse-item name="advanced">
<template #title>
<span class="text-sm text-blue-500">
<span class="search-advanced-title">
<el-icon><Setting /></el-icon>
高级搜索
</span>
@@ -250,7 +250,7 @@ const highlightKeyword = (text: string) => {
if (!searchQuery.value) return text
const regex = new RegExp(`(${searchQuery.value})`, 'gi')
return text.replace(regex, '<span class="text-red-500 font-bold">$1</span>')
return text.replace(regex, '<span class="search-highlight">$1</span>')
}
// 获取搜索建议
@@ -365,6 +365,14 @@ onMounted(async () => {
}
}
.search-advanced-title {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 14px;
color: #44443f;
}
.search-panel {
.search-section {
margin-bottom: 20px;
@@ -391,7 +399,7 @@ onMounted(async () => {
cursor: pointer;
&:hover {
background-color: var(--el-color-primary-light-9);
background-color: #efefed;
}
}
}
@@ -408,7 +416,7 @@ onMounted(async () => {
transition: background-color 0.3s;
&:hover {
background-color: #f5f7fa;
background-color: #f7f7f6;
}
.content {
@@ -428,12 +436,12 @@ onMounted(async () => {
.type {
padding: 0 6px;
background-color: #f0f0f0;
background-color: #efefed;
border-radius: 2px;
}
.price {
color: #f56c6c;
color: #2b2b27;
font-weight: 500;
}
}
@@ -444,7 +452,7 @@ onMounted(async () => {
.advanced-search {
margin-top: 20px;
border-top: 1px solid #e4e7ed;
border-top: 1px solid #d8cebf;
padding-top: 10px;
.advanced-form {
@@ -452,4 +460,4 @@ onMounted(async () => {
}
}
}
</style>
</style>