This commit is contained in:
aaron 2025-08-11 10:42:22 +08:00
parent fd4d12f7f8
commit df3be587d8
3 changed files with 141 additions and 0 deletions

View File

@ -1,5 +1,49 @@
/* 订单管理页面样式 */
/* 管理页面头部样式 */
header {
text-align: center;
padding: 40px 20px;
background: linear-gradient(145deg, #1a1a1a 0%, #2d2d2d 100%);
border-radius: 20px;
margin-bottom: 40px;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
border: 1px solid #333;
position: relative;
overflow: hidden;
}
header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #ffd700, #ffed4a, #ffd700);
}
header h1 {
font-size: 2.5em;
color: #ffffff;
margin-bottom: 10px;
font-weight: 700;
background: linear-gradient(45deg, #ffd700, #ffed4a);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-shadow: 0 0 20px rgba(255, 215, 0, 0.3);
}
header p {
font-size: 1.1em;
color: #b0b0b0;
margin: 0;
font-weight: 400;
}
/* 管理员导航 - 已移除 */
/* 统计卡片 */
@ -257,6 +301,18 @@
box-shadow: 0 4px 12px rgba(255, 215, 0, 0.4);
}
.btn-delete {
background: linear-gradient(135deg, #dc3545, #c82333);
color: #fff;
border: 1px solid #dc3545;
}
.btn-delete:hover {
background: linear-gradient(135deg, #c82333, #a71e2a);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4);
}
/* 订单详情模态框 */
.order-detail-content {
color: #e0e0e0;
@ -417,6 +473,14 @@
/* 响应式设计 */
@media (max-width: 768px) {
header h1 {
font-size: 2em;
}
header p {
font-size: 1em;
}
.stats-section {
grid-template-columns: repeat(2, 1fr);
}

View File

@ -85,6 +85,9 @@ function updateOrdersTable(orders) {
<button class="action-btn btn-ship" onclick="showShippingModal('${order.order_id}')">
📦 发货
</button>
<button class="action-btn btn-delete" onclick="confirmDeleteOrder('${order.order_id}')" title="删除订单">
🗑 删除
</button>
</td>
</tr>
`).join('');
@ -427,6 +430,45 @@ function formatDate(dateString) {
});
}
// 确认删除订单
function confirmDeleteOrder(orderId) {
const order = currentOrders.find(o => o.order_id === orderId);
if (!order) {
alert('订单未找到');
return;
}
const confirmMessage = `确认删除以下订单吗?\n\n订单号:${orderId}\n客户:${order.customer_name}\n金额:$${order.total_amount.toFixed(2)} USDT\n\n⚠️ 此操作不可撤销!`;
if (confirm(confirmMessage)) {
deleteOrder(orderId);
}
}
// 删除订单
async function deleteOrder(orderId) {
try {
const response = await fetch(`/api/admin/orders/${orderId}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (response.ok) {
alert('订单已成功删除!');
loadOrders(); // 重新加载订单列表
} else {
throw new Error(result.error || '删除订单失败');
}
} catch (error) {
console.error('Delete order error:', error);
alert('删除订单失败: ' + error.message);
}
}
// 键盘事件监听
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {

View File

@ -411,6 +411,41 @@ app.put('/api/admin/orders/:order_id/shipping', (req, res) => {
);
});
// 删除订单(管理员)
app.delete('/api/admin/orders/:order_id', (req, res) => {
const { order_id } = req.params;
// 先查询订单是否存在
db.get('SELECT * FROM orders WHERE order_id = ?', [order_id], (err, order) => {
if (err) {
console.error('Query order error:', err);
return res.status(500).json({ error: '查询订单失败' });
}
if (!order) {
return res.status(404).json({ error: '订单未找到' });
}
// 删除订单
db.run('DELETE FROM orders WHERE order_id = ?', [order_id], function(err) {
if (err) {
console.error('Delete order error:', err);
return res.status(500).json({ error: '删除订单失败' });
}
if (this.changes === 0) {
return res.status(404).json({ error: '订单未找到' });
}
res.json({
success: true,
message: '订单已删除',
deleted_order_id: order_id
});
});
});
});
app.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});