OaAuditDetail.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // 审批详情
  2. import React, { useState, useMemo, useEffect } from 'react';
  3. import { Steps, Button, Tooltip, message, Spin } from 'antd';
  4. import { useParams, useRequest, useModel, useLocation } from 'umi';
  5. import AuditModal from './components/AuditModal';
  6. import FormAndFilesNode from './components/FormAndFilesNode';
  7. import { queryAuditDetail, updateAuditList } from '@/services/boom';
  8. import { queryGetContractList } from '@/services/contract';
  9. import PageContent from '@/components/PageContent';
  10. import SignModal from './components/SignModal';
  11. import ContractDetail from '../ContractManager/detail';
  12. import { Type } from '../Profile';
  13. import { queryContractDetail } from '../../services/contract';
  14. function OaAuditDetail() {
  15. const { initialState } = useModel('@@initialState');
  16. const user = initialState?.user || {};
  17. const [auditVisible, setAuditVisible] = useState(false);
  18. const location = useLocation();
  19. const {
  20. state: { id, type, code },
  21. } = location;
  22. const [visible, setVisible] = useState(false);
  23. useEffect(() => {
  24. if (type == Type.CON) runCon({ code });
  25. }, [type]);
  26. const { data, loading, refresh } = useRequest(queryAuditDetail, {
  27. defaultParams: [{ id }],
  28. });
  29. const {
  30. current_seq,
  31. form,
  32. OaAuditList,
  33. Files = [],
  34. audit_status,
  35. AuditorInfo,
  36. } = data || {};
  37. // if (OaAuditList) console.log(JSON.stringify(OaAuditList));
  38. //请求列表
  39. const {
  40. data: conData,
  41. run: runCon,
  42. loading: conLoading,
  43. } = useRequest((data) => queryContractDetail(data), {
  44. manual: true,
  45. formatResult: (res) => {
  46. return res?.data?.detail;
  47. },
  48. onSuccess: (res) => {},
  49. });
  50. // console.log(conData);
  51. const getDescription = (node) => {
  52. let str = node?.AuditRoleInfo
  53. ? `审批人:${node?.AuditRoleInfo.Name || '-'}`
  54. : `审批人:${node?.AuditorUser.CName || '-'}`;
  55. if (node.desc) {
  56. return (
  57. <div>
  58. {str}
  59. <div>
  60. <Tooltip title={node.desc}>
  61. <span style={{ color: '#1A73E8', textDecoration: 'undeline' }}>
  62. 审批意见
  63. </span>
  64. </Tooltip>
  65. </div>
  66. </div>
  67. );
  68. }
  69. return str;
  70. };
  71. const updateRes = useRequest(
  72. (values) => {
  73. let list = OaAuditList.map((item) => item.auditor);
  74. if (values.type == 'before') {
  75. list.splice(current_seq - 1, 0, values.approver);
  76. } else {
  77. list.splice(current_seq, 0, values.approver);
  78. }
  79. return updateAuditList(
  80. {
  81. oa_id: Number(id),
  82. audit_list: list,
  83. },
  84. values.type == 'after',
  85. );
  86. },
  87. {
  88. manual: true,
  89. onSuccess() {
  90. message.success('加签成功');
  91. setVisible(false);
  92. refresh();
  93. },
  94. },
  95. );
  96. const btns = useMemo(() => {
  97. if (!user || !data) return;
  98. if (
  99. user.ID == AuditorInfo?.ID &&
  100. // 0 待审核; 1 上级审批通过
  101. (audit_status === 0 || audit_status === 1)
  102. ) {
  103. return [
  104. <Button
  105. key={1}
  106. style={{ marginRight: 10 }}
  107. type="primary"
  108. onClick={() => setAuditVisible(1)}
  109. >
  110. 审批通过
  111. </Button>,
  112. <Button key={2} onClick={() => setAuditVisible(2)} danger>
  113. 审批拒绝
  114. </Button>,
  115. <Button key={3} onClick={() => setVisible(true)}>
  116. 加签
  117. </Button>,
  118. ];
  119. }
  120. return [];
  121. }, [user, data]);
  122. return (
  123. <PageContent extra={btns} loading={loading && conLoading}>
  124. <Steps
  125. style={{ marginBottom: 20 }}
  126. current={audit_status == 3 ? OaAuditList?.length : current_seq - 1}
  127. status={audit_status == 2 ? 'error' : 'process'}
  128. items={OaAuditList?.map((item) => ({
  129. title: item.seq_name,
  130. description: getDescription(item),
  131. }))}
  132. ></Steps>
  133. {type == Type.OA ? (
  134. <FormAndFilesNode formData={form} fileList={Files} />
  135. ) : (
  136. <ContractDetail data={conData} />
  137. )}
  138. <AuditModal
  139. id={id}
  140. visible={auditVisible}
  141. onClose={() => setAuditVisible(false)}
  142. onOk={refresh}
  143. />
  144. <SignModal
  145. visible={visible}
  146. onCancel={() => setVisible(false)}
  147. onCreate={(values) => updateRes.run(values)}
  148. loading={updateRes.loading}
  149. />
  150. </PageContent>
  151. );
  152. }
  153. export default OaAuditDetail;