完成consumer端同步
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<scroll-view class="footprint-content" :scroll-y="true" @scrolltolower="loadMore">
|
||||
<scroll-view class="footprint-content" direction="vertical" @scrolltolower="loadMore">
|
||||
<view v-if="footprints.length === 0 && !isLoading" class="empty-footprints">
|
||||
<text class="empty-icon">👣</text>
|
||||
<text class="empty-text">暂无浏览记录</text>
|
||||
@@ -70,6 +70,7 @@
|
||||
<script setup lang="uts">
|
||||
import { ref, onMounted, computed } from 'vue'
|
||||
import { supabaseService } from '@/utils/supabaseService.uts'
|
||||
import { goToLogin } from '@/utils/utils.uts'
|
||||
|
||||
type FootprintType = {
|
||||
id: string
|
||||
@@ -170,7 +171,28 @@ const toggleEditMode = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const clearAll = () => {
|
||||
async function executeClearAll(): Promise<void> {
|
||||
uni.showLoading({ title: '清空中...' })
|
||||
const success = await supabaseService.clearFootprints()
|
||||
uni.hideLoading()
|
||||
|
||||
if (success) {
|
||||
footprints.value = []
|
||||
uni.removeStorageSync('footprints')
|
||||
|
||||
uni.showToast({
|
||||
title: '已清空',
|
||||
icon: 'success'
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '清空失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function clearAll(): void {
|
||||
if (footprints.value.length === 0) return
|
||||
|
||||
uni.showModal({
|
||||
@@ -178,26 +200,7 @@ const clearAll = () => {
|
||||
content: '确定要清空所有浏览记录吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.showLoading({ title: '清空中...' })
|
||||
|
||||
supabaseService.clearFootprints().then((success) => {
|
||||
uni.hideLoading()
|
||||
|
||||
if (success) {
|
||||
footprints.value = []
|
||||
uni.removeStorageSync('footprints')
|
||||
|
||||
uni.showToast({
|
||||
title: '已清空',
|
||||
icon: 'success'
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '清空失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
executeClearAll()
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -236,7 +239,54 @@ const toggleSelectAll = () => {
|
||||
footprints.value = [...footprints.value]
|
||||
}
|
||||
|
||||
const deleteSelected = () => {
|
||||
async function executeDeleteSelected(selectedItems: FootprintType[]): Promise<void> {
|
||||
uni.showLoading({ title: '删除中...' })
|
||||
|
||||
const productIds: string[] = []
|
||||
for (let i = 0; i < selectedItems.length; i++) {
|
||||
productIds.push(selectedItems[i].id)
|
||||
}
|
||||
|
||||
const success = await supabaseService.deleteFootprints(productIds)
|
||||
uni.hideLoading()
|
||||
|
||||
if (success) {
|
||||
footprints.value = footprints.value.filter((item): Boolean => item.selected !== true)
|
||||
|
||||
const dataToSave: FootprintSaveType[] = []
|
||||
for (let i = 0; i < footprints.value.length; i++) {
|
||||
const item = footprints.value[i]
|
||||
dataToSave.push({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
price: item.price,
|
||||
original_price: item.original_price,
|
||||
image: item.image,
|
||||
sales: item.sales,
|
||||
shopId: item.shopId,
|
||||
shopName: item.shopName,
|
||||
viewTime: item.viewTime
|
||||
} as FootprintSaveType)
|
||||
}
|
||||
uni.setStorageSync('footprints', JSON.stringify(dataToSave))
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
if (footprints.value.length === 0) {
|
||||
isEditMode.value = false
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '删除失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function deleteSelected(): void {
|
||||
const selectedItems = footprints.value.filter((item): Boolean => item.selected === true)
|
||||
if (selectedItems.length === 0) {
|
||||
uni.showToast({
|
||||
@@ -251,61 +301,18 @@ const deleteSelected = () => {
|
||||
content: `确定要删除选中的${selectedItems.length}条记录吗?`,
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.showLoading({ title: '删除中...' })
|
||||
|
||||
// 收集要删除的商品ID
|
||||
const productIds: string[] = []
|
||||
for (let i = 0; i < selectedItems.length; i++) {
|
||||
productIds.push(selectedItems[i].id)
|
||||
}
|
||||
|
||||
// 调用服务层批量删除
|
||||
supabaseService.deleteFootprints(productIds).then((success) => {
|
||||
uni.hideLoading()
|
||||
|
||||
if (success) {
|
||||
// 从本地列表中移除
|
||||
footprints.value = footprints.value.filter((item): Boolean => item.selected !== true)
|
||||
|
||||
// 更新本地缓存
|
||||
const dataToSave: FootprintSaveType[] = []
|
||||
for (let i = 0; i < footprints.value.length; i++) {
|
||||
const item = footprints.value[i]
|
||||
dataToSave.push({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
price: item.price,
|
||||
original_price: item.original_price,
|
||||
image: item.image,
|
||||
sales: item.sales,
|
||||
shopId: item.shopId,
|
||||
shopName: item.shopName,
|
||||
viewTime: item.viewTime
|
||||
} as FootprintSaveType)
|
||||
}
|
||||
uni.setStorageSync('footprints', JSON.stringify(dataToSave))
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
if (footprints.value.length === 0) {
|
||||
isEditMode.value = false
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '删除失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
executeDeleteSelected(selectedItems)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const addToCart = async (item: FootprintType) => {
|
||||
const userId = supabaseService.getCurrentUserId()
|
||||
if (userId == null || userId === '') {
|
||||
goToLogin('/pages/mall/consumer/footprint')
|
||||
return
|
||||
}
|
||||
uni.showLoading({ title: '检查商品...' })
|
||||
try {
|
||||
const productId = item.id
|
||||
|
||||
Reference in New Issue
Block a user