Эх сурвалжийг харах

style(admin): B-33 Report 模块 7 页令牌化 + ReportParseStatus 接入 PageHeader + 删 sort 死样式

liaoxg 3 долоо хоног өмнө
parent
commit
7a17554473

+ 0 - 9
cfc-web/src/views/admin/ReportAutoLearn.vue

@@ -136,13 +136,4 @@ export default {
   white-space: pre-wrap;
   white-space: pre-wrap;
   word-break: break-all;
   word-break: break-all;
 }
 }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
 </style>
 </style>

+ 11 - 20
cfc-web/src/views/admin/ReportCollectorTrainer.vue

@@ -70,7 +70,7 @@
             </el-table-column>
             </el-table-column>
         </el-card>
         </el-card>
         <el-card v-else>
         <el-card v-else>
-          <div style="text-align:center;padding:80px;color:#bbb">
+          <div style="text-align:center;padding:80px;color:var(--adm-text-25)">
             <i class="el-icon-document" style="font-size:48px"></i>
             <i class="el-icon-document" style="font-size:48px"></i>
             <p style="margin-top:16px">请从左侧选择一个聚类</p>
             <p style="margin-top:16px">请从左侧选择一个聚类</p>
           </div>
           </div>
@@ -271,26 +271,17 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .report-trainer { padding: 16px; }
 .report-trainer { padding: 16px; }
-.llm-result { background: #f5f7fa; padding: 12px; border-radius: 4px; font-size: 13px; max-height: 300px; overflow: auto; white-space: pre-wrap; }
-.hint-text { margin-left: 8px; color: #999; font-size: 12px; }
-.trainer-preview { border: 1px solid #ebeef5; border-radius: 8px; padding: 12px; margin-top: 8px; }
+.llm-result { background: var(--adm-bg-header); padding: 12px; border-radius: 4px; font-size: 13px; max-height: 300px; overflow: auto; white-space: pre-wrap; }
+.hint-text { margin-left: 8px; color: var(--adm-text-45); font-size: 12px; }
+.trainer-preview { border: 1px solid var(--adm-border-split); border-radius: 8px; padding: 12px; margin-top: 8px; }
 .trainer-block { margin-bottom: 12px; }
 .trainer-block { margin-bottom: 12px; }
-.trainer-block-title { font-weight: bold; font-size: 14px; color: #303133; margin-bottom: 6px; }
+.trainer-block-title { font-weight: bold; font-size: 14px; color: var(--adm-text-88); margin-bottom: 6px; }
 .trainer-score { display: flex; flex-wrap: wrap; gap: 8px; }
 .trainer-score { display: flex; flex-wrap: wrap; gap: 8px; }
-.trainer-score-item { background: #f0f9ff; padding: 4px 12px; border-radius: 4px; font-size: 13px; }
+.trainer-score-item { background: var(--adm-info-bg); padding: 4px 12px; border-radius: 4px; font-size: 13px; }
 .trainer-indicator { max-height: 200px; overflow-y: auto; }
 .trainer-indicator { max-height: 200px; overflow-y: auto; }
-.trainer-ind-item { display: flex; padding: 4px 0; border-bottom: 1px solid #f0f0f0; font-size: 13px; }
-.t-ind-name { flex: 1; color: #333; }
-.t-ind-val { color: #666; margin-left: 12px; }
-.trainer-text { font-size: 13px; color: #555; line-height: 1.6; }
-.empty-hint { color: #bbb; text-align: center; padding: 20px; }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
+.trainer-ind-item { display: flex; padding: 4px 0; border-bottom: 1px solid var(--adm-border-split); font-size: 13px; }
+.t-ind-name { flex: 1; color: var(--adm-text-88); }
+.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; }
 </style>
 </style>

+ 66 - 66
cfc-web/src/views/admin/ReportParseStatus.vue

@@ -1,73 +1,73 @@
 <template>
 <template>
   <div class="report-parse-status admin-page">
   <div class="report-parse-status admin-page">
-    <div class="header admin-page-header">
-      <h2 class="admin-page-title">解析进度</h2>
-    </div>
+    <el-card>
+      <PageHeader slot="header" title="解析进度" />
 
 
-    <div class="filter-bar">
-      <el-select v-model="query.parseStatus" placeholder="解析状态" clearable style="width: 140px">
-        <el-option label="全部" value="" />
-        <el-option label="采集中" value="collecting" />
-        <el-option label="成功" value="completed" />
-        <el-option label="失败" value="failed" />
-      </el-select>
-      <el-input
-        v-model="query.keyword"
-        placeholder="关键词(文件名或用户ID)"
-        style="width: 220px"
-        clearable
-        @keyup.enter.native="handleSearch"
-      />
-      <el-button type="primary" @click="handleSearch">查询</el-button>
-      <el-button @click="handleReset">重置</el-button>
-    </div>
+      <div class="filter-bar">
+        <el-select v-model="query.parseStatus" placeholder="解析状态" clearable style="width: 140px">
+          <el-option label="全部" value="" />
+          <el-option label="采集中" value="collecting" />
+          <el-option label="成功" value="completed" />
+          <el-option label="失败" value="failed" />
+        </el-select>
+        <el-input
+          v-model="query.keyword"
+          placeholder="关键词(文件名或用户ID)"
+          style="width: 220px"
+          clearable
+          @keyup.enter.native="handleSearch"
+        />
+        <el-button type="primary" @click="handleSearch">查询</el-button>
+        <el-button @click="handleReset">重置</el-button>
+      </div>
 
 
-    <div class="adm-table-wrap">
-      <el-table :data="list" v-loading="loading" border stripe height="100%">
-        <el-table-column prop="draftId" label="草稿ID" width="90" />
-        <el-table-column prop="userId" label="用户ID" width="90" />
-        <el-table-column prop="reportType" label="报告类型" width="130" />
-        <el-table-column prop="originalFilename" label="文件名" min-width="200" show-overflow-tooltip />
-        <el-table-column label="解析状态" width="100">
-          <template slot-scope="{ row }">
-            <StatusTag v-if="row.parseStatus === 'collecting'" type="info" size="small" text="采集中" />
-            <StatusTag v-else-if="row.parseStatus === 'completed'" type="success" size="small" text="成功" />
-            <StatusTag v-else-if="row.parseStatus === 'failed'" type="danger" size="small" text="失败" />
-            <el-tag v-else size="small">未触发</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column prop="parseMethod" label="解析方式" width="110" />
-        <el-table-column prop="parseAttempt" label="尝试次数" width="90" />
-        <el-table-column label="下次重试" width="160">
-          <template slot-scope="{ row }">{{ formatTime(row.nextRetryAt) }}</template>
-        </el-table-column>
-        <el-table-column prop="parseError" label="错误信息" min-width="180" show-overflow-tooltip />
-        <el-table-column prop="confirmedReportId" label="入库报告ID" width="110" />
-        <el-table-column label="更新时间" width="160">
-          <template slot-scope="{ row }">{{ formatTime(row.updatedAt) }}</template>
-        </el-table-column>
-        <el-table-column label="操作" width="100" fixed="right">
-          <template slot-scope="{ row }">
-            <el-button
-              size="mini"
-              type="primary"
-              :disabled="row.parseStatus === 'completed'"
-              @click="handleRetry(row)"
-            >重试</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
+      <div class="adm-table-wrap">
+        <el-table :data="list" v-loading="loading" border stripe height="100%">
+          <el-table-column prop="draftId" label="草稿ID" width="90" />
+          <el-table-column prop="userId" label="用户ID" width="90" />
+          <el-table-column prop="reportType" label="报告类型" width="130" />
+          <el-table-column prop="originalFilename" label="文件名" min-width="200" show-overflow-tooltip />
+          <el-table-column label="解析状态" width="100">
+            <template slot-scope="{ row }">
+              <StatusTag v-if="row.parseStatus === 'collecting'" type="info" size="small" text="采集中" />
+              <StatusTag v-else-if="row.parseStatus === 'completed'" type="success" size="small" text="成功" />
+              <StatusTag v-else-if="row.parseStatus === 'failed'" type="danger" size="small" text="失败" />
+              <StatusTag v-else size="small" text="未触发" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="parseMethod" label="解析方式" width="110" />
+          <el-table-column prop="parseAttempt" label="尝试次数" width="90" />
+          <el-table-column label="下次重试" width="160">
+            <template slot-scope="{ row }">{{ formatTime(row.nextRetryAt) }}</template>
+          </el-table-column>
+          <el-table-column prop="parseError" label="错误信息" min-width="180" show-overflow-tooltip />
+          <el-table-column prop="confirmedReportId" label="入库报告ID" width="110" />
+          <el-table-column label="更新时间" width="160">
+            <template slot-scope="{ row }">{{ formatTime(row.updatedAt) }}</template>
+          </el-table-column>
+          <el-table-column label="操作" width="100" fixed="right">
+            <template slot-scope="{ row }">
+              <el-button
+                size="mini"
+                type="primary"
+                :disabled="row.parseStatus === 'completed'"
+                @click="handleRetry(row)"
+              >重试</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
 
 
-    <el-pagination
-      v-if="total > size"
-      @current-change="onPageChange"
-      :current-page="page"
-      :page-size="size"
-      :total="total"
-      layout="total, prev, pager, next"
-      class="pagination-wrap"
-    />
+      <el-pagination
+        v-if="total > size"
+        @current-change="onPageChange"
+        :current-page="page"
+        :page-size="size"
+        :total="total"
+        layout="total, prev, pager, next"
+        class="pagination-wrap"
+      />
+    </el-card>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -153,4 +153,4 @@ export default {
   margin-top: 16px;
   margin-top: 16px;
   text-align: right;
   text-align: right;
 }
 }
-</style>
+</style>

+ 0 - 9
cfc-web/src/views/admin/ReportParserImport.vue

@@ -196,13 +196,4 @@ export default {
   white-space: pre-wrap;
   white-space: pre-wrap;
   word-break: break-all;
   word-break: break-all;
 }
 }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
 </style>
 </style>

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

@@ -406,38 +406,29 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .report-template-page { padding: 20px; }
 .report-template-page { padding: 20px; }
-.block-list { border: 1px solid #ebeef5; border-radius: 4px; margin-bottom: 12px; }
+.block-list { border: 1px solid var(--adm-border-split); border-radius: 4px; margin-bottom: 12px; }
 .block-item { border-bottom: 1px solid var(--adm-border-split); padding: 12px 16px; }
 .block-item { border-bottom: 1px solid var(--adm-border-split); padding: 12px 16px; }
 .block-item:last-child { border-bottom: none; }
 .block-item:last-child { border-bottom: none; }
 .block-header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
 .block-header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
-.drag-handle { cursor: move; color: #bbb; font-size: 16px; }
-.block-type-tag { background: #f0f9ff; color: #2c7be5; padding: 2px 8px; border-radius: 4px; font-size: 12px; }
-.block-title-display { color: #333; font-size: 14px; }
+.drag-handle { cursor: move; color: var(--adm-text-25); font-size: 16px; }
+.block-type-tag { background: var(--adm-info-bg); color: var(--adm-info-text); padding: 2px 8px; border-radius: 4px; font-size: 12px; }
+.block-title-display { color: var(--adm-text-88); font-size: 14px; }
 .block-del { margin-left: auto; }
 .block-del { margin-left: auto; }
 .hint-text { margin-left: 12px; color: var(--adm-text-45); font-size: 12px; }
 .hint-text { margin-left: 12px; color: var(--adm-text-45); font-size: 12px; }
 .block-move-up, .block-move-dn { color: var(--adm-text-45); }
 .block-move-up, .block-move-dn { color: var(--adm-text-45); }
-.preview-block { background: var(--adm-bg-container); border: 1px solid #eee; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
+.preview-block { background: var(--adm-bg-container); border: 1px solid var(--adm-border-split); border-radius: 8px; padding: 16px; margin-bottom: 12px; }
 .preview-block-title { font-weight: bold; font-size: 15px; margin-bottom: 10px; color: var(--adm-text-88); }
 .preview-block-title { font-weight: bold; font-size: 15px; margin-bottom: 10px; color: var(--adm-text-88); }
-.preview-score-item { display: inline-block; background: #f5f7fa; padding: 4px 12px; margin: 4px; border-radius: 4px; }
+.preview-score-item { display: inline-block; background: var(--adm-bg-header); padding: 4px 12px; margin: 4px; border-radius: 4px; }
 .preview-ind-item { display: flex; align-items: center; padding: 6px 0; border-bottom: 1px solid var(--adm-border-split); }
 .preview-ind-item { display: flex; align-items: center; padding: 6px 0; border-bottom: 1px solid var(--adm-border-split); }
 .ind-name { flex: 1; font-size: 13px; }
 .ind-name { flex: 1; font-size: 13px; }
-.ind-value { font-size: 13px; color: #666; margin: 0 12px; }
+.ind-value { font-size: 13px; color: var(--adm-text-65); margin: 0 12px; }
 .ind-status { font-size: 12px; padding: 2px 8px; border-radius: 10px; }
 .ind-status { font-size: 12px; padding: 2px 8px; border-radius: 10px; }
-.status-normal { background: #e8f5e9; color: #2e7d32; }
-.status-high { background: #ffebee; color: #c62828; }
-.status-low { background: #fff3e0; color: #e65100; }
+.status-normal { background: var(--adm-success-bg); color: var(--adm-success-text); }
+.status-high { background: var(--adm-error-bg); color: var(--adm-error-text); }
+.status-low { background: var(--adm-warning-bg); color: var(--adm-warning-text); }
 .preview-table { width: 100%; border-collapse: collapse; font-size: 13px; }
 .preview-table { width: 100%; border-collapse: collapse; font-size: 13px; }
-.preview-table th, .preview-table td { border: 1px solid #eee; padding: 6px 10px; text-align: left; }
-.preview-table th { background: #f5f7fa; font-weight: 600; }
-.preview-text { font-size: 14px; color: #555; line-height: 1.7; white-space: pre-wrap; }
-.empty-hint { color: #bbb; text-align: center; padding: 40px; }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
+.preview-table th, .preview-table td { border: 1px solid var(--adm-border-split); padding: 6px 10px; text-align: left; }
+.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; }
 </style>
 </style>

+ 0 - 9
cfc-web/src/views/admin/ReportTypeManagement.vue

@@ -327,13 +327,4 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .el-form-item-msg { font-size: 12px; color: var(--adm-text-45); margin-top: 2px; }
 .el-form-item-msg { font-size: 12px; color: var(--adm-text-45); margin-top: 2px; }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
 </style>
 </style>

+ 0 - 9
cfc-web/src/views/admin/ReportUnknownCluster.vue

@@ -158,13 +158,4 @@ export default {
   white-space: pre-wrap;
   white-space: pre-wrap;
   word-break: break-all;
   word-break: break-all;
 }
 }
-.sort-header {
-  cursor: pointer;
-  user-select: none;
-  font-weight: 500;
-  font-size: 12px;
-}
-.sort-header:hover {
-  color: var(--adm-primary);
-}
 </style>
 </style>