Spaces:
Running
Running
<html lang="zh-CN"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>WMS系统 - 产品管理</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<style> | |
.menu-icon, .submenu-icon { | |
margin-right: 8px; | |
} | |
.highlight { | |
color: #2ecc71; | |
font-weight: bold; | |
} | |
.warning { | |
color: #f39c12; | |
font-weight: bold; | |
} | |
.danger { | |
color: #e74c3c; | |
font-weight: bold; | |
} | |
.sidebar { | |
transition: all 0.3s ease; | |
} | |
.sidebar.collapsed { | |
width: 70px; | |
} | |
.sidebar.collapsed .menu-title span, | |
.sidebar.collapsed .submenu-item span, | |
.sidebar.collapsed .menu-title i.fa-chevron-down { | |
display: none; | |
} | |
.sidebar.collapsed .menu-title { | |
text-align: center; | |
padding: 10px 5px; | |
} | |
.sidebar.collapsed .submenu { | |
padding-left: 5px; | |
} | |
.sidebar.collapsed .submenu-item { | |
padding: 8px 5px; | |
text-align: center; | |
} | |
.product-list-container { | |
background-color: white; | |
border-radius: 8px; | |
box-shadow: 0 2px 10px rgba(0,0,0,0.1); | |
padding: 20px; | |
margin-top: 20px; | |
} | |
.product-table { | |
width: 100%; | |
border-collapse: separate; | |
border-spacing: 0; | |
} | |
.product-table th { | |
background-color: #f8f9fa; | |
padding: 12px 15px; | |
text-align: left; | |
border-bottom: 1px solid #ddd; | |
position: sticky; | |
top: 0; | |
} | |
.product-table td { | |
padding: 12px 15px; | |
text-align: left; | |
border-bottom: 1px solid #eee; | |
} | |
.product-table tr:hover { | |
background-color: #f5f5f5; | |
} | |
.action-btn { | |
padding: 5px 10px; | |
border-radius: 4px; | |
cursor: pointer; | |
margin-right: 5px; | |
border: none; | |
color: white; | |
font-size: 12px; | |
} | |
.edit-btn { | |
background-color: #3498db; | |
} | |
.delete-btn { | |
background-color: #e74c3c; | |
} | |
.detail-btn { | |
background-color: #2ecc71; | |
} | |
.search-container { | |
display: flex; | |
gap: 10px; | |
margin-bottom: 20px; | |
align-items: center; | |
} | |
.search-input { | |
flex: 1; | |
max-width: 400px; | |
padding: 8px 15px; | |
border-radius: 4px; | |
border: 1px solid #ddd; | |
transition: all 0.3s ease; | |
} | |
.search-input:focus { | |
border-color: #3498db; | |
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2); | |
outline: none; | |
} | |
.filter-select { | |
padding: 8px 15px; | |
border-radius: 4px; | |
border: 1px solid #ddd; | |
background-color: white; | |
} | |
.add-product-btn { | |
padding: 8px 15px; | |
background-color: #2ecc71; | |
color: white; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
display: flex; | |
align-items: center; | |
gap: 5px; | |
} | |
.pagination { | |
display: flex; | |
justify-content: center; | |
margin-top: 20px; | |
gap: 5px; | |
} | |
.page-btn { | |
padding: 5px 10px; | |
border: 1px solid #ddd; | |
background-color: white; | |
border-radius: 4px; | |
cursor: pointer; | |
} | |
.page-btn.active { | |
background-color: #3498db; | |
color: white; | |
border-color: #3498db; | |
} | |
.drawer { | |
position: fixed; | |
top: 0; | |
right: -66.6667%; | |
width: 66.6667%; | |
height: 100%; | |
background: white; | |
box-shadow: -2px 0 10px rgba(0,0,0,0.1); | |
transition: all 0.3s ease; | |
z-index: 1000; | |
overflow-y: auto; | |
} | |
.drawer.open { | |
right: 0; | |
} | |
.drawer-overlay { | |
position: fixed; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background: rgba(0,0,0,0.5); | |
z-index: 999; | |
display: none; | |
} | |
.drawer-overlay.open { | |
display: block; | |
} | |
.drawer-header { | |
padding: 20px; | |
border-bottom: 1px solid #eee; | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
} | |
.drawer-content { | |
padding: 20px; | |
} | |
.drawer-close { | |
background: none; | |
border: none; | |
font-size: 20px; | |
cursor: pointer; | |
} | |
.form-group { | |
margin-bottom: 15px; | |
} | |
.form-group label { | |
display: block; | |
margin-bottom: 5px; | |
font-weight: 500; | |
color: #555; | |
} | |
.form-input { | |
width: 100%; | |
padding: 8px 12px; | |
border: 1px solid #ddd; | |
border-radius: 4px; | |
transition: all 0.3s ease; | |
} | |
.form-input:focus { | |
border-color: #3498db; | |
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2); | |
outline: none; | |
} | |
.btn-cancel { | |
padding: 8px 16px; | |
background-color: #f1f1f1; | |
color: #333; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
margin-right: 10px; | |
} | |
.btn-submit { | |
padding: 8px 16px; | |
background-color: #3498db; | |
color: white; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
} | |
.btn-close { | |
padding: 8px 16px; | |
background-color: #3498db; | |
color: white; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
} | |
.detail-item { | |
margin-bottom: 15px; | |
padding-bottom: 15px; | |
border-bottom: 1px solid #eee; | |
} | |
.detail-item label { | |
display: block; | |
font-weight: 500; | |
color: #555; | |
margin-bottom: 5px; | |
} | |
.detail-item span { | |
display: block; | |
color: #333; | |
} | |
.detail-description { | |
padding: 10px; | |
background-color: #f9f9f9; | |
border-radius: 4px; | |
border-left: 3px solid #3498db; | |
} | |
.status-normal { | |
color: #2ecc71; | |
} | |
.status-low { | |
color: #f39c12; | |
} | |
.status-expired { | |
color: #e74c3c; | |
} | |
.status-warning { | |
color: #e67e22; | |
} | |
.product-image { | |
max-width: 100px; | |
max-height: 100px; | |
border-radius: 4px; | |
border: 1px solid #ddd; | |
} | |
.image-preview-container { | |
margin-top: 10px; | |
display: flex; | |
gap: 10px; | |
flex-wrap: wrap; | |
} | |
.image-preview { | |
position: relative; | |
width: 80px; | |
height: 80px; | |
border: 1px dashed #ddd; | |
border-radius: 4px; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
.image-preview img { | |
max-width: 100%; | |
max-height: 100%; | |
} | |
.remove-image { | |
position: absolute; | |
top: -8px; | |
right: -8px; | |
width: 20px; | |
height: 20px; | |
background-color: #e74c3c; | |
color: white; | |
border-radius: 50%; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
font-size: 12px; | |
cursor: pointer; | |
} | |
.confirmation-dialog { | |
text-align: center; | |
padding: 20px; | |
} | |
.confirmation-message { | |
margin-bottom: 20px; | |
font-size: 16px; | |
} | |
.confirmation-buttons { | |
display: flex; | |
justify-content: center; | |
gap: 10px; | |
} | |
.btn-confirm { | |
padding: 8px 16px; | |
background-color: #e74c3c; | |
color: white; | |
border: none; | |
border-radius: 4px; | |
cursor: pointer; | |
} | |
/* 新增的菜单交互样式 */ | |
.menu-title { | |
transition: all 0.3s ease; | |
position: relative; | |
} | |
.menu-title:hover { | |
background-color: rgba(255, 255, 255, 0.1); | |
} | |
.menu-title.active { | |
background-color: rgba(255, 255, 255, 0.1); | |
} | |
.menu-title::after { | |
content: ''; | |
position: absolute; | |
left: 0; | |
top: 0; | |
height: 100%; | |
width: 4px; | |
background-color: #3498db; | |
transform: scaleY(0); | |
transition: transform 0.3s ease; | |
transform-origin: top; | |
} | |
.menu-title.active::after { | |
transform: scaleY(1); | |
} | |
.submenu { | |
max-height: 0; | |
overflow: hidden; | |
transition: max-height 0.3s ease, padding 0.3s ease; | |
} | |
.submenu.expanded { | |
max-height: 500px; | |
} | |
.submenu-item { | |
transition: all 0.3s ease; | |
position: relative; | |
} | |
.submenu-item:hover { | |
background-color: rgba(255, 255, 255, 0.1); | |
} | |
.submenu-item.active { | |
background-color: rgba(255, 255, 255, 0.1); | |
} | |
.submenu-item::before { | |
content: ''; | |
position: absolute; | |
left: 10px; | |
top: 50%; | |
transform: translateY(-50%); | |
width: 6px; | |
height: 6px; | |
background-color: #fff; | |
border-radius: 50%; | |
opacity: 0.7; | |
} | |
</style> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
</head> | |
<body class="bg-gray-100"> | |
<div class="flex h-screen overflow-hidden"> | |
<!-- 侧边栏 --> | |
<div class="sidebar bg-gray-800 text-white h-full w-64 flex-shrink-0"> | |
<div class="p-4 flex items-center justify-between border-b border-gray-700"> | |
<h2 class="text-xl font-semibold">WMS系统</h2> | |
<button id="toggleSidebar" class="text-gray-400 hover:text-white"> | |
<i class="fas fa-bars"></i> | |
</button> | |
</div> | |
<div class="menu p-2"> | |
<div class="menu-item mb-2"> | |
<div class="menu-title flex items-center p-2 rounded cursor-pointer active" onclick="toggleMainMenu(this)"> | |
<i class="menu-icon fas fa-box mr-3"></i> | |
<span>产品管理</span> | |
<i class="fas fa-chevron-down ml-auto transition-transform duration-200"></i> | |
</div> | |
<div class="submenu pl-8 expanded"> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer active"> | |
<i class="submenu-icon fas fa-list mr-3"></i> | |
<span>产品列表</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-plus mr-3"></i> | |
<span>添加产品</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-chart-bar mr-3"></i> | |
<span>库存分析</span> | |
</div> | |
</div> | |
</div> | |
<div class="menu-item mb-2"> | |
<div class="menu-title flex items-center p-2 rounded cursor-pointer" onclick="toggleMainMenu(this)"> | |
<i class="menu-icon fas fa-warehouse mr-3"></i> | |
<span>仓库管理</span> | |
<i class="fas fa-chevron-down ml-auto transition-transform duration-200"></i> | |
</div> | |
<div class="submenu pl-8"> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-map-marker-alt mr-3"></i> | |
<span>库位管理</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-search mr-3"></i> | |
<span>库存查询</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-exchange-alt mr-3"></i> | |
<span>库存调拨</span> | |
</div> | |
</div> | |
</div> | |
<div class="menu-item mb-2"> | |
<div class="menu-title flex items-center p-2 rounded cursor-pointer" onclick="toggleMainMenu(this)"> | |
<i class="menu-icon fas fa-clipboard-list mr-3"></i> | |
<span>订单管理</span> | |
<i class="fas fa-chevron-down ml-auto transition-transform duration-200"></i> | |
</div> | |
<div class="submenu pl-8"> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-arrow-down mr-3"></i> | |
<span>入库单</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-arrow-up mr-3"></i> | |
<span>出库单</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-search mr-3"></i> | |
<span>订单查询</span> | |
</div> | |
</div> | |
</div> | |
<div class="menu-item mb-2"> | |
<div class="menu-title flex items-center p-2 rounded cursor-pointer" onclick="toggleMainMenu(this)"> | |
<i class="menu-icon fas fa-check-circle mr-3"></i> | |
<span>审核中心</span> | |
<i class="fas fa-chevron-down ml-auto transition-transform duration-200"></i> | |
</div> | |
<div class="submenu pl-8"> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-arrow-down mr-3"></i> | |
<span>入库单审核</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-arrow-up mr-3"></i> | |
<span>出库单审核</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-clipboard-check mr-3"></i> | |
<span>盘点审核</span> | |
</div> | |
<div class="submenu-item flex items center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-exchange-alt mr-3"></i> | |
<span>调拨审核</span> | |
</div> | |
</div> | |
</div> | |
<div class="menu-item mb-2"> | |
<div class="menu-title flex items-center p-2 rounded cursor-pointer" onclick="toggleMainMenu(this)"> | |
<i class="menu-icon fas fa-cog mr-3"></i> | |
<span>系统设置</span> | |
<i class="fas fa-chevron-down ml-auto transition-transform duration-200"></i> | |
</div> | |
<div class="submenu pl-8"> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-users mr-3"></i> | |
<span>用户管理</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-tools mr-3"></i> | |
<span>系统设置</span> | |
</div> | |
<div class="submenu-item flex items-center p-2 rounded cursor-pointer"> | |
<i class="submenu-icon fas fa-chart-line mr-3"></i> | |
<span>报表统计</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- 主内容区 --> | |
<div class="flex-1 flex flex-col overflow-hidden"> | |
<!-- 顶部导航栏 --> | |
<header class="bg-white shadow-sm"> | |
<div class="flex items-center justify-between p-4"> | |
<div class="flex items-center"> | |
<h2 class="text-xl font-semibold">产品管理</h2> | |
<div class="ml-4"> | |
<select class="border rounded px-3 py-1"> | |
<option>惠州仓库</option> | |
<option>深圳仓库</option> | |
<option>广州仓库</option> | |
</select> | |
</div> | |
</div> | |
<div class="flex items-center space-x-4"> | |
<div class="relative"> | |
<input type="text" placeholder="搜索..." class="border rounded pl-8 pr-4 py-1"> | |
<i class="fas fa-search absolute left-3 top-2 text-gray-400"></i> | |
</div> | |
<div class="flex items-center space-x-2"> | |
<button class="bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600"> | |
<i class="fas fa-plus mr-1"></i> 新增 | |
</button> | |
<button class="bg-gray-200 px-3 py-1 rounded hover:bg-gray-300"> | |
<i class="fas fa-sync-alt"></i> | |
</button> | |
</div> | |
</div> | |
</div> | |
</header> | |
<!-- 主要内容 --> | |
<main class="flex-1 overflow-y-auto p-6"> | |
<!-- 产品列表 --> | |
<div class="product-list-container"> | |
<div class="flex justify-between items-center mb-6"> | |
<h3 class="text-lg font-semibold">产品列表</h3> | |
<div class="search-container"> | |
<input type="text" placeholder="搜索产品..." class="search-input"> | |
<select class="filter-select"> | |
<option>全部类别</option> | |
<option>电子产品</option> | |
<option>日用品</option> | |
<option>食品</option> | |
</select> | |
<button class="add-product-btn" onclick="showAddProductForm()"> | |
<i class="fas fa-plus"></i> 添加产品 | |
</button> | |
</div> | |
</div> | |
<div class="overflow-x-auto"> | |
<table class="product-table"> | |
<thead> | |
<tr> | |
<th>产品ID</th> | |
<th>产品名称</th> | |
<th>类别</th> | |
<th>库存数量</th> | |
<th>状态</th> | |
<th>操作</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr> | |
<td>P10001</td> | |
<td>笔记本电脑</td> | |
<td>电子产品</td> | |
<td>120</td> | |
<td><span class="status-normal">正常</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10001')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10001', '笔记本电脑')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10001')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10002</td> | |
<td>智能手机</td> | |
<td>电子产品</td> | |
<td>85</td> | |
<td><span class="status-normal">正常</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10002')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10002', '智能手机')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10002')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10003</td> | |
<td>蓝牙耳机</td> | |
<td>电子产品</td> | |
<td>45</td> | |
<td><span class="status-low">低库存</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10003')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10003', '蓝牙耳机')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10003')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10004</td> | |
<td>智能手表</td> | |
<td>电子产品</td> | |
<td>32</td> | |
<td><span class="status-normal">正常</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10004')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10004', '智能手表')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10004')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10005</td> | |
<td>牛奶</td> | |
<td>食品</td> | |
<td>12</td> | |
<td><span class="status-warning">即将过期</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10005')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10005', '牛奶')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10005')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10006</td> | |
<td>洗发水</td> | |
<td>日用品</td> | |
<td>56</td> | |
<td><span class="status-normal">正常</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10006')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10006', '洗发水')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10006')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
<tr> | |
<td>P10007</td> | |
<td>面包</td> | |
<td>食品</td> | |
<td>8</td> | |
<td><span class="status-expired">已过期</span></td> | |
<td> | |
<button class="action-btn edit-btn" onclick="showEditForm('P10007')"> | |
<i class="fas fa-edit"></i> 编辑 | |
</button> | |
<button class="action-btn delete-btn" onclick="confirmDelete('P10007', '面包')"> | |
<i class="fas fa-trash"></i> 删除 | |
</button> | |
<button class="action-btn detail-btn" onclick="showDetail('P10007')"> | |
<i class="fas fa-info-circle"></i> 详情 | |
</button> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
<div class="pagination"> | |
<button class="page-btn"><i class="fas fa-angle-left"></i></button> | |
<button class="page-btn active">1</button> | |
<button class="page-btn">2</button> | |
<button class="page-btn">3</button> | |
<button class="page-btn"><i class="fas fa-angle-right"></i></button> | |
</div> | |
</div> | |
</main> | |
</div> | |
</div> | |
<!-- 抽屉组件 --> | |
<div id="drawer-overlay" class="drawer-overlay" onclick="closeDrawer()"></div> | |
<div id="drawer" class="drawer"> | |
<div class="drawer-header"> | |
<h3 id="drawer-title">标题</h3> | |
<button class="drawer-close" onclick="closeDrawer()">×</button> | |
</div> | |
<div id="drawer-content" class="drawer-content"></div> | |
</div> | |
<script> | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Sephiroth1984/mixed-development" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |