prepare('UPDATE ' . tn('orders') . ' SET status = ? WHERE id = ?')->execute([$status, $id]); $msg = '订单 #' . $id . ' 状态已更新为「' . orderStatusLabel($status) . '」'; } } // 发货:填写连接/登录信息 if (isset($_POST['ship'])) { verifyCsrf(); $id = (int) ($_POST['id'] ?? 0); $serverIp = trim($_POST['server_ip'] ?? ''); $connAddr = trim($_POST['conn_addr'] ?? ''); $loginUser = trim($_POST['login_user'] ?? ''); $loginPass = trim($_POST['login_pass'] ?? ''); $remark = trim($_POST['remark'] ?? ''); $activated = isset($_POST['activated']) ? 1 : 0; $productInfo = trim($_POST['product_info'] ?? ''); $chk = $db->prepare('SELECT id, status FROM ' . tn('orders') . ' WHERE id = ?'); $chk->execute([$id]); $ord = $chk->fetch(); if (!$ord) { $err = '订单不存在'; } else { // 已存在发货记录则更新,否则插入 $ex = $db->prepare('SELECT id FROM ' . tn('order_deliveries') . ' WHERE order_id = ? ORDER BY id DESC LIMIT 1'); $ex->execute([$id]); $exId = $ex->fetchColumn(); if ($exId) { $db->prepare('UPDATE ' . tn('order_deliveries') . ' SET server_ip=?, conn_addr=?, login_user=?, login_pass=?, remark=?, activated=?, product_info=? WHERE id=?') ->execute([$serverIp, $connAddr, $loginUser, $loginPass, $remark, $activated, $productInfo, $exId]); } else { $db->prepare('INSERT INTO ' . tn('order_deliveries') . ' (order_id, server_ip, conn_addr, login_user, login_pass, remark, activated, product_info, created_at) VALUES (?,?,?,?,?,?,?,?,NOW())') ->execute([$id, $serverIp, $connAddr, $loginUser, $loginPass, $remark, $activated, $productInfo]); } // 由「已付款」发货后自动转为「已发货」 if ($ord['status'] === 'paid') { $db->prepare('UPDATE ' . tn('orders') . ' SET status = ? WHERE id = ?')->execute(['shipped', $id]); } $msg = '发货信息已保存(订单 #' . $id . ')。'; // 通过 SMTP 通知客户(失败不影响保存) $u = $db->prepare('SELECT u.email, u.username FROM ' . tn('orders') . ' o LEFT JOIN ' . tn('users') . ' u ON u.id = o.user_id WHERE o.id = ?'); $u->execute([$id]); $urow = $u->fetch(); if ($urow && !empty($urow['email'])) { $subject = '[' . SITE_NAME . '] 你的订单 #' . $id . ' 已发货'; $body = '
' . '

订单已发货

' . '

你好 ' . h($urow['username']) . ',你购买的以下服务/商品已开通:

' . '
' . '

连接地址:' . h($connAddr) . '

' . '

登录账户:' . h($loginUser) . '

' . '

可在「我的订单 → 详情」中查看完整登录凭据。

' . '
' . '

如有问题请到「我的工单」联系客服。

'; fnwSendMail($urow['email'], $subject, $body); } } } // 修改到期时间(后台) if (isset($_POST['save_expire'])) { verifyCsrf(); $id = (int) ($_POST['id'] ?? 0); $clear = isset($_POST['clear_expire']); $expRaw = trim($_POST['expires_at'] ?? ''); $newExp = null; if (!$clear) { if ($expRaw === '') { $err = '请填写新的到期时间,或勾选「清除到期时间」'; } else { $t = strtotime(str_replace('T', ' ', $expRaw)); if ($t === false) { $err = '到期时间格式不正确'; } else { $newExp = date('Y-m-d H:i:s', $t); } } } if ($err === '') { $db->prepare('UPDATE ' . tn('orders') . ' SET expires_at = ?, expire_notify_sent = 0 WHERE id = ?') ->execute([$newExp, $id]); $msg = '订单 #' . $id . ' 的到期时间已更新' . ($newExp ? '为 ' . $newExp : '(已清除)') . ',到期提醒将重新计算。'; } } // 删除订单(含明细与发货信息) if (isset($_POST['delete'])) { verifyCsrf(); $id = (int) ($_POST['delete'] ?? 0); $db->prepare('DELETE FROM ' . tn('order_deliveries') . ' WHERE order_id = ?')->execute([$id]); $db->prepare('DELETE FROM ' . tn('order_items') . ' WHERE order_id = ?')->execute([$id]); $db->prepare('DELETE FROM ' . tn('orders') . ' WHERE id = ?')->execute([$id]); $msg = '订单 #' . $id . ' 已删除'; } $filter = trim($_GET['status'] ?? ''); $where = $filter !== '' ? 'WHERE o.status = ?' : ''; $params = $filter !== '' ? [$filter] : []; $stmt = $db->prepare( 'SELECT o.*, u.username, u.email AS u_email FROM ' . tn('orders') . ' o LEFT JOIN ' . tn('users') . ' u ON u.id = o.user_id ' . $where . ' ORDER BY o.created_at DESC' ); $stmt->execute($params); $list = $stmt->fetchAll(); // 预取商品明细 $itemsOf = []; foreach ($list as $o) { $it = $db->prepare('SELECT name, qty, period_days FROM ' . tn('order_items') . ' WHERE order_id = ?'); $it->execute([$o['id']]); $itemsOf[$o['id']] = $it->fetchAll(); } // 查看单条 + 发货 $view = isset($_GET['view']) ? (int) $_GET['view'] : 0; $order = $delivery = null; if ($view > 0) { $ostmt = $db->prepare('SELECT o.*, u.username, u.email AS u_email FROM ' . tn('orders') . ' o LEFT JOIN ' . tn('users') . ' u ON u.id = o.user_id WHERE o.id = ?'); $ostmt->execute([$view]); $order = $ostmt->fetch(); if ($order) { $istmt = $db->prepare('SELECT * FROM ' . tn('order_items') . ' WHERE order_id = ?'); $istmt->execute([$order['id']]); $order['items'] = $istmt->fetchAll(); $dstmt = $db->prepare('SELECT * FROM ' . tn('order_deliveries') . ' WHERE order_id = ? ORDER BY id DESC LIMIT 1'); $dstmt->execute([$order['id']]); $delivery = $dstmt->fetch(); } } adminHeader('订单管理', 'orders'); ?>

订单管理

全部
订单号:
订单发起人
账号邮箱:
联系信息
联系人:
联系邮箱:
收货地址:
周期 / 到期
周期:
到期时间:
已发送「到期前提醒」邮件
备注
支付方式

商品明细

商品单价数量小计周期

发货信息(连接地址 / 登录凭据 / 商品信息)

已填写,当前内容如下(可重新提交覆盖):

激活状态:
服务器 IP:
连接地址:
登录账户:
登录密码:
商品信息:
备注:
返回列表

没有符合条件的订单。

订单号用户商品金额周期支付状态时间操作
×