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