56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import { Request, Response } from 'express'
|
|
import pool from '../utils/db'
|
|
import { RowDataPacket, ResultSetHeader } from 'mysql2'
|
|
|
|
// GET /api/admin/categories
|
|
export async function adminGetCategories(_req: Request, res: Response): Promise<void> {
|
|
try {
|
|
const [rows] = await pool.execute<RowDataPacket[]>(
|
|
'SELECT id, name, icon, parent_id, sort FROM categories ORDER BY sort ASC, id ASC'
|
|
)
|
|
res.json({ code: 0, data: rows })
|
|
} catch (err) {
|
|
console.error('adminGetCategories error:', err)
|
|
res.status(500).json({ code: 500, message: '获取分类列表失败' })
|
|
}
|
|
}
|
|
|
|
// POST /api/admin/categories
|
|
export async function adminCreateCategory(req: Request, res: Response): Promise<void> {
|
|
try {
|
|
const { name, parentId, sort, icon } = req.body
|
|
if (!name || !name.trim()) {
|
|
res.status(400).json({ code: 400, message: '分类名称不能为空' })
|
|
return
|
|
}
|
|
const [result] = await pool.execute<ResultSetHeader>(
|
|
'INSERT INTO categories (name, icon, parent_id, sort) VALUES (?, ?, ?, ?)',
|
|
[name.trim(), icon || null, parentId || null, sort ?? 0]
|
|
)
|
|
res.json({ code: 0, data: { id: result.insertId } })
|
|
} catch (err) {
|
|
console.error('adminCreateCategory error:', err)
|
|
res.status(500).json({ code: 500, message: '创建分类失败' })
|
|
}
|
|
}
|
|
|
|
// DELETE /api/admin/categories/:id
|
|
export async function adminDeleteCategory(req: Request, res: Response): Promise<void> {
|
|
try {
|
|
const { id } = req.params
|
|
// Check if any products use this category
|
|
const [products] = await pool.execute<RowDataPacket[]>(
|
|
'SELECT COUNT(*) as count FROM products WHERE category_id = ?', [id]
|
|
)
|
|
if (products[0].count > 0) {
|
|
res.status(400).json({ code: 400, message: '该分类下有商品,无法删除' })
|
|
return
|
|
}
|
|
await pool.execute('DELETE FROM categories WHERE id = ?', [id])
|
|
res.json({ code: 0, message: '删除成功' })
|
|
} catch (err) {
|
|
console.error('adminDeleteCategory error:', err)
|
|
res.status(500).json({ code: 500, message: '删除分类失败' })
|
|
}
|
|
}
|