From b39a0502e7941ce966fda53664cf1b04ba52d65f Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期三, 01 十月 2025 17:30:24 +0800
Subject: [PATCH] 清理测试文件:删除所有test、debug、fix、check_开头的文件,为重构做准备

---
 web/src/views/project-review/index.vue |  375 ++++++++++++++++++++++++++++++++++------------------
 1 files changed, 244 insertions(+), 131 deletions(-)

diff --git a/web/src/views/project-review/index.vue b/web/src/views/project-review/index.vue
index 4420604..1df7c38 100644
--- a/web/src/views/project-review/index.vue
+++ b/web/src/views/project-review/index.vue
@@ -1,115 +1,124 @@
 <template>
   <div class="review-container">
-    <el-card>
-      <template #header>
-        <div class="card-header">
-          <h3 class="card-title">椤圭洰璇勫</h3>
-        </div>
-      </template>
-
-      <el-form :inline="true" class="search-form">
-        <el-form-item label="閫夋嫨姣旇禌">
-          <el-select
-            v-model="selectedActivity"
-            placeholder="璇烽�夋嫨姣旇禌"
-            @change="handleActivityChange"
-            style="width: 300px"
-            clearable
-            filterable
-          >
-            <el-option
-              v-for="activity in activities"
-              :key="activity.id"
-              :label="getActivityDisplayName(activity)"
-              :value="activity.id"
-            >
-              <span>{{ getActivityName(activity) }}</span>
-              <span v-if="activity.pid > 0" style="color: #409eff; margin-left: 8px;">
-                {{ activity.name }}
-              </span>
-            </el-option>
-          </el-select>
-        </el-form-item>
-        
-        <el-form-item label="椤圭洰鍚嶇О">
-          <el-input
-            v-model="searchName"
-            placeholder="璇疯緭鍏ラ」鐩悕绉�"
-            @keyup.enter="loadProjects"
-            style="width: 200px"
-          />
-        </el-form-item>
-        
-        <el-form-item>
-          <el-button type="primary" @click="loadProjects" :loading="projectsLoading">
-            鎼滅储
-          </el-button>
-          <el-button @click="resetSearch">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-
-      <el-table 
-        :data="projects" 
-        style="width: 100%" 
-        v-loading="projectsLoading"
-        empty-text="璇峰厛閫夋嫨姣旇禌"
-      >
-        <el-table-column prop="playerName" label="椤圭洰鍚嶇О" min-width="150">
-          <template #default="scope">
-            {{ scope.row.projectName || scope.row.playerName }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="playerName" label="鍙傝禌浜哄鍚�" min-width="120" />
-        <el-table-column prop="phone" label="鑱旂郴鐢佃瘽" min-width="120" />
-        <el-table-column prop="ratingCount" label="璇勫娆℃暟" width="100" align="center">
-          <template #default="scope">
-            <el-tag :type="scope.row.ratingCount > 0 ? 'success' : 'info'">
-              {{ scope.row.ratingCount }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column prop="averageScore" label="骞冲潎鍒�" width="100" align="center">
-          <template #default="scope">
-            <span v-if="scope.row.averageScore > 0" class="score">
-              {{ scope.row.averageScore.toFixed(1) }}
-            </span>
-            <span v-else class="no-score">鏈瘎鍒�</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="applyTime" label="鎶ュ悕鏃堕棿" width="180">
-          <template #default="scope">
-            {{ formatDate(scope.row.applyTime) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="state" label="鐘舵��" width="100" align="center">
-          <template #default="scope">
-            <el-tag :type="getStateType(scope.row.state)">
-              {{ getStateName(scope.row.state) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="120" fixed="right">
-          <template #default="scope">
-            <el-button type="primary" link @click="viewDetails(scope.row.id)">
-              璇︽儏璇勫
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- 鍒嗛〉 -->
-      <div class="pagination-container" v-if="total > 0">
-        <el-pagination
-          v-model:current-page="currentPage"
-          v-model:page-size="pageSize"
-          :page-sizes="[10, 20, 50, 100]"
-          :total="total"
-          layout="total, sizes, prev, pager, next, jumper"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
+    <!-- 椤甸潰鏍囬鍖哄煙 -->
+    <div class="page-header">
+      <div class="title-section">
+        <h1 class="page-title">椤圭洰璇勫</h1>
+        <p class="page-subtitle">绠$悊姣旇禌椤圭洰鐨勮瘎瀹℃祦绋嬶紝鏌ョ湅璇勫垎缁撴灉鍜岄」鐩鎯�</p>
       </div>
-    </el-card>
+
+    </div>
+
+    <!-- 鎼滅储宸ュ叿鏍� -->
+    <div class="search-toolbar">
+      <div class="search-form">
+        <el-input
+          v-model="searchName"
+          placeholder="璇疯緭鍏ラ」鐩悕绉�"
+          @keyup.enter="loadProjects"
+          @clear="handleClear"
+          style="width: 180px"
+          clearable
+        />
+        <el-select
+          v-model="selectedActivity"
+          placeholder="璇烽�夋嫨姣旇禌"
+          @change="handleActivityChange"
+          style="width: 200px"
+          clearable
+          filterable
+        >
+          <template #prefix>
+            <el-icon><Trophy /></el-icon>
+          </template>
+          <el-option
+            v-for="activity in activities"
+            :key="activity.id"
+            :label="getActivityDisplayName(activity)"
+            :value="activity.id"
+          >
+            <span>{{ getActivityName(activity) }}</span>
+            <span v-if="activity.pid > 0" style="color: #409eff; margin-left: 8px;">
+              {{ activity.name }}
+            </span>
+          </el-option>
+        </el-select>
+        <el-button 
+          type="primary" 
+          :icon="Search" 
+          @click="loadProjects"
+          :loading="projectsLoading"
+        >
+          鏌ヨ
+        </el-button>
+      </div>
+    </div>
+
+    <el-table 
+      :data="projects" 
+      style="width: 100%" 
+      v-loading="projectsLoading"
+      empty-text="璇峰厛閫夋嫨姣旇禌"
+    >
+      <el-table-column prop="playerName" label="椤圭洰鍚嶇О" min-width="150">
+        <template #default="scope">
+          {{ scope.row.projectName || scope.row.playerName }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="playerName" label="鍙傝禌浜哄鍚�" min-width="120" />
+      <el-table-column prop="phone" label="鑱旂郴鐢佃瘽" min-width="120" />
+      <el-table-column prop="ratingCount" label="璇勫娆℃暟" width="100" align="center">
+        <template #default="scope">
+          <el-tag :type="scope.row.ratingCount > 0 ? 'success' : 'info'">
+            {{ scope.row.ratingCount }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="averageScore" label="骞冲潎鍒�" width="100" align="center">
+        <template #default="scope">
+          <span v-if="scope.row.averageScore > 0" class="score">
+            {{ scope.row.averageScore.toFixed(1) }}
+          </span>
+          <span v-else class="no-score">鏈瘎鍒�</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="applyTime" label="鎶ュ悕鏃堕棿" width="180">
+        <template #default="scope">
+          {{ formatDate(scope.row.applyTime) }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="reviewStatus" label="璇勫鐘舵��" width="100" align="center">
+        <template #default="scope">
+          <el-tag :type="getReviewStatusType(scope.row.ratingCount)">
+            {{ getReviewStatusName(scope.row.ratingCount) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" width="80" align="center">
+        <template #default="scope">
+          <el-button
+            text
+            :icon="View"
+            @click="viewDetails(scope.row.id)"
+            class="action-btn view-btn"
+            title="璇︽儏璇勫"
+          />
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 鍒嗛〉 -->
+    <div class="pagination-container" v-if="total > 0">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        :page-sizes="[10, 20, 50, 100]"
+        :total="total"
+        layout="total, sizes, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
   </div>
 </template>
 
@@ -117,7 +126,9 @@
 import { ref, onMounted } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
-import { getActiveActivities, getCompetitionProjects } from '@/api/projectReview'
+import { Search, Trophy, View } from '@element-plus/icons-vue'
+import { getActiveActivities, getRatingStats } from '@/api/projectReview'
+import { getProjectReviewApplications } from '@/api/projectReviewNew'
 
 const router = useRouter()
 
@@ -136,14 +147,21 @@
 
 // 鍔犺浇姣旇禌鍒楄〃
 const loadActivities = async () => {
+  console.log('=== 寮�濮嬪姞杞芥瘮璧涘垪琛� ===')
   activitiesLoading.value = true
   try {
+    console.log('璋冪敤 getActiveActivities...')
     const data = await getActiveActivities()
+    console.log('getActiveActivities 杩斿洖鏁版嵁:', data)
     activities.value = data
+    console.log('activities.value 璁剧疆涓�:', activities.value)
+    console.log('activities.value.length:', activities.value?.length)
   } catch (error) {
+    console.error('鍔犺浇姣旇禌鍒楄〃澶辫触:', error)
     ElMessage.error(error.message)
   } finally {
     activitiesLoading.value = false
+    console.log('=== 姣旇禌鍒楄〃鍔犺浇瀹屾垚 ===')
   }
 }
 
@@ -154,17 +172,37 @@
     return
   }
   
+  console.log('=== 寮�濮嬪姞杞介」鐩垪琛� ===')
+  console.log('selectedActivity.value:', selectedActivity.value)
+  console.log('currentPage.value:', currentPage.value)
+  console.log('pageSize.value:', pageSize.value)
+  
   projectsLoading.value = true
   try {
-    const response = await getCompetitionProjects(
-      selectedActivity.value,
-      currentPage.value - 1, // 鍚庣浠�0寮�濮�
-      pageSize.value,
-      searchName.value
-    )
+    const params = {
+      activityId: selectedActivity.value,
+      page: currentPage.value,
+      size: pageSize.value
+    }
     
-    projects.value = response.content || []
-    total.value = response.totalElements || 0
+    // 濡傛灉鏈夋悳绱㈠悕绉帮紝娣诲姞鍒板弬鏁颁腑
+    if (searchName.value && searchName.value.trim()) {
+      params.name = searchName.value.trim()
+    }
+    
+    console.log('API璋冪敤鍙傛暟:', params)
+    
+    const response = await getProjectReviewApplications(params)
+    console.log('API鍝嶅簲:', response)
+    
+    // 澶勭悊鍝嶅簲鏁版嵁 - 鏂扮殑鍒嗛〉缁撴瀯
+    const pageData = response.projectReviewApplications
+    projects.value = pageData?.content || []
+    total.value = pageData?.totalElements || 0
+    
+    console.log('璁剧疆 projects.value:', projects.value)
+    console.log('projects.value.length:', projects.value.length)
+    console.log('璁剧疆 total.value:', total.value)
   } catch (error) {
     console.error('鍔犺浇椤圭洰鍒楄〃澶辫触:', error)
     ElMessage.error('鍔犺浇椤圭洰鍒楄〃澶辫触')
@@ -182,13 +220,22 @@
   loadProjects()
 }
 
-// 閲嶇疆鎼滅储
-const resetSearch = () => {
+// 娓呯┖鎼滅储
+const handleClear = () => {
   searchName.value = ''
   currentPage.value = 1
   if (selectedActivity.value) {
     loadProjects()
   }
+}
+
+// 閲嶇疆鎼滅储
+const resetSearch = () => {
+  searchName.value = ''
+  selectedActivity.value = null
+  currentPage.value = 1
+  projects.value = []
+  total.value = 0
 }
 
 // 鍒嗛〉澶勭悊
@@ -236,6 +283,16 @@
   return stateMap[state] || '鏈煡'
 }
 
+// 鑾峰彇璇勫鐘舵�佺被鍨嬶紙鍩轰簬璇勫娆℃暟锛�
+const getReviewStatusType = (ratingCount) => {
+  return ratingCount > 0 ? 'success' : 'warning'
+}
+
+// 鑾峰彇璇勫鐘舵�佸悕绉帮紙鍩轰簬璇勫娆℃暟锛�
+const getReviewStatusName = (ratingCount) => {
+  return ratingCount > 0 ? '宸茶瘎瀹�' : '鏈瘎瀹�'
+}
+
 // 鑾峰彇姣旇禌鍚嶇О锛堝鏋滄槸闃舵锛岃繑鍥炵埗姣旇禌鍚嶇О锛涘鏋滄槸姣旇禌锛岃繑鍥炶嚜宸辩殑鍚嶇О锛�
 const getActivityName = (activity) => {
   if (activity.pid > 0 && activity.parent) {
@@ -257,6 +314,8 @@
   return activity.name
 }
 
+
+
 // 缁勪欢鎸傝浇鏃跺姞杞芥暟鎹�
 onMounted(() => {
   loadActivities()
@@ -268,23 +327,63 @@
   padding: 20px;
 }
 
-.card-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
+/* 椤甸潰鏍囬鍖哄煙 */
+.page-header {
+  margin-bottom: 24px;
 }
 
-.card-title {
+.title-section {
+  text-align: left;
+}
+
+.page-title {
+  font-size: 24px;
+  font-weight: 600;
+  color: #1f2937;
+  margin: 0 0 8px 0;
+}
+
+.page-subtitle {
+  font-size: 14px;
+  color: #6b7280;
   margin: 0;
-  font-size: 18px;
-  font-weight: 500;
+  line-height: 1.5;
+}
+
+/* 鎼滅储宸ュ叿鏍� */
+.search-toolbar {
+  display: flex;
+  justify-content: flex-end;
+  margin-bottom: 20px;
 }
 
 .search-form {
-  margin-bottom: 20px;
-  padding: 20px;
-  background-color: #f5f7fa;
-  border-radius: 4px;
+  display: flex;
+  gap: 12px;
+  align-items: center;
+}
+
+.search-area {
+  display: flex;
+  align-items: center;
+  gap: 12px;
+}
+
+/* 鎿嶄綔鎸夐挳鏍峰紡 */
+.action-btn {
+  padding: 8px !important;
+  margin: 0 6px;
+  border-radius: 6px;
+  transition: all 0.2s ease;
+}
+
+.view-btn {
+  color: #3b82f6 !important;
+}
+
+.view-btn:hover {
+  background-color: rgba(59, 130, 246, 0.1) !important;
+  transform: scale(1.2);
 }
 
 .score {
@@ -314,4 +413,18 @@
 :deep(.el-tag) {
   border-radius: 12px;
 }
+
+/* 鍝嶅簲寮忛�傞厤 */
+@media (max-width: 768px) {
+  .search-toolbar {
+    flex-direction: column;
+    gap: 12px;
+    align-items: stretch;
+  }
+  
+  .search-area {
+    justify-content: center;
+    flex-wrap: wrap;
+  }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0