TaskDetail.tsx 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import PageContent from '@/components/PageContent';
  2. import PageTitle from '@/components/PageTitle';
  3. import {
  4. IMandateDetailType,
  5. IUserType,
  6. IWorkOrderType,
  7. } from '@/pages/TaskManage/Detail/TaskList/taskList.types';
  8. import {
  9. MandateClass,
  10. MandateStatus,
  11. MandateType,
  12. OrderStatus,
  13. OrderType,
  14. } from '@/pages/TaskManage/constent';
  15. import { getMandateDetail } from '@/services/TaskManage';
  16. import { useLocation } from '@@/exports';
  17. import { connect, useRequest } from '@umijs/max';
  18. import { Button, Col, Divider, Row } from 'antd';
  19. import { useEffect, useState } from 'react';
  20. import { useNavigate } from 'umi';
  21. import styles from './taskDetail.less';
  22. interface IPropsType {
  23. userList: IUserType[];
  24. dispatch: (args: { type: string; payload: object }) => void;
  25. }
  26. function TaskDetail(props: IPropsType) {
  27. const { userList, dispatch } = props;
  28. const location = useLocation();
  29. const queryParams = new URLSearchParams(location.search);
  30. const project_id = Number(queryParams.get('project_id'));
  31. const mandate_id = Number(queryParams.get('mandate_id'));
  32. const navigate = useNavigate();
  33. const [mandateDetail, setMandateDetail] = useState<IMandateDetailType>();
  34. const [handledWorkOrder, setHandledWorkOrder] = useState<IWorkOrderType[]>(
  35. [],
  36. );
  37. const { refresh: refreshDetail } = useRequest(getMandateDetail, {
  38. defaultParams: [
  39. {
  40. mandate_id,
  41. project_id,
  42. },
  43. ],
  44. formatResult: (result) => {
  45. const tempMandate: IMandateDetailType = {
  46. ...result.data,
  47. Status: MandateStatus.find((item) => item.value === result.data.Status),
  48. MandateClass: MandateClass.find(
  49. (item) => item.value === result.data.MandateClass,
  50. ),
  51. MandateType: MandateType.find(
  52. (item) => item.value === result.data.MandateType,
  53. ),
  54. ResponsiblePeople: userList.find(
  55. (item) => item.ID === result.data.ResponsiblePeople,
  56. ),
  57. };
  58. const workOrder = result.data.Records;
  59. const tempOrder = workOrder.map((record: IWorkOrderType) => {
  60. return {
  61. ...record,
  62. RecordType: OrderType.find(
  63. (item) => item.value === record.RecordType,
  64. ),
  65. Status: OrderStatus.find((item) => item.value === record.Status),
  66. Responsible: userList.find((item) => item.ID === record.Responsible),
  67. };
  68. });
  69. setMandateDetail(tempMandate);
  70. setHandledWorkOrder(tempOrder);
  71. },
  72. });
  73. useEffect(() => {
  74. if (userList.length === 0) {
  75. dispatch({
  76. type: 'taskUser/fetchUserList',
  77. payload: { project_id },
  78. });
  79. }
  80. }, []);
  81. const goTaskOrder = (orderID: number, orderType: number) => {
  82. navigate(
  83. `/task-manage/list/order-detail?project_id=${project_id}&order_id=${orderID}&order_type=${orderType}`,
  84. );
  85. };
  86. return (
  87. <PageContent>
  88. <PageTitle returnable>任务详情</PageTitle>
  89. <div className={`${styles.cardContainer} card-box`}>
  90. <div className={styles.normalInfo}>
  91. <Row className={styles.infoRow}>
  92. <Col className={styles.fontS18} span={16}>
  93. 时间:{mandateDetail?.CreateTime}
  94. </Col>
  95. {/*// @ts-ignore*/}
  96. <Col className={styles.fontS18} span={8}>
  97. {/*//@ts-ignore*/}
  98. 任务类别:{mandateDetail?.MandateClass?.label}
  99. </Col>
  100. </Row>
  101. <Row>
  102. <Col className={styles.fontS18} span={16}>
  103. {/*//@ts-ignore*/}
  104. 任务状态:{mandateDetail?.Status?.label}
  105. </Col>
  106. <Col className={styles.fontS18} span={8}>
  107. {/*// @ts-ignore*/}
  108. 任务负责人:{mandateDetail?.ResponsiblePeople?.CName}
  109. </Col>
  110. </Row>
  111. </div>
  112. <div className={styles.detailInfo}>
  113. <Row className={styles.infoRow}>
  114. <Col className={styles.fontS18} span={4}>
  115. 任务总结
  116. </Col>
  117. <Col className={styles.fontS18}>{mandateDetail?.Summary}</Col>
  118. </Row>
  119. <Row>
  120. <Col className={styles.fontS18} span={4}>
  121. 任务内容
  122. </Col>
  123. <Col className={styles.fontS18} span={20}>
  124. <Col>{mandateDetail?.Detail}</Col>
  125. {/*<Table />*/}
  126. </Col>
  127. </Row>
  128. </div>
  129. <div className={styles.relatedOrder}>
  130. <div
  131. className={styles.fontS22}
  132. style={{ marginLeft: '15px', marginBottom: '15px' }}
  133. >
  134. 关联工单
  135. </div>
  136. {handledWorkOrder.map((order) => {
  137. return (
  138. <div key={order.Id} className={styles.workOrderCard}>
  139. <div className={styles.leftInfo}>
  140. <Row className={styles.infoRow}>
  141. <Col className={styles.fontS18} span={12}>
  142. 工单编号:{order.Id}
  143. </Col>
  144. <Col className={styles.fontS18} span={12}>
  145. 时间:{order.CreateTime}
  146. </Col>
  147. </Row>
  148. <Row>
  149. <Col className={styles.fontS18} span={12}>
  150. 工单状态:
  151. <span style={{ color: '#5697e4' }}>
  152. {/*// @ts-ignore*/}
  153. {order.Status?.label}
  154. </span>
  155. </Col>
  156. <Col className={styles.fontS18} span={12}>
  157. {/*// @ts-ignore*/}
  158. 工单负责人:{order.Responsible?.CName}
  159. </Col>
  160. </Row>
  161. </div>
  162. <Divider type="vertical" style={{ height: '40px' }} />
  163. <div className={styles.rightButton}>
  164. <Button
  165. className={styles.fontS18}
  166. style={{ color: '#5697e4' }}
  167. type="text"
  168. size="large"
  169. onClick={() => {
  170. // @ts-ignore
  171. goTaskOrder(order.Id, order.RecordType?.value);
  172. }}
  173. >
  174. 查看工单
  175. </Button>
  176. </div>
  177. </div>
  178. );
  179. })}
  180. </div>
  181. </div>
  182. </PageContent>
  183. );
  184. }
  185. export default connect(({ taskUser }: any): { userList: IUserType[] } => {
  186. return {
  187. userList: taskUser.userList,
  188. };
  189. })(TaskDetail);