Files
2026-08-08 15:53:53 +08:00

62 lines
2.2 KiB
PHP

<?php
namespace App\Controllers\PSI;
use App\Controllers\Controller;
use App\Models\Order;
use App\Models\Payment;
use Core\Payment\OrderService;
/**
* PSI 订单管理:将原「后台订单」合并到进销存系统,便于管理人员在同一系统快速处理。
* 权限:该系统拥有 orders 页面权限的用户(默认 PSI 管理员/超管全部可见,普通用户按 perms 细粒度控制)。
* 关键动作(标记支付、删除)仅限 PSI 管理员,避免普通操作员误改订单。
*/
class OrdersController extends Controller
{
/** 列表:最新在前 */
public function index()
{
$order = new Order();
$all = array_reverse($order->all());
return $this->renderSubsys('psi', 'psi/orders', ['orders' => $all], \subsys_nav('psi'), 'orders');
}
/** 详情:订单信息 + 付款记录 */
public function show($id)
{
$order = new Order();
$o = $order->find($id);
if (!$o) { \Core\App::notFound(); return; }
$payments = (new Payment())->whereAll('order_no', $o['order_no']);
return $this->renderSubsys('psi', 'psi/order_show', [
'o' => $o, 'payments' => $payments,
], \subsys_nav('psi'), 'orders');
}
/** 标记为已支付(仅 PSI 管理员) */
public function markPaid($id)
{
subsys_admin('psi') or \Core\App::forbidden('需要 PSI 管理员权限');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && csrf_check()) {
$order = new Order();
$o = $order->find($id);
if ($o && $o['status'] !== 'paid') {
OrderService::markPaid($o['order_no'], 'MANUAL' . time(), $o['channel'] ?: 'manual');
$this->flash('订单已标记为已支付', 'ok');
}
}
return $this->redirect('PSI/orders/show/' . $id);
}
/** 删除订单(仅 PSI 管理员) */
public function destroy($id)
{
subsys_admin('psi') or \Core\App::forbidden('需要 PSI 管理员权限');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && csrf_check()) {
(new Order())->delete($id);
$this->flash('订单已删除', 'ok');
}
return $this->redirect('PSI/orders');
}
}