完成新需求

This commit is contained in:
super
2026-03-20 14:26:34 +08:00
parent 43d508f527
commit 92d3fc965b
71 changed files with 3265 additions and 540 deletions

View File

@@ -3,42 +3,26 @@
<div class="brand-page">
<header class="top-bar">
<div class="logo-area">
<span class="app-name">南日AI-亚马逊</span>
<span class="app-name">数富AI-亚马逊</span>
<router-link to="/home" class="btn-home">返回首页</router-link>
</div>
<div class="nav-tabs">
<div class="nav-tab-group">
<button
type="button"
class="nav-tab"
:class="{ active: activeTab === 'brand' }"
@click="activeTab = 'brand'"
>
<button type="button" class="nav-tab" :class="{ active: activeTab === 'brand' }"
@click="activeTab = 'brand'">
品牌检测
</button>
<button
type="button"
class="nav-tab"
:class="{ active: activeTab === 'dedupe' }"
@click="activeTab = 'dedupe'"
>
<button type="button" class="nav-tab" :class="{ active: activeTab === 'dedupe' }"
@click="activeTab = 'dedupe'">
数据去重
</button>
<button
type="button"
class="nav-tab"
:class="{ active: activeTab === 'convert' }"
@click="activeTab = 'convert'"
>
<button type="button" class="nav-tab" :class="{ active: activeTab === 'convert' }"
@click="activeTab = 'convert'">
格式转换
</button>
<button
type="button"
class="nav-tab"
:class="{ active: activeTab === 'split' }"
@click="activeTab = 'split'"
>
<button type="button" class="nav-tab" :class="{ active: activeTab === 'split' }"
@click="activeTab = 'split'">
数据拆分
</button>
</div>
@@ -55,13 +39,8 @@
<button type="button" class="opt-btn" @click="selectFolder">选择文件夹</button>
</div>
<el-alert
v-if="!hasPywebviewSupport"
class="desktop-alert"
type="warning"
:closable="false"
title="当前环境未检测到 pywebview文件选择与本地保存能力需要在桌面端使用。"
/>
<el-alert v-if="!hasPywebviewSupport" class="desktop-alert" type="warning" :closable="false"
title="当前环境未检测到 pywebview文件选择与本地保存能力需要在桌面端使用。" />
<div class="selected-files">
<template v-if="selectedPaths.length">
@@ -117,12 +96,7 @@
{{ runMode === 'immediate' ? '立即运行' : '添加任务' }}
</button>
<span v-if="running" class="loading-msg">生成中请稍候</span>
<button
v-if="activeTaskId"
type="button"
class="btn-cancel-run"
@click="cancelActiveTask"
>
<button v-if="activeTaskId" type="button" class="btn-cancel-run" @click="cancelActiveTask">
取消生成
</button>
</div>
@@ -137,8 +111,10 @@
<button type="button" class="template-download-row" @click="downloadTemplateXlsx">
<span class="template-download-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M14 2v6h6" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z"
stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M14 2v6h6" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M8 13h8M8 17h5" stroke="rgba(255,255,255,0.86)" stroke-width="1.5" stroke-linecap="round" />
</svg>
</span>
@@ -151,9 +127,12 @@
<button type="button" class="template-download-row" @click="downloadTemplateZip">
<span class="template-download-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M14 2v6h6" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M4 8h16M7 12h10M7 16h7" stroke="rgba(255,255,255,0.86)" stroke-width="1.5" stroke-linecap="round" />
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z"
stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
<path d="M14 2v6h6" stroke="rgba(255,255,255,0.92)" stroke-width="1.8" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M4 8h16M7 12h10M7 16h7" stroke="rgba(255,255,255,0.86)" stroke-width="1.5"
stroke-linecap="round" />
</svg>
</span>
<span class="template-download-text">
@@ -180,10 +159,7 @@
</div>
<div class="task-right">
<div
v-if="task.status === 'running' && (task.progress_total || 0) > 0"
class="inline-progress"
>
<div v-if="task.status === 'running' && (task.progress_total || 0) > 0" class="inline-progress">
<div class="progress-bar-bg small">
<div class="progress-bar-fill" :style="{ width: `${getTaskProgressPercent(task)}%` }"></div>
</div>
@@ -196,21 +172,13 @@
{{ getStatusLabel(task.status) }}
</span>
<button
v-if="task.status === 'running'"
type="button"
class="btn-cancel"
@click="cancelTask(task.id)"
>
<button v-if="task.status === 'running'" type="button" class="btn-cancel"
@click="cancelTask(task.id)">
取消
</button>
<button
v-if="task.result_paths?.zip_url"
type="button"
class="download"
@click="downloadTaskResult(task)"
>
<button v-if="task.result_paths?.zip_url" type="button" class="download"
@click="downloadTaskResult(task)">
下载结果
</button>
@@ -560,7 +528,7 @@ async function downloadTaskResult(task: BrandTaskItem) {
}
onMounted(() => {
document.title = '亚马逊 - 南日AI'
document.title = '亚马逊 - 数富AI'
loadTasks().catch(() => undefined)
taskRefreshTimer = window.setInterval(() => {
loadTasks().catch(() => undefined)