1 line
55 KiB
Plaintext
1 line
55 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/profile.uvue","pages/mall/consumer/index.uvue","pages/user/login.uvue","pages/user/center.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["<!-- 消费者端 - 个人中心 -->\r\n<template>\r\n <view class=\"consumer-profile\">\r\n <!-- 智能顶部导航栏 - 与消息页保持一致 -->\r\n <view class=\"smart-navbar\" :style=\"{ paddingTop: statusBarHeight + 'px' }\">\r\n <view class=\"nav-container\">\r\n <!-- 头像 -->\r\n <image \r\n :src=\"userInfo.avatar_url != '' ? userInfo.avatar_url : '/static/default-avatar.png'\" \r\n class=\"nav-avatar\" \r\n @click=\"editProfile\"\r\n />\r\n \r\n <!-- 用户信息横向排列 (名字、积分、余额、优惠券) -->\r\n <view class=\"nav-user-stats\">\r\n <text class=\"nav-user-name\">{{ userInfo.nickname != '' ? userInfo.nickname : userInfo.phone }}</text>\r\n \r\n <view class=\"nav-stat-item\" @click=\"goToPoints\">\r\n <text class=\"nav-stat-label\">积分</text>\r\n <text class=\"nav-stat-value\">{{ userStats.points }}</text>\r\n </view>\r\n \r\n <view class=\"nav-stat-item\">\r\n <text class=\"nav-stat-label\">余额</text>\r\n <text class=\"nav-stat-value\" @click=\"goToWallet\">¥{{ userStats.balance }}</text>\r\n </view>\r\n \r\n <view class=\"nav-stat-item\" @click=\"goToCoupons\">\r\n <text class=\"nav-stat-label\">券</text>\r\n <text class=\"nav-stat-value\">{{ serviceCounts.coupons }}</text>\r\n </view>\r\n </view>\r\n \r\n <!-- 设置按钮 (右侧) -->\r\n <view class=\"nav-actions\">\r\n <view class=\"action-btn\" @click=\"goToSettings\">\r\n <text class=\"action-icon\">⚙️</text>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <scroll-view class=\"profile-scroll-content\" direction=\"vertical\" style=\"flex:1; height: 0; width: 100%;\">\r\n <!-- 导航栏占位符 - 恢复 -->\r\n <view :style=\"{ height: (statusBarHeight + 10) + 'px' }\"></view>\r\n \r\n <!-- 我的服务 (移到订单上方) -->\r\n <view class=\"my-services\" style=\"margin-top: 10px;\">\r\n <view class=\"section-title\">我的服务</view>\r\n <view class=\"service-grid\">\r\n <view class=\"service-item\" @click=\"goToCoupons\">\r\n <text class=\"service-icon\">🎫</text>\r\n <text class=\"service-text\">优惠券</text>\r\n <text v-if=\"serviceCounts.coupons > 0\" class=\"service-badge\">{{ serviceCounts.coupons }}</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToAddress\">\r\n <text class=\"service-icon\">📍</text>\r\n <text class=\"service-text\">收货地址</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToFavorites\">\r\n <text class=\"service-icon\">❤️</text>\r\n <text class=\"service-text\">我的收藏</text>\r\n <text v-if=\"serviceCounts.favorites > 0\" class=\"service-badge\">{{ serviceCounts.favorites }}</text>\r\n </view>\r\n\r\n <view class=\"service-item\" @click=\"goToFootprint\">\r\n <text class=\"service-icon\">👣</text>\r\n <text class=\"service-text\">浏览足迹</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToRefund\">\r\n <text class=\"service-icon\">🔄</text>\r\n <text class=\"service-text\">退款/售后</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToOrderReviews\">\r\n <text class=\"service-icon\">📝</text>\r\n <text class=\"service-text\">评价</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToFollowedShops\">\r\n <text class=\"service-icon\">⭐</text>\r\n <text class=\"service-text\">关注店铺</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToSubscriptions\">\r\n <text class=\"service-icon\">📱</text>\r\n <text class=\"service-text\">软件订阅</text>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 订单状态快捷入口 -->\r\n <view class=\"order-shortcuts\">\r\n <view class=\"section-title\">我的订单</view>\r\n <view class=\"order-tabs\">\r\n <view class=\"order-tab\" :class=\"{ active: currentOrderTab === 'all' }\" @click=\"switchOrderTab('all')\">\r\n <text class=\"tab-icon\">📋</text>\r\n <text class=\"tab-text\">全部</text>\r\n <text v-if=\"orderCounts.total > 0\" class=\"tab-badge\">{{ orderCounts.total }}</text>\r\n </view>\r\n <view class=\"order-tab\" :class=\"{ active: currentOrderTab === 'pending' }\" @click=\"switchOrderTab('pending')\">\r\n <text class=\"tab-icon\">💰</text>\r\n <text class=\"tab-text\">待支付</text>\r\n <text v-if=\"orderCounts.pending > 0\" class=\"tab-badge\">{{ orderCounts.pending }}</text>\r\n </view>\r\n <view class=\"order-tab\" :class=\"{ active: currentOrderTab === 'toship' }\" @click=\"switchOrderTab('toship')\">\r\n <text class=\"tab-icon\">🚚</text>\r\n <text class=\"tab-text\">待发货</text>\r\n <text v-if=\"orderCounts.toship > 0\" class=\"tab-badge\">{{ orderCounts.toship }}</text>\r\n </view>\r\n <view class=\"order-tab\" :class=\"{ active: currentOrderTab === 'shipped' }\" @click=\"switchOrderTab('shipped')\">\r\n <text class=\"tab-icon\">📦</text>\r\n <text class=\"tab-text\">待收货</text>\r\n <text v-if=\"orderCounts.shipped > 0\" class=\"tab-badge\">{{ orderCounts.shipped }}</text>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 最近订单列表 (根据Tab切换显示) -->\r\n <view class=\"recent-orders\">\r\n <view class=\"section-header\">\r\n <text class=\"section-title\">{{ getOrderSectionTitle() }}</text>\r\n <text class=\"view-all\" @click=\"goToOrders(currentOrderTab)\">查看更多 ></text>\r\n </view>\r\n \r\n <view v-if=\"filteredOrders.length === 0\" class=\"empty-orders\">\r\n <text class=\"empty-text\">暂无相关订单记录</text>\r\n <button class=\"start-shopping\" @click=\"goShopping\">去逛逛</button>\r\n </view>\r\n \r\n <view v-for=\"order in filteredOrders\" :key=\"order.id\" class=\"order-item\" @click=\"viewOrderDetail(order)\">\r\n <view class=\"order-header\">\r\n <text class=\"order-no\">订单号: {{ order.order_no }}</text>\r\n <text class=\"order-status\" :class=\"getOrderStatusClass(order.status)\">{{ getOrderStatusText(order.status) }}</text>\r\n </view>\r\n <view class=\"order-content\">\r\n <image :src=\"getOrderMainImage(order)\" class=\"order-image\" mode=\"aspectFill\" />\r\n <view class=\"order-info\">\r\n <text class=\"order-title\">{{ getOrderTitle(order) }}</text>\r\n <text class=\"order-amount\">¥{{ order.actual_amount }}</text>\r\n <text class=\"order-time\">{{ formatTime(order.created_at) }}</text>\r\n </view>\r\n </view>\r\n <view class=\"order-actions\">\r\n <button v-if=\"order.status === 1\" class=\"action-btn pay\" @click.stop=\"payOrder(order)\">立即支付</button>\r\n <button v-if=\"order.status === 3\" class=\"action-btn confirm\" @click.stop=\"confirmReceive(order)\">确认收货</button>\r\n <button v-if=\"order.status === 4\" class=\"action-btn review\" @click.stop=\"reviewOrder(order)\">评价</button>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 我的服务 -->\r\n <!-- <view class=\"my-services\">\r\n <view class=\"section-title\">我的服务</view>\r\n <view class=\"service-grid\">\r\n <view class=\"service-item\" @click=\"goToCoupons\">\r\n <text class=\"service-icon\">🎫</text>\r\n <text class=\"service-text\">优惠券</text>\r\n <text v-if=\"serviceCounts.coupons > 0\" class=\"service-badge\">{{ serviceCounts.coupons }}</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToAddress\">\r\n <text class=\"service-icon\">📍</text>\r\n <text class=\"service-text\">收货地址</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToFavorites\">\r\n <text class=\"service-icon\">❤️</text>\r\n <text class=\"service-text\">我的收藏</text>\r\n <text v-if=\"serviceCounts.favorites > 0\" class=\"service-badge\">{{ serviceCounts.favorites }}</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToFootprint\">\r\n <text class=\"service-icon\">👣</text>\r\n <text class=\"service-text\">浏览足迹</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToRefund\">\r\n <text class=\"service-icon\">🔄</text>\r\n <text class=\"service-text\">退款/售后</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"contactService\">\r\n <text class=\"service-icon\">💬</text>\r\n <text class=\"service-text\">在线客服</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToMySubscriptions\">\r\n <text class=\"service-icon\">🧩</text>\r\n <text class=\"service-text\">我的订阅</text>\r\n </view>\r\n <view class=\"service-item\" @click=\"goToSubscriptions\">\r\n <text class=\"service-icon\">🧩</text>\r\n <text class=\"service-text\">软件订阅</text>\r\n </view>\r\n </view>\r\n </view> -->\r\n\r\n <!-- 消费统计 -->\r\n <view class=\"consumption-stats\">\r\n <view class=\"section-title\">消费统计</view>\r\n <view class=\"stats-period\">\r\n <text v-for=\"period in statsPeriods\" :key=\"period.key\" \r\n class=\"period-tab\" \r\n :class=\"{ active: activeStatsPeriod === period.key }\"\r\n @click=\"switchStatsPeriod(period.key)\">{{ period.label }}</text>\r\n </view>\r\n \r\n <view class=\"stats-content\">\r\n <view class=\"stat-card\">\r\n <text class=\"stat-value\">¥{{ currentStats.total_amount }}</text>\r\n <text class=\"stat-label\">总消费</text>\r\n </view>\r\n <view class=\"stat-card\">\r\n <text class=\"stat-value\">{{ currentStats.order_count }}</text>\r\n <text class=\"stat-label\">订单数</text>\r\n </view>\r\n <view class=\"stat-card\">\r\n <text class=\"stat-value\">¥{{ currentStats.avg_amount }}</text>\r\n <text class=\"stat-label\">平均消费</text>\r\n </view>\r\n <view class=\"stat-card\">\r\n <text class=\"stat-value\">{{ currentStats.save_amount }}</text>\r\n <text class=\"stat-label\">节省金额</text>\r\n </view>\r\n </view>\r\n </view>\r\n\r\n <!-- 账户安全 -->\r\n <!-- <view class=\"account-security\">\r\n <view class=\"section-title\">账户安全</view>\r\n <view class=\"security-items\">\r\n <view class=\"security-item\" @click=\"changePassword\">\r\n <text class=\"security-icon\">🔒</text>\r\n <text class=\"security-text\">修改密码</text>\r\n <text class=\"security-arrow\">></text>\r\n </view>\r\n <view class=\"security-item\" @click=\"bindPhone\">\r\n <text class=\"security-icon\">📱</text>\r\n <text class=\"security-text\">手机绑定</text>\r\n <view class=\"security-status\">\r\n <text class=\"status-text\" :class=\"{ bound: userInfo.phone }\">{{ userInfo.phone ? '已绑定' : '未绑定' }}</text>\r\n <text class=\"security-arrow\">></text>\r\n </view>\r\n </view>\r\n <view class=\"security-item\" @click=\"bindEmail\">\r\n <text class=\"security-icon\">📧</text>\r\n <text class=\"security-text\">邮箱绑定</text>\r\n <view class=\"security-status\">\r\n <text class=\"status-text\" :class=\"{ bound: userInfo.email }\">{{ userInfo.email ? '已绑定' : '未绑定' }}</text>\r\n <text class=\"security-arrow\">></text>\r\n </view>\r\n </view>\r\n </view>\r\n </view> -->\r\n </scroll-view>\r\n </view>\r\n</template>\r\n\r\n<script>\r\nimport { UserType, OrderType } from '@/types/mall-types.uts'\r\nimport supabaseService from '@/utils/supabaseService.uts'\r\n\r\ntype UserStatsType = {\r\n points: number\r\n balance: number\r\n level: number\r\n}\r\n\r\ntype OrderCountsType = {\r\n total: number\r\n pending: number\r\n toship: number\r\n shipped: number\r\n}\r\n\r\ntype ServiceCountsType = {\r\n coupons: number\r\n favorites: number\r\n}\r\n\r\ntype ConsumptionStatsType = {\r\n total_amount: number\r\n order_count: number\r\n avg_amount: number\r\n save_amount: number\r\n}\r\n\r\ntype StatsPeriodType = {\r\n key: string\r\n label: string\r\n}\r\n\r\nexport default {\r\n data() {\r\n return {\r\n userInfo: {\r\n id: '',\r\n phone: '',\r\n email: '',\r\n nickname: '',\r\n avatar_url: '',\r\n gender: 0,\r\n user_type: 0,\r\n status: 0,\r\n created_at: ''\r\n } as UserType,\r\n userStats: {\r\n points: 0,\r\n balance: 0,\r\n level: 1\r\n } as UserStatsType,\r\n orderCounts: {\r\n total: 0,\r\n pending: 0,\r\n toship: 0,\r\n shipped: 0,\r\n } as any,\r\n serviceCounts: {\r\n coupons: 0,\r\n favorites: 0\r\n } as ServiceCountsType,\r\n recentOrders: [] as Array<OrderType>,\r\n statsPeriods: [\r\n { key: 'month', label: '本月' },\r\n { key: 'quarter', label: '本季度' },\r\n { key: 'year', label: '本年' },\r\n { key: 'all', label: '全部' }\r\n ] as Array<StatsPeriodType>,\r\n activeStatsPeriod: 'month',\r\n currentStats: {\r\n total_amount: 0,\r\n order_count: 0,\r\n avg_amount: 0,\r\n save_amount: 0\r\n } as ConsumptionStatsType,\r\n statusBarHeight: 0,\r\n currentOrderTab: 'all' as string, // 当前选中的订单Tab\r\n allOrders: [] as Array<OrderType> // 存储所有订单数据\r\n }\r\n },\r\n onLoad() {\r\n this.initPage()\r\n this.loadUserProfile()\r\n this.loadOrders()\r\n \r\n // 监听订单更新事件\r\n uni.$on('orderUpdated', this.handleOrderUpdated)\r\n },\r\n onShow() {\r\n this.refreshData()\r\n },\r\n onUnload() {\r\n // 移除事件监听\r\n uni.$off('orderUpdated', this.handleOrderUpdated)\r\n },\r\n computed: {\r\n // 根据当前Tab筛选订单\r\n filteredOrders(): Array<OrderType> {\r\n if (this.currentOrderTab === 'all') {\r\n return this.allOrders\r\n } else if (this.currentOrderTab === 'pending') {\r\n return this.allOrders.filter((order: OrderType): boolean => order.status === 1)\r\n } else if (this.currentOrderTab === 'toship') {\r\n return this.allOrders.filter((order: OrderType): boolean => order.status === 2)\r\n } else if (this.currentOrderTab === 'shipped') {\r\n return this.allOrders.filter((order: OrderType): boolean => order.status === 3)\r\n } else if (this.currentOrderTab === 'review') {\r\n return this.allOrders.filter((order: OrderType): boolean => order.status === 4)\r\n }\r\n return []\r\n }\r\n },\r\n methods: {\r\n // 加载订单数据\r\n async loadOrders() {\r\n try {\r\n const orders = await supabaseService.getOrders()\r\n \r\n // 映射数据库字段到前端类型\r\n this.allOrders = orders.map((o: any): OrderType => {\r\n // 确保 status 字段存在\r\n if (o['status'] == null && o['order_status'] != null) {\r\n o['status'] = o['order_status']\r\n }\r\n // 确保 actual_amount 存在\r\n if (o['actual_amount'] == null && o['total_amount'] != null) {\r\n o['actual_amount'] = o['total_amount']\r\n }\r\n return o as OrderType\r\n })\r\n \r\n // 按时间倒序 (created_at)\r\n this.allOrders.sort((a: any, b: any) => {\r\n const dateA = a['created_at']\r\n const dateB = b['created_at']\r\n const timeA = new Date(dateA != null ? dateA : 0).getTime()\r\n const timeB = new Date(dateB != null ? dateB : 0).getTime()\r\n return timeB - timeA\r\n })\r\n \r\n // 过滤最近的订单\r\n this.recentOrders = this.allOrders.slice(0, 5)\r\n \r\n // 更新角标统计 (确保状态码一致: 1=待支付, 2=待发货, 3=待收货, 4=待评价)\r\n this.orderCounts = {\r\n total: this.allOrders.length,\r\n pending: this.allOrders.filter((o: any) => o.status === 1).length,\r\n toship: this.allOrders.filter((o: any) => o.status === 2).length,\r\n shipped: this.allOrders.filter((o: any) => o.status === 3).length,\r\n review: this.allOrders.filter((o: any) => o.status === 4).length\r\n }\r\n } catch (e) {\r\n console.error('加载订单异常', e)\r\n }\r\n },\r\n \r\n // 切换订单Tab\r\n switchOrderTab(tab: string) {\r\n this.currentOrderTab = tab\r\n },\r\n \r\n // 获取当前订单部分标题\r\n getOrderSectionTitle(): string {\r\n const titles: Record<string, string> = {\r\n 'all': '全部订单',\r\n 'pending': '待支付订单',\r\n 'shipped': '待收货订单',\r\n 'review': '待评价订单'\r\n }\r\n const title = titles[this.currentOrderTab]\r\n return title != null ? title : '我的订单'\r\n },\r\n\r\n initPage() {\r\n const systemInfo = uni.getSystemInfoSync()\r\n this.statusBarHeight = systemInfo.statusBarHeight ?? 0\r\n },\r\n async loadUserProfile() {\r\n try {\r\n // 获取用户资料\r\n const profile = await supabaseService.getUserProfile()\r\n if (profile != null) {\r\n // 映射字段\r\n let uId = ''\r\n let uPhone = ''\r\n let uEmail = ''\r\n let uNickname = ''\r\n let uAvatar = ''\r\n let uGender = 0\r\n \r\n if (profile instanceof UTSJSONObject) {\r\n uId = profile.getString('user_id') ?? ''\r\n uPhone = profile.getString('phone') ?? ''\r\n uEmail = profile.getString('email') ?? ''\r\n uNickname = profile.getString('nickname') ?? ''\r\n uAvatar = profile.getString('avatar_url') ?? ''\r\n uGender = profile.getNumber('gender') ?? 0\r\n } else {\r\n uId = (profile['user_id'] as string) ?? ''\r\n uPhone = (profile['phone'] as string) ?? ''\r\n uEmail = (profile['email'] as string) ?? ''\r\n uNickname = (profile['nickname'] as string) ?? ''\r\n uAvatar = (profile['avatar_url'] as string) ?? ''\r\n uGender = (profile['gender'] as number) ?? 0\r\n }\r\n \r\n // 如果昵称为空,使用手机号脱敏显示\r\n if (!uNickname && uPhone) {\r\n uNickname = uPhone.substring(0, 3) + '****' + uPhone.substring(7)\r\n }\r\n\r\n this.userInfo = {\r\n id: uId,\r\n phone: uPhone,\r\n email: uEmail,\r\n nickname: uNickname != '' ? uNickname : '微信用户',\r\n avatar_url: uAvatar != '' ? uAvatar : '/static/default-avatar.png',\r\n gender: uGender,\r\n user_type: 1,\r\n status: 1,\r\n created_at: new Date().toISOString()\r\n } as UserType\r\n } else {\r\n // 如果获取失败(未登录或无档案),尝试获取当前登录ID\r\n const userId = supabaseService.getCurrentUserId()\r\n if (userId != null) {\r\n this.userInfo.id = userId\r\n this.userInfo.nickname = '用户' + userId.substring(0, 4)\r\n } else {\r\n this.userInfo.nickname = '未登录'\r\n }\r\n }\r\n\r\n // 获取积分和余额(并行获取)\r\n const [balance, points] = await Promise.all([\r\n supabaseService.getUserBalance(),\r\n supabaseService.getUserPoints()\r\n ])\r\n\r\n this.userStats = {\r\n points: points,\r\n balance: balance,\r\n level: this.calculateLevel(points) // 根据积分计算等级\r\n } as UserStatsType\r\n\r\n } catch (e) {\r\n console.error('加载用户信息失败', e)\r\n // 保持默认或显示错误\r\n }\r\n },\r\n \r\n calculateLevel(points: number): number {\r\n if (points < 1000) return 0\r\n if (points < 5000) return 1\r\n if (points < 20000) return 2\r\n if (points < 50000) return 3\r\n return 4\r\n },\r\n \r\n loadConsumptionStats() {\r\n // 模拟加载消费统计数据\r\n const statsData: Record<string, ConsumptionStatsType> = {\r\n month: {\r\n total_amount: 1280.50,\r\n order_count: 8,\r\n avg_amount: 160.06,\r\n save_amount: 85.20\r\n },\r\n quarter: {\r\n total_amount: 3680.80,\r\n order_count: 18,\r\n avg_amount: 204.49,\r\n save_amount: 256.30\r\n },\r\n year: {\r\n total_amount: 15680.90,\r\n order_count: 56,\r\n avg_amount: 280.02,\r\n save_amount: 986.50\r\n },\r\n all: {\r\n total_amount: 25680.50,\r\n order_count: 89,\r\n avg_amount: 288.55,\r\n save_amount: 1580.20\r\n }\r\n }\r\n \r\n this.currentStats = statsData[this.activeStatsPeriod]\r\n },\r\n \r\n refreshData() {\r\n // 刷新页面数据\r\n this.loadUserProfile()\r\n this.loadOrders()\r\n this.updateCouponCount() // 更新优惠券数量\r\n },\r\n \r\n async updateCouponCount() {\r\n // 从 Supabase 获取真实的优惠券数量\r\n try {\r\n const count = await supabaseService.getUserCouponCount()\r\n this.serviceCounts.coupons = count\r\n } catch (e) {\r\n console.error('获取优惠券数量失败', e)\r\n this.serviceCounts.coupons = 0\r\n }\r\n },\r\n \r\n getUserLevel(): string {\r\n const levels = ['新手', '铜牌会员', '银牌会员', '金牌会员', '钻石会员']\r\n if (this.userStats.level >= 0 && this.userStats.level < levels.length) {\r\n return levels[this.userStats.level]\r\n }\r\n return '新手'\r\n },\r\n \r\n getOrderStatusText(status: number): string {\r\n const statusTexts = ['异常', '待支付', '待发货', '待收货', '已完成', '已取消']\r\n if (status >= 0 && status < statusTexts.length) {\r\n return statusTexts[status]\r\n }\r\n return '未知'\r\n },\r\n \r\n getOrderStatusClass(status: number): string {\r\n const statusClasses = ['error', 'pending', 'processing', 'shipping', 'completed', 'cancelled']\r\n if (status >= 0 && status < statusClasses.length) {\r\n return statusClasses[status]\r\n }\r\n return 'error'\r\n },\r\n \r\n getOrderMainImage(order: any): string {\r\n // 尝试从 ml_order_items 获取第一张图\r\n const items = order['ml_order_items'] as any[]\r\n if (items != null && items.length > 0) {\r\n const firstItem = items[0]\r\n // 数据库字段通常是 image_url\r\n const imgUrl = firstItem['image_url'] as string\r\n const prodImg = firstItem['product_image'] as string\r\n const img = (imgUrl != null && imgUrl != '') ? imgUrl : prodImg\r\n \r\n if (img != null && img != '') return img\r\n }\r\n return '/static/product1.jpg'\r\n },\r\n \r\n getOrderTitle(order: any): string {\r\n const items = order['ml_order_items'] as any[]\r\n if (items != null && items.length > 0) {\r\n const firstItem = items[0]\r\n const pName = firstItem['product_name'] as string\r\n const name = (pName != null && pName != '') ? pName : '商品'\r\n \r\n if (items.length > 1) {\r\n return `${name} 等${items.length}件商品`\r\n }\r\n return name\r\n }\r\n return '精选商品'\r\n },\r\n \r\n formatTime(timeStr: string): string {\r\n const date = new Date(timeStr)\r\n const now = new Date()\r\n const diff = now.getTime() - date.getTime()\r\n const days = Math.floor(diff / (1000 * 60 * 60 * 24))\r\n \r\n if (days === 0) {\r\n return '今天'\r\n } else if (days === 1) {\r\n return '昨天'\r\n } else {\r\n return `${days}天前`\r\n }\r\n },\r\n \r\n switchStatsPeriod(period: string) {\r\n this.activeStatsPeriod = period\r\n this.loadConsumptionStats()\r\n },\r\n \r\n editProfile() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/edit-profile'\r\n })\r\n },\r\n \r\n // 跳转设置\r\n goToSettings() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/settings'\r\n })\r\n },\r\n \r\n // 跳转钱包\r\n goToWallet() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/wallet'\r\n })\r\n },\r\n \r\n goToOrders(type: string) {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/orders?type=${type}`\r\n })\r\n },\r\n \r\n goShopping() {\r\n uni.switchTab({\r\n url: '/pages/mall/consumer/index'\r\n })\r\n },\r\n \r\n viewOrderDetail(order: OrderType) {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/order-detail?orderId=${order.id}`\r\n })\r\n },\r\n \r\n payOrder(order: OrderType) {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/payment?orderId=${order.id}`\r\n })\r\n },\r\n \r\n confirmReceive(order: OrderType) {\r\n uni.showModal({\r\n title: '确认收货',\r\n content: '确认已收到商品吗?',\r\n success: (res) => {\r\n if (res.confirm) {\r\n uni.showToast({\r\n title: '确认收货成功',\r\n icon: 'success'\r\n })\r\n this.refreshData()\r\n }\r\n }\r\n })\r\n },\r\n \r\n reviewOrder(order: OrderType) {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/review?orderId=${order.id}`\r\n })\r\n },\r\n \r\n goToCoupons() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/coupons'\r\n })\r\n },\r\n\r\n goToPoints() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/points/index'\r\n })\r\n },\r\n \r\n goToAddress() {\r\n // 暂时跳转到设置页的地址管理\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/address-list'\r\n })\r\n },\r\n \r\n goToFavorites() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/favorites'\r\n })\r\n },\r\n \r\n goToFootprint() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/footprint'\r\n })\r\n },\r\n \r\n goToRefund() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/orders?type=refund'\r\n })\r\n },\r\n \r\n contactService() {\r\n uni.navigateTo({\r\n url: '/pages/mall/service/chat'\r\n })\r\n },\r\n goToOrderReviews() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/orders?type=review'\r\n })\r\n },\r\n goToMySubscriptions() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/subscription/my-subscriptions'\r\n })\r\n },\r\n goToFollowedShops() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/subscription/followed-shops'\r\n })\r\n },\r\n goToSubscriptions() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/subscription/plan-list'\r\n })\r\n },\r\n \r\n changePassword() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/change-password'\r\n })\r\n },\r\n \r\n bindPhone() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/bind-phone'\r\n })\r\n },\r\n \r\n bindEmail() {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/bind-email'\r\n })\r\n },\r\n \r\n // 处理订单更新事件\r\n handleOrderUpdated(data: any) {\r\n // 当收到订单更新事件时,刷新订单数据\r\n console.log('收到订单更新事件:', data)\r\n this.refreshData()\r\n \r\n // 显示提示\r\n if (data.status === 1) {\r\n uni.showToast({\r\n title: '订单已保存到待支付',\r\n icon: 'success'\r\n })\r\n } else if (data.status === 2) {\r\n uni.showToast({\r\n title: '支付成功,订单待发货',\r\n icon: 'success'\r\n })\r\n }\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n.consumer-profile {\r\n background-color: #f5f5f5;\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n/* 智能顶部导航栏 */\r\n.smart-navbar {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n background: linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%);\r\n z-index: 1000;\r\n box-shadow: 0 2px 12px rgba(76, 175, 80, 0.15);\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.nav-container {\r\n padding: 0 16px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n width: 100%;\r\n max-width: 1400px;\r\n margin: 0 auto;\r\n height: 44px;\r\n}\r\n\r\n/* 导航栏用户信息区域 */\r\n.nav-user-stats {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start; /* 靠左对齐,紧跟头像 */\r\n margin-right: 12px;\r\n overflow: hidden; /* 防止溢出 */\r\n}\r\n\r\n.nav-user-name {\r\n font-size: 16px;\r\n font-weight: bold;\r\n color: white;\r\n margin-right: 12px;\r\n /* max-width: 30%; REMOVED */\r\n width: 100px; /* Use fixed width approx */\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n.nav-stat-item {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n background: rgba(255, 255, 255, 0.2);\r\n border-radius: 12px;\r\n padding: 2px 8px;\r\n margin-right: 8px;\r\n flex-shrink: 0; /* 防止被压缩 */\r\n}\r\n\r\n.nav-stat-label {\r\n font-size: 11px;\r\n color: rgba(255, 255, 255, 0.9);\r\n margin-right: 4px;\r\n}\r\n\r\n.nav-stat-value {\r\n font-size: 12px;\r\n font-weight: bold;\r\n color: white;\r\n}\r\n\r\n.nav-avatar {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 18px;\r\n border: 2px solid rgba(255, 255, 255, 0.8);\r\n margin-right: 12px;\r\n flex-shrink: 0;\r\n}\r\n\r\n.nav-actions {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n flex-shrink: 0;\r\n}\r\n\r\n.action-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 32px;\r\n height: 32px;\r\n background: rgba(255, 255, 255, 0.2);\r\n border-radius: 16px;\r\n /* cursor: pointer; REMOVED */\r\n}\r\n\r\n.action-icon {\r\n font-size: 18px;\r\n color: white;\r\n}\r\n\r\n/* 导航栏占位符 */\r\n.navbar-placeholder {\r\n width: 100%;\r\n flex-shrink: 0;\r\n}\r\n\r\n.order-shortcuts, .recent-orders, .my-services, .consumption-stats, .account-security {\r\n background-color: #fff;\r\n margin: 15px 15px; /* 顶部恢复 margin */\r\n border-radius: 12px; /* 统一圆角 */\r\n padding: 20px;\r\n box-shadow: 0 2px 8px rgba(0,0,0,0.05);\r\n}\r\n\r\n.section-title {\r\n font-size: 16px;\r\n font-weight: bold;\r\n color: #333;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.order-tabs {\r\n display: flex;\r\n flex-direction: row; /* 显式横向排列 */\r\n justify-content: space-between;\r\n width: 100%;\r\n}\r\n\r\n.order-tab {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: row; /* 关键:改为横向排列 */\r\n align-items: center;\r\n justify-content: center; /* 居中 */\r\n position: relative;\r\n padding: 8px 0;\r\n}\r\n\r\n.tab-icon {\r\n font-size: 20px;\r\n margin-right: 6px; /* 图标和文字间距 */\r\n margin-bottom: 0; /* 移除底部间距 */\r\n}\r\n\r\n.tab-text {\r\n font-size: 14px;\r\n color: #333;\r\n}\r\n\r\n/* 选中状态的Tab */\r\n.order-tab.active .tab-icon,\r\n.order-tab.active .tab-text {\r\n color: #4CAF50;\r\n font-weight: bold;\r\n}\r\n\r\n.order-tab.active {\r\n background-color: #f0f9f0;\r\n border-radius: 8px;\r\n}\r\n\r\n.tab-badge {\r\n position: absolute;\r\n top: 0;\r\n right: 10%; /* 调整位置 */\r\n background-color: #ff4444;\r\n color: #fff;\r\n font-size: 10px;\r\n padding: 1px 5px;\r\n border-radius: 8px;\r\n min-width: 14px;\r\n text-align: center;\r\n line-height: 1.2;\r\n}\r\n\r\n.empty-orders {\r\n text-align: center;\r\n padding: 80rpx 0;\r\n}\r\n\r\n.empty-text {\r\n font-size: 28rpx;\r\n color: #999;\r\n margin-bottom: 30rpx;\r\n}\r\n\r\n.start-shopping {\r\n background-color: #007aff;\r\n color: #fff;\r\n padding: 20rpx 40rpx;\r\n border-radius: 25rpx;\r\n font-size: 26rpx;\r\n border: none;\r\n}\r\n\r\n.order-item {\r\n padding: 25rpx 0;\r\n border-bottom: 1rpx solid #f5f5f5;\r\n}\r\n\r\n.order-item:last-child {\r\n border-bottom: none;\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 margin-bottom: 15rpx;\r\n}\r\n\r\n.order-no {\r\n font-size: 26rpx;\r\n color: #333;\r\n}\r\n\r\n.order-status {\r\n font-size: 24rpx;\r\n padding: 6rpx 12rpx;\r\n border-radius: 10rpx;\r\n color: #fff;\r\n}\r\n\r\n.order-status.pending {\r\n background-color: #ffa726;\r\n}\r\n\r\n.order-status.processing {\r\n background-color: #2196f3;\r\n}\r\n\r\n.order-status.shipping {\r\n background-color: #9c27b0;\r\n}\r\n\r\n.order-status.completed {\r\n background-color: #4caf50;\r\n}\r\n\r\n.order-content {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 15rpx;\r\n}\r\n\r\n.order-image {\r\n width: 100rpx;\r\n height: 100rpx;\r\n border-radius: 8rpx;\r\n margin-right: 20rpx;\r\n}\r\n\r\n.order-info {\r\n flex: 1;\r\n}\r\n\r\n.order-title {\r\n font-size: 26rpx;\r\n color: #333;\r\n margin-bottom: 8rpx;\r\n}\r\n\r\n.order-amount {\r\n font-size: 28rpx;\r\n color: #ff4444;\r\n font-weight: bold;\r\n margin-bottom: 5rpx;\r\n}\r\n\r\n.order-time {\r\n font-size: 22rpx;\r\n color: #999;\r\n}\r\n\r\n.order-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n /* gap: 15rpx; REMOVED */\r\n}\r\n\r\n.order-actions .action-btn {\r\n margin-left: 15px; /* Replace gap */\r\n}\r\n\r\n.action-btn {\r\n padding: 12rpx 25rpx;\r\n border-radius: 20rpx;\r\n font-size: 24rpx;\r\n border: none;\r\n}\r\n\r\n.action-btn.pay {\r\n background-color: #ff4444;\r\n color: #fff;\r\n}\r\n\r\n.action-btn.confirm {\r\n background-color: #4caf50;\r\n color: #fff;\r\n}\r\n\r\n.action-btn.review {\r\n background-color: #ffa726;\r\n color: #fff;\r\n}\r\n\r\n.service-grid {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap; /* 允许换行 */\r\n /* gap: 16px 0; REMOVED */\r\n justify-content: flex-start; /* 从左开始排列 */\r\n}\r\n\r\n.service-item {\r\n width: 25%; /* 每行4个 */\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n position: relative;\r\n box-sizing: border-box; /* 确保 padding 不影响宽度 */\r\n margin-bottom: 16px; /* Replace gap row */\r\n}\r\n\r\n.service-icon {\r\n font-size: 48rpx;\r\n margin-bottom: 15rpx;\r\n}\r\n\r\n.service-text {\r\n font-size: 24rpx;\r\n color: #333;\r\n}\r\n\r\n.service-badge {\r\n position: absolute;\r\n top: -5rpx;\r\n right: 10rpx;\r\n background-color: #ff4444;\r\n color: #fff;\r\n font-size: 18rpx;\r\n padding: 4rpx 6rpx;\r\n border-radius: 8rpx;\r\n min-width: 24rpx;\r\n text-align: center;\r\n}\r\n\r\n.stats-period {\r\n display: flex;\r\n /* gap: 30rpx; REMOVED */\r\n margin-bottom: 30rpx;\r\n}\r\n\r\n.period-tab {\r\n font-size: 26rpx;\r\n color: #666;\r\n padding: 12rpx 24rpx;\r\n border-radius: 20rpx;\r\n margin-right: 30rpx; /* Replace gap */\r\n background-color: #f0f0f0;\r\n}\r\n\r\n.period-tab.active {\r\n background-color: #007aff;\r\n color: #fff;\r\n}\r\n\r\n.stats-content {\r\n display: flex;\r\n /* gap: 20rpx; REMOVED */\r\n}\r\n\r\n.stat-card {\r\n flex: 1;\r\n text-align: center;\r\n padding: 30rpx 0;\r\n background-color: #f8f9fa;\r\n border-radius: 10rpx;\r\n margin-right: 20rpx; /* Replace gap */\r\n}\r\n\r\n.stat-card:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.stat-value {\r\n font-size: 32rpx;\r\n font-weight: bold;\r\n color: #333;\r\n margin-bottom: 8rpx;\r\n}\r\n\r\n.stat-label {\r\n font-size: 22rpx;\r\n color: #666;\r\n}\r\n\r\n.security-items {\r\n margin-top: 25rpx;\r\n}\r\n\r\n.security-item {\r\n display: flex;\r\n align-items: center;\r\n padding: 25rpx 0;\r\n border-bottom: 1rpx solid #f5f5f5;\r\n}\r\n\r\n.security-item:last-child {\r\n border-bottom: none;\r\n}\r\n\r\n.security-icon {\r\n font-size: 32rpx;\r\n margin-right: 20rpx;\r\n}\r\n\r\n.security-text {\r\n flex: 1;\r\n font-size: 28rpx;\r\n color: #333;\r\n}\r\n\r\n.security-status {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.status-text {\r\n font-size: 24rpx;\r\n color: #999;\r\n margin-right: 10rpx;\r\n}\r\n\r\n.status-text.bound {\r\n color: #4caf50;\r\n}\r\n\r\n.security-arrow {\r\n font-size: 24rpx;\r\n color: #999;\r\n}\r\n</style>\r\n",null,null,null,null],"names":[],"mappings":"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"} |