List.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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 AdminPowerTaskList extends API {
  6. constructor() {
  7. super()
  8. this.setPath('/Admin/Power/Task/List')
  9. this.setMethod('GET')
  10. }
  11. async onRequest(req, res) {
  12. let {
  13. uuid,
  14. session,
  15. create_user,
  16. username,
  17. email,
  18. area,
  19. building,
  20. room,
  21. queryTime,
  22. pagesize,
  23. current
  24. } = req.query
  25. if ([uuid, session, pagesize, current].some(v => v === '' || v === null || v === undefined))
  26. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  27. if (isNaN(pagesize) || Number(pagesize) <= 0 || isNaN(current) || Number(current) <= 0)
  28. return res.json({ ...BaseStdResponse.ERR, msg: '参数错误' })
  29. if (!await AccessControl.checkSession(uuid, session))
  30. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  31. const permission = await AccessControl.getPermission(uuid)
  32. if (!permission.includes('admin') && !permission.includes('server') && !permission.includes('service'))
  33. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  34. const offset = (Number(current) - 1) * Number(pagesize)
  35. const where = ['1 = 1']
  36. const params = []
  37. const countParams = []
  38. if (create_user) {
  39. where.push('pt.create_user COLLATE utf8mb4_general_ci = (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  40. params.push(create_user)
  41. countParams.push(create_user)
  42. }
  43. if (username) {
  44. where.push('u.username COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  45. params.push(`%${username}%`)
  46. countParams.push(`%${username}%`)
  47. }
  48. if (email) {
  49. where.push('pt.email COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  50. params.push(`%${email}%`)
  51. countParams.push(`%${email}%`)
  52. }
  53. if (area) {
  54. where.push('pt.area COLLATE utf8mb4_general_ci = (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  55. params.push(area)
  56. countParams.push(area)
  57. }
  58. if (building) {
  59. where.push('pt.building COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  60. params.push(`%${building}%`)
  61. countParams.push(`%${building}%`)
  62. }
  63. if (room) {
  64. where.push('pt.room COLLATE utf8mb4_general_ci LIKE (CONVERT(? USING utf8mb4) COLLATE utf8mb4_general_ci)')
  65. params.push(`%${room}%`)
  66. countParams.push(`%${room}%`)
  67. }
  68. if (Array.isArray(queryTime) && queryTime.length === 2) {
  69. where.push('pt.update_time >= ? AND pt.update_time < ?')
  70. params.push(queryTime[0], queryTime[1])
  71. countParams.push(queryTime[0], queryTime[1])
  72. }
  73. const whereSql = where.join(' AND ')
  74. const listSql = `
  75. SELECT
  76. pt.id,
  77. pt.create_user,
  78. pt.create_time,
  79. pt.update_time,
  80. pt.area,
  81. pt.building,
  82. pt.room,
  83. pt.email,
  84. pt.lowest,
  85. pt.notes,
  86. pt.balance,
  87. pt.koufei_date,
  88. pt.is_notice,
  89. u.username,
  90. u.avatar
  91. FROM power_task pt
  92. LEFT JOIN users u ON u.uuid COLLATE utf8mb4_general_ci = pt.create_user COLLATE utf8mb4_general_ci
  93. WHERE ${whereSql}
  94. ORDER BY pt.id DESC
  95. LIMIT ? OFFSET ?
  96. `
  97. const countSql = `
  98. SELECT COUNT(*) AS total
  99. FROM power_task pt
  100. LEFT JOIN users u ON u.uuid COLLATE utf8mb4_general_ci = pt.create_user COLLATE utf8mb4_general_ci
  101. WHERE ${whereSql}
  102. `
  103. params.push(String(pagesize), String(offset))
  104. const rows = await db.query(listSql, params)
  105. const countRows = await db.query(countSql, countParams)
  106. if (!rows || !countRows) return res.json({ ...BaseStdResponse.DATABASE_ERR })
  107. return res.json({
  108. ...BaseStdResponse.OK,
  109. data: rows,
  110. pagination: {
  111. current: Number(current),
  112. pagesize: Number(pagesize),
  113. total: countRows[0]?.total || 0
  114. }
  115. })
  116. }
  117. }
  118. module.exports.AdminPowerTaskList = AdminPowerTaskList