checkGroup.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. // 模拟查核组数据(参考截图)
  2. const checkGroups = [
  3. {
  4. id: 1,
  5. name: '急诊手术查核组',
  6. groupManagerName: '杨晓琳',
  7. remark: '负责急诊手术相关查核工作',
  8. createUserName: '系统管理员',
  9. createTime: '2024-01-15 10:30:00',
  10. },
  11. {
  12. id: 2,
  13. name: '信息系统查核组',
  14. groupManagerName: '杨晓琳',
  15. remark: '负责信息系统安全查核',
  16. createUserName: '系统管理员',
  17. createTime: '2024-01-15 11:00:00',
  18. },
  19. {
  20. id: 3,
  21. name: '消防查核组',
  22. groupManagerName: '杨晓琳',
  23. remark: '负责消防安全相关查核工作',
  24. createUserName: '系统管理员',
  25. createTime: '2024-01-15 14:20:00',
  26. },
  27. {
  28. id: 4,
  29. name: '医疗组',
  30. groupManagerName: '杨晓琳',
  31. remark: '负责医疗相关查核工作',
  32. createUserName: '系统管理员',
  33. createTime: '2024-01-15 15:45:00',
  34. },
  35. {
  36. id: 5,
  37. name: '急诊急外手术核组',
  38. groupManagerName: '杨晓琳',
  39. remark: '负责急诊急外手术查核',
  40. createUserName: '系统管理员',
  41. createTime: '2024-01-15 16:10:00',
  42. },
  43. {
  44. id: 6,
  45. name: '护理组',
  46. groupManagerName: '杨晓琳',
  47. remark: '负责护理质量管理查核',
  48. createUserName: '系统管理员',
  49. createTime: '2024-01-15 16:30:00',
  50. },
  51. {
  52. id: 7,
  53. name: '药事服务组',
  54. groupManagerName: '杨晓琳',
  55. remark: '负责药事服务查核',
  56. createUserName: '系统管理员',
  57. createTime: '2024-01-15 17:00:00',
  58. },
  59. {
  60. id: 8,
  61. name: '药品器械组',
  62. groupManagerName: '董丽群',
  63. remark: '负责药品器械查核',
  64. createUserName: '系统管理员',
  65. createTime: '2024-01-15 17:30:00',
  66. },
  67. {
  68. id: 9,
  69. name: '糖尿病组',
  70. groupManagerName: '何亦红',
  71. remark: '负责糖尿病相关查核',
  72. createUserName: '系统管理员',
  73. createTime: '2024-01-15 18:00:00',
  74. },
  75. {
  76. id: 10,
  77. name: '消毒隔离组',
  78. groupManagerName: '金艳艳',
  79. remark: '负责消毒隔离查核',
  80. createUserName: '系统管理员',
  81. createTime: '2024-01-15 18:30:00',
  82. },
  83. ];
  84. // 模拟人员数据
  85. const employees = [
  86. {
  87. id: 1,
  88. employeeCode: '005018',
  89. employeeName: '王金鸿',
  90. deptName: '急诊手术组织',
  91. },
  92. {
  93. id: 2,
  94. employeeCode: '005019',
  95. employeeName: '杨晓琳',
  96. deptName: '信息系统查核组织',
  97. },
  98. {
  99. id: 3,
  100. employeeCode: '005020',
  101. employeeName: '张琳',
  102. deptName: '消防系统查核组织',
  103. },
  104. {
  105. id: 4,
  106. employeeCode: '005030',
  107. employeeName: '胡庚芳',
  108. deptName: '医疗组织',
  109. },
  110. {
  111. id: 5,
  112. employeeCode: '005032',
  113. employeeName: '陈雨萍',
  114. deptName: '护理组织',
  115. },
  116. {
  117. id: 6,
  118. employeeCode: '005033',
  119. employeeName: '陈海霞',
  120. deptName: '护理组织',
  121. },
  122. {
  123. id: 7,
  124. employeeCode: '005034',
  125. employeeName: '李明',
  126. deptName: '急诊手术组织',
  127. },
  128. {
  129. id: 8,
  130. employeeCode: '005035',
  131. employeeName: '刘强',
  132. deptName: '信息系统查核组织',
  133. },
  134. {
  135. id: 9,
  136. employeeCode: '005036',
  137. employeeName: '赵敏',
  138. deptName: '消防系统查核组织',
  139. },
  140. {
  141. id: 10,
  142. employeeCode: '005037',
  143. employeeName: '孙丽',
  144. deptName: '医疗组织',
  145. },
  146. ];
  147. // 模拟查核组人员关系数据
  148. const checkGroupEmployees = [
  149. {
  150. id: 1,
  151. groupId: 1,
  152. employeeId: 1,
  153. employeeCode: '005018',
  154. employeeName: '王金鸿',
  155. deptName: '急诊手术组织',
  156. isManager: 1,
  157. },
  158. {
  159. id: 2,
  160. groupId: 1,
  161. employeeId: 7,
  162. employeeCode: '005034',
  163. employeeName: '李明',
  164. deptName: '急诊手术组织',
  165. isManager: 0,
  166. },
  167. {
  168. id: 3,
  169. groupId: 2,
  170. employeeId: 2,
  171. employeeCode: '005019',
  172. employeeName: '杨晓琳',
  173. deptName: '信息系统查核组织',
  174. isManager: 1,
  175. },
  176. {
  177. id: 4,
  178. groupId: 2,
  179. employeeId: 8,
  180. employeeCode: '005035',
  181. employeeName: '刘强',
  182. deptName: '信息系统查核组织',
  183. isManager: 0,
  184. },
  185. {
  186. id: 5,
  187. groupId: 3,
  188. employeeId: 6,
  189. employeeCode: '005033',
  190. employeeName: '陈海霞',
  191. deptName: '护理组织',
  192. isManager: 1,
  193. },
  194. {
  195. id: 6,
  196. groupId: 4,
  197. employeeId: 3,
  198. employeeCode: '005020',
  199. employeeName: '张琳',
  200. deptName: '消防系统查核组织',
  201. isManager: 1,
  202. },
  203. {
  204. id: 7,
  205. groupId: 4,
  206. employeeId: 9,
  207. employeeCode: '005036',
  208. employeeName: '赵敏',
  209. deptName: '消防系统查核组织',
  210. isManager: 0,
  211. },
  212. {
  213. id: 8,
  214. groupId: 5,
  215. employeeId: 5,
  216. employeeCode: '005032',
  217. employeeName: '陈雨萍',
  218. deptName: '护理组织',
  219. isManager: 1,
  220. },
  221. {
  222. id: 9,
  223. groupId: 5,
  224. employeeId: 10,
  225. employeeCode: '005037',
  226. employeeName: '孙丽',
  227. deptName: '医疗组织',
  228. isManager: 0,
  229. },
  230. ];
  231. export default {
  232. // 获取查核组列表
  233. 'GET /manager/CheckGroup/getCheckGroupList': (req, res) => {
  234. const {
  235. current = 1,
  236. pageSize = 10,
  237. groupName = '',
  238. groupManagerName = '',
  239. } = req.query;
  240. let filteredGroups = checkGroups;
  241. // 按查核组名称过滤
  242. if (groupName) {
  243. filteredGroups = filteredGroups.filter((group) =>
  244. group.name.includes(groupName),
  245. );
  246. }
  247. // 按组长名称过滤
  248. if (groupManagerName) {
  249. filteredGroups = filteredGroups.filter(
  250. (group) =>
  251. group.groupManagerName &&
  252. group.groupManagerName.includes(groupManagerName),
  253. );
  254. }
  255. const startIndex = (current - 1) * pageSize;
  256. const endIndex = startIndex + parseInt(pageSize);
  257. const list = filteredGroups.slice(startIndex, endIndex);
  258. res.json({
  259. list,
  260. totalCount: filteredGroups.length,
  261. currPage: parseInt(current),
  262. pageSize: parseInt(pageSize),
  263. totalPage: Math.ceil(filteredGroups.length / pageSize),
  264. });
  265. },
  266. // 新增查核组
  267. 'POST /manager/CheckGroup/addCheckGroup': (req, res) => {
  268. const { name, remark, groupManagerId } = req.body;
  269. const manager = employees.find((emp) => emp.id === groupManagerId);
  270. const newGroup = {
  271. id: checkGroups.length + 1,
  272. name,
  273. groupManagerName: manager ? manager.employeeName : '',
  274. remark,
  275. createUserName: '系统管理员',
  276. createTime: new Date().toISOString(),
  277. };
  278. checkGroups.push(newGroup);
  279. res.json({ success: true, message: '新增成功' });
  280. },
  281. // 编辑查核组
  282. 'POST /manager/CheckGroup/editCheckGroup': (req, res) => {
  283. const { id, name, remark, groupManagerId } = req.body;
  284. const groupIndex = checkGroups.findIndex((group) => group.id === id);
  285. if (groupIndex !== -1) {
  286. const manager = employees.find((emp) => emp.id === groupManagerId);
  287. checkGroups[groupIndex] = {
  288. ...checkGroups[groupIndex],
  289. name,
  290. remark,
  291. groupManagerName: manager
  292. ? manager.employeeName
  293. : checkGroups[groupIndex].groupManagerName,
  294. };
  295. res.json({ success: true, message: '编辑成功' });
  296. } else {
  297. res.status(404).json({ success: false, message: '查核组不存在' });
  298. }
  299. },
  300. // 删除查核组
  301. 'POST /manager/CheckGroup/deleteCheckGroup': (req, res) => {
  302. const { id } = req.query;
  303. const groupIndex = checkGroups.findIndex(
  304. (group) => group.id === parseInt(id),
  305. );
  306. if (groupIndex !== -1) {
  307. checkGroups.splice(groupIndex, 1);
  308. // 同时删除相关的人员关系
  309. const employeeIndices = [];
  310. for (let i = checkGroupEmployees.length - 1; i >= 0; i--) {
  311. if (checkGroupEmployees[i].groupId === parseInt(id)) {
  312. employeeIndices.push(i);
  313. }
  314. }
  315. employeeIndices.forEach((index) => checkGroupEmployees.splice(index, 1));
  316. res.json({ success: true, message: '删除成功' });
  317. } else {
  318. res.status(404).json({ success: false, message: '查核组不存在' });
  319. }
  320. },
  321. // 获取查核组人员列表
  322. 'GET /manager/CheckGroup/getCheckGroupEmployees': (req, res) => {
  323. const { groupId, filter = '', current = 1, pageSize = 10 } = req.query;
  324. let groupEmployees = checkGroupEmployees.filter(
  325. (emp) => emp.groupId === parseInt(groupId),
  326. );
  327. // 按姓名或工号过滤
  328. if (filter) {
  329. groupEmployees = groupEmployees.filter(
  330. (emp) =>
  331. emp.employeeName.includes(filter) ||
  332. emp.employeeCode.includes(filter),
  333. );
  334. }
  335. const startIndex = (current - 1) * pageSize;
  336. const endIndex = startIndex + parseInt(pageSize);
  337. const list = groupEmployees.slice(startIndex, endIndex);
  338. res.json({
  339. list,
  340. totalCount: groupEmployees.length,
  341. currPage: parseInt(current),
  342. pageSize: parseInt(pageSize),
  343. totalPage: Math.ceil(groupEmployees.length / pageSize),
  344. });
  345. },
  346. // 获取可添加的人员列表
  347. 'GET /manager/CheckGroup/getAvailableEmployees': (req, res) => {
  348. const { groupId, filter = '', current = 1, pageSize = 10 } = req.query;
  349. // 获取已经在该查核组的人员ID
  350. const existingEmployeeIds = checkGroupEmployees
  351. .filter((emp) => emp.groupId === parseInt(groupId))
  352. .map((emp) => emp.employeeId);
  353. // 过滤出不在该查核组的人员
  354. let availableEmployees = employees.filter(
  355. (emp) => !existingEmployeeIds.includes(emp.id),
  356. );
  357. // 按姓名或工号过滤
  358. if (filter) {
  359. availableEmployees = availableEmployees.filter(
  360. (emp) =>
  361. emp.employeeName.includes(filter) ||
  362. emp.employeeCode.includes(filter),
  363. );
  364. }
  365. const startIndex = (current - 1) * pageSize;
  366. const endIndex = startIndex + parseInt(pageSize);
  367. const list = availableEmployees.slice(startIndex, endIndex);
  368. res.json({
  369. list,
  370. totalCount: availableEmployees.length,
  371. currPage: parseInt(current),
  372. pageSize: parseInt(pageSize),
  373. totalPage: Math.ceil(availableEmployees.length / pageSize),
  374. });
  375. },
  376. // 添加查核组人员
  377. 'POST /manager/CheckGroup/addCheckGroupEmployee': (req, res) => {
  378. const { groupId, employeeIds } = req.body;
  379. employeeIds.forEach((employeeId) => {
  380. const employee = employees.find((emp) => emp.id === parseInt(employeeId));
  381. if (employee) {
  382. const newRelation = {
  383. id: checkGroupEmployees.length + 1,
  384. groupId: parseInt(groupId),
  385. employeeId: employee.id,
  386. employeeCode: employee.employeeCode,
  387. employeeName: employee.employeeName,
  388. deptName: employee.deptName,
  389. isManager: 0,
  390. };
  391. checkGroupEmployees.push(newRelation);
  392. }
  393. });
  394. res.json({ success: true, message: '添加成功' });
  395. },
  396. // 删除查核组人员
  397. 'POST /manager/CheckGroup/delCheckGroupEmployee': (req, res) => {
  398. const employeeIds = req.body;
  399. employeeIds.forEach((id) => {
  400. const index = checkGroupEmployees.findIndex(
  401. (emp) => emp.id === parseInt(id),
  402. );
  403. if (index !== -1) {
  404. checkGroupEmployees.splice(index, 1);
  405. }
  406. });
  407. res.json({ success: true, message: '删除成功' });
  408. },
  409. // 获取人员字典
  410. 'GET /manager/CheckGroup/getEmployeeDict': (req, res) => {
  411. res.json(employees);
  412. },
  413. };