|
|
@@ -162,14 +162,8 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
|
|
|
showDialog(sku) {
|
|
|
if (sku) {
|
|
|
this.editingId = sku.id
|
|
|
- let specsVal = sku.specs || ''
|
|
|
- if (typeof specsVal === 'object') {
|
|
|
- specsVal = JSON.stringify(specsVal)
|
|
|
- } else if (typeof specsVal === 'string' && specsVal.trim().startsWith('[')) {
|
|
|
- try { specsVal = JSON.stringify(JSON.parse(specsVal)) } catch (e) {}
|
|
|
- }
|
|
|
this.skuForm = {
|
|
|
- specs: specsVal,
|
|
|
+ specs: this.formatSpecsForInput(sku.specs),
|
|
|
price: sku.price ? parseFloat(sku.price) : 0,
|
|
|
originalPrice: sku.originalPrice ? parseFloat(sku.originalPrice) : 0,
|
|
|
stock: sku.stock || 0,
|
|
|
@@ -211,11 +205,9 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
|
|
|
parseSpecs(specs) {
|
|
|
if (!specs) return '-'
|
|
|
try {
|
|
|
- // Handle object (Map from DTO) directly
|
|
|
if (typeof specs === 'object') {
|
|
|
return Object.entries(specs).map(([k, v]) => k + ':' + v).join('; ')
|
|
|
}
|
|
|
- // Handle string (JSON string)
|
|
|
const obj = JSON.parse(specs)
|
|
|
if (typeof obj === 'object' && obj !== null) {
|
|
|
return Object.entries(obj).map(([k, v]) => k + ':' + v).join('; ')
|
|
|
@@ -225,6 +217,25 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
|
|
|
return specs
|
|
|
}
|
|
|
},
|
|
|
+ formatSpecsForInput(specs) {
|
|
|
+ if (!specs) return ''
|
|
|
+ if (typeof specs === 'object') {
|
|
|
+ return Object.entries(specs).map(([k, v]) => k + ':' + v).join('; ')
|
|
|
+ }
|
|
|
+ const text = String(specs).trim()
|
|
|
+ if (!text) return ''
|
|
|
+ try {
|
|
|
+ const parsed = JSON.parse(text)
|
|
|
+ if (Array.isArray(parsed)) {
|
|
|
+ return parsed.map((item, index) => '规格' + (index + 1) + ':' + item).join('; ')
|
|
|
+ }
|
|
|
+ if (parsed && typeof parsed === 'object') {
|
|
|
+ return Object.entries(parsed).map(([k, v]) => k + ':' + v).join('; ')
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ }
|
|
|
+ return text
|
|
|
+ },
|
|
|
normalizeSpecsToJson(specs) {
|
|
|
if (!specs || !specs.trim()) return '{}'
|
|
|
const trimmed = specs.trim()
|
|
|
@@ -269,9 +280,9 @@ const baseURL = process.env.VUE_APP_BASE_API || ''
|
|
|
res = await createProductSku(payload)
|
|
|
}
|
|
|
if (res.code === 200) {
|
|
|
+ await this.loadSkus()
|
|
|
this.$message.success('保存成功')
|
|
|
this.dialogVisible = false
|
|
|
- this.loadSkus()
|
|
|
} else {
|
|
|
this.$message.error(res.message || '保存失败')
|
|
|
}
|