完成菜单权限添加和软件菜单改造

This commit is contained in:
super
2026-04-12 17:15:15 +08:00
parent 365050b890
commit d0d3c6ee67
28 changed files with 983 additions and 465 deletions

View File

@@ -13,7 +13,7 @@ client_name=ShuFuAI
# java_api_base=http://47.111.163.154:18080
java_api_base=http://127.0.0.1:18080
# java_api_base=http://8.136.19.173:18080
# java_api_base=http://127.0.0.1:18080
java_api_base=http://8.136.19.173:18080

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>格式转换 - 数富AI</title>
<script type="module" crossorigin src="/assets/convert.js"></script>
<link rel="modulepreload" crossorigin href="/assets/pywebview-D7_PdvyM.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DysFlQbZ.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-C5RGB8QW.css">
<link rel="modulepreload" crossorigin href="/assets/pywebview-D808cNhy.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DRn3N4FA.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-BLoeiUcF.css">
<link rel="stylesheet" crossorigin href="/assets/convert-7wWJ02Tw.css">
</head>
<body>

View File

@@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>数据去重 - 数富AI</title>
<script type="module" crossorigin src="/assets/dedupe.js"></script>
<link rel="modulepreload" crossorigin href="/assets/pywebview-D7_PdvyM.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DysFlQbZ.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-C5RGB8QW.css">
<link rel="modulepreload" crossorigin href="/assets/pywebview-D808cNhy.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DRn3N4FA.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-BLoeiUcF.css">
<link rel="stylesheet" crossorigin href="/assets/dedupe-BpNHwt51.css">
</head>
<body>

View File

@@ -5,10 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>删除品牌 - 数富AI</title>
<script type="module" crossorigin src="/assets/delete-brand.js"></script>
<link rel="modulepreload" crossorigin href="/assets/pywebview-D7_PdvyM.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DysFlQbZ.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-C5RGB8QW.css">
<link rel="stylesheet" crossorigin href="/assets/delete-brand-Dl7T0pmm.css">
<link rel="modulepreload" crossorigin href="/assets/pywebview-D808cNhy.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DRn3N4FA.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-BLoeiUcF.css">
<link rel="stylesheet" crossorigin href="/assets/delete-brand-DfRLfrtm.css">
</head>
<body>
<div id="app"></div>

View File

@@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>数据拆分 - 数富AI</title>
<script type="module" crossorigin src="/assets/split.js"></script>
<link rel="modulepreload" crossorigin href="/assets/pywebview-D7_PdvyM.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DysFlQbZ.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-C5RGB8QW.css">
<link rel="modulepreload" crossorigin href="/assets/pywebview-D808cNhy.js">
<link rel="modulepreload" crossorigin href="/assets/brand-DRn3N4FA.js">
<link rel="stylesheet" crossorigin href="/assets/pywebview-BLoeiUcF.css">
<link rel="stylesheet" crossorigin href="/assets/split-CRUIYKS6.css">
</head>
<body>

View File

@@ -14,128 +14,122 @@
height: 100vh;
font-weight: bold;
}
.top-bar {
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 16px;
border-bottom: 1px solid #2a2a2a;
}
.logo-area {
display: flex;
align-items: center;
gap: 10px;
}
.top-bar .app-name { font-size: 18px; font-weight: 600; color: #fff; }
.btn-home {
font-size: 13px;
color: #999;
text-decoration: none;
padding: 8px 12px;
border-radius: 6px;
transition: all 0.2s;
}
.btn-home:hover { color: #fff; background: #2a2a2a; }
.nav-tabs {
display: flex;
align-items: center;
gap: 12px;
}
.nav-tab-group {
display: flex;
align-items: center;
gap: 12px;
}
.nav-dropdown {
position: relative;
}
.nav-dropdown-trigger {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-width: 112px;
height: 38px;
padding: 0 16px;
border-radius: 10px;
border: 1px solid transparent;
color: #999;
background: transparent;
font-size: 13px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.nav-dropdown:hover .nav-dropdown-trigger,
.nav-dropdown.active .nav-dropdown-trigger {
color: #fff;
background: #2a2a2a;
}
.nav-dropdown.active .nav-dropdown-trigger {
color: #3498db;
background: rgba(52, 152, 219, 0.2);
border-color: rgba(52, 152, 219, 0.3);
}
.nav-dropdown-arrow {
font-size: 11px;
line-height: 1;
}
.nav-dropdown-menu {
position: absolute;
top: 100%;
left: 0;
min-width: 220px;
padding: 8px;
border: 1px solid #2a2a2a;
border-radius: 12px;
background: #171717;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.35);
display: none;
z-index: 20;
}
.nav-dropdown:hover .nav-dropdown-menu {
display: flex;
flex-direction: column;
gap: 4px;
}
.nav-dropdown-item {
display: flex;
align-items: center;
min-height: 38px;
padding: 0 12px;
border-radius: 8px;
color: #b8b8b8;
font-size: 13px;
font-weight: 600;
text-decoration: none;
transition: all 0.2s ease;
}
.nav-dropdown-item:hover {
color: #fff;
background: #2a2a2a;
}
.nav-dropdown-item.active {
color: #3498db;
background: rgba(52, 152, 219, 0.2);
}
.top-right {
display: flex;
align-items: center;
gap: 8px;
}
.top-bar {
min-height: 88px;
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
padding: 10px 24px 12px;
border-bottom: 1px solid #2a2a2a;
}
.logo-area {
display: flex;
align-items: center;
gap: 16px;
min-width: 0;
padding-top: 10px;
}
.top-bar .app-name { font-size: 18px; font-weight: 600; color: #fff; }
.btn-home {
font-size: 13px;
color: #d2d2d2;
text-decoration: none;
white-space: nowrap;
}
.btn-home:hover { color: #fff; }
.nav-tabs {
flex: 1;
min-width: 0;
display: flex;
align-items: stretch;
justify-content: center;
}
.nav-tab-group {
display: flex;
align-items: stretch;
justify-content: center;
flex: 1;
gap: 0;
}
.nav-section {
flex: 1;
min-width: 0;
padding: 0 18px;
position: relative;
}
.nav-section + .nav-section::before {
content: '';
position: absolute;
left: 0;
top: 14px;
bottom: 8px;
width: 1px;
background: rgba(255, 255, 255, 0.14);
}
.nav-section-title {
margin-bottom: 10px;
text-align: center;
color: #e8dfcf;
font-size: 16px;
font-weight: 800;
letter-spacing: 0.08em;
}
.nav-section-items {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: center;
padding: 10px 14px;
border-radius: 14px;
background: linear-gradient(180deg, rgba(83, 74, 67, 0.92) 0%, rgba(72, 65, 59, 0.96) 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.nav-item {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 28px;
padding: 0 2px;
color: #f3eee4;
font-size: 14px;
font-weight: 700;
text-decoration: none;
border-bottom: 2px solid transparent;
transition: color 0.18s ease, border-color 0.18s ease, opacity 0.18s ease;
background: transparent;
border-left: none;
border-right: none;
border-top: none;
cursor: pointer;
}
.nav-item:hover {
color: #fff;
border-bottom-color: rgba(255, 255, 255, 0.68);
}
.nav-item.active {
color: #fff;
border-bottom-color: #8dc4ff;
}
.nav-item.disabled {
color: rgba(255, 255, 255, 0.78);
opacity: 0.82;
cursor: default;
}
.top-right {
width: 60px;
flex-shrink: 0;
}
.main-content {
display: flex;
@@ -395,33 +389,40 @@
<span class="app-name">数富AI-亚马逊</span>
<a href="/home" class="btn-home">返回首页</a>
</div>
<nav class="nav-tabs">
<div class="nav-tab-group">
<div class="nav-dropdown active">
<button type="button" class="nav-dropdown-trigger">
<span>前端工具</span>
<span class="nav-dropdown-arrow"></span>
</button>
<div class="nav-dropdown-menu">
<button type="button" class="nav-dropdown-item active" data-panel="brandCheck">品牌检测</button>
<a class="nav-dropdown-item" href="/new_web_source/dedupe.html">数据去重</a>
<a class="nav-dropdown-item" href="/new_web_source/split.html">数据拆分</a>
<a class="nav-dropdown-item" href="/new_web_source/convert.html">格式转换</a>
</div>
</div>
<div class="nav-dropdown">
<button type="button" class="nav-dropdown-trigger">
<span>运营工具</span>
<span class="nav-dropdown-arrow"></span>
</button>
<div class="nav-dropdown-menu">
<a class="nav-dropdown-item" href="/new_web_source/delete-brand.html">删除指定ASIN和品牌</a>
<a class="nav-dropdown-item" href="/new_web_source/product-risk.html">商品风险解决</a>
<a class="nav-dropdown-item" href="/new_web_source/shop-match.html">匹配店铺</a>
</div>
</div>
</div>
</nav>
<nav class="nav-tabs">
<div class="nav-tab-group">
<div class="nav-section">
<div class="nav-section-title">&#21069;&#31471;&#24037;&#20855;</div>
<div class="nav-section-items">
<button type="button" class="nav-item active" data-panel="brandCheck">&#21697;&#29260;&#26816;&#27979;</button>
<span class="nav-item disabled">&#37319;&#38598;&#25968;&#25454;</span>
<span class="nav-item disabled">&#21464;&#20307;&#20998;&#26512;</span>
<a class="nav-item" href="/new_web_source/dedupe.html">&#25968;&#25454;&#21435;&#37325;</a>
<a class="nav-item" href="/new_web_source/split.html">&#25968;&#25454;&#25286;&#20998;</a>
<a class="nav-item" href="/new_web_source/convert.html">&#26684;&#24335;&#36716;&#25442;</a>
</div>
</div>
<div class="nav-section">
<div class="nav-section-title">&#36816;&#33829;&#24037;&#20855;</div>
<div class="nav-section-items">
<a class="nav-item" href="/new_web_source/delete-brand.html">&#21024;&#38500;ASIN</a>
<a class="nav-item" href="/new_web_source/product-risk.html">&#21830;&#21697;&#39118;&#38505;&#35299;&#20915;</a>
<a class="nav-item" href="/new_web_source/shop-match.html">&#23450;&#26102;&#21305;&#37197;</a>
<span class="nav-item disabled">&#36319;&#20215;</span>
<span class="nav-item disabled">&#24033;&#24215;&#21024;&#38500;</span>
<span class="nav-item disabled">&#21462;&#27454;</span>
<span class="nav-item disabled">&#24215;&#38138;&#29366;&#24577;&#26597;&#35810;</span>
</div>
</div>
<div class="nav-section">
<div class="nav-section-title">&#21518;&#21220;&#24037;&#20855;</div>
<div class="nav-section-items">
<span class="nav-item disabled">&#37319;&#36141;</span>
<span class="nav-item disabled">ERP</span>
</div>
</div>
</div>
</nav>
<div class="top-right"></div>
</header>
@@ -549,11 +550,11 @@
}
// 顶部栏目切换:点击当前页菜单项时显示对应 data-panel 的 tab-panel
document.querySelectorAll('.nav-dropdown-item[data-panel]').forEach(function(tab) {
document.querySelectorAll('.nav-item[data-panel]').forEach(function(tab) {
tab.addEventListener('click', function() {
var panelId = this.getAttribute('data-panel');
if (!panelId) return;
document.querySelectorAll('.nav-dropdown-item[data-panel]').forEach(function(t) { t.classList.remove('active'); });
document.querySelectorAll('.nav-item[data-panel]').forEach(function(t) { t.classList.remove('active'); });
document.querySelectorAll('.tab-panel').forEach(function(p) {
p.classList.toggle('active', p.getAttribute('data-panel') === panelId);
});