GetGoodsList.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const API = require("../../lib/API");
  2. const db = require("../../plugin/DataBase/db");
  3. const { BaseStdResponse } = require("../../BaseStdResponse");
  4. // 获取产品列表
  5. class GetProductList extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Goods/List')
  9. this.setMethod('post')
  10. }
  11. async onRequest(req, res) {
  12. let { keyword, pagesize, current } = req.body;
  13. if ([pagesize, current].some(value => value === '' || value === null || value === undefined))
  14. return res.json({
  15. ...BaseStdResponse.MISSING_PARAMETER
  16. })
  17. // 校验分页参数
  18. if (isNaN(pagesize) || pagesize <= 0) {
  19. return res.json({
  20. ...BaseStdResponse.ERR,
  21. msg: '参数错误'
  22. })
  23. }
  24. if (isNaN(current) || current <= 0) {
  25. return res.json({
  26. ...BaseStdResponse.ERR,
  27. msg: '参数错误'
  28. })
  29. }
  30. // 计算分页的 offset
  31. const offset = (current - 1) * pagesize
  32. let sql = `
  33. SELECT
  34. id,
  35. name,
  36. price,
  37. num
  38. FROM
  39. goods
  40. WHERE state = 1
  41. `
  42. let countSql = `
  43. SELECT COUNT(*) AS total
  44. FROM goods
  45. WHERE 1 = 1
  46. `
  47. let params = []
  48. let countParams = []
  49. if (keyword) {
  50. sql += ` AND name LIKE ?`
  51. countSql += ` AND name LIKE ?`
  52. params.push(`%${keyword}%`)
  53. countParams.push(`%${keyword}%`)
  54. }
  55. sql += `
  56. ORDER BY
  57. id DESC
  58. LIMIT ? OFFSET ?;
  59. `
  60. params.push(String(pagesize), String(offset))
  61. let rows = await db.query(sql, params)
  62. let countResult = await db.query(countSql, countParams)
  63. if (!rows || !countResult)
  64. return res.json({
  65. ...BaseStdResponse.ERR,
  66. msg: '获取商品失败!'
  67. })
  68. let total = countResult[0].total
  69. const totalPages = Math.ceil(total / pagesize)
  70. res.json({
  71. ...BaseStdResponse.OK,
  72. data: rows,
  73. pagination: {
  74. current: current,
  75. pagesize: pagesize,
  76. total: total,
  77. totalPages: totalPages
  78. }
  79. })
  80. }
  81. }
  82. module.exports.GetProductList = GetProductList;