style(frontend): 全站背景图 webp 化(bg.jpg 4MB→251KB 压缩 + bg.webp)+品牌工具页默认策略调优(品牌检测默认改精确匹配 Simple、Terms 后置)+任务面板/登录页/亚马逊控制台观感微调

This commit is contained in:
2026-09-09 18:32:48 +08:00
parent 9a487ae9a7
commit 83cb3ff84e
29 changed files with 565 additions and 570 deletions
@@ -6,7 +6,7 @@
<aside class="left-panel left-panel--with-template">
<div class="section-title">上传文件</div>
<div class="upload-zone">
<div class="hint">选择 Excel 后点击解析后端会提取 idASIN国家价格每一行都会独立送检</div>
<div class="hint">选择 Excel 后点击解析系统会识别表格里的 IDASIN国家价格每一行都会自动检测</div>
<div class="btns">
<button type="button" class="opt-btn" @click="selectFiles">选择 Excel</button>
<button type="button" class="opt-btn" @click="selectFolder">选择文件夹</button>
@@ -68,7 +68,7 @@
{{ pushing ? '启动中...' : '启动任务' }}
</button>
</div>
<p class="loading-msg">Python 回传字段按 idasin国家价格标题图片链接数组提交后端接收分片后按 10 条一批送检结果区展示真实 LLM 批次进度</p>
<p class="loading-msg">提交后系统自动分批检测进度显示在右侧任务区完成后可下载结果</p>
<div v-if="visibleTaskSummary" class="parse-card">
<div>任务 ID{{ visibleTaskSummary.taskId }}</div>
@@ -562,7 +562,7 @@ async function pushToPythonQueue() {
await activateSimilarAsinTask(taskId)
const result = await api.enqueue_json(payload)
if (!result?.success) {
ElMessage.error(result?.error || '推送失败')
ElMessage.error(result?.error || '启动失败')
return
}
queuedTaskSummary.value = toTaskSummary(currentParseResult)
@@ -889,7 +889,7 @@ function hasMeaningfulProgressValue(value: unknown) {
function statusText(item: SimilarAsinHistoryItem) {
const status = normalizeTaskStatus(item)
if (status === 'RUNNING') return '执行中'
if (status === 'PENDING') return '已解析待推送'
if (status === 'PENDING') return '已解析待启动'
if (isResultPreparing(item)) return '结果生成中'
if (isResultBuildFailed(item)) return '结果生成失败'
if (status === 'SUCCESS' || item.success) return '已完成'
@@ -934,10 +934,10 @@ function pendingResultHint(item: SimilarAsinHistoryItem) {
if (!isResultPreparing(item)) return ''
const fileStatus = (item.fileStatus || '').toUpperCase()
if (fileStatus === 'RUNNING') {
return '任务已完成,正在等待 LLM 回流并组装结果文件,下载按钮稍后出现'
return '任务已完成,正在生成结果文件,下载按钮稍后出现'
}
if (fileStatus === 'PENDING') {
return '任务已完成,结果文件已入队,正在等待后端开始处理'
return '任务已完成,结果文件排队中,请稍候'
}
return '任务已完成,正在生成结果文件,下载按钮稍后出现'
}
@@ -970,14 +970,14 @@ function displayFileProgressStage(item: SimilarAsinHistoryItem, fallback: string
const message = (item.fileProgressMessage || '').trim()
if (!message) return fallback
if (/llm/i.test(message) || /LLM|回流/.test(message)) {
if (/submitting/i.test(message) || /提交/.test(message)) return '正在提交 LLM 批次'
if (/生成结果|结果文件|组装/i.test(message)) return 'LLM 已回流,正在生成结果文件'
if (/submitting/i.test(message) || /提交/.test(message)) return '正在提交检测批次'
if (/生成结果|结果文件|组装/i.test(message)) return '检测结果已返回,正在生成结果文件'
if (/waiting/i.test(message) || /等待/.test(message) || /\d+\s*\/\s*\d+/.test(message)) {
return 'LLM 回流中,等待结果回'
return '检测中,等待结果回'
}
return 'LLM 处理中'
return '检测中'
}
if (/assembling|xlsx|组装|生成结果/i.test(message)) return '正在组装结果文件'
if (/assembling|xlsx|组装|生成结果/i.test(message)) return '正在生成结果文件'
return message
}
@@ -988,9 +988,9 @@ function fileProgressCountLabel(item: SimilarAsinHistoryItem) {
const total = parsed?.total ?? item.fileProgressTotal ?? 0
if (/llm/i.test(message) || /LLM|回流/.test(message)) {
if (/submitting/i.test(message) || /提交/.test(message)) {
return `LLM 提交批次 ${current}/${total}`
return `检测批次 ${current}/${total}`
}
return `LLM 回流批次 ${current}/${total}`
return `检测完成批次 ${current}/${total}`
}
return `当前阶段 ${current}/${total}`
}
@@ -1118,7 +1118,7 @@ async function batchDeleteHistory(views: TaskItemView[]) {
<style scoped>
.module-page {
min-height: 100vh;
background: #151a25;
background: #242424;
}
.main-content {
@@ -1129,7 +1129,7 @@ async function batchDeleteHistory(views: TaskItemView[]) {
.left-panel {
width: 400px;
background: #1c2333;
background: #242424;
padding: 20px;
overflow-y: auto;
border-right: 1px solid #2e3a52;
@@ -1138,7 +1138,7 @@ async function batchDeleteHistory(views: TaskItemView[]) {
.right-panel {
flex: 1;
min-width: 0;
background: #151a25;
background: #242424;
display: flex;
flex-direction: column;
}
@@ -1153,7 +1153,7 @@ async function batchDeleteHistory(views: TaskItemView[]) {
border: 1px dashed #3e4a62;
border-radius: 10px;
padding: 18px;
background: #2e3a52;
background: #242424;
margin-bottom: 18px;
}
@@ -1308,7 +1308,7 @@ async function batchDeleteHistory(views: TaskItemView[]) {
.opt-btn {
padding: 8px 14px;
color: #c8d2e2;
background: #2e3a52;
background: #242424;
border: 1px solid #3e4a62;
}