Files
freeshop/myorders.php
T
2026-08-14 10:55:06 +08:00

70 lines
3.7 KiB
PHP

<?php
// 我的订单
require __DIR__ . '/includes/init.php';
requireLogin('myorders.php');
$pageTitle = __('myorders.title');
$user = currentUser();
$paid = $_GET['paid'] ?? '';
$stmt = db()->prepare('SELECT * FROM ' . tn('orders') . ' WHERE user_id = ? ORDER BY created_at DESC');
$stmt->execute([$user['id']]);
$orders = $stmt->fetchAll();
// 预取每笔订单的商品
$orderItems = [];
foreach ($orders as $o) {
$it = db()->prepare('SELECT * FROM ' . tn('order_items') . ' WHERE order_id = ?');
$it->execute([$o['id']]);
$orderItems[$o['id']] = $it->fetchAll();
}
require 'includes/header.php';
?>
<section class="section">
<h2 class="sec-title"><i class="fas fa-receipt"></i> <?= __('myorders.title') ?></h2>
<?php if ($paid): ?>
<p class="banner-ok"><i class="fas fa-check-circle"></i> <?= str_replace('{no}', '<strong>' . h($paid) . '</strong>', __('myorders.paid_success')) ?></p>
<?php endif; ?>
<?php if (empty($orders)): ?>
<p class="empty"><?= str_replace('{link}', '<a href="index.php">' . __('myorders.shop_link') . '</a>', __('myorders.no_orders')) ?></p>
<?php else: ?>
<div class="order-list">
<?php foreach ($orders as $o): ?>
<div class="order-card">
<div class="oc-head">
<span class="oc-no"><?= __('myorders.order_no_label') ?><?= h($o['order_no']) ?></span>
<span class="badge-status status-<?= h($o['status']) ?>"><?= orderStatusLabel($o['status']) ?></span>
</div>
<div class="oc-items">
<?php foreach (($orderItems[$o['id']] ?? []) as $it): ?>
<div class="oc-row">
<span><?= str_replace(['{name}', '{qty}'], [h($it['name']), (int)$it['qty']], __('myorders.items_fmt')) ?></span>
<span><?= money($it['subtotal']) ?></span>
</div>
<?php endforeach; ?>
</div>
<div class="oc-foot">
<span class="oc-time"><?= date('Y-m-d H:i', strtotime($o['created_at'])) ?></span>
<a href="order_detail.php?id=<?= (int)$o['id'] ?>" class="oc-detail"><i class="fas fa-chevron-right"></i> <?= __('myorders.detail_btn') ?></a>
<span class="oc-pay pay-<?= h($o['pay_type']) ?>"><?= payTypeLabel($o['pay_type']) ?><?php $o['pay_type']==='points' ? ' ' . str_replace('{pts}', (int)$o['points_used'], __('myorders.pay_points')) : '' ?></span>
<span class="oc-total"><?= __('myorders.total_label') ?><strong><?= money($o['total']) ?></strong></span>
</div>
<?php if ($o['address']): ?>
<div class="oc-addr"><?= __('myorders.shipping_label') ?><?= h($o['contact']) ?> · <?= h($o['address']) ?></div>
<?php endif; ?>
<?php if (!empty($o['period_days'])): ?>
<div class="oc-period"><?= __('myorders.period_label') ?><?= periodLabel($o['period_days']) ?> · <?= __('myorders.expire_label') ?><?= expiryText($o['expires_at']) ?></div>
<?php endif; ?>
<?php if (!empty($o['period_days']) && in_array($o['status'], ['shipped','completed'], true)): ?>
<div class="oc-renew"><a href="ticket.php?order_id=<?= (int)$o['id'] ?>" class="btn btn-ghost btn-sm"><i class="fas fa-rotate"></i> <?= __('myorders.renew_btn') ?></a></div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</section>
<?php require 'includes/footer.php'; ?>