EditAttendanceItems.js 3.8 KB

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