List.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const API = require("../../../lib/API.js")
  2. const db = require("../../../plugin/DataBase/db.js")
  3. const AccessControl = require("../../../lib/AccessControl.js")
  4. const { BaseStdResponse } = require("../../../BaseStdResponse.js")
  5. class AdminNoticeList extends API {
  6. constructor() {
  7. super()
  8. this.setPath('/Admin/Notice/List')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. const { uuid, session, keyword, pagesize, current } = req.query
  13. if ([uuid, session, pagesize, current].some(v => v === '' || v === null || v === undefined))
  14. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  15. if (isNaN(pagesize) || Number(pagesize) <= 0 || isNaN(current) || Number(current) <= 0)
  16. return res.json({ ...BaseStdResponse.ERR, msg: '参数错误' })
  17. if (!await AccessControl.checkSession(uuid, session))
  18. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  19. const permission = await AccessControl.getPermission(uuid)
  20. if (!permission.includes("admin") && !permission.includes("service") && !permission.includes("server"))
  21. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  22. const offset = (Number(current) - 1) * Number(pagesize)
  23. const where = ['1 = 1']
  24. const params = []
  25. const countParams = []
  26. if (keyword) {
  27. where.push('(`key` LIKE ? OR content LIKE ?)')
  28. params.push(`%${keyword}%`, `%${keyword}%`)
  29. countParams.push(`%${keyword}%`, `%${keyword}%`)
  30. }
  31. const whereSql = where.join(' AND ')
  32. const listSql = `
  33. SELECT \`key\`, content
  34. FROM notice
  35. WHERE ${whereSql}
  36. ORDER BY \`key\` ASC
  37. LIMIT ? OFFSET ?
  38. `
  39. const countSql = `SELECT COUNT(*) AS total FROM notice WHERE ${whereSql}`
  40. params.push(String(pagesize), String(offset))
  41. const rows = await db.query(listSql, params)
  42. const countRows = await db.query(countSql, countParams)
  43. if (!rows || !countRows) return res.json({ ...BaseStdResponse.DATABASE_ERR })
  44. return res.json({
  45. ...BaseStdResponse.OK,
  46. data: rows,
  47. pagination: {
  48. current: Number(current),
  49. pagesize: Number(pagesize),
  50. total: countRows[0]?.total || 0
  51. }
  52. })
  53. }
  54. }
  55. module.exports.AdminNoticeList = AdminNoticeList