index.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import PageContent from '@/components/PageContent';
  2. import TabsContent from '@/components/TabsContent';
  3. import styles from '@/pages/TaskManage/index.less';
  4. import { getMandateList } from '@/services/TaskManage';
  5. import { CaretRightFilled } from '@ant-design/icons';
  6. import { connect, useParams } from '@umijs/max';
  7. import { List, Spin } from 'antd';
  8. import { BaseOptionType } from 'rc-select/es/Select';
  9. import { useEffect, useState } from 'react';
  10. import { useNavigate } from 'umi';
  11. import { MandateType, OrderType } from './constent';
  12. const TaskManage = (props) => {
  13. const { userList, dispatch } = props;
  14. const { projectID } = useParams();
  15. const project_id = Number(projectID === '' ? '0' : projectID);
  16. const navigate = useNavigate();
  17. const [mandateCount, setMandateCount] = useState<number[]>([0, 0, 0]);
  18. const [loading, setLoading] = useState(false);
  19. const [tab, setTab] = useState(localStorage.taskTab || '1');
  20. useEffect(() => {
  21. const requests = [];
  22. for (let i = 0; i < 4; i++) {
  23. requests.push(
  24. getMandateList({
  25. project_id,
  26. pageSize: 1,
  27. currentPage: 1,
  28. mandate_type: i + 1,
  29. }),
  30. );
  31. }
  32. setLoading(true);
  33. Promise.all(requests)
  34. .then((resList) => {
  35. if (resList.filter((item) => item.code !== 200).length) {
  36. throw new Error('请求错误');
  37. }
  38. const typeCount = [0, 0, 0, 0];
  39. resList.forEach((item, index) => {
  40. typeCount[index] = item.data.pagination?.total;
  41. });
  42. setMandateCount(typeCount);
  43. })
  44. .catch((err) => {
  45. console.log(err);
  46. })
  47. .finally(() => {
  48. setLoading(false);
  49. });
  50. }, []);
  51. useEffect(() => {
  52. if (userList.length === 0) {
  53. dispatch({
  54. type: 'taskUser/fetchUserList',
  55. payload: { project_id },
  56. });
  57. }
  58. }, []);
  59. const goTaskList = (item: number) => {
  60. navigate(`/task-manage/list?project_id=${project_id}&mandateType=${item}`);
  61. };
  62. const goWorkOrderList = (item: number) => {
  63. navigate(
  64. `/task-manage/work-order/list?project_id=${project_id}&order_type=${item}`,
  65. );
  66. };
  67. const makeTaskList = (item: BaseOptionType, index: number) => {
  68. return (
  69. <List.Item
  70. className={styles.listItem}
  71. onClick={() => {
  72. goTaskList(item.value);
  73. }}
  74. >
  75. <List.Item.Meta
  76. title={<span className={styles.itemLabel}>{item.label}</span>}
  77. />
  78. <div className={styles.itemCount}>
  79. <div className={styles.countNumber}>{mandateCount[index]}</div>
  80. <div className={styles.counterText}>任务数量</div>
  81. </div>
  82. <CaretRightFilled style={{ fontSize: '0.3rem', color: '#BCBABA' }} />
  83. </List.Item>
  84. );
  85. };
  86. const makeWorkOrderList = (item: BaseOptionType) => {
  87. return (
  88. <List.Item
  89. className={styles.listItem}
  90. onClick={() => {
  91. goWorkOrderList(item.value);
  92. }}
  93. >
  94. <List.Item.Meta
  95. title={<span className={styles.itemLabel}>{item.label}</span>}
  96. />
  97. <CaretRightFilled style={{ fontSize: '0.3rem', color: '#BCBABA' }} />
  98. </List.Item>
  99. );
  100. };
  101. const onTabChange = (key: string) => {
  102. setTab(key);
  103. localStorage.setItem('taskTab', key);
  104. };
  105. return (
  106. <PageContent tabs>
  107. <TabsContent
  108. defaultActiveKey={tab}
  109. onChange={onTabChange}
  110. items={[
  111. {
  112. label: `任务管理`,
  113. key: '1',
  114. children: (
  115. <div className={styles.container}>
  116. <Spin spinning={loading}>
  117. <List
  118. className={styles.taskList}
  119. bordered
  120. itemLayout="horizontal"
  121. dataSource={MandateType}
  122. renderItem={makeTaskList}
  123. pagination={false}
  124. />
  125. </Spin>
  126. </div>
  127. ),
  128. },
  129. {
  130. label: `工单管理`,
  131. key: '2',
  132. children: (
  133. <div className={styles.container}>
  134. <Spin spinning={loading}>
  135. <List
  136. className={styles.taskList}
  137. bordered
  138. itemLayout="horizontal"
  139. dataSource={OrderType}
  140. renderItem={makeWorkOrderList}
  141. pagination={false}
  142. />
  143. </Spin>
  144. </div>
  145. ),
  146. },
  147. ]}
  148. />
  149. </PageContent>
  150. );
  151. };
  152. export default connect(({ taskUser }: any): { userList: IUserType[] } => {
  153. return {
  154. userList: taskUser.userList,
  155. };
  156. })(TaskManage);