EditAttendanceItems.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. const API = require("../../lib/API");
  2. const { BaseStdResponse } = require("../../BaseStdResponse");
  3. const db = require("../../plugin/DataBase/db");
  4. const AccessControl = require("../../lib/AccessControl");
  5. class EditAttendanceItems extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Attendance');
  9. this.setMethod('PUT');
  10. }
  11. async onRequest(req, res) {
  12. let {
  13. uuid,
  14. session,
  15. id,
  16. name,
  17. user,
  18. day_of_week,
  19. loopy,
  20. begintime,
  21. endtime,
  22. position,
  23. radius,
  24. address,
  25. admin
  26. } = req.body;
  27. // 检查必需的参数是否缺失
  28. if ([uuid, session, id, name, user, day_of_week, loopy, begintime, endtime, position, radius].some(value => value === '' || value === null || value === undefined)) {
  29. res.json({
  30. ...BaseStdResponse.MISSING_PARAMETER,
  31. endpoint: 1513123
  32. });
  33. return;
  34. }
  35. // 检查 session 是否有效
  36. if (!await AccessControl.checkSession(uuid, session)) {
  37. res.json({
  38. ...BaseStdResponse.ACCESS_DENIED,
  39. endpoint: 48153145
  40. });
  41. return;
  42. }
  43. // 获取考勤项目
  44. const sqlGetProject = 'SELECT user, createUser, begintime, loopy, day_of_week, admin FROM kq_items WHERE id = ?';
  45. let [projectResult] = await db.query(sqlGetProject, [id]);
  46. if (!projectResult || projectResult.length === 0) {
  47. res.json({
  48. ...BaseStdResponse.DATABASE_ERR,
  49. endpoint: 154754511
  50. });
  51. return;
  52. }
  53. let projectData = projectResult[0];
  54. // 检查用户权限
  55. let permission = await AccessControl.getPermission(uuid);
  56. if (projectData.createUser !== uuid && !permission.includes('admin') && !Array.isArray(projectData.admin) && !JSON.parse(projectData.admin).includes(uuid)) {
  57. return res.json({
  58. ...BaseStdResponse.PERMISSION_DENIED,
  59. endpoint: 481454,
  60. msg: '你不是该考勤项目管理员,无操作权限'
  61. });
  62. }
  63. user = user.split('|');
  64. admin = admin.split('|');
  65. let uuids, admins;
  66. try {
  67. uuids = await AccessControl.checkUser(user);
  68. admins = await AccessControl.checkUser(admin);
  69. } catch (error) {
  70. return res.json({
  71. ...BaseStdResponse.ERR,
  72. endpoint: 513513,
  73. msg: error.message
  74. });
  75. }
  76. // 更新考勤项目
  77. const sqlUpdateProject = `
  78. UPDATE kq_items
  79. SET
  80. name = ?,
  81. user = ?,
  82. day_of_week = ?,
  83. loopy = ?,
  84. begintime = ?,
  85. endtime = ?,
  86. position = ?,
  87. radius = ?,
  88. address = ?,
  89. admin = ?
  90. WHERE id = ?
  91. `;
  92. let [updateResult] = await db.query(sqlUpdateProject, [
  93. name,
  94. JSON.stringify(uuids),
  95. day_of_week,
  96. loopy,
  97. begintime,
  98. endtime,
  99. JSON.stringify(position),
  100. radius,
  101. address,
  102. JSON.stringify(admins),
  103. id
  104. ]);
  105. if (updateResult.affectedRows !== 1) {
  106. res.json({
  107. ...BaseStdResponse.DATABASE_ERR,
  108. endpoint: 513513
  109. });
  110. return;
  111. }
  112. res.json({
  113. ...BaseStdResponse.OK
  114. });
  115. }
  116. }
  117. module.exports.EditAttendanceItems = EditAttendanceItems;