feat(web): 前端 SPA 化 + 工具页任务面板统一与历史批量删除

- SPA 化:22 个 MPA html 入口与 *-main.ts 合并为 index.html + vue-router(URL 无 .html 后缀),
  页面跳转全部 router-link,/new_web_source/xxx.html 旧路径归一为 /xxx
- 任务面板统一:共享 TaskCenterPanel/TaskItemCard/TaskStatCards/HistoryTaskLayer,
  16 个工具页右侧统一为统计卡 + 当前任务 + 历史任务弹层(任务ID/开始/结束/状态必展示)
- 历史记录支持单条删除 + 批量勾选删除(确认框/全选/失败提示)
- Java 7 模块(dedupe/convert/split/productrisk/shopmatch/pricetrack/deletebrand)
  history 接口补齐任务时间字段(VO+Service,复用 biz_file_task 列)
- 图片工作台/API 层(brand/permission/user)既有未提交改动一并提交
This commit is contained in:
2026-09-08 10:02:55 +08:00
parent abcfa5bef7
commit e248b6e43a
125 changed files with 7482 additions and 4304 deletions
@@ -3,12 +3,20 @@
<AmazonTopBar :active-cat="groupKey" />
<div class="tool-head">
<a class="tool-head__back" :href="backHref"> 返回{{ group ? group.name : '工具' }}列表</a>
<span class="tool-head__sep"></span>
<router-link class="tool-head__back" :to="backHref"> 返回{{ group ? group.name : '工具' }}列表</router-link>
<span class="tool-head__title">{{ tool?.name ?? '' }}</span>
<span class="tool-head__desc">{{ detailText }}</span>
<a
v-if="tool?.id === 'source'"
class="tool-head__aliprice"
:href="ALIPRICE_URL"
target="_blank"
rel="noopener"
>Aliprice点击注册</a>
</div>
<!-- 工具说明提示卡已按需求移除原棕色底 note 卡区域 -->
<div class="tool-shell-body">
<slot />
</div>
@@ -25,6 +33,10 @@ import AmazonFooterBar from '@/pages/amazon/components/AmazonFooterBar.vue'
import { TOOL_DETAILS, TOOL_GROUPS, TOOL_MAP } from '@/pages/amazon/tool-catalog'
import { resolvePageHref } from '@/shared/page-prefix'
/** Aliprice 注册推广链接(对齐 gemini-code 工具页头 Aliprice 按钮) */
const ALIPRICE_URL =
'https://www.aiprice.com/?ext_id=10100&channel=chrome_offline&platform=1688&version=4.0.5&browser=chrome&mv=3'
const props = defineProps<{
/** 工具 id(见 tool-catalog TOOL_MAP */
toolId: string
@@ -47,53 +59,79 @@ const backHref = computed(() => `${resolvePageHref('/new_web_source/amazon-conso
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
background-color: #1a1f2e;
/* 深色底 + 青色网点纹理(对齐 gemini-code body */
background-image: radial-gradient(rgba(45, 212, 191, 0.08) 1px, transparent 1px);
background-size: 48px 48px;
font-family: "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "微软雅黑", sans-serif;
}
.tool-head {
flex: 0 0 auto;
display: flex;
align-items: center;
gap: 14px;
flex-wrap: wrap;
gap: 20px;
min-height: 62px;
padding: 10px 34px;
background: #151a25;
border-bottom: 1px solid #2a3344;
background: #1a1f2e;
}
.tool-head__back {
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 14px;
border: 1px solid #3e4a62;
border-radius: 6px;
color: #c8d2e2;
font-size: 13px;
text-decoration: none;
white-space: nowrap;
transition: all 0.2s;
}
.tool-head__back:hover {
color: #fff;
}
.tool-head__sep {
flex-shrink: 0;
width: 1px;
height: 18px;
background: #3e4a62;
background: #2b3447;
color: #f5f8fc;
}
.tool-head__title {
flex-shrink: 0;
color: #f5f8fc;
font-size: 20px;
font-weight: 800;
font-size: 22px;
font-weight: 700;
white-space: nowrap;
}
.tool-head__desc {
min-width: 0;
overflow: hidden;
max-width: 650px;
color: #a0acbe;
font-size: 12px;
line-height: 1.5;
overflow: hidden;
text-overflow: ellipsis;
}
/* Aliprice 注册按钮(仅货源查询显示,TEAL 渐变,对齐 gemini-code aliprice-btn */
.tool-head__aliprice {
display: inline-flex;
align-items: center;
margin-left: 10px;
padding: 6px 14px;
background: linear-gradient(135deg, #14b8a6, #0d9488);
color: #ffffff;
font-size: 11px;
font-weight: 700;
text-decoration: none;
white-space: nowrap;
transition: all 0.2s;
}
.tool-head__aliprice:hover {
filter: brightness(1.15);
}
.tool-shell-body {
@@ -105,8 +143,7 @@ const backHref = computed(() => `${resolvePageHref('/new_web_source/amazon-conso
@media (max-width: 1100px) {
.tool-head {
padding: 10px 16px;
flex-wrap: wrap;
gap: 8px;
gap: 10px;
}
}
</style>