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

1 line
22 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/points/index.uvue","pages/user/login.uvue"],"sourcesContent":["<template>\n <scroll-view class=\"points-page\" direction=\"vertical\">\n <view class=\"points-header\">\n <view class=\"points-info\">\n <text class=\"points-label\">当前积分</text>\n <text class=\"points-value\">{{ totalPoints }}</text>\n </view>\n <view class=\"points-actions\">\n <button class=\"exchange-btn\" @click=\"handleExchange\">积分兑换</button>\n </view>\n </view>\n\n <view class=\"quick-actions\">\n <view class=\"action-item\" @click=\"goToSignin\">\n <view class=\"action-icon signin-icon\">📅</view>\n <text class=\"action-text\">每日签到</text>\n <view class=\"action-badge\" v-if=\"!signedToday\">\n <text class=\"badge-text\">+5</text>\n </view>\n <view class=\"signed-badge\" v-else>\n <text class=\"signed-text\">已签</text>\n </view>\n </view>\n <view class=\"action-item\" @click=\"handleExchange\">\n <view class=\"action-icon exchange-icon\">🎁</view>\n <text class=\"action-text\">积分兑换</text>\n </view>\n <view class=\"action-item\" @click=\"goToMyReviews\">\n <view class=\"action-icon review-icon\">⭐</view>\n <text class=\"action-text\">我的评价</text>\n </view>\n </view>\n\n <view class=\"signin-card\" v-if=\"!signedToday\">\n <view class=\"signin-info\">\n <text class=\"signin-title\">今日未签到</text>\n <text class=\"signin-desc\">连续签到可获得额外奖励</text>\n </view>\n <button class=\"signin-btn\" @click=\"goToSignin\">去签到</button>\n </view>\n\n <view class=\"signin-card signed\" v-else>\n <view class=\"signin-info\">\n <text class=\"signin-title\">今日已签到</text>\n <text class=\"signin-desc\">已连续签到 {{ continuousDays }} 天</text>\n </view>\n <text class=\"signed-icon\">✓</text>\n </view>\n\n <view class=\"expiring-card\" v-if=\"expiringPoints > 0\" @click=\"showExpiringDetails\">\n <view class=\"expiring-icon\">⚠️</view>\n <view class=\"expiring-info\">\n <text class=\"expiring-title\">{{ expiringPoints }} 积分即将过期</text>\n <text class=\"expiring-date\">过期日期:{{ expiringDate }}</text>\n </view>\n <text class=\"expiring-arrow\"></text>\n </view>\n\n <view class=\"records-section\">\n <text class=\"section-title\">积分明细</text>\n \n <view v-if=\"loading\" class=\"loading-state\">\n <text>加载中...</text>\n </view>\n \n <view v-else-if=\"records.length === 0\" class=\"empty-state\">\n <text class=\"empty-text\">暂无积分记录</text>\n </view>\n \n <view v-else class=\"record-list\">\n <view v-for=\"item in records\" :key=\"item.id\" class=\"record-item\">\n <view class=\"record-left\">\n <text class=\"record-title\">{{ item.description ?? getTypeText(item.type) }}</text>\n <text class=\"record-time\">{{ formatTime(item.created_at) }}</text>\n </view>\n <view class=\"record-right\">\n <text class=\"record-amount\" :class=\"{ positive: item.points > 0, negative: item.points < 0 }\">\n {{ item.points > 0 ? '+' : '' }}{{ item.points }}\n </text>\n </view>\n </view>\n </view>\n </view>\n\n <view class=\"expiring-popup\" v-if=\"showExpiringPopup\" @click=\"closeExpiringPopup\">\n <view class=\"popup-content\" @click.stop>\n <view class=\"popup-header\">\n <text class=\"popup-title\">即将过期积分</text>\n <text class=\"popup-close\" @click=\"closeExpiringPopup\">×</text>\n </view>\n <view class=\"popup-list\">\n <view class=\"popup-item\" v-for=\"(detail, index) in expiringDetails\" :key=\"index\">\n <view class=\"popup-item-info\">\n <text class=\"popup-item-points\">+{{ detail.points }} 积分</text>\n <text class=\"popup-item-desc\">{{ detail.description ?? '积分获取' }}</text>\n </view>\n <view class=\"popup-item-expire\">\n <text class=\"popup-item-date\">{{ formatDate(detail.expires_at) }}</text>\n <text class=\"popup-item-label\">过期</text>\n </view>\n </view>\n </view>\n <view class=\"popup-tip\">\n <text class=\"tip-text\">积分有效期为获取后365天请及时使用避免过期</text>\n </view>\n </view>\n </view>\n </scroll-view>\n</template>\n\n<script setup lang=\"uts\">\nimport { ref, onMounted } from 'vue'\nimport { supabaseService } from '@/utils/supabaseService.uts'\n\ntype PointRecord = {\n id: string\n user_id: string\n points: number\n type: string\n description: string\n created_at: string\n}\n\ntype ExpiringDetail = {\n points: number\n description: string | null\n expires_at: string\n created_at: string\n}\n\nconst totalPoints = ref<number>(0)\nconst records = ref<PointRecord[]>([])\nconst loading = ref<boolean>(true)\nconst signedToday = ref<boolean>(false)\nconst continuousDays = ref<number>(0)\nconst expiringPoints = ref<number>(0)\nconst expiringDate = ref<string>('')\nconst expiringDetails = ref<ExpiringDetail[]>([])\nconst showExpiringPopup = ref<boolean>(false)\n\nconst loadPoints = async (): Promise<void> => {\n try {\n const points = await supabaseService.getUserPoints()\n totalPoints.value = points\n } catch (e) {\n console.error('获取积分失败', e)\n }\n}\n\nconst loadRecords = async (): Promise<void> => {\n try {\n const list = await supabaseService.getPointRecords()\n records.value = list as PointRecord[]\n } catch (e) {\n console.error('获取积分记录失败', e)\n }\n}\n\nconst loadSigninStatus = async (): Promise<void> => {\n try {\n const status = await supabaseService.getTodaySigninStatus()\n signedToday.value = status.getBoolean('signed') ?? false\n continuousDays.value = status.getNumber('continuous_days') ?? 0\n } catch (e) {\n console.error('获取签到状态失败', e)\n }\n}\n\nconst loadExpiringPoints = async (): Promise<void> => {\n try {\n const result = await supabaseService.getExpiringPoints()\n expiringPoints.value = result.getNumber('expiring_points') ?? 0\n expiringDate.value = result.getString('expiring_date') ?? ''\n \n const detailsRaw = result.get('details')\n if (detailsRaw != null && Array.isArray(detailsRaw)) {\n const details: ExpiringDetail[] = []\n const arr = detailsRaw as any[]\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]\n let itemObj: UTSJSONObject\n if (item instanceof UTSJSONObject) {\n itemObj = item\n } else {\n itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\n }\n details.push({\n points: itemObj.getNumber('points') ?? 0,\n description: itemObj.getString('description'),\n expires_at: itemObj.getString('expires_at') ?? '',\n created_at: itemObj.getString('created_at') ?? ''\n })\n }\n expiringDetails.value = details\n }\n } catch (e) {\n console.error('获取即将过期积分失败', e)\n }\n}\n\nconst loadData = async (): Promise<void> => {\n loading.value = true\n await Promise.all([\n loadPoints(),\n loadRecords(),\n loadSigninStatus(),\n loadExpiringPoints()\n ])\n loading.value = false\n}\n\nonMounted(() => {\n loadData()\n})\n\nconst handleExchange = (): void => {\n uni.navigateTo({\n url: '/pages/mall/consumer/points/exchange'\n })\n}\n\nconst goToSignin = (): void => {\n uni.navigateTo({\n url: '/pages/mall/consumer/points/signin'\n })\n}\n\nconst goToMyReviews = (): void => {\n uni.navigateTo({\n url: '/pages/mall/consumer/my-reviews'\n })\n}\n\nconst showExpiringDetails = (): void => {\n showExpiringPopup.value = true\n}\n\nconst closeExpiringPopup = (): void => {\n showExpiringPopup.value = false\n}\n\nconst getTypeText = (type: string): string => {\n if (type == 'signin') {\n return '每日签到'\n } else if (type == 'shopping') {\n return '购物奖励'\n } else if (type == 'redeem') {\n return '积分兑换'\n } else if (type == 'admin') {\n return '系统调整'\n } else if (type == 'register') {\n return '注册赠送'\n } else if (type == 'expire') {\n return '积分过期'\n } else {\n return '积分变动'\n }\n}\n\nconst formatTime = (timeStr: string): string => {\n if (timeStr == '') return ''\n const date = new Date(timeStr)\n const y = date.getFullYear()\n const m = (date.getMonth() + 1).toString().padStart(2, '0')\n const d = date.getDate().toString().padStart(2, '0')\n const hh = date.getHours().toString().padStart(2, '0')\n const mm = date.getMinutes().toString().padStart(2, '0')\n return `${y}-${m}-${d} ${hh}:${mm}`\n}\n\nconst formatDate = (dateStr: string): string => {\n if (dateStr == '') return ''\n const date = new Date(dateStr)\n const y = date.getFullYear()\n const m = (date.getMonth() + 1).toString().padStart(2, '0')\n const d = date.getDate().toString().padStart(2, '0')\n return `${y}-${m}-${d}`\n}\n</script>\n\n<style>\n.points-page {\n flex: 1;\n height: 100%;\n background-color: #f5f5f5;\n}\n\n.points-header {\n background: linear-gradient(135deg, #ff6b35 0%, #ff8c42 100%);\n padding: 30px 20px;\n color: white;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.points-info {\n display: flex;\n flex-direction: column;\n}\n\n.points-label {\n font-size: 14px;\n opacity: 0.9;\n margin-bottom: 8px;\n}\n\n.points-value {\n font-size: 36px;\n font-weight: bold;\n}\n\n.exchange-btn {\n background-color: rgba(255,255,255,0.2);\n color: white;\n border: 1px solid rgba(255,255,255,0.4);\n font-size: 14px;\n border-radius: 20px;\n padding: 0 15px;\n height: 32px;\n line-height: 32px;\n}\n\n.quick-actions {\n display: flex;\n flex-direction: row;\n background-color: white;\n padding: 16px 0;\n margin-bottom: 8px;\n}\n\n.action-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative;\n}\n\n.action-icon {\n width: 44px;\n height: 44px;\n border-radius: 22px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n margin-bottom: 6px;\n}\n\n.signin-icon {\n background-color: #fff5f0;\n}\n\n.exchange-icon {\n background-color: #f0f5ff;\n}\n\n.review-icon {\n background-color: #fff5f0;\n}\n\n.action-text {\n font-size: 12px;\n color: #666;\n}\n\n.action-badge {\n position: absolute;\n top: 0;\n right: 20px;\n background-color: #ff6b35;\n border-radius: 8px;\n padding: 2px 6px;\n}\n\n.badge-text {\n font-size: 10px;\n color: white;\n}\n\n.signed-badge {\n position: absolute;\n top: 0;\n right: 20px;\n background-color: #52c41a;\n border-radius: 8px;\n padding: 2px 6px;\n}\n\n.signed-text {\n font-size: 10px;\n color: white;\n}\n\n.signin-card {\n background-color: white;\n margin: 0 12px 8px;\n border-radius: 12px;\n padding: 16px;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.signin-card.signed {\n background: linear-gradient(135deg, #f6ffed 0%, #e6fffb 100%);\n}\n\n.signin-info {\n display: flex;\n flex-direction: column;\n}\n\n.signin-title {\n font-size: 16px;\n font-weight: bold;\n color: #333;\n}\n\n.signin-desc {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n}\n\n.signin-btn {\n background-color: #ff6b35;\n color: white;\n font-size: 14px;\n border-radius: 16px;\n padding: 0 20px;\n height: 32px;\n line-height: 32px;\n}\n\n.signed-icon {\n width: 32px;\n height: 32px;\n background-color: #52c41a;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: white;\n}\n\n.expiring-card {\n background: linear-gradient(135deg, #fff7e6 0%, #ffe7ba 100%);\n margin: 0 12px 8px;\n border-radius: 12px;\n padding: 14px 16px;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.expiring-icon {\n font-size: 24px;\n margin-right: 12px;\n}\n\n.expiring-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.expiring-title {\n font-size: 14px;\n font-weight: bold;\n color: #d48806;\n}\n\n.expiring-date {\n font-size: 12px;\n color: #ad8b00;\n margin-top: 2px;\n}\n\n.expiring-arrow {\n font-size: 20px;\n color: #d48806;\n}\n\n.records-section {\n background-color: white;\n padding: 0 16px;\n min-height: 300px;\n}\n\n.section-title {\n font-size: 16px;\n font-weight: bold;\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n}\n\n.record-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 0;\n border-bottom: 1px solid #f9f9f9;\n}\n\n.record-left {\n display: flex;\n flex-direction: column;\n}\n\n.record-title {\n margin-bottom: 4px;\n font-size: 15px;\n color: #333;\n}\n\n.record-time {\n font-size: 12px;\n color: #999;\n}\n\n.record-amount {\n font-size: 16px;\n font-weight: bold;\n color: #333;\n}\n\n.record-amount.positive {\n color: #ff6b35;\n}\n\n.record-amount.negative {\n color: #333;\n}\n\n.empty-state {\n padding: 40px 0;\n display: flex;\n justify-content: center;\n}\n\n.empty-text {\n color: #999;\n font-size: 14px;\n}\n\n.loading-state {\n padding: 40px 0;\n display: flex;\n justify-content: center;\n}\n\n.expiring-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: flex-end;\n justify-content: center;\n z-index: 1000;\n}\n\n.popup-content {\n background-color: white;\n border-radius: 16px 16px 0 0;\n width: 100%;\n max-height: 400px;\n padding: 16px;\n}\n\n.popup-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.popup-title {\n font-size: 18px;\n font-weight: bold;\n color: #333;\n}\n\n.popup-close {\n font-size: 24px;\n color: #999;\n}\n\n.popup-list {\n max-height: 300px;\n}\n\n.popup-item {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.popup-item-info {\n display: flex;\n flex-direction: column;\n}\n\n.popup-item-points {\n font-size: 14px;\n font-weight: bold;\n color: #ff6b35;\n}\n\n.popup-item-desc {\n font-size: 12px;\n color: #999;\n margin-top: 2px;\n}\n\n.popup-item-expire {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.popup-item-date {\n font-size: 12px;\n color: #d48806;\n}\n\n.popup-item-label {\n font-size: 10px;\n color: #999;\n}\n\n.popup-tip {\n margin-top: 16px;\n padding: 12px;\n background-color: #f9f9f9;\n border-radius: 8px;\n}\n\n.tip-text {\n font-size: 12px;\n color: #666;\n}\n</style>\n",null],"names":[],"mappings":"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"}