Browse Source

✨ feat: 乐跑账号启用分页

Pchen. 7 months ago
parent
commit
103fe87804
2 changed files with 105 additions and 32 deletions
  1. 2 2
      BaseStdResponse.js
  2. 103 30
      apis/Lepao/Account/GetAccount.js

+ 2 - 2
BaseStdResponse.js

@@ -1,7 +1,7 @@
 let BaseStdResponse = {
     OK: {
         code: 0,
-        msg: '一切顺利哟~'
+        msg: ''
     },
     ERR: {
         code: -1,
@@ -13,7 +13,7 @@ let BaseStdResponse = {
     },
     MISSING_PARAMETER: { // 缺少参数
         code: -2,
-        msg: '好像少了一些必要的参数呢~'
+        msg: '缺少参数或版本未更新哦~刷新页面试试看呢'
     },
     MISSING_FILE: { // 找不到文件
         code: -404,

+ 103 - 30
apis/Lepao/Account/GetAccount.js

@@ -12,63 +12,136 @@ class GetAccount extends API {
     }
 
     async onRequest(req, res) {
-        let { uuid, session } = req.query
+        let { uuid, session, email, area, username, student_num, state, pagesize, current } = req.query
 
-        if ([uuid, session].some(value => value === '' || value === null || value === undefined))
+        if ([uuid, session, pagesize, current].some(value => value === '' || value === null || value === undefined))
             return res.json({
                 ...BaseStdResponse.MISSING_PARAMETER,
                 endpoint: 1513126
             })
 
+        // 校验分页参数
+        if (isNaN(pagesize) || pagesize <= 0 || pagesize > 50) {
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '参数错误'
+            })
+        }
+
+        if (isNaN(current) || current <= 0) {
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '参数错误'
+            })
+        }
+
         if (!await AccessControl.checkSession(uuid, session))
             return res.status(401).json({
                 ...BaseStdResponse.ACCESS_DENIED
             })
 
+        const offset = (current - 1) * pagesize
+
         let sql = `
                 SELECT 
-                    a.id,
-                    a.name,
-                    a.student_num,
-                    a.create_time,
-                    a.update_time,
-                    a.state,
-                    a.area,
-                    a.auto_time,
-                    a.min_distance,
-                    a.max_distance,
-                    a.total_num,
-                    a.term_num,
-                    a.academy_name,
-                    a.sex,
-                    a.user_avatar,
-                    a.grade_id,
-                    a.race,
-                    a.email,
-                    a.auto_run,
-                    a.notes,
+                    l.id,
+                    l.name,
+                    l.student_num,
+                    l.create_time,
+                    l.update_time,
+                    l.state,
+                    l.area,
+                    l.auto_time,
+                    l.total_num,
+                    l.term_num,
+                    l.academy_name,
+                    l.sex,
+                    l.user_avatar,
+                    l.grade_id,
+                    l.email,
+                    l.auto_run,
+                    l.notes,
                     u.username AS create_user
                 FROM 
-                    lepao_account a
+                    lepao_account l
                 LEFT JOIN 
                     users u 
                 ON 
-                    a.create_user = u.uuid
+                    l.create_user = u.uuid
                 WHERE 
-                    a.create_user = ?
-                ORDER BY a.create_time DESC
+                    l.create_user = ?
             `
 
-        let rows = await db.query(sql, [uuid])
+        let countSql = `
+            SELECT COUNT(*) AS total
+            FROM 
+                lepao_account l
+            WHERE l.create_user = ?
+        `
+
+        let params = [uuid]
+        let countParams = [uuid]
 
-        if (!rows)
+        if (email) {
+            sql += ` AND l.email = ?`
+            countSql += ` AND l.email = ?`
+            params.push(email)
+            countParams.push(email)
+        }
+
+        if (area) {
+            sql += ` AND l.area = ?`
+            countSql += ` AND l.area = ?`
+            params.push(area)
+            countParams.push(area)
+        }
+
+        if (student_num) {
+            sql += ` AND l.student_num = ?`
+            countSql += ` AND l.student_num = ?`
+            params.push(student_num)
+            countParams.push(student_num)
+        }
+
+        if (username) {
+            sql += ` AND l.name LIKE ?`
+            countSql += ` AND l.name LIKE ?`
+            params.push(`%${username}%`)
+            countParams.push(`%${username}%`)
+        }
+
+        if (state !== -1) {
+            sql += ` AND l.state = ?`
+            countSql += ` AND l.state = ?`
+            params.push(state)
+            countParams.push(state)
+        }
+
+        sql += `
+            ORDER BY l.create_time DESC
+            LIMIT ? OFFSET ?;
+        `
+        params.push(String(pagesize), String(offset))
+
+        let rows = await db.query(sql, params)
+        let countResult = await db.query(countSql, countParams)
+
+        if (!rows || !countResult)
             return res.json({
-                ...BaseStdResponse.DATABASE_ERR
+                ...BaseStdResponse.MISSING_FILE,
+                msg: '获取乐跑账号数据失败!'
             })
 
+        let total = countResult[0].total
+
         res.json({
             ...BaseStdResponse.OK,
-            data: rows
+            data: rows,
+            pagination: {
+                current,
+                pagesize,
+                total
+            }
         })
     }
 }