Files
medical-mall/services/admin/productMemberPriceService.uts
2026-02-13 17:29:50 +08:00

120 lines
2.9 KiB
Plaintext

import supa from '@/components/supadb/aksupainstance.uts'
export type UserLevel = {
id: string
name: string
level_weight: number
discount_percent: number
is_visible: boolean
status: number
deleted_at: string | null
}
export type ProductSku = {
id: string
product_id: string
sku_code: string
specifications: any
price: number
stock: number
status: number
image_url: string | null
}
export type ProductMemberPrice = {
id?: string
merchant_id?: string
product_id: string
sku_id: string
level_id: string
member_price: number
created_at?: string
updated_at?: string
}
export type MemberPriceMatrixRow = {
sku: ProductSku
pricesByLevel: Record<string, number | null>
}
function getCurrentUid(): string | null {
try {
const session = supa.getSession()
const uid = session?.user?.getString('id')
return uid ?? null
} catch (e) {
return null
}
}
export async function fetchActiveUserLevels(): Promise<UserLevel[]> {
const { data, error } = await supa
.from('ak_user_levels')
.select('id,name,level_weight,discount_percent,is_visible,status,deleted_at')
.is('deleted_at', null)
.eq('status', 1)
.eq('is_visible', true)
.order('level_weight', { ascending: true })
.execute()
if (error != null) {
console.error('获取会员等级失败:', error)
return [] as UserLevel[]
}
return (data ?? []) as UserLevel[]
}
export async function fetchProductSkus(productId: string): Promise<ProductSku[]> {
const { data, error } = await supa
.from('ml_product_skus')
.select('id,product_id,sku_code,specifications,price,stock,status,image_url')
.eq('product_id', productId)
.order('created_at', { ascending: true })
.execute()
if (error != null) {
console.error('获取 SKU 失败:', error)
return [] as ProductSku[]
}
return (data ?? []) as ProductSku[]
}
export async function fetchMemberPrices(productId: string): Promise<ProductMemberPrice[]> {
const { data, error } = await supa
.from('ak_product_member_prices')
.select('id,product_id,sku_id,level_id,member_price,created_at,updated_at')
.eq('product_id', productId)
.execute()
if (error != null) {
console.error('获取会员价失败:', error)
return [] as ProductMemberPrice[]
}
return (data ?? []) as ProductMemberPrice[]
}
export async function saveMemberPrices(productId: string, rows: Array<{ sku_id: string; level_id: string; member_price: number }>): Promise<boolean> {
const uid = getCurrentUid()
if (uid == null) return false
const payload = rows.map(r => ({
merchant_id: uid,
product_id: productId,
sku_id: r.sku_id,
level_id: r.level_id,
member_price: r.member_price,
updated_at: new Date().toISOString()
}))
const { error } = await supa
.from('ak_product_member_prices')
.upsert(payload as any)
.execute()
if (error != null) {
console.error('保存会员价失败:', error)
return false
}
return true
}