1 line
85 KiB
Plaintext
1 line
85 KiB
Plaintext
{"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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"} |