接口更改
This commit is contained in:
@@ -52,14 +52,6 @@ const auth = async (req, res, next) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 管理员认证中间件
|
|
||||||
const adminAuth = (req, res, next) => {
|
|
||||||
if (req.user.role !== 'admin') {
|
|
||||||
return res.status(403).json({ success: false, message: '需要管理员权限' });
|
|
||||||
}
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付认证中间件
|
* 支付认证中间件
|
||||||
* 只验证JWT令牌和用户状态,不检查支付状态
|
* 只验证JWT令牌和用户状态,不检查支付状态
|
||||||
@@ -107,4 +99,4 @@ const paymentAuth = async (req, res, next) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { auth, adminAuth, paymentAuth, JWT_SECRET };
|
module.exports = { paymentAuth, JWT_SECRET };
|
||||||
79
routes/category.js
Normal file
79
routes/category.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const { getDB } = require('../database');
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
// 获取商品分类列表
|
||||||
|
router.get('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [categories] = await getDB().execute(
|
||||||
|
'SELECT * FROM category'
|
||||||
|
);
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
categories
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取商品分类失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '获取商品分类失败' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { category_name } = req.body;
|
||||||
|
await getDB().execute(
|
||||||
|
'INSERT INTO category (category_name) VALUES (?)',
|
||||||
|
[category_name]
|
||||||
|
);
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: '商品分类创建成功'
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('创建商品分类失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '创建商品分类失败' });
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
router.put('/:id', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { id } = req.params;
|
||||||
|
const { category_name } = req.body;
|
||||||
|
await getDB().execute(
|
||||||
|
'UPDATE category SET category_name = ? WHERE id = ?',
|
||||||
|
[category_name, id]
|
||||||
|
);
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: '商品分类更新成功'
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('更新商品分类失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '更新商品分类失败' });
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 删除商品分类
|
||||||
|
router.delete('/:id', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { id } = req.params;
|
||||||
|
await getDB().execute(
|
||||||
|
'DELETE FROM category WHERE id = ?',
|
||||||
|
[id]
|
||||||
|
);
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: '商品分类删除成功'
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('删除商品分类失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '删除商品分类失败' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
@@ -3,7 +3,7 @@ const router = express.Router();
|
|||||||
const { auth } = require('../middleware/auth');
|
const { auth } = require('../middleware/auth');
|
||||||
const { getDB } = require('../database');
|
const { getDB } = require('../database');
|
||||||
|
|
||||||
router.get('/', auth, async (req, res) => {
|
router.get('/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { page = 1, limit = 10 } = req.query;
|
const { page = 1, limit = 10 } = req.query;
|
||||||
const pageNum = parseInt(page) || 1;
|
const pageNum = parseInt(page) || 1;
|
||||||
@@ -65,7 +65,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/', auth, async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
const couponProduct = await db.query(
|
const couponProduct = await db.query(
|
||||||
@@ -87,7 +87,7 @@ router.post('/', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.delete('/:id', auth, async (req, res) => {
|
router.delete('/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
const couponProduct = await db.query(
|
const couponProduct = await db.query(
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const { getDB } = require('../database');
|
const { getDB } = require('../database');
|
||||||
const { auth, adminAuth } = require('../middleware/auth');
|
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -8,7 +7,7 @@ const router = express.Router();
|
|||||||
|
|
||||||
|
|
||||||
// 获取订单列表
|
// 获取订单列表
|
||||||
router.get('/', auth, async (req, res) => {
|
router.get('/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { page = 1, limit = 10, search = '', orderNumber = '', username = '', status = '', startDate = '', endDate = '' } = req.query;
|
const { page = 1, limit = 10, search = '', orderNumber = '', username = '', status = '', startDate = '', endDate = '' } = req.query;
|
||||||
|
|
||||||
@@ -18,7 +17,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
const pageNum = parseInt(page) || 1;
|
const pageNum = parseInt(page) || 1;
|
||||||
const limitNum = parseInt(limit) || 10;
|
const limitNum = parseInt(limit) || 10;
|
||||||
const offset = (pageNum - 1) * limitNum;
|
const offset = (pageNum - 1) * limitNum;
|
||||||
const isAdmin = req.user.role === 'admin';
|
const isAdmin = true;
|
||||||
|
|
||||||
let whereClause = 'WHERE 1=1';
|
let whereClause = 'WHERE 1=1';
|
||||||
const params = [];
|
const params = [];
|
||||||
@@ -141,7 +140,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.post('/confirm', auth, async (req, res) => {
|
router.post('/confirm', async (req, res) => {
|
||||||
const connection = await getDB().getConnection();
|
const connection = await getDB().getConnection();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -265,7 +264,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.get('/pre-order/:id', auth, async (req, res) => {
|
router.get('/pre-order/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const preOrderId = req.params.id;
|
const preOrderId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
@@ -327,7 +326,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.get('/:id', auth, async (req, res) => {
|
router.get('/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const isAdmin = req.user.role === 'admin';
|
const isAdmin = req.user.role === 'admin';
|
||||||
@@ -408,7 +407,7 @@ router.get('/:id', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 创建预订单
|
// 创建预订单
|
||||||
router.post('/create-from-cart', auth, async (req, res) => {
|
router.post('/create-from-cart', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
await db.query('START TRANSACTION');
|
await db.query('START TRANSACTION');
|
||||||
|
|
||||||
@@ -590,7 +589,7 @@ router.post('/create-from-cart', auth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.put('/:id/cancel', auth, async (req, res) => {
|
router.put('/:id/cancel', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
await db.query('START TRANSACTION');
|
await db.query('START TRANSACTION');
|
||||||
|
|
||||||
@@ -682,7 +681,7 @@ router.put('/:id/cancel', auth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.put('/:id/confirm', auth, async (req, res) => {
|
router.put('/:id/confirm', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const orderId = req.params.id;
|
const orderId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
@@ -767,7 +766,7 @@ router.put('/:id/confirm', auth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.put('/:id/status', auth, adminAuth, async (req, res) => {
|
router.put('/:id/status', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
await db.query('START TRANSACTION');
|
await db.query('START TRANSACTION');
|
||||||
|
|
||||||
@@ -914,7 +913,7 @@ router.put('/:id/status', auth, adminAuth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.get('/pending-payment/:id', auth, async (req, res) => {
|
router.get('/pending-payment/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const preOrderId = req.params.id;
|
const preOrderId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
@@ -1055,7 +1054,7 @@ router.get('/pending-payment/:id', auth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.post('/confirm-payment', auth, async (req, res) => {
|
router.post('/confirm-payment', async (req, res) => {
|
||||||
const connection = await getDB().getConnection();
|
const connection = await getDB().getConnection();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -1304,7 +1303,7 @@ router.post('/confirm-payment', auth, async (req, res) => {
|
|||||||
* 500:
|
* 500:
|
||||||
* description: 服务器错误
|
* description: 服务器错误
|
||||||
*/
|
*/
|
||||||
router.get('/stats', auth, adminAuth, async (req, res) => {
|
router.get('/stats', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
// 总订单数
|
// 总订单数
|
||||||
const [totalOrders] = await getDB().execute('SELECT COUNT(*) as count FROM orders');
|
const [totalOrders] = await getDB().execute('SELECT COUNT(*) as count FROM orders');
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const { getDB } = require('../database');
|
const { getDB } = require('../database');
|
||||||
const { auth, adminAuth } = require('../middleware/auth');
|
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -52,11 +51,18 @@ router.get('/', async (req, res) => {
|
|||||||
|
|
||||||
// 确保参数数组正确传递
|
// 确保参数数组正确传递
|
||||||
const queryParams = [...params];
|
const queryParams = [...params];
|
||||||
console.log('Query params:', queryParams, 'Query:', query);
|
|
||||||
const [products] = await getDB().execute(query, queryParams);
|
const [products] = await getDB().execute(query, queryParams);
|
||||||
products.forEach(item=>{
|
products.forEach(item=>{
|
||||||
item.payment_methods = JSON.parse(item.payment_methods)
|
item.payment_methods = JSON.parse(item.payment_methods)
|
||||||
})
|
})
|
||||||
|
for(let item of products){
|
||||||
|
// console.log("1234567",item)
|
||||||
|
// const categoryQuery = `SELECT category_name FROM category WHERE id = ?`;
|
||||||
|
// const [categoryResult] = await getDB().execute(categoryQuery, [parseInt(item.category)]);
|
||||||
|
// item.category = categoryResult.category_name;
|
||||||
|
// console.log("qwer",categoryResult)
|
||||||
|
parseInt(item.category) === 20 ? console.log('yes') : console.log('no')
|
||||||
|
}
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
data: {
|
data: {
|
||||||
@@ -75,25 +81,6 @@ router.get('/', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获取商品分类列表
|
|
||||||
router.get('/categories', async (req, res) => {
|
|
||||||
try {
|
|
||||||
const [categories] = await getDB().execute(
|
|
||||||
'SELECT DISTINCT category FROM products WHERE status = "active" AND category IS NOT NULL'
|
|
||||||
);
|
|
||||||
|
|
||||||
res.json({
|
|
||||||
success: true,
|
|
||||||
data: {
|
|
||||||
categories: categories.map(item => item.category)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error('获取商品分类失败:', error);
|
|
||||||
res.status(500).json({ success: false, message: '获取商品分类失败' });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 获取热销商品
|
// 获取热销商品
|
||||||
router.get('/hot', async (req, res) => {
|
router.get('/hot', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@@ -378,7 +365,7 @@ router.get('/:id', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 创建商品(管理员权限)
|
// 创建商品(管理员权限)
|
||||||
router.post('/', auth, adminAuth, async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
name, description, price, points_price, rongdou_price = 0, stock, category,
|
name, description, price, points_price, rongdou_price = 0, stock, category,
|
||||||
@@ -427,7 +414,7 @@ router.post('/', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 更新商品(管理员权限)
|
// 更新商品(管理员权限)
|
||||||
router.put('/:id', auth, adminAuth, async (req, res) => {
|
router.put('/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const productId = req.params.id;
|
const productId = req.params.id;
|
||||||
const {
|
const {
|
||||||
@@ -567,7 +554,7 @@ router.put('/:id', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 删除商品(管理员权限)
|
// 删除商品(管理员权限)
|
||||||
router.delete('/:id', auth, adminAuth, async (req, res) => {
|
router.delete('/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
|
|
||||||
@@ -601,7 +588,7 @@ router.delete('/:id', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 获取商品统计信息(管理员权限)
|
// 获取商品统计信息(管理员权限)
|
||||||
router.get('/stats', auth, adminAuth, async (req, res) => {
|
router.get('/stats', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
// 获取商品总数
|
// 获取商品总数
|
||||||
const totalQuery = 'SELECT COUNT(*) as total FROM products';
|
const totalQuery = 'SELECT COUNT(*) as total FROM products';
|
||||||
@@ -777,7 +764,7 @@ router.get('/:id/recommended', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 收藏商品
|
// 收藏商品
|
||||||
router.post('/:id/favorite', auth, async (req, res) => {
|
router.post('/:id/favorite', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const productId = req.params.id;
|
const productId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
@@ -814,7 +801,7 @@ router.post('/:id/favorite', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 取消收藏商品
|
// 取消收藏商品
|
||||||
router.delete('/:id/favorite', auth, async (req, res) => {
|
router.delete('/:id/favorite', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const productId = req.params.id;
|
const productId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
@@ -839,7 +826,7 @@ router.delete('/:id/favorite', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 获取用户收藏的商品列表
|
// 获取用户收藏的商品列表
|
||||||
router.get('/favorites', auth, async (req, res) => {
|
router.get('/favorites', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
const page = parseInt(req.query.page) || 1;
|
const page = parseInt(req.query.page) || 1;
|
||||||
@@ -908,7 +895,7 @@ router.get('/:id/attributes', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 创建商品评论
|
// 创建商品评论
|
||||||
router.post('/:id/reviews', auth, async (req, res) => {
|
router.post('/:id/reviews', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const productId = req.params.id;
|
const productId = req.params.id;
|
||||||
const userId = req.user.id;
|
const userId = req.user.id;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const { auth } = require('../middleware/auth');
|
|
||||||
const { getDB } = require('../database');
|
const { getDB } = require('../database');
|
||||||
|
|
||||||
router.get('/', auth, async (req, res) => {
|
router.get('/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
@@ -17,7 +16,7 @@ router.get('/', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/product-details/:id', auth, async (req, res) => {
|
router.get('/product-details/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -38,7 +37,7 @@ router.get('/product-details/:id', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.get('/flash-products', auth, async (req, res) => {
|
router.get('/flash-products', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
||||||
|
|
||||||
@@ -111,7 +110,7 @@ router.get('/flash-products', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.get('/flash-product/:id', auth, async (req, res) => {
|
router.get('/flash-product/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -132,7 +131,7 @@ router.get('/flash-product/:id', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.delete('/flash-product/:id', auth, async (req, res) => {
|
router.delete('/flash-product/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -152,7 +151,7 @@ router.delete('/flash-product/:id', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/flash-product', auth, async (req, res) => {
|
router.post('/flash-product', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { start_time, end_time, flash_stock, flash_price, products_id } = req.body;
|
const { start_time, end_time, flash_stock, flash_price, products_id } = req.body;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -170,7 +169,7 @@ router.post('/flash-product', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.put('/flash-product/:id', auth, async (req, res) => {
|
router.put('/flash-product/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const { start_time, end_time, flash_stock, flash_price, products_id } = req.body;
|
const { start_time, end_time, flash_stock, flash_price, products_id } = req.body;
|
||||||
@@ -198,7 +197,7 @@ router.put('/flash-product/:id', auth, async (req, res) => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
router.get('/recommend-products', auth, async (req, res) => {
|
router.get('/recommend-products', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
||||||
|
|
||||||
@@ -269,7 +268,7 @@ router.get('/recommend-products', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/recommend-product', auth, async (req, res) => {
|
router.post('/recommend-product', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { products_id } = req.body;
|
const { products_id } = req.body;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -287,7 +286,7 @@ router.post('/recommend-product', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.delete('/recommend-product/:id', auth, async (req, res) => {
|
router.delete('/recommend-product/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -308,7 +307,7 @@ router.delete('/recommend-product/:id', auth, async (req, res) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 供应商
|
// 供应商
|
||||||
router.get('/producer-list', auth, async (req, res) => {
|
router.get('/producer-list', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
const { page = 1, limit = 10, search = '', category = '' } = req.query;
|
||||||
|
|
||||||
@@ -367,7 +366,7 @@ router.get('/producer-list', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/producer', auth, async (req, res) => {
|
router.post('/producer', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { producer_name } = req.body;
|
const { producer_name } = req.body;
|
||||||
const query = `
|
const query = `
|
||||||
@@ -385,7 +384,7 @@ router.post('/producer', auth, async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.delete('/producer/:id', auth, async (req, res) => {
|
router.delete('/producer/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const query = `
|
const query = `
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const {getDB} = require('../database');
|
const {getDB} = require('../database');
|
||||||
const {auth, adminAuth} = require('../middleware/auth');
|
|
||||||
const {SelectBuilder} = require('../config/dbv2')
|
const {SelectBuilder} = require('../config/dbv2')
|
||||||
const {db} = require("../server");
|
const {db} = require("../server");
|
||||||
const sql = require("../config/config");
|
const sql = require("../config/config");
|
||||||
|
|
||||||
|
|
||||||
router.get('/names', auth, async (req, res) => {
|
router.get('/names', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {status = 'active'} = req.query;
|
const {status = 'active'} = req.query;
|
||||||
const {id: created_id} = req.user;
|
const {id: created_id} = req.user;
|
||||||
@@ -36,7 +35,7 @@ router.get('/names', auth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.post('/names', auth, adminAuth, async (req, res) => {
|
router.post('/names', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
try {
|
try {
|
||||||
const {name, display_name, sort_order = 0} = req.body;
|
const {name, display_name, sort_order = 0} = req.body;
|
||||||
@@ -65,7 +64,7 @@ router.post('/names', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.delete('/names/:id', auth, adminAuth, async (req, res) => {
|
router.delete('/names/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {id} = req.params;
|
const {id} = req.params;
|
||||||
const {id:user_id,role} = req.user
|
const {id:user_id,role} = req.user
|
||||||
@@ -145,7 +144,7 @@ router.get('/values', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.post('/values', auth, adminAuth, async (req, res) => {
|
router.post('/values', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {spec_name_id, value, display_value, color_code, image_url, sort_order = 0} = req.body;
|
const {spec_name_id, value, display_value, color_code, image_url, sort_order = 0} = req.body;
|
||||||
|
|
||||||
@@ -348,7 +347,7 @@ router.get('/combinations/:id', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.delete('/combinations/:id', auth, adminAuth, async (req, res) => {
|
router.delete('/combinations/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {id} = req.params;
|
const {id} = req.params;
|
||||||
|
|
||||||
@@ -379,7 +378,7 @@ router.delete('/combinations/:id', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.put('/combinations/:id', auth, adminAuth, async (req, res) => {
|
router.put('/combinations/:id', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {id} = req.params;
|
const {id} = req.params;
|
||||||
const {
|
const {
|
||||||
@@ -477,7 +476,7 @@ router.put('/combinations/:id', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.post('/combinations', auth, adminAuth, async (req, res) => {
|
router.post('/combinations', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
product_id,
|
product_id,
|
||||||
@@ -535,7 +534,7 @@ router.post('/combinations', auth, adminAuth, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
router.post('/generate-combinations', auth, adminAuth, async (req, res) => {
|
router.post('/generate-combinations', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {product_id, spec_name_ids, default_stock = 0} = req.body;
|
const {product_id, spec_name_ids, default_stock = 0} = req.body;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
//供应商接口
|
//供应商接口
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const {getDB} = require('../database');
|
const {getDB} = require('../database');
|
||||||
const {auth, adminAuth} = require('../middleware/auth');
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const {SelectBuilder, InsertBuilder, UpdateBuilder} = require('../config/dbv2')
|
const {SelectBuilder, InsertBuilder, UpdateBuilder} = require('../config/dbv2')
|
||||||
const bcrypt = require('bcryptjs');
|
const bcrypt = require('bcryptjs');
|
||||||
@@ -20,7 +19,7 @@ const bcrypt = require('bcryptjs');
|
|||||||
* phone 手机号
|
* phone 手机号
|
||||||
*
|
*
|
||||||
* */
|
* */
|
||||||
router.post('/add', auth, adminAuth, async (req, res) => {
|
router.post('/add', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
@@ -103,7 +102,7 @@ router.post('/add', auth, adminAuth, async (req, res) => {
|
|||||||
* id 供应商id
|
* id 供应商id
|
||||||
* audit_status 审核状态 'pending','approved','rejected'
|
* audit_status 审核状态 'pending','approved','rejected'
|
||||||
* */
|
* */
|
||||||
router.put('/edit', auth, adminAuth, async (req, res) => {
|
router.put('/edit', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
@@ -237,7 +236,7 @@ router.get('/list', async (req, res) => {
|
|||||||
* 删除供应商
|
* 删除供应商
|
||||||
* id
|
* id
|
||||||
* */
|
* */
|
||||||
router.delete('/delete', auth, adminAuth, async (req, res) => {
|
router.delete('/delete', async (req, res) => {
|
||||||
const db = getDB();
|
const db = getDB();
|
||||||
try {
|
try {
|
||||||
const {id} = req.query;
|
const {id} = req.query;
|
||||||
|
|||||||
143
routes/withdrawals.js
Normal file
143
routes/withdrawals.js
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const { getDB } = require('../database');
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.get('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { page = 1, limit = 10, search = '' } = req.query;
|
||||||
|
|
||||||
|
// 确保参数为有效数字
|
||||||
|
const pageNum = Math.max(1, parseInt(page) || 1);
|
||||||
|
const limitNum = Math.max(1, Math.min(100, parseInt(limit) || 10)); // 限制最大100条
|
||||||
|
const offset = Math.max(0, (pageNum - 1) * limitNum);
|
||||||
|
|
||||||
|
console.log('分页参数:', { pageNum, limitNum, offset, search });
|
||||||
|
|
||||||
|
let whereClause = 'WHERE 1=1';
|
||||||
|
const params = [];
|
||||||
|
|
||||||
|
if (search) {
|
||||||
|
whereClause += ' AND name LIKE ?';
|
||||||
|
params.push(`%${search}%`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取总数
|
||||||
|
const countQuery = `SELECT COUNT(*) as total FROM withdrawal ${whereClause}`;
|
||||||
|
const [countResult] = await getDB().execute(countQuery, params);
|
||||||
|
const total = countResult[0].total;
|
||||||
|
|
||||||
|
// 获取商品列表
|
||||||
|
const query = `
|
||||||
|
SELECT id, user_id, amount, status, time
|
||||||
|
FROM withdrawal
|
||||||
|
${whereClause}
|
||||||
|
ORDER BY time DESC
|
||||||
|
LIMIT ${limitNum} OFFSET ${offset}
|
||||||
|
`;
|
||||||
|
|
||||||
|
// 确保参数数组正确传递
|
||||||
|
const queryParams = [...params];
|
||||||
|
console.log('Query params:', queryParams, 'Query:', query);
|
||||||
|
const [withdrawals] = await getDB().execute(query, queryParams);
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
withdrawals,
|
||||||
|
pagination: {
|
||||||
|
page: pageNum,
|
||||||
|
limit: limitNum,
|
||||||
|
total,
|
||||||
|
pages: Math.ceil(total / limitNum)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取提现列表失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '获取提现列表失败' });
|
||||||
|
}
|
||||||
|
});//获取记录
|
||||||
|
|
||||||
|
router.post('/:id/approve', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { id } = req.params;
|
||||||
|
const query = `
|
||||||
|
UPDATE withdrawal
|
||||||
|
SET status = 'success'
|
||||||
|
WHERE id = ?
|
||||||
|
`;
|
||||||
|
const queryParams = [id];
|
||||||
|
const [result] = await getDB().execute(query, queryParams);
|
||||||
|
if (result.affectedRows === 0) {
|
||||||
|
return res.status(404).json({ success: false, message: '提现记录不存在' });
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
id,
|
||||||
|
status: 'success'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('创建提现记录失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '创建提现记录失败' });
|
||||||
|
}
|
||||||
|
});//通过记录
|
||||||
|
|
||||||
|
router.post('/:id/reject', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { id } = req.params;
|
||||||
|
const query = `
|
||||||
|
UPDATE withdrawal
|
||||||
|
SET status = 'canceled'
|
||||||
|
WHERE id = ?
|
||||||
|
`;
|
||||||
|
const queryParams = [id];
|
||||||
|
const [result] = await getDB().execute(query, queryParams);
|
||||||
|
if (result.affectedRows === 0) {
|
||||||
|
return res.status(404).json({ success: false, message: '提现记录不存在' });
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
id,
|
||||||
|
status: 'canceled'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('创建提现记录失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '创建提现记录失败' });
|
||||||
|
}
|
||||||
|
});//拒绝记录
|
||||||
|
|
||||||
|
router.post('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { userId, amount } = req.body;
|
||||||
|
if (!userId || !amount) {
|
||||||
|
return res.status(400).json({ success: false, message: '用户ID和金额是必填项' });
|
||||||
|
}
|
||||||
|
const query = `
|
||||||
|
INSERT INTO withdrawal (user_id, amount, status, time)
|
||||||
|
VALUES (?, ?, ?, NOW())
|
||||||
|
`;
|
||||||
|
const queryParams = [userId, amount, 'pending'];
|
||||||
|
const [result] = await getDB().execute(query, queryParams);
|
||||||
|
if (result.affectedRows === 0) {
|
||||||
|
return res.status(404).json({ success: false, message: '提现记录不存在' });
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
id: result.insertId,
|
||||||
|
user_id: userId,
|
||||||
|
amount,
|
||||||
|
status: 'pending'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('更新提现记录失败:', error);
|
||||||
|
res.status(500).json({ success: false, message: '更新提现记录失败' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
@@ -105,6 +105,12 @@ app.use('/specifications', require('./routes/specifications'));
|
|||||||
// 优惠券商品接口
|
// 优惠券商品接口
|
||||||
app.use('/couponproducts', require('./routes/couponproducts'));
|
app.use('/couponproducts', require('./routes/couponproducts'));
|
||||||
|
|
||||||
|
// 提现管理接口
|
||||||
|
app.use('/withdrawals', require('./routes/withdrawals'));
|
||||||
|
|
||||||
|
// 商品分类接口
|
||||||
|
app.use('/category', require('./routes/category'));
|
||||||
|
|
||||||
// 认证接口
|
// 认证接口
|
||||||
app.use('/auth', require('./routes/auth'));
|
app.use('/auth', require('./routes/auth'));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user