| 
					
				 | 
			
			
				@@ -0,0 +1,81 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const express = require('express'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const router = express.Router(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { Category } = require('../models'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 获取所有顶级品类及其子类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router.get('/tree', async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const categories = await Category.findAll({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      where: { level: 1 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      include: [{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        model: Category, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        as: 'children' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      order: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ['order', 'ASC'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [{ model: Category, as: 'children' }, 'order', 'ASC'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.json(categories); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(500).json({ error: error.message }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 根据ID获取品类及其所有子类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router.get('/:id', async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const category = await Category.findByPk(req.params.id, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      include: [{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        model: Category, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        as: 'children' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!category) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return res.status(404).json({ error: '品类不存在' }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.json(category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(500).json({ error: error.message }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 添加新品类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router.post('/', async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const category = await Category.create(req.body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(201).json(category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(500).json({ error: error.message }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 更新品类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router.put('/:id', async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const category = await Category.findByPk(req.params.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!category) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return res.status(404).json({ error: '品类不存在' }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await category.update(req.body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.json(category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(500).json({ error: error.message }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 删除品类(会级联删除子类) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+router.delete('/:id', async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const category = await Category.findByPk(req.params.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!category) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return res.status(404).json({ error: '品类不存在' }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    await category.destroy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(204).send(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res.status(500).json({ error: error.message }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+module.exports = router; 
			 |