consumer模块完成90%,前端完成supabase对接
This commit is contained in:
@@ -83,6 +83,7 @@
|
||||
|
||||
<script setup lang="uts">
|
||||
import { ref, onMounted, computed } from 'vue'
|
||||
import { supabaseService } from '@/utils/supabaseService.uts'
|
||||
|
||||
type FootprintType = {
|
||||
id: string
|
||||
@@ -131,24 +132,101 @@ onMounted(() => {
|
||||
})
|
||||
|
||||
// 加载足迹数据
|
||||
const loadFootprints = (loadMore: boolean = false) => {
|
||||
const loadFootprints = async (loadMore: boolean = false) => {
|
||||
isLoading.value = true
|
||||
|
||||
// 从本地存储获取足迹数据
|
||||
const storedFootprints = uni.getStorageSync('footprints')
|
||||
if (storedFootprints) {
|
||||
try {
|
||||
const data = JSON.parse(storedFootprints as string) as any[]
|
||||
footprints.value = data.map(item => ({
|
||||
...item,
|
||||
selected: false
|
||||
}))
|
||||
} catch (e) {
|
||||
console.error('Failed to parse footprints', e)
|
||||
footprints.value = []
|
||||
try {
|
||||
const remoteData = await supabaseService.getFootprints()
|
||||
|
||||
if (remoteData.length > 0) {
|
||||
console.log('获取到远程足迹数据:', remoteData.length)
|
||||
// 使用远程数据
|
||||
footprints.value = remoteData.map((item: any): FootprintType => {
|
||||
let id = ''
|
||||
let name = ''
|
||||
let price = 0
|
||||
let original_price = 0
|
||||
let image = ''
|
||||
let sales = 0
|
||||
let shopId = ''
|
||||
let shopName = ''
|
||||
let viewTime = 0
|
||||
|
||||
if (item instanceof UTSJSONObject) {
|
||||
id = item.getString('id') || ''
|
||||
name = item.getString('name') || ''
|
||||
price = item.getNumber('price') || 0
|
||||
original_price = item.getNumber('original_price') || 0
|
||||
image = item.getString('image') || ''
|
||||
sales = item.getNumber('sales') || 0
|
||||
shopId = item.getString('shopId') || ''
|
||||
shopName = item.getString('shopName') || ''
|
||||
viewTime = item.getNumber('viewTime') || 0
|
||||
} else {
|
||||
id = (item['id'] as string) || ''
|
||||
name = (item['name'] as string) || ''
|
||||
price = (item['price'] as number) || 0
|
||||
original_price = (item['original_price'] as number) || 0
|
||||
image = (item['image'] as string) || ''
|
||||
sales = (item['sales'] as number) || 0
|
||||
shopId = (item['shopId'] as string) || ''
|
||||
shopName = (item['shopName'] as string) || ''
|
||||
viewTime = (item['viewTime'] as number) || 0
|
||||
}
|
||||
|
||||
return {
|
||||
id: id,
|
||||
name: name,
|
||||
price: price,
|
||||
original_price: original_price,
|
||||
image: image,
|
||||
sales: sales,
|
||||
shopId: shopId,
|
||||
shopName: shopName,
|
||||
viewTime: viewTime,
|
||||
selected: false
|
||||
} as FootprintType
|
||||
})
|
||||
|
||||
// 更新本地缓存
|
||||
const dataToSave = footprints.value.map(item => {
|
||||
const { selected, ...rest } = item
|
||||
return rest
|
||||
})
|
||||
uni.setStorageSync('footprints', JSON.stringify(dataToSave))
|
||||
} else {
|
||||
// 如果远程为空,尝试加载本地
|
||||
const storedFootprints = uni.getStorageSync('footprints')
|
||||
if (storedFootprints) {
|
||||
try {
|
||||
const data = JSON.parse(storedFootprints as string) as any[]
|
||||
footprints.value = data.map(item => ({
|
||||
...item,
|
||||
selected: false
|
||||
}))
|
||||
} catch (e) {
|
||||
console.error('Failed to parse footprints', e)
|
||||
footprints.value = []
|
||||
}
|
||||
} else {
|
||||
footprints.value = []
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('加载足迹失败', e)
|
||||
// 失败时加载本地
|
||||
const storedFootprints = uni.getStorageSync('footprints')
|
||||
if (storedFootprints) {
|
||||
try {
|
||||
const data = JSON.parse(storedFootprints as string) as any[]
|
||||
footprints.value = data.map(item => ({
|
||||
...item,
|
||||
selected: false
|
||||
}))
|
||||
} catch (err) {
|
||||
footprints.value = []
|
||||
}
|
||||
}
|
||||
} else {
|
||||
footprints.value = []
|
||||
}
|
||||
|
||||
isLoading.value = false
|
||||
@@ -262,9 +340,18 @@ const deleteSelected = () => {
|
||||
uni.showModal({
|
||||
title: '确认删除',
|
||||
content: `确定要删除选中的${selectedItems.length}条记录吗?`,
|
||||
success: (res) => {
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
// 从列表中移除
|
||||
uni.showLoading({ title: '删除中' })
|
||||
|
||||
// 远程删除
|
||||
for (const item of selectedItems) {
|
||||
await supabaseService.deleteFootprint(item.id)
|
||||
}
|
||||
|
||||
uni.hideLoading()
|
||||
|
||||
// 从列表移除
|
||||
footprints.value = footprints.value.filter(item => !item.selected)
|
||||
|
||||
// 保存回本地存储
|
||||
|
||||
Reference in New Issue
Block a user