fix: 修复api.request的POST/PUT数据序列化问题,统一处理
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Agent
2026-03-30 00:22:59 +00:00
parent 0b0372b868
commit 10269adfef
3 changed files with 12 additions and 74 deletions

View File

@@ -19,11 +19,17 @@ const request = (url, method, query = {}, data = {}) => {
requestData = data
}
// POST/PUT 请求需要 JSON 序列化
let requestBody = requestData
if (method !== 'GET' && Object.keys(requestData).length > 0) {
requestBody = JSON.stringify(requestData)
}
return new Promise((resolve, reject) => {
uni.request({
url: BASE_URL + url,
method: method,
data: requestData,
data: requestBody,
header: {
'Content-Type': useFormData ? 'application/x-www-form-urlencoded' : 'application/json',
'Authorization': token ? `Bearer ${token}` : '',
@@ -55,4 +61,4 @@ const request = (url, method, query = {}, data = {}) => {
export default {
request
}
}

View File

@@ -15,50 +15,14 @@ export default {
* 新增分类
*/
createCategory(data) {
const token = uni.getStorageSync('token')
const role = uni.getStorageSync('role') || ''
return new Promise((resolve, reject) => {
uni.request({
url: `${import.meta.env.VITE_API_BASE_URL}/products/categories`,
method: 'POST',
data: JSON.stringify(data),
header: {
'Content-Type': 'application/json',
'Authorization': token ? `Bearer ${token}` : '',
'X-User-Role': role
},
success: (res) => {
if (res.data.code === 0) resolve(res.data.data)
else reject(res.data)
},
fail: reject
})
})
return api.request('/products/categories', 'POST', {}, data)
},
/**
* 修改分类
*/
updateCategory(id, data) {
const token = uni.getStorageSync('token')
const role = uni.getStorageSync('role') || ''
return new Promise((resolve, reject) => {
uni.request({
url: `${import.meta.env.VITE_API_BASE_URL}/products/categories/${id}`,
method: 'PUT',
data: JSON.stringify(data),
header: {
'Content-Type': 'application/json',
'Authorization': token ? `Bearer ${token}` : '',
'X-User-Role': role
},
success: (res) => {
if (res.data.code === 0) resolve(res.data.data)
else reject(res.data)
},
fail: reject
})
})
return api.request(`/products/categories/${id}`, 'PUT', {}, data)
},
/**
@@ -134,34 +98,7 @@ export default {
* 保存种类的属性定义
*/
saveCategoryAttributes(categoryId, attrs) {
const token = uni.getStorageSync('token')
const role = uni.getStorageSync('role') || ''
return new Promise((resolve, reject) => {
// 将数据转为 form 数据格式
let formData = new Object()
attrs.forEach((attr, index) => {
formData[`attributes[${index}].name`] = attr.name || ''
formData[`attributes[${index}].attrType`] = attr.attrType || 'number'
formData[`attributes[${index}].unit`] = attr.unit || ''
})
uni.request({
url: `${import.meta.env.VITE_API_BASE_URL}/products/categories/${categoryId}/attributes`,
method: 'POST',
data: formData,
header: {
'Authorization': token ? `Bearer ${token}` : '',
'X-User-Role': role
},
success: (res) => {
if (res.data.code === 0) {
resolve(res.data.data)
} else {
reject(res.data)
}
},
fail: reject
})
})
return api.request(`/products/categories/${categoryId}/attributes`, 'POST', {}, { attributes: attrs })
},
// ============ 商品属性 ============

View File

@@ -211,21 +211,16 @@ export default {
this.showAttrDialog = false
},
async saveAttributes() {
console.log('this.attributes:', JSON.stringify(this.attributes))
const validAttrs = this.attributes.filter(a => a.name.trim())
console.log('validAttrs:', JSON.stringify(validAttrs))
if (validAttrs.length === 0) {
uni.showToast({ title: '请至少添加一个属性', icon: 'none' })
return
}
try {
const payload = { attributes: JSON.parse(JSON.stringify(validAttrs)) }
console.log('payload:', JSON.stringify(payload))
await api.request(`/products/categories/${this.currentCategory.categoryId}/attributes`, 'POST', {}, payload)
await productApi.saveCategoryAttributes(this.currentCategory.categoryId, validAttrs)
uni.showToast({ title: '保存成功', icon: 'success' })
this.closeAttrDialog()
} catch (e) {
console.error('保存失败:', e)
uni.showToast({ title: '保存失败', icon: 'none' })
}
}