Просмотр исходного кода

style(admin): C-16 连续清理 25 文件共 96 处内联 style → CSS 类(含 ReportCollectorTrainer/VirtualTeamDetail/FlowEditor/TeacherFamilies/SliderCaptcha/ActivityRegistrationReview/dimension-index/EnergyRuleManagement/IndicatorCorrelations/IndicatorMappings/LangGraphAdmin/MbtiProfiles/NotificationTemplateManage/org-List/ProductProfitRate/ReportTypeManagement/GuideAudit/NutritionistAudit/PendingRefundAudit/ProductAudit/VendorAudit/supply-manage-Form/VirtualGoodsConfig/GuideFamilyTask/Points/TeacherPackages)

zxyj-web 3 недель назад
Родитель
Сommit
d815ce0960
26 измененных файлов с 263 добавлено и 109 удалено
  1. 8 4
      cfc-web/src/components/SliderCaptcha.vue
  2. 8 4
      cfc-web/src/views/GuideFamilyTask.vue
  3. 12 4
      cfc-web/src/views/Points.vue
  4. 10 4
      cfc-web/src/views/admin/ActivityRegistrationReview.vue
  5. 10 4
      cfc-web/src/views/admin/EnergyRuleManagement.vue
  6. 8 4
      cfc-web/src/views/admin/IndicatorCorrelations.vue
  7. 10 4
      cfc-web/src/views/admin/IndicatorMappings.vue
  8. 10 4
      cfc-web/src/views/admin/LangGraphAdmin.vue
  9. 12 4
      cfc-web/src/views/admin/MbtiProfiles.vue
  10. 10 5
      cfc-web/src/views/admin/NotificationTemplateManage.vue
  11. 10 4
      cfc-web/src/views/admin/ProductProfitRate.vue
  12. 12 5
      cfc-web/src/views/admin/ReportCollectorTrainer.vue
  13. 10 4
      cfc-web/src/views/admin/ReportTypeManagement.vue
  14. 10 4
      cfc-web/src/views/admin/VirtualGoodsConfig.vue
  15. 10 5
      cfc-web/src/views/admin/VirtualTeamDetail.vue
  16. 12 4
      cfc-web/src/views/admin/dimension/index.vue
  17. 9 4
      cfc-web/src/views/admin/org/List.vue
  18. 10 4
      cfc-web/src/views/admin/review/GuideAudit.vue
  19. 10 4
      cfc-web/src/views/admin/review/NutritionistAudit.vue
  20. 10 4
      cfc-web/src/views/admin/review/PendingRefundAudit.vue
  21. 10 4
      cfc-web/src/views/admin/review/ProductAudit.vue
  22. 10 4
      cfc-web/src/views/admin/review/VendorAudit.vue
  23. 10 4
      cfc-web/src/views/admin/supply-manage/Form.vue
  24. 10 5
      cfc-web/src/views/orchestration/FlowEditor.vue
  25. 12 5
      cfc-web/src/views/teacher/TeacherFamilies.vue
  26. 10 4
      cfc-web/src/views/teacher/TeacherPackages.vue

+ 8 - 4
cfc-web/src/components/SliderCaptcha.vue

@@ -21,12 +21,12 @@
         <span>请按住滑块拖动到最右侧完成验证</span>
       </template>
       <template v-else-if="status === 'success'">
-        <i class="el-icon-success" style="color:#4CAF50"></i>
-        <span style="color:#4CAF50">验证通过</span>
+        <i class="el-icon-success txt-success"></i>
+        <span class="txt-success">验证通过</span>
       </template>
       <template v-else-if="status === 'fail'">
-        <i class="el-icon-error" style="color:#EF5350"></i>
-        <span style="color:#EF5350">验证失败,请重试</span>
+        <i class="el-icon-error txt-fail"></i>
+        <span class="txt-fail">验证失败,请重试</span>
       </template>
     </div>
   </div>
@@ -219,4 +219,8 @@ export default {
   background: linear-gradient(135deg, #E57373, #EF5350);
   box-shadow: 0 2px 8px rgba(239, 83, 80, 0.4);
 }
+
+/* == C 批内联清理工具类 == */
+.txt-success { color: #4CAF50; }
+.txt-fail { color: #EF5350; }
 </style>

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

@@ -6,7 +6,7 @@
       </PageHeader>
 
       <!-- 搜索 -->
-      <el-form :inline="true" :model="searchForm" style="margin-bottom: 20px">
+      <el-form :inline="true" :model="searchForm" class="form-mb20">
         <el-form-item label="选择家庭">
           <el-select v-model="searchForm.familyId" placeholder="请选择家庭" clearable @change="handleFamilyChange">
             <el-option v-for="family in families" :key="family.familyId" :label="family.familyName" :value="family.familyId">
@@ -35,7 +35,7 @@
       <!-- 家庭概览 -->
       <div v-if="familyOverview" class="overview-cards" v-loading="overviewLoading">
         <div v-if="!overviewLoading && familyOverview.totalChildren === 0" class="empty-state">
-          <i class="el-icon-user-solid" style="font-size: 48px; color: var(--adm-text-25); margin-bottom: 16px;"></i>
+          <i class="el-icon-user-solid empty-icon-lg"></i>
           <p>暂无孩子数据</p>
         </div>
         <template v-else>
@@ -96,7 +96,7 @@
 <el-table v-if="searchForm.memberId" :data="tasks" border v-loading="taskLoading" height="100%">
         <template slot="empty">
           <div class="empty-table-state">
-            <i class="el-icon-tickets" style="font-size: 48px; color: var(--adm-text-25); margin-bottom: 16px;"></i>
+            <i class="el-icon-tickets empty-icon-lg"></i>
             <p>暂无任务数据</p>
           </div>
         </template>
@@ -162,7 +162,7 @@
       <!-- 分页 -->
       <el-pagination
         v-if="searchForm.memberId && total > 0"
-        style="margin-top: 20px; text-align: right"
+        class="pagination-right-20"
         :current-page="pagination.page"
         :page-size="pagination.size"
         :total="total"
@@ -472,4 +472,8 @@ taskLoading: false,
   margin: 20px 0;
 }
 
+/* == C 批内联清理工具类 == */
+.form-mb20 { margin-bottom: 20px; }
+.empty-icon-lg { font-size: 48px; color: var(--adm-text-25); margin-bottom: 16px; }
+.pagination-right-20 { margin-top: 20px; text-align: right; }
 </style>

+ 12 - 4
cfc-web/src/views/Points.vue

@@ -6,7 +6,7 @@
       </PageHeader>
 
       <!-- 搜索筛选 -->
-      <el-form :inline="true" :model="searchForm" style="margin-bottom: 20px">
+      <el-form :inline="true" :model="searchForm" class="form-mb20">
         <el-form-item label="成员姓名">
           <el-input
             v-model="searchForm.keyword"
@@ -21,7 +21,7 @@
             placeholder="全部家庭"
             clearable
             filterable
-            style="width: 220px"
+            class="select-220"
             @change="handleSearch"
           >
             <el-option
@@ -50,7 +50,7 @@
 
       <!-- 积分流水列表 -->
             <div class="adm-table-wrap">
-<el-table :data="tableData" border v-loading="loading" style="width: 100%" height="100%">
+<el-table :data="tableData" border v-loading="loading" class="table-full" height="100%">
         <el-table-column prop="id" label="ID" width="80">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('id', $event)">ID<span v-if="sortIndex('id') !== null" class="sort-index" :class="sortClass('id') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('id') }}</span>{{ sortIcon('id') }}</span>
@@ -110,7 +110,7 @@
 
       <!-- 分页 -->
       <el-pagination
-        style="margin-top: 20px; text-align: right"
+        class="pagination-right-20"
         @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
         :current-page="pagination.current"
@@ -241,4 +241,12 @@ export default {
 }
 </script>
 
+<style scoped>
+/* == C 批内联清理工具类 == */
+.form-mb20 { margin-bottom: 20px; }
+.select-220 { width: 220px; }
+.table-full { width: 100%; }
+.pagination-right-20 { margin-top: 20px; text-align: right; }
+</style>
+
 

+ 10 - 4
cfc-web/src/views/admin/ActivityRegistrationReview.vue

@@ -2,11 +2,11 @@
   <div class="registration-review admin-page">
     <PageHeader title="活动报名审核">
       <div class="filters">
-        <el-select v-model="activityId" placeholder="选择活动" @change="loadList" style="width: 200px;" clearable>
+        <el-select v-model="activityId" placeholder="选择活动" @change="loadList" class="filter-select-200" clearable>
           <el-option v-for="a in activityList" :key="a.id" :label="a.title" :value="a.id" />
         </el-select>
-         <el-input v-model="keyword" placeholder="搜索报名人/手机号/用户ID..." prefix-icon="el-icon-search" style="width:220px" clearable @keyup.enter.native="loadList" @clear="loadList" />
-         <el-select v-model="statusFilter" placeholder="状态筛选" @change="loadList" style="width: 130px;" clearable>
+         <el-input v-model="keyword" placeholder="搜索报名人/手机号/用户ID..." prefix-icon="el-icon-search" class="filter-input-220" clearable @keyup.enter.native="loadList" @clear="loadList" />
+         <el-select v-model="statusFilter" placeholder="状态筛选" @change="loadList" class="filter-select-130" clearable>
           <el-option label="全部状态" value="" />
           <el-option label="待审核" value="pending" />
           <el-option label="已通过" value="approved" />
@@ -52,7 +52,7 @@
         <template slot-scope="{ row }">
           <el-button v-if="row.status === 'pending'" type="success" size="mini" @click="handleApprove(row)">通过</el-button>
           <el-button v-if="row.status === 'pending'" type="danger" size="mini" @click="showRejectDialog(row)">拒绝</el-button>
-          <span v-else style="color: var(--adm-text-45);">已处理</span>
+          <span v-else class="text-muted">已处理</span>
         </template>
       </el-table-column>
     </el-table>
@@ -162,4 +162,10 @@ export default {
 
 <style scoped>
 .filters { display: flex; align-items: center; gap: 12px; }
+
+/* == C 批内联清理工具类 == */
+.filter-select-200 { width: 200px; }
+.filter-input-220 { width: 220px; }
+.filter-select-130 { width: 130px; }
+.text-muted { color: var(--adm-text-45); }
 </style>

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

@@ -2,8 +2,8 @@
   <div class="energy-rule-manage admin-page">
     <PageHeader title="能量规则管理">
       <div class="filters">
-        <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
-        <el-select v-model="dimensionFilter" placeholder="维度筛选" @change="loadList" style="width: 140px;" clearable>
+        <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" class="filter-input-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
+        <el-select v-model="dimensionFilter" placeholder="维度筛选" @change="loadList" class="filter-select-140" clearable>
           <el-option label="全部维度" value="" />
           <el-option v-for="d in dimensions" :key="d.code" :label="d.name" :value="d.code" />
         </el-select>
@@ -80,7 +80,7 @@
       :page-size="size"
       :total="total"
       layout="total, prev, pager, next"
-      style="margin-top: 20px; text-align: right;"
+      class="pagination-right-20"
     />
 
     <el-dialog :title="form.id ? '编辑规则' : '新增规则'" :visible.sync="dialogVisible" width="600px">
@@ -98,7 +98,7 @@
           <el-input v-model="form.action" placeholder="如 add_points / deduct" />
         </el-form-item>
         <el-form-item label="所属维度">
-          <el-select v-model="form.dimensionCode" style="width:100%;">
+          <el-select v-model="form.dimensionCode" class="form-full">
             <el-option v-for="d in dimensions" :key="d.code" :label="d.name" :value="d.code" />
           </el-select>
         </el-form-item>
@@ -249,4 +249,10 @@ export default {
 
 <style scoped>
 .filters { display: flex; align-items: center; gap: 12px; }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.filter-select-140 { width: 140px; }
+.pagination-right-20 { margin-top: 20px; text-align: right; }
+.form-full { width: 100%; }
 </style>

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

@@ -65,23 +65,23 @@
       :page-size="size"
       :total="total"
       layout="total, prev, pager, next"
-      style="margin-top: 20px; text-align: right;"
+      class="pagination-right-20"
     />
 
     <el-dialog :title="editingId ? '编辑关联对' : '新增关联对'" :visible.sync="dialogVisible" width="600px">
       <el-form :model="form" label-width="100px" size="small">
         <el-form-item label="指标A">
-          <el-select v-model="form.definitionIdA" filterable clearable :filter-method="filterDefsA" placeholder="搜索并选择指标A" style="width:100%;">
+          <el-select v-model="form.definitionIdA" filterable clearable :filter-method="filterDefsA" placeholder="搜索并选择指标A" class="form-full">
             <el-option v-for="d in defOptionsA" :key="d.id" :label="d.name + '(' + d.code + ')'" :value="d.id" />
           </el-select>
         </el-form-item>
         <el-form-item label="指标B">
-          <el-select v-model="form.definitionIdB" filterable clearable :filter-method="filterDefsB" placeholder="搜索并选择指标B" style="width:100%;">
+          <el-select v-model="form.definitionIdB" filterable clearable :filter-method="filterDefsB" placeholder="搜索并选择指标B" class="form-full">
             <el-option v-for="d in defOptionsB" :key="d.id" :label="d.name + '(' + d.code + ')'" :value="d.id" />
           </el-select>
         </el-form-item>
         <el-form-item label="方向">
-          <el-select v-model="form.direction" style="width:100%;">
+          <el-select v-model="form.direction" class="form-full">
             <el-option label="正向" value="positive" />
             <el-option label="负向" value="negative" />
           </el-select>
@@ -260,4 +260,8 @@ export default {
 
 <style scoped>
 .tip-text { margin-left: 8px; font-size: 12px; color: var(--adm-text-45); }
+
+/* == C 批内联清理工具类 == */
+.pagination-right-20 { margin-top: 20px; text-align: right; }
+.form-full { width: 100%; }
 </style>

+ 10 - 4
cfc-web/src/views/admin/IndicatorMappings.vue

@@ -2,11 +2,11 @@
   <div class="indicator-mappings admin-page">
     <PageHeader title="指标映射管理">
       <div class="filters">
-        <el-select v-model="statusFilter" placeholder="状态" clearable style="width: 120px;" @change="listMappings">
+        <el-select v-model="statusFilter" placeholder="状态" clearable class="filter-select-120" @change="listMappings">
           <el-option label="生效" :value="1" />
           <el-option label="待确认" :value="0" />
         </el-select>
-        <el-input v-model="sourceTypeFilter" placeholder="来源" style="width: 160px;" clearable @keyup.enter.native="listMappings" @clear="listMappings" />
+        <el-input v-model="sourceTypeFilter" placeholder="来源" class="filter-input-160" clearable @keyup.enter.native="listMappings" @clear="listMappings" />
         <el-button type="primary" icon="el-icon-search" @click="listMappings">查询</el-button>
         <el-button type="success" icon="el-icon-upload2" @click="openImport">批量导入</el-button>
       </div>
@@ -52,7 +52,7 @@
       :page-size="size"
       :total="total"
       layout="total, prev, pager, next"
-      style="margin-top: 20px; text-align: right;"
+      class="pagination-right-20"
     />
 
     <el-dialog title="批量导入映射种子" :visible.sync="importDialogVisible" width="600px">
@@ -79,7 +79,7 @@
           <el-input :value="aiSuggestionText" disabled />
         </el-form-item>
         <el-form-item label="目标定义">
-          <el-select v-model="confirmDefId" filterable clearable :filter-method="filterConfirmDefs" placeholder="搜索并选择目标定义" style="width:100%;">
+          <el-select v-model="confirmDefId" filterable clearable :filter-method="filterConfirmDefs" placeholder="搜索并选择目标定义" class="form-full">
             <el-option v-for="d in defOptions" :key="d.id" :label="d.name + '(' + d.code + ')'" :value="d.id" />
           </el-select>
         </el-form-item>
@@ -234,4 +234,10 @@ export default {
 
 <style scoped>
 .filters { display: flex; align-items: center; gap: 12px; }
+
+/* == C 批内联清理工具类 == */
+.filter-select-120 { width: 120px; }
+.filter-input-160 { width: 160px; }
+.pagination-right-20 { margin-top: 20px; text-align: right; }
+.form-full { width: 100%; }
 </style>

+ 10 - 4
cfc-web/src/views/admin/LangGraphAdmin.vue

@@ -13,7 +13,7 @@
         <i class="lg-stat-icon el-icon-share"></i>
         <div class="lg-stat-info">
           <div class="lg-stat-label">服务地址</div>
-          <div class="lg-stat-value" style="font-size:12px">{{ langgraphUrl }}</div>
+          <div class="lg-stat-value lg-stat-value-sm">{{ langgraphUrl }}</div>
           <div class="lg-stat-sub">端口 9000 · v{{ serviceVersion }}</div>
         </div>
       </div>
@@ -75,7 +75,7 @@
 
       <el-tab-pane label="API 端点" name="apis">
         <div class="lg-toolbar">
-          <el-input v-model="apiFilter" placeholder="筛选路径或说明..." prefix-icon="el-icon-search" size="small" clearable style="width:280px" />
+          <el-input v-model="apiFilter" placeholder="筛选路径或说明..." prefix-icon="el-icon-search" size="small" clearable class="filter-input-280" />
           <el-button size="small" @click="fetchSpec">刷新</el-button>
         </div>
                 <div class="adm-table-wrap">
@@ -98,11 +98,11 @@
 
       <el-tab-pane label="请求历史" name="logs">
         <div class="lg-toolbar">
-          <el-select v-model="logFilterMethod" placeholder="方法" size="small" clearable style="width:90px;margin-right:8px">
+          <el-select v-model="logFilterMethod" placeholder="方法" size="small" clearable class="filter-select-90mr8">
             <el-option label="GET" value="GET" />
             <el-option label="POST" value="POST" />
           </el-select>
-          <el-input v-model="logFilterPath" placeholder="路径筛选..." prefix-icon="el-icon-search" size="small" clearable style="width:200px;margin-right:8px" />
+          <el-input v-model="logFilterPath" placeholder="路径筛选..." prefix-icon="el-icon-search" size="small" clearable class="filter-input-200mr8" />
           <el-tag size="small" type="info">共 {{ totalLogs }} 条</el-tag>
           <el-button size="small" @click="fetchLogs" :loading="logLoading">刷新</el-button>
         </div>
@@ -498,4 +498,10 @@ export default {
   white-space: pre-wrap;
   word-break: break-all;
 }
+
+/* == C 批内联清理工具类 == */
+.lg-stat-value-sm { font-size: 12px; }
+.filter-input-280 { width: 280px; }
+.filter-select-90mr8 { width: 90px; margin-right: 8px; }
+.filter-input-200mr8 { width: 200px; margin-right: 8px; }
 </style>

+ 12 - 4
cfc-web/src/views/admin/MbtiProfiles.vue

@@ -12,7 +12,7 @@
 </PageHeader>
 
             <div class="adm-table-wrap">
-<el-table :data="list" border stripe v-loading="loading" size="mini" style="width:100%" height="100%">
+<el-table :data="list" border stripe v-loading="loading" size="mini" class="table-full" height="100%">
         <el-table-column prop="typeCode" label="类型代码" width="100" align="center" />
         <el-table-column prop="name" label="中文名称" width="120" align="center" />
         <el-table-column prop="description" label="核心特质" show-overflow-tooltip />
@@ -25,7 +25,7 @@
           <template slot-scope="scope">
             <el-button type="text" size="mini" @click="openEdit(scope.row)">编辑</el-button>
             <el-popconfirm title="确认删除该画像?" @confirm="doDelete(scope.row)">
-              <el-button slot="reference" type="text" size="mini" style="color:var(--adm-error-text)">删除</el-button>
+              <el-button slot="reference" type="text" size="mini" class="text-error">删除</el-button>
             </el-popconfirm>
           </template>
         </el-table-column>
@@ -36,10 +36,10 @@
     <el-dialog :title="form.id ? '编辑画像' : '新增画像'" :visible.sync="dialogVisible" width="680px" :close-on-click-modal="false">
       <el-form :model="form" label-width="120px" size="small">
         <el-form-item label="类型代码" required>
-          <el-input v-model="form.typeCode" maxlength="4" style="width:200px" :disabled="!!form.id" placeholder="如:INTJ" />
+          <el-input v-model="form.typeCode" maxlength="4" class="input-200" :disabled="!!form.id" placeholder="如:INTJ" />
         </el-form-item>
         <el-form-item label="中文名称" required>
-          <el-input v-model="form.name" style="width:300px" placeholder="如:建筑师" />
+          <el-input v-model="form.name" class="input-300" placeholder="如:建筑师" />
         </el-form-item>
         <el-form-item label="核心特质">
           <el-input v-model="form.description" type="textarea" :rows="3" placeholder="简要描述该类型的核心特征" />
@@ -182,3 +182,11 @@ export default {
   }
 }
 </script>
+
+<style scoped>
+/* == C 批内联清理工具类 == */
+.table-full { width: 100%; }
+.text-error { color: var(--adm-error-text); }
+.input-200 { width: 200px; }
+.input-300 { width: 300px; }
+</style>

+ 10 - 5
cfc-web/src/views/admin/NotificationTemplateManage.vue

@@ -28,8 +28,7 @@
         </el-table-column>
         <el-table-column prop="channels" label="推送通道" width="220">
           <template slot-scope="{ row }">
-            <StatusTag v-for="ch in channelLabels(row.channels)" :key="ch.value" :type="ch.type" size="mini"
-              style="margin-right: 4px" :text="ch.label" />
+            <StatusTag v-for="ch in channelLabels(row.channels)" :key="ch.value" :type="ch.type" size="mini" class="mr-4" :text="ch.label" />
           </template>
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('channels', $event)">推送通道<span v-if="sortIndex('channels') !== null" class="sort-index" :class="sortClass('channels') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('channels') }}</span>{{ sortIcon('channels') }}</span>
@@ -64,7 +63,7 @@
       <el-form :model="form" label-width="110px">
         <el-form-item label="类型" required>
           <el-select v-model="form.type" placeholder="请选择类型" filterable allow-create
-            style="width: 100%">
+            class="form-full">
             <el-option label="report_ready - 报告完成" value="report_ready"></el-option>
             <el-option label="reward_granted - 奖励到账" value="reward_granted"></el-option>
             <el-option label="system - 系统通知" value="system"></el-option>
@@ -85,13 +84,13 @@
             <el-checkbox label="gzh">公众号</el-checkbox>
             <el-checkbox label="phone">电话</el-checkbox>
           </el-checkbox-group>
-          <div style="color: var(--adm-text-45); font-size: 12px; line-height: 1.6">
+          <div class="hint-text">
             可多选;小程序内为内置通道,短信/微信/公众号/电话需接入外部接口后生效
           </div>
         </el-form-item>
         <el-form-item label="状态">
           <el-switch v-model="form.status" :active-value="1" :inactive-value="0"></el-switch>
-          <span style="margin-left: 10px; color: var(--adm-text-45)">停用后系统将使用默认文案</span>
+          <span class="ml10-text-muted">停用后系统将使用默认文案</span>
         </el-form-item>
       </el-form>
       <div slot="footer">
@@ -239,4 +238,10 @@ export default {
 .sort-header:hover {
   color: var(--adm-primary);
 }
+
+/* == C 批内联清理工具类 == */
+.mr-4 { margin-right: 4px; }
+.form-full { width: 100%; }
+.hint-text { color: var(--adm-text-45); font-size: 12px; line-height: 1.6; }
+.ml10-text-muted { margin-left: 10px; color: var(--adm-text-45); }
 </style>

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

@@ -1,8 +1,8 @@
 <template>
   <div class="product-profit-rate admin-page">
     <PageHeader title="产品利润率设置" subtitle="按商品类型维护利润率基点">
-      <el-input v-model="searchText" placeholder="商品名称搜索" prefix-icon="el-icon-search" style="width: 200px;" clearable @keyup.enter.native="loadList" />
-      <el-select v-model="typeFilter" placeholder="商品类型" @change="loadList" style="width: 140px;">
+      <el-input v-model="searchText" placeholder="商品名称搜索" prefix-icon="el-icon-search" class="filter-input-200" clearable @keyup.enter.native="loadList" />
+      <el-select v-model="typeFilter" placeholder="商品类型" @change="loadList" class="filter-select-140">
         <el-option label="全部类型" value="" />
         <el-option label="实物商品" value="physical" />
         <el-option label="虚拟商品" value="virtual" />
@@ -53,7 +53,7 @@
             :max="10000"
             :step="100"
             size="small"
-            style="width: 140px;"
+            class="input-140"
           />
           <span v-else class="text-muted">-</span>
         </template>
@@ -82,7 +82,7 @@
       :page-size="size"
       :total="total"
       layout="total, prev, pager, next"
-      style="margin-top: 20px; text-align: right;"
+      class="pagination-right-20"
     />
   </div>
 </template>
@@ -180,4 +180,10 @@ export default {
   object-fit: cover;
   border-radius: 4px;
 }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.filter-select-140 { width: 140px; }
+.input-140 { width: 140px; }
+.pagination-right-20 { margin-top: 20px; text-align: right; }
 </style>

+ 12 - 5
cfc-web/src/views/admin/ReportCollectorTrainer.vue

@@ -5,7 +5,7 @@
       <el-col :span="8">
         <el-card>
           <PageHeader slot="header" title="报告采集训练">
-            <el-select v-model="statusFilter" size="small" style="width:120px" @change="fetchClusters">
+            <el-select v-model="statusFilter" size="small" class="filter-select-120" @change="fetchClusters">
               <el-option label="全部" value="" />
               <el-option label="收集中" value="collecting" />
               <el-option label="可生成" value="ready" />
@@ -70,9 +70,9 @@
             </el-table-column>
         </el-card>
         <el-card v-else>
-          <div style="text-align:center;padding:80px;color:var(--adm-text-25)">
-            <i class="el-icon-document" style="font-size:48px"></i>
-            <p style="margin-top:16px">请从左侧选择一个聚类</p>
+          <div class="empty-center">
+            <i class="el-icon-document empty-icon"></i>
+            <p class="empty-tip">请从左侧选择一个聚类</p>
           </div>
         </el-card>
       </el-col>
@@ -110,7 +110,7 @@
         <SectionTitle title="手动指定报告类型" />
         <el-form label-width="100px">
           <el-form-item label="报告类型">
-            <el-select v-model="annotateForm.typeId" placeholder="选择类型" style="width:100%" @change="onTypeChange">
+            <el-select v-model="annotateForm.typeId" placeholder="选择类型" class="form-full" @change="onTypeChange">
               <el-option v-for="t in allTypes" :key="t.typeId" :label="t.displayName + ' (' + t.typeId + ')'" :value="t.typeId" />
             </el-select>
           </el-form-item>
@@ -284,4 +284,11 @@ export default {
 .t-ind-val { color: var(--adm-text-65); margin-left: 12px; }
 .trainer-text { font-size: 13px; color: var(--adm-text-65); line-height: 1.6; }
 .empty-hint { color: var(--adm-text-25); text-align: center; padding: 20px; }
+
+/* == C 批内联清理工具类 == */
+.filter-select-120 { width: 120px; }
+.empty-center { text-align: center; padding: 80px; color: var(--adm-text-25); }
+.empty-icon { font-size: 48px; }
+.empty-tip { margin-top: 16px; }
+.form-full { width: 100%; }
 </style>

+ 10 - 4
cfc-web/src/views/admin/ReportTypeManagement.vue

@@ -2,7 +2,7 @@
   <div class="report-types admin-page">
     <el-card>
       <PageHeader slot="header" title="报告类型管理">
-        <el-input v-model="keyword" placeholder="搜索类型..." prefix-icon="el-icon-search" size="small" clearable style="width: 200px;" />
+        <el-input v-model="keyword" placeholder="搜索类型..." prefix-icon="el-icon-search" size="small" clearable class="filter-input-200" />
         <el-button type="primary" size="small" @click="handleCreate">+ 新增类型</el-button>
       </PageHeader>
 
@@ -53,7 +53,7 @@
             <StatusTag v-if="row.scriptStatus === 'generating'" type="warning" size="small" text="生成中" />
             <StatusTag v-else-if="row.scriptStatus === 'ready'" type="success" size="small" text="测试通过" />
             <StatusTag v-else-if="row.scriptStatus === 'failed'" type="danger" size="small" text="生成失败" />
-            <span v-else style="color: var(--adm-text-25);">—</span>
+            <span v-else class="text-faint">—</span>
           </template>
         </el-table-column>
         <el-table-column prop="source" label="来源" width="100">
@@ -110,7 +110,7 @@
             :key="idx"
             closable
             size="small"
-            style="margin: 0 6px 6px 0;"
+            class="tag-margin"
             @close="removeIndicator(idx)"
           >{{ tag }}</el-tag>
           <el-input
@@ -118,7 +118,7 @@
             ref="indicatorInput"
             v-model="indicatorInput"
             size="mini"
-            style="width: 160px;"
+            class="input-160"
             @keyup.enter.native="confirmIndicator"
             @blur="confirmIndicator"
           />
@@ -327,4 +327,10 @@ export default {
 
 <style scoped>
 .el-form-item-msg { font-size: 12px; color: var(--adm-text-45); margin-top: 2px; }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.text-faint { color: var(--adm-text-25); }
+.tag-margin { margin: 0 6px 6px 0; }
+.input-160 { width: 160px; }
 </style>

+ 10 - 4
cfc-web/src/views/admin/VirtualGoodsConfig.vue

@@ -2,12 +2,12 @@
   <div class="virtual-goods-config admin-page">
     <el-card>
       <PageHeader slot="header" title="虚拟支付道具">
-        <el-select v-model="filterGoodsType" placeholder="道具类型" size="small" clearable style="width: 150px;" @change="loadData">
+        <el-select v-model="filterGoodsType" placeholder="道具类型" size="small" clearable class="filter-select-150" @change="loadData">
           <el-option label="测评套餐" value="ASSESSMENT_PACKAGE" />
           <el-option label="会员" value="MEMBERSHIP" />
           <el-option label="订阅" value="SUBSCRIPTION" />
         </el-select>
-        <el-select v-model="filterStatus" placeholder="状态" size="small" clearable style="width: 110px;">
+        <el-select v-model="filterStatus" placeholder="状态" size="small" clearable class="filter-select-110">
           <el-option label="启用" value="1" />
           <el-option label="停用" value="0" />
         </el-select>
@@ -51,7 +51,7 @@
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑道具' : '新增道具'" width="480px" :close-on-click-modal="false">
       <el-form :model="form" label-width="90px">
         <el-form-item label="道具类型">
-          <el-select v-model="form.goodsType" placeholder="选择道具类型" style="width: 220px;">
+          <el-select v-model="form.goodsType" placeholder="选择道具类型" class="filter-select-220">
             <el-option label="测评套餐" value="ASSESSMENT_PACKAGE" />
             <el-option label="会员" value="MEMBERSHIP" />
             <el-option label="订阅" value="SUBSCRIPTION" />
@@ -62,7 +62,7 @@
         </el-form-item>
         <el-form-item label="道具ID">
           <el-input v-model="form.productId" placeholder="请输入道具ID" />
-          <div style="color: var(--adm-text-45);font-size:12px;line-height:1.5;margin-top:4px;">需与微信商户后台道具 ID 一致;上线前必须配置</div>
+          <div class="hint-text-strong">需与微信商户后台道具 ID 一致;上线前必须配置</div>
         </el-form-item>
         <el-form-item label="道具名称">
           <el-input v-model="form.goodsName" placeholder="请输入道具名称" />
@@ -206,4 +206,10 @@ export default {
 .virtual-goods-config {
   padding: 20px;
 }
+
+/* == C 批内联清理工具类 == */
+.filter-select-150 { width: 150px; }
+.filter-select-110 { width: 110px; }
+.filter-select-220 { width: 220px; }
+.hint-text-strong { color: var(--adm-text-45); font-size: 12px; line-height: 1.5; margin-top: 4px; }
 </style>

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

@@ -15,7 +15,7 @@
       </div>
     </el-card>
 
-    <el-card style="margin-top: 16px">
+    <el-card class="card-mt16">
       <div slot="header">
         <SectionTitle title="成员列表" />
       </div>
@@ -24,7 +24,7 @@
         <el-table-column prop="id" label="关系ID" width="80"></el-table-column>
         <el-table-column label="用户昵称" width="140">
           <template slot-scope="scope">
-            <div style="display: flex; align-items: center; gap: 6px">
+            <div class="member-avatar-row">
               <el-avatar v-if="scope.row.userAvatar" :size="24" :src="scope.row.userAvatar"></el-avatar>
               <span>{{ scope.row.userNickname || '-' }}</span>
             </div>
@@ -64,7 +64,7 @@
             placeholder="搜索用户(姓名/手机号)"
             :remote-method="searchUsers"
             :loading="userSearchLoading"
-            style="width: 100%"
+            class="form-full"
           >
             <el-option
               v-for="u in userSearchResults"
@@ -75,7 +75,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="上级">
-          <el-select v-model="addForm.parentId" placeholder="无上级(根节点)" clearable style="width: 100%">
+          <el-select v-model="addForm.parentId" placeholder="无上级(根节点)" clearable class="form-full">
             <el-option
               v-for="m in members"
               :key="m.id"
@@ -97,7 +97,7 @@
           <span>{{ reassignForm.memberName }}</span>
         </el-form-item>
         <el-form-item label="新上级">
-          <el-select v-model="reassignForm.parentId" placeholder="无上级(根节点)" clearable style="width: 100%">
+          <el-select v-model="reassignForm.parentId" placeholder="无上级(根节点)" clearable class="form-full">
             <el-option
               v-for="m in reassignCandidates"
               :key="m.id"
@@ -292,4 +292,9 @@ export default {
 <style scoped>
 .virtual-team-detail { padding: 20px; }
 .team-info { margin-bottom: 0; }
+
+/* == C 批内联清理工具类 == */
+.card-mt16 { margin-top: 16px; }
+.member-avatar-row { display: flex; align-items: center; gap: 6px; }
+.form-full { width: 100%; }
 </style>

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

@@ -2,7 +2,7 @@
   <div class="dimension-manage admin-page">
     <el-card>
       <PageHeader slot="header" title="维度配置管理">
-        <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" class="filter-input-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <el-button type="primary" size="small" @click="handleCreate">+ 新增维度</el-button>
       </PageHeader>
 
@@ -74,9 +74,9 @@
     </el-dialog>
 
     <el-dialog title="操作成功" :visible.sync="successDialogVisible" width="400px" :close-on-click-modal="false">
-      <div style="text-align:center;padding:10px 0">
-        <i class="el-icon-success" style="color:var(--adm-success);font-size:32px"></i>
-        <p style="margin:12px 0 0;font-size:16px;color:var(--adm-text-88)">保存成功</p>
+      <div class="success-body">
+        <i class="el-icon-success success-icon"></i>
+        <p class="success-text">保存成功</p>
       </div>
       <div slot="footer">
         <el-button type="primary" @click="handleContinue">继续添加</el-button>
@@ -211,3 +211,11 @@ export default {
   }
 }
 </script>
+
+<style scoped>
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.success-body { text-align: center; padding: 10px 0; }
+.success-icon { color: var(--adm-success); font-size: 32px; }
+.success-text { margin: 12px 0 0; font-size: 16px; color: var(--adm-text-88); }
+</style>

+ 9 - 4
cfc-web/src/views/admin/org/List.vue

@@ -5,21 +5,21 @@
         <el-button v-if="isPlatform" type="primary" size="small" @click="$router.push('/org/create')">+ 新建组织</el-button>
       </PageHeader>
 
-      <el-form :inline="true" style="margin-bottom: 15px;">
+      <el-form :inline="true" class="form-mb15">
         <el-form-item>
           <el-input v-model="searchKeyword" placeholder="搜索组织名称/编号" clearable @clear="loadData" @keyup.enter.native="loadData">
             <i slot="prefix" class="el-icon-search"></i>
           </el-input>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchType" placeholder="类型" clearable style="width: 120px" @change="loadData">
+          <el-select v-model="searchType" placeholder="类型" clearable class="filter-select-120" @change="loadData">
             <el-option label="企业" value="enterprise"></el-option>
             <el-option label="机构" value="institution"></el-option>
             <el-option label="其他" value="other"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchStatus" placeholder="状态" clearable style="width: 120px" @change="loadData">
+          <el-select v-model="searchStatus" placeholder="状态" clearable class="filter-select-120" @change="loadData">
             <el-option label="启用" value="active"></el-option>
             <el-option label="停用" value="disabled"></el-option>
           </el-select>
@@ -68,7 +68,7 @@
 
       <el-pagination
         v-if="total > 0"
-        style="margin-top: 15px; text-align: right"
+        class="pagination-right-15"
         background
         layout="total, prev, pager, next"
         :total="total"
@@ -167,4 +167,9 @@ export default {
 .org-list {
   padding: 20px;
 }
+
+/* == C 批内联清理工具类 == */
+.form-mb15 { margin-bottom: 15px; }
+.filter-select-120 { width: 120px; }
+.pagination-right-15 { margin-top: 15px; text-align: right; }
 </style>

+ 10 - 4
cfc-web/src/views/admin/review/GuideAudit.vue

@@ -7,11 +7,11 @@
         <el-option label="已通过" value="approved" />
         <el-option label="已拒绝" value="rejected" />
       </el-select>
-      <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" class="filter-input-200" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
         <div class="adm-table-wrap">
-<el-table :data="pagedList" v-loading="loading" border stripe style="min-width:900px;" height="100%">
+<el-table :data="pagedList" v-loading="loading" border stripe class="wide-table" height="100%">
       <el-table-column label="ID" width="80">
         <template slot-scope="{ row }">{{ row.userId }}</template>
       </el-table-column>
@@ -51,7 +51,7 @@
       :total="total"
       layout="total, prev, pager, next"
       @current-change="onPageChange"
-      style="margin-top:12px;text-align:right;"
+      class="pagination-right"
     />
 
     <audit-detail-drawer
@@ -88,7 +88,7 @@
         <el-form-item label="审核状态">
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" style="color:var(--adm-error-text);">
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
           {{ currentRow.rejectReason }}
         </el-form-item>
       </el-form>
@@ -218,4 +218,10 @@ export default {
 .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; padding: 12px; background: var(--adm-bg-container); border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }
 .no-op { color: var(--adm-text-25); }
 .audit-img { max-width: 160px; max-height: 110px; border-radius: 4px; margin-right: 8px; border: 1px solid var(--adm-border-split); }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.wide-table { min-width: 900px; }
+.pagination-right { margin-top: 12px; text-align: right; }
+.text-error { color: var(--adm-error-text); }
 </style>

+ 10 - 4
cfc-web/src/views/admin/review/NutritionistAudit.vue

@@ -7,11 +7,11 @@
         <el-option label="已通过" value="approved" />
         <el-option label="已拒绝" value="rejected" />
       </el-select>
-      <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" class="filter-input-200" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
         <div class="adm-table-wrap">
-<el-table :data="pagedList" v-loading="loading" border stripe style="min-width:900px;" height="100%">
+<el-table :data="pagedList" v-loading="loading" border stripe class="wide-table" height="100%">
       <el-table-column label="ID" width="80">
         <template slot-scope="{ row }">{{ row.userId }}</template>
       </el-table-column>
@@ -48,7 +48,7 @@
       :total="total"
       layout="total, prev, pager, next"
       @current-change="onPageChange"
-      style="margin-top:12px;text-align:right;"
+      class="pagination-right"
     />
 
     <audit-detail-drawer
@@ -84,7 +84,7 @@
         <el-form-item label="审核状态">
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" style="color:var(--adm-error-text);">
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
           {{ currentRow.rejectReason }}
         </el-form-item>
       </el-form>
@@ -214,4 +214,10 @@ export default {
 .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; padding: 12px; background: var(--adm-bg-container); border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }
 .no-op { color: var(--adm-text-25); }
 .audit-img { max-width: 160px; max-height: 110px; border-radius: 4px; margin-right: 8px; border: 1px solid var(--adm-border-split); }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.wide-table { min-width: 900px; }
+.pagination-right { margin-top: 12px; text-align: right; }
+.text-error { color: var(--adm-error-text); }
 </style>

+ 10 - 4
cfc-web/src/views/admin/review/PendingRefundAudit.vue

@@ -102,7 +102,7 @@
       :total="total"
       layout="total, prev, pager, next"
       @current-change="loadData"
-      style="margin-top:12px;text-align:right;"
+      class="pagination-right"
     />
 
     <audit-detail-drawer
@@ -118,14 +118,14 @@
         <el-form-item label="订单号">{{ currentRow.orderNo || '-' }}</el-form-item>
         <el-form-item label="提现申请ID">{{ currentRow.withdrawalRequestId || '-' }}</el-form-item>
         <el-form-item label="用户">{{ currentRow.userName || '用户' + currentRow.userId }}</el-form-item>
-        <el-form-item label="退款金额" style="font-weight:bold;color:var(--adm-error-text);">{{ formatPriceWithSymbol(currentRow.amount) }}</el-form-item>
+        <el-form-item label="退款金额" class="text-error-bold">{{ formatPriceWithSymbol(currentRow.amount) }}</el-form-item>
         <el-form-item label="实退金额">{{ currentRow.refundedAmount ? formatPriceWithSymbol(currentRow.refundedAmount) : '-' }}</el-form-item>
         <el-form-item label="状态">
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
         </el-form-item>
         <el-form-item label="尝试次数">{{ currentRow.attemptCount }}/{{ currentRow.maxAttempts }}</el-form-item>
-        <el-form-item label="失败原因" v-if="currentRow.failureReason" style="color:var(--adm-error-text);">{{ currentRow.failureReason }}</el-form-item>
-        <el-form-item label="中止原因" v-if="currentRow.remark" style="color:var(--adm-text-45);">{{ currentRow.remark }}</el-form-item>
+        <el-form-item label="失败原因" v-if="currentRow.failureReason" class="text-error">{{ currentRow.failureReason }}</el-form-item>
+        <el-form-item label="中止原因" v-if="currentRow.remark" class="text-muted">{{ currentRow.remark }}</el-form-item>
         <el-form-item label="创建时间">{{ formatTime(currentRow.createdAt) }}</el-form-item>
       </el-form>
     </audit-detail-drawer>
@@ -262,4 +262,10 @@ export default {
 .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; padding: 12px; background: var(--adm-bg-container); border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }
 .summary-bar { margin-bottom: 12px; }
 .amount { font-weight: 500; color: var(--adm-error-text); }
+
+/* == C 批内联清理工具类 == */
+.pagination-right { margin-top: 12px; text-align: right; }
+.text-error-bold { font-weight: bold; color: var(--adm-error-text); }
+.text-error { color: var(--adm-error-text); }
+.text-muted { color: var(--adm-text-45); }
 </style>

+ 10 - 4
cfc-web/src/views/admin/review/ProductAudit.vue

@@ -10,7 +10,7 @@
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
         <div class="adm-table-wrap">
-<el-table :data="list" v-loading="loading" border stripe style="min-width:900px;" height="100%">
+<el-table :data="list" v-loading="loading" border stripe class="wide-table" height="100%">
       <el-table-column prop="id" label="ID" width="60">
         <template slot="header">
           <span class="sort-header" @click.stop="onSortClick('id', $event)">ID<span v-if="sortIndex('id') !== null" class="sort-index" :class="sortClass('id') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('id') }}</span>{{ sortIcon('id') }}</span>
@@ -50,16 +50,16 @@
         <el-form-item label="ID">{{ currentRow.id }}</el-form-item>
         <el-form-item label="商品名称">{{ detail.name || currentRow.name }}</el-form-item>
         <el-form-item label="商品图片" v-if="detail.image || detail.coverImage">
-          <img :src="detail.image || detail.coverImage" style="max-width:220px;border-radius:4px;" />
+          <img :src="detail.image || detail.coverImage" class="img-220" />
         </el-form-item>
         <el-form-item label="价格">{{ detail.price != null ? detail.price : '-' }}</el-form-item>
         <el-form-item label="库存">{{ detail.stock != null ? detail.stock : '-' }}</el-form-item>
         <el-form-item label="分类">{{ detail.categoryName || detail.category || '-' }}</el-form-item>
         <el-form-item label="供应商">{{ detail.vendorName || detail.supplierName || '-' }}</el-form-item>
         <el-form-item label="商品描述">
-          <div style="white-space:pre-wrap;">{{ detail.description || '-' }}</div>
+          <div class="pre-wrap">{{ detail.description || '-' }}</div>
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" style="color:var(--adm-error-text);">
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
           {{ currentRow.rejectReason }}
         </el-form-item>
       </el-form>
@@ -132,4 +132,10 @@ export default {
 <style scoped>
 .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; padding: 12px; background: var(--adm-bg-container); border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }
 .no-op { color: var(--adm-text-25); }
+
+/* == C 批内联清理工具类 == */
+.wide-table { min-width: 900px; }
+.img-220 { max-width: 220px; border-radius: 4px; }
+.pre-wrap { white-space: pre-wrap; }
+.text-error { color: var(--adm-error-text); }
 </style>

+ 10 - 4
cfc-web/src/views/admin/review/VendorAudit.vue

@@ -7,11 +7,11 @@
         <el-option label="已通过" value="approved" />
         <el-option label="已拒绝" value="rejected" />
       </el-select>
-      <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" class="filter-input-200" />
       <el-button size="small" @click="loadData" :loading="loading">刷新</el-button>
     </div>
         <div class="adm-table-wrap">
-<el-table :data="pagedList" v-loading="loading" border stripe style="min-width:900px;" height="100%">
+<el-table :data="pagedList" v-loading="loading" border stripe class="wide-table" height="100%">
       <el-table-column label="ID" width="80">
         <template slot-scope="{ row }">{{ row.userId }}</template>
       </el-table-column>
@@ -51,7 +51,7 @@
       :total="total"
       layout="total, prev, pager, next"
       @current-change="onPageChange"
-      style="margin-top:12px;text-align:right;"
+      class="pagination-right"
     />
 
     <audit-detail-drawer
@@ -92,7 +92,7 @@
         <el-form-item label="审核状态">
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" style="color:var(--adm-error-text);">
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
           {{ currentRow.rejectReason }}
         </el-form-item>
       </el-form>
@@ -228,4 +228,10 @@ export default {
 .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; padding: 12px; background: var(--adm-bg-container); border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.08); }
 .no-op { color: var(--adm-text-25); }
 .audit-img { max-width: 160px; max-height: 110px; border-radius: 4px; margin-right: 8px; border: 1px solid var(--adm-border-split); }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.wide-table { min-width: 900px; }
+.pagination-right { margin-top: 12px; text-align: right; }
+.text-error { color: var(--adm-error-text); }
 </style>

+ 10 - 4
cfc-web/src/views/admin/supply-manage/Form.vue

@@ -19,7 +19,7 @@
         </el-form-item>
 
         <el-form-item label="服务商类型" prop="vendorType">
-          <el-select v-model="form.vendorType" placeholder="请选择服务商类型" style="width: 100%">
+          <el-select v-model="form.vendorType" placeholder="请选择服务商类型" class="form-full">
             <el-option label="成长规划师" value="planner"></el-option>
             <el-option label="活动规划师" value="activity_provider"></el-option>
             <el-option label="商品供应商" value="product_supplier"></el-option>
@@ -42,9 +42,9 @@
     </el-card>
 
     <el-dialog title="操作成功" :visible.sync="successDialogVisible" width="400px" :close-on-click-modal="false">
-      <div style="text-align:center;padding:10px 0">
-        <i class="el-icon-success" style="color: var(--adm-success);font-size:32px"></i>
-        <p style="margin:12px 0 0;font-size:16px;color: var(--adm-text-88)">{{ isEdit ? '保存成功' : '创建成功' }}</p>
+      <div class="success-body">
+        <i class="el-icon-success success-icon"></i>
+        <p class="success-text">{{ isEdit ? '保存成功' : '创建成功' }}</p>
       </div>
       <div slot="footer">
         <el-button v-if="!isEdit" type="primary" @click="handleContinue">继续添加</el-button>
@@ -146,4 +146,10 @@ export default {
   padding: 20px;
   max-width: 600px;
 }
+
+/* == C 批内联清理工具类 == */
+.form-full { width: 100%; }
+.success-body { text-align: center; padding: 10px 0; }
+.success-icon { color: var(--adm-success); font-size: 32px; }
+.success-text { margin: 12px 0 0; font-size: 16px; color: var(--adm-text-88); }
 </style>

+ 10 - 5
cfc-web/src/views/orchestration/FlowEditor.vue

@@ -11,10 +11,10 @@
 
       <el-form :inline="true">
         <el-form-item label="流名称">
-          <el-input v-model="flowName" placeholder="请输入编排流名称" style="width:250px"></el-input>
+          <el-input v-model="flowName" placeholder="请输入编排流名称" class="input-250"></el-input>
         </el-form-item>
         <el-form-item label="描述">
-          <el-input v-model="flowDescription" placeholder="可选" style="width:300px"></el-input>
+          <el-input v-model="flowDescription" placeholder="可选" class="input-300"></el-input>
         </el-form-item>
       </el-form>
 
@@ -52,7 +52,7 @@
                 <el-switch v-model="selectedNode.is_start_node"></el-switch>
               </el-form-item>
               <el-form-item label="执行人">
-                <el-select v-model="selectedNode.executorType" style="width:100%">
+                <el-select v-model="selectedNode.executorType" class="form-full">
                   <el-option label="孩子" value="child"></el-option>
                   <el-option label="成员" value="member"></el-option>
                 </el-select>
@@ -71,14 +71,14 @@
           <template v-else-if="selectedEdge">
             <el-form label-width="90px" size="mini">
               <el-form-item label="边类型">
-                <el-select v-model="selectedEdge.type" style="width:100%">
+                <el-select v-model="selectedEdge.type" class="form-full">
                   <el-option label="普通" value="normal"></el-option>
                   <el-option label="失败兜底" value="failed"></el-option>
                   <el-option label="超时兜底" value="timeout"></el-option>
                 </el-select>
               </el-form-item>
               <el-form-item label="触发语义">
-                <el-select v-model="selectedEdge.operator" style="width:100%">
+                <el-select v-model="selectedEdge.operator" class="form-full">
                   <el-option label="AND(全部完成)" value="AND"></el-option>
                   <el-option label="OR(任一完成)" value="OR"></el-option>
                 </el-select>
@@ -372,4 +372,9 @@ export default {
 .prop-empty { color: var(--adm-text-45); font-size: 12px; }
 .flow-node { position: absolute; width: 120px; padding: 8px; background: var(--adm-bg-container); border: 2px solid var(--adm-primary); border-radius: 6px; text-align: center; font-size: 12px; cursor: move; user-select: none; }
 .flow-node .node-id { display: block; color: var(--adm-text-25); font-size: 10px; margin-top: 2px; }
+
+/* == C 批内联清理工具类 == */
+.input-250 { width: 250px; }
+.input-300 { width: 300px; }
+.form-full { width: 100%; }
 </style>

+ 12 - 5
cfc-web/src/views/teacher/TeacherFamilies.vue

@@ -44,7 +44,7 @@
     <!-- 家庭列表 -->
     <el-card class="table-card">
                 <div class="adm-table-wrap">
-<el-table :data="filteredFamilies" stripe style="width: 100%;" v-loading="loading" height="100%">
+<el-table :data="filteredFamilies" stripe class="table-full" v-loading="loading" height="100%">
         <el-table-column label="家庭信息" min-width="200">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('familyId', $event)">家庭信息<span v-if="sortIndex('familyId') !== null" class="sort-index" :class="sortClass('familyId') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('familyId') }}</span>{{ sortIcon('familyId') }}</span>
@@ -91,7 +91,7 @@
           </template>
           <template slot-scope="scope">
             <div class="completion-cell">
-              <el-progress :percentage="scope.row.taskCompletionRate || 0" :color="getCompletionColor(scope.row.taskCompletionRate || 0)" :show-text="false" style="width: 80px"></el-progress>
+              <el-progress :percentage="scope.row.taskCompletionRate || 0" :color="getCompletionColor(scope.row.taskCompletionRate || 0)" :show-text="false" class="progress-80"></el-progress>
               <span class="completion-text">{{ scope.row.taskCompletionRate || 0 }}%</span>
             </div>
           </template>
@@ -178,19 +178,19 @@
         <el-row :gutter="12" class="task-stats">
           <el-col :span="8">
             <div class="task-stat-item">
-              <div class="task-stat-value" style="color: var(--adm-primary)">{{ currentFamily.todayTasks || 0 }}</div>
+              <div class="task-stat-value text-primary">{{ currentFamily.todayTasks || 0 }}</div>
               <div class="task-stat-label">今日任务</div>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="task-stat-item">
-              <div class="task-stat-value" style="color: var(--adm-success)">{{ currentFamily.completedTasks || 0 }}</div>
+              <div class="task-stat-value text-success">{{ currentFamily.completedTasks || 0 }}</div>
               <div class="task-stat-label">已完成</div>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="task-stat-item">
-              <div class="task-stat-value" style="color: var(--adm-warning)">{{ currentFamily.pendingTasks || 0 }}</div>
+              <div class="task-stat-value text-warning">{{ currentFamily.pendingTasks || 0 }}</div>
               <div class="task-stat-label">待完成</div>
             </div>
           </el-col>
@@ -474,4 +474,11 @@ export default {
   margin-top: 4px;
 }
 
+/* == C 批内联清理工具类 == */
+.table-full { width: 100%; }
+.progress-80 { width: 80px; }
+.text-primary { color: var(--adm-primary); }
+.text-success { color: var(--adm-success); }
+.text-warning { color: var(--adm-warning); }
+
 </style>

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

@@ -2,7 +2,7 @@
   <div class="teacher-packages admin-page">
     <!-- 页面标题区 -->
     <PageHeader title="我的任务模板" subtitle="管理您的服务任务模板">
-      <el-input v-model="keyword" placeholder="搜索任务模板..." prefix-icon="el-icon-search" size="small" style="width:200px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
+      <el-input v-model="keyword" placeholder="搜索任务模板..." prefix-icon="el-icon-search" size="small" class="filter-input-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
       <el-button type="primary" size="small" @click="handleCreate">
         <i class="el-icon-plus"></i> 创建任务模板
       </el-button>
@@ -27,7 +27,7 @@
     <!-- 任务模板列表 -->
     <el-card class="table-card">
                 <div class="adm-table-wrap">
-<el-table :data="filteredPackages" stripe style="width: 100%;" v-loading="loading" height="100%">
+<el-table :data="filteredPackages" stripe class="table-full" v-loading="loading" height="100%">
         <el-table-column label="任务模板信息" min-width="200">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('id', $event)">任务模板信息<span v-if="sortIndex('id') !== null" class="sort-index" :class="sortClass('id') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('id') }}</span>{{ sortIcon('id') }}</span>
@@ -115,9 +115,9 @@
         <el-form-item label="选择模板">
           <el-select v-model="form.packageId" placeholder="请选择任务模板" @change="handleTemplateChange" class="full-width">
             <el-option v-for="t in templates" :key="t.id" :label="t.name" :value="t.id">
-              <span style="display: flex; justify-content: space-between">
+              <span class="price-row">
                 <span>{{ t.name }}</span>
-                <span style="color: var(--adm-warning-text)">{{ formatPriceWithSymbol(t.referencePrice) }}</span>
+                <span class="text-warning">{{ formatPriceWithSymbol(t.referencePrice) }}</span>
               </span>
             </el-option>
           </el-select>
@@ -445,4 +445,10 @@ export default {
   justify-content: flex-end;
   gap: 12px;
 }
+
+/* == C 批内联清理工具类 == */
+.filter-input-200 { width: 200px; }
+.table-full { width: 100%; }
+.price-row { display: flex; justify-content: space-between; }
+.text-warning { color: var(--adm-warning-text); }
 </style>