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

1 line
49 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/messages.uvue","uni_modules/ak-req/ak-req.uts","pages/mall/consumer/index.uvue","pages/user/login.uvue","pages/user/center.uvue"],"sourcesContent":["<template>\r\n\t<view class=\"messages-page\">\r\n\t\t<!-- 智能顶部导航栏 - 与主页保持一致 -->\r\n\t\t<view class=\"smart-navbar\" :style=\"{ paddingTop: statusBarHeight + 'px' }\">\r\n\t\t\t<view class=\"nav-container\">\r\n\t\t\t\t<text class=\"nav-title\">消息中心</text>\r\n\t\t\t\t<view class=\"nav-actions\">\r\n\t\t\t\t\t<view class=\"action-btn\" @click=\"clearAllUnread\">\r\n\t\t\t\t\t\t<text class=\"action-icon\">🧹</text>\r\n\t\t\t\t\t\t<text class=\"action-text\">一键已读</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<!-- 导航栏占位符 -->\r\n\t\t<view class=\"navbar-placeholder\" :style=\"{ height: (statusBarHeight + 10) + 'px' }\"></view>\r\n\t\t\r\n\t\t<!-- 消息分类标签 - 固定在顶部,方便随时切换 -->\r\n\t\t<view class=\"tabs-container\">\r\n\t\t\t<view class=\"message-tabs\">\r\n\t\t\t\t<view \r\n\t\t\t\t\tv-for=\"tab in messageTabs\" \r\n\t\t\t\t\t:key=\"tab.id\"\r\n\t\t\t\t\t:class=\"['tab-item', { active: activeTab === tab.id }]\"\r\n\t\t\t\t\t@click=\"switchTab(tab.id)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<text class=\"tab-name\">{{ tab.name }}</text>\r\n\t\t\t\t\t<text v-if=\"tab.unread > 0\" class=\"tab-badge\">{{ tab.unread > 99 ? '99+' : tab.unread }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t\r\n\t\t<!-- 消息列表内容区 -->\r\n\t\t<scroll-view \r\n\t\t\tscroll-y \r\n\t\t\tclass=\"messages-content\"\r\n\t\t\trefresher-enabled\r\n\t\t\t:refresher-triggered=\"refreshing\"\r\n\t\t\t@refresherrefresh=\"onRefresh\"\r\n\t\t\t:scroll-top=\"scrollTop\"\r\n\t\t>\r\n\r\n\t\t\t<!-- 客服消息 -->\r\n\t\t\t<view v-if=\"activeTab === 'service'\" class=\"message-section\">\r\n\t\t\t\t<!-- 在线客服卡片 (hidden) -->\r\n\t\t\t\t<!-- <view class=\"customer-service-info\">\r\n\t\t\t\t\t<view class=\"service-header\">\r\n\t\t\t\t\t\t<text class=\"service-title\">康乐医药在线客服</text>\r\n\t\t\t\t\t\t<text class=\"service-status online\">在线</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<text class=\"service-desc\">专业医药顾问在线解答,服务时间 9:00-22:00</text>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<view class=\"service-categories\">\r\n\t\t\t\t\t\t<view class=\"category-item\" @click=\"startQuickService('用药咨询')\">\r\n\t\t\t\t\t\t\t<text class=\"category-icon\">💊</text>\r\n\t\t\t\t\t\t\t<text class=\"category-name\">用药咨询</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"category-item\" @click=\"startQuickService('处方咨询')\">\r\n\t\t\t\t\t\t\t<text class=\"category-icon\">📋</text>\r\n\t\t\t\t\t\t\t<text class=\"category-name\">处方咨询</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"category-item\" @click=\"startQuickService('副作用咨询')\">\r\n\t\t\t\t\t\t\t<text class=\"category-icon\">⚠️</text>\r\n\t\t\t\t\t\t\t<text class=\"category-name\">副作用咨询</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"category-item\" @click=\"startQuickService('药品配送')\">\r\n\t\t\t\t\t\t\t<text class=\"category-icon\">🚚</text>\r\n\t\t\t\t\t\t\t<text class=\"category-name\">药品配送</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view> -->\r\n\t\t\t\t\r\n\t\t\t\t<!-- 客服消息列表 -->\r\n\t\t\t\t<view \r\n\t\t\t\t\tv-for=\"message in serviceMessages\" \r\n\t\t\t\t\t:key=\"message.id\"\r\n\t\t\t\t\t:class=\"['message-item', { unread: !message.read, active: message.active }]\"\r\n\t\t\t\t\t@click=\"startChatWithService(message)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<view class=\"message-icon-wrapper\">\r\n\t\t\t\t\t\t<image \r\n\t\t\t\t\t\t\tv-if=\"message.avatar\" \r\n\t\t\t\t\t\t\tclass=\"message-avatar\" \r\n\t\t\t\t\t\t\t:src=\"message.avatar\" \r\n\t\t\t\t\t\t\tmode=\"aspectFill\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<view v-else class=\"message-icon-default\" :style=\"{ backgroundColor: message.color }\">\r\n\t\t\t\t\t\t\t<text class=\"message-icon-text\">{{ message.icon }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view v-if=\"message.online\" class=\"online-dot\"></view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"message-content\">\r\n\t\t\t\t\t\t<view class=\"message-header\">\r\n\t\t\t\t\t\t\t<view class=\"message-title-wrapper\">\r\n\t\t\t\t\t\t\t\t<text class=\"message-title\">{{ message.title }}</text>\r\n\t\t\t\t\t\t\t\t<text v-if=\"message.role\" class=\"message-role\">{{ message.role }}</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t<view class=\"message-header-right\">\r\n\t\t\t\t\t\t\t\t<text class=\"message-time\">{{ message.time }}</text>\r\n\t\t\t\t\t\t\t\t<text v-if=\"message.unreadCount > 0\" class=\"message-unread-count\">{{ message.unreadCount }}</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view class=\"message-preview-wrapper\">\r\n\t\t\t\t\t\t\t<text class=\"message-preview\">{{ message.content }}</text>\r\n\t\t\t\t\t\t\t<text v-if=\"message.lastMessage\" class=\"last-message\">{{ message.lastMessage }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<view v-if=\"message.tags\" class=\"message-tags\">\r\n\t\t\t\t\t\t\t<text v-for=\"tag in message.tags\" :key=\"tag\" class=\"message-tag\">{{ tag }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<!-- 客服系统提示 -->\r\n\t\t\t\t<view class=\"service-tips\">\r\n\t\t\t\t\t<text class=\"tip-icon\">💡</text>\r\n\t\t\t\t\t<text class=\"tip-text\">温馨提示:请勿相信任何要求转账、付款的信息,谨防诈骗</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 系统通知 -->\r\n\t\t\t<view v-if=\"activeTab === 'system'\" class=\"message-section\">\r\n\t\t\t\t<view \r\n\t\t\t\t\tv-for=\"message in systemMessages\" \r\n\t\t\t\t\t:key=\"message.id\"\r\n\t\t\t\t\t:class=\"['message-item', { unread: !message.read }]\"\r\n\t\t\t\t\t@click=\"viewSystemMessage(message)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<view class=\"message-icon-wrapper\">\r\n\t\t\t\t\t\t<text class=\"message-icon\">📢</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"message-content\">\r\n\t\t\t\t\t\t<view class=\"message-header\">\r\n\t\t\t\t\t\t\t<text class=\"message-title\">{{ message.title }}</text>\r\n\t\t\t\t\t\t\t<text class=\"message-time\">{{ message.time }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"message-preview\">{{ message.content }}</text>\r\n\t\t\t\t\t\t<view v-if=\"message.important\" class=\"important-tag\">重要</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 订单消息 -->\r\n\t\t\t<view v-if=\"activeTab === 'order'\" class=\"message-section\">\r\n\t\t\t\t<view \r\n\t\t\t\t\tv-for=\"message in orderMessages\" \r\n\t\t\t\t\t:key=\"message.id\"\r\n\t\t\t\t\t:class=\"['message-item', { unread: !message.read }]\"\r\n\t\t\t\t\t@click=\"viewOrderMessage(message)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<view class=\"message-icon-wrapper\">\r\n\t\t\t\t\t\t<text class=\"message-icon\">📦</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"message-content\">\r\n\t\t\t\t\t\t<view class=\"message-header\">\r\n\t\t\t\t\t\t\t<text class=\"message-title\">{{ message.title }}</text>\r\n\t\t\t\t\t\t\t<text class=\"message-time\">{{ message.time }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"message-preview\">{{ message.content }}</text>\r\n\t\t\t\t\t\t<text class=\"order-info\" v-if=\"message.order_no\">订单号: {{ message.order_no }}</text>\r\n\t\t\t\t\t\t<view v-if=\"message.status\" class=\"order-status\" :class=\"message.status\">\r\n\t\t\t\t\t\t\t{{ message.statusText }}\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 优惠活动 -->\r\n\t\t\t<view v-if=\"activeTab === 'promo'\" class=\"message-section\">\r\n\t\t\t\t<view \r\n\t\t\t\t\tv-for=\"message in promoMessages\" \r\n\t\t\t\t\t:key=\"message.id\"\r\n\t\t\t\t\t:class=\"['message-item', { unread: !message.read }]\"\r\n\t\t\t\t\t@click=\"viewPromoMessage(message)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<view class=\"message-icon-wrapper\">\r\n\t\t\t\t\t\t<text class=\"message-icon\">🎁</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"message-content\">\r\n\t\t\t\t\t\t<view class=\"message-header\">\r\n\t\t\t\t\t\t\t<text class=\"message-title\">{{ message.title }}</text>\r\n\t\t\t\t\t\t\t<text class=\"message-time\">{{ message.time }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"message-preview\">{{ message.content }}</text>\r\n\t\t\t\t\t\t<view v-if=\"message.coupon\" class=\"coupon-info\" @click.stop=\"claimCoupon(message)\">\r\n\t\t\t\t\t\t\t<text class=\"coupon-text\">{{ message.coupon }}优惠券</text>\r\n\t\t\t\t\t\t\t<text class=\"coupon-expiry\">有效期至 {{ message.expiry }}</text>\r\n\t\t\t\t\t\t\t<text class=\"coupon-action\">{{ message.claimed ? '已领取' : '点击领取' }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 空状态 -->\r\n\t\t\t<view v-if=\"!loading && currentMessages.length === 0 && activeTab !== 'service'\" class=\"empty-messages\">\r\n\t\t\t\t<text class=\"empty-icon\">💬</text>\r\n\t\t\t\t<text class=\"empty-title\">暂无消息</text>\r\n\t\t\t\t<text class=\"empty-desc\">暂时没有新消息</text>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 底部安全区域 -->\r\n\t\t\t<view class=\"safe-area\"></view>\r\n\t\t</scroll-view>\r\n\t\t\r\n\t\t<!-- 底部固定按钮 (Hidden) -->\r\n\t\t<!-- <view class=\"floating-action\">\r\n\t\t\t<button class=\"action-button\" @click=\"startNewChat\">\r\n\t\t\t\t<text class=\"button-icon\">✏️</text>\r\n\t\t\t\t<text class=\"button-text\">新建聊天</text>\r\n\t\t\t</button>\r\n\t\t</view> -->\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, reactive, computed, onMounted } from 'vue'\r\nimport { onShow } from '@dcloudio/uni-app'\r\nimport { supabaseService, type Notification, type ChatMessage, type ChatRoom } from '@/utils/supabaseService.uts'\r\n\r\n// 定义消息项类型\r\ntype MessageItem = {\r\n\tid: string,\r\n\ttitle: string,\r\n\tcontent: string,\r\n\ttime: string,\r\n\tread: boolean,\r\n\ttype: string,\r\n\tavatar: string | null,\r\n\timportant: boolean,\r\n\tcoupon: string,\r\n\texpiry: string,\r\n\tclaimed: boolean,\r\n\torder_no: string,\r\n\tstatus: string,\r\n\tstatusText: string,\r\n\trole: string,\r\n\tlastMessage: string,\r\n\tonline: boolean,\r\n\tunreadCount: number,\r\n\ttags: string[],\r\n\ticon: string,\r\n\tcolor: string,\r\n\tactive: boolean\r\n}\r\n\r\n// 定义标签类型\r\ntype MessageTab = {\r\n\tid: string,\r\n\tname: string,\r\n\tunread: number\r\n}\r\n\r\n// 响应式数据\r\nconst activeTab = ref<string>('service')\r\nconst refreshing = ref<boolean>(false)\r\nconst loading = ref<boolean>(false)\r\nconst unreadCount = ref<number>(12)\r\nconst statusBarHeight = ref(0)\r\nconst scrollTop = ref(0)\r\nconst scrollHeight = ref(0)\r\n\r\n// 消息分类标签\r\nconst messageTabs = reactive<MessageTab[]>([\r\n\t{ id: 'service', name: '客服消息', unread: 5 },\r\n\t{ id: 'system', name: '系统通知', unread: 3 },\r\n\t{ id: 'order', name: '订单消息', unread: 2 },\r\n\t{ id: 'promo', name: '优惠活动', unread: 2 }\r\n])\r\n\r\n// 消息数据\r\nconst serviceMessages = reactive<MessageItem[]>([])\r\nconst systemMessages = reactive<MessageItem[]>([])\r\nconst orderMessages = reactive<MessageItem[]>([])\r\nconst promoMessages = reactive<MessageItem[]>([])\r\n\r\n// 计算当前显示的消息\r\nconst currentMessages = computed<MessageItem[]>(() => {\r\n\tswitch (activeTab.value) {\r\n\t\tcase 'system': return systemMessages\r\n\t\tcase 'order': return orderMessages\r\n\t\tcase 'service': return serviceMessages\r\n\t\tcase 'promo': return promoMessages\r\n\t\tdefault: return []\r\n\t}\r\n})\r\n\r\n// 简单的日期格式化\r\nconst formatTime = (isoString: string): string => {\r\n if (isoString == '') return ''\r\n try {\r\n return isoString.split('T')[0]\r\n } catch(e) {\r\n return isoString\r\n }\r\n}\r\n\r\n// 更新未读数量 - 必须在 loadMessages 之前定义\r\nconst updateUnreadCount = () => {\r\n\tlet totalUnread = 0\r\n\t\r\n\tlet serviceUnread = 0\r\n\tserviceMessages.forEach((msg: MessageItem) => {\r\n\t\tif (!msg.read) serviceUnread++\r\n\t})\r\n\tmessageTabs[0].unread = serviceUnread\r\n\ttotalUnread += serviceUnread\r\n\t\r\n\tlet systemUnread = 0\r\n\tsystemMessages.forEach((msg: MessageItem) => {\r\n\t\tif (!msg.read) systemUnread++\r\n\t})\r\n\tmessageTabs[1].unread = systemUnread\r\n\ttotalUnread += systemUnread\r\n\t\r\n\tlet orderUnread = 0\r\n\torderMessages.forEach((msg: MessageItem) => {\r\n\t\tif (!msg.read) orderUnread++\r\n\t})\r\n\tmessageTabs[2].unread = orderUnread\r\n\ttotalUnread += orderUnread\r\n\t\r\n\tlet promoUnread = 0\r\n\tpromoMessages.forEach((msg: MessageItem) => {\r\n\t\tif (!msg.read) promoUnread++\r\n\t})\r\n\tmessageTabs[3].unread = promoUnread\r\n\ttotalUnread += promoUnread\r\n\t\r\n\tunreadCount.value = totalUnread\r\n}\r\n\r\n// 初始化页面布局数据\r\nconst initPage = () => {\r\n\tconst systemInfo = uni.getSystemInfoSync()\r\n\tstatusBarHeight.value = systemInfo.statusBarHeight\r\n\t\r\n\tconst windowHeight = systemInfo.windowHeight\r\n\tscrollHeight.value = windowHeight - statusBarHeight.value - 44 - 42\r\n}\r\n\r\n// 加载消息函数 - 必须在 updateUnreadCount 之后定义\r\nconst loadMessages = async () => {\r\n\tloading.value = true\r\n\t\r\n try {\r\n // 清空现有数据\r\n serviceMessages.length = 0\r\n systemMessages.length = 0\r\n orderMessages.length = 0\r\n promoMessages.length = 0\r\n\r\n // 1. 获取通知 (系统、订单、优惠)\r\n const notes = await supabaseService.getUserNotifications()\r\n \r\n notes.forEach((note: Notification) => {\r\n const item: MessageItem = {\r\n id: note.id,\r\n title: note.title,\r\n content: note.content,\r\n time: formatTime(note.created_at ?? ''),\r\n read: note.is_read,\r\n type: note.type,\r\n avatar: note.icon_url,\r\n important: note.type === 'system',\r\n coupon: '点击查看',\r\n expiry: '',\r\n claimed: false,\r\n order_no: '',\r\n status: '',\r\n statusText: '',\r\n role: '',\r\n lastMessage: '',\r\n online: false,\r\n unreadCount: 0,\r\n tags: [] as string[],\r\n icon: '',\r\n color: '',\r\n\t\t\t\tactive: false\r\n }\r\n\r\n if (note.type === 'system') {\r\n systemMessages.push(item)\r\n } else if (note.type === 'order') {\r\n orderMessages.push(item)\r\n } else if (note.type === 'promotion') {\r\n item.type = 'promo'\r\n promoMessages.push(item)\r\n }\r\n })\r\n\r\n // 2. 获取客服消息 (Chat)\r\n const rooms = await supabaseService.getChatRooms()\r\n rooms.forEach((room: ChatRoom) => {\r\n const msgItem: MessageItem = {\r\n id: room.merchant_id,\r\n title: room.shop_name,\r\n role: '商家客服',\r\n content: room.last_message ?? '暂无消息',\r\n lastMessage: room.last_message ?? '暂无消息',\r\n time: formatTime(room.last_message_at ?? ''),\r\n read: room.unread_count === 0,\r\n type: 'service',\r\n avatar: room.shop_logo ?? '/static/icons/shop-default.png',\r\n online: true,\r\n unreadCount: room.unread_count,\r\n tags: [] as string[],\r\n icon: '🏪',\r\n color: '#FF9800',\r\n important: false,\r\n coupon: '',\r\n expiry: '',\r\n claimed: false,\r\n order_no: '',\r\n status: '',\r\n statusText: '',\r\n\t\t\t\tactive: false\r\n }\r\n serviceMessages.push(msgItem)\r\n })\r\n\t\t\r\n\t\t// 如果没有消息,添加默认客服\r\n\t\tif (serviceMessages.length === 0) {\r\n const defaultService: MessageItem = {\r\n id: 'default_service',\r\n title: '平台客服',\r\n role: '智能助手',\r\n content: '有问题请随时联系我们',\r\n lastMessage: '欢迎咨询',\r\n time: '刚刚',\r\n read: true,\r\n type: 'service',\r\n avatar: '/static/icons/service-avatar.png',\r\n online: true,\r\n unreadCount: 0,\r\n tags: ['自动回复'],\r\n icon: '🤖',\r\n color: '#2196F3',\r\n important: false,\r\n coupon: '',\r\n expiry: '',\r\n claimed: false,\r\n order_no: '',\r\n status: '',\r\n statusText: '',\r\n\t\t\t\tactive: false\r\n }\r\n serviceMessages.push(defaultService)\r\n }\r\n \r\n } catch (e) {\r\n console.error('加载消息失败', e)\r\n } finally {\r\n\t\tupdateUnreadCount()\r\n\t\tloading.value = false\r\n }\r\n}\r\n\r\n// 生命周期钩子\r\nonMounted(() => {\r\n\tconsole.log('Messages Page Mounted')\r\n\tinitPage()\r\n})\r\n\r\nonShow(() => {\r\n console.log('Messages Page Show')\r\n loadMessages()\r\n})\r\n\r\n// 切换标签\r\nconst switchTab = (tabId: string) => {\r\n\tactiveTab.value = tabId\r\n\t// 切换标签时回到顶部,使用微小变化触发滚动更新\r\n\tscrollTop.value = scrollTop.value === 0 ? 0.01 : 0\r\n}\r\n\r\n// 开始与客服聊天\r\nconst startChatWithService = (message: MessageItem) => {\r\n\tmessage.read = true\r\n\tmessage.unreadCount = 0\r\n\tupdateUnreadCount()\r\n\t\r\n // 这里的 message.id 已经被我们修改为 conversation partner (merchantId)\r\n // 所以参数传递需要调整\r\n const merchantId = message.id === 'default_service' ? '' : message.id\r\n \r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/chat?merchantId=${merchantId}&merchantName=${encodeURIComponent(message.title)}`\r\n\t})\r\n}\r\n\r\n// 快速开始服务\r\nconst startQuickService = (category: string) => {\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/chat?category=${encodeURIComponent(category)}`\r\n\t})\r\n}\r\n\r\n// 新建聊天\r\nconst startNewChat = () => {\r\n\tuni.showActionSheet({\r\n\t\titemList: ['用药咨询', '处方咨询', '副作用咨询', '药品配送', '其他问题'],\r\n\t\tsuccess: (res) => {\r\n\t\t\tconst categories = ['用药咨询', '处方咨询', '副作用咨询', '药品配送', '其他问题']\r\n\t\t\tconst category = categories[res.tapIndex]\r\n\t\t\tstartQuickService(category)\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 查看系统消息\r\nconst viewSystemMessage = (message: MessageItem) => {\r\n\tmessage.read = true\r\n\tupdateUnreadCount()\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/message-detail?id=${message.id}&type=system`\r\n\t})\r\n}\r\n\r\n// 查看订单消息\r\nconst viewOrderMessage = (message: MessageItem) => {\r\n\tmessage.read = true\r\n\tupdateUnreadCount()\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/order-detail?id=${message.order_no}`\r\n\t})\r\n}\r\n\r\n// 查看优惠活动\r\nconst viewPromoMessage = (message: MessageItem) => {\r\n\tmessage.read = true\r\n\tupdateUnreadCount()\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/coupons`\r\n\t})\r\n}\r\n\r\n// 领取优惠券\r\nconst claimCoupon = (message: MessageItem) => {\r\n\tif (message.claimed) {\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '您已领取该优惠券',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t\treturn\r\n\t}\r\n\t\r\n\tmessage.claimed = true\r\n\t// 保存领取状态到本地存储,供个人页读取\r\n\tconst claimedCouponsCount = uni.getStorageSync('claimedCoupons')\r\n const count = (claimedCouponsCount != null) ? (claimedCouponsCount as number) : 0\r\n\tuni.setStorageSync('claimedCoupons', count + 1)\r\n\t\r\n\t// 保存详细的优惠券信息到 myCoupons 列表\r\n\tconst myCoupons = uni.getStorageSync('myCoupons')\r\n\tlet couponsList: any[] = []\r\n\tif (myCoupons != null) {\r\n\t\ttry {\r\n\t\t\tcouponsList = JSON.parse(myCoupons as string) as any[]\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error('Failed to parse myCoupons', e)\r\n\t\t}\r\n\t}\r\n\t\r\n\tcouponsList.push({\r\n\t\ttitle: message.title,\r\n\t\tamount: message.coupon,\r\n\t\texpiry: message.expiry,\r\n\t\tid: message.id\r\n\t})\r\n\tuni.setStorageSync('myCoupons', JSON.stringify(couponsList))\r\n\t\r\n\tuni.showToast({\r\n\t\ttitle: '领取成功',\r\n\t\ticon: 'success'\r\n\t})\r\n}\r\n\r\n// 清除所有未读\r\nconst clearAllUnread = () => {\r\n\tuni.showModal({\r\n\t\ttitle: '确认操作',\r\n\t\tcontent: '确定要标记所有消息为已读吗?',\r\n\t\tsuccess: (res) => {\r\n\t\t\tif (res.confirm) {\r\n\t\t\t\tserviceMessages.forEach((msg: MessageItem) => {\r\n\t\t\t\t\tmsg.read = true\r\n\t\t\t\t\tmsg.unreadCount = 0\r\n\t\t\t\t})\r\n\t\t\t\tsystemMessages.forEach((msg: MessageItem) => {\r\n\t\t\t\t\tmsg.read = true\r\n\t\t\t\t})\r\n\t\t\t\torderMessages.forEach((msg: MessageItem) => {\r\n\t\t\t\t\tmsg.read = true\r\n\t\t\t\t})\r\n\t\t\t\tpromoMessages.forEach((msg: MessageItem) => {\r\n\t\t\t\t\tmsg.read = true\r\n\t\t\t\t})\r\n\t\t\t\t\r\n\t\t\t\tmessageTabs.forEach((tab: MessageTab) => {\r\n\t\t\t\t\ttab.unread = 0\r\n\t\t\t\t})\r\n\t\t\t\tunreadCount.value = 0\r\n\t\t\t\t\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '已标记所有消息为已读',\r\n\t\t\t\t\ticon: 'success'\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 下拉刷新\r\nconst onRefresh = () => {\r\n\trefreshing.value = true\r\n\tsetTimeout(() => {\r\n\t\tloadMessages()\r\n\t\trefreshing.value = false\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '刷新成功',\r\n\t\t\ticon: 'success'\r\n\t\t})\r\n\t}, 1000)\r\n}\r\n</script>\r\n\r\n<style>\r\n/* 页面结构优化 - 避免双滚动条 */\r\n.messages-page {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tbackground-color: #f8fafc;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden; /* 关键防止body滚动 */\r\n}\r\n\r\n/* 智能导航栏 */\r\n.smart-navbar {\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tbackground: linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%);\r\n\tz-index: 1000;\r\n\tbox-shadow: 0 2px 12px rgba(76, 175, 80, 0.15);\r\n\t/* height: 50px; 移除固定高度,由内容决定 */\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* 显式设置行方向 */\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tflex-shrink: 0; /* 防止被压缩 */\r\n}\r\n\r\n.nav-container {\r\n\tpadding: 0 16px;\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* 关键修复UVUE默认是column必须显式设置为row才能横向排列 */\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n\twidth: 100%;\r\n\tmax-width: 1400px;\r\n\tmargin: 0 auto;\r\n\theight: 44px; /* 调整为标准高度 44px */\r\n}\r\n\r\n.nav-title {\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\tcolor: white;\r\n\tflex: 1; /* 自适应宽度 */\r\n}\r\n\r\n.nav-actions {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* 显式设置行方向 */\r\n\talign-items: center;\r\n}\r\n\r\n.action-btn {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* 显式设置行方向 */\r\n\talign-items: center;\r\n\tbackground: rgba(255, 255, 255, 0.2);\r\n\tpadding: 4px 12px;\r\n\tborder-radius: 20px;\r\n\t/* cursor: pointer; removed for uniapp-x support */\r\n\ttransition: all 0.2s ease;\r\n}\r\n\r\n.action-btn:hover {\r\n\tbackground: rgba(255, 255, 255, 0.3);\r\n}\r\n\r\n.action-icon {\r\n\tfont-size: 14px;\r\n\tmargin-right: 4px;\r\n}\r\n\r\n.action-text {\r\n\tfont-size: 12px;\r\n\tcolor: white;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 导航栏占位符 */\r\n.navbar-placeholder {\r\n\twidth: 100%;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n/* 消息分类标签容器 */\r\n.tabs-container {\r\n\tbackground: white;\r\n\tpadding: 0 10px;\r\n\tborder-bottom: 1px solid #e0e0e0;\r\n\tbox-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\r\n\tz-index: 900;\r\n\theight: 42px; /* 减小高度,更紧凑 */\r\n\tflex-shrink: 0;\r\n}\r\n\r\n.message-tabs {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* 横向排列 */\r\n\theight: 100%;\r\n\t/* overflow-x: auto; 移除自动滚动,改为自适应宽度 */\r\n\tmax-width: 1400px;\r\n\tmargin: 0 auto;\r\n\t/* gap: 4px; removed for uniapp-x support */\r\n\tjustify-content: space-between; /* 均匀分布 */\r\n}\r\n\r\n.message-tabs::-webkit-scrollbar {\r\n\tdisplay: none;\r\n}\r\n\r\n.tab-item {\r\n\tpadding: 0 4px;\r\n\tmargin: 0 2px; /* replaced gap */\r\n\tdisplay: flex; /* 改为 flex 布局 */\r\n\tflex-direction: row; /* 关键:横向排列 文字和数字 */\r\n\talign-items: center; /* 垂直居中 */\r\n\tjustify-content: center;\r\n\tposition: relative;\r\n\theight: 100%;\r\n\tborder-bottom: 3px solid transparent;\r\n\ttransition: all 0.3s ease;\r\n\twhite-space: nowrap; /* 防止换行 */\r\n\tflex: 1; /* 关键:均分宽度,消除滚动条 */\r\n\tmin-width: 0; /* 允许压缩 */\r\n}\r\n\r\n.tab-item.active {\r\n\tcolor: #4CAF50;\r\n\tborder-bottom-color: #4CAF50;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.tab-name {\r\n\tfont-size: 14px; /* 微调字体大小适配小屏 */\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n}\r\n\r\n/* 徽标样式优化 - 放在文字右边 */\r\n.tab-badge {\r\n\tbackground-color: #FF5722;\r\n\tcolor: white;\r\n\tfont-size: 10px;\r\n\tpadding: 1px 5px;\r\n\tborder-radius: 10px;\r\n\tmin-width: 16px;\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n\tmargin-left: 4px; /* 距离文字的间距 */\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\theight: 16px;\r\n}\r\n\r\n/* 消息内容区 */\r\n.messages-content {\r\n\tflex: 1; /* 关键:自适应剩余高度 */\r\n\theight: 0; /* 关键强制flex item计算高度 */\r\n\twidth: 100%;\r\n\tmax-width: 1400px;\r\n\tmargin: 0 auto;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n/* 客服信息区域 */\r\n.customer-service-info {\r\n\tbackground: white;\r\n\tborder-radius: 12px;\r\n\tpadding: 20px;\r\n\tmargin: 15px;\r\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n}\r\n\r\n.service-header {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.service-title {\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\tcolor: #333;\r\n}\r\n\r\n.service-status {\r\n\tfont-size: 12px;\r\n\tpadding: 4px 10px;\r\n\tborder-radius: 12px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.service-status.online {\r\n\tbackground: #E8F5E9;\r\n\tcolor: #4CAF50;\r\n}\r\n\r\n.service-desc {\r\n\tfont-size: 14px;\r\n\tcolor: #666;\r\n\tline-height: 1.5;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.service-categories {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex-wrap: wrap; /* allow wrapping to simulate grid */\r\n\t/* grid-template-columns: repeat(2, 1fr); REMOVED */\r\n\t/* gap: 12px; removed for uniapp-x support */\r\n padding: 6px; /* compensated padding */\r\n}\r\n\r\n.category-item {\r\n\tbackground: #f8f9fa;\r\n\tborder-radius: 10px;\r\n\tpadding: 15px;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\t/* cursor: pointer; removed for uniapp-x support */\r\n\ttransition: all 0.3s ease;\r\n margin: 1%; /* replaced gap */\r\n width: 48%; /* 2 columns */\r\n}\r\n\r\n.category-item:hover {\r\n\tbackground: #e8f5e9;\r\n\ttransform: translateY(-2px);\r\n\tbox-shadow: 0 4px 8px rgba(76, 175, 80, 0.2);\r\n}\r\n\r\n.category-icon {\r\n\tfont-size: 24px;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.category-name {\r\n\tfont-size: 13px;\r\n\tcolor: #333;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 消息项 */\r\n.message-section {\r\n\tpadding: 10px;\r\n}\r\n\r\n.message-item {\r\n\tbackground-color: white;\r\n\tborder-radius: 12px;\r\n\tpadding: 15px;\r\n\tmargin-bottom: 10px;\r\n\tdisplay: flex;\r\n\talign-items: flex-start;\r\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n\ttransition: all 0.3s ease;\r\n\t/* cursor: pointer; removed for uniapp-x support */\r\n}\r\n\r\n.message-item:hover {\r\n\ttransform: translateY(-2px);\r\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\r\n}\r\n\r\n.message-item.unread {\r\n\tbackground-color: #f0f9f0;\r\n\tborder-left: 3px solid #4CAF50;\r\n}\r\n\r\n.message-item.active {\r\n\tborder: 1px solid #4CAF50;\r\n}\r\n\r\n.message-icon-wrapper {\r\n\twidth: 50px;\r\n\theight: 50px;\r\n\tborder-radius: 25px;\r\n\tbackground-color: #f5f5f5;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tmargin-right: 15px;\r\n\tflex-shrink: 0;\r\n\tposition: relative;\r\n}\r\n\r\n.message-icon-default {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tborder-radius: 25px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.message-icon-text {\r\n\tfont-size: 24px;\r\n\tcolor: white;\r\n}\r\n\r\n.message-avatar {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tborder-radius: 25px;\r\n}\r\n\r\n.online-dot {\r\n\tposition: absolute;\r\n\tbottom: 2px;\r\n\tright: 2px;\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\tbackground-color: #4CAF50;\r\n\tborder-radius: 6px;\r\n\tborder: 2px solid white;\r\n}\r\n\r\n.message-content {\r\n\tflex: 1;\r\n\tmin-width: 0;\r\n}\r\n\r\n.message-header {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: flex-start;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.message-title-wrapper {\r\n\tflex: 1;\r\n\tmin-width: 0;\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.message-title {\r\n\tfont-size: 16px;\r\n\tcolor: #333;\r\n\tfont-weight: bold;\r\n\t/* display: block; REMOVED for uniapp-x support */\r\n\tmargin-bottom: 4px;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n}\r\n\r\n.message-role {\r\n\tfont-size: 12px;\r\n\tcolor: #4CAF50;\r\n\tbackground: #E8F5E9;\r\n\tpadding: 2px 8px;\r\n\tborder-radius: 10px;\r\n\t/* display: inline-block; REMOVED for uniapp-x support */\r\n}\r\n\r\n.message-header-right {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: flex-end;\r\n\t/* gap: 4px; removed for uniapp-x support */\r\n}\r\n\r\n.message-time {\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n\twhite-space: nowrap;\r\n margin-bottom: 4px; /* replaced gap */\r\n}\r\n\r\n.message-unread-count {\r\n\tfont-size: 11px;\r\n\tcolor: white;\r\n\tbackground: #FF5722;\r\n\tpadding: 2px 6px;\r\n\tborder-radius: 10px;\r\n\tmin-width: 18px;\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.message-preview-wrapper {\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.message-preview {\r\n\tfont-size: 14px;\r\n\tcolor: #666;\r\n\tline-height: 1.4;\r\n\tmargin-bottom: 4px;\r\n\t/* display: -webkit-box; REMOVED for uniapp-x support */\r\n\t/* -webkit-line-clamp: 2; REMOVED for uniapp-x support */\r\n\t/* -webkit-box-orient: vertical; REMOVED for uniapp-x support */\r\n lines: 2; /* UTS text truncation */\r\n\toverflow: hidden;\r\n text-overflow: ellipsis; /* Ensure standard CSS property is present */\r\n}\r\n\r\n.last-message {\r\n\tfont-size: 13px;\r\n\tcolor: #999;\r\n\t/* display: block; REMOVED for uniapp-x support */\r\n}\r\n\r\n.message-tags {\r\n\tdisplay: flex;\r\n\t/* gap: 6px; removed for uniapp-x support */\r\n\tflex-wrap: wrap;\r\n}\r\n\r\n.message-tag {\r\n\tfont-size: 11px;\r\n\tcolor: #666;\r\n\tbackground: #f0f0f0;\r\n\tpadding: 3px 8px;\r\n\tborder-radius: 10px;\r\n margin-right: 6px; /* replaced gap */\r\n margin-bottom: 4px; /* for wrapping */\r\n}\r\n\r\n.order-info {\r\n\tfont-size: 12px;\r\n\tcolor: #4CAF50;\r\n\tbackground-color: #E8F5E9;\r\n\tpadding: 4px 10px;\r\n\tborder-radius: 4px;\r\n\t/* display: inline-block; REMOVED for uniapp-x support */\r\n\tmargin-top: 8px;\r\n align-self: flex-start; /* Ensure it doesn't stretch */\r\n}\r\n\r\n.order-status {\r\n\t/* display: inline-block; REMOVED for uniapp-x support */\r\n\tfont-size: 12px;\r\n\tpadding: 4px 10px;\r\n\tborder-radius: 12px;\r\n\tmargin-top: 8px;\r\n\tmargin-left: 8px;\r\n align-self: flex-start; /* Ensure it doesn't stretch */\r\n}\r\n\r\n.order-status.shipping {\r\n\tbackground: #E3F2FD;\r\n\tcolor: #2196F3;\r\n}\r\n\r\n.order-status.processing {\r\n\tbackground: #FFF3E0;\r\n\tcolor: #FF9800;\r\n}\r\n\r\n.order-status.completed {\r\n\tbackground: #E8F5E9;\r\n\tcolor: #4CAF50;\r\n}\r\n\r\n.important-tag {\r\n\t/* display: inline-block; REMOVED for uniapp-x support */\r\n\tbackground-color: #FF5722;\r\n\tcolor: white;\r\n\tfont-size: 11px;\r\n\tpadding: 3px 8px;\r\n\tborder-radius: 10px;\r\n\tmargin-top: 8px;\r\n align-self: flex-start; /* Ensure it doesn't stretch */\r\n}\r\n\r\n.coupon-info {\r\n\tbackground: linear-gradient(135deg, #FF9800, #FF5722);\r\n\tborder-radius: 8px;\r\n\tpadding: 10px;\r\n\tmargin-top: 8px;\r\n\tcolor: white;\r\n}\r\n\r\n.coupon-text {\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\t/* display: block; REMOVED for uniapp-x support */\r\n\tmargin-bottom: 4px;\r\n}\r\n\r\n.coupon-expiry {\r\n\tfont-size: 12px;\r\n\topacity: 0.9;\r\n}\r\n\r\n.coupon-action {\r\n\tfont-size: 12px;\r\n\tcolor: #fff;\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\r\n\tpadding: 2px 8px;\r\n\tborder-radius: 10px;\r\n\tmargin-top: 4px;\r\n\talign-self: flex-start;\r\n}\r\n\r\n/* 客服系统提示 */\r\n.service-tips {\r\n\tbackground: #FFF3E0;\r\n\tborder-radius: 10px;\r\n\tpadding: 15px;\r\n\tmargin: 15px;\r\n\tdisplay: flex;\r\n\talign-items: flex-start;\r\n\t/* gap: 10px; removed for uniapp-x support */\r\n}\r\n\r\n.tip-icon {\r\n\tfont-size: 18px;\r\n\tcolor: #FF9800;\r\n\tflex-shrink: 0;\r\n\tmargin-top: 2px;\r\n margin-right: 10px; /* replaced gap */\r\n}\r\n\r\n.tip-text {\r\n\tfont-size: 13px;\r\n\tcolor: #666;\r\n\tline-height: 1.5;\r\n}\r\n\r\n/* 空状态 */\r\n.empty-messages {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tpadding: 80px 20px;\r\n\ttext-align: center;\r\n}\r\n\r\n.empty-icon {\r\n\tfont-size: 80px;\r\n\tcolor: #ddd;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.empty-title {\r\n\tfont-size: 18px;\r\n\tcolor: #666;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.empty-desc {\r\n\tfont-size: 14px;\r\n\tcolor: #999;\r\n}\r\n\r\n/* 底部浮动按钮 */\r\n.floating-action {\r\n\tposition: fixed;\r\n\tbottom: 20px;\r\n\tright: 20px;\r\n\tz-index: 100;\r\n}\r\n\r\n.action-button {\r\n\tbackground: linear-gradient(135deg, #4CAF50, #2E7D32);\r\n\tcolor: white;\r\n\tborder: none;\r\n\tborder-radius: 25px;\r\n\tpadding: 12px 20px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tbox-shadow: 0 4px 12px rgba(76, 175, 80, 0.3);\r\n\tfont-weight: bold;\r\n}\r\n\r\n.button-icon {\r\n\tfont-size: 18px;\r\n\tmargin-right: 8px;\r\n}\r\n\r\n.button-text {\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.safe-area {\r\n\theight: 80px;\r\n}\r\n\r\n/* 响应式适配 */\r\n@media screen and (max-width: 320px) {\r\n\t.tab-name {\r\n\t\tfont-size: 13px;\r\n\t}\r\n\t\r\n\t.service-categories {\r\n /* grid-template-columns: 1fr; REMOVED */\r\n\t}\r\n \r\n .category-item {\r\n width: 100%; /* 1 column */\r\n }\r\n}\r\n\r\n@media screen and (min-width: 415px) {\r\n\t.message-item {\r\n\t\tpadding: 20px;\r\n\t}\r\n\t\r\n\t.message-icon-wrapper {\r\n\t\twidth: 60px;\r\n\t\theight: 60px;\r\n\t\tborder-radius: 30px;\r\n\t}\r\n\t\r\n\t.message-icon-text {\r\n\t\tfont-size: 28px;\r\n\t}\r\n\t\r\n\t.customer-service-info {\r\n\t\tpadding: 25px;\r\n\t}\r\n\t\r\n\t.service-categories {\r\n\t\t/* grid-template-columns: repeat(4, 1fr); REMOVED */\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\tflex-wrap: wrap;\r\n\t}\r\n\t\r\n\t.service-categories .category-item {\r\n\t\twidth: 25%;\r\n\t}\r\n\r\n\t/* 平板和桌面端优化标签栏显示 */\r\n\t.message-tabs {\r\n\t\tjustify-content: flex-start; /* 左对齐 */\r\n\t}\r\n\t\r\n\t.tab-item {\r\n\t\tpadding: 0 24px; /* 增加点击区域 */\r\n\t}\r\n}\r\n\r\n/* 平板设备 */\r\n@media screen and (min-width: 768px) {\r\n\t.smart-navbar {\r\n\t\tpadding: 0 30px;\r\n\t}\r\n\t\r\n\t.tabs-container {\r\n\t\tpadding: 0 30px;\r\n\t}\r\n\t\r\n\t.message-section {\r\n\t\tpadding: 20px 30px;\r\n\t}\r\n\t\r\n\t.customer-service-info {\r\n\t\tmargin: 20px 30px;\r\n\t}\r\n\t\r\n\t.service-tips {\r\n\t\tmargin: 20px 30px;\r\n\t}\r\n}\r\n\r\n/* 暗黑模式适配 */\r\n@media (prefers-color-scheme: dark) {\r\n\t.messages-page {\r\n\t\tbackground-color: #121212;\r\n\t}\r\n\t\r\n\t.smart-navbar {\r\n\t\tbackground: linear-gradient(135deg, #2E7D32 0%, #1B5E20 100%);\r\n\t}\r\n\t\r\n\t.tabs-container {\r\n\t\tbackground-color: #1e1e1e;\r\n\t\tborder-bottom-color: #333;\r\n\t}\r\n\t\r\n\t.tab-item.active {\r\n\t\tcolor: #4CAF50;\r\n\t}\r\n\t\r\n\t.customer-service-info,\r\n\t.message-item,\r\n\t.service-tips {\r\n\t\tbackground-color: #1e1e1e;\r\n\t}\r\n\t\r\n\t.message-item.unread {\r\n\t\tbackground-color: #2d2d2d;\r\n\t}\r\n\t\r\n\t.category-item {\r\n\t\tbackground: #2d2d2d;\r\n\t}\r\n\t\r\n\t.category-name {\r\n\t\tcolor: #fff;\r\n\t}\r\n\t\r\n\t.service-title,\r\n\t.message-title {\r\n\t\tcolor: #fff;\r\n\t}\r\n\t\r\n\t.service-desc,\r\n\t.message-preview,\r\n\t.last-message,\r\n\t.tip-text {\r\n\t\tcolor: #aaa;\r\n\t}\r\n\t\r\n\t.message-icon-wrapper {\r\n\t\tbackground-color: #2d2d2d;\r\n\t}\r\n\t\r\n\t.order-info {\r\n\t\tbackground-color: #1b5e20;\r\n\t\tcolor: #a5d6a7;\r\n\t}\r\n\t\r\n\t.coupon-info {\r\n\t\tbackground: linear-gradient(135deg, #ff8f00, #ef6c00);\r\n\t}\r\n\t\r\n\t.message-tag {\r\n\t\tbackground: #333;\r\n\t\tcolor: #ccc;\r\n\t}\r\n\t\r\n\t.action-btn {\r\n\t\tbackground: rgba(255, 255, 255, 0.1);\r\n\t}\r\n\t\r\n\t.action-btn:hover {\r\n\t\tbackground: rgba(255, 255, 255, 0.2);\r\n\t}\r\n}\r\n</style>\r\n",null,null,null,null],"names":[],"mappings":"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"}