List.js 5.1 KB

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