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

style(admin): C-9 GrowthTaskManagement/data-source-config/Activities/SubscriptionManagement/ReportTemplateManage 内联 style 归零

zxyj-web 3 недель назад
Родитель
Сommit
e8793ba01b

+ 20 - 10
cfc-web/src/views/admin/Activities.vue

@@ -7,7 +7,7 @@
       
 </PageHeader>
 
-      <div class="filter-bar" style="margin-bottom:12px;gap:12px;">
+      <div class="filter-bar filter-bar-gap">
         <el-input
           v-model="keyword"
           placeholder="搜索活动标题/地点"
@@ -22,7 +22,7 @@
           placeholder="活动状态"
           clearable
           @change="loadActivities"
-          style="width:130px;"
+          class="w-130"
         >
           <el-option label="全部状态" value="" />
           <el-option label="草稿" value="draft" />
@@ -34,7 +34,7 @@
           placeholder="所属维度"
           clearable
           @change="loadActivities"
-          style="width:120px;"
+          class="w-120"
         >
           <el-option label="全部维度" value="" />
           <el-option label="身" value="body" />
@@ -48,7 +48,7 @@
           placeholder="审核状态"
           clearable
           @change="loadActivities"
-          style="width:130px;"
+          class="w-130"
         >
           <el-option label="全部审核状态" value="" />
           <el-option label="待审核" value="pending" />
@@ -59,7 +59,7 @@
         <el-button size="mini" @click="resetSearch">重置</el-button>
       </div>
                 <div class="adm-table-wrap">
-<el-table :data="activities" v-loading="loading" border stripe style="min-width:900px;" height="100%">
+<el-table :data="activities" v-loading="loading" border stripe class="min-width-900" 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>
@@ -67,8 +67,8 @@
         </el-table-column>
         <el-table-column label="封面" width="80">
           <template slot-scope="{ row }">
-            <img v-if="row.coverImage" :src="row.coverImage" style="width:40px;height:40px;object-fit:cover;border-radius:4px;" />
-            <span v-else style="color:var(--adm-text-45)">无</span>
+            <img v-if="row.coverImage" :src="row.coverImage" class="cover-thumb" />
+            <span v-else class="text-muted">无</span>
           </template>
         </el-table-column>
         <el-table-column prop="title" label="活动标题" min-width="160" show-overflow-tooltip>
@@ -98,7 +98,7 @@
         </el-table-column>
         <el-table-column label="人数" width="90">
           <template slot-scope="{ row }">
-            <el-button type="text" size="mini" @click="showRegistrations(row)" style="padding:0;">
+            <el-button type="text" size="mini" @click="showRegistrations(row)" class="btn-no-pad">
               {{ row.currentParticipants || 0 }}/{{ row.maxParticipants || '不限' }}
             </el-button>
           </template>
@@ -181,10 +181,10 @@
           <template slot-scope="{ row }">
             <el-button v-if="row.status === 'pending'" type="success" size="small" @click="handleRegApprove(row)">通过</el-button>
             <el-button v-if="row.status === 'pending'" type="danger" size="small" @click="handleRegReject(row)">拒绝</el-button>
-            <span v-else style="color: var(--adm-text-45);">已处理</span>
+            <span v-else class="text-muted-inline">已处理</span>
           </template>
         </el-table-column>
-      <p v-if="!registrations.length && !regLoading" style="text-align:center;color:var(--adm-text-45);">暂无报名记录</p>
+      <p v-if="!registrations.length && !regLoading" class="empty-hint">暂无报名记录</p>
     </el-dialog>
   
   </el-table>
@@ -451,4 +451,14 @@ export default {
 .header-search {
   width: 220px;
 }
+/* == C 批内联清理工具类 == */
+.filter-bar-gap { margin-bottom: 12px; gap: 12px; }
+.w-130 { width: 130px; }
+.w-120 { width: 120px; }
+.min-width-900 { min-width: 900px; }
+.cover-thumb { width: 40px; height: 40px; object-fit: cover; border-radius: 4px; }
+.text-muted { color: var(--adm-text-45); }
+.btn-no-pad { padding: 0; }
+.text-muted-inline { color: var(--adm-text-45); }
+.empty-hint { text-align: center; color: var(--adm-text-45); }
 </style>

+ 17 - 10
cfc-web/src/views/admin/GrowthTaskManagement.vue

@@ -2,8 +2,8 @@
   <div class="growth-task 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-select v-model="filter.status" placeholder="状态筛选" size="small" style="width:130px" clearable @change="loadTasks">
+        <el-input v-model="keyword" placeholder="搜索..." prefix-icon="el-icon-search" class="w-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
+        <el-select v-model="filter.status" placeholder="状态筛选" size="small" class="w-130" clearable @change="loadTasks">
           <el-option label="全部状态" value="" />
           <el-option label="开启" value="enabled" />
           <el-option label="关闭" value="disabled" />
@@ -45,9 +45,9 @@
         <el-table-column label="奖励" width="160">
           <template slot-scope="{ row }">
             <div v-if="row.rewardItems && row.rewardItems.length">
-              <StatusTag size="mini" v-for="(ri, i) in row.rewardItems" :key="i" :text="ri.type + ':' + ri.value" style="margin:1px" />
+              <StatusTag size="mini" v-for="(ri, i) in row.rewardItems" :key="i" :text="ri.type + ':' + ri.value" class="m-1" />
             </div>
-            <span v-else style="color:var(--adm-text-45)">—</span>
+            <span v-else class="text-muted">—</span>
           </template>
         </el-table-column>
         <el-table-column label="状态" width="80">
@@ -82,7 +82,7 @@
         :page-size="filter.size"
         layout="total, sizes, prev, pager, next, jumper"
         :total="total"
-        style="margin-top:16px;text-align:right"
+        class="pagination-right"
       />
     </el-card>
 
@@ -98,7 +98,7 @@
         </el-form-item>
 
         <el-form-item label="任务类型">
-          <el-select v-model="form.type" placeholder="选择任务类型" style="width:100%">
+          <el-select v-model="form.type" placeholder="选择任务类型" class="full-width">
             <el-option label="每日任务" value="daily" />
             <el-option label="每周任务" value="weekly" />
             <el-option label="每月任务" value="monthly" />
@@ -109,7 +109,7 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <el-form-item label="关联维度">
-              <el-select v-model="form.dimensionCode" placeholder="选择维度" style="width:100%">
+              <el-select v-model="form.dimensionCode" placeholder="选择维度" class="full-width">
                 <el-option label="身" value="body" />
                 <el-option label="心" value="heart" />
                 <el-option label="智" value="mind" />
@@ -120,7 +120,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="触发方式">
-              <el-select v-model="form.triggerType" placeholder="选择触发方式" style="width:100%" clearable>
+              <el-select v-model="form.triggerType" placeholder="选择触发方式" class="full-width" clearable>
                 <el-option label="手动" value="manual" />
                 <el-option label="自动" value="auto" />
                 <el-option label="条件" value="condition" />
@@ -136,12 +136,12 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <el-form-item label="任务值">
-              <el-input-number v-model="form.taskValue" :min="0" :step="1" style="width:100%" placeholder="0" />
+              <el-input-number v-model="form.taskValue" :min="0" :step="1" class="full-width" placeholder="0" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="排序">
-              <el-input-number v-model="form.sortOrder" :min="0" :step="1" style="width:100%" placeholder="0" />
+              <el-input-number v-model="form.sortOrder" :min="0" :step="1" class="full-width" placeholder="0" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -366,4 +366,11 @@ export default {
 
 <style scoped>
 .growth-task { padding: 20px; }
+/* == C 批内联清理工具类 == */
+.w-200 { width: 200px; }
+.w-130 { width: 130px; }
+.m-1 { margin: 1px; }
+.text-muted { color: var(--adm-text-45); }
+.pagination-right { margin-top: 16px; text-align: right; }
+.full-width { width: 100%; }
 </style>

+ 14 - 9
cfc-web/src/views/admin/ReportTemplateManage.vue

@@ -48,7 +48,7 @@
       </PageHeader>
 
       <div class="report-template-form-wrap">
-      <el-form ref="form" :model="form" label-width="110px" style="max-width:900px">
+      <el-form ref="form" :model="form" label-width="110px" class="max-w-900">
         <el-row :gutter="16">
           <el-col :span="12">
             <el-form-item label="模板名称" required>
@@ -57,7 +57,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="报告类型" required>
-              <el-select v-model="form.reportType" placeholder="选择报告类型" style="width:100%">
+              <el-select v-model="form.reportType" placeholder="选择报告类型" class="w-100">
                 <el-option label="肠道菌群 (gut_flora)" value="gut_flora" />
                 <el-option label="DAN测评 (dan)" value="dan" />
                 <el-option label="体检报告 (physical_exam)" value="physical_exam" />
@@ -94,10 +94,10 @@
               <!-- indicator 块配置 -->
               <template v-if="block.type === 'indicator'">
                 <el-form-item label="分组标签">
-                  <el-input v-model="block.groupLabel" placeholder="如:血脂指标" style="width:200px" />
+                  <el-input v-model="block.groupLabel" placeholder="如:血脂指标" class="w-200" />
                 </el-form-item>
                 <el-form-item label="指标名称">
-                  <el-select v-model="block.indicatorNames" multiple filterable placeholder="搜索指标名称" style="width:100%">
+                  <el-select v-model="block.indicatorNames" multiple filterable placeholder="搜索指标名称" class="w-100">
                     <el-option v-for="ind in indicatorList" :key="ind.name" :label="ind.name" :value="ind.name" />
                   </el-select>
                 </el-form-item>
@@ -106,7 +106,7 @@
               <!-- list 块配置 -->
               <template v-if="block.type === 'list'">
                 <el-form-item label="列表来源">
-                  <el-select v-model="block.listKey" style="width:200px">
+                  <el-select v-model="block.listKey" class="w-200">
                     <el-option label="菌种详情" value="flora" />
                     <el-option label="益生菌种" value="probiotic" />
                     <el-option label="分类学" value="taxonomy" />
@@ -114,14 +114,14 @@
                   </el-select>
                 </el-form-item>
                 <el-form-item label="块标题">
-                  <el-input v-model="block.title" placeholder="块显示标题" style="width:200px" />
+                  <el-input v-model="block.title" placeholder="块显示标题" class="w-200" />
                 </el-form-item>
               </template>
 
               <!-- text 块配置 -->
               <template v-if="block.type === 'text'">
                 <el-form-item label="标题">
-                  <el-input v-model="block.title" style="width:200px" />
+                  <el-input v-model="block.title" class="w-200" />
                 </el-form-item>
                 <el-form-item label="内容">
                   <el-input v-model="block.content" type="textarea" :rows="3" />
@@ -131,7 +131,7 @@
           </div>
         </div>
 
-        <el-button size="small" type="dashed" @click="addBlock" style="margin-top:8px">+ 添加固定块</el-button>
+        <el-button size="small" type="dashed" @click="addBlock" class="mt-8">+ 添加固定块</el-button>
 
         <!-- 自由显示配置 -->
         <SectionTitle title="自由显示配置" />
@@ -140,7 +140,7 @@
           <span class="hint-text">开启后,未配置在固定块的指标将追加到末尾</span>
         </el-form-item>
         <el-form-item label="追加分组名" v-if="form.freeDisplay.enabled">
-          <el-input v-model="form.freeDisplay.groupName" placeholder="如:其他指标" style="width:200px" />
+          <el-input v-model="form.freeDisplay.groupName" placeholder="如:其他指标" class="w-200" />
         </el-form-item>
 
         <el-form-item>
@@ -431,4 +431,9 @@ export default {
 .preview-table th { background: var(--adm-bg-header); font-weight: 600; }
 .preview-text { font-size: 14px; color: var(--adm-text-65); line-height: 1.7; white-space: pre-wrap; }
 .empty-hint { color: var(--adm-text-25); text-align: center; padding: 40px; }
+/* == C 批内联清理工具类 == */
+.max-w-900 { max-width: 900px; }
+.w-100 { width: 100%; }
+.w-200 { width: 200px; }
+.mt-8 { margin-top: 8px; }
 </style>

+ 16 - 9
cfc-web/src/views/admin/SubscriptionManagement.vue

@@ -2,14 +2,14 @@
   <div class="subscription-management 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="statusFilter" placeholder="订阅状态" @change="loadList" style="width: 120px;">
+        <el-input v-model="keyword" placeholder="搜索家庭/用户..." prefix-icon="el-icon-search" class="w-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
+        <el-select v-model="statusFilter" placeholder="订阅状态" @change="loadList" class="w-120">
           <el-option label="全部" value="" />
           <el-option label="激活" value="active" />
           <el-option label="已过期" value="expired" />
           <el-option label="已取消" value="cancelled" />
         </el-select>
-        <el-select v-model="levelFilter" placeholder="会员等级" @change="loadList" style="width: 120px;">
+        <el-select v-model="levelFilter" placeholder="会员等级" @change="loadList" class="w-120">
           <el-option label="全部" value="" />
           <el-option label="L1 一生一世" value="L1" />
           <el-option label="L2 久久一生" value="L2" />
@@ -27,8 +27,8 @@
         </el-table-column>
         <el-table-column label="家庭信息" min-width="180" show-overflow-tooltip>
           <template slot-scope="{ row }">
-            <div style="display:flex;align-items:center;gap:8px;">
-              <span style="font-weight:600;">{{ row.familyName || '-' }}</span>
+            <div class="flex-row">
+              <span class="font-semibold">{{ row.familyName || '-' }}</span>
               <el-tag size="mini" type="info">{{ row.memberCount || 0 }}人</el-tag>
             </div>
           </template>
@@ -120,7 +120,7 @@
 
     <!-- 取消订阅弹窗 -->
     <el-dialog title="取消订阅" :visible.sync="cancelDialogVisible" width="450px">
-      <el-alert title="确认取消以下订阅" type="warning" :closable="false" style="margin-bottom:15px;">
+      <el-alert title="确认取消以下订阅" type="warning" :closable="false" class="mb-15">
         <template slot>
           家庭:<strong>{{ cancelTarget?.familyName }}</strong><br>
           等级:{{ levelLabel(cancelTarget?.level) }}
@@ -135,7 +135,7 @@
 
     <!-- 退款弹窗 -->
     <el-dialog title="退款" :visible.sync="refundDialogVisible" width="450px">
-      <el-alert title="确认退款" type="error" :closable="false" style="margin-bottom:15px;">
+      <el-alert title="确认退款" type="error" :closable="false" class="mb-15">
         <template slot>
           订单号:<strong>{{ refundTarget?.id }}</strong><br>
           金额:<strong>{{ formatPrice(refundTarget?.amount) }}</strong>
@@ -150,7 +150,7 @@
 
     <!-- 激活弹窗 -->
     <el-dialog title="重新激活订阅" :visible.sync="activateDialogVisible" width="450px">
-      <el-alert title="确认重新激活以下订阅" type="success" :closable="false" style="margin-bottom:15px;">
+      <el-alert title="确认重新激活以下订阅" type="success" :closable="false" class="mb-15">
         <template slot>
           家庭:<strong>{{ activateTarget?.familyName }}</strong><br>
           等级:{{ levelLabel(activateTarget?.level) }}
@@ -163,7 +163,7 @@
             type="datetime"
             placeholder="选择结束时间"
             value-format="yyyy-MM-dd HH:mm:ss"
-            style="width: 240px;"
+            class="w-240"
           />
         </el-form-item>
       </el-form>
@@ -343,4 +343,11 @@ export default {
   gap: 10px;
   align-items: center;
 }
+/* == C 批内联清理工具类 == */
+.w-200 { width: 200px; }
+.w-120 { width: 120px; }
+.w-240 { width: 240px; }
+.flex-row { display: flex; align-items: center; gap: 8px; }
+.font-semibold { font-weight: 600; }
+.mb-15 { margin-bottom: 15px; }
 </style>

+ 23 - 11
cfc-web/src/views/admin/data-source-config.vue

@@ -3,7 +3,7 @@
     <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="w-200" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
         <div class="admin-page-actions">
           <el-button type="primary" size="small" @click="handleCreate">+ 添加数据源</el-button>
         </div>
@@ -45,8 +45,8 @@
             <span class="sort-header" @click.stop="onSortClick('fileUrl', $event)">文件URL<span v-if="sortIndex('fileUrl') !== null" class="sort-index" :class="sortClass('fileUrl') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('fileUrl') }}</span>{{ sortIcon('fileUrl') }}</span>
           </template>
           <template slot-scope="scope">
-            <a v-if="scope.row.fileUrl" :href="scope.row.fileUrl" target="_blank" style="color:var(--adm-primary);font-size:12px;">查看文件</a>
-            <span v-else style="color:var(--adm-text-45)">-</span>
+            <a v-if="scope.row.fileUrl" :href="scope.row.fileUrl" target="_blank" class="text-primary">查看文件</a>
+            <span v-else class="text-muted">-</span>
           </template>
         </el-table-column>
         <el-table-column prop="createdAt" label="创建时间" width="160">
@@ -73,7 +73,6 @@
       <el-pagination
         v-if="total > 0"
         class="pagination-wrap"
-        style="margin-top:16px;text-align:right"
         :page.sync="page"
         :limit.sync="size"
         @current-change="fetchRecords"
@@ -84,10 +83,10 @@
     <el-dialog :visible.sync="dialogVisible" :title="isEdit ? '编辑数据源' : '添加数据源'" width="550px">
       <el-form :model="form" label-width="100px">
         <el-form-item label="成员ID" required>
-          <el-input-number v-model="form.memberId" :min="1" style="width:100%"/>
+          <el-input-number v-model="form.memberId" :min="1" class="full-width"/>
         </el-form-item>
         <el-form-item label="来源类型" required>
-          <el-select v-model="form.sourceType" placeholder="选择类型" style="width:100%">
+          <el-select v-model="form.sourceType" placeholder="选择类型" class="full-width">
             <el-option label="REPORT" value="REPORT"></el-option>
             <el-option label="PHOTO" value="PHOTO"></el-option>
             <el-option label="VOICE" value="VOICE"></el-option>
@@ -98,7 +97,7 @@
           <el-input v-model="form.dimensionCodes" placeholder="如: growth,sleep,vision"/>
         </el-form-item>
         <el-form-item label="置信度">
-          <el-input-number v-model="form.confidence" :min="0" :max="1" :precision="2" style="width:100%"/>
+          <el-input-number v-model="form.confidence" :min="0" :max="1" :precision="2" class="full-width"/>
         </el-form-item>
         <el-form-item label="解析结果">
           <el-input type="textarea" v-model="form.parsedResult" :rows="3" placeholder="JSON格式"/>
@@ -114,9 +113,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>
@@ -242,4 +241,17 @@ export default {
     }
   }
 }
-</script>
+</script>
+
+<style scoped>
+.admin-page { padding: 20px; }
+/* == C 批内联清理工具类 == */
+.w-200 { width: 200px; }
+.text-primary { color: var(--adm-primary); font-size: 12px; }
+.text-muted { color: var(--adm-text-45); }
+.pagination-right { margin-top: 16px; text-align: right; }
+.full-width { 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>