749 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
		
		
			
		
	
	
			749 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
|  | <!DOCTYPE html> | |||
|  | <html lang="zh-CN"> | |||
|  | <head> | |||
|  |     <meta charset="UTF-8"> | |||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
|  |     <title>订单详情</title> | |||
|  |     <style> | |||
|  |         * { | |||
|  |             margin: 0; | |||
|  |             padding: 0; | |||
|  |             box-sizing: border-box; | |||
|  |         } | |||
|  | 
 | |||
|  |         body { | |||
|  |             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif; | |||
|  |             background-color: #f7f7f7; | |||
|  |             padding-bottom: 80px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .header { | |||
|  |             background-color: #013820; | |||
|  |             color: white; | |||
|  |             padding: 15px 20px; | |||
|  |             font-size: 20px; | |||
|  |             font-weight: bold; | |||
|  |             display: flex; | |||
|  |             align-items: center; | |||
|  |             justify-content: space-between; | |||
|  |             position: sticky; | |||
|  |             top: 0; | |||
|  |             z-index: 100; | |||
|  |         } | |||
|  | 
 | |||
|  |         .back-btn { | |||
|  |             width: 24px; | |||
|  |             height: 24px; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .title-text { | |||
|  |             flex: 1; | |||
|  |             margin: 0 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .contact-icon { | |||
|  |             width: 20px; | |||
|  |             height: 20px; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .content { | |||
|  |             padding: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .card { | |||
|  |             background-color: white; | |||
|  |             border-radius: 8px; | |||
|  |             padding: 10px; | |||
|  |             margin-bottom: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .shop-header { | |||
|  |             display: flex; | |||
|  |             justify-content: space-between; | |||
|  |             align-items: center; | |||
|  |             margin-bottom: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .shop-info { | |||
|  |             display: flex; | |||
|  |             align-items: center; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .shop-icon { | |||
|  |             width: 11px; | |||
|  |             height: 10px; | |||
|  |             margin-right: 7px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .shop-name { | |||
|  |             font-size: 13px; | |||
|  |             font-weight: bold; | |||
|  |             color: #1f1f1f; | |||
|  |             margin-right: 7px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .market-name { | |||
|  |             font-size: 11px; | |||
|  |             color: #575859; | |||
|  |         } | |||
|  | 
 | |||
|  |         .arrow-right { | |||
|  |             width: 4px; | |||
|  |             height: 7px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-list { | |||
|  |             margin-top: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-item { | |||
|  |             display: flex; | |||
|  |             justify-content: space-between; | |||
|  |             margin-bottom: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-left { | |||
|  |             display: flex; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-img { | |||
|  |             width: 46px; | |||
|  |             height: 46px; | |||
|  |             border-radius: 8px; | |||
|  |             margin-right: 10px; | |||
|  |             cursor: pointer; | |||
|  |             background: linear-gradient(135deg, #e0e0e0 0%, #f5f5f5 100%); | |||
|  |             display: flex; | |||
|  |             align-items: center; | |||
|  |             justify-content: center; | |||
|  |             font-size: 24px; | |||
|  |             border: 1px solid #ddd; | |||
|  |             flex-shrink: 0; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-info { | |||
|  |             display: flex; | |||
|  |             flex-direction: column; | |||
|  |             gap: 2px; | |||
|  |             color: #808080; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-name { | |||
|  |             font-size: 13px; | |||
|  |             color: #1f1f1f; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-spec { | |||
|  |             font-size: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-right { | |||
|  |             display: flex; | |||
|  |             align-items: flex-start; | |||
|  |             color: #ff6300; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-right .label { | |||
|  |             font-size: 13px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .product-right .price { | |||
|  |             font-size: 14px; | |||
|  |             font-weight: bold; | |||
|  |         } | |||
|  | 
 | |||
|  |         .divider { | |||
|  |             height: 1px; | |||
|  |             background-color: #ededed; | |||
|  |             margin: 15px 0; | |||
|  |         } | |||
|  | 
 | |||
|  |         .price-row { | |||
|  |             display: flex; | |||
|  |             justify-content: space-between; | |||
|  |             align-items: center; | |||
|  |             margin-bottom: 8px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .price-label { | |||
|  |             font-size: 13px; | |||
|  |             color: #1f1f1f; | |||
|  |         } | |||
|  | 
 | |||
|  |         .price-value { | |||
|  |             font-size: 14px; | |||
|  |             font-weight: bold; | |||
|  |         } | |||
|  | 
 | |||
|  |         .price-value.discount { | |||
|  |             color: #ff6300; | |||
|  |         } | |||
|  | 
 | |||
|  |         .total-price { | |||
|  |             display: flex; | |||
|  |             justify-content: space-between; | |||
|  |             align-items: center; | |||
|  |             font-weight: bold; | |||
|  |         } | |||
|  | 
 | |||
|  |         .total-price .label { | |||
|  |             font-size: 13px; | |||
|  |             color: #1f1f1f; | |||
|  |             display: flex; | |||
|  |             align-items: center; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .toggle-icon { | |||
|  |             width: 4px; | |||
|  |             height: 7px; | |||
|  |             margin-left: 8px; | |||
|  |             transform: rotate(90deg); | |||
|  |         } | |||
|  | 
 | |||
|  |         .toggle-icon.up { | |||
|  |             transform: rotate(-90deg); | |||
|  |         } | |||
|  | 
 | |||
|  |         .total-price .value { | |||
|  |             font-size: 19px; | |||
|  |             color: #ff6300; | |||
|  |         } | |||
|  | 
 | |||
|  |         .section-title { | |||
|  |             font-size: 13px; | |||
|  |             font-weight: bold; | |||
|  |             color: #1f1f1f; | |||
|  |             margin-bottom: 10px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .info-row { | |||
|  |             display: flex; | |||
|  |             margin: 10px 0; | |||
|  |         } | |||
|  | 
 | |||
|  |         .info-label { | |||
|  |             width: 85px; | |||
|  |             font-size: 13px; | |||
|  |             color: #808080; | |||
|  |         } | |||
|  | 
 | |||
|  |         .info-value { | |||
|  |             width: calc(100% - 85px); | |||
|  |             font-size: 13px; | |||
|  |             color: #1f1f1f; | |||
|  |         } | |||
|  | 
 | |||
|  |         .copy-btn { | |||
|  |             color: #808080; | |||
|  |             margin-left: 8px; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .copy-btn:hover { | |||
|  |             color: #013820; | |||
|  |         } | |||
|  | 
 | |||
|  |         .footer { | |||
|  |             position: fixed; | |||
|  |             bottom: 0; | |||
|  |             left: 0; | |||
|  |             right: 0; | |||
|  |             background-color: white; | |||
|  |             padding: 15px 25px; | |||
|  |             display: flex; | |||
|  |             justify-content: flex-end; | |||
|  |             gap: 15px; | |||
|  |             box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); | |||
|  |         } | |||
|  | 
 | |||
|  |         .btn { | |||
|  |             padding: 10px 25px; | |||
|  |             border-radius: 4px; | |||
|  |             border: 1px solid; | |||
|  |             font-size: 14px; | |||
|  |             cursor: pointer; | |||
|  |             transition: all 0.3s; | |||
|  |             min-width: 85px; | |||
|  |             text-align: center; | |||
|  |         } | |||
|  | 
 | |||
|  |         .btn-primary { | |||
|  |             background-color: #013820; | |||
|  |             color: white; | |||
|  |             border-color: #013820; | |||
|  |         } | |||
|  | 
 | |||
|  |         .btn-primary:hover { | |||
|  |             background-color: #025530; | |||
|  |         } | |||
|  | 
 | |||
|  |         .btn-info { | |||
|  |             background-color: white; | |||
|  |             color: #013820; | |||
|  |             border-color: #dcdcdc; | |||
|  |         } | |||
|  | 
 | |||
|  |         .btn-info:hover { | |||
|  |             background-color: #f5f5f5; | |||
|  |         } | |||
|  | 
 | |||
|  |         .hidden { | |||
|  |             display: none; | |||
|  |         } | |||
|  | 
 | |||
|  |         .view-all { | |||
|  |             display: flex; | |||
|  |             justify-content: center; | |||
|  |             align-items: center; | |||
|  |             margin: 10px 0; | |||
|  |             cursor: pointer; | |||
|  |         } | |||
|  | 
 | |||
|  |         .view-all-text { | |||
|  |             font-size: 11px; | |||
|  |             color: #808080; | |||
|  |         } | |||
|  | 
 | |||
|  |         .view-all .arrow { | |||
|  |             width: 4px; | |||
|  |             height: 7px; | |||
|  |             margin-left: 5px; | |||
|  |         } | |||
|  | 
 | |||
|  |         .arrow.down { | |||
|  |             transform: rotate(90deg); | |||
|  |         } | |||
|  | 
 | |||
|  |         .arrow.up { | |||
|  |             transform: rotate(-90deg); | |||
|  |         } | |||
|  |     </style> | |||
|  | </head> | |||
|  | <body> | |||
|  |     <div class="header"> | |||
|  |         <span class="back-btn" onclick="goBack()">◀</span> | |||
|  |         <span class="title-text" id="pageTitle">订单详情</span> | |||
|  |         <span class="contact-icon" onclick="contactMerchant()">💬</span> | |||
|  |     </div> | |||
|  | 
 | |||
|  |     <div class="content"> | |||
|  |         <!-- 店铺和商品信息 --> | |||
|  |         <div class="card"> | |||
|  |             <div id="shopOrdersContainer"> | |||
|  |                 <!-- 动态生成店铺订单 --> | |||
|  |             </div> | |||
|  | 
 | |||
|  |             <div class="divider"></div> | |||
|  | 
 | |||
|  |             <!-- 价格明细 --> | |||
|  |             <div id="priceDetail" class="hidden"> | |||
|  |                 <!-- 动态生成价格明细 --> | |||
|  |             </div> | |||
|  | 
 | |||
|  |             <div class="total-price"> | |||
|  |                 <div class="label" onclick="togglePriceDetail()"> | |||
|  |                     实付款 | |||
|  |                     <span class="toggle-icon" id="toggleIcon">›</span> | |||
|  |                 </div> | |||
|  |                 <div class="value"> | |||
|  |                     ¥<span id="totalMoney">0.00</span> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  | 
 | |||
|  |             <div class="footer" style="position: relative; padding: 15px 0; margin-top: 15px;"> | |||
|  |                 <button class="btn btn-info" id="refundBtn" onclick="applyRefund()">申请售后</button> | |||
|  |                 <button class="btn btn-primary" onclick="contactMerchant()">联系商家</button> | |||
|  |                 <button class="btn btn-primary" id="callBtn" onclick="callMerchant()">致电商家</button> | |||
|  |             </div> | |||
|  |         </div> | |||
|  | 
 | |||
|  |         <!-- 配送信息 --> | |||
|  |         <div class="card"> | |||
|  |             <div class="section-title">配送信息</div> | |||
|  |             <div class="info-row"> | |||
|  |                 <div class="info-label">配送方式</div> | |||
|  |                 <div class="info-value" id="deliveryType">同城配送</div> | |||
|  |             </div> | |||
|  |             <div class="info-row" id="pickAddressRow" class="hidden"> | |||
|  |                 <div class="info-label">自提点地址</div> | |||
|  |                 <div class="info-value" id="pickAddress"></div> | |||
|  |             </div> | |||
|  |             <div class="info-row" id="expressCompanyRow" class="hidden"> | |||
|  |                 <div class="info-label">快递公司</div> | |||
|  |                 <div class="info-value" id="expressCompany"></div> | |||
|  |             </div> | |||
|  |             <div class="info-row" id="expressNoRow" class="hidden"> | |||
|  |                 <div class="info-label">快递单号</div> | |||
|  |                 <div class="info-value"> | |||
|  |                     <span id="expressNo"></span> | |||
|  |                     <span class="copy-btn" onclick="copyText('expressNo')">复制</span> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |             <div class="info-row"> | |||
|  |                 <div class="info-label">收货地址</div> | |||
|  |                 <div class="info-value" id="receiverInfo"> | |||
|  |                     <div id="receiverAddress"></div> | |||
|  |                     <div id="receiverContact"></div> | |||
|  |                 </div> | |||
|  |             </div> | |||
|  |         </div> | |||
|  | 
 | |||
|  |         <!-- 订单信息 --> | |||
|  |         <div class="card"> | |||
|  |             <div class="section-title">订单信息</div> | |||
|  |             <div class="info-row"> | |||
|  |                 <div class="info-label">订单备注</div> | |||
|  |                 <div class="info-value" id="orderRemark">无</div> | |||
|  |             </div> | |||
|  |             <div class="info-row" style="cursor: pointer;" onclick="copyText('unitOrderNo')"> | |||
|  |                 <div class="info-label">订单编号</div> | |||
|  |                 <div class="info-value" id="unitOrderNo"></div> | |||
|  |             </div> | |||
|  |             <div class="info-row"> | |||
|  |                 <div class="info-label">下单时间</div> | |||
|  |                 <div class="info-value" id="createTime"></div> | |||
|  |             </div> | |||
|  |             <div class="info-row" id="preSaleStageRow" class="hidden"> | |||
|  |                 <div class="info-label">预售状态</div> | |||
|  |                 <div class="info-value" id="preSaleStage"></div> | |||
|  |             </div> | |||
|  |         </div> | |||
|  |     </div> | |||
|  | 
 | |||
|  |     <script> | |||
|  |         // 从URL获取订单编号 | |||
|  |         function getQueryParam(name) { | |||
|  |             const urlParams = new URLSearchParams(window.location.search); | |||
|  |             return urlParams.get(name); | |||
|  |         } | |||
|  | 
 | |||
|  |         const unitOrderNo = getQueryParam('unitOrderNo'); | |||
|  | 
 | |||
|  |         // 模拟订单详情数据 | |||
|  |         const mockOrderDetail = { | |||
|  |             unitOrderNo: unitOrderNo || 'ORDER20250116001', | |||
|  |             unitType: 2, | |||
|  |             status: 1, | |||
|  |             refundStatus: 0, | |||
|  |             orderCategory: 1, | |||
|  |             marketName: '大妈集市', | |||
|  |             marketId: '1001', | |||
|  |             shopId: '2001', | |||
|  |             totalMoney: 88.50, | |||
|  |             productMoney: 80.00, | |||
|  |             packageMoney: 2.00, | |||
|  |             deliveryMoney: 8.00, | |||
|  |             couponMoney: 1.50, | |||
|  |             dispatchMoney: 0, | |||
|  |             dispatchMode: 0, | |||
|  |             deliveryType: 1, // 0:自提 1:同城配送 2:全国快递 | |||
|  |             pickAddress: '', | |||
|  |             expressCompany: '', | |||
|  |             expressNo: '', | |||
|  |             receiver: { | |||
|  |                 poi: '北京市朝阳区某某小区', | |||
|  |                 detail: '1号楼2单元302', | |||
|  |                 receiverName: '张三', | |||
|  |                 receiverPhone: '13800138000' | |||
|  |             }, | |||
|  |             remark: '请尽快配送', | |||
|  |             createTime: '2025-01-16 10:30:00', | |||
|  |             contactPhone: '400-123-4567', | |||
|  |             shopOrders: [ | |||
|  |                 { | |||
|  |                     shopName: '新鲜蔬菜店', | |||
|  |                     shopId: '2001', | |||
|  |                     products: [ | |||
|  |                         { | |||
|  |                             productId: '3001', | |||
|  |                             productName: '新鲜白菜', | |||
|  |                             productImg: '🥬', | |||
|  |                             productSpecName: '500g/份', | |||
|  |                             originPrice: 5.00, | |||
|  |                             finalPrice: 4.50, | |||
|  |                             productCount: 2 | |||
|  |                         }, | |||
|  |                         { | |||
|  |                             productId: '3002', | |||
|  |                             productName: '有机西红柿', | |||
|  |                             productImg: '🍅', | |||
|  |                             productSpecName: '1kg/份', | |||
|  |                             originPrice: 12.00, | |||
|  |                             finalPrice: 11.50, | |||
|  |                             productCount: 3 | |||
|  |                         }, | |||
|  |                         { | |||
|  |                             productId: '3003', | |||
|  |                             productName: '新鲜土豆', | |||
|  |                             productImg: '🥔', | |||
|  |                             productSpecName: '500g/份', | |||
|  |                             originPrice: 6.00, | |||
|  |                             finalPrice: 5.50, | |||
|  |                             productCount: 1 | |||
|  |                         }, | |||
|  |                         { | |||
|  |                             productId: '3004', | |||
|  |                             productName: '农家黄瓜', | |||
|  |                             productImg: '🥒', | |||
|  |                             productSpecName: '500g/份', | |||
|  |                             originPrice: 8.00, | |||
|  |                             finalPrice: 7.50, | |||
|  |                             productCount: 2 | |||
|  |                         } | |||
|  |                     ] | |||
|  |                 } | |||
|  |             ] | |||
|  |         }; | |||
|  | 
 | |||
|  |         let showAllProducts = false; | |||
|  |         let showPriceDetail = false; | |||
|  | 
 | |||
|  |         // 初始化页面 | |||
|  |         function init() { | |||
|  |             renderOrderDetail(mockOrderDetail); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 渲染订单详情 | |||
|  |         function renderOrderDetail(order) { | |||
|  |             // 设置标题 | |||
|  |             const title = getOrderTitle(order); | |||
|  |             document.getElementById('pageTitle').textContent = title; | |||
|  | 
 | |||
|  |             // 设置总价 | |||
|  |             document.getElementById('totalMoney').textContent = order.totalMoney.toFixed(2); | |||
|  | 
 | |||
|  |             // 渲染店铺订单 | |||
|  |             const shopOrdersContainer = document.getElementById('shopOrdersContainer'); | |||
|  |             shopOrdersContainer.innerHTML = order.shopOrders.map((shopOrder, shopIndex) => { | |||
|  |                 const productCount = shopOrder.products.length; | |||
|  |                 const displayProducts = showAllProducts ? shopOrder.products : shopOrder.products.slice(0, 3); | |||
|  |                 const remainingProducts = showAllProducts ? [] : shopOrder.products.slice(3); | |||
|  | 
 | |||
|  |                 return ` | |||
|  |                     <div class="shop-order"> | |||
|  |                         <div class="shop-header"> | |||
|  |                             <div class="shop-info"> | |||
|  |                                 <span class="shop-icon">🏪</span> | |||
|  |                                 <span class="shop-name">${shopOrder.shopName}</span> | |||
|  |                                 <span class="market-name">(${order.marketName})</span> | |||
|  |                             </div> | |||
|  |                             <span class="arrow-right">›</span> | |||
|  |                         </div> | |||
|  |                         <div class="product-list"> | |||
|  |                             ${displayProducts.map(product => ` | |||
|  |                                 <div class="product-item"> | |||
|  |                                     <div class="product-left"> | |||
|  |                                         <div class="product-img" onclick="toProduct('${product.productId}')">${product.productImg}</div> | |||
|  |                                         <div class="product-info"> | |||
|  |                                             <div class="product-name">${product.productName}</div> | |||
|  |                                             <div class="product-spec">规格:${product.productSpecName}</div> | |||
|  |                                             <div class="product-spec">单价:¥${product.originPrice.toFixed(2)}</div> | |||
|  |                                             <div class="product-spec">数量:${product.productCount}</div> | |||
|  |                                         </div> | |||
|  |                                     </div> | |||
|  |                                     <div class="product-right"> | |||
|  |                                         <span class="label">实付</span> | |||
|  |                                         <span class="price">¥${product.finalPrice.toFixed(2)}</span> | |||
|  |                                     </div> | |||
|  |                                 </div> | |||
|  |                             `).join('')} | |||
|  |                             ${productCount > 3 && !showAllProducts ? ` | |||
|  |                                 <div class="view-all" onclick="toggleProducts()"> | |||
|  |                                     <span class="view-all-text">查看全部</span> | |||
|  |                                     <span class="arrow down">›</span> | |||
|  |                                 </div> | |||
|  |                             ` : ''} | |||
|  |                             ${remainingProducts.length > 0 && showAllProducts ? ` | |||
|  |                                 ${remainingProducts.map(product => ` | |||
|  |                                     <div class="product-item"> | |||
|  |                                         <div class="product-left"> | |||
|  |                                             <div class="product-img" onclick="toProduct('${product.productId}')">${product.productImg}</div> | |||
|  |                                             <div class="product-info"> | |||
|  |                                                 <div class="product-name">${product.productName}</div> | |||
|  |                                                 <div class="product-spec">规格:${product.productSpecName}</div> | |||
|  |                                                 <div class="product-spec">单价:¥${product.originPrice.toFixed(2)}</div> | |||
|  |                                                 <div class="product-spec">数量:${product.productCount}</div> | |||
|  |                                             </div> | |||
|  |                                         </div> | |||
|  |                                         <div class="product-right"> | |||
|  |                                             <span class="label">实付</span> | |||
|  |                                             <span class="price">¥${product.finalPrice.toFixed(2)}</span> | |||
|  |                                         </div> | |||
|  |                                     </div> | |||
|  |                                 `).join('')} | |||
|  |                             ` : ''} | |||
|  |                             ${showAllProducts && productCount > 3 ? ` | |||
|  |                                 <div class="view-all" onclick="toggleProducts()"> | |||
|  |                                     <span class="view-all-text">收起全部</span> | |||
|  |                                     <span class="arrow up">›</span> | |||
|  |                                 </div> | |||
|  |                             ` : ''} | |||
|  |                         </div> | |||
|  |                     </div> | |||
|  |                 `; | |||
|  |             }).join(''); | |||
|  | 
 | |||
|  |             // 渲染价格明细 | |||
|  |             const priceDetailHtml = ` | |||
|  |                 ${order.orderCategory === 1 ? ` | |||
|  |                     <div class="price-row"> | |||
|  |                         <div class="price-label">商品金额</div> | |||
|  |                         <div class="price-value">¥${order.productMoney.toFixed(2)}</div> | |||
|  |                     </div> | |||
|  |                 ` : ''} | |||
|  |                 <div class="price-row"> | |||
|  |                     <div class="price-label">包装费</div> | |||
|  |                     <div class="price-value">¥${order.packageMoney.toFixed(2)}</div> | |||
|  |                 </div> | |||
|  |                 ${order.dispatchMode === 1 ? ` | |||
|  |                     <div class="price-row"> | |||
|  |                         <div class="price-label">调度费(多店铺)</div> | |||
|  |                         <div class="price-value">¥${order.dispatchMoney.toFixed(2)}</div> | |||
|  |                     </div> | |||
|  |                 ` : ''} | |||
|  |                 <div class="price-row"> | |||
|  |                     <div class="price-label">配送费</div> | |||
|  |                     <div class="price-value">¥${order.deliveryMoney.toFixed(2)}</div> | |||
|  |                 </div> | |||
|  |                 <div class="price-row"> | |||
|  |                     <div class="price-label">优惠券</div> | |||
|  |                     <div class="price-value discount">-¥${order.couponMoney.toFixed(2)}</div> | |||
|  |                 </div> | |||
|  |             `; | |||
|  |             document.getElementById('priceDetail').innerHTML = priceDetailHtml; | |||
|  | 
 | |||
|  |             // 配送信息 | |||
|  |             const deliveryTypeText = order.deliveryType === 0 ? '自提' : | |||
|  |                                     order.deliveryType === 1 ? '同城配送' : '全国快递'; | |||
|  |             document.getElementById('deliveryType').textContent = deliveryTypeText; | |||
|  | 
 | |||
|  |             if (order.deliveryType === 0 && order.pickAddress) { | |||
|  |                 document.getElementById('pickAddressRow').classList.remove('hidden'); | |||
|  |                 document.getElementById('pickAddress').textContent = order.pickAddress; | |||
|  |             } | |||
|  | 
 | |||
|  |             if (order.deliveryType === 2) { | |||
|  |                 if (order.expressCompany) { | |||
|  |                     document.getElementById('expressCompanyRow').classList.remove('hidden'); | |||
|  |                     document.getElementById('expressCompany').textContent = order.expressCompany; | |||
|  |                 } | |||
|  |                 if (order.expressNo) { | |||
|  |                     document.getElementById('expressNoRow').classList.remove('hidden'); | |||
|  |                     document.getElementById('expressNo').textContent = order.expressNo; | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             document.getElementById('receiverAddress').textContent = | |||
|  |                 order.receiver.poi + order.receiver.detail; | |||
|  |             document.getElementById('receiverContact').textContent = | |||
|  |                 order.receiver.receiverName + ' ' + order.receiver.receiverPhone; | |||
|  | 
 | |||
|  |             // 订单信息 | |||
|  |             document.getElementById('orderRemark').textContent = order.remark || '无'; | |||
|  |             document.getElementById('unitOrderNo').textContent = order.unitOrderNo; | |||
|  |             document.getElementById('createTime').textContent = order.createTime; | |||
|  | 
 | |||
|  |             // 显示/隐藏申请售后按钮 | |||
|  |             if (order.refundStatus === 0 && order.status < 5) { | |||
|  |                 document.getElementById('refundBtn').classList.remove('hidden'); | |||
|  |             } else { | |||
|  |                 document.getElementById('refundBtn').classList.add('hidden'); | |||
|  |             } | |||
|  | 
 | |||
|  |             // 显示/隐藏致电商家按钮 | |||
|  |             if (!order.contactPhone) { | |||
|  |                 document.getElementById('callBtn').classList.add('hidden'); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         // 获取订单标题 | |||
|  |         function getOrderTitle(order) { | |||
|  |             const { status, refundStatus } = order; | |||
|  | 
 | |||
|  |             if (refundStatus === -2) { | |||
|  |                 return '申请退款中'; | |||
|  |             } | |||
|  | 
 | |||
|  |             switch (status) { | |||
|  |                 case 0: return '待付款'; | |||
|  |                 case 1: return '待发货'; | |||
|  |                 case 2: return '已取货'; | |||
|  |                 case 3: return '待收货'; | |||
|  |                 case 5: return '已完成'; | |||
|  |                 case 6: return '已取消'; | |||
|  |                 case 7: return '退款中'; | |||
|  |                 case 8: return '已退款'; | |||
|  |                 default: return '订单详情'; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         // 切换商品显示 | |||
|  |         function toggleProducts() { | |||
|  |             showAllProducts = !showAllProducts; | |||
|  |             renderOrderDetail(mockOrderDetail); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 切换价格明细 | |||
|  |         function togglePriceDetail() { | |||
|  |             showPriceDetail = !showPriceDetail; | |||
|  |             const priceDetail = document.getElementById('priceDetail'); | |||
|  |             const toggleIcon = document.getElementById('toggleIcon'); | |||
|  | 
 | |||
|  |             if (showPriceDetail) { | |||
|  |                 priceDetail.classList.remove('hidden'); | |||
|  |                 toggleIcon.classList.add('up'); | |||
|  |             } else { | |||
|  |                 priceDetail.classList.add('hidden'); | |||
|  |                 toggleIcon.classList.remove('up'); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         // 返回上一页 | |||
|  |         function goBack() { | |||
|  |             window.history.back(); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 跳转到商品详情 | |||
|  |         function toProduct(productId) { | |||
|  |             console.log('跳转到商品详情:', productId); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 联系商家 | |||
|  |         function contactMerchant() { | |||
|  |             console.log('联系商家'); | |||
|  |             alert('打开聊天窗口'); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 致电商家 | |||
|  |         function callMerchant() { | |||
|  |             if (mockOrderDetail.contactPhone) { | |||
|  |                 window.location.href = `tel:${mockOrderDetail.contactPhone}`; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         // 申请售后 | |||
|  |         function applyRefund() { | |||
|  |             console.log('申请售后'); | |||
|  |             window.location.href = `refund-standalone.html?unitOrderNo=${mockOrderDetail.unitOrderNo}`; | |||
|  |         } | |||
|  | 
 | |||
|  |         // 复制文本 | |||
|  |         function copyText(elementId) { | |||
|  |             const text = document.getElementById(elementId).textContent; | |||
|  |             navigator.clipboard.writeText(text).then(() => { | |||
|  |                 alert('复制成功'); | |||
|  |             }).catch(() => { | |||
|  |                 alert('复制失败'); | |||
|  |             }); | |||
|  |         } | |||
|  | 
 | |||
|  |         // 页面加载完成后初始化 | |||
|  |         document.addEventListener('DOMContentLoaded', init); | |||
|  |     </script> | |||
|  | </body> | |||
|  | </html> |