84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
const { query, transaction } = require('../config/database')
|
|
|
|
async function getSpecs(ctx) {
|
|
const goodsId = ctx.query.goods_id
|
|
if (!goodsId) {
|
|
ctx.body = { code: 400, message: '缺少 goods_id 参数' }
|
|
return
|
|
}
|
|
|
|
const rows = await query('SELECT * FROM goods_specs WHERE goods_id = ? ORDER BY price ASC', [goodsId])
|
|
ctx.body = { code: 200, data: rows }
|
|
}
|
|
|
|
async function createSpec(ctx) {
|
|
const { goods_id, spec_name, price, stock = 0 } = ctx.request.body
|
|
|
|
if (!goods_id || !spec_name || price === undefined) {
|
|
ctx.body = { code: 400, message: '缺少必填参数' }
|
|
return
|
|
}
|
|
|
|
const result = await query(
|
|
'INSERT INTO goods_specs (goods_id, spec_name, price, stock) VALUES (?, ?, ?, ?)',
|
|
[goods_id, spec_name, price, stock]
|
|
)
|
|
|
|
ctx.body = { code: 200, data: { id: result.insertId } }
|
|
}
|
|
|
|
async function updateSpec(ctx) {
|
|
const id = ctx.params.id
|
|
const { spec_name, price, stock } = ctx.request.body
|
|
|
|
const fields = []
|
|
const params = []
|
|
if (spec_name !== undefined) { fields.push('spec_name = ?'); params.push(spec_name) }
|
|
if (price !== undefined) { fields.push('price = ?'); params.push(price) }
|
|
if (stock !== undefined) { fields.push('stock = ?'); params.push(stock) }
|
|
|
|
if (fields.length > 0) {
|
|
params.push(id)
|
|
await query(`UPDATE goods_specs SET ${fields.join(', ')} WHERE id = ?`, params)
|
|
}
|
|
|
|
ctx.body = { code: 200, message: '更新成功' }
|
|
}
|
|
|
|
async function deleteSpec(ctx) {
|
|
const id = ctx.params.id
|
|
await query('DELETE FROM goods_specs WHERE id = ?', [id])
|
|
ctx.body = { code: 200, message: '删除成功' }
|
|
}
|
|
|
|
async function batchSave(ctx) {
|
|
const { goods_id, specs } = ctx.request.body
|
|
|
|
if (!goods_id || !Array.isArray(specs)) {
|
|
ctx.body = { code: 400, message: '参数错误' }
|
|
return
|
|
}
|
|
|
|
await transaction(async (conn) => {
|
|
await conn.execute('DELETE FROM goods_specs WHERE goods_id = ?', [goods_id])
|
|
for (const spec of specs) {
|
|
if (spec.spec_name && spec.price !== undefined) {
|
|
await conn.execute(
|
|
'INSERT INTO goods_specs (goods_id, spec_name, price, stock) VALUES (?, ?, ?, ?)',
|
|
[goods_id, spec.spec_name, spec.price, spec.stock || 0]
|
|
)
|
|
}
|
|
}
|
|
})
|
|
|
|
ctx.body = { code: 200, message: '保存成功' }
|
|
}
|
|
|
|
module.exports = {
|
|
getSpecs,
|
|
createSpec,
|
|
updateSpec,
|
|
deleteSpec,
|
|
batchSave
|
|
}
|