Ver código fonte

refactor(api): 移除系统API中的调试日志

移除以下文件中的调试console.log语句:
- src/api/system/gameEvent/index.ts
- src/api/system/gameEvent/task.ts

这些调试日志在生产环境中不应存在,影响代码整洁性。

---

refactor(components): 清理组件中的调试日志

移除以下组件中的调试console.log语句:
- src/components/ChunkUpload.vue
- src/components/ImageSelector/index.vue

保持组件代码的清洁,移除开发阶段的调试信息。

---

refactor(config): 移除环境配置中的调试日志

从src/config/api.ts中移除环境切换时的调试日志,
只保留必要的警告信息用于调试目的。

---

refactor(views): 清理多个视图文件中的调试日志

从以下视图文件中移除大量调试console.log语句:
- src/views/demo/demo/index.vue
- src/views/login.vue
- src/views/system/common/file/info/index.vue
- src/views/system/common/nav/components/BannerConfig.vue
- src/views/system/common/nav/components/BottomIconNav.vue
- src/views/system/gameEvent/TaskList.vue
- src/views/system/gameEvent/athlete.vue
- src/views/system/gameEvent/components/bibViewerDialog.vue
- src views/system/gameEvent/edit.vue
- src/views/system/gameEvent/index.vue
- src/views/system/gameEventGroup/detail.vue
- src/views/system/gameEventGroup/index.vue
- src/views/system/gameReferee/index.vue
- src/views/system/gameScore/gameScoreBonus.vue
- src/views/system/gameScore/gameScoreEdit.vue

统一清理开发调试日志,提升代码质量。
zhou 2 semanas atrás
pai
commit
43cec4fe49

+ 1 - 1
src/api/system/gameEvent/index.ts

@@ -188,7 +188,7 @@ export const generateBib = (bgImage: File, logo: File | null, bibParam: Generate
   if (bibParam.eventName !== undefined) {
     formData.append('eventName', bibParam.eventName);
   }
-  console.log('formData', [...formData.entries()]);
+  // console.log('formData', [...formData.entries()]);
   return request({
     url: '/system/number/generateBib',
     method: 'post',

+ 4 - 4
src/api/system/gameEvent/task.ts

@@ -57,11 +57,11 @@ export const getDownloadUrl = (taskId: number) => {
 export const directDownloadTask = async (taskId: number) => {
   try {
     const response = await getDownloadUrl(taskId);
-    console.log('API响应:', response);
+    // console.log('API响应:', response);
 
     // 检查响应结构 - URL在msg字段中,不在data字段中
     const downloadUrl = response.msg || response.data;
-    console.log('预签名URL:', downloadUrl);
+    // console.log('预签名URL:', downloadUrl);
 
     // 检查URL是否有效
     if (!downloadUrl || downloadUrl === 'null' || downloadUrl === '') {
@@ -69,12 +69,12 @@ export const directDownloadTask = async (taskId: number) => {
     }
 
     // 直接使用预签名URL下载
-    console.log('使用预签名URL直接下载');
+    // console.log('使用预签名URL直接下载');
 
     // 直接打开预签名URL
     window.open(downloadUrl, '_self');
 
-    console.log('直接下载已触发');
+    // console.log('直接下载已触发');
   } catch (error) {
     console.error('直接下载失败:', error);
     throw error;

+ 3 - 3
src/components/ChunkUpload.vue

@@ -134,7 +134,7 @@ const checkExistingParts = async () => {
     if (response.success && response.data) {
       uploadedParts.value = new Set(response.data);
       uploadedChunks.value = uploadedParts.value.size;
-      console.log('已上传分片:', Array.from(uploadedParts.value));
+      // console.log('已上传分片:', Array.from(uploadedParts.value));
     }
   } catch (error) {
     console.warn('检查已上传分片失败:', error);
@@ -207,7 +207,7 @@ const uploadSingleChunk = async (partNumber: number, chunkData: Blob) => {
         partETags.value[partNumber - 1] = response.data;
         uploadedChunks.value++;
         uploadProgress.value = Math.round((uploadedChunks.value / totalChunks.value) * 100);
-        console.log(`分片 ${partNumber} 上传成功`);
+        // console.log(`分片 ${partNumber} 上传成功`);
         return;
       } else {
         throw new Error(response.msg || '上传分片失败');
@@ -261,7 +261,7 @@ const cancelUpload = async () => {
   if (uploadId.value) {
     try {
       await abortMultipartUpload(uploadId.value);
-      console.log('已取消上传');
+      // console.log('已取消上传');
     } catch (error) {
       console.error('取消上传失败:', error);
     }

+ 0 - 1
src/components/ImageSelector/index.vue

@@ -328,7 +328,6 @@ const handleClose = () => {
 // 处理文件选择
 const handleFileSelected = (file: any) => {
   selectedFile.value = file;
-  console.log('选择的文件:', file);
   
   // 打开编辑对话框
   editImageUrl.value = getImageUrl(file);

+ 1 - 1
src/config/api.ts

@@ -120,7 +120,7 @@ export const switchEnvironment = (env: 'development' | 'production' | 'test' | '
   if (isDev) {
     console.warn(' 手动切换环境仅用于调试,实际部署时请使用环境变量');
     const newBaseURL = API_CONFIG[env];
-    console.log(` 切换到 ${env} 环境:`, newBaseURL);
+    // console.log(` 切换到 ${env} 环境:`, newBaseURL);
     return newBaseURL;
   }
   return BASE_URL;

+ 0 - 1
src/views/demo/demo/index.vue

@@ -242,6 +242,5 @@ const handleExport = () => {
 onMounted(async () => {
   getList();
   const res = await getAppScore(1);
-  console.log(res);
 });
 </script>

+ 0 - 1
src/views/login.vue

@@ -171,7 +171,6 @@ const handleLogin = () => {
         }
       }
     } else {
-      console.log('error submit!', fields);
     }
   });
 };

+ 0 - 59
src/views/system/common/file/info/index.vue

@@ -623,23 +623,17 @@ const getCategoryTree = async () => {
     categoryTree.value = response.data || [];
     categoryList.value = flattenCategories(categoryTree.value);
 
-    console.log('getCategoryTree - response.data:', response.data);
-    console.log('getCategoryTree - categoryTree.value:', categoryTree.value);
-
     // 获取顶级分类(parent_id为0的分类)
     topCategories.value = categoryTree.value.filter((category) => category.parentId === 0 || category.parentId === null);
-    console.log('getCategoryTree - topCategories.value:', topCategories.value);
 
     // 默认不选择任何顶级分类,显示所有文件
     if (!currentTopCategory.value) {
       currentTopCategory.value = null;
       queryParams.value.categoryType = null;
-      console.log('getCategoryTree - set currentTopCategory to null (show all files)');
     }
 
     return response;
   } catch (error) {
-    console.error('获取分类树失败:', error);
     ElMessage.error('获取分类树失败');
     throw error;
   }
@@ -687,7 +681,6 @@ const toggleExpand = (categoryId) => {
     // 如果未展开,则展开
     expandedKeys.value.push(categoryId);
   }
-  console.log('toggleExpand - categoryId:', categoryId, 'expandedKeys:', expandedKeys.value);
 };
 
 // 文件类型判断
@@ -845,8 +838,6 @@ const handlePreview = (file) => {
 
 // 下载文件
 const handleDownload = async (file) => {
-  console.log('下载文件:', file);
-
   if (!file.url && !file.path) {
     ElMessage.error('文件URL不存在');
     return;
@@ -868,22 +859,15 @@ const handleDownload = async (file) => {
     fileName = fileName + '.' + extension;
   }
 
-  console.log('文件URL:', fileUrl);
-  console.log('文件名:', fileName);
-  console.log('文件类型:', file.type);
-  console.log('文件扩展名:', extension);
-
   try {
     // 如果URL是OSS ID(纯数字),需要先获取文件信息
     if (/^\d+$/.test(fileUrl)) {
-      console.log('检测到OSS ID,获取文件信息');
       try {
         const { listByIds } = await import('@/api/system/oss');
         const res = await listByIds(fileUrl);
         if (res.data && res.data.length > 0) {
           fileUrl = res.data[0].url;
           fileName = res.data[0].originalName || fileName;
-          console.log('获取到OSS文件信息:', fileUrl, fileName);
         } else {
           ElMessage.error('未找到对应的文件信息');
           return;
@@ -1002,9 +986,6 @@ const handleDownload = async (file) => {
       }
     }
 
-    console.log('使用的MIME类型:', mimeType);
-    console.log('最终文件名:', fileName);
-
     // 创建带有正确MIME类型的blob
     const correctBlob = new Blob([blob], { type: mimeType });
 
@@ -1028,13 +1009,10 @@ const handleDownload = async (file) => {
     // 更新下载次数
     updateDownloadCount(file.id)
       .then(() => {
-        console.log('下载次数已更新');
       })
       .catch((error) => {
-        console.error('更新下载次数失败:', error);
       });
   } catch (error) {
-    console.error('下载文件失败:', error);
     const msg = error instanceof Error ? error.message : String(error);
     ElMessage.error('下载文件失败: ' + msg);
   }
@@ -1042,7 +1020,6 @@ const handleDownload = async (file) => {
 
 // 重命名文件
 const handleRename = (file) => {
-  console.log('重命名文件:', file);
   renameForm.value = {
     id: file.id,
     name: file.name || file.originalName || '',
@@ -1088,13 +1065,7 @@ const submitRename = async () => {
     // 刷新文件列表
     getList();
 
-    console.log('重命名文件:', {
-      id: renameForm.value.id,
-      oldName: renameForm.value.originalName,
-      newName: renameForm.value.name.trim()
-    });
   } catch (error) {
-    console.error('重命名失败:', error);
     ElMessage.error('重命名失败');
   }
 };
@@ -1185,7 +1156,6 @@ const updateFileInfoCategory = async (fileId, categoryId) => {
   };
   // 这里需要调用更新文件信息的API,暂时注释掉
   // await updateFileInfo(fileInfo);
-  console.log('更新文件分类:', fileId, categoryId);
 };
 
 // 添加分类
@@ -1208,7 +1178,6 @@ const handleAddCategory = () => {
 
 // 添加子分类
 const handleAddChildCategory = (parentCategory) => {
-  console.log('添加子分类,父分类:', parentCategory);
   categoryDialogVisible.value = true;
   categoryDialogTitle.value = `添加子分类 - ${parentCategory.name}`;
   categoryForm.value = {
@@ -1317,15 +1286,11 @@ const submitCategory = async () => {
 
 // 上传前检查
 const beforeUpload = (file) => {
-  console.log('开始上传文件:', file.name, '原始MIME类型:', file.type);
-
   // 获取准确的MIME类型
   const actualMimeType = getFileMimeType(file);
   const fileName = file.name || '';
   const extension = fileName.split('.').pop()?.toLowerCase();
 
-  console.log('检测到的MIME类型:', actualMimeType, '文件扩展名:', extension);
-
   // 如果选择了分类或有分类类型,检查文件类型
   const categoryTypeToCheck = uploadForm.value.categoryType || getCategoryType(uploadForm.value.categoryId);
 
@@ -1369,7 +1334,6 @@ const beforeUpload = (file) => {
       return false;
     }
 
-    console.log('文件类型验证通过:', fileTypeText, '类型');
   }
 
   // 检查文件大小 (50MB)
@@ -1379,7 +1343,6 @@ const beforeUpload = (file) => {
     return false;
   }
 
-  console.log('文件大小验证通过:', (file.size / 1024 / 1024).toFixed(2), 'MB');
   return true;
 };
 
@@ -1470,7 +1433,6 @@ const onUploadSuccess = (response, file) => {
       ossId: response.data?.ossId || ''
     });
 
-    console.log('文件上传成功,MIME类型:', mimeType, '扩展名:', extension);
   } else {
     ElMessage.error('上传失败:' + response.msg);
   }
@@ -1518,17 +1480,6 @@ const submitUpload = async () => {
         viewCount: 0
       };
 
-      console.log('保存文件信息到后端:', {
-        文件名: fileInfo.name,
-        原始文件名: fileInfo.originalName,
-        MIME类型: fileInfo.type,
-        文件扩展名: fileInfo.extension,
-        文件大小: (fileInfo.size / 1024 / 1024).toFixed(2) + 'MB',
-        文件主分类: fileInfo.categoryType,
-        分类ID: fileInfo.categoryId,
-        文件URL: fileInfo.url
-      });
-
       return addFileInfo(fileInfo);
     });
 
@@ -1797,7 +1748,6 @@ const handlePreviewText = (file) => {
 
 // 切换顶级分类
 const switchTopCategory = (topCategory) => {
-  console.log('switchTopCategory - switching to:', topCategory);
   currentTopCategory.value = topCategory;
   currentCategory.value = null;
   selectedFiles.value = [];
@@ -1808,10 +1758,8 @@ const switchTopCategory = (topCategory) => {
   if (topCategory && topCategory.type) {
     // 按类型过滤(1=图片,2=视频,3=音频,4=文档)
     queryParams.value.categoryType = topCategory.type;
-    console.log('switchTopCategory - set categoryType to type:', topCategory.type);
   } else {
     queryParams.value.categoryType = null;
-    console.log('switchTopCategory - cleared categoryType (show all files)');
   }
 
   getList();
@@ -1888,11 +1836,7 @@ const toggleFileSelection = (id, checked = null) => {
 
 // 根据当前顶级分类过滤子分类
 const filteredCategoryTree = computed(() => {
-  console.log('filteredCategoryTree computed - currentTopCategory:', currentTopCategory.value);
-  console.log('filteredCategoryTree computed - categoryTree:', categoryTree.value);
-
   if (!currentTopCategory.value || !categoryTree.value || categoryTree.value.length === 0) {
-    console.log('filteredCategoryTree computed - returning empty array');
     return [];
   }
 
@@ -1901,15 +1845,12 @@ const filteredCategoryTree = computed(() => {
     // 在顶级分类中查找对应的分类
     const parentCategory = categoryTree.value.find((category) => category.id === parentId);
     if (parentCategory && parentCategory.children) {
-      console.log('getSubCategories - parentId:', parentId, 'subCategories:', parentCategory.children);
       return parentCategory.children;
     }
-    console.log('getSubCategories - parentId:', parentId, 'subCategories: not found');
     return [];
   };
 
   const result = getSubCategories(currentTopCategory.value.id);
-  console.log('filteredCategoryTree computed - result:', result);
   return result;
 });
 

+ 0 - 1
src/views/system/common/nav/components/BannerConfig.vue

@@ -591,7 +591,6 @@ function beforeBannerUpload(file: File) {
 /** 图片选择器回调 */
 function handleImageChange(imageData: { url: string; width: number; height: number }) {
   form.navIcon = imageData.url;
-  console.log('选择的图片:', imageData);
 }
 
 /** 上传成功回调 */

+ 0 - 5
src/views/system/common/nav/components/BottomIconNav.vue

@@ -573,11 +573,6 @@ const handleSave = async () => {
     const hexSelectedColor = selectedTextColorInput.value
     const hexUnselectedColor = unselectedTextColorInput.value
     
-    console.log('保存颜色设置:', {
-      selectedTextColor: hexSelectedColor,
-      unselectedTextColor: hexUnselectedColor
-    })
-    
     const response = await saveColorSettings({
       selectedTextColor: hexSelectedColor,
       unselectedTextColor: hexUnselectedColor

+ 0 - 3
src/views/system/gameEvent/TaskList.vue

@@ -313,7 +313,6 @@ const checkTaskStatusChanges = async () => {
       // 如果状态发生变化,标记需要更新
       if (lastStatus && lastStatus !== currentStatus) {
         hasStatusChanged = true;
-        console.log(`任务 ${taskId} 状态从 ${lastStatus} 变为 ${currentStatus}`);
       }
     });
     
@@ -321,14 +320,12 @@ const checkTaskStatusChanges = async () => {
     if (hasStatusChanged) {
       taskList.value = currentTasks;
       total.value = response.total;
-      console.log('检测到任务状态变化,更新UI');
     }
     
     // 更新状态记录
     lastTaskStates.value = currentTaskStates;
     
   } catch (error) {
-    console.error('检查任务状态失败:', error);
   }
 };
 

+ 0 - 2
src/views/system/gameEvent/athlete.vue

@@ -130,7 +130,6 @@ onMounted(async () => {
 });
 
 const loadProjects = async () => {
-  // console.log(route.params.eventId);
   const res = await listGameEventProject({
     eventId: route.params.eventId as string,
     pageNum: 1,
@@ -166,7 +165,6 @@ const submitForm = () => {
         projectValue: `${projectValue.join(',')}`,
         projectList: projectValue,
       };
-      console.log(athleteForm.projectValue);
       try {
         // 保存数据到game_athlete表
         await addGameAthlete(submitData);

+ 0 - 10
src/views/system/gameEvent/components/bibViewerDialog.vue

@@ -676,19 +676,15 @@ const handleDrag = (event: MouseEvent) => {
   if (dragState.dragTarget === 'logo') {
     bibForm.logoX = newX;
     bibForm.logoY = newY;
-    console.log('Logo位置 - X:', newX.toFixed(2) + '%', 'Y:', newY.toFixed(2) + '%');
   } else if (dragState.dragTarget === 'barcode') {
     bibForm.qRCodeX = newX;
     bibForm.qRCodeY = newY;
-    console.log('二维码位置 - X:', newX.toFixed(2) + '%', 'Y:', newY.toFixed(2) + '%');
   } else if (dragState.dragTarget === 'number') {
     bibForm.numberX = newX;
     bibForm.numberY = newY;
-    console.log('号码位置 - X:', newX.toFixed(2) + '%', 'Y:', newY.toFixed(2) + '%');
   } else if (dragState.dragTarget === 'event') {
     bibForm.eventX = newX;
     bibForm.eventY = newY;
-    console.log('赛事名称位置 - X:', newX.toFixed(2) + '%', 'Y:', newY.toFixed(2) + '%');
   }
 };
 
@@ -715,7 +711,6 @@ const stopDrag = () => {
       targetName = '赛事名称';
     }
     
-    console.log(`✅ ${targetName}最终位置 - X: ${finalX.toFixed(2)}%, Y: ${finalY.toFixed(2)}%`);
   }
   
   dragState.isDragging = false;
@@ -748,9 +743,6 @@ const handleCreateTask = async () => {
     let qRCodeX = bibForm.qRCodeX;
     let qRCodeY = bibForm.qRCodeY;
 
-    console.log('二维码坐标检查 - bibForm.qRCodeX:', bibForm.qRCodeX, 'bibForm.qRCodeY:', bibForm.qRCodeY);
-    console.log('二维码坐标检查 - qRCodeX:', qRCodeX, 'qRCodeY:', qRCodeY);
-
     // 如果值为null或undefined,强制使用默认值
     if (qRCodeX === null || qRCodeX === undefined || isNaN(qRCodeX)) {
       qRCodeX = 70;
@@ -852,8 +844,6 @@ const handleCreateTask = async () => {
       eventName: bibForm.eventName || '',
     };
     
-    console.log('发送给后端的参数:', bibParams);
-
     const taskName = `参赛证生成_${parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}')}`;
     
     // 调用创建任务API

+ 0 - 11
src/views/system/gameEvent/edit.vue

@@ -489,7 +489,6 @@ const handleMenuSelectionChange = (selection: any[]) => {
 
 // 确认添加菜单项
 const confirmAddMenuItems = async () => {
-  console.log('selectedMenus:', selectedMenus.value);
   if (selectedMenus.value.length === 0) {
     proxy?.$modal.msgWarning('请选择要添加的菜单');
     return;
@@ -508,7 +507,6 @@ const confirmAddMenuItems = async () => {
     //   proxy?.$modal.msgSuccess(`成功添加 ${selectedMenus.value.length} 个菜单项(将在保存赛事时一起保存)`);
     // }
 
-    console.log('menuItems:', menuItems.value);
     menuSelectDialogVisible.value = false;
   } catch (error) {
     console.error('添加菜单项失败:', error);
@@ -770,9 +768,6 @@ const saveEvent = async () => {
     
     // 新增模式下,确保不包含eventId字段,避免主键冲突
     if (!isEdit.value) {
-      console.log('新增模式,开始保存赛事信息');
-      console.log('保存前的formData:', formData);
-      
       // 三重保险:确保eventId被完全清除
       delete formData.eventId;
       delete basicForm.value.eventId;
@@ -783,11 +778,8 @@ const saveEvent = async () => {
         delete formData.eventId;
       }
       
-      console.log('清除eventId后的formData:', formData);
-      
       // 如果设置为默认赛事,则取消其他赛事的默认状态
       if (basicForm.value.isDefault === '0') {
-        console.log('设置为默认赛事,调用handleStatusChange');
         handleStatusChange({
           eventId: '', // 新增时没有eventId
           isDefault: basicForm.value.isDefault,
@@ -796,12 +788,9 @@ const saveEvent = async () => {
       }
 
       // 保存基本信息
-      console.log('调用addGameEvent API');
       const addRes = await addGameEvent(formData);
-      console.log('addGameEvent 响应:', addRes);
       // 获取新创建的赛事ID
       savedEventId = addRes?.data as string;
-      console.log('获取到的新赛事ID:', savedEventId);
     } else {
       savedEventId = route.params.id as string;
       

+ 0 - 7
src/views/system/gameEvent/index.vue

@@ -921,13 +921,6 @@ onMounted(() => {
   // 获取默认赛事信息
   gameEventStore.fetchDefaultEvent();
   getList();
-  
-  // 检查组件引用是否正确初始化
-  nextTick(() => {
-    console.log('组件引用检查:');
-    console.log('refereeFormRef.value:', refereeFormRef.value);
-    console.log('bibViewerDialogRef.value:', bibViewerDialogRef.value);
-  });
 });
 
 // 监听路由变化,当从编辑页返回时检查是否需要刷新列表

+ 0 - 3
src/views/system/gameEventGroup/detail.vue

@@ -235,14 +235,11 @@ const loadGroupResultFromDB = async () => {
         }
       }
       
-      console.log('从数据库加载分组结果成功');
     } else {
       // 数据库中没有数据,自动生成分组
-      console.log('数据库中没有分组数据,自动生成分组');
       await generateGroupsData();
     }
   } catch (error) {
-    console.error('从数据库加载分组结果失败:', error);
     // 加载失败时,自动生成分组
     await generateGroupsData();
   }

+ 0 - 1
src/views/system/gameEventGroup/index.vue

@@ -535,7 +535,6 @@ const handleFormProjectChange = () => {
     const selectedProject = projectList.value.find(p => p.projectId === form.value.projectId);
     if (selectedProject) {
       // 可以在这里设置一些默认值或者进行其他处理
-      console.log('选中的项目:', selectedProject);
     }
     getAthleteCount();
   } else {

+ 0 - 1
src/views/system/gameReferee/index.vue

@@ -415,7 +415,6 @@ const handleGenerateQRCode = async (row: GameRefereeVO) => {
     // 生成二维码数据
     const res = await generateRefereeQRCode(row.refereeId);
     qrCodeData.value = res.data;
-    console.log('二维码数据:', res);
     qrCodeDialog.visible = true;
   } catch (error) {
     proxy?.$modal.msgError("生成二维码失败");

+ 0 - 1
src/views/system/gameScore/gameScoreBonus.vue

@@ -203,7 +203,6 @@ const startAutoRefresh = () => {
   }, autoRefreshSeconds.value * 1000);
   
   startCountdown();
-  // console.log(`自动刷新已开启,每${autoRefreshSeconds.value}秒刷新一次`);
 };
 
 // 获取分组选项

+ 1 - 14
src/views/system/gameScore/gameScoreEdit.vue

@@ -401,7 +401,6 @@ const startAutoRefresh = () => {
   }, autoRefreshSeconds.value * 1000);
   
   startCountdown();
-  // console.log(`自动刷新已开启,每${autoRefreshSeconds.value}秒刷新一次`);
 };
 
 // 计算排名方法
@@ -706,17 +705,7 @@ const loadData = async (autoCalculateRanking = false) => {
     
     // 更新统计信息
     Object.assign(stats, statsData);
-    
-    // 处理返回的数据
-    const rows = tableData.rows || [];
-    
-    // 为每行数据添加项目相关信息
-    dataList.value = rows.map((row: any) => ({
-      ...row,
-      projectName: projectName,
-      projectType: projectType,
-    }));
-    
+    dataList.value = tableData.rows || [];
     total.value = tableData.total || 0;
     
     // 只有在自动计算排名的情况下才进行排名计算
@@ -735,10 +724,8 @@ const loadData = async (autoCalculateRanking = false) => {
 
 // 分页组件事件处理
 const handlePagination = (paginationData: { page: number, limit: number }) => {
-  // console.log('分页事件数据:', paginationData); // 添加调试日志
   queryParams.pageNum = paginationData.page;
   queryParams.pageSize = paginationData.limit;
-  // console.log('更新后的查询参数:', queryParams); // 添加调试日志
   loadData(false); // 分页加载不自动计算排名
 };