JewelryMall/server/src/controllers/adminMold.ts
2026-02-21 14:20:00 +08:00

102 lines
3.5 KiB
TypeScript

import { Request, Response } from 'express'
import pool from '../utils/db'
import { RowDataPacket, ResultSetHeader } from 'mysql2'
// GET /api/admin/molds - 管理后台版房列表
export async function adminGetMolds(req: Request, res: Response): Promise<void> {
try {
const page = Math.max(1, Number(req.query.page) || 1)
const pageSize = Math.min(50, Math.max(1, Number(req.query.pageSize) || 10))
const keyword = req.query.keyword as string | undefined
const offset = (page - 1) * pageSize
let where = ''
const params: any[] = []
if (keyword && keyword.trim()) {
const kw = `%${keyword.trim()}%`
where = 'WHERE name LIKE ? OR style_no LIKE ? OR barcode_no LIKE ? OR style LIKE ?'
params.push(kw, kw, kw, kw)
}
const [countRows] = await pool.execute<RowDataPacket[]>(
`SELECT COUNT(*) as total FROM mold_infos ${where}`,
params
)
const total = countRows[0].total
const [rows] = await pool.execute<RowDataPacket[]>(
`SELECT id, name, style_no, barcode_no, style, images, created_at, updated_at
FROM mold_infos ${where}
ORDER BY id DESC LIMIT ? OFFSET ?`,
[...params, String(pageSize), String(offset)]
)
res.json({ code: 0, data: { list: rows, total, page, pageSize } })
} catch (err) {
console.error('adminGetMolds error:', err)
res.status(500).json({ code: 500, message: '获取版房列表失败' })
}
}
// POST /api/admin/molds - 创建版房信息
export async function adminCreateMold(req: Request, res: Response): Promise<void> {
try {
const { name, styleNo, barcodeNo, style, images } = req.body
if (!name) {
res.status(400).json({ code: 400, message: '版房名称不能为空' })
return
}
const [result] = await pool.execute<ResultSetHeader>(
'INSERT INTO mold_infos (name, style_no, barcode_no, style, images) VALUES (?, ?, ?, ?, ?)',
[name, styleNo || null, barcodeNo || null, style || null, JSON.stringify(images || [])]
)
res.json({ code: 0, data: { id: result.insertId } })
} catch (err) {
console.error('adminCreateMold error:', err)
res.status(500).json({ code: 500, message: '创建版房信息失败' })
}
}
// PUT /api/admin/molds/:id - 编辑版房信息
export async function adminUpdateMold(req: Request, res: Response): Promise<void> {
try {
const { id } = req.params
const { name, styleNo, barcodeNo, style, images } = req.body
const [existing] = await pool.execute<RowDataPacket[]>(
'SELECT id FROM mold_infos WHERE id = ?',
[id]
)
if (existing.length === 0) {
res.status(404).json({ code: 404, message: '版房信息不存在' })
return
}
await pool.execute(
'UPDATE mold_infos SET name=?, style_no=?, barcode_no=?, style=?, images=? WHERE id=?',
[name, styleNo || null, barcodeNo || null, style || null, JSON.stringify(images || []), id]
)
res.json({ code: 0, message: '更新成功' })
} catch (err) {
console.error('adminUpdateMold error:', err)
res.status(500).json({ code: 500, message: '更新版房信息失败' })
}
}
// DELETE /api/admin/molds/:id - 删除版房信息
export async function adminDeleteMold(req: Request, res: Response): Promise<void> {
try {
const { id } = req.params
await pool.execute('DELETE FROM mold_infos WHERE id = ?', [id])
res.json({ code: 0, message: '删除成功' })
} catch (err) {
console.error('adminDeleteMold error:', err)
res.status(500).json({ code: 500, message: '删除版房信息失败' })
}
}