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

1 line
23 KiB
Plaintext

{"version":3,"sources":["pages/mall/consumer/favorites.uvue","pages/user/change-password.uvue","pages/user/login.uvue","pages/user/center.uvue","uni_modules/ak-req/ak-req.uts","pages/main/index.uvue"],"sourcesContent":["<!-- 收藏页面 -->\r\n<template>\r\n\t<view class=\"favorites-page\">\r\n\t\t<view class=\"favorites-header\">\r\n\t\t\t<view v-if=\"favorites.length > 0\" class=\"header-actions\">\r\n\t\t\t\t<text class=\"action-btn\" @click=\"toggleEditMode\">{{ isEditMode ? '完成' : '编辑' }}</text>\r\n\t\t\t\t<text class=\"action-btn\" @click=\"clearAll\">清空</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<scroll-view class=\"favorites-content\" :scroll-y=\"true\">\r\n\t\t\t<view v-if=\"favorites.length === 0 && !isLoading\" class=\"empty-favorites\">\r\n\t\t\t\t<text class=\"empty-icon\">❤️</text>\r\n\t\t\t\t<text class=\"empty-text\">暂无收藏商品</text>\r\n\t\t\t\t<text class=\"empty-subtext\">快去收藏喜欢的商品吧</text>\r\n\t\t\t\t<button class=\"go-shopping-btn\" @click=\"goShopping\">去逛逛</button>\r\n\t\t\t</view>\r\n\r\n\t\t\t<view class=\"product-group\">\r\n\t\t\t\t<view class=\"group-items\">\r\n\t\t\t\t\t<view v-for=\"(product, index) in favorites\" :key=\"index\" class=\"product-item\">\r\n\t\t\t\t\t\t<view v-if=\"isEditMode\" class=\"item-selector\" @click=\"toggleSelect(product)\">\r\n\t\t\t\t\t\t\t<view :class=\"['select-icon', { selected: product.selected === true }]\">\r\n\t\t\t\t\t\t\t\t<text v-if=\"product.selected === true\" class=\"icon-text\">✓</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=\"item-content\" @click=\"viewProduct(product)\">\r\n\t\t\t\t\t\t\t<image class=\"product-image\" :src=\"product.main_image_url\" mode=\"aspectFill\" />\r\n\t\t\t\t\t\t\t<text class=\"product-name\" :lines=\"2\">{{ product.name }}</text>\r\n\t\t\t\t\t\t\t<view class=\"product-bottom\">\r\n\t\t\t\t\t\t\t\t<text class=\"product-price\">¥{{ product.price }}</text>\r\n\t\t\t\t\t\t\t\t<view v-if=\"!isEditMode\" class=\"product-add-btn\" @click.stop=\"addToCart(product)\">\r\n\t\t\t\t\t\t\t\t\t<text class=\"add-icon\">+</text>\r\n\t\t\t\t\t\t\t\t</view>\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</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<view v-if=\"isLoading\" class=\"loading-more\">\r\n\t\t\t\t<text class=\"loading-text\">加载中...</text>\r\n\t\t\t</view>\r\n\t\t\t<view v-if=\"!isLoading && favorites.length > 0\" class=\"no-more\">\r\n\t\t\t\t<text class=\"no-more-text\">没有更多了</text>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\r\n\t\t<view v-if=\"isEditMode && favorites.length > 0\" class=\"edit-bar\">\r\n\t\t\t<view class=\"select-all\" @click=\"toggleSelectAll\">\r\n\t\t\t\t<view :class=\"['all-select-icon', { selected: isAllSelected }]\">\r\n\t\t\t\t\t<text v-if=\"isAllSelected\" class=\"icon-text\">✓</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<text class=\"select-all-text\">全选</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"delete-btn\" @click=\"deleteSelected\">\r\n\t\t\t\t<text class=\"delete-text\">删除({{ selectedCount }})</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, onMounted, computed } from 'vue'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype FavoriteType = {\r\n\tid: string\r\n\tname: string\r\n\tprice: number\r\n\tmain_image_url: string\r\n\tmerchant_id: string\r\n\tselected: boolean\r\n}\r\n\r\nconst favorites = ref<FavoriteType[]>([])\r\nconst isEditMode = ref<boolean>(false)\r\nconst isLoading = ref<boolean>(false)\r\n\r\nconst selectedCount = computed((): number => {\r\n\treturn favorites.value.filter((item): Boolean => item.selected === true).length\r\n})\r\n\r\nconst isAllSelected = computed((): boolean => {\r\n\treturn favorites.value.length > 0 && favorites.value.every((item): Boolean => item.selected === true)\r\n})\r\n\r\nconst loadFavorites = async () => {\r\n\tisLoading.value = true\r\n\ttry {\r\n\t\tconst res = await supabaseService.getFavorites()\r\n\t\tconsole.log('收藏数据加载完成,数量:', res.length)\r\n\t\t\r\n\t\tconst productList: FavoriteType[] = []\r\n\t\tfor (let i = 0; i < res.length; i++) {\r\n\t\t\tconst item = res[i]\r\n\t\t\tlet prod: any | null = null\r\n\t\t\tlet itemObj: UTSJSONObject | null = null\r\n\t\t\t\r\n\t\t\tif (item instanceof UTSJSONObject) {\r\n\t\t\t\titemObj = item as UTSJSONObject\r\n\t\t\t\tprod = itemObj.get('ml_products')\r\n\t\t\t} else {\r\n\t\t\t\titemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n\t\t\t\tprod = itemObj.get('ml_products')\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet image = '/static/default-product.png'\r\n\t\t\tlet id = ''\r\n\t\t\tlet name = '未知商品'\r\n\t\t\tlet price = 0\r\n\t\t\tlet merchantId = ''\r\n\t\t\t\r\n\t\t\tif (prod != null) {\r\n\t\t\t\tlet prodObj: UTSJSONObject\r\n\t\t\t\tif (prod instanceof UTSJSONObject) {\r\n\t\t\t\t\tprodObj = prod as UTSJSONObject\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprodObj = JSON.parse(JSON.stringify(prod)) as UTSJSONObject\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tid = prodObj.getString('id') ?? ''\r\n\t\t\t\tname = prodObj.getString('name') ?? '未知商品'\r\n\t\t\t\tprice = prodObj.getNumber('base_price') ?? 0\r\n\t\t\t\timage = prodObj.getString('main_image_url') ?? image\r\n\t\t\t\tmerchantId = prodObj.getString('merchant_id') ?? ''\r\n\t\t\t\t\r\n\t\t\t\tif (image === '/static/default-product.png') {\r\n\t\t\t\t\tconst imgUrls = prodObj.getString('image_urls')\r\n\t\t\t\t\tif (imgUrls != null) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst arr = JSON.parse(imgUrls)\r\n\t\t\t\t\t\t\tif (Array.isArray(arr) && arr.length > 0) {\r\n\t\t\t\t\t\t\t\timage = arr[0] as string\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch(e) {}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (itemObj != null) {\r\n\t\t\t\t\tid = itemObj.getString('target_id') ?? ''\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst product: FavoriteType = {\r\n\t\t\t\tid: id,\r\n\t\t\t\tname: name,\r\n\t\t\t\tprice: price,\r\n\t\t\t\tmain_image_url: image,\r\n\t\t\t\tmerchant_id: merchantId,\r\n\t\t\t\tselected: false\r\n\t\t\t}\r\n\t\t\tproductList.push(product)\r\n\t\t}\r\n\t\tfavorites.value = productList\r\n\t\tconsole.log('收藏列表更新完成,数量:', favorites.value.length)\r\n\t} catch (e) {\r\n\t\tconsole.error('加载收藏失败', e)\r\n\t} finally {\r\n\t\tisLoading.value = false\r\n\t}\r\n}\r\n\r\nconst toggleEditMode = () => {\r\n\tisEditMode.value = !isEditMode.value\r\n\tfor (let i = 0; i < favorites.value.length; i++) {\r\n\t\tfavorites.value[i].selected = false\r\n\t}\r\n}\r\n\r\nconst clearAll = () => {\r\n\tif (favorites.value.length === 0) return\r\n\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\tuni.showLoading({ title: '清空中...' })\r\n\t\t\t\t\r\n\t\t\t\tconst productIds: string[] = []\r\n\t\t\t\tfor (let i = 0; i < favorites.value.length; i++) {\r\n\t\t\t\t\tproductIds.push(favorites.value[i].id)\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tlet completed = 0\r\n\t\t\t\t\r\n\t\t\t\tfor (let i = 0; i < productIds.length; i++) {\r\n\t\t\t\t\tsupabaseService.toggleFavorite(productIds[i]).then(() => {\r\n\t\t\t\t\t\tcompleted++\r\n\t\t\t\t\t\tif (completed === productIds.length) {\r\n\t\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\t\tfavorites.value = []\r\n\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '已清空',\r\n\t\t\t\t\t\t\t\ticon: 'success'\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).catch(() => {\r\n\t\t\t\t\t\tcompleted++\r\n\t\t\t\t\t\tif (completed === productIds.length) {\r\n\t\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\t\tloadFavorites()\r\n\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '部分清空失败',\r\n\t\t\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\nconst toggleSelect = (item: FavoriteType) => {\r\n\titem.selected = !(item.selected === true)\r\n\tfavorites.value = [...favorites.value]\r\n}\r\n\r\nconst toggleSelectAll = () => {\r\n\tconst newSelectedState = !isAllSelected.value\r\n\tfor (let i = 0; i < favorites.value.length; i++) {\r\n\t\tfavorites.value[i].selected = newSelectedState\r\n\t}\r\n\tfavorites.value = [...favorites.value]\r\n}\r\n\r\nconst deleteSelected = () => {\r\n\tconst selectedItems = favorites.value.filter((item): Boolean => item.selected === true)\r\n\tif (selectedItems.length === 0) {\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\r\n\tuni.showModal({\r\n\t\ttitle: '删除收藏',\r\n\t\tcontent: `确定要删除选中的 ${selectedItems.length} 个商品吗?`,\r\n\t\tsuccess: (res) => {\r\n\t\t\tif (res.confirm) {\r\n\t\t\t\tuni.showLoading({ title: '删除中...' })\r\n\t\t\t\t\r\n\t\t\t\tlet completed = 0\r\n\t\t\t\tconst total = selectedItems.length\r\n\t\t\t\t\r\n\t\t\t\tfor (let i = 0; i < selectedItems.length; i++) {\r\n\t\t\t\t\tsupabaseService.toggleFavorite(selectedItems[i].id).then(() => {\r\n\t\t\t\t\t\tcompleted++\r\n\t\t\t\t\t\tif (completed === total) {\r\n\t\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\t\tloadFavorites()\r\n\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '已删除',\r\n\t\t\t\t\t\t\t\ticon: 'success'\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).catch(() => {\r\n\t\t\t\t\t\tcompleted++\r\n\t\t\t\t\t\tif (completed === total) {\r\n\t\t\t\t\t\t\tuni.hideLoading()\r\n\t\t\t\t\t\t\tloadFavorites()\r\n\t\t\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\t\t\ttitle: '部分删除失败',\r\n\t\t\t\t\t\t\t\ticon: 'none'\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\nconst viewProduct = (product: FavoriteType) => {\r\n\tif (isEditMode.value) {\r\n\t\ttoggleSelect(product)\r\n\t\treturn\r\n\t}\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/product-detail?id=${product.id}`\r\n\t})\r\n}\r\n\r\nconst addToCart = async (product: FavoriteType) => {\r\n\tuni.showLoading({ title: '检查商品...' })\r\n\ttry {\r\n\t\tconst merchantId = product.merchant_id ?? ''\r\n\t\t\r\n\t\tconst skus = await supabaseService.getProductSkus(product.id)\r\n\t\tuni.hideLoading()\r\n\t\t\r\n\t\tif (skus.length > 0) {\r\n\t\t\tuni.showToast({ title: '请选择规格', icon: 'none' })\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tuni.navigateTo({\r\n\t\t\t\t\turl: '/pages/mall/consumer/product-detail?id=' + product.id\r\n\t\t\t\t})\r\n\t\t\t}, 500)\r\n\t\t} else {\r\n\t\t\tuni.showLoading({ title: '添加中...' })\r\n\t\t\tconst success = await supabaseService.addToCart(product.id, 1, '', merchantId)\r\n\t\t\tuni.hideLoading()\r\n\t\t\tif (success) {\r\n\t\t\t\tuni.showToast({ title: '已添加到购物车', icon: 'success' })\r\n\t\t\t} else {\r\n\t\t\t\tuni.showToast({ title: '添加失败', icon: 'none' })\r\n\t\t\t}\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.error('添加到购物车异常', e)\r\n\t\tuni.hideLoading()\r\n\t\tuni.showToast({ title: '操作失败', icon: 'none' })\r\n\t}\r\n}\r\n\r\nconst goShopping = () => {\r\n\tuni.switchTab({\r\n\t\turl: '/pages/main/index'\r\n\t})\r\n}\r\n\r\nonMounted(() => {\r\n\tloadFavorites()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.favorites-page {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1;\r\n}\r\n\r\n.favorites-header {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tborder-bottom: 1px solid #e5e5e5;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.header-actions {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex: 1;\r\n\tjustify-content: flex-end;\r\n\talign-items: center;\r\n\tpadding-right: 0;\r\n}\r\n\r\n.action-btn {\r\n\tcolor: #007aff;\r\n\tfont-size: 14px;\r\n\tpadding: 5px;\r\n\tmargin-left: 20px;\r\n}\r\n\r\n.favorites-content {\r\n\tflex: 1;\r\n\theight: 0px;\r\n}\r\n\r\n.empty-favorites {\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\tbackground-color: #ffffff;\r\n}\r\n\r\n.empty-icon {\r\n\tfont-size: 80px;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.empty-text {\r\n\tfont-size: 16px;\r\n\tcolor: #666666;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.empty-subtext {\r\n\tfont-size: 14px;\r\n\tcolor: #999999;\r\n\tmargin-bottom: 30px;\r\n}\r\n\r\n.go-shopping-btn {\r\n\tbackground-color: #007aff;\r\n\tcolor: #ffffff;\r\n\tpadding: 10px 40px;\r\n\tborder-radius: 25px;\r\n\tfont-size: 14px;\r\n\tborder: none;\r\n}\r\n\r\n.product-group {\r\n\tbackground-color: #ffffff;\r\n\tmargin-bottom: 10px;\r\n\tpadding: 0 10px;\r\n}\r\n\r\n.group-items {\r\n\tpadding: 0;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex-wrap: wrap;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.product-item {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tbackground: #fff;\r\n\tborder-radius: 8px;\r\n\toverflow: hidden;\r\n\twidth: 48%;\r\n\tmargin-bottom: 12px;\r\n\tposition: relative;\r\n}\r\n\r\n.item-selector {\r\n\tposition: absolute;\r\n\ttop: 5px;\r\n\tright: 5px;\r\n\tz-index: 10;\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tborder-radius: 15px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.select-icon {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\tborder: 1px solid #cccccc;\r\n\tborder-radius: 10px;\r\n\tbackground-color: rgba(255,255,255,0.5);\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.select-icon.selected {\r\n\tbackground-color: #007aff;\r\n\tborder-color: #007aff;\r\n}\r\n\r\n.icon-text {\r\n\tcolor: #ffffff;\r\n\tfont-size: 12px;\r\n}\r\n\r\n.item-content {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.product-image {\r\n\twidth: 100%;\r\n\theight: 170px;\r\n\tborder-radius: 8px;\r\n\tmargin-bottom: 8px;\r\n\tbackground: #f5f5f5;\r\n}\r\n\r\n.product-name {\r\n\tfont-size: 13px;\r\n\tcolor: #333;\r\n\tmargin-bottom: 5px;\r\n\tline-height: 1.4;\r\n\theight: 36px;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\tpadding: 0 8px;\r\n}\r\n\r\n.product-bottom {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tpadding: 0 8px 8px;\r\n}\r\n\r\n.product-price {\r\n\tfont-size: 15px;\r\n\tcolor: #ff5000;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.product-add-btn {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tbackground-color: #ff5000;\r\n\tborder-radius: 12px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.add-icon {\r\n\tcolor: #fff;\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n@media (min-width: 768px) {\r\n\t.product-item {\r\n\t\twidth: 32% !important;\r\n\t}\r\n}\r\n\r\n@media (min-width: 1024px) {\r\n\t.product-item {\r\n\t\twidth: 16% !important;\r\n\t}\r\n\t\r\n\t.favorites-content, .favorites-header {\r\n\t\tmax-width: 1200px;\r\n\t\tmargin: 0 auto;\r\n\t}\r\n}\r\n\r\n.loading-more,\r\n.no-more {\r\n\tpadding: 20px;\r\n\ttext-align: center;\r\n\tbackground-color: #ffffff;\r\n}\r\n\r\n.loading-text,\r\n.no-more-text {\r\n\tcolor: #999999;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.edit-bar {\r\n\tbackground-color: #ffffff;\r\n\tborder-top: 1px solid #e5e5e5;\r\n\tpadding: 15px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.select-all {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n.all-select-icon {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\tborder: 1px solid #cccccc;\r\n\tborder-radius: 10px;\r\n\tmargin-right: 10px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.all-select-icon.selected {\r\n\tbackground-color: #007aff;\r\n\tborder-color: #007aff;\r\n}\r\n\r\n.select-all-text {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n}\r\n\r\n.delete-btn {\r\n\tbackground-color: #ff4757;\r\n\tpadding: 10px 20px;\r\n\tborder-radius: 15px;\r\n}\r\n\r\n.delete-text {\r\n\tcolor: #ffffff;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n}\r\n</style>\r\n",null,null,null,null,null],"names":[],"mappings":"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"}