index.tsx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*
  2. * @Author: code4eat awesomedema@gmail.com
  3. * @Date: 2023-01-04 14:12:31
  4. * @LastEditors: code4eat awesomedema@gmail.com
  5. * @LastEditTime: 2023-04-19 15:07:25
  6. * @FilePath: /BudgetManaSystem/src/pages/budgetMana/oneBatch/index.tsx
  7. * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. */
  9. import BMSPagecontainer from '@/components/BMSPageContainer'
  10. import { BMSTable } from '@/components/BMSTable';
  11. import { getComputeDate } from '@/pages/Home/service';
  12. import { ActionType, ProColumns } from '@ant-design/pro-components';
  13. import { Breadcrumb} from 'antd';
  14. import { useEffect, useRef, useState } from 'react';
  15. import { getData, getRedirReportData } from './service';
  16. import './style.less';
  17. import { create, all, string } from 'mathjs'
  18. import { useParams } from '@umijs/max';
  19. const config = {
  20. number: 'number',
  21. precision: 14
  22. }
  23. const math = create(all, config as any);
  24. // const {search} = location;
  25. // const urlparams = new URLSearchParams(search);
  26. // const urlReportCode = urlparams.get('reportCode') as string
  27. const ReportTemplate = () => {
  28. const { reportCode:urlReportCode } = useParams();
  29. const [tableColumn, set_tableColumn] = useState<ProColumns[] | any[]>([]);
  30. const [currentComputeDate, set_currentComputeDate] = useState<string | undefined>();
  31. const [breadCrumbList,set_breadCrumbList] = useState<any[]>([]);
  32. const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ reportCode:urlReportCode });
  33. const tableRef = useRef<ActionType>();
  34. const [tableH, set_tableH] = useState(0);
  35. const [step,set_step] = useState(0);
  36. const reportJumphandle = (reportData:any)=>{
  37. console.log({reportData});
  38. let parameter:{[key:string]:any} = {};
  39. const {redirectParameter = undefined} = reportData;
  40. const _step = step + 1;
  41. if(redirectParameter){
  42. const tempArr = redirectParameter.split('|');
  43. tempArr.forEach((element:string) => {
  44. parameter[`${element}`] = reportData[`${element}`]
  45. });
  46. }
  47. set_breadCrumbList(
  48. [...breadCrumbList,
  49. {
  50. index:_step,
  51. name:reportData[`report_name`],
  52. params:{
  53. reportCode:reportData.redirectReportCode,
  54. parameter
  55. }
  56. }
  57. ]
  58. );
  59. set_step(_step);
  60. set_tableDataFilterParams({...tableDataFilterParams,reportCode:reportData.redirectReportCode,parameter})
  61. }
  62. const getTableData = async (params: any, sort: any, filter: any) => {
  63. const {reportCode,parameter} = params;
  64. let resp:any = undefined;
  65. if(step != 0){
  66. //报表跳转
  67. resp = await getRedirReportData(
  68. reportCode,
  69. parameter
  70. );
  71. }
  72. if(step == 0){
  73. //首次获取表格数据
  74. resp = await getData(
  75. reportCode,
  76. parameter
  77. );
  78. }
  79. if (resp) {
  80. const { title,data:assignmentData } = resp;
  81. const columns = title.map((item: any,index:number) => {
  82. return {
  83. title: item.name,
  84. dataIndex: `${item.columnName}`,
  85. key: `${item.columnName}`,
  86. width: 100,
  87. render:(_:any,record:any)=>{
  88. if(item.redirect){
  89. return <a className='active' onClick={()=>reportJumphandle({...item,...record})}>{_}</a>
  90. }
  91. return <span >{_}</span>
  92. }
  93. }
  94. });
  95. set_tableColumn([ ...columns]);
  96. const data = assignmentData.map((item: any) => {
  97. let rowData: { [key: string]: any } = {};
  98. for (let i = 0; i < item.length; i++) {
  99. rowData[`${title[i].columnName}`] = item[i].value
  100. }
  101. return { ...item, ...rowData,id:Math.random(), columns }
  102. });
  103. return {
  104. data,
  105. success: true
  106. }
  107. }
  108. return []
  109. }
  110. const getCurrentComputeDate = async () => {
  111. const resp = await getComputeDate();
  112. set_tableDataFilterParams({...tableDataFilterParams,parameter:{...tableDataFilterParams.parameter,compute_date:resp}});
  113. set_currentComputeDate(resp);
  114. }
  115. const handleResize = (e: any) => {
  116. const wH = e.target.innerHeight;
  117. const tableHeight = wH - 290;
  118. set_tableH(tableHeight);
  119. }
  120. function doResize() {
  121. setTimeout(() => {
  122. const ev: any = new Event('resize');
  123. window.dispatchEvent(ev);
  124. }, 0)
  125. }
  126. //面包屑跳转
  127. const switchHandle = (data:any)=>{
  128. set_step(data.index);
  129. const _breadCrumbList = breadCrumbList.filter((a:any)=>a.index<=data.index);
  130. set_breadCrumbList([..._breadCrumbList]);
  131. set_tableDataFilterParams({...tableDataFilterParams,...data.params});
  132. }
  133. useEffect(() => {
  134. // 在这里处理路由参数变化的逻辑
  135. set_tableDataFilterParams({reportCode:urlReportCode,parameter:{compute_date:currentComputeDate}});
  136. set_breadCrumbList([{
  137. name:'首页',
  138. params:{reportCode:urlReportCode,parameter:{compute_date:currentComputeDate}}
  139. }])
  140. }, [urlReportCode]);
  141. useEffect(() => {
  142. getCurrentComputeDate();
  143. window.addEventListener('resize', (e) => handleResize(e)) //监听窗口大小改变
  144. doResize();
  145. return () => {
  146. window.removeEventListener('resize', (e) => handleResize(e))
  147. }
  148. }, [])
  149. return (
  150. <BMSPagecontainer className='ReportTemplate' title={`核算年月:${currentComputeDate}`}>
  151. <div className='breadcrumb'>
  152. {
  153. breadCrumbList.length>1&&breadCrumbList.map((item:any,index:number)=>{
  154. return (
  155. <span className={index != step?'tab':'tab actived'} key={index} onClick={()=>{index != step && switchHandle(item)}}>{item.name}{index == breadCrumbList.length - 1?'':' / '}</span>
  156. )
  157. })
  158. }
  159. </div>
  160. <div className='content'>
  161. {currentComputeDate&&<BMSTable actionRef={tableRef} rowKey='id' pagination={false} columns={tableColumn as ProColumns[]}
  162. params={tableDataFilterParams}
  163. scroll={{ x: 100 * tableColumn.length, y: tableH }}
  164. request={(params, sort, filter) => getTableData(params, sort, filter)}
  165. />}
  166. </div>
  167. </BMSPagecontainer>
  168. )
  169. }
  170. export default ReportTemplate