完成菜单权限添加和软件菜单改造
This commit is contained in:
4
app/.env
4
app/.env
@@ -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
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">前端工具</div>
|
||||
<div class="nav-section-items">
|
||||
<button type="button" class="nav-item active" data-panel="brandCheck">品牌检测</button>
|
||||
<span class="nav-item disabled">采集数据</span>
|
||||
<span class="nav-item disabled">变体分析</span>
|
||||
<a class="nav-item" href="/new_web_source/dedupe.html">数据去重</a>
|
||||
<a class="nav-item" href="/new_web_source/split.html">数据拆分</a>
|
||||
<a class="nav-item" href="/new_web_source/convert.html">格式转换</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">运营工具</div>
|
||||
<div class="nav-section-items">
|
||||
<a class="nav-item" href="/new_web_source/delete-brand.html">删除ASIN</a>
|
||||
<a class="nav-item" href="/new_web_source/product-risk.html">商品风险解决</a>
|
||||
<a class="nav-item" href="/new_web_source/shop-match.html">定时匹配</a>
|
||||
<span class="nav-item disabled">跟价</span>
|
||||
<span class="nav-item disabled">巡店删除</span>
|
||||
<span class="nav-item disabled">取款</span>
|
||||
<span class="nav-item disabled">店铺状态查询</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">后勤工具</div>
|
||||
<div class="nav-section-items">
|
||||
<span class="nav-item disabled">采购</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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user