فهرست منبع

修复前端分页问题

jiapu 3 ماه پیش
والد
کامیت
77d4045086
91فایلهای تغییر یافته به همراه621 افزوده شده و 244 حذف شده
  1. 1 1
      cfc-web/.last_build_commit
  2. 1 1
      cfc-web/package.json
  3. 18 0
      cfc-web/public/CHANGELOG-v$(node.undefined.md
  4. 7 1
      cfc-web/public/CHANGELOG.md
  5. 7 3
      cfc-web/src/views/Children.vue
  6. 10 3
      cfc-web/src/views/Families.vue
  7. 8 6
      cfc-web/src/views/GuideFamilyTask.vue
  8. 8 4
      cfc-web/src/views/GuidePackages.vue
  9. 0 4
      cfc-web/src/views/Layout.vue
  10. 7 3
      cfc-web/src/views/OperationLogs.vue
  11. 7 1
      cfc-web/src/views/Points.vue
  12. 12 7
      cfc-web/src/views/Rewards.vue
  13. 8 3
      cfc-web/src/views/TaskTemplates.vue
  14. 8 2
      cfc-web/src/views/Tasks.vue
  15. 5 3
      cfc-web/src/views/TeacherConsult.vue
  16. 10 3
      cfc-web/src/views/Users.vue
  17. 11 8
      cfc-web/src/views/Wishes.vue
  18. 8 4
      cfc-web/src/views/admin/Activities.vue
  19. 5 3
      cfc-web/src/views/admin/ActivityRegistrationReview.vue
  20. 7 3
      cfc-web/src/views/admin/ActivityReview.vue
  21. 4 1
      cfc-web/src/views/admin/ArticleCategory.vue
  22. 6 1
      cfc-web/src/views/admin/ArticleManage.vue
  23. 5 3
      cfc-web/src/views/admin/Assessment.vue
  24. 6 3
      cfc-web/src/views/admin/AssessmentAssign.vue
  25. 6 1
      cfc-web/src/views/admin/AssessmentPlanRules.vue
  26. 7 2
      cfc-web/src/views/admin/AssessmentProducts.vue
  27. 4 1
      cfc-web/src/views/admin/BaziConfigs.vue
  28. 4 1
      cfc-web/src/views/admin/BloodTypeConfigs.vue
  29. 13 4
      cfc-web/src/views/admin/CouponManagement.vue
  30. 10 2
      cfc-web/src/views/admin/EcomSupplierManage.vue
  31. 14 4
      cfc-web/src/views/admin/EmotionAlertManage.vue
  32. 13 4
      cfc-web/src/views/admin/EnergyRuleManagement.vue
  33. 4 1
      cfc-web/src/views/admin/EnergySandbox.vue
  34. 7 2
      cfc-web/src/views/admin/FamilyEarnings.vue
  35. 6 1
      cfc-web/src/views/admin/FamilyEarningsWithdraw.vue
  36. 7 3
      cfc-web/src/views/admin/Foods.vue
  37. 7 3
      cfc-web/src/views/admin/GrowthTaskManagement.vue
  38. 5 3
      cfc-web/src/views/admin/KnowledgeTag.vue
  39. 8 6
      cfc-web/src/views/admin/MembershipCenter.vue
  40. 8 3
      cfc-web/src/views/admin/OrderManage.vue
  41. 6 1
      cfc-web/src/views/admin/PendingRefund.vue
  42. 6 1
      cfc-web/src/views/admin/PlanManagement.vue
  43. 7 3
      cfc-web/src/views/admin/PointsLog.vue
  44. 7 3
      cfc-web/src/views/admin/ProductManage.vue
  45. 14 4
      cfc-web/src/views/admin/ProductPpointManage.vue
  46. 14 4
      cfc-web/src/views/admin/ProductProfitRate.vue
  47. 5 6
      cfc-web/src/views/admin/PromotionManagement.vue
  48. 6 1
      cfc-web/src/views/admin/Recipes.vue
  49. 4 1
      cfc-web/src/views/admin/RelationshipTypes.vue
  50. 6 1
      cfc-web/src/views/admin/SeasonalFoods.vue
  51. 8 3
      cfc-web/src/views/admin/SubscriptionManagement.vue
  52. 6 3
      cfc-web/src/views/admin/SupplierProductManage.vue
  53. 13 4
      cfc-web/src/views/admin/SysConfig.vue
  54. 5 3
      cfc-web/src/views/admin/VirtualTeamDetail.vue
  55. 5 2
      cfc-web/src/views/admin/VirtualTeamList.vue
  56. 4 1
      cfc-web/src/views/admin/ZodiacConfigs.vue
  57. 4 3
      cfc-web/src/views/admin/components/ProductSkuEditor.vue
  58. 7 3
      cfc-web/src/views/admin/data-source-config.vue
  59. 4 3
      cfc-web/src/views/admin/dimension-config.vue
  60. 4 3
      cfc-web/src/views/admin/dimension/index.vue
  61. 7 2
      cfc-web/src/views/admin/energy-config/WuxingConfig.vue
  62. 6 1
      cfc-web/src/views/admin/health-knowledge.vue
  63. 7 3
      cfc-web/src/views/admin/indicators/index.vue
  64. 7 3
      cfc-web/src/views/admin/review/ActivityAudit.vue
  65. 7 3
      cfc-web/src/views/admin/review/ActivityRegistrationAudit.vue
  66. 7 3
      cfc-web/src/views/admin/review/ArticleAudit.vue
  67. 7 3
      cfc-web/src/views/admin/review/ButlerAudit.vue
  68. 7 3
      cfc-web/src/views/admin/review/GuideAudit.vue
  69. 7 3
      cfc-web/src/views/admin/review/HierarchyAudit.vue
  70. 7 3
      cfc-web/src/views/admin/review/NutritionistAudit.vue
  71. 7 3
      cfc-web/src/views/admin/review/PackageAudit.vue
  72. 7 3
      cfc-web/src/views/admin/review/ProductAudit.vue
  73. 7 3
      cfc-web/src/views/admin/review/VendorAudit.vue
  74. 7 3
      cfc-web/src/views/admin/review/WithdrawAudit.vue
  75. 6 1
      cfc-web/src/views/admin/supply-hierarchy/ChangeRequest.vue
  76. 6 3
      cfc-web/src/views/admin/supply-manage/List.vue
  77. 10 5
      cfc-web/src/views/admin/supply-system/Detail.vue
  78. 6 1
      cfc-web/src/views/admin/supply-system/List.vue
  79. 7 4
      cfc-web/src/views/health/HealthReportAudit.vue
  80. 6 1
      cfc-web/src/views/nutritionist/HealthCheckins.vue
  81. 6 1
      cfc-web/src/views/nutritionist/HealthIndicators.vue
  82. 6 1
      cfc-web/src/views/nutritionist/HealthReports.vue
  83. 7 3
      cfc-web/src/views/nutritionist/NutritionMappings.vue
  84. 4 3
      cfc-web/src/views/teacher/FamilyList.vue
  85. 4 1
      cfc-web/src/views/teacher/GrowthPlans.vue
  86. 4 1
      cfc-web/src/views/teacher/GrowthRecords.vue
  87. 4 3
      cfc-web/src/views/teacher/TeacherAssessment.vue
  88. 4 3
      cfc-web/src/views/teacher/TeacherFamilies.vue
  89. 9 3
      cfc-web/src/views/teacher/TeacherOrders.vue
  90. 4 3
      cfc-web/src/views/teacher/TeacherPackages.vue
  91. 4 3
      cfc-web/src/views/teacher/TeacherTeam.vue

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-88bdfb6a014ade9a76c5d249ffafc141482e62d2
+1f6bca9fcbeabf55f735606828cf6a3fec1a7fd2

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.415",
+  "version": "1.0.416",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
     "dev": "vue-cli-service serve",
     "dev": "vue-cli-service serve",

+ 18 - 0
cfc-web/public/CHANGELOG-v$(node.undefined.md

@@ -0,0 +1,18 @@
+# v$(node.undefined 版本历史
+
+[« 返回最新版本](CHANGELOG.md)
+
+---
+## v$(node (2026-07-20)
+
+### 其他
+- 分配规划师
+- 分配规划师
+- 填写预约报告表单
+- 填写预约报告表单
+- 填写预约报告表单
+- 填写预约报告表单
+- 修复程序报错
+- 修复程序报错
+- 修复程序报错
+

+ 7 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 # 更新日志
 
 
-> 当前版本: v1.0.415
+> 当前版本: v$(node
 
 
 ## 历史版本
 ## 历史版本
 
 
@@ -8,6 +8,12 @@
 
 
 ---
 ---
 
 
+# v1.0 版本历史
+
+[« 返回最新版本](CHANGELOG.md)
+
+---
+
 ## v1.0.415 (2026-07-19)
 ## v1.0.415 (2026-07-19)
 
 
 ### 新功能
 ### 新功能

+ 7 - 3
cfc-web/src/views/Children.vue

@@ -39,8 +39,7 @@
         </el-form>
         </el-form>
 
 
         <!-- 孩子列表 -->
         <!-- 孩子列表 -->
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table :data="tableData" border v-loading="loading" style="width: 100%;max-height:calc(100vh - 300px);">
+        <el-table :data="tableData" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="150"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="150"></el-table-column>
         <el-table-column prop="age" label="年龄" width="80"></el-table-column>
         <el-table-column prop="age" label="年龄" width="80"></el-table-column>
@@ -81,7 +80,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         </el-table>
         </el-table>
-        </div>
 
 
         <!-- 分页 -->
         <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -151,6 +149,11 @@ import { getChildrenList, adjustChildPoints, updateChild } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'Children',
   name: 'Children',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -239,6 +242,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadChildren()
       this.loadChildren()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 10 - 3
cfc-web/src/views/Families.vue

@@ -31,12 +31,12 @@
         </el-form>
         </el-form>
 
 
         <!-- 家庭列表 -->
         <!-- 家庭列表 -->
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
         <el-table
         <el-table
           :data="tableData"
           :data="tableData"
           border
           border
           v-loading="loading"
           v-loading="loading"
-          style="width: 100%;max-height:calc(100vh - 300px);"
+          style="width: 100%"
+          :max-height="tableHeight"
         >
         >
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="name" label="家庭名称" width="200"></el-table-column>
         <el-table-column prop="name" label="家庭名称" width="200"></el-table-column>
@@ -61,7 +61,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         </el-table>
         </el-table>
-        </div>
 
 
         <!-- 分页 -->
         <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -110,6 +109,7 @@
           :data="membersData.parents"
           :data="membersData.parents"
           border
           border
           style="width: 100%; margin-bottom: 20px"
           style="width: 100%; margin-bottom: 20px"
+          :max-height="300"
           v-if="membersData.parents && membersData.parents.length > 0"
           v-if="membersData.parents && membersData.parents.length > 0"
         >
         >
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
@@ -124,6 +124,7 @@
           :data="membersData.children"
           :data="membersData.children"
           border
           border
           style="width: 100%"
           style="width: 100%"
+          :max-height="300"
           v-if="membersData.children && membersData.children.length > 0"
           v-if="membersData.children && membersData.children.length > 0"
         >
         >
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
@@ -150,6 +151,11 @@ import { getFamilyList, getFamilyMembers, updateFamily, deleteFamily } from '@/a
 
 
 export default {
 export default {
   name: 'Families',
   name: 'Families',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -229,6 +235,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadFamilies()
       this.loadFamilies()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 8 - 6
cfc-web/src/views/GuideFamilyTask.vue

@@ -69,8 +69,7 @@
       </div>
       </div>
 
 
       <!-- 孩子列表 -->
       <!-- 孩子列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" v-if="familyOverview && !searchForm.childId" :data="familyOverview.children" border>
+      <el-table :max-height="tableHeight" v-if="familyOverview && !searchForm.childId" :data="familyOverview.children" border>
         <el-table-column prop="childName" label="孩子姓名" width="120"></el-table-column>
         <el-table-column prop="childName" label="孩子姓名" width="120"></el-table-column>
         <el-table-column prop="totalPoints" label="总积分" width="100"></el-table-column>
         <el-table-column prop="totalPoints" label="总积分" width="100"></el-table-column>
         <el-table-column prop="streakDays" label="连续打卡" width="100">
         <el-table-column prop="streakDays" label="连续打卡" width="100">
@@ -88,11 +87,10 @@
             <el-button size="mini" @click="selectChild(row)">查看任务</el-button>
             <el-button size="mini" @click="selectChild(row)">查看任务</el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
 
 
       <!-- 任务列表 -->
       <!-- 任务列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table v-if="searchForm.childId" :data="tasks" border v-loading="taskLoading">
+      <el-table v-if="searchForm.childId" :data="tasks" border v-loading="taskLoading" :max-height="tableHeight">
         <template slot="empty">
         <template slot="empty">
           <div class="empty-table-state">
           <div class="empty-table-state">
             <i class="el-icon-tickets" style="font-size: 48px; color: #ccc; margin-bottom: 16px;"></i>
             <i class="el-icon-tickets" style="font-size: 48px; color: #ccc; margin-bottom: 16px;"></i>
@@ -134,7 +132,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
-      </div>
 
 
       <!-- 分页 -->
       <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -202,6 +199,11 @@ import { fetchBoundFamilies, fetchFamilyOverview, fetchChildTasks, fetchPendingR
 
 
 export default {
 export default {
   name: 'GuideFamilyTask',
   name: 'GuideFamilyTask',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 8 - 4
cfc-web/src/views/GuidePackages.vue

@@ -26,8 +26,7 @@
       </el-form>
       </el-form>
 
 
       <!-- 任务模板列表 -->
       <!-- 任务模板列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);" :data="tableData" border v-loading="loading">
+      <el-table :max-height="tableHeight" :data="tableData" border v-loading="loading">
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="name" label="任务模板名称" min-width="150"></el-table-column>
         <el-table-column prop="name" label="任务模板名称" min-width="150"></el-table-column>
         <el-table-column prop="cycleDays" label="周期" width="80">
         <el-table-column prop="cycleDays" label="周期" width="80">
@@ -68,7 +67,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </el-card>
     </el-card>
 
 
     <!-- 编辑弹窗 -->
     <!-- 编辑弹窗 -->
@@ -123,7 +122,7 @@
       <div style="margin-bottom: 20px">
       <div style="margin-bottom: 20px">
         <el-button type="primary" size="small" @click="handleAddItem">添加任务项</el-button>
         <el-button type="primary" size="small" @click="handleAddItem">添加任务项</el-button>
       </div>
       </div>
-      <el-table :data="items" border>
+      <el-table :data="items" border :max-height="300">
         <el-table-column prop="taskName" label="任务名称" min-width="120"></el-table-column>
         <el-table-column prop="taskName" label="任务名称" min-width="120"></el-table-column>
         <el-table-column prop="points" label="积分" width="60"></el-table-column>
         <el-table-column prop="points" label="积分" width="60"></el-table-column>
         <el-table-column prop="frequency" label="频率" width="80"></el-table-column>
         <el-table-column prop="frequency" label="频率" width="80"></el-table-column>
@@ -194,6 +193,11 @@ import { getMyPackages, getGuidePackage, getGuidePackageItems, createPackage, up
 
 
 export default {
 export default {
   name: 'GuidePackages',
   name: 'GuidePackages',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 0 - 4
cfc-web/src/views/Layout.vue

@@ -694,8 +694,6 @@ export default {
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
   min-height: 0;
   min-height: 0;
-  overflow-y: auto;
-  overflow-x: hidden;
 }
 }
 
 
 /* ========== 全局 .admin-page 样式 ========== */
 /* ========== 全局 .admin-page 样式 ========== */
@@ -719,7 +717,6 @@ export default {
   flex-direction: column;
   flex-direction: column;
   min-height: 0;
   min-height: 0;
   padding: 20px;
   padding: 20px;
-  overflow-y: auto;
 }
 }
 /* 当 admin-page > div > el-card(如 ArticleManage 的嵌套 div) */
 /* 当 admin-page > div > el-card(如 ArticleManage 的嵌套 div) */
 .admin-page > div:only-child {
 .admin-page > div:only-child {
@@ -740,6 +737,5 @@ export default {
   flex-direction: column;
   flex-direction: column;
   min-height: 0;
   min-height: 0;
   padding: 20px;
   padding: 20px;
-  overflow-y: auto;
 }
 }
 </style>
 </style>

+ 7 - 3
cfc-web/src/views/OperationLogs.vue

@@ -35,8 +35,7 @@
 
 
     <!-- 日志列表 -->
     <!-- 日志列表 -->
     <el-card>
     <el-card>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);" :data="logs" v-loading="loading" stripe>
+      <el-table :max-height="tableHeight" :data="logs" v-loading="loading" stripe>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
         <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
         <el-table-column prop="nickname" label="用户名" width="120"></el-table-column>
         <el-table-column prop="nickname" label="用户名" width="120"></el-table-column>
@@ -68,7 +67,7 @@
             <el-button size="mini" @click="handleViewDetail(row)">详情</el-button>
             <el-button size="mini" @click="handleViewDetail(row)">详情</el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
 
 
       <!-- 分页 -->
       <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -107,6 +106,11 @@ import { getOperationLogs } from '@/api/operationLog'
 
 
 export default {
 export default {
   name: 'OperationLogs',
   name: 'OperationLogs',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 7 - 1
cfc-web/src/views/Points.vue

@@ -41,7 +41,7 @@
       </el-form>
       </el-form>
 
 
       <!-- 积分流水列表 -->
       <!-- 积分流水列表 -->
-      <el-table :data="tableData" border v-loading="loading" style="width: 100%">
+      <el-table :data="tableData" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="childId" label="孩子ID" width="100"></el-table-column>
         <el-table-column prop="childId" label="孩子ID" width="100"></el-table-column>
         <el-table-column prop="amount" label="积分变动" width="120">
         <el-table-column prop="amount" label="积分变动" width="120">
@@ -91,6 +91,11 @@ import { getPointsLogs } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'Points',
   name: 'Points',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -143,6 +148,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadPointsLogs()
       this.loadPointsLogs()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 12 - 7
cfc-web/src/views/Rewards.vue

@@ -52,8 +52,7 @@
 
 
           <!-- 家庭选择对话框 -->
           <!-- 家庭选择对话框 -->
           <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
           <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
-            <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);cursor: pointer" :data="familyList" border v-loading="familyLoading" @row-click="selectFamily">
+            <el-table :max-height="tableHeight" style="cursor: pointer" :data="familyList" border v-loading="familyLoading" @row-click="selectFamily">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
               <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
               <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
               <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
@@ -62,7 +61,7 @@
                   {{ formatDate(scope.row.createdAt) }}
                   {{ formatDate(scope.row.createdAt) }}
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-            </el-table></div>
+            </el-table>
             <el-pagination
             <el-pagination
               style="margin-top: 15px; text-align: right"
               style="margin-top: 15px; text-align: right"
               @current-change="loadFamilies"
               @current-change="loadFamilies"
@@ -73,9 +72,9 @@
             ></el-pagination>
             ></el-pagination>
           </el-dialog>
           </el-dialog>
 
 
-          <el-table :data="tableData" border v-loading="loading" style="width: 100%">
-            <el-table-column prop="id" label="ID" width="80"></el-table-column>
-            <el-table-column prop="title" label="奖励名称" min-width="200"></el-table-column>
+<el-table :data="tableData" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
+             <el-table-column prop="id" label="ID" width="80"></el-table-column>
+             <el-table-column prop="title" label="奖励名称" min-width="200"></el-table-column>
             <el-table-column prop="pointsRequired" label="所需积分" width="120">
             <el-table-column prop="pointsRequired" label="所需积分" width="120">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 <el-tag type="warning">{{ scope.row.pointsRequired }}</el-tag>
                 <el-tag type="warning">{{ scope.row.pointsRequired }}</el-tag>
@@ -134,7 +133,7 @@
           <el-button type="primary" size="small" style="margin-bottom: 15px" @click="showCreateTemplate">
           <el-button type="primary" size="small" style="margin-bottom: 15px" @click="showCreateTemplate">
             新建模板
             新建模板
           </el-button>
           </el-button>
-          <el-table :data="templates" border v-loading="loadingTemplates" style="width: 100%">
+          <el-table :data="templates" border v-loading="loadingTemplates" style="width: 100%" :max-height="tableHeight">
             <el-table-column prop="id" label="ID" width="80"></el-table-column>
             <el-table-column prop="id" label="ID" width="80"></el-table-column>
             <el-table-column prop="title" label="模板名称" min-width="200"></el-table-column>
             <el-table-column prop="title" label="模板名称" min-width="200"></el-table-column>
             <el-table-column prop="pointsRequired" label="所需积分" width="120">
             <el-table-column prop="pointsRequired" label="所需积分" width="120">
@@ -190,6 +189,11 @@ import { getRewardsList, getRewardTemplates, createRewardTemplate, deleteRewardT
 
 
 export default {
 export default {
   name: 'Rewards',
   name: 'Rewards',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       activeTab: 'list',
       activeTab: 'list',
@@ -321,6 +325,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadRewards()
       this.loadRewards()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 8 - 3
cfc-web/src/views/TaskTemplates.vue

@@ -54,12 +54,12 @@
       </el-form>
       </el-form>
 
 
       <!-- 模板列表 -->
       <!-- 模板列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
       <el-table
       <el-table
         :data="tableData"
         :data="tableData"
         border
         border
         v-loading="loading"
         v-loading="loading"
-        style="width: 100%;max-height:calc(100vh - 300px);"
+        style="width: 100%"
+        :max-height="tableHeight"
       >
       >
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="title" label="模板名称" min-width="200"></el-table-column>
         <el-table-column prop="title" label="模板名称" min-width="200"></el-table-column>
@@ -141,7 +141,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
-      </div>
 
 
       <!-- 分页 -->
       <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -262,6 +261,11 @@ import { getTaskTemplateList, createTaskTemplate, updateTaskTemplate, deleteTask
 
 
 export default {
 export default {
   name: 'TaskTemplates',
   name: 'TaskTemplates',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -356,6 +360,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadTemplates()
       this.loadTemplates()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 8 - 2
cfc-web/src/views/Tasks.vue

@@ -57,7 +57,7 @@
 
 
       <!-- 家庭选择对话框 -->
       <!-- 家庭选择对话框 -->
       <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
       <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
-        <el-table :data="familyList" border v-loading="familyLoading" @row-click="selectFamily" style="cursor: pointer">
+        <el-table :data="familyList" border v-loading="familyLoading" @row-click="selectFamily" style="cursor: pointer" :max-height="300">
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
           <el-table-column prop="id" label="ID" width="80"></el-table-column>
           <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
           <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
           <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
           <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
@@ -94,7 +94,7 @@
       </el-row>
       </el-row>
 
 
       <!-- 任务列表 -->
       <!-- 任务列表 -->
-      <el-table :data="tableData" border v-loading="loading" style="width: 100%">
+      <el-table :data="tableData" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="title" label="任务名称" min-width="200"></el-table-column>
         <el-table-column prop="title" label="任务名称" min-width="200"></el-table-column>
         <el-table-column prop="points" label="积分" width="80">
         <el-table-column prop="points" label="积分" width="80">
@@ -150,6 +150,11 @@ import { getTasksList, getTaskStats, getFamilyList } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'Tasks',
   name: 'Tasks',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -262,6 +267,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadTasks()
       this.loadTasks()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 5 - 3
cfc-web/src/views/TeacherConsult.vue

@@ -20,8 +20,7 @@
       </el-form>
       </el-form>
 
 
       <!-- 咨询列表 -->
       <!-- 咨询列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);" :data="messages" border v-loading="loading">
+      <el-table :max-height="tableHeight" :data="messages" border v-loading="loading">
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="familyId" label="家庭ID" width="80"></el-table-column>
         <el-table-column prop="familyId" label="家庭ID" width="80"></el-table-column>
         <el-table-column label="家长" width="100">
         <el-table-column label="家长" width="100">
@@ -47,7 +46,7 @@
             </el-button>
             </el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
 
 
       <!-- 分页 -->
       <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -113,6 +112,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     replyDialogTitle() {
     replyDialogTitle() {
       if (!this.currentMessage) return '回复咨询'
       if (!this.currentMessage) return '回复咨询'
       return this.currentMessage.status === 'pending' ? '回复咨询' : '查看回复'
       return this.currentMessage.status === 'pending' ? '回复咨询' : '查看回复'

+ 10 - 3
cfc-web/src/views/Users.vue

@@ -50,11 +50,12 @@
       </el-form>
       </el-form>
 
 
       <!-- 用户列表 -->
       <!-- 用户列表 -->
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);width: 100%" 
+<el-table 
         :data="tableData" 
         :data="tableData" 
         border 
         border 
         v-loading="loading"
         v-loading="loading"
+        style="width: 100%"
+        :max-height="tableHeight"
       >
       >
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="150"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="150"></el-table-column>
@@ -93,7 +94,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
 
 
       <!-- 分页 -->
       <!-- 分页 -->
       <el-pagination
       <el-pagination
@@ -182,6 +183,11 @@ import { getRoleLabel } from '@/utils/permissions'
 
 
 export default {
 export default {
   name: 'Users',
   name: 'Users',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,
@@ -270,6 +276,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadUsers()
       this.loadUsers()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 11 - 8
cfc-web/src/views/Wishes.vue

@@ -48,8 +48,7 @@
           <!-- 待定价列表 -->
           <!-- 待定价列表 -->
           <div v-if="draftWishes.length > 0" class="wish-section">
           <div v-if="draftWishes.length > 0" class="wish-section">
             <div class="section-title">📝 待定价</div>
             <div class="section-title">📝 待定价</div>
-            <div style="overflow:auto;max-height:calc(100vh - 300px);">
-<el-table style="max-height:calc(100vh - 300px);width: 100%" :data="draftWishes" border v-loading="loading">
+<el-table style="width: 100%" :max-height="tableHeight" :data="draftWishes" border v-loading="loading">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
@@ -72,13 +71,13 @@
                   </el-dropdown>
                   </el-dropdown>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-            </el-table></div>
+            </el-table>
           </div>
           </div>
 
 
           <!-- 待审批兑换列表 -->
           <!-- 待审批兑换列表 -->
           <div v-if="pendingExchangeWishes.length > 0" class="wish-section">
           <div v-if="pendingExchangeWishes.length > 0" class="wish-section">
             <div class="section-title">⏳ 待审批兑换</div>
             <div class="section-title">⏳ 待审批兑换</div>
-            <el-table :data="pendingExchangeWishes" border v-loading="loading" style="width: 100%">
+            <el-table :data="pendingExchangeWishes" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
@@ -111,7 +110,7 @@
           <!-- 待兑现列表 -->
           <!-- 待兑现列表 -->
           <div v-if="approvedWishes.length > 0" class="wish-section">
           <div v-if="approvedWishes.length > 0" class="wish-section">
             <div class="section-title">📦 待兑现</div>
             <div class="section-title">📦 待兑现</div>
-            <el-table :data="approvedWishes" border v-loading="loading" style="width: 100%">
+            <el-table :data="approvedWishes" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
@@ -136,7 +135,7 @@
           <!-- 待收货列表 -->
           <!-- 待收货列表 -->
           <div v-if="exchangingWishes.length > 0" class="wish-section">
           <div v-if="exchangingWishes.length > 0" class="wish-section">
             <div class="section-title">🎁 待收货确认</div>
             <div class="section-title">🎁 待收货确认</div>
-            <el-table :data="exchangingWishes" border v-loading="loading" style="width: 100%">
+            <el-table :data="exchangingWishes" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
               <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
@@ -198,7 +197,7 @@
 
 
           <!-- 家庭选择对话框 -->
           <!-- 家庭选择对话框 -->
           <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
           <el-dialog title="选择家庭" :visible.sync="familyDialogVisible" width="600px">
-            <el-table :data="familyList" border v-loading="familyLoading" @row-click="selectFamily" style="cursor: pointer">
+            <el-table :data="familyList" border v-loading="familyLoading" @row-click="selectFamily" style="cursor: pointer" :max-height="300">
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="id" label="ID" width="80"></el-table-column>
               <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
               <el-table-column prop="name" label="家庭名称" min-width="150"></el-table-column>
               <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
               <el-table-column prop="inviteCode" label="邀请码" width="120"></el-table-column>
@@ -213,7 +212,7 @@
             ></el-pagination>
             ></el-pagination>
           </el-dialog>
           </el-dialog>
 
 
-          <el-table :data="tableData" border v-loading="loading" style="width: 100%">
+          <el-table :data="tableData" border v-loading="loading" style="width: 100%" :max-height="tableHeight">
             <el-table-column prop="id" label="ID" width="80"></el-table-column>
             <el-table-column prop="id" label="ID" width="80"></el-table-column>
             <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
             <el-table-column prop="childName" label="孩子" width="100"></el-table-column>
             <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
             <el-table-column prop="title" label="心愿名称" min-width="200"></el-table-column>
@@ -323,6 +322,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     draftWishes() {
     draftWishes() {
       return this.pendingWishes.filter(w => w.status === 'draft')
       return this.pendingWishes.filter(w => w.status === 'draft')
     },
     },
@@ -436,6 +438,7 @@ export default {
     },
     },
     handleSizeChange(val) {
     handleSizeChange(val) {
       this.pagination.size = val
       this.pagination.size = val
+      this.pagination.current = 1
       this.loadWishes()
       this.loadWishes()
     },
     },
     handleCurrentChange(val) {
     handleCurrentChange(val) {

+ 8 - 4
cfc-web/src/views/admin/Activities.vue

@@ -57,8 +57,7 @@
         <el-button type="primary" size="mini" @click="handleSearch">查询</el-button>
         <el-button type="primary" size="mini" @click="handleSearch">查询</el-button>
         <el-button size="mini" @click="resetSearch">重置</el-button>
         <el-button size="mini" @click="resetSearch">重置</el-button>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-        <el-table :data="activities" v-loading="loading" border stripe style="min-width:900px;">
+        <el-table :data="activities" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column label="封面" width="80">
         <el-table-column label="封面" width="80">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -109,7 +108,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        </el-table></div>
+        </el-table>
       <el-pagination
       <el-pagination
         v-if="total > 0"
         v-if="total > 0"
         @size-change="handleSizeChange"
         @size-change="handleSizeChange"
@@ -130,7 +129,7 @@
       width="800px"
       width="800px"
       @closed="regDialogVisible = false"
       @closed="regDialogVisible = false"
     >
     >
-      <el-table :data="registrations" v-loading="regLoading" border stripe>
+      <el-table :data="registrations" v-loading="regLoading" border stripe :max-height="300">
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="userId" label="用户ID" width="70" />
         <el-table-column prop="userId" label="用户ID" width="70" />
         <el-table-column prop="childId" label="孩子ID" width="70" />
         <el-table-column prop="childId" label="孩子ID" width="70" />
@@ -182,6 +181,11 @@ const DIMENSION_MAP = {
 
 
 export default {
 export default {
   name: 'Activities',
   name: 'Activities',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 5 - 3
cfc-web/src/views/admin/ActivityRegistrationReview.vue

@@ -17,8 +17,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap-sm">
     <div class="table-scroll-wrap-sm">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="filteredList" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="filteredList" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="userId" label="用户ID" width="70" />
       <el-table-column prop="userId" label="用户ID" width="70" />
       <el-table-column prop="childId" label="孩子ID" width="70" />
       <el-table-column prop="childId" label="孩子ID" width="70" />
@@ -41,7 +40,7 @@
           <span v-else style="color: #999;">已处理</span>
           <span v-else style="color: #999;">已处理</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      </el-table></div>
+      </el-table>
     </div>
     </div>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
@@ -74,6 +73,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredList() {
     filteredList() {
       if (!this.keyword) return this.list
       if (!this.keyword) return this.list
       var kw = this.keyword.toLowerCase()
       var kw = this.keyword.toLowerCase()

+ 7 - 3
cfc-web/src/views/admin/ActivityReview.vue

@@ -23,8 +23,7 @@
           <el-button size="mini" @click="resetSearch">重置</el-button>
           <el-button size="mini" @click="resetSearch">重置</el-button>
         </div>
         </div>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-        <el-table :data="pendingActivities" v-loading="loading" border stripe style="min-width:900px;">
+        <el-table :data="pendingActivities" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="80" />
       <el-table-column prop="id" label="ID" width="80" />
       <el-table-column prop="title" label="活动标题" min-width="200" show-overflow-tooltip />
       <el-table-column prop="title" label="活动标题" min-width="200" show-overflow-tooltip />
       <el-table-column prop="applicant" label="申请人" width="120" />
       <el-table-column prop="applicant" label="申请人" width="120" />
@@ -54,7 +53,7 @@
             <span v-else class="no-op">—</span>
             <span v-else class="no-op">—</span>
           </template>
           </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
     <el-pagination
     <el-pagination
         v-if="total > 0"
         v-if="total > 0"
         @current-change="handlePageChange"
         @current-change="handlePageChange"
@@ -73,6 +72,11 @@ import { getActivityList, reviewActivity } from '@/api/activity'
 
 
 export default {
 export default {
   name: 'ActivityReview',
   name: 'ActivityReview',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 4 - 1
cfc-web/src/views/admin/ArticleCategory.vue

@@ -9,7 +9,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-      <el-table :data="filteredData" v-loading="loading" border stripe>
+      <el-table :data="filteredData" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column label="图标" width="80">
         <el-table-column label="图标" width="80">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -115,6 +115,9 @@ export default {
     this.loadData()
     this.loadData()
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.categories
       if (!this.keyword) return this.categories
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 6 - 1
cfc-web/src/views/admin/ArticleManage.vue

@@ -56,7 +56,7 @@
       </div>
       </div>
 
 
       <div class="table-scroll-wrap-lg">
       <div class="table-scroll-wrap-lg">
-        <el-table :data="list" v-loading="loading" border stripe style="max-height:calc(100vh - 300px);" :max-height="600">
+        <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
           <el-table-column prop="id" label="ID" width="70" />
           <el-table-column prop="id" label="ID" width="70" />
         <el-table-column label="标题" min-width="220">
         <el-table-column label="标题" min-width="220">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -253,6 +253,11 @@ import { getTagList } from '@/api/dimension.js'
 
 
 export default {
 export default {
   name: 'ArticleManage',
   name: 'ArticleManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 5 - 3
cfc-web/src/views/admin/Assessment.vue

@@ -28,8 +28,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="filteredData" border stripe>
+      <el-table :max-height="tableHeight" :data="filteredData" border stripe>
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="title" label="标题" />
         <el-table-column prop="title" label="标题" />
         <el-table-column prop="content" label="内容" show-overflow-tooltip />
         <el-table-column prop="content" label="内容" show-overflow-tooltip />
@@ -56,7 +55,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
       </div>
       </div>
     </el-card>
     </el-card>
 
 
@@ -104,6 +103,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.materials
       if (!this.keyword) return this.materials
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 6 - 3
cfc-web/src/views/admin/AssessmentAssign.vue

@@ -6,8 +6,7 @@
         <el-button type="primary" size="small" icon="el-icon-refresh" @click="loadList">刷新</el-button>
         <el-button type="primary" size="small" icon="el-icon-refresh" @click="loadList">刷新</el-button>
       </div>
       </div>
 
 
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe empty-text="暂无可分配记录">
+        <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe empty-text="暂无可分配记录">
           <el-table-column prop="id" label="ID" width="70" />
           <el-table-column prop="id" label="ID" width="70" />
           <el-table-column label="用户" width="120">
           <el-table-column label="用户" width="120">
             <template slot-scope="{ row }">{{ row.userName }}</template>
             <template slot-scope="{ row }">{{ row.userName }}</template>
@@ -38,7 +37,6 @@
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
-      </div>
 
 
       <el-pagination
       <el-pagination
         @size-change="handleSizeChange"
         @size-change="handleSizeChange"
@@ -89,6 +87,11 @@ import { getPendingAssessmentList, getAvailableGuides, assignGuide } from '@/api
 
 
 export default {
 export default {
   name: 'AssessmentAssign',
   name: 'AssessmentAssign',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 6 - 1
cfc-web/src/views/admin/AssessmentPlanRules.vue

@@ -5,7 +5,7 @@
       <el-button type="primary" @click="showDialog(null)">新增规则</el-button>
       <el-button type="primary" @click="showDialog(null)">新增规则</el-button>
     </div>
     </div>
 
 
-    <el-table :data="rules" border stripe style="width: 100%">
+    <el-table :data="rules" border stripe style="width: 100%" :max-height="tableHeight">
       <el-table-column prop="dimension" label="维度" width="120" />
       <el-table-column prop="dimension" label="维度" width="120" />
       <el-table-column label="分数区间" width="140">
       <el-table-column label="分数区间" width="140">
         <template slot-scope="{ row }">{{ row.scoreMin }} - {{ row.scoreMax }}</template>
         <template slot-scope="{ row }">{{ row.scoreMin }} - {{ row.scoreMax }}</template>
@@ -65,6 +65,11 @@
 import { listPlanRules, savePlanRule, deletePlanRule } from '@/api/assessment'
 import { listPlanRules, savePlanRule, deletePlanRule } from '@/api/assessment'
 
 
 export default {
 export default {
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       rules: [],
       rules: [],

+ 7 - 2
cfc-web/src/views/admin/AssessmentProducts.vue

@@ -26,7 +26,7 @@
         </div>
         </div>
       </div>
       </div>
 
 
-      <el-table :data="list" v-loading="loading" border stripe>
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column label="商品图片" width="80">
         <el-table-column label="商品图片" width="80">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -102,6 +102,11 @@ import { getProductList, reviewProduct, shelveProduct } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'AssessmentProducts',
   name: 'AssessmentProducts',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -181,7 +186,7 @@ export default {
       if (price === 0) return '免费'
       if (price === 0) return '免费'
       return '¥' + (price / 100).toFixed(2)
       return '¥' + (price / 100).toFixed(2)
     },
     },
-    handleSizeChange(val) { this.size = val; this.loadList() },
+    handleSizeChange(val) { this.size = val; this.page = 1; this.loadList() },
     handlePageChange(val) { this.page = val; this.loadList() }
     handlePageChange(val) { this.page = val; this.loadList() }
   }
   }
 }
 }

+ 4 - 1
cfc-web/src/views/admin/BaziConfigs.vue

@@ -9,7 +9,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap">
       <div class="table-scroll-wrap">
-      <el-table :data="filteredData" stripe
+      <el-table :data="filteredData" stripe :max-height="tableHeight"
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="stemOrBranch" label="天干/地支" width="100"></el-table-column>
         <el-table-column prop="stemOrBranch" label="天干/地支" width="100"></el-table-column>
         <el-table-column prop="type" label="类型" width="80">
         <el-table-column prop="type" label="类型" width="80">
@@ -119,6 +119,9 @@ export default {
     this.loadData()
     this.loadData()
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.configs
       if (!this.keyword) return this.configs
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 4 - 1
cfc-web/src/views/admin/BloodTypeConfigs.vue

@@ -8,7 +8,7 @@
           <el-button type="primary" size="small" @click="handleCreate">+ 添加配置</el-button>
           <el-button type="primary" size="small" @click="handleCreate">+ 添加配置</el-button>
         </div>
         </div>
       </div>
       </div>
-      <div class="table-scroll-wrap"><el-table :data="filteredData" stripe>
+      <div class="table-scroll-wrap"><el-table :data="filteredData" stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="bloodType" label="血型" width="80"></el-table-column>
         <el-table-column prop="bloodType" label="血型" width="80"></el-table-column>
         <el-table-column prop="description" label="性格描述" min-width="200"></el-table-column>
         <el-table-column prop="description" label="性格描述" min-width="200"></el-table-column>
@@ -97,6 +97,9 @@ export default {
     this.loadData()
     this.loadData()
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.configs
       if (!this.keyword) return this.configs
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 13 - 4
cfc-web/src/views/admin/CouponManagement.vue

@@ -11,8 +11,7 @@
       </div>
       </div>
 
 
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+        <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="name" label="名称" min-width="140" show-overflow-tooltip />
         <el-table-column prop="name" label="名称" min-width="140" show-overflow-tooltip />
         <el-table-column label="类型" width="90">
         <el-table-column label="类型" width="90">
@@ -54,12 +53,12 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        </el-table></div>
+        </el-table>
       </div>
       </div>
 
 
       <el-pagination
       <el-pagination
         @current-change="onPageChange"
         @current-change="onPageChange"
-        @size-change="onPageChange"
+        @size-change="onSizeChange"
         :current-page="page"
         :current-page="page"
         :page-size="size"
         :page-size="size"
         :total="total"
         :total="total"
@@ -143,6 +142,11 @@ import { getCouponList, createCoupon, updateCoupon, deleteCoupon, batchIssueCoup
 
 
 export default {
 export default {
   name: 'CouponManagement',
   name: 'CouponManagement',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -202,6 +206,11 @@ export default {
       this.page = 1
       this.page = 1
       this.loadData()
       this.loadData()
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadData()
+    },
     onPageChange(p) {
     onPageChange(p) {
       if (p) this.page = p
       if (p) this.page = p
       this.loadData()
       this.loadData()

+ 10 - 2
cfc-web/src/views/admin/EcomSupplierManage.vue

@@ -9,7 +9,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap">
     <div class="table-scroll-wrap">
-    <el-table :data="list" v-loading="loading" border stripe>
+    <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="name" label="供应商名称" min-width="160" />
       <el-table-column prop="name" label="供应商名称" min-width="160" />
       <el-table-column prop="contactName" label="联系人" width="120" />
       <el-table-column prop="contactName" label="联系人" width="120" />
@@ -29,7 +29,7 @@
     </el-table></div>
     </el-table></div>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -94,6 +94,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     dialogTitle() {
     dialogTitle() {
       return this.editId ? '编辑供应商' : '新增供应商'
       return this.editId ? '编辑供应商' : '新增供应商'
     }
     }
@@ -118,6 +121,11 @@ export default {
       this.page = 1
       this.page = 1
       this.loadList()
       this.loadList()
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(val) {
     onPageChange(val) {
       if (typeof val === 'number') {
       if (typeof val === 'number') {
         this.page = val
         this.page = val

+ 14 - 4
cfc-web/src/views/admin/EmotionAlertManage.vue

@@ -9,8 +9,7 @@
         <el-radio-button label="true">已处理</el-radio-button>
         <el-radio-button label="true">已处理</el-radio-button>
       </el-radio-group>
       </el-radio-group>
       </div>
       </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+    <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column prop="childId" label="孩子ID" width="90" />
       <el-table-column prop="childId" label="孩子ID" width="90" />
       <el-table-column label="告警类型" width="140">
       <el-table-column label="告警类型" width="140">
@@ -53,10 +52,10 @@
           <span v-else class="resolved-text">-</span>
           <span v-else class="resolved-text">-</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -71,6 +70,12 @@
 import { getEmotionAlertList, resolveEmotionAlert } from '@/api/admin'
 import { getEmotionAlertList, resolveEmotionAlert } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'EmotionAlertManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -113,6 +118,11 @@ export default {
       this.page = 1
       this.page = 1
       this.loadList()
       this.loadList()
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(val) {
     onPageChange(val) {
       this.page = val
       this.page = val
       this.loadList()
       this.loadList()

+ 13 - 4
cfc-web/src/views/admin/EnergyRuleManagement.vue

@@ -11,8 +11,7 @@
         <el-button type="primary" icon="el-icon-plus" @click="showDialog(null)">新增规则</el-button>
         <el-button type="primary" icon="el-icon-plus" @click="showDialog(null)">新增规则</el-button>
       </div>
       </div>
       </div>
       </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+    <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="ruleCode" label="规则编码" width="140" />
       <el-table-column prop="ruleCode" label="规则编码" width="140" />
       <el-table-column prop="ruleName" label="规则名称" min-width="160" show-overflow-tooltip />
       <el-table-column prop="ruleName" label="规则名称" min-width="160" show-overflow-tooltip />
@@ -43,10 +42,10 @@
           </el-dropdown>
           </el-dropdown>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -103,6 +102,11 @@ import { getEnergyRuleList, createEnergyRule, updateEnergyRule, deleteEnergyRule
 
 
 export default {
 export default {
   name: 'EnergyRuleManagement',
   name: 'EnergyRuleManagement',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -146,6 +150,11 @@ export default {
       } catch (e) { console.error(e) }
       } catch (e) { console.error(e) }
       this.loading = false
       this.loading = false
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(p) {
     onPageChange(p) {
       this.page = typeof p === 'number' ? p : 1
       this.page = typeof p === 'number' ? p : 1
       this.loadList()
       this.loadList()

+ 4 - 1
cfc-web/src/views/admin/EnergySandbox.vue

@@ -41,7 +41,7 @@
         <span>家庭成员数据</span>
         <span>家庭成员数据</span>
         <el-input v-model="memberKeyword" placeholder="搜索成员姓名..." prefix-icon="el-icon-search" size="small" clearable style="float: right; width: 200px;" />
         <el-input v-model="memberKeyword" placeholder="搜索成员姓名..." prefix-icon="el-icon-search" size="small" clearable style="float: right; width: 200px;" />
       </div>
       </div>
-      <el-table :data="filteredMembers" border style="width: 100%">
+      <el-table :data="filteredMembers" border style="width: 100%" :max-height="tableHeight">
         <el-table-column prop="memberType" label="成员类型" width="100"></el-table-column>
         <el-table-column prop="memberType" label="成员类型" width="100"></el-table-column>
         <el-table-column prop="name" label="姓名" width="120"></el-table-column>
         <el-table-column prop="name" label="姓名" width="120"></el-table-column>
         <el-table-column prop="bodyScore" label="身" width="80" align="center">
         <el-table-column prop="bodyScore" label="身" width="80" align="center">
@@ -111,6 +111,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredMembers() {
     filteredMembers() {
       const members = this.sandboxData.members || []
       const members = this.sandboxData.members || []
       if (!this.memberKeyword) return members
       if (!this.memberKeyword) return members

+ 7 - 2
cfc-web/src/views/admin/FamilyEarnings.vue

@@ -9,7 +9,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap">
     <div class="table-scroll-wrap">
-      <el-table :data="list" v-loading="loading" border stripe @row-click="showDetail">
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight" @row-click="showDetail">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="familyId" label="家庭ID" width="100" />
         <el-table-column prop="familyId" label="家庭ID" width="100" />
         <el-table-column label="累计推荐收入" width="140">
         <el-table-column label="累计推荐收入" width="140">
@@ -61,7 +61,7 @@
         </el-descriptions>
         </el-descriptions>
 
 
         <h4 style="margin:20px 0 10px">成员贡献</h4>
         <h4 style="margin:20px 0 10px">成员贡献</h4>
-        <el-table :data="detail.members || []" border stripe size="small" v-if="detail && detail.members && detail.members.length > 0">
+        <el-table :data="detail.members || []" border stripe size="small" :max-height="300" v-if="detail && detail.members && detail.members.length > 0">
           <el-table-column label="用户ID" prop="userId" width="80" />
           <el-table-column label="用户ID" prop="userId" width="80" />
           <el-table-column label="昵称" prop="nickname" min-width="120" />
           <el-table-column label="昵称" prop="nickname" min-width="120" />
           <el-table-column label="已分配" width="120">
           <el-table-column label="已分配" width="120">
@@ -96,6 +96,11 @@
 import { getFamilyEarningsList, getFamilyEarningsDetail } from '@/api/admin'
 import { getFamilyEarningsList, getFamilyEarningsDetail } from '@/api/admin'
 
 
 export default {
 export default {
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 6 - 1
cfc-web/src/views/admin/FamilyEarningsWithdraw.vue

@@ -15,7 +15,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap">
     <div class="table-scroll-wrap">
-      <el-table :data="list" v-loading="loading" border stripe>
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="familyId" label="家庭ID" width="90" />
         <el-table-column prop="familyId" label="家庭ID" width="90" />
         <el-table-column label="类型" width="100">
         <el-table-column label="类型" width="100">
@@ -56,6 +56,11 @@
 import { getFamilyEarningsRecords } from '@/api/admin'
 import { getFamilyEarningsRecords } from '@/api/admin'
 
 
 export default {
 export default {
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 7 - 3
cfc-web/src/views/admin/Foods.vue

@@ -28,8 +28,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-lg">
       <div class="table-scroll-wrap-lg">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+        <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="name" label="名称" />
         <el-table-column prop="name" label="名称" />
         <el-table-column prop="category" label="分类" width="100" />
         <el-table-column prop="category" label="分类" width="100" />
@@ -61,7 +60,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        </el-table></div>
+        </el-table>
       </div>
       </div>
     </el-card>
     </el-card>
 
 
@@ -136,6 +135,11 @@ import { getFoodDetail, saveFoodMonths } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'Foods',
   name: 'Foods',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 7 - 3
cfc-web/src/views/admin/GrowthTaskManagement.vue

@@ -20,8 +20,7 @@
           <el-button type="primary" size="mini" @click="openCreate">创建任务</el-button>
           <el-button type="primary" size="mini" @click="openCreate">创建任务</el-button>
         </div>
         </div>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="tasks" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="tasks" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="name" label="任务名称" min-width="150" show-overflow-tooltip />
         <el-table-column prop="name" label="任务名称" min-width="150" show-overflow-tooltip />
         <el-table-column prop="dimensionCode" label="关联维度" width="100">
         <el-table-column prop="dimensionCode" label="关联维度" width="100">
@@ -68,7 +67,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
       <el-pagination
       <el-pagination
         v-if="total > 0"
         v-if="total > 0"
         @size-change="handleSizeChange"
         @size-change="handleSizeChange"
@@ -174,6 +173,11 @@ const DIMENSION_CONFIG = {
 export default {
 export default {
   name: 'GrowthTaskManagement',
   name: 'GrowthTaskManagement',
   components: { DimensionWeightPicker },
   components: { DimensionWeightPicker },
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 5 - 3
cfc-web/src/views/admin/KnowledgeTag.vue

@@ -8,8 +8,7 @@
           <el-button type="primary" size="small" @click="handleCreate">+ 新增标签</el-button>
           <el-button type="primary" size="small" @click="handleCreate">+ 新增标签</el-button>
         </div>
         </div>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="filteredTags" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="filteredTags" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="tagName" label="标签名称" min-width="200" />
         <el-table-column prop="tagName" label="标签名称" min-width="200" />
         <el-table-column label="类型" width="140">
         <el-table-column label="类型" width="140">
@@ -33,7 +32,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </el-card>
     </el-card>
 
 
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑标签' : '新增标签'" width="450px" :close-on-click-modal="false">
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑标签' : '新增标签'" width="450px" :close-on-click-modal="false">
@@ -89,6 +88,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredTags() {
     filteredTags() {
       if (!this.keyword) return this.tags
       if (!this.keyword) return this.tags
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 8 - 6
cfc-web/src/views/admin/MembershipCenter.vue

@@ -33,8 +33,7 @@
       <div slot="header">
       <div slot="header">
         <span>会员等级配置</span>
         <span>会员等级配置</span>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="levels" v-loading="levelsLoading" border stripe>
+      <el-table :max-height="tableHeight" :data="levels" v-loading="levelsLoading" border stripe>
         <el-table-column prop="levelCode" label="等级编码" width="120">
         <el-table-column prop="levelCode" label="等级编码" width="120">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
             <el-tag :type="levelTagType(row.levelCode)" size="mini">{{ row.levelCode }}</el-tag>
             <el-tag :type="levelTagType(row.levelCode)" size="mini">{{ row.levelCode }}</el-tag>
@@ -76,7 +75,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </el-card>
     </el-card>
 
 
     <!-- 升级记录 -->
     <!-- 升级记录 -->
@@ -84,8 +83,7 @@
       <div slot="header">
       <div slot="header">
         <span>会员升级记录</span>
         <span>会员升级记录</span>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="upgradeRecords" v-loading="recordsLoading" border stripe style="max-height:calc(100vh - 300px);">
+    <el-table :data="upgradeRecords" v-loading="recordsLoading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="userId" label="用户ID" width="80" />
         <el-table-column prop="userId" label="用户ID" width="80" />
         <el-table-column label="从" width="100">
         <el-table-column label="从" width="100">
@@ -111,7 +109,6 @@
           <template slot-scope="{ row }">{{ formatTime(row.createdAt) }}</template>
           <template slot-scope="{ row }">{{ formatTime(row.createdAt) }}</template>
         </el-table-column>
         </el-table-column>
     </el-table>
     </el-table>
-    </div>
     <el-pagination
     <el-pagination
         v-if="recordsTotal > 0"
         v-if="recordsTotal > 0"
         @size-change="handleRecordSizeChange"
         @size-change="handleRecordSizeChange"
@@ -152,6 +149,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'MembershipCenter',
   name: 'MembershipCenter',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       // overview
       // overview

+ 8 - 3
cfc-web/src/views/admin/OrderManage.vue

@@ -31,8 +31,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap-lg">
     <div class="table-scroll-wrap-lg">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="orderNo" label="订单号" width="180" />
       <el-table-column prop="orderNo" label="订单号" width="180" />
       <el-table-column label="商品" min-width="160">
       <el-table-column label="商品" min-width="160">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
@@ -79,7 +78,7 @@
           </el-dropdown>
           </el-dropdown>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      </el-table></div>
+      </el-table>
     </div>
     </div>
 
 
 <el-pagination
 <el-pagination
@@ -163,6 +162,12 @@
 import { getOrderList, shipOrder, closeOrder, approveRefund, rejectRefund } from '@/api/admin'
 import { getOrderList, shipOrder, closeOrder, approveRefund, rejectRefund } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'OrderManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 6 - 1
cfc-web/src/views/admin/PendingRefund.vue

@@ -28,7 +28,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap">
     <div class="table-scroll-wrap">
-      <el-table :data="list" v-loading="loading" border stripe>
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column label="类型" width="100">
         <el-table-column label="类型" width="100">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -115,6 +115,11 @@ import { getPendingRefundList, getPendingRefundSummary, cancelPendingRefund } fr
 
 
 export default {
 export default {
   name: 'PendingRefund',
   name: 'PendingRefund',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 6 - 1
cfc-web/src/views/admin/PlanManagement.vue

@@ -16,7 +16,7 @@
       </div>
       </div>
     </div>
     </div>
 
 
-    <el-table :data="plans" border stripe style="width:100%">
+    <el-table :data="plans" border stripe style="width:100%" :max-height="tableHeight">
       <el-table-column prop="id" label="方案ID" width="80" />
       <el-table-column prop="id" label="方案ID" width="80" />
       <el-table-column prop="familyId" label="家庭ID" width="80" />
       <el-table-column prop="familyId" label="家庭ID" width="80" />
       <el-table-column prop="childId" label="孩子ID" width="80" />
       <el-table-column prop="childId" label="孩子ID" width="80" />
@@ -70,6 +70,11 @@
 import { listFamilyPlans, reviewPlan, activatePlan } from '@/api/assessment'
 import { listFamilyPlans, reviewPlan, activatePlan } from '@/api/assessment'
 
 
 export default {
 export default {
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       plans: [],
       plans: [],

+ 7 - 3
cfc-web/src/views/admin/PointsLog.vue

@@ -21,8 +21,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
         <el-table-column prop="createdAt" label="时间" width="160">
         <el-table-column prop="createdAt" label="时间" width="160">
           <template slot-scope="{ row }">{{ formatTime(row.createdAt) }}</template>
           <template slot-scope="{ row }">{{ formatTime(row.createdAt) }}</template>
         </el-table-column>
         </el-table-column>
@@ -66,7 +65,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </div>
     </div>
 
 
     <el-pagination
     <el-pagination
@@ -123,6 +122,11 @@ const TYPE_MAP = {
 
 
 export default {
 export default {
   name: 'PointsLog',
   name: 'PointsLog',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 7 - 3
cfc-web/src/views/admin/ProductManage.vue

@@ -36,8 +36,7 @@
       </div>
       </div>
 
 
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+        <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column label="商品图片" width="80">
       <el-table-column label="商品图片" width="80">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
@@ -100,7 +99,7 @@
           </el-dropdown>
           </el-dropdown>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-        </el-table></div>
+        </el-table>
     </div>
     </div>
 
 
     <el-pagination
     <el-pagination
@@ -149,6 +148,11 @@ import { getProductList, reviewProduct, shelveProduct } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'ProductManage',
   name: 'ProductManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 14 - 4
cfc-web/src/views/admin/ProductPpointManage.vue

@@ -8,8 +8,7 @@
         <el-button type="success" @click="openAddDialog">新增配置</el-button>
         <el-button type="success" @click="openAddDialog">新增配置</el-button>
       </div>
       </div>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+    <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column label="商品图片" width="70">
       <el-table-column label="商品图片" width="70">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
@@ -67,10 +66,10 @@
           </template>
           </template>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -109,6 +108,12 @@
 import { getProductPpointList, saveProductPpoint, deleteProductPpoint, getProductList } from '@/api/admin'
 import { getProductPpointList, saveProductPpoint, deleteProductPpoint, getProductList } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'ProductPpointManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -144,6 +149,11 @@ export default {
         this.loading = false
         this.loading = false
       }
       }
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(val) {
     onPageChange(val) {
       this.page = val
       this.page = val
       this.loadList()
       this.loadList()

+ 14 - 4
cfc-web/src/views/admin/ProductProfitRate.vue

@@ -13,8 +13,7 @@
         <el-button type="primary" @click="loadList">查询</el-button>
         <el-button type="primary" @click="loadList">查询</el-button>
       </div>
       </div>
       </div>
       </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+    <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column prop="id" label="ID" width="70" />
       <el-table-column label="商品图片" width="70">
       <el-table-column label="商品图片" width="70">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
@@ -67,10 +66,10 @@
           </template>
           </template>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -85,6 +84,12 @@
 import { getProductList, updateProductProfitRate } from '@/api/admin'
 import { getProductList, updateProductProfitRate } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'ProductProfitRate',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -114,6 +119,11 @@ export default {
         this.loading = false
         this.loading = false
       }
       }
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(val) {
     onPageChange(val) {
       this.page = val
       this.page = val
       this.loadList()
       this.loadList()

+ 5 - 6
cfc-web/src/views/admin/PromotionManagement.vue

@@ -6,8 +6,7 @@
           <div style="margin-bottom: 16px">
           <div style="margin-bottom: 16px">
             <el-input v-model="milestoneKeyword" placeholder="搜索里程碑..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleMilestoneSearch" @clear="handleMilestoneSearch" />
             <el-input v-model="milestoneKeyword" placeholder="搜索里程碑..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleMilestoneSearch" @clear="handleMilestoneSearch" />
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="filteredMilestones" v-loading="milestoneLoading" border stripe style="max-height:calc(100vh - 300px);">
+    <el-table :data="filteredMilestones" v-loading="milestoneLoading" border stripe :max-height="tableHeight">
             <el-table-column prop="milestone" label="里程碑" min-width="180" show-overflow-tooltip />
             <el-table-column prop="milestone" label="里程碑" min-width="180" show-overflow-tooltip />
             <el-table-column prop="rewardPoints" label="奖励积分" width="120" />
             <el-table-column prop="rewardPoints" label="奖励积分" width="120" />
             <el-table-column prop="rewardEnergy" label="奖励能量" width="120" />
             <el-table-column prop="rewardEnergy" label="奖励能量" width="120" />
@@ -19,7 +18,6 @@
               </template>
               </template>
             </el-table-column>
             </el-table-column>
     </el-table>
     </el-table>
-    </div>
     </el-tab-pane>
     </el-tab-pane>
         <el-tab-pane label="排行榜" name="leaderboard">
         <el-tab-pane label="排行榜" name="leaderboard">
           <div style="margin-bottom: 16px; display: flex; gap: 16px; align-items: center; flex-wrap: wrap">
           <div style="margin-bottom: 16px; display: flex; gap: 16px; align-items: center; flex-wrap: wrap">
@@ -41,8 +39,7 @@
             <el-button type="primary" @click="handleSearch">搜索</el-button>
             <el-button type="primary" @click="handleSearch">搜索</el-button>
             <el-button @click="resetLeaderboard">重置</el-button>
             <el-button @click="resetLeaderboard">重置</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="leaderboardList" v-loading="leaderboardLoading" border stripe style="max-height:calc(100vh - 300px);">
+    <el-table :data="leaderboardList" v-loading="leaderboardLoading" border stripe :max-height="tableHeight">
             <el-table-column label="排名" width="80" type="index" :index="leaderboardIndex" />
             <el-table-column label="排名" width="80" type="index" :index="leaderboardIndex" />
             <el-table-column label="头像" width="80">
             <el-table-column label="头像" width="80">
               <template slot-scope="{ row }">
               <template slot-scope="{ row }">
@@ -52,7 +49,6 @@
             <el-table-column prop="nickname" label="昵称" min-width="140" show-overflow-tooltip />
             <el-table-column prop="nickname" label="昵称" min-width="140" show-overflow-tooltip />
             <el-table-column prop="referralCount" label="邀请数" width="100" />
             <el-table-column prop="referralCount" label="邀请数" width="100" />
     </el-table>
     </el-table>
-    </div>
     <el-pagination
     <el-pagination
             v-if="leaderboardTotal > leaderboardSize"
             v-if="leaderboardTotal > leaderboardSize"
             @current-change="onLeaderboardPageChange"
             @current-change="onLeaderboardPageChange"
@@ -118,6 +114,9 @@ export default {
     this.loadMilestones()
     this.loadMilestones()
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredMilestones() {
     filteredMilestones() {
       if (!this.milestoneKeyword) return this.milestoneList
       if (!this.milestoneKeyword) return this.milestoneList
       var kw = this.milestoneKeyword.toLowerCase()
       var kw = this.milestoneKeyword.toLowerCase()

+ 6 - 1
cfc-web/src/views/admin/Recipes.vue

@@ -22,7 +22,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-      <el-table :data="list" v-loading="loading" border stripe>
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="name" label="名称" />
         <el-table-column prop="name" label="名称" />
         <el-table-column prop="mealType" label="类型" width="80" />
         <el-table-column prop="mealType" label="类型" width="80" />
@@ -98,6 +98,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'Recipes',
   name: 'Recipes',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 4 - 1
cfc-web/src/views/admin/RelationshipTypes.vue

@@ -9,7 +9,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap">
       <div class="table-scroll-wrap">
-      <el-table :data="filteredData" stripe>
+      <el-table :data="filteredData" stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="typeKey" label="编码" width="120"></el-table-column>
         <el-table-column prop="typeKey" label="编码" width="120"></el-table-column>
         <el-table-column prop="typeName" label="显示名称" width="120"></el-table-column>
         <el-table-column prop="typeName" label="显示名称" width="120"></el-table-column>
@@ -134,6 +134,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.types
       if (!this.keyword) return this.types
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 6 - 1
cfc-web/src/views/admin/SeasonalFoods.vue

@@ -17,7 +17,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap">
       <div class="table-scroll-wrap">
-      <el-table :data="list" v-loading="loading" border stripe>
+      <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="foodId" label="食材ID" width="80" />
         <el-table-column prop="foodId" label="食材ID" width="80" />
         <el-table-column label="月份" width="80">
         <el-table-column label="月份" width="80">
@@ -74,6 +74,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'SeasonalFoods',
   name: 'SeasonalFoods',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     const now = new Date()
     const now = new Date()
     return {
     return {

+ 8 - 3
cfc-web/src/views/admin/SubscriptionManagement.vue

@@ -20,8 +20,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap">
     <div class="table-scroll-wrap">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column label="家庭信息" min-width="180" show-overflow-tooltip>
         <el-table-column label="家庭信息" min-width="180" show-overflow-tooltip>
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
@@ -76,7 +75,7 @@
             <el-button v-if="row.status === 'cancelled'" size="mini" type="success" @click="handleActivate(row)">重新激活</el-button>
             <el-button v-if="row.status === 'cancelled'" size="mini" type="success" @click="handleActivate(row)">重新激活</el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </div>
     </div>
 
 
     <el-pagination
     <el-pagination
@@ -174,6 +173,12 @@
 import { getSubscriptionList, activateSubscription, cancelSubscriptionAdmin } from '@/api/admin'
 import { getSubscriptionList, activateSubscription, cancelSubscriptionAdmin } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'SubscriptionManagement',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 6 - 3
cfc-web/src/views/admin/SupplierProductManage.vue

@@ -25,8 +25,7 @@
     </div>
     </div>
 
 
     <div class="table-scroll-wrap-sm">
     <div class="table-scroll-wrap-sm">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table style="max-height:calc(100vh - 300px);" :data="list" v-loading="loading" border stripe>
+        <el-table :max-height="tableHeight" :data="list" v-loading="loading" border stripe>
           <el-table-column prop="id" label="ID" width="70" />
           <el-table-column prop="id" label="ID" width="70" />
           <el-table-column label="商品图片" width="80">
           <el-table-column label="商品图片" width="80">
             <template slot-scope="{ row }">
             <template slot-scope="{ row }">
@@ -83,7 +82,6 @@
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
-      </div>
     </div>
     </div>
 
 
     <el-pagination
     <el-pagination
@@ -105,6 +103,11 @@ import { getSupplierProductList, shelveSupplierProduct } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'SupplierProductManage',
   name: 'SupplierProductManage',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 13 - 4
cfc-web/src/views/admin/SysConfig.vue

@@ -7,8 +7,7 @@
         <el-button type="primary" size="small" @click="addConfig" icon="el-icon-plus">新增配置</el-button>
         <el-button type="primary" size="small" @click="addConfig" icon="el-icon-plus">新增配置</el-button>
       </div>
       </div>
     </div>
     </div>
-    <div class="table-scroll-wrap" style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="list" v-loading="loading" border stripe style="max-height:calc(100vh - 300px);">
+    <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
       <el-table-column prop="configKey" label="配置键" min-width="200" show-overflow-tooltip />
       <el-table-column prop="configKey" label="配置键" min-width="200" show-overflow-tooltip />
       <el-table-column prop="configValue" label="配置值" min-width="250" show-overflow-tooltip />
       <el-table-column prop="configValue" label="配置值" min-width="250" show-overflow-tooltip />
       <el-table-column prop="description" label="描述" min-width="200" show-overflow-tooltip />
       <el-table-column prop="description" label="描述" min-width="200" show-overflow-tooltip />
@@ -31,10 +30,9 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    </div>
 
 
     <el-pagination
     <el-pagination
-      @size-change="onPageChange"
+      @size-change="onSizeChange"
       @current-change="onPageChange"
       @current-change="onPageChange"
       :current-page="page"
       :current-page="page"
       :page-size="size"
       :page-size="size"
@@ -77,6 +75,12 @@
 import { getSysConfigList, createSysConfig, updateSysConfig, deleteSysConfig } from '@/api/admin'
 import { getSysConfigList, createSysConfig, updateSysConfig, deleteSysConfig } from '@/api/admin'
 
 
 export default {
 export default {
+  name: 'SysConfig',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],
@@ -121,6 +125,11 @@ export default {
       this.page = 1
       this.page = 1
       this.loadList()
       this.loadList()
     },
     },
+    onSizeChange(val) {
+      this.size = val
+      this.page = 1
+      this.loadList()
+    },
     onPageChange(val) {
     onPageChange(val) {
       this.page = val
       this.page = val
       this.loadList()
       this.loadList()

+ 5 - 3
cfc-web/src/views/admin/VirtualTeamDetail.vue

@@ -20,8 +20,7 @@
       <div slot="header">
       <div slot="header">
         <span>成员列表</span>
         <span>成员列表</span>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="members" stripe v-loading="membersLoading">
+      <el-table :max-height="tableHeight" :data="members" stripe v-loading="membersLoading">
         <el-table-column prop="id" label="关系ID" width="80"></el-table-column>
         <el-table-column prop="id" label="关系ID" width="80"></el-table-column>
         <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
         <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
         <el-table-column label="用户昵称" width="140">
         <el-table-column label="用户昵称" width="140">
@@ -51,7 +50,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </el-card>
     </el-card>
 
 
     <el-dialog :visible.sync="addDialogVisible" title="添加成员" width="500px" :close-on-click-modal="false">
     <el-dialog :visible.sync="addDialogVisible" title="添加成员" width="500px" :close-on-click-modal="false">
@@ -148,6 +147,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     teamName() {
     teamName() {
       return this.teamInfo.name || '加载中...'
       return this.teamInfo.name || '加载中...'
     },
     },

+ 5 - 2
cfc-web/src/views/admin/VirtualTeamList.vue

@@ -20,7 +20,7 @@
         <el-button size="small" type="primary" @click="loadData">查询</el-button>
         <el-button size="small" type="primary" @click="loadData">查询</el-button>
     </div>
     </div>
 
 
-    <div style="overflow:auto;max-height:calc(100vh - 300px);"><el-table style="max-height:calc(100vh - 300px);" :data="pagedData" stripe v-loading="loading">
+    <el-table :max-height="tableHeight" :data="pagedData" stripe v-loading="loading">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="name" label="团队名称" width="160"></el-table-column>
         <el-table-column prop="name" label="团队名称" width="160"></el-table-column>
         <el-table-column prop="description" label="描述" show-overflow-tooltip></el-table-column>
         <el-table-column prop="description" label="描述" show-overflow-tooltip></el-table-column>
@@ -56,7 +56,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
         v-if="filteredData.length > pageSize"
         v-if="filteredData.length > pageSize"
@@ -129,6 +129,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.searchKeyword) return this.teams
       if (!this.searchKeyword) return this.teams
       var kw = this.searchKeyword.toLowerCase()
       var kw = this.searchKeyword.toLowerCase()

+ 4 - 1
cfc-web/src/views/admin/ZodiacConfigs.vue

@@ -9,7 +9,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap">
       <div class="table-scroll-wrap">
-      <el-table :data="filteredData" stripe>
+      <el-table :data="filteredData" stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="zodiacCode" label="代码" width="120"></el-table-column>
         <el-table-column prop="zodiacCode" label="代码" width="120"></el-table-column>
         <el-table-column prop="zodiacName" label="名称"></el-table-column>
         <el-table-column prop="zodiacName" label="名称"></el-table-column>
@@ -116,6 +116,9 @@ export default {
     this.loadData()
     this.loadData()
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.configs
       if (!this.keyword) return this.configs
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 4 - 3
cfc-web/src/views/admin/components/ProductSkuEditor.vue

@@ -5,8 +5,7 @@
       <el-button type="primary" size="mini" icon="el-icon-plus" @click="showDialog(null)">添加SKU</el-button>
       <el-button type="primary" size="mini" icon="el-icon-plus" @click="showDialog(null)">添加SKU</el-button>
     </div>
     </div>
 
 
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="skus" border stripe size="small" style="max-height:calc(100vh - 300px);">
+    <el-table :data="skus" border stripe size="small" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column label="规格" min-width="120">
       <el-table-column label="规格" min-width="120">
         <template slot-scope="{ row }">
         <template slot-scope="{ row }">
@@ -44,7 +43,6 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-  </div>
 
 
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px" @close="resetForm">
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px" @close="resetForm">
       <el-form ref="skuForm" :model="skuForm" :rules="skuRules" label-width="80px">
       <el-form ref="skuForm" :model="skuForm" :rules="skuRules" label-width="80px">
@@ -121,6 +119,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     dialogTitle() {
     dialogTitle() {
       return this.editingId ? '编辑SKU' : '添加SKU'
       return this.editingId ? '编辑SKU' : '添加SKU'
     },
     },

+ 7 - 3
cfc-web/src/views/admin/data-source-config.vue

@@ -9,8 +9,7 @@
         </div>
         </div>
       </div>
       </div>
       <div class="table-scroll-wrap-sm">
       <div class="table-scroll-wrap-sm">
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="records" stripe v-loading="loading">
+      <el-table :max-height="tableHeight" :data="records" stripe v-loading="loading">
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="memberId" label="成员ID" width="80"></el-table-column>
         <el-table-column prop="memberId" label="成员ID" width="80"></el-table-column>
         <el-table-column prop="sourceType" label="类型" width="100">
         <el-table-column prop="sourceType" label="类型" width="100">
@@ -44,7 +43,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
       </div>
       </div>
       <el-pagination
       <el-pagination
         v-if="total > 0"
         v-if="total > 0"
@@ -105,6 +104,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'DataSourceConfig',
   name: 'DataSourceConfig',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 4 - 3
cfc-web/src/views/admin/dimension-config.vue

@@ -6,8 +6,7 @@
         <el-input v-model="keyword" placeholder="搜索维度/来源..." prefix-icon="el-icon-search" style="width:200px;float:right;margin-right:8px" clearable @keyup.enter.native="loadData" @clear="loadData" />
         <el-input v-model="keyword" placeholder="搜索维度/来源..." prefix-icon="el-icon-search" style="width:200px;float:right;margin-right:8px" clearable @keyup.enter.native="loadData" @clear="loadData" />
         <el-button style="float: right;margin-right:8px" type="primary" size="small" @click="handleCreate">+ 添加常模</el-button>
         <el-button style="float: right;margin-right:8px" type="primary" size="small" @click="handleCreate">+ 添加常模</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-    <el-table :data="filteredNorms" stripe v-loading="loading" style="max-height:calc(100vh - 300px);">
+    <el-table :data="filteredNorms" stripe v-loading="loading" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="id" label="ID" width="60"></el-table-column>
         <el-table-column prop="dimension" label="维度" width="100">
         <el-table-column prop="dimension" label="维度" width="100">
           <template slot-scope="scope">
           <template slot-scope="scope">
@@ -53,7 +52,6 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    </div>
   </el-card>
   </el-card>
 
 
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑常模' : '添加常模'" width="600px">
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑常模' : '添加常模'" width="600px">
@@ -146,6 +144,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredNorms() {
     filteredNorms() {
       if (!this.keyword) return this.norms
       if (!this.keyword) return this.norms
       var kw = this.keyword.toLowerCase()
       var kw = this.keyword.toLowerCase()

+ 4 - 3
cfc-web/src/views/admin/dimension/index.vue

@@ -7,8 +7,7 @@
         <el-button style="float: right; margin-left: 10px" type="primary" size="small" @click="handleCreate">+ 新增维度</el-button>
         <el-button style="float: right; margin-left: 10px" type="primary" size="small" @click="handleCreate">+ 新增维度</el-button>
 </div>
 </div>
 
 
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table :data="filteredData" stripe v-loading="loading" style="max-height:calc(100vh - 300px);">
+      <el-table :data="filteredData" stripe v-loading="loading" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="dimensionCode" label="代码" width="120" />
         <el-table-column prop="dimensionCode" label="代码" width="120" />
         <el-table-column prop="dimensionName" label="名称" width="160" />
         <el-table-column prop="dimensionName" label="名称" width="160" />
@@ -35,7 +34,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
     </el-table>
     </el-table>
-    </div>
   </el-card>
   </el-card>
 
 
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑维度' : '新增维度'" width="500px">
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑维度' : '新增维度'" width="500px">
@@ -112,6 +110,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     ...mapState('dimension', ['dimensionTree']),
     ...mapState('dimension', ['dimensionTree']),
     filteredData() {
     filteredData() {
       if (!this.keyword) return this.dimensions
       if (!this.keyword) return this.dimensions

+ 7 - 2
cfc-web/src/views/admin/energy-config/WuxingConfig.vue

@@ -11,7 +11,7 @@
         <el-input v-model="sourceKeyword" placeholder="搜索来源类型/名称..." prefix-icon="el-icon-search" style="width: 250px; float: right; margin-bottom: 15px;" clearable @keyup.enter.native="loadSourceConfigs" @clear="loadSourceConfigs" />
         <el-input v-model="sourceKeyword" placeholder="搜索来源类型/名称..." prefix-icon="el-icon-search" style="width: 250px; float: right; margin-bottom: 15px;" clearable @keyup.enter.native="loadSourceConfigs" @clear="loadSourceConfigs" />
         <div style="clear: both;"></div>
         <div style="clear: both;"></div>
 
 
-        <el-table :data="filteredSourceConfigs" stripe v-loading="sourceLoading" style="margin-top: 10px;">
+        <el-table :data="filteredSourceConfigs" stripe v-loading="sourceLoading" style="margin-top: 10px;" :max-height="tableHeight">
           <el-table-column prop="sourceType" label="来源类型" width="120" show-overflow-tooltip></el-table-column>
           <el-table-column prop="sourceType" label="来源类型" width="120" show-overflow-tooltip></el-table-column>
           <el-table-column prop="sourceName" label="来源名称" width="150" show-overflow-tooltip></el-table-column>
           <el-table-column prop="sourceName" label="来源名称" width="150" show-overflow-tooltip></el-table-column>
           <el-table-column label="维度比例" min-width="300">
           <el-table-column label="维度比例" min-width="300">
@@ -37,7 +37,7 @@
       <!-- Section 2: Daily Limits Overview (read-only for V1) -->
       <!-- Section 2: Daily Limits Overview (read-only for V1) -->
       <div>
       <div>
         <h3 style="margin-bottom: 15px; color: #606266;">每日能量限制(只读)</h3>
         <h3 style="margin-bottom: 15px; color: #606266;">每日能量限制(只读)</h3>
-        <el-table :data="dailyLimits" stripe border>
+        <el-table :data="dailyLimits" stripe border :max-height="tableHeight">
           <el-table-column prop="dimensionCode" label="维度" width="120">
           <el-table-column prop="dimensionCode" label="维度" width="120">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <el-tag :type="getDimensionType(scope.row.dimensionCode)">{{ getDimensionLabel(scope.row.dimensionCode) }}</el-tag>
               <el-tag :type="getDimensionType(scope.row.dimensionCode)">{{ getDimensionLabel(scope.row.dimensionCode) }}</el-tag>
@@ -117,6 +117,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'WuxingEnergyConfig',
   name: 'WuxingEnergyConfig',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       sourceLoading: false,
       sourceLoading: false,

+ 6 - 1
cfc-web/src/views/admin/health-knowledge.vue

@@ -21,7 +21,7 @@
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
 
 
-      <el-table :data="list" border stripe v-loading="loading" empty-text="暂无数据" style="width:100%">
+      <el-table :data="list" border stripe v-loading="loading" empty-text="暂无数据" style="width:100%" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="itemName" label="指标名称" min-width="140" />
         <el-table-column prop="itemName" label="指标名称" min-width="140" />
         <el-table-column prop="category" label="分类" width="140" />
         <el-table-column prop="category" label="分类" width="140" />
@@ -67,6 +67,11 @@
 
 
 <script>
 <script>
 export default {
 export default {
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 7 - 3
cfc-web/src/views/admin/indicators/index.vue

@@ -16,8 +16,7 @@
     </div>
     </div>
 
 
     <!-- 表格 -->
     <!-- 表格 -->
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table :data="list" border stripe v-loading="loading" style="max-height:calc(100vh - 300px);">
+      <el-table :data="list" border stripe v-loading="loading" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="domain" label="领域" width="100" />
       <el-table-column prop="domain" label="领域" width="100" />
       <el-table-column prop="category" label="分类" width="100" />
       <el-table-column prop="category" label="分类" width="100" />
@@ -44,7 +43,6 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-    </div>
 
 
     <!-- 编辑弹窗 -->
     <!-- 编辑弹窗 -->
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
@@ -95,6 +93,12 @@
 
 
 <script>
 <script>
 export default {
 export default {
+  name: 'IndicatorsIndex',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 7 - 3
cfc-web/src/views/admin/review/ActivityAudit.vue

@@ -10,8 +10,7 @@
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="title" label="活动名称" min-width="200" show-overflow-tooltip />
       <el-table-column prop="title" label="活动名称" min-width="200" show-overflow-tooltip />
       <el-table-column label="审核状态" width="100">
       <el-table-column label="审核状态" width="100">
@@ -29,7 +28,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -46,6 +45,11 @@ import { getActivityList, auditActivity } from '@/api/activity'
 
 
 export default {
 export default {
   name: 'ActivityAudit',
   name: 'ActivityAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, keyword: '', statusFilter: 'pending',
       list: [], loading: false, keyword: '', statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/ActivityRegistrationAudit.vue

@@ -9,8 +9,7 @@
       </el-select>
       </el-select>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column label="用户" width="120">
       <el-table-column label="用户" width="120">
         <template slot-scope="{ row }">{{ row.nickname || row.userName || '-' }}</template>
         <template slot-scope="{ row }">{{ row.nickname || row.userName || '-' }}</template>
@@ -32,7 +31,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -42,6 +41,11 @@ import { approveRegistration, rejectRegistration } from '@/api/activity'
 
 
 export default {
 export default {
   name: 'ActivityRegistrationAudit',
   name: 'ActivityRegistrationAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, statusFilter: 'pending'
       list: [], loading: false, statusFilter: 'pending'

+ 7 - 3
cfc-web/src/views/admin/review/ArticleAudit.vue

@@ -12,8 +12,7 @@
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="success" @click="handleBatchApprove">批量通过({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="success" @click="handleBatchApprove">批量通过({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="danger" @click="showBatchRejectDialog">批量驳回({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="danger" @click="showBatchRejectDialog">批量驳回({{ selectedRows.length }})</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" @selection-change="onSelectionChange">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight" @selection-change="onSelectionChange">
       <el-table-column type="selection" width="40" v-if="statusFilter === 'pending'" />
       <el-table-column type="selection" width="40" v-if="statusFilter === 'pending'" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="title" label="标题" min-width="200" show-overflow-tooltip />
       <el-table-column prop="title" label="标题" min-width="200" show-overflow-tooltip />
@@ -39,7 +38,7 @@
           <el-button v-else size="mini" type="primary" @click="showDetail(row)">查看</el-button>
           <el-button v-else size="mini" type="primary" @click="showDetail(row)">查看</el-button>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
       v-if="total > 0"
       v-if="total > 0"
@@ -103,6 +102,11 @@ import { adminArticleList, adminArticleAudit } from '@/api/article'
 
 
 export default {
 export default {
   name: 'ArticleAudit',
   name: 'ArticleAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 7 - 3
cfc-web/src/views/admin/review/ButlerAudit.vue

@@ -9,8 +9,7 @@
       </el-select>
       </el-select>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="档案ID" width="80" />
       <el-table-column prop="id" label="档案ID" width="80" />
       <el-table-column prop="userId" label="用户ID" width="80" />
       <el-table-column prop="userId" label="用户ID" width="80" />
       <el-table-column prop="tier" label="等级" width="80" />
       <el-table-column prop="tier" label="等级" width="80" />
@@ -29,7 +28,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -46,6 +45,11 @@ import { getButlerList, reviewButler } from '@/api/butler'
 
 
 export default {
 export default {
   name: 'ButlerAudit',
   name: 'ButlerAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, statusFilter: 'pending',
       list: [], loading: false, statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/GuideAudit.vue

@@ -10,8 +10,7 @@
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="realName" label="真实姓名" width="120" />
       <el-table-column prop="realName" label="真实姓名" width="120" />
@@ -30,7 +29,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
       v-if="total > 0"
       v-if="total > 0"
@@ -57,6 +56,11 @@ import { getGuideApplications, approveGuide, rejectGuide } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'GuideAudit',
   name: 'GuideAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, keyword: '', statusFilter: 'pending',
       list: [], loading: false, keyword: '', statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/HierarchyAudit.vue

@@ -9,8 +9,7 @@
       </el-select>
       </el-select>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="applicantName" label="申请人" width="120" />
       <el-table-column prop="applicantName" label="申请人" width="120" />
       <el-table-column prop="currentSuperior" label="当前上级" width="120" />
       <el-table-column prop="currentSuperior" label="当前上级" width="120" />
@@ -30,7 +29,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -48,6 +47,11 @@ import { reviewSupplyHierarchyChange } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'HierarchyAudit',
   name: 'HierarchyAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, statusFilter: 'pending',
       list: [], loading: false, statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/NutritionistAudit.vue

@@ -10,8 +10,7 @@
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="realName" label="真实姓名" width="120" />
       <el-table-column prop="realName" label="真实姓名" width="120" />
@@ -30,7 +29,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -47,6 +46,11 @@ import { getNutritionistApplications, approveNutritionist, rejectNutritionist }
 
 
 export default {
 export default {
   name: 'NutritionistAudit',
   name: 'NutritionistAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, keyword: '', statusFilter: 'pending',
       list: [], loading: false, keyword: '', statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/PackageAudit.vue

@@ -11,8 +11,7 @@
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="success" @click="handleBatchApprove">批量通过({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="success" @click="handleBatchApprove">批量通过({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="danger" @click="showBatchRejectDialog">批量驳回({{ selectedRows.length }})</el-button>
       <el-button v-if="selectedRows.length > 0 && statusFilter === 'pending'" size="small" type="danger" @click="showBatchRejectDialog">批量驳回({{ selectedRows.length }})</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" @selection-change="onSelectionChange">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight" @selection-change="onSelectionChange">
       <el-table-column type="selection" width="40" v-if="statusFilter === 'pending'" />
       <el-table-column type="selection" width="40" v-if="statusFilter === 'pending'" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="name" label="任务模板名称" min-width="180" show-overflow-tooltip />
       <el-table-column prop="name" label="任务模板名称" min-width="180" show-overflow-tooltip />
@@ -44,7 +43,7 @@
           <el-button v-else size="mini" type="primary" @click="showDetail(row)">查看</el-button>
           <el-button v-else size="mini" type="primary" @click="showDetail(row)">查看</el-button>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
       v-if="total > 0"
       v-if="total > 0"
@@ -106,6 +105,11 @@ import { getPackageList, reviewPackage } from '@/api/package'
 
 
 export default {
 export default {
   name: 'PackageAudit',
   name: 'PackageAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 7 - 3
cfc-web/src/views/admin/review/ProductAudit.vue

@@ -9,8 +9,7 @@
       </el-select>
       </el-select>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="name" label="商品名称" min-width="180" show-overflow-tooltip />
       <el-table-column prop="name" label="商品名称" min-width="180" show-overflow-tooltip />
       <el-table-column label="审核状态" width="100">
       <el-table-column label="审核状态" width="100">
@@ -28,7 +27,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -45,6 +44,11 @@ import { getProductList, reviewProduct } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'ProductAudit',
   name: 'ProductAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, statusFilter: 'pending',
       list: [], loading: false, statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/VendorAudit.vue

@@ -10,8 +10,7 @@
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="nickname" label="昵称" width="120" />
       <el-table-column prop="realName" label="姓名" width="120" />
       <el-table-column prop="realName" label="姓名" width="120" />
@@ -33,7 +32,7 @@
           <span v-else class="no-op">—</span>
           <span v-else class="no-op">—</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
     <el-dialog title="拒绝原因" :visible.sync="rejectDialogVisible" width="400px">
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
       <el-input v-model="rejectReason" type="textarea" :rows="3" placeholder="请输入拒绝原因" />
@@ -50,6 +49,11 @@ import { getVendorList, reviewVendor } from '@/api/vendor'
 
 
 export default {
 export default {
   name: 'VendorAudit',
   name: 'VendorAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [], loading: false, keyword: '', statusFilter: 'pending',
       list: [], loading: false, keyword: '', statusFilter: 'pending',

+ 7 - 3
cfc-web/src/views/admin/review/WithdrawAudit.vue

@@ -10,8 +10,7 @@
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" style="width:200px" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
     </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);min-width:0;box-sizing:border-box;">
-    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;">
+    <el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column prop="id" label="ID" width="60" />
       <el-table-column label="用户" width="120">
       <el-table-column label="用户" width="120">
         <template slot-scope="{ row }">{{ row.nickname || row.userName || '-' }}</template>
         <template slot-scope="{ row }">{{ row.nickname || row.userName || '-' }}</template>
@@ -37,7 +36,7 @@
           <span v-else style="color:#999">-</span>
           <span v-else style="color:#999">-</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-    </el-table></div>
+    </el-table>
 
 
     <el-pagination
     <el-pagination
       v-if="total > 0"
       v-if="total > 0"
@@ -56,6 +55,11 @@ import { getWithdrawalList, auditWithdrawal } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'WithdrawAudit',
   name: 'WithdrawAudit',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       list: [],
       list: [],

+ 6 - 1
cfc-web/src/views/admin/supply-hierarchy/ChangeRequest.vue

@@ -22,7 +22,7 @@
                 </el-form>
                 </el-form>
             </div>
             </div>
             
             
-            <el-table :data="requests" stripe>
+            <el-table :data="requests" stripe :max-height="tableHeight">
                 <el-table-column prop="id" label="ID" width="60"></el-table-column>
                 <el-table-column prop="id" label="ID" width="60"></el-table-column>
                 <el-table-column prop="systemId" label="体系ID" width="80"></el-table-column>
                 <el-table-column prop="systemId" label="体系ID" width="80"></el-table-column>
                 <el-table-column label="申请人" width="120">
                 <el-table-column label="申请人" width="120">
@@ -71,6 +71,11 @@ import { listAllSupplySystems, getSupplyHierarchyChangeRequests, reviewSupplyHie
 
 
 export default {
 export default {
     name: 'SupplyHierarchyChangeRequest',
     name: 'SupplyHierarchyChangeRequest',
+    computed: {
+      tableHeight() {
+        return window.innerHeight - 300
+      }
+    },
     data() {
     data() {
         return {
         return {
             supplySystems: [],
             supplySystems: [],

+ 6 - 3
cfc-web/src/views/admin/supply-manage/List.vue

@@ -24,8 +24,7 @@
         </el-form-item>
         </el-form-item>
     </el-form>
     </el-form>
 
 
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table :data="suppliers" stripe v-loading="loading" style="max-height:calc(100vh - 300px);">
+      <el-table :data="suppliers" stripe v-loading="loading" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70"></el-table-column>
         <el-table-column prop="id" label="ID" width="70"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="130"></el-table-column>
         <el-table-column prop="nickname" label="昵称" width="130"></el-table-column>
         <el-table-column prop="realName" label="真实姓名" width="120"></el-table-column>
         <el-table-column prop="realName" label="真实姓名" width="120"></el-table-column>
@@ -53,7 +52,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
     </el-table>
     </el-table>
-    </div>
 
 
     <el-pagination
     <el-pagination
         v-if="total > 0"
         v-if="total > 0"
@@ -74,6 +72,11 @@ import { getSupplyManageList, deleteSupplyManage } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'SupplyManageList',
   name: 'SupplyManageList',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       suppliers: [],
       suppliers: [],

+ 10 - 5
cfc-web/src/views/admin/supply-system/Detail.vue

@@ -9,7 +9,7 @@
       <el-tabs v-model="activeTab">
       <el-tabs v-model="activeTab">
         <!-- Tab 1: 商品 -->
         <!-- Tab 1: 商品 -->
         <el-tab-pane label="商品" name="products">
         <el-tab-pane label="商品" name="products">
-          <el-table :data="products" stripe>
+          <el-table :data="products" stripe :max-height="tableHeight">
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="name" label="商品名称" min-width="150"></el-table-column>
             <el-table-column prop="name" label="商品名称" min-width="150"></el-table-column>
             <el-table-column prop="price" label="售价(元)" width="100">
             <el-table-column prop="price" label="售价(元)" width="100">
@@ -34,7 +34,7 @@
           <div style="margin-bottom: 15px;">
           <div style="margin-bottom: 15px;">
             <el-button type="primary" size="small" @click="showAddMemberDialog">+ 添加成员</el-button>
             <el-button type="primary" size="small" @click="showAddMemberDialog">+ 添加成员</el-button>
           </div>
           </div>
-          <el-table :data="members" stripe>
+          <el-table :data="members" stripe :max-height="tableHeight">
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
             <el-table-column prop="userId" label="用户ID" width="100"></el-table-column>
             <el-table-column prop="role" label="角色" width="100">
             <el-table-column prop="role" label="角色" width="100">
@@ -65,7 +65,7 @@
 
 
         <!-- Tab 3: 订单 -->
         <!-- Tab 3: 订单 -->
         <el-tab-pane label="订单" name="orders">
         <el-tab-pane label="订单" name="orders">
-          <el-table :data="orders" stripe>
+          <el-table :data="orders" stripe :max-height="tableHeight">
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="id" label="ID" width="60"></el-table-column>
             <el-table-column prop="orderNo" label="订单号" width="180"></el-table-column>
             <el-table-column prop="orderNo" label="订单号" width="180"></el-table-column>
             <el-table-column prop="productName" label="商品" min-width="120"></el-table-column>
             <el-table-column prop="productName" label="商品" min-width="120"></el-table-column>
@@ -93,7 +93,7 @@
             <div style="margin-bottom: 15px;">
             <div style="margin-bottom: 15px;">
                 <el-button type="primary" size="small" @click="showCreateSettlementDialog">生成结算单</el-button>
                 <el-button type="primary" size="small" @click="showCreateSettlementDialog">生成结算单</el-button>
             </div>
             </div>
-            <el-table :data="settlements" stripe>
+            <el-table :data="settlements" stripe :max-height="tableHeight">
                 <el-table-column prop="id" label="ID" width="60"></el-table-column>
                 <el-table-column prop="id" label="ID" width="60"></el-table-column>
                 <el-table-column label="结算周期" width="200">
                 <el-table-column label="结算周期" width="200">
                     <template slot-scope="scope">{{ scope.row.periodStart | parseTime('{y}-{m}-{d}') }} ~ {{ scope.row.periodEnd | parseTime('{y}-{m}-{d}') }}</template>
                     <template slot-scope="scope">{{ scope.row.periodStart | parseTime('{y}-{m}-{d}') }} ~ {{ scope.row.periodEnd | parseTime('{y}-{m}-{d}') }}</template>
@@ -150,7 +150,7 @@
 
 
     <!-- 结算明细对话框 -->
     <!-- 结算明细对话框 -->
     <el-dialog title="结算明细" :visible.sync="settlementDetailVisible" width="700px">
     <el-dialog title="结算明细" :visible.sync="settlementDetailVisible" width="700px">
-      <el-table :data="settlementItems">
+      <el-table :data="settlementItems" :max-height="300">
         <el-table-column prop="orderNo" label="订单号" width="160"></el-table-column>
         <el-table-column prop="orderNo" label="订单号" width="160"></el-table-column>
         <el-table-column prop="productName" label="商品" min-width="120"></el-table-column>
         <el-table-column prop="productName" label="商品" min-width="120"></el-table-column>
         <el-table-column prop="amount" label="订单金额(分)" width="120"></el-table-column>
         <el-table-column prop="amount" label="订单金额(分)" width="120"></el-table-column>
@@ -210,6 +210,11 @@ import { getSupplySystemDetail, getSupplySystemMembers, addSupplySystemMember,
 
 
 export default {
 export default {
   name: 'SupplySystemDetail',
   name: 'SupplySystemDetail',
+    computed: {
+      tableHeight() {
+        return window.innerHeight - 300
+      }
+    },
     data() {
     data() {
         return {
         return {
             activeTab: 'members',
             activeTab: 'members',

+ 6 - 1
cfc-web/src/views/admin/supply-system/List.vue

@@ -23,7 +23,7 @@
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
 
 
-      <el-table :data="systems" stripe v-loading="loading">
+      <el-table :data="systems" stripe v-loading="loading" :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="id" label="ID" width="80"></el-table-column>
         <el-table-column prop="name" label="体系名称" min-width="150"></el-table-column>
         <el-table-column prop="name" label="体系名称" min-width="150"></el-table-column>
         <el-table-column prop="settlementPeriodDays" label="账期(天)" width="100"></el-table-column>
         <el-table-column prop="settlementPeriodDays" label="账期(天)" width="100"></el-table-column>
@@ -70,6 +70,11 @@ import { getSupplySystemList, toggleSupplySystemStatus } from '@/api/admin'
 
 
 export default {
 export default {
   name: 'SupplySystemList',
   name: 'SupplySystemList',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       systems: [],
       systems: [],

+ 7 - 4
cfc-web/src/views/health/HealthReportAudit.vue

@@ -4,7 +4,7 @@
       <h2 class="admin-page-title">报告草稿审核</h2>
       <h2 class="admin-page-title">报告草稿审核</h2>
     </div>
     </div>
 
 
-    <el-table :data="list" v-loading="loading" border stripe>
+    <el-table :data="list" v-loading="loading" border stripe :max-height="tableHeight">
       <el-table-column prop="id" label="草稿ID" width="80" />
       <el-table-column prop="id" label="草稿ID" width="80" />
       <el-table-column label="上传用户" width="120">
       <el-table-column label="上传用户" width="120">
         <template slot-scope="{ row }">{{ row.userId }}</template>
         <template slot-scope="{ row }">{{ row.userId }}</template>
@@ -68,7 +68,7 @@
 
 
           <el-tabs v-model="activeTab">
           <el-tabs v-model="activeTab">
             <el-tab-pane label="指标" name="indicators">
             <el-tab-pane label="指标" name="indicators">
-              <el-table :data="parsedPayload.indicators || []" border size="small" max-height="300">
+              <el-table :data="parsedPayload.indicators || []" border size="small" :max-height="tableHeight">
                 <el-table-column prop="category" label="类别" width="100" />
                 <el-table-column prop="category" label="类别" width="100" />
                 <el-table-column prop="indicatorName" label="指标名称" width="160" />
                 <el-table-column prop="indicatorName" label="指标名称" width="160" />
                 <el-table-column prop="indicatorValue" label="检测值" width="100" />
                 <el-table-column prop="indicatorValue" label="检测值" width="100" />
@@ -84,7 +84,7 @@
               </el-table>
               </el-table>
             </el-tab-pane>
             </el-tab-pane>
             <el-tab-pane label="菌群" name="gutFlora">
             <el-tab-pane label="菌群" name="gutFlora">
-              <el-table :data="parsedPayload.gutFlora || []" border size="small" max-height="300">
+              <el-table :data="parsedPayload.gutFlora || []" border size="small" :max-height="tableHeight">
                 <el-table-column prop="bacteriaName" label="菌种" width="160" />
                 <el-table-column prop="bacteriaName" label="菌种" width="160" />
                 <el-table-column prop="bacteriaValue" label="检测值" width="100" />
                 <el-table-column prop="bacteriaValue" label="检测值" width="100" />
                 <el-table-column prop="normalRange" label="正常范围" width="140" />
                 <el-table-column prop="normalRange" label="正常范围" width="140" />
@@ -93,7 +93,7 @@
               </el-table>
               </el-table>
             </el-tab-pane>
             </el-tab-pane>
             <el-tab-pane label="疾病风险" name="diseaseRisks">
             <el-tab-pane label="疾病风险" name="diseaseRisks">
-              <el-table :data="parsedPayload.diseaseRisks || []" border size="small" max-height="300">
+              <el-table :data="parsedPayload.diseaseRisks || []" border size="small" :max-height="tableHeight">
                 <el-table-column prop="diseaseName" label="疾病" width="200" />
                 <el-table-column prop="diseaseName" label="疾病" width="200" />
                 <el-table-column prop="riskValue" label="风险值" width="100" />
                 <el-table-column prop="riskValue" label="风险值" width="100" />
                 <el-table-column prop="riskLevel" label="风险等级" width="100" />
                 <el-table-column prop="riskLevel" label="风险等级" width="100" />
@@ -125,6 +125,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     parsedPayload() {
     parsedPayload() {
       if (!this.detail || !this.detail.payloadJson) return null
       if (!this.detail || !this.detail.payloadJson) return null
       try {
       try {

+ 6 - 1
cfc-web/src/views/nutritionist/HealthCheckins.vue

@@ -2,7 +2,7 @@
   <div class="health-checkins">
   <div class="health-checkins">
     <el-card>
     <el-card>
       <div slot="header"><span>健康打卡</span></div>
       <div slot="header"><span>健康打卡</span></div>
-      <el-table :data="checkins" v-loading="loading" border stripe>
+      <el-table :data="checkins" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="checkinType" label="打卡类型" width="120" />
         <el-table-column prop="checkinType" label="打卡类型" width="120" />
@@ -16,6 +16,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'HealthCheckins',
   name: 'HealthCheckins',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() { return { loading: false, checkins: [] } },
   data() { return { loading: false, checkins: [] } },
   created() { this.loadCheckins() },
   created() { this.loadCheckins() },
   methods: {
   methods: {

+ 6 - 1
cfc-web/src/views/nutritionist/HealthIndicators.vue

@@ -2,7 +2,7 @@
   <div class="health-indicators">
   <div class="health-indicators">
     <el-card>
     <el-card>
       <div slot="header"><span>健康指标</span></div>
       <div slot="header"><span>健康指标</span></div>
-      <el-table :data="indicators" v-loading="loading" border stripe :cell-style="cellStyle">
+      <el-table :data="indicators" v-loading="loading" border stripe :max-height="tableHeight" :cell-style="cellStyle">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="indicatorName" label="指标名称" width="120">
         <el-table-column prop="indicatorName" label="指标名称" width="120">
@@ -40,6 +40,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'HealthIndicators',
   name: 'HealthIndicators',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() { return { loading: false, indicators: [] } },
   data() { return { loading: false, indicators: [] } },
   created() { this.loadIndicators() },
   created() { this.loadIndicators() },
   methods: {
   methods: {

+ 6 - 1
cfc-web/src/views/nutritionist/HealthReports.vue

@@ -4,7 +4,7 @@
       <div slot="header">
       <div slot="header">
         <span>健康报告</span>
         <span>健康报告</span>
       </div>
       </div>
-      <el-table :data="reports" v-loading="loading" border stripe>
+      <el-table :data="reports" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="childName" label="孩子" width="100" />
         <el-table-column prop="childName" label="孩子" width="100" />
         <el-table-column prop="reportType" label="报告类型" width="100" />
         <el-table-column prop="reportType" label="报告类型" width="100" />
@@ -49,6 +49,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'HealthReports',
   name: 'HealthReports',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return { loading: false, reports: [], page: 1, size: 20, total: 0 }
     return { loading: false, reports: [], page: 1, size: 20, total: 0 }
   },
   },

+ 7 - 3
cfc-web/src/views/nutritionist/NutritionMappings.vue

@@ -5,8 +5,7 @@
         <span>营养素映射管理</span>
         <span>营养素映射管理</span>
         <el-button type="primary" size="mini" style="float:right" @click="openCreateDialog">新增映射</el-button>
         <el-button type="primary" size="mini" style="float:right" @click="openCreateDialog">新增映射</el-button>
       </div>
       </div>
-      <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table style="max-height:calc(100vh - 300px);" :data="mappings" v-loading="loading" border stripe>
+      <el-table :max-height="tableHeight" :data="mappings" v-loading="loading" border stripe>
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="id" label="ID" width="60" />
         <el-table-column prop="indicatorNamePattern" label="指标名模式" width="180" />
         <el-table-column prop="indicatorNamePattern" label="指标名模式" width="180" />
         <el-table-column prop="nutrient" label="营养素" width="100" />
         <el-table-column prop="nutrient" label="营养素" width="100" />
@@ -27,7 +26,7 @@
             </el-dropdown>
             </el-dropdown>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-      </el-table></div>
+      </el-table>
     </el-card>
     </el-card>
 
 
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px">
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px">
@@ -65,6 +64,11 @@
 <script>
 <script>
 export default {
 export default {
   name: 'NutritionMappings',
   name: 'NutritionMappings',
+  computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    }
+  },
   data() {
   data() {
     return {
     return {
       loading: false,
       loading: false,

+ 4 - 3
cfc-web/src/views/teacher/FamilyList.vue

@@ -5,8 +5,7 @@
         <span>我的家庭</span>
         <span>我的家庭</span>
         <el-input v-model="keyword" placeholder="搜索家庭..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <el-input v-model="keyword" placeholder="搜索家庭..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
       </div>
       </div>
-  <div style="overflow:auto;max-height:calc(100vh - 320px);">
-    <el-table :data="filteredFamilies" v-loading="loading" border stripe style="max-height:calc(100vh - 320px);">
+    <el-table :data="filteredFamilies" v-loading="loading" border stripe :max-height="tableHeight">
       <el-table-column prop="id" label="ID" width="80" />
       <el-table-column prop="id" label="ID" width="80" />
       <el-table-column prop="familyName" label="家庭名称" />
       <el-table-column prop="familyName" label="家庭名称" />
       <el-table-column prop="memberCount" label="成员数" width="100" />
       <el-table-column prop="memberCount" label="成员数" width="100" />
@@ -26,7 +25,6 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-  </div>
     </el-card>
     </el-card>
   </div>
   </div>
 </template>
 </template>
@@ -38,6 +36,9 @@ export default {
     return { loading: false, families: [], keyword: '' }
     return { loading: false, families: [], keyword: '' }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 320
+    },
     filteredFamilies() {
     filteredFamilies() {
       if (!this.keyword) return this.families
       if (!this.keyword) return this.families
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 4 - 1
cfc-web/src/views/teacher/GrowthPlans.vue

@@ -5,7 +5,7 @@
         <span>成长计划</span>
         <span>成长计划</span>
         <el-input v-model="keyword" placeholder="搜索成长计划..." prefix-icon="el-icon-search" style="width:200px; float: right;" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <el-input v-model="keyword" placeholder="搜索成长计划..." prefix-icon="el-icon-search" style="width:200px; float: right;" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
       </div>
       </div>
-      <el-table :data="filteredPlans" v-loading="loading" border stripe>
+      <el-table :data="filteredPlans" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="id" label="ID" width="80" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="childName" label="孩子" width="120" />
         <el-table-column prop="title" label="计划标题" />
         <el-table-column prop="title" label="计划标题" />
@@ -21,6 +21,9 @@ export default {
   name: 'GrowthPlans',
   name: 'GrowthPlans',
   data() { return { loading: false, plans: [], keyword: '' } },
   data() { return { loading: false, plans: [], keyword: '' } },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredPlans() {
     filteredPlans() {
       if (!this.keyword) return this.plans
       if (!this.keyword) return this.plans
       var kw = this.keyword.toLowerCase()
       var kw = this.keyword.toLowerCase()

+ 4 - 1
cfc-web/src/views/teacher/GrowthRecords.vue

@@ -12,7 +12,7 @@
           <el-option label="补充材料" value="supplement" />
           <el-option label="补充材料" value="supplement" />
         </el-select>
         </el-select>
       </div>
       </div>
-      <el-table :data="filteredRecords" v-loading="loading" border stripe>
+      <el-table :data="filteredRecords" v-loading="loading" border stripe :max-height="tableHeight">
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="id" label="ID" width="70" />
         <el-table-column prop="childName" label="孩子" width="100" />
         <el-table-column prop="childName" label="孩子" width="100" />
         <el-table-column prop="sourceType" label="来源" width="100">
         <el-table-column prop="sourceType" label="来源" width="100">
@@ -53,6 +53,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredRecords() {
     filteredRecords() {
       if (!this.keyword) return this.records
       if (!this.keyword) return this.records
       var kw = this.keyword.toLowerCase()
       var kw = this.keyword.toLowerCase()

+ 4 - 3
cfc-web/src/views/teacher/TeacherAssessment.vue

@@ -6,8 +6,7 @@
         <el-input v-model="keyword" placeholder="搜索家庭ID..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <el-input v-model="keyword" placeholder="搜索家庭ID..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
       </div>
       </div>
 
 
-  <div style="overflow:auto;max-height:calc(100vh - 320px);">
-    <el-table :data="filteredConfigs" border stripe v-loading="loading" style="max-height:calc(100vh - 320px);">
+    <el-table :data="filteredConfigs" border stripe v-loading="loading" :max-height="tableHeight">
       <el-table-column prop="familyId" label="家庭ID" width="80" />
       <el-table-column prop="familyId" label="家庭ID" width="80" />
       <el-table-column label="家庭名称" width="120">
       <el-table-column label="家庭名称" width="120">
         <template slot-scope="scope">
         <template slot-scope="scope">
@@ -52,7 +51,6 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
-  </div>
     </el-card>
     </el-card>
 
 
     <el-dialog title="启用家庭DAN测评" :visible.sync="enableDialogVisible" width="500px">
     <el-dialog title="启用家庭DAN测评" :visible.sync="enableDialogVisible" width="500px">
@@ -119,6 +117,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 320
+    },
     filteredConfigs() {
     filteredConfigs() {
       if (!this.keyword) return this.familyConfigs
       if (!this.keyword) return this.familyConfigs
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()

+ 4 - 3
cfc-web/src/views/teacher/TeacherFamilies.vue

@@ -82,8 +82,7 @@
 
 
     <!-- 家庭列表 -->
     <!-- 家庭列表 -->
     <el-card class="table-card">
     <el-card class="table-card">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table :data="filteredFamilies" stripe style="width: 100%;max-height:calc(100vh - 300px);" v-loading="loading">
+        <el-table :data="filteredFamilies" stripe style="width: 100%;" v-loading="loading" :max-height="tableHeight">
         <el-table-column label="家庭信息" min-width="200">
         <el-table-column label="家庭信息" min-width="200">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div class="family-cell">
             <div class="family-cell">
@@ -146,7 +145,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         </el-table>
         </el-table>
-        </div>
     </el-card>
     </el-card>
 
 
     <!-- 家庭详情抽屉 -->
     <!-- 家庭详情抽屉 -->
@@ -238,6 +236,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     stats() {
     stats() {
       return {
       return {
         total: this.families.length,
         total: this.families.length,

+ 9 - 3
cfc-web/src/views/teacher/TeacherOrders.vue

@@ -99,8 +99,7 @@
 
 
     <!-- 订单列表 -->
     <!-- 订单列表 -->
     <el-card class="table-card">
     <el-card class="table-card">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table :data="filteredOrders" stripe style="width: 100%;max-height:calc(100vh - 300px);" v-loading="loading">
+        <el-table :data="paginatedOrders" stripe style="width: 100%" :max-height="tableHeight" v-loading="loading">
         <el-table-column prop="orderNo" label="订单号" width="200">
         <el-table-column prop="orderNo" label="订单号" width="200">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <span class="order-no">{{ scope.row.orderNo }}</span>
             <span class="order-no">{{ scope.row.orderNo }}</span>
@@ -159,7 +158,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         </el-table>
         </el-table>
-        </div>
 
 
         <!-- 分页 -->
         <!-- 分页 -->
       <div class="pagination-wrapper">
       <div class="pagination-wrapper">
@@ -243,6 +241,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredOrders() {
     filteredOrders() {
       let result = this.orders
       let result = this.orders
       if (this.searchKeyword) {
       if (this.searchKeyword) {
@@ -264,6 +265,10 @@ export default {
       }
       }
       this.pagination.total = result.length
       this.pagination.total = result.length
       return result
       return result
+    },
+    paginatedOrders() {
+      const start = (this.pagination.current - 1) * this.pagination.size
+      return this.filteredOrders.slice(start, start + this.pagination.size)
     }
     }
   },
   },
   created() {
   created() {
@@ -312,6 +317,7 @@ export default {
     },
     },
     handleSizeChange(size) {
     handleSizeChange(size) {
       this.pagination.size = size
       this.pagination.size = size
+      this.pagination.current = 1
     },
     },
     handleCurrentChange(current) {
     handleCurrentChange(current) {
       this.pagination.current = current
       this.pagination.current = current

+ 4 - 3
cfc-web/src/views/teacher/TeacherPackages.vue

@@ -64,8 +64,7 @@
 
 
     <!-- 任务模板列表 -->
     <!-- 任务模板列表 -->
     <el-card class="table-card">
     <el-card class="table-card">
-        <div style="overflow:auto;max-height:calc(100vh - 300px);">
-        <el-table :data="filteredPackages" stripe style="width: 100%;max-height:calc(100vh - 300px);" v-loading="loading">
+        <el-table :data="filteredPackages" stripe style="width: 100%;" v-loading="loading" :max-height="tableHeight">
         <el-table-column label="任务模板信息" min-width="200">
         <el-table-column label="任务模板信息" min-width="200">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div class="package-cell">
             <div class="package-cell">
@@ -124,7 +123,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         </el-table>
         </el-table>
-        </div>
     </el-card>
     </el-card>
 
 
     <!-- 创建/编辑任务模板弹窗 -->
     <!-- 创建/编辑任务模板弹窗 -->
@@ -206,6 +204,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredPackages() {
     filteredPackages() {
       if (!this.keyword) return this.packages
       if (!this.keyword) return this.packages
       var kw = this.keyword.toLowerCase()
       var kw = this.keyword.toLowerCase()

+ 4 - 3
cfc-web/src/views/teacher/TeacherTeam.vue

@@ -83,8 +83,7 @@
         <el-input v-model="keyword" placeholder="搜索成员..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <el-input v-model="keyword" placeholder="搜索成员..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <span class="card-count">共 {{ filteredMembers.length }} 人</span>
         <span class="card-count">共 {{ filteredMembers.length }} 人</span>
       </div>
       </div>
-    <div style="overflow:auto;max-height:calc(100vh - 300px);">
-      <el-table :data="filteredMembers" stripe style="width: 100%; max-height:calc(100vh - 300px);" v-loading="loading">
+      <el-table :data="filteredMembers" stripe style="width: 100%;" v-loading="loading" :max-height="tableHeight">
         <el-table-column label="成员信息" min-width="200">
         <el-table-column label="成员信息" min-width="200">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div class="member-cell">
             <div class="member-cell">
@@ -145,7 +144,6 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
-      </div>
     </el-card>
     </el-card>
 
 
     <!-- 成员详情抽屉 -->
     <!-- 成员详情抽屉 -->
@@ -233,6 +231,9 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
+    tableHeight() {
+      return window.innerHeight - 300
+    },
     filteredMembers() {
     filteredMembers() {
       if (!this.keyword) return this.teamMembers
       if (!this.keyword) return this.teamMembers
       const kw = this.keyword.toLowerCase()
       const kw = this.keyword.toLowerCase()