index.tsx 4.7 KB

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