102 lines
3.5 KiB
TypeScript
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: '删除版房信息失败' })
|
|
}
|
|
}
|