List.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const API = require('../../../lib/API.js')
  2. const db = require('../../../plugin/DataBase/db.js')
  3. const { BaseStdResponse } = require('../../../BaseStdResponse.js')
  4. const AccessControl = require('../../../lib/AccessControl.js')
  5. class ListCoupons extends API {
  6. constructor() {
  7. super()
  8. this.setPath('/Admin/Coupon/List')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. const { uuid, session, pagesize, current, keyword, state } = req.query
  13. if ([uuid, session, pagesize, current].some((v) => v === '' || v == null)) {
  14. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  15. }
  16. if (!(await AccessControl.checkSession(uuid, session))) {
  17. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  18. }
  19. const permission = await AccessControl.getPermission(uuid)
  20. if (!permission.includes('admin') && !permission.includes('product')) {
  21. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  22. }
  23. const pageSize = Math.max(1, Number(pagesize))
  24. const page = Math.max(1, Number(current))
  25. const offset = (page - 1) * pageSize
  26. let sql = `SELECT * FROM coupons WHERE 1=1`
  27. let countSql = `SELECT COUNT(*) AS total FROM coupons WHERE 1=1`
  28. const params = []
  29. const countParams = []
  30. if (keyword) {
  31. sql += ` AND (code LIKE ? OR name LIKE ?)`
  32. countSql += ` AND (code LIKE ? OR name LIKE ?)`
  33. const kw = `%${keyword}%`
  34. params.push(kw, kw)
  35. countParams.push(kw, kw)
  36. }
  37. const stateNum = Number(state)
  38. if (
  39. state !== undefined &&
  40. state !== '' &&
  41. state !== '-1' &&
  42. !Number.isNaN(stateNum) &&
  43. stateNum !== -1
  44. ) {
  45. sql += ` AND state = ?`
  46. countSql += ` AND state = ?`
  47. params.push(stateNum)
  48. countParams.push(stateNum)
  49. }
  50. sql += ` ORDER BY id DESC LIMIT ? OFFSET ?`
  51. params.push(String(pageSize), String(offset))
  52. const rows = await db.query(sql, params)
  53. const countResult = await db.query(countSql, countParams)
  54. const total = Number(countResult?.[0]?.total || 0)
  55. return res.json({
  56. ...BaseStdResponse.OK,
  57. data: rows || [],
  58. pagination: {
  59. current: page,
  60. pagesize: pageSize,
  61. total,
  62. totalPages: Math.ceil(total / pageSize)
  63. }
  64. })
  65. }
  66. }
  67. module.exports.ListCoupons = ListCoupons