order_details.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. require_once 'conn.php';
  3. checkLogin();
  4. $id = $_GET['id'] ?? '';
  5. // 验证并获取订单数据
  6. if (!empty($id) && is_numeric($id)) {
  7. // 获取订单基本信息
  8. $employee_id = $_SESSION['employee_id'];
  9. $sql = "SELECT o.*, c.cs_company, cc.contact_name, e.employee_name
  10. FROM orders o
  11. LEFT JOIN customer c ON o.customer_id = c.id
  12. LEFT JOIN customer_contact cc ON o.contact_id = cc.id
  13. LEFT JOIN employee e ON o.employee_id = e.id
  14. WHERE o.id = $id AND o.employee_id = $employee_id";
  15. $result = mysqli_query($conn, $sql);
  16. if ($row = mysqli_fetch_assoc($result)) {
  17. $order = $row;
  18. } else {
  19. echo "<script>alert('订单不存在或您没有权限查看');history.back();</script>";
  20. exit;
  21. }
  22. // 获取订单项信息
  23. $sql = "SELECT oi.*, p.ProductName
  24. FROM order_items oi
  25. LEFT JOIN products p ON oi.product_id = p.id
  26. WHERE oi.order_id = $id";
  27. $itemsResult = mysqli_query($conn, $sql);
  28. $orderItems = [];
  29. while ($itemRow = mysqli_fetch_assoc($itemsResult)) {
  30. $orderItems[] = $itemRow;
  31. }
  32. } else {
  33. echo "<script>alert('订单不存在!');history.back();</script>";
  34. exit;
  35. }
  36. ?>
  37. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  38. <html xmlns="http://www.w3.org/1999/xhtml">
  39. <head>
  40. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  41. <title>订单详情</title>
  42. <link rel="stylesheet" href="css/common.css" type="text/css" />
  43. <link rel="stylesheet" href="css/alert.css" type="text/css" />
  44. <script src="js/jquery-1.7.2.min.js"></script>
  45. <script src="js/js.js"></script>
  46. <style>
  47. body {
  48. margin: 0;
  49. padding: 20px;
  50. background: #fff;
  51. }
  52. #man_zone {
  53. margin-left: 0;
  54. }
  55. .order-info {
  56. border: 1px solid #ddd;
  57. padding: 15px;
  58. margin-bottom: 20px;
  59. background-color: #f9f9f9;
  60. }
  61. .order-info h2 {
  62. margin-top: 0;
  63. border-bottom: 1px solid #ddd;
  64. padding-bottom: 10px;
  65. }
  66. .order-info .info-row {
  67. margin-bottom: 10px;
  68. }
  69. .order-info .info-label {
  70. font-weight: bold;
  71. display: inline-block;
  72. width: 120px;
  73. }
  74. .products-table {
  75. width: 100%;
  76. border-collapse: collapse;
  77. margin-bottom: 20px;
  78. }
  79. .products-table th, .products-table td {
  80. border: 1px solid #ddd;
  81. padding: 8px;
  82. text-align: left;
  83. }
  84. .products-table th {
  85. background-color: #f2f2f2;
  86. }
  87. .status-badge {
  88. display: inline-block;
  89. padding: 3px 8px;
  90. border-radius: 3px;
  91. font-size: 12px;
  92. color: white;
  93. }
  94. .status-0 { background-color: #999; }
  95. .status-1 { background-color: #5bc0de; }
  96. .status-2 { background-color: #337ab7; }
  97. .status-3 { background-color: #f0ad4e; }
  98. .status-4 { background-color: #5cb85c; }
  99. .status-5 { background-color: #28a745; }
  100. .payment-badge {
  101. display: inline-block;
  102. padding: 3px 8px;
  103. border-radius: 3px;
  104. font-size: 12px;
  105. color: white;
  106. }
  107. .payment-0 { background-color: #d9534f; }
  108. .payment-1 { background-color: #f0ad4e; }
  109. .payment-2 { background-color: #5cb85c; }
  110. .notes-section {
  111. border: 1px solid #ddd;
  112. padding: 15px;
  113. margin-bottom: 20px;
  114. }
  115. .total-section {
  116. text-align: right;
  117. font-size: 1.1em;
  118. margin-top: 10px;
  119. border-top: 1px solid #ddd;
  120. padding-top: 10px;
  121. }
  122. </style>
  123. </head>
  124. <body>
  125. <div id="man_zone">
  126. <div align="right" style="margin-bottom: 10px;">
  127. <input type="button" value="返回订单列表" class="btn1" onClick="location.href='order.php'" />
  128. <input type="button" value="编辑此订单" class="btn1" onClick="location.href='order_edit.php?id=<?= $id ?>'" />
  129. </div>
  130. <div class="order-info">
  131. <h2>订单信息</h2>
  132. <div class="info-row">
  133. <span class="info-label">订单编号:</span> <?= htmlspecialcharsFix($order['order_code']) ?>
  134. </div>
  135. <div class="info-row">
  136. <span class="info-label">客户:</span> <?= htmlspecialcharsFix($order['cs_company']) ?>
  137. </div>
  138. <div class="info-row">
  139. <span class="info-label">联系人:</span> <?= htmlspecialcharsFix($order['contact_name']) ?>
  140. </div>
  141. <div class="info-row">
  142. <span class="info-label">订单日期:</span> <?= date('Y-m-d', strtotime($order['order_date'])) ?>
  143. </div>
  144. <div class="info-row">
  145. <span class="info-label">预计交付日期:</span> <?= $order['delivery_date'] ? date('Y-m-d', strtotime($order['delivery_date'])) : '未设置' ?>
  146. </div>
  147. <div class="info-row">
  148. <span class="info-label">实际交付日期:</span> <?= $order['actual_delivery_date'] ? date('Y-m-d', strtotime($order['actual_delivery_date'])) : '未完成' ?>
  149. </div>
  150. <div class="info-row">
  151. <span class="info-label">订单状态:</span>
  152. <?php
  153. $statusMap = [
  154. 0 => '已取消',
  155. 1 => '待确认',
  156. 2 => '已确认',
  157. 3 => '生产中',
  158. 4 => '已发货',
  159. 5 => '已完成'
  160. ];
  161. echo '<span class="status-badge status-' . $order['order_status'] . '">' .
  162. $statusMap[$order['order_status']] . '</span>';
  163. ?>
  164. </div>
  165. <div class="info-row">
  166. <span class="info-label">付款状态:</span>
  167. <?php
  168. $paymentMap = [
  169. 0 => '未付款',
  170. 1 => '部分付款',
  171. 2 => '已付清'
  172. ];
  173. echo '<span class="payment-badge payment-' . $order['payment_status'] . '">' .
  174. $paymentMap[$order['payment_status']] . '</span>';
  175. ?>
  176. </div>
  177. <div class="info-row">
  178. <span class="info-label">币种:</span> <?= $order['currency'] ?>
  179. </div>
  180. <div class="info-row">
  181. <span class="info-label">创建时间:</span> <?= $order['created_at'] ?>
  182. </div>
  183. <div class="info-row">
  184. <span class="info-label">最后更新:</span> <?= $order['updated_at'] ?>
  185. </div>
  186. <div class="info-row">
  187. <span class="info-label">销售员:</span> <?= htmlspecialcharsFix($order['employee_name']) ?>
  188. </div>
  189. </div>
  190. <h2>订单产品</h2>
  191. <table class="products-table">
  192. <thead>
  193. <tr>
  194. <th>序号</th>
  195. <th>产品名称</th>
  196. <th>数量</th>
  197. <th>单位</th>
  198. <th>单价</th>
  199. <th>折扣</th>
  200. <th>总价</th>
  201. <th>备注</th>
  202. </tr>
  203. </thead>
  204. <tbody>
  205. <?php foreach ($orderItems as $index => $item): ?>
  206. <tr>
  207. <td><?= $index + 1 ?></td>
  208. <td><?= htmlspecialcharsFix($item['ProductName']) ?></td>
  209. <td><?= $item['quantity'] ?></td>
  210. <td><?= htmlspecialcharsFix($item['unit']) ?></td>
  211. <td><?= number_format($item['unit_price'], 2) ?></td>
  212. <td>
  213. <?php if ($item['discount_amount'] > 0): ?>
  214. <?= number_format($item['discount_amount'], 2) ?>
  215. (<?= number_format($item['discount_percent'], 2) ?>%)
  216. <?php else: ?>
  217. -
  218. <?php endif; ?>
  219. </td>
  220. <td><?= number_format($item['total_price'], 2) ?></td>
  221. <td><?= htmlspecialcharsFix($item['notes']) ?></td>
  222. </tr>
  223. <?php endforeach; ?>
  224. </tbody>
  225. </table>
  226. <div class="total-section">
  227. <div>
  228. <strong>订单小计:</strong> <?= number_format($order['subtotal'], 2) ?> <?= $order['currency'] ?>
  229. </div>
  230. <div>
  231. <strong>运费:</strong> <?= number_format($order['shipping_fee'], 2) ?> <?= $order['currency'] ?>
  232. </div>
  233. <div>
  234. <strong>订单折扣:</strong> <?= number_format($order['discount_amount'], 2) ?> <?= $order['currency'] ?>
  235. </div>
  236. <div style="font-size: 1.2em; margin-top: 5px;">
  237. <strong>订单总额:</strong> <?= number_format($order['total_amount'], 2) ?> <?= $order['currency'] ?>
  238. </div>
  239. </div>
  240. <?php if (!empty($order['notes']) || !empty($order['internal_notes'])): ?>
  241. <div class="notes-section">
  242. <h2>备注信息</h2>
  243. <?php if (!empty($order['notes'])): ?>
  244. <div>
  245. <strong>订单备注:</strong>
  246. <p><?= nl2br(htmlspecialcharsFix($order['notes'])) ?></p>
  247. </div>
  248. <?php endif; ?>
  249. <?php if (!empty($order['internal_notes'])): ?>
  250. <div>
  251. <strong>内部备注:</strong>
  252. <p><?= nl2br(htmlspecialcharsFix($order['internal_notes'])) ?></p>
  253. </div>
  254. <?php endif; ?>
  255. </div>
  256. <?php endif; ?>
  257. </div>
  258. </body>
  259. </html>