Files
medical-mall/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/orders.kt.map

1 line
85 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"version":3,"sources":["pages/mall/consumer/orders.uvue","pages/main/index.uvue","pages/user/login.uvue","pages/main/profile.uvue","pages/main/cart.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["<!-- pages/mall/consumer/orders.uvue -->\r\n<template>\r\n <view class=\"orders-page\">\r\n <!-- 顶部标题栏 -->\r\n <view class=\"orders-header\" :style=\"{ paddingTop: statusBarHeight + 'px' }\">\r\n <view class=\"header-search full-width\">\r\n <input \r\n class=\"search-input\" \r\n type=\"text\" \r\n placeholder=\"搜索订单号或商品名称\"\r\n :value=\"searchKeyword\"\r\n @input=\"onSearchInput\"\r\n @confirm=\"onSearchConfirm\"\r\n />\r\n <text v-if=\"searchKeyword\" class=\"search-clear\" @click=\"clearSearch\">×</text>\r\n <text v-else class=\"search-icon\">🔍</text>\r\n </view>\r\n </view>\r\n \r\n <!-- 订单状态筛选 -->\r\n <view class=\"order-tabs-fixed-container\">\r\n <view \r\n :class=\"['tab-item-fixed', { active: activeTab === 'all' }]\"\r\n @click=\"switchTab('all')\"\r\n >\r\n <text class=\"tab-name\">全部</text>\r\n <view v-if=\"activeTab === 'all'\" class=\"active-indicator\"></view>\r\n </view>\r\n <scroll-view scroll-x=\"true\" class=\"tab-scroll-mobile\" :show-scrollbar=\"false\" :scroll-with-animation=\"true\">\r\n <view class=\"tab-container-mobile\">\r\n <view \r\n v-for=\"tab in orderTabsMobile\" \r\n :key=\"tab.id\"\r\n :class=\"['tab-item-mobile', { active: activeTab === tab.id }]\"\r\n @click=\"switchTab(tab.id)\"\r\n >\r\n <text class=\"tab-name\">{{ tab.name }}</text>\r\n <text v-if=\"tab.count > 0\" class=\"tab-count\">{{ tab.count }}</text>\r\n <view v-if=\"activeTab === tab.id\" class=\"active-indicator\"></view>\r\n </view>\r\n </view>\r\n </scroll-view>\r\n </view>\r\n \r\n <!-- 订单列表 -->\r\n <scroll-view \r\n direction=\"vertical\"\r\n class=\"orders-content\"\r\n refresher-enabled\r\n :refresher-triggered=\"refreshing\"\r\n @refresherrefresh=\"onRefresh\"\r\n @scrolltolower=\"loadMore\"\r\n >\r\n <!-- 空状态 -->\r\n <view v-if=\"!loading && orders.length === 0\" class=\"empty-orders\">\r\n <text class=\"empty-icon\">📦</text>\r\n <text class=\"empty-title\">暂无订单</text>\r\n <text class=\"empty-desc\">去逛逛,发现心仪的商品</text>\r\n <button class=\"go-shopping-btn\" @click=\"goShopping\">去逛逛</button>\r\n </view>\r\n \r\n <!-- 订单列表 -->\r\n <view v-else class=\"order-list\">\r\n <view \r\n v-for=\"order in orders\" \r\n :key=\"order.id\"\r\n class=\"order-card\"\r\n @click=\"viewOrderDetail(order.id)\"\r\n >\r\n <!-- 订单头部:显示店铺名称 -->\r\n <view class=\"order-card-header\">\r\n <view class=\"shop-info\">\r\n <text class=\"shop-icon\">🏪</text>\r\n <text class=\"shop-name\">{{ order.shop_name != null && order.shop_name != '' ? order.shop_name : '自营店铺' }}</text>\r\n <text class=\"arrow-right\"></text>\r\n </view>\r\n <view class=\"status-row\">\r\n <text :class=\"['order-status', getStatusClass(order.status)]\">\r\n {{ getStatusText(order.status) }}\r\n </text>\r\n <text class=\"more-btn\" @click.stop=\"showOrderMenu(order)\">⋯</text>\r\n </view>\r\n </view>\r\n \r\n <!-- 订单商品 -->\r\n <view class=\"order-products\">\r\n <view \r\n v-for=\"product in order.products\" \r\n :key=\"product.id\"\r\n class=\"order-product\"\r\n >\r\n <image \r\n class=\"product-image\" \r\n :src=\"product.image\" \r\n mode=\"aspectFill\"\r\n @click.stop=\"navigateToProduct(product)\"\r\n />\r\n <view class=\"product-info\">\r\n <view class=\"product-top-info\">\r\n <text class=\"product-name\">{{ product.name }}</text>\r\n <text class=\"product-spec\">{{ product.spec }}</text>\r\n </view>\r\n <view class=\"product-footer\">\r\n <text class=\"product-price\">¥{{ product.price }}</text>\r\n <text class=\"product-quantity\">x{{ product.quantity }}</text>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n \r\n <!-- 订单汇总信息 -->\r\n <view class=\"order-summary\">\r\n <text class=\"order-time\">{{ formatDate(order.create_time) }}</text>\r\n <view class=\"summary-right\">\r\n <text class=\"summary-label\">共{{ order.products.length }}件商品 实付:</text>\r\n <text class=\"summary-price\">¥{{ order.total_amount }}</text>\r\n </view>\r\n </view>\r\n \r\n <!-- 分享免单入口 (已付款订单显示: 待发货、待收货、已完成,且商家开启了分享免单) -->\r\n <view v-if=\"order.status >= 2 && order.status <= 4 && isShareFreeEnabled(order.merchant_id)\" class=\"share-free-row\" @click.stop=\"shareForFree(order)\">\r\n <text class=\"share-free-icon\">🎁</text>\r\n <text class=\"share-free-text\">分享免单</text>\r\n <text class=\"share-free-tip\">分享给好友,{{ getRequiredCount(order.merchant_id) }}人购买即可免单</text>\r\n <text class=\"share-free-arrow\"></text>\r\n </view>\r\n \r\n <!-- 订单操作 -->\r\n <view class=\"order-actions\" @click.stop=\"\">\r\n <view v-if=\"order.status === 1\" class=\"action-buttons\">\r\n <button class=\"action-btn cancel\" @click=\"cancelOrder(order.id)\">取消订单</button>\r\n <button class=\"action-btn pay\" @click=\"payOrder(order.id)\">立即支付</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 2\" class=\"action-buttons\">\r\n <button class=\"action-btn remind\" @click.stop=\"remindShipping(order.id)\">提醒发货</button>\r\n <button class=\"action-btn refund\" @click.stop=\"onApplyRefund(order)\">申请售后</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 3\" class=\"action-buttons\">\r\n <button class=\"action-btn view\" @click.stop=\"viewLogistics(order.id)\">查看物流</button>\r\n <button class=\"action-btn confirm\" @click.stop=\"confirmReceipt(order.id)\">确认收货</button>\r\n <button class=\"action-btn refund\" @click.stop=\"onApplyRefund(order)\">申请售后</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 4\" class=\"action-buttons\">\r\n <button class=\"action-btn review\" @click.stop=\"goReview(order)\">评价</button>\r\n <button class=\"action-btn refund\" @click.stop=\"onApplyRefund(order)\">申请售后</button>\r\n <button class=\"action-btn repurchase\" @click.stop=\"repurchase(order)\">再次购买</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 5\" class=\"action-buttons\">\r\n <button class=\"action-btn view\" @click.stop=\"viewOrderDetail(order.id)\">查看详情</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 6\" class=\"action-buttons\">\r\n <button class=\"action-btn view\" @click.stop=\"viewOrderDetail(order.id)\">查看详情</button>\r\n <button class=\"action-btn cancel\" @click.stop=\"cancelRefund(order.id)\">取消退款</button>\r\n <button class=\"action-btn refund\" @click.stop=\"viewRefundProgress(order.id)\">退款进度</button>\r\n </view>\r\n \r\n <view v-if=\"order.status === 7\" class=\"action-buttons\">\r\n <button class=\"action-btn view\" @click=\"viewOrderDetail(order.id)\">查看详情</button>\r\n <button class=\"action-btn repurchase\" @click=\"repurchase(order)\">再次购买</button>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n \r\n <!-- 加载更多 -->\r\n <view v-if=\"loadingMore\" class=\"loading-more\">\r\n <view class=\"loading-spinner\"></view>\r\n <text>加载中...</text>\r\n </view>\r\n \r\n <view v-if=\"!hasMore && orders.length > 0\" class=\"no-more\">\r\n <text>没有更多订单了</text>\r\n </view>\r\n \r\n <!-- 安全区域 -->\r\n <view class=\"safe-area\"></view>\r\n </scroll-view>\r\n \r\n <!-- 底部导航 -->\r\n <view class=\"tabbar-placeholder\"></view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, reactive, onMounted, computed } from 'vue'\r\nimport { onShow, onLoad, onBackPress } from '@dcloudio/uni-app'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\n// 定义标签页类型\r\ntype OrderTabItem = {\r\n id: string,\r\n name: string,\r\n count: number\r\n}\r\n\r\n// 定义订单产品类型\r\ntype OrderProduct = {\r\n id: string,\r\n name: string,\r\n price: number,\r\n image: string,\r\n spec: string,\r\n quantity: number\r\n}\r\n\r\n// 定义订单类型\r\ntype OrderItem = {\r\n id: string,\r\n order_no: string,\r\n status: number,\r\n create_time: string,\r\n product_amount: number,\r\n shipping_fee: number,\r\n total_amount: number,\r\n merchant_id: string,\r\n shop_name: string,\r\n products: OrderProduct[]\r\n}\r\n\r\n// 响应式数据\r\nconst orders = ref<OrderItem[]>([])\r\nconst allOrdersList = ref<OrderItem[]>([]) // Store all fetched orders for client-side filtering\r\nconst loading = ref<boolean>(false)\r\nconst loadingMore = ref<boolean>(false)\r\nconst hasMore = ref<boolean>(true)\r\nconst refreshing = ref<boolean>(false)\r\nconst page = ref<number>(1)\r\nconst activeTab = ref<string>('all')\r\nconst statusBarHeight = ref<number>(0)\r\nconst searchKeyword = ref<string>('')\r\n\r\n// 商家推销配置缓存\r\nconst merchantShareFreeEnabled = ref<UTSJSONObject>(new UTSJSONObject())\r\nconst merchantRequiredCount = ref<UTSJSONObject>(new UTSJSONObject())\r\n\r\n// 订单标签页 - 使用 ref 以便整体替换\r\nconst orderTabs = ref<OrderTabItem[]>([\r\n { id: 'all', name: '全部', count: 0 },\r\n { id: 'pending', name: '待付款', count: 0 },\r\n { id: 'shipping', name: '待发货', count: 0 },\r\n { id: 'delivering', name: '待收货', count: 0 },\r\n { id: 'completed', name: '已完成', count: 0 },\r\n { id: 'aftersale', name: '售后', count: 0 },\r\n { id: 'cancelled', name: '已取消', count: 0 }\r\n])\r\n\r\n// 模拟状态筛选(除去\"全部\"后的其余标签)\r\nconst orderTabsMobile = computed((): OrderTabItem[] => {\r\n return orderTabs.value.filter((tab: OrderTabItem) => tab.id !== 'all')\r\n})\r\n\r\n\r\n// 辅助函数:获取状态码\r\nconst getStatusByTab = (tabId: string): number => {\r\n if (tabId == 'pending') return 1\r\n if (tabId == 'shipping') return 2\r\n if (tabId == 'delivering') return 3\r\n if (tabId == 'completed') return 4\r\n if (tabId == 'cancelled') return 5\r\n if (tabId == 'aftersale') return 6\r\n return 0\r\n}\r\n\r\n// 格式化规格对象为友好的文本 - 必须在 parseSpecText 之前定义\r\nfunction formatSpecObj(obj: any): string {\r\n if (obj == null) return ''\r\n if (typeof obj !== 'object') {\r\n // 非对象类型直接返回字符串形式\r\n if (typeof obj === 'string') return obj\r\n if (typeof obj === 'number') return obj.toString()\r\n return ''\r\n }\r\n \r\n try {\r\n const objStr = JSON.stringify(obj)\r\n const objParsed = JSON.parse(objStr)\r\n if (objParsed == null) return ''\r\n \r\n const specObj = objParsed as UTSJSONObject\r\n \r\n // 使用 JSON.stringify 获取所有键\r\n const specObjStr = JSON.stringify(specObj)\r\n const specObjForKeys = JSON.parse(specObjStr) as UTSJSONObject\r\n \r\n // 手动提取键值对\r\n const parts: string[] = []\r\n \r\n // 尝试获取已知字段\r\n const colorVal = specObjForKeys.getString('Color')\r\n if (colorVal != null && colorVal != '') {\r\n parts.push('Color: ' + colorVal)\r\n }\r\n \r\n const sizeVal = specObjForKeys.getString('Size')\r\n if (sizeVal != null && sizeVal != '') {\r\n parts.push('Size: ' + sizeVal)\r\n }\r\n \r\n const defaultVal = specObjForKeys.getString('默认')\r\n if (defaultVal != null && defaultVal != '') {\r\n parts.push('默认: ' + defaultVal)\r\n }\r\n \r\n // 如果没有匹配到已知字段,尝试直接显示 JSON\r\n if (parts.length === 0) {\r\n // 尝试遍历对象\r\n const objAny = specObjForKeys as any\r\n if (objAny != null) {\r\n return specObjStr.replace(/[{}\"]/g, '').replace(/:/g, ': ').replace(/,/g, ' | ')\r\n }\r\n }\r\n \r\n return parts.join(' | ')\r\n } catch (e) {\r\n return ''\r\n }\r\n}\r\n\r\n// 辅助函数:解析规格文本\r\nfunction parseSpecText(specs: any): string {\r\n if (specs == null) return ''\r\n if (typeof specs === 'string') {\r\n // 如果是 JSON 字符串,尝试解析\r\n if (specs.startsWith('{') || specs.startsWith('[')) {\r\n try {\r\n const parsed = JSON.parse(specs)\r\n if (parsed == null) return specs\r\n return formatSpecObj(parsed)\r\n } catch (e) {\r\n return specs\r\n }\r\n }\r\n return specs\r\n }\r\n // 对于对象类型,格式化显示\r\n return formatSpecObj(specs)\r\n}\r\n\r\n// 辅助函数:更新标签计数\r\nconst updateTabsCounts = (allOrders: OrderItem[]) => {\r\n const countAll = allOrders.length\r\n const countPending = allOrders.filter((o: OrderItem) => o.status === 1).length\r\n const countShipping = allOrders.filter((o: OrderItem) => o.status === 2).length\r\n const countDelivering = allOrders.filter((o: OrderItem) => o.status === 3).length\r\n const countCompleted = allOrders.filter((o: OrderItem) => o.status === 4).length\r\n const countCancelled = allOrders.filter((o: OrderItem) => o.status === 5).length\r\n const countAftersale = allOrders.filter((o: OrderItem) => o.status === 6 || o.status === 7).length\r\n \r\n orderTabs.value[0].count = countAll\r\n orderTabs.value[1].count = countPending\r\n orderTabs.value[2].count = countShipping\r\n orderTabs.value[3].count = countDelivering\r\n orderTabs.value[4].count = countCompleted\r\n orderTabs.value[5].count = countAftersale\r\n orderTabs.value[6].count = countCancelled\r\n}\r\n\r\n// 辅助函数:按标签筛选订单\r\nconst filterOrdersByTab = () => {\r\n if (activeTab.value === 'all') {\r\n orders.value = allOrdersList.value\r\n } else if (activeTab.value === 'aftersale') {\r\n orders.value = allOrdersList.value.filter((o: OrderItem) => {\r\n return o.status === 6 || o.status === 7\r\n })\r\n } else {\r\n const targetStatus = getStatusByTab(activeTab.value)\r\n orders.value = allOrdersList.value.filter((o: OrderItem) => {\r\n return o.status === targetStatus\r\n })\r\n }\r\n}\r\n\r\n// 检查商家是否开启分享免单\r\nconst isShareFreeEnabled = (merchantId: string): boolean => {\r\n const val = merchantShareFreeEnabled.value.get(merchantId)\r\n return val === true\r\n}\r\n\r\n// 获取商家要求的购买人数\r\nconst getRequiredCount = (merchantId: string): number => {\r\n const val = merchantRequiredCount.value.get(merchantId)\r\n if (val != null && typeof val === 'number') {\r\n return val as number\r\n }\r\n return 4\r\n}\r\n\r\n// 加载商家推销配置\r\nconst loadMerchantPromotionConfigs = async (orderList: OrderItem[]) => {\r\n // 收集所有唯一的商家ID\r\n const merchantIds = new Set<string>()\r\n for (let i = 0; i < orderList.length; i++) {\r\n const merchantId = orderList[i].merchant_id\r\n const existingVal = merchantShareFreeEnabled.value.get(merchantId)\r\n if (merchantId != null && merchantId !== '' && existingVal == null) {\r\n merchantIds.add(merchantId)\r\n }\r\n }\r\n \r\n // 批量加载商家配置\r\n const merchantIdArray = Array.from(merchantIds)\r\n for (let i = 0; i < merchantIdArray.length; i++) {\r\n const merchantIdRaw = merchantIdArray[i]\r\n const merchantId = merchantIdRaw as string\r\n try {\r\n const config = await supabaseService.getMerchantPromotionConfig(merchantId)\r\n const promotionEnabled = config.get('promotion_enabled')\r\n const shareFreeEnabled = config.get('share_free_enabled')\r\n const requiredCount = config.get('required_count')\r\n \r\n const isEnabled: any = \r\n (promotionEnabled === true || promotionEnabled === 'true') && \r\n (shareFreeEnabled === true || shareFreeEnabled === 'true')\r\n merchantShareFreeEnabled.value.set(merchantId, isEnabled)\r\n \r\n if (requiredCount != null) {\r\n merchantRequiredCount.value.set(merchantId, requiredCount)\r\n } else {\r\n merchantRequiredCount.value.set(merchantId, 4 as any)\r\n }\r\n } catch (e) {\r\n console.error('加载商家推销配置失败:', merchantId, e)\r\n merchantShareFreeEnabled.value.set(merchantId, false as any)\r\n merchantRequiredCount.value.set(merchantId, 4 as any)\r\n }\r\n }\r\n}\r\n\r\n// 加载订单数据\r\nconst loadOrders = async () => {\r\n loading.value = true\r\n \r\n try {\r\n // Fetch all orders from Supabase (status=0)\r\n const fetchedOrders = await supabaseService.getOrders(0)\r\n console.log('[loadOrders] 获取到订单数量:', fetchedOrders.length)\r\n \r\n // Map to View Model\r\n const mappedOrders: OrderItem[] = []\r\n for (let i = 0; i < fetchedOrders.length; i++) {\r\n const order = fetchedOrders[i]\r\n // 使用 JSON 序列化转换\r\n const orderStr = JSON.stringify(order)\r\n const orderParsed = JSON.parse(orderStr)\r\n if (orderParsed == null) continue\r\n const orderObj = orderParsed as UTSJSONObject\r\n \r\n const itemsRaw = orderObj.get('ml_order_items')\r\n const productsList: OrderProduct[] = []\r\n \r\n console.log('[loadOrders] 订单商品数据:', itemsRaw)\r\n \r\n if (itemsRaw != null) {\r\n // 先检查是否为数组\r\n if (Array.isArray(itemsRaw)) {\r\n const items = itemsRaw as any[]\r\n console.log('[loadOrders] 商品数量:', items.length)\r\n for (let j = 0; j < items.length; j++) {\r\n const item = items[j]\r\n const itemStr = JSON.stringify(item)\r\n const itemParsed = JSON.parse(itemStr)\r\n if (itemParsed == null) continue\r\n const itemObj = itemParsed as UTSJSONObject\r\n \r\n const specRaw = itemObj.get('specifications')\r\n const specText = specRaw != null ? parseSpecText(specRaw) : ''\r\n \r\n const productId = itemObj.getString('product_id')\r\n const productName = itemObj.getString('product_name')\r\n const price = itemObj.getNumber('price')\r\n const imageUrl = itemObj.getString('image_url')\r\n const quantity = itemObj.getNumber('quantity')\r\n \r\n console.log('[loadOrders] 商品:', productName, '图片:', imageUrl, '规格:', specText)\r\n \r\n const productItem: OrderProduct = {\r\n id: productId ?? '',\r\n name: productName ?? '未知商品',\r\n price: price ?? 0,\r\n image: imageUrl ?? '/static/default-product.png',\r\n spec: specText,\r\n quantity: quantity ?? 1\r\n }\r\n productsList.push(productItem)\r\n }\r\n }\r\n }\r\n \r\n const orderId = orderObj.getString('id')\r\n const orderNo = orderObj.getString('order_no')\r\n const orderStatus = orderObj.getNumber('order_status')\r\n const createdAt = orderObj.getString('created_at')\r\n const productAmount = orderObj.getNumber('product_amount')\r\n const shippingFee = orderObj.getNumber('shipping_fee')\r\n const totalAmount = orderObj.getNumber('total_amount')\r\n const paidAmount = orderObj.getNumber('paid_amount')\r\n const merchantId = orderObj.getString('merchant_id')\r\n \r\n // 从关联查询的 ml_shops 表获取店铺名称\r\n let shopName = '自营店铺'\r\n const shopsRaw = orderObj.get('ml_shops')\r\n if (shopsRaw != null) {\r\n const shopStr = JSON.stringify(shopsRaw)\r\n const shopParsed = JSON.parse(shopStr)\r\n if (shopParsed != null) {\r\n const shopObj = shopParsed as UTSJSONObject\r\n const shopNameFromDb = shopObj.getString('shop_name')\r\n if (shopNameFromDb != null && shopNameFromDb != '') {\r\n shopName = shopNameFromDb\r\n }\r\n }\r\n } else if (merchantId != null && merchantId != '') {\r\n shopName = '商家店铺'\r\n }\r\n \r\n console.log('[loadOrders] 订单号:', orderNo, '店铺:', shopName, '商品数:', productsList.length)\r\n \r\n // 如果没有商品数据,添加一个占位商品\r\n if (productsList.length === 0) {\r\n const placeholderProduct: OrderProduct = {\r\n id: 'placeholder',\r\n name: '订单商品',\r\n price: totalAmount ?? paidAmount ?? 0,\r\n image: '/static/default-product.png',\r\n spec: '',\r\n quantity: 1\r\n }\r\n productsList.push(placeholderProduct)\r\n }\r\n \r\n const mappedOrder: OrderItem = {\r\n id: orderId ?? '',\r\n order_no: orderNo ?? '',\r\n status: orderStatus ?? 1,\r\n create_time: createdAt ?? '',\r\n product_amount: productAmount ?? 0,\r\n shipping_fee: shippingFee ?? 0,\r\n total_amount: totalAmount ?? paidAmount ?? 0,\r\n merchant_id: merchantId ?? '',\r\n shop_name: shopName,\r\n products: productsList\r\n }\r\n mappedOrders.push(mappedOrder)\r\n }\r\n\r\n // Sort by created_at desc - 直接使用 OrderItem 类型访问属性\r\n mappedOrders.sort((a: OrderItem, b: OrderItem) => {\r\n const timeA = new Date(a.create_time).getTime()\r\n const timeB = new Date(b.create_time).getTime()\r\n return timeB - timeA\r\n })\r\n\r\n allOrdersList.value = mappedOrders\r\n \r\n // Update tab counts\r\n updateTabsCounts(mappedOrders)\r\n \r\n // Apply current tab filter\r\n filterOrdersByTab()\r\n \r\n // 加载商家推销配置\r\n loadMerchantPromotionConfigs(mappedOrders)\r\n \r\n } catch (err) {\r\n console.error('加载订单异常:', err)\r\n uni.showToast({ title: '加载订单失败', icon: 'none' })\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\n// 生命周期\r\nonLoad((options) => {\r\n // 初始化状态栏高度\r\n const systemInfo = uni.getSystemInfoSync()\r\n statusBarHeight.value = systemInfo.statusBarHeight ?? 0\r\n \r\n if (options == null) return\r\n const statusVal = options['status']\r\n if (statusVal != null) {\r\n const status = statusVal as string\r\n if (['all', 'pending', 'shipping', 'delivering', 'completed', 'aftersale', 'cancelled'].includes(status)) {\r\n activeTab.value = status\r\n }\r\n }\r\n const typeVal = options['type']\r\n if (typeVal != null) {\r\n const type = typeVal as string\r\n if (type === 'pending') activeTab.value = 'pending'\r\n else if (type === 'shipped') activeTab.value = 'delivering' // 映射到待收货\r\n else if (type === 'review') activeTab.value = 'completed' // 映射到已完成\r\n else if (type === 'refund') activeTab.value = 'aftersale' // 退款/售后跳转到售后标签页\r\n }\r\n})\r\n\r\nonShow(() => {\r\n loadOrders()\r\n})\r\n\r\nconst formatDate = (isoString: string): string => {\r\n if (isoString == '') return ''\r\n const date = new Date(isoString)\r\n return `${date.getFullYear()}-${(date.getMonth()+1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`\r\n}\r\n\r\n// 辅助函数:获取当前订单数据(必须在 performSearch 之前定义)\r\nfunction getCurrentOrderData(): OrderItem[] {\r\n return allOrdersList.value\r\n}\r\n\r\n// 搜索执行函数(必须在 onSearchInput 等之前定义)\r\nconst performSearch = () => {\r\n const keyword = searchKeyword.value.trim().toLowerCase()\r\n if (keyword == '') {\r\n loadOrders()\r\n return\r\n }\r\n \r\n // 在当前订单数据中搜索\r\n const allOrders = getCurrentOrderData()\r\n const filtered = allOrders.filter((order: any) => {\r\n const orderObj = order as Record<string, any>\r\n // 搜索订单号\r\n const orderNo = orderObj['order_no'] as string\r\n if (orderNo != null && orderNo.toLowerCase().includes(keyword)) {\r\n return true\r\n }\r\n \r\n // 搜索商品名称\r\n const products = orderObj['products']\r\n if (products != null && Array.isArray(products)) {\r\n return products.some((product: any) => {\r\n const productObj = product as Record<string, any>\r\n const name = productObj['name'] as string\r\n return name != null && name.toLowerCase().includes(keyword)\r\n })\r\n }\r\n \r\n return false\r\n })\r\n \r\n orders.value = filtered\r\n}\r\n\r\n// 搜索相关函数\r\nconst onSearchInput = (e: any) => {\r\n const eObj = e as Record<string, any>\r\n const detail = eObj['detail'] as Record<string, any>\r\n searchKeyword.value = detail['value'] as string\r\n performSearch()\r\n}\r\n\r\nconst onSearchConfirm = () => {\r\n performSearch()\r\n}\r\n\r\nconst clearSearch = () => {\r\n searchKeyword.value = ''\r\n performSearch()\r\n}\r\n\r\nconst formatSpec = (specs: any): string => {\r\n if (specs == null) return ''\r\n if (typeof specs === 'string') return specs\r\n if (typeof specs === 'object') {\r\n return JSON.stringify(specs)\r\n }\r\n return ''\r\n}\r\n\r\n// 切换标签\r\nconst switchTab = (tabId: string) => {\r\n activeTab.value = tabId\r\n filterOrdersByTab()\r\n}\r\n\r\n// 获取状态文本\r\nconst getStatusText = (status: number): string => {\r\n if (status == 1) return '待付款'\r\n if (status == 2) return '待发货'\r\n if (status == 3) return '待收货'\r\n if (status == 4) return '已完成'\r\n if (status == 5) return '已取消'\r\n if (status == 6) return '退款中'\r\n if (status == 7) return '已退款'\r\n return '未知状态'\r\n}\r\n\r\n// 获取状态类名\r\nconst getStatusClass = (status: number): string => {\r\n if (status == 1) return 'status-pending'\r\n if (status == 2) return 'status-shipping'\r\n if (status == 3) return 'status-delivering'\r\n if (status == 4) return 'status-completed'\r\n if (status == 5) return 'status-cancelled'\r\n if (status == 6) return 'status-refunding'\r\n if (status == 7) return 'status-refunded'\r\n return 'status-unknown'\r\n}\r\n\r\n// 联系卖家\r\nconst contactSeller = (order: OrderItem) => {\r\n if (order.merchant_id != '') {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/chat?merchantId=${order.merchant_id}`\r\n })\r\n } else {\r\n uni.showToast({\r\n title: '暂无卖家联系方式',\r\n icon: 'none'\r\n })\r\n }\r\n}\r\n\r\n// 删除订单\r\nconst deleteOrder = (orderId: string) => {\r\n uni.showModal({\r\n title: '删除订单',\r\n content: '确定要删除此订单吗?',\r\n success: (res) => {\r\n if (res.confirm) {\r\n uni.showLoading({ title: '删除中...' })\r\n supabaseService.deleteOrder(orderId).then(() => {\r\n uni.hideLoading()\r\n uni.showToast({\r\n title: '订单已删除',\r\n icon: 'success'\r\n })\r\n loadOrders()\r\n }).catch(() => {\r\n uni.hideLoading()\r\n uni.showToast({\r\n title: '删除失败',\r\n icon: 'none'\r\n })\r\n })\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 下拉刷新\r\nconst onRefresh = () => {\r\n refreshing.value = true\r\n setTimeout(() => {\r\n loadOrders()\r\n refreshing.value = false\r\n uni.showToast({\r\n title: '刷新成功',\r\n icon: 'success'\r\n })\r\n }, 1000)\r\n}\r\n\r\n// 上拉加载更多\r\nconst loadMore = () => {\r\n if (loadingMore.value || !hasMore.value) return\r\n \r\n // 暂未实现分页,直接返回\r\n hasMore.value = false\r\n}\r\n\r\n// 订单操作函数\r\nconst cancelOrder = (orderId: string) => {\r\n uni.showModal({\r\n title: '确认取消',\r\n content: '确定要取消此订单吗?',\r\n success: (res) => {\r\n if (res.confirm) {\r\n uni.showLoading({ title: '取消中...' })\r\n supabaseService.cancelOrder(orderId).then((success) => {\r\n uni.hideLoading()\r\n if (success) {\r\n uni.showToast({\r\n title: '订单已取消',\r\n icon: 'success'\r\n })\r\n loadOrders()\r\n } else {\r\n uni.showToast({\r\n title: '取消失败',\r\n icon: 'none'\r\n })\r\n }\r\n }).catch(() => {\r\n uni.hideLoading()\r\n uni.showToast({\r\n title: '取消失败',\r\n icon: 'none'\r\n })\r\n })\r\n }\r\n }\r\n })\r\n}\r\n\r\nconst payOrder = (orderId: string) => {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/payment?orderId=${orderId}`\r\n })\r\n}\r\n\r\nconst remindShipping = async (orderId: string) => {\r\n // 基础提醒\r\n uni.showLoading({ title: '正在提醒...' })\r\n \r\n try {\r\n // 查找订单中的商家ID\r\n const order = orders.value.find(o => o.id === orderId)\r\n if (order != null) {\r\n const merchantId = order.merchant_id\r\n const orderNo = order.order_no\r\n \r\n if (merchantId != '') {\r\n // 向商家发送自动催单消息\r\n const message = `你好,我的订单[${orderNo}]还没有发货,请尽快安排,谢谢。`\r\n const success = await supabaseService.sendChatMessage(message, merchantId)\r\n \r\n if (success) {\r\n console.log('催单消息发送成功')\r\n } else {\r\n console.warn('催单消息发送失败,可能是由于网络原因')\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error('提醒发货异常:', e)\r\n } finally {\r\n uni.hideLoading()\r\n }\r\n \r\n uni.showToast({\r\n title: '已提醒卖家发货',\r\n icon: 'success'\r\n })\r\n}\r\n\r\nconst viewLogistics = (orderId: string) => {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/logistics?orderId=${orderId}`\r\n })\r\n}\r\n\r\n// goReview 必须在 doConfirmReceipt 之前定义,因为 doConfirmReceipt 会调用它\r\nconst goReview = (order: OrderItem) => {\r\n const productIds = order.products.map((p: OrderProduct): string => {\r\n return p.id\r\n }).join(',')\r\n const orderId = order.id\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/review?orderId=${orderId}&productIds=${productIds}`\r\n })\r\n}\r\n\r\nconst doConfirmReceipt = async (orderId: string) => {\r\n uni.showLoading({ title: '处理中...' })\r\n try {\r\n const result = await supabaseService.confirmReceipt(orderId)\r\n uni.hideLoading()\r\n \r\n if (result.success) {\r\n uni.showToast({\r\n title: '收货成功',\r\n icon: 'success'\r\n })\r\n \r\n // 更新 allOrdersList 中的订单状态\r\n const allIndex = allOrdersList.value.findIndex((o: OrderItem): boolean => o.id === orderId)\r\n if (allIndex !== -1) {\r\n allOrdersList.value[allIndex].status = 4\r\n allOrdersList.value = [...allOrdersList.value]\r\n }\r\n \r\n // 更新标签计数\r\n updateTabsCounts(allOrdersList.value)\r\n \r\n // 重新应用当前标签筛选\r\n filterOrdersByTab()\r\n\r\n // 跳转到评价页面\r\n setTimeout(() => {\r\n const order = allOrdersList.value.find((o: OrderItem): boolean => o.id === orderId)\r\n if (order != null) {\r\n goReview(order)\r\n }\r\n }, 1000)\r\n } else {\r\n uni.showToast({\r\n title: result.error ?? '确认收货失败',\r\n icon: 'none'\r\n })\r\n }\r\n } catch (e) {\r\n uni.hideLoading()\r\n uni.showToast({\r\n title: '系统异常',\r\n icon: 'none'\r\n })\r\n }\r\n}\r\n\r\nconst confirmReceipt = (orderId: string) => {\r\n uni.showModal({\r\n title: '确认收货',\r\n content: '请确认您已收到商品,且商品无误',\r\n success: (res) => {\r\n if (res.confirm) {\r\n doConfirmReceipt(orderId)\r\n }\r\n }\r\n })\r\n}\r\n\r\nconst repurchase = (order: OrderItem) => {\r\n const products = order.products\r\n \r\n if (products.length === 0) {\r\n uni.showToast({\r\n title: '订单无商品',\r\n icon: 'none'\r\n })\r\n return\r\n }\r\n \r\n uni.showLoading({ title: '处理中...' })\r\n \r\n let completed = 0\r\n const total = products.length\r\n let successCount = 0\r\n \r\n for (let i = 0; i < products.length; i++) {\r\n const product = products[i]\r\n const productId = product.id\r\n const merchantId = order.merchant_id\r\n \r\n if (productId != null && productId !== '') {\r\n supabaseService.addToCart(productId, 1, '', merchantId ?? '').then((success: boolean) => {\r\n completed++\r\n if (success) successCount++\r\n if (completed === total) {\r\n uni.hideLoading()\r\n if (successCount > 0) {\r\n uni.showToast({\r\n title: `已添加${successCount}件商品`,\r\n icon: 'success'\r\n })\r\n } else {\r\n uni.showToast({\r\n title: '添加失败',\r\n icon: 'none'\r\n })\r\n }\r\n }\r\n }).catch(() => {\r\n completed++\r\n if (completed === total) {\r\n uni.hideLoading()\r\n if (successCount > 0) {\r\n uni.showToast({\r\n title: `已添加${successCount}件商品`,\r\n icon: 'success'\r\n })\r\n } else {\r\n uni.showToast({\r\n title: '添加失败',\r\n icon: 'none'\r\n })\r\n }\r\n }\r\n })\r\n } else {\r\n completed++\r\n if (completed === total) {\r\n uni.hideLoading()\r\n if (successCount > 0) {\r\n uni.showToast({\r\n title: `已添加${successCount}件商品`,\r\n icon: 'success'\r\n })\r\n } else {\r\n uni.showToast({\r\n title: '添加失败',\r\n icon: 'none'\r\n })\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst viewOrderDetail = (orderId: string) => {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/order-detail?id=${orderId}`\r\n })\r\n}\r\n\r\nconst onApplyRefund = (order: OrderItem) => {\r\n const orderId = order.id\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/apply-refund?orderId=${orderId}`\r\n })\r\n}\r\n\r\nconst viewRefundProgress = (orderId: string) => {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/refund?orderId=${orderId}`\r\n })\r\n}\r\n\r\nconst doCancelRefund = async (orderId: string) => {\r\n uni.showLoading({ title: '处理中...' })\r\n const result = await supabaseService.cancelRefund(orderId)\r\n uni.hideLoading()\r\n \r\n if (result.success) {\r\n uni.showToast({ title: '已取消退款', icon: 'success' })\r\n loadOrders()\r\n } else {\r\n uni.showToast({ title: result.message, icon: 'none' })\r\n }\r\n}\r\n\r\n// 取消退款申请\r\nconst cancelRefund = (orderId: string) => {\r\n uni.showModal({\r\n title: '确认取消',\r\n content: '确定要取消退款申请吗?',\r\n success: (res) => {\r\n if (res.confirm) {\r\n doCancelRefund(orderId)\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 处理订单操作\r\nconst handleOrderAction = (order: OrderItem, action: string) => {\r\n if (action === '取消订单') {\r\n cancelOrder(order.id)\r\n } else if (action === '联系卖家') {\r\n contactSeller(order)\r\n } else if (action === '提醒发货') {\r\n remindShipping(order.id)\r\n } else if (action === '申请退款' || action === '申请售后') {\r\n onApplyRefund(order)\r\n } else if (action === '查看物流') {\r\n viewLogistics(order.id)\r\n } else if (action === '确认收货') {\r\n confirmReceipt(order.id)\r\n } else if (action === '再次购买') {\r\n repurchase(order)\r\n } else if (action === '删除订单') {\r\n deleteOrder(order.id)\r\n } else if (action === '退款进度') {\r\n viewRefundProgress(order.id)\r\n } else if (action === '取消退款') {\r\n cancelRefund(order.id)\r\n }\r\n}\r\n\r\n// 显示订单操作菜单\r\nconst showOrderMenu = (order: OrderItem) => {\r\n const status = order.status\r\n let actions: string[] = []\r\n \r\n if (status === 1) {\r\n actions = ['取消订单', '联系卖家']\r\n } else if (status === 2) {\r\n actions = ['提醒发货', '申请退款', '联系卖家']\r\n } else if (status === 3) {\r\n actions = ['查看物流', '确认收货', '申请退款', '联系卖家']\r\n } else if (status === 4) {\r\n actions = ['申请售后', '再次购买', '联系卖家']\r\n } else if (status === 5) {\r\n actions = ['删除订单', '再次购买', '联系卖家']\r\n } else if (status === 6) {\r\n actions = ['取消退款', '退款进度', '联系卖家']\r\n } else if (status === 7) {\r\n actions = ['再次购买', '联系卖家']\r\n }\r\n \r\n uni.showActionSheet({\r\n itemList: actions,\r\n success: (res) => {\r\n const action = actions[res.tapIndex]\r\n handleOrderAction(order, action)\r\n }\r\n })\r\n}\r\n\r\n// 导航函数\r\nconst navigateToSearch = () => {\r\n uni.navigateTo({ url: '/pages/mall/consumer/search' })\r\n}\r\n\r\nconst navigateToProduct = (product: OrderProduct) => {\r\n const productId = product.id\r\n uni.navigateTo({ url: `/pages/mall/consumer/product-detail?id=${productId}` })\r\n}\r\n\r\nconst goShopping = () => {\r\n uni.switchTab({ url: '/pages/main/index' })\r\n}\r\n\r\nconst shareForFree = async (order: OrderItem) => {\r\n if (order.products.length === 0) {\r\n uni.showToast({ title: '没有可分享的商品', icon: 'none' })\r\n return\r\n }\r\n \r\n const firstProduct = order.products[0]\r\n \r\n try {\r\n uni.showLoading({ title: '创建分享...' })\r\n const result = await supabaseService.createShareRecord(\r\n firstProduct.id,\r\n order.id,\r\n '',\r\n firstProduct.name,\r\n firstProduct.image,\r\n firstProduct.price\r\n )\r\n uni.hideLoading()\r\n \r\n const shareIdRaw = result.get('id')\r\n const shareCodeRaw = result.get('share_code')\r\n \r\n if (shareIdRaw != null && shareCodeRaw != null) {\r\n const shareId = shareIdRaw as string\r\n const shareCode = shareCodeRaw as string\r\n \r\n uni.showModal({\r\n title: '分享成功',\r\n content: `您的分享码: ${shareCode}\\n分享给好友当有4人购买后即可免单`,\r\n confirmText: '查看详情',\r\n success: (res) => {\r\n if (res.confirm) {\r\n uni.navigateTo({ url: `/pages/mall/consumer/share/detail?id=${shareId}` })\r\n }\r\n }\r\n })\r\n } else {\r\n uni.showToast({ title: '分享创建失败', icon: 'none' })\r\n }\r\n } catch (e) {\r\n uni.hideLoading()\r\n console.error('[shareForFree] 创建分享失败:', e)\r\n uni.showToast({ title: '分享失败', icon: 'none' })\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n.orders-page {\r\n display: flex;\r\n flex-direction: column;\r\n /* 采用相对于窗口的 100% 方案 */\r\n width: 100%;\r\n height: 100%;\r\n /* App/小程序通过 fixed 解决根容器撑满问题H5/电脑端建议使用 flex 1 */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n background-color: #f5f5f5;\r\n overflow: hidden;\r\n}\r\n\r\n/* 头部:确保显式可见且不被遮挡 */\r\n.orders-header {\r\n background-color: #ffffff;\r\n padding: 10px 15px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n width: 100%;\r\n border-bottom: 1px solid #eeeeee;\r\n z-index: 999;\r\n position: relative;\r\n box-sizing: border-box;\r\n flex-shrink: 0;\r\n}\r\n\r\n.header-search.full-width {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n position: relative;\r\n width: 100%;\r\n flex: 1;\r\n}\r\n\r\n.search-input {\r\n flex: 1;\r\n height: 36px;\r\n line-height: 36px;\r\n border: 1px solid #dddddd;\r\n border-radius: 18px;\r\n padding: 0 40px 0 16px;\r\n font-size: 14px;\r\n background-color: #f5f5f5;\r\n color: #333333;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.search-input::placeholder {\r\n color: #999;\r\n font-size: 12px;\r\n}\r\n.search-input:focus {\r\n border-color: #ff5000;\r\n background-color: white;\r\n}\r\n\r\n.search-icon {\r\n position: absolute;\r\n right: 12px;\r\n font-size: 18px;\r\n color: #999;\r\n}\r\n\r\n.search-clear {\r\n position: absolute;\r\n right: 12px;\r\n font-size: 20px;\r\n color: #999;\r\n width: 20px;\r\n height: 20px;\r\n line-height: 18px;\r\n text-align: center;\r\n border-radius: 10px; /* fixed 50% */\r\n background-color: #ddd;\r\n /* cursor: pointer; removed */\r\n}\r\n\r\n/* 标签页容器:确保在安卓下层级正确且不随内容滚动 */\r\n.order-tabs-fixed-container {\r\n background-color: #ffffff;\r\n border-bottom: 1px solid #f0f0f0;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n width: 100%;\r\n z-index: 100 !important;\r\n flex-shrink: 0;\r\n position: relative;\r\n}\r\n\r\n/* 安卓端滚动修复:关键容器 */\r\n.orders-content {\r\n flex: 1;\r\n width: 100%;\r\n /* 极致方案:不再设置 height: 0改用 flex: 1 填满,并显式设置 scroll-y 的表现 */\r\n min-height: 0;\r\n flex-shrink: 1;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n/* 顶部内容区域必须显式不可伸缩,防止撑占滚动空间 */\r\n.orders-header, .order-tabs-fixed-container {\r\n flex-shrink: 0;\r\n width: 100%;\r\n}\r\n\r\n.tab-item-fixed {\r\n padding: 0 15px;\r\n text-align: center;\r\n position: relative;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n white-space: nowrap;\r\n flex-shrink: 0;\r\n min-width: 60px;\r\n height: 100%;\r\n}\r\n\r\n.tab-item-fixed.active {\r\n color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n.tab-scroll-mobile {\r\n flex: 1;\r\n white-space: nowrap;\r\n /* 移除 width: 0改用更稳健的安卓适配方式 */\r\n display: flex;\r\n flex-direction: row;\r\n}\r\n\r\n.tab-container-mobile {\r\n display: flex;\r\n flex-direction: row;\r\n /* 加上这个确保容器能够横向撑开 */\r\n flex-wrap: nowrap;\r\n}\r\n\r\n.tab-item-mobile {\r\n padding: 15px 15px;\r\n text-align: center;\r\n position: relative;\r\n display: flex;\r\n flex-direction: row; /* 显式声明 */\r\n justify-content: center;\r\n align-items: center;\r\n white-space: nowrap;\r\n flex-shrink: 0; /* 绝对不能被压缩,否则无法滚动 */\r\n}\r\n\r\n.tab-item-mobile.active {\r\n color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n.active-indicator {\r\n position: absolute;\r\n bottom: 0px;\r\n left: 10px;\r\n right: 10px;\r\n height: 3px;\r\n background-color: #ff5000;\r\n border-radius: 2px;\r\n}\r\n\r\n.tab-name {\r\n font-size: 14px;\r\n}\r\n\r\n.tab-count {\r\n margin-left: 4px;\r\n background-color: #ff5000;\r\n color: white;\r\n font-size: 10px;\r\n padding: 1px 4px;\r\n border-radius: 8px;\r\n min-width: 12px;\r\n text-align: center;\r\n}\r\n\r\n/* 内容区 */\r\n.orders-content {\r\n flex: 1;\r\n width: 100%;\r\n height: 0; /* 关键:强制让 flex:1 在安卓端生效,防止内容撑开父容器 */\r\n}\r\n\r\n/* 空状态 */\r\n.empty-orders {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 80px 20px;\r\n}\r\n\r\n.empty-icon {\r\n font-size: 80px;\r\n color: #ddd;\r\n margin-bottom: 20px;\r\n}\r\n\r\n.empty-title {\r\n font-size: 18px;\r\n color: #666;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.empty-desc {\r\n font-size: 14px;\r\n color: #999;\r\n margin-bottom: 30px;\r\n}\r\n\r\n.go-shopping-btn {\r\n background-color: #ff5000;\r\n color: white;\r\n border: none;\r\n border-radius: 25px;\r\n padding: 10px 40px;\r\n font-size: 16px;\r\n}\r\n\r\n/* 订单列表 */\r\n.order-list {\r\n padding: 10px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.order-card {\r\n background-color: white;\r\n border-radius: 10px;\r\n margin-bottom: 10px;\r\n overflow: hidden;\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n flex-shrink: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n/* 订单头部 */\r\n.order-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 15px;\r\n border-bottom: 1px solid #f5f5f5;\r\n}\r\n\r\n.order-no {\r\n font-size: 14px;\r\n color: #666;\r\n}\r\n\r\n.order-status {\r\n font-size: 14px;\r\n font-weight: bold;\r\n}\r\n\r\n.status-pending {\r\n color: #ff5000;\r\n}\r\n\r\n.status-shipping {\r\n color: #ff9500;\r\n}\r\n\r\n.status-delivering {\r\n color: #007aff;\r\n}\r\n\r\n.status-completed {\r\n color: #34c759;\r\n}\r\n\r\n.status-cancelled {\r\n color: #999;\r\n}\r\n\r\n.status-refunding {\r\n color: #ff5000;\r\n}\r\n\r\n.status-refunded {\r\n color: #999;\r\n}\r\n\r\n/* 订单商品 */\r\n.order-products {\r\n padding: 15px;\r\n}\r\n\r\n.order-product {\r\n display: flex;\r\n flex-direction: row; /* 显式声明横向排列 */\r\n margin-bottom: 15px;\r\n width: 100%;\r\n}\r\n\r\n.order-product:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.product-image {\r\n width: 80px;\r\n height: 80px;\r\n border-radius: 8px;\r\n margin-right: 12px;\r\n flex-shrink: 0; /* 防止图片被压缩 */\r\n}\r\n\r\n.product-info {\r\n flex: 1; /* 占据右侧剩余所有空间 */\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n height: 80px; \r\n overflow: hidden; /* 防止文字溢出 */\r\n}\r\n\r\n.product-top-info {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.product-name {\r\n font-size: 14px;\r\n color: #333;\r\n line-height: 1.4;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n lines: 2;\r\n}\r\n\r\n.product-spec {\r\n font-size: 12px;\r\n color: #999;\r\n margin-top: 2px;\r\n}\r\n\r\n.product-footer {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-top: auto;\r\n}\r\n\r\n.product-price {\r\n font-size: 16px;\r\n color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n.product-quantity {\r\n font-size: 13px;\r\n color: #999;\r\n}\r\n\r\n/* 订单信息 */\r\n.order-info {\r\n padding: 15px;\r\n border-top: 1px solid #f5f5f5;\r\n border-bottom: 1px solid #f5f5f5;\r\n}\r\n\r\n.info-row {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.info-row:last-child {\r\n margin-bottom: 0;\r\n}\r\n\r\n.info-row.total {\r\n margin-top: 8px;\r\n padding-top: 8px;\r\n border-top: 1px solid #f5f5f5;\r\n}\r\n\r\n.info-label {\r\n font-size: 14px;\r\n color: #666;\r\n}\r\n\r\n.info-value {\r\n font-size: 14px;\r\n color: #333;\r\n}\r\n\r\n.total-price {\r\n font-size: 18px;\r\n color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n/* 订单操作 */\r\n.order-actions {\r\n padding: 15px;\r\n}\r\n\r\n.action-buttons {\r\n display: flex;\r\n justify-content: flex-end;\r\n /* gap: 10px; removed */\r\n}\r\n\r\n.action-btn {\r\n padding: 6px 15px;\r\n border-radius: 15px;\r\n font-size: 13px;\r\n border: 1px solid;\r\n background-color: transparent; /* fixed background: none */\r\n margin-left: 10px; /* alternative to gap */\r\n}\r\n\r\n.action-btn.cancel {\r\n color: #666;\r\n border-color: #ccc;\r\n}\r\n\r\n.action-btn.pay {\r\n color: #ff5000;\r\n border-color: #ff5000;\r\n}\r\n\r\n.action-btn.remind {\r\n color: #666;\r\n border-color: #ccc;\r\n}\r\n\r\n.action-btn.view {\r\n color: #666;\r\n border-color: #ccc;\r\n}\r\n\r\n.action-btn.confirm {\r\n color: #34c759;\r\n border-color: #34c759;\r\n}\r\n\r\n.action-btn.refund {\r\n color: #666;\r\n border-color: #ccc;\r\n}\r\n\r\n.action-btn.cancel {\r\n color: #ff6b6b;\r\n border-color: #ff6b6b;\r\n}\r\n\r\n.action-btn.review {\r\n color: #ff9500;\r\n border-color: #ff9500;\r\n}\r\n\r\n.action-btn.repurchase {\r\n color: #ff5000;\r\n border-color: #ff5000;\r\n}\r\n\r\n/* 加载更多 */\r\n.loading-more {\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.loading-spinner {\r\n width: 24px;\r\n height: 24px;\r\n border: 2px solid #f0f5ff;\r\n border-top-color: #ff5000;\r\n border-radius: 12px;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.no-more {\r\n text-align: center;\r\n color: #999;\r\n font-size: 13px;\r\n padding: 20px 0;\r\n}\r\n\r\n/* 安全区域 */\r\n.safe-area {\r\n height: 20px;\r\n}\r\n\r\n/* 底部导航占位 */\r\n.tabbar-placeholder {\r\n height: 50px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n/* 响应式适配 */\r\n@media screen and (min-width: 768px) {\r\n .order-list {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n width: 100%;\r\n max-width: 1200px;\r\n margin: 0 auto;\r\n justify-content: flex-start;\r\n align-content: flex-start;\r\n box-sizing: border-box;\r\n }\r\n \r\n .order-card {\r\n width: 48%;\r\n margin: 0 1% 20px 1%;\r\n box-shadow: 0 4px 12px rgba(0,0,0,0.05);\r\n flex: none;\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 1200px) {\r\n .order-card {\r\n width: 31%;\r\n margin: 0 1% 20px 1%;\r\n flex: none;\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n/* 订单卡片新样式 */\r\n.order-card-header {\r\n padding: 12px 15px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n border-bottom: 1px solid #f9f9f9;\r\n}\r\n\r\n.status-row {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.more-btn {\r\n font-size: 18px;\r\n color: #999;\r\n margin-left: 8px;\r\n padding: 0 5px;\r\n}\r\n\r\n.shop-info {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.shop-icon {\r\n font-size: 16px;\r\n margin-right: 6px;\r\n}\r\n\r\n.shop-name {\r\n font-size: 14px;\r\n font-weight: bold;\r\n color: #333;\r\n max-width: 150px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n lines: 1;\r\n}\r\n\r\n.arrow-right {\r\n font-size: 14px;\r\n color: #ccc;\r\n margin-left: 4px;\r\n}\r\n\r\n.product-title-row, .product-spec-row {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n}\r\n\r\n.product-title-row {\r\n margin-bottom: 4px;\r\n}\r\n\r\n.product-spec-row {\r\n margin-top: 2px;\r\n}\r\n\r\n.order-summary {\r\n padding: 10px 15px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n border-top: 1px solid #f9f9f9;\r\n}\r\n\r\n.order-time {\r\n font-size: 12px;\r\n color: #999;\r\n}\r\n\r\n.summary-right {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.summary-label {\r\n font-size: 12px;\r\n color: #666;\r\n margin-right: 5px;\r\n}\r\n\r\n.summary-price {\r\n font-size: 16px;\r\n font-weight: bold;\r\n color: #333;\r\n}\r\n\r\n/* 分享免单入口样式 */\r\n.share-free-row {\r\n margin: 0 15px;\r\n padding: 12px 15px;\r\n background: linear-gradient(135deg, #fff5f0 0%, #ffecd2 100%);\r\n border-radius: 8px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.share-free-icon {\r\n font-size: 20px;\r\n margin-right: 8px;\r\n}\r\n\r\n.share-free-text {\r\n font-size: 14px;\r\n font-weight: bold;\r\n color: #ff6b35;\r\n margin-right: 8px;\r\n}\r\n\r\n.share-free-tip {\r\n flex: 1;\r\n font-size: 12px;\r\n color: #ff8c42;\r\n}\r\n\r\n.share-free-arrow {\r\n font-size: 16px;\r\n color: #ff8c42;\r\n}\r\n\r\n@media screen and (max-width: 320px) {\r\n .tab-item {\r\n padding: 0 10px;\r\n margin-right: 5px;\r\n }\r\n \r\n .action-btn {\r\n padding: 6px 10px;\r\n font-size: 12px;\r\n }\r\n}\r\n\r\n@media screen and (min-width: 415px) {\r\n .order-card {\r\n margin-bottom: 15px;\r\n }\r\n}\r\n</style>\r\n\r\n",null,null,null,null,null],"names":[],"mappings":"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"}