完成编辑商品信息同步
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
<view class="product-edit-page">
|
||||
<view class="page-header">
|
||||
<view class="back-link" @click="goBack">
|
||||
<text class="arrow">{"<"}</text>
|
||||
<text class="arrow"><</text>
|
||||
<text class="back-txt">返回</text>
|
||||
</view>
|
||||
<text class="header-title">编辑商品</text>
|
||||
@@ -232,41 +232,76 @@ async function loadCategoryOptions() {
|
||||
|
||||
async function fetchProductDetail(id: string, mId: string) {
|
||||
try {
|
||||
const { data, error } = await supa
|
||||
const res = await supa
|
||||
.from('ml_products')
|
||||
.select('*')
|
||||
.eq('id', id)
|
||||
.eq('merchant_id', mId)
|
||||
.single()
|
||||
.execute()
|
||||
|
||||
if (error) throw error
|
||||
if (data) {
|
||||
formData.value.id = data.id
|
||||
formData.value.name = data.name || ''
|
||||
formData.value.base_price = data.base_price || 0
|
||||
formData.value.available_stock = data.available_stock || 0
|
||||
formData.value.total_stock = data.total_stock || data.available_stock || 0
|
||||
formData.value.status = data.status || 1
|
||||
formData.value.main_image_url = data.main_image_url || ''
|
||||
formData.value.image_urls = data.image_urls || []
|
||||
formData.value.video_urls = data.video_urls || []
|
||||
formData.value.tags = data.tags || []
|
||||
|
||||
if (data.attributes && typeof data.attributes === 'object') {
|
||||
const attrs = data.attributes as Record<string, any>
|
||||
formData.value.attributes.unit = attrs['unit'] || '件'
|
||||
}
|
||||
|
||||
// Try to map category
|
||||
formData.value.category_id = data.category_id as string || ''
|
||||
if (formData.value.category_id) {
|
||||
const cat = categoryOptions.value.find((c: CategoryOption): boolean => c.id === formData.value.category_id)
|
||||
categoryName.value = cat ? cat.name : '未知分类'
|
||||
if (res.error != null) {
|
||||
console.error('[ProductEdit] 查询失败:', res.error)
|
||||
uni.showToast({ title: '获取商品信息失败,或者无权限编辑', icon: 'none' })
|
||||
return
|
||||
}
|
||||
|
||||
// .single() 返回时 data 可能是 UTSJSONObject 或包含一条记录的数组,兼容处理
|
||||
let row : UTSJSONObject | null = null
|
||||
if (res.data != null) {
|
||||
const raw = res.data
|
||||
if (Array.isArray(raw)) {
|
||||
const arr = raw as Array<UTSJSONObject>
|
||||
if (arr.length > 0) row = arr[0] as UTSJSONObject
|
||||
} else {
|
||||
row = raw as UTSJSONObject
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取详情失败', e)
|
||||
uni.showToast({ title: '获取商品信息失败,或者无权限编辑', icon: 'none' })
|
||||
|
||||
if (row == null) {
|
||||
uni.showToast({ title: '未找到该商品', icon: 'none' })
|
||||
return
|
||||
}
|
||||
|
||||
formData.value.id = row.getString('id') ?? ''
|
||||
formData.value.name = row.getString('name') ?? ''
|
||||
formData.value.base_price = row.getNumber('base_price') ?? 0
|
||||
formData.value.available_stock = row.getNumber('available_stock') ?? 0
|
||||
formData.value.total_stock = row.getNumber('total_stock') ?? row.getNumber('available_stock') ?? 0
|
||||
formData.value.status = row.getNumber('status') ?? 1
|
||||
formData.value.main_image_url = row.getString('main_image_url') ?? ''
|
||||
formData.value.category_id = row.getString('category_id') ?? ''
|
||||
|
||||
// image_urls / video_urls / tags 是 JSONB 数组,用 .get() 取原始值再强转
|
||||
const imgRaw = row.get('image_urls')
|
||||
if (imgRaw != null && Array.isArray(imgRaw)) {
|
||||
formData.value.image_urls = imgRaw as string[]
|
||||
}
|
||||
const vidRaw = row.get('video_urls')
|
||||
if (vidRaw != null && Array.isArray(vidRaw)) {
|
||||
formData.value.video_urls = vidRaw as string[]
|
||||
}
|
||||
const tagsRaw = row.get('tags')
|
||||
if (tagsRaw != null && Array.isArray(tagsRaw)) {
|
||||
formData.value.tags = tagsRaw as string[]
|
||||
}
|
||||
|
||||
// attributes JSONB 是对象,用 getJSON 取
|
||||
const attrsRaw = row.getJSON('attributes')
|
||||
if (attrsRaw != null) {
|
||||
formData.value.attributes.unit = attrsRaw.getString('unit') ?? '件'
|
||||
}
|
||||
|
||||
// 同步分类名称
|
||||
if (formData.value.category_id) {
|
||||
const cat = categoryOptions.value.find((c: CategoryOption): boolean => c.id === formData.value.category_id)
|
||||
categoryName.value = cat ? cat.name : ''
|
||||
}
|
||||
|
||||
console.log('[ProductEdit] 加载成功,id=', formData.value.id, 'name=', formData.value.name)
|
||||
} catch (e : any) {
|
||||
console.error('[ProductEdit] 获取详情异常:', e)
|
||||
uni.showToast({ title: '获取商品信息失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user