1 line
11 KiB
Plaintext
1 line
11 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/red-packets/index.uvue","pages/user/login.uvue"],"sourcesContent":["<template>\r\n <view class=\"red-packets-page\">\r\n <view class=\"tab-header\" style=\"position: fixed; top: 0; left: 0; right: 0; z-index: 10;\">\r\n <text \r\n class=\"tab-item\" \r\n :class=\"{ active: currentTab === 0 }\" \r\n @click=\"currentTab = 0\">未使用</text>\r\n <text \r\n class=\"tab-item\" \r\n :class=\"{ active: currentTab === 1 }\" \r\n @click=\"currentTab = 1\">已使用/过期</text>\r\n </view>\r\n\r\n <view v-if=\"loading\" class=\"loading-state\">\r\n <text>加载中...</text>\r\n </view>\r\n\r\n <scroll-view v-else class=\"packet-list\" scroll-y>\r\n <view v-if=\"filteredPackets.length === 0\" class=\"empty-state\">\r\n <text class=\"empty-text\">暂无相关红包</text>\r\n </view>\r\n <view v-else v-for=\"item in filteredPackets\" :key=\"item.id\" class=\"packet-item\" :class=\"{ disabled: item.status !== 0 }\">\r\n <view class=\"packet-left\">\r\n <text class=\"packet-amount\">¥<text class=\"amount-num\">{{ item.amount }}</text></text>\r\n <text class=\"packet-condition\">无门槛</text>\r\n </view>\r\n <view class=\"packet-right\">\r\n <view class=\"packet-info\">\r\n <text class=\"packet-name\">{{ item.name }}</text>\r\n <text class=\"packet-date\">有效期至 {{ formatTime(item.expire_at) }}</text>\r\n </view>\r\n <view class=\"packet-action\">\r\n <button v-if=\"item.status === 0\" class=\"use-btn\" @click=\"usePacket(item)\">立即使用</button>\r\n <text v-else class=\"status-text\">{{ getStatusText(item.status) }}</text>\r\n </view>\r\n </view>\r\n </view>\r\n </scroll-view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, computed, onMounted } from 'vue'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype RedPacket = {\r\n id: string\r\n user_id: string\r\n amount: number\r\n name: string\r\n status: number // 0: unused, 1: used, 2: expired\r\n expire_at: string\r\n created_at: string\r\n}\r\n\r\nconst loading = ref(true)\r\nconst currentTab = ref(0)\r\nconst packets = ref<RedPacket[]>([])\r\n\r\nconst filteredPackets = computed((): RedPacket[] => {\r\n if (currentTab.value === 0) {\r\n return packets.value.filter((p:RedPacket):boolean => p.status === 0)\r\n } else {\r\n return packets.value.filter((p:RedPacket):boolean => p.status !== 0)\r\n }\r\n})\r\n\r\nonMounted(() => {\r\n loadData()\r\n})\r\n\r\nconst loadData = async () => {\r\n loading.value = true\r\n try {\r\n const rawList = await supabaseService.getUserRedPackets()\r\n packets.value = rawList.map((item: any): RedPacket => {\r\n let id = ''\r\n let amount = 0\r\n let name = ''\r\n let status = 0\r\n let expireAt = ''\r\n let createdAt = ''\r\n \r\n if (item instanceof UTSJSONObject) {\r\n id = item.getString('id') ?? ''\r\n amount = item.getNumber('amount') ?? 0\r\n name = item.getString('name') ?? ''\r\n status = item.getNumber('status') ?? 0\r\n expireAt = item.getString('expire_at') ?? ''\r\n createdAt = item.getString('created_at') ?? ''\r\n } else {\r\n id = (item['id'] as string) ?? ''\r\n amount = (item['amount'] as number) ?? 0\r\n name = (item['name'] as string) ?? ''\r\n status = (item['status'] as number) ?? 0\r\n expireAt = (item['expire_at'] as string) ?? ''\r\n createdAt = (item['created_at'] as string) ?? ''\r\n }\r\n\r\n return {\r\n id: id,\r\n user_id: '',\r\n amount: amount,\r\n name: name,\r\n status: status,\r\n expire_at: expireAt,\r\n created_at: createdAt\r\n } as RedPacket\r\n })\r\n } catch (e) {\r\n console.error(e)\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst usePacket = (item: RedPacket) => {\r\n uni.switchTab({\r\n url: '/pages/mall/consumer/index'\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 return ''\r\n}\r\n\r\nconst formatTime = (timeStr: string): string => {\r\n if (timeStr == '') return '永久有效'\r\n const date = new Date(timeStr)\r\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`\r\n}\r\n</script>\r\n\r\n<style>\r\n.red-packets-page {\r\n background-color: #f5f5f5;\r\n flex: 1;\r\n}\r\n\r\n.tab-header {\r\n display: flex;\r\n background-color: #fff;\r\n padding: 10px 0;\r\n /* position: sticky is removed in flavor of inline fixed style */\r\n}\r\n\r\n.tab-item {\r\n flex: 1;\r\n text-align: center;\r\n font-size: 14px;\r\n color: #666;\r\n padding-bottom: 8px;\r\n border-bottom: 2px solid transparent;\r\n}\r\n\r\n.tab-item.active {\r\n color: #ff5000;\r\n border-bottom-color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n.packet-list {\r\n flex: 1;\r\n padding: 15px;\r\n}\r\n\r\n.packet-item {\r\n display: flex;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n margin-bottom: 12px;\r\n overflow: hidden;\r\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\r\n}\r\n\r\n.packet-item.disabled .packet-left,\r\n.packet-item.disabled .packet-name,\r\n.packet-item.disabled .amount-num {\r\n color: #999;\r\n background-color: #f0f0f0;\r\n}\r\n\r\n.packet-item.disabled .packet-left {\r\n background-color: #e0e0e0;\r\n}\r\n\r\n.packet-left {\r\n width: 100px;\r\n background-color: #fff5f0;\r\n color: #ff5000;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 15px 0;\r\n}\r\n\r\n.packet-amount {\r\n font-size: 14px;\r\n}\r\n\r\n.amount-num {\r\n font-size: 28px;\r\n font-weight: bold;\r\n}\r\n\r\n.packet-condition {\r\n font-size: 12px;\r\n margin-top: 4px;\r\n}\r\n\r\n.packet-right {\r\n flex: 1;\r\n padding: 15px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n\r\n.packet-info {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.packet-name {\r\n font-size: 16px;\r\n font-weight: bold;\r\n color: #333;\r\n margin-bottom: 8px;\r\n}\r\n\r\n.packet-date {\r\n font-size: 12px;\r\n color: #999;\r\n}\r\n\r\n.use-btn {\r\n font-size: 12px;\r\n background-color: #ff5000;\r\n color: #fff;\r\n border-radius: 15px;\r\n padding: 4px 12px;\r\n line-height: 1.5;\r\n}\r\n\r\n.status-text {\r\n font-size: 14px;\r\n color: #999;\r\n}\r\n\r\n.loading-state, .empty-state {\r\n padding: 40px;\r\n align-items: center;\r\n justify-content: center;\r\n display: flex;\r\n}\r\n</style>",null],"names":[],"mappings":"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"} |